@Nikotik

Бот рандомно выбирает вопрос, но проверяет по ответам для 1 вопроса, как исправить?

import telebot
import random

TOKEN = 'MyToken'


bot = telebot.TeleBot(TOKEN)
is_chek = None
ball = 0
bot.message_handler(commands=['help'])


def send_welcome(message):
    bot.reply_to(message, "Привет, я бот - Nikotik, /go")


@bot.message_handler(commands=['start'])
def send_welcome(message):
    bot.reply_to(message, "Привет, я бот - Nikotik, пиши /go ")


@bot.message_handler(commands=['go'])
def send_welcome(message):
    print(message.text)

    vopr = {
        1: "1Что не входит в экипировку для езды на электросамокате? /1)Шлем /2)Наколенники  /3)Валенки",
        2: "2С какой скоростью разрешено ездить на электросамокате? /1)не больше 25км/ч /2)не больше 60км/ч /3)Ограничений нет",
        3: "3Можно ли управлять электросамокатом 1 рукой? /1)Да /2)нет",
        4: "4На дорогах с каким скоростным режимам можно ехать на электросамокате? /1)не больше 60км/ч /2)не больше 80км/ч /3)Ограничений нет",
        5: "5Со скольки лет разрешен выезд н электросамокате на проезжую часть? /1)С 10 лет /2)С 14 лет /3)С 18 лет"
    }

    otv = {1: 3, 2: 1, 3: 2, 4: 1, 5: 2}

    x = random.randint(1, 5)
    bot.reply_to(message, vopr[x])

    if x == 1:
        @bot.message_handler(content_types="text")
        def send(message):
            if message.text == otv[3]:
                bot.reply_to(message,
                             "1Молодец!!! Чтобы начат заново напишие /start или /go чтобы продолжит.")
            else:
                bot.reply_to(message,
                             "1Oшибка!!! Чтобы начат заново напишие /start или /go чтобы продолжит.")

    if x == 2:
        @bot.message_handler(content_types="text")
        def send(message):
            if message.text == otv[3]:
                bot.reply_to(message,
                             "2Молодец!!! Чтобы начат заново напишие /start или /go чтобы продолжит.")
            else:
                bot.reply_to(message,
                             "2Oшибка!!! Чтобы начат заново напишие /start или /go чтобы продолжит.")
    if x == 3:
        @bot.message_handler(content_types="text")
        def send(message):
            if message.text == otv[3]:
                bot.reply_to(message,
                             "3Молодец!!! Чтобы начат заново напишие /start или /go чтобы продолжит.")
            else:
                bot.reply_to(message,
                             "3Oшибка!!! Чтобы начат заново напишие /start или /go чтобы продолжит.")

    if x == 4:
        @bot.message_handler(content_types="text")
        def send(message):
            if message.text == otv[3]:
                bot.reply_to(message,
                             "4Молодец!!! Чтобы начат заново напишие /start или /go чтобы продолжит.")
            else:
                bot.reply_to(message,
                             "4Oшибка!!! Чтобы начат заново напишие /start или /go чтобы продолжит.")

    if x == 5:
        @bot.message_handler(content_types="text")
        def send(message):
            if message.text == otv[3]:
                bot.reply_to(message,
                             "5Молодец!!! Чтобы начат заново напишие /start или /go чтобы продолжит.")
            else:
                bot.reply_to(message,
                             "5Oшибка!!! Чтобы начат заново напишие /start или /go чтобы продолжит.")


bot.polling(none_stop=True)
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
if x == 1:
    @bot.message_handler(content_types="text")
    def send(message):
        ...

Так работать НЕ будет. Ты явно не очень понимаешь, что делаешь.

1. Должна быть только одна функция, декорированная как @bot.message_handler(content_types="text"). Если их несколько, отработате только одна.

2. Ты должен хранить сведения:
- Какой вопрос был последним задан тому или иному пользователю
- Какие вопросы были уже заданы тому или иному пользователю
В рамках обучения их можно хранить в словаре, но в реальном боте потребуется постоянное хранилище (например, БД), в котором эти сведения пережили бы перезапуск бота

3. Внутри обработчика @bot.message_handler ты должен получить ID пользователя, отправившего сообщение, взять из описанного выше хранилища номер последнего заданного вопроса (если есть), и уже на основании этого номера судить о том, правильный ли ответ.
Ответ написан
Ваш ответ на вопрос

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

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