v0.14 files

This commit is contained in:
tduva 2021-03-04 11:21:03 +01:00
parent 3e4fb5055b
commit bdcefef978
10 changed files with 418 additions and 169 deletions

View File

@ -25,6 +25,7 @@
<a href="#replacements">Replacements</a>
<ul>
<li><a href="#simple-replacements">Simple Replacements</a></li>
<li><a href="#escaping">Escaping / Literal Text</a></li>
<li><a href="#parameters-context">Pre-defined Parameters</a></li>
<li><a href="#functions">Functions</a></li>
<li><a href="#custom-replacements">Custom Replacements</a></li>
@ -90,7 +91,7 @@
defined, for example when adding <a href="#inline-commands">Inline-Commands</a>
to the User Dialog or Context Menus.</p>
<p>You can also execute Anynomous Custom Commands directly from the
<p>You can also execute Anonymous Custom Commands directly from the
inputbox, by prepending <code>//</code>, which allows you to use
Replacements:</p>
@ -112,6 +113,7 @@
<h2><a name="replacements">Replacements</a></h2>
<ul>
<li><a href="#simple-replacements">Simple Replacements</a></li>
<li><a href="#escaping">Escaping / Literal Text</a></li>
<li><a href="#parameters-context">Pre-defined Parameters</a></li>
<li><a href="#functions">Functions</a></li>
<li><a href="#custom-replacements">Custom Replacements</a></li>
@ -141,10 +143,34 @@
parameter that is necessary for the command to make sense is actually
being supplied.</p>
<p class="note"><em>Note:</em> If you want to use a dollar sign
<code>$</code> without it having a special meaning, you can escape it
with a backslash: <code>\$</code> . To use a backslash literally instead
of as an escaping character, it must be escaped as well: <code>\\</code> .</p>
<h3><a name="escaping">Escaping / Literal Text</a></h3>
<p>If you want to use a dollar sign <code>$</code> literally, without it
beginning a replacement, you can escape it with a backslash:
<code>\$</code>. A backslash will always interpret the following
character as a regular character without a special meaning, while
the backslash itself will not show up in the result.</p>
<p>Example: <code>$replace($1-,(\\w+),(\$1\),regRef)</code></p>
<p>This <a href="#functions">function</a> (surrounds all
consecutive word characters with brackets) contains some escaping:</p>
<ul>
<li>The <code>(\\w+)</code> turns into the plain text <code>(\w+)</code>. The backslash needs to be escaped so
it actually shows up for the regex.</li>
<li>The <code>(\$1\)</code> turns into the plain text <code>($1)</code>. The dollar sign is used for the regex,
not an actual Custom Command replacement and the closing bracket
needs to be escaped here because the following function parameter is
optional, so the bracket would close the function.</li>
</ul>
<p>Alternatively you can use <code>$"&lt;literal text&gt;"</code> which
interprets everything inside the quotes as literal text without any
special meaning. To use a quote inside the literal text, it can be
doubled: <code>$"This is a dollar sign: ""$"""</code> turns into the
plain text <code>This is a dollar sign: "$"</code>. Instead of <code>"</code>
you can also use <code>`</code> (backquote) or <code>'</code> (single quote):
<code>$`This is a dollar sign: "$"`</code> is equivalent to the above.</p>
<p>The previous example could also be written like this: <code>$replace($1-,$"(\w+)",$"($1)",regRef)</code></p>
<h3><a name="simple-replacements">Simple Replacements</a></h3>
<p>A basic use of replacements is using the <strong>short notation</strong>
@ -239,18 +265,13 @@
</tr>
<!-- User Context Menu -->
<tr>
<th rowspan="7">User Context Menu</th>
<td><code>1</code>, <code>nick</code></td>
<th rowspan="5">User Context Menu</th>
<td><code>1</code></td>
<td>Name of the user</td>
</tr>
<tr>
<td><code>display-nick</code>, <code>custom-nick</code>,
<code>full-nick</code></td>
<td>Variations of the name of the user. <code>display-nick</code>
may contain spaces for some users. <code>custom-nick</code> may
also be the <a href="help.html#customNames">Custom Name</a> you
set, <code>full-nick</code> is what is displayed in the userlist
(includes status symbols)</td>
<td>Various</td>
<td><a href="#user-identifiers">Various user-related identifiers</a></td>
</tr>
<tr>
<td><code>msg</code></td>
@ -270,14 +291,6 @@
approving or denying the message (when opened by clicking on
an appropriate message in chat)</td>
</tr>
<tr>
<td><code>user-id</code></td>
<td>The Twitch ID of the user</td>
</tr>
<tr>
<td><code>twitch-badge-info</code></td>
<td>Textual info of the user's Twitch badges (may change)</td>
</tr>
<!-- User Dialog -->
<tr>
<th rowspan="7">User Dialog</th>
@ -361,7 +374,24 @@
</tr>
</table>
<p>Example with pre-defined parameters:</p>
<h3><a name="user-identifiers">User-related Identifiers</a></h3>
<p>These are available where a user is involved, such as the User Dialog and
User Context Menu. In some contexts they may also be available with the
<code>my-</code> prefix for your own user info (e.g. <code>my-full-nick</code>).</p>
<ul>
<li><code>nick</code> - Name of the user, maybe capitalized</li>
<li><code>display-nick</code> - Same as <code>nick</code>, but may not match the regular username (spaces, completely different)</li>
<li><code>display-nick2</code> - Same as <code>display-nick</code>, but contains the regular username in parentheses if necessary</li>
<li><code>custom-nick</code> - Same as <code>display-nick</code>, but may also be the <a href="help.html#customNames">Custom Name</a> you set</li>
<li><code>full-nick</code> - The same name that is displayed in the userlist (includes status symbols)</li>
<li><code>full-nick2</code> - Same as <code>full-nick</code>, but contains the regular username in parentheses if necessary</li>
<li><code>special-nick</code> - Returns <code>true</code> if the user has a display name not matching the regular username</li>
<li><code>user-id</code> - The Twitch ID of the user (if available)</li>
<li><code>twitch-badges</code> - A textual representation of the Twitch badges (if available)</li>
<li><code>twitch-badge-info</code> - Another textual representation of the Twitch badges (if available)</li>
</ul>
<h3>Pre-defined Parameters Example</h3>
<dl class="defList">
<dt><code>/streaminfo /echo [Stream Status] $(streamstatus) [Uptime] $(streamuptime)</code></dt>
<dd>Entering <code>/streaminfo</code> outputs an info message (only for
@ -425,19 +455,32 @@
referring to <code>Fremily</code> turns into <code>FREMILY</code>.</dd>
<dt><code>$replace(&lt;input&gt;,&lt;search&gt;,&lt;replace&gt;,[method])</code>
<dd>Search and replace in text. Especially when using Regex, remember
escaping of <code>\</code> (<code>\\</code>) and <code>$</code> (<code>\$</code>).</dd>
<dd>Search and replace in text.</dd>
<dd>Especially when using Regex, remember
escaping <code>\</code> (<code>\\</code>) and <code>$</code> (<code>\$</code>)
when they should e.g. be used in regex rather than interpreted as special Custom Command characters.
Instead of escaping each special character individually, you can also
use <a href="#escaping">Literal Text</a>.</dd>
<dd>Methods are:
<ul style="margin-top:0">
<li><em>Not specified</em> - Literal case-insensitive search</li>
<li><code>cs</code> - Literal case-sensitive search</li>
<li><code>reg</code> - Regular Expression search</li>
<li><code>regRef</code> - Regular Expression search, with references to groups (<code>\$1</code>) in the replacement</li>
<li><code>regRef</code> - Regular Expression search, with references to groups via <code>\$1</code><br />
Note: The "replace" text basicially gets fed to the <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#replaceAll-java.lang.String-java.lang.String-">String.replaceAll()</a> method as "replacement". The <code>$1</code> in this case does not refer to a Custom Command replacement, but something that the replaceAll() method uses, so it needs to be escaped in the Custom Command function, either by using <code>\$1</code> or using <a href="#escaping">Literal Text</a>. In addition, if <code>$</code> or <code>\</code> should show up literally instead of being interpreted by the replaceAll() method then they need to be escaped again (e.g. <code>$replace(..,..,Dollar: \\\$1 Ref: \$1,regRef)</code>, whereas <code>Dollar: \$1 Ref: $1</code> would be given to the replaceAll() method).</li>
<li><code>regFirst</code>, <code>refFirstRef</code> - Same as above, but only replace first occurence</li>
<li><code>regCustom</code> - Regular Expression search, the replace parameter has access to match values and is
executed for each match (<code>$1-</code> full match, <code>$(g1)</code> first group in the search regex
if available, <code>$(g2)</code> second group, ..).</li>
<li><code>regFunc</code> - Regular Expression search, the replace must be the name
of a Custom Replacement which is called with the same values as <code>regCustom</code>
(doesn't always work in Custom Commands, can use <code>regCustom</code>
with e.g. <code>$(_&lt;name&gt;,$1-)</code> instead).</li>
</ul>
</dd>
<dd><em>Example:</em> <code>$replace(A b and another B,b,bee)</code> turns into <code>A bee and another bee</code></dd>
<dd><em>Example:</em> <code>$replace(Was timed out for 30 seconds,.*?(\\d+) seconds,Number of seconds: \$1,regRef)</code> turns into <code>Number of seconds: 30</code></dd>
<dd><em>Example:</em> <code>$replace($1-,$"~([a-z]+)~",<span style="text-decoration: underline">$replace($(g1),$"(\w)",$"$1+",regRef)</span>,regCustom)</code> adds <code>+</code> behind every character surrounded by <code>~</code> (the inner <code>$replace()</code> is in the <code>replace</code> parameter and executed for each match)</dd>
<dt><code>$rand([output1],[output2],[output3],..)</code></dt>
<dd>Randomly chooses one of the outputs.</dd>
@ -567,6 +610,23 @@
name you are logged into Chatty with.</dd>
<dd><em>Example:</em> <code>$if($get(ontop),ONTOP)</code> will return
<code>ONTOP</code> only if "View - Always on top" is enabled.</dd>
<dt><code>$request(&lt;url&gt;,[options])</code></dt>
<dd>Performs a GET request on the given http/https URL and returns the
body of the reponse interpreted as UTF-8 encoded text. If an error
occurs the response will be empty.</dd>
<dd>Options:
<ul>
<li><code>error</code> - A request error will return an error
message instead of an empty response.</li>
</ul></dd>
<dd><em>Note:</em> Normally Custom Commands are performed instantaneously, however the
replacements for any Custom Command that contains the <code>$request()</code>
function will be performed asynchronously so that it can complete
the request without freezing the GUI. This means the result of the
Custom Command may be run seconds or more later.</dd>
<dd><em>Tip:</em> Open "Extra - Debug window" to view debug output of
the requests being performed.</dd>
</dl>
<p class="note"><em>Tip:</em> Enter e.g. <code>//echo $datetime()</code>
@ -611,9 +671,23 @@
creates a mention if the first parameter isn't equal to the current
channel.</p>
<p class="note"><em>Note:</em> Custom identifiers always start with an
underscore and can themselves not contain replacements with custom
identifiers (well they technicially can, but they won't get replaced).</p>
<p>The data that can be accessed via replacements is the same as in the
command it is used in, so in this example the text provided after the
<code>/faq</code> is available via the <code>$1-</code> replacement.</p>
<p>Optionally you can also provide a second parameter in a Custom Replacement
that overwrites the default value of the <code>$1-</code> replacement:</p>
<p><code>/faq $(_m,$(custom-nick))FAQ: https://pastebin.com/KySx3KDu</code></p>
<p>This will make whatever value is contained in <code>$(custom-nick)</code>
available in <code>$1-</code> instead of the default.</p>
<p class="note"><em>Note:</em> Custom Replacement identifiers always start
with an underscore.</p>
<p class="note"><em>Note:</em> Custom Replacements don't work when placed
inside eachother. So for example in <code>_abc Abc: $(_m)</code> the <code>$(_m)</code> will
always be empty (whether it's defined in the Custom Commands list or not).</p>
<h2><a name="menus">Custom Context Menus / User Dialog Buttons</a></h2>

View File

@ -118,7 +118,7 @@
<p>To join channels directly out of the <code>Live Channels</code>-dialog
right-click on a stream to open the context menu and then select <code>Join channel</code>
to join the channel for that stream and if you want also open the stream in
your browser or <a href="help-livestreamer.html">Livestreamer</a>.</p>
your browser or <a href="help-livestreamer.html">Streamlink</a>.</p>
<h2>More stuff you might want to try out..</h2>
<ul>

View File

@ -19,59 +19,11 @@
</ul>
<p>If you can't fix this problem and there are no other error messages that
may indicate what is going wrong, then you can manually open the necessary
page:</p>
<table class="loginlinks">
<tr>
<th></th>
<th>Chat</th>
<th>User read</th>
<th>Editor</th>
<th>Commercials</th>
<th>Subscribers</th>
<th>Follow</th>
</tr>
<tr>
<td><a href="https://id.twitch.tv/oauth2/authorize?response_type=token&client_id=spyiu9jqdnfjtwv6l1xjk5zgt8qb91l&redirect_uri=http://127.0.0.1:61324/token/&force_verify=true&scope=chat_login+channel_editor+channel_commercial+user_read+channel_subscriptions+user_follows_edit">Request new login</a></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="https://id.twitch.tv/oauth2/authorize?response_type=token&client_id=spyiu9jqdnfjtwv6l1xjk5zgt8qb91l&redirect_uri=http://127.0.0.1:61324/token/&force_verify=true&scope=chat_login+channel_editor+channel_commercial+user_read+channel_subscriptions">Request new login</a></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="https://id.twitch.tv/oauth2/authorize?response_type=token&client_id=spyiu9jqdnfjtwv6l1xjk5zgt8qb91l&redirect_uri=http://127.0.0.1:61324/token/&force_verify=true&scope=chat_login+user_read">Request new login</a></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><a href="https://id.twitch.tv/oauth2/authorize?response_type=token&client_id=spyiu9jqdnfjtwv6l1xjk5zgt8qb91l&redirect_uri=http://127.0.0.1:61324/token/&force_verify=true&scope=chat_login">Request new login</a></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<p>Since the webserver in Chatty won't run if you got any of the aforementioned
errors, your browser will tell you it can't load the page when you get to
<code>http://127.0.0.1:61324</code>. <strong>Read on in the next section</strong>, especially
may indicate what is going wrong, then you can still proceed with opening the
link by clicking on "Open URL" in the dialog (or <a href="https://id.twitch.tv/oauth2/authorize?response_type=token&client_id=spyiu9jqdnfjtwv6l1xjk5zgt8qb91l&redirect_uri=http://127.0.0.1:61324/token/&force_verify=true&scope=user_read+channel_commercial+user_subscriptions+chat_login+user_follows_edit+channel:read:redemptions+channel_editor+user:edit:broadcast+channel_subscriptions+channel:moderate">this link</a>, which has all permissions Chatty needs). Chatty won't be able to
receive the token automatically (your browser will tell you that it can't
load the page when you get to <code>http://127.0.0.1:61324</code>), so you have to
<strong>read on in the next section</strong>, especially
<a href="#addtokenmanually">Manually add the login into Chatty</a>.</p>
<h2>The browser says it can't open the page after you authorized Chatty</h2>

View File

@ -1,41 +1,41 @@
<!DOCTYPE html>
<html>
<title>Chatty - Livestreamer / Streamlink</title>
<title>Chatty - Streamlink</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><a name="top">Livestreamer / Streamlink</a></h1>
<h1><a name="top">Streamlink</a></h1>
<p>
<a href="#usage">Usage</a> |
<a href="#settings">Settings</a> |
<a href="#troubleshooting">Troubleshooting</a>
</p>
<p><a href="https://github.com/chrippa/livestreamer">Livestreamer</a>
<p><a href="https://streamlink.github.io/">Streamlink</a>
is a commandline program that can be used to watch streams in a player like
VLC Player. It has to be downloaded and installed separately from Chatty.</p>
<p><strong>Note:</strong> Since Livestreamer doesn't appear to be developed anymore, there is an
updated fork called <a href="https://streamlink.github.io/">Streamlink</a>, which works the same way. If you want to
use Streamlink with Chatty, simply change the <code>Base command</code>
to <code>streamlink</code> (or, as with Livestreamer, put the whole path to the program
if that is required in your case). Currently Streamlink appears to be using the
same commandline interface, so everything should work as usual (after
changing the <code>Base command</code>). If they do change the
interface, changes in Chatty may be required.</p>
<p><strong>Note:</strong> Streamlink is a fork of <a href="https://github.com/chrippa/livestreamer">Livestreamer</a>
and more up-to-date, but mostly works the same way. If you want to use
Streamlink with Chatty you may have to change the <code>Base command</code>
to <code>streamlink</code> (or, as with Livestreamer, put the whole path
to the program if that is required in your case). Currently Streamlink
appears to be using the same commandline interface, so everything should
work as usual (after changing the <code>Base command</code>). If they do
change the interface, changes in Chatty may be required.</p>
<h2><a name="usage">Usage</a></h2>
<p>You can open the Livestreamer dialog that Chatty provides via
<code>Extra - Livestreamer</code>, where you can directly run Livestreamer
<p>You can open the Streamlink dialog that Chatty provides via
<code>Extra - Streamlink</code>, where you can directly run Streamlink
and change some settings.</p>
<p>Each time you open a stream via the dialog or a context menu, a tab is
added to the dialog where the output of the Livestreamer process is
added to the dialog where the output of the Streamlink process is
redirected to. If you open a stream with the same stream name and quality you already
have open in a tab whose process isn't currently running, then that tab will
be reused.</p>
<p>The tab of a stream is automatically closed when you close the Video
Player opened by Livestreamer, if the dialog isn't currently open. Otherwise
Player opened by Streamlink, if the dialog isn't currently open. Otherwise
you have to close it yourself by using the <code>Close</code>-button on the
top right, which turns into an <code>End process</code>-button as long as
the process is still running. The <code>Retry</code>-button can be used to
@ -43,25 +43,25 @@
stream, but you want to retry now because you know it's come online).</p>
<h2><a name="settings">Settings</a></h2>
<p>The settings can be changed in the Livestreamer dialog.</p>
<p>The settings can be changed in the Streamlink dialog.</p>
<dl class="dl-settings">
<dt>Enable context menu entry</dt>
<dd>Adds a Livestreamer submenu to all context menus that can be used to
<dd>Adds a Streamlink submenu to all context menus that can be used to
open streams (for example right-click on channel, username or Live
Streams dialog).</dd>
<dt>Show dialog when opening stream</dt>
<dd>Auto-opens the Livestreamer Dialog when you open a stream out of a
<dd>Auto-opens the Streamlink Dialog when you open a stream out of a
context menu.</dd>
<dt>Auto close dialog when starting player</dt>
<dd>Auto-closes the Livestreamer Dialog when the text <code>Starting player</code>
<dd>Auto-closes the Streamlink Dialog when the text <code>Starting player</code>
comes up in the log.</dd>
<dt>Context menu qualities</dt>
<dd>You can customize which quality options appear in the context menu.
The options you enter here are directly given as a parameter to
Livestreamer, except <code>Select</code> which tells Chatty you want
Streamlink, except <code>Select</code> which tells Chatty you want
to select a quality in the dialog.</dd>
<dd>Separate qualities by space or comma, add a <code>|</code> (vertical
bar) to add a separator to the menu.</dd>
@ -78,70 +78,53 @@
</ul>
</dd>
<dt>Base command (Livestreamer path and parameters)</dt>
<dd>This must contain the Livestreamer executable, including any
<dt>Base command (Streamlink path and parameters)</dt>
<dd>This must contain the Streamlink executable, including any
commandline options that you always want to be included when running
Livestreamer out of Chatty.</dd>
Streamlink out of Chatty.</dd>
<dd>The URL and quality are automatically appended to this when running
Livestreamer, so the overall command that is executed is build like
Streamlink, so the overall command that is executed is build like
this:
<code>&lt;Base&nbsp;command&gt; &lt;url&gt;&nbsp;&lt;quality&gt;</code>.</dd>
<dd>You can use the variables <code>$stream</code>, <code>$url</code>
and <code>$quality</code> in this setting (see Examples).</dd>
<dd>The default is just <code>livestreamer</code>, which is sufficient
if Livestreamer is correctly included in the systems PATH variable,
<dd>The default is just <code>streamlink</code>, which is sufficient
if Streamlink is correctly included in the systems PATH variable,
but you may also specify the full path.</dd>
<dd>Remember to surround the path or any parameters with quotes if they
contain spaces, so the commandline knows they belong together.</dd>
<dd><em>Examples:</em>
<ul class="example-list">
<li><code>"C:\My&nbsp;Programs\Livestreamer\livestreamer.exe"</code><br />
(specify full path to the Livestreamer executable)</li>
<li><code>"C:\My Programs\Livestreamer\livestreamer.exe" --player "C:\Program Files\MPC-HC\mpc-hc64.exe"</code><br />
(specify full path to Livestreamer and use a different player)</li>
<li><code>/usr/local/bin/livestreamer</code><br />
(this might work on Linux/Mac if it can't find Livestreamer
<li><code>"C:\My&nbsp;Programs\Streamlink\streamlink.exe"</code><br />
(specify full path to the Streamlink executable)</li>
<li><code>"C:\My Programs\Streamlink\streamlink.exe" --player "C:\Program Files\MPC-HC\mpc-hc64.exe"</code><br />
(specify full path to Streamlink and use a different player)</li>
<li><code>/usr/local/bin/streamlink</code><br />
(this might work on Linux/Mac if it can't find Streamlink
without the full path)</li>
<li><code>livestreamer -p "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe --meta-title $stream/$quality"</code><br />
<li><code>streamlink -p "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe --meta-title $stream/$quality"</code><br />
(change VLC Player window title to something more descriptive)</li>
</ul>
</dd>
<dt>Use Authorization (Twitch Oauth Token)</dt>
<dd>Tell Livestreamer to authenticate at Twitch with your Chatty access
<dt><span class="del">Use Authorization (Twitch Oauth Token)</span></dt>
<dd>Tell Streamlink to authenticate at Twitch with your Chatty access
token.</dd>
<dd>Enabling this may help if you get an error when running Livestreamer
(Bad Request).</dd>
<dd>This is necessary for sub-only streams.</dd>
<dd>This option has been <a href="https://streamlink.github.io/changelog.html#streamlink-2-0-0-2020-12-22">removed</a>
from Streamlink and thus also from Chatty.</dd>
</dl>
<h2><a name="troubleshooting">Troubleshooting</a></h2>
<h3>Bad Request</h3>
<p>Recently Twitch changed their API to require a Client ID being supplied,
which Livestreamer doesn't do by default, so you may get a Bad Request
error. You can fix this either by:</p>
<ul>
<li>Enabling the <code>Use Authorization</code> setting to authenticate
with Twitch, which makes the Twitch API derive the Client ID from
the access token.</li>
<li>Adding a Client ID to the <code>Base command</code>, for eaxmple to
add Livestreamer's Client ID:<br />
<code>livestreamer --http-header Client-ID=ewvlchtxgqq88ru9gmfp1gmyt6h2b93</code>
</li>
</ul>
<p>If you're using Streamlink this shouldn't be an issue for you since it
has been updated accordingly.</p>
<h3>Can't run Livestreamer</h3>
<h3>Can't run Streamlink</h3>
<p>If you get an error like <code>Error: java.io.IOException: Cannot run
program "&lt;...&gt;": CreateProcess error=2 [..]</code>, then
Chatty probably can't find Livestreamer on your system.</p>
Chatty probably can't find Streamlink on your system.</p>
<p>To solve this, first make sure that
you actually have Livestreamer installed. You need to install it on you own, it does
you actually have Streamlink installed. You need to install it on you own, it does
not come bundled with Chatty. If you are sure it is installed (and you maybe can
run it from the commandline just fine), you may have to tell Chatty the full
path to the Livestreamer executable for it to work by entering it in the
path to the Streamlink executable for it to work by entering it in the
<code>Base command</code> field. See the <a href="#settings">Settings section</a> above for examples
and help on that.</p>
</body>

View File

@ -17,6 +17,7 @@
<h1><a name="top">Release Information</a></h1>
<p>
<a href="#0.14">0.14</a> |
<a href="#0.13.1">0.13.1</a> |
<a href="#0.13">0.13</a> |
<a href="#0.12">0.12</a> |
@ -62,7 +63,85 @@
full list of changes.</p>
<h2>
<a name="0.13.1">Version 0.13.1</a> <a name="latest">(This one!)</a> (2020-11-17)
<a name="0.14">Version 0.14</a> <a name="latest">(This one!) (2021-03-04)</a>
<a href="#top" class="top">[back to top]</a>
</h2>
<p>This version features (among other things) a more advanced drag&amp;drop
functionality:</p>
<ul>
<li>Tabs can be dragged to the edges of a chat to create a split view
with two tab panes side by side.</li>
<li>Tabs can be dragged from one tab pane to another.</li>
<li>Popouts also contain a tab pane now (if more than one tab is dragged
into it).</li>
<li>A popout can be opened through the tab context menu (as before) or
by dragging a tab outside of the window. Popouts can be opened
either as a dialog or separate window.</li>
<li>More customization of how information on tabs is displayed.</li>
<li>The Highlighted and Ignored Messages dialogs can be docked as a tab
through their context menus.</li>
<li>Find relevant settings under "Tabs" and "Window".</li>
</ul>
<pre>
### Custom Commands / Commands
- Added `$"&lt;text&gt;"` to Custom Commands syntax, where everything inside the
quotes is interpreted as literal text (e.g. `$"This costs $30 dollars"`)
- Added optional args parameter to Custom Replacements: `$(_m,[args])`, where
"args" is available in the "_m" replacement via `$1-` (like a function)
- Changes to the /chain command:
- Automatically escape seperator character "|" in top-level replacements
- Fixed bug where the wrong parameters would be sometimes set
- Added /say command
- Added $request() method to perform GET requests
- Improved $replace() function with more advanced replace options
- Added identifiers to retrieve info about the local user
- Prevent endless recursion that could happen in some cases
- Added warning when Custom Commands have the same name as built-in commands
### Matching (Highlight, Ignore etc.)
- Added Presets that can be used in individual Matching items (various prefixes)
- Improved Highlight editor
- Added "n:" prefix for notes that are ignored for matching
- Added "startw:" prefix
- Added Highlight-style user-related matching to custom Usercolors/Badges
- Added Ignore blacklist (to prevent message from being ignored)
- Various blacklist improvements
- Added "Message Info" context menu entry for chat messages showing which
Highlights or Custom Message Color item they were affected by (if any)
- Improved Highlighted/Ignored messages dialogs (e.g. show bans/timeouts)
### Users
- Added date separator in User Dialog message history
- Added setting for User Dialog message limit
- Added user notes (via User Dialogs)
- Added support for showing pronouns (disabled by default)
- Added colored names in userlist (disabled by default, limited to users that
already talked)
### Other Changes
- Improved tab/popout handling (see description above)
- Updated JTattoo Look&amp;Feels to fix some small tabs issues
- Added "Join"-link for hosted channels
- Keep message in input box after cancelling mention dialog
- Account: Allow opening connect URL on error to make manual process easier
- Always show whisper related info messages in active channel
- Added setting for link color in info messages
- Added FFZ per-channel bot recognition
- Increased the maximum amount of followed streams that can be requested
- Updated translations/texts
- Updated help
### Bugfixes
- Fixed error in Highlight editor due to missing icon on some platforms
- Fixed sub months in badge tooltips
- Fixed token verified dialog showing when it shouldn't
- Fixed website approved automod message showing as points reward
</pre>
<h2>
<a name="0.13.1">Version 0.13.1</a> (2020-11-17)
<a href="#top" class="top">[back to top]</a>
</h2>
<pre>

View File

@ -153,6 +153,8 @@
as hardcoded into Chatty, may be different from other programs), e.g. <code>$color:Blue</code> for blue,
which can be used to replace colors</li>
<li><code>$defaultColor</code> - Users that don't have a color set and have the default assigned color (somewhat random)</li>
<li><code>$m:&lt;item&gt;</code> - Specify user-related <a href="#Highlight_Meta_Matching">Highlight Matching</a> prefixes, such as
<code>$m:config:b|partner</code> to match users with a partner badge</li>
</ul>
<p>The order of the
@ -230,11 +232,16 @@
<dt>Restriction</dt>
<dd>This is similiar to the <a href="#Usercolors">Usercolors</a> settings,
where you can enter special restrictions the user has to match in order
for the icon to be displayed. What makes the most sense in this case is
probably just entering a username (e.g. <code>serenity</code>) or an
addressbook category (e.g. <code>$cat:vip</code>, which would refer to
the category <code>vip</code>). If you keep this empty, then no restriction
for the icon to be displayed. If you keep this empty, then no restriction
is applied.</dd>
<dd>The most common restrictions would be:
<ul>
<li>Just the username (e.g. <code>serenity</code>)</li>
<li>An addressbook category (e.g. <code>$cat:vip</code>, which would refer to
the category <code>vip</code>)</li>
<li>Most other <a href="#Usercolors">Usercolors</a> restrictions</li>
</ul>
</dd>
<dd>Specifying a <em>Type</em> other than <code>Addon</code> carries an
implicit restriction, since e.g. the default moderator icons are only
displayed if the user is a moderator.</dd>
@ -752,6 +759,13 @@
<li><a href="#Highlight_Matching">Text Matching Prefixes</a></li>
<li><a href="#Highlight_Meta_Matching">Meta Prefixes (Matching)</a> (e.g. matching by channel, user or message type)</li>
<li><a href="#Highlight_Meta_Behaviour">Meta Prefixes (Behaviour)</a> (e.g. changing resulting text color)</li>
<li><a href="#Matching_Presets">Presets</a></li>
</ul>
<p>Also see:</p>
<ul>
<li><a href="#Highlight_Order">Order of Highlight Items</a></li>
<li><a href="#Highlight_Examples">Examples</a></li>
</ul>
<p>By default only regular chat messages are matched, however with the
@ -777,6 +791,7 @@
<li><code>wcs:</code> is the same as <code>w:</code>, but case-sensitive.</li>
<li><code>start:</code> to match at the start, so <code>start:!bet</code> will
match messages starting with <code>!bet</code>.</li>
<li><code>startw:</code> is a combination of <code>start:</code> and <code>w:</code>.</li>
<li><code>reg:</code> (and variations) to use a
<a href="https://en.wikipedia.org/wiki/Regular_expression">Regular Expression</a> (Regex), which are case-sensitive by default:
<ul>
@ -835,7 +850,7 @@
prefixes), however you can enclose the prefix value (or part of it)
in quotes. Two quotes can be used to add a literal quote. Example:
<code>replacement:"text&nbsp;with&nbsp;""space"""</code> (meaning
the value is <code>text&nbsp;with&nbsp;"space"</code>)</li>
the value of <code>replacement:</code> is <code>text&nbsp;with&nbsp;"space"</code>)</li>
<li>When a prefix can have several values, they must be comma-separated
(without spaces). Example: <code>cat:category1,category2</code>.
Commas in list values can be quoted as well for them to be used
@ -967,7 +982,13 @@
<ul>
<li><code>config:silent</code> - Disable sounds for this item</li>
<li><code>config:!notify</code> - Disable notifications for this item</li>
</ul></li>
</ul>
</li>
<li><code>n:</code> to provide a note that is ignored for matching.
Example: In <code>n:"Explains this entry" config:info startw:!quote</code>
only <code>config:info startw:!quote</code> will have an effect
(see <a href="#Highlight_Meta_Matching">Meta Prefixes (Matching)</a>
on how quoting works).</li>
</ul>
<p><em>Note:</em> If you're using the <code>color:</code> or <code>bgcolor:</code>
@ -976,7 +997,108 @@
message to the Highlighted Messages window - then consider using Custom
Message Colors instead.</p>
<h3>Order of items</h3>
<h3><a name="Matching_Presets">Presets</a></h3>
<p>There are different ways that allow you to build Highlight items (or
settings using the same format) from pre-defined parts or apply
functions instead of writing it all manually:</p>
<ul>
<li>The <code>preset:</code> prefix inserts a "Presets" list entry at
it's position (good for often used meta prefixes).</li>
<li>The <code>cc:/cc2:</code> prefixes modify all of the text after it
by allowing Custom Command syntax to be used (which allows you to
include entries from the "Presets" list or use functions).</li>
<li>The <code>ccf:</code> prefix modifies all of the text after it by
applying a function from the "Presets" list to it.</li>
</ul>
<p>The "Presets" list can be accessed through the Highlights settings page.
Presets can be used from any setting that uses the Highlights format,
even though in this help it only refers to the Highlights list.</p>
<p>The <strong>"preset:" prefix</strong> inserts an entry from
the "Presets" list. It could for example contain an entry with the name "m" that contains some meta prefixes:</p>
<p class="codeblock-compact"><code>m&nbsp;chanChat:mod config:!notify</code> &nbsp;("Presets" list)</p>
<p>This could then be inserted into a Highlight list entry like this:</p>
<p class="codeblock-compact"><code>preset:m reg:&lt;some regex&gt;</code></p>
<p>Prior to further parsing this would be expanded to:</p>
<p class="codeblock-compact"><code>chanCat:mod config:!notify reg:&lt;some regex&gt;</code></p>
<p>You can also add an optional parameter, for example <code>preset:m|",silent"</code>,
which will be appended directly to the end if the inserted text:
<code>chanCat:mod config:!notify,silent reg:&lt;some regex&gt;</code>.
If the name of the preset begins with an underscore the parameter
will instead be provided to the preset in the <code>$1-</code>
replacement.</p>
<p>The <strong>"cc:" prefix</strong> (short for "Custom Command") causes all following text to be
interpreted in the <a href="help-custom_commands.html#replacements">Custom Command</a> syntax, which means:</p>
<ul>
<li>You can use replacements such as <code>$(m)</code> or <code>$(_m,&lt;text&gt;)</code>, whereas "m" or "_m" are
entries on the "Presets" list. Presets beginning with <code>_</code>
can contain Custom Commands replacements like <code>$1-</code>, which
allows working with the given <code>&lt;text&gt;</code> (so they act like functions).</li>
<li>Special characters such as <code>$</code> and <code>\</code> have to
be escaped with a backslash (<code>\$</code> and <code>\\</code>)
when intended to be used literally.</li>
<li>Presets are applied when the Highlight item is compiled,
which usually happens when it was changed, but also sometimes
automatically. While some Custom Command functions such as <code>$datetime()</code>
may be available, it is inadvisable to use them
since it would cause inconsistent results.</li>
</ul>
<p>For example there could be a preset with the name "_t", that replaces
spaces in all of the given text <code>$1-</code> with underscores:</p>
<p class="codeblock-compact"><code>_t $replace($1-, ,_)</code> &nbsp;("Presets" list)</p>
<p>This could then be used in a Highlight item:</p>
<p class="codeblock-compact"><code>cc:reg:\\w $(_t,abc test)</code> &nbsp;(note the escaped <code>\</code> and the <code>abc test</code> parameter)</p>
<p>Prior to further parsing this would be modified to (due to being handled
like a Custom Command):</p>
<p class="codeblock-compact"><code>reg:\w abc_test</code></p>
<p>The <strong>"cc2:" prefix</strong> does the same, except that you
must also specify a custom escaping (and optionally a replacement) character.
For example the following sets <code>~</code> as escape character (instead of <code>\</code>)
and <code>§</code> as replacement character (instead of <code>$</code>).
Anything after <code>|</code> is then interpreted in Custom Command syntax as above:</p>
<p class="codeblock-compact"><code>cc2:~§|reg:\w §(_t,abc test)</code></p>
<p>The result is the same as the <code>cc:</code> example, but the <code>\w</code>
does not need the additional <code>\</code> in front, since <code>\</code>
is not a special Custom Command character anymore.</p>
<p>The <strong><a name="Matching_ccf">"ccf:" prefix</a></strong> (short for
"Custom Command Function") applies a "Presets" list entry (whose name
should begin with <code>_</code> to be able to use Custom Command
replacements) to the entire following text, as if you wrapped the entire
text in a replacement. Example:</p>
<p class="codeblock-compact"><code>ccf:_t|reg:\w abc test</code></p>
<p>This is equivalent to:</p>
<p class="codeblock-compact"><code>cc:$(_t,reg:\\w abc test)</code></p>
<p>Both of these would give the entire text to <code>_t</code> (which is <code>$replace($1-, ,_)</code> as seen above) and then use the return value, so it changes to:</p>
<p class="codeblock-compact"><code>reg:\w_abc_test</code></p>
<p>Using <code>ccf:</code> has the advantage that you don't have to
worry about potentially having to escape special characters,
since simply everything after the <code>|</code> is provided to <code>_t</code>
as a parameter without being interpreted in any special way.</p>
<p>You can <strong>chain several prefixes</strong>, for example:</p>
<p class="codeblock-compact"><code>ccf:_test|preset:m reg:&lt;some regex&gt;</code></p>
<p>This would first apply the <code>_test</code> function to everything after
it, then insert the <code>m</code> preset (assuming the <code>_test</code>
function did not change the <code>preset:m</code>), then continue parsing the
result as a Highlight item.</p>
<h3><a name="Highlight_Order">Order of Highlight items</a></h3>
<p>When using prefixes that change the behaviour (like setting a color) the
order of Highlight items may be important, since the settings of the
first matching item (from the top of the list) will be used. Contrary to
@ -1737,7 +1859,7 @@
the <code>-token</code> parameter sets the login token used in
Chatty. If a token is already saved in Chatty, then the <code>-token</code>
parameter will have no effect, unless this setting is enabled.</dd>
<dd>Overriding the token can be any issue if external programs like the
<dd>Overriding the token can be an issue if external programs like the
Livestreamer GUI provide a token that has less access than the one
already saved in Chatty (e.g. doesn't allow you to change your
stream title).</dd>

View File

@ -32,7 +32,6 @@
<ul>
<li><a href="#known">Known Issues</a></li>
<li><a href="#performance">Bad performance / OutOfMemoryError</a></li>
<li><a href="#livestreamer">Livestreamer won't run properly</a></li>
<li><a href="#log">Debug log</a></li>
</ul>
</li>
@ -98,12 +97,6 @@
issue.</li>
</ul>
<h2>
<a name="livestreamer">Livestreamer won't run properly</a>
<a href="#top" class="top">[back to menu]</a>
</h2>
<p>See the <a href="help-livestreamer.html">Chatty Livestreamer Help</a>.</p>
<h2>
<a name="settings_lost">Settings lost</a>
<a href="#top" class="top">[back to menu]</a>

View File

@ -5,7 +5,7 @@
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h1><a name="top">Chatty (Version: 0.13.1)</a></h1>
<h1><a name="top">Chatty (Version: 0.14)</a></h1>
<table>
<tr>
<td valign="top">
@ -50,7 +50,7 @@
<li><a href="#channelinfo">Channel Info / History</a></li>
<li><a href="#notifications">Live Streams / Notifications</a></li>
<li><a href="help-admin.html">Admin Dialog</a></li>
<li><a href="help-livestreamer.html">Livestreamer / Streamlink</a>
<li><a href="help-livestreamer.html">Streamlink</a>
<li><a href="help-srl.html">SpeedrunsLive (SRL)</a></li>
<li><a href="#followers">Followers/Subscribers List</a></li>
<li><a href="#streamhighlights">Stream Highlights / Markers</a></li>
@ -121,6 +121,8 @@
<li><code>R9k</code> for R9Kbeta Mode</li>
<li><code>EmoteOnly</code> for Emote-Only Mode</li>
<li>A language code if Broadcaster Language Mode is enabled</li>
<li><code>[FM]</code> indicates a websocket connection (<code>F</code>
for FrankerFaceZ, <code>M</code> for PubSub/Modlogs)</li>
</ul>
<p>You can toggle showing some information under <code>View - Options - Titlebar</code>.</p>
@ -174,7 +176,8 @@
<h3><a name="commands-chat">Chat commands:</a></h3>
<ul>
<li><code>/me &lt;message&gt;</code> - Send an action message (* nickname says something) to the channel</li>
<li><code>/say &lt;message&gt;</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 &lt;message&gt;</code> - Send an action message (* nickname says something)</li>
<li><code>/msgreply &lt;message&gt;</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 &lt;nick&gt; [time] [reason]</code> - Timeout the user with the given nickname for "time" seconds (time is optional)</li>
@ -309,6 +312,40 @@
<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 $(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>
<dd>This means that if a replacement contains a <code>|</code> character
it would add an additional command. If <code>$(msg)</code> contained <code>Hello | World!</code>, then <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>Since this could cause issues, any top-level replacement will escape
the <code>|</code> character automatically if the Custom Command
begins with the <code>/chain</code> command (so it would output
<code>Hello | World!</code> and <code>abc</code>):<br />
<code>/chain /echo Hello || World! | /echo abc</code></dd>
<dd>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></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="login">Twitch Login</a>
<a href="#top" class="top">[back to menu]</a>
@ -1429,7 +1466,7 @@ MiniK http://static-cdn.jtvnw.net/emoticons/v1/25/1.0 set:793 id:3287</pre
</h2>
<p>Using the <code>/proc</code> command you can start processes directly out
of Chatty. An example of where this is already integrated into Chatty is
starting Livestreamer, however this is a more basic implementation.
starting Streamlink, however this is a more basic implementation.
<em>This is probably only interesting for advanced users.</em></p>
<ul>

View File

@ -55,6 +55,15 @@ code {
padding: 0;
}
.codeblock-compact {
display: block;
margin-left: 4px;
margin-right: 4px;
margin-top: 4px;
margin-bottom: -4px;
padding: 2px;
}
cite {
background-color: #EEEEEE;
}

View File

@ -16,9 +16,9 @@ function loaded() {
{ ceiling: null, text: "$years years ago" }
]
}
document.getElementById("ago").innerHTML = "Version 0.13.1 released "+humanized_time_span("2020/11/17", Date(), custom_date_formats)+"";
document.getElementById("ago").innerHTML = "Version 0.14 released "+humanized_time_span("2021/03/04", Date(), custom_date_formats)+"";
getDownloads("v0.13.1");
getDownloads("v0.14");
slideshow_init("slideshow");
}
@ -158,7 +158,7 @@ function getDownloads(tag) {
<h2 id="download">Download</h2>
<p>Choose one of the following downloads of <strong>Chatty Version 0.13.1</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.13.1/">SHA-256 hashes</a>.</p>
<p>Choose one of the following downloads of <strong>Chatty Version 0.14</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.14/">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>
<h3>Windows</h3>
@ -170,11 +170,11 @@ function getDownloads(tag) {
<tr>
<td>
<dl>
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.13.1/Chatty_0.13.1_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.14/Chatty_0.14_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>
</dl>
<dl>
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.13.1/Chatty_0.13.1_win_standalone.zip">Download Windows Standalone (.zip)</a></dt>
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.14/Chatty_0.14_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>
</dl>
@ -182,11 +182,11 @@ function getDownloads(tag) {
</td>
<td>
<dl>
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.13.1/Chatty_0.13.1_win_setup.exe">Download JAR-Version (Installer)</a></dt>
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.14/Chatty_0.14_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>
</dl>
<dl>
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.13.1/Chatty_0.13.1.zip">Download JAR-Version (.zip)</a></dt>
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.14/Chatty_0.14.zip">Download JAR-Version (.zip)</a></dt>
<dd>Extract the .zip into a folder of your choice and start <code>Chatty.jar</code>.</dd>
</dl>
</td>
@ -194,7 +194,7 @@ function getDownloads(tag) {
</table>
<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.13.1/Chatty_0.13.1.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.14/Chatty_0.14.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>
<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>