From 44218a1e87bdf70b9e7cdddb08918e7d002757fd Mon Sep 17 00:00:00 2001 From: tduva Date: Sat, 27 May 2017 20:48:54 +0200 Subject: [PATCH] v0.8.6 updates --- changes.txt | 28 ++++- help/Notifications_example.jpg | Bin 0 -> 40160 bytes help/help-custom_commands.html | 96 +++++++++++++-- help/help-memory_usage.html | 12 +- help/help-releases.html | 44 ++++++- help/help-settings.html | 218 ++++++++++++++++++++++----------- help/help.html | 2 +- index.html | 12 +- version.txt | 2 +- 9 files changed, 318 insertions(+), 96 deletions(-) create mode 100644 help/Notifications_example.jpg diff --git a/changes.txt b/changes.txt index 6fa850a..958d1da 100644 --- a/changes.txt +++ b/changes.txt @@ -1,5 +1,31 @@ -0.8.5.1 (2017-04-14) Latest Version +0.8.6 (2017-05-27) Latest Version + +### General +- Added new Notification system +- Added support for new sub messages +- Added button to sort some setting lists alphabetically +- Changed Emote Context Menu entry "Twitch Profile" to "Twitch Stream" +- Some other Settings Dialog and GUI improvements +- Made Addressbook mod commands channel setting case-insensitive +- Some debug output improvements +- Updated help + +### Custom Commands +- Added custom replacements +- Added $ifeq function +- Added feature to add channel-specific Custom Commands +- Made identifiers case-insensitive +- Allow absolute positioning of Custom Menu Items + +### Bugfixes +- Fixed word wrapping issues (hopefully) +- Fixed selection in chat window moving around +- Added workaround for error occuring in Java 1.8.0_131 (the actual cause of the + error is still unclear, but hopefully this works well enough) + + +0.8.5.1 (2017-04-14) - Fixed Whispering that didn't work due to changed Twitch behaviour - Fixed bug related to Custom Commands which would prevent startup diff --git a/help/Notifications_example.jpg b/help/Notifications_example.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5783a0194b9a74d09ea5c35d475b9219d5508c2 GIT binary patch literal 40160 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 Replacements
  • Pre-defined Parameters
  • Functions
  • +
  • Custom Replacements
  • @@ -26,6 +27,7 @@
  • Format 2: Inline-Commands
  • Format 3: Submenus
  • Shortcuts
  • +
  • Positioning
  • @@ -52,6 +54,16 @@ Hello World! to chat, just as if you would have written it yourself and pressed Enter.

    +

    Adding a # and a channel name you can restrict the command + to that channel:

    + +

    /hello#joshimuz Hello Joshimuz Chat!

    + +

    This /hello command would only be executed in #joshimuz, + however if you still have the version without a channel in the Custom + Commands list as well, it will fallback to that in other channels. This + way to can add variations of commands for specific channels.

    +

    Replacements

    Anything starting with $ in the <what the command should do> section is treated as some sort of replacement. @@ -205,15 +217,24 @@ replacements, however they have a function name before the identifier (there is no short notation for functions):

    -

    $<functionName>(<identifier>,<some parameters>)

    +

    $<functionName>(<identifier>,<some parameters>,[optional parameters])

    The following functions are available:

    -
    $if(<identifier>,<replacement if exists>,<replacement if doesn't exist>)
    +
    $if(<identifier>,<output if exists>,[output if not])
    If the value the identifier refers to exists (non-empty), it will return the first function parameter, the second otherwise.
    -
    Example: $if(1,$1,nope) with parameters cheese cake turns into cheese, - with no parameters turns into nope
    +
    Example: $if(1,$1,nope) with command parameters cheese cake turns into cheese, + with no parameters turns into nope, the optional [output if not] function parameter.
    + +
    $ifeq(<identifier>,<comparison>,<output if equal>,[output if not])
    +
    Similar to $if, but instead of just checking fot the + existence of a parameter it compares it to a given value + (<comparison>).
    +
    Example: $ifeq(1,cheesecake,yummy) with parameters + cheesecake turns into yummy, with parameters + cheese cake turns into an an empty string, since the + optional [output if not] has not been specified.
    $join(<identifier>,<separator>)
    Joins together the arguments the identifier refers to, using the @@ -248,7 +269,28 @@ In this example only the closing one after n/a has to be escaped, because the opening one doesn't have a special meaning in this context and the ones around streamuptime have a special - meaning that takes precedence (closing the replacement).

    + meaning that takes precedence (opening/closing the replacement).

    + +

    Custom Replacements

    +

    You can create your own identifiers for replacements by adding an entry + to the Custom Commands list starting with an underscore:

    + +

    _m $ifeq(1,$(chan),,$$1: )

    + +

    Instead of a command, this creates an identifier that can be used in a + replacement:

    + +

    /faq $(_m)FAQ: https://pastebin.com/KySx3KDu

    + +

    When the /faq command is run, the $(_m) gets + replaced with whatever is defined in _m, in this case it + creates a mention if the first parameter isn't equal to the current + channel.

    + +

    Note: 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).

    +

    Custom Context Menus / User Dialog Buttons

    Under Settings - Commands there are several settings that @@ -285,7 +327,12 @@ Spoiler[S]=/timeout $$1 600 No spoilers ./Message /Report .Warn User=$$1: Plz no spammerino -

    Format 1: List Custom Command Names

    +

    Note: Command Names/Labels may not contain the + characters [ ] { } except for their special meaning of + Shortcuts and Positioning.

    + + +

    Format 1: List Custom Command Names

    You can list the name of several Custom Commands in one line, for example:

    /Slap /Permit

    @@ -394,9 +441,10 @@ Spoiler[S]=/timeout $$1 600 No spoilers timeout buttons as well as a single bottom row for the Slap command.

    +

    Shortcuts

    You can add a shortcut to the end of a label or command name by enclosing - it with [ ]:

    + it with [ ] (square brackets):

    /Ban[B] or Spoiler[S]=/timeout $$1 ..

    @@ -423,6 +471,40 @@ Spoiler[S]=/timeout $$1 600 No spoilers allow you to open that submenu by pressing R on your keyboard when the context menu is open).

    + +

    Positioning

    +

    You can define an absolute position in the menu the entry should appear + at by enclosing it with { } (curly brackets) at the end of + the label or command name (but before a shortcut if there is any):

    + +

    Mention{1}=/insertword $$1: \

    + +

    This will put the Mention menu entry at the second + position in the menu (counting starts from 0).

    + +

    Another example:

    + +
    +@Twitch Stream[s]
    +.Videos{2}[v]=/openUrlPrompt https://www.twitch.tv/$$1/videos/past-broadcasts
    +@Important{0}
    +.Slap=/me slaps $$1 around a bit with a large trout
    +@Really Important{0}
    +.FAQ=FAQ: https://pastebin.com/KySx3KDu
    +
    + +

    This puts the Videos entry into the pre-defined + Twitch Stream submenu at the third position in the submenu + (also adding the accelerator key s to the menu and + v to the entry).

    + +

    It also adds the Important submenu at the first position + (since it hasn't been added yet) and after that adds the + Really Important submenu at the first position as well, + moving down Important. This demonstrates that the + positioning is based on the current state of the menu, so it can matter + when you add entries with absolute positioning.

    + diff --git a/help/help-memory_usage.html b/help/help-memory_usage.html index bceb4e6..10e8e5f 100644 --- a/help/help-memory_usage.html +++ b/help/help-memory_usage.html @@ -33,12 +33,12 @@ and add the appropriate parameter after the javaw.exe but before the -jar parameter.

    -

    For example to restrict memory to 100 MB: javaw -Xmx100M -jar "D:\Chatty\Chatty.jar". - 100 MB is probably the lowest you should go, although more is recommended, - depending on how you are using Chatty (how many/busy channels). Note - that Java will show a higher usage than this in the Task Manager, since - this pretty much only restricts how much the program can store, Java - will need some more for it's own management and data.

    +

    For example to restrict memory to 150 MB: javaw -Xmx150M -jar "D:\Chatty\Chatty.jar". + You should test out yourself how low you can go, although more than 100 MB + is usually recommended. Note that Java will show a higher usage than + this in the Task Manager, since this pretty much only restricts how much + the program can store, Java will need some more for it's own management + and data.

    For the Windows Standalone version you can add this value to the file <path to Chatty>/app/Chatty.cfg.

    diff --git a/help/help-releases.html b/help/help-releases.html index ed9a9ae..a8f7e23 100644 --- a/help/help-releases.html +++ b/help/help-releases.html @@ -15,6 +15,7 @@

    Release Information

    + 0.8.6 | 0.8.5.1 | 0.8.5 | 0.8.4.1 | @@ -44,8 +45,49 @@

    This page shows important information about new versions as well as the full list of changes.

    +

    - Version 0.8.5.1 (This one!) (2017-04-14) + Version 0.8.6 (This one!) (2017-05-27) + [back to top] +

    +

    This version features a new Notification system, which combines both + Desktop Notifications and Sounds. It is more flexible to configure and + can be easier extended on the programming side. It has more types of + events (like Whispers or AutoMod messages), better matching of events + (matching text or restricting to a channel) and things like configurable + colors for Desktop Notifications.

    + +

    Note: While your previous Desktop Notification Settings should be + carried over, you will have to reconfigure any Sounds in the new system + (if you used any).

    + +
    +### General
    +- Added new Notification system
    +- Added support for new sub messages
    +- Added button to sort some setting lists alphabetically
    +- Changed Emote Context Menu entry "Twitch Profile" to "Twitch Stream"
    +- Some other Settings Dialog and GUI improvements
    +- Made Addressbook mod commands channel setting case-insensitive
    +- Some debug output improvements
    +- Updated help
    +
    +### Custom Commands
    +- Added custom replacements
    +- Added $ifeq function
    +- Added feature to add channel-specific Custom Commands
    +- Made identifiers case-insensitive
    +- Allow absolute positioning of Custom Menu Items
    +
    +### Bugfixes
    +- Fixed word wrapping issues (hopefully)
    +- Fixed selection in chat window moving around
    +- Added workaround for error occuring in Java 1.8.0_131 (the actual cause of the
    +  error is still unclear, but hopefully this works well enough)
    +
    + +

    + Version 0.8.5.1 (2017-04-14) [back to top]

    diff --git a/help/help-settings.html b/help/help-settings.html
    index 5f3de8e..995ffa6 100644
    --- a/help/help-settings.html
    +++ b/help/help-settings.html
    @@ -16,7 +16,7 @@
             | Ignore
             | Sounds
             | Notifications
    -        | Log to file
    +        | Log to file
             | Window
             | Tabs
             | Commands
    @@ -842,50 +842,104 @@
             Sounds
             [back to menu]
         
    -    

    General Sound Settings

    -

    You can enable or disable all sounds here. Sounds are searched in the - displayed folder, which is the current working directory. Any valid sound - files in the folder should be selectable as a sound to be played. If you - added or removed files, you may have to use Rescan folder to - make the files show up in the list. You can open the folder in your standard - file browser from here to add files to it more quickly.

    - -

    The Output Device lets you choose the device on your - computer the sounds gets output to. This is kind of experimental and may - not work properly.

    - -

    Sound Types Settings

    -

    You can specify requirements, soundfile, volume and delay for - different types of events:

    -
      -
    • When a message is highlighted
    • -
    • When a stream changes status (online/offline/changed title/changed game)
    • -
    • When any message in received in any open channel
    • -
    • When someone joins/leaves any open channel
    • -
    • When a new follower is detected (this only works if the Follower - Dialog is currently open)
    • -
    -

    You can set a delay (seconds) so that the same sound won't be played twice during - the set number of seconds. So if e.g. 3 highlighted messages come in within - 10 seconds and the delay is set to 15 seconds, only one sound will be played.

    - -

    Each sound has different options for when the sound should be played. See - the Notification Settings for help on the options.

    +

    Sounds are now integrated into the Notifications.

    Notifications [back to menu]

    -

    Notifications

    -

    You can show notifications for two kinds of things:

    -
      -
    • Highlights - When a message in chat is highlighted
    • -
    • Stream Status - When a stream changes status, e.g. - offline -> online or changed title
    • -
    +

    The Events table can contain several entries that + describe events and whether they should trigger a Desktop Notification + and/or Sound.

    + +

    The entries are checked from the top and only the first enabled + Notification and Sound of matching events are chosen, and then triggered + if the Cooldowns allow it (given that any are configured).

    + +

    Example: You could have two "Highlights" events, the first restricted to + a certain channel with a Notification/Sound and the second + non-restricted with just a Notification. This way only Highlights in + said channel would play a Sound (and maybe have different Notification + colors) and all others just show a Notification. Note that if you were + to switch those entries, then the channel-restricted one would never be + chosen, because the non-restricted one already catches everything. So as + a general rule, the more specific/restricted entries should always come + first.

    + +

    + +

    Possible event types that can be selected for an entry:

    + +
    +
    Stream Status
    +
    A stream Chatty is watching (because you have it's chat open + or you follow it) went online/offline or changed title.
    + +
    Highlights
    +
    Chat Messages that were highlighted.
    + +
    Chat Message
    +
    Any Chat Message (including highlighted ones, in this case + the order of list entries can matter).
    + +
    Whisper
    +
    Any Whisper message (including highlighted ones).
    + +
    User Joined & User Left
    +
    When a user is seen entering or leaving a chat. Note that + this is quite unreliable, see Userlist and JOIN/PART.
    + +
    New Followers
    +
    When a new follower is detected (this only works if the + Follower Dialog is + currently open).
    + +
    Subscriber Notification
    +
    When a new Subscriber/Resub notification is received in chat.
    + +
    AutoMod Message
    +
    When a new chat message filtered by AutoMod is received.
    +
    + +

    Settings for an entry (Notification/Sound)

    +
    +
    Channel
    +
    Name of the channel this item should be restricted to.
    + +
    Match
    +
    Match the given text or message, in the same format as for + Highlighting (although some prefixes won't + work unless it's a chat message).
    + +
    Notification (Tab)
    +
    A Desktop Notification, with customizable colors.
    + +
    Sound (Tab)
    +
    Play the selected Sound.
    +
    Specify a Cooldown to prevent this sound from playing + too often.
    +
    Passive Cooldown will only play the sound if enough + time has passed since this event was last matched. Or in other words + it will reset the Cooldown every time the sound would have + been played, even if it actually wasn't because another sound took + precedence or the regular Cooldown didn't allow it.
    +
    For example if your chat isn't very busy and you want to get + notified of new messages so you notice, then you could add an event + of type Chat Message with a Passive Cooldown + of 5m, which means the sound only plays if someone + writes a message after the chat has been silent for at least 5 minutes. + If on the other hand you would set it as a regular Cooldown + it would play the sound after 5 minutes even if the chat has been + busy non-stop, at which point you probably wouldn't need to be alerted + since you're already paying attention to it.
    +
    + +

    On both the Notification (Tab) and Sound (Tab) + you can enable/disable the according action by choosing one of the + following:

    -

    For both these you can select separately if and when they are shown:

      +
    • Enabled - No requirements, always show it
    • Off - Never show
    • When channel/app not active - Only when the channel isn't the currently selected tab AND when the program doesn't have focus
    • @@ -897,44 +951,53 @@ isn't the currently selected tab
    • When channel active - Only when the channel IS the currently selected tab
    • -
    • Always - No requirements, always show it
    -

    In addition, the option Don't notify about "Stream offline" allows you - to never show when a stream changes status to offline, so you will only be - notified about streams going live or changing title/game.

    -

    Notification Type / Options

    -

    Select here whether to use the Chatty Notifications or the default - System Tray Notifications. This settings DOES NOT enable or - disable notifications altogether, just switch between the types.

    -

    If you have Chatty Notifications selected, you can change some - more options:

    -
      -
    • Position: In which corner the the notification appears on the screen
    • -
    • Screen: On which screen the notification appears (auto means - it's on the same screen as the Chatty window)
    • -
    • Display Time: How long the notification will be displayed - by default. This can vary a bit depending on the situation.
    • -
    • No User Activity: This is a tricky one. If you enable - this, then the notification will not be closed after the defined Display Time - if no activity was detected in the last few seconds. This can be useful - to still see notifications from a few minutes ago if you were away from - the computer. - The time defines - when the notification will be closed no - matter what, so older notifications won't stay there forever if you are - away from the computer for a bit longer. -

      Activity is tracked through two methods: - The first method is tracking the system-wide mouse movements, which is - done through an API that may not always return accurate information - (e.g. if you are in a game) and it only checks the position every few - seconds (only the last location is saved at any time for comparison). - The second method detects activity only inside of Chatty, by tracking - button presses and mouse actions (e.g. if you type a message, open a - dialog etc.).
    • +

      General Notification Settings

      +
      +
      Position
      +
      The corner of the screen the notification is displayed.
      -
    +
    Screen
    +
    On which screen the notification appears (auto means it's on the + same screen as the Chatty window).
    + +
    Display Time
    +
    How long the notification will be displayed by default. This can + vary a bit depending on the situation.
    + +
    No User Activity
    +
    This is a tricky one. If you enable this, then the notification will + not be closed after the defined Display Time if no activity was + detected in the last few seconds. This can be useful to still see + notifications from a few minutes ago if you were away from the + computer. The time defines when the notification will be closed no + matter what, so older notifications won't stay there forever if you + are away from the computer for a bit longer.
    +
    Activity is tracked through two methods: The first method is + tracking the system-wide mouse movements, which is done through an + API that may not always return accurate information (e.g. if you are + in a game) and it only checks the position every few seconds (only + the last location is saved at any time for comparison). The second + method detects activity only inside of Chatty, by tracking button + presses and mouse actions (e.g. if you type a message, open a dialog + etc.).
    +
    + +

    General Sound Settings

    +

    You can enable or disable all sounds here. Sounds are searched in the + displayed folder, which is the current working directory, although you can + also Change it to a folder of your choice. If you added or removed files, + you may have to use Rescan folder to make the files show up in + the list of sounds selectable in the event settings. You can Open + the folder in your standard file browser from here to add files to it more + quickly.

    + +

    The Output Device lets you choose the device on your + computer the sounds gets output to. This is kind of experimental and may + not work properly.

    +

    Followed Streams

    Enable this to make Chatty get a list of your followed streams regulary so it can display notifications if their status changes. This simpy allows @@ -942,6 +1005,7 @@ advantage. It also allows it to record the viewer count and status history of followed live streams as long as Chatty is running.

    +

    Log to file [back to menu] @@ -1130,7 +1194,15 @@ scroll through them.
    Scroll through tabs with mousewheel
    -
    Hover mouse over tabs and scroll to change tabs.
    +
    Hover mouse over tabs and scroll to change tabs. +
    +
    Scroll through tabs anywhere
    +
    Don't restrict scrolling through tabs to the tab bar, + although this mostly only applies to the inputbox. So you + can hover your mouse over the inputbox and scroll to switch + between tabs.
    +
    +

    diff --git a/help/help.html b/help/help.html index 882447c..e7f4c59 100644 --- a/help/help.html +++ b/help/help.html @@ -5,7 +5,7 @@ -

    Chatty (Version: 0.8.5.1)

    +

    Chatty (Version: 0.8.6)

    diff --git a/index.html b/index.html index 5128343..43815ae 100644 --- a/index.html +++ b/index.html @@ -15,9 +15,9 @@ function loaded() { { ceiling: null, text: "$years years ago" } ] } - document.getElementById("ago").innerHTML = "Version 0.8.5.1 released "+humanized_time_span("2017/04/14", Date(), custom_date_formats)+""; + document.getElementById("ago").innerHTML = "Version 0.8.6 released "+humanized_time_span("2017/05/27", Date(), custom_date_formats)+""; - getDownloads("v0.8.5.1"); + getDownloads("v0.8.6"); } function getDownloads(tag) { @@ -217,15 +217,15 @@ function getDownloads(tag) {

    Download & Getting started

    diff --git a/version.txt b/version.txt index aec0800..cfe1c79 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.8.5.1 Some Bugfixes \ No newline at end of file +0.8.6 New Notification system, Bugfixes, and more..