diff options
| author | Andrew Guschin <guschin@altlinux.org> | 2024-10-15 20:08:19 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin@altlinux.org> | 2024-10-15 20:08:19 +0400 |
| commit | dd177e3d2c4579bf435c1f583a1ceab3fb438791 (patch) | |
| tree | c721d654b78d504e88449d2b51f78ceb2eea2c3c /src/keyboards.py | |
| parent | 3562ed767dbddfbcac321c7006962e1283eb63af (diff) | |
move project files to src
Diffstat (limited to 'src/keyboards.py')
| -rw-r--r-- | src/keyboards.py | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/keyboards.py b/src/keyboards.py new file mode 100644 index 0000000..aa8d761 --- /dev/null +++ b/src/keyboards.py @@ -0,0 +1,123 @@ +import backend_api +from abc import ABC + + +class Keyboard(ABC): + @classmethod + def get_keyboard(cls, telegram_id=None): + pass + + +class MenuKeyboard(Keyboard): + CHOOSE_TASK = "Выбрать задание📚" + TOP_10 = "hidden Топ-10📊" + RULES = "Правилаℹ️" + ADMIN = "/admin" + HELP = "Связаться с Базальт СПО🐧" + + @classmethod + def get_keyboard(cls, telegram_id=None, solved=False): + if telegram_id is not None: + status_code, data = backend_api.get_profile(telegram_id) + if status_code == 200 and data["is_admin"]: + return [ + [cls.ADMIN], + [cls.CHOOSE_TASK], + [cls.TOP_10, cls.RULES], + [cls.HELP], + ] + + if solved: + return [ + [cls.RULES], + [cls.HELP], + ] + else: + return [ + [cls.CHOOSE_TASK], + [cls.RULES], + [cls.HELP], + ] + + +class BackToMenuKeyboard(Keyboard): + CANCEL = "Вернуться в меню↩️" + + @classmethod + def get_keyboard(cls, telegram_id=None): + return [[cls.CANCEL]] + + +class TasksKeyboard(Keyboard): + CANCEL = "Вернуться в меню↩️" + + @classmethod + def get_keyboard(cls, telegram_id=None): + status, tasks = backend_api.get_published_tasks() + titles_keyboard = [[cls.CANCEL]] + if status == 200: + titles = [] + for task in sorted(tasks, key=lambda t: t.get("title")): + titles.append([task.get("title")]) + titles_keyboard.extend(titles) + + return titles_keyboard + + +class PublishTasksKeyboard(Keyboard): + CANCEL = "Вернуться в меню↩️" + + @classmethod + def get_keyboard(cls, telegram_id=None): + status, tasks = backend_api.get_tasks() + titles_keyboard = [[cls.CANCEL]] + if status == 200: + titles_keyboard.extend([task.get("title")] for task in tasks) + + return titles_keyboard + + +class TaskChosenKeyboard(Keyboard): + TYPE_ANSWER = "Ввести ответ✏️" + CANCEL = "Назад↩️" + + @classmethod + def get_keyboard(cls, telegram_id=None): + return [ + # [cls.TYPE_ANSWER], + [cls.CANCEL], + ] + + +class ContinueKeyboard(Keyboard): + CONTINUE = "Продолжить➡️" + + @classmethod + def get_keyboard(cls, telegram_id=None): + return [[cls.CONTINUE]] + + +class AnsweringKeyboard(Keyboard): + CANCEL = "Отмена↩️" + + @classmethod + def get_keyboard(cls, telegram_id=None): + return [[cls.CANCEL]] + + +class AdminKeyboard(Keyboard): + CANCEL = "Вернуться в меню↩️" + PUBLISH_TASK = "Опубликовать задачу" + HIDE_TASK = "Скрыть задачу" + ANNOUNCE = "Сделать объявление" + MESSAGE_PLAYER = "Написать сообщение от имени бота" + + @classmethod + def get_keyboard(cls, telegram_id=None): + return [ + [cls.CANCEL], + [cls.PUBLISH_TASK], + [cls.HIDE_TASK], + [cls.ANNOUNCE], + [cls.MESSAGE_PLAYER], + ] |