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

如何在Pyrogram中实现类似Python input()的用户输入获取功能

Pyrogram 实现用户交互式输入方案

核心逻辑说明

  • 不能使用Python原生input()函数,该函数仅用于读取本地控制台输入,无法获取Telegram用户发送的消息
  • 仅需要用内存字典临时存储用户会话状态即可,无需落地到本地存储:
    • 用户触发/start命令后,标记该用户处于「等待输入内容」的状态
    • 单独设置消息处理器,监听非命令的普通消息,判断发送用户是否处于等待输入状态
    • 拿到用户输入内容后处理回复,同时清除该用户的状态标记

完整实现代码

from pyrogram import Client, filters

# 初始化机器人实例,需替换为你自己的api_id、api_hash、bot_token
bot = Client(
    "bot",
    api_id=123456,
    api_hash="你的api_hash字符串",
    bot_token="你的机器人token"
)

# 临时存储用户状态,仅在内存中存在,程序重启后自动清空
user_state = {}

@bot.on_message(filters.command('start'))
def start_handler(bot, msg):
    # 标记当前用户处于等待输入状态
    user_state[msg.from_user.id] = "waiting_for_input"
    bot.send_message(msg.chat.id, text="你想要说什么?")

# 监听所有非命令的普通文本消息
@bot.on_message(filters.text & ~filters.command)
def message_handler(bot, msg):
    user_id = msg.from_user.id
    # 判断用户是否处于等待输入状态
    if user_id in user_state and user_state[user_id] == "waiting_for_input":
        # 回复用户输入的内容
        bot.send_message(msg.chat.id, text=f"你刚才说的是:{msg.text}")
        # 清除用户状态,避免后续普通消息被误处理
        del user_state[user_id]

if __name__ == "__main__":
    bot.run()

补充说明

  • 如果你使用Pyrogram的异步语法,只需要给处理函数加async修饰,调用API方法前加await即可
  • 该方案默认单进程运行,如果是多进程部署可以改用Redis等内存数据库存储状态,核心逻辑无需修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:15:05