Released 2021-12-25
%rewardCost%
and %rewardPrompt%
to the variables for reward redemptions%gameBoxArt%
and %oldGameBoxArt%
) to the stream update event%variable%
parsing for the variable name itself!so
wouldn't trigger on !socials
%spokenTextInput%
to Speech To Text events for Commands, this is the text spoken without the trigger word, and is only support for Start based commands%spokenCommand%
to Speech to Text events that will contain the command that triggered the event%fromGiftBomb%
that can be checkedYou can add either your team, or personal campaign for ExtraLife, StackUp or any other charity that uses DonorDrive, and attach an action to a donation event.
This is not limited to just 1, you can add multiple as well.
More info to be filled in.
Up until now, the only thing that could be parsed were %variables%
, I have finally added the first function to this, $math()$
.
Anywhere there is full parsing, you can now perform math operations, and also use variable within the math function itself.
Here is just a simple example of an action:
%x%
to 1
, %x%
is now 1%x%
to $math(%x%+1)$
, incrememnt %x%
by 1
, %x%
is now 2
%x%
to $math(%x%^2)$
, set %x%
to %x%
to the power of 2
, %x%
is now 4
%x%
to $math(%x%*16)$
, set %x%
to %x%
times 16
, %x%
is now 64
A page with the possible usages of the math
function will be added as well, as it is more then just your basic arithmetic (yes, you can even do derivatives or integrals if you wanted to).
With this update, I've completely removed the mess of dropdowns to select events. This was slowing down the application with the amount of updates this could generate to keep track of any changes to your actions.
There is now a clickable button that will bring up a dialog with your actions grouped and sorted like they are on the main actions page. This dialog is very much a WIP, and will evolve over time.
In addition to events, most dialogs where you picked actions (Commands, Channel Reward, Timed Actions, etc) have also received this update.
As an added bonus, most of the lists where you edit these kinds events, now have a new context menu item to be able to change the action without having to go in and edit the command, reward, etc.
With the addition of the $math()$
inline function, the Set Argument sub-action has been updated to fully support parsing its value, and the Increment option has been removed, as you can now use the math function to do this.
A configuration upgrade will happen, converting any Set Argument that is flagged as increment will have its value converted to
$math(Variable+Value)$
, there is the possibility this may not fully work, so it is advised to check any Set Arguments you have that were converted.
A few new keys were added to be the list of keys usable for Hot Keys and Keyboard Press
;:
/?
~
[{
\|
]}
"
,<
-_
.>
+=
Previously, the C# calls to get Twitch clips, only allowed getting all the clips, leaving it upto you to sort through them afterwards. If there were many clips for a user, this could take a while to fetch, and as it wsa a paginated call, it was only grabbing 20 at a time leading to further slow down.
The first fix, it now fetches 100 at a time (the maximum allowed per call), This means, ever paged call takes approximately 800 milliseconds to complete.
The methods for fetching clips have been updated to allow for a count to be specified, and it will only grab that many clips for a user, default sorted newest to oldest.
They have also been updated to specific a date range (start and end date) to look for clips, as well as a day timespan, to specifiy the past 7 days, or the past 30 days, etc.
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);
List<ClipData> GetClipsForUser(string userName, int count);
List<ClipData> GetClipsForUser(string username, DateTime start, DateTime end);
List<ClipData> GetClipsForUser(string username, DateTime start, DateTime end, int count);
List<ClipData> GetClipsForUser(string username, TimeSpan duration);
List<ClipData> GetClipsForUser(string username, TimeSpan duration, int count);
List<ClipData> GetClipsForGame(int gameId, int count);
List<ClipData> GetClipsForGame(int gameId, DateTime start, DateTime end);
List<ClipData> GetClipsForGame(int gameId, DateTime start, DateTime end, int count);
List<ClipData> GetClipsForGame(int gameId, TimeSpan duration);
List<ClipData> GetClipsForGame(int gameId, TimeSpan duration, int count);
If Twitch is connected, actions will have the following five variables available to them
Name | Description |
---|---|
%broadcastUser% |
The Twitch display name of the broadcast account |
%broadcastUserName% |
The Twitch user name of the broadcast account |
%broadcastUserId% |
The Twitch user ID of the broadcast account |
%broadcastIsAffiliate% |
true/false value indicating if the broadcast account is an affiliate |
%broadcastIsPartner% |
true/false value indicating if the broadcast account is a partner |
Change the Title of an existing reward, this also supports the use of %variables%
void UpdateRewardTitle(string rewardId, string title);
Change the prompt of a reward, this also supports the use of %variables%
There is a bug on Twitch's side with the API call, it is not possible to set the prompt to an empty value once it has been set. This issue also happens with Twitch's own editing of a reward on the website
void UpdateRewardPrompt(string rewardId, string prompt);
Change the title, prompt and/or cost of a reward in 1 sub-action.
void UpdateReward(string rewardId, string title = null, string prompt = null, int? cost = null);
New sub-action to control the Replay Buffer state, no longer need to use OBS Raw to achieve this
void ObsSetReplayBufferState(int state, int connection = 0);
void ObsReplayBufferStart(int connection = 0);
void ObsReplayBufferStop(int connection = 0);
void ObsReplayBufferSave(int connection = 0);
New sub-action that will make a GetSceneItemProperties
call to the websocket, and much like OBS Raw, will add the results into your arguments in the form of props.<path>
string ObsGetSceneItemProperties(string scene, string source, int connection = 0);
Allows you to start a commercial on your channel. Commercials can be either 30s, 60s, 90s, 120s, 150s, or 180s in duration.
void TwitchRunCommercial(int duration);
Allows you to change the file of an OBS Media source, %variables%
are supported.
void ObsSetMediaSourceFile(string scene, string source, string file, int connection = 0);
Allows you to change the file of an OBS Image source, %variables%
are supported.
void ObsSetImageSourceFile(string scene, string source, string file, int connection = 0);
Will give you a list of your commands, into the variable of your choice. Can be limited down by command group, or if the user doing the command has permissions
2 variables will be added, the first will be a comma delimited string of your commands, that will be placed in the variable you picked, as well, a list of the commands (for use in C#) will be placed in [VariableName]List
, so from the screenshot, %commandsList%
would contain a List<string>
of your commands
Using this sub-action you can get the state of a command, whether its enabled or disabled, as well as get the state of a group of commands, if they're all enabled or disabled, or mixed.
Get Command State
Name | Description |
---|---|
%commandState% |
The state of the command true /false |
Get Command Group State
Name | Description |
---|---|
%commandGroupState% |
The state of the command group, see table below for information |
%commandsEnabled% |
A Dictionary<Guid, Guid> of command ID, action IDs, of commands that are enabled |
%commandsDisabled% |
A Dictionary<Guid, Guid> of command ID, action IDs, of commands that are disabled |
%commandGroupState%
Value | Description |
---|---|
0 |
All disabled |
1 |
All enabled |
2 |
Mixed |
Using this sub-action you can get the state of an action, whether its enabled or disabled, as well as get the state of a group of actions, if they're all enabled or disabled, or mixed.
Get Action State
Name | Description |
---|---|
%actionState% |
The state of the action true /false |
Get Action Group State
Name | Description |
---|---|
%actionGroupState% |
The state of the command group, see table below for information |
%actionsEnabled% |
A list of action IDs that are enabled |
%actionsDisabled% |
A list of action IDs that are disabled |
%actionGroupState%
Value | Description |
---|---|
0 |
All disabled |
1 |
All enabled |
2 |
Mixed |
To simplify uusing TwitchSpeaker with Streamer.bot, you can us this sub-action to have messages spoken by TwitchSpeaker. Before you'd have to use the UDP broadcast sub-action.
void TtsSpeak(string voiceAlias, string message, bool badWordFilter = false);
This requires you to be using TwitchSpeaker for TTS
long ObsConvertRgb(int a, int r, int g, int b);
long ObsConvertColorHex(string colorHex);
int ObsGetConnectionByName(string name);
The ID can be retreived by right clicking a command, and clicking the Copy Command ID option
void CommandResetGlobalCooldown(string id);
void CommandAddToGlobalCooldown(string id, int seconds);
void CommandResetUserCooldown(string id, int userId);
void CommandAddToUserCooldown(string id, int userId, int seconds);
void CommandResetAllUserCooldowns(string id);
void CommandAddToAllUserCooldowns(string id, int seconds);