v0.22 files

This commit is contained in:
tduva 2023-01-15 05:21:11 +01:00
parent eee8280bcb
commit a4cde3fe41
No known key found for this signature in database
GPG Key ID: 01EB6B81F18C5128
7 changed files with 238 additions and 61 deletions

View File

@ -38,6 +38,8 @@ along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</pre
<li><a href="https://github.com/TooTallNate/Java-WebSocket">Java-WebSocket</a> (MIT), <a href="http://www.slf4j.org/">SLF4J</a> (MIT)</li>
<li><a href="http://www.jtattoo.net">JTattoo</a> by MH Software-Entwicklung
(<a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv2 or later</a>)</li>
<li><a href="https://www.formdev.com/flatlaf/">FlatLaf</a> by FormDev
(<a href="https://github.com/JFormDesigner/FlatLaf/blob/main/LICENSE">Apache License 2.0</a>)</li>
<li><a href="https://github.com/rjeschke/txtmark">Txtmark</a>
(<a href="http://www.apache.org/licenses/LICENSE-2.0">"Apache License 2.0"</a>)</li>
<li><a href="https://hc.apache.org/">Apache HttpComponents Client</a> (<a href="http://www.apache.org/licenses/LICENSE-2.0">"Apache License 2.0"</a>)</li>

View File

@ -233,7 +233,7 @@
<th>Description</th>
</tr>
<tr>
<th rowspan="10"><em>All</em></th>
<th rowspan="9"><em>All</em></th>
<td><code>chan</code></td>
<td>The current channel context (without leading #)</td>
</tr>
@ -247,10 +247,6 @@
<td>All currently open regular channels (separated by spaces,
without leading #)</td>
</tr>
<tr>
<td><code>hostedChan</code></td>
<td>The currently hosted channel (if any)</td>
</tr>
<tr>
<td><code>streamstatus</code></td>
<td>Stream Status (Title/Game or Offline)</td>
@ -443,15 +439,49 @@
replacement:
<code>$(1-) -> $<u>join</u>(1-<u>,/</u>)</code></p>
<p>Functions by topic (ones marked with * are not available in every context):</p>
<ul>
<li>Decisions:
<a href="#func-if">$if()</a>,
<a href="#func-ifeq">$ifeq()</a>,
<a href="#func-switch">$switch()</a>,
<a href="#func-is">$is()</a>*
</li>
<li>Text:
<a href="#func-join">$join()</a>,
<a href="#func-lower">$lower()</a>,
<a href="#func-upper">$upper()</a>,
<a href="#func-trim">$trim()</a>,
<a href="#func-replace">$replace()</a>,
<a href="#func-rand">$rand()</a>,
<a href="#func-sort">$sort()</a>,
<a href="#func-input">$input()</a>
</li>
<li>Numbers:
<a href="#func-randnum">$randnum()</a>,
<a href="#func-calc">$calc()</a>,
<a href="#func-round">$round()</a>
</li>
<li>Requests/URLs:
<a href="#func-request">$request()</a>*,
<a href="#func-urlencode">$urlencode()</a>,
<a href="#func-json">$json()</a>
</li>
<li>Other:
<a href="#func-datetime">$datetime()</a>,
<a href="#func-get">$get()</a>*
</li>
</ul>
<p>The following functions are always available:</p>
<dl class="defList">
<dt><code>$if(&lt;identifier&gt;,&lt;output if exists&gt;,[output if not])</code></dt>
<dt><a name="func-if"><code>$if(&lt;identifier&gt;,&lt;output if exists&gt;,[output if not])</code></a></dt>
<dd>If the value the identifier refers to exists (non-empty), it will
return the first function parameter, the second otherwise.</dd>
<dd><em>Example:</em> <code>$if(1,$1,nope)</code> with command parameters <code>cheese cake</code> turns into <code>cheese</code>,
with no parameters turns into <code>nope</code>, the optional <code>[output if not]</code> function parameter.</dd>
<dt><code>$ifeq(&lt;identifier&gt;,&lt;comparison&gt;,&lt;output if equal&gt;,[output if not])</code></dt>
<dt><a name="func-ifeq"><code>$ifeq(&lt;identifier&gt;,&lt;comparison&gt;,&lt;output if equal&gt;,[output if not])</code></a></dt>
<dd>Similar to <code>$if</code>, but instead of just checking for the
existence of a parameter it compares it to a given value
(<code>&lt;comparison&gt;</code>).</dd>
@ -460,31 +490,36 @@
<code>cheese cake</code> turns into an an empty string, since the
optional <code>[output if not]</code> has not been specified.</dd>
<dt><code>$switch(&lt;identifier&gt;,&lt;case1&gt;:&lt;result1&gt;,..,[casen]:[resultn],[default])</code></dt>
<dt><a name="func-switch"><code>$switch(&lt;identifier&gt;,&lt;case1&gt;:&lt;result1&gt;,..,[casen]:[resultn],[default])</code></a></dt>
<dd>Similiar to a switch statement in programming, or one or several <code>$ifeq()</code> functions.
Compares the value associated with the identifier with the case values and returns the following
result if it matches. If none of the case values match, it will return the default, or an empty value.</dd>
<dd><em>Example:</em> <code>/set fontSize $switch($get(fontSize),25:50,50:18,25)</code> when added
as a Custom Command alternates between font sizes 18, 25 and 50.</dd>
<dt><code>$join(&lt;identifier&gt;,&lt;separator&gt;)</code></dt>
<dt><a name="func-join"><code>$join(&lt;identifier&gt;,&lt;separator&gt;)</code></a></dt>
<dd>Joins together the arguments the identifier refers to, using the
given separator.</dd>
<dd><em>Example:</em> <code>$join(1-,/)</code> with <code>1-</code> referring to
<code>flour sugar eggs</code> turns into <code>flour/sugar/eggs</code></dd>
<dd>This effectively replaces spaces in the parameters with the separator.</dd>
<dt><code>$lower(&lt;identifier&gt;)</code></dt>
<dt><a name="func-lower"><code>$lower(&lt;identifier&gt;)</code></a></dt>
<dd>Makes the given input lowercase.</dd>
<dd><em>Example:</em> <code>$lower(1)</code> with <code>1</code>
referring to <code>Fremily</code> turns into <code>fremily</code>.</dd>
<dt><code>$upper(&lt;identifier&gt;)</code></dt>
<dt><a name="func-upper"><code>$upper(&lt;identifier&gt;)</code></a></dt>
<dd>Makes the given input uppercase.</dd>
<dd><em>Example:</em> <code>$upper(1)</code> with <code>1</code>
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>
<dt><a name="func-trim"><code>$trim(&lt;input&gt;)</code></a></dt>
<dd>Removes leading and trailing space (U+0020 and lower, using the
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#trim%28%29">String.trim()</a> method).</dd>
<dd><em>Example:</em> <code>$trim( abc )</code> turns into <code>abc</code>.</dd>
<dt><a name="func-replace"><code>$replace(&lt;input&gt;,&lt;search&gt;,&lt;replace&gt;,[method])</code></a></dt>
<dd>Search and replace in text.</dd>
<dd>Especially when using Regex, remember
escaping <code>\</code> (<code>\\</code>) and <code>$</code> (<code>\$</code>)
@ -512,14 +547,14 @@
<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>
<dt><a name="func-rand"><code>$rand([output1],[output2],[output3],..)</code></a></dt>
<dd>Randomly chooses one of the outputs.</dd>
<dd><em>Example:</em> <code>$rand(cheesecake,strawberry cake,$1-)</code>
with <code>1-</code> referring to <code>apple pie</code> turns into
either <code>cheesecake</code>, <code>strawberry cake</code> or
<code>apple pie</code>.</dd>
<dt><code>$randnum(&lt;from&gt;,&lt;to&gt;)</code> or <code>$randnum(&lt;to&gt;)</code></dt>
<dt><a name="func-randnum"><code>$randnum(&lt;from&gt;,&lt;to&gt;)</code> or <code>$randnum(&lt;to&gt;)</code></a></dt>
<dd>Randomly chooses a number in the given range (inclusive). If only
one number is given, it the range is 0 to the given number. If the
"from" is not a number, it defaults to 0, if the "to" is not a
@ -529,7 +564,7 @@
<dd><em>Example:</em> <code>$randum($$1)</code> chooses a random number
between 0 and what is the first parameter.</dd>
<dt><code>$calc(&lt;simple math expression&gt;)</code></dt>
<dt><a name="func-calc"><code>$calc(&lt;simple math expression&gt;)</code></a></dt>
<dd>Limited support for performing calculations, with binary operators
(<code>* / % + -</code>) and functions (<code>sqrt() sin() cos() tan()</code>).</dd>
<dd><em>Example:</em> <code>//echo $calc(2^3) $calc( (3+4\) / 2)</code>
@ -540,7 +575,7 @@
(this uses <code>$" "</code> to specify <a href="#escaping">literal text</a>
instead of escaping the parenthesis with a backslash).</dd>
<dt><code>$round(&lt;number&gt;,[numDecimalPlaces],[roundingMode],[minNumDecimalPlaces])</code></dt>
<dt><a name="func-round"><code>$round(&lt;number&gt;,[numDecimalPlaces],[roundingMode],[minNumDecimalPlaces])</code></a></dt>
<dd>Round a number to the given amount of decimal places,
with a <a href="https://docs.oracle.com/javase/7/docs/api/java/math/RoundingMode.html">rounding mode</a>
of empty (half-up), <code>ceil</code>, <code>floor</code>,
@ -551,13 +586,13 @@
<dd><em>Example:</em> <code>//echo $round(345.5,3,floor,3)</code> outputs <code>345.500</code> (fills up to 3 decimal places)</dd>
<dd><em>Example:</em> <code>//echo $round(2.565,2,,2)</code> outputs <code>2.57</code> (uses default rounding mode)</dd>
<dt><code>$urlencode(&lt;input&gt;)</code></dt>
<dt><a name="func-urlencode"><code>$urlencode(&lt;input&gt;)</code></a></dt>
<dd>Uses <a href="https://docs.oracle.com/javase/8/docs/api/java/net/URLEncoder.html#encode-java.lang.String-java.lang.String-">UrlEncoder.encode()</a>
to prepare the input to be used in a URL query parameter.</dd>
<dd><em>Example:</em> <code>$urlencode($(msg))</code> in User Dialog
encodes the currently selected message.</dd>
<dt><code>$sort(&lt;input&gt;,[type],[separator])</code></dt>
<dt><a name="func-sort"><code>$sort(&lt;input&gt;,[type],[separator])</code></a></dt>
<dd>Sorts the given input alphabetically. The sort type can be "abc"
(default) for case-insensitive sorting or "Abc" for case-sensitive
sorting. The separator is what separates the parts that are sorted,
@ -565,18 +600,19 @@
<dd><em>Example:</em> <code>$sort(B c a)</code> turns into <code>a B c</code></dd>
<dd><em>Example:</em> <code>$sort(B c a,Abc)</code> turns into <code>B a c</code></dd>
<dt><code>$input([message],[intial],[type])</code></dt>
<dt><a name="func-input"><code>$input([message],[intial],[type])</code></a></dt>
<dd>Requests text input from the user by showing an input dialog.
Execution is paused while the dialog is open. The user may enter an
empty value (the result is just empty) or cancel the dialog (the
command will not be executed).</dd>
<dd>The <code>message</code> is shown in the input dialog, the <code>initial</code>
text will already be in the input field when the dialog opens. The
<code>type</code> is currently not used and can just be left empty.</dd>
<code>type</code> can be set to <code>simple</code> to use the
previously default simple input dialog.</dd>
<dd><em>Example:</em> <code>$input()</code></dd>
<dd><em>Example:</em> <code>$input(Enter a number please)</code></dd>
<dt><code>$datetime([format],[timezone],[locale],[unix time])</code></dt>
<dt><a name="func-datetime"><code>$datetime([format],[timezone],[locale],[unix time])</code></a></dt>
<dd>Outputs the current date/time. You can optionally give a format
pattern (based on <a href="https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns">DateTimeFormatter</a>),
a timezone (based on <a href="https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html">ZoneId</a>,
@ -634,12 +670,98 @@
<dd>(Preset format, with timezone, no locale, with a time
specified in milliseconds since 1970-01-01 00:00:00 UTC.)</dd>
</dl>
</dd>
<dt><a name="func-json"><code>$json(&lt;input&gt;,&lt;output&gt;)</code></a></dt>
<dd>Parse the JSON in <code>&lt;input&gt;</code> and use in <code>&lt;output&gt;</code>,
where <code>$j(&lt;path&gt;,[default])</code> can be used to access specific values.
The JSON input could e.g. come from the <code>$request()</code>
function.</dd>
<dd>If the path isn't formatted correctly or the JSON is invalid the
command may not work. Check out the Debug Log (e.g. Extra - Debug
window) to find out what went wrong.</dd>
<dd>The <code>&lt;path&gt;</code> specifies what value to return from
the <code>$j(&lt;path&gt;,[default])</code> function, whereas the optional <code>[default]</code>
value will be returned if the path is not valid or points to an empty value.</dd>
<dd>In the <code>&lt;path&gt;</code> you specify keys of JSON objects
separated by <code>-></code> (e.g. <code>key1->key2->key3</code>) or
indices of JSON arrays in brackets <code>[ ]</code> (e.g. <code>key1[0]</code>
for the first element of the array key1). Additionally the brackets <code>[ ]</code>
can contain:
<ul>
<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>filter:&lt;path&gt;[=regex]</code> to select only
certain array items based on whether a path exists or if a
regex is provided the value of the path</li>
<li><code>collect:&lt;path&gt;[=regex]</code> iterates over an
array and for each element resolves the path and combines
the resulting values into an array</li>
<li><code>combine:&lt;path&gt;[=regex]</code> iterates over an
array and for each element resolves the path and for each
resulting value that is an array adds all of the array
values into a single result array</li>
<li><code>unique</code> removes duplicate elements from an array</li>
<li><code>join[:delimiter]</code> turns an array into a string
by joining all elements together using the given delimiter
(or "<code>, </code>" if none is provided)</li>
</ul></dd>
<dd><em>Examples</em> with the following JSON as input:
<pre>
{
"books":[
{"title":"book1", "author":"author1", "tags":["tag1","tag2"]},
{"title":"book2", "author":"author2", "tags":["tag1"]},
{"title":"book3", "author":"author2", "tags":["tag1", "tag3"]},
{"title":"book4", "author":"author2"}
],
"numBooks": 4,
"numAuthors": 2
}</pre>
<dl>
<dt><code>$json($get(var,j),There are $j(numBooks) books of $j(numAuthors) authors.)</code></dt>
<dt><code>$json($get(var,j),There are $j(books[size]) books of $j(books->[collect:author][unique][size]) authors.)</code></dt>
<dd><code>There are 4 books of 2 authors.</code></dd>
<dd>Reading the "num" values provided in the JSON or determining
the same information from the "books" array.</dd>
<dt><code>$json($get(var,j),The last book is called $j(books[last]->title) by $j(books[last]->author).)</code></dt>
<dd><code>The last book is called book4 by author2.</code></dd>
<dt><code>$json($get(var,j),The first book is $j(books[0]))</code></dt>
<dd><code>The first book is {"author":"author1","title":"book1","tags":["tag1","tag2"]}</code></dd>
<dd>If the end of the specified path is a JSONArray or JSONObject
it will be returned as a JSON encoded String.</dd>
<dt><code>$json($get(var,j),$j(books[10]->title,Book not found))</code></dt>
<dd><code>Book not found</code></dd>
<dd>Since the index <code>10</code> does not exist, the default
value <code>Book not found</code> is returned. If no default
value is provided an empty string would be returned.</dd>
<dt><code>$json($get(var,j),Books of author2: $j(books[filter:author=author2][collect:title]))</code></dt>
<dd><code>Books of author2: ["book2","book3","book4"]</code></dd>
<dt><code>$json($get(var,j),Tags of author2: $j(books[filter:author=author2][combine:tags][unique]))</code></dt>
<dd><code>Tags of author2: ["tag1","tag3"]</code></dd>
<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>
</dl>
You can test these examples yourself if you store the JSON in the
variable "j" using the command <code>/set var j copyJSONfromabove</code>
and then use the <code>//echo $json($get(var,j),...)</code> command
in the chat inputbox
to output an info message with the result in chat. Pasting the JSON
directly into the <code>$json()</code> function would require
escaping the <code>,</code> characters to work.
</dd>
</dl>
<p>The following functions are only available in some contexts:</p>
<dl class="defList">
<dt><code>$is(&lt;match input&gt;)</code></dt>
<dt><a name="func-is"><code>$is(&lt;match input&gt;)</code></a></dt>
<dd>Outputs <code>true</code> if the match succeeds, nothing otherwise.
The <code>match input</code> is in the <a href="help-settings.html#Highlight_Matching">Highlight</a>
format, although what can actually be matched against depends on
@ -649,7 +771,7 @@
will output <code>I'm a mod</code> in channels where you are the
broadcaster or a moderator, <code>Not a mod</code> otherwise.</dd>
<dt><code>$get(&lt;settingName&gt;,[key])</code></dt>
<dt><a name="func-get"><code>$get(&lt;settingName&gt;,[key])</code></a></dt>
<dd>Returns the value of a setting. Different setting types return
differently formatted values. There is no comprehensive list of
settings, unless you count the <a href="https://github.com/chatty/chatty/blob/master/src/chatty/SettingsManager.java">Chatty source</a>.</dd>
@ -662,7 +784,7 @@
<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>
<dt><a name="func-request"><code>$request(&lt;url&gt;,[options])</code></a></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>
@ -670,6 +792,11 @@
<ul>
<li><code>error</code> - A request error will return an error
message instead of an empty response.</li>
<li><code>trim</code> - Remove leading and trailing space from
the request result. This may be useful if a request returns
any spaces or linebreak characters that cause issues with
what you're using it with. Same as the <a href="#func-trim"><code>$trim()</code></a>
function.</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>

View File

@ -17,6 +17,7 @@
<h1><a name="top">Release Information</a></h1>
<p>
<a href="#0.22">0.22</a> |
<a href="#0.21">0.21</a> |
<a href="#0.20">0.20</a> |
<a href="#0.19">0.19</a> |
@ -70,10 +71,52 @@
full list of changes.</p>
<h2>
<a name="0.21">Version 0.21</a> <a name="latest">(This one!)</a> (2022-10-17)
<a name="0.22">Version 0.22</a> <a name="latest">(This one!)</a> (2023-01-15)
<a href="#top" class="top">[back to top]</a>
</h2>
<p>Twitch has announced that Twich chat comands will be removed from IRC in
<pre>
### Twitch Features
- Added chat message for outgoing raids with join link (due to API limits only
in at most 10 live channels)
- Show poll start/end messages (broadcaster only)
- Added shield mode commands and display (for moderators)
### Custom Commands
- Added "Anonymous Custom Command" hotkey action, where a Custom Command can be
entered directly (instead of a the name of a Custom Command)
- Added function `$trim()` to remove leading and trailing whitespace
- Added `trim` option to `$request()`
- Added function `$json()` to parse JSON and access specific values
- Changed `$input()` inputbox to have the same features as the channel inputbox
if run in a channel context
- Added `/exportText` options `-A` and `-L`
### Other
- Added FlatLaf (new modern Look&Feel, selectable in the "Look" settings)
- Added feature to make a popout with one channel transparent
- Made AutoMod dialog dockable
- Improved Settings Dialog
- Removed SRL menu
- Removed some hosting related stuff, added raid context menu entries
- Added setting whether to hide tab pane when only a single channel is open
(hidden by default, as was the previous behaviour)
- Added local caching to Pronouns for more reliability and faster display
- Added new Chatty icons to img folder
- Added context menu setting to Live Streams list to only show favorites
- Updated help
### Bugfixes
- Fixed `/color` command not being able to set some default colors
- Fixed error occuring for some commands when no parameter is provided
- Fixed commands `/unvip` and `/unmod`
- Fixed channels sometimes not opening in the correct popout
</pre>
<h2>
<a name="0.21">Version 0.21</a> (2022-10-17)
<a href="#top" class="top">[back to top]</a>
</h2>
<p>Twitch has announced that Twitch chat comands will be removed from IRC in
February 2023, so they need to be migrated to the API. You will need to
update your login with additional access scopes to be able to use most
commands in this update.</p>

View File

@ -1376,10 +1376,6 @@
<dt><code>user:name chan:tirean,gocnak</code></dt>
<dd>Ignores the user with the name <code>name</code> in channels <code>#tirean</code> and <code>#gocnak</code></dd>
<dt><code>config:info subscribed to</code></dt>
<dd>Ignores the <code>x has subscribed to y</code> info messages that
you get when someone subscribes in the channel that is being hosted</dd>
<dt><code>cat:ignore !chan:lotsofs,joshimuz</code></dt>
<dd>Ignores users in the addressbook category <code>ignore</code> in all channels,
except <code>#lotsofs</code> and <code>#joshimuz</code></dd>
@ -1919,21 +1915,7 @@
</dl>
<h3>Other</h3>
<dl class="dl-settings">
<dt>Auto-Unhost when your stream goes live</dt>
<dd>Automatically
sends the <code>/unhost</code> command to your channel if you started
your stream session in the last 15 minutes and the stream status
changes (usually from offline -> live).<br />
For this to work, you need to have joined the channel in Chatty,
either with the broadcaster account (so your own account if it's
your stream) or with an account that is an editor in the channel
(in which case you also have to add the channel to the
<code>autoUnhostStreams</code> setting, via
<code>/add autoUnhostStreams &lt;streamName&gt;</code>, in order to
tell Chatty that you are authorized/want to use the automatic <code>/unhost</code>
feature in that channel).</dd>
<dl class="dl-settings">
<dt>Prepend to window title</dt>
<dd>Add some arbitrary text to the beginning of the window title. This
can be useful if you run several instances of Chatty (to be able to

View File

@ -5,7 +5,7 @@
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h1><a name="top">Chatty (Version: 0.21)</a></h1>
<h1><a name="top">Chatty (Version: 0.22)</a></h1>
<table>
<tr>
<td valign="top">
@ -117,11 +117,11 @@
<p>In addition, the titlebar will also show additional information, if enabled:</p>
<ul>
<li>The name of the channel that is being hosted</li>
<li><code>Sub</code> for Subscriber-Only Mode</li>
<li><code>Slow: &lt;time&gt;</code> for Slowmode</li>
<li><code>R9k</code> for R9Kbeta Mode</li>
<li><code>EmoteOnly</code> for Emote-Only Mode</li>
<li><code>Shield</code> if Shield Mode is enabled (moderators only)</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>
@ -269,12 +269,12 @@
<li><code>/timeout</code>, <code>/ban</code>, <code>/unban</code>,
<code>/slow</code>, <code>/slowoff</code>,
<code>/subscribers</code>, <code>/subscribersoff</code>,
<code>/clear</code>, <code>/mods</code>, <code>/host</code>,
<code>/unhost</code>, <code>/raid</code>, <code>/unraid</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 &lt;channel&gt;</code> - Joins the given channels, see <a href="#join">Joining Channels</a> for more information</li>
<li><code>/joinhosted</code> - Join currently hosted channel (if any)</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>
@ -360,7 +360,15 @@
<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] &lt;fileName&gt; &lt;text&gt;</code> - Write the text to a file in the "exported" directory in the settings directory (UTF-8), <code>-s</code> for no info message when writing successfully, <code>-n</code> for replacing "\n" in the text with a newline, <code>-a</code> for appending to the file (Example: <code>/exportText -n abc.txt one\ntwo</code> - Writes "one" and "two" as separate lines)</li>
<li><code>/exportText [-sna] &lt;fileName&gt; &lt;text&gt;</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 &lt;emoticons/badges/ffz/ffzglobal/bttvemotes&gt;</code>
- Refresh the given data from it's respective API:
<ul>
@ -387,8 +395,7 @@
<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 &lt;type&gt;</code> - Simulates a chat message
for testing. Some possible types: <code>sub</code>, <code>resub</code>,
<code>bits</code>, <code>authost</code>.
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

View File

@ -1,11 +1,26 @@
body {
max-width: 700px;
font-size: 1em;
color: black;
background-color: #FDFDFD;
font-family: Arial, sans-serif;
padding: 10px;
margin: 0;
}
/**
The link color with some LaF might be wrong, so set it explicitly. However just
a:link and similar doesn't seem to work in Java, but targeting a changes the
color of all a tags, including <a name=""></a>, in normal browsers. So first set
everything with a "name" attribute to black for normal browsers (which would set
*all* of them to black in Java if it came second) and then set them to blue for
Java.
*/
a[name] {
color: black;
}
a {
color: blue;
}
h1 {
margin: 4px 0 5px 0;
font-size: 1.2em;
@ -41,6 +56,7 @@ li {
}
code {
background-color: #EEEEEE;
font-size: 1em;
}
.codeblock {

View File

@ -16,9 +16,9 @@ function loaded() {
{ ceiling: null, text: "$years years ago" }
]
}
document.getElementById("ago").innerHTML = "Version 0.21 released "+humanized_time_span("2022/10/17", Date(), custom_date_formats)+"";
document.getElementById("ago").innerHTML = "Version 0.22 released "+humanized_time_span("2023/01/15", Date(), custom_date_formats)+"";
getDownloads("v0.21");
getDownloads("v0.22");
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.21</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.21/">SHA-256 hashes</a>.</p>
<p>Choose one of the following downloads of <strong>Chatty Version 0.22</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.22/">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.21/Chatty_0.21_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.22/Chatty_0.22_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.21/Chatty_0.21_win_standalone.zip">Download Windows Standalone (.zip)</a></dt>
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.22/Chatty_0.22_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.21/Chatty_0.21_win_setup.exe">Download JAR-Version (Installer)</a></dt>
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.22/Chatty_0.22_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.21/Chatty_0.21.zip">Download JAR-Version (.zip)</a></dt>
<dt><a href="https://github.com/chatty/chatty/releases/download/v0.22/Chatty_0.22.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.21/Chatty_0.21.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.22/Chatty_0.22.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>