使用Telethon向带启动参数的机器人发命令并获取返回响应的方法
你的代码主要存在两个核心问题:
- 执行顺序错误:在客户端还未完成启动登录的状态下就先发送了接口请求,同时事件监听器注册时机晚于请求发送,很容易漏掉机器人返回的响应
- 没有配置接收完响应后的退出逻辑,导致程序会长期驻留运行
最简实现代码
import os import asyncio from telethon import TelegramClient, events # 替换为你自己的参数 TG_API_ID = 你的APIID TG_API_HASH = 你的API哈希 TARGET_BOT = "@Bot" async def get_bot_response(): session_name = os.environ.get("TG_SESSION", "printer") async with TelegramClient(session_name, TG_API_ID, TG_API_HASH) as client: # 先注册消息监听器 @client.on(events.NewMessage(chats=TARGET_BOT)) async def handle_response(event): # 打印返回的价格数据 print(event.raw_text) # 收到数据后直接断开连接,释放资源 await client.disconnect() # 发送查询命令 await client.send_message(TARGET_BOT, "/price") # 阻塞等待直到连接断开 await client.run_until_disconnected() if __name__ == "__main__": asyncio.run(get_bot_response())
方案说明
- 用原生的
send_message方法发送指令,无需调用底层的StartBotRequest接口,写法更简洁 - 监听器注册完成后再发送指令,不会漏接响应
- 拿到返回结果后立刻主动断开连接,不会多余占用资源
- 完全适配Telethon最新版本的异步语法规范,无需手动管理事件循环
小提示:如果你确实需要通过
StartBotRequest唤起机器人,只需要把代码中send_message的部分替换为对应的接口调用即可,注意调用前要加await关键字。
内容的提问来源于stack exchange,提问作者BJonas88
相关产品推荐
相关产品推荐

