在Telegram中,消息数量庞大时,筛选出真正重要的内容就像大海捞针。许多用户希望像邮件客户端一样,用正则表达式(Regular Expression)对消息进行自动过滤和分类。遗憾的是,Telegram官方客户端并未直接提供正则过滤选项,但这不代表我们无法实现——借助Telegram Bot API,你可以亲手打造一个强大的正则过滤机器人,让消息管理变得井井有条。
什么是正则表达式?为什么需要它?
正则表达式是一种用于匹配字符串的语法规则,它能够以极简的符号描述复杂的模式。例如,用 \d+ 匹配任意数字,用 [A-Za-z] 匹配所有字母。通过组合这些元字符,你可以精确地识别出URL、电话号码、邮箱、特定关键词等。
在Telegram中,正则过滤能帮你自动处理:
- 屏蔽垃圾消息:识别包含广告词或恶意链接的文本。
- 自动标记重点:将含“重要”、“紧急”的消息转发到特定对话。
- 消息分类归档:按订单号、工单号等规则自动分组。
- 内容安全审计:过滤不符合规范的UGC内容。
如果没有正则,你可能需要逐条手动查看,效率极低。而利用机器人,一旦规则设定,一切自动完成。
Telegram原生支持正则吗?
目前Telegram客户端(包括iOS、Android、桌面版)的搜索功能支持一些固定语法操作符,如 from:、before:、has: 等,但它们不是完整的正则表达式。Telegram并没有提供用户界面的正则过滤选项,唯一合规且可定制的方式是使用官方Bot API。
如果你懂一点编程(或者愿意复制代码),就可以创建一个私人机器人来实时监听消息,并运用正则规则执行过滤动作。这既灵活又安全,不会影响其他用户的体验。
正则表达式基础:常用元字符快速上手
在写过滤规则前,先熟悉这些最常用的正则符号(以Python风格为例):
.— 匹配除换行外任意字符\d— 匹配数字,等价于[0-9]\w— 匹配字母、数字、下划线\s— 匹配空白符^— 匹配字符串开头$— 匹配字符串结尾*— 重复前一个字符0次或多次+— 重复前一个字符1次或多次?— 重复前一个字符0次或1次[]— 匹配括号内任意字符(...)— 分组捕获
例如:https?:\/\/[\w.-]+ 可以匹配大多数HTTP/HTTPS链接。
实战:创建你的第一个Telegram正则过滤机器人
下面以Python为例,使用 python-telegram-bot 库实现一个简单的过滤器。每一步都有详细说明,即使你是编程新手也能跟着操作。
步骤1:在BotFather申请机器人Token
- 打开Telegram,搜索
@BotFather,发送/newbot。 - 按照提示设置显示名称和用户名(必须以
bot结尾)。 - 创建成功后,你会收到一个API Token,形如
123456:ABC-DEF...,请妥善保存。
步骤2:安装Python依赖
确保你已安装Python 3.8+,然后执行:
pip install python-telegram-bot
步骤3:编写过滤脚本
创建一个名为 filter_bot.py 的文件,复制以下代码并替换 YOUR_TOKEN 和 YOUR_RULES 部分:
import re
from telegram import Update
from telegram.ext import Application, MessageHandler, filters
TOKEN = "YOUR_TOKEN"
# 正则规则:当消息命中任意模式时,机器人会回复自定义提示
RULES = {
"ad": r"(免费领取|加微信|兼职|代购)",
"link": r"https?://[\w.-]+",
"phone": r"(\+?\d{1,3}[- ]?)?\d{10}"
}
async def filter_message(update: Update, context):
text = update.message.text
if not text:
return
for rule_name, pattern in RULES.items():
if re.search(pattern, text):
await update.message.reply_text(f"⛔ 该消息被过滤(原因:)")
# 可选:自动删除消息(需要机器人有删除权限)
# await update.message.delete()
break
def main():
app = Application.builder().token(TOKEN).build()
app.add_handler(MessageHandler(filters.TEXT, filter_message))
print("机器人已启动...")
app.run_polling()
if __name__ == "__main__":
main()
步骤4:运行机器人
在终端执行 python filter_bot.py。把你的机器人添加到群组或对话中,它就会自动检测消息。如果要让它处理群组消息,需要先在BotFather中设置 /setprivacy 为 Disable,否则机器人无法看到所有消息。
正则过滤实用示例与技巧
下面提供几个高价值的过滤模式,你可以直接嵌入你的RULES字典中。
1. 过滤所有短于10个字符且带数字的消息
r"^\S*\d\S*$"
2. 识别邮箱地址
r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
3. 匹配多条关键词(用于屏蔽)
r"(赌博|博彩|刷单|跑分)"
4. 提取并转发特定格式的订单号
r"ORDER#(\w{5,})"
你可以用 re.findall 提取这些组,并自动执行后续动作,比如发送到指定聊天。
进阶:让过滤更智能的5个小建议
- 编译正则:在循环外使用
re.compile预编译,提升处理速度。 - 规则优先级:将更具体的规则放在前面,避免误判。
- 使用上下文:结合消息发送者ID,实现“只过滤陌生人”的定制逻辑。
- 添加白名单:允许特定用户跳过过滤,防止误伤好友。
- 日志记录:将过滤结果保存到日志,方便检查规则是否合理。
安全与隐私注意事项
当机器人监听群组消息时,它实际上可以读取所有消息,这涉及用户隐私。请务必:
- 只在信任的群组中使用,并提前告知成员有机器人过滤消息。
- 机器人Token不要泄露,否则他人可以控制你的机器人。
- 如果处理敏感信息,建议在本地运行,不要部署到公共服务器。
- 遵守Telegram服务条款和当地法规,不要用正则过滤来收集个人数据。
总结
虽然Telegram官方没有直接提供正则过滤入口,但通过程序化方式,我们完全可以用正则表达式打造专属的消息过滤器。从屏蔽垃圾信息到智能分类,你只需要一点点Python知识,就能让Telegram真正“懂你”。希望本文的步骤和代码能帮助你立即上手,享受清爽的聊天体验。