summaryrefslogtreecommitdiff
path: root/src/keyboards.py
diff options
context:
space:
mode:
authorAndrew Guschin <guschin@altlinux.org>2024-10-15 20:08:19 +0400
committerAndrew Guschin <guschin@altlinux.org>2024-10-15 20:08:19 +0400
commitdd177e3d2c4579bf435c1f583a1ceab3fb438791 (patch)
treec721d654b78d504e88449d2b51f78ceb2eea2c3c /src/keyboards.py
parent3562ed767dbddfbcac321c7006962e1283eb63af (diff)
move project files to src
Diffstat (limited to 'src/keyboards.py')
-rw-r--r--src/keyboards.py123
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],
+ ]