3.0 KiB
3.0 KiB
多协议号监控 - 实施计划
背景
客户频道太多,一个号装不下(Telegram 限制约500个群/频道),需要多个协议号分摊监控,所有消息汇总到同一个数据库。
当前架构
- 单号登录(手机号+验证码)
- 单个 TelegramClient
- 单个 session 文件(userbot.session)
- SQLite 数据库存消息
目标架构
- 多号同时在线(协议号 StringSession 导入)
- 多个 TelegramClient 并行运行
- 每个号可配独立代理IP
- 所有消息存同一个数据库
- 管理员通过任意一个号发指令控制
实施步骤
第1步:数据库改造
文件:database.py
- 新增
accounts表:accounts ( id, session_name, session_string, phone, nickname, proxy_type, proxy_host, proxy_port, is_active, max_chats, created_at ) watched_chats表新增account_id字段(哪个号监控哪个群)messages表已有chat_id,不用改- 新增 CRUD 函数:add_account, remove_account, get_accounts, get_active_accounts
第2步:协议号导入
文件:bot.py(交互菜单)
- 新增菜单选项「7. 账号管理」子菜单:
- a. 添加协议号(输入 session 字符串)
- b. 添加直登号(手机号+验证码,现有逻辑)
- c. 查看所有账号(在线状态、监控群数)
- d. 设置代理(给某个号配代理)
- e. 删除账号
- f. 返回
第3步:多Client并行
文件:bot.py(do_run)
- 启动时从数据库读取所有 active 账号
- 每个账号创建一个 TelegramClient:
from telethon.sessions import StringSession # 协议号 client = TelegramClient( StringSession(session_string), api_id, api_hash, proxy=('socks5', host, port) # 如果配了代理 ) # 直登号(现有方式) client = TelegramClient(session_file, api_id, api_hash) - 所有 client 注册相同的 handler
- 用 asyncio.gather 同时运行所有 client
第4步:群分配策略
- /join 时自动分配给监控群最少的号
- 或手动指定:/join <群链接> <账号ID>
- /list 显示每个群由哪个号监控
第5步:指令路由
- 管理员私聊任意一个号都能发指令
- 所有号的 handler 共享同一套指令逻辑
- 搜索从统一数据库查,不区分哪个号采集的
第6步:代理支持
文件:config.py
- 新增 DEFAULT_PROXY 配置(可选)
- 每个账号可单独配代理,覆盖默认值
- 支持 SOCKS5 / HTTP 代理
文件改动清单
| 文件 | 改动 |
|---|---|
| database.py | 新增 accounts 表 + CRUD + watched_chats 加 account_id |
| bot.py | 多client启动 + 账号管理菜单 + 群分配 + StringSession 支持 |
| config.py | DEFAULT_PROXY 配置 |
| requirements.txt | 加 pysocks(代理支持) |
风控注意
- 每个号绑定独立IP,不共用
- 只读监控,不发消息
- 加群间隔控制(不要同时大量加群)
- 每个号最多监控 400 个群(留余量)