Streamer.bot v1.0.0
What's new in Streamer.bot version 1.0.0
nate1280When I started this project over 5 years ago, I never thought it would turn into what it has become now. Seeing videos on YouTube, watching the community grow, seeing people learning new skills, and just the range of things created, it just blows my mind to think -- I had a hand in that. To everyone in the community thank you, and to those who continue to use Streamer.bot. Thank you for the support; it lets me write and maintain Streamer.bot for you all.
As Streamer.bot continues to expand and grow, at its core it is my goal that it will always be free to use. But as it continues to grow and new features get added, some of those new features will cost money to maintain. By default, Streamer.bot has basically become my full-time job, and keeping Streamer.bot and all associated services running does cost money, some of which I deal with, but as time goes on it becomes harder to sustain. As such, with Streamer.bot 1.0, I am introducing Supporter Perks These will be features within Streamer.bot that will require an active subscription to my Patreon at the lowest tier (Thank You) to use. This will support both myself and the continued growth of Streamer.bot. To be perfectly honest – the more support there is on Patreon overall, the more that I can keep free.
Streamer.bot continues to exist because of your support. 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. With the release of Streamer.bot 1.0 to stable today, on 25 August, the Thank You tier will be increasing to $3 a month, but you can still take advantage of the current $2 price on an annual subscription.
So enough of all the preamble, and onto the juicy stuff.
It’s been 10 months in the making, and today, August 20th on Streamer.bot’s 4-year anniversary, it’s changing the game again. Your stream, your rules – made better with Streamer.bot 1.0.
That’s right, Streamer.bot 1.0 is now generally available for everyone to use! Check for updates and get started with Streamer.bot 1.0!
What’s New?
Dark Mode
The most coveted feature, Dark Mode is finally here. Streamer.bot has received a complete redesign of its UI which also includes a 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. Well, Streamer.bot 1.0 now supports Kick natively using its Public API, free for everyone to use.
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
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.
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 Whipstickgostop. Decks will remain mostly free; however, supporter perks will raise some of the 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 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.
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:
- Have the beta role in Discord, and login to the website to link your account.
- Close your copy of Streamer.bot 0.2.8.
- Duplicate your Streamer.bot 0.2.8 folder, either by copy pasting, dragging, etc.
- Re-launch Streamer.bot 0.2.8.
- Go to the Integrations, Streamer.bot Website tab and login.
- In Streamer.bot click the top left menu, then Check for Updates
- Pick the beta release channel.
- Click Download & Install and patiently wait while Streamer.bot updates itself to 1.0
- 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
UIConverted toWPF- Dark Mode
Kick Platformsupport- Cloud Backups
- Custom Webhooks
- Decks 2.0
- Nestable sub-action groups
- Sub-action groups can have their own color!
Logic If/Elsehas been updated,true/falseare now groups, and can addsub-actionsdirectly to them- New
Logic Switch Casesub-action - New
Logic Whilesub-action Execute C# Codesub-action now uses theMonacoeditorHotKeysare now at a trigger level, and support any combination- Add
YouTubepoll handling for starting and updating. Streamer.bothas been updated to .NET 4.8.1- Add new sub-actions for
Meld Studio,Set Browser Layer UrlandTake Vertival Screenshot - Added a
User Profiledrop down in theTitle Barfor yourStreamer.bot Account - Add new Triggers for
Global Variable CreatedandGlobal Variable Deleted - Add new sub-actions to add
YouTubeandTrovobroadcaster information - Add support for
7TV Zero Widthemotes - Add new inline function,
$parse()$ - Add new option
Minimize to Tray on Close - Add ability to change the
Backup Folderlocation - 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 ViewerforPersistedandNon-Persisteduser tabs to delete the selected variable for all users - Add a warning to
Import, when theImportcontains anExecute C# Codesub-action - Add new
Defaultsettings forActionsandCommands - Add ability to add a path mapping to the
HTTP Serverallowing for hosting files - All
Sub-ActionsandTriggersthat 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 theClipboard - Add a new Sub-Action,
Streamlabs Spin Wheelto trigger a wheel spin onStreamlabs - Add
Groupcriteria toGroup Users AddedandGroup Users Removedtriggers - Add
Groupcriteria toGroup Clearedtrigger - Add a list of connected
Stream Deckapplications to theElgato Stream DeckIntegration page - Add new
C# MethodsforTrovo - Add
Twitch Suspicious User Messageevent and Trigger - Add 2 new
YouTubesub-actions toCreate PollandEnd Poll - Experimental support for Twitch Onboarded accounts
Updates
- Update common libraries and packages
- Update
Twitch EventSub AutoModsubscriptions Twitch PubSubis no longer used- Command Settings are now in the WebSocket payload
Logic If/Elsesub-action now addsRegexmatches/groups as argumentsTwitch Add Random Userhas been updated to work with groups- Update
YouTubeandTrovoSend Messageto use the updated fall back options - Update
TwitchAdd Target Info,Add Follow Age,Add VIP,Remove VIP,Add Team InfoandTrovo Add Target Infoto use the new style of specifying a variable WebSocketDoActionnow returns theIDand initial arguments associated with the queuedAction- Application Crash messages will only show once now, instead of doing a solitaire win move
- The built in
!quotecommand 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.ioPronoun integration to support using the alt pronoun option - Move
HTTP Get Methodsto/api/ - Start monitoring for
USB Removalon demand if there areMididevices configured - Tweak how
Headlessmode is started internally Twemojiwas updated tov16.0.0- Update
Voicemod Clientto supportVoicemod v3 - Require
Voicemod v3.12as minimum version - Add a manual check for
System.Linqusing, and auto add theSystem.Core.dllreference when usingFind Refs - Add
addTargetResultargument toAdd Target Infosub-action when it is successful First Wordtriggers, are now underChatinstead ofGeneralforTwitchandTrovo- Update
YouTubeto use newPushAPI - Add
Testmethod toTrovo Stream OfflineandTrovo Stream Onlinetrigger - Update
Logic If/Elsesub-action,Does Not Existnow supports parsing in theVariable 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 Broadcasterinfo to args, they were flipped - Fixes related to
Elgato WaveLink 2.0.x, the 4Inputsub-actions should work again for the microphone - Fix forgetting
Trovo Account, tokens were not fully cleared - Remove a check in
Websocket Servermessage handling that could cause the message queue to stop working - Fix a potential crash when trying to connect to
Speaker.botwith an invalid address - Fix crash in
OBS Filterbased sub-actions when aSourcehas no filters - Fix potential crash in
Streamlabs Client, when an event has no data - Fix crash when responding to a
StreamDeckcommand but socket is already closed - Fix potential crash in
OBS Flip HorizontalandOBS Flip Verticalsub-actions - Fix crash when retrieving
Twitch Channel Rewards, and API indicates user is not anAffiliateorPartnereven though they are - Fix crash in
Voice Controlsub-actions when there are noVoice 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 WaveLinkwhen getting inputs times out - Fix crash in
Elgato WaveLinkwhen adding aFilterto anInputthat had no filters - Fix crash in
Streamlabswhen validating token times out - Fix crash in
Elgato WaveLinkwhen 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 CameraHubclient - Fix
Twemojiparsing related to theVariation Selector-16unicode value - Fix
Twitch SevenTV Emote Removedsub-action, wording said added - Fix potential crash when getting monitored
YouTube BroadcastsbyWebsocket - Fix a potential crash in
TwitchGetEmotesandYouTubeGetEmotesWebsocket/HTTPrequests - Fix potential crash in
Midi Out Note Onsub-action - Fix error message for
GetUserGlobalsHTTP/Websocketrequest - Fix potential crash when clearing a
Viewer Group - Fix
ObsSetColorSourceColorC# Method, was creating hex color wrong - Fix
Fourthwall Donation triggercriteria not working - Fix
Trovo Add Target Infosub-action, was retrieving wrong user type - Fix potential crash when handling
Websocket Subscribemessage - Fix potential crash when handling
RunActionrequests - Fixes/tweaks to handling of available update data
- Fix a potential crash when using
Get Commandssub-action - Fix
Streamer.botinstances not properly updating their connected state - Handle potential errors in
Voice Controland 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.
How To Link Kick
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);
int AddQuoteForKick(string userId, string quote, bool captureGame = 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; }
}
The following C# Methods have been added for Decks 2.0
void DeckNotify(string deckId, string title, string description, string color = null, string soundId = null);
void DeckItemSetState(string deckId, string itemId, int state);
void DeckItemToggleState(string deckId, string itemId);
void DeckItemSetTitle(string deckId, string itemId, string title, string color = null, int? state = null);
void DeckItemSetBackground(string deckId, string itemId, string color = null, string url = null, string fileId = null, int? state = null);
void DeckItemSetIcon(string deckId, string itemId, string color = null, string name = null, string url = null, string fileId = null, int? state = null);
void DeckItemSetValue(string deckId, string itemId, int value, int? state = null);
void DeckPageSet(string deckId, int page);
void DeckPageNext(string deckId);
void DeckPagePrev(string deckId);