编辑代码

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