Changelogs

Streamer.bot v0.2.5

Upcoming changes in the next release!

New Features

  • Add a possibility of a prompt when creating triggers, if there are no criteria
  • Add 2 new Twitch sub-actions, Get Active Poll, Get Active Prediction
  • Add a new sub-action, Set Trigger State
  • Add a new User Interface option to Disable Capturing of Variable Viewer Window, this requires the Variable Viewer to be re-opened after changing
  • Add new events related to groups
  • Add 5 new Triggers for Group Events
  • C# Method, TryGetValue will try to convert strings to Guid, when T is Guid
  • Add Triggers for HypeRate.io Connected/Disconnected
  • Add new C# Method, TwitchGetBlockedTerms
  • Add a new userGroup argument for actions, that will contain a comma delimited list of the groups the user is in
  • Add new C# Method, void TriggerCodeEvent(string eventName, string json)
  • Add some new internal methods for the Chat window
  • Add a new sub-action, Custom Event Trigger
  • Add a new sub-action, Twitch Create Prediction
  • Add new integration for mtion studio
  • Add 2 new sub-actions for mtion studio
  • Add new context menu item to Action History, Goto Action, that will go to the action that ran
  • Add a new argument, oldSceneName to the OBS Scene Changed event/trigger, this will contain the previous Scene's name
  • Add 2 new Speaker.bot triggers, Connected and Disconnected
  • Add new universal argument, unixtime
  • Update Twitch Send Message and Twitch Reply To Message sub-actions with better options
  • Update Twitch C# Methods related to sending messages to handle new fallback option.
  • Add new C# method, GetCommands
  • Add a new streaming application integration, Meld Studio!
  • Add 10 new sub-actions for Meld Studio
  • Add 8 new triggers for Meld Studio
  • Add 8 new C# Methods for Meld Studio
  • Add a Delete Confirmation when deleting Twitch Channel Rewards
  • Add Short Cut keys to Twitch Channel Rewards tab
  • Add new returningChatter argument to Twitch Chat Message and Twitch First Words events
  • Implement more events in Twitch Event Sub library
  • Add 4 new Events and Triggers for Twitch Prime Paid Upgrade, Pay It Forward, Gift Paid Upgrade and Bits Badge Tier
  • Added 9 new Twitch Shared Event triggers
  • Add new bonusGifts argument to Twitch Gift Bomb and Twitch Shared Gift Bomb events
  • Add a new Labs feature, Pending Action Cache!
  • Add new option for Actions, Exclude from Pending Cache, this option exists in the Context Menu for Actions
  • Add new OBS Sub-action, Create Record Chapter
  • Add new C# method, bool ObsCreateRecordChapter(string chapterName, int connection = 0);
  • Add 4 new Twitch Prediction sub-actions, to cancel, lock and resolve predictions
  • Add some new WebSocket Server request methods to support features in Dockable Chat
  • Add 8 new WebSocket request methods for accessing Global Variables
  • Add handling for Twitch Shared Moderator events
  • Add 5 new Twitch Triggers for Shared Moderator Events
  • Add Authentication option to WebSocket Server
  • Add new Twitch Shared Chat to sources for Commands
  • Handle commands that come from Twitch Shared Chat
  • Add a new GetUserPronouns WebSocket request for Dockable Chat
  • Add 2 new C# Methods to turn Twitch Shield Mode On and Off
  • Add Verbose logging for incoming WebSocket Server data
  • Update Streamlabs Website integration to use OAuth
  • Add 3 new events Application Events, Command Added, Command Updated and Command Deleted
  • Add year, month, day, hour, minute, second split data as arguments to Twitch Get Follow Age sub-action
  • Nearly all lists with columns have their widths saved and restored
  • Add handling of YouTube Poll Closed event
  • Add new YouTube Poll Closed Trigger

Updates

  • Update YouTube New Subscription trigger to show a prompt, indicating StreamElements is required for it
  • Add validation checks when creating a custom DonorDrive provider
  • Update LiteDB to 5.0.21
  • Add input# variables to YouTube messages
  • Add new option to Folder Watcher, Add Changed Data
  • Release Notes dialog now properly follows links
  • Messages that are sent from yout Twitch Bot account within Streamer.bot, are now flagged as internal
  • Add a minimum width to the Action columns, so they can't accidentally be hidden
  • Update how the creation of Twitch Rewards are handled, this means direct API calls will now show a new Reward
  • Update wording in Perform Command sub-action dialog, now says Target instead of Command, same as a Windows Shortcut
  • Updates to YouTube Trigger test methods and providing properly named test data
  • Add a new field, Info to 1Twitch Badge` class, this will contain the subscribed duration
  • Add MonthsSubscribed to Twitch ReSub, and Gift Sub related events
  • Update DonorDrive Donation Trigger, use DonorDrive's default Avatar Url in donarAvatarUrl
  • Add missing context menu items to the Trigger + button
  • Add payload data to the Websocket events for Custom Event and Custom Code Event
  • Small tweak to the YouTube Broadcast context menu, Monitor has been moved before the Privacy and Tags items
  • Add a randomUser to the Twitch Charity Donation trigger test
  • Tweak to how YouTube Statistic event works, should be a transparent change
  • Add YouTube broadcast information to the Websocket payload for the YouTube Command and YouTube Command Cooldown events
  • Tweak to when an Event's Websocket message is sent
  • Add special handling for C# TryGetArgs when dealing with Guid
  • When monitoring a YouTube broadcast that is not live, it will auto-unmonitor after 10 minutes to preserve quota usage.
  • Update some logging entries related to actions
  • Update connection methods for YouTube Broadcast and Bot account to setup these 2 users
  • Internal tweaks to Queue handling
  • Tweak to mtion studio process detection
  • Update OBS Set Image Source File to support Urls
  • Some tweaks to Elgato Camera Hub client
  • Update Twitch Announce to use the new UseBot and Fallback options
  • Some general cleanup
  • Update the handling of Twitch Gift Sub and Twitch Gift Bomb events
  • Add handling of Super Moderator to Trovo, they are now treated as a Moderator
  • Tweaks and fixes to internal handling of Twitch Channel Rewards
  • Provide a better error message if adding a Twitch Channel Reward fails
  • When adding a Twitch Channel Reward, the group of the reward or group selected is used by default
  • Add a mnemonic key to the No button on the dialog prompt, pressing N will dismiss it
  • Add a user's subscription tier to Twitch Chat Message WebSocket payload
  • Update Twitch Chat Message, and Cheer event WebSocket Payload to a new format, the deprecated Message property will still exist
  • Some tweaks to internal methods used when looking up users
  • Internal tweaks/fixes to parsing routines
  • Update OS detection
  • Update WebSocket payloads for Twitch Shared Chat Session events
  • Twitch Whisper, Twitch Announcement, Twitch Message Deleted and all Twitch Subscription events are now handled by EventSub
  • Update WebSocket payload for Twitch Clear Chat event
  • Update Twitch First Words to use new WebSocket payload
  • Some tweaks to Elgato WaveLink sub-action dialogs
  • Update Find Refs to provide error details if it is unable to load assemblies, this is related to the fix above
  • Add FadeTime to VTubeStudio Set Expression State sub-action
  • Update VTubeStudio C# Method, bool VTubeStudioActivateExpression(string expressionFile, float fadeTime = 0.25f);
  • General tweaks to Streamer.bot instances list/handling
  • Some minor refactoring to how WebSocket requests are handled internally
  • Add a source user object to Twitch Shared chat events, this contains the originating channel
  • Variable Viewer applies the filter for User Variables when selecting a different User
  • Twitch Chat Messages that are from a Shared Chat, are only handled as messages, and no longer go through Command, Pyramid, Quote, Cheer, and First Words handling
  • When logging out of Twitch accounts, properly disable some timers that should not be running
  • When logging out of Trovo accounts, properly disable some timers that should not be running
  • Flag messages from Inline Chat to no longer be internal, they will behave as if they came from outside of Streamer.bot
  • Update WebSocket Server Subscribe request to be a bit more robust
  • Update handling of Twitch /me chat messages, these are now sent via the API call, and should be properly flagged internal
  • Tweaks to Twitch Stream Update event
  • The Twitch Bot account no longer relies on Twitch Chat, instead, it connects to EventSub to handle any events it needs
  • Tweaks to WebSocket service handlers
  • Updates to SendMessage WebSocket request for Dockable Chat
  • Update Serilog logging to be threaded with async module, may gain performance improvements in high volume logging
  • No longer log Twitch EventSub KeepAlive related data
  • Add an Id to Twitch EventSub logging
  • Add some additional variables to Twitch Reward Redemption event
  • Tweaks to Streamlabs Desktop Client, the entire session is now cached and kept up to date in real time, improving some performance
  • Update Streamlabs Desktop Client to support Horizontal/Vertical sources
  • Update some Streamlabs Sub-actions with a new Horizontal/Vertical option, this defaults to both
  • Update some Streamlabs C# Methods
  • Tweaks to WebSocket Client Settings dialog, better indication of disabled items
  • Apply a minimum width to most List Columns, so they can not be shrunk out of existence
  • Remove API token from Lumia Stream logging
  • Remove API token from CrowdControl logging, and tweak subscription code
  • Add a longer timeout (20s) for the initial VTubeStudio authentication, when it asks the user to authorize the plugin
  • Add userProfileUrl variable to YouTube New Subscriber event from StreamElements
  • Update Twitch AutoMod events to new v2, which contains more data
  • Update Twitch AutoMod Hold and Twitch AutoMod Update events to contain more arguments
  • Prevent editing Midi In Device or Midi Out Device if the device is open

Fixes

  • Fix typos
  • Fix a long standing bug related to Authentication, this was not actually causing a crash
  • Fix potential crash during startup when checking for/creating application folders
  • Fix Twitch Archive Poll suba-ction showing Terminate instead
  • Fix Read Random Line From File sub-action, Overwrite option was not being saved
  • Fix Ctrl+Alt+C shortcut key, should now open Chat again
  • Fix changing the Enabled state when editing an action not being saved properly
  • Fix potential crash when adding a custom DonorDrive provider
  • Fix potential crash when adding a DonorDrive provider with a non-numeric ID
  • Fix Midi In Events context menu not working, you can now Edit, Delete and toggle Enabled again
  • Fix YouTube Command event, inputUrlEscaped# variables always had the full message
  • Fix potential crash in Execute C# Code editor when Finding Refs, and having a using statement not terminated properly
  • Fix being able to add an empty named Group in C#
  • Fix potential crash when connecting to Elgato WaveLink, handle some unexpected data
  • Fix not being able to upgrade from 0.2.0, 0.2.1, and 0.2.2
  • Fix potential crash when handling VoiceMod events
  • Fix unicode parsing issues in Twitch Channel Points Automatic Reward event
  • Fix potential crash related to Speaker.bot integration initialization
  • Fix potential crash when opening a Streamer.bot Remote sub-action
  • Fix potential crash in Throwing System client when parsing data
  • Fix a 0.2.3 to 0.2.4 upgrade issue with a lot of Commands and Counters, causing a slow upgrade
  • Fix C# Twitch Get Clips methods
  • Fix Perform Command sub-action to properly capture STDOUT when a Wait Time is specified
  • Fix potential crash when initializing Trovo Moderators
  • Fix potential crash related to Toast Notifications on Windows 7 (it's time to upgrade)
  • Fix Set Trigger State sub-action dialog text
  • Fix Set Sub-Action State sub-action dialog text
  • Fix Refresh Triggers context menu item only working when right clicking on a trigger
  • Fix potential crash in File Changed Events when unable to open the file
  • Fix C# Method TryGetValue and properly handle Guid types
  • Fix potential issue with right clicking within the Actions window
  • Fix a potential UI crashes in Perform Command sub-action dialog
  • Fix a potential UI crashes in Fetch URL sub-action dialog
  • Fix a potential UI crashes in IFTTT Notification Advanced sub-action dialog
  • Fix a potential UI crashes in PolyPop Trigger Alert sub-action dialog
  • Fix a potential UI crashes in Test Trigger dialog
  • Check for empty data when sending a Twitch Announcement
  • Fix potential crash when connecting to Elgato CameraHub and requests timing out
  • Tweaks to Twitch GetClips, and RFC3339 dates
  • Fix a potential crashes in YouTube Gift Membership Received Trigger test
  • Fix a potential issue when using C# method, YouTubeGetBot()
  • Fix a potential crash within the internal event handling and collections
  • Fix handling of Streamer.bot Remote sub-actions when not connected to the website
  • Fix a potential crash when checking for an update
  • Fix OBS Event Trigger, Default entry was not showing correct version of events
  • Fix Twitch Gift Sub tigger, 1 month was not saving correctly
  • Fixes when handling cloning of Dictionaries internally
  • Fix backup, was missing the new webview_settings file
  • Fix potential crash when selecting a YouTube broadcast updates the UI
  • Fix an internal issue/crash realted to OBS Events
  • Fix potential crash when retrieving data from Streamer.bot Website
  • Fix potential crash when connecting to Speaker.bot
  • Fix a potential crash in Elgato Camera Hub client
  • Fix an internal parsing error in Elgato Camera Hub client
  • Fix a crash that can happen when there is an exception in an Execute C# Code's constructor method
  • Tweaks to YouTube connection, and caching of certain data
  • Fix a potential crash, when trying to authenticate YouTube Broadcaster and YouTube Bot at the same time
  • Fix the potential for the wrong OBS Scene to be returned when changing OBS scenes after a disconnection
  • Fix the YouTube Present Interval incorrectly altering the present viewer timer
  • Fix the Twitch Present Viewer Interval incorrectly altering the present viewer timer when not getting live data
  • Fix Twitch Stream Offline endedAt variable not being in UTC
  • Fix Twitch GetClipsForGame C# Methods
  • Fix a potential crash when handling some Twitch EventSub events
  • Fix some settings for Twitch Rewards not saving properly
  • Fix Twitch Stream Update event triggering on content classification changes
  • Fix C# Method, TwitchGetRewardUserCoutners, should return correct data now
  • Fix excess spaces defeating the Internal message checks for Twitch
  • Internal tweaks/fixes for new events/payloads
  • Fix being able to add no user, when adding a user in Command Permissions
  • Fix the X clear button not working in the User Search dialog
  • Fix user selection, and context menu in Command dialog for the User Permission list
  • Fix potential crash when connecting the Speaker.bot integration to a port that is not Speaker.bot's
  • Fix error prompt when unable to start the WebSocket server
  • Fix a potential crash when shutting down
  • Fix a potential error when internally looking up a Twitch user in certain events
  • Fix a potential crash when testing the Twitch Guest Star Update trigger, 2 random users are required
  • Fix a potential crash in the Elgato WaveLink Set Filter State sub-action dialog
  • Fix a potential crash when clicking Find Refs in the Execute C# Code sub-action
  • Fix a potential crash when editing a VTubeStudio Set Expression State sub-action
  • Fix not being able to select Default queue in Set Action Queue Paused State sub-action
  • Fix Twitch Emote On/Off Trigger test having wrong variable
  • Fix Twitch Replies sent from within Streamer.bot not being properly flagged as internal
  • Fix potential crash when emote is not found for Twitch Gigantify Emote Automatic Reward Redemption, not even sure how this can happen
  • Fix some typos, add some new ones
  • Fix a potential crash related to Twitch First Words and Inline Chat
  • Fix a potential crash in Twitch Channel Update event
  • Fix a potential crash in VTubeStudio Trigger Hot Key by Name sub-action
  • Fix typo, isSubscribed, in some Twitch events
  • Fix handling of 7TV dupe bypass method
  • When forgetting Twitch Broadcaster/Twitch Bot token, clear some internal references that were never cleaned up
  • Fix a potential crash when handling FourthWall Draw Started and Draw Ended events
  • Tweaks to OBS authentication
  • Fix a potential crash when dealing with Commands
  • Fix a potential crash when trying to send a message on a closed WebSocket Server session
  • Fix a potential crash when closing Chat or Event Feed windows
  • Fix a potential crash in CameraHub client with missing data
  • Fix a potential crash when handling Trovo Present Viewer tick
  • Fix a potential crash when handling Trovo UI events, and Streamer.bot is shutting down
  • Fix a potential crash in TipeeeStream when trying to send data to a closed socket
  • Fix a potential crash in Elgato CameraHub when retrieving available WebCams, and the request times out
  • Fix Twitch Predictions and Twitch Polls UI, can no longer refresh these when the Broadcaster is not logged in
  • Fix not being able to start the Websocket Server after encountering an error starting it
  • Fix missing constructors for some classes that get serialized/deserialized
  • Fixes/tweaks to WebSocket Service Subscribe request
  • Fix a potential crash when testing OBS Recording or OBS Streaming, Started and Stopped triggers
  • Fix a potential crash when Importing
  • Fix a potential crash in VTubeStudio's message handling
  • Fix a potential crash when loading the list of Editors for the Twitch Broadcaster
  • Fix a potential null ref when loading YouTube Categories when logging in, it will prevent the login now
  • Fix a potential crash when testing the Twitch Reward Redemption Trigger
  • Fix a potential crash when StreamElements Client is trying to reconnect, but a user clicks the Logout button
  • Fix a potential crash related to some Twitch WebSocket payloads and gift data
  • Tweaks/fixes to Twitch Bot Event Sub login methods
  • Fix Twitch Viewer Count Update event not passing the viewer count parameter
  • Fix a potential crash in WebSocket service handling
  • Fix a potential crash when removing a Command from an Export that no longer exists
  • Fix a potential crash when deleting an Action via a Hotkey that no longer exists or is not selected
  • Fix potential crash when loading 7TV channel emotes, and there is no image URL
  • Tweaks to Twitch EventSub Connection/Disconnection
  • Fix an issue when entering your Pally.gg URL
  • Fix StreamElements UI disabling wrong Forget button
  • Fix potential crash in the YouTube client when a Monitored Broadcast is deleted
  • Fix potential crash when trying to update a YouTube Broadcast that no longer exists
  • Fix deleted YouTube Broadcasts that are Monitored not being correctly removed in the UI
  • Fix YouTube Broadcast UI, setting button states, and deselecting deleted Broadcasts if they are selected
  • Fix wording for Streamlabs Desktop Settings Add/Edit dialog
  • Fix some Application Events having incorrect friendly names
  • Fix Trovo Present Viewer Tick, Live Data is not a supported option, so it behaves like YouTube now
  • Fix potential crash in OBS UI when using Forced Connection option, UI was not overriding Default/Forced when retrieving info
  • Fix C# Method, TwitchGetRewardUserCounters not having the user's count
  • Fix loading of Twitch VIP users on connection for non-affiliate users
  • Fix potential internal crash when WebSocket Server authentication fails
  • Fix Kofi Donation event not passing amount as a parameter for the Trigger criteria
  • Fix validation logic in the Custom WebSocket Client dialog
  • Fix potential crash when attempting to login to YouTube, but the ports used for auth are in use
  • Fix logic for Global (Set) Decrement, was not setting initial value correctly if variable did not exist
  • Fix delete shortcut key showing the confirmation dialog for Midi In Devices and Midi Out Devices when the device is open
  • Fix Midi Device deletion dialog not showing the device name
  • Fix validation handling for Midi In Device and Midi Out Device dialogs
  • Fix validation handling for Midi Event Settings dialog
  • Fix Midi Message Trigger triggering if the Midi Event associated with it has been deleted
  • Fix disconnecting YouTube not shutting down properly, preventing monitoring from starting again when connecting

Details

Most of the fixes/changes going into this release can be considered a hot fix release, which is why it is going straight into beta

YouTube

With 0.2.4 and the Multi Broadcast support feature, you could now monitor any type of broadcast, so you can do testing while not live. Monitoring a broadcast that is not live consumes the same amount of quota as a broadcast that is live, and there are no mechanisms in place to stop monitoring a non-live broadcast.

Starting with 0.2.5, in order to help limit quota usage, any non-live broadcast if monitored, will be un-monitored after 10 minutes. If you still need to do testing, etc, you can always monitor the broadcast again.

This is mostly in place for those that might monitor a broadcast, and forget to monitor it, and it runs for hours.

Meld Studio

I couldn't wait till TwitchCon any longer, so, for those that have been asking for it, it's finally here. Meld Studio integration!

A very important note, Meld Studio is still a work in progress application, as such, so is the integration for it. It is something that will evolve over time as more and more features are added and exposed for 3rd party tools to take advantage of.

There are 10 new sub-actions:

  • Get Current Scene
  • Show Scene
  • Get Status
  • Recording
  • Streaming
  • Take Screenshot
  • Set Layer Visibility State
  • Set Effect Enabled State
  • Set Layer Track Muted State
  • Set Track Muted State There are also 8 new triggers:
  • Connected
  • Disconnected
  • Recording Started
  • Recording Stopped
  • Streaming Started
  • Streaming Stopped
  • Scene Changed
  • Event

C# Methods

A connection index of -1 is the fall back to Default

int MeldStudioGetConnectionByName(string name);
bool MeldStudioIsConnected(int connectionIdx = -1);
bool MeldStudioConnect(int connectionIdx = -1);
void MeldStudioDisconnect(int connectionIdx = -1);
bool MeldStudioShowScene(string sceneId, int connectionIdx = -1);
bool MeldStudioShowSceneByName(string sceneName, int connectionIdx = -1);
bool MeldStudioShowLayerByName(string sceneName, string layerName, int connectionIdx = -1);
bool MeldStudioHideLayerByName(string sceneName, string layerName, int connectionIdx = -1);

Streamer.bot Chat

This release brings a new WebSocket server mode to Streamer.bot Chat, allowing it to function in any web browser environment.

Yes!, this includes OBS custom browser docks, and even remote mobile devices for those of you savvy enough to setup tunnelling to your Streamer.bot WebSocket Server 😉

Limitations

  • Much work has been done to reduce the limitations of chat when using the WebSocket Server mode. However, you will notice that many direct moderation actions are disabled in WebSocket mode. You can still work around this with your own quick actions.
  • Configuration settings are separate from the main chat application. Though this may be more of a feature than a limitation depending on the user 😄
  • You can now sync settings from the main Streamer.bot chat window to WebSocket windows in Settings -> General

There will be bugs

Some things are very much still a work in progress, and some event payloads are still being updated to catch up with recent Streamer.bot application changes.

Streamer.bot Configuration

  • The Streamer.bot WebSocket Server must be enabled
  • To send chat messages, you must also enable authentication

Thanks to some of the error reports, I was able to spot some unusual data coming from Elgato WaveLink when making certain calls, this is now hopefully being handled.

Folder Watcher

The new option, Add Changed Data, which defaults to true, will add changed data withini the File Watcher Changed event. If you do not need the changed data in this event, or you know for a fact that the files are binary, it is highly recommended to uncheck this option.

Pending Action Cache

A restart is REQUIRED after enabling or disabling this labs feature, and by default, it is disabled.

This labs feature will, on close, write to a database any outstanding pending actions. Pending actions are actions that have not yet run, and are waiting to run, either because they're in a blocking queue, or a queue that is paused.

When Streamer.bot is started, if this cache file is present, it will auto load in any actions that have been cached, as well, it will pause the queue that they belong to. In addition, an argument will be added, wasCached, this will be set to true; during normal operation, this variable will not exist.

This feature is very experimental, and I need feedback on it, for options, capabilities, etc.

A caveat to note, due to the nature of serializing/deserializing, not all data types will preserved. Ones that I am aware of are List<T> objects, these will become object[] arrays when loaded.

NOTE

Consider this feature experimental, and hopefully will evolve over time. Keep in mind, being a lab feature, does not guarantee it will get added as full fledged feature.

YouTube

During some testing, I noticed the Poll closed event was actually coming through in the data, so this is wired up.

Twitch

Added 2 new sub-actions with this release, Get Active Poll, and Get Active Prediction. Both of these sub-actions will add an argument active that is either true or false. If this is false, then there is currently no running poll or prediction. If it is true, then the data for the poll or prediction will be added to the arguments, in the same format as the triggers.

There is a new sub-action, Twitch Create Prediction. Yes, that means you can finally use the UI to create a prediction instead of relying on C# code to do this. Much like the Twitch Create Poll sub-action, all fields support variables and methods, this includes the outcomes.

Gift Bombs and Gift Subs

For a while, the Gift Sub and Gift Bomb events have been giving users intermittent troubles, and after looking more in depth at some verbose logs, I think I was finally able to solve most, if not all the issues with these events. Hopefully moving forward, these events are a bit more reliable.

Just to re-iterate how and when these events fire:

  • A user in your chat directly gifts another user in your chat a sub, this will trigger a Twitch Gift Sub event
  • A user in your chat gifts 1 random sub, this will trigger a Twitch Gift Sub event
  • A user in your chat gifts 2 or more subs, this will trigger a Twitch Gift Bomb event, and if Ignore Gift Subs from Bombs is not enabled, it will also trigger a Twitch Gift Sub for every gifted sub.

Some new variables have been added to the Gift Sub and Gift Bomb event.

  • random - Whether or not this was a targeted Gift sub, this will only be true for single gift subs that were directly given to a user.
  • systemMessage - The system message that was put into Twitch Chat.
  • totalSubsGiftedShared - A boolean value if the user gifting the sub(s) shares there total gift count. random is only available in the Twitch Gift Sub event, while the rest are available in both events

Send Message, Reply to Message and Twitch Announce

Send Message, Reply To Message, Twitch Announce sub-actions received a small update. Prior to 0.2.5, you needed to specify a preferred account to use, either the Broadcaster, or the Bot. If the preferred account was the Bot account, and it was not connected, it would fallback to the Broadcaster account.

These 2 sub-actions have done away with the preferred account, and have 2 new options, Send using Bot account, and Fallback to Broadcaster. How these options work is outline below:

  • If Send using Bot account is checked, and Fallback to Broadcaster is checked, this is the same behaviour as if you had Bot as your preferred account
  • If Send using Bot account is checked, and Fallback to Broadcaster is not checked, it will try to send using only the Bot account, and do nothing if it can't (i.e, not logged in)
  • If Send using Bot account is not checked, then it will send using the Broadcaster account

A configuration upgrade is also in place, it will convertt any Twitch Send Message/Twitch Reply To sub-actions to the new format, and if Bot was the preferred account, then both new settings will be checked

Shared Chat

Twitch recently released the Shared Chat feature/capability, and support for it is being added to 0.2.5.

With beta.12, support for the new source tags has been added to Twitch Chat Message events. And at the moment, this data is only exposed to Chat Message and Cheer triggers. Commands, pyramids and first words are still being worked on, and should be available for use in a shared chat in a future beta version.

Payloads for various existing Twitch EventSub events have been updated to handle the new Shared Chat data, but at the moment, this data is not exposed yet, as there are quite a few events to work through and figure out.

Finally, the 3 new events for Shared Chat, Begin, Update and End, have been added as new Triggers

Commands received a new source, Twitch Shared Chat, this will allow you to handle commands from other chats within a Shared Chat Session

13 new events/triggers were added, that hopefully will be working with Twitch's new Shared Chat feature.

New Shared Chat Triggers

  • Shared Chat Announcement
  • Shared Chat Pay It Forward
  • Shared Chat Prime Paid Upgrade
  • Shared Chat Gift Paid Upgrade
  • Shared Chat Sub
  • Shared Chat Resub
  • Shared Chat Sub Gift
  • Shared Chat Gift Bomb (Community Sub Gift)
  • Shared Chat Ban
  • Shared Chat Unban
  • Shared Chat Timeout
  • Shared Chat Untimeout
  • Shared Chat Message Deleted

Predictions

To round out the Prediction sub-actions, there are 4 new sub-actions that can be used to interact with the current active prediction.

  • Cancel Active prediction
  • Lock Active prediction
  • Resolve Active Prediction
  • Resolve Active Prediction by Title

C# Methods

The C# methods have also been updated. The only thing that has changed, is a new optional parameter fallback to introduce the same behaviour in the sub-action

The new signatures for them are
void SendMessage(string message, bool useBot = true, bool fallback = true);
void TwitchReplyToMessage(string message, string replyId, bool useBot = true, bool fallback = true);
void SendAction(string action, bool useBot = true, bool fallback = true);

Twitch Shield Mode Methods

bool TwitchShieldModeOn();
bool TwitchShieldModeOff();

These changes will be transparent, and will only need updating if you wish to change the behavior

Reward Redemptions

Reward Redemption events have had 5 variables added to them, they are:

  • skipsQueue - Whether or not the Reward is auto completed when redeemed
  • requiresUserInput - Whether or not the Reward requires user input
  • maxPerStream - How many redemptions can be done per stream, 0 is disabled
  • maxPerUserPerStream - How many redemptions a user can make during a stream, 0 is disabled
  • globalCooldown - The global cooldown of the Reward in seconds

Groups

Groups got a bit of an update, there are now events, and triggers associated with them.

New Triggers

  • Group Added
  • Group Removed
  • Group Cleared
  • Group Users Added
  • Group Users Removed

Streamlabs Website

This is a breaking change, since Streamlabs is making it harder for new users to retrieve their API token, I've finally switched it over to an OAuth type Authentication.

The UI for Streamlabs has been updated with the common login and client connections.

If you are using the Streamlabs integration, be sure to login after starting 0.2.5 to continue receiving events

Streamlabs Desktop

The Streamlabs Desktop integration has been updated to support Horizontal and Vertical sources. In order to better handle these sources and just overall tracking, an internal session is kept of your Streamlabs, and almost all events are handled to keep it updated in real time.

Unfortunately, Groups are completely broken in Streamlabs Desktop. They do not emit any data changes, nor do they have unique enough IDs to be able to figure out which belongs to Horizontal or Vertical. Also, there is no way via WebSocket to enable/disable, or perform any sort of actions or transforms on them. TLDR; use nested Scenes for better control.

The following C# Methods have been updated.

bool SlobsIsSourceVisible(string scene, string source, StreamlabsDesktopOutputType output = StreamlabsDesktopOutputType.Both, int connection = 0);
void SlobsSetSourceVisibility(string scene, string source, bool visible, StreamlabsDesktopOutputType output = StreamlabsDesktopOutputType.Both, int connection = 0);
void SlobsSetSourceVisibilityState(string scene, string source, int state, StreamlabsDesktopOutputType output = StreamlabsDesktopOutputType.Both, int connection = 0);
void SlobsShowSource(string scene, string source, StreamlabsDesktopOutputType output = StreamlabsDesktopOutputType.Both, int connection = 0);
void SlobsHideSource(string scene, string source, StreamlabsDesktopOutputType output = StreamlabsDesktopOutputType.Both, int connection = 0);
void SlobsHideGroupsSources(string scene, string groupName, StreamlabsDesktopOutputType output = StreamlabsDesktopOutputType.Both, int connection = 0);
string SlobsSetRandomGroupSourceVisible(string scene, string groupName, StreamlabsDesktopOutputType output = StreamlabsDesktopOutputType.Both, int connection = 0);

The StreamlabsDesktopOutputType enum

public enum StreamlabsDesktopOutputType
{
    Both = 0,
    Horizontal = 1,
    Vertical = 2
}

New C# Methods

There is a new overload method for TriggerCodeEvent

void TriggerCodeEvent(string eventName, string json);

This method accepts a json string, that Streamer.bot will parse itself. The reason for this, is because of the way the C# code is handled and kept separate, you can not use your own object types within a Dictionary that you pass to the other methods of this, or use JObject, JArray types

New C# Method for Getting a list of commands

List<CommandData> GetCommands();

CommandData class

public class CommandData
{
`public Guid Id { get; set; }
public string Name { get; set; }
public bool Enabled { get; set; }
public string Group { get; set; }
public int Mode { get; set; }

public List<string> Commands { get; set; }
public string RegexCommand { get; set; }

public bool CaseSensitive { get; set; }

public List<string> Sources { get; set; }
`}

Custom Event Trigger Sub-action

This new trigger allows you to Trigger a Custom Event from within a sub-action. Previously you had to use the C# method, TriggerEvent(string eventName, bool useArgs = true). This will allow you to trigger any Custom Event triggers that are created.

mtion Studio

Time for a new feature, with 0.2.5 we're introducing a basic integration for mtion studio.

There are 2 new sub-actions that can be used

  • Get Active Clubhouse
  • Send Trigger This integration is a bit different, as there is no service to connect to, if you wish to use it, just add either of these sub-actions

OBS

There was a bug that popped up in the beta series for 0.2.5 after making a serialization change to how Streamer.bot handles it's events internally. I was finally able to track this down to the OBS series of events, and because of this, I have changed the data structure for these events.

This data structure is mainly used for Streamer.bot's Websocket, so if you subscribe to any OBS events, they will be a bit different.

This is what the base JS data will be for any OBS Event, some will have additional information.

{
    "timeStamp": "2024-09-09T19:43:35.1226962-04:00",
    "event": {
        "source": "Obs",
        "type": "<event here>"
    },
        "data": {
        "connection": {
            "id": "edaf6e6e-5040-487e-8ac2-0d5720610e14",
            "host": "<host>",
            "name": "<name>",
            "version": "<version>",
            "websocketVersion": "<version>"
        }
    }
}

If you were relying on any OBS events from Streamer.bot's Websocket, take note, the data has changed, and this is a breaking change.

WebSocket

With the release of 0.2.5 the payload for a Twitch Chat Message, and Cheer are changing. The Message property will stay for backwards compatibility, but is now deprecated, and will be removed in a future version, please update and code to use the new payload data.

The new payload format is still being tweaked, and should be finalized by the time 0.2.5 hits stable, so if you are using these 2 events, feedback is welcome.

Added a handful of new WebSocket requests, these will allow you to get Global Variables, as well as User Variables.

  • GetGlobals
  • GetGlobal
  • TwitchGetUserGlobals
  • TwitchGetUserGlobal
  • YouTubeGetUserGlobals
  • YouTubeGetUserGlobal
  • TrovoGetUserGlobals
  • TrovoGetUserGlobal

Authentication

With 0.2.5, the WebSocket Server has a new Authentication option, this uses the same authentication method that OBS WebSocket uses.

When connecting to Streamer.bot's WebSocket, you will receive a hello msg, regardless if authentication is enabled or not, this new packet, will contain an info object, that contains the same information from a GetInfo request.

If authentication is enabled, there will be an authentication object that contains a salt and a challenge string. You will use these 2 values, as well as the password to create an Authenticate request.

{
"id": "<some_id_string>",
"request": "Authenticate",
"authentication": "<authentication_string>"
}

You will need to send the above request back to Streamer.bot in order to authenticate. To build the authentication string, you will need to do the following:

  • Concatenate the WebSocket password with the salt provided by the server (password + salt)
  • Generate an SHA256 binary hash of the result and base64 encode it.
  • Concatenate the base64 secret with the challenge sent by the server (base64_secret + challenge)
  • Generate a binary SHA256 hash of that result and base64 encode it.
  • The resulting string is what you will use for authentication. The docs will be updated to describe these steps in more/better detail.

Also note, there is a new option, Enforce for All Requests, when this is enabled, the WebSocket is expecting an Authenticate request as your first message, if any other request is performed, the socket will be closed. There is also a 30s timeout, where it expects this request be sent, before automatically closing the socket.

The Streamer.bot Client is updated to support this new authentication method.

MIDI

The validation checks performed in the Midi Event Settings dialog have been fixed, which means you can only specify a channel from 1 to 16 if Ignore Channel is not checked, and data value of 1 to 255 if Ignore Data is not checked

Code Signing

It's coming up on a year since obtaining a Code Signing certificate, and I have renewed the certificate today. So moving forward, any new releases, will be using the new certificate.

What this means for older releases once the certificate expires, nothing, as they are properly timestamped, they will continue to function as normal.