You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Telethon向带启动参数的机器人发命令并获取返回响应的方法

你的代码主要存在两个核心问题:

  1. 执行顺序错误:在客户端还未完成启动登录的状态下就先发送了接口请求,同时事件监听器注册时机晚于请求发送,很容易漏掉机器人返回的响应
  2. 没有配置接收完响应后的退出逻辑,导致程序会长期驻留运行

最简实现代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:57:05