Skip to content

Commit 8312f0e

Browse files
committed
feat: paginator example
1 parent 6bc7fa7 commit 8312f0e

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

examples/paginator.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
from typing import List
2+
3+
from discord.abc import Messageable
4+
from discord_components import (
5+
DiscordComponents,
6+
Button,
7+
ButtonStyle,
8+
Select,
9+
SelectOption,
10+
Interaction,
11+
)
12+
13+
14+
class Paginator:
15+
def __init__(
16+
self,
17+
client: DiscordComponents,
18+
channel: Messageable,
19+
contents: List[str],
20+
use_select: bool = False,
21+
):
22+
self.client = client
23+
self.channel = channel
24+
self.contents = contents
25+
self.use_select = use_select
26+
self.index = 0
27+
28+
def get_components(self):
29+
if self.use_select:
30+
return [
31+
self.client.add_callback(
32+
Select(
33+
custom_id="paginator_select",
34+
options=[
35+
SelectOption(label=f"Page {i}", value=str(i), default=i == self.index)
36+
for i in range(len(self.contents))
37+
],
38+
),
39+
self.select_callback,
40+
)
41+
]
42+
else:
43+
return [
44+
[
45+
self.client.add_callback(
46+
Button(style=ButtonStyle.blue, emoji="◀️"), self.button_left_callback
47+
),
48+
Button(label=f"Page {self.index + 1}/{len(self.contents)}", disabled=True),
49+
self.client.add_callback(
50+
Button(style=ButtonStyle.blue, emoji="▶️"), self.button_right_callback
51+
),
52+
]
53+
]
54+
55+
async def start(self):
56+
self.msg = await self.channel.send(
57+
self.contents[self.index], components=self.get_components()
58+
)
59+
60+
async def select_callback(self, inter: Interaction):
61+
self.index = int(inter.values[0])
62+
await inter.edit_origin(content=self.contents[self.index], components=self.get_components())
63+
64+
async def button_left_callback(self, inter: Interaction):
65+
if self.index == 0:
66+
self.index = len(self.contents) - 1
67+
else:
68+
self.index -= 1
69+
70+
await self.button_callback(inter)
71+
72+
async def button_right_callback(self, inter: Interaction):
73+
if self.index == len(self.contents) - 1:
74+
self.index = 0
75+
else:
76+
self.index += 1
77+
78+
await self.button_callback(inter)
79+
80+
async def button_callback(self, inter: Interaction):
81+
await inter.edit_origin(content=self.contents[self.index], components=self.get_components())

0 commit comments

Comments
 (0)