plugins_message_seasons.js

import { DMessage } from '../../models/index.js';
import { FHelp } from '../../utils/index.js';
import { FNullMessagePlugin } from './null.js';

/**
 * @class
 * @summary 季节消息
 * @classdesc 与季节相关的消息数据类
 * @memberof module:plugins
 * @alias DSeasonsMessage
 * @mixin
 */
export class DSeasonsMessage {
  /**
   * 指定的季节日期,
   * 例: 01/01, 02/14,
   * 如果为 null 则不显示消息
   * @summary 日期
   * @type {?string}
   * @default null
   */
  date = null;

  /**
   * 用于指示消息是否只显示一次
   * @summary 执行一次
   * @type {?boolean}
   * @default true
   */
  once = true;
}

/**
 * @class
 * @summary 季节消息插件
 * @classdesc 季节类型的消息提示插件
 * @hideconstructor
 * @extends {FNullMessagePlugin}
 * @memberof module:plugins
 * @alias FSeasonsMessagePlugin
 */
export class FSeasonsMessagePlugin extends FNullMessagePlugin {
  /**
   * @default 'seasonsMessage'
   * @override
   */
  _name = 'seasonsMessage';

  /**
   * @default 'seasons'
   * @override
   */
  _type = 'seasons';

  /**
   * @default 16
   * @override
   */
  _priority = 16;

  /**
   * @override
   * @this DMessageExtend
   */
  condition() {
    if (this.once === true) {
      // 只支持一次则重新赋值为 F 函数
      this.condition = FHelp.F;
    }
    const date = new Date(this.date + '');
    const day = date.getDate();
    const mon = date.getMonth() + 1;
    if (FHelp.isNotValid(day) || FHelp.isNotValid(mon)) {
      return false;
    }
    const now = new Date();
    return day === now.getDate() && mon === (now.getMonth() + 1);
  }

  /**
   * @override
   */
  mixin() {
    FHelp.mixin(DMessage, DSeasonsMessage);
  }
}