summaryrefslogtreecommitdiff
path: root/states.py
blob: ccd4318793d00a5466d376273715ea5ec2fa078b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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