@11zeroxxx11

При нажатие на кнопку в telebot ни сего не происходит, проблема и её решение?

import telebot
from telebot import types
from db.database import create_account
from config import TOKEN

bot = telebot.TeleBot(TOKEN)


sub = 'default'
id = ''

@bot.message_handler(commands=['start'])
def start_cmd(message):
    markup = types.InlineKeyboardMarkup()
    btn1 = types.InlineKeyboardButton("Регестрация", callback_data = 'register')
    btn2 = types.InlineKeyboardButton("Для чего нужна регестрация? Что нужно для неё?⁉", callback_data = 'faq')
    markup.add(btn1, btn2)
    bot.send_message(message.from_user.id, f"Привет, я бот который скачивает видео с YouTube!\n Для начало работы нажми на кнопку <b>'Регестрация'</b>.",
                     parse_mode="html", reply_markup=markup)

@bot.callback_query_handler(func = lambda callback: True)
def register(callback):
    id_user = callback.message.chat.id
    if callback == 'register':
        try:
            create_account(id_user, sub)
            bot.send_message(callback.message.chat.id, "Вы успешно зарегестрировались!")
        except:
            bot.send_message(callback.message.chat.id, "Произошла ошибка, попробуйте позже.")

@bot.callback_query_handler(func = lambda callback: True)
def faq(callback):
    markup = types.InlineKeyboardMarkup()
    btn1 = types.InlineKeyboardButton('Назад', callback = 'back')
    markup.add(btn1)
    if callback == 'faq':
        bot.send_message(callback.message.chat.id, '1. При регестрации мы получаем ваш <b>ID</b>, он не несёт ни какой конфиденциальной информациию\n'
                                                   '2. Наш сервис абсолютно бесплатен, Мы сохроняем ваш id для подписки, так как id - уникальный ключ.',
                         parse_mode='html', reply_markup='back')

@bot.message_handler(content_types=['text'])
def get_audio(message):
    if message.text == "Привет":
        bot.send_message(message.from_user.id, "Привет, чем я могу тебе помочь?")
    elif message.text == "/help":
        bot.send_message(message.from_user.id, "Напиши привет")
    else:
        bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши /help.")

bot.polling(none_stop=True, interval=0)


После нажатие на кнопку:

https://imgur.com/a/74zfNFc
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
@bot.callback_query_handler(func = lambda callback: True)

Ты говоришь боту "если пользователь нажал кнопку, вызови функцию ниже, и делай это для любых кнопок" (func = lambda callback: True). Но у тебя в коде ДВЕ функции-обработчика, и обе говорят, что их надо вызывать для любых кнопок. Бот в таком случае вызывает только одну из них.
Измени func так, чтобы она проверяла, какая кнопка нажата. Например, если укажешь
func = lambda callback: callback.data == 'register'
, то только кнопка, отдающая строку "register", будет вызывать срабатывание этой функции.

Если тебе удобнее сделать выбор внутри функции, то можно сделать так:
func = lambda callback: callback.data in ('faq', 'register')
, тогда функция ниже будет вызвана при нажатии любой из двух кнопок, и тебе нужно будет внутри функции выбрать один из двух вариантов.

В любом случае, нельзя допускать, чтобы у двух и более обработчиков проверка подходила под одну и ту же кнопку.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы