Ask Kick who you are in the room, since the channel record cannot say - #29
Merged
Conversation
The moderation tools never appeared on Kick for anybody but the broadcaster. The flag was read off the channel record, and that record describes the channel rather than the person reading it — so the only branch that could fire was "your name is the channel's name". Twitch works because it volunteers the answer in USERSTATE. Kick answers "do you moderate here" at channels/<slug>/me, and only to the browser session that asks: no cookie is answered Unauthenticated, an OAuth token for the public API is a different credential, and Chrome withholds a SameSite cookie from the extension's own cross-site fetch. So the page is asked, the way it already is when Cloudflare refuses the emote list. The worker still tries first, because that is the only route with any chance on a Twitch tab. Read generously and acted on in one direction only: Kick documents none of these field names, so a spelling that has moved can cost tools that would have been offered and can never take away tools already given. A reconnect can no longer wipe the flag either. The two ways this can be true and still unusable now say so in the feed: kick.com signed in as one account while the extension holds a token for another, and moderating with no account connected at all. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The bug
Moderation tools — the username menu's Moderate section and the new hover strip alike — never appeared on Kick for anyone except the broadcaster. Twitch was unaffected.
Both are gated on one flag, and that flag was read off Kick's channel record. That record describes the channel, not the person reading it, so the
is_moderatorfield it was checked for is not there. The only branch that could ever fire was "your account name equals the channel name". Twitch works because it volunteers the answer inUSERSTATEafter the join.The fix
Kick answers this at
channels/<slug>/me, and only to the browser session that asks — probed directly, a request with no session cookie comes back{"message":"Unauthenticated."}. An OAuth token for Kick's public API is a different credential and that route does not read it, and Chrome withholds aSameSitecookie from an extension's cross-site fetch, so the worker generally cannot ask on its own.So the page asks. The content script is already on kick.com and its fetches carry the real session; it reports back to the worker. This is the same arrangement the Kick emote list already uses when Cloudflare refuses the background request. The worker still tries first — one request, and the only route with any chance of working when Kick is merged into a Twitch tab.
Deliberate choices
is_moderator,is_broadcaster,is_channel_owner,is_owner,is_super_admin, string or objectrole/roles, moderatorbadges, each also nested underchatroom,channel,useroridentity) and a "no" is never acted on. A spelling that has moved can cost tools that would have been offered; it can never take away tools already given. This also fixes a reconnect wiping the flag and re-announcing itself.Notes
kickmodandkickmodworker, plus the positive Kick case for the hover strip. Suite: 1625 passing.🤖 Generated with Claude Code