Kick: viewer list is empty, and sender badges and colours are thrown away #72

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

Two halves of the same gap.

No viewer list. emit_presence is never called for a Kick buffer, so the member pane is permanently empty and requestMemberList is Discord-only (rpc/methods.rs:683-690).

Badges discarded. Every ChatMessageEvent carries identity.color, identity.badges and identity.badges_v2 (subscriber tier, level, moderator, verified) — the wire capture in the test at backend/kick/mod.rs:836-839 shows them. The Sender struct (:454-460) reads only username and id, so all of it is dropped at the struct boundary. Kick chat is substantially about who is talking; without badges every line looks the same.

Done looks like: parse identity into the member/message model, colour the nick with the sender's own colour, and show badges beside it.

Two halves of the same gap. **No viewer list.** `emit_presence` is never called for a Kick buffer, so the member pane is permanently empty and `requestMemberList` is Discord-only (`rpc/methods.rs:683-690`). **Badges discarded.** Every `ChatMessageEvent` carries `identity.color`, `identity.badges` and `identity.badges_v2` (subscriber tier, level, moderator, verified) — the wire capture in the test at `backend/kick/mod.rs:836-839` shows them. The `Sender` struct (`:454-460`) reads only `username` and `id`, so all of it is dropped at the struct boundary. Kick chat is substantially about who is talking; without badges every line looks the same. **Done looks like:** parse `identity` into the member/message model, colour the nick with the sender's own colour, and show badges beside it.
Author
Owner

Finished — https://git.salastil.com/Salastil/nobilis/commit/f78d18c, https://git.salastil.com/Salastil/nobilis/commit/0cd38df and https://git.salastil.com/Salastil/moho/commit/b175861

Badges and colours. identity.color and identity.badges arrive on every message and were read by nothing, so a moderator, a two-year subscriber and a stranger all drew identically. Both now travel with the message and are persisted — reopening a conversation would otherwise strip a chat of the thing that makes it readable. Level badges are filtered out: an engagement number beside every nick is noise. Verified live: KickBot in binxbasilisk arrives as #E9113C with Moderator and Verified.

Badges render abbreviated on the name's line with the full text as a tooltip, and only broadcaster and moderator get colour — a name carrying four coloured badges would be the loudest thing on screen, which is the opposite of what a badge is for.

The viewer list does not exist. Every plausible endpoint answers 404 (/chatroom/users, /users, /viewers, and others), and Kick's own page shows no roster either — a livestream chat has none the way a channel does. Rather than leave the panel empty or invent one, it lists who has spoken recently, capped at the last 200 per channel, and the header says exactly that with a tooltip explaining why. That is what the panel is wanted for anyway: to mention somebody, whisper them, or see who the moderators are.

Announced only when it changes — somebody already listed saying more is not a change, or a busy channel would emit a nearly identical roster several times a second — while their badges changing is, since somebody subscribing or being given moderator should show. Each name is marked with one badge, ranked by what a reader is scanning for.

Also fixed on the way: badges were siblings of the name, and the name is a block in the comfy and bubble layouts, so they dropped to the next line and read as part of the message text. Name and badges are now one byline element.

Finished — https://git.salastil.com/Salastil/nobilis/commit/f78d18c, https://git.salastil.com/Salastil/nobilis/commit/0cd38df and https://git.salastil.com/Salastil/moho/commit/b175861 **Badges and colours.** `identity.color` and `identity.badges` arrive on every message and were read by nothing, so a moderator, a two-year subscriber and a stranger all drew identically. Both now travel with the message and are persisted — reopening a conversation would otherwise strip a chat of the thing that makes it readable. Level badges are filtered out: an engagement number beside every nick is noise. Verified live: `KickBot` in binxbasilisk arrives as `#E9113C` with Moderator and Verified. Badges render abbreviated on the name's line with the full text as a tooltip, and only broadcaster and moderator get colour — a name carrying four coloured badges would be the loudest thing on screen, which is the opposite of what a badge is for. **The viewer list does not exist.** Every plausible endpoint answers 404 (`/chatroom/users`, `/users`, `/viewers`, and others), and Kick's own page shows no roster either — a livestream chat has none the way a channel does. Rather than leave the panel empty or invent one, it lists **who has spoken recently**, capped at the last 200 per channel, and the header says exactly that with a tooltip explaining why. That is what the panel is wanted for anyway: to mention somebody, whisper them, or see who the moderators are. Announced only when it changes — somebody already listed saying more is not a change, or a busy channel would emit a nearly identical roster several times a second — while their badges changing is, since somebody subscribing or being given moderator should show. Each name is marked with one badge, ranked by what a reader is scanning for. Also fixed on the way: badges were siblings of the name, and the name is a block in the comfy and bubble layouts, so they dropped to the next line and read as part of the message text. Name and badges are now one byline element.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Salastil/moho#72