Решил недавно написать телеграм бота для работы с QIWI api, используя библиотеку Telebot. Для реализации платежей сделал связь из инлайн кнопок, в которых пользователь сначала выбирает хочет ли он добавить комментарий к платежу, после чего подтверждает отправление платежа. Столкнулся с такой проблемой, что бот реагирует только на выбор в первых инлайн кнопках, после чего уже в подтверждении платежа перестает как-либо реагировать на нажатие кнопок (на кнопках появляется значок часиков).
В терминале при этом никаких ошибок не выводится, из чего я сделал вывод, что бот просто не видит обработку значений всех последующих кнопок.
Весь необходимый код прилагаю и заранее извиняюсь за (возможно) банальные ошибки. Решение много где пробовал искать, к сожалению не нашел, очень надеюсь на вас :3
#ПЛАТЕЖИ
@bot.message_handler(regexp=' Перевести на кошелек ')
def send_money_phone(message):
bot.send_message(message.chat.id, 'Пришлите номер кошелька QIWI, на который хотите отправить деньги\n\nНапример : +79999999999 ')
bot.register_next_step_handler(message, send_money_summ)
def send_money_summ(message):
global tel
tel = message.text
try:
len(tel) > 11
bot.send_message(message.chat.id, ' Пришлите сумму, которую хотите отправить (в рублях) ')
bot.register_next_step_handler(message, send_money_comm)
except:
bot.send_message(message.chat.id, '⚠️ Введите правильный номер телефона\n\nНапример : +79999999999 ⚠️')
send_money_phone(message)
def send_money_comm(message):
global summ
summ = message.text
try:
float(summ)
keyboard = types.InlineKeyboardMarkup()
key_send = types.InlineKeyboardButton(text=' Да, хочу ', callback_data='yes')
keyboard.add(key_send)
key_edit = types.InlineKeyboardButton(text='❌ Нет, спасибо ❌', callback_data='no')
keyboard.add(key_edit)
bot.send_message(message.chat.id, ' Хотите прислать комментарий к платежу? ', reply_markup=keyboard)
except:
bot.send_message(message.chat.id, '⚠️ Введите правильную сумму для перевода ⚠️')
send_money_summ(message)
def abc123(message):
bot.send_message(message.chat.id, ' Введите комментарий ')
bot.register_next_step_handler(message, abc321)
def abc321(message):
global tel
global summ
global comm
global wallet
comm = message.text
keyboard = types.InlineKeyboardMarkup()
key_send = types.InlineKeyboardButton(text=' Да, уверен ', callback_data='yea1')
keyboard.add(key_send)
key_edit = types.InlineKeyboardButton(text='❌ Нет, не уверен ❌', callback_data='nope1')
keyboard.add(key_edit)
bot.send_message(message.chat.id, '❓ Вы уверены, что хотите отправить на номер ' + str(tel) + ' ' + str(summ) + '₽ с комментарием "' + str(comm) + '" ❓', reply_markup=keyboard)
def nocomm(message):
global wallet
global summ
global tel
keyboard = types.InlineKeyboardMarkup()
key_send = types.InlineKeyboardButton(text=' Да, уверен ', callback_data='yea2')
keyboard.add(key_send)
key_edit = types.InlineKeyboardButton(text='❌ Нет, не уверен ❌', callback_data='nope2')
keyboard.add(key_edit)
bot.send_message(message.chat.id, '❓ Вы уверены, что хотите отправить на номер ' + str(tel) + ' ' + str(summ) + '₽ без комментария ' + '❓', reply_markup=keyboard)
# выбор вида платежа (с комментарием / без)
@bot.callback_query_handler(func=lambda call: True)
def callback(call):
if call.data == 'yes':
abc123(call.message)
elif call.data == 'no':
nocomm(call.message)
# Подтверждение платежа с комментарием
@bot.callback_query_handler(func=lambda call: True)
def dhsdsd(call):
global wallet
global tel
global summ
global comm
if call.data == 'yea1':
try:
wallet.pay(account=tel, amount=summ, comment=comm)
bot.send_message(message.chat.id, '✅ Платеж совершен успешно! ✅')
except:
bot.send_message(message.chat.id, '⚠️ Не удалось совершить платеж ⚠️')
elif call.data == 'nope1':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
watch_balance = types.KeyboardButton(' Посмотреть баланс ')
send_money_button = types.KeyboardButton(' Перевести на кошелек ')
edit_data = types.KeyboardButton('️ Изменить данные ️')
markup.add(watch_balance)
markup.add(send_money_button)
markup.add(edit_data)
bot.send_message(message.chat.id, ' Выберите, что делать ', reply_markup=markup)
# Подтверждение платежа без коммента
@bot.callback_query_handler(func=lambda call: True)
def fdfdf(call):
if call.data == 'yea2':
global wallet
global summ
global tel
try:
wallet.pay(account=tel, amount=summ, comment='')
bot.send_message(message.chat.id, '✅ Платеж отправлен успешно! ✅')
except:
bot.send_message(message.chat.id, '⚠️ Не удалось отправить платеж, проверьте правильность перевода ⚠️')
elif call.data == 'nope2':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
watch_balance = types.KeyboardButton(' Посмотреть баланс ')
send_money_button = types.KeyboardButton(' Перевести на кошелек ')
edit_data = types.KeyboardButton('️ Изменить данные ️')
markup.add(watch_balance)
markup.add(send_money_button)
markup.add(edit_data)
bot.send_message(message.chat.id, 'Выберите что делать', reply_markup=markup)