Skip to content

Sending messages and using emotes

Reading many chats at once is only half of Pyre.Chat. Talking back is the other half, and because a merged view has no single “current chat”, the send side is built around one deliberate rule: you always send to a named channel, never to whatever happened to scroll past.

Under the chat you get one input row per connected platform, and each row is labelled with the channel it will send to. Rows exist for YouTube, Twitch and Kick only. TikTok has no row: Pyre.Chat reads TikTok, it does not talk there.

If a platform has more than one connected channel, the row carries a dropdown and you pick the channel. Your choice is remembered by channel identity rather than by position, which matters more than it sounds: the input panel gets rebuilt whenever the connected channel set or a display name changes, and remembering by identity is what stops a rebuild from quietly dragging your send target back to the top of the list.

Press Enter to send, or use the Send button. A half typed message survives a rebuild too, so a background refresh cannot eat a draft.

The placeholder in each row names its target, for example Message ravenmoth · / for commands. In a channel tab (see Read the merged feed) the panel shows that channel’s row only.

In a merged streamer tab or one of your own tabs, the panel shows one input per channel, each with its platform chip, for example Message gdolphn on Kick · / for commands. What you type goes to that row’s channel only.

Prefer a single box? Switch on One input with a channel picker above the input (or in Settings › Tabs). You then get one input with a picker in front of it: choose the channel, type, send. Pyre remembers the last channel you picked in each tab. A command always goes to exactly one channel, whichever mode you use.

A line that starts with / is a command for that row’s channel, not a message: /timeout, /ban, /unban, /slow, /clear and the rest are listed in Moderate from the feed. Typing / opens the list. A command is never posted to chat, even a mistyped one. To post a line that really starts with a slash, start it with two (//shrug posts /shrug).

Press Arrow up in an empty row (or with the cursor at the very start) to bring back the last thing you sent from that row, and again to go further back. Arrow down walks forward, and past the newest it gives you back whatever you were typing before. Each row remembers its last 25 lines, commands included, until you reload.

Rotating a dropdown gets old if you talk in two channels on the same platform. Where a platform has more than one connected channel, the row shows a pin button titled Pin channels as dedicated inputs. Tick a channel there and it leaves the dropdown and gets a permanent row of its own, avatar, label and all.

Pins are saved to your account, so they come back next time, and a pin for a channel you later disconnect is cleaned up rather than left behind as a dead row.

Both kinds of autocomplete live in the input itself:

  • Type a colon and at least one letter, like :Kappa, to complete an emote.
  • Type @ to complete a name from the people who have recently talked.

Either list shows up to eight matches. Arrow up and arrow down move through them, Tab or Enter accepts the highlighted one, and Escape dismisses the list without sending. While the list is open, Enter accepts rather than sends, so you cannot fire off a half finished emote name by reflex.

Emote autocomplete is scoped to the row you are typing in: it offers the emotes that actually exist in that channel, not every emote Pyre has ever loaded.

Type the first two or more letters of an emote or a name and press Tab. Pyre fills in the best match that starts with what you typed: emotes you use most come first, then people who talked recently. Press Tab again for the next match, Shift Tab for the previous one, and Escape to put back what you typed. Start the word with @ to complete only names.

When nothing matches, Tab does what it always does and moves to the next control, so the box never traps your keyboard.

On a high resolution screen, Twitch, 7TV, BTTV and FFZ emotes load at the size your screen needs, so they stay crisp instead of being stretched up from the smallest version. Kick serves one size only, so Kick emotes look as they always did.

Above the input rows sits the emote bar. It appears once you have both a connected input and some emotes loaded, and it holds:

  • Twelve emotes, either your most recently used or your most used. Click one to drop it into the active input.
  • The swap button, which flips between those two lists. The icon shows the list you are currently looking at (a clock for Recent, a flame for Most Used).
  • The emote picker button.
  • A channel points button, on Twitch, showing your current balance for the active channel.

The channel points button needs the Pyre browser extension, because reading and spending channel points is not something the public Twitch API offers. Without the extension the button is still there and takes you to the install prompt rather than opening a popover that could only ever fail.

Your bar choice, recent against most used, is saved to your account rather than to one browser.

The picker opens from the smiley button and gives you everything, searchable.

The emote picker open above the input rows, its header holding a Search emotes or channel field, an Insta-send checkbox and a reload button, with the first channel group heading below reading PYRECHAT and a 7TV section label
  1. Search at the top matches emote names and channel names. Matching a channel name shows that whole channel’s set rather than filtering inside it.

  2. The first group is whichever of Most Used or Recently Used the bar is not currently showing, twenty deep. The bar and the picker deliberately show opposite lists so the two together cover both.

  3. Then one group per channel, with the channel you last typed in first and the rest alphabetical. Inside a channel group, emotes are split into sections by where they came from: 7TV, and the platform’s own set under Twitch, Kick or YouTube.

  4. Insta-send, a toggle in the picker header, changes what a click does. Off, clicking inserts the emote into your input. On, clicking sends it immediately.

  5. The refresh button force reloads every emote set.

Force reload does a real refetch, not a re-render: it drops Pyre’s cached sets, asks the server to fetch every connected channel again, and confirms with a toast naming how many channels came back. Your own recent and most used history is not touched by it, because which emotes you use is not a cache.

Emotes from BTTV are worth one note of their own: Pyre merges the BTTV set into the 7TV set on the server before either reaches your browser, so BTTV emotes appear under the 7TV heading in the picker rather than one of their own. BTTV is Twitch only, because its lookup is keyed on a Twitch account id and has no Kick or YouTube equivalent.

Twitch messages get a reply button. Press it and a banner appears above your input showing who you are replying to, then send as normal and the message threads under theirs on Twitch.

Replies are Twitch only, so the button appears on Twitch messages and nowhere else. YouTube’s live chat has no native reply to thread against, and Kick is not wired for it either. There is nothing to configure here: the button is present exactly where the feature works.

One thing to watch: the reply attaches only when you send from the Twitch row. If you set up a reply and then type into your Kick or YouTube row, that message goes out as an ordinary message and the reply is cleared.

Every Twitch row carries a clip button that clips the last thirty seconds of the stream on the channel that row is currently pointed at. It reports back either the failure the platform gave, or success with the clip editor opening in a new tab so you can trim it while you remember what you were clipping.

Sending does not fail silently if your connection goes, or if Pyre is mid update. Messages you send are queued instead, and a toast tells you how many are waiting. When the connection comes back, the queue drains automatically and you get a Queued messages sent confirmation.

The delay is short but it is real, so a queued message can land a moment after the conversation moved on. If a message was time sensitive, check it landed where you meant it to.

  • No input row for a platform. Pyre only builds a row for a platform with at least one connected channel. See Connect your channels.
  • No row for TikTok. Expected. TikTok is read only in Pyre.Chat.
  • No pin button. It only appears where a platform has more than one connected channel, since pinning the only channel would change nothing.
  • The emote bar is missing. It hides itself when there is no input row, or when no emotes have loaded yet. Try the picker’s refresh button.
  • The channel points button does nothing useful. It needs the browser extension. Without it, the button leads to the install prompt.
  • Your emote sent as plain text. If it went to Kick, see the caution above. If it went elsewhere, the emote probably does not exist in the channel you sent it to: emotes are per channel, and the picker lists every channel’s set.
  • Your reply arrived as a normal message. You sent it from a row that was not the Twitch row.
  • A line starting with / did not send. It was read as a command. Start it with // to post a literal slash.
  • Only one input row is showing. You are in a channel tab, which shows that channel’s row. Switch to All for every row. In a tab with several channels, the channel picker may be on: switch off One input with a channel picker to get one row per channel.