diff options
Diffstat (limited to 'states.py')
| -rw-r--r-- | states.py | 109 |
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 |