Files
2026-06-23 15:04:46 +02:00

67 lines
2.6 KiB
Python
Executable File

import discord
from typing import Optional, List
class ButtonMenu(discord.ui.View):
def __init__(self, pages: list, timeout: float, user: Optional[discord.Member]=None)->None:
super().__init__(timeout=timeout)
self.current_page = 0
self.pages = pages
self.user = user
self.length = len(pages)-1
self.children[0].disabled, self.children[1].disabled = True, True
async def update(self, page: int):
self.current_page = page
if page == 0:
self.children[0].disabled = True
self.children[1].disabled = True
self.children[2].disabled = False
self.children[3].disabled = False
elif page == self.length:
self.children[0].disabled = False
self.children[1].disabled = False
self.children[2].disabled = True
self.children[3].disabled = True
else:
for i in self.children: i.disabled=False
async def get_page(self, page):
if isinstance(page, discord.Embed):
return None, [page], []
async def show_page(self, page: int, interaction: discord.Interaction):
await self.update(page)
contents, embeds, files = await self.get_page(self.pages[page])
await interaction.response.edit_message(
content=contents,
embeds=embeds,
attachments=files or [],
view=self
)
@discord.ui.button(emoji=u"\u23EA", style=discord.ButtonStyle.primary)
async def first_page(self, interaction, button):
await self.show_page(0, interaction)
@discord.ui.button(emoji=u"\u25C0", style=discord.ButtonStyle.primary)
async def prev_page(self, interaction, button):
await self.show_page(self.current_page-1, interaction)
@discord.ui.button(emoji=u"\u25B6", style=discord.ButtonStyle.primary)
async def next_page(self, interaction, button):
await self.show_page(self.current_page+1, interaction)
@discord.ui.button(emoji=u"\u23E9", style=discord.ButtonStyle.primary)
async def last_page(self, interaction, button):
await self.show_page(self.length, interaction)
async def interaction_check(self, interaction: discord.Interaction) -> bool:
if self.user:
if interaction.user != self.user:
await interaction.response.send_message("This command is invoked by another person",
ephemeral=True,)
return False
return True