657d9631f34b40270d5e39e9c8d072c2180c75ce
群监控自动加群
使用 Telethon 登陆用户账号(User-Bot),自动加入目标群、抓取群主信息、监控消息并通过单独的 Bot 汇报关键词命中结果。
功能概述
- 通过
GROUP_LINKS列表批量加入群(支持公开链接与https://t.me/+xxxx邀请链接)。 - 获取群主/创建者信息并在汇报群内确认当前监控状态。
- 长连接监听群消息,命中关键词时推送到指定群/频道。
- 关键词配置独立于代码(
keywords.yaml),可随时增删并自动热加载。 - 汇报通道使用 Bot Token,避免 user-bot 重复发言。
环境要求
- Python 3.10+
- Telegram API 凭据(
api_id/api_hash) - 目标账号可登录的手机号(首登需要验证码)
- Bot Token(用于把监控结果发到 @kt500_bot 已在的群)
快速开始
- 安装依赖:
python3 -m venv .venv && source .venv/bin/activate pip install -r requirements.txt - 准备配置:
按需填写:
cp .env.example .envAPI_ID/API_HASH:来自 my.telegram.org。SESSION_NAME:本地 session 文件名,首次登录会生成SESSION_NAME.session。USER_PHONE:用于自动登录(可留空,运行时手输)。GROUP_LINKS:逗号分隔的群链接,可直接填https://t.me/+tvVm--E19cxkNWJl。REPORT_CHAT_LINK:用于汇报的群/频道链接,如果就地汇报可与GROUP_LINKS中某一项相同。TELEGRAM_BOT_TOKEN:你的 @kt500_bot Token。KEYWORDS_FILE:关键词配置文件路径,默认keywords.yaml。
- 配置关键词:编辑
keywords.yaml,示例:keywords: - name: promo patterns: - "推广" - "广告" regex: false - name: join_request patterns: - "(?i)拉群" - "(?i)加好友" regex: trueregex: false表示普通子串匹配(自动转换小写)。regex: true将整条pattern按正则表达式处理,可使用(?i)等修饰。- 文件被修改后,程序会自动检测更新时间并重新加载。
- 运行:
python3 -m src.main- 首次运行会提示输入验证码 / 二步验证密码。
- 成功后会看到“群监控已启用”提示,同时在
REPORT_CHAT_LINK对应的群内收到确认消息。
工作流程
- 自动入群:对每个链接先尝试
get_entity,若失败且为邀请链接,则执行ImportChatInviteRequest加入。加入或已在群内后会开始监听。 - 群主识别:调用
GetParticipantsRequest(... ChannelParticipantsAdmins ...)找到ChannelParticipantCreator,将结果写入汇报中,便于核对“自动添加群主”状态。 - 关键词监控:
events.NewMessage监听指定群,命中关键词时将群名、消息 ID、发送人、关键词、时间与截断内容推送到 Bot 所在的群。 - 多次触发 & 附件提醒:文本命中会附带一则消息,若原消息含媒体,还会追加“附件提醒”。
常见扩展
- 新增关键词:直接编辑
keywords.yaml,保存后生效(无需重启)。 - 新增群:在
.env的GROUP_LINKS中添加链接,重启程序即可。 - 自定义汇报格式:在
src/group_monitor.py的_handle_new_message中调整lines内容。 - 落地数据库:可在
_handle_new_message中追加写库逻辑,然后调用reporter.send_safe做通知。
注意事项
- 请确保 user-bot 与 @kt500_bot 均已在
REPORT_CHAT_LINK对应的群里,并授予发送消息权限。 - Telegram 对频繁入群/拉人有限制,若日志出现
FloodWaitError,需等待对应秒数。 - Session 文件包含账户授权信息,只应保存在可信设备中。
- 若长期运行,建议用
supervisor/systemd守护,并开启日志轮转。
后续工作
- 若需要把“自动添加群主”升级为主动发送好友请求,可结合
contacts.AddContactRequest,条件是群主公开手机号。 - 可根据需要加入异常上报(例如钉钉/企业微信)或统计报表。
Description
Languages
TypeScript
100%