Compare commits
4
Commits
v1.0.0
...
c51b89bcf6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c51b89bcf6 | ||
|
|
eb4c3efb28 | ||
|
|
654c18fece | ||
|
|
5095953257 |
No files matched your search
@@ -9,18 +9,18 @@ buttons) behind previous / jump / next navigation, with an optional cache button
|
|||||||
`requirements.txt`:
|
`requirements.txt`:
|
||||||
|
|
||||||
```
|
```
|
||||||
dpy_paginator @ git+ssh://git@git.rethinkstudios.io/rethink-public/dpy_paginator.git@v1.0.0
|
dpy_paginator @ git+ssh://git@git.rethinkstudios.io/rethink-public/dpy_paginator.git@v1.2.0
|
||||||
```
|
```
|
||||||
|
|
||||||
Direct:
|
Direct:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install "dpy_paginator @ git+ssh://git@git.rethinkstudios.io/rethink-public/dpy_paginator.git@v1.0.0"
|
pip install "dpy_paginator @ git+ssh://git@git.rethinkstudios.io/rethink-public/dpy_paginator.git@v1.2.0"
|
||||||
```
|
```
|
||||||
|
|
||||||
Requires `discord.py` (pulled transitively).
|
Requires `discord.py` (pulled transitively).
|
||||||
|
|
||||||
Drop the `@v1.0.0` suffix from the line above to install the latest unpinned.
|
Drop the `@v1.2.0` suffix from the line above to install the latest unpinned.
|
||||||
|
|
||||||
## Basic usage
|
## Basic usage
|
||||||
|
|
||||||
@@ -149,7 +149,8 @@ through.
|
|||||||
- `timeout` — seconds before the view stops (default 180)
|
- `timeout` — seconds before the view stops (default 180)
|
||||||
- `delete_message_after` — delete the message on timeout
|
- `delete_message_after` — delete the message on timeout
|
||||||
- `per_page` — entries per page (default 1)
|
- `per_page` — entries per page (default 1)
|
||||||
- `mentions_allowed` — `AllowedMentions` for sends (default `.all()`)
|
- `mentions_allowed` — `AllowedMentions` for sends (default `AllowedMentions(everyone=False)`:
|
||||||
|
no @everyone/@here, user/role pings and the bot-wide settings still apply)
|
||||||
- `ephemeral` — send/edit ephemerally
|
- `ephemeral` — send/edit ephemerally
|
||||||
- `page_text` — format string for the jump button label
|
- `page_text` — format string for the jump button label
|
||||||
- `emojis` — override navigation emojis
|
- `emojis` — override navigation emojis
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "dpy_paginator"
|
name = "dpy_paginator"
|
||||||
version = "1.0.0"
|
version = "1.2.0"
|
||||||
description = "Button-navigated paginator for discord.py — config-free, injectable emojis, installable."
|
description = "Button-navigated paginator for discord.py — config-free, injectable emojis, installable."
|
||||||
requires-python = ">=3.10"
|
requires-python = ">=3.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
|||||||
@@ -85,7 +85,8 @@ class JumpToPageModal(discord.ui.Modal, title="Jump to Page"):
|
|||||||
"""modal that lets a user jump to a specific page"""
|
"""modal that lets a user jump to a specific page"""
|
||||||
|
|
||||||
def __init__(self, paginator: "DPYPaginator"):
|
def __init__(self, paginator: "DPYPaginator"):
|
||||||
super().__init__()
|
# share the paginator's timeout so a dismissed modal leaves discord.py's ViewStore
|
||||||
|
super().__init__(timeout=paginator.timeout)
|
||||||
self.paginator = paginator
|
self.paginator = paginator
|
||||||
self.page_number = discord.ui.TextInput(
|
self.page_number = discord.ui.TextInput(
|
||||||
label="Enter page number",
|
label="Enter page number",
|
||||||
@@ -142,7 +143,8 @@ class DPYPaginator(Generic[PageT_co], discord.ui.View):
|
|||||||
timeout: seconds before the view stops
|
timeout: seconds before the view stops
|
||||||
delete_message_after: delete the message on timeout
|
delete_message_after: delete the message on timeout
|
||||||
per_page: how many entries render per page
|
per_page: how many entries render per page
|
||||||
mentions_allowed: AllowedMentions for sends (defaults to all)
|
mentions_allowed: AllowedMentions for sends (default: no @everyone/@here;
|
||||||
|
user/role pings and the bot-wide settings still apply)
|
||||||
ephemeral: send/edit ephemerally
|
ephemeral: send/edit ephemerally
|
||||||
page_text: format string for the jump button label
|
page_text: format string for the jump button label
|
||||||
emojis: override navigation emojis (keys: previous/next/cache)
|
emojis: override navigation emojis (keys: previous/next/cache)
|
||||||
@@ -155,7 +157,7 @@ class DPYPaginator(Generic[PageT_co], discord.ui.View):
|
|||||||
raise ValueError("per_page must be >= 1")
|
raise ValueError("per_page must be >= 1")
|
||||||
self.author_id: Optional[int] = author_id
|
self.author_id: Optional[int] = author_id
|
||||||
self.delete_message_after: bool = delete_message_after
|
self.delete_message_after: bool = delete_message_after
|
||||||
self.mentions_allowed = mentions_allowed or discord.AllowedMentions.all()
|
self.mentions_allowed = mentions_allowed or discord.AllowedMentions(everyone=False)
|
||||||
self.ephemeral: bool = ephemeral
|
self.ephemeral: bool = ephemeral
|
||||||
self.current_page: int = 0
|
self.current_page: int = 0
|
||||||
self.per_page: int = per_page
|
self.per_page: int = per_page
|
||||||
@@ -385,8 +387,10 @@ class DPYPaginator(Generic[PageT_co], discord.ui.View):
|
|||||||
await self.message.edit(**kwargs)
|
await self.message.edit(**kwargs)
|
||||||
except (discord.NotFound, discord.Forbidden):
|
except (discord.NotFound, discord.Forbidden):
|
||||||
pass
|
pass
|
||||||
except discord.HTTPException:
|
except discord.HTTPException as exc:
|
||||||
log.warning("paginator cache_button: failed to refresh message", exc_info=True)
|
# swallowed best-effort cleanup that recovers - no traceback (exc_info belongs
|
||||||
|
# on terminal/unhandled paths); the reason is folded in for diagnosis.
|
||||||
|
log.warning("paginator cache_button: failed to refresh message: %s", exc)
|
||||||
|
|
||||||
@discord.ui.button(style=discord.ButtonStyle.blurple)
|
@discord.ui.button(style=discord.ButtonStyle.blurple)
|
||||||
async def next_page(self, interaction: Interaction, _: discord.ui.Button[Self]) -> None:
|
async def next_page(self, interaction: Interaction, _: discord.ui.Button[Self]) -> None:
|
||||||
@@ -464,9 +468,10 @@ class DPYPaginator(Generic[PageT_co], discord.ui.View):
|
|||||||
await self.message.delete()
|
await self.message.delete()
|
||||||
except (discord.NotFound, discord.Forbidden):
|
except (discord.NotFound, discord.Forbidden):
|
||||||
pass
|
pass
|
||||||
except discord.HTTPException:
|
except discord.HTTPException as exc:
|
||||||
# best-effort cleanup task; log rather than raise into an unretrieved task
|
# best-effort cleanup task; log rather than raise into an unretrieved task. no
|
||||||
log.warning("paginator on_timeout: failed to delete message", exc_info=True)
|
# traceback (exc_info belongs on terminal/unhandled paths) - fold the reason in.
|
||||||
|
log.warning("paginator on_timeout: failed to delete message: %s", exc)
|
||||||
|
|
||||||
|
|
||||||
# back-compat alias: the class was originally named ButtonPaginator; DPYPaginator is
|
# back-compat alias: the class was originally named ButtonPaginator; DPYPaginator is
|
||||||
|
|||||||
Reference in new issue
Block a user