This list of commands is built into Chatty and can't be changed. You can however create your own Custom Commands & Customized Context Menus.
/me
and /ME
are the same command<parameter>
represents a required parameter/me <message>
you need to enter a
message: /me likes cheese!
[parameter]
represents an optional parameter/ban <username> [reason]
you don't need
to give a reason, but you can: /ban abc spam
Tip: You can also use TAB Completion for many commands. Enter
the beginning of a command name (e.g. /sub
) and then press
TAB to find matching commands (e.g. /subscribers
, which
allows moderators to turn on sub-only mode).
/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 //say
)/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))
)/msgreplythread <message>
- Same as /msgreply
, but will continue the thread (if present)/join <channel>
- Joins the given channels, see Joining Channels for more information/part
or /close
- Leaves the current channel/rejoin
- Rejoins the channel (without clearing users or chat)/reconnect
- Disconnects and reconnects/clearchat
- Clears the current chat window of all text (only locally)/connection
- Show info about the current connection/to <nick> [time] [reason]
- Timeout the user with the given nickname for "time" seconds (time is optional)/timeout
, /ban
, /unban
,
/slow
, /slowoff
,
/subscribers
, /subscribersoff
,
/shieldMode
, /shieldModeOff
,
/clear
, /mods
,
/raid
, /unraid
,
/color
just like in normal Twitch Chat/userinfo <username>
- To open the User Info Dialog
on a specific user of the current channel (if available)/marker
)/setcolor <name>
- Opens the usercolor settings
for the given name/favorite [channel]
, /unfavorite [channel]
- Edit the Channel Favorites list (defaults to current channel if
none is given)/ignore <user>
, /unignore <user>
- Add/remove a user from "Settings - Ignore - Ignored Users" (chat
and whisper, only takes effect locally in Chatty),
/ignoreChat
, /unignoreChat
,
/ignoreWhisper
, /unignoreWhisper
to do the
same, except it only affects one type of message/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)/setSize <width> <height>
- Sets the main window size/echo <text>
- Outputs the given text as an info message/triggerNotification [-hmt] <text>
- Triggers a
command notification event that was added in the Notification Settings
(if none is added, this won't do anything), -h
to hide
notification popup, -m
to don't play sound, -t
to specify the title of the notification popup (e.g.
/triggerNotification -mt "This is the title" This is the text
)/popoutchannel
- Opens current the channel in a popout/settings
, /livestreams
, /channeladmin
,
/channelinfo
, /search
, /openFollowers
,
/openSubscribers
- Opens the according dialog/userinfo <username>
- To open the User Info Dialog
on a specific user of the current channel (if available)/releaseinfo
- Opens the help with the release information/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)/copy
- Copies the given text to the clipboard/exportText [-sna] <fileName> <text>
- Write the text to a file in the "exported" directory in the settings directory (UTF-8)
-s
- no info message when writing successfully-n
- replace "\n" in the text with a newline-a
- append to the file (instead of overwriting it)-A
- append to the file and append a newline character-L
- append to the file on a new line (prepend a newline character)/exportText -n abc.txt one\ntwo
- Writes "one" and "two" as separate lines)/proc
- Execute a system process (be careful with this)/uptime
- Shows how long Chatty has been running/appinfo
- Shows Chatty version, uptime, current memory usage, system info and connection status/dir
/ /openDir
- Show/open the settings directory/wdir
/ /openWdir
- Show/open the current working directory/showBackupDir
/ /openBackupDir
- Show/open the backup directory/showDebugDir
/ /openDebugDir
- Show/open the debug log directory/showLogDir
/ /openLogDir
- Show/open the chat log directory/showJavaDir
/ /openJavaDir
- Show/open the directory of the JRE used by Chatty/showFallbackFontDir
/ /openFallbackFontDir
- Show/open the directory where Java looks for fallback fonts/showTempDir
/ /openTempDir
- Show/open the system's temp directory/ffz
- Shows the FFZ channel emote codes for the current channel/refresh <emoticons/badges/ffz/ffzglobal/bttvemotes>
- Refresh the given data from it's respective API:
emoticons
: Twitch Emotesbadges
: Twitch Badges (current channel)ffz
: FFZ Emotes (current channel)ffzglobal
: Global FFZ Emotesbttvemotes
: BTTV Emotes (global and current channel)/clearUserMessages [-an]
- Clears the message history in the User Dialog for all users in the
current channel, -a
for all channels, -n
to only clear the number of messages (e.g. so the config:firstmsg
Highlight 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. See the Chatty source code for possible values.
/debug
allows 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 isThe /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. $cs($1-)
).Examples:
/chain /echo a | /echo b
a
and b
/chain /echo a | /echo ||b||
a
and |b|
When using /chain
with Custom Command
replacements, consider the following:
/chain /echo $cs($(msg)) | /echo abc
/chain
command is executed, so anything in $(msg)
is put in
first. If $(msg)
contained Hello World!
:/chain /echo Hello World! | /echo abc
/chain /echo $(msg) | /echo abc
$(msg)
would contain 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 /echo
info messages and send World!
to
chat):/chain /echo Hello | World! | /echo abc
/chain
command:
$cs()
function (as in chain safe)
when used in a /chain
command to escape
|
characters: $cs($(msg))
|
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
/chain
anymore./chain
command
directly into the inputbox):\/chain /echo Hello | World! | /echo abc
Hello | World!
and abc
):/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
abc
Test | Message
The /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
list entry.
/foreach [list] > [command]
>
character and the command to execute (whereas the command is run as
it's own Custom Command with the $1
replacement).>
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 (>>
to >
, but
>
unmodified).[list]
section, make sure the text is safe to use:
$fs()
function (as in foreach safe)
to escape >
characters: $fs($1-)
>
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
anymore.Examples:
/foreach a b c > /echo $1
a
, b
and c
when
entered into the chat inputbox.//foreach a b c > /echo \$1
a
, b
and c
when
entered into the chat inputbox. Note that the double slash at the
start runs this as a Custom Command, so the $1
needs to
be escaped, so it is only replaced when the /echo
is
run for each list entry./foreach a <b>> c > /echo $1
a
, <b>
and c
when 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 $1
in
the /openUrl
command is escaped.Detailed Explanation Example:
/foreachtest /foreach a b c > /echo \$1
(added to the Custom Commands list)a
, b
and c
when
/foreachtest
is entered into the chat inputbox.\$1
with the escape character in front, which
preserves it for replacement when the /echo
is run.
This is what happens when you enter /foreachtest
:
/foreach a b c > /echo \$1
. Since the $1
is escaped it is treated as plain text and not replaced (the
\
is consumed)./foreach a b c > /echo $1
is run
and the /foreach
command will use everything
after the >
as the Custom Command to run (and
trim whitespace)./echo $1
is run with a
as parameter, which results in /echo a
being
run. The same is repeated for b
and c
.If the $1
is not escaped:
/foreach a b c > /echo $1
. The $1
is replaced with an empty string (no argument given with the
/foreachtest
command)./foreach a b c > /echo
is run
and the /foreach
command will use everything
after the >
as the Custom Command to run (and
trim whitespace)./echo
is run with a
as parameter (although there is no replacement to make use
of it), which results in /echo
being run,
resulting in an error message. The same is repeated for
b
and c
.If the $1
is not escaped, but you provide a command
argument, e.g. /foreachtest 123
, then it will
replace the $1
with 123
in the first
step, so /echo 123
will be run three times.
The /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 ($username
).Examples:
/runin #chan2 /echo abc
//runin #chan2 //echo Channel context: \\$(chan) -> \$(chan)
//
), so it is
interpreted as an anonymous Custom Command:
\\$(chan)
turns into \#chan1
(the \\
escaped
the backslash itself, not the $
, so the replacement is performed)\$(chan)
turns into $(chan)
(this \
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
turns into #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 $user1
then the $
would have had to be escaped)$(chan)
turns into #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 -> #chan2
is then run and outputs an info message.
The /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 /timer
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 -a
option is used).
Certain restrictions apply:
/timer
command as well as some other commands./timer
is 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 someusername
one 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")5ms
(milliseconds)5s
(seconds)5m
(minutes)5h
(hours)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.)