@Autocoder

Кто может помочь с кодом Python и Telebot?

# Отрывок кода

@bot.message_handler(content_types='text')
def go(message):
    if message.text == "Наш сайт":
        markup = types.InlineKeyboardMarkup()
        site = types.InlineKeyboardButton(text="Перейти на сайт", url="")   # Тут мой сайт
        markup.add(site)
        bot.send_message(message.from_user.id, "Сайт компании ", reply_markup=markup)
    elif message.text == "Правила":
        bot.send_message(message.from_user.id, "1. Нужно выбрать 1 правильный ответ.\n2. У вас есть 20 вопросов. \n3. У вас есть 0 ошибок."
                                               "\nЕсли вы завалили тест, то попробуйте пересдать.\nУ вас есть 2 попытки.\nЖелаем удачи!")
    elif message.text == "Начать тест":
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton('1')
        btn2 = types.KeyboardButton('2')
        btn3 = types.KeyboardButton('3')
        btn4 = types.KeyboardButton('4')
        btn5 = types.KeyboardButton('5')


        markup.add(btn1, btn2, btn3, btn4, btn5)

        bot.send_photo(message.chat.id, "", reply_markup=markup) # Тут ссылка на фотографию с вариантами ответов
        if message.text == "1" or "2" or "3" or "4":
            bot.send_message(message.from_user.id, "Неправильно")


# Делаю для сотрудников тест бот. Когда появляется фотография, есть варианты ответов и человеку необходимо нажать на 1 из 5 кнопок. Но дело в том, что когда фотография показывается, она показывается с вариантами ответов и сразу бот присылает ответ "НЕПРАВИЛЬНО", хотя я не успеваю даже ничего ответить. Помогите разобраться, всю голову уже сломал. Где моя ошибка? Я думаю, что ответ прост, но в простоте вся сложность)
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
Во-первых ты не можешь проверять является ли текст сообщения одним из 4 вариантов так
if message.text == "1" or "2" or "3" or "4":
Тебе нужно это делать так
if message.text in ["1", "2", "3", "4"]:
Во-вторых, когда юзер присылает твоему боту текстовое сообщение, функция go() выполняется полностью от начала до конца и поэтому все инструкции внутри неё выполняются. Ты же пытаешься проверить что ответил пользователь не давая ему возможности ответить, потому что сразу же проверяешь чему равно сообщение которое затриггерило эту функцию. Тебе нужно хранить где то состояния пользователей. После того как отправляешь фотографию нужно устанавливать для пользователя состояние await_answer или любое другое, а при следующем пришедшем ответе пользователя, проверяя какое у него состояние отвечать соответствующе
В-третьих код нужно оформлять соответствующе. Это правило хабра.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы