Skip to content

Improve standalone emotes, moderation, and chat recovery - #55

Merged
JRBlaze merged 1 commit into
mainfrom
codex/standalone-emotes-and-reliability
Oct 14, 2026
Merged

JRBlaze merged 1 commit into
mainfrom
codex/standalone-emotes-and-reliability

Conversation

@JRBlaze

@JRBlaze JRBlaze commented Oct 14, 2026

Copy link
Copy Markdown
Owner

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.

  • Add device-local favorites, an optional quick access bar capped at eight recent emotes, and picker ordering by favorites, streamer, then category. Refresh availability without deleting saved names, encode Kick emotes correctly, and preview the selected platform's image when names overlap.
  • Recover connections after bounded retry bursts and five-minute cooldowns, negotiate Kick's current chat service, fence stale responses, and check socket health. Suspend offscreen media and revalidate Twitch sessions hourly.
  • Delete the clicked message rather than a newer one, reject unknown moderation actions and invalid durations, and support Twitch API pin/unpin. Add message copying, composer recall, silent-streamer mention completion, incoming Gigantify rendering, and validated YouTube image badges.
  • Add PR/main checks on Node 20 and 24, including coverage against committed changes. Prepare v1.6.0 installers for Windows x64, universal macOS (Intel and Apple Silicon), and Linux x64.

Validation: npm run test:coverage passed 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.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-14T22:36:55.646587Z a0b3f6c PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@JRBlaze
JRBlaze merged commit 1e4feca into main Oct 14, 2026
2 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread friendly-chat.html
|| data?.chatroom?.is_current_user_moderator === true
);
setCanModerate('kick', canKickMod);
S.kickSubscribed = !!(meKick && meKick === channelName) || data.is_subscribed === true || data.chatroom?.is_subscribed === true;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment thread friendly-chat.html
Comment on lines +3765 to +3767
const destination = S.nativeEmotes.kick;
const data = await requestKickEmotePayload(channel);
const store = parseKickEmotePayload(data);
if(destination !== S.nativeEmotes.kick) return 0;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant