All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fix issue where end-of-track is incorrectly signalled when paused #100.
- Unable to parse Spotify URIs with context parameter #98.
- Only log URL/URI parsing on tracing #87.
- Fixed bug with reading update-interval, preventing song files from being used (#72).
- Changed more internals to use async locking.
- Rewrote internal player to use much cleaner abstractions (#67).
- Updated version of
irc
crate we use to no longer build from master.
- Project now properly builds on Stable Rust.
- Switch away from failure to [anywhow] and thiserror for error handling.
- Commands are now run on separate tasks, leading to better performance and unlocking the ability to write them in a different language in the future.
- Git version now runs properly. It used to report a User-Agent which caused header parsing to crash since it included a newline (e2745e).
- Bumped the version of a lot of dependencies.
- Fixed a bug that causes the bot to crash when it's being restarted and improperly using backoff (c0178f).
- More commands are now documented (with examples).
- Added
player/playback-mode
with support for an alternative, queue-native playback mode (#66).
- Fixed issue where tray icon doesn't work for some Windows versions.
- Renamed all
irc/
settings tochat/
settings. - Authentication must now happen through a remote service, like https://setbac.tv
- Moved to tokio and associated ecosystem's async/await alpha's.
- Support for complex object fields in settings configuration.
- Support for matching a command pattern
!command pattern <name> [pattern]
. - Support capture groups in pattern. Like
I like (.+)
will allow you to use the variable{{1}}
for the group. - Added
!help
command to send you to https://setbac.tv/help
- Show display name when responding to users.
- Experimental support for viewing chat.
- Support for only showing first message per user.
bypass-cooldowns
scope to bypass command and scope cooldowns.- Support for ChaosMod 1.3.0.
- Switch to moment-timezone for list of timezones in UI.
- Make location optional in Settings component (causes blank page).
- UI doesn't break on bad semver latest releases.
- Don't crash if a user removes a the Twitch connection.
- Deprecate use of configuration file fully.
- Added
!poll
command to run polls. - Added
!weather
command to check the current weather. - Notification after stream has ended if you have afterstream messages.
utils::compact_duration
now includesdays
when formatting.- Don't use
flatMap
in since it's not supported in OBS's Browser Source.
time/timezone
for setting your current time zone.!time
command for showing the current time of the streamer (in the specified time zone) #45.system/run-on-startup
setting that can configure SetMod to run on system startup.
!speedrun game <game>
as a preferred alias for!speedrun record
.!speedrun personal-bests <user>
as a way to query personal bests for a single user.- Commands can now use the
{{rest}}
parameter to expand to anything that comes after the command itself. - Introduced the
irc/viewer-reward/interval
setting to tweak how frequently viewer rewards are posted.
- Move most authorization checks to their own scopes (See auth.yaml for details) #48.
song/theme
song/edit-queue
song/list-limit
song/volume
song/playback-control
command/edit
theme/edit
promo/edit
alias/edit
countdown
gtav/raw
water/undo
- Support temporary grants through
!auth permit 5m <user> <scope>
. You can only grants scopes that you have #47.- For example, to permit posting any links:
!auth permit 30s setbactesting chat/bypass-url-whitelist
- For example, to permit posting any links:
- Fix issue where player feedback shuts down first time it's disabled.
- Notifications for system integration.
- Added
--log-config
and--trace
switches to give more control over logging.
- Fixed player sync on startup not setting state correctly.
- Fixed issue where Spotify can't be controlled unless it is started before the bot.
- Installer can now successfully stop SetMod during upgrades.
- Fixed issue where non-mods cannot request songs without stream currency enabled even though
song/*/min-currency
was set to0
. song/*/max-duration
is not optional and unset by default, and can be deleted.
- Added update notification in web UI.
- Fixed issue when picking device and simplified how device ID is stored.
- Fixed issue where delete dialog does not disappear.
- Added a button to open the setmod log file in systray.
- Added a button to restart the bot from systray.
- Fixed bug with syncing remote player state.
- Fixed bug with syncing player queue to setbac.tv.
- Reverted fix for Twitch API, since they fixed it themselves :|.
- Fixed broken link to player on setbac.tv.
- Changed where SetMod configuration is expected to be.
See
Migrating from 0.2 to 0.3
in the README.
- Added an installer for SetMod which is recommended to use on Windows.
- Reduce the number of calls for
!speedrun
command. - Commands can now be quoted to support spaces in arguments.
- Example:
!speedrun game sm64 --category "120 Star"
- Example:
- Fixed bug where new tokens weren't stored locally properly.
- Themes are now stored in the database, accessible through the
!theme
command and the web UI. [player]
has been deprecated in favor ofplayer
settings.[current_song]
has been deprecated in favor ofplayer/song-file
settings.[[modules]]
configuration has been deprecated in favor of their corresponding setting.- Fully deprecated the need for a configuration file. If you want to migrate existing settings, run the bot once with the configuration file, then it can safely be deleted.
- Add more commands to
!gtav
and add command-specific overrides throughgtav/command-config
.
- Added the ability to scale the maximum volume of a player by a percentage using the following settings:
player/spotify/volume-scale
player/youtube/volume-scale
- Pinging and reconnect if connection to Twitch is lost.
- Tokens can now be removed, and refreshed on the home screen without restarting the bot.
- Authentication system with different scopes to control permissions. See auth.yaml for more details.
- This includes the groups: @streamer, @moderator, @subscriber, and @everyone.
- A UI page to handle Authorization.
- Load fallback songs from
player/fallback-uri
. !speedrun
command to get records from speedrun.com.
!song request
no longer allows one extra request to enter the queue. (#33)- Avoid playing the same songs over and over (#35).
- Fix off-by-one check in currency transfer (
!currency give <user> <amount>
). - Only non-moderator and non-streamer chat bumps the idle counter.
- URL whitelist is now stored in a setting
irc/whitelisted-hosts
(#37). - Massively improved settings and schema management.
- Settings are now parsed from chat, meaning they are validated and doesn't have to be JSON.
!song request
can now search for YouTube videos through!song request youtube:<query>
.
!admin version
to check current setmod-bot package version. (#32)- Setting for controlling player feedback in chat (
player/chat-feedback
). - Setting for controlling overlay update interval (
player/song-update-interval
). !admin settings
for reading and writing settings through chat.- Introduced the setting
player/detached
to detach the player. (#27) - Confirmation response when performing
!song open
and!song close
. (#36) !admin push <key> <value>
to insert values into settings which are collections.!admin delete <key> <value>
to delete values from settings which are collections.- Group management and the ability to enable and disable commands (
!command
), aliases (!alias
) and promotions (!promo
).!<thing> enable <name>
- Enable the given command.!<thing> disable <name>
- Disable the given command.!<thing> group <name>
- Get the current group.!<thing> group <name> <group>
- Set the current group.!<thing> clear-group <name>
- Remove from all groups.!admin enable-group <group>
- Enable all commands, promotions, and aliases belonging to the specified group.!admin disable-group <group>
- Disable all commands, promotions, and aliases belonging to the specified group.
- Experimental support for requesting YouTube songs and associated settings.
player/duplicate-duration
to enforce a minimum duration between requesting duplicates songs.- Added
song/*/min-currency
, for a minimum currency limit to request songs. - Added
song/*/subscriber-only
andsong/subscriber-only
to limit song requests to subscribers only.
!song promote
now moves the promoted song to the front of the queue instead of swapping positions with the first song in the queue. (#30)
- Import/Export for PhantomBot points.
- gtav: Add vehicle by name from https://bit.ly/gtavvehicles
- gtav: more commands
- Expand
currency
feature. See thecurrency
configuration. - Added
!thingies give
and!thingies show
. See thecurrency
configuration.
!promo
now uses hangout detection determined by theirc/idle-detection/threshold
setting.!afterstream
command without argument now prints a help message (#26).- Added
gtav
module to interface with ChaosMod. Seegtav
configuration. - Theme songs now can have an
end
parameter, indicating when it should end. - Song requests can be rewarded using the
song/request-reward
setting. - Water reward can be scaled using
water/reward%
. - Viewer reward can be scaled using
irc/viewer-reward%
.
- Fixed bug where
Settings
frontend would make the value into a string before sending it to backend.
- Web-based overlay with current song (#22).
- Player will no longer pause the current song (if it's playing) and will instead synchronize the state of the player with Spotify (#18).
- Implement
!command rename <from> <to>
- Ability to sync remote state of player with
[player] sync_player_interval = "10s"
(#18). - Much more helpful guidance when using
!song
incorrectly. - Store aliases in the database instead of the configuration. See the
alias configuration
for more details (#24). - Start storing some settings in the database (#19).
- Bot keeps track of first time it's being started to perform first-time configuration.
- Promotions through the
promotions
module. See thepromotions configuration
for more details (#25).
- Cleaned up old cruft in the codebase (
gfx
module). - Moved log configuration to external file (see example log4rs.yaml).
- No longer raise an error on bad input.
- UI is now built in React (#23).
- This adds the
-WebRoot
option totools/setmod.ps1
to override where to load files from for development purposes.
- This adds the
.oauth2
state is now stored in the database under settings.
- Removed
!counter
in favor of!command
with same functionality. Using the{{count}}
variable in the template will cause the count to be incremented. [[aliases]]
section from configuration. Aliases are now stored in the database. The first time you run the bot it will migrate all the aliases into the database.
!water
command that can be enabled using as a module through[[modules]]
see README.md.- Attempt to automatically refresh expired tokens on startup (#21).
- Move all locks to
parking_lot
- Improved logic to notify on device configuration.
- Player now plays music through Spotify's blessed Connect API (#17).
!swearjar
command that can be enabled using as a module through[[modules]]
see README.md.!countdown
command that can be enabled using as a module through[[modules]]
see README.md.
- Remove dependency on bundled
.dll
files. - Deprecated the use of the
native
player in favor ofconnect
since it's a potential TOS violation (#17). - Improved administration UI:
- Support for selecting Audio Device (does not persist across reboots) (#20).
- Informing you more clearly when you need to authenticate.
- Provide hint on how to configure persistent device.
!song promote <number>
to promote songs to the top of the queue (#2).- Optional web page (hosted on
setbac.tv
) to display current queue (#3) (config:api_url
). - Support suppressing echoing of current song (config:
[player] echo_current_song = false
). - Show queue position in player view (#8).
- Support deleting a song at the given position (#7).
- Moderator action cooldowns (#6).
- Moderators are automatically picked up through
/mods
command on IRC (#5). - Support for
!clip
command (#13) - Support for
!8ball
command (#14) !afterstream
command now has a cooldown configured through[irc] afterstream_cooldown
.!song when
to see when your requested song will be playing.- Added
{{elapsed}}
as a variable forcurrent_song
. [current_song] update_interval = "5s"
to specify how frequently the current song information will be updated. This might be necessary in case{{elapsed}}
is used as a variable and you want it to update live.[irc] startup_message = "HeyGuys"
to send a message when the bot starts.
- Changed configuration format to be TOML and flatten it (see example configuration).
- Removed HTML escapes from
current_song
(#4). - Fixed
!song purge
not sending update tosetbac.tv
(#9). - Streamer is immune to cooldown and is always moderator (#10).
- Changed configuration format to flatten it more (#11).
- Reduced the number of scopes requested for tokens to a minimum.