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