#python #telegram #telegram-bot #python-telegram-bot
Вопрос:
Я могу прекрасно использовать каждую кнопку с первой линейной панели(self._morebuttons1), и я могу открыть вторую линейную панель(self._morebuttons2) с первой, но ни одна кнопка не работает на второй линейной панели, вероятно, из-за обратного вызова данных. Я пытался вернуться к началу функции, но всегда получал ошибку NameError: name '_morebuttons1' is not defined
.
Как можно использовать две или более интерактивных панелей?
Пример моего кода:
handles = [
CommandHandler('One', self._one),
CommandHandler('morebuttons2', self._morebuttons2),
CommandHandler('Three', self._three),
CommandHandler('morebuttons1', self._morebuttons1),
]
callbacks = [
CallbackQueryHandler(self._morebuttons1_inline),
CallbackQueryHandler(self._morebuttons2_inline),
def _morebuttons1(self, update: Update, context: CallbackContext) -> None:
keyb = [[InlineKeyboardButton('One', callback_data='1')],
[InlineKeyboardButton('To the second inlinekeyboard', callback_data='2')]]
menu_choices = InlineKeyboardMarkup(keyb)
update.message.reply_text("start with commands 1", reply_markup=menu_choices)
for handle in handles:
self._updater.dispatcher.add_handler(handle)
for callback in callbacks:
self._updater.dispatcher.add_handler(callback)
def _morebuttons_inline(self, update: Update, context: CallbackContext) -> None:
if update.callback_query:
msg = update.callback_query
if msg.data == '1':
self._one(update, context),
if msg.data == '2':
self._morebuttons2(update, context)
return _morebuttons1
def _morebuttons2(self, update: Update, context: CallbackContext) -> None:
keyb = [[InlineKeyboardButton('Three', callback_data='3')],
[InlineKeyboardButton('Back to the first inlinekeyboard', callback_data='4')]]
menu_choices = InlineKeyboardMarkup(keyb)
update.callback_query.message.edit_text("start with commands 2", reply_markup=menu_choices)
def _morebuttons2_inline(self, update: Update, context: CallbackContext) -> None:
if update.callback_query:
msg = update.callback_query
if msg.data == '3':
self._three(update, context),
if msg.data == '4':
self._morebuttons1(update, context)
return _morebuttons2
Полная обратная связь:
Traceback (most recent call last):
File "/home/jamreg/TelegramBotTest/glc/tg1.py", line 69, in wrapper
return command_handler(self, *args, **kwargs)
File "/home/jamreg/TelegramBotTest/glc/tg1.py", line 1058, in _morebuttons1_inline
return _morebuttons1
NameError: name '_morebuttons1' is not defined
Спасибо! 🙂
Комментарии:
1. Можете ли вы показать полную обратную связь? Также было бы полезно увидеть выполняемые примеры, а не только обратные вызовы …
2. Я добавил полную обратную трассировку в код от командных команд до линейных панелей. 🙂 @CallMeStag
3. Я не вижу обратной связи. Обратная связь-это большой текстовый блог, который печатается при возникновении исключения. Это говорит вам, где это произошло. Для получения кода: Пожалуйста, прочитайте telegra.ph/Minimal-Working-Example-for-PTB-07-18
4. я добавил обратную трассировку
5. Ах. Мне, наверное, следовало бы быть
return self._morebuttons1
вместоreturn _morebuttons1
этого . Но я не могу сказать наверняка без MWE.
Ответ №1:
Я нашел решение. Просто объедините все данные из self._morebuttons_inline
и self._morebuttons2_inline
вместе. Спасибо @CallMeStag за помощь 🙂