pagination emoji integration 1/?
This commit is contained in:
parent
fb432631d3
commit
343767c755
@ -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:
|
||||
|
32
src/utils.py
32
src/utils.py
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user