Repository navigation
Improve standalone emotes, moderation, and chat recovery - #55
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a0b3f6cb3f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| || data?.chatroom?.is_current_user_moderator === true | ||
| ); | ||
| setCanModerate('kick', canKickMod); | ||
| S.kickSubscribed = !!(meKick && meKick === channelName) || data.is_subscribed === true || data.chatroom?.is_subscribed === true; |
There was a problem hiding this comment.
Refresh Kick access after authenticating in a joined channel
When a viewer joins Kick anonymously and then connects their account without leaving, this assignment is not run again: the Kick identity lookup only sets S.kickUserLogin and does not reconnect or refetch the channel. Consequently S.kickSubscribed remains false, cached/current subscriber emotes stay unselectable, and moderation capability is likewise stale until the viewer manually leaves and rejoins. Re-evaluate the joined channel after Kick authentication completes.
Useful? React with 👍 / 👎.
| const destination = S.nativeEmotes.kick; | ||
| const data = await requestKickEmotePayload(channel); | ||
| const store = parseKickEmotePayload(data); | ||
| if(destination !== S.nativeEmotes.kick) return 0; |
There was a problem hiding this comment.
Fence warm-cache responses by channel, not store identity
On startup with an expired global cache, warmKickEmoteCache() begins a quiet fetch for the most recent channel. If the viewer joins a different Kick channel before that request completes, both operations still reference the same initial S.nativeEmotes.kick object, so this identity check passes and the late response merges the previous channel's emotes into the active catalog as selectable native emotes. They can then appear in the picker and be serialized with the wrong channel's IDs; also verify the requested channel or use an epoch before merging.
Useful? React with 👍 / 👎.
The standalone app was missing recent emote, recovery, and moderation improvements. This updates its existing interface and chat connections while retaining the original Twitch, Kick, and YouTube workflows. Features that require a native platform window are excluded; FriendlyChatExtension is unchanged.
Validation:
npm run test:coveragepassed all 349 tests, with 100% shared-feature/coverage-target statements, branches, functions and lines, plus 100% changed renderer/server/main lines, functions and V8 block ranges. Source and packaged Windows Electron smoke checks passed, including the quick-bar toggle, picker order, and one-row geometry at 1280/800/520px. Local Windows packaging passed. Whole-repository historical coverage is not claimed; macOS/Linux installers are built by the tag workflow.