runabot/RUNA/UI/Paginator.py

62 lines
1.9 KiB
Python
Raw Normal View History

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 RUNA.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()