-
Notifications
You must be signed in to change notification settings - Fork 39
/
Copy pathpagination.py
122 lines (95 loc) · 4.19 KB
/
pagination.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
112
113
114
115
116
117
118
119
120
121
122
import settings
import discord
from discord.ext import commands
import utils
logger = settings.logging.getLogger("bot")
class PaginationView(discord.ui.View):
current_page : int = 1
sep : int = 5
async def send(self, ctx):
self.message = await ctx.send(view=self)
await self.update_message(self.data[:self.sep])
def create_embed(self, data):
embed = discord.Embed(title=f"User List Page {self.current_page} / {int(len(self.data) / self.sep) + 1}")
for item in data:
embed.add_field(name=item['label'], value=item[''], inline=False)
return embed
async def update_message(self,data):
self.update_buttons()
await self.message.edit(embed=self.create_embed(data), view=self)
def update_buttons(self):
if self.current_page == 1:
self.first_page_button.disabled = True
self.prev_button.disabled = True
self.first_page_button.style = discord.ButtonStyle.gray
self.prev_button.style = discord.ButtonStyle.gray
else:
self.first_page_button.disabled = False
self.prev_button.disabled = False
self.first_page_button.style = discord.ButtonStyle.green
self.prev_button.style = discord.ButtonStyle.primary
if self.current_page == int(len(self.data) / self.sep) + 1:
self.next_button.disabled = True
self.last_page_button.disabled = True
self.last_page_button.style = discord.ButtonStyle.gray
self.next_button.style = discord.ButtonStyle.gray
else:
self.next_button.disabled = False
self.last_page_button.disabled = False
self.last_page_button.style = discord.ButtonStyle.green
self.next_button.style = discord.ButtonStyle.primary
def get_current_page_data(self):
until_item = self.current_page * self.sep
from_item = until_item - self.sep
if not self.current_page == 1:
from_item = 0
until_item = self.sep
if self.current_page == int(len(self.data) / self.sep) + 1:
from_item = self.current_page * self.sep - self.sep
until_item = len(self.data)
return self.data[from_item:until_item]
@discord.ui.button(label="|<",
style=discord.ButtonStyle.green)
async def first_page_button(self, interaction:discord.Interaction, button: discord.ui.Button):
await interaction.response.defer()
self.current_page = 1
await self.update_message(self.get_current_page_data())
@discord.ui.button(label="<",
style=discord.ButtonStyle.primary)
async def prev_button(self, interaction:discord.Interaction, button: discord.ui.Button):
await interaction.response.defer()
self.current_page -= 1
await self.update_message(self.get_current_page_data())
@discord.ui.button(label=">",
style=discord.ButtonStyle.primary)
async def next_button(self, interaction:discord.Interaction, button: discord.ui.Button):
await interaction.response.defer()
self.current_page += 1
await self.update_message(self.get_current_page_data())
@discord.ui.button(label=">|",
style=discord.ButtonStyle.green)
async def last_page_button(self, interaction:discord.Interaction, button: discord.ui.Button):
await interaction.response.defer()
self.current_page = int(len(self.data) / self.sep) + 1
await self.update_message(self.get_current_page_data())
def run():
intents = discord.Intents.all()
bot = commands.Bot(command_prefix="!", intents=intents)
@bot.event
async def on_ready():
await utils.load_videocmds(bot)
@bot.command()
async def paginate(ctx):
data = [
]
for i in range(1,15):
data.append({
"label": "User Event",
"item": f"User {i} has been added"
})
pagination_view = PaginationView(timeout=None)
pagination_view.data = data
await pagination_view.send(ctx)
bot.run(settings.DISCORD_API_SECRET, root_logger=True)
if __name__ == "__main__":
run()