如果在 pyTelegramBotApi 中判断,不知道如何处理键盘二

Don't know how handle keyboard two if judgment in pyTelegramBotApi

我的问题是当用户使用命令 /menu 时会出现键盘

并且用户在键盘输入内容,它使用if条件检查用户是否输入了我指定的文本

如果是,转到下一个键盘,然后检查用户是否输入了我指定的文本

我希望用户使用命令来确定他的文本是否输入正确。

现在如果用户没有打开键盘但输入了正确的文字,则可以显示条件中的文字。

我该如何解决这个问题?

希望效果如下(代码打不开)

@bot.message_handler(commands=['menu'])
def menu(message):
   main_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
   main_keyboard.row('OS System','WebSite')
   bot.send_message(chat_id=message.chat.id, text="what you want to see?", reply_markup=main_keyboard)
   if message.text =="OS System":
       os_system_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
       os_system_keyboard.row('Linux','Windows')
       bot.send_message(chat_id=message.chat.id, text="what os you want to see?", reply_markup=os_system_keyboard)
       if message.text =="Liunx":
           bot.send_message(message,"Linux distros : Ubuntu,LiunxMint....")
       elif message.text =="Windows":
           bot.send_message(message,"Windows distros : windows7 windows xp...")
   elif message.text =="WebSite":
       website_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
       website_keyboard.row('Videos','Knowledge')
       bot.send_message(message,"What type website you want to know ?")
       if message.text =="Videos":
           bot.send_message(message,"Youtube, Netfilx")
       elif message.text =="Knowledge":
           bot.send_message(message,"wiki...")
   else:
       bot.send_message(message,"The text you have entered has no relevant content,Please try again.")

我不想喜欢这个:

def main_menu(msg):                     #(row_width=4)
    main_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    main_keyboard.row('OS System','WebSite')
    bot.send_message(chat_id=message.chat.id, text="what you want to see?", reply_markup=main_keyboard)

def os_menu(msg):
    os_system_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    os_system_keyboard.row('Linux','Windows')
    bot.send_message(chat_id=message.chat.id, text="what os you want to see?", reply_markup=os_system_keyboard)

def web_menu(msg):
    web_keyborad = types.ReplyKeyboardMarkup(resize_keyboard=True)
    os_system_keyboard.row('Videos','Knowledge')

@bot.message_handler(commands=['menu'])
def menu(message):
    main_menu(message)

@bot.message_handler(content_types=['text'])
def echo_message(message):
    if message.text =="OS System":
        main_keyboard(message)
    elif message.text =="WebSite":
        web_keyborad(message)
    elif message.text =="Linux":
        bot.send_message(message,"Linux distros : Ubuntu,LiunxMint....")
    elif message.text =="Windows"
        bot.send_message(message,"Windows distros : windows7 windows xp...")
    elif message.text =="Videos":
        bot.send_message(message,"Youtube, Netfilx")
    elif message.text =="Knowledge":
        bot.send_message(message,"wiki...")
    else:
        bot.send_message(message,"The text you have entered has no relevant content,Please try again.")

您的第一个代码不起作用,因为 msg.chat.id 始终相同并且不会每次都改变(它是一个简单的变量)。您可以使用 next_step_handler() 方法解决该问题;这是一些代码:

@bot.message_handler(commands=['menu'])
def menu(message):
    main_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    main_keyboard.row('OS System','WebSite')
    msg = bot.send_message(chat_id=message.chat.id, text="what you want to see?", reply_markup=main_keyboard)
    bot.next_step_handler(msg, options)

def options(message):
    if message.text =="OS System":
        os_system_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
        os_system_keyboard.row('Linux','Windows')
        msg = bot.send_message(chat_id=message.chat.id, text="what os you want to see?", reply_markup=os_system_keyboard)
        bot.next_step_handler(msg, osSistem)
    elif message.text =="WebSite":
        website_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
        website_keyboard.row('Videos','Knowledge')
        msg = bot.send_message(message,"What type website you want to know ?")
        bot.next_step_handler(msg, website)

def osSistem(message):
    if message.text =="Liunx":
        bot.send_message(message,"Linux distros : Ubuntu,LiunxMint....")
    elif message.text =="Windows":
        bot.send_message(message,"Windows distros : windows7 windows xp...")

def website(message):
    if message.text =="Videos":
        bot.send_message(message,"Youtube, Netfilx")
    elif message.text =="Knowledge":
        bot.send_message(message,"wiki...")

使用此 next_step_handler,您可以传递一条消息和一个函数,python 将启动该函数作为 message 新输入(不需要键盘) .