Changelogs

Streamer.bot v0.2.4

Released 2024-08-15

New Features

  • Add support for Multiple YouTube Broadcasts
  • Update UI to show list of YouTube Broadcasts that are available
  • Add new YouTube setting to auto-monitor broadcasts that are live
  • Add context menu item to monitor/unmonitor a broadcast
  • Add context menu item to delete a completed broadcast
  • Add handling of Twitch VIP Removed
  • Add new Trigger, Twitch VIP Removed
  • Add new Short Cut Key Handling
  • Add new event from HypeRate.io, Twitch Clip Created
  • Add new scopes for Twitch Broadcaster account
  • Load Twitch Broadcaster's available emotes on login
  • Add new triggers for Twitch Unban request events (create, deny, approve)
  • Add new trigger for Twitch unban and untime out events
  • Add initial Elgato Facecam Mk.2 support
  • Add trigger for Twitch Auto Reward Redemptions
  • Add Pally.gg integration
  • Add new Twitch sub-action, Set Channel Branded Content
  • Add new context menu for Run Action sub-action to goto the action selected
  • Add new Remote Trigger and Remote Signal features to Streamer.bot
  • Add 2 new triggers for when a Streamer.bot instance is connected or disconnected
  • Add local signals, this mirrors remote signals, but without the network round trip lag
  • Add 2 new sub-actions, Send Local Signal and Wait For Local Signal
  • Add new Simulated Event, Custom Event, allowing you to trigger Custom Events outside of C#
  • Add new context menu item to run a Twitch Poll again
  • Add support for Twitch Automod Held/Updated events
  • Add 2 new triggers for Twitch Automod Message Held and Twitch Automod Message Updated
  • Add 2 new C# Methods to Approve/Deny a Twitch Automod Held message
  • Add new Coin Exchange event for CrowdControl
  • Add new CrowdControl Trigger, Coin Exchange
  • Toast Notification can now handle relative paths for the icon
  • Add 9 new C# methods related to Global variables and incrementing values
  • Add 2 new C# methods to Enable/Disable an Action by its ID
  • Add Trovo broadcaster data when event source is Trovo
  • Add !quote support to Trovo
  • Add 2 new Triggers for Twitch Blocked Terms Added/Deleted
  • Add 4 new C# methods for Groups
  • Add support for pasting Sub-actions and Triggers onto a selected action
  • Add new C# method, AddQuoteForTrovo
  • Add a new database, commands.db
  • Add 3 new C# methods for Command counters
  • Add Streamer.bot.Common.Events to default usings for Execute C# Code
  • Add an IsEmpty check when exporting, and show dialog if there is nothing
  • Add 2 new C# Methods for Timers
  • Add Twitch EventSub handling for Suspicious User events
  • Add 2 new Sub-actions for Throwing System
  • Request new Twitch scope for Twitch Broadcaster account
  • Add 2 new C# Methods for getting YouTubeBroadcast and Bot user
  • Add new Trigger for Twitch Suspicious User Update event
  • Add a Copy Timer Id menu item to the Timer context menu
  • Add new C# Method, GetActions
  • Request new scope on Twitch Broadcaster account
  • Add support for new Twitch Warned API and Event
  • Add new Trigger for Twitch Warned User
  • Add new sub-action Twitch Warn User
  • Add new C# Method for Twitch to Warn User
  • Add new triggers for Twitch Permitted Term Added/Deleted
  • Add new sub-action, Speaker.bot Activate VoiceGate Profile
  • Add 2 new Twitch Sub-actions for Rewards
  • Add 2 new C# Methods for Twitch Rewards
  • VoiceMod integration requires a minimum version of 2.51
  • Add 4 new VoiceMod Triggers
  • Add new Twitch EventSub event, ChannelWarningAcknowledge
  • Add new trigger Twitch Warning Acknowledged
  • Add 4 new C# Methods for resetting command counters
  • Add included column for Queues in the Import dialog
  • Add a new Include All in Import context menu item in the Import Dialog
  • Added ability to stop sounds from playing
  • Add 2 new sub-actions, Stop Sound Playback, Stop All Sound Playback
  • Add 2 new C# Methods to stop sound playback
  • Kofi Donation Trigger now supports a range
  • Add new C# Method TwitchGetRewardUserCounters
  • Add new Fourthwall webhook events
  • Add new Fourthwall triggers
  • Add new Twitch Watch Streak event
  • Add Twitch Watch Streak data to Twitch data file
  • Add the ability to copy/paste sub-action groups
  • Add 2 new C# Methods for Enabling/Disabling a Timer by it's ID
  • Add 2 new C# Methods for Twitch Add/Remove Blocked Terms
  • Add OBS Vendor Event as a separate OBS Event
  • Add new OBS Vendor Event Trigger
  • Add a new C# Method to get Streamer.bot's version
  • Add new Twitch Poll Archived event and trigger
  • Add a new Events Feed button, this is still a WIP, and may not be fully working yet
  • Add 2 new Elgato CameraHub sub-actions
  • Add support for BetterTTV, 7TV and Twemoji to YouTube Messages
  • Add ability to mask variables in the Variable Viewer, this is user configurable
  • Add a Delete Filter Variables context menu in the Variable Viewer for when you are filtering variables

Updates

  • Update how No Delete confirmation is handled internally
  • Add a delete confirmation to MIDI In/Out and MIDI Events
  • Add a delete confirmation to Timed Actions
  • Misc updates and tweaks to some internal methods
  • Move Twitch VIP Add to EventSub from PubSub
  • Update TryGetArgs to convert data if a different type is used
  • Add some new icons in the burger menu
  • Promote some Twitch EventSub subscriptions to GA
  • Remove VStream
  • Switch a lot of Twitch PubSub events to EventSub counterparts
  • Add option to Read Random Line from File sub-action to overwrite variables
  • Improve the underlying socket code for the Streamer.bot Website integration
  • Change some library file names to match others
  • Improve the underlying socket code for the Streamlabs integration
  • Use Socket.io v4 for Streamlabs (from v3)
  • Rename and update some libraries
  • Tweaks to update shutdown and restart
  • Add some additional logging
  • Performance improvements to the Variable Viewer, when loading users for a platform
  • Auto add __source argument in some instances
  • Mark deprecated C# methods with the C# attribute Obsolete and cause a compilation error
  • Ignore when trying to fetch a Twitch User with the ID of 0
  • Reset Export metadata when clearing all items
  • Tweaks to StreamElements login routine
  • Internal tweaks to Elgato Library
  • Update Speaker.bot Set Paused State, states are renamed to Pause, Resume and Toggle
  • Add criteria selection to VTubeStudio Model Clicked Trigger trigger
  • Update AddQuote C# Methods, they will no longer allow a quote be added if quotes are disabled
  • HtmlDecode StreamElements Tip messages
  • Add Timer Id, and Name to TimedAction trigger
  • Update Twitch Create Poll sub-action to add pollId argument if successful
  • Update Twemoji to 15.1.0
  • Update CDN used for Twemoji emotes
  • Update LiteDB library
  • Increase minimum required version for Speaker.bot to 0.1.4
  • Update Read Random Line From File, Count now supports variables
  • Update all Read Line From File sub-actions to be able to specify the variable to use
  • Update Basic Discord Webhook to add the messageId to the arguments when successful
  • Update C# method, DiscordPostTextToWebhook to return a string instead of bool, which is the message id
  • Update sub-counter, rolloverThreshold is now rollover, to match the default text
  • Update and fix VoiceMod library
  • Update some Twitch EventSub events to GA
  • Better handling internally of Twitch HypeTrain Update/LevelUp
  • Update sub-counter file when setting a subcounter value directly
  • Update Twitch Sub and Twitch Resub events to include multimonth duration and tenure values
  • Add rawInput to Twitch Reward Redemption Update trigger
  • Update Import dialog's title
  • Rename Name to Host for Websocket Servers in the Import Dialog
  • Only show the command warning on importing if there are any commands being imported
  • Update Play Sound related C# method with optional name and useFileName parameters
  • Update C# Method, UpdateRewardCooldown, let 0 disable the global cooldown
  • Update handling of OBS Connections, and introduce a Default connection
  • Minimum version to upgrade from is now 0.2.0
  • Remove reliance on Google libraries for YouTube, and use a custom library
  • Remove unecessary scopes from YouTube Broadcaster account, only 1 scope is needed now
  • Update how command sources are handled when creating/editing a command
  • Update import handling of commands, wasn't properly applying upgrades
  • Allow Read From File sub-actions to have empty variable names
  • No longer pre-fill Read From File sub-action variable name with the default value
  • Add text on Read From File sub-action dialogs, what the default variable name will be if its left empty
  • Update IncrementOrCreate C# Methods to support all C# numeric primatives (short, int, long, float, double, decimal)
  • Update Twitch Cheer Event to include rawInput and other variables
  • Update how Importing/Exporting is handled
  • Stop logging Raw event sources when broadcasting across the Websocket Service
  • Tweaks to HypeRate's connection methods
  • Update connection handling for VTubeStudio
  • Update connection handling for Streamer.bot's Website Client
  • Update connection handling for TreatStream
  • Update UI for TreatStream account/client connections
  • Remove old, unused argument, raidType from Twitch Raid Start, Twitch Raid Send and Twitch Raid Cancelled Triggers
  • Update connection handling for OBS
  • Tweaks to Twitch Chat client connection, may or may not fix SSL issues
  • Add additional logging to Twitch Chat client connection
  • Update Twitch Add Random Users, allow Count to be a variable that will be parsed
  • Updates to Elgato CameraHub client
  • Updates to how the inline chat window is handled
  • Updates to inline chat's host object
  • YouTube Super Sticker events now include stickerImageUrl for the sticker image
  • Update Action Queue handling, this is now offloaded to it's own thread
  • Misc updates to some dialogs)

Fixes

  • Handle errors when trying to send an empty Twitch message
  • Handle errors trying to send Twitch messages when Broadcaster is not connected yet
  • Handle errors when trying to make changes to Twitch Channel Rewards when Broadcaster is not connected yet
  • Handle another potential crash when connecting to VTubeStudio
  • Handle sub-actions that no longer exist in SB instead of crashing
  • Fix Twitch Modes not working correctly
  • Fix Streamlabs disconnect event triggering a connect event
  • Fix Streamlabs triggers indicating they are Streamelements
  • Fix Twitch user being flagged as Mod when given VIP
  • Fix Twitch Timeout Trigger not working
  • Fix Twitch Stream Update Websocket data
  • Fix C# Midi Send Raw methods, they were outright failing
  • Fix C# Midi Send NoteOn/ControlChange methods, channel range check was wrong
  • Possible fix related to importing old import strings crashing Streamer.bot
  • Fix potential crash in OBS v5 code
  • Fix crash in Elgato WaveLink Filter triggers when testing
  • Fix config saving during shutdown to not debounce
  • Fix Timed Actions not being removed from an Export when clearing
  • Fix crash in Get Random Number sub-action when using a value larger then an int
  • Set default state to Enabled for Set Action State when creating
  • Set default state to Enabled for Set Sub-Action State when creating
  • Fix issue with the context menu for Timed Actions, was unable to add to export
  • Fix potential crash in Simulate Events when the event has a user selection, and a viewer is not found
  • Fix flipped to_broadcaster_user_* properties for Twitch Shoutout Created trigger
  • Fix crash when trying to remove permitted users from a newly created command
  • Fix commands directly altering permitted user settings when editing an existing command
  • Fix potential crash when receiving a Trovo Subscription
  • Fix crash related to Throwing System and ActivateTriggerByName and ThrowItemByName methods and sub-actions
  • Fix potential crash related to getting a list of Viewers that belong to a group
  • Fix not being able to set a command's Global or User Cooldown to 0 using C#
  • Fix Commands set to Start not using the command's Case Sensitive setting
  • Fix Fetch URL sub-action not properly parsing some JSON
  • Fix Twitch Hype Train Trigger tests not having a correct percent value
  • Fix potential crash in VTubeStudio Trigger Hotkey sub-action dialog
  • Fix StreamerbotStarted event missing the __source argument
  • Fix potential issue when logging into StreamElements
  • Fix the Forget button not being disabled while logging into StreamElements
  • Only Init() Execute C# Code that is in an enabled action and sub-action on startup
  • Fix wrong name for Elgato Camera Hub Epoc Set Torch Mode
  • Fix wrong dialog being used for Elgato Camera Hub Set Auto White Balance
  • Fix setting boolean based values for Elgato Camera Hub
  • Fix potential crash in Twitch Get Latest Subscriber sub-action
  • Fix issue with renaming sub-action groups, and being able to rename other sub-actions
  • Fix !quote del with no parameter causing a crash
  • Fix potential crash in Twitch Get Ad Schedule sub-action
  • Fix potential null ref crash in the internal handling of Twitch Ads
  • Fix possible crash when removing the default / endpoint for the Websocket Server
  • Fix \s not being replaced correctly for Twitch message replies
  • Fix possible null ref crash when testing a DonorDrive Donation Trigger
  • Fix the wrong button being updated in the TipeeStream UI Tab
  • Fix command handling for Twitch replies
  • Fix missing rollover argument for Twitch Sub-counter
  • Fix C# AddQuoteFor methods not causing a QuoteAdded event
  • Fix naming of Elgato EpocCam Set Torch Mode
  • Fix Elgato EpocCam Set Torch Mode working intermittently
  • Add missing arguments for Twitch User Timedout trigger test
  • Fix ThrowingSystem Throw Item By Name, was creating wrong sub-action
  • Fix VTubeStudio Model Clicked trigger not firing
  • Fix VTubeStudio Item Event trigger not firing
  • Fix Trovo Subscription trigger not firing
  • Fix Trovo Resubscription trigger not firing
  • Fix Trovo Mass Gift Subscription trigger not firing
  • Fix OBS Event Trigger, was not handling any connection properly
  • Fix some triggers that were missing the __source argument
  • Fix randomness in Pick Color sub-action
  • Fix Twitch Create Poll sub-action, setting channel points to 0 would break
  • Fix possible crash when a default browser is not configured, and one tries to authenticate
  • Fix Start Server button being disabled when WebSocket Server is unable to auto-start
  • Fix Elgato Webcam EpocCam Set BitRate sub-action dialog showing cameras, should show bitrate options now
  • Fix Elgato WebCam EpocCam Set BitRate sub-action, should actually set the bitrate, not the camera now
  • Fix Twitch Ad Timer triggering when stream is offline
  • Fix potential crash when creating a Twitch Poll, and using less than 15 channel point, will default to 15
  • Fix VTubeStudio Item Event type being empty
  • Fix VTubeStudio Model Clicked Event, was not triggering
  • Fix typo in VTubeStudio Get Current Model, timeSinceLoaded
  • Fix Command Trigger Tests not setting Trovo source when it's a Trovo command
  • Fix Command Trigger Tests picking a random user for the wrong platform
  • Fix potential crash in Global Variable Viewer when using UnsetAllUserVars for non persisted users
  • Fix Elgato Stream Deck start button ending up in a disabled state
  • Fix Twitch Prediction End, winningIndex was not being set correctly
  • Fix inline method parsing not correctly handling cases when it's not a method, and stripping the text out
  • Fix Elgato Camera Hub Set Zoom adjustment not working correctly, this still is done in 10 increments
  • Fix OBS Raw sub-action not using data returned from OBS 5.x batch requests properly
  • Add missing __source for Twitch Upcoming Ad trigger
  • Fix issue in ThrowingSystem disconnect code
  • Fix VoiceMod auto connect retry
  • Fix more typos in VTubeStudio Get Current Model, underlying data struct was parsing 2 fields wrong
  • Fix display of regex based Commands in the UI, location will now say Regex
  • Fix visual bug when importing WebSocket Clients, list would appear white and no longer update
  • Fix quick deleting of sub-actions, will not do anything if the deletion is still happening and you delete another sub-action
  • Fix Streamer.bot Remote Wait For Signal, was not cleaning up signal data correctly, switching instances would sometimes cause it to to trigger
  • Fix context menu in Import Dialog; Exclude All from Import will show up correctly for all lists now
  • Fix Import, when adding new items to various UI elements, they shouldn't double up if over-writing
  • Fix MIDI Sub-action dialogs causing a crash, Learn From being set to none was causing an issue
  • Fix internal crash when getting Trovo user info for a user that does not exist
  • Fix Twitch Hype Train Update and LevelUp simulate
  • Fix Twitch Timeout Duration being off by 1 second
  • Fix typo in Twitch Create Clip sub-action, isFeatured
  • Fix handling of Actions/Queue inclusions when excluding a command in the Import Dialog
  • Fix not being able to save VoiceMod Select Voice By Id sub-action
  • Some tweaks to validating Twitch tokens, still needs more work
  • Fix Actions being removed, instead of overwritten on import
  • Fix Commands being removed, instead of overwritten on import
  • Fix StreamLabs Charity Donation Trigger test
  • Fix crash in VTubeStudio Send Raw sub-action and C# method when a malformed request is sent
  • Fix some more potential crashes within VTubeStudio methods and response errors
  • Handle potential crash during Twitch authentication
  • Fix potential crash during configuration upgrade related to commands
  • Fix Pally.gg Campaign Tip Trigger test, tipNetAmountFormatted was incorrect
  • Fix Increment Variable C# methods not working correctly
  • Fix C# SetTimerInterval allowing an interval less than 0
  • Fix C# GetActions not having the enabled state of the action set
  • Fix potential crash when editing a command
  • Fix C# DeleteGroup not updating the UI
  • Fix potential crash when starting the HTTP Service
  • Fix potential crash when connecting to YouTube
  • Fix potential crash during OBS Connecting
  • Fix crash when editing a Timed Action that has intervals less than 0
  • Fix potential crash when parsing some Patreon events
  • Fix potential crash within Trovo Chat client
  • Fix potential crash in YouTube API handling, when getting channel description
  • Fix potential null value when trying to get Elgato Prompter channel information
  • Fix potential crash when updating a Twitch Channel Reward
  • Fix potential crash in the Action Queue when handling errors in the default queue, this may have caused the default queue to just stop processing
  • Fix potential crash when trying to connect to Twitch Bot account
  • Fix potential bad data when loading Twitch Rewards cache
  • Fix potential crash in the internal Twitch Present Viewers timer
  • Fix a potential crash in File Watcher Changed event when the file is deleted while it's trying to read it
  • Fix potential crash when trying to load Elgato WaveLink outputs
  • Fix potential crash when loading remote Streamer.bot instances
  • Fix potential crash when accessing the context menu of a variable in the Variable Viewer, and the variable is deleted
  • Handle potential crash related to threading when calling C# custom code's Init() method
  • Fix Elgato WaveLink integration
  • Fix some logging entries that were saying the wrong service name
  • Fix a potential FileNotFound crash at startup
  • Fix a potential crash when editing an Execute C# Code, and there is no Code
  • Fix a potential silent crash in the HTTP Service, this usually would not cause any issues
  • Fix Twitch Raid Start Trigger test having the wrong data in raidUserId
  • Fix 1Twitch Raid Cancelled1 Trigger test having the wrong data in 1
  • Fix arguments created for the Twitch Raid Send event
  • Fix C# method WaveLinkInputUnmute not muting mic
  • Fix C# method WaveLinkInputToggleMute not toggling mute on mic
  • Fix Twitch Ad Timer not starting correctly from a stream offline to stream online.
  • Fix potential crash in Twitch Raid Send and Twitch Raid Cancelled trigger test when random Twitch user no longer exists
  • Fix percentage values in Twitch Hype Train Update and Twitch Hype Train Level Up simulate events
  • Fixes to Elgato CameraHub client
  • Fix Elgato CameraHub Zoom for Facecam Mk.2 and Facecam Pro
  • Fix Elgato CameraHub Pan/Tilt for Facecam Mk.2 and Facecam Pro
  • Fix Elgato CameraHub Set Anti-flicker sub-action dialog, text was wrong
  • Fix Elgato CameraHub Set Noise Reduction sub-action
  • Fix a potential crash in VoiceMod client
  • Fix a potential crash in Websocket Service
  • Fix a potential crash in StreamLabs Website client
  • Fix crash when editing/creating a Command and setting the cooldown larger then int32 max value
  • Fix a potential crash when loading OBS Scene Data
  • Fix some test data in Twitch Poll triggers
  • Fix potential crash in OBS Raw sub-action when testing
  • Fix potential crash in DonorDrive monitor
  • Fix potential crash when connecting to Speaker.bot
  • Fix potential crash when retrieving list of Trovo Moderators
  • Fix potential crash in Trovo when validating tokens during API calls
  • Fix Elgato CameraHub Set Zoom adjustment for Facecam Pro and Mk.2
  • Fix potential crash when starting an Auto Update download
  • Fix potential crash in DonorDrive monitoring thread
  • Fix potential crash in multiple libraries when trying to send data on a closed socket
  • Fix potential crash when editing a Play Sound action and the Audio Device no longer exists
  • Fix potential crashses related to Clipboard access, and checking/pasting Triggers/Sub-actions
  • Fix potential crash in Global (Set) sub-action, when using User (redeemer), and there is no user

Streamer.bot Chat Updates

New Features

  • Tabbed Chat View
  • Tabbed view for each connected platform
  • Event Feed tab
  • Multiple YouTube Broadcast Support
  • YouTube tab allows filtering to specific YouTube broadcast
  • Global Quick Actions
  • Multi-Select Chat Toggles
  • You can now toggle exactly which connected platforms you wish to send chat to
  • Shift+Enter hotkey added to quickly override and send a message to all chats at any time

Updates

  • Improved Highlights
  • Added highlights for Mods & VIP's
  • Color customization
  • YouTube Events
  • Added a number of missing YouTube trigger events
  • Paused chat will now show number of new messages since you scrolled up
  • Added tooltips to various elements (Twitch badges, etc)

Details

YouTube

The YouTube integration no longer relies on the Google libraries, that's 5 fewer DLLs being supplied with Streamer.bot moving forward. However, these DLLs will be left alone if they are already present in your Streamer.bot folder.

Also moving forward, YouTube will only need 1 main scope to function. Because of the scope mis-match, it will ask to re-authenticate when you start Streamer.bot.

Emotes

With Streamer.bot 0.2.4, YouTube emotes are finally being parsed and sent along with message events. This includes emotes from YouTube (public ones), BetterTTV, SevenTV as well as Twemoji. There are 2 new arguments added to the YouTube Message event, parts and emotes. The parts contains the message as created in parts, and emotes contains a list of emotes in the message (like Twitch)

Ban/Timeout

Being able to Ban and/or Timeout a user in your YouTube chat is available as of 0.2.4.

Multi Broadcast Support

Here is an update I've had cooking for a while. Streamer.bot now supports handling multiple YouTube broadcasts.

The YouTube sub-actions have been updated to include a Broadcast dropdown, where you can select from All, Latest and Variable.

  • Using All will update all broadcasts
  • Using Latest will update the latest broadcast monitored
  • Using Variable uses the fixed broadcast.id variable to select the broadcast The send message methods have been updated, and will send a message to any broadcast that is currently being monitored. Also, the sub-action has been updated with a drop down to pick a broadcast, this will let you choose all, latest, or from variable. The variable option will use a variable that is set by YouTube events that indicate which broadcast they came from, and will send the message only to that broadcast.

Once you're logged into YouTube, the Broadcasts tab will be populated with your 20 most recent broadcasts. You can right click on a broadcast, and pick Monitor to start monitoring it. There is also a setting under Settings, to Auto Monitor Live Broadcasts. Broadcasts will not be auto monitored unless you either explicitly set it to, or enable auto for live broadcasts. Completed broadcasts can not be monitored.

Tags

You can now modify the Tags of a broadcast.

Within the YouTube platform tab, under Settings you can add default Tags. This acts as a basic list for quickly adding/removing tags on Broadcasts that are not completed.

When you right click on a Broadcast, there is a new menu item, Tags, there will be an item Add, where you can type in a tag to add, as well as a combined list of Tags the broadcast has, and the Tags you've added to the Default Tags under settings. If a broadcast has the tag, there will be a checkmark next to it.

This is an expensive call to make, and tags, as a string, comma separated are limited to 500 characters. Also, Tags are case sensitive.

New Sub-actions

Added the following new sub-actions for YouTube:

  • Ban User
  • Timeout User

New Triggers

Added the following new triggers for YouTube:

  • Broadcast Added
  • Broadcast Removed
  • Broadcast Monitoring Started
  • Broadcast Monitoring Ended

Events

It has come to my attention that certain events were not triggering, after some searching and testing, it appears that some events just flat out do not work.

The following YouTube triggers will never work until YouTube adds the data to the API.

  • Message Deleted
  • Message Retracted
  • YouTube Polls The last 2 do not exist as triggers yet, but wanted to make note of them.

Updated C# Methods

void SendYouTubeMessage(string message, bool bot = true, string broadcastId = null);

New C# Methods

void SendYouTubeMessageToAllMonitored(string message, bool bot = true);
void SendYouTubeMessageToLatestMonitored(string message, bool bot = true);
YouTubeBroadcastInfo YouTubeGetLatestMonitoredBroadcast();
List<YouTubeBroadcastInfo> YouTubeGetMonitoredBroadcasts();
bool YouTubeSetTitle(string title, string broadcastId = null);
bool YouTubeSetDescription(string description, string broadcastId = null);
bool YouTubeSetPrivacy(string privacy, string broadcastId = null);
bool YouTubeSetCategory(string categoryName, string broadcastId = null);
bool YouTubeSetMetaData(string title, string description, string privacy, string categoryName, string broadcastId = null);

YouTubeBroadcastInfo class

public class YouTubeBroadcastInfo
{
    public DateTime MonitoredAt { get; set; }
    public string Id { get; set; }
    public string ChannelId { get; set; }
    public string LiveChatId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string CategoryId { get; set; }
    public string CategoryName { get; set; }

    public List<string> Tags { get; set; }

    public string DefaultLanguage { get; set; }
    public string DefaultAudioLanguage { get; set; }

    public string Privacy { get; set; }

    public DateTime PublishedAt { get; set; }
    public string Status { get; set; }
}
bool YouTubeClearTags(string broadcastId = null);
bool YouTubeAddTags(List<string> tags, string broadcastId = null);
bool YouTubeRemoveTags(List<string> tags, string broadcastId = null);
bool YouTubeTimeoutUserById(string userId, int duration, string broadcastId = null);
bool YouTubeTimeoutUserByName(string userName, int duration, string broadcastId = null);
bool YouTubeBanUserById(string userId, string broadcastId = null);
bool YouTubeBanUserByName(string userName, string broadcastId = null);

Updating

The upgrade code was starting to get a bit unruly, and unnecessary to keep bringing forward, so, starting with 0.2.4, the minimum version supported for upgrading is 0.2.0. The auto-updater has already been updated, so anyone below 0.2.0 will be presented with 0.2.0 as an available update, and anyone on 0.2.0 or higher, will be presented with the latest.

Action Queue

I've applied some performance tweaks to how the Action Queue is handled within the UI.

This is now threaded and separate from the main queue threads, so what this hopefully means is, during high volume events, Streamer.bot's UI will not freeze like it did before. There still maybe some slowdowns, but this is due to the volume of adding/updating UI elements.

Masked Variables

There is a new tab under Settings called Variables, here you will be able to toggle the option Mask Variables Containing, and add/delete keytwords to the list of keywords that will cause a variable to be masked in the Variable Viewer

These settings are not real time, and any changes will require the Variable Viewer be re-opened after making changes.

Twitch

New Scopes

The following scopes are required on the broadcaster account now, these supoport the move from PubSub events to EventSub events

  • user:read:emotes
  • moderator:manage:unban_requests
  • moderator:read:moderators
  • moderator:read:vips
  • moderator:read:suspicious_users
  • moderator:manage:warnings

PubSub

It was mentioned in the last TwitchDev broadcast, that sometime in the near future PubSub would be deprecated. So starting with this alpha, I have moved a good majority of the events that rely on PubSub over to there counterparts on EventSub.

IMPORTANT

Take note, there are breaking changes with the update to EventSub for some events, specifically for those that rely on Streamer.bot's websocket messages.

This will affect the following events:

  • Timeout
  • Untimeout
  • Ban
  • Unban
  • Clear Chat
  • Moderator Add
  • Moderator Remove
  • VIP Add
  • VIP Remove

There are 4 events still left on PubSub, and they are:

  • Ad Midroll
  • Viewer Count Update
  • Community Goal Contribution
  • Community Goal Ended

The 2 community goal events do not have an equivalent in EventSub (yet), these goals are the channel point based goals, which seem to be overlooked by Twitch.

The Ad Midroll event will likely be going away, and I will expand the new Ad event that was introduced in 0.2.3.

The Viewer Count Update event has no EventSub counterpart, so this will require other means to obtain, but may not be as accurate.

Auto Reward Redemptions

These rewards, are the 5 fixed ones that you can enable/disable in your channel points.

These rewards are also now being tracked in the twitch data db.

Before it's asked, no, you can not enable/disable them from SB, as there are no API endpoints to do this as of this version.

Sub and ReSub Triggers

Twith Sub and Resub events now have 3 new variable, isMultiMonth, multiMonthDuration and multiMonthTenure

Watch Streak

When a user publicly shares there Watch Streak in your channel, you can now use the Twitch Watch Streak trigger to react to it, and this trigger has a Min/Max criteria. In addition, when a Watch Streak is shared, it is saved in the data repo for Twitch, for future use.

New Sub-actions

  • Reward Set Max Per Stream
  • Reward Set Max Per User Per Stream

New C# Methods

bool TwitchApproveAutoHeldMessage(string messageId);
bool TwitchDenyAutoHeldMessage(string messageId);
TwitchWarnUser(string userName, string reason);
void UpdateRewardMaxPerStream(string rewardId, long redeems, bool additive = false);
void UpdateRewardMaxPerUserPerStream(string rewardId, long redeems, bool additive = false);
List<TwitchRewardCounter> TwitchGetRewardUserCounters(string rewardId, bool persisted = true);
bool TwitchAddBlockedTerm(string term);
bool TwitchRemoveBlockedTerm(string term);

OBS

OBS handling in 0.2.4 received a little bit of TLC.

With the issues surrounding users deleting and recreating OBS connections, thus severing the link sub-actions had to the connection, I've expanded the usage of the Default connection for OBS.

Prior to 0.2.4, you could mark an OBS Connection as Default, and this would be used when you Import actions that contain OBS sub-actions, it would set them to use whatever is configured as default, and I'm pretty sure most weren't aware of this, or used it.

So, starting with 0.2.4, the Default connection has more meaning now.

First up, all sub-actions have a new entry you can pick in the connection drop down, Default, this will mean the sub-action uses whatever is configured as Default, this has also been applied to Triggers

Since this is an underlying change, a configuration upgrade will be performed, and the following will happen:

  • OBS Connections will be moved to there own json file
  • If there is only 1 connection, and it's not marked as Default, it will be marked as Default
  • If there are multiple connections, and none are marked as Default, then the first connection in the list will be marked as Default
  • All OBS Sub-actions will be updated, if there connection does not exist, or if the connection matches the Default, it will be changed to Default from the specific one
  • All OBS Triggers will be updated, using the same criteria as sub-actions, and those with Any will be left alone

When you add and delete OBS Connections, if you remove them all, and add a new one, it will automatically be marked as Default. If you remove the Default connection, then the first connection will automatically be marked.

Import/Export

Much like the config upgrades for Streamer.bot, starting with 0.2.4, you will no longer be able to import and exports from pre-0.2.0. While this isn't ideal, the entire import/export system was a bit fragile as not all configuration updates were being done, sometimes leading to bad data.

Also with 0.2.4, exports will now have default Minimum versions, this is set by me internally. Some of this code was already in place, it was just never enforced.

One last change, is stable releases will be able to import exports from pre-release versions however, a warning dialog will show when importing them.

Finally, I've gone through and fixed the upgrade paths from various versions, so data across the board should be correct now.

The entire import/export system was a bit neglected in this regard, so this allowed me to finally get it fixed up.

With the new version of Elgato WaveLink, v1.11.1, some of the data structures changed, which completely broke the integration. I have gone through and updated what is needed, and increased the minimum required version of WaveLink.

Moving forward, version 1.11.1 of WaveLink will be required.

Elgato CameraHub

I went through and did some testing with a Facecam Mk.2, and after much hair pulling, cursing, and just general wtfs, I've updated the CameraHub integration with fixes and tweaks.

New sub-action

  • Set Sharpness
  • Set Dynamic Range

Copy/Paste

With 0.2.4, you can now copy and paste sub-action groups. No longer do you need to copy 1 sub-action at a time, if they're grouped, you can copy the entire group.

HypeRate.io

HypeRate added a new feature to auto clip on Twitch, and the new event is related to this, it only triggers when HypeRate itself has created a clip.

THIS IS NOT an event for whenever a Twitch Clip is created, that does not exist in Twitch's EventSub/API capabilities at the moment.

Pally.gg

Pally.gg is now supported!

In order to setup Pally.gg, you will need an API Key from there website. You can get this from your dashboard.

Triggers Added

  • Connected
  • Disconnected
  • Campaign Tip

Fourthwall

The Fourthwall integration now supports the following new triggers:

  • Thank You Sent
  • Newsletter Subscribed
  • Gift Draw Started
  • Gift Draw Ended A Note about Newsletter Subscribed, the only data sent in this event is the users email, so please be careful how this is used.

Audio Service

With 0.2.4, you can now stop all playing sounds, or a playing sound. Yes, you heard that right, you can now stop sounds that have been started in Streamer.bot

2 new sub-actions have been added:

  • Stop All Sound Playback
  • Stop Sound Playback The first sub-action, Stop All Sound Playback does just that, it will stop any sound that has been started with the Play Sound, Play Sound From Folder or equivalent C# methods. Be sure to add this sub-action in a different queue then your sounds, or in in a non-blocking queue.

The Play Sound and Play Sound From Folder have received new properties, Name, and Use FileName as Name. By default, Name is empty, and Use FileName as Name is true.

The Name field can contain one of 4 values:

  • Leaving it empty will use a "default" name
  • Entering your own value into is, such as "specialSound"
  • Using a variable, this field will parse the variable, but if it's unable to, it will be the variable itself
  • If Use FileName as Name is enabled, then it will be the file name without the extension.

The second sub-action, Stop Sound Playback will let you stop a specific sound, by name. As outlined above, the name you want to use here, is what you set in the Name field in the Play Sound or Play Sound from Folder sub-action. This will stop all sounds that have this name.

Both of these sub-actions, if stopping a sound that you're waiting to complete, will return the duration of how long it played for.

Any existing Play Sound and Play Sound From Folder sub-actions will default to Use FileName as Name, this means, if the file you are playing is some-random-sound.mp3, then it's name will be some-random-sound

New C# Methods

void StopAllSoundPlayback();
void StopSoundPlayback(string soundName);

Updated C# Play Sound methods

double PlaySound(string fileName, float volume = 1.0f, bool finishBeforeContinuing = false, string name = null, bool useFileName = true);
double PlaySoundFromFolder(string path, float volume = 1.0f, bool recursive = false, bool finishBeforeContinuing = false, string name = null, bool useFileName = true);

VoiceMod

With the release of Streamer.bot 0.2.4, the VoiceMod integration will now require a minimum version of 2.51

This requirement was put in place to simplify some of the VoiceMod code, and overall to improve it.

New Triggers

  • Connected
  • Disconnected
  • Voice Loaded
  • Soundboard Changed

Commands

With this release, command counters have been moved to there own database. This allows for greater control and flexibility. Existing counters are converted over to the new database if they are persisted.

New C# Methods

int CommandGetCounter(string commandId);
CommandCounter CommandGetUserCounter(string userLogin, Platform platform, string commandId);
CommandCounter CommandGetUserCounterById(string userId, Platform platform, string commandId);

CommandCounter class

public class CommandCounter
{
    public string UserId { get; set; }
    public string UserLogin { get; set; }
    public string UserName { get; set; }
    public string Platform { get; set; }
    public int Count { get; set; }
    public int Source { get; set; }
    public DateTime LastUsed { get; set; }
}
void CommandResetCounter(string commandId);
void CommandResetAllUserCounters(string commandId);
void CommandResetUsersCounters(string userId, Platform platform, bool persisted);
void CommandResetUserCounter(string commandId, string userId, Platform platform);

Streamer.bot Website

The interop between the website and the application got a bit of a boost with 2 new features!

Remote Triggers, and Remote Signaling

For both of these features to function, while in alpha, 0.2.4-alpha.5 is the minimum required version for Triggers, and 0.2.4-alpha.6 for Signals.

This feature REQUIRES both instances of Streamer.bot to have the Website Integration connected.

Remote Triggers

You can now send a trigger to another instance of Streamer.bot that is logged into your account.

Much like the C# activate trigger, you are able to add a Streamer.bot Remote Instance Trigger trigger to an action, and specify any or a specific origin instance, as well as the custom name for the event. In another copy of Streamer.bot, you can use the Streamer.bot Remote Instance Trigger sub-action, to trigger that remote trigger.

You can also see an event history on the website under your settings, with the ability to replay triggers from there.

Remote Signals

You are now able to wait for signals sent by other instances.

There are 2 new sub-actions added:

  • Send Remote Signal
  • Wait For Remote Signal

The premise behind these 2 sub-actions is a way to communicate with another remote instance of Streamer.bot.

Send Signal

This will allow you to send a named signal, with or without arguments to either all, or a specific Streamer.bot Instance

Wait For Signal

This sub-action will, as the name implies, wait for a named signal from any or a specific Streamer.bot instance up to a specified timeout (default 30s), consume the arguments it received, and carry on with the rest of the action.

Run Action Sub-action

This sub-action has received a custom runtime menu item, Goto Action

Read Random Line from File

This sub-action has been updated to include an option to Overwrite Existing Variable(s)

If this is enabled, the variables added to the action, will always start at 0, and overwrite any existing.

Local Signals

Signals have been added for the local instance of Streamer.bot, these behave the same way as there Remote counter parts, but, are meant for local usage.

Shortcut Keys

I've gone through and hopefully fixed shortcut key, and also added a few new ones.

Global Keys Available

  • F1 - Launch https://docs.streamer.bot/
  • Ctrl + S - Save
  • Ctrl + Alt + I - Open Import Dialog
  • Ctrl + Alt + E - Open Export Dialog
  • Ctrl + Alt + C - Open Chat
  • Ctrl + Alt + V - Open Variable Viewer
  • Ctrl + L - Open your Log Folder

Actions, Sub-Actions, Triggers, Commands, Timed Actions, MIDI In/Out, MIDI Events, and Quotes all have shortcut keys as well.

Throwing System

This release received 2 new sub-actions

  • Throw Items
  • Throw Items By Name These sub-actions will let you throw multiple items in one sub-action

New C# Methods

Added the following C# Methods for Incrementing a global variable

void IncrementAllTwitchUsersVar(string varName, object value, bool persisted = true);
void IncrementTwitchUsersVarById(List<string> userIds, string varName, object value, bool persisted = true);
void IncrementAllYouTubeUsersVar(string varName, object value, bool persisted = true);
void IncrementYouTubeUsersVarById(List<string> userIds, string varName, object value, bool persisted = true);
void IncrementAllTrovoUsersVar(string varName, object value, bool persisted = true);
void IncrementTrovoUsersVarById(List<string> userIds, string varName, object value, bool persisted = true);
void IncrementOrCreateTwitchUsersVarById(List<string> userIds, string varName, object value, bool persisted = true);
void IncrementOrCreateYouTubeUsersVarById(List<string> userIds, string varName, object value, bool persisted = true);
void IncrementOrCreateTrovoUsersVarById(List<string> userIds, string varName, object value, bool persisted = true);

Added the following C# Methods for enabling/disabling an action

void DisableActionById(string actionId);
void EnableActionById(string actionId);

Added the following C# Methods for groups

List<string> GetGroups();
bool GroupExists(string groupName);
bool DeleteGroup(string groupName);
bool AddGroup(string groupName);

Added the following C# Methods for Timers

void DisableTimerById(string timerId);
void EnableTimerById(string timerId);

Added the following C# Method for Trovo Quotes

int AddQuoteForTrovo(string userId, string quote, bool captureGame = false);

Added the following C# Methods for Timers

void SetTimerInterval(string timerId, int interval);
bool GetTimerState(string timerId);

Added the following C# Method to Get Streamer.bot's version

string GetVersion();

Added the following C# Methods for YouTube

YouTubeUserInfo YouTubeGetBroadcaster();
YouTubeUserInfo YouTubeGetBot();

YouTubeUserInfo class

public class YouTubeUserInfo
{
    public string UserName { get; set; }
    public string UserLogin { get; set; }
    public string UserId { get; set; }
    public DateTime LastActive { get; set; }
    public DateTime PreviousActive { get; set; }
}

Added the following C# Methods for Actions

List<ActionData> GetActions();

ActionData class

public class ActionData
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public bool Enabled { get; set; }
    public string Group { get; set; }
    public string Queue { get; set; }
    public Guid QueueId { get; set; }
}