66 lines
2.4 KiB
TypeScript
66 lines
2.4 KiB
TypeScript
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);
|
|
}
|
|
} |