summaryrefslogtreecommitdiff
path: root/states.py
diff options
context:
space:
mode:
Diffstat (limited to 'states.py')
-rw-r--r--states.py109
1 files changed, 109 insertions, 0 deletions
diff --git a/states.py b/states.py
new file mode 100644
index 0000000..ccd4318
--- /dev/null
+++ b/states.py
@@ -0,0 +1,109 @@
+from telegram import ReplyKeyboardMarkup, ReplyKeyboardRemove
+
+from keyboards import (
+ MenuKeyboard, TasksKeyboard, TaskChosenKeyboard, ContinueKeyboard,
+ AnsweringKeyboard,
+)
+from utils import *
+import backend_api
+
+# Typing
+from telegram import Update, User, Bot
+
+
+class States:
+ @staticmethod
+ def wait_for_username(bot: Bot, update: Update, user_data: dict):
+ update.message.reply_text(
+ "По правилам квиза ты не можешь участвовать, если у тебя не указано "
+ "имя пользователя, поэтому укажи его и возвращайся как только это сделаешь!",
+ reply_markup=ReplyKeyboardMarkup([['Я указал имя пользователя']])
+ )
+ return WAIT_FOR_USERNAME
+
+ @staticmethod
+ def main_menu(bot: Bot, update: Update, user_data: dict):
+ user_data["chosen_task"] = None
+
+ update.message.reply_text("Твой счет: 0")
+ update.message.reply_text(
+ "Выбери следующее действие...",
+ reply_markup=ReplyKeyboardMarkup(MenuKeyboard.get_keyboard())
+ )
+
+ return MAIN_MENU
+
+ @staticmethod
+ def choose_task(bot: Bot, update: Update, user_data: dict):
+ user_data["chosen_task"] = None
+
+ update.message.reply_text(
+ "Какую задачу ты хочешь сдать?",
+ reply_markup=ReplyKeyboardMarkup(TasksKeyboard.get_keyboard())
+ )
+ return TASK_CHOOSING
+
+ @staticmethod
+ def top_10(bot: Bot, update: Update, user_data: dict):
+ update.message.reply_text("какая то хуйня")
+ return MAIN_MENU
+
+ @staticmethod
+ def rules(bot: Bot, update: Update, user_data: dict):
+ update.message.reply_text("какая то хуйня")
+ return MAIN_MENU
+
+ @staticmethod
+ def show_task(bot: Bot, update: Update, user_data: dict):
+ if "chosen_task" in user_data and user_data["chosen_task"] is not None:
+ task_title = user_data["chosen_task"]
+ else:
+ task_title = get_input(update, user_data)
+ user_data["chosen_task"] = task_title
+
+ status_code, task = backend_api.get_task(task_title)
+ if status_code != 200:
+ message = "Произошла ошибка в работе квиза. Мы уже работаем над её устранением!"
+ keyboard = ContinueKeyboard.get_keyboard()
+
+ else:
+ message = '\n'.join([
+ f"*{task['title']}*",
+ f"{task['statement']}",
+ "",
+ f"_Теги: {task['tags']}_",
+ ])
+ keyboard = TaskChosenKeyboard.get_keyboard()
+
+ update.message.reply_text(
+ message, parse_mode="Markdown",
+ reply_markup=ReplyKeyboardMarkup(keyboard)
+ )
+
+ return TASK_SHOWN
+
+ @staticmethod
+ def type_answer(bot: Bot, update: Update, user_data: dict):
+ update.message.reply_text(
+ "Вводи свой ответ, я его проверю.",
+ reply_markup=ReplyKeyboardMarkup(AnsweringKeyboard.get_keyboard())
+ )
+ return ANSWERING
+
+ @staticmethod
+ def accept_answer(bot: Bot, update: Update, user_data: dict):
+ answer = get_input(update, user_data)
+ if answer == "хуй":
+ update.message.reply_text(
+ "Ты ввел правильный ответ! Возвращайся к другим задачам",
+ reply_markup=ReplyKeyboardMarkup(ContinueKeyboard.get_keyboard())
+ )
+
+ return ANSWER_RIGHT
+ else:
+ update.message.reply_text(
+ "К сожалению, твой ответ неверный =(",
+ reply_markup=ReplyKeyboardMarkup(ContinueKeyboard.get_keyboard())
+ )
+
+ return ANSWER_WRONG