mirror of
https://github.com/chatty/chatty.github.io.git
synced 2024-11-09 12:22:50 +01:00
v0.24 files
This commit is contained in:
parent
e78e06a018
commit
143b51b5c5
567
help/help-builtin_commands.html
Normal file
567
help/help-builtin_commands.html
Normal file
@ -0,0 +1,567 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<title>Chatty - Custom Commands / Context Menus</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
|
<body>
|
||||||
|
<div id="backlink"><a href="help.html">To main help page</a></div>
|
||||||
|
<h1>Built-in Commands</h1>
|
||||||
|
<p>This list of commands is built into Chatty and can't be changed. You can
|
||||||
|
however create your own <a href="help-custom_commands.html">Custom Commands & Customized Context Menus</a>.</p>
|
||||||
|
|
||||||
|
<dl class="dl-settings">
|
||||||
|
<dt>All command names are case-insensitive</dt>
|
||||||
|
<dd>Example: Both <code>/me</code> and <code>/ME</code> are the same command</dd>
|
||||||
|
|
||||||
|
<dt><code><parameter></code> represents a required parameter</dt>
|
||||||
|
<dd>Example: For <code>/me <message></code> you need to enter a
|
||||||
|
message: <code>/me likes cheese!</code></dd>
|
||||||
|
|
||||||
|
<dt><code>[parameter]</code> represents an optional parameter</dt>
|
||||||
|
<dd>Example: For <code>/ban <username> [reason]</code> you don't need
|
||||||
|
to give a reason, but you can: <code>/ban abc spam</code></dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<p><em>Tip:</em> You can also use TAB Completion for many commands. Enter
|
||||||
|
the beginning of a command name (e.g. <code>/sub</code>) and then press
|
||||||
|
TAB to find matching commands (e.g. <code>/subscribers</code>, which
|
||||||
|
allows moderators to turn on sub-only mode).</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="#commands-chat">Chat / Twitch Commands</a></li>
|
||||||
|
<li><a href="#commands-settings">Settings / Customization Commands</a></li>
|
||||||
|
<li><a href="#commands-gui">GUI Commands</a></li>
|
||||||
|
<li><a href="#commands-system">System Commands</a></li>
|
||||||
|
<li>Commands that change how other commands are run:<ul>
|
||||||
|
<li><a href="#commands-chain">Run several commands at once</a></li>
|
||||||
|
<li><a href="#commands-foreach">Run a command for each value in a list</a></li>
|
||||||
|
<li><a href="#commands-runin">Run a command in a specific channel context</a></li>
|
||||||
|
<li><a href="#commands-timer">Run a command on a delay</a></li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2><a name="commands-chat">Chat / Twitch Commands</a></h2>
|
||||||
|
<ul>
|
||||||
|
<li><code>/say <message></code> - 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 <a href="help-custom_commands.html#anonymous-custom-commands">Anonymous Custom Command</a> using <code>//say</code>)</li>
|
||||||
|
<li><code>/me <message></code> - Send an action message (* nickname says something)</li>
|
||||||
|
<li><code>/msgreply <message></code> - 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. <code>Reply=/msgreply $$input(Reply to $(nick))</code>)</li>
|
||||||
|
<li><code>/msgreplythread <message></code> - Same as <code>/msgreply</code>, but will continue the thread (if present)</li>
|
||||||
|
|
||||||
|
<li><code>/join <channel></code> - Joins the given channels, see <a href="help.html#join">Joining Channels</a> for more information</li>
|
||||||
|
<li><code>/part</code> or <code>/close</code> - Leaves the current channel</li>
|
||||||
|
<li><code>/rejoin</code> - Rejoins the channel (without clearing users or chat)</li>
|
||||||
|
<li><code>/reconnect</code> - Disconnects and reconnects</li>
|
||||||
|
<li><code>/clearchat</code> - Clears the current chat window of all text (only locally)</li>
|
||||||
|
<li><code>/connection</code> - Show info about the current connection</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>Moderation</h3>
|
||||||
|
<ul>
|
||||||
|
<li><code>/to <nick> [time] [reason]</code> - Timeout the user with the given nickname for "time" seconds (time is optional)</li>
|
||||||
|
<li><code>/timeout</code>, <code>/ban</code>, <code>/unban</code>,
|
||||||
|
<code>/slow</code>, <code>/slowoff</code>,
|
||||||
|
<code>/subscribers</code>, <code>/subscribersoff</code>,
|
||||||
|
<code>/shieldMode</code>, <code>/shieldModeOff</code>,
|
||||||
|
<code>/clear</code>, <code>/mods</code>,
|
||||||
|
<code>/raid</code>, <code>/unraid</code>,
|
||||||
|
<code>/color</code>
|
||||||
|
just like in normal Twitch Chat</li>
|
||||||
|
<li><code>/userinfo <username></code> - To open the User Info Dialog
|
||||||
|
on a specific user of the current channel (if available)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<h3><a name="commands-twitch">Other Twitch Commands</a></h3>
|
||||||
|
<ul>
|
||||||
|
<li><a href="help.html#streamhighlights">Stream Highlights / Markers commands</a> (including <code>/marker</code>)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2><a name="commands-settings">Settings / Customization Commands</a></h2>
|
||||||
|
<ul>
|
||||||
|
<li><a href="help-setting_commands.html">Setting commands</a></li>
|
||||||
|
<li><code>/setcolor <name></code> - Opens the usercolor settings
|
||||||
|
for the given name</li>
|
||||||
|
<li><a href="help-addressbook.html">Addressbook commands</a></li>
|
||||||
|
<li><a href="help.html#streamchat">Stream Chat commands</a></li>
|
||||||
|
<li><code>/favorite [channel]</code>, <code>/unfavorite [channel]</code>
|
||||||
|
- Edit the Channel Favorites list (defaults to current channel if
|
||||||
|
none is given)</li>
|
||||||
|
<li><code>/ignore <user></code>, <code>/unignore <user></code>
|
||||||
|
- Add/remove a user from "Settings - Ignore - Ignored Users" (chat
|
||||||
|
and whisper, only takes effect locally in Chatty),
|
||||||
|
<code>/ignoreChat</code>, <code>/unignoreChat</code>,
|
||||||
|
<code>/ignoreWhisper</code>, <code>/unignoreWhisper</code> to do the
|
||||||
|
same, except it only affects one type of message</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2><a name="commands-gui">GUI Commands</a></h2>
|
||||||
|
|
||||||
|
<h3>Manipulate the GUI</h3>
|
||||||
|
<ul>
|
||||||
|
<li><a href="help.html#layouts-save-load">Save and load layouts</a></li>
|
||||||
|
<li><code>/insert <text></code> - Inserts the given text into the input box at
|
||||||
|
the current caret position (can be useful for Custom Commands put
|
||||||
|
in a menu)</li>
|
||||||
|
<li><code>/insertword <text></code> - Same as <code>/insert</code>,
|
||||||
|
but adds spaces so it's separated from text before and after (if present)</li>
|
||||||
|
<li><code>/setSize <width> <height></code> - Sets the main window size</li>
|
||||||
|
<li><code>/echo <text></code> - Outputs the given text as an info message</li>
|
||||||
|
<li><code>/triggerNotification [-hmt] <text></code> - Triggers a
|
||||||
|
command notification event that was added in the Notification Settings
|
||||||
|
(if none is added, this won't do anything), <code>-h</code> to hide
|
||||||
|
notification popup, <code>-m</code> to don't play sound, <code>-t</code>
|
||||||
|
to specify the title of the notification popup (e.g.
|
||||||
|
<code>/triggerNotification -mt "This is the title" This is the text</code>)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>Open windows in Chatty</h3>
|
||||||
|
<ul>
|
||||||
|
<li><code>/popoutchannel</code> - Opens current the channel in a popout</li>
|
||||||
|
<li><code>/settings</code>, <code>/livestreams</code>, <code>/channeladmin</code>,
|
||||||
|
<code>/channelinfo</code>, <code>/search</code>, <code>/openFollowers</code>,
|
||||||
|
<code>/openSubscribers</code> - Opens the according dialog</li>
|
||||||
|
<li><code>/userinfo <username></code> - To open the User Info Dialog
|
||||||
|
on a specific user of the current channel (if available)</li>
|
||||||
|
<li><code>/releaseinfo</code> - Opens the help with the release information</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2><a name="commands-system">System Commands</a></h2>
|
||||||
|
<h3>Open / affect things outside of Chatty</h3>
|
||||||
|
<ul>
|
||||||
|
<li><code>/openUrl <url></code> - Opens the given url (see <a href="help-setting_commands.html#openurl">Open URL Command settings</a>)</li>
|
||||||
|
<li><code>/openUrlPrompt <url></code> - Opens the given url after
|
||||||
|
showing a prompt for confirmation</li>
|
||||||
|
<li><code>/openFile <path></code> - Opens the given path in the default application</li>
|
||||||
|
<li><code>/openFilePrompt <path></code> - Opens the given path in the default application (with prompt asking for confirmation)</li>
|
||||||
|
<li><code>/copy</code> - Copies the given text to the clipboard</li>
|
||||||
|
<li><code>/exportText [-sna] <fileName> <text></code> - Write the text to a file in the "exported" directory in the settings directory (UTF-8)
|
||||||
|
<ul>
|
||||||
|
<li><code>-s</code> - no info message when writing successfully</li>
|
||||||
|
<li><code>-n</code> - replace "\n" in the text with a newline</li>
|
||||||
|
<li><code>-a</code> - append to the file (instead of overwriting it)</li>
|
||||||
|
<li><code>-A</code> - append to the file and append a newline character</li>
|
||||||
|
<li><code>-L</code> - append to the file on a new line (prepend a newline character)</li>
|
||||||
|
</ul>
|
||||||
|
(Example: <code>/exportText -n abc.txt one\ntwo</code> - Writes "one" and "two" as separate lines)</li>
|
||||||
|
<li><code>/proc</code> - <a href="help.html#custom-processes">Execute a system process</a> (be careful with this)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>Learn things about Chatty</h3>
|
||||||
|
<ul>
|
||||||
|
<li><code>/uptime</code> - Shows how long Chatty has been running</li>
|
||||||
|
<li><code>/appinfo</code> - Shows Chatty version, uptime, current memory usage, system info and connection status</li>
|
||||||
|
<li><code>/dir</code> / <code>/openDir</code> - Show/open the settings directory</li>
|
||||||
|
<li><code>/wdir</code> / <code>/openWdir</code> - Show/open the current working directory</li>
|
||||||
|
<li><code>/showBackupDir</code> / <code>/openBackupDir</code> - Show/open the <a href="help-guide_folders.html#backup">backup directory</a></li>
|
||||||
|
<li><code>/showDebugDir</code> / <code>/openDebugDir</code> - Show/open the debug log directory</li>
|
||||||
|
<li><code>/showLogDir</code> / <code>/openLogDir</code> - Show/open the chat log directory</li>
|
||||||
|
<li><code>/showJavaDir</code> / <code>/openJavaDir</code> - Show/open the directory of the JRE used by Chatty</li>
|
||||||
|
<li><code>/showFallbackFontDir</code> / <code>/openFallbackFontDir</code> - Show/open the directory where Java looks for <a href="help-troubleshooting.html#font">fallback fonts</a></li>
|
||||||
|
<li><code>/showTempDir</code> / <code>/openTempDir</code> - Show/open the system's temp directory</li>
|
||||||
|
<li><code>/ffz</code> - Shows the FFZ channel emote codes for the current channel</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>Housekeeping Commands</h3>
|
||||||
|
<ul>
|
||||||
|
<li><code>/refresh <emoticons/badges/ffz/ffzglobal/bttvemotes></code>
|
||||||
|
- Refresh the given data from it's respective API:
|
||||||
|
<ul>
|
||||||
|
<li><code>emoticons</code>: Twitch Emotes</li>
|
||||||
|
<li><code>badges</code>: Twitch Badges (current channel)</li>
|
||||||
|
<li><code>ffz</code>: FFZ Emotes (current channel)</li>
|
||||||
|
<li><code>ffzglobal</code>: Global FFZ Emotes</li>
|
||||||
|
<li><code>bttvemotes</code>: BTTV Emotes (global and current channel)</li>
|
||||||
|
</ul>
|
||||||
|
<em>This downloads the lists from the Internet, which may be useful
|
||||||
|
if new emotes have been added (it's basicially like pressing
|
||||||
|
reload in your browser, but only for some select stuff per command).</em></li>
|
||||||
|
<li><a name="commands-clearUserMessages"><code>/clearUserMessages [-an]</code></a>
|
||||||
|
- Clears the message history in the User Dialog for all users in the
|
||||||
|
current channel, <code>-a</code> for all channels, <code>-n</code>
|
||||||
|
to only clear the number of messages (e.g. so the <code>config:firstmsg</code>
|
||||||
|
Highlight prefix matches again)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3><a name="commands-test">Test Commands</a></h3>
|
||||||
|
<ul>
|
||||||
|
<li><code>/testNotification [channel]</code> - Display a test notification (optionally with channel,
|
||||||
|
which means right-clicking on the notification will join that channel)</li>
|
||||||
|
<li><code>/debug simulate <type></code> - Simulates a chat message
|
||||||
|
for testing. See the Chatty source code for possible values.
|
||||||
|
</li>
|
||||||
|
<li><code>/debug</code> 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.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3><a name="commands-advanced">Advanced commands</a></h3>
|
||||||
|
<ul>
|
||||||
|
<li><code>/server <host>[:port]</code> - Connect to a custom server</li>
|
||||||
|
<li><code>/raw <command></code> - Send a raw command to the server</li>
|
||||||
|
<li><code>/changetoken <token></code> - Checks if the given token
|
||||||
|
is valid and sets it as new token if it is</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2><a name="commands-chain">Execute several commands</a></h2>
|
||||||
|
<p>The <code>/chain</code> command allows you to run several commands at the
|
||||||
|
same time. Each part separated by a <code>|</code> is basicially
|
||||||
|
entered into the inputbox again.</p>
|
||||||
|
|
||||||
|
<dl class="defList">
|
||||||
|
<dt><code>/chain [command1] | [command2] | [command3]</code></dt>
|
||||||
|
<dd>Runs command1, then command2, then command3. This can be repeated
|
||||||
|
further by adding more parts separated by <code>|</code>.</dd>
|
||||||
|
<dd>Whitespace around each command is trimmed.</dd>
|
||||||
|
<dd><em>Note:</em> A <code>|</code> character in a command would be
|
||||||
|
interpreted as a command separator. Escape <code>|</code> with
|
||||||
|
itself to use the character without special meaning (<code>||</code>).
|
||||||
|
If used in a Custom Command, the function <code>$cs()</code> (as in
|
||||||
|
<u>c</u>hain <u>s</u>afe) can be used around replacements for
|
||||||
|
escaping (e.g. <code>$cs($1-)</code>).</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<p>Examples:</p>
|
||||||
|
<dl class="defList">
|
||||||
|
<dt><code>/chain /echo a | /echo b</code></dt>
|
||||||
|
<dd>Outputs <code>a</code> and <code>b</code></dd>
|
||||||
|
|
||||||
|
<dt><code>/chain /echo a | /echo ||b||</code></dt>
|
||||||
|
<dd>Outputs <code>a</code> and <code>|b|</code></dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<p>When using <code>/chain</code> with <a href="help-custom_commands.html">Custom Command</a>
|
||||||
|
replacements, consider the following:</p>
|
||||||
|
|
||||||
|
<dl class="defList">
|
||||||
|
<dt><code>/chain /echo $cs($(msg)) | /echo abc</code></dt>
|
||||||
|
<dd>All replacements are performed before the <code>/chain</code>
|
||||||
|
command is executed, so anything in <code>$(msg)</code> is put in
|
||||||
|
first. If <code>$(msg)</code> contained <code>Hello World!</code>:<br />
|
||||||
|
<code>/chain /echo Hello World! | /echo abc</code></dd>
|
||||||
|
<dt><code>/chain /echo $(msg) | /echo abc</code></dt>
|
||||||
|
<dd>Assuming no escaping were to take place: If <code>$(msg)</code>
|
||||||
|
would contain <code>Hello | World!</code> then the <code>|</code>
|
||||||
|
in it would be interpreted as a command separator and thus <code>World!</code>
|
||||||
|
would be separately entered into the inputbox (so it would output
|
||||||
|
two <code>/echo</code> info messages and send <code>World!</code> to
|
||||||
|
chat):<br />
|
||||||
|
<code>/chain /echo Hello | World! | /echo abc</code></dd>
|
||||||
|
<dd>This could cause serious issues, so it is recommended to always
|
||||||
|
make sure text is safe to be used in the <code>/chain</code> command:
|
||||||
|
<ul>
|
||||||
|
<li>Wrap replacements in the <code>$cs()</code> function (as in <u>c</u>hain <u>s</u>afe)
|
||||||
|
when used in a <code>/chain</code> command to escape
|
||||||
|
<code>|</code> characters: <code>$cs($(msg))</code></li>
|
||||||
|
<li>In addition, any top-level replacement will escape
|
||||||
|
<code>|</code> characters automatically if the Custom Command
|
||||||
|
begins with <code>/chain </code> (so the above
|
||||||
|
example should normally not cause issues). However it is
|
||||||
|
good practice to always use the <code>$cs()</code> function
|
||||||
|
anyway (it won't be escaped twice) in case something changes
|
||||||
|
in the future so that the Custom Command doesn't begin with
|
||||||
|
<code>/chain</code> anymore.<br />
|
||||||
|
You can prevent this automatic escaping (if you are
|
||||||
|
absolutely sure that you want replacements to be able to
|
||||||
|
insert any command) by adding a backslash in front (this
|
||||||
|
doesn't work when you enter the <code>/chain</code> command
|
||||||
|
directly into the inputbox):<br />
|
||||||
|
<code>\/chain /echo Hello | World! | /echo abc</code></li>
|
||||||
|
</ul>
|
||||||
|
When properly escaped, it will turn into this (which outputs
|
||||||
|
<code>Hello | World!</code> and <code>abc</code>):<br />
|
||||||
|
<code>/chain /echo Hello || World! | /echo abc</code>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
<dt><code>/chain /echo abc $(chain-test)</code></dt>
|
||||||
|
<dd>You can test this by using the <code>$(chain-test)</code> replacement.
|
||||||
|
This should (if e.g. added in the body of a Custom Command) output the following info message:<br />
|
||||||
|
<code>abc | /echo Test || Message</code></dd>
|
||||||
|
<dd>If you add a backslash in front, it will output two info messages:<br />
|
||||||
|
<code>abc</code><br />
|
||||||
|
<code>Test | Message</code></dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<h2><a name="commands-foreach">Execute the same command for each entry in a list</a></h2>
|
||||||
|
<p>The <code>/foreach</code> 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 <code>$1</code> replacement containing a single
|
||||||
|
list entry.</p>
|
||||||
|
|
||||||
|
<dl class="defList">
|
||||||
|
<dt><code>/foreach [list] > [command]</code></dt>
|
||||||
|
<dd>The command consist of the comma-separated list, the <code>></code>
|
||||||
|
character and the command to execute (whereas the command is run as
|
||||||
|
it's own Custom Command with the <code>$1</code> replacement).</dd>
|
||||||
|
<dd>List and command are trimmed for leading and trailing whitespace.</dd>
|
||||||
|
<dd><em>Note:</em> Everything after the first <code>></code>
|
||||||
|
character is interpreted as the command. If you want to use a
|
||||||
|
<code>></code> in the list section you have to escape it with
|
||||||
|
itself for it to be treated literally (<code>>></code>). Both the
|
||||||
|
list and command section will consume a single <code>></code> only
|
||||||
|
if they are repeated (<code>>></code> to <code>></code>, but
|
||||||
|
<code>></code> unmodified).</dd>
|
||||||
|
<dd>If you use a Custom Command replacement in the <code>[list]</code>
|
||||||
|
section, make sure the text is safe to use:
|
||||||
|
<ul>
|
||||||
|
<li>Wrap replacements in the <code>$fs()</code> function (as in <u>f</u>oreach <u>s</u>afe)
|
||||||
|
to escape <code>></code> characters: <code>$fs($1-)</code></li>
|
||||||
|
<li>In addition, any top-level replacements will escape <code>></code>
|
||||||
|
characters automatically if the Custom Command begins with
|
||||||
|
<code>/foreach </code>. However it is good practice to
|
||||||
|
always use the <code>$fs()</code> function anyway (it won't
|
||||||
|
be escaped twice) in case something changes in the future so
|
||||||
|
that the Custom Command doesn't begin with <code>/foreach</code>
|
||||||
|
anymore.</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<p>Examples:</p>
|
||||||
|
<dl class="defList">
|
||||||
|
<dt><code>/foreach a b c > /echo $1</code></dt>
|
||||||
|
<dd>Outputs <code>a</code>, <code>b</code> and <code>c</code> when
|
||||||
|
entered into the chat inputbox.</dd>
|
||||||
|
|
||||||
|
<dt><code>//foreach a b c > /echo \$1</code></dt>
|
||||||
|
<dd>Outputs <code>a</code>, <code>b</code> and <code>c</code> when
|
||||||
|
entered into the chat inputbox. Note that the double slash at the
|
||||||
|
start runs this as a Custom Command, so the <code>$1</code> needs to
|
||||||
|
be escaped, so it is only replaced when the <code>/echo</code> is
|
||||||
|
run for each list entry.</dd>
|
||||||
|
|
||||||
|
<dt><code>/foreach a <b>> c > /echo $1</code></dt>
|
||||||
|
<dd>Outputs <code>a</code>, <code><b></code> and <code>c</code>
|
||||||
|
when entered into the chat inputbox. Note the escaped <code>></code>
|
||||||
|
in the list entry.</dd>
|
||||||
|
|
||||||
|
<dt><code>Open Streams=/foreach $fs($1-) > /openUrl https://twitch.tv/\$1</code> (added as a Streams Context menu entry)</dt>
|
||||||
|
<dd>When several channels are selected and the command run, it will
|
||||||
|
replace <code>$1-</code> with the list of selected streams and then
|
||||||
|
open the URL for each one of them. Note that the <code>$1</code> in
|
||||||
|
the <code>/openUrl</code> command is escaped.</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<p>Detailed Explanation Example:</p>
|
||||||
|
<dl class="defList">
|
||||||
|
<dt><code>/foreachtest /foreach a b c > /echo \$1</code> (added to the Custom Commands list)</dt>
|
||||||
|
<dd>Outputs <code>a</code>, <code>b</code> and <code>c</code> when
|
||||||
|
<code>/foreachtest</code> is entered into the chat inputbox.</dd>
|
||||||
|
<dd>Note the <code>\$1</code> with the escape character in front, which
|
||||||
|
preserves it for replacement when the <code>/echo</code> is run.
|
||||||
|
<p>This is what happens when you enter <code>/foreachtest</code>:</p>
|
||||||
|
<ol>
|
||||||
|
<li>Replacements are performed on the Custom Command
|
||||||
|
<code>/foreach a b c > /echo \$1</code>. Since the <code>$1</code>
|
||||||
|
is escaped it is treated as plain text and not replaced (the
|
||||||
|
<code>\</code> is consumed).</li>
|
||||||
|
<li>The result <code>/foreach a b c > /echo $1</code> is run
|
||||||
|
and the <code>/foreach</code> command will use everything
|
||||||
|
after the <code>></code> as the Custom Command to run (and
|
||||||
|
trim whitespace).</li>
|
||||||
|
<li>The Custom Command <code>/echo $1</code> is run with <code>a</code>
|
||||||
|
as parameter, which results in <code>/echo a</code> being
|
||||||
|
run. The same is repeated for <code>b</code> and <code>c</code>.</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p>If the <code>$1</code> is not escaped:</p>
|
||||||
|
<ol>
|
||||||
|
<li>Replacements are performed on the Custom Command
|
||||||
|
<code>/foreach a b c > /echo $1</code>. The <code>$1</code>
|
||||||
|
is replaced with an empty string (no argument given with the
|
||||||
|
<code>/foreachtest</code> command).</li>
|
||||||
|
<li>The result <code>/foreach a b c > /echo </code> is run
|
||||||
|
and the <code>/foreach</code> command will use everything
|
||||||
|
after the <code>></code> as the Custom Command to run (and
|
||||||
|
trim whitespace).</li>
|
||||||
|
<li>The Custom Command <code>/echo</code> is run with <code>a</code>
|
||||||
|
as parameter (although there is no replacement to make use
|
||||||
|
of it), which results in <code>/echo</code> being run,
|
||||||
|
resulting in an error message. The same is repeated for
|
||||||
|
<code>b</code> and <code>c</code>.</li>
|
||||||
|
</ol>
|
||||||
|
<p>If the <code>$1</code> is not escaped, but you provide a command
|
||||||
|
argument, e.g. <code>/foreachtest 123</code>, then it will
|
||||||
|
replace the <code>$1</code> with <code>123</code> in the first
|
||||||
|
step, so <code>/echo 123</code> will be run three times.</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<h2><a name="commands-runin">Run a command in a specific open channel</a></h2>
|
||||||
|
<p>The <code>/runin</code> 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.</p>
|
||||||
|
|
||||||
|
<dl class="defList">
|
||||||
|
<dt><code>/runin [channel] [command]</code></dt>
|
||||||
|
<dd>The channel must be a regular channel with or without leading "#" (<code>#channelname</code>)
|
||||||
|
or a whisper channel (<code>$username</code>).</dd>
|
||||||
|
<dd>The command can be anything you could enter into a chat inputbox.</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<p>Examples:</p>
|
||||||
|
<dl class="defList">
|
||||||
|
<dt><code>/runin #chan2 /echo abc</code></dt>
|
||||||
|
<dd>Outputs the info message "abc" in the channel "#chan2" (if it is
|
||||||
|
open in Chatty).</dd>
|
||||||
|
|
||||||
|
<dt><code>//runin #chan2 //echo Channel context: \\$(chan) -> \$(chan)</code></dt>
|
||||||
|
<dd>This example is entered directly into a chat inputbox and outputs
|
||||||
|
an info message about the changed channel context in "#chan2". Let's say the
|
||||||
|
command is entered in the channel "#chan1".</dd>
|
||||||
|
<dd>The command begins with two slashes (<code>//</code>), so it is
|
||||||
|
interpreted as an anonymous Custom Command:
|
||||||
|
<ul>
|
||||||
|
<li><code>\\$(chan)</code> turns into <code>\#chan1</code> (the <code>\\</code> escaped
|
||||||
|
the backslash itself, not the <code>$</code>, so the replacement is performed)</li>
|
||||||
|
<li><code>\$(chan)</code> turns into <code>$(chan)</code> (this <code>\</code> actually escapes the
|
||||||
|
<code>$</code>, so the replacement is not performed here)</li>
|
||||||
|
</ul>
|
||||||
|
The result <code>/runin #chan2 //echo Channel context: \#chan1 -> $(chan)</code>
|
||||||
|
is run, which runs <code>//echo Channel context: \#chan1 -> $(chan)</code>
|
||||||
|
in "#chan2".</dd>
|
||||||
|
<dd>Yet again, the command begins with two slashes (<code>//</code>) and
|
||||||
|
is interpreted as an anonymous Custom Command:
|
||||||
|
<ul>
|
||||||
|
<li><code>\#chan1</code> turns into <code>#chan1</code> (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 <code>$user1</code>
|
||||||
|
then the <code>$</code> would have had to be escaped)</li>
|
||||||
|
<li><code>$(chan)</code> turns into <code>#chan2</code> (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 <code>$user2</code>, since
|
||||||
|
it doesn't get interpreted as a Custom Command after this)</li>
|
||||||
|
</ul>
|
||||||
|
The resulting command <code>/echo Channel context: #chan1 -> #chan2</code>
|
||||||
|
is then run and outputs an info message.
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<h2><a name="commands-timer">Execute a command on a delay</a></h2>
|
||||||
|
<p>The <code>/timer</code> 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 <code>/timer</code>
|
||||||
|
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 <code>-a</code>
|
||||||
|
option is used).</p>
|
||||||
|
|
||||||
|
<p>Certain restrictions apply:</p>
|
||||||
|
<ul>
|
||||||
|
<li>A timed command can't contain another <code>/timer</code> command as well as some other commands.</li>
|
||||||
|
<li>A timed message can only be send to regular channels (not whispers)
|
||||||
|
and only as a moderator of the channel.</li>
|
||||||
|
<li>Parameters from the context of where <code>/timer</code> 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:
|
||||||
|
<ul>
|
||||||
|
<li>In case of <code>Test=/timer 1 /echo $(nick)</code>
|
||||||
|
replacements are performed on <code>/timer 1 /echo $(nick)</code>,
|
||||||
|
resulting in <code>/timer 1 /echo someusername</code>, resulting in
|
||||||
|
<code>/echo someusername</code> one second later.</li>
|
||||||
|
<li>On the other hand <code>Test=/timer 1 //echo \$(nick)</code>
|
||||||
|
replacements are performed on <code>/timer 1 //echo \$(nick)</code>
|
||||||
|
(note that <code>\$(nick)</code> is escaped, so it is not
|
||||||
|
replaced yet), resulting in <code>/timer 1 //echo $(nick)</code>,
|
||||||
|
resulting in <code>//echo $(nick)</code> 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.</li>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<dl class="defList">
|
||||||
|
<dt><code>/timer [-options] [:id] <duration|time|'list'|'stop'> <timed command></code></dt>
|
||||||
|
<dd>Optionally one or several options (<code>-rs</code>) can be specified:
|
||||||
|
<ul>
|
||||||
|
<li><code>-r</code> (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.)</li>
|
||||||
|
<li><code>-o</code> (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.)</li>
|
||||||
|
<li><code>-s</code> (Silent, starting the timer successfully
|
||||||
|
doesn't output a message.)</li>
|
||||||
|
<li><code>-a</code> (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.)</li>
|
||||||
|
<li>Full example: <code>/timer -rs 10m /echo hello</code>
|
||||||
|
(Outputs "hello" in 10 minutes, keeps it when Chatty is
|
||||||
|
restarted within that time and doesn't output a timer
|
||||||
|
started message.)</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
<dd>The id is used to identify a timer after it has been started (e.g.
|
||||||
|
to stop it). Can be anything (no spaces), if it ends with <code>*</code>
|
||||||
|
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.
|
||||||
|
<ul>
|
||||||
|
<li><code>:abc</code> (the id is "abc")</li>
|
||||||
|
<li><code>:abc*</code> (the id might be "abc1", "abc2", "abc3", ...)</li>
|
||||||
|
<li><em>Not specified</em> (the id is an automatically generated number)</li>
|
||||||
|
<li>Full example: <code>/timer :abc 10m /echo hello</code>
|
||||||
|
(outputs "hello" in 10 minutes, with the timer id "abc")</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
<dd>The duration is in seconds by default, but you can also append a
|
||||||
|
time unit and several durations that get added up (no spaces):
|
||||||
|
<ul>
|
||||||
|
<li><code>5ms</code> (milliseconds)</li>
|
||||||
|
<li><code>5s</code> (seconds)</li>
|
||||||
|
<li><code>5m</code> (minutes)</li>
|
||||||
|
<li><code>5h</code> (hours)</li>
|
||||||
|
<li><code>5h10m</code> (5 hours 10 minutes)</li>
|
||||||
|
<li><code>5h10</code> (5 hours 10 minutes)</li>
|
||||||
|
<li><code>5h10m30</code> (5 hours 10 minutes 30 seconds)</li>
|
||||||
|
<li>Full example: <code>/timer 5h /echo hello</code> (outputs "hello" in 5 hours)</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
<dd>An absolute time is written like a digital clock in 24hr format, a
|
||||||
|
date can be added in front, in which case it has to be enclosed in
|
||||||
|
<code>[ ]</code>. 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:
|
||||||
|
<ul>
|
||||||
|
<li><code>5:30</code> (5:30 in the morning)</li>
|
||||||
|
<li><code>17:30</code> (5:30 in the afternoon)</li>
|
||||||
|
<li><code>5:30:50</code> (5:30 and 50 seconds in the morning)</li>
|
||||||
|
<li><code>[05:20:00]</code> (the time can also be enclosed in
|
||||||
|
<code>[ ]</code>)</li>
|
||||||
|
<li><code>[2022-01-10 5:30]</code> (when including the date the
|
||||||
|
<code>[ ]</code> is required and the date has to always be
|
||||||
|
the full date in the format YYYY-MM-DD)</li>
|
||||||
|
<li>Full example: <code>/timer 16:30 /echo hello</code> (outputs
|
||||||
|
the info message "hello" at 4:30 PM)</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
<dd>Output info about currently active timers:
|
||||||
|
<ul>
|
||||||
|
<li><code>list</code> (Lists all timers, soonest to run first.)</li>
|
||||||
|
<li><code>-q list</code> (Same as above, but the list is in timer start order.)</li>
|
||||||
|
<li><code>:a* list</code> (Outputs information about timers with ids that begin with "a".)</li>
|
||||||
|
<li><code>list a*</code> (Same as above, but id in place of the timed command.)</li>
|
||||||
|
<li>Full example: <code>/timer list a*</code> (Shows all active timers with ids that begin with "a".)</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
<dd>Stop active timers:
|
||||||
|
<ul>
|
||||||
|
<li><code>:abc1 stop</code> (Stops a timer with the id "abc1".)</li>
|
||||||
|
<li><code>stop abc1</code> (Same as above, but id in place of the timed command.)</li>
|
||||||
|
<li><code>:abc* stop</code> (Stops all timers with ids that begin with "abc".)</li>
|
||||||
|
<li><code>:* stop</code> (Stops all active timers.)</li>
|
||||||
|
<li>Full example: <code>/timer stop *</code> (Stops all active timers.)</li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -109,16 +109,16 @@
|
|||||||
|
|
||||||
<h3><a name="chain-commands">Chaining Commands</a></h3>
|
<h3><a name="chain-commands">Chaining Commands</a></h3>
|
||||||
<p>Executing several commands in a row is not a feature of Custom Commands,
|
<p>Executing several commands in a row is not a feature of Custom Commands,
|
||||||
although the <a href="help.html#commands-chain">/chain command</a> can
|
although the <a href="help-builtin_commands.html#commands-chain">/chain command</a> can
|
||||||
be used to achieve something like that.</p>
|
be used to achieve something like that.</p>
|
||||||
|
|
||||||
<h3><a name="foreach">Foreach</a></h3>
|
<h3><a name="foreach">Foreach</a></h3>
|
||||||
<p>The <a href="help.html#commands-foreach">/foreach command</a> can be used
|
<p>The <a href="help-builtin_commands.html#commands-foreach">/foreach command</a> can be used
|
||||||
to run the same command for each entry of a space-separated list, for
|
to run the same command for each entry of a space-separated list, for
|
||||||
example a list of channels from the <code>$1-</code> replacement.</p>
|
example a list of channels from the <code>$1-</code> replacement.</p>
|
||||||
|
|
||||||
<h3><a name="runin">Run command in specific channel</a></h3>
|
<h3><a name="runin">Run command in specific channel</a></h3>
|
||||||
<p>The <a href="help.html#commands-runin">/runin command</a> can be used
|
<p>The <a href="help-builtin_commands.html#commands-runin">/runin command</a> can be used
|
||||||
to run a command in a specific open channel.</p>
|
to run a command in a specific open channel.</p>
|
||||||
|
|
||||||
<h2><a name="replacements">Replacements</a></h2>
|
<h2><a name="replacements">Replacements</a></h2>
|
||||||
@ -678,7 +678,7 @@
|
|||||||
|
|
||||||
<dt><a name="func-json"><code>$json(<input>,<output>)</code></a></dt>
|
<dt><a name="func-json"><code>$json(<input>,<output>)</code></a></dt>
|
||||||
<dd>Parse the JSON in <code><input></code> and use in <code><output></code>,
|
<dd>Parse the JSON in <code><input></code> and use in <code><output></code>,
|
||||||
where <code>$j(<path>,[default])</code> can be used to access specific values.
|
where <code>$j(<path>,[default],[sub],...)</code> can be used to access specific values.
|
||||||
The JSON input could e.g. come from the <code>$request()</code>
|
The JSON input could e.g. come from the <code>$request()</code>
|
||||||
function.</dd>
|
function.</dd>
|
||||||
<dd>If the path isn't formatted correctly or the JSON is invalid the
|
<dd>If the path isn't formatted correctly or the JSON is invalid the
|
||||||
@ -695,22 +695,34 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li><code>last</code> for the last entry of an array</li>
|
<li><code>last</code> for the last entry of an array</li>
|
||||||
<li><code>size</code> to return the number of elements</li>
|
<li><code>size</code> to return the number of elements</li>
|
||||||
|
<li><code>sort</code> to sort an array (mainly works for strings)</li>
|
||||||
<li><code>filter:<path>[=regex]</code> to select only
|
<li><code>filter:<path>[=regex]</code> 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 path</li>
|
regex is provided the value of the path</li>
|
||||||
<li><code>collect:<path>[=regex]</code> iterates over an
|
<li><code>collect:<path>[=regex]</code> 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 array</li>
|
the resulting values into an array</li>
|
||||||
<li><code>combine:<path>[=regex]</code> iterates over an
|
<li><code>combine:<path>[=regex]</code> 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
|
resulting value that is an array adds all of the array
|
||||||
values into a single result array</li>
|
values into a single result array</li>
|
||||||
<li><code>unique</code> removes duplicate elements from an array</li>
|
<li><code>unique</code> removes duplicate elements from an array</li>
|
||||||
<li><code>join[:delimiter]</code> turns an array into a string
|
<li><code>join[:delimiter]</code> turns an array into a string
|
||||||
by joining all elements together using the given delimiter
|
by joining all elements together using the given delimiter
|
||||||
(or "<code>, </code>" if none is provided)</li>
|
(or "<code>, </code>" if none is provided)</li>
|
||||||
|
<li><em>Note:</em> The regex and delimiter can be quoted using
|
||||||
|
<code>'</code> (for example <code>[collect:abc='[a-z]+']</code>
|
||||||
|
so that the <code>]</code> in the regex doesn't get mistaken
|
||||||
|
as the end of the regex). To use a <code>'</code> in a quoted
|
||||||
|
section you have to double it <code>''</code>.</li>
|
||||||
</ul></dd>
|
</ul></dd>
|
||||||
<dd><em>Examples</em> with the following JSON as input:
|
<dd>The optional <code>[sub]</code> values can contain additional <code>$j()</code>
|
||||||
|
replacements, which are applied to the result of the path or previous <code>[sub]</code>
|
||||||
|
parameter. If prefixed with <code>each:</code> it will be applied
|
||||||
|
to each element on an array/object and the result collected into
|
||||||
|
an array (for objects the <code>$(key)</code> replacement and
|
||||||
|
for arrays the <code>$(index)</code> replacement is available).</dd>
|
||||||
|
<dd><br /><em>Examples</em> with the following JSON as input:
|
||||||
<pre>
|
<pre>
|
||||||
{
|
{
|
||||||
"books":[
|
"books":[
|
||||||
@ -719,6 +731,10 @@
|
|||||||
{"title":"book3", "author":"author2", "tags":["tag1", "tag3"]},
|
{"title":"book3", "author":"author2", "tags":["tag1", "tag3"]},
|
||||||
{"title":"book4", "author":"author2"}
|
{"title":"book4", "author":"author2"}
|
||||||
],
|
],
|
||||||
|
"authors":{
|
||||||
|
"author1":{"name":"name1", "age":24},
|
||||||
|
"author2":{"name":"name2", "age":62}
|
||||||
|
},
|
||||||
"numBooks": 4,
|
"numBooks": 4,
|
||||||
"numAuthors": 2
|
"numAuthors": 2
|
||||||
}</pre>
|
}</pre>
|
||||||
@ -751,6 +767,25 @@
|
|||||||
|
|
||||||
<dt><code>$json($get(var,j),Tags of author2: $j(books[filter:author=author2][combine:tags][unique][join]))</code></dt>
|
<dt><code>$json($get(var,j),Tags of author2: $j(books[filter:author=author2][combine:tags][unique][join]))</code></dt>
|
||||||
<dd><code>Tags of author2: tag1, tag3</code></dd>
|
<dd><code>Tags of author2: tag1, tag3</code></dd>
|
||||||
|
|
||||||
|
<dt><code>$json($get(var,j),$j(authors[collect:name][sort][join]))</code></dt>
|
||||||
|
<dd><code>name1, name2</code></dd>
|
||||||
|
|
||||||
|
<dt><code>$json($get(var,j),$j(authors,,each:$(key): $j(name) \(age $j(age)\),$j([sort][join])))</code></dt>
|
||||||
|
<dd><code>author1: name1 (age 24), author2: name2 (age 62)</code></dd>
|
||||||
|
<dd>The <code>[sub]</code> parameters of <code>$j()</code> are used here:
|
||||||
|
<pre>
|
||||||
|
$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])
|
||||||
|
)</pre>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
You can test these examples yourself if you store the JSON in the
|
You can test these examples yourself if you store the JSON in the
|
||||||
variable "j" using the command <code>/set var j copyJSONfromabove</code>
|
variable "j" using the command <code>/set var j copyJSONfromabove</code>
|
||||||
|
@ -78,7 +78,7 @@
|
|||||||
|
|
||||||
<h3>Moderating</h3>
|
<h3>Moderating</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Use Twitch <a href="help.html#commands">chat commands</a> like
|
<li>Use Twitch <a href="help-builtin_commands.html#commands-chat">chat commands</a> like
|
||||||
<code>/ban</code>, <code>/timeout</code>, <code>/subscribers</code>
|
<code>/ban</code>, <code>/timeout</code>, <code>/subscribers</code>
|
||||||
(<em>Hint:</em> Use TAB-Completion).</li>
|
(<em>Hint:</em> Use TAB-Completion).</li>
|
||||||
<li>Click on a name in chat to open User Dialog, to view recent messages
|
<li>Click on a name in chat to open User Dialog, to view recent messages
|
||||||
|
@ -121,7 +121,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>| |- <exported text></td>
|
<td>| |- <exported text></td>
|
||||||
<td class="fileComment"><a href="help.html#commands-system">/exportText command</a> output</td>
|
<td class="fileComment"><a href="help-builtin_commands.html#commands-system">/exportText command</a> output</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>|</td>
|
<td>|</td>
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
<p>Features used: <a href="help-settings.html#Ignore">Ignore System</a>,
|
<p>Features used: <a href="help-settings.html#Ignore">Ignore System</a>,
|
||||||
<a href="help-addressbook.html">Addressbook</a>,
|
<a href="help-addressbook.html">Addressbook</a>,
|
||||||
<a href="help-settings.html#Commands">Custom Commands</a></p>
|
<a href="help-custom_commands.html">Custom Commands</a></p>
|
||||||
|
|
||||||
<h3>Create Ignore Entry</h3>
|
<h3>Create Ignore Entry</h3>
|
||||||
<p>Go to <code>Main - Settings - Ignore</code> and make sure <code>Enable Ignore</code>
|
<p>Go to <code>Main - Settings - Ignore</code> and make sure <code>Enable Ignore</code>
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
<h1><a name="top">Release Information</a></h1>
|
<h1><a name="top">Release Information</a></h1>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
<a href="#0.24">0.24</a> |
|
||||||
<a href="#0.23">0.23</a> |
|
<a href="#0.23">0.23</a> |
|
||||||
<a href="#0.22">0.22</a> |
|
<a href="#0.22">0.22</a> |
|
||||||
<a href="#0.21">0.21</a> |
|
<a href="#0.21">0.21</a> |
|
||||||
@ -72,7 +73,52 @@
|
|||||||
full list of changes.</p>
|
full list of changes.</p>
|
||||||
|
|
||||||
<h2>
|
<h2>
|
||||||
<a name="0.23">Version 0.23</a> <a name="latest">(This one!)</a> (2023-02-17)
|
<a name="0.24">Version 0.24</a> <a name="latest">(This one!)</a> (2023-05-09)
|
||||||
|
<a href="#top" class="top">[back to top]</a>
|
||||||
|
</h2>
|
||||||
|
<pre>
|
||||||
|
### 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
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<a name="0.23">Version 0.23</a> (2023-02-17)
|
||||||
<a href="#top" class="top">[back to top]</a>
|
<a href="#top" class="top">[back to top]</a>
|
||||||
</h2>
|
</h2>
|
||||||
<pre>
|
<pre>
|
||||||
|
@ -1030,7 +1030,7 @@
|
|||||||
first message of this user in this channel during the
|
first message of this user in this channel during the
|
||||||
current session (first message in User Dialog).<br />
|
current session (first message in User Dialog).<br />
|
||||||
The messages can be reset without restarting Chatty via the
|
The messages can be reset without restarting Chatty via the
|
||||||
<a href="help.html#commands-clearUserMessages"><code>/clearUserMessages</code></a>
|
<a href="help-builtin_commands.html#commands-clearUserMessages"><code>/clearUserMessages</code></a>
|
||||||
command, so that the prefix triggers again.<br />
|
command, so that the prefix triggers again.<br />
|
||||||
To match on the first message of this user in the channel
|
To match on the first message of this user in the channel
|
||||||
overall, you can match on the message tags that Twitch
|
overall, you can match on the message tags that Twitch
|
||||||
@ -1082,6 +1082,9 @@
|
|||||||
default in the "Substitutes / Lookalikes" dialog in the
|
default in the "Substitutes / Lookalikes" dialog in the
|
||||||
Highlight settings (if no prefix is provided it will use the
|
Highlight settings (if no prefix is provided it will use the
|
||||||
default setting).</li>
|
default setting).</li>
|
||||||
|
<li><code>config:restricted</code> - Match messages by
|
||||||
|
restricted users shown only for moderators. Note that
|
||||||
|
messages by monitored users can not be matched yet.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a name="Highlight_Prefix-blacklist"><code>blacklist:</code></a> to specify one or more text patterns
|
<li><a name="Highlight_Prefix-blacklist"><code>blacklist:</code></a> to specify one or more text patterns
|
||||||
@ -1155,6 +1158,11 @@
|
|||||||
In the Highlight settings you can also enable this for all
|
In the Highlight settings you can also enable this for all
|
||||||
Highlight items, without having to apply this prefix to each
|
Highlight items, without having to apply this prefix to each
|
||||||
one.</li>
|
one.</li>
|
||||||
|
<li><code>config:hide</code> - Don't add the message to the
|
||||||
|
Highlighted/Ignored Messages panel</li>
|
||||||
|
<li><code>config:!log</code> - Don't log the message to the
|
||||||
|
separate highlighted/ignored log file (may still be logged
|
||||||
|
to the channel log file)</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><code>n:</code> to provide a note that is ignored for matching.
|
<li><code>n:</code> to provide a note that is ignored for matching.
|
||||||
|
529
help/help.html
529
help/help.html
@ -5,7 +5,7 @@
|
|||||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1><a name="top">Chatty (Version: 0.23)</a></h1>
|
<h1><a name="top">Chatty (Version: 0.24)</a></h1>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
@ -14,7 +14,7 @@
|
|||||||
<li><a href="#title">Title and Tabs</a></li>
|
<li><a href="#title">Title and Tabs</a></li>
|
||||||
<li><a href="#layouts">Layouts and Tabs</a></li>
|
<li><a href="#layouts">Layouts and Tabs</a></li>
|
||||||
<li><a href="#shortcuts">Hotkeys</a></li>
|
<li><a href="#shortcuts">Hotkeys</a></li>
|
||||||
<li><a href="#commands">Commands</a></li>
|
<li><a href="help-builtin_commands.html">Commands</a></li>
|
||||||
<li><a href="#login">Twitch Login</a></li>
|
<li><a href="#login">Twitch Login</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -249,528 +249,7 @@
|
|||||||
<a name="commands">Commands</a>
|
<a name="commands">Commands</a>
|
||||||
<a href="#top" class="top">[back to menu]</a>
|
<a href="#top" class="top">[back to menu]</a>
|
||||||
</h2>
|
</h2>
|
||||||
<p>All command names are case-insensitive. Something like <code><parameter></code>
|
<p><em>This has been moved to it's <a href="help-builtin_commands.html">own page</a></em></p>
|
||||||
represents a required parameter which must be entered for the command to
|
|
||||||
work properly (you don't enter the surrounding <code>< ></code>,
|
|
||||||
they are just there to show it's a parameter). Equivalently <code>[parameter]</code>
|
|
||||||
represents an optional parameter.</p>
|
|
||||||
|
|
||||||
<p>You can also create your own <a href="help-custom_commands.html">Custom Commands & Customized Context Menus</a>.</p>
|
|
||||||
|
|
||||||
<p><em>Tip:</em> You can also use TAB Completion for many commands.</p>
|
|
||||||
|
|
||||||
<h3><a name="commands-chat">Chat commands:</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><code>/say <message></code> - 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 <a href="help-custom_commands.html#anonymous-custom-commands">Anonymous Custom Command</a> using <code>//say</code>)</li>
|
|
||||||
<li><code>/me <message></code> - Send an action message (* nickname says something)</li>
|
|
||||||
<li><code>/msgreply <message></code> - 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. <code>Reply=/msgreply $$input(Reply to $(nick))</code>)</li>
|
|
||||||
<li><code>/to <nick> [time] [reason]</code> - Timeout the user with the given nickname for "time" seconds (time is optional)</li>
|
|
||||||
<li><code>/timeout</code>, <code>/ban</code>, <code>/unban</code>,
|
|
||||||
<code>/slow</code>, <code>/slowoff</code>,
|
|
||||||
<code>/subscribers</code>, <code>/subscribersoff</code>,
|
|
||||||
<code>/shieldMode</code>, <code>/shieldModeOff</code>,
|
|
||||||
<code>/clear</code>, <code>/mods</code>,
|
|
||||||
<code>/raid</code>, <code>/unraid</code>,
|
|
||||||
<code>/color</code>
|
|
||||||
just like in normal Twitch Chat</li>
|
|
||||||
<li><code>/join <channel></code> - Joins the given channels, see <a href="#join">Joining Channels</a> for more information</li>
|
|
||||||
<li><code>/part</code> or <code>/close</code> - Leaves the current channel</li>
|
|
||||||
<li><code>/rejoin</code> - Rejoins the channel (without clearing users or chat)</li>
|
|
||||||
<li><code>/reconnect</code> - Disconnects and reconnects</li>
|
|
||||||
<li><code>/clearchat</code> - Clears the current chat window of all text (only locally)</li>
|
|
||||||
<li><code>/connection</code> - Show info about the current connection</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p><em>Tip:</em> You can circumvent Chatty commands and send Twitch Chat commands
|
|
||||||
directly by prepending them with a dot <code>.</code> instead of a slash,
|
|
||||||
for example: <code>.mods</code>.</p>
|
|
||||||
|
|
||||||
<h3><a name="commands-twitch">Other Twitch Commands</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#streamhighlights">Stream Highlights / Markers commands</a> (including <code>/marker</code>)</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3><a name="special-commands">Special Commands</a></h3>
|
|
||||||
<p>These commands change how other commands are run.</p>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#commands-chain"><code>/chain</code></a> to run several commands at once</li>
|
|
||||||
<li><a href="#commands-foreach"><code>/foreach</code></a> to run a command for each value in a list</li>
|
|
||||||
<li><a href="#commands-runin"><code>/runin</code></a> to run a command in a specific channel context</li>
|
|
||||||
<li><a href="#commands-timer"><code>/timer</code></a> to run a command on a delay</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3><a name="commands-settings">Settings / Customization commands:</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="help-setting_commands.html">Setting commands</a></li>
|
|
||||||
<li><code>/setcolor <name></code> - Opens the usercolor settings
|
|
||||||
for the given name</li>
|
|
||||||
<li><a href="#addressbook">Addressbook commands</a></li>
|
|
||||||
<li><a href="#streamchat">Stream Chat commands</a></li>
|
|
||||||
<li><code>/favorite [channel]</code>, <code>/unfavorite [channel]</code>
|
|
||||||
- Edit the Channel Favorites list (defaults to current channel if
|
|
||||||
none is given)</li>
|
|
||||||
<li><code>/ignore <user></code>, <code>/unignore <user></code>
|
|
||||||
- Add/remove a user from "Settings - Ignore - Ignored Users" (chat
|
|
||||||
and whisper, only takes effect locally in Chatty),
|
|
||||||
<code>/ignoreChat</code>, <code>/unignoreChat</code>,
|
|
||||||
<code>/ignoreWhisper</code>, <code>/unignoreWhisper</code> to do the
|
|
||||||
same, except it only affects one type of message</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3><a name="commands-gui">GUI commands:</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><code>/popoutchannel</code> - Opens current the channel in a popout</li>
|
|
||||||
<li><code>/echo <text></code> - Outputs the given text as a info message</li>
|
|
||||||
<li><code>/copy</code> - Copies the given text to the clipboard</li>
|
|
||||||
<li><code>/settings</code>, <code>/livestreams</code>, <code>/channeladmin</code>,
|
|
||||||
<code>/channelinfo</code>, <code>/search</code>, <code>/openFollowers</code>,
|
|
||||||
<code>/openSubscribers</code> - Opens the according dialog</li>
|
|
||||||
<li><code>/userinfo <username></code> - To open the User Info Dialog
|
|
||||||
on a specific user of the current channel (if available)</li>
|
|
||||||
<li><code>/insert <text></code> - Inserts the given text into the input box at
|
|
||||||
the current caret position (can be useful for Custom Commands put
|
|
||||||
in a menu)</li>
|
|
||||||
<li><code>/insertword <text></code> - Same as <code>/insert</code>,
|
|
||||||
but adds spaces so it's separated from text before and after (if present)</li>
|
|
||||||
<li><code>/openUrl <url></code> - Opens the given url (see <a href="help-setting_commands.html#openurl">Open URL Command settings</a>)</li>
|
|
||||||
<li><code>/openUrlPrompt <url></code> - Opens the given url after
|
|
||||||
showing a prompt for confirmation</li>
|
|
||||||
<li><code>/openFile <path></code> - Opens the given path in the default application</li>
|
|
||||||
<li><code>/openFilePrompt <path></code> - Opens the given path in the default application (with prompt asking for confirmation)</li>
|
|
||||||
<li><code>/setSize <width> <height></code> - Sets the main window size</li>
|
|
||||||
<li><code>/triggerNotification [-hmt] <text></code> - Triggers a
|
|
||||||
command notification event that was added in the Notification Settings
|
|
||||||
(if none is added, this won't do anything), <code>-h</code> to hide
|
|
||||||
notification popup, <code>-m</code> to don't play sound, <code>-t</code>
|
|
||||||
to specify the title of the notification popup (e.g.
|
|
||||||
<code>/triggerNotification -mt "This is the title" This is the text</code>)</li>
|
|
||||||
<li><a href="#layouts-save-load">Save and load layouts</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3><a name="commands-system">Housekeeping/System commands:</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><code>/uptime</code> - Shows how long Chatty has been running</li>
|
|
||||||
<li><code>/appinfo</code> - Shows Chatty version, uptime, current memory usage, system info and connection status</li>
|
|
||||||
<li><code>/dir</code> / <code>/openDir</code> - Show/open the settings directory</li>
|
|
||||||
<li><code>/wdir</code> / <code>/openWdir</code> - Show/open the current working directory</li>
|
|
||||||
<li><code>/showBackupDir</code> / <code>/openBackupDir</code> - Show/open the <a href="help-guide_folders.html#backup">backup directory</a></li>
|
|
||||||
<li><code>/showDebugDir</code> / <code>/openDebugDir</code> - Show/open the debug log directory</li>
|
|
||||||
<li><code>/showLogDir</code> / <code>/openLogDir</code> - Show/open the chat log directory</li>
|
|
||||||
<li><code>/showJavaDir</code> / <code>/openJavaDir</code> - Show/open the directory of the JRE used by Chatty</li>
|
|
||||||
<li><code>/showFallbackFontDir</code> / <code>/openFallbackFontDir</code> - Show/open the directory where Java looks for <a href="help-troubleshooting.html#font">fallback fonts</a></li>
|
|
||||||
<li><code>/showTempDir</code> / <code>/openTempDir</code> - Show/open the system's temp directory</li>
|
|
||||||
<li><code>/exportText [-sna] <fileName> <text></code> - Write the text to a file in the "exported" directory in the settings directory (UTF-8)
|
|
||||||
<ul>
|
|
||||||
<li><code>-s</code> - no info message when writing successfully</li>
|
|
||||||
<li><code>-n</code> - replace "\n" in the text with a newline</li>
|
|
||||||
<li><code>-a</code> - append to the file (instead of overwriting it)</li>
|
|
||||||
<li><code>-A</code> - append to the file and append a newline character</li>
|
|
||||||
<li><code>-L</code> - append to the file on a new line (prepend a newline character)</li>
|
|
||||||
</ul>
|
|
||||||
(Example: <code>/exportText -n abc.txt one\ntwo</code> - Writes "one" and "two" as separate lines)</li>
|
|
||||||
<li><code>/refresh <emoticons/badges/ffz/ffzglobal/bttvemotes></code>
|
|
||||||
- Refresh the given data from it's respective API:
|
|
||||||
<ul>
|
|
||||||
<li><code>emoticons</code>: Twitch Emotes</li>
|
|
||||||
<li><code>badges</code>: Twitch Badges (current channel)</li>
|
|
||||||
<li><code>ffz</code>: FFZ Emotes (current channel)</li>
|
|
||||||
<li><code>ffzglobal</code>: Global FFZ Emotes</li>
|
|
||||||
<li><code>bttvemotes</code>: BTTV Emotes (global and current channel)</li>
|
|
||||||
</ul>
|
|
||||||
<em>This downloads the lists from the Internet, which may be useful
|
|
||||||
if new emotes have been added (it's basicially like pressing
|
|
||||||
reload in your browser, but only for some select stuff per command).</em></li>
|
|
||||||
<li><code>/releaseinfo</code> - Opens the help with the release information</li>
|
|
||||||
<li><code>/ffz</code> - Shows the FFZ channel emote codes for the current channel</li>
|
|
||||||
<li><a name="commands-clearUserMessages"><code>/clearUserMessages [-an]</code></a>
|
|
||||||
- Clears the message history in the User Dialog for all users in the
|
|
||||||
current channel, <code>-a</code> for all channels, <code>-n</code>
|
|
||||||
to only clear the number of messages (e.g. so the <code>config:firstmsg</code>
|
|
||||||
Highlight prefix matches again)</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3><a name="commands-test">Test commands:</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><code>/testNotification [channel]</code> - Display a test notification (optionally with channel,
|
|
||||||
which means right-clicking on the notification will join that channel)</li>
|
|
||||||
<li><code>/debug simulate <type></code> - Simulates a chat message
|
|
||||||
for testing. See the Chatty source code for possible values.
|
|
||||||
</li>
|
|
||||||
<li><code>/debug</code> 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.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3><a name="commands-advanced">Advanced commands (<em>be careful with these</em>):</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><code>/server <host>[:port]</code> - Connect to a custom server</li>
|
|
||||||
<li><code>/raw <command></code> - Send a raw command to the server</li>
|
|
||||||
<li><code>/changetoken <token></code> - Checks if the given token
|
|
||||||
is valid and sets it as new token if it is</li>
|
|
||||||
<li><code>/proc</code> - <a href="#custom-processes">Execute a system process</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3><a name="commands-chain">Execute several commands</a></h3>
|
|
||||||
<p>The <code>/chain</code> command allows you to run several commands at the
|
|
||||||
same time. Each part separated by a <code>|</code> is basicially
|
|
||||||
entered into the inputbox again.</p>
|
|
||||||
|
|
||||||
<dl class="defList">
|
|
||||||
<dt><code>/chain [command1] | [command2] | [command3]</code></dt>
|
|
||||||
<dd>Runs command1, then command2, then command3. This can be repeated
|
|
||||||
further by adding more parts separated by <code>|</code>.</dd>
|
|
||||||
<dd>Whitespace around each command is trimmed.</dd>
|
|
||||||
<dd><em>Note:</em> A <code>|</code> character in a command would be
|
|
||||||
interpreted as a command separator. Escape <code>|</code> with
|
|
||||||
itself to use the character without special meaning (<code>||</code>).
|
|
||||||
If used in a Custom Command, the function <code>$cs()</code> (as in
|
|
||||||
<u>c</u>hain <u>s</u>afe) can be used around replacements for
|
|
||||||
escaping (e.g. <code>$cs($1-)</code>).</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<p>Examples:</p>
|
|
||||||
<dl class="defList">
|
|
||||||
<dt><code>/chain /echo a | /echo b</code></dt>
|
|
||||||
<dd>Outputs <code>a</code> and <code>b</code></dd>
|
|
||||||
|
|
||||||
<dt><code>/chain /echo a | /echo ||b||</code></dt>
|
|
||||||
<dd>Outputs <code>a</code> and <code>|b|</code></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<p>When using <code>/chain</code> with <a href="help-custom_commands.html">Custom Command</a>
|
|
||||||
replacements, consider the following:</p>
|
|
||||||
|
|
||||||
<dl class="defList">
|
|
||||||
<dt><code>/chain /echo $cs($(msg)) | /echo abc</code></dt>
|
|
||||||
<dd>All replacements are performed before the <code>/chain</code>
|
|
||||||
command is executed, so anything in <code>$(msg)</code> is put in
|
|
||||||
first. If <code>$(msg)</code> contained <code>Hello World!</code>:<br />
|
|
||||||
<code>/chain /echo Hello World! | /echo abc</code></dd>
|
|
||||||
<dt><code>/chain /echo $(msg) | /echo abc</code></dt>
|
|
||||||
<dd>Assuming no escaping were to take place: If <code>$(msg)</code>
|
|
||||||
would contain <code>Hello | World!</code> then the <code>|</code>
|
|
||||||
in it would be interpreted as a command separator and thus <code>World!</code>
|
|
||||||
would be separately entered into the inputbox (so it would output
|
|
||||||
two <code>/echo</code> info messages and send <code>World!</code> to
|
|
||||||
chat):<br />
|
|
||||||
<code>/chain /echo Hello | World! | /echo abc</code></dd>
|
|
||||||
<dd>This could cause serious issues, so it is recommended to always
|
|
||||||
make sure text is safe to be used in the <code>/chain</code> command:
|
|
||||||
<ul>
|
|
||||||
<li>Wrap replacements in the <code>$cs()</code> function (as in <u>c</u>hain <u>s</u>afe)
|
|
||||||
when used in a <code>/chain</code> command to escape
|
|
||||||
<code>|</code> characters: <code>$cs($(msg))</code></li>
|
|
||||||
<li>In addition, any top-level replacement will escape
|
|
||||||
<code>|</code> characters automatically if the Custom Command
|
|
||||||
begins with <code>/chain </code> (so the above
|
|
||||||
example should normally not cause issues). However it is
|
|
||||||
good practice to always use the <code>$cs()</code> function
|
|
||||||
anyway (it won't be escaped twice) in case something changes
|
|
||||||
in the future so that the Custom Command doesn't begin with
|
|
||||||
<code>/chain</code> anymore.<br />
|
|
||||||
You can prevent this automatic escaping (if you are
|
|
||||||
absolutely sure that you want replacements to be able to
|
|
||||||
insert any command) by adding a backslash in front (this
|
|
||||||
doesn't work when you enter the <code>/chain</code> command
|
|
||||||
directly into the inputbox):<br />
|
|
||||||
<code>\/chain /echo Hello | World! | /echo abc</code></li>
|
|
||||||
</ul>
|
|
||||||
When properly escaped, it will turn into this (which outputs
|
|
||||||
<code>Hello | World!</code> and <code>abc</code>):<br />
|
|
||||||
<code>/chain /echo Hello || World! | /echo abc</code>
|
|
||||||
</dd>
|
|
||||||
|
|
||||||
<dt><code>/chain /echo abc $(chain-test)</code></dt>
|
|
||||||
<dd>You can test this by using the <code>$(chain-test)</code> replacement.
|
|
||||||
This should (if e.g. added in the body of a Custom Command) output the following info message:<br />
|
|
||||||
<code>abc | /echo Test || Message</code></dd>
|
|
||||||
<dd>If you add a backslash in front, it will output two info messages:<br />
|
|
||||||
<code>abc</code><br />
|
|
||||||
<code>Test | Message</code></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<h3><a name="commands-foreach">Execute the same command for each entry in a list</a></h3>
|
|
||||||
<p>The <code>/foreach</code> 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 <code>$1</code> replacement containing a single
|
|
||||||
list entry.</p>
|
|
||||||
|
|
||||||
<dl class="defList">
|
|
||||||
<dt><code>/foreach [list] > [command]</code></dt>
|
|
||||||
<dd>The command consist of the comma-separated list, the <code>></code>
|
|
||||||
character and the command to execute (whereas the command is run as
|
|
||||||
it's own Custom Command with the <code>$1</code> replacement).</dd>
|
|
||||||
<dd>List and command are trimmed for leading and trailing whitespace.</dd>
|
|
||||||
<dd><em>Note:</em> Everything after the first <code>></code>
|
|
||||||
character is interpreted as the command. If you want to use a
|
|
||||||
<code>></code> in the list section you have to escape it with
|
|
||||||
itself for it to be treated literally (<code>>></code>). Both the
|
|
||||||
list and command section will consume a single <code>></code> only
|
|
||||||
if they are repeated (<code>>></code> to <code>></code>, but
|
|
||||||
<code>></code> unmodified).</dd>
|
|
||||||
<dd>If you use a Custom Command replacement in the <code>[list]</code>
|
|
||||||
section, make sure the text is safe to use:
|
|
||||||
<ul>
|
|
||||||
<li>Wrap replacements in the <code>$fs()</code> function (as in <u>f</u>oreach <u>s</u>afe)
|
|
||||||
to escape <code>></code> characters: <code>$fs($1-)</code></li>
|
|
||||||
<li>In addition, any top-level replacements will escape <code>></code>
|
|
||||||
characters automatically if the Custom Command begins with
|
|
||||||
<code>/foreach </code>. However it is good practice to
|
|
||||||
always use the <code>$fs()</code> function anyway (it won't
|
|
||||||
be escaped twice) in case something changes in the future so
|
|
||||||
that the Custom Command doesn't begin with <code>/foreach</code>
|
|
||||||
anymore.</li>
|
|
||||||
</ul>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
<p>Examples:</p>
|
|
||||||
<dl class="defList">
|
|
||||||
<dt><code>/foreach a b c > /echo $1</code></dt>
|
|
||||||
<dd>Outputs <code>a</code>, <code>b</code> and <code>c</code> when
|
|
||||||
entered into the chat inputbox.</dd>
|
|
||||||
|
|
||||||
<dt><code>//foreach a b c > /echo \$1</code></dt>
|
|
||||||
<dd>Outputs <code>a</code>, <code>b</code> and <code>c</code> when
|
|
||||||
entered into the chat inputbox. Note that the double slash at the
|
|
||||||
start runs this as a Custom Command, so the <code>$1</code> needs to
|
|
||||||
be escaped, so it is only replaced when the <code>/echo</code> is
|
|
||||||
run for each list entry.</dd>
|
|
||||||
|
|
||||||
<dt><code>/foreach a <b>> c > /echo $1</code></dt>
|
|
||||||
<dd>Outputs <code>a</code>, <code><b></code> and <code>c</code>
|
|
||||||
when entered into the chat inputbox. Note the escaped <code>></code>
|
|
||||||
in the list entry.</dd>
|
|
||||||
|
|
||||||
<dt><code>Open Streams=/foreach $fs($1-) > /openUrl https://twitch.tv/\$1</code> (added as a Streams Context menu entry)</dt>
|
|
||||||
<dd>When several channels are selected and the command run, it will
|
|
||||||
replace <code>$1-</code> with the list of selected streams and then
|
|
||||||
open the URL for each one of them. Note that the <code>$1</code> in
|
|
||||||
the <code>/openUrl</code> command is escaped.</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<p>Detailed Explanation Example:</p>
|
|
||||||
<dl class="defList">
|
|
||||||
<dt><code>/foreachtest /foreach a b c > /echo \$1</code> (added to the Custom Commands list)</dt>
|
|
||||||
<dd>Outputs <code>a</code>, <code>b</code> and <code>c</code> when
|
|
||||||
<code>/foreachtest</code> is entered into the chat inputbox.</dd>
|
|
||||||
<dd>Note the <code>\$1</code> with the escape character in front, which
|
|
||||||
preserves it for replacement when the <code>/echo</code> is run.
|
|
||||||
<p>This is what happens when you enter <code>/foreachtest</code>:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Replacements are performed on the Custom Command
|
|
||||||
<code>/foreach a b c > /echo \$1</code>. Since the <code>$1</code>
|
|
||||||
is escaped it is treated as plain text and not replaced (the
|
|
||||||
<code>\</code> is consumed).</li>
|
|
||||||
<li>The result <code>/foreach a b c > /echo $1</code> is run
|
|
||||||
and the <code>/foreach</code> command will use everything
|
|
||||||
after the <code>></code> as the Custom Command to run (and
|
|
||||||
trim whitespace).</li>
|
|
||||||
<li>The Custom Command <code>/echo $1</code> is run with <code>a</code>
|
|
||||||
as parameter, which results in <code>/echo a</code> being
|
|
||||||
run. The same is repeated for <code>b</code> and <code>c</code>.</li>
|
|
||||||
</ol>
|
|
||||||
|
|
||||||
<p>If the <code>$1</code> is not escaped:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Replacements are performed on the Custom Command
|
|
||||||
<code>/foreach a b c > /echo $1</code>. The <code>$1</code>
|
|
||||||
is replaced with an empty string (no argument given with the
|
|
||||||
<code>/foreachtest</code> command).</li>
|
|
||||||
<li>The result <code>/foreach a b c > /echo </code> is run
|
|
||||||
and the <code>/foreach</code> command will use everything
|
|
||||||
after the <code>></code> as the Custom Command to run (and
|
|
||||||
trim whitespace).</li>
|
|
||||||
<li>The Custom Command <code>/echo</code> is run with <code>a</code>
|
|
||||||
as parameter (although there is no replacement to make use
|
|
||||||
of it), which results in <code>/echo</code> being run,
|
|
||||||
resulting in an error message. The same is repeated for
|
|
||||||
<code>b</code> and <code>c</code>.</li>
|
|
||||||
</ol>
|
|
||||||
<p>If the <code>$1</code> is not escaped, but you provide a command
|
|
||||||
argument, e.g. <code>/foreachtest 123</code>, then it will
|
|
||||||
replace the <code>$1</code> with <code>123</code> in the first
|
|
||||||
step, so <code>/echo 123</code> will be run three times.</p>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<h3><a name="commands-runin">Run a command in a specific open channel</a></h3>
|
|
||||||
<p>The <code>/runin</code> 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.</p>
|
|
||||||
|
|
||||||
<dl class="defList">
|
|
||||||
<dt><code>/runin [channel] [command]</code></dt>
|
|
||||||
<dd>The channel must be a regular channel with or without leading "#" (<code>#channelname</code>)
|
|
||||||
or a whisper channel (<code>$username</code>).</dd>
|
|
||||||
<dd>The command can be anything you could enter into a chat inputbox.</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<p>Examples:</p>
|
|
||||||
<dl class="defList">
|
|
||||||
<dt><code>/runin #chan2 /echo abc</code></dt>
|
|
||||||
<dd>Outputs the info message "abc" in the channel "#chan2" (if it is
|
|
||||||
open in Chatty).</dd>
|
|
||||||
|
|
||||||
<dt><code>//runin #chan2 //echo Channel context: \\$(chan) -> \$(chan)</code></dt>
|
|
||||||
<dd>This example is entered directly into a chat inputbox and outputs
|
|
||||||
an info message about the changed channel context in "#chan2". Let's say the
|
|
||||||
command is entered in the channel "#chan1".</dd>
|
|
||||||
<dd>The command begins with two slashes (<code>//</code>), so it is
|
|
||||||
interpreted as an anonymous Custom Command:
|
|
||||||
<ul>
|
|
||||||
<li><code>\\$(chan)</code> turns into <code>\#chan1</code> (the <code>\\</code> escaped
|
|
||||||
the backslash itself, not the <code>$</code>, so the replacement is performed)</li>
|
|
||||||
<li><code>\$(chan)</code> turns into <code>$(chan)</code> (this <code>\</code> actually escapes the
|
|
||||||
<code>$</code>, so the replacement is not performed here)</li>
|
|
||||||
</ul>
|
|
||||||
The result <code>/runin #chan2 //echo Channel context: \#chan1 -> $(chan)</code>
|
|
||||||
is run, which runs <code>//echo Channel context: \#chan1 -> $(chan)</code>
|
|
||||||
in "#chan2".</dd>
|
|
||||||
<dd>Yet again, the command begins with two slashes (<code>//</code>) and
|
|
||||||
is interpreted as an anonymous Custom Command:
|
|
||||||
<ul>
|
|
||||||
<li><code>\#chan1</code> turns into <code>#chan1</code> (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 <code>$user1</code>
|
|
||||||
then the <code>$</code> would have had to be escaped)</li>
|
|
||||||
<li><code>$(chan)</code> turns into <code>#chan2</code> (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 <code>$user2</code>, since
|
|
||||||
it doesn't get interpreted as a Custom Command after this)</li>
|
|
||||||
</ul>
|
|
||||||
The resulting command <code>/echo Channel context: #chan1 -> #chan2</code>
|
|
||||||
is then run and outputs an info message.
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<h3><a name="commands-timer">Execute a command on a delay</a></h3>
|
|
||||||
<p>The <code>/timer</code> 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 <code>/timer</code>
|
|
||||||
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 <code>-a</code>
|
|
||||||
option is used).</p>
|
|
||||||
|
|
||||||
<p>Certain restrictions apply:</p>
|
|
||||||
<ul>
|
|
||||||
<li>A timed command can't contain another <code>/timer</code> command as well as some other commands.</li>
|
|
||||||
<li>A timed message can only be send to regular channels (not whispers)
|
|
||||||
and only as a moderator of the channel.</li>
|
|
||||||
<li>Parameters from the context of where <code>/timer</code> 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:
|
|
||||||
<ul>
|
|
||||||
<li>In case of <code>Test=/timer 1 /echo $(nick)</code>
|
|
||||||
replacements are performed on <code>/timer 1 /echo $(nick)</code>,
|
|
||||||
resulting in <code>/timer 1 /echo someusername</code>, resulting in
|
|
||||||
<code>/echo someusername</code> one second later.</li>
|
|
||||||
<li>On the other hand <code>Test=/timer 1 //echo \$(nick)</code>
|
|
||||||
replacements are performed on <code>/timer 1 //echo \$(nick)</code>
|
|
||||||
(note that <code>\$(nick)</code> is escaped, so it is not
|
|
||||||
replaced yet), resulting in <code>/timer 1 //echo $(nick)</code>,
|
|
||||||
resulting in <code>//echo $(nick)</code> 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.</li>
|
|
||||||
</ul>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<dl class="defList">
|
|
||||||
<dt><code>/timer [-options] [:id] <duration|time|'list'|'stop'> <timed command></code></dt>
|
|
||||||
<dd>Optionally one or several options (<code>-rs</code>) can be specified:
|
|
||||||
<ul>
|
|
||||||
<li><code>-r</code> (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.)</li>
|
|
||||||
<li><code>-o</code> (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.)</li>
|
|
||||||
<li><code>-s</code> (Silent, starting the timer successfully
|
|
||||||
doesn't output a message.)</li>
|
|
||||||
<li><code>-a</code> (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.)</li>
|
|
||||||
<li>Full example: <code>/timer -rs 10m /echo hello</code>
|
|
||||||
(Outputs "hello" in 10 minutes, keeps it when Chatty is
|
|
||||||
restarted within that time and doesn't output a timer
|
|
||||||
started message.)</li>
|
|
||||||
</ul>
|
|
||||||
</dd>
|
|
||||||
<dd>The id is used to identify a timer after it has been started (e.g.
|
|
||||||
to stop it). Can be anything (no spaces), if it ends with <code>*</code>
|
|
||||||
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.
|
|
||||||
<ul>
|
|
||||||
<li><code>:abc</code> (the id is "abc")</li>
|
|
||||||
<li><code>:abc*</code> (the id might be "abc1", "abc2", "abc3", ...)</li>
|
|
||||||
<li><em>Not specified</em> (the id is an automatically generated number)</li>
|
|
||||||
<li>Full example: <code>/timer :abc 10m /echo hello</code>
|
|
||||||
(outputs "hello" in 10 minutes, with the timer id "abc")</li>
|
|
||||||
</ul>
|
|
||||||
</dd>
|
|
||||||
<dd>The duration is in seconds by default, but you can also append a
|
|
||||||
time unit and several durations that get added up (no spaces):
|
|
||||||
<ul>
|
|
||||||
<li><code>5ms</code> (milliseconds)</li>
|
|
||||||
<li><code>5s</code> (seconds)</li>
|
|
||||||
<li><code>5m</code> (minutes)</li>
|
|
||||||
<li><code>5h</code> (hours)</li>
|
|
||||||
<li><code>5h10m</code> (5 hours 10 minutes)</li>
|
|
||||||
<li><code>5h10</code> (5 hours 10 minutes)</li>
|
|
||||||
<li><code>5h10m30</code> (5 hours 10 minutes 30 seconds)</li>
|
|
||||||
<li>Full example: <code>/timer 5h /echo hello</code> (outputs "hello" in 5 hours)</li>
|
|
||||||
</ul>
|
|
||||||
</dd>
|
|
||||||
<dd>An absolute time is written like a digital clock in 24hr format, a
|
|
||||||
date can be added in front, in which case it has to be enclosed in
|
|
||||||
<code>[ ]</code>. 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:
|
|
||||||
<ul>
|
|
||||||
<li><code>5:30</code> (5:30 in the morning)</li>
|
|
||||||
<li><code>17:30</code> (5:30 in the afternoon)</li>
|
|
||||||
<li><code>5:30:50</code> (5:30 and 50 seconds in the morning)</li>
|
|
||||||
<li><code>[05:20:00]</code> (the time can also be enclosed in
|
|
||||||
<code>[ ]</code>)</li>
|
|
||||||
<li><code>[2022-01-10 5:30]</code> (when including the date the
|
|
||||||
<code>[ ]</code> is required and the date has to always be
|
|
||||||
the full date in the format YYYY-MM-DD)</li>
|
|
||||||
<li>Full example: <code>/timer 16:30 /echo hello</code> (outputs
|
|
||||||
the info message "hello" at 4:30 PM)</li>
|
|
||||||
</ul>
|
|
||||||
</dd>
|
|
||||||
<dd>Output info about currently active timers:
|
|
||||||
<ul>
|
|
||||||
<li><code>list</code> (Lists all timers, soonest to run first.)</li>
|
|
||||||
<li><code>-q list</code> (Same as above, but the list is in timer start order.)</li>
|
|
||||||
<li><code>:a* list</code> (Outputs information about timers with ids that begin with "a".)</li>
|
|
||||||
<li><code>list a*</code> (Same as above, but id in place of the timed command.)</li>
|
|
||||||
<li>Full example: <code>/timer list a*</code> (Shows all active timers with ids that begin with "a".)</li>
|
|
||||||
</ul>
|
|
||||||
</dd>
|
|
||||||
<dd>Stop active timers:
|
|
||||||
<ul>
|
|
||||||
<li><code>:abc1 stop</code> (Stops a timer with the id "abc1".)</li>
|
|
||||||
<li><code>stop abc1</code> (Same as above, but id in place of the timed command.)</li>
|
|
||||||
<li><code>:abc* stop</code> (Stops all timers with ids that begin with "abc".)</li>
|
|
||||||
<li><code>:* stop</code> (Stops all active timers.)</li>
|
|
||||||
<li>Full example: <code>/timer stop *</code> (Stops all active timers.)</li>
|
|
||||||
</ul>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<h2>
|
<h2>
|
||||||
<a name="login">Twitch Login</a>
|
<a name="login">Twitch Login</a>
|
||||||
@ -865,7 +344,7 @@
|
|||||||
<li>The "Main - Connect" dialog when connecting</li>
|
<li>The "Main - Connect" dialog when connecting</li>
|
||||||
<li>The "Channels - Join Channel" dialog</li>
|
<li>The "Channels - Join Channel" dialog</li>
|
||||||
<li>The "Channels - Favorites / History" dialog</li>
|
<li>The "Channels - Favorites / History" dialog</li>
|
||||||
<li>The <code>/join</code> <a href="#commands">command</a></li>
|
<li>The <code>/join</code> <a href="help-builtin_commands.html#commands-chat">command</a></li>
|
||||||
<li>The "Channels - Live Channels" dialog context menu or (if configured
|
<li>The "Channels - Live Channels" dialog context menu or (if configured
|
||||||
that way) via double-click or space while a stream is selected</li>
|
that way) via double-click or space while a stream is selected</li>
|
||||||
<li>Right-clicking a Stream Status Notification</li>
|
<li>Right-clicking a Stream Status Notification</li>
|
||||||
|
18
index.html
18
index.html
@ -16,9 +16,9 @@ function loaded() {
|
|||||||
{ ceiling: null, text: "$years years ago" }
|
{ ceiling: null, text: "$years years ago" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
document.getElementById("ago").innerHTML = "Version 0.23 released "+humanized_time_span("2023/02/17", Date(), custom_date_formats)+"";
|
document.getElementById("ago").innerHTML = "Version 0.24 released "+humanized_time_span("2023/05/09", Date(), custom_date_formats)+"";
|
||||||
|
|
||||||
getDownloads("v0.23");
|
getDownloads("v0.24");
|
||||||
|
|
||||||
slideshow_init("slideshow");
|
slideshow_init("slideshow");
|
||||||
}
|
}
|
||||||
@ -158,7 +158,7 @@ function getDownloads(tag) {
|
|||||||
|
|
||||||
|
|
||||||
<h2 id="download">Download</h2>
|
<h2 id="download">Download</h2>
|
||||||
<p>Choose one of the following downloads of <strong>Chatty Version 0.23</strong><span id="dlCount" style="margin-bottom:7px;"></span>. For older versions or betas go to the <a href="https://github.com/chatty/chatty/releases">GitHub Releases</a>. Checksums for release files are available as <a href="https://tduva.com/chatty/checksums/v0.23/">SHA-256 hashes</a>.</p>
|
<p>Choose one of the following downloads of <strong>Chatty Version 0.24</strong><span id="dlCount" style="margin-bottom:7px;"></span>. For older versions or betas go to the <a href="https://github.com/chatty/chatty/releases">GitHub Releases</a>. Checksums for release files are available as <a href="https://tduva.com/chatty/checksums/v0.24/">SHA-256 hashes</a>.</p>
|
||||||
<p>If this is your first time using Chatty check out the <a href="help/help-getting-started.html"><strong>Getting Started Guide</strong></a>.</p>
|
<p>If this is your first time using Chatty check out the <a href="help/help-getting-started.html"><strong>Getting Started Guide</strong></a>.</p>
|
||||||
|
|
||||||
<h3>Windows</h3>
|
<h3>Windows</h3>
|
||||||
@ -170,11 +170,11 @@ function getDownloads(tag) {
|
|||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.23/Chatty_0.23_win_standalone_setup.exe"><strong>Download Windows Standalone (Installer)</strong></a> <span class="recommended"><sup>Recommended</sup></span></dt>
|
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.24/Chatty_0.24_win_standalone_setup.exe"><strong>Download Windows Standalone (Installer)</strong></a> <span class="recommended"><sup>Recommended</sup></span></dt>
|
||||||
<dd>Install into a folder of your choice and start <code>Chatty.exe</code> (or optionally created shortcuts).</dd>
|
<dd>Install into a folder of your choice and start <code>Chatty.exe</code> (or optionally created shortcuts).</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.23/Chatty_0.23_win_standalone.zip">Download Windows Standalone (.zip)</a></dt>
|
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.24/Chatty_0.24_win_standalone.zip">Download Windows Standalone (.zip)</a></dt>
|
||||||
<dd>Extract the .zip into a folder of your choice and start <code>Chatty.exe</code>.</dd>
|
<dd>Extract the .zip into a folder of your choice and start <code>Chatty.exe</code>.</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
@ -182,11 +182,11 @@ function getDownloads(tag) {
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.23/Chatty_0.23_win_setup.exe">Download JAR-Version (Installer)</a></dt>
|
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.24/Chatty_0.24_win_setup.exe">Download JAR-Version (Installer)</a></dt>
|
||||||
<dd>Install into a folder of your choice and start <code>Chatty.jar</code> (or optionally created shortcuts).</dd>
|
<dd>Install into a folder of your choice and start <code>Chatty.jar</code> (or optionally created shortcuts).</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.23/Chatty_0.23.zip">Download JAR-Version (.zip)</a></dt>
|
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.24/Chatty_0.24.zip">Download JAR-Version (.zip)</a></dt>
|
||||||
<dd>Extract the .zip into a folder of your choice and start <code>Chatty.jar</code>.</dd>
|
<dd>Extract the .zip into a folder of your choice and start <code>Chatty.jar</code>.</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
@ -194,7 +194,7 @@ function getDownloads(tag) {
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
<h3>Non-Windows</h3>
|
<h3>Non-Windows</h3>
|
||||||
<p>For OS other than Windows (e.g. Linux or MacOS) you will need to download the <a href="https://github.com/chatty/chatty/releases/download/v0.23/Chatty_0.23.zip">JAR-Version (.zip)</a> and must have Java 8 or later installed on your system. Extract the .zip into a folder of your choice and start <code>Chatty.jar</code>.</p>
|
<p>For OS other than Windows (e.g. Linux or MacOS) you will need to download the <a href="https://github.com/chatty/chatty/releases/download/v0.24/Chatty_0.24.zip">JAR-Version (.zip)</a> and must have Java 8 or later installed on your system. Extract the .zip into a folder of your choice and start <code>Chatty.jar</code>.</p>
|
||||||
|
|
||||||
<h2 id="feedback">Contact</h2>
|
<h2 id="feedback">Contact</h2>
|
||||||
<p>If you have any feedback or questions feel free to contact me. You can <a href="https://discord.gg/WTuqGeJ">join the Chatty Discord</a> <sup>preferred</sup>, write me an <a href="mailto:chattyclient@gmail.com">E-Mail</a> or use <a href="https://twitter.com/chattyclient">Twitter</a>.</p>
|
<p>If you have any feedback or questions feel free to contact me. You can <a href="https://discord.gg/WTuqGeJ">join the Chatty Discord</a> <sup>preferred</sup>, write me an <a href="mailto:chattyclient@gmail.com">E-Mail</a> or use <a href="https://twitter.com/chattyclient">Twitter</a>.</p>
|
||||||
@ -226,7 +226,7 @@ function getDownloads(tag) {
|
|||||||
<p>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.</p>
|
<p>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.</p>
|
||||||
<p>You can also say thanks by <a href="https://www.patreon.com/tduva">supporting me on Patreon</a> (you can get a badge!), which is highly appreciated and helps to ensure continued development.</p>
|
<p>You can also say thanks by <a href="https://www.patreon.com/tduva">supporting me on Patreon</a> (you can get a badge!), which is highly appreciated and helps to ensure continued development.</p>
|
||||||
|
|
||||||
<iframe src="https://tduva.com/res/patrons/page" width="800" height="400" style="width: 100%;border:none;margin-top:2px;"></iframe>
|
<iframe src="https://tduva.com/res/patrons/page" width="800" height="560" style="width: 100%;border:none;margin-top:2px;"></iframe>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
Reference in New Issue
Block a user