如何在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
相关产品推荐
相关产品推荐

