UNPKG

keli-msgrecall

Version:

群聊反撤回,让我康康撤回了什么好康的!!!

110 lines (100 loc) 4.09 kB
const { Plugin, segment } = require('keli') const { version } = require('./package.json') const plugin = new Plugin('msgrecall', version) const config = { enableGroupList: [], sendToGroup: true, sendToMainAdmin: true, sendForwardMsg: true} plugin.onMounted((bot, admins) => { plugin.saveConfig(Object.assign(config, plugin.loadConfig())) /** * 保存符合条件的每一条群聊的消息 * mid 该消息的 message_id * message 撤回的消息 */ let data = new Array(); let mid, message; plugin.onGroupMessage((event) => { // 加个判断是因为电脑发的图片什么的属于群文件,获取不了消息(提取消息很麻烦,懒得写) if(event.message[0].type !== 'file'){ mid = event.message_id; message = event.message; data.push({"message_id": mid, "message": message}) } //** 每隔两分钟清理已经不能撤回的消息 */ setTimeout(()=>data.shift(), 120000) }) // 直接私聊机器人添加群聊,更方便啦~ plugin.onAdminCmd("/msgrecall", (event, params, options) => { const [param, group_id] = params if(param === 'add'){ if(~config.enableGroupList.indexOf(group_id)){ event.reply('[群聊反撤回]启用群聊中已有该群聊,请勿重复添加') return } else { config.enableGroupList.push(group_id) plugin.saveConfig(config) event.reply("[群聊反撤回]群聊添加成功,重载生效") } } else if(param === 'delete'){ config.enableGroupList.forEach(e => { if(e === group_id){ if(~config.enableGroupList.indexOf(group_id)){ config.enableGroupList.splice(config.enableGroupList.indexOf(group_id), 1) plugin.saveConfig(config) event.reply("[群聊反撤回]群聊删除成功,重载生效") } else { event.reply('没有找到该群号') } } }) } else { event.reply('/msgrecall add [群号]\n/msgrecall delete [群号]') } }) //** 群聊消息反撤回 */ plugin.on("notice.group.recall", async event => { // 判断是不是 enableGroupList 里的群聊且撤回消息的不能是本机器人 let recall_msg; // 先遍历数组 data for(let i = 0; i < data.length;i++){ if(data[i]['message_id'] === event.message_id){ recall_msg = data[i]['message']; break; } } // 捕捉错误 if(recall_msg == undefined || event.user_id == bot.uin) { plugin.logger.warn("[群聊反撤回]: 该消息忽略,原因:1.是群文件消息;2.是机器人自己的消息;3.是机器人上线前发的消息") return; }; // 是否将撤回消息发送至群聊 if (config.enableGroupList.includes(event.group_id) && config.sendToGroup) { const message = [ segment.at(event.user_id), `撤回了:\n`, ] message.push.apply(message, recall_msg); await bot.sendGroupMsg(event.group_id, message); } // 撤回的消息是否发给 mainAdmin if(config.sendToMainAdmin) { let msg = `--群消息反撤回--\n群聊: ${event.group_id}\n用户: ${event.user_id}` if(config.sendForwardMsg){ // 获取网名 let friendInfo = await bot.getStrangerInfo(event.user_id); // 合并转发 let list = [ {message: msg, user_id: event.user_id, nickname: friendInfo.nickname}, {message: recall_msg, user_id: event.user_id, nickname: friendInfo.nickname} ]; // 备忘:dm 为 true 为私聊消息,false 为群聊消息,QQ 底层里私聊与群聊的视频、图片、语音资源都是不一样的 // 可能会互不兼容 let forwardMsg = await bot.makeForwardMsg(list, "群消息反撤回", undefined, true) await bot.sendPrivateMsg(plugin.mainAdmin, forwardMsg) } else { await bot.sendPrivateMsg(plugin.mainAdmin, msg) setTimeout(()=>{bot.sendPrivateMsg(plugin.mainAdmin, recall_msg)}, 1000) } } }) }) module.exports = { plugin }