Создаем Telegram бота

Запланированный ответ на конкретное сообщение

Иногда нам приходиться проводить пользователя через конкретную цепочку вопросов, и проще всего сделать это с помощью функции bot.register_next_step_handler. Она позволит нам создать сразу много функций (как и в обычном квесте) и в ответ на сообщения от пользователя последовательно вызывать нужную.

Попробуем с ее помощью провексти квест...

import telebot

bot = telebot.TeleBot(token="ВСТАВЬ СЮДА ТОКЕН")

@bot.message_handler(commands=['start'])
def start(message):
    # кто нам написал? узнаем id чата!
    chat_id = message.chat.id
    # отправляем приветствие
    answer = bot.send_message(chat_id, "Добро пожаловать в квест. Первое задание...")
    # в ответ на приветствие просим вызвать функцию point1
    bot.register_next_step_handler(answer, point1)

# название функции мы придумали сами, но параметр message обязателен
def point1(message):
    # кто нам написал? узнаем id чата!
    chat_id = message.chat.id
    # что написали? узнаем текст входящего сообщения
    # по сути это замена input
    text = message.text

    # если ответ верен
    if text == "Ответ 1":
        # пишем об этом пользвоателю и задаем следующие вопрос
        answer = bot.send_message(chat_id, "Правильный ответ. Второе задание...")
        # в ответ на сообщение просим вызвать функцию point2
        bot.register_next_step_handler(answer, point2)
    else:
        # пишем, что ответ неверен
        answer = bot.send_message(chat_id, "Нет, попробуйте еще раз...")
        # в ответ на сообщение просим вызвать функцию point1
        bot.register_next_step_handler(answer, point1)

# все по аналогии с point1
def point2(message):
    chat_id = message.chat.id
    text = message.text

    if text == "Ответ 2":
        answer = bot.send_message(chat_id, "Правильный ответ. Вы прошли квест!\nЧтобы повторить напишите /start.")
    else:
        answer = bot.send_message(chat_id, "Нет, попробуйте еще раз...")
        bot.register_next_step_handler(answer, point2)

bot.polling(none_stop=True)

Назад Вперед