Changelogs

Streamer.bot v0.2.3

Released 2024-03-11

New Features

  • Add new Simulated Events
  • Add a new Dialog that can be used within Streamer.bot to search for Twitch user's both from the internal cache, and from within Twitch itself
  • Add a way to disable unused sub-actions
  • Add a way to disable unused triggers
  • Allow re-organizing of triggers, this is only a visual thing
  • Add new C# Method, TwitchUserInfo TwitchGetBot();
  • Add 7 new triggers for Streamlabs Desktop
  • Add new historical data collection to Twitch Data. Subscriptions, Gift Bombs, and Hype Trains are now recorded
  • Add option to disable Present Viewers timer for Twitch
  • Add option to completely disable the Action History, as well as Pending items
  • Add an option to disable the Viewers Tab, for performance reasons
  • Add an option to disable Twitch Present Viewers tick completely
  • Add ability to remove users from a group in the UI, by way of a right click context menu
  • Add new C# Method List<GlobalVariableValue> GetGlobalVarValues(bool persisted = true)
  • Add new sub-action to Get the SubCounter Count
  • Add new sub-action to Set the SubCounter Count
  • Add the display of the current SubCounter Count to the SubCounter tab
  • Add ability to edit the current value of the SubCounter in the UI
  • Add new sub-action to Add a Twitch User to a Group
  • Add new sub-action to Remove a Twitch User from a Group
  • Add a new integration for Fourthwall
  • Add direct support for alejo.io pronouns
  • Add a new platform, Trovo, as well as a new database to store platform specific data
  • Add 2 new C# Methods for accessing data in args
  • Add 2 new C# Methods for clearing non-persisted variables
  • Add a new context menu on a user to delete them
  • Add option to hide Splash Screen
  • Process Watcher is now a service that you can start and stop, with an auto start option, by default is is stopped.
  • Add a new Headless Mode
  • Add Timed Actions, Custom Websocket Servers and Clients to Import/Export
  • Add an option to flag an action as Auto Run on Import
  • Add new sub-action, Set Sub-action State
  • Add new trigger for Twitch Bot Chat Client Connected and Disconnected
  • Add a new File Tail service
  • Add a way to add a list of Twitch users to a group
  • Add new context menu item to groups, to search for a Twitch user (uses the new User Search dialog)
  • Add new integration for Speaker.bot
  • Add new Speaker.bot Speak sub-action
  • Add platform icons to Viewer list
  • Add setting to auto-open chat on startup
  • Request 2 new scopes on your Twitch Broadcaster account, related to the new Ad API calls that were added
  • Add a new platform VStream, as well as a new datbase to store platform specific data
  • Add sub-actions to add/remove users to/from groups, and check if they are in a group
  • Add new Trigger, Twitch Upcoming Ad
  • Add a new integration for Twitch Integrated Throwing System
  • Request 1 new scope on your Twitch Broadcaster account, related to new EventSUb events
  • Add logging when Twitch API rate limit is below 25% remaining
  • Add 7 new Twitch Triggers
  • Add 2 new VTubeStudio Triggers
  • Twitch Subscription Tier is added to arguments for subscribed users, subscriptionTier
  • Add 10 new C# methods for handling Trovo user globals
  • Add 10 new C# methods for handling VStream user globals
  • Add UserType to UserVariableValue class for C# usage
  • A new integration, Elgato Camera Hub!
  • Added 25 new triggers for the Elgato Prompter
  • Added 15 new sub-actions for the Elgato Prompter
  • Added 42 new triggers for Elgato Camera Hub Webcam
  • Added 16 new sub-actions for Elgato Camera Hub Webcam
  • Add adLengthMs for Ad Run Trigger, provides ad length in ms
  • Add some checks for WebView2 support during startup
  • A warning dialog will show if trying to open inline chat without WebView2 support on your machine
  • Add dlls folder to path for Find Refs in Execute C# Code sub-action
  • Add new C# Methods for obtaining the counters for Twitch Rewards
  • Add new Recent Sub-Actions menu item, this will show the last 10 sub-actions used, and is not persisted
  • Add new Recent Triggers menu item, this will show the last 10 triggers used, and is not persisted
  • 6 new C# methods for using MIDI
  • MIDI sub-actions will now remember the last selected learn device, as well as auto connect if it was open
  • Add ability to delete multiple triggers
  • Add Regex ExplicitCapture option for Regex based commands
  • Add 3 new Twitch sub-actions for polls, Create, Terminate, and Archive
  • Add a new Platform enum for use with C# methods
  • Editing permissions for commands has changed, and supports users across different platforms
  • Add new sub-actions for YouTube, Trovo and VStream to Add/Remove User to/from a group, and to check if a User is in a group
  • Show a user's subscribed status in the Viewer UI, this applies to Twitch, VStream and Trovo
  • Add userProfileUrl to YouTube command events
  • Add userIsSponsor to various YouTube chat events
  • Add new C# methods for Twitch Block and Unblock user
  • Add new Add User context menu item to Groups UI
  • Add reply data to commands for Twitch sources
  • Add new C# method to get all users in a group
  • Add a new option to Global Variable Update trigger, Persisted
  • Add a new Trigger, User Global Variable Update
  • Add Adjustment property to 3 Elgato Wave Link sub-actions for adjusting volume
  • Add Twitch Subscription Tier to Viewer UI, if user is subscribed
  • Add new argument commandName when handling commands
  • Add Trigger for Charity Donation event from Streamlabs

Updates

  • Update external libraries
  • Twitch Hype Train progress was re-added back to credits handling
  • Move Crowd Control triggers under Integrations
  • Don't color a trigger as blue if there are no criteria for it
  • Better handling of Twitch Chat for high volume channels
  • Performance tweaks surrounding Twitch Chat handling
  • More Twitch Reply information is added to the arguments, inspect an action that has a reply to see all the new fields, and note replyTo is no longer available.
  • Tweaks to some internal classes
  • Update Twitch SubCounter to move its data to the twitch data db for better saving
  • Update underlying control in Groups tab that shows the users in a group
  • Tweaks and improvements to startup routines
  • Remove Labs option to use the old queue
  • Move Performance options to General Settings Tab
  • Move Action Queue related sub-actions to an Action Queues sub-menu
  • Do Action sub-action uses the new Action selector to pick an action, instead of the dropdown
  • Get/Set Action state sub-actions use the new Action selector to pick an action, instead of the dropdown
  • Websocket Service error dialogs use new timeout capable dialog
  • Update Viewer details display to not show Twitch specific data (Bits, Channel Points) for non-Twitch users.
  • Add option to Fetch Url sub-action to parse the response as json. This will walk the json and add all values as variables
  • Remove support for Twitch Hype Chats
  • websocket-sharp library updated
  • First Words handling has been completely re-written
  • Update YouTube first words handling
  • Update Global Set sub-action, for Increment/Decrement, the data is now parsed, so variable and functions are supported
  • Speed up connecting to Twitch EventSub
  • Update sending of Twitch Chat Messages via the API, they are no longer sent through the IRC client.
  • Increase keep-alive timeout for Twitch EventSub to 30s from the default of 10s
  • Update Twitch Hype Train Triggers, adding total, progress, goal arguments for them
  • Update Delay sub-action to support inline parsing
  • Update source naming for triggers in UI to match context menu more
  • Update new OBS Connections to default to OBS 5.x
  • Updated connection routines and UI for StreamElements
  • Execute C# Code now stores relative references
  • Better handling of YouTube Quota Exceeded, you will now get a popup explaining when quota has been exceeded
  • Update Pulsoid to only send pulse rate when it changes
  • Update HypeRate to only send pulse rate when it changes
  • Update how UserIDs are handled across different platforms
  • Groups can now handle members from different platforms
  • Reserved groups (moderator, subscribed, vip) now properly check the respective user's platform
  • Group import/export within the UI has been updated
  • Displaying of groups, and users within have been updated
  • 3 C# methods have been deprecated, and no longer do anything
  • Update Group and Command related C# methods to include a user's Platform as an argument
  • Update self checks done during command processing to include VStream and Trovo checks
  • Deprecate C# Methods for GetClipsForUser where userId is an int
  • Add 6 new C# Methods for GetClipsForUserById
  • Update existing C# GetClips methods ot have an isFeatured parameter
  • Tweaks to 7TV Server Side Events handling
  • Update various Twitch events to have an isTest parameter, this will be true when the event comes from Simulate Events
  • MIDI Send Note On has been updated, the duration is now in milliseconds, instead of seconds
  • PlaySound sub-actions will now add soundLength and soundLengthMs to the arguments
  • PlaySound C# methods will now return the length of the sound in milliseconds
  • Custom Colors are now saved when added to color dialogs throughout the app, and restored when needed
  • Tweak some Twitch sub-actions to prefix Twitch to the description
  • Update platform handling in the Global Variable viewer
  • Update user handling in the Global Variable Viewer
  • No longer trigger OBS Disconnected, if the OBS instance was not connected to begin with
  • Update Command UI filter, to also filter on the Command Name
  • Update Twitch Add/Remove Moderator sub-action to the same dialog style as ban/timeout and perform a config upgrade
  • Perform a cleanup when loading globals, removing any user global that has no platform
  • Remove \s from Twitch Reply data

Fixes

  • Fix typos
  • Fix MIDI In/Out devices not being auto opened on startup if configured to do software
  • Fix Twitch Shoutout events parsing a users login/name incorrectly
  • Fix duplicate credit entries (originating from Twitch Shoutouts)
  • Fix duplicate users showing in viewer list (originating from Twitch Shoutouts)
  • Fix quotes being loaded too late in the chain for the UI to list them
  • Fix Viewer UI not expiring Twitch users when using Live Presence option
  • Fix handling of subscribed Twitch Viewers in chat messages, data could get out of sync when a re-sub or sub is not shared
  • Fix Set Sub Action state not properly invalidating internal random actions/group caches
  • Fix wrong source type for Elgato Wave Link InputLevelMeterChanged
  • Fix wrong mixer type being indicated for stream mixer in OutputLevelMeterChanged events
  • Fixes to Global Get/Set sub-actions to use proper id for reading/writing of user data
  • Fix text on Crowd Control integration tab
  • Fix Twitch Announce API call not using correct values
  • Fix Export dialog causing a crash after it was closed
  • Fix MIDI sub-actions causing a crash when using out of range values
  • Fix Twitch Clear Chat Messages sub-action
  • Fix potential crash in Streamlabs Desktop when handling messages (I need reports for this, as it is still occuring even with this fix)
  • Fix possible crash caused by DonorDrive parsing, seems some error response data has changed
  • Fix possible crash in HypeRate handling
  • Fix C# method OBSGetSGroupSources always returning an empty list
  • Fix Actions and Commands not showing red when disabled from load
  • Fix shutdown of StreamElements service when closing Streamer.bot
  • Fix ClearNonPersistedGlobal and ClearNonPersistedUserGlobals methods, they were causing a crash
  • Fix potential issue shutting down OBS services when closing Streamer.bot, and connections reconnecting themselves
  • Fix Twitch User Timedout event not including the user being timed out
  • Fix potential crash in Streamlabs Desktop when starting/stopping recording/streaming
  • Fix potential crash when connecting to VTubeStudio and not receiving authentication data
  • Fix error when Execute C# Code and Get Command Group State sub-actions exist in the same action
  • Fix Set Global increment/decrement, was not being auto-typed properly when entering a number
  • Fix Twitch bot account not having its status removed when forgetting its token
  • Fix Twitch Ban/Timeout related sub-actions, wrong user information was being added to the arguments
  • Fix potential crash in MIDI Note On sub-action when there are no MIDI In devices configured
  • Fix potential crash in Twitch Present Viewer trigger when testing
  • Fix another potential crash when connecting to VTubeStudio and not receiving authentication data
  • Fix potential craash when starting a Custom Websocket Server when the port is already in use
  • Fix version update being duplicated on main UI which switching release channels
  • Fix some client connect buttons not being initially disabled
  • Fix Twitch Delete Chat to use the correct account IDs
  • Fix actions not being properly invalidated when deleting, adding, or moving sub-actions
  • Fix Voice Control locale not being saved
  • Fix Twitch Gift Subs and Twitch Gift Bombs

Details

YouTube Quota

A quick update here, unfortunately it seems like every day the quota is being exhausted. Usually 3-4 hours prior to reset, or less.

The application to get more quota was submitted already, and it's currently just a waiting game. I'm hoping this is resolved soon, and Google gives me more quota.

Simulated Events

Prior to 0.2.0, one could test certain Twitch events from within the respective events tabs, and with the release of 0.2.0, this was change to be able to test the Triggers directly.

With the addition of Triggers, this opened up the ability to have multiple actions triggered by the same event, so in order to test this, you would have to goto each action, and test the trigger manually.

With 0.2.3, a new way of testing has been added, Simulated Events

Simulated Events are still initiated from a trigger's context menu, however, they will allow you to specify certain data (for instance, for a cheer, you pick the user, and specify the amount), and it will simulate this event application wide, so any triggers that match, will be run.

With this feature, also comes a way to not only search your local user cache, but, to also search against Twitch itself.

The API used for searching only returns users who have streamed within the last 6 months, this is a limitation of the API, and is not possible to circumvent

User Changes

This change has been a long time coming, especially after the introduction of 2 new platforms (Trovo and VStream).

Configuration updates will happen to users, groups, and commands, and anything that uses a user id in a global sense (i.e., it supports users from multiple platforms)

Overall, this enables a better internal tracking of users, while maintaining a platform's specific user id for the users themselves.

Trigger Update

So, way back when, 0.2.2-alpha.6 to be exact, a fix was put in dealing with Min/Max logic . This fix, while it worked for what was needed, cause another bug, which unfortunately went unnoticed, and wound up being included in 0.2.2 that went to stable.

The Issue

Lets say you have 2 actions, both of which have a Twitch ReSub trigger on them. One of the triggers is configured for Any Tier and Any Cumulative, the other is configured for Tier 1 and Any Cumulative.

What will happen with this scenario, is, when a Tier 1 resub happens, it will see that there are 2 triggers that could be used, but, since the Twitch ReSub has a Min/Max component, it goes on to further checks, and within these checks, it basically rules out the specific Tier 1 trigger, and leaves the Any trigger to be run.

Now, ofc, what's suppose to happen, is the Tier 1 specific trigger is suppose to run, and if you had Always Run Trigger enabled on the Any trigger, that should run as well.

The Fix

This is more of an evolution of the Trigger system, but, at the same time is a fix.

The secondary check mentioned above, no longer happens, instead, this happens:

Within the UI, when you right click on a trigger, there will be a new menu item, Don't Run If, and within this menu item, will be listed the action and criteria of the trigger of any of the same trigger types.

If a trigger has been marked as Don't Run If in another trigger, then it will not show up in the target trigger, this is a sanity check, otherwise a stalemate will happen and neither would run.

Example is as follows:

You have 3 actions, Cheer 1, Cheer 2, Cheer 3. Each of these actions has a Twitch Cheer trigger set to 1-100, 1-100 and Exact 50 respectively. The 1-100 trigger in Cheer 2, has Cheer 3 - Exact: 50 in it's Don't Run If menu item checked.

When you simulate a cheer for 50, the action history will show Cheer 1, and Cheer 3 as having run. This is because, Cheer 2's 1-100 Cheer trigger, is configured to not run if Cheer 3's Exact:50 trigger runs.

Before You Stream

After updating to this alpha, BEFORE YOU STREAM, be sure to check any triggers you have setup that have criteria, and may overlap in some way, and configure the Don't Run If settings for them.

This is unfortunately not something that can be done with a configuration upgrade, as, it has no idea what triggers are suppose to activate over others.

Twitch

C# Methods for GetClips have been updated with the isFeatured parameter. By default, this will behave as they were, and fetch clips whether they're featured or not. If this is set to true, then only clips that are featured will be fetched, and if it is set to false, then it will get clips that are not featured

Gift Subs and Gift Bombs

The Gift Bomb event was suppose to happen when there were 2 or more subscriptions gifted to the channel, this has now been fixed.

The following is what will happen with Gift Subs and Gift Bombs

  • A targeted gift sub is given, a Gift Sub event is triggered
  • 1 random gift sub is given, Gift Sub event is triggered
  • 2 or more Gift Subs are given, Gift Bomb event is triggered, and, unless ignored, Gift Sub events are also triggered

Poll Sub-actions

I know it's been a long time coming, but there is now a new sub-action to create a Twitch Poll, and all fields in this sub-action support argument parsing.

New Sub-actions

  • Poll Create
  • Poll Terminate
  • Poll Archive

New Triggers

  • Emote on/off
  • Subscriber on/off
  • Unique Mode on/off
  • Moderator Added/Removed
  • VIP Added

New Twitch Scopes

The following new scopes are being requested on your Twitch Broadcaster account:

  • channel:manage:ads
  • channel:read:ads
  • user:read:chat
  • user:write:chat
  • user:manage:blocked_users

Twitch Upcoming Ad

A new addition to this release is the handling of upcoming ads. With the addition of the ad schedule endpoint, Streamer.bot can now know when your next ad is coming up.

During various stages/events, a check is performed to see when the next ad is scheduled for. If it is, this will start an internal timer that is on a 30s tick, and will continusouly monitor this, and at the 5 minute prior mark, will send a TwitchUpcomingAd trigger, and will continue to do so at the 4, 3, 2 and 1 minute mark. After which, it hopefully resets itself and

This requires you to be using Twitch's built in Ad Manager to schedule your ads.

StreamElements

The UI for StreamElements has been updated to have the split style with logging into your account, and sub-service connections. All the underlying code has also been updated to support this new common display.

alejo.io Pronouns

With the release of alpha.19, VRFlad's extension for using alejo.io pronouns is no longer needed, as it is now a part of Streamer.bot itself.

This is the first iteration of this integration, so its not at parity with the extension yet.

Only 1 sub-action as been added so far, Add Pronouns for User, which will add a user's pronouns to the arguments.

Startup Performance Improvements

Yes, that's right, found a few more areas that were behaving a bit slow during startup, and handled them better.

This mainly affected users with a long list of actions and/or commands.

Trovo

After quite a while, Streamer.bot is being extended to support another platform, and this time it's Trovo

What's supported

  • Logging in to your streamer account
  • Sub-action to send a chat message
  • Added Trovo Message as a source for Commands

New Sub-Actions

  • Clear Chat
  • Get Latest Follower
  • Get Latest Subscriber
  • Clear Chat
  • Add User To Group
  • Remove User From Group
  • User In Group
  • Add Target Info
  • Add Moderator
  • Remove Moderator
  • Ban User
  • Unban User
  • Timeout User
  • UnTimeout User
  • Fast Clip
  • Set Channel Title

New Triggers

  • Broadcaster Authenticated
  • Broadcaster Chat Connected
  • Broadcaster Chat Disconnected
  • First Words
  • Present Viewers
  • Chat Message
  • Follow
  • Spell Cast
  • Custom Spell Cast
  • Raid
  • Subscription
  • Resubscription
  • Gift Subscription
  • Mass Gift Subscription
  • Stream Online
  • Stream Offline

VStream

Streamer.bot 0.2.3 is not only getting Trovo platform support, but it's getting VStream platform support!

New Sub-actions

  • Send Message
  • Add User To Group
  • Remove User From Group
  • User In Group
  • Add Target Info
  • Add Moderator
  • Ban User
  • Timeout User

New Triggers

  • Broadcaster Authenticated
  • Broadcaster Chat Connected
  • Broadcaster Chat Disconnected
  • Chat Message
  • Present Viewers
  • Chat Message
  • First Words
  • New Follower
  • Stream Online
  • Stream Offline
  • Chat Delete
  • Meteor Shower Received
  • Uplifting Chat
  • Subscription
  • Resubscription
  • Subscription Gifted
  • Subscriptions Gifted
  • Present Viewers

Added a new Adjustment property to Set Input Volume, Set Microphone Output Volume and Set Output Volume. This setting will allow you to increment or decrement the current value, instead of setting it to a specific value.

Elgato Camera Hub

New General Triggers

  • Connected
  • Disconnected

New Camera Sub-actions

  • Set Contrast
  • Set Brightness
  • Set Saturation
  • Set Zoom
  • Set Pan
  • Set Tilt
  • Set Focus
  • Set Auto White Balance
  • Set White Balance
  • Set White Balance Tint
  • Set Noise Reduction
  • Set Anti Flicker
  • Set ARLens
  • Set Camera
  • Set Bitrate
  • Set Torch Mode

New Camera Triggers

  • Webcam Connected
  • Webcam Disconnected
  • Webcam Activated
  • Webcam Deactivated
  • Selected Webcam Changed
  • Mirrored
  • Flipped
  • Device Orientation Changed
  • Exposure Auto Lock Enabled
  • Exposure Auto Lock Disabled
  • Snapshot Taken
  • Zoom Changed
  • Contrast Changed
  • White Balance Changed
  • Auto Exposure Enabled
  • Auto Exposure Disabled
  • Auto White Balance Enabled
  • Auto White Balance Disabled
  • Noise Reduction Enabled
  • Noise Reduction Disabled
  • ISO Changed
  • Shutter Speed Changed
  • Sharpness Changed
  • Anti Flicker Changed
  • Lens Changed
  • AR Lens Changed
  • Bitrate Changed
  • Flash Enabled
  • Flash Disabled
  • Pan Changed
  • Tilt Changed
  • Overscan Changed
  • Auto Focus Enabled
  • Auto Focus Disabled
  • Focus Changed
  • White Balance Tint Changed
  • Brightness Changed
  • Saturation Changed
  • Live ISO Changed
  • Live Shutter Speed Changed
  • Live White Balance Changed
  • Live White Balance Tint Changed

New Prompter Sub-actions

  • Fast Forward Chapter
  • Rewind Chapter
  • Set Chapter
  • Set Font
  • Set Font Size
  • Set Opacity
  • Set Line Spacing
  • Set Horizontal Margin
  • Set Vertical Margin
  • Set Brightness
  • Set Auto Scroll State
  • Set Mode
  • Set Contrast
  • Set Crosshair State
  • Set Crosshair Image
  • Get Selected Script
  • Set Script

New Prompter Triggers

  • Prompter Connected
  • Prompter Disconnected
  • Mode Changed
  • Brightness Changed
  • Font Changed
  • Font Size Changed
  • Auto Scroll Enabled
  • Auto Scroll Disabled
  • Auto Scroll Chapter Enabled
  • Auto Scroll Chapter Disabled
  • Scroll Speed Changed
  • Opacity Changed
  • Horizontal Margin Changed
  • Vertical Margin Changed
  • Line Spacing Changed
  • Font Color Changed
  • Background Color Changed
  • Selected Chapter Changed
  • Channels Changed
  • Selected Channel Changed
  • Contrast Changed
  • Crosshair Enabled
  • Crosshair Disabled
  • Crosshair Image Changed
  • Crosshair Color Changed
  • Selected Script Changed

First Words

First Words has been update to use a LiteDB now, instead of the previous caching method used. This capability is now platform independent.

The setting for first words auto reset is now platform independent, and this value only comes into effect during a startup of Streamer.bot

Each platforms Reset button, will only reset first words for that platform.

The C# method, sub-action, and http method to reset first words have been updated, and when these are used, they will reset the first words for all platforms.

Execute C# Code

With this update, any references that are either in Streamer.bot's execution path, or any subfolder will be stored as a relative reference.

For example, if you're referencing Semver.dll, it will be stored as a relative reference of .\Semver.dll instead of the full path.

Any references outside of Streamer.bot's execution path, will still be stored as the full path.

Speaker.bot Integration

It's been asked for, for a while, but here is the start of a more direct integration with Speaker.bot.

The new sub-action that was added, has 3 ways it can work.

  1. How you're use to with the UDP in a fire and forget fashion
  2. Silent option, when selected, this will only process the speech, and, if the setting is enabled in Speaker.bot, write the audio to a file, and will add a %speechFile% argument so you can pass it to a Play Sound sub-action, or other
  3. Delay option, the most requested feature, yes, this will delay the sub-action from continuing until the audio has been played by Speaker.bot

Using either the Silent or Delay option also introduces a timeout of 30 seconds, so it does not get stuck, in a future version, this may be configurable (within reason)

There are new sub-actions for interacting with Speaker.bot as well

  • Set Enabled State
  • Set Paused State
  • Stop Speaking
  • Clear Pending

NOTE This integration requires Speaker.bot v0.1.3

File Tail Service

With alpha.9, you can now tail a file. Once you have configured a file to tail, every time a new line is encountered, it will the File Tail Changed trigger to happen.

This trigger has the potential to be a high volume trigger, so be sure to exclude from the action history if it is going to be a lot of activity.

Fourthwall

New to this alpha is Fourthwall integration. This requires configuring via the website. So go to https://streamer.bot/, and log in to your account, then go to settings, and you should see Fourthwall on the left with the information required to configure the webhooks.

Be sure that the Streamer.bot Website integration is also logged in and connected.

All event types are supported.

VTubeStudio

The 2 new triggers, Item Event, and Model Clicked currently just relay information from the event. A future update will allow for filtering data from these events.

New Triggers

  • ItemEvent
  • ModelClicked

Twitch Integrated Throwing System

Guess I'm on a roll, or feeling generous. With this alpha, T.I.T.S. is fully integrated in Streamer.bot.

Since there are 2 services that require a connection, when you go to the integration tab, you will notice a Websocket, and an Events service. The later needs to be connected to be able to receive events from T.I.T.S.

There is at least one more Sub-action in the works, being able to throw multiple items.

New Sub-actions

  • Activate Trigger
  • Activate Trigger by Name
  • Throw Item
  • Throw Item by Name

New Triggers

  • Connected
  • Websocket Connected
  • Websocket Disconnected
  • Events Connected
  • Events Disconnected
  • Item Hit
  • Trigger Activated
  • Trigger Ended

Updates to Import/Export

The Importing/Exporting of Actions and Commands has grown! You can now also import/export timed actions, and custom websocket servers and clients.

The other change, for flagging an action to Auto Run on import. When a user performs an import, and an action has been configured to auto run, the user will be prompted if they want it to run, only if they agree will it be triggered.

Headless Mode

You read that right, you can now run Streamer.bot headless, as in no GUI, only a log file.

Consider this mode very very experimental, since there is no GUI initialization anymore, any actions/sub-actions that rely on UI elements will likely crash, I still need to go through and handle these.

To run Streamer.bot in headless mode, just add /headless, and to stop it, add /shutdown when running it. Streamer.bot.exe /headlessStreamer.bot.exe /shutdown

websocket-sharp Update

This is rather important information. With this release, I've updated this library, and I'm now compiling it myself, since its missing a feature that won't be added (for whatever reason). This library can of course be used in your custom C# code, and if you already are, depending on what you're using, it may no longer work due to some changes to the library from upstream.

The first change is with AddWebSocketService, if you were using the initializer, this has changed. The second change is for IWebSocketSession, there is no longer a Context property, you can now access the Websocket directly.

C# Method Deprecation

The following methods are deprecated, and no longer do anything

void CommandResetUserCooldown(string id, int userId);
void CommandRemoveUserCooldown(string id, int userId);
void CommandAddToUserCooldown(string id, int userId, int seconds);
List<ClipData> GetClipsForUser(int userId);
List<ClipData> GetClipsForUser(int userId, int count);
List<ClipData> GetClipsForUser(int userId, DateTime start, DateTime end);
List<ClipData> GetClipsForUser(int userId, DateTime start, DateTime end, int count);
List<ClipData> GetClipsForUser(int userId, TimeSpan duration);
List<ClipData> GetClipsForUser(int userId, TimeSpan duration, int count);

The following C# methods have been deprecated since 0.2.0, and starting with 0.2.3, they no longer function

T GetUserVar<T>(string userName, string varName, bool persisted = true);
void SetUserVar(string userName, string varName, object value, bool persisted = true);

These 11 methods will be removed in a future version.

New C# Methods

Added the following new C# methods

List<GlobalVariableValue> GetGlobalVarValues(bool persisted = true);

bool TryGetArg(string argName, out object value);
bool TryGetArg<T>(string argName, out T value);

void ClearNonPersistedGlobals();
void ClearNonPersistedUserGlobals();

bool ThrowingSystemThrowItemByName(string itemName, double delay = 0.05, int amount = 1);
bool ThrowingSystemActivateTriggerByName(string triggerName);

Dictionary<string, object> PronounLookup(string userLogin);
void PronounClearForUserlogin(string userLogin);

New C# Methods for Trovo

List<UserVariableValue<T>> GetTrovoUsersVar<T>(string varName, bool persisted = true);
T GetTrovoUserVarById<T>(string userId, string varName, bool persisted = true);
T GetTrovoUserVar<T>(string userName, string varName, bool persisted = true);
void SetTrovoUserVarById(string userId, string varName, object value, bool persisted = true);
void SetTrovoUsersVarById(List<string> userIds, string varName, object value, bool persisted = true);
void SetTrovoUserVar(string userName, string varName, object value, bool persisted = true);
void UnsetTrovoUserVarById(string userId, string varName, bool persisted = true);
void UnsetTrovoUserVar(string userName, string varName, bool persisted = true);
void UnsetTrovoUserById(string userId, bool persisted = true);
void UnsetTrovoUser(string userName, bool persisted = true);

New C# Methods for VStream

List<UserVariableValue<T>> GetVStreamUsersVar<T>(string varName, bool persisted = true);
T GetVStreamUserVarById<T>(string userId, string varName, bool persisted = true);
T GetVStreamUserVar<T>(string userName, string varName, bool persisted = true);
void SetVStreamUserVarById(string userId, string varName, object value, bool persisted = true);
void SetVStreamUsersVarById(List<string> userIds, string varName, object value, bool persisted = true);
void SetVStreamUserVar(string userName, string varName, object value, bool persisted = true);
void UnsetVStreamUserVarById(string userId, string varName, bool persisted = true);
void UnsetVStreamUserVar(string userName, string varName, bool persisted = true);
void UnsetVStreamUserById(string userId, bool persisted = true);
void UnsetVStreamUser(string userName, bool persisted = true);

New C# Methods for Twitch

TwitchRewardCounter TwitchGetRewardCounter(string rewardId, bool persisted = true);
TwitchRewardCounter TwitchGetRewardUserCounter(string userLogin, string rewardId, bool persisted = true);
TwitchRewardCounter TwitchGetRewardUserCounterById(string userId, string rewardId, bool persisted = true);

New C# Methods for Twitch Block/Unblock

bool TwitchBlockUser(string userLogin, TwitchBlockContext context = TwitchBlockContext.None, TwitchBlockReason reason = TwitchBlockReason.None);
bool TwitchBlockUserById(string userId, TwitchBlockContext context = TwitchBlockContext.None, TwitchBlockReason reason = TwitchBlockReason.None);
bool TwitchUnblockUser(string userLogin);
bool TwitchUnblockUserById(string userId);

New C# Methods for MIDI

void MidiSendRawByName(string name, int command, int channel, int data1, int data2);
void MidiSendRaw(Guid deviceId, int command, int channel, int data1, int data2);
void MidiSendNoteOnByName(string name, int channel, int note, int velocity, int duration = 0, bool sendNoteOff = false);
void MidiSendNoteOn(Guid deviceId, int channel, int note, int velocity, int duration = 0, bool sendNoteOff = false);
void MidiSendControlChangeByName(string name, int channel, int controller, int value);
void MidiSendControlChange(Guid deviceId, int channel, int controller, int value);

New C# Methods for Groups

bool UserIdInGroup(string userId, Platform platform, string groupName);
bool UserInGroup(string userName, Platform platform, string groupName);
bool AddUserIdToGroup(string userId, Platform platform, string groupName);
bool AddUserToGroup(string userName, Platform platform, string groupName);
bool RemoveUserIdFromGroup(string userId, Platform platform, string groupName);
bool RemoveUserFromGroup(string userName, Platform platform, string groupName);
List<GroupUser> UsersInGroup(string groupName)

Updated C# Methods for Commands

void CommandResetUserCooldown(string id, string userId, Platform platform);
void CommandRemoveUserCooldown(string id, string userId, Platform platform);
void CommandAddToUserCooldown(string id, string userId, Platform platform, int seconds);

New C# Methods for GetClips

List<ClipData> GetClipsForUserById(string userId, bool? isFeatured = null);
List<ClipData> GetClipsForUserById(string userId, int count, bool? isFeatured = null);
List<ClipData> GetClipsForUserById(string userId, DateTime start, DateTime end, bool? isFeatured = null);
List<ClipData> GetClipsForUserById(string userId, DateTime start, DateTime end, int count, bool? isFeatured = null);
List<ClipData> GetClipsForUserById(string userId, TimeSpan duration, bool? isFeatured = null);
List<ClipData> GetClipsForUserById(string userId, TimeSpan duration, int count, bool? isFeatured = null);

Updated C# Methods for GetClips

List<ClipData> GetAllClips(bool? isFeatured = null);
List<ClipData> GetClips(int count, bool? isFeatured = null);
List<ClipData> GetClipsForUser(string username, bool? isFeatured = null);
List<ClipData> GetClipsForUser(string userName, int count, bool? isFeatured = null);
List<ClipData> GetClipsForUser(string username, DateTime start, DateTime end, bool? isFeatured = null);
List<ClipData> GetClipsForUser(string username, DateTime start, DateTime end, int count, bool? isFeatured = null);
List<ClipData> GetClipsForUser(string username, TimeSpan duration, bool? isFeatured = null);
List<ClipData> GetClipsForUser(string username, TimeSpan duration, int count, bool? isFeatured = null);
List<ClipData> GetClipsForGame(int gameId, bool? isFeatured = null);
List<ClipData> GetClipsForGame(int gameId, int count, bool? isFeatured = null);
List<ClipData> GetClipsForGame(int gameId, DateTime start, DateTime end, bool? isFeatured = null);
List<ClipData> GetClipsForGame(int gameId, DateTime start, DateTime end, int count, bool? isFeatured = null);
List<ClipData> GetClipsForGame(int gameId, TimeSpan duration, bool? isFeatured = null);
List<ClipData> GetClipsForGame(int gameId, TimeSpan duration, int count, bool? isFeatured = null);

New C# Classes

TwitchRewardCounter class

public class TwitchRewardCounter
{
    public string UserId { get; set; }
    public string UserLogin { get; set; }
    public string UserName { get; set; }
    public int Count { get; set; }
    public DateTime LastRedeemed { get; set; }
}

GlobalVariableValue class

public class GlobalVariableValue
{
    public string VariableName { get; set; }
    public object Value { get; set; }
    public DateTime LastWrite { get; set; }
}

Platform enum

public enum Platform
{
    Twitch,
    YouTube,
    Trovo,
    VStream
}

TwitchBlockContext enum

public enum TwitchBlockContext
{
    None,
    Chat,
    Whisper
}

TwitchBlockReason enum

public enum TwitchBlockReason
{
    None,
    Harassment,
    Spam,
    Other
}

GroupUser class

public class GroupUser
{
    public string Id { get; set; }
    public string Type { get; set; }
    public string Login { get; set; }
    public string Username { get; set; }
}