( sourceId: number, targetId: number )
| 744 | for (let i = 0; i < 20; i++) { |
| 745 | if (visited.has(currentId)) { |
| 746 | return { isCircular: true, message: `检测到间接循环:${currentId}` }; |
| 747 | } |
| 748 | |
| 749 | const rule = await getShiftRule(currentId); |
| 750 | if (!rule) break; |
| 751 | |
| 752 | const nextId = rule.target_id; |
| 753 | if (nextId === -1) break; |
| 754 | |
| 755 | visited.add(currentId); |
| 756 | currentId = nextId; |
| 757 | } |
| 758 | |
| 759 | return { isCircular: false, message: "" }; |
| 760 | } |
| 761 | |
| 762 | // Help text |
| 763 | const HELP_TEXT = `🚀 <b>转发规则管理插件</b> |
| 764 | |
| 765 | <b>📝 基础命令</b> |
| 766 | • <code>${mainPrefix}shift set <源> <目标> [选项]</code> - 设置转发规则 |
| 767 | • <code>${mainPrefix}shift list</code> - 查看所有规则 |
| 768 | • <code>${mainPrefix}shift del <序号></code> - 删除规则 |
| 769 | • <code>${mainPrefix}shift pause <序号></code> - 暂停规则 |
| 770 | • <code>${mainPrefix}shift resume <序号></code> - 恢复规则 |
| 771 | • <code>${mainPrefix}shift stats</code> - 查看转发统计 |
| 772 | |
| 773 | <b>🔍 过滤命令(黑名单模式)</b> |
| 774 | • <code>${mainPrefix}shift filter <序号> add <关键词></code> - 添加过滤词 |
| 775 | • <code>${mainPrefix}shift filter <序号> del <关键词></code> - 删除过滤词 |
| 776 | • <code>${mainPrefix}shift filter <序号> list</code> - 查看过滤词 |
no test coverage detected