【问题标题】:Don't know how handle keyboard two if judgment in pyTelegramBotApi不知道在pyTelegramBotApi中判断如何处理键盘二
【发布时间】:2021-05-09 16:19:53
【问题描述】:

我的问题是当用户使用命令 /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.")

【问题讨论】:

    标签: python-3.x py-telegram-bot-api


    【解决方案1】:

    您的第一个代码不起作用,因为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 为新的输入(不需要键盘)启动这个函数。

    【讨论】:

    • 非常感谢,解决了我的问题
    猜你喜欢
    • 2015-08-22
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多