gpt4 book ai didi

python - Telegram 机器人无法在回复键盘后发送消息

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:27 28 4
gpt4 key购买 nike

我是 Telegram bot api 的新手,正在尝试制作一个带有内联键盘的简单机器人。我的机器人工作正常,但在选择最终内联键盘选项后无法发回消息。这是我的代码:

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()

在选择主菜单的一个选项时,下一个菜单会相应出现,但是当从第二个菜单中选择该选项时,即使我为这些选项的回调数据添加了处理程序,并且函数必须发送,也没有任何反应消息。我究竟做错了什么?

最佳答案

我建议,read这段代码并使用 ConversationHandler 而不是这个。您只需将用户返回到特定状态并等待命令、消息或回调,然后获取更新并在检测到用户操作后完成您的工作。

  • 当您初始化更新程序时,您不必也初始化机器人。更新程序对象传递两个机器人,在收到用户输入时更新到您的函数。

关于python - Telegram 机器人无法在回复键盘后发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58901846/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com