Создаем текстовый квест в телеграме 2019
Организуем текстовый квест в Telegram
Основное отличие квеста от простых ботов - он должен последовательно проводить пользователя по разным локациям квеста. Проще всего сделать это с помощью функции bot.register_next_step_handler, она позволит нам создать сразу много функций (как и в обычном квесте) и в ответ на сообщения от пользователя последовательно вызывать нужную.
В остальном организация кода будет очень похожа на квест на функциях.
import telebot
# Обходим блокировку с помощью прокси
telebot.apihelper.proxy = {'https': 'socks5://geek:socks@t.geekclass.ru:7777'}
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)