Kick: polls, deeplinks, and a Settings category #83

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

Three smaller Kick gaps worth one issue.

  • Polls. PollUpdateEvent/PollDeleteEvent are unhandled, so a poll running on stream is invisible in moho.
  • Deeplinks. irc:// is registered as an OS protocol handler (src/main/index.ts), but a kick.com/<handle> link opened in a browser does nothing. The join field accepts a pasted URL, which is the manual version of the same thing.
  • No Settings category. SettingsPanel.tsx lists general/irc/sockchat/tor/matrix/about. Kick has none, so there is nowhere to filter the reward and system lines the way IRC's join/part filters work.

Also: Emote.animated is hardcoded false (backend/kick/emotes.rs:37-38) though Kick serves animated emotes, and Channel.avatar_url is parsed and never used, so Kick accounts and buffers show no picture.

Three smaller Kick gaps worth one issue. - **Polls.** `PollUpdateEvent`/`PollDeleteEvent` are unhandled, so a poll running on stream is invisible in moho. - **Deeplinks.** `irc://` is registered as an OS protocol handler (`src/main/index.ts`), but a `kick.com/<handle>` link opened in a browser does nothing. The join field accepts a pasted URL, which is the manual version of the same thing. - **No Settings category.** `SettingsPanel.tsx` lists general/irc/sockchat/tor/matrix/about. Kick has none, so there is nowhere to filter the reward and system lines the way IRC's join/part filters work. Also: `Emote.animated` is hardcoded `false` (`backend/kick/emotes.rs:37-38`) though Kick serves animated emotes, and `Channel.avatar_url` is parsed and never used, so Kick accounts and buffers show no picture.
Author
Owner

Finished — https://git.salastil.com/Salastil/nobilis/commit/8dae46f and https://git.salastil.com/Salastil/moho/commit/e518431

Polls are announced with the question and the running tally as the streamer updates it. Not made interactive — voting goes through the player — but a poll running on stream was invisible here, which is the part somebody reading chat was missing. Parsed tolerantly, since Kick has sent the fields both nested under poll and flat.

Deeplinks. A kick.com/<handle> link in a message now opens the channel in moho rather than the browser. Only the bare handle form: a link to a clip, a video or a category is a page moho cannot show, and silently opening the channel instead would take somebody somewhere they did not ask to go. The OS scheme registration is deliberately untouched — a kick.com link is an ordinary web address, and registering for https would be volunteering to be the system browser.

Settings. A Kick category with six toggles for the things nobody said: redemptions, subscriptions and gifts, raids, polls, going live, and moderation. That needed the daemon to stop calling all of them "reward" — one kind made "show redemptions but not raids" a choice between all of them and none. Moderation and stream lines are deliberately not plated: a timeout is not something somebody spent anything on.

Two smaller items from the issue body:

  • Channel.avatar_url was parsed by the first version of this backend and used by nothing, so every Kick channel drew as a bare hash among rows that all had faces. 28 of your 29 now have one.
  • Emote.animated stays false, now with the reason recorded rather than left looking like an oversight: Kick's emote objects carry id, channel_id, name and subscribers_only and nothing else — there is no flag to read. It costs nothing either way, because Discord needs that flag to choose a file extension while Kick serves one URL and the browser animates whatever arrives.
Finished — https://git.salastil.com/Salastil/nobilis/commit/8dae46f and https://git.salastil.com/Salastil/moho/commit/e518431 **Polls** are announced with the question and the running tally as the streamer updates it. Not made interactive — voting goes through the player — but a poll running on stream was invisible here, which is the part somebody reading chat was missing. Parsed tolerantly, since Kick has sent the fields both nested under `poll` and flat. **Deeplinks.** A `kick.com/<handle>` link in a message now opens the channel in moho rather than the browser. Only the bare handle form: a link to a clip, a video or a category is a page moho cannot show, and silently opening the channel instead would take somebody somewhere they did not ask to go. The OS scheme registration is deliberately untouched — a kick.com link is an ordinary web address, and registering for `https` would be volunteering to be the system browser. **Settings.** A Kick category with six toggles for the things nobody said: redemptions, subscriptions and gifts, raids, polls, going live, and moderation. That needed the daemon to stop calling all of them "reward" — one kind made "show redemptions but not raids" a choice between all of them and none. Moderation and stream lines are deliberately not plated: a timeout is not something somebody spent anything on. Two smaller items from the issue body: - **`Channel.avatar_url`** was parsed by the first version of this backend and used by nothing, so every Kick channel drew as a bare hash among rows that all had faces. **28 of your 29 now have one.** - **`Emote.animated`** stays `false`, now with the reason recorded rather than left looking like an oversight: Kick's emote objects carry `id`, `channel_id`, `name` and `subscribers_only` and nothing else — there is no flag to read. It costs nothing either way, because Discord needs that flag to choose a file extension while Kick serves one URL and the browser animates whatever arrives.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Salastil/moho#83