fix: multi-entry pages join dict content instead of dropping all but the last

The dict-entry catch-all assigned kwargs["content"] = value directly, so a
per_page > 1 page combining multiple dict entries silently kept only the
last entry's content while embeds/files/buttons from every entry still
accumulated - an asymmetry that dropped text with no error. The dict
branch's content key now routes through the same None-check/newline-join
accumulation the plain-str branch already used, so every entry's content
survives in order.

Signed-off-by: disqualifier <dev@disqualifier.me>
This commit is contained in:
2026-07-03 19:07:24 -04:00
parent a2cb616667
commit 9e55b29e11
3 changed files with 12 additions and 4 deletions
+8 -3
View File
@@ -9,18 +9,18 @@ buttons) behind previous / jump / next navigation, with an optional cache button
`requirements.txt`:
```
dpy_paginator @ git+ssh://git@git.rethinkstudios.io/rethink-public/dpy_paginator.git@v0.1.8
dpy_paginator @ git+ssh://git@git.rethinkstudios.io/rethink-public/dpy_paginator.git@v0.1.9
```
Direct:
```bash
pip install "dpy_paginator @ git+ssh://git@git.rethinkstudios.io/rethink-public/dpy_paginator.git@v0.1.8"
pip install "dpy_paginator @ git+ssh://git@git.rethinkstudios.io/rethink-public/dpy_paginator.git@v0.1.9"
```
Requires `discord.py` (pulled transitively).
Drop the `@v0.1.8` suffix from the line above to install the latest unpinned.
Drop the `@v0.1.9` suffix from the line above to install the latest unpinned.
## Basic usage
@@ -61,6 +61,11 @@ those, or a `dict`. A dict page can carry `content`, `embed`/`embeds`,
`files` accept a `discord.Attachment` and convert it via `to_file()` automatically —
you never need to convert an attachment before passing it in.
With `per_page > 1`, multiple entries render onto one page. `content` from each
entry (whether a plain `str` entry or a dict's `content` key) joins with `\n` in
order, same as `embeds`/`files`/`buttons` accumulate — no entry's content is
dropped in favor of another's.
File pages are safe to navigate back to. discord.py closes a `discord.File`'s
underlying handle after every send/edit, so the paginator never resends your File
object directly — it rebuilds a fresh `discord.File` from the same source (path or
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project]
name = "dpy_paginator"
version = "0.1.8"
version = "0.1.9"
description = "Button-navigated paginator for discord.py — config-free, injectable emojis, installable."
requires-python = ">=3.10"
dependencies = [
+3
View File
@@ -279,6 +279,9 @@ class DPYPaginator(Generic[PageT_co], discord.ui.View):
raise ValueError(
f"page key {key!r} has unexpected type {type(value).__name__}"
)
elif key == "content":
existing = kwargs["content"]
kwargs["content"] = value if existing is None else f"{existing}\n{value}"
else:
kwargs[key] = value
elif isinstance(formatted_page, str):