| 721 | } |
| 722 | pendingTimers.clear(); |
| 723 | AutoRepeatManager.cleanup(); |
| 724 | } |
| 725 | // 修改类名 |
| 726 | description: string = HELP_TEXT; |
| 727 | |
| 728 | cmdHandlers: Record<string, (msg: Api.Message) => Promise<void>> = { |
| 729 | autorepeat: async (msg) => { // 修改命令名 |
| 730 | const client = await getGlobalClient(); |
| 731 | if (!client) { |
| 732 | await MessageManager.smartEdit(msg, "❌ 客户端未初始化"); |
| 733 | return; |
| 734 | } |
| 735 | await CommandHandlers.handleAutoRepeatCommand(msg); // 修改调用函数名 |
| 736 | }, |
| 737 | }; |
| 738 | |
| 739 | listenMessageHandler = async (msg: Api.Message) => { |
| 740 | try { |
| 741 | if (!msg) return; |
| 742 | |
| 743 | const msgDate = Number((msg as any).date); |
| 744 | if (!Number.isFinite(msgDate) || msgDate <= 0) return; |
| 745 | |
| 746 | // 忽略之前的旧消息(只处理实时消息) |
| 747 | if (Date.now() / 1000 - msgDate > 60) return; |
| 748 | |
| 749 | // 忽略自己发送的消息 |
| 750 | if (msg.out) return; |
| 751 | |
| 752 | // 仅使用 update 已携带的实体,避免无效/已退出频道触发额外 RPC 和错误日志。 |
| 753 | // 缺少实体时无法可靠判断机器人身份,宁可跳过本条消息。 |
| 754 | const sender = msg.sender; |
| 755 | if (!sender) return; |
| 756 | if (sender instanceof Api.User && sender.bot) { |
| 757 | return; |
| 758 | } |
| 759 | |
| 760 | await AutoRepeatManager.checkAndRepeat(msg); |
| 761 | } catch (e: any) { |
| 762 | console.error(`[autorepeat] listenMessageHandler error:`, e?.message || e); |
| 763 | } |
| 764 | }; |
| 765 | } |
| 766 | |
| 767 | // 导出插件实例 |
| 768 | export default new AutoRepeatPlugin(); // 修改实例名 |
nothing calls this directly
no test coverage detected