编辑代码

// ==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);
                                                                                                                                                                                                                                                                                                                                                                };