聊天:添加跑马灯功能
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import { MarqueeType, MarqueeModel } from "../db/Marquee";
|
||||
import { MARQUEE_TYPE } from "../consts";
|
||||
import { scheduleJob } from 'node-schedule';
|
||||
import { createMarqueeMsg as sysCreateMarqueeMsg, pushMarqueeMsg as sysPushMarqueeMsg } from './sysChatService';
|
||||
import { GroupMessageType } from "../db/GroupMessage";
|
||||
|
||||
export async function initMarquee() {
|
||||
const marquees = await MarqueeModel.findEffectiveMarque();
|
||||
for(let marquee of marquees) {
|
||||
await generateMarqueeSchedule(marquee);
|
||||
}
|
||||
}
|
||||
|
||||
export async function setMarquee(code: string) {
|
||||
let marquee = await MarqueeModel.findByCode(code);
|
||||
if(marquee.type == MARQUEE_TYPE.INSTANT) {
|
||||
let msgDatas = await createMarqueeMsg(marquee);
|
||||
await pushMarqueeMsg(msgDatas);
|
||||
} else {
|
||||
await generateMarqueeSchedule(marquee);
|
||||
}
|
||||
}
|
||||
|
||||
async function generateMarqueeSchedule(marquee: MarqueeType) {
|
||||
if(marquee.type != MARQUEE_TYPE.SCHEDULE) return false;
|
||||
if(marquee.startTime.getTime() >= marquee.endTime.getTime()) return false
|
||||
let startJob = scheduleJob(`start${marquee.code}`, marquee.startTime.getTime(), async () => {
|
||||
console.log('************', `跑马灯定时器 ${marquee.code}开始`, '************');
|
||||
let msgDatas = await createMarqueeMsg(marquee);
|
||||
await pushMarqueeMsg(msgDatas);
|
||||
let secondsJob = scheduleJob(`setSeconds${marquee.code}`, `*/${marquee.interval} * * * * *`, async () => {
|
||||
await pushMarqueeMsg(msgDatas);
|
||||
});
|
||||
let endJob = scheduleJob(`end${marquee.code}`, marquee.endTime.getTime(), () => {
|
||||
if(startJob) {
|
||||
startJob.cancel();
|
||||
startJob = undefined;
|
||||
}
|
||||
if(secondsJob) {
|
||||
secondsJob.cancel();
|
||||
secondsJob = undefined;
|
||||
}
|
||||
if(endJob) {
|
||||
endJob.cancel();
|
||||
endJob = undefined;
|
||||
}
|
||||
});
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
async function createMarqueeMsg(marquee: MarqueeType) {
|
||||
let { serverIds, content } = marquee;
|
||||
let msgDatas: GroupMessageType[] = [];
|
||||
for(let serverId of serverIds) {
|
||||
let msgData = await sysCreateMarqueeMsg('', '系统', serverId, content);
|
||||
msgDatas.push(msgData);
|
||||
}
|
||||
return msgDatas;
|
||||
}
|
||||
|
||||
async function pushMarqueeMsg(msgDatas: GroupMessageType[]) {
|
||||
for(let msgData of msgDatas) {
|
||||
await sysPushMarqueeMsg(msgData);
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import { pinus } from 'pinus';
|
||||
import { resResult } from '../pubUtils/util';
|
||||
import { BossInstanceType } from '../db/BossInstance';
|
||||
import { getSimpleRoleInfo } from './roleService';
|
||||
import { GroupMessageType } from '../db/GroupMessage';
|
||||
|
||||
async function pushNormalHeroInfoBySource(roleId: string, roleName: string, serverId: number | string, source: number, heroInfo: Partial<HeroType>) {
|
||||
const hero = pick(heroInfo, ['hName', 'hid', 'seqId', 'quality', 'star', 'starStage', 'colorStar', 'colorStarStage']);
|
||||
@@ -140,6 +141,15 @@ export async function pushVestigeFirstMsg(roleId: string, roleName: string, serv
|
||||
return result;
|
||||
}
|
||||
|
||||
export async function createMarqueeMsg(roleId: string, roleName: string, serverId: number | string, content: string) {
|
||||
const msgData = await createGroupMsg(roleId, roleName, CHANNEL_PREFIX.SYS, `${serverId}`, MSG_TYPE.RICH_TEXT, MSG_SOURCE.SEND_MARQUEE, content, null, null);
|
||||
return msgData;
|
||||
}
|
||||
|
||||
export async function pushMarqueeMsg(msgData: GroupMessageType) {
|
||||
await pushGroupMsgToRoom(msgData);
|
||||
}
|
||||
|
||||
function shouldPushTowerMsg(lv: number) {
|
||||
// 100 层之后每 50 层触发
|
||||
return lv >= 100 && lv % 50 === 0;
|
||||
|
||||
@@ -27,6 +27,7 @@ import { dispatch } from '../util/dispatcher';
|
||||
import { Rank } from './rankService';
|
||||
import { checkTask } from './taskService';
|
||||
import { everydayRefresh } from './connectorService';
|
||||
import { initMarquee } from './marqueeService';
|
||||
|
||||
const PER_SECOND = 1 * 1000;
|
||||
const PER_DAY = 24 * 60 * 60;
|
||||
@@ -83,6 +84,9 @@ export async function init() {
|
||||
// 每天5点推送刷新时间消息
|
||||
// 顺便每天0点计算前一天活跃玩家中位数战力
|
||||
scheduleJob('everyDayRefresh', `0 0 ${REFRESH_TIME} * * ?`, everydayRefresh);
|
||||
|
||||
// 跑马灯
|
||||
await initMarquee();
|
||||
}
|
||||
|
||||
function setPvpSeasonSchdule() {
|
||||
@@ -388,7 +392,7 @@ async function guildActivityStartSchedule() {
|
||||
}
|
||||
|
||||
export async function guildActivityStart(dicGuildActivity?: DicGuildActivity) {
|
||||
console.log('***********开始军团晚间活动****')
|
||||
console.log('*******开始军团晚间活动****')
|
||||
if(!dicGuildActivity) dicGuildActivity = getTodayGuildActivity();
|
||||
if(!dicGuildActivity) return;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user