Телеграмм бот, проблема с клавиатурой

Максим Грушин

Пользователь
Пользователь
Апр 10, 2020
63
8
8
19
Тюмень
Есть проблема по поводу телеграмм бота, а именно с клавиатурой.
Вот сам код
Python:
import telebot
import sqlite3
import time
from telebot import types

conn = sqlite3.connect('sport.db')
cursor = conn.cursor()

bot = telebot.TeleBot('1236081182:AAHf28ajNPWdz42ZwwK4BCYa-hZpFnOuwUc')

commands = '\n1.help\n2.play\n3.В разработке'

@bot.message_handler(commands=['start'])
def start_command(message):
    bot.send_message(message.chat.id, 'Привет, я бот викторина, вот мои команды' + commands)

@bot.message_handler(commands=['help'])
def help_command(message):
    bot.send_message(message.chat.id, 'Еще раз привет! Вот мои команды' + commands + '\nЕсли у вас какие-то вопросы или предложения, можете написать сюда->\nМой телеграмм')

@bot.message_handler(commands=['play'])
def victorina(message):
    keyboard = types.InlineKeyboardMarkup(row_width=2)
    key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes')
    keyboard.add(key_yes)
    key_no = types.InlineKeyboardButton(text='Нет', callback_data='no')
    keyboard.add(key_no)
    bot.send_message(message.chat.id, 'Вы запустили викторину.Продолжить?', reply_markup=keyboard)


#Клавиатура для жанров игры
keyboard2 = types.InlineKeyboardMarkup(row_width=2)
key_sport = types.InlineKeyboardButton(text='Спорт', callback_data='sport')
keyboard2.add(key_sport)


@bot.callback_query_handler(func=lambda call: True)
def keyboard(call):
    if call.data == 'yes':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Хорошо, выберете жанр игры?', reply_markup=keyboard2)
    elif call.data == 'no':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Нажми -> /help_play')

@bot.callback_query_handler(func=lambda call: True)
def Genre(call):
    if call.data == 'sport':
        bot.send_message(call.message.chat.id, text='Игра начнется через 3 секунды!')
        time.sleep(1)
        bot.edit_message_text(chat_id = call.message.chat.id, message_id = call.message.message_id, text='3')
        time.sleep(1)
        bot.send_message(call.message.chat.id, text='2')
        time.sleep(1)
        bot.send_message(call.message.chat.id, text='1')
        time.sleep(1)
        bot.send_message(call.message.chat.id, text='Игра началась!!!')

@bot.message_handler(commands=['help_play'])
def help_play_commands(message):
    bot.send_message(message.chat.id, 'Это помощь по викторине. Запустите игру с помощью /play\nСкоро дополниться')

if __name__ == '__main__':
    bot.polling(none_stop=True)
Проблема в том, что когда я пишу /play, потом нажимаю на кнопку да, потом нажимаю на кнопку спорт, потом ничего не происходит, хотя хендлер за это должен отвечать, но ничего не происходит
 

Максим Грушин

Пользователь
Пользователь
Апр 10, 2020
63
8
8
19
Тюмень
Есть проблема по поводу телеграмм бота, а именно с клавиатурой.
Вот сам код
Python:
import telebot
import sqlite3
import time
from telebot import types

conn = sqlite3.connect('sport.db')
cursor = conn.cursor()

bot = telebot.TeleBot('1236081182:AAHf28ajNPWdz42ZwwK4BCYa-hZpFnOuwUc')

commands = '\n1.help\n2.play\n3.В разработке'

@bot.message_handler(commands=['start'])
def start_command(message):
    bot.send_message(message.chat.id, 'Привет, я бот викторина, вот мои команды' + commands)

@bot.message_handler(commands=['help'])
def help_command(message):
    bot.send_message(message.chat.id, 'Еще раз привет! Вот мои команды' + commands + '\nЕсли у вас какие-то вопросы или предложения, можете написать сюда->\nМой телеграмм')

@bot.message_handler(commands=['play'])
def victorina(message):
    keyboard = types.InlineKeyboardMarkup(row_width=2)
    key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes')
    keyboard.add(key_yes)
    key_no = types.InlineKeyboardButton(text='Нет', callback_data='no')
    keyboard.add(key_no)
    bot.send_message(message.chat.id, 'Вы запустили викторину.Продолжить?', reply_markup=keyboard)


#Клавиатура для жанров игры
keyboard2 = types.InlineKeyboardMarkup(row_width=2)
key_sport = types.InlineKeyboardButton(text='Спорт', callback_data='sport')
keyboard2.add(key_sport)


@bot.callback_query_handler(func=lambda call: True)
def keyboard(call):
    if call.data == 'yes':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Хорошо, выберете жанр игры?', reply_markup=keyboard2)
    elif call.data == 'no':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Нажми -> /help_play')

@bot.callback_query_handler(func=lambda call: True)
def Genre(call):
    if call.data == 'sport':
        bot.send_message(call.message.chat.id, text='Игра начнется через 3 секунды!')
        time.sleep(1)
        bot.edit_message_text(chat_id = call.message.chat.id, message_id = call.message.message_id, text='3')
        time.sleep(1)
        bot.send_message(call.message.chat.id, text='2')
        time.sleep(1)
        bot.send_message(call.message.chat.id, text='1')
        time.sleep(1)
        bot.send_message(call.message.chat.id, text='Игра началась!!!')

@bot.message_handler(commands=['help_play'])
def help_play_commands(message):
    bot.send_message(message.chat.id, 'Это помощь по викторине. Запустите игру с помощью /play\nСкоро дополниться')

if __name__ == '__main__':
    bot.polling(none_stop=True)
Проблема в том, что когда я пишу /play, потом нажимаю на кнопку да, потом нажимаю на кнопку спорт, потом ничего не происходит, хотя хендлер за это должен отвечать, но ничего не происходит
Все уже не надо, смог сам решить. Не надо было делать второй хендлер за ответ кнопки)
 

Форум IT Специалистов