// ==UserScript==
// @name 自动打断复读插件
// @author 檀轶步棋
// @version 1.0.2
// @timestamp 1674216875
// @license Apache-2
// ==/UserScript==
let startReplyOn = 5; // 连续3条相同消息后触发打断
let plusExt = seal.ext.find("plusone");
if (!plusExt) {
plusExt = seal.ext.new("plusone", "檀轶步棋", "1.0.2");
seal.ext.register(plusExt);
}
// 存储各群的最后消息、计数器和回复状态
let lastMessages = new Map();
let msgCounts = new Map();
let hasReplied = new Map();
// 获取群组最后一条消息
function getLastMessageOf(ctx) {
if (lastMessages.has(ctx.group.groupId)) {
return lastMessages.get(ctx.group.groupId);
}
throw new Error("该群组的监听器还未创建。");
}
plusExt.onNotCommandReceived = (ctx, msg) => {
const groupId = ctx.group.groupId;
// 初始化群组记录(如果不存在)
if (!lastMessages.has(groupId)) {
lastMessages.set(groupId, "");
msgCounts.set(groupId, 0);
hasReplied.set(groupId, false);
}
// 未回复过重复消息时的处理
if (!hasReplied.get(groupId)) {
const lastMsg = lastMessages.get(groupId);
if (lastMsg !== msg.message) {
// 新消息:重置计数
lastMessages.set(groupId, msg.message);
msgCounts.set(groupId, 1);
} else {
// 重复消息:增加计数
const currentCount = msgCounts.get(groupId) + 1;
msgCounts.set(groupId, currentCount);
// 达到触发条件:发送打断消息
if (currentCount >= startReplyOn) {
hasReplied.set(groupId, true);
seal.replyToSender(ctx, msg, "笨蛋"); // 打断复读消息
msgCounts.set(groupId, 1); // 重置计数
return seal.ext.newCmdExecuteResult(true);
}
}
}
// 已回复过但消息内容变化时重置状态
else if (lastMessages.get(groupId) !== msg.message) {
hasReplied.set(groupId, false);
lastMessages.set(groupId, msg.message);
msgCounts.set(groupId, 1);
}
return seal.ext.newCmdExecuteResult(false);
};