pagination emoji integration 1/?

This commit is contained in:
Corban-Lee Jones 2024-02-07 01:02:42 +00:00
parent fb432631d3
commit 343767c755
2 changed files with 27 additions and 7 deletions

View File

@ -263,7 +263,7 @@ class FeedCog(commands.Cog):
return data, count
embed = Followup(f"Available RSS Feeds in {inter.guild.name}").info()._embed
pagination = PaginationView(inter, embed, getdata, formatdata, pagesize, 1)
pagination = PaginationView(self.bot, inter, embed, getdata, formatdata, pagesize, 1)
await pagination.send()
except Exception as exc:

View File

@ -7,6 +7,7 @@ from typing import Callable
from discord import Interaction, Embed, Colour, ButtonStyle, Button
from discord.ui import View, button
from discord.ext.commands import Bot
log = logging.getLogger(__name__)
@ -59,12 +60,13 @@ class PaginationView(View):
"""A Discord UI View that adds pagination to an embed."""
def __init__(
self, inter: Interaction, embed: Embed, getdata: Callable,
self, bot: Bot, inter: Interaction, embed: Embed, getdata: Callable,
formatdata: Callable, pagesize: int, initpage: int=1
):
"""_summary_
Args:
bot (commands.Bot) The discord bot
inter (Interaction): Represents a discord command interaction.
embed (Embed): The base embed to paginate.
getdata (Callable): A function that provides data, must return Tuple[List[Any], int].
@ -72,7 +74,8 @@ class PaginationView(View):
pagesize (int): The size of each page.
initpage (int, optional): The inital page. Defaults to 1.
"""
self.bot = bot
self.inter = inter
self.embed = embed
self.getdata = getdata
@ -80,6 +83,13 @@ class PaginationView(View):
self.maxpage = None
self.pagesize = pagesize
self.index = initpage
# emoji reference
next_emoji = bot.get_emoji(1204542366602502265)
prev_emoji = bot.get_emoji(1204542365432422470)
self.start_emoji = bot.get_emoji(1204542364073463818)
self.end_emoji = bot.get_emoji(1204542367752003624)
super().__init__(timeout=100)
async def check_user_is_author(self, inter: Interaction) -> bool:
@ -109,6 +119,13 @@ class PaginationView(View):
return result
def calc_dataitem_index(self, dataitem_index: int):
"""Calculates a given index to be relative to the sum of all pages items
Example: dataitem_index = 6
pagesize = 10
if page == 1 then return 6
else return 6 + 10 * (page - 1)"""
if self.index > 1:
dataitem_index += self.pagesize * (self.index - 1)
@ -157,16 +174,19 @@ class PaginationView(View):
key, value = self.formatdata(i, item)
embed.add_field(name=key, value=value, inline=False)
if self.maxpage != 1:
if not total_results:
embed.description = "There are no results"
if self.maxpage > 1:
embed.set_footer(text=f"Page {self.index}/{self.maxpage}")
return embed
def update_buttons(self):
if self.index >= self.maxpage:
self.children[2].emoji = "⏮️"
self.children[2].emoji = self.start_emoji
else:
self.children[2].emoji = "⏭️"
self.children[2].emoji = self.end_emoji
self.children[0].disabled = self.index == 1
self.children[1].disabled = self.index == self.maxpage
@ -174,7 +194,7 @@ class PaginationView(View):
async def send(self):
embed = await self.create_paged_embed()
if self.maxpage == 1:
if self.maxpage <= 1:
await self.inter.edit_original_response(embed=embed)
return