如何用Python获取Telegram机器人发送的消息并执行后续操作?
实现Telegram机器人消息的监听与打印
当然可以实现,分两种场景给出解决方案:
场景1:作为用户接收并打印机器人发来的消息
如果是你作为聊天用户,想要捕获机器人主动发送给你的消息并打印,需要使用Telegram用户客户端库(比如telethon),因为机器人API只能监听发给它的消息,无法获取用户收到的消息。
步骤:
- 安装依赖库
pip install telethon
- 获取你的API ID和API Hash:在Telegram开发者平台(my.telegram.org)注册账号、创建应用后即可获得。
- 编写监听代码:
from telethon import TelegramClient, events import asyncio # 替换为你的信息 API_ID = 你的API_ID数字 API_HASH = '你的API_HASH字符串' SESSION_NAME = 'telegram_session' # 本地登录状态保存文件名 TARGET_BOT_USERNAME = '@目标机器人的用户名' # 比如@example_bot async def main(): # 初始化客户端,首次运行需输入手机号和验证码登录 client = TelegramClient(SESSION_NAME, API_ID, API_HASH) await client.start() # 监听所有新消息 @client.on(events.NewMessage) async def handle_bot_message(event): sender = await event.get_sender() # 判断消息是否来自目标机器人 if sender and sender.username == TARGET_BOT_USERNAME.lstrip('@'): print(f"机器人消息内容:{event.message.text}") # 执行后续操作 await process_bot_message(event.message.text) print("客户端已启动,等待机器人消息...") await client.run_until_disconnected() async def process_bot_message(msg_text): # 示例:根据消息内容执行不同操作 if '订单' in msg_text: print("开始处理订单相关逻辑") elif '提醒' in msg_text: print("触发提醒操作") if __name__ == '__main__': asyncio.run(main())
场景2:开发机器人后端,打印机器人发出的消息
如果你是机器人开发者,想要在后端打印机器人发送给用户的消息,只需在发送消息的代码块中直接打印即可,以python-telegram-bot库为例:
步骤:
- 安装依赖库
pip install python-telegram-bot==13.7
- 编写机器人代码:
from telegram import Update from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext BOT_TOKEN = '你的机器人Token' def start_cmd(update: Update, context: CallbackContext): reply_msg = "你好!这是机器人的欢迎消息" # 打印即将发送的消息 print(f"机器人将发送:{reply_msg}") update.message.reply_text(reply_msg) def echo_msg(update: Update, context: CallbackContext): user_input = update.message.text print(f"用户消息:{user_input}") reply_msg = f"你输入的内容是:{user_input}" # 打印机器人回复内容 print(f"机器人将发送:{reply_msg}") update.message.reply_text(reply_msg) def main(): updater = Updater(BOT_TOKEN) dp = updater.dispatcher dp.add_handler(CommandHandler("start", start_cmd)) dp.add_handler(MessageHandler(Filters.text & ~Filters.command, echo_msg)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者Juan Pablo Rodríguez
相关产品推荐
相关产品推荐

