A Paginator class already exists in matrix/help/pagination.py and is used internally by the help command. It is not exported from the public API and provides no way to send pages to a room with reaction-based navigation, it only slices lists into Page objects.
The idea is to make Paginator a first-class public utility and extend it with a send method that posts the first page and handles ⬅️ / ➡️ reactions to let users navigate, making it straightforward to paginate any long output from a command.
Proposed API
from matrix import Paginator
@bot.command()
async def members(ctx):
all_members = await ctx.room.get_members()
pages = Paginator(all_members, per_page=10, formatter=lambda m: f"- {m}")
await pages.send(ctx)
The existing Paginator and Page classes handle slicing correctly already; the work is adding the interactive layer. send would post the first page, add navigation reactions, then use wait_for (see related issue) to listen for reactions from the original sender and update the message in place. Editing a Matrix message uses the m.replace relationship type. The main question is whether to edit in place or post new messages per page, editing is cleaner but requires the bot to have the original event ID; posting new messages is simpler but noisy. Also worth exporting Paginator and Page from matrix/__init__.py.
A
Paginatorclass already exists inmatrix/help/pagination.pyand is used internally by the help command. It is not exported from the public API and provides no way to send pages to a room with reaction-based navigation, it only slices lists intoPageobjects.The idea is to make
Paginatora first-class public utility and extend it with asendmethod that posts the first page and handles ⬅️ / ➡️ reactions to let users navigate, making it straightforward to paginate any long output from a command.Proposed API
The existing
PaginatorandPageclasses handle slicing correctly already; the work is adding the interactive layer.sendwould post the first page, add navigation reactions, then usewait_for(see related issue) to listen for reactions from the original sender and update the message in place. Editing a Matrix message uses them.replacerelationship type. The main question is whether to edit in place or post new messages per page, editing is cleaner but requires the bot to have the original event ID; posting new messages is simpler but noisy. Also worth exportingPaginatorandPagefrommatrix/__init__.py.