Telegram机器人关键词过滤与自动删除违规消息完整实现指南

本文详细讲解如何利用Telegram Bot API实现群组关键词过滤与违规消息自动删除,涵盖架构设计、代码实现、权限配置及常见问题。

阅读提示涉及账号和安全设置时,请边阅读边核对当前设备界面。

为什么需要关键词过滤机器人?

在Telegram群组中,随着成员增多,广告、辱骂、敏感内容等违规消息频繁出现,不仅破坏讨论氛围,还可能带来封群风险。手动删除耗时费力,而Telegram Bot API提供了消息监听与删除能力,让我们可以轻松构建一个关键词过滤机器人,实现自动识别并删除违规消息,维护群组秩序。

准备工作:创建机器人与获取Token

首先,在Telegram中向@BotFather发送/newbot,按照提示设置昵称和用户名,即可获取API Token。请注意,Token是机器人的唯一凭证,需妥善保管,不要泄露给无关人员。

理解消息更新与权限模型

机器人通过长轮询(Long Polling)或Webhook接收群组中的消息更新。在群组中,机器人需要被设置为管理员,并具备“删除消息”权限,才能执行删除操作。权限不足时,调用deleteMessage会返回403错误。

实现关键词过滤核心逻辑

我们以Python的python-telegram-bot库为例。核心思路是:监听所有群组消息,对文本内容进行关键词匹配,若命中则执行删除并可选通知管理员。

import logging
from telegram import Update, Bot
from telegram.ext import Application, MessageHandler, filters, ContextTypes

# 关键词列表,可按需扩展
KEYWORDS = ["广告\u0026#34;, \"赌博\u0026#34;, \"色情\u0026#34;]

async def filter_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    msg = update.message
    if not msg or not msg.text:
        return
    # 检查是否包含关键词
    for kw in KEYWORDS:
        if kw in msg.text:
            try:
                await msg.delete()
                await context.bot.send_message(
                    chat_id=msg.chat_id,
                    text=f"已删除违规消息: {msg.from_user.first_name} 的消息触发关键词 "
                )
            except Exception as e:
                logging.error(f"删除失败: ")
            break

def main():
    app = Application.builder().token("YOUR_TOKEN").build()
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, filter_message))
    app.run_polling()

if __name__ == "__main__":
    main()

自动删除违规消息:调用deleteMessage

在上面的代码中,await msg.delete()即调用了deleteMessage方法。注意:机器人必须拥有删除消息的管理员权限,且消息不能太旧(Telegram限制机器人只能删除48小时内的消息)。如果删除失败,请检查机器人权限以及网络状态。

进阶:正则匹配与白名单机制

简单关键词匹配容易误伤或遗漏。使用正则表达式可以实现更灵活的过滤规则,例如匹配拼音、谐音或加符号绕过的变体。同时,设置白名单用户或管理员,他们的消息不受过滤,避免误删正常讨论。

import re

# 正则匹配模式(示例:匹配广告变体)
PATTERNS = [r"\b(广告|a?d)\b", r"(加|vx|微信|q)\s*号"]
WHITELIST_IDS = [123456789]  # 不受过滤的用户ID

async def filter_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    msg = update.message
    if not msg or not msg.text:
        return
    if msg.from_user.id in WHITELIST_IDS:
        return
    for pattern in PATTERNS:
        if re.search(pattern, msg.text, re.I):
            await msg.delete()
            break

部署与长期运行建议

将脚本部署到云服务器或使用Heroku、Docker等方式保持7×24小时运行。注意使用time.sleep或调度工具避免频繁轮询被限流。建议记录日志,并定期更新关键词库以应对变化。

总结

通过Telegram机器人实现关键词过滤与自动删除,能有效减少人工管理成本,提升群组质量。本文提供了最小可运行的示例代码,你可以在此基础上扩展更复杂的规则,比如图片OCR、敏感链接识别等。记住:合理使用权限,避免误删,才能让机器人真正成为群组管理的得力助手。

FAQ

下载与安装

常见问题

机器人没有删除消息权限怎么办?

你需要将机器人设为群组管理员,并在添加管理员时勾选“删除消息”权限。修改权限后,机器人可能需要重新加入群组才能生效。

关键词过滤是否支持正则表达式?

支持。你可以将关键词改为正则匹配模式,从而过滤谐音、大小写变体、符号穿插等复杂变体,提高准确率。

机器人能删除99+条历史违规消息吗?

不能。Telegram API限制机器人只能删除48小时内发送的消息,且必须提供消息ID。历史消息需通过其他方式(如管理员手动删除)处理。

如何防止误删正常消息?

可以设置白名单用户或使用精确的正则规则,同时增加人工确认机制(如发送待审核消息到个人频道),避免因单个关键词误伤无关内容。