89 lines
4.0 KiB
Markdown
89 lines
4.0 KiB
Markdown
---
|
||
name: tg-forwarder-ops
|
||
description: "TG转发器运维参考 - 2026-09-21 真相: filter_chain 是空链 (死代码), 转发走 handlers/user_handler.py:forward_messages() + 附加 send_message。覆盖挂载配置、SOCKS5端口(7890≠7891)、硬编码黑名单、已废弃做法"
|
||
version: 1.1.0
|
||
---
|
||
|
||
# TG转发器运维
|
||
|
||
> **⚠️ 关键真相 (2026-09-21)**: `/app/filters/` 下的所有 filter (InfoFilter / KeywordFilter / SenderFilter) 是**死代码** — `filter_chain` 是空链 (0 filter), 没人调用。**实际转发流程走 `handlers/user_handler.py:process_forward_rule()`**。要改转发行为只能改 user_handler.py。
|
||
>
|
||
> **详见** [tg-forwarder-ops-2026-09-21.md](./tg-forwarder-ops-2026-09-21.md) — 容器挂载配置 / SOCKS5 端口坑 (7890 vs 7891) / 时间戳方案 (send_message after forward_messages) / 硬编码黑名单 / 已废弃做法清单。
|
||
|
||
## 基本信息
|
||
- 容器名: `telegramforwarder-telegram-forwarder` (短名: `telegram-forwarder`)
|
||
- Bot: `@mikes_MsgForwarder_bot`
|
||
- 用户客户端: `@mikes669`
|
||
- 数据库: `/app/db/forward.db` (SQLite)
|
||
- 环境变量: `/app/.env`
|
||
|
||
## 转发规则 (2026-09-24 已切换)
|
||
- **源: 币圈实盘监控 | 熬鹰 风寻 (chat_id=-1002651333064, chats.id=4)** ← 新频道
|
||
- 旧源: 实盘监控 (chat_id=3805472665, chats.id=1) — 已停用, 记录保留
|
||
- 目标: 交易信号群 (chat_id=-1003966251111)
|
||
- 模式: WHITELIST_THEN_BLACKLIST
|
||
- 白名单关键词: 交易员关键词 (麻吉/魏神/熬鹰/风寻/狙击手/百发百胜) AND 信号类型 (开仓/平仓/加仓/减仓) 双匹配
|
||
- 硬编码黑名单: 已修复 USDT 误杀 (2026-09-22 实战)
|
||
|
||
## 修改关键词过滤
|
||
```bash
|
||
# 1. 导出数据库
|
||
docker cp telegram-forwarder:/app/db/forward.db /tmp/forward.db
|
||
|
||
# 2. 查看当前关键词
|
||
sqlite3 /tmp/forward.db "SELECT * FROM keywords;"
|
||
|
||
# 3. 修改(示例:删除旧的,添加新的)
|
||
sqlite3 /tmp/forward.db "DELETE FROM keywords WHERE id=8;"
|
||
sqlite3 /tmp/forward.db "INSERT INTO keywords (rule_id, keyword, is_regex, is_blacklist) VALUES (1, '.*', 1, 0);"
|
||
|
||
# 4. 导回并重启
|
||
docker cp /tmp/forward.db telegram-forwarder:/app/db/forward.db
|
||
docker restart telegram-forwarder
|
||
```
|
||
|
||
## keywords表字段
|
||
| 字段 | 说明 |
|
||
|------|------|
|
||
| rule_id | 关联的转发规则ID |
|
||
| keyword | 关键词或正则表达式 |
|
||
| is_regex | 0=普通文本, 1=正则 |
|
||
| is_blacklist | 0=白名单(放行), 1=黑名单(拦截) |
|
||
|
||
## 日志查看
|
||
```bash
|
||
# 最近日志
|
||
docker logs telegram-forwarder --tail 50
|
||
|
||
# 过滤信号相关
|
||
docker logs telegram-forwarder --since 1h 2>&1 | grep -E "转发|匹配|白名单|不转发|过滤"
|
||
|
||
# 查看是否收到消息
|
||
docker logs telegram-forwarder --since 1h 2>&1 | grep "处理转发规则"
|
||
```
|
||
|
||
## Bot命令(通过Telegram发给bot)
|
||
- `/lk` 或 `/list_keyword` — 查看关键词列表
|
||
- `/a` 或 `/add` — 添加关键词
|
||
- `/ar` 或 `/add_regex` — 添加正则关键词
|
||
- `/rk` 或 `/remove_keyword` — 删除关键词
|
||
- `/sw` 或 `/switch` — 切换模式
|
||
|
||
⚠️ bot命令需要通过Telegram客户端发送,不能从agent内直接调(gateway占用getUpdates)。
|
||
|
||
## 重启
|
||
```bash
|
||
docker restart telegram-forwarder
|
||
```
|
||
重启后约5秒恢复,会自动重新连接Telegram。
|
||
|
||
## 常见问题
|
||
- **信号不转发**:
|
||
1. 检查白名单关键词是否匹配,`docker logs` 看"未匹配到普通白名单关键词"
|
||
2. **新频道切换后无消息日志**: 检查 `message_listener.py` 是否用 `event.chat_id` 而不是 `abs(chat.id)` (TG channel id 必带 `-100` 前缀)
|
||
3. **黑名单误杀**: 检查 `HARD_BLACKLIST_PATTERNS` 是否包含裸 `usdt|cny|套现`(信号都带 USDT)
|
||
- **bot消息被忽略**: 正常,bot自己发的消息不处理(`过滤器识别到机器人消息,忽略处理`)
|
||
- **容器内无sqlite3**: 用 `docker cp` 导出到宿主机操作
|
||
- **session 被主进程锁**: `cp /app/sessions/user.session /tmp/xx.session` 再连
|
||
- **telethon 连不上**: 容器内必带 `proxy=('socks5','127.0.0.1',7891), request_retries=1`
|
||
- **修改后无生效**: 任何代码/SQL改动必须 `docker restart telegram-forwarder` |