-
Notifications
You must be signed in to change notification settings - Fork 1
/
view.py
98 lines (86 loc) · 3.49 KB
/
view.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
import nextcord
class View(nextcord.ui.View):
stage = {}
def __init__(self, navi, interaction, co_operator, session_id):
super().__init__(timeout=120)
self.buttons = []
self.navi = navi
self.interaction = interaction
self.current_label = "❓" # placeholder
label_list = []
color_list = []
emoji_label_list = ["⬅", "➡", "🎲", "🔄", "❌"]
number_emoji_list = [
"1️⃣",
"2️⃣",
"3️⃣",
"4️⃣",
"5️⃣",
"6️⃣",
"7️⃣",
"8️⃣",
"9️⃣",
"🔟",
"1️⃣🇮",
"1️⃣2️⃣",
"1️⃣3️⃣",
"1️⃣4️⃣",
"1️⃣5️⃣",
]
color_list = []
label_list = []
for i, emoji in enumerate(emoji_label_list[:3]):
color_list += [nextcord.ButtonStyle.blurple] * 4 + [nextcord.ButtonStyle.green]
label_list += [str(i) for i in range((i * 4) + 1, (i * 4) + 5)] + [emoji]
color_list += [nextcord.ButtonStyle.blurple] * 3 + [nextcord.ButtonStyle.grey, nextcord.ButtonStyle.red]
label_list += [str(i) for i in range(13, 16)] + emoji_label_list[-2:]
for label, style in zip(label_list, color_list): # make the buttons.
button = nextcord.ui.Button(
custom_id=label,
label=label,
style=style,
disabled=True
if self.stage[session_id] == 0
and (label == "⬅" or label == "➡")
else False,
)
async def button_function(interaction):
label = interaction.data[
"custom_id"
] # sets label to the label of the button that was pressed.
await self.button_logic(label, interaction.user, co_operator, session_id)
if label.isnumeric():
label = number_emoji_list[
int(label) - 1
] # converts the label into an emoji if it is a number.
self.current_label = label # used to add the emoji to the message to show the what the user selected.
button.callback = button_function
self.add_item(button)
async def button_logic(self, label, interactor, co_operator, session_id):
"""run the appropriate functions based on the label of the button that was pressed."""
if (
interactor.id == self.interaction.user.id
or interactor == co_operator
or co_operator in interactor.roles
):
if label.isnumeric():
await self.navi.click_by_index(int(label))
View.stage[session_id] += 1
elif label == "❌":
await self.navi.exit()
elif label == "🎲":
await self.navi.rand()
View.stage[session_id] += 1
elif label == "🔄":
await self.navi.refresh()
if label == "⬅":
if View.stage[session_id] > 0:
View.stage[session_id] -= 1
await self.navi.undo()
elif label == "➡":
if View.stage[session_id] > 0:
await self.navi.keep()
View.stage[session_id] += 1
self.stop()
async def on_timeout(self):
await self.navi.page_timeout()