diff --git a/help/help-builtin_commands.html b/help/help-builtin_commands.html new file mode 100644 index 0000000..b5a9c43 --- /dev/null +++ b/help/help-builtin_commands.html @@ -0,0 +1,567 @@ + + +
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.)Executing several commands in a row is not a feature of Custom Commands, - although the /chain command can + although the /chain command can be used to achieve something like that.
The /foreach command can be used +
The /foreach command can be used
to run the same command for each entry of a space-separated list, for
example a list of channels from the $1-
replacement.
The /runin command can be used +
The /runin command can be used to run a command in a specific open channel.
$json(<input>,<output>)
<input>
and use in <output>
,
- where $j(<path>,[default])
can be used to access specific values.
+ where $j(<path>,[default],[sub],...)
can be used to access specific values.
The JSON input could e.g. come from the $request()
function.last
for the last entry of an arraysize
to return the number of elementssort
to sort an array (mainly works for strings)filter:<path>[=regex]
to select only
- certain array items based on whether a path exists or if a
+ certain array items/object values based on whether a path exists or if a
regex is provided the value of the pathcollect:<path>[=regex]
iterates over an
- array and for each element resolves the path and combines
+ array/object values and for each element resolves the path and combines
the resulting values into an arraycombine:<path>[=regex]
iterates over an
- array and for each element resolves the path and for each
+ array/object values and for each element resolves the path and for each
resulting value that is an array adds all of the array
values into a single result arrayunique
removes duplicate elements from an arrayjoin[:delimiter]
turns an array into a string
by joining all elements together using the given delimiter
(or ",
" if none is provided)'
(for example [collect:abc='[a-z]+']
+ so that the ]
in the regex doesn't get mistaken
+ as the end of the regex). To use a '
in a quoted
+ section you have to double it ''
.[sub]
values can contain additional $j()
+ replacements, which are applied to the result of the path or previous [sub]
+ parameter. If prefixed with each:
it will be applied
+ to each element on an array/object and the result collected into
+ an array (for objects the $(key)
replacement and
+ for arrays the $(index)
replacement is available).{ "books":[ @@ -719,6 +731,10 @@ {"title":"book3", "author":"author2", "tags":["tag1", "tag3"]}, {"title":"book4", "author":"author2"} ], + "authors":{ + "author1":{"name":"name1", "age":24}, + "author2":{"name":"name2", "age":62} + }, "numBooks": 4, "numAuthors": 2 }@@ -751,6 +767,25 @@
$json($get(var,j),Tags of author2: $j(books[filter:author=author2][combine:tags][unique][join]))
Tags of author2: tag1, tag3
$json($get(var,j),$j(authors[collect:name][sort][join]))
name1, name2
$json($get(var,j),$j(authors,,each:$(key): $j(name) \(age $j(age)\),$j([sort][join])))
author1: name1 (age 24), author2: name2 (age 62)
[sub]
parameters of $j()
are used here:
+ +$j( + // Path to "authors" JSON object + authors, + // Skip the optional "[default]" parameter + , + // Apply to each entry of "authors" and collect result in an array + each:$(key): $j(name) \(age $j(age)\), + // Sort and join array created from previous parameter + $j([sort][join]) +)+
/set var j copyJSONfromabove
diff --git a/help/help-getting-started.html b/help/help-getting-started.html
index 9c9360b..6be839d 100644
--- a/help/help-getting-started.html
+++ b/help/help-getting-started.html
@@ -78,7 +78,7 @@
/ban
, /timeout
, /subscribers
(Hint: Use TAB-Completion).Features used: Ignore System, Addressbook, - Custom Commands
+ Custom CommandsGo to Main - Settings - Ignore
and make sure Enable Ignore
diff --git a/help/help-releases.html b/help/help-releases.html
index 253ab8d..51aa163 100644
--- a/help/help-releases.html
+++ b/help/help-releases.html
@@ -17,6 +17,7 @@
+ 0.24 | 0.23 | 0.22 | 0.21 | @@ -72,7 +73,52 @@ full list of changes.
+### Twitch Features +- Added some support for suspicious users (for moderators) + - Info about monitored/restricted messages it appended to the message + - Restricted messages (that aren't posted to regular chat) are shown in chat + - Changing monitored/restricted status of a user shown in Modlogs + - Some information shown in the User Dialog of involved users + - You can match on restricted messages via `config:restricted`, monitored + users can not be matched on since that information isn't necessarily + available at the time matching happens + - There is no API to get/change the monitored/restricted state of users, only + the info associated with chat messages + +### Emoticons +- Improved support for Follower Emotes (subscribers can use them globally) +- Added support for FFZ animated emotes +- Added setting to toggle using WebP (and WebP is now als used for BTTV and + animated FFZ emotes for better quality, if possible) +- Fallback to PNG/GIF for 7TV if WebP is not enabled or supported + +### Other +- Added command `/msgreplythread` to continue a reply thread +- Added check whether updating stream status in Admin Dialog actually succeeded + (the API does not always return an error when it should) +- Made search dialog resizable +- Increased chat input field length limit for non-messages (e.g. when using + setting commands with a long value) +- Improved `$j()` replacement (for `$json()`) to allow more functions to be + applied to objects, added `[sort]` and sub parameters for more flexibility +- Added Stream Highlights cooldown setting +- Added matching prefixes `config:hide` (to not add to the Highlighted/Ignored + Messages panel) and `config:!log` (to not add to the separate log files) +- Some small UI improvements +- Updated help + +### Bugfixes +- Fixed bug in Highlight Tester where presets/substitutes were sometimes not set +- Fixed 7TV emotes with special characters not being shown +- Fixed favorite emotes not being sorted first unless `:` is used ++ +
diff --git a/help/help-settings.html b/help/help-settings.html index 0243658..39396a0 100644 --- a/help/help-settings.html +++ b/help/help-settings.html @@ -1030,7 +1030,7 @@ first message of this user in this channel during the current session (first message in User Dialog).
The messages can be reset without restarting Chatty via the -/clearUserMessages
+/clearUserMessages
command, so that the prefix triggers again.
To match on the first message of this user in the channel overall, you can match on the message tags that Twitch @@ -1082,6 +1082,9 @@ default in the "Substitutes / Lookalikes" dialog in the Highlight settings (if no prefix is provided it will use the default setting). +
config:restricted
- Match messages by
+ restricted users shown only for moderators. Note that
+ messages by monitored users can not be matched yet.blacklist:
to specify one or more text patterns
@@ -1155,6 +1158,11 @@
In the Highlight settings you can also enable this for all
Highlight items, without having to apply this prefix to each
one.config:hide
- Don't add the message to the
+ Highlighted/Ignored Messages panelconfig:!log
- Don't log the message to the
+ separate highlighted/ignored log file (may still be logged
+ to the channel log file)n:
to provide a note that is ignored for matching.
diff --git a/help/help.html b/help/help.html
index 1157960..be951c4 100644
--- a/help/help.html
+++ b/help/help.html
@@ -5,7 +5,7 @@
-
@@ -14,7 +14,7 @@
All command names are case-insensitive. Something like You can also create your own Custom Commands & Customized Context Menus. - -Tip: You can also use TAB Completion for many commands. - -Chat commands:-
Tip: You can circumvent Chatty commands and send Twitch Chat commands
- directly by prepending them with a dot Other Twitch Commands-
Special Commands-These commands change how other commands are run. -
Settings / Customization commands:-
GUI commands:-
Housekeeping/System commands:-
Test commands:-
Advanced commands (be careful with these):-
Execute several commands-The
Examples: -
When using
Execute the same command for each entry in a list-The
Examples: -
Detailed Explanation Example: -
Run a command in a specific open channel-The
Examples: -
Execute a command on a delay-The Certain restrictions apply: -
This has been moved to it's own page Twitch Login @@ -865,7 +344,7 @@/join command/join commandDownload-Choose one of the following downloads of Chatty Version 0.23. For older versions or betas go to the GitHub Releases. Checksums for release files are available as SHA-256 hashes. +Choose one of the following downloads of Chatty Version 0.24. For older versions or betas go to the GitHub Releases. Checksums for release files are available as SHA-256 hashes. If this is your first time using Chatty check out the Getting Started Guide. Windows@@ -170,11 +170,11 @@ function getDownloads(tag) { | |
|
|
@@ -194,7 +194,7 @@ function getDownloads(tag) {
For OS other than Windows (e.g. Linux or MacOS) you will need to download the JAR-Version (.zip) and must have Java 8 or later installed on your system. Extract the .zip into a folder of your choice and start Chatty.jar
.
For OS other than Windows (e.g. Linux or MacOS) you will need to download the JAR-Version (.zip) and must have Java 8 or later installed on your system. Extract the .zip into a folder of your choice and start Chatty.jar
.
If you have any feedback or questions feel free to contact me. You can join the Chatty Discord preferred, write me an E-Mail or use Twitter.
@@ -226,7 +226,7 @@ function getDownloads(tag) {If you like Chatty, there are several ways you can show your appreciation or help development, like simply sending a nice message, recommending Chatty to others or showing your involvement by submitting bug reports and feature requests.
You can also say thanks by supporting me on Patreon (you can get a badge!), which is highly appreciated and helps to ensure continued development.
- +