Как обратиться к inline кнопкам которые находятся в функции
У меня есть функция в которой созданы 2 кнопки.
def buy_menu(is_url=True, url='', bill=''):
qiwi_menu = InlineKeyboardMarkup(row_width=2)
if is_url:
btn_url_qiwi = InlineKeyboardButton(text="Ссылка на оплату", url=url)
qiwi_menu.insert(btn_url_qiwi)
btn_check_qiwi_ = InlineKeyboardButton(text="какой-то текст", callback_data="check_" + bill)
qiwi_menu.insert(btn_check_qiwi_)
return qiwi_menu
Как мне отловить нажатие этих кнопок в коде? Я знаю как работать с кнопками вне функции (то бишь кнопка просто создана и находится вне функции) Допустим если инлайн кнопка создана не в функции, ее нажатие можно отследить, например так: Так создана кнопка:
btn_pay = InlineKeyboardButton(text='=какой-то текст', callback_data='pay')
Так я отслеживаю ее нажатие:
@dp.callback_query_handler(lambda c: c.data == 'pay')
async def process_callback_button_pay(callback_query: types.CallbackQuery):
await bot.answer_callback_query(callback_query.id)
В общем сейчас я не понимаю как сделать тоже самое, но для инлайн кнопок которые находятся в def Если что плохо объяснил/написал спрашивайте. Я только учусь так что я гриб на данном этапе Использую aiogram
Ответы (1 шт):
Приветик! Я так понимаю, нужно проверить статус чека? Я бы сделал отдельный хендлер и в нем проверял бы статус чека.
Как-то так:
from pyqiwip2p import QiwiP2P
p2p = QiwiP2P(auth_key='ТОКЕН КИВИ')
def buy_menu(url:str, bill_id:str) -> types.InlineKeyboardMarkup:
qiwi_menu = InlineKeyboardMarkup(row_width=2)
if url:
btn_url_qiwi = InlineKeyboardButton(text="Ссылка на оплату", url=url)
qiwi_menu.insert(btn_url_qiwi)
btn_check_qiwi_ = InlineKeyboardButton(text="какой-то текст", callback_data="check_" + bill_id)
qiwi_menu.insert(btn_check_qiwi_)
return qiwi_menu
@dp.callback_query_handler(text_startswith='check_')
async def checkpayment(call: types.CallbackQuery):
bill_id=call.data.split('_')[1] #БЕРЕМ ID ЧЕКА
bill=p2p.check(bill_id)
if bill.status == 'PAID':
billinfo=int(float(bill.amount))
else:
billinfo=False
if billinfo == False:
await call.answer('Оплата еще не получена!', True)
else:
await bot.send_message(call.message.chat.id, 'Мы получили оплату')
#делаем действие
Решение рассчитано на: aiogram+pyqiwip2p
Данные для buy_menu можно создать так:
bill=p2p.bill(amount='цена', lifetime='жизнь ссылки', comment='коммент')
keyboard=buy_menu(bill.pay_url, bill.bill_id) #цена и жизнь - числа