// ==UserScript==
// @name 复读打断插件2
// @author 檀轶步棋
// @version 1.1.0
// @timestamp 1674216876
// @license Apache-2
// ==/UserScript==
// 配置项
const config = {
triggerCount: 5, // 触发打断的复读次数
cooldown: 5000, // 防连发冷却时间(ms)
interruptMessages: [ // 随机打断回复内容
"吵死了笨蛋",
"复读终止(^ω^)",
"…好热闹啊",
"你们在+1什么",
"?"
]
};
let plusExt = seal.ext.find('plusone');
if (!plusExt) {
plusExt = seal.ext.new('plusone', '檀轶步棋', '1.1.0');
seal.ext.register(plusExt);
}
// 状态存储
const groupStates = new Map();
plusExt.onNotCommandReceived = (ctx, msg) => {
const groupId = ctx.group.groupId;
// 初始化群组状态
if (!groupStates.has(groupId)) {
groupStates.set(groupId, {
lastMessage: '',
count: 0,
lastReplyTime: 0,
isCoolingDown: false
});
}
const state = groupStates.get(groupId);
const currentTime = Date.now();
// 冷却检测
if (state.isCoolingDown && currentTime - state.lastReplyTime < config.cooldown) {
return seal.ext.newCmdExecuteResult(false);
}
state.isCoolingDown = false;
// 消息处理
if (msg.message === state.lastMessage) {
state.count++;
// 触发打断
if (state.count >= config.triggerCount) {
// 随机选择回复内容
const randomIndex = Math.floor(Math.random() * config.interruptMessages.length);
const reply = config.interruptMessages[randomIndex];
seal.replyToSender(ctx, msg, reply);
// 重置状态并设置冷却
state.count = 0;
state.lastReplyTime = currentTime;
state.isCoolingDown = true;
return seal.ext.newCmdExecuteResult(true);
}
} else {
// 消息变化时重置计数
state.lastMessage = msg.message;
state.count = 1;
}
return seal.ext.newCmdExecuteResult(false);
};