Telegram Bot密码验证开发:错误密码时屏蔽信息实现方案
修正后的Telegram Bot密码验证实现
原代码存在的问题
- 错误使用
while True循环:Telegram Bot基于事件驱动,每次用户发送消息都会触发独立请求,死循环会阻塞函数,无法处理后续交互。 - 密码获取逻辑错误:
update.message.reply_text的返回值是发送的消息对象,并非用户输入的密码,且参数传递不符合函数定义。 - 无状态跟踪:无法区分用户是首次启动还是重试密码,导致交互逻辑混乱。
修正后的代码
from telegram import Update, ReplyKeyboardMarkup from telegram.ext import ( Updater, CommandHandler, MessageHandler, Filters, CallbackContext, ConversationHandler ) # 定义对话状态常量 PASSWORD_STEP = 0 def start(update: Update, context: CallbackContext): update.message.reply_text('Добро пожаловать') update.message.reply_text('введите пароль') return PASSWORD_STEP def check_password(update: Update, context: CallbackContext): user_input = update.message.text.strip() if user_input == "9900": # 示例键盘,可根据实际需求修改 buttons = ReplyKeyboardMarkup([['功能A'], ['功能B']], resize_keyboard=True) update.message.reply_html('Imzo Factory', reply_markup=buttons) # 标记用户已通过验证 context.user_data['authenticated'] = True return ConversationHandler.END else: update.message.reply_text('Неверный пароль, попробуйте снова') return PASSWORD_STEP def protected_content_handler(update: Update, context: CallbackContext): # 校验用户是否已通过密码验证 if not context.user_data.get('authenticated', False): update.message.reply_text('Пожалуйста, сначала введите пароль, используя команду /start') return # 此处编写需要验证后才能访问的业务逻辑 update.message.reply_text('Вы получили защищенную информацию') def main(): # 替换为你的Bot Token updater = Updater("YOUR_BOT_TOKEN") dp = updater.dispatcher # 对话处理器管理密码验证流程 conv_handler = ConversationHandler( entry_points=[CommandHandler('start', start)], states={ PASSWORD_STEP: [MessageHandler(Filters.text & ~Filters.command, check_password)] }, fallbacks=[CommandHandler('start', start)] ) dp.add_handler(conv_handler) # 添加受保护内容的处理器 dp.add_handler(MessageHandler(Filters.text & ~Filters.command, protected_content_handler)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
代码说明
- 采用
ConversationHandler管理密码验证的对话流程,适配Telegram Bot的事件驱动模型,避免阻塞。 - 通过
context.user_data存储用户验证状态,确保只有通过验证的用户才能访问受保护的内容。 - 分离密码验证逻辑与业务逻辑,结构清晰易维护。
- 错误密码输入时,会提示用户重新输入,直到验证通过或用户重新触发
/start命令。
内容的提问来源于stack exchange,提问作者Akbar Xo'jayev
相关产品推荐
相关产品推荐

