如果在 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
新输入(不需要键盘) .
我的问题是当用户使用命令 /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
新输入(不需要键盘) .