Telegram群组和频道是社区交流的重要场所,但垃圾信息、广告机器人、网络诈骗等日益泛滥,严重破坏用户体验。作为开发者,我们可以通过Telegram Bot API构建高效的反垃圾过滤系统,自动拦截恶意内容。本文将从基础规则到智能防护,系统讲解Telegram机器人反垃圾过滤的设计思路、常用策略与实战示例,帮助你为群组和频道建立一道坚固的防线。
为什么需要反垃圾过滤?
垃圾信息不仅影响用户交流,还可能传播钓鱼链接、恶意软件,甚至导致群组被封禁。Telegram原生的管理功能有限,而机器人可以实时监控消息,通过自定义规则、行为分析、外部服务等方式快速响应。一个合格的反垃圾机器人,能极大降低管理成本,保障群组生态健康。
基础反垃圾过滤规则
最直接的反垃圾方式是设置规则,让机器人对每条消息进行匹配检测。常见的基础规则包括:
- 关键词黑名单:定义一组高频垃圾词(如“免费”“赚钱”“加V”等),命中即删除或警告。
- 链接过滤:限制新用户发送链接,或只允许白名单域名,防止广告和钓鱼。
- 频率限制:同一用户发送消息间隔过短,或内容重复多次,触发限制。
- 媒体文件检测:禁止发送特定类型的文件或图片,避免色情或恶意附件。
实现时,可使用Telegram Bot API的Message实体,提取文本、实体和附件类型,在update处理流程中前置判断。下面是一个简单的Python代码片段:
from telegram import Update
from telegram.ext import Application, MessageHandler, ContextTypes
BANNED_WORDS = ['spam', 'free', 'click here']
async def filter_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
text = update.message.text.lower()
if any(word in text for word in BANNED_WORDS):
await update.message.delete()
# 可选:警告用户或踢出群组
基于用户行为的检测
垃圾信息制造者经常绕过关键词过滤,因此需要分析用户行为模式。典型的检测点包括:
- 新用户秒发消息:普通用户刚入群会先打招呼,而广告机器人入群后立即发送宣传内容。可以设置“入群N分钟内禁止发消息”或对首条消息进行严格审查。
- 大量@用户:恶意机器人喜欢@多人以散播垃圾,检测消息中@数量,超过阈值则拦截。
- 相同内容重复发送:使用数据库记录用户近期消息哈希值,出现相同内容多次即判定为刷屏。
- 发送速度异常:短时间内连续发送多条消息且包含链接,高概率为机器。
行为检测需要合理的阈值设置,避免误伤正常用户。可以结合用户入群时长、是否已验证等因素进行加权评分。
使用验证码和人类验证
对于新加入的成员,强制进行验证码验证可以拦截绝大多数机器注册的账号。常见的验证方式有:
- 算术题:让用户回答简单加法或乘法,正确则放行,否则移除。
- 连续点击按钮:使用InlineKeyboardButton要求用户点击指定按钮完成验证。
- 图片验证码:生成带噪点的图片,让用户输入文字或数字。
实现时,需要在机器人收到新成员事件(chat_member)后,发送验证消息并暂停其发言权限,直到验证通过。Telegram Bot API支持restrictChatMember来限制用户权限,非常方便。
调用第三方反垃圾服务
除了自主研发,也可以接入现成的反垃圾服务,如SpamWatch、Combot等。这些服务维护了全球垃圾用户数据库,机器人只需提交用户ID或消息内容,即可获得威胁评分。集成方法一般为HTTP API或Webhook。例如,SpamWatch的API使用很简单:
GET https://api.spamwatch.org/v1/ban/123456
通过返回的HTTP状态码判断该用户是否被标记。这种方式省去了训练数据的时间,但要注意服务提供方可能带来的隐私问题。
机器学习与AI过滤
面对不断变种的垃圾信息,规则有时显得“太傻”。利用机器学习可以实现语义级判断,例如用朴素贝叶斯或深度学习模型对消息文本分类。常见流程是:
- 收集历史垃圾消息和正常消息,构建训练数据集。
- 提取文本特征(TF-IDF、词向量等)。
- 训练分类器(如逻辑回归、随机森林或简单的神经网络)。
- 将模型导出并在机器人中实时调用。
对于生产环境,可使用ONNX Runtime或TensorFlow Lite在本地推理,无需外部网络请求,降低延迟。但需要注意模型迭代更新,并避免过度拟合造成误判。
用Python和Telegram Bot API实现一个综合反垃圾机器人
下面是一个简化但完整的反垃圾机器人示例,融合了规则、行为验证和第三方服务。该机器人会:检测黑名单关键词、限制新用户发链接、并要求入群验证。
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
BOT_TOKEN = 'YOUR_TOKEN'
BANNED_WORDS = ['spam', 'free']
async def check_new_member(update: Update, context: ContextTypes.DEFAULT_TYPE):
for member in update.message.new_chat_members:
if member.is_bot:
continue
await context.bot.restrict_chat_member(
chat_id=update.effective_chat.id,
user_id=member.id,
permissions={
'can_send_messages': False
}
)
keyboard = [[InlineKeyboardButton('我是人类', callback_data='verify')]]
await context.bot.send_message(
chat_id=update.effective_chat.id,
text=f'欢迎 {member.full_name},请点击下方按钮验证你是人类。',
reply_markup=InlineKeyboardMarkup(keyboard)
)
async def verify_button(update: Update, context: ContextTypes.DEFAULT_TYPE):
query = update.callback_query
if query.data == 'verify':
await context.bot.restrict_chat_member(
chat_id=query.message.chat.id,
user_id=query.from_user.id,
permissions={'can_send_messages': True}
)
await query.answer('验证通过,欢迎!')
async def filter_spam(update: Update, context: ContextTypes.DEFAULT_TYPE):
text = update.message.text
if not text:
return
if any(w in text.lower() for w in BANNED_WORDS):
await update.message.delete()
return
# 简单链接限制:新用户发链接,警告并删除
if 'http' in text and update.effective_user.id not in context.bot_data.get('whitelist', []):
await update.message.delete()
await context.bot.send_message(update.effective_chat.id, '新用户暂时无法发送链接')
app = Application.builder().token(BOT_TOKEN).build()
app.add_handler(MessageHandler(filters.StatusUpdate.NEW_CHAT_MEMBERS, check_new_member))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, filter_spam))
app.add_handler(CallbackQueryHandler(verify_button))
app.run_polling()
最佳实践与注意事项
反垃圾过滤系统需要持续维护,以下是几个关键建议:
- 降低误判:宁可漏杀,不可错杀。误封正常用户会导致社区流失。设置惩罚级别(警告→限制→踢出),并允许用户申诉。
- 保持规则更新:垃圾信息模式不断变化,定期更新关键词库和模型。可以使用后台定时任务拉取黑名单。
- 监控与日志:记录机器人操作日志,分析拦截原因,调整阈值。与日志监控工具结合,及时发现异常。
- 性能优化:机器学习模型可能消耗CPU,建议使用异步调用或缓存结果。对于大群组,可使用多worker或分布式部署。
- 遵守API限制:调用第三方服务和Bot API时注意频率限制,避免触发封禁。
总结
Telegram机器人反垃圾过滤是一个循序渐进的过程。从基础规则到行为分析,再到引入第三方服务和机器学习,每一步都能显著提升群组安全性。本文详解了不同层级的方法,并提供了可运行的代码示例。希望你能根据自身需求,构建出恰到好处的反垃圾机器人,为Telegram社区创造清净的交流空间。