first commit
This commit is contained in:
Executable
+66
@@ -0,0 +1,66 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user