我是Telegram机器人api的新手,正在尝试使用嵌入式键盘制作一个简单的bot。我的机器人运行正常,但在选择了最终的嵌入式键盘选项后无法发送回消息。这是我的代码:
import telegram
from telegram.ext import Updater,CommandHandler,MessageHandler,Filters,CallbackQueryHandler
from telegram import InlineKeyboardButton,InlineKeyboardMarkup,KeyboardButton,ReplyKeyboardMarkup
def start(bot, update):
bot.send_message(chat_id=update.message.chat_id, text='Hi, I am Food Bot')
update.message.reply_text(main_menu_message(),
reply_markup=main_menu_keyboard())
def main_menu(bot, update):
query = update.callback_query
bot.edit_message_text(chat_id=query.message.chat_id,
message_id=query.message.message_id,
text=main_menu_message(),
reply_markup=main_menu_keyboard())
def first_menu(bot, update):
query = update.callback_query
bot.edit_message_text(chat_id=query.message.chat_id,
message_id=query.message.message_id,
text=first_menu_message(),
reply_markup=first_menu_keyboard())
def second_menu(bot, update):
query = update.callback_query
bot.edit_message_text(chat_id=query.message.chat_id,
message_id=query.message.message_id,
text=second_menu_message(),
reply_markup=second_menu_keyboard())
def main_menu_keyboard():
keyboard = [[InlineKeyboardButton('Breakfast', callback_data='op1')],
[InlineKeyboardButton('Lunch or Dinner', callback_data='op2')]]
return InlineKeyboardMarkup(keyboard)
def first_menu_keyboard():
keyboard = [[InlineKeyboardButton('Omelette and 2 Bread slices with coffee',callback_data = 'b1')],
[InlineKeyboardButton('Aloo paratha with curd and tea',callback_data = 'b2')],
[InlineKeyboardButton('Masala dosa with sambar and chutney with coffee',callback_data = 'b3')]]
return InlineKeyboardMarkup(keyboard)
def second_menu_keyboard():
keyboard = [[InlineKeyboardButton('Paneer Makhni with 2 rotis and rice',callback_data = 'l1')],
[InlineKeyboardButton('Pasta in white sauce with 2 pieces of garlic bread',callback_data = 'l2')],
[InlineKeyboardButton('Biryani with raita',callback_data = 'l3')]]
return InlineKeyboardMarkup(keyboard)
def main_menu_message():
return 'What do you want to order?'
def first_menu_message():
return 'Choose the food option:'
def second_menu_message():
return 'Choose the food option:'
def breakfast1(bot,update):
bot.send_message(chat_id=update.message.chat_id,
message_id=update.message.message_id,
text='Your order: Omelette and 2 Bread slices with coffee')
def breakfast2(bot,update):
bot.send_message(chat_id=update.message.chat_id,
message_id=update.message.message_id,
text='Your order: Aloo paratha with curd and tea')
def breakfast3(bot,update):
bot.send_message(chat_id=update.message.chat_id,
message_id=update.message.message_id,
text='Your order: Masala dosa with sambar and chutney with coffee')
def lunchdinner1(bot,update):
bot.send_message(chat_id=update.message.chat_id,
message_id=update.message.message_id,
text='Your order: Paneer Makhni with 2 rotis and rice')
def lunchdinner2(bot,update):
bot.send_message(chat_id=update.message.chat_id,
message_id=update.message.message_id,
text='Your order: Pasta in white sauce with 2 pieces of garlic bread')
def lunchdinner3(bot,update):
bot.send_message(chat_id=update.message.chat_id,
message_id=update.message.message_id,
text='Biryani with raita')
def main():
bot=telegram.Bot(token=TOKEN)
updater = Updater(token=TOKEN)
updater.dispatcher.add_handler(CommandHandler('start', start))
updater.dispatcher.add_handler(CallbackQueryHandler(main_menu, pattern='main'))
updater.dispatcher.add_handler(CallbackQueryHandler(first_menu, pattern='op1'))
updater.dispatcher.add_handler(CallbackQueryHandler(second_menu, pattern='op2'))
updater.dispatcher.add_handler(CallbackQueryHandler(breakfast1,
pattern='b1'))
updater.dispatcher.add_handler(CallbackQueryHandler(breakfast2,
pattern='b2'))
updater.dispatcher.add_handler(CallbackQueryHandler(breakfast3,
pattern='b3'))
updater.dispatcher.add_handler(CallbackQueryHandler(lunchdinner1,
pattern='l1'))
updater.dispatcher.add_handler(CallbackQueryHandler(lunchdinner2,
pattern='l2'))
updater.dispatcher.add_handler(CallbackQueryHandler(lunchdinner3,
pattern='l3'))
updater.start_polling()
if __name__ == '__main__':
main()
在选择主菜单中的一个选项时,相应地出现下一个菜单,但是当从第二个菜单中选择了该选项时,即使我为这些选项的回调数据添加了处理程序,也没有任何反应,并且函数必须发送消息。我究竟做错了什么?
答案 0 :(得分:0)
我建议read此代码,并使用ConversationHandler代替它。您只需要使用户返回特定状态,然后等待命令,消息或回调,然后获取更新,并在检测到用户操作后执行您的工作即可。