# TG Forwarder 硬编码黑名单误杀 USDT 信号 (2026-09-22 实战) ## 事故 用户反映"监听频道要更新" → 排查发现 forwarder 一直在跑, 但日志显示: ``` [用户] 消息命中硬编码黑名单, 跳过转发 最终决定: 不转发 ``` **根因**: `/app/handlers/user_handler.py` 的 `HARD_BLACKLIST_PATTERNS` 含 `r'(?i)usdt|cny|套现'` 和裸 `带单|指导|喊单|牛牛老师`、`\bVIP\b|\b老师\b`。 而**所有信号格式都带 USDT**(【币种】:BTCUSDT 永续), 每条都命中 → 信号时有时无。 ## 修复 (收窄正则) ```python # 修复前 (误杀) r'(?i)usdt|cny|套现', r'(?i)带单|指导|喊单|牛牛老师', r'(?i)\bVIP\b|\b老师\b', # 修复后 r'(?i)(usdt|cny)(?!永续|usdt).{0,4}套现|套现', # 只拦"套现" r'(?i)牛牛老师|喊单指导', # 去掉裸 带单/指导/喊单 r'(?i)\bVIP群\b|付费指导', # 收窄 ``` 改完必须 `docker restart telegram-forwarder`。 ## 两个频道区分 (重要, 易混) | 频道 | chat_id | 标题 | 监听状态 | |---|---|---|---| | @shipan_jiankong | 2651333064 | 币圈实盘监控 \| 熬鹰 风寻 (新) | ❌ 未监听 | | @jiankongshipan | 3805472665 | 实盘监控 (旧) | ✅ 当前监听, 信号来源 | forward_rules: source=chats.id 1(=3805472665) → target=chats.id 2(=-1003966251111 交易信号群)。 ## 双白名单 AND 校验 (v4.5.4, 未动) 消息必须同时含交易员关键词(麻吉/魏神/熬鹰/风寻/狙击手/百发百胜) + 信号类型(开仓/平仓/加仓/减仓)才转发。 ## 排查手法 - 规则库: 容器内 `python3` + sqlite3 读 `/app/db/forward.db` (chats/forward_rules/keywords 表) - session 被主进程锁 → `cp /app/sessions/user.session /tmp/xx.session` 再连 - 容器内连 TG 必带 `proxy=('socks5','127.0.0.1',7891)`, `request_retries=1` + timeout 防挂 - 容器内无 sqlite3 CLI, 用 python sqlite3 模块