pagination emoji integration 1/?
This commit is contained in:
parent
fb432631d3
commit
343767c755
@ -263,7 +263,7 @@ class FeedCog(commands.Cog):
|
|||||||
return data, count
|
return data, count
|
||||||
|
|
||||||
embed = Followup(f"Available RSS Feeds in {inter.guild.name}").info()._embed
|
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()
|
await pagination.send()
|
||||||
|
|
||||||
except Exception as exc:
|
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 import Interaction, Embed, Colour, ButtonStyle, Button
|
||||||
from discord.ui import View, button
|
from discord.ui import View, button
|
||||||
|
from discord.ext.commands import Bot
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -59,12 +60,13 @@ class PaginationView(View):
|
|||||||
"""A Discord UI View that adds pagination to an embed."""
|
"""A Discord UI View that adds pagination to an embed."""
|
||||||
|
|
||||||
def __init__(
|
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
|
formatdata: Callable, pagesize: int, initpage: int=1
|
||||||
):
|
):
|
||||||
"""_summary_
|
"""_summary_
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
bot (commands.Bot) The discord bot
|
||||||
inter (Interaction): Represents a discord command interaction.
|
inter (Interaction): Represents a discord command interaction.
|
||||||
embed (Embed): The base embed to paginate.
|
embed (Embed): The base embed to paginate.
|
||||||
getdata (Callable): A function that provides data, must return Tuple[List[Any], int].
|
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.
|
pagesize (int): The size of each page.
|
||||||
initpage (int, optional): The inital page. Defaults to 1.
|
initpage (int, optional): The inital page. Defaults to 1.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
self.bot = bot
|
||||||
self.inter = inter
|
self.inter = inter
|
||||||
self.embed = embed
|
self.embed = embed
|
||||||
self.getdata = getdata
|
self.getdata = getdata
|
||||||
@ -80,6 +83,13 @@ class PaginationView(View):
|
|||||||
self.maxpage = None
|
self.maxpage = None
|
||||||
self.pagesize = pagesize
|
self.pagesize = pagesize
|
||||||
self.index = initpage
|
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)
|
super().__init__(timeout=100)
|
||||||
|
|
||||||
async def check_user_is_author(self, inter: Interaction) -> bool:
|
async def check_user_is_author(self, inter: Interaction) -> bool:
|
||||||
@ -109,6 +119,13 @@ class PaginationView(View):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def calc_dataitem_index(self, dataitem_index: int):
|
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:
|
if self.index > 1:
|
||||||
dataitem_index += self.pagesize * (self.index - 1)
|
dataitem_index += self.pagesize * (self.index - 1)
|
||||||
|
|
||||||
@ -157,16 +174,19 @@ class PaginationView(View):
|
|||||||
key, value = self.formatdata(i, item)
|
key, value = self.formatdata(i, item)
|
||||||
embed.add_field(name=key, value=value, inline=False)
|
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}")
|
embed.set_footer(text=f"Page {self.index}/{self.maxpage}")
|
||||||
|
|
||||||
return embed
|
return embed
|
||||||
|
|
||||||
def update_buttons(self):
|
def update_buttons(self):
|
||||||
if self.index >= self.maxpage:
|
if self.index >= self.maxpage:
|
||||||
self.children[2].emoji = "⏮️"
|
self.children[2].emoji = self.start_emoji
|
||||||
else:
|
else:
|
||||||
self.children[2].emoji = "⏭️"
|
self.children[2].emoji = self.end_emoji
|
||||||
|
|
||||||
self.children[0].disabled = self.index == 1
|
self.children[0].disabled = self.index == 1
|
||||||
self.children[1].disabled = self.index == self.maxpage
|
self.children[1].disabled = self.index == self.maxpage
|
||||||
@ -174,7 +194,7 @@ class PaginationView(View):
|
|||||||
async def send(self):
|
async def send(self):
|
||||||
embed = await self.create_paged_embed()
|
embed = await self.create_paged_embed()
|
||||||
|
|
||||||
if self.maxpage == 1:
|
if self.maxpage <= 1:
|
||||||
await self.inter.edit_original_response(embed=embed)
|
await self.inter.edit_original_response(embed=embed)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user