前言
Telegram 是我最喜欢的社交工具,但 Telegram 的广告号太多了,在一些公开群里就会被私聊骚扰发广告,后来开了会员从设置里面关了私信,为了方便别人正常私聊,都会给自己加一个 私聊 bot,但是广告号也变聪明了,会给你的私聊 bot 发广告,深受其扰。
所以我 Vibe Coding 做了一个小项目:Telegram Watchdog
项目地址:https://github.com/pupilcc/telegram-watchdog
Telegram Watchdog 是什么
Telegram Watchdog 是一个可部署在 Cloudflare Workers 或者 Docker 自托管的 Telegram Bot,用来帮你过滤 Telegram 里的垃圾信息。
它的核心思路很简单:当用户给 Bot 发消息时,先交给 LLM 判断这条消息是不是广告、诈骗、垃圾推广等不良内容。如果判断为垃圾信息,就把它拦下来,并把分析结果转发到管理群组;如果判断为正常消息,再继续转发给管理员。
换句话说,它不是一个复杂的后台系统,而是一个更像 “门卫” 的 Bot。
普通用户发来的消息,会先经过它;可疑内容被挡在外面,正常内容才给你推送。
核心功能
Telegram Watchdog 主要做了四件事
AI 垃圾信息检测
每条非命令消息都会先进入检测流程。项目通过 OpenAI SDK 调用 OpenAI 或兼容的 LLM API,让模型判断消息是正常内容,还是广告、诈骗、垃圾推广。如果是垃圾信息,Bot 会阻止它继续转发,并把原因发送到管理群组。
管理员消息中继
如果用户私聊 Bot,正常消息会被转发给管理员。管理员可以直接回复这条转发消息,Bot 会把回复再发回原始用户。这样你不需要把自己的 Telegram 账号暴露给所有人,也能完成基本的双向沟通。
智能白名单
如果一个用户连续通过 3 次 AI 检测,并且从未被标记为垃圾信息,系统会自动把他加入白名单。加入白名单后,这个用户后续消息会直接转发,不再每次都消耗 LLM API。
这个设计很重要。因为真实用户不应该每次发消息都被重复审查,而 AI 调用也有成本。白名单让系统更像一个逐渐建立信任的机制:新用户先检查,可信用户少打扰。
管理员手动管理
管理员可以在转发消息下回复 /trust,把用户立即加入白名单;也可以回复 /untrust,把用户移出白名单,让他的后续消息重新进入检测流程。
这让系统不会完全依赖模型判断。AI 负责处理大量重复判断,人负责处理边界情况和最终取舍。
为什么放在 Cloudflare Workers 上
这个项目可部署在 Cloudflare Workers 上,后端使用 Hono,Telegram Bot 框架使用 Grammy,数据存储用 Cloudflare D1。
我选择这个组合,是因为它很适合这种轻量 Bot:
- 不需要自己维护服务器;
- Webhook 请求来了才运行;
- 部署后延迟低,日常维护成本低;
- D1 可以保存消息映射和用户信任状态;
- TypeScript 对这种小项目也足够清晰。
从使用者角度看,你不用关心太多基础设施。只要 Worker 能接收 Telegram Webhook,请求进来后就能完成检测、转发、回复和记录。
从开发者角度看,这也是一个很适合 Vibe Coding 的项目:需求边界清楚,功能模块不大,但又覆盖了真实产品里常见的几个环节,包括外部 API、Webhook、数据库、权限判断和管理员工作流。
怎么开始用
如果你想自己部署一套 Telegram Watchdog,项目 README 里已经写了更完整的部署步骤,按文档配置就可以。
我为什么觉得它值得做
Telegram Watchdog 不是一个宏大的产品,它更像是一个非常具体的小工具:当 Telegram 开始变成你的公开入口时,它能帮你阻挡一部分骚扰。
这类项目对我来说很有意思。它不需要先想一个巨大的商业故事,也不需要一开始就做复杂后台。它从一个很明确的问题出发:我不想每天被广告和诈骗消息打断。
然后用现成的基础设施把它拼起来:
- Telegram Bot 负责接收和发送消息
- Cloudflare Workers 负责运行服务
- D1 负责保存状态
- LLM 负责判断消息质量
- 管理员命令负责给人保留控制权
这就是我喜欢的 Vibe Coding 项目形态:问题足够小,反馈足够快,最后又真的能改善一点自己的日常工作流。
如果你也在用 Telegram Bot 接收私聊消息,可以试试 Telegram Watchdog。