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

Telethon机器人开发:如何将用户输入赋值给变量messaggio?

Telethon 回调事件后捕获用户输入实现方案

你原有写法的核心问题是:不应该在CallbackQuery事件处理函数内部嵌套注册NewMessage事件,每次触发b"9"回调时都会重复注册消息监听,后续会出现重复响应的异常。

推荐使用 Telethon 内置的Conversation(对话)功能实现等待用户输入的需求,实现代码如下:

from telethon import events

# 单用户场景可直接用全局变量存储,多用户场景建议替换为以用户ID为key的字典
messaggio = ""

@bot.on(events.CallbackQuery)
async def handler(event):
    if event.data == b"3":
        await event.respond("x", buttons=x)
    if event.data == b"7":
        await event.respond("x", buttons=x)
    if event.data == b"9": 
        await event.respond("insert x")
        # 开启和当前触发回调用户的对话,设置超时时间为60秒,无超时需求可填None
        async with bot.conversation(event.sender_id, timeout=60) as conv:
            # 阻塞等待用户发送新消息
            user_reply = await conv.get_response()
            # 为变量赋值
            global messaggio
            messaggio = user_reply.text
            # 可选:给用户发送接收成功的反馈
            await conv.send_message(f"已录入内容:{messaggio}")

注意事项

  • 多用户同时使用的场景下,不要用全局单变量存储输入内容,建议用字典做用户级隔离,示例:
# 初始化存储容器
user_input_map = {}

# 赋值逻辑修改为
user_input_map[event.sender_id] = user_reply.text
  • 若不需要使用Conversation组件,也可以通过全局状态标记实现:给触发了b"9回调的用户标记「等待输入」状态,在全局注册的NewMessage事件中判断用户状态,存在等待标记则捕获消息内容赋值、再清除标记即可。

内容的提问来源于stack exchange,提问作者kekkoilmedikit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:05