A pagination wrapper for discord.py
Project description
Pygicord
An easy-to-use feature-rich pagination wrapper for discord.py
Contents
- Installing
- Getting Started
- Basic Paginator
- Attributes
- Custom Emojis
- Configuration
- Custom Paginator
- New Paginator
Installing
pip install pygicord
or via git:
pip install git+https://github.com/davidetacchini/pygicord
Note
It is recommended using the latest stable version of discord.py.
Getting Started
Basic Paginator
from pygicord import Paginator
def get_pages():
pages = []
for i in range(1, 6):
embed = discord.Embed()
embed.title = f"Embed no. {i}"
pages.append(embed)
return pages
@bot.command()
async def test(ctx):
pages = get_pages()
paginator = Paginator(pages=pages)
await paginator.start(ctx)
Attributes
| Name | Description | Type | Default |
|---|---|---|---|
| pages | A list of objects to paginate or just one. | Union[Any, List[Any]] | |
| embed_links | Whether to check for Embed Links permission. | bool | True |
| timeout | The timeout to wait before stopping the pagination session. | float | 90.0 |
| emojis | The custom emojis to use. | Mapping[str, str] | Discord natives |
| config | The configuration to use. | pygicord.Config | Config.DEFAULT |
| force_lock | Whether to force adding the lock. | bool | False |
- emojis attribute is a Mapping of old emoji codes to new emoji codes. Keep reading to understand how to set your custom emojis.
- force_lock adds a reaction that allows the author of the message to share/unshare the reaction controller to other server members.
Supported emojis formats:
- Emoji: "🚀" (not recommended)
- Unicode: "\U0001F680"
- Unicode name: "\N{ROCKET}"
- Custom emoji: ":custom_emoji:123456"
Custom Emojis
from pygicord import Paginator
# copy this and replace the values.
custom_emojis = {
"\U000023EA": "REPLACE (first page)",
"\U000025C0": "REPLACE (previous page)",
"\U000023F9": "REPLACE (stop session)",
"\U000025B6": "REPLACE (next page)",
"\U000023E9": "REPLACE (last page)",
"\U0001F522": "REPLACE (input numbers)",
"\U0001F512": "REPLACE (lock unlock)",
}
@bot.command
async def test(ctx):
paginator = Paginator(pages=pages, emojis=custom_emojis)
await paginator.start(ctx)
Configuration
Config.RICH is the only configuration to have the lock set by default.
You must set force_lock to True if you want to add it to all other configurations.
| Type | Controller |
|---|---|
| Config.DEFAULT | first, previous, stop, next, last, input |
| Config.MINIMAL | previous, stop, next |
| Config.PLAIN | first, previous, stop, next, last |
| Config.RICH | first, previous, stop, next, last, input, lock |
| Control | Action |
|---|---|
| first | Jump to first page |
| previous | Go to next page |
| stop | Stop pagination session |
| next | Go to next page |
| last | Jump to last page |
| input | Enter a page number to jump to |
| input | Share/unshare the reaction controller to other server members. |
from pygicord import Config, Paginator
@bot.command()
async def test(ctx):
paginator = Paginator(pages=pages, config=Config.MINIMAL)
await paginator.start(ctx)
Custom Paginator
from pygicord import Paginator, control
class CustomPaginator(Paginator):
@control(emoji="\N{INFORMATION SOURCE}", position=4.5)
async def show_info(self, payload):
"""Shows this message."""
desc = []
for emoji, control_ in self.controller.items():
desc.append(f"{emoji}: {control_.callback.__doc__}")
embed = discord.Embed()
embed.description = "\n".join(desc)
embed.set_footer(text="Press any reaction to go back.")
await self.message.edit(content=None, embed=embed)
pages = [f"Page no. {i}" for i in range(1, 6)]
@bot.command()
async def test(ctx):
paginator = CustomPaginator(pages=pages)
await paginator.start(ctx)
New Paginator
from pygicord import Base, StopAction, StopPagination, control
class MyPaginator(Base):
@control(emoji="\N{BLACK SQUARE FOR STOP}", position=2)
async def stop(self, payload):
"""Stop pagination."""
raise StopPagination(StopAction.DELETE_MESSAGE)
@stop.display_if
def stop_display_if(self):
"""Only displays when pages are atleast 2."""
return len(self) > 1
@stop.invoke_if
def stop_invoke_if(self, payload):
"""Only the author can stop the session."""
return self.ctx.author.id == payload.user_id
pages = [f"Page no. {i}" for i in range(1, 6)]
@bot.command()
async def test(ctx):
paginator = MyPaginator(pages=pages)
await paginator.start(ctx)
You can find more exhaustive examples in the examples folder.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pygicord-1.1.3.tar.gz.
File metadata
- Download URL: pygicord-1.1.3.tar.gz
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
093a796e43e579b8422e27a23be6ad9f43957b199ee2fd50f2064c972c7f6b16
|
|
| MD5 |
50eca40dd0feda4de1a4fe127d6bd87c
|
|
| BLAKE2b-256 |
abc8479ca33817f8bd89edce065069d5cd79fe1e5300da04f2124787bbf7f016
|
File details
Details for the file pygicord-1.1.3-py3-none-any.whl.
File metadata
- Download URL: pygicord-1.1.3-py3-none-any.whl
- Upload date:
- Size: 11.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a62335bbe810bea6e49b4e27a1f457298c42e7c363ee3bf74a01b0e0df82101
|
|
| MD5 |
bcf56290709f1257a8320f536851afa9
|
|
| BLAKE2b-256 |
2f1256fff29378901b90b0a56b856b2354684d27d7c629273c4799af257a3bf5
|