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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:45:05