Kick: no history — a channel opens empty #64

Closed
opened 2026-09-02 00:04:09 -04:00 by Salastil · 1 comment
Owner

Nothing calls Kick's /api/v2/channels/<slug>/messages, and getBacklog (rpc/methods.rs:125-180) has no Kick branch. A channel shows only what this client saw live, so opening one for the first time — or after a restart — is a blank log until somebody speaks.

Discord has catch_up_channel/extend_history and Matrix has /messages backfill; Kick and IRC have neither.

Done looks like: fetch the recent messages on join, and page backwards on scroll the way Discord's extend_history does.

Nothing calls Kick's `/api/v2/channels/<slug>/messages`, and `getBacklog` (`rpc/methods.rs:125-180`) has no Kick branch. A channel shows only what this client saw live, so opening one for the first time — or after a restart — is a blank log until somebody speaks. Discord has `catch_up_channel`/`extend_history` and Matrix has `/messages` backfill; Kick and IRC have neither. **Done looks like:** fetch the recent messages on join, and page backwards on scroll the way Discord's `extend_history` does.
Author
Owner

Finished — https://git.salastil.com/Salastil/nobilis/commit/0cd38df

GET /api/v2/channels/<id>/messages, keyed by the numeric channel id — the same path with a handle answers 500, which is the kind of difference only found by trying it. Returns newest-first with a cursor.

Fetched on join and backgrounded, so a channel's first live messages are not held up behind it, and recorded oldest-first with Kick's own message ids so a reconnect — which joins again — recognises what it already has rather than duplicating it.

Scrolling up pages by cursor, continuing from where the last page stopped. Not by timestamp: the endpoint is cursor-based and asking by time would re-fetch the same page forever.

Verified against your 29 channels: the live ones fill immediately, and the three that still show empty genuinely have no history — Kick returns messages: [] with a cursor for damandan, checked directly. So an empty channel is now Kick having nothing rather than moho not asking.

Finished — https://git.salastil.com/Salastil/nobilis/commit/0cd38df `GET /api/v2/channels/<id>/messages`, keyed by the **numeric channel id** — the same path with a handle answers 500, which is the kind of difference only found by trying it. Returns newest-first with a cursor. Fetched on join and backgrounded, so a channel's first live messages are not held up behind it, and recorded oldest-first with Kick's own message ids so a reconnect — which joins again — recognises what it already has rather than duplicating it. Scrolling up pages by **cursor**, continuing from where the last page stopped. Not by timestamp: the endpoint is cursor-based and asking by time would re-fetch the same page forever. Verified against your 29 channels: the live ones fill immediately, and the three that still show empty genuinely have no history — Kick returns `messages: []` with a cursor for `damandan`, checked directly. So an empty channel is now Kick having nothing rather than moho not asking.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Salastil/moho#64