UNPKG

@xiling-bot/replace

Version:
93 lines (88 loc) 2.43 kB
// 复读判断模块 let previousMessage = {}, // 上一条消息 ignorant = {}, // 冷却期消息 commend = false, commandPrefix = "", lastMsg = {}, timeOut = 2 * 60 * 1000; // 冷却时间 // 判断是否处于冷却期 function includesMsg(replaceText, groupId) { let newTime = new Date().getTime(), newArr = []; for (var i = 0; i < ignorant[groupId].length; i++) { if (timeOut > newTime - ignorant[groupId][i].time) { newArr.push(ignorant[groupId][i]); } } ignorant[groupId] = newArr; // 判断消息是否在数组内 return ignorant[groupId].find(el => { return el.msg === replaceText; }) } // 清除图片中的imageId function delImageId(messageChain) { return messageChain.map(element => { delete element.imageId; return element; }) } // 不复读含有特定单词的消息 function stopWord(replaceText) { let stopArr = ["QQ红包", "type: 'App'", "你的QQ暂不支持", "视频", "FlashImage"] return stopArr.find(el => { return replaceText.includes(el); }) } const replace = { name: "复读机", mounted(options) { commandPrefix = new RegExp(`^${options.commandPrefix}`); }, priority: { name: "命令检测", exce: (msg) => { let msgs = lastMsg; lastMsg = msg; if (commandPrefix.test(msgs.plain)) { commend = true; } else { commend = false; } return false; } }, passive: { name: "复读机", exce: (msg) => { // 如果上一条消息是命令,则不触发复读 if (commend) { return true; } let groupId = msg.sender.group.id, messageChain = msg.messageChain, replaceText = JSON.stringify(messageChain).replace(/{"type":"Source".+?},|"url":".+?,"/g, ""); if (!ignorant[groupId]) { ignorant[groupId] = []; } // 判断两条消息是否一致 if (replaceText === previousMessage[groupId] && !stopWord(replaceText)) { previousMessage[groupId] = ""; let time = new Date().getTime(); if (includesMsg(replaceText, groupId)) { previousMessage[groupId] = replaceText; return true; } else { ignorant[groupId].push({ msg: replaceText, time: time }); } let msgChain = delImageId(messageChain); msg.reply(msgChain, msg); } else { previousMessage[groupId] = replaceText; lastMsgId = messageChain[0].id; } return true; } } } module.exports = replace;