@HelpMeeee

Как реализовать систему вопросов в телеграм боте?

Здравствуйте!
Хочу создать бота в телеграм, который будет проводить игру вопрос-ответ.
Проблема такая, что бот сам реагирует на свой же вопрос. То есть он задает вопрос, сверяет его с ответом и пишет ошибку.
Пробовал добавлять 1 к message.chat.id, не помогает.
Кто знает как решить проблему?

Сам код -
@bot.message_handler(content_types=["text"])
def type_game(message):
    if message.text == "Мои данные":
        bot.send_message(message.chat.id,"Баланс: " + "/n" +
                         "Игр сыграно: " + "/n" +
                         "Правильных ответов: ")
    if message.text == "Бесплатная игра":
        bot.send_message(message.chat.id, "Чтобы начать введите /free_game")

    if message.text == "Платная игра":
        bot.send_message(message.chat.id,"Баланс: "  "/n" 
                         "Игр сыграно: " + "/n" +
                         "Правильных ответов: ")

@bot.message_handler(commands=["free_game"])
def free_game(message):
    bot.send_message(message.chat.id, SQLighter.answer)
    if message.text == SQLighter.answer:
        bot.send_message(message.chat.id+1, "Good")
    else:
        bot.send_message(message.chat.id+1, "Bad")
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
MinTnt
@MinTnt
1). Вообще, добавление к message.chat.id + 1, ничего бы не дало, кроме того, что сообщение бы отправилось вообще незнакомому лицу. message.chat.id, это то куда отправляется сообщение

2). Предложу другую реализацию для комманд в коде.
Код
skill = 0 #Просто добавил счётчик "скилла" правильных и неправильных ответов

@bot.message_handler(content_types=["text"])
def type_game(message):
    if message.text == "Мои данные":
        bot.send_message(message.chat.id,"Баланс: " + "/n" +
                         "Игр сыграно: " + "/n" +
                         "Правильных ответов: ")
    if message.text == "Бесплатная игра":
        bot.send_message(message.chat.id, "Чтобы начать введите /free_game")

    if message.text == "Платная игра":
        bot.send_message(message.chat.id,"Баланс: "  "/n" 
                         "Игр сыграно: " + "/n" +
                         "Правильных ответов: ")
    if message.text == '/free_game': #Другой варянт создания комманд
    	bot.send_message(message.chat.id, SQLighter.answer)
    	bot.register_next_step_handler(message, free_game)#Перенаправил на функцию free_game

def free_game(message):
    if message.text == SQLighter.answer:
        bot.send_message(message.chat.id, "Good")
        skill = skill + 1
        bot.send_message(message.chat.id, SQLighter.answer)
        bot.register_next_step_handler(message, free_game)#Создаёт некий цикл, после ответа, оно занова запускает эту функцию, а так же пишет вопрос из базы данных
    elif message.text == 'Прекратить игру':
    	bot.send_message(message.chat.id, 'Игра приостановлена.')#Так как тут нету register next step и тд., то оно автоматически переадресовывает на type_game

    else:
    	skill = skill - 1
        bot.send_message(message.chat.id, "Bad")
        bot.send_message(message.chat.id, SQLighter.answer)
        bot.register_next_step_handler(message, free_game)


А вообще, мне вот интересно, это хорошо что в коде, DQLighter.answer используется как для вопроса, так и для ответа? Или это пока так.. лишь для проверки системы?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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