Changelogs

Streamer.bot v1.0.0

Next Major Version!

Welcome to Streamer.bot 1.0 BETA! Yes, you read that right! Streamer.bot 1.0 is now available for those with the beta role.

Be sure to read my latest letter to the community before diving headfirst into this update. Come see what Streamer.bot 1.0 BETA has to offer!

What’s New?

Dark Mode

Let’s start with one of the most anticipated features: Dark Mode. Streamer.bot 1.0 received a complete redesign of its UI, along with Dark Mode. For those that still wish to have a Light Mode, there is an option to switch.

Kick Integration

Probably the second most requested feature is Kick Integration. I’m happy to announce that Streamer.bot 1.0 now supports Kick natively. At first, during the alpha when this was announced, it was planned that access to Kick integration would be a supporter perk because it needed a connection to the website to work. However, since my letter to the community in July, the support has been very positive, so I have decided to make the Kick integration free for use. Yes, you read that right! I’ve removed the supporter perk requirement for Kick, and anyone can use it for free.

Cloud Backups

Streamer.bot has always created its own backups every time it is started, but with 1.0 as a supporter perk, users will be able to create and upload backups to Streamer.bot’s servers which can be recovered at any time.

Custom Webhooks

Streamer.bot currently supports 4 services through webhooks: Patreon, Kofi, Fourthwall, and Shopify. Since Webhooks require an intermediary site with full SSL capabilities typically, Custom Webhooks are being introduced as a supporter perk. These will allow users to create their own webhooks to (almost) any site that supports them. Note: There will be a few sites that will be outright denied from creating webhooks for, largely for volume reasons, and this will be monitored for abuse.

Decks 2.0

Already released, and available for everyone to use, Streamer.bot’s decks have gotten a massive overhaul thanks to the ongoing efforts of Whistickgostop. Decks will remain mostly free; however, supporter perks will raise some of the free limits on them.

Other Notable Changes

  • Nestable sub-action groups
  • Updates to Logic If/Else sub-action – sub-action can be directly added to them
  • New Logic sub-actions – Switch and While
  • C# Code editor now uses Monaco
  • HotKeys are now triggers and support any key combination
  • Support for YouTube’s new PushAPI (near real-time chat and more efficient quota usage)
  • The ability to host your own files from the integrated HTTP Server
  • ... and so much more! This is just a taste of the major updates that are available in Streamer.bot 1.0, so be sure to also check the changelog available on the website to get a more detailed breakdown of the fixes, changes, and additions that come with 1.0.

To access your supporter perks, login to Patreon in your Streamer.bot Account Settings. Moving forward, all roles related to supporter perks and alpha access will be handled this way.

If you wish to support me, or this project, please head over to https://www.patreon.com/nate1280. Remember, supporter perks start at the Thank You tier, which for the duration of the beta is only $2 a month with the option to support for a year. Once Streamer.bot 1.0 is released as stable, this will increase to $3.

How to Update

I know you’re probably asking but how do I update?! Well, this is quite easy, and here is a simple step by step list to get you updated:

1

Have the beta role in Discord, and login to the website to link your account.

2

Close your copy of

Streamer.bot 0.2.8.
3

Step 3

4

Re-launch

Streamer.bot 0.2.8.
5

Go to the Integrations,

Streamer.bot Website tab and login.
6

In

Streamer.bot click the top left menu, then Check for Updates
7

Pick the beta release channel.

8

Click Download & Install and patiently wait while

Streamer.bot updates itself to 1.0
9

Enjoy

Streamer.bot 1.0! It’s been a year in the making.

How to Connect to Kick

Due to the way Kick is setup, you will need to not only login to Kick within Streamer.bot, you will need to also login to the Streamer.bot Website and link your Kick account there.

After this, you will be able to connect to the client. It requires you to be logged into Streamer.bot (bottom-left corner of your Streamer.bot window). If you are already logged in, go to the Kick platform, and make sure the Chat Client is connected.

New Features

  • UI Converted to WPF
  • Dark Mode
  • Kick Platform support
  • Cloud Backups
  • Custom Webhooks
  • Decks 2.0
  • Nestable sub-action groups
  • Sub-action groups can have their own color!
  • Logic If/Else has been updated, true/false are now groups, and can add sub-actions directly to them
  • New Logic Switch Case sub-action
  • New Logic While sub-action
  • Execute C# Code sub-action now uses the Monaco editor
  • HotKeys are now at a trigger level, and support any combination
  • Add YouTube poll handling for starting and updating.
  • Streamer.bot has been updated to .NET 4.8.1
  • Add new sub-actions for Meld Studio, Set Browser Layer Url and Take Vertival Screenshot
  • Added a User Profile drop down in the Title Bar for your Streamer.bot Account
  • Add new Triggers for Global Variable Created and Global Variable Deleted
  • Add new sub-actions to add YouTube and Trovo broadcaster information
  • Add support for 7TV Zero Width emotes
  • Add new inline function, $parse()$
  • Add new option Minimize to Tray on Close
  • Add ability to change the Backup Folder location
  • Add ability to manually create a Backup
  • Add Auto-Save, this will happen every 5 minutes
  • Add a new context menu item in Global Variable Viewer for Persisted and Non-Persisted user tabs to delete the selected variable for all users
  • Add a warning to Import, when the Import contains an Execute C# Code sub-action
  • Add new Default settings for Actions and Commands
  • Add ability to add a path mapping to the HTTP Server allowing for hosting files
  • All Sub-Actions and Triggers that are editable, now have a ? help button in their dialog that opens the docs site
  • Add a new Trigger, Clipboard Changed, for when data is put on the Clipboard
  • Add a new Sub-Action, Streamlabs Spin Wheel to trigger a wheel spin on Streamlabs
  • Add Group criteria to Group Users Added and Group Users Removed triggers
  • Add Group criteria to Group Cleared trigger
  • Add a list of connected Stream Deck applications to the Elgato Stream Deck Integration page
  • Add new C# Methods for Trovo
  • Add Twitch Suspicious User Message event and Trigger
  • Add 2 new YouTube sub-actions to Create Poll and End Poll
  • Experimental support for Twitch Onboarded accounts

Updates

  • Update common libraries and packages
  • Update Twitch EventSub AutoMod subscriptions
  • Twitch PubSub is no longer used
  • Command Settings are now in the WebSocket payload
  • Logic If/Else sub-action now adds Regex matches/groups as arguments
  • Twitch Add Random User has been updated to work with groups
  • Update YouTube and Trovo Send Message to use the updated fall back options
  • Update Twitch Add Target Info, Add Follow Age, Add VIP, Remove VIP, Add Team Info and Trovo Add Target Info to use the new style of specifying a variable
  • WebSocket DoAction now returns the ID and initial arguments associated with the queued Action
  • Application Crash messages will only show once now, instead of doing a solitaire win move
  • The built in !quote command has been removed and replaced with new sub-actions
  • How to favourite/unfavourite a Trigger or Sub-Action has changed, you now do this directly on a Sub-Action or Trigger that you've added
  • Update alejo.io Pronoun integration to support using the alt pronoun option
  • Move HTTP Get Methods to /api/
  • Start monitoring for USB Removal on demand if there are Midi devices configured
  • Tweak how Headless mode is started internally
  • Twemoji was updated to v16.0.0
  • Update Voicemod Client to support Voicemod v3
  • Require Voicemod v3.12 as minimum version
  • Add a manual check for System.Linq using, and auto add the System.Core.dll reference when using Find Refs
  • Add addTargetResult argument to Add Target Info sub-action when it is successful
  • First Word triggers, are now under Chat instead of General for Twitch and Trovo
  • Update YouTube to use new PushAPI
  • Add Test method to Trovo Stream Offline and Trovo Stream Online trigger
  • Update Logic If/Else sub-action, Does Not Exist now supports parsing in the Variable Name, the end result of parsing still needs to be the literal name of an argument

Fixes

  • General fixes and tweaks, too many to track over the course of 10 months
  • Fix adding Trovo Broadcaster info to args, they were flipped
  • Fixes related to Elgato WaveLink 2.0.x, the 4 Input sub-actions should work again for the microphone
  • Fix forgetting Trovo Account, tokens were not fully cleared
  • Remove a check in Websocket Server message handling that could cause the message queue to stop working
  • Fix a potential crash when trying to connect to Speaker.bot with an invalid address
  • Fix crash in OBS Filter based sub-actions when a Source has no filters
  • Fix potential crash in Streamlabs Client, when an event has no data
  • Fix crash when responding to a StreamDeck command but socket is already closed
  • Fix potential crash in OBS Flip Horizontal and OBS Flip Vertical sub-actions
  • Fix crash when retrieving Twitch Channel Rewards, and API indicates user is not an Affiliate or Partner even though they are
  • Fix crash in Voice Control sub-actions when there are no Voice Control Commands
  • Fix crash when browsing for a file, and the existing folder is on a drive that is no longer available
  • Fix crash in Elgato WaveLink when getting inputs times out
  • Fix crash in Elgato WaveLink when adding a Filter to an Input that had no filters
  • Fix crash in Streamlabs when validating token times out
  • Fix crash in Elgato WaveLink when events happen before fully initialized
  • Fix a potential crash when browsing for folder (in any dialog that supports this) and the path is invalid
  • Fix a few potential crash scenarios in Elgato CameraHub client
  • Fix Twemoji parsing related to the Variation Selector-16 unicode value
  • Fix Twitch SevenTV Emote Removed sub-action, wording said added
  • Fix potential crash when getting monitored YouTube Broadcasts by Websocket
  • Fix a potential crash in TwitchGetEmotes and YouTubeGetEmotes Websocket/HTTP requests
  • Fix potential crash in Midi Out Note On sub-action
  • Fix error message for GetUserGlobals HTTP/Websocket request
  • Fix potential crash when clearing a Viewer Group
  • Fix ObsSetColorSourceColor C# Method, was creating hex color wrong
  • Fix Fourthwall Donation trigger criteria not working
  • Fix Trovo Add Target Info sub-action, was retrieving wrong user type
  • Fix potential crash when handling Websocket Subscribe message
  • Fix potential crash when handling RunAction requests
  • Fixes/tweaks to handling of available update data
  • Fix a potential crash when using Get Commands sub-action
  • Fix Streamer.bot instances not properly updating their connected state
  • Handle potential errors in Voice Control and stop monitoring when they're encountered

Details

Surprise! This has been many months in the making, but there is finally a new UI in town, and it's been completely re-written in WPF. This means I'll have so much more flexibility. In addition to that, there is now a Dark Mode, the most requested feature.

Now for the bad news, I have not tested this, so I'm not sure how this will effect extensions that use custom designed WinForms dialogs for settings and such. The conversion to WPF is quite simple, and I will likely post a small template at some point to get you started.

Now, this is an alpha, this means there will be bugs, that is the whole point of it entering this stage first. If you wish to use this as your daily driver, be aware, things may or may not function correctly.

Want access to alpha, subscribe to nate1280's Patreon. alpha access now starts at Bronze Tier or higher.

Sub-Actions

Sub-actions got a bit of an overhaul as well, before, groups could only be top level items, now, they can be nested as much as you want, more flexibility when using the random option on a group now.

Logic If/Else

Logic If/Else has received a power-up, no longer do you need to specify an action to run for the true/false parts, you can now just add your sub-actions directly to the true/false groups, and because these are containers, that means you can nest groups as well.

Logic Switch

New with this release is a new Logic sub-action, the Switch Case. Same applies to this sub-action, add your logic switch, and you can add case groups, which can in turn have sub-actions nested in them

Logic While

New with this release is the Logic While sub-action. Yes, that means you can finally perform loops within a single action without needing C#!

Global (Set) Sub-Action Changes

The Argument source has been removed, and there is now only Value, Increment and Decrement.

The Value source now supports parsing and inline methods as well as an auto-type option. Increment and Decrement have been updated to support parsing and inline methods.

Configuration upgrades will happen and update any Global (Set) sub-actions, this will change any that are set to Argument and update the value to be surrounded by %, and change it to Value source type. Upgrades will also happen for Imports.

Inline Function,

A new function has been added, $parse()$, that will allow for a 2nd level of variable parsing.

This would be of benefit for the newly added Logic While sub-action.

As an example, ff you are using the global ~idx~ as your test variable, and incrementing this within the while loop. You would then be able to use the inline method like $parse(rawInput~idx~)$ which would internally parse to %rawInput#%, and finally would return the value of the %rawInput#% argument. In this example, rawInput is the argument you're wanting to get an indexed position of, this is typically used in most Message based triggers

Twitch

Twitch PubSub is being deprecated in April, so that means it's finally time to remove PubSub from the connection list for the Broadcaster Account.

What this means, the Ad Mid Roll sub-action no longer exists (to this day, still really don't know what it did), Channel Point Community Goals will cease to work until they're added to EventSub, and the Viewer count pulse has been updated to use other methods.

Twitch Shared Chat

Handling of Twitch Shared Chat has been updated a bit, there are now 3 arguments added to most Twitch events.

  • isInSharedChat - This will indicate if the event happened while in a Shared Chat,
  • isSharedChatHost - This will indicate if the Broadcaster is the host of the Shared Chat,
  • isFromSharedChatGuest - This will indicate if the event is from a Shared Chat's Guest's Channel, These 3 arguments are in all Shared Chat events, as well as the non-shared chat event counter parts.

Quotes

Quotes got a small overhaul, the built in !quote command is no more, it has been replaced with various sub-actions, so you now have full control over adding, deleting quotes by any means.

HTTP Server

You read that right, you can now serve local files with the HTTP Server! Simply add a Path Mapping to the HTTP Server settings, and you can access any file/folder from that Mapping.

The current methods are being moved to an /api/ prefix, and they will continue to work for now but consider them deprecated, and will eventually be removed. Be sure to update any usages to use the /api/ equivalent.

Voicemod

The Voicemod integration has been udpated to support v3, and version 3.12 is now the minimum required version for the integration.

With the update, the Voicemod Set Censor State sub-action was removed, as well as 2 C# methods, VoiceModCensorOn() and VoiceModCensorOff(), as the methods for these no longer work.

Kick Platform

Yes, you read that right, as of alpha.37, Streamer.bot now supports Kick as an official platform. Be sure to read the previous information in alpha-releases or announcements.

Overall the Kick API is still a bit of a mess, and everything that can be implemented has been. And as mentioned, to use this platform integration, you must link your Kick account on the website as well!

There are new sub-actions and triggers for Kick, support for Kick Message as a Command source, Kick will show up in the chat as well as obs overlay chat.

Due to the way Kick is setup, you will need to not only login to Kick within Streamer.bot, you will also need to login to the Streamer.bot Website, and link your Kick account there to.

After this, you will be able to connect to the client. It requires you to be logged into Streamer.bot, bottom-left corner of your Streamer.bot window.

Cloud Backup

You will be able to manually create backups that are encrypted and uploaded to Streamer.bot's* website, as well as being able to restore from these backups.

Custom Webhooks

You will be able to create custom webhooks, and have the data forwarded to your Streamer.bot, much like the existing webhooks, except they can be used for any site that supports webhooks. This feature will be monitored for abuse and limits put in place if anything like this is detected

Decks 2.0

They've been teased for a while, but Decks 2.0 are also here! This includes a handful of sub-actions to interact with the decks themselves, much like Elgato Stream Deck

There are also 6 new sub-actions allowing you to set various properties/values of deck buttons.

New Website

Whipstickgostop has been hard at work, and there is a new website that launched alongside this update, both as a refresh and to support all the new features.

C# Changes

The following C# methods have been updated to account for the new useBot and fallback options.

void SendYouTubeMessage(string message, bool useBot = true, bool fallback = true, string broadcastId = null);
void SendYouTubeMessageToLatestMonitored(string message,bool useBot = true, bool fallback = true);
void SendTrovoMessage(string message, bool useBot = true, bool fallback = true);

The following C# Methods have been added for Trovo

TrovoUserInfo TrovoGetBroadcaster();
TrovoUserInfo TrovoGetBot();

bool TrovoTimeoutUser(string userName, int duration, bool bot = false);
bool TrovoBanUser(string userName, bool bot = false);
bool TrovoUnbanUser(string userName, bool bot = false);

bool TrovoSetTitle(string title);

The following C# Methods have been added for Kick

void SendKickMessage(string message, bool useBot = true, bool fallback = true);
void KickReplyToMessage(string message, string replyId, bool useBot = true, bool fallback = true);

KickUserInfo KickGetBroadcaster();
KickUserInfo KickGetBot();

bool KickSetTitle(string title);
KickCategory KickSetCategory(string categoryName);

bool KickTimeoutUser(string username, int duration, string reason = null, bool bot = false);
bool KickBanUser(string userName, string reason = null, bool bot = false);
bool KickUnbanUser(string userName, bool bot = false);

List<UserVariableValue<T>> GetKickUsersVar<T>(string varName, bool persisted = true);
T GetKickUserVarById<T>(string userId, string varName, bool persisted = true);
T GetKickUserVar<T>(string userName, string varName, bool persisted = true);
void SetKickUserVarById(string userId, string varName, object value, bool persisted = true);
void SetKickUsersVarById(List<string> userIds, string varName, object value, bool persisted = true);
void IncrementAllKickUsersVar(string varName, object value, bool persisted = true);
void IncrementKickUsersVarById(List<string> userIds, string varName, object value, bool persisted = true);
void IncrementOrCreateKickUsersVarById(List<string> userIds, string varName, object value, bool persisted = true);
void SetKickUserVar(string userName, string varName, object value, bool persisted = true);
void UnsetKickUserVarById(string userId, string varName, bool persisted = true);
void UnsetKickUserVar(string userName, string varName, bool persisted = true);
void UnsetKickUserById(string userId, bool persisted = true);
void UnsetKickUser(string userName, bool persisted = true);

KickCategory class

public class KickCategory
{
public int Id { get; set; }
public string Name { get; set; }
public string Thumbnail { get; set; }
}