-
Notifications
You must be signed in to change notification settings - Fork 0
/
keyboard.py
111 lines (90 loc) · 3.56 KB
/
keyboard.py
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
110
111
from collections import OrderedDict
from enum import Enum
from aiogram.utils.keyboard import ReplyKeyboardBuilder, InlineKeyboardBuilder
class Buttons(Enum):
QUESTION = "💌 Задать вопрос"
SHOP = "📍 Наш магазин"
BONUS = "🎁 Бонус за отзыв"
START = "🌐 Вернуться в главное меню"
SCREENSHOT_INSTRUCTIONS = "✅ Я оставил(-а) отзыв"
SKIP_COUPON = "⏩ Без купона"
ACCEPT_BONUS = "✅ Принять"
DECLINE_BONUS = "❌ Отклонить"
BONUS_ALREADY_ACCEPTED = "👍 Принято"
BONUS_ALREADY_DECLINED = "👎 Отклонено"
SUBSCRIBE = "📬 Подписаться на предложения"
UNSUBSCRIBE = "🔕 Отписаться от предложений"
PLACEHOLDER = "Я PLACEHOLDER"
DELETE_POST = "❌ Удалить пост"
POST_DELETED = "👎 Пост удален"
class BaseReplyKeyboard:
def build(self,
buttons,
adjust: tuple | bool =False
):
builder = ReplyKeyboardBuilder()
for button in buttons:
builder.button(text=button.value)
if adjust:
builder.adjust(*adjust)
return builder.as_markup(resize_keyboard=True)
class BaseInlineKeyboard:
def build(self, buttons, callback_data_list):
builder = InlineKeyboardBuilder()
for button, callback_data in zip(buttons, callback_data_list):
builder.button(text=button.value, callback_data=callback_data.value)
return builder.as_markup(resize_keyboard=True)
class GreetingsKeyboard(BaseReplyKeyboard):
def build(self):
buttons = [Buttons.QUESTION, Buttons.SHOP, Buttons.BONUS]
return super().build(buttons)
def build_with_condition(self, is_subscribed):
buttons = [
Buttons.QUESTION, Buttons.SHOP, Buttons.BONUS,
(
Buttons.UNSUBSCRIBE if is_subscribed else Buttons.SUBSCRIBE
)
]
adjust = (2, 2)
return super().build(buttons, adjust=adjust)
class BonusKeyboard(BaseReplyKeyboard):
def build(self):
buttons = [Buttons.SCREENSHOT_INSTRUCTIONS, Buttons.START]
return super().build(buttons)
class GetBackKeyboard(BaseReplyKeyboard):
def build(self):
buttons = [Buttons.START]
return super().build(buttons)
class SkipCouponKeyboard(BaseReplyKeyboard):
def build(self):
buttons = [Buttons.SKIP_COUPON, Buttons.START]
return super().build(buttons)
class BonusResponseKeyboard(BaseInlineKeyboard):
def build(self):
buttons = [Buttons.ACCEPT_BONUS, Buttons.DECLINE_BONUS]
callback_data_list = [Buttons.ACCEPT_BONUS, Buttons.DECLINE_BONUS]
return super().build(buttons, callback_data_list)
class BonusResponseHandledKeyboard(BaseInlineKeyboard):
def build_with_condition(self, is_accepted: bool):
buttons = [
(
Buttons.BONUS_ALREADY_ACCEPTED if is_accepted
else Buttons.BONUS_ALREADY_DECLINED
)
]
return super().build(buttons, [Buttons.PLACEHOLDER for i in buttons])
class DeletePostKeyboard(BaseInlineKeyboard):
def build_with_condition(self, is_deleted: bool):
buttons = [
(
Buttons.POST_DELETED if is_deleted
else Buttons.DELETE_POST
)
]
callbacks = [
(
Buttons.POST_DELETED if is_deleted
else Buttons.DELETE_POST
)
]
return super().build(buttons, callbacks)