🤖 基于 AI 的 Telegram 群组反垃圾广告机器人
🎯 演示 Bot • 📢 发布频道 • 💬 交流群组 • English
如果你使用本项目,请:
- ✅ 保留 Bot 中的开发者信息(
/start命令) - ✅ 在你的项目中注明来源
- ✅ 不要移除代码中的版权声明
这是对开源作者最基本的尊重 🙏
💡 官方版本:这是原作者维护的官方仓库,Fork 版本可能已过时。
- 🛡️ 智能检测:使用 AI 识别文字、图片、贴纸中的垃圾广告
- 📝 可见内容检测:图片说明文字和引用片段也会参与风控判断
- 🔁 回复与转发覆盖:回复原文和转发可见内容也会进入提取与检测
- 🎯 多模型支持:OpenAI、通义千问、DeepSeek 任选
- 📊 灵活策略:可配置检测天数、发言次数、验证次数等
- 🔓 人性化管理:一键解封、管理面板
- 📢 广告按钮:支持在封禁通知下方添加自定义广告按钮
- ⚡ 高性能:异步处理,不阻塞消息
- 🔄 验证机制:通过检测的用户不再重复检测,节省 API 调用
- 🔁 自动重试:AI API 调用失败自动重试(3次,指数退避)
- 📝 日志持久化:运行日志保存到
data/bot.log - 🧹 自动清理:封禁通知和欢迎消息支持按配置自动删除
- 📈 运行统计:
/stats命令查看检测统计数据 - 🌍 多语言支持:支持中文/英文切换
pip install -r requirements.txtcp config.example.yml config.yml
# 编辑 config.yml,填入你的配置必填项:
telegram.token- 你的机器人 Token(从 @BotFather 获取)telegram.owners- 超级管理员 ID(你的 Telegram ID,可通过 @userinfobot 获取)- AI 模型配置(选择一个):
openai.api_key- OpenAI API Keyqwen.api_key- 通义千问 API Keydeepseek.api_key- DeepSeek API Key
python bot.py- 把机器人添加到群组
- 设置为管理员(需要删除消息、封禁用户权限)
- 发送
/start测试
/start- 查看机器人信息/admin- 查看管理面板(管理员)
/unban <用户ID>- 解除禁言/unban(回复消息) - 解除被回复用户的禁言
/add_ad 标题|链接|过期时间|权重- 添加广告按钮/all_ad- 查看所有广告/del_ad <ID>- 删除广告/stats- 查看运行统计(检测次数、封禁率等)
广告按钮示例:
/add_ad 官方频道|https://t.me/mychannel|2099-12-31 23:59:59|100
telegram:
token: "your-bot-token"
owners: ["your-telegram-id"] # 超级管理员
allow_any_group: true # 允许任何群组
groups: [] # 白名单群组(allow_any_group=false 时生效)
# 语言设置
language: "zh" # 可选: zh / enai_model: "deepseek" # 可选: openai / qwen / deepseek模型对比:
| 模型 | 优势 | 价格 | 图片支持 |
|---|---|---|---|
| OpenAI | 准确率高 | 较贵 | ✅ gpt-4o-mini |
| 通义千问 | 中文好 | 中等 | ✅ qwen-vl-max |
| DeepSeek | 便宜 | 最低 | ❌ |
strategy:
joined_days: 3 # 加入天数阈值
min_messages: 3 # 最少发言次数
spam_score: 80 # 垃圾评分阈值 (0-100)
verification_times: 1 # 验证通过次数限制
check_message_count: true # 是否检查发言次数message:
ban_notice_template: |
\#封禁预警
[{masked_name}]({user_link}) 请注意,你的用户名或发言存在违规
⚠️已被AI判断为高风险用户,永久封禁
风险分数:{score}
📋 违规原因:
```
{reason}
```
🤖 AI 嘲讽:
```
{mock}
```
delete_ban_notice_after_seconds: 30
delete_welcome_message_after_seconds: 30任一值设为 0 即可关闭自动删除。
ban_notice_template 当前支持的变量:
{masked_name}{user_link}{score}{reason}{mock}{user_id}{chat_id}{channel_url}{group_url}
如果模板里出现未知变量,代码会自动回退到默认模板,不会影响封禁主流程。
pip install -r requirements-dev.txt
pytest当前首批测试已覆盖封禁通知模板渲染、MarkdownV2 安全性,以及近期出现过的关键回归风险。
当前可见内容提取已覆盖:
- 普通文本消息
- 图片 / 媒体说明文字
- 引用片段
- 回复原消息正文 / caption
- 转发消息中的可见正文 / caption
策略说明:
- joined_days:用户加入群组超过 N 天后不再检测
- min_messages:用户发言超过 N 条后不再检测(需
check_message_count: true) - verification_times:用户通过 N 次检测后不再检测(0=不限制)
- spam_score:AI 评分超过此值才封禁
常用场景配置:
strategy:
joined_days: 999999
verification_times: 0
check_message_count: falsestrategy:
joined_days: 3
min_messages: 3
verification_times: 1
check_message_count: truestrategy:
joined_days: 7
min_messages: 5
verification_times: 2
check_message_count: true封禁通知会显示自定义按钮:
🚫 检测到违规内容
...
⚠️ 该用户已被永久封禁
[🔓 解除禁言] ← 管理员可点击
[📢 官方频道] ← 你的广告
[💎 VIP 群组] ← 你的广告
管理广告:
# 添加
/add_ad 官方频道|https://t.me/channel|2099-12-31 23:59:59|100
# 查看
/all_ad
# 删除
/del_ad 1# 1. 编辑配置
cp config.example.yml config.yml
vim config.yml
# 2. 启动
docker compose up -d
# 3. 查看日志
docker compose logs -f用户发文字 / 图片 / 贴纸
↓
检查是否为管理员 → 是 → 放行
↓ 否
检查是否需要检测 → 否 → 放行
↓ 是
提取可见内容
↓
图片消息若包含说明文字或引用片段 → 先做文字预检
↓
AI 分析内容
↓
评分 < 阈值 → 放行 + 验证次数+1
↓
评分 ≥ 阈值 → 封禁 + 删除消息 + 发送通知
如果你有自建 Telegram API 服务器:
export TELEGRAM_API_URL="https://your-api-server.com"
python bot.py默认:data/bot.db
修改:
database:
path: "custom/path/bot.db"- 👨💻 开发者:狼哥 (@luoyanglang)
- 📦 GitHub: @luoyanglang
- 🌟 官方项目: github.com/luoyanglang/AI-Anti-Spam-Bot
- 📢 发布频道: @langgefabu
- 💬 交流群组: @langgepython
- 🎯 演示 Bot: @xiaolangzaibot - 可拉入群组测试效果!
如果本项目对您有帮助,欢迎支持开发者:
- ⭐ 给项目一个 Star
- 📢 分享给更多需要的人
- 🐛 反馈 Bug 和建议
- ☕ 请作者喝杯咖啡
您的支持是项目持续更新的动力
欢迎提交 Issue 和 Pull Request!
MIT License
感谢所有贡献者和使用者的支持!
特别提醒:
- 本项目采用 MIT 协议开源
- 允许商业使用,但请保留开发者信息
- 如果你修改或分发本项目,请注明原作者
- 这是对开源精神的尊重,也是项目持续发展的动力
⭐ 如果这个项目对你有帮助,请给个 Star!
💰 支持开发者,让项目持续更新!