- Fixed YouTube video offsets. Now YouTube URLs with
?t=<timestamp>
at the end will start the audio playback at the appropriate position.
- Fixed a Go panic that would occur when a YouTube playlist contained a private video.
- Added back immediate skipping for tracks/playlists that are skipped by the submitter. This was a feature that was present in the last major version of MumbleDJ but was forgotten when rewriting the bot (sorry!).
- Fixed a SoundCloud API response parsing issue that would result in empty IDs for tracks.
- Fixed the startup check for SoundCloud API.
- Fixed a deadlock that would occur during the transition from the first to second track in a queue.
- Fixed an index out of range crash in the queue skipping function.
- Updated vendored dependencies to hopefully address the following issue: matthieugrieger#169.
- File path for user
p12
certificate can now be provided for authenticating as a registered user via the--p12
commandline flag or theconnection.user_p12
configuration value. - Added
!register
command for registering the bot on the server.
- Potential fix for an issue with IP SANs on PEM certs.
- Fixed issue related to PEM keys being overwritten by PEM certs.
- Queue is now reset after disconnecting from the server to avoid unpredictable behavior.
- Fixed hang on setting
max_tracks_per_playlist
to a value larger than 50 (thanks @mattikus). - Fixed full directory path not being created properly for config file (thanks @DanielMarquard).
- Volume can now be set to
volume.lowest
andvolume.highest
(in other words, the range is inclusive now instead of exclusive). - All configuration values can now be overridden via commandline arguments. For example:
mumbledj --admins.names="SuperUser,Matt" --volume.default="0.5" --commands.add.is_admin="false"
- NOTE: Configuration settings that contain commas (",") are interpreted as string slices (or arrays if you aren't familiar with Go).
- Removed an extra period that was sometimes output in error messages.
- Fixed an issue with
!forceskip
not stopping audio playback.
- Fixed admin settings not being respected.
- Fixed a crash on
!forceskip
.
- Fixed SoundCloud API startup check (thanks @alucardRD).
- Fixed typo on admin command header message selector.
- Added all strings that are output by commands to
config.yaml
for easier translation and tweaking.
- Significantly simplified installation process, now installable via
go install
. - Commands may now have multiple aliases, configurable via config file.
- Command aliases are checked for duplicates and closes the bot if duplicates are found.
- Added new commands:
!resume
,!pause
. These commands allow you to resume and pause audio streams respectively. !add
and!addnext
can now take any number of space-separated URLs as arguments.- Commands are now executed asynchronously for better performance and responsiveness.
- Restructured project into subpackages:
bot
,commands
,interfaces
,services
. - Config file is now in
.yaml
format and is written to$HOME/.config/mumbledj/config.yaml
. - Altered config file layout to make it easier to read.
- When an updated config file is available it is written to
$HOME/.config/mumbledj/config.yaml.new
. - Alternate config file locations can be supplied via
--config
commandline flag. - Added logging for easier monitoring and issue debugging.
- Added
--debug
flag for more verbose logging when debugging an issue. - Access tokens in config file and
--accesstokens
commandline flag are now comma-separated instead of space-separated. - Mixcloud now requires the installation of
aria2
to work properly due to download throttling. - Startup checks are performed before the bot connects to the server to determine if any required software is missing or misconfigured.
- API startup checks are performed before the bot connects to the server to determine if any services have missing/invalid API keys.
- Dependencies are now vendored via
/vendor
folder for more reproducible builds. glide
has replacedgoop
as the dependency management tool.- Added
CONTRIBUTING.md
and templates for GitHub Issues and Pull Requests. - Revamped
Makefile
and made it less complicated. - Implemented continuous integration support with Travis CI.
- Builds for
linux/arm64
andlinux/386
are now provided as downloads for each release. - Implemented many unit tests to test functionality of bot subsystems.
- Much more not listed here!
I hope you guys enjoy this update, it has been in the works for a few months. :)
- Added
!joinme
command (thanks @azlux).
- Fixed player command configuration setting not being applied to youtube-dl calls.
- Added support for Mixcloud (thanks @benklett).
- Fixed an incorrectly formatted error message (thanks @GabrielPlassard).
- Audio is now downloaded using the
bestaudio
format. This prevents situations in which some audio would not play because an.m4a
file was not available (thanks @mpacella88).
- Added
!version
command to display the version of MumbleDJ that is running (thanks @zeblau). - Added
version
commandline argument to display the version of MumbleDJ that is running (thanks @zeblau).
- Temporarily fixed discontinued code.google.com imports.
- Fixed: Unable to use offsets if it's formatted as &t vs ?t in the URL (thanks @fiveofeight).
- Created a new configuration value in the General section called PlayerCommand. This allows the user to change between "ffmpeg" and "avconv" for playing audio files.
- Added check for valid PlayerCommand value. If the value is invalid the bot will default to
ffmpeg
.
- Fixed an incorrect
!currentsong
message for songs within playlists.
- Fixed a typo in song list HTML (thanks @mkody).
- Added AnnounceNewTracks config option (thanks @HowIChrgeLazer).
- Added !addnext command (thanks @nkhoit).
- Added argument to !listsongs command to specify how many songs to list (thanks @nkhoit).
- Added !listsongs command (thanks @nkhoit).
- YouTube and SoundCloud API keys are now stored in the configuration file instead of environment variables. Existing installations with API keys in environment variables will automatically be migrated to the configuration file (thanks @Gamah).
- Playlists can now be over 50 songs in length (thanks @GabrielPlassard).
- Added MaxSongPerPlaylist configuration option.
- Fixed possible index out of range panic when auto shuffle is on (thanks @GabrielPlassard).
- Added !shuffle, !shuffleon, and !shuffleoff commands (thanks @GabrielPlassard).
- Added Soundcloud support (thanks @MichaelOultram).
- Fixed cache clearing earlier than expected (thanks @CMahaff).
- Fixed a panic that occurred when certain YouTube playlists were added to the queue.
- Fixed
!move
not working for subchannels (thanks @mkbwong). - Fixed MumbleDJ showing invalid YouTube ID error message in chat when an invalid YouTube API key is supplied (thanks @fiveofeight).
- Fixed MumbleDJ showing invalid YouTube ID error message in chat when a song exceeds the allowed time duration.
- Fixed incorrect values shown in timestamp for videos over an hour long.
- Reworked timestamp parsing.
- Added support for YouTube offsets. This means that YouTube URLs with the
t
parameter will start at the time specified in the URL instead of the beginning. - Cleaned up comments in some files and removed some unnecessary code.
- Fixed a bug in which a duration of 0:00 was shown for songs that were less than a minute long.
- Migrated all YouTube API calls to YouTube Data API v3. This means that you MUST follow the instructions in the following link if you were using a previous version of MumbleDJ: https://github.com/matthieugrieger/mumbledj#youtube-api-keys.
- Made the SongQueue much more flexible. These changes will allow easy addition of support for other music services.
- Fixed a crash that would occur when the last song of a playlist was skipped.
- Fixed a race condition that would sometimes cause the bot to crash (thanks dylanetaft!).
- Renamed
mumbledj.gcfg
toconfig.gcfg
. However, please note that it will still be calledmumbledj.gcfg
in your~/.mumbledj
directory. Hopefully this will avoid any ambiguity when referring to the config files. - Tweaked the
Makefile
to handle situations wherego build
creates an executable with an appended version number.
- Fixed a typo in
mumbledj.gcfg
. - Songs and playlists are now skipped immediately if the submitter submits a skip command.
SONG_SKIPPED_HTML
andPLAYLIST_SKIPPED_HTML
are no longer shown if the submitter or admin skips a song/playlist.
- Added missing AdminSkipPlaylistAlias option to
mumbledj.gcfg
.
- Added automatic connection retries if the bot loses connection to the server. The bot will attempt to reconnect to the server every 30 seconds for a period of 15 minutes, then exit if a connection cannot be made.
- Fixed failed audio downloads for YouTube videos with IDs beginning with "-".
- Added
gumbleutil.CertificateLockFile()
for more secure connections. - Added
-insecure
boolean commandline flag to allow MumbleDJ to connect to a server without overwriting~/.mumbledj/cert.lock
.
- Fixed bot crashing after 5 minutes if there is nothing in the song queue.
- Fixed queue freezing up if the download of the first song in queue fails.
- Added caching system to MumbleDJ.
- Added configuration variables in
mumbledj.gcfg
for caching related settings (please note that caching is off by default). - Added
!numcached
and!cachesize
commands for admins. - Added optional song length limit (thanks jakexks!)
- Updated dependencies and fixed code to match
gumble
API changes. - Greatly simplified the song queue data structure. Some new bugs could potentially have arisen. Let me know if you find any!
- Added configuration option in
mumbledj.gcfg
for default bot comment. - Fixed text messages only containing images crashing the bot.
- Updated
gumble
andgumbleutil
dependencies. - Removed
sanitize
dependency. - Reworked
Makefile
slightly. - Now uses
gumbleutil.PlainText
for removing HTML tags instead ofsanitize
. - Added
!setcomment
which allows admin users to set the comment for the bot. - Made "Now Playing" notification and
!currentsong
show the playlist title of the song if it is included in a playlist. - Added ability to connect to Mumble server using a PEM cert/key pair. Use the commandline flags
cert
andkey
to make use of this. - Added an easier to read error message upon unsuccessful connection to server.
- Made it possible to place MumbleDJ binary in
~/bin
instead of/usr/local/bin
if the folder exists.
- Added panic on audio play fail for debugging purposes.
- Fixed '!' being recognized as '!skipplaylist'.
- Fixed !reset crash when there is no audio playing.
- Fixed newlines after YouTube URL messing up !add commands.
- Fixed empty song/playlist entry being added upon !add with invalid YouTube ID.
- Fixed go build issues.
- Added
goop
dependency management. Make sure you haveopenal
installed, or it won't work right! - Fixed crash on invalid playlist URL.
- Fixed private messages crashing the bot when the target user switches channels or disconnects.
- Fixed !nextsong showing incorrect information about the next song in the queue.
- Added !currentsong command, which displays information about the song currently playing.
- MumbleDJ now removes disconnected users from skiplists for playlists and songs within the SongQueue.
- Fixed crash when a user disconnects when no song is playing.
- Fixed not being able to use the move command with channels with spaces in their name.
- Set AudioEncoder Application to
gopus.Audio
instead ofgopus.Voice
for hopefully better sound quality. - Added some commands to the !help string that were missing.
- Added !nextsong command, which outputs some information about the next song in the queue if it exists.
- Fixed type mismatch error when building MumbleDJ.
- Added traversal function to SongQueue.
- Added !numsongs command, which outputs how many songs are currently in the SongQueue.
- Added !help command, which displays a list of valid commands in Mumble chat.
- Fixed some YouTube playlist URLs crashing the bot and not retrieving metadata correctly.
- Fixed a crash caused by a user trying to skip the same song more than once.
- Fixed a crash caused by entering a skip request when no song is currently playing.
- Attached
gumbleutil.AutoBitrate
EventListener to client. This should hopefully fix the issues with audio cutting in and out. - Moved dependency installation to default
make
command to better enforce new updates. - Added
make build
toMakefile
to allow previous functionality of the defaultmake
command. - Hopefully fixed a situation that would cause the song queue to stop working.
- Added
!reset
command. Use this to reset the song queue.
- Added ability to add YouTube playlists to the queue. Note that the max size of a playlist is 25 songs, anything larger will only use the first 25 songs in the playlist.
- Fixed a crash while attempting to add URLs to the queue.
- Re-made the song queue using my own "queue-like" structure using slices.
- Fixed YouTube URL parsing not working for some forms of YouTube URLs.
- Now recovers more gracefully if an audio download fails. Instead of panicking, the bot will send a message to the user who added the URL, telling them the audio download failed.
- Fixed skip messages not being displayed in chat.
- Reached feature parity with old version of MumbleDJ.
- Bot is now written completely in Golang instead of Lua and Python.
- Now uses
gumble
for interacting with Mumble instead ofpiepan
. - Stability improved in many areas.
- Audio quality is slightly better due to using higher bitrate m4a files instead of Ogg Vorbis.
- All YouTube URLs should be supported now.
- Added an admin skip command that allows an admin to force skip a song.
- Added
mumbledj.gcfg
, where all configuration options are now stored. - Added a reload command, used to reload the configuration when a change is made.
- Implemented volume control. Now changes volume while audio is playing!
- Code is now more thoroughly commented.
- Fixed char comparison with dj.conf.General.CommandPrefix.
- Switched from Ruby to Go, using
gumble
instead ofmumble-ruby
now.
- Created "v2" branch for Ruby rewrite.
- Fixed volume changed message showing wrong value.
- Switched volume change method. The volume is now changed directly through
piepan
instead offfmpeg
. - Fixed another bug with volume changing.
- Fixed a bug that would not allow audio encoding to complete successfully while on Debian.
- Fixed a stupid typo that broke the
!volume
command. - Updated
SETUP.md
with instructions on installing MumbleDJ on Debian. - Added missing commands in
SETUP.md
.
- Fixed a crash when an error occurs during the audio downloading & encoding process.
- Fixed a crash that occurs when the bot tries to join a default channel that does not exist. If the default channel does not exist, the bot will just move itself to the root of the server instead.
- Added
SETUP.md
which contains a guide on how to configure MumbleDJ and install its dependencies. - Deleted song_queue.lua and moved all contents to mumbledj.lua. In the end this will make the script simpler.
- Fixed song skipping.
- Made user skip message show even when the target number of skips has been reached.
- Made "Music" the default Mumble channel.
- Fixed skips not working correctly.
- Fixed a crash related to private messages.
- Removed play and pause commands. There were issues with these commands, and they both serve functions that can be done within Mumble per-user.
- Removed all play and pause configuration options from config.lua.
- Updated .gitignore to ignore .ogg files.
- Forced ffmpeg to use libvorbis codec.
- Bot now seems to be working!
- Skipping songs works now.
- Second audio track now plays directly after the first one.
- Silenced ffmpeg output again.
- Added command alias options to config.
- Moved most of the skip-related code to song_queue.lua.
- Commented more thoroughly the code, mostly pointing out what each function does.
- Made more progress toward a working song queue. It only seems to play the first song in the queue at the moment.
- Removed USERNAME field from config.lua. It wasn't needed and introduced situations that may cause problems.
- Fixed download_audio.py. It now seems to reliably download/encode audio. ffmpeg output has been silenced.
- Volume is now set during encode by ffmpeg, since the volume option in piepan's play() does not seem to work.
- Removed volumeup/volumedown commands, replaced with just volume.
- Added deque.lua (thanks Pierre Chapuis!).
- Added song_queue.lua.
- Made significant progress toward a working song system.
- Added command parsing.
- Added placeholder functions for various commands.
- Added admin, message, and other miscellaneous config options.
- Removed start command.
- Added a permissions/admin system.
- Changed the base for the project from pymumble to piepan.
- Entire codebase is now written in Lua instead of Python.
- Re-implemented some of the config in config.lua.
- Implemented code to connect the bot to the server and move it into the Bot Testing channel.
- Added song.py, a file that houses the Song class.
- Added command & storage options to config.py.
- mumble-music-bot repository renamed to mumbledj.
- Renamed all mentions of mumble-music-bot or musicbot to mumbledj.
- Restructured project for easier imports.
- Added .gitignore for pymumble.
- Now successfully connects to Mumble servers.
- Added command parsing.
- mumble-music-bot repository created.
- Added config.py with some basic configuration options.
- Put placeholder methods within the MusicBot object.
- Add run_bot.py.