from functools import cached_property from typing import Any, Dict, List, Union from discord.ui import button from discord.enums import ButtonStyle from discord.interactions import Interaction from discord.ui import Button, View from Christmas.UI.Embed import ChristmasEmbed class Mail_Paginator(View): def __init__( self, senduser: int, embeds: list[ChristmasEmbed], timeout: int = 180, ): super().__init__(timeout=timeout) self.embeds = embeds self.index = 0 self.senduser = senduser self.selected = False @cached_property def total(self) -> int: return len(self.embeds) async def interaction_check(self, interaction: Interaction) -> bool: if user := interaction.user: if user.id == self.senduser.id: return True await interaction.response.send_message( "명령어 실행자만 상호작용이 가능합니다.", ephemeral=True ) return False @button(label="이전", style=ButtonStyle.primary, emoji="◀") async def prev(self, button, interaction: Interaction) -> None: self.index -= 1 if self.index < 0: self.index = self.total - 1 await interaction.response.edit_message(embed=self.embeds[self.index]) @button(label="다음", style=ButtonStyle.primary, emoji="▶️") async def next(self, button, interaction: Interaction) -> None: self.index += 1 if self.index >= self.total: self.index = 0 await interaction.response.edit_message(embed=self.embeds[self.index]) @button(label="닫기", style=ButtonStyle.danger, emoji="✖️") async def close(self, button, interaction: Interaction) -> None: await interaction.response.defer() self.stop()