https://github.com/FayeDel/ButtonPaginator
Button Paginator using discord-py-interactions lib
https://github.com/FayeDel/ButtonPaginator
discord discord-api discord-interactions discord-py-interactions discord-py-slash-command discordapp hacktoberfest paginator python
Last synced: 4 months ago
JSON representation
Button Paginator using discord-py-interactions lib
- Host: GitHub
- URL: https://github.com/FayeDel/ButtonPaginator
- Owner: FayeDel
- License: mit
- Created: 2021-07-13T18:59:23.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2021-08-09T19:24:50.000Z (almost 4 years ago)
- Last Synced: 2025-01-22T06:16:56.856Z (4 months ago)
- Topics: discord, discord-api, discord-interactions, discord-py-interactions, discord-py-slash-command, discordapp, hacktoberfest, paginator, python
- Language: Python
- Homepage:
- Size: 8.79 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Welcome!
It's a very simple paginator for discord-py-interactions!This project is open source ⭐.
## Install
```
pip install --upgrade SlashPaginator
```# Example
```py
@slash.slash(name="example")
async def _example(ctx):
embed1 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 1")
embed2 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 2")
embed3 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 3")
paginator = SlashPaginator.AutoSlashEmbedPaginator(ctx)
embeds = [embed1, embed2, embed3]
await paginator.run(embeds)```
The `AutoSlashEmbedPaginator` uses the lib's buttons to scroll.
If given only one page, it just acts as a glorified ctx.send(embed=embeds) message.The `CustomAutoSlashPaginator` is a subclass of `AutoSlashEmbedPaginator` that lets you:
- Customise what buttons you want to use, instead of the default.
- Customize what functions the buttons should use instead.The caveat with the custom object is that it requires learning about how to use components in the lib.
You may refer [here](https://discord-py-slash-command.readthedocs.io/en/latest/components.html#responding-to-interactions) to learn more.## Custom example (Reimplementing AutoSlashEmbedPaginator without the freeze page button):
```py
class MyOwnPaginator(SlashPaginator.CustomAutoSlashPaginator):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
async def button_1_action(self, button_ctx):
"""Seeks to the first page."""
self.current_page = 0
if self.remove_reactions:
try:
await button_ctx.edit_origin(components=[])
except:
pass
if self.auto_footer:
self.embeds[0].set_footer(
text=f"({self.current_page + 1}/{len(self.embeds)})"
)
await button_ctx.edit_origin(embed=self.embeds[0])
async def button_2_action(self, button_ctx):
"""Seeks to the previous page."""
self.current_page = self.current_page - 1
self.current_page = (
0 if self.current_page < 0 else self.current_page
)
if self.remove_reactions:
try:
await button_ctx.edit_origin(components=[])
except:
pass
if self.auto_footer:
self.embeds[self.current_page].set_footer(
text=f"({self.current_page + 1}/{len(self.embeds)})"
)
await button_ctx.edit_origin(embed=self.embeds[self.current_page])
async def button_3_action(self, button_ctx):
"""Seeks to the next page."""
self.current_page = self.current_page + 1
self.current_page = (
len(self.embeds) - 1
if self.current_page > len(self.embeds) - 1
else self.current_page
)
if self.remove_reactions:
try:
await button_ctx.edit_origin(components=[])
except:
pass
if self.auto_footer:
self.embeds[self.current_page].set_footer(
text=f"({self.current_page + 1}/{len(self.embeds)})"
)
await button_ctx.edit_origin(embed=self.embeds[self.current_page])
async def button_4_action(self, button_ctx):
"""Seeks to the last page."""
self.current_page = len(self.embeds) - 1
if self.remove_reactions:
try:
await button_ctx.edit_origin(components=[])
except:
pass
if self.auto_footer:
self.embeds[len(self.embeds) - 1].set_footer(
text=f"({self.current_page + 1}/{len(self.embeds)})"
)
await button_ctx.edit_origin(
embed=self.embeds[len(self.embeds) - 1]
)
@slash.slash(name="example")
async def _example(ctx):
embed1 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 1")
embed2 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 2")
embed3 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 3")
emojis = ["⏮️", "◀", "▶", "⏭️"] # first page, prev page, next page, last page
embeds = [embed1, embed2, embed3]
paginator = MyOwnPaginator(ctx, control_emojis=emojis)
await paginator.run(embeds)```
## Custom Example #2
(Redoing the look of the buttons, but keep the functionality intact.)```py
@slash.slash(name="example")
async def _example(ctx):
embed1 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 1")
embed2 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 2")
embed3 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 3")
emojis = ["⏮️", "◀", "⏹️", "▶", "⏭️"] # first page, prev page, stop, next page, last page
embeds = [embed1, embed2, embed3]
paginator = SlashPaginator.CustomAutoSlashPaginator(ctx, control_emojis=emojis, default_run=True)
await paginator.run(embeds)```
## License
This project is under the MIT License.## Contribute
Anyone can contribute to this by forking the repository, making a change, and create a pull request!Make sure you run it under the black formatter first :)
## Credits to:
+ [decave27](https://github.com/decave27/ButtonPaginator/) for the README layout
+ [toxicrecker](https://github.com/toxicrecker/DiscordUtils) for the basis of this paginator
+ Everyone that maintains the [discord-py-interactions](https://github.com/discord-py-slash-commands/discord-py-interactions) lib.