您是否遇到过这样的问题:在Telegram群组中,想要实时追踪特定关键词、新成员入群消息或管理员指令,却不知道如何实现自动监听?手动翻看聊天记录不仅效率低下,还容易遗漏重要信息。本教程将手把手教您如何搭建一个Telegram监听机器人,实现群组消息的自动抓取、关键词过滤和消息转发,让您不再错过任何关键内容。
准备工作:注册Telegram账号并获取API凭证
具体操作说明:
首先,您需要一个Telegram账号。如果还没有,请下载Telegram官方客户端(支持iOS、Android、Windows、macOS等平台),使用手机号注册。注册完成后,在客户端中搜索并关注@BotFather(Telegram官方机器人创建工具)。在对话窗口中输入 /newbot指令,按提示为您的监听机器人设置一个名称(如“MyMonitorBot”)和用户名(必须以bot结尾,如“MyMonitor123Bot”)。创建成功后,BotFather会返回一个API Token(格式如:123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11),请务必复制并妥善保存,这是后续操作的核心凭证。
注意事项/小提示:
- 用户名一旦设置不可更改,请谨慎选择。
- API Token相当于机器人的密码,切勿泄露给他人,否则他人可控制您的机器人。
- 建议将Token保存在本地加密笔记或密码管理器中。
备用方案:
- 如果找不到BotFather,请确保您输入的是完全匹配的英文用户名:@BotFather。
- 若Token丢失,可在BotFather中发送 /mybots,选择您的机器人,点击 API Token重新生成。
创建并初始化监听机器人脚本环境
具体操作说明:
监听机器人需要运行在服务器或个人电脑上。推荐使用Python 3.8及以上版本。在您的设备上安装Python后,打开终端(Windows为命令提示符或PowerShell,macOS/Linux为终端),运行以下命令安装核心依赖库:
`bash
pip install python-telegram-bot==13.15
`
(注意:版本号可根据最新稳定版调整,但建议使用13.x系列,因20.x版本API变动较大)。安装完成后,创建一个新的Python文件(如monitor_bot.py),并导入库:
`python
from telegram.ext import Updater, MessageHandler, Filters
import logging
`
设置日志记录以便调试:
`python
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
`
注意事项/小提示:
- 如果pip安装失败,请先升级pip:
pip install --upgrade pip。 - 若使用国内网络,可添加镜像源:
pip install python-telegram-bot==13.15 -i https://pypi.tuna.tsinghua.edu.cn/simple。 - 确保Python已正确添加到系统PATH环境变量中。
备用方案:
- 如果您熟悉Node.js,也可使用
node-telegram-bot-api库,但本教程以Python为例。 - 对于不想编程的用户,可搜索现成的开源项目(如
Telegram-Monitor-Bot),但需自行配置。
编写核心监听逻辑:消息抓取与关键词过滤
具体操作说明:
在monitor_bot.py文件中,定义消息处理函数。以下是一个基础版本,监听所有群组消息并打印到控制台:
`python
def handle_message(update, context):
message = update.message
if message.chat.type in ['group', 'supergroup']: # 只处理群组消息
text = message.text
if text: # 确保有文本内容
print(f"收到群组 {message.chat.title} 的消息: {text}")
# 关键词过滤示例:如果消息包含"紧急",则记录
if "紧急" in text:
print(f"⚠️ 发现关键词: {text}")
`
然后,在主函数中绑定处理器:
`python
def main():
updater = Updater("YOUR_TOKEN_HERE", use_context=True) # 替换为您的Token
dp = updater.dispatcher
dp.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_message))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
`
运行脚本后,机器人即可开始监听。您可以根据需要扩展关键词列表,例如从外部文件读取关键词。
注意事项/小提示:
- 机器人必须被添加到目标群组并授予管理员权限(至少需要“发送消息”和“读取消息”权限),否则无法接收消息。
Filters.text只处理纯文本,如需监听图片、文件等,需添加其他过滤器。- 生产环境中,建议将关键词存储为列表或从数据库动态加载。
备用方案:
- 如需监听特定用户的消息,可在
handle_message中判断message.from_user.id。 - 若群组消息量巨大,可添加
Filters.chat(chat_id)只监听特定群组。
配置消息转发与通知功能
具体操作说明:
除了打印,更实用的功能是将重要消息转发到您自己的私人聊天或另一个群组。首先,获取您的个人用户ID:在Telegram中搜索@userinfobot,发送任意消息,它会返回您的ID(一串数字)。然后,在handle_message中添加转发逻辑:
`python
def handle_message(update, context):
message = update.message
if message.chat.type in ['group', 'supergroup']:
text = message.text
if text and "紧急" in text:
# 转发到您的私人聊天
context.bot.send_message(chat_id=YOUR_USER_ID, text=f"群组 {message.chat.title} 发现紧急消息:\n{text}")
# 或者转发到另一个群组(需机器人已在那个群组中)
# context.bot.forward_message(chat_id=ANOTHER_GROUP_ID, from_chat_id=message.chat_id, message_id=message.message_id)
`
重启机器人后,当群组中出现包含“紧急”的消息时,您会立即收到私信通知。
注意事项/小提示:
- 机器人无法主动给用户发消息,除非用户先与机器人对话(发送
/start)。因此,请先向您的机器人发送/start,然后它才能向您推送通知。 - 转发消息时,
forward_message会保留原消息的发送者信息;如果只想转发文本内容,使用send_message更简洁。 - 注意Telegram API的速率限制,避免频繁发送消息导致封禁。
备用方案:
- 如需发送到多个目标,可将
chat_id列表循环处理。 - 可集成邮件或Webhook通知(如企业微信、钉钉),通过requests库发送HTTP请求。
验证监听功能是否正常
具体操作说明:
完成代码后,进行端到端测试。将机器人添加到测试群组(或您自己的私人群组),并授予管理员权限。在终端运行python monitor_bot.py启动机器人。然后,在群组中发送一条包含关键词(如“紧急测试”)的消息。查看终端输出,应该能看到类似“收到群组 测试群 的消息: 紧急测试”以及“⚠️ 发现关键词: 紧急测试”的日志。同时,检查您的私人聊天,应收到机器人转发的通知。如果一切正常,说明监听机器人已成功运行。
注意事项/小提示:
- 如果终端没有任何输出,请检查Token是否正确、机器人是否在群组中、是否添加了
Filters.text(非命令消息)。 - 测试时建议使用一个与生产环境隔离的测试群组。
- 确保您的设备或服务器保持开机状态,否则机器人会离线。
备用方案:
- 如果机器人无响应,在BotFather中检查机器人状态是否为“Running”,若为“Stopped”,发送
/setprivacy并选择“Disable”(关闭隐私模式),使机器人能读取所有消息。 - 使用
print(update)可打印完整更新对象,帮助调试。
常见问题补充
问:机器人能监听私聊消息吗?
答:可以,但需要将代码中的message.chat.type条件移除或改为'private'。注意监听私聊可能涉及隐私问题,请遵守相关法律法规。
问:如何让机器人只监听特定用户的消息?
答:使用message.from_user.id判断,例如:if message.from_user.id == TARGET_USER_ID:。
问:机器人运行一段时间后自动停止怎么办?
答:可能是网络波动或API错误导致。建议使用进程管理工具(如supervisor、pm2或systemd)保持脚本持续运行,并添加异常重试机制(如try-except包裹核心逻辑)。
问:关键词可以支持正则表达式吗?
答:可以。导入re模块,使用re.search(pattern, text)替代简单的in判断,实现更灵活的匹配。
总结:
通过本教程,您已学会从零搭建Telegram监听机器人,实现群组消息的自动抓取、关键词过滤和消息转发,核心在于获取API Token、编写Python脚本、配置权限并验证运行。