|General usageChat basics Chat moderation / utility Chat customization Stream features||
Settings / Files
Also check out the official YouTube Channel with guides and stuff.
When in a channel, Chatty shows some information about that channel
in the titlebar, e.g.:
[40|59] - GTA:SA Speedruns (Grand Theft Auto: San Andreas)
The first number is the number of people in the chat, the second is the viewercount, followed by the current stream title and game. Anything other than the number of people in the chat is requested from the Twitch API about every two minutes.
In addition, the titlebar will also show additional information, if enabled:
Subfor Subscriber-Only Mode
Slow: <time>for Slowmode
R9kfor R9Kbeta Mode
EmoteOnlyfor Emote-Only Mode
[FM]indicates a websocket connection (
You can toggle showing some information under
View - Options - Titlebar.
Note that the stream status (title/game, offline) can take a few minutes to update, since it has to be requested from the Twitch API (which is also heavily cached).
A layout is the arrangement of tabs in the Chatty window and popouts, which can be saved and restored later. Other GUI elements that aren't a tab (e.g. the Settings Dialog or Emotes Dialog) are not considered a part of a layout in this sense, so their location and size is determined in other ways.
You can open several tabs, which can be of basicially two different types:
You can use drag&drop on tabs in various ways:
You can also open the tab context menu (right-click) to perform various actions such as opening a popout or closing the tab.
You can save the current tabs, splits and popouts in a layout under "View - Layouts". Saving a layout is a snapshot of the current state, so if you make any changes that you wish to be saved, you'll have to save it again (add a new layout or overwrite an existing one).
If enabled ("Main - Settings - Main") the layout will automatically be restored when restarting Chatty, which is separate from saving layouts manually.
Aside from loading layouts through the menu, you can also use commands:
/layouts add <name>
/layouts add abc
/layouts save <name>
/layouts remove <name>
/layouts load [-clm] <name>
/layouts load abc) it will open the load layout dialog.
cto keep the current channels open
lto open the channels from the layout
mto load the main window location/size
/layouts load -c abckeeps the current channels open, but does not join the channels in the layout. The options can also be empty, for example
/layouts load - abcwill not open any channels or keep any channels open (but the rest of the layout such as docked dialogs is still loaded).
/layouts load -- -abcif your layout name begins with a
-(in this case "-abc"), which opens the dialog just as if you hadn't provided any options at all.
Default hotkeys which can't be changed:
The following default hotkeys can be changed in the Settings:
In the Settings you can configure hotkeys for many more functions than are listed here.
All command names are case-insensitive. Something like
represents a required parameter which must be entered for the command to
work properly (you don't enter the surrounding
they are just there to show it's a parameter). Equivalently
represents an optional parameter.
You can also create your own Custom Commands & Customized Context Menus.
Tip: You can also use TAB Completion for many commands.
/say <message>- Send a regular chat message, alternative to just entering the text (it being a command can be useful in some cases, e.g. if you want to ensure that a message starting with a replacement can't trigger another command or to use an Anonymous Custom Command using
/me <message>- Send an action message (* nickname says something)
/msgreply <message>- Send a reply to a specific message, only works when added to the User Context Menu or User Dialog in the Commands settings (e.g.
Reply=/msgreply $$input(Reply to $(nick)))
/to <nick> [time] [reason]- Timeout the user with the given nickname for "time" seconds (time is optional)
/colorjust like in normal Twitch Chat
/join <channel>- Joins the given channels, see Joining Channels for more information
/joinhosted- Join currently hosted channel (if any)
/close- Leaves the current channel
/rejoin- Rejoins the channel (without clearing users or chat)
/reconnect- Disconnects and reconnects
/fixMods- Temporarily fixes the list of mods (like
/modsbut without showing the list of mods in chat)
/clearchat- Clears the current chat window of all text (only locally)
/connection- Show info about the current connection
Tip: You can circumvent Chatty commands and send Twitch Chat commands
directly by prepending them with a dot
. instead of a slash,
These commands change how other commands are run.
/chainto run several commands at once
/foreachto run a command for each value in a list
/runinto run a command in a specific channel context
/timerto run a command on a delay
/setcolor <name>- Opens the usercolor settings for the given name
/unfavorite [channel]- Edit the Channel Favorites list (defaults to current channel if none is given)
/unignore <user>- Add/remove a user from "Settings - Ignore - Ignored Users" (chat and whisper, only takes effect locally in Chatty),
/unignoreWhisperto do the same, except it only affects one type of message
/popoutchannel- Opens current the channel in a popout
/echo <text>- Outputs the given text as a info message
/copy- Copies the given text to the clipboard
/openSubscribers- Opens the according dialog
/userinfo <username>- To open the User Info Dialog on a specific user of the current channel (if available)
/insert <text>- Inserts the given text into the input box at the current caret position (can be useful for Custom Commands put in a menu)
/insertword <text>- Same as
/insert, but adds spaces so it's separated from text before and after (if present)
/openUrl <url>- Opens the given url (see Open URL Command settings)
/openUrlPrompt <url>- Opens the given url after showing a prompt for confirmation
/openFile <path>- Opens the given path in the default application
/openFilePrompt <path>- Opens the given path in the default application (with prompt asking for confirmation)
/setSize <width> <height>- Sets the main window size
/triggerNotification [-hmt] <text>- Triggers a command notification event that was added in the Notification Settings (if none is added, this won't do anything),
-hto hide notification popup,
-mto don't play sound,
-tto specify the title of the notification popup (e.g.
/triggerNotification -mt "This is the title" This is the text)
/uptime- Shows how long Chatty has been running
/appinfo- Shows Chatty version, uptime, current memory usage, system info and connection status
/openDir- Show/open the settings directory
/openWdir- Show/open the current working directory
/openBackupDir- Show/open the backup directory
/openDebugDir- Show/open the debug log directory
/openLogDir- Show/open the chat log directory
/openJavaDir- Show/open the directory of the JRE used by Chatty
/openFallbackFontDir- Show/open the directory where Java looks for fallback fonts
/openTempDir- Show/open the system's temp directory
/exportText [-sna] <fileName> <text>- Write the text to a file in the "exported" directory in the settings directory (UTF-8),
-sfor no info message when writing successfully,
-nfor replacing "\n" in the text with a newline,
-afor appending to the file (Example:
/exportText -n abc.txt one\ntwo- Writes "one" and "two" as separate lines)
/refresh <emoticons/badges/ffz/ffzglobal/bttvemotes>- Refresh the given data from it's respective API:
emoticons: Twitch Emotes
badges: Twitch Badges (current channel)
ffz: FFZ Emotes (current channel)
ffzglobal: Global FFZ Emotes
bttvemotes: BTTV Emotes (global and current channel)
/releaseinfo- Opens the help with the release information
/ffz- Shows the FFZ channel emote codes for the current channel
/clearUserMessages [-an]- Clears the message history in the User Dialog for all users in the current channel,
-afor all channels,
-nto only clear the number of messages (e.g. so the
config:firstmsgHighlight prefix matches again)
/testNotification [channel]- Display a test notification (optionally with channel, which means right-clicking on the notification will join that channel)
/debug simulate <type>- Simulates a chat message for testing. Some possible types:
/debugallows for a number of debug commands to be run, but those may produce errors and strange behaviour, so you usually shouldn't mess around with it.
/server <host>[:port]- Connect to a custom server
/raw <command>- Send a raw command to the server
/changetoken <token>- Checks if the given token is valid and sets it as new token if it is
/proc- Execute a system process
/chain command allows you to run several commands at the
same time. Each part separated by a
| is basicially
entered into the inputbox again.
/chain [command1] | [command2] | [command3]
|character in a command would be interpreted as a command separator. Escape
|with itself to use the character without special meaning (
||). If used in a Custom Command, the function
$cs()(as in chain safe) can be used around replacements for escaping (e.g.
/chain /echo a | /echo b
/chain /echo a | /echo ||b||
/chain with Custom Command
replacements, consider the following:
/chain /echo $cs($(msg)) | /echo abc
/chaincommand is executed, so anything in
$(msg)is put in first. If
/chain /echo Hello World! | /echo abc
/chain /echo $(msg) | /echo abc
Hello | World!then the
|in it would be interpreted as a command separator and thus
World!would be separately entered into the inputbox (so it would output two
/echoinfo messages and send
/chain /echo Hello | World! | /echo abc
$cs()function (as in chain safe) when used in a
/chaincommand to escape
|characters automatically if the Custom Command begins with
/chain(so the above example should normally not cause issues). However it is good practice to always use the
$cs()function anyway (it won't be escaped twice) in case something changes in the future so that the Custom Command doesn't begin with
/chaincommand directly into the inputbox):
\/chain /echo Hello | World! | /echo abc
Hello | World!and
/chain /echo Hello || World! | /echo abc
/chain /echo abc $(chain-test)
$(chain-test)replacement. This should (if e.g. added in the body of a Custom Command) output the following info message:
abc | /echo Test || Message
Test | Message
/foreach command allows you to run the same command for
each entry of a space separated list. The command section is run as a
Custom Command, with the
$1 replacement containing a single
/foreach [list] > [command]
>character and the command to execute (whereas the command is run as it's own Custom Command with the
>character is interpreted as the command. If you want to use a
>in the list section you have to escape it with itself for it to be treated literally (
>>). Both the list and command section will consume a single
>only if they are repeated (
[list]section, make sure the text is safe to use:
$fs()function (as in foreach safe) to escape
>characters automatically if the Custom Command begins with
/foreach. However it is good practice to always use the
$fs()function anyway (it won't be escaped twice) in case something changes in the future so that the Custom Command doesn't begin with
/foreach a b c > /echo $1
cwhen entered into the chat inputbox.
//foreach a b c > /echo \$1
cwhen entered into the chat inputbox. Note that the double slash at the start runs this as a Custom Command, so the
$1needs to be escaped, so it is only replaced when the
/echois run for each list entry.
/foreach a <b>> c > /echo $1
cwhen entered into the chat inputbox. Note the escaped
>in the list entry.
Open Streams=/foreach $fs($1-) > /openUrl https://twitch.tv/\$1(added as a Streams Context menu entry)
$1-with the list of selected streams and then open the URL for each one of them. Note that the
/openUrlcommand is escaped.
Detailed Explanation Example:
/foreachtest /foreach a b c > /echo \$1(added to the Custom Commands list)
/foreachtestis entered into the chat inputbox.
\$1with the escape character in front, which preserves it for replacement when the
This is what happens when you enter
/foreach a b c > /echo \$1. Since the
$1is escaped it is treated as plain text and not replaced (the
/foreach a b c > /echo $1is run and the
/foreachcommand will use everything after the
>as the Custom Command to run (and trim whitespace).
/echo $1is run with
aas parameter, which results in
/echo abeing run. The same is repeated for
$1 is not escaped:
/foreach a b c > /echo $1. The
$1is replaced with an empty string (no argument given with the
/foreach a b c > /echois run and the
/foreachcommand will use everything after the
>as the Custom Command to run (and trim whitespace).
/echois run with
aas parameter (although there is no replacement to make use of it), which results in
/echobeing run, resulting in an error message. The same is repeated for
$1 is not escaped, but you provide a command
/foreachtest 123, then it will
123 in the first
/echo 123 will be run three times.
/runin command runs a command in the context of a
specific open channel, as if you had entered it into the channel's
inputbox. Without this, commands usually run in the context of the
currently active channel.
/runin [channel] [command]
#channelname) or a whisper channel (
/runin #chan2 /echo abc
//runin #chan2 //echo Channel context: \\$(chan) -> \$(chan)
//), so it is interpreted as an anonymous Custom Command:
\\escaped the backslash itself, not the
$, so the replacement is performed)
\actually escapes the
$, so the replacement is not performed here)
/runin #chan2 //echo Channel context: \#chan1 -> $(chan)is run, which runs
//echo Channel context: \#chan1 -> $(chan)in "#chan2".
//) and is interpreted as an anonymous Custom Command:
#chan1(the backslash removes any special meaning from the following characters, which in this case is not necessary, but it you had entered this in a whisper channel
$would have had to be escaped)
#chan2(this Custom Command is run in the new channel context, so it turns into the target channel, which does not need to be escaped further, even if it were
$user2, since it doesn't get interpreted as a Custom Command after this)
/echo Channel context: #chan1 -> #chan2is then run and outputs an info message.
/timer command allows you to run a delayed command after
a duration or at a certain time. The timed command is run as if it was
entered into the inputbox of the same channel that the
command was entered in (the command is not run at all if the channel is
not a regular channel or not open anymore, unless the
option is used).
Certain restrictions apply:
/timercommand as well as some other commands.
/timeris called do not carry over into the context when the timed command is executed. Note that in a lot of cases the parameters would already have been replaced anyway. Consider a button "Test" added to the User Dialog:
Test=/timer 1 /echo $(nick)replacements are performed on
/timer 1 /echo $(nick), resulting in
/timer 1 /echo someusername, resulting in
/echo someusernameone second later.
Test=/timer 1 //echo \$(nick)replacements are performed on
/timer 1 //echo \$(nick)(note that
\$(nick)is escaped, so it is not replaced yet), resulting in
/timer 1 //echo $(nick), resulting in
//echo $(nick)one second later, which (because of the double-slash) is parsed as a Custom Command and replacements are performed, which won't find the "nick" parameter because it didn't carry over. Normally there is no reason to do it like this though.
/timer [-options] [:id] <duration|time|'list'|'stop'> <timed command>
-rs) can be specified:
-r(Keeps the timer through a restart of Chatty if it hasn't run yet. The timer is saved in the settings and restored with the same target time, channel and timed command. If the target time has already been passed when Chatty is started again it will immediately run the timed command.)
-o(If a timer of the same id already exists, overwrite it, without this option the new timer would not be started in such a case.)
-s(Silent, starting the timer successfully doesn't output a message.)
-a(Always run the command, even if the channel the timer was started in is not open anymore or not valid, which can make sense if the command being run is not channel-specific, such as modifying the Addressbook. If the channel is not open anymore the currently active channel is used, in which case sending messages it not allowed.)
/timer -rs 10m /echo hello(Outputs "hello" in 10 minutes, keeps it when Chatty is restarted within that time and doesn't output a timer started message.)
*an automatically generated number will be appended to make the id unique if used more than once. If no id is specified an automatically generated number without prefix will be used.
:abc(the id is "abc")
:abc*(the id might be "abc1", "abc2", "abc3", ...)
/timer :abc 10m /echo hello(outputs "hello" in 10 minutes, with the timer id "abc")
5h10m(5 hours 10 minutes)
5h10(5 hours 10 minutes)
5h10m30(5 hours 10 minutes 30 seconds)
/timer 5h /echo hello(outputs "hello" in 5 hours)
[ ]. With no date specified the next occurence of the time is used, so e.g. if it's already in the evening a time of 5 in the morning would be on the next day:
5:30(5:30 in the morning)
17:30(5:30 in the afternoon)
5:30:50(5:30 and 50 seconds in the morning)
[05:20:00](the time can also be enclosed in
[2022-01-10 5:30](when including the date the
[ ]is required and the date has to always be the full date in the format YYYY-MM-DD)
/timer 16:30 /echo hello(outputs the info message "hello" at 4:30 PM)
list(Lists all timers, soonest to run first.)
-q list(Same as above, but the list is in timer start order.)
:a* list(Outputs information about timers with ids that begin with "a".)
list a*(Same as above, but id in place of the timed command.)
/timer list a*(Shows all active timers with ids that begin with "a".)
:abc1 stop(Stops a timer with the id "abc1".)
stop abc1(Same as above, but id in place of the timed command.)
:abc* stop(Stops all timers with ids that begin with "abc".)
:* stop(Stops all active timers.)
/timer stop *(Stops all active timers.)
The login data consists of a username (or account name) and most importantly an access token, which is sort of a revokable password that can also have different types of access (scopes) associated with it. You can see the full list of associated scopes under "Main - Account" (hover over each entry for more information if available).
Some more information on some scopes:
If getting login data fails, read this guide. If your login was determined invalid, read down below.
To change what Chatty is allowed to do (e.g. if you haven't selected
editor access before, but you want it now), you need to request a new
access token. Just go to
<Main - Account>,
delete the login and request it again with the access scopes that you
The access token is saved in the
login file in the settings
directory and can thus be accessed
by anyone having access to your computer.
It allows anyone who obtains it to chat in your name and do the other things
that you have allowed Chatty to do. If you think the token may have been
compromised, please immediately go to your Twitch Settings subsection
and revoke the accesss there. This will make all tokens previously
requested for Chatty associated with that account invalid. You can then
request a new one for which Twitch will ask you to authorize Chatty again.
If your login is determined invalid (either by checking it manually or when Chatty performed an automatic check), this can mean one of two things:
<Main - Account>to open the
Login configurationand click on
[Verify login]a few times (with a few minutes in between attempts).
[Verify login]a bit later to be able to use the features that require Twitch authorization again.
[Verify login]keeps returning invalid, even after a while (especially without other users having the same issue), your login may actually be invalid.
<Main - Account>to open the login configuration (if you don't already have it open), click
[Remove login]and create a new login.
What happens when your login is no longer valid:
There are various ways of joining channels:
In places where you can enter a channel name you can specify several
channels by separating them with a comma. Channels can be entered with
or without leading
#. A lot of Twitch links should also
Various special elements can be added that are turned into channels:
[vip]to join all entries associated with the "vip" category. Can restrict to just channel entries
[vip #](would only get Addressbook entries such as "#joshimuz") or non-channel entries
[vip !#](entries such as "joshimuz"). Note that both channel entries and non-channel entries are otherwise handled the same, both would join "#joshimuz" in this example.
[*]can be used for all favorited channels (favorited under "Channels - Favorites / History").
[vip # live]or
[* live](only works for live channels Chatty already knows the status for, such as followed channels).
/join #joshimuz, esl_csgo, [mod], https://twitch.tv/esamarathon, [* live]
#esl_csgo, any entries associated with the
#esamarathonand any favorited channels that are live and followed)
There are a few special symbols that are used for users in chat. These are displayed in the userlist and - if usericons are disabled - also in chat:
|^||Bot (as recognized by local setting, FFZ API and BTTV API)|
When you copy&paste a message from chat that contains Badges, you may also encounter the following symbols:
|?||Unknown Badge (for example special Twitch Badges that may only be available for some time or in some channels)|
FrankerFaceZ provides a custom mod icon for some channels. You can disable this in the settings if you want to keep the default one for all channels.
The userlist on the side of the channel shows all users currently considered to be in the channel.
In order to receive JOIN/PART messages, the setting
Settings - Advanced - Connection has to be enabled.
Note: The userlist is not very reliable and should only be taken as a rough estimate of who is currently in the channel. This is because:
Also note that the userlist doesn't necessarily have to do with who watches your stream. A user can be logged into chat without watching the stream and vice versa. Overall, just don't take the userlist too seriously.
When typing in the inputbox, you can use the following keys by default (this can be changed in the Completion settings):
Once a completion is initiated, TAB and Shift-TAB cycle forwards and backward through the results, or use the mouse.
Some prefixes always force a certain completion type (whether you use TAB or Shift-TAB):
@completes usernames (e.g.
/completes command names
:completes Emoji codes, and by default also Twitch Emotes (can be changed in the settings)
.performs Custom completion
/bancomplete usernames for their first parameter
/setcomplete setting names for their first parameter
Additionally, some prefixes will automatically initiate completion (this too can be changed in the settings).
The found matches are all ordered alphabetically, except for nickcompletion for which you can choose different types of sorting. By default nicknames use predictive sorting, which means users who recently wrote a message or highlighted you have a higher priority, increasing the chance that the users you want to address appear as the first few matches.
zin the editbox
ze_ttwith two other results
zebloverand Shift-TAB again to cycle to
datin the editbox
DatHasswith two other results
DatSaunceand TAB again to cycle to
Chatty provdes an input history for the chat input box that allows you to call up lines you entered previously, to make it easier to e.g. repeat commands with similiar parameters, repeat messages you send to chat or just look up what you wrote before. You can even save messages to the history that you haven't send yet to be able to send them later.
Note: On a multiline inputbox you have to hold Ctrl to navigate through the Input History (changeable in Chat Settings).
This does not apply anymore since Twitch changed their system to use IRCv3 capabilities. Joining several channels does not have any drawbacks.
If enabled, the history automatically saves channels you join and when you last joined them. By default channels expire from the history after 30 days of not joining them (can be changed).
You can also add channels from the history or any you enter manually to the favorites, which will always be kept until you remove them yourself.
The new Rooms can be used in Chatty:
Channelsmenu and to reload available rooms manually
Currently not available in Chatty:
The highlight system allows you to add words or phrases that make chat
messages appear in another color and appear in a separate window, which you can
View - Highlights (you can clear the highlights window
in it's context menu).
The ignore system works very similiar to the highlight system, just that
it hides messages instead of highlighting them. They however also get
added to a separated window, which you can open under
View - Ignored
(you can clear the messagess in the window in it's context menu).
Right-click on a user in chat to open the User Context Menu, where you
can ignore or unignore that user from the
submenu. You can view and edit the list of ignored users in the settings.
The color of a user is displayed in the User Info Dialog. Color Names are used where possible, HTML Color Codes are displayed in the Tooltip. Colors with asterisk (*) are default colors (the user hasn't set one or hasn't said anything during this session yet). A color in parentheses means it's the original color, while the other color is the corrected one that is actually displayed.
Chatty attempts to make colors more readable automatically by changing them to increase contrast. This doesn't work very well though, although it should work for extreme cases like white on white or black on black.
You can also specify custom colors for certain users or types of users in the settings. Custom colors are indicated by two asterisks (**) in the User Info Dialog.
Chatty supports the following types of emoticons:
/ffzwsand it is stuck at
Connecting..for a longer period of time, you may have to restart Chatty for it to work again.
:thinking:) into the inputbox, which will be turned into the character when you press Enter to send it.
Tip: You can use TAB Completion for Emoticon codes (Shift-TAB by default) and Emoji shortcodes.
You can enable/disable Emoticons in general (displaying the images instead
of the text) in the settings under
Emoticons. You can also
ignore specific emotes in the same place in the settings.
In chat you can right-click on an emoticon to show some info about it.
Click on the emote code (e.g.
FrankerZ) in the context menu
to insert the emote in the inputbox. If it is a subscriber emote, you
also have some more options.
Extra - Emoticons or press Ctrl-E to open
the Emote Dialog, which has various pages:
Favoritespage lists emotes you have added to the favorites via the Emote Context Menu (right-click on an emote in the dialog or chat and choose
Favorite, emotes that already are favorited can be removed from favorites the same way).
My Emotespage lists the emotes you paid for (Subemotes/Turbo).
Channelpage lists the emotes that are specific to the current channel (FFZ and BTTV, if there are any). It also includes the subscriber emotes of the current channel (if it has any), whether you can use them or not (but it displays a message if you are not subscribed).
Twitchpage shows all free global Twitch emotes
Otherpage shows all global FZZ/BTTV emotes
Click on an emote to insert it into the current channel inputbox. Double-click on an emote to also close the Emote Dialog in the process, or press ESC or Ctrl-E to close it. Right-click on an emote to show a context menu with some more information/options.
Right-click on an emote and choose
Show Details to open the
Detail View in the Emote Dialog, which shows the emote in different sizes
and some information about it. Clicking on an emote in chat also opens the
Note that you need to have joined at least one channel for your subemotes/turbo emotes to show up, because only then does Twitch Chat send that information to the client.
You can add your own local emotes by creating a file called
in the settings directory (enter
/dir in Chatty to find the
/openDir to directly open it). The
file can have one emote on each line, for example:
D: aww.png size:18x18 re:Gr[e|a]yface Kappa.png # Switching Kappa and MiniK Kappa http://static-cdn.jtvnw.net/emoticons/v1/3287/1.0 MiniK http://static-cdn.jtvnw.net/emoticons/v1/25/1.0 set:793 id:3287
This can be used to replace existing emotes, since custom emotes are checked first and thus take precedence. This is not intended to replace FFZ or BTTV emotes, just to help configure emotes to your personal preference. For example you could also add an image for you own name to have it highlighted in chat in a different way.
emotes.txt should be saved in the
UTF-8 encoding (or ASCII I guess).
The syntax per line is (you can use as many spaces or TABs as seperators as you want):
[settings] <code> [settings] <image> [settings]
Settings can be in any of the shown places, but are always optional. Available settings are:
set:<setid>to specify a Twitch emote set. This will only affect messages you write yourself.
id:<emoteid>to specify a Twitch emote id to replace. This will only affect incoming messages.
chan:<channel>to restrict the emote to the given channel.
size:<width>x<height>to specify the size of the emote (you can omit this if you want to use the image size).
re:to specify a regular expression. Otherwise it is interpreted as plain text (the same as regular Twitch emotes, case-sensitive and usually separated by space from other characters).
emotes.txtin), so just put them in the same directory. You should also be able to use URLs to load the image from the internet.
Lines starting with
# are ignored and can be used for comments.
emotes.txt file is loaded when you start Chatty, so if you edit the file
while Chatty is running, you have to use the
command for it to take effect.
Emote images may be cached, so if you change the image, you MAY have to
clear the cache (
This has been moved to it's own page
With this feature, you can select a user in chat with keyboard shortcuts (if the window is active). So you can e.g. timeout a user with your keyboard alone.
Press Ctrl-Space (can be changed in the settings) to enter this mode. If there are any user messages in chat, then the newest message will get another background color which shows that it is selected. In that mode, the focus is on the textpane, which enables more shortcuts:
When you move up and down, it actually switches to the next user instead of to the next line. So if the same user send 10 messages in a row, it will jump to the first message of the next user above it.
In addition to the currently selected message, it will also highlight all other messages by the same user. You can also hold AltGr and click on a username in chat to highlight all that users messages (and enter User Selection Mode).
You can also click and hold in an empty area of the textpane, which puts and holds the focus there, so you can just use the shortcuts in the list above to enter the User Selection Mode and switch between messages. However if you let go of the mouse key, it will immediately leave the mode again.
You can also configure global hotkeys with some User Selection actions. However, if the focus is not on the chat, then the usual shortcuts won't work, so you'll have to define additional global hotkeys to e.g. timeout the currently selected user. See the hotkey settings for what actions are available.
Stream Chat is a separate dialog, opened via the
command or the
Extra menu, which is different from normal chats:
For chat messages to appear in the Stream Chat, you have to both enable the channel and join the channel in Chatty normally.
You can enable channels in the Stream Chat context menu (which will offer to enable currently joined channels) or use the following setting commands (channel all-lowercase):
/set streamChatChannels #<channel>- To set the channel to only this one
/add streamChatChannels #<channel>- To add a channel
/remove streamChatChannels #<channel>- To remove a channel
/set streamChatLogos <size>
/set streamChatMessageTimeout <seconds>
/set streamChatBottom <0/1>
/set streamChatResizable <0/1>
In addition, make sure you have
Settings - Window - Restore dialogs
set to at least
Restore dialogs from last session in order
to keep the position/size of the Stream Chat dialog between sessions.
/openStreamChat- Opens the Stream Chat dialog
/setStreamChatSize <width>x<height>- Set the exact size of the Stream Chat dialog in pixels
/getStreamChatSize- Shows the size of the Stream Chat dialog in pixels
/clearStreamChat- Removes all messages
/streamChatTest [message]- Adds a test message to the Stream Chat dialog, if you don't specify a message a default one is used
You can give people in chat custom names that will appear in chat and in the userlist instead of the regular Twitch username and in the User Info Dialog in addition to the regular Twitch username. In other places (like the User Context Menu) the regular Twitch username is used.
TAB Completion also allows you to complete Custom Names and by default also includes the original name in the results.
The following commands are used to set custom names:
/setname <username> <custom name>- to set a custom name
/resetname <username>- to remove a custom name
In addition to these commands, you can also view and change Custom Names
via the Settings GUI under
Names. You can also right-click
on a user in chat to open the User Context Menu and choose
Miscellaneous - Set name to open the Settings with the name
If enabled in the settings under
Main - Settings - Chat you
can stop the chat from scrolling down while you move the mouse over chat.
This can prevent misclicks when the chat is moving. The chat will resume
scrolling down as soon as you stop moving the mouse or move it out of
the chat area. When the chat is already paused, you can also hold
Ctrl to keep the chat paused even without moving the mouse.
Optionally, you can set it to require Ctrl being pressed in conjunction with moving the mouse to initiate pausing. You can let go of Ctrl as soon as pausing is started and it will stay paused as long as you move the mouse inside the chat area.
A little popup in the top-right will indicate that the chat is paused.
Please note: This only works when the chat area is already filled, so the scrollbar is actually used. In addition, there may be instances where something you want to click will move anyway, for example if a message is deleted due to a timeout/ban, causing other messages to move.
Another way of preventing scrolling down is scrolling up. Once you are manually scrolled up, chat will stop scrolling down automatically. However messages may still be removed from the buffer causing the chat to move despite it not actively scrolling down. It will stop removing messages to get moving to a minimum as long as you keep holding Ctrl.
A certain time after not moving the scroll position, it will scroll down automatically (unless Ctrl is still being pressed).
Holding Ctrl and clicking on a user in chat can execute a ban
or timeout on that user. Enable this feature and define what it does in
the settings (
Main - Settings - Chat).
It is recommended to enable the pause chat feature if you are using this, or else misclicks could be very common.
AutoMod is a Twitch feature that filters messages before they are send to the chat clients. As mod in the channel you can review and either approve or deny those filtered messages in different ways:
Extra - AutoMod
Settings - Moderation - Show messages rejected by AutoModto show rejected messages directly in chat and..
In the dialog you will see filtered messages of the current channel (if you are mod). Open the context menu on a message (usually right-click) to approve or deny that message. Double-click on a message to open the User Info Dialog for that user to be able to see his previous messages or ban/timeout the user.
Shortcuts available when you have a message selected:
Messages can have different prefixes depending on their status:
Approved- You have approved the message
Denied- You have denied the message
Handled- The message has been handled already, probably by another mod (the API does not return whether it's been approved or denied)
Pending- Your action is being sent to the Twitch API
N/A- The message is no longer available to be approved or denied (this seems to be the case after a few minutes)
Error- An error occured sending your action to the Twitch API
Messages that have already been handled or that are older than 5 minutes (and can thus probably not be approved/denied anymore) are shown greyed out.
The Channel Info Dialog shows the current stream status of the active stream. The data is requested from the Twitch API in a semi-regular interval, so it can take some time to update.
If the stream is online, the
Live: 1h 30m
shows how long ago the stream was started. That time comes directly from the
Twitch API, so it is able to show the correct online time, even if you started
Chatty after the stream started.
If there is a time in parentheses
1h 30m (2h)), then that time denotes how long the stream
was online, but including small offline periods (PICNICs) of at most 10 minutes,
which means that this time is more of a guess of what might be expected as
stream online time and also depends on when Chatty got the data (if you join
the channel after a PICNIC, then it won't include the time before, because it
never received the data for it).
The History is a graph that shows the development of the viewers of the currently active channel and also indicates stream status changes (online/offline/title/game) by different colors.
Hover over points to display the stream status and viewercount at that time. Right-click for a context-menu.
There are two ways to change which time range is being displayed:
The History is recorded while you have the channel open in Chatty as well as for all followed channels, if you have that feature enabled.
The shown data usually fits to the available vertical space
(so if the min/max viewercounts were 341/403 then only this
range is shown). If you choose
Toggle Vertical in
the context-menu, you can switch between the shown range
(min/max) and the full range (0-max).
Chatty can show Notifications when the status of a stream changes.
There is also a Live Streams window (
Channels - Live Channels)
that shows the currently live streams. Both these features always include channels you have
joined and - if enabled - channels you have followed. Streams that are
no longer online, or whose channels you have left and you don't follow,
are added to a list that you can open in the Live Streams window context
Chatty Notifications are little info boxes that can be shown for stream status changes and highlighted messages. When you left-click on a notification it is closed immediately, right-clicking closes it as well and in addition also joins the associated channel.
Chatty can request a list of streams you follow on a regular basis, so you have both an overview of currently live streams as well as be informed about status changes (offline -> online, title change, game change). This is always available for streams whose channels you have joined in chat, but with this feature enabled, this works for all streams you follow even without joining their channel.
This feature requires
Show followed streams access, so Chatty can
request your followed streams. Read the section about login
to learn more about login data and access.
You can enable/disable this feature in the Settings under
This has been moved to it's own page
You can open a list of the Followers of a channel by joining that channel
and then opening the Followers Dialog via
Extra - Followers.
It always opens on the currently active channel, or if you are in no channel
at all, your own channel.
You can open a list of your Subscribers by opening the Subscribers Dialog
Extra - Subscribers. It always opens on your own channel,
because you can only display the Subscribers of your own channel. If you don't
have any Subscribers, it will simply show an empty list (and an error). You
also need to have selected the necessary access when
requesting login data.
You can save the current list to a file by right-clicking on the dialog (not the list) and selecting the format.
Both the Followers and Subscribers Dialog otherwise work in pretty much the same way. Data is only requested as long as you have the dialog open. It is requested in a semi-regular interval and then displays that data in the list (and some stats).
If followers/following is mentioned below, then the same applies for subscribers/subscribing in the appropriate dialog.
At the top it shows some stats:
There are different background colors for some entries:
The time has different colors for older entries:
At the bottom, it shows approximately how long ago data was last received, or a short error message if an error occured.
Everything that determines whether a follower is new or a refollow is saved per session. So if you restart Chatty, it assumes that all followers except from the first request are new. So if you start Chatty, open the Followers Dialog on your channel, it will load the followers for the first time and show none of them as new. Now if it updates a minute later, and there are users it hasn't seen as having followed before, then it assumes these users as new followers.
Now a user of course might have been a follower for a year, then unfollow and follow again. Chances are that Chatty won't notice that and assume a new follower. What it however does is that it only shows each user as new follower once per session. So if someone follows and Chatty shows that user as a new follower, then that user unfollows and follows again, Chatty will notice that the first and the second follow time are different, and will show this user as a refollow (the name slightly grey).
So this basicially just prevents the same user from e.g. making a sound go off (if you have that enabled) several times just by refollowing several times. At most that will happen once per session. Other than that the data is mostly shown just as it comes in from Twitch. It will still show refollows on the top of the list.
Chatty can help you with creating Highlights of your stream by recording the stream time (how long the stream has been online) using a command or hotkey. When you add a Stream Highlight in Chatty, it is written to a file which you can then view later.
The following commands are available:
/addStreamHighlight [comment]- Adds a highlight at the current time, with a comment if you want to.
/openStreamHighlights- Opens the file where the stream highlights are stored in your default text editor.
You can also add a hotkey to add stream highlights, so you can also do it yourself while streaming out of a game (given that global hotkeys work in the game).
The highlights are written to the file
exported subfolder of the settings directory (which
you can open with the
/openDir and show with the
You can also let users in chat (e.g. Mods/VIPs) add Stream Highlights
!highlight [comment]), which you can configure under
Main - Settings - Stream Highlights.
Twitch offers a way to add
which show up when creating Highlights on the website. You can use the
/marker command or add a Stream Marker automatically when
adding a Stream Highlight (changeable in the Stream Highlights settings).
For creating Stream Markers you need the
scope, so if you don't have that yet, you have to
request a new login token.
Both the ignore joins/parts and Twitch Client Version 3 option have been removed. You can now disable the Correct Userlist setting to not get any joins/parts if you think it could improve performance.
/proc command you can start processes directly out
of Chatty. An example of where this is already integrated into Chatty is
starting Streamlink, however this is a more basic implementation.
You should only use this if you know what you are doing, running system processes can be dangerous if done wrong. Take special care when unsafe/unpredictable text is being used, for example from chat messages, which may need to be properly quoted/escaped depending on context.
/proc exec <command and parameters>- Try to start a process on your computer. The command and parameters are split by spaces, unless enclosed by quotes.
\"(note that if there is no closing quote, the last quote, even if escaped, is used as closing quote). Adding another backslash, e.g.
\\"will still escape the quote. The debug log shows both the original command text and how it was split up.
/proc execEcho <command and parameters>- Same as above, but prints the output of the process to the current tab.
/proc list- List of processes currently running out of Chatty.
/proc kill <id>- Forcefully end the process with the given id (get the id from the list of processes).
/proc exec notepad H:\hl.txt will start Notepad
and open the given file.
Note: Commands and output of the process is logged in the Debug Log which
is written to file and output to
Extra - Debug window.
There are a few options you can launch Chatty with, that will override settings loaded from the settings file or change how Chatty is started. You need to run Chatty from the commandline or Create a shortcut to use these. If you're using the Standalone version you can also specify launch options in the Chatty.cfg.
-userto set the correct username.
-cd, except that you directly specify the settings directory to use. The specified directory has to already exist (even if you just created an empty directory for it).
-set:<settingName> <setting value>
/setcommand (see Setting Commands).
-singleparameter with the same port (or no port to use the default one) for all instances that you want to have run in the same single instance mode.
-ccparameters are forwarded to an already running instance.
-cc <name> [parameters]
-single, the command will be executed on the already running instance.
If you are reporting an issue, please read the page on Reporting Issues.
If you are referring to a specific version of Chatty, please provide the
actual version number, which you can find on the top of the main help page in Chatty
(this one if you are reading this in Chatty, otherwise go to Chatty and open
Help - About/Help or press F1). You can also use the