Telegram正则表达式过滤垃圾消息全指南:从规则编写到群组落地

深入讲解如何在Telegram群组中使用正则表达式精准过滤垃圾消息,涵盖常用机器人配置、正则基础、实战规则示例以及自建Python机器人方案,帮你彻底摆脱广告刷屏。

阅读提示建议先浏览文章结构,再按需深入阅读具体段落。

在Telegram群组运营中,垃圾消息是最令人头疼的问题之一。无论是加密货币广告、色情推广还是骚扰链接,总在不经意间刷屏。简单的关键词过滤已经无法应对花样百出的变体,而正则表达式(Regex)正是解决这一问题的终极武器。本文将带你从零掌握Telegram使用正则表达式过滤垃圾消息的完整方法,涵盖现有机器人配置与自建机器人实战,让你的群组远离噪音。

为什么需要正则表达式过滤?

Telegram自带的“限制”功能只能设置禁止发链接或启用慢速模式,无法根据内容智能拦截。而传统的关键词过滤容易误杀,且对“f r e e”“f r e e”这类变体束手无策。正则表达式通过模式匹配,可以识别出带有空隙、同音替换、前后缀干扰的垃圾内容,同时支持白名单机制,大幅降低误伤概率。对于频繁遭受垃圾消息攻击的群组,正则过滤是必备技能。

准备工作:选用支持正则的过滤机器人

无需编程基础,可以直接使用现成的第三方机器人。目前最流行的支持正则过滤的Telegram机器人有:

  • Combot(@CombBot):功能全面的群管机器人,内置正则过滤模块,支持自定义规则和例外名单。
  • Rose(@RoseBot):模块化设计,支持正则、黑名单/白名单,且规则可导入导出。
  • Group Help(@GroupHelpBot):轻量级,适合中小群组,正则规则简单直观。

如果你希望完全自主控制,也可以参考后文中的自建Python机器人方案。本文以Combot为例,因为它的正则功能最强大且注册即用。

正则表达式基础:三种常用写法

在编写过滤规则前,你需要理解几个关键概念。以下是最常用的正则符号:

  • \d:匹配任意数字,等价于[0-9]
  • \w:匹配字母、数字、下划线。
  • \s:匹配空白字符(空格、换行等)。
  • .*:匹配任意多个任意字符。
  • |:表示“或”。
  • (?i):忽略大小写。

例如,要匹配“免费”或“f r e e”这类变体,可以写:(?i)(f\s*r\s*e\s*e|免费)。这意味着“f”后可以有零或多个空格,再跟“r”,以此类推。这样,垃圾发布者无论怎样插入空格或标点都会被识别。

实战一:在Combot中配置正则过滤

  1. 将Combot添加为群组管理员,并授予删除消息、封禁用户的权限。
  2. 在群组内发送/warn/regex,进入Combot的设置面板。
  3. 找到“Filter”或“正则过滤”选项,选择“Add New Rule”。
  4. 输入正则表达式,例如:(?i)(crypto|bitcoin|币|钱|加v|私聊),并设置处理动作(如“删除并警告”)。
  5. 建议先开启“测试模式”,观察几天,确保不会误伤正常用户。
  6. 正则规则支持多重匹配,可创建多个规则,按优先级排列。

除了文字,还可以过滤图片中的文字(需要OCR支持,Combot高级版)或语音转文字,但基础版已经足够处理绝大多数文本垃圾。

实战二:用Python自建正则过滤机器人

如果你希望完全自定义,可以使用Python+python-telegram-bot库实现。以下是一个最小可用示例:

from telegram.ext import Application, MessageHandler, filters
import re

# 定义垃圾消息的正则模式
SPAM_PATTERN = re.compile(r"(?i)(免费|f\s*r\s*e\s*e|加微|crypto)")

async def filter_message(update, context):
    msg = update.message
    if msg.text and SPAM_PATTERN.search(msg.text):
        await msg.delete()
        # 可选:警告或封禁
        await msg.chat.ban_member(msg.from_user.id)

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

SPAM_PATTERN替换为你自己的正则规则,然后运行即可。注意获取封禁权限需要为机器人开通管理员权限。为了优化性能,建议使用re.compile()预编译正则,并避免过于复杂的递归匹配。

实用正则规则示例库

以下是一些经过验证的常见垃圾消息正则,可直接复制使用(注意转义):

  • 识别短链接(?i)\b(bit\.ly|t\.co|goo\.gl|url\.cn)\s*[/\S]*
  • 识别加密货币关键词(?i)(比特币|狗狗币|USDT|区块链|币安|空投)
  • 识别变体“免费”(?i)f\s*r\s*e\s*e|免\s*费
  • 识别私聊引导(?i)(加\s*微|私聊|私信|加群|加我)
  • 识别连续符号伪装.*[!@#$%^&*].*[!@#$%^&*].*[!@#$%^&*].*

组合使用这些规则可以覆盖80%以上的垃圾消息。但要注意,过度使用.*可能造成误杀,建议配合词边界\b和字符类限定范围。

注意事项与性能优化

  • 先测试后上线:在低峰期试行规则,并观察删消息记录,及时调整。
  • 设置豁免名单:将核心用户或管理员添加到白名单,避免误限。
  • 避免灾难性回溯:正则中嵌套任意字符.*过多会导致性能下降,尽量使用非贪婪模式.*?或更精确的字符类。
  • 配合其他功能:结合Captcha验证、用户加入时长限制,效果更佳。
  • 定期更新规则:垃圾发布者也在变,定期查看被拦截消息,及时补充新变体。

总结

正则表达式是Telegram群组防骚扰的核心技能,无论是使用现成的Combot还是自建机器人,掌握正则语法都能让你从被动封禁转变为主动拦截。记住:好的规则应该是“精准”而非“粗暴”,在拦截垃圾的同时不误伤真正的对话。从本文的示例出发,结合自己群组的实际垃圾消息特征,逐步打磨出自己的过滤库,你将拥有一个清净、高效的Telegram社群。

FAQ

下载与安装

常见问题

Telegram官方支持正则表达式过滤消息吗?

官方没有内置的正则过滤功能,但可以通过第三方机器人(如Combot、Rose)或自建Telegram机器人来实现,效果完全一致。

正则表达式过滤误伤了正常消息怎么办?

建议在规则中添加白名单或例外名单,将核心成员加入白名单。同时使用正则的“负向断言”或排除特定上下文,例如仅当消息同时包含链接和敏感词时才拦截。

如何测试正则表达式是否有效?

可以在在线正则测试工具(如regex101.com)中粘贴样本消息和规则进行测试,确认匹配结果后再部署到Telegram群组。

自建机器人需要哪些技术基础?

需要了解Python基础、python-telegram-bot库的用法,以及正则表达式的基本语法。无需服务器,可以在本地运行,但需要开启一个公开的访问通道。