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.
event trigger
command in order to manually trigger events outside of their set dispatch time.- Console message are now prefixed based on type (LOG, DEBUG, ERROR)
- Users are alerted if they do not have the correct permission to run the command.
event list
andevent view
now display the paused state.- Events now trigger if the bot reconnects and detects that events haven't triggered yet in a 5 minute window of reconnection.
- Broadcast action using message action instead of its own action function.
event pause
andevent resume
not persisting throughout restarts.- Last event dispatch time is now the proper dispatch time rather than the time it was supposed to dispatch when the event actually gets dispatched. This desync may have occured if the bot reestablishes the API connection after the event was supposed to trigger, but still triggers.
- All one time events and reminders for the next 24 hours are stored in memory, which should save on database queries.
- Support for slash commands, as per the new discord command system guidelines.
Automation
module introduced, allowing you to create scheduled events to perform certain actions.- User friendly
remindme
command, allowing users to be messaged back with a set message after a set time period. reminder
allows users to view and delete existing reminders set by the user running the command.list
subcommand lists all set reminders.remove
subcommand removes a set reminder.
event
command tree to be used to schedule events for server administrators.list
subcommand displays all set events.create
subcommand creates a new event, complete with a name, execution time, and repeat interval.destroy
subcommand removes an existing event.view
subcommand displays set actions and time values of a defined event.add
subcommand allows for the addition of actions that the event is to execute on execution time. Valid actions are listed below.remove
subcommand removes one of the set actions that an event is to execute.reorder
subcommand moves the execution position of an event action.pause
subcommand stops the event from executing at the set time.resume
subcommand undoes the paused state of the event, allowing it to run at the set time.rename
subcommand allows you to change the name of a set event.description
subcommand changes the description of the event.reschedule
subcommand changes the execution time of the event.interval
changes the repeat interval of the event.
timezone
command allows you to specify what timezone the server resides in for scheduling purposes.
- User friendly
- Available event actions:
message
outputs a specified message.broadcast
outputs an embed with a header and message.voicekick
removes all users from a voice channel.voicemove
moves all users from a voice channel to another voice channel.channelprivate
sets a channel to private for @everyone.channelpublic
set a channel to public for @everyone.
- Spotify support for music playback. Input any spotify song/album/playlist link and it'll play and fetch the correct metadata.
- YouTube playlist support for music playback.
- YouTube Music album support for music playback.
queue add
subcommand now takes in a position argument. Songs can be added to a specific index of the queue.- Music player now uses Lavalink backend. This should make songs faster to load and use less memory.
- Song queries now default to use YouTube music for song searching.
- Music module renamed from
Alexa
toMusicBox
loop
command now doesn't unloop. Separateunloop
command is now used for undoing song loops.playlist move
subcommand renamed toplaylist reorder
.- Duration limit lifted for music playback.
- Queue now has clickable links.
- Queue now shows only 5 songs. More would be preferrable but clickable links make it very easy to go over embed character limit.
- Playlists now show creation and modification date. Existing playlists will not have this information.
- Custom command prefixes begone with the removal of the
alias
comamnd group. Discord now enforces that all commands should be run through slash commands, and so custom definable prefixes are now erased. - Command permissions are no longer necessary since the introduction of Discord's own command permission system.
- Linking hidden text channels to voice channels no longer necessary since Discord introduced voice text channels (Seems to be a pattern here for removals huh.)
- Music player auto disconnection not occurring after 5 minutes.
- Certain songs not playing due to FFmpeg incompatibilities.
- Songs should start playing much faster.
playsearch
should now work much faster to return song results.- Playlist links should be parsed much faster.
- Instance menu display on startup to run and edit available instances
NEW INSTANCE
: Creates a new folder in the data folder as an instanceRENAME INSTANCE
: Renames an existing instancesDELETE INSTANCE
: Deletes an existing instance and removes all of its dataEXIT
: Closes the program
permpreset
command group to manage global permissionscreate
to create a new permission presetdestroy
to remove an existing presetadd
to add a valid permission to a presetdestroy
to remove a permission from a presetlist
to output a list of all available presetsview
to show what permissions a preset contains
- Various new subcommands added to
perm
presets
to allow server admins to list and view presets set by the bot admingroup preset
to assign a preset to a groupgroup unpreset
to remove a preset from a group
- Add module to handle the automatic showing and hiding of text channels on voice connects and disconnects
linkchannels
to link a voice and text channelunlinkchannels
to unlink a voice and text channellistlinkchannels
to list the currently linked text and voice channels
- Permissions in the default preset are assigned to every user
- Presets assigned to a group read permissions from the config on command checks
- Extended descriptions to the
SpaceCat
module commands - Constants helper to hold all old and new constant variables
- Auto voice channel disconnection when no users are in the voice channel
- Auto voice channel disconnection when nothing has been playing for a specified amount of time
- New section to the config pertaining to holding variables of music features
- Flake8 linter now used to better confirm to PEP8
- Revamp the
help
menu to use embeds for pretty formatting help
command without arguments now only shows modules to reduce clutter- Disallow users to view module and command
help
pages they don't have permission for playlist
command now defaults toplaylist list
subcommand- Negative successful embed results to use an orange colour to better distinguish embed results
- Large embeds now use emojis instead of image icons
- Embed number buttons to dynamically convert numbers to emojis and vice versa
- New servers not being added to the database
- Playsearch result fetching due to change on youtube's end
- Unable to enable or disable modules
- Module list failing to output after a module has been disabled and re-enabled
queue
subcommands added to modify the current songs in the queueadd
to add a song to the queue. Alternate method of usingplay
when a song is already playingremove
to remove a song from the queuelist
to list all songs in the queue. Executed byqueue
command if no subcommand is givenmove
to move a selected song in the queue to a different positionclear
to remove all songs in the queue
playlist
command holds all the subcommands for playlist related toolsplay
command play a selected playlist, playing the first song if no song is currently playing and adding the rest to the queuecreate
to create a new playlistdestroy
to remove an existing playlistrename
to rename an existing playlistdescription
to set a playlist descriptionlist
to view all playlistsadd
to add a new song to an existing playlistremove
to remove a song from a playlistmove
to move a selected song in a playlist to a different positionview
to view the songs in the selected playlist
shuffle
command to move the songs in the current queue to random positions- Spoiler tag applied to gifs that were converted from WebPs
- Launch arguments for admin user and command prefix
- Argument passing through run scripts
- Top level run.py file for debugging
- Error output when trying to play an unavailable youtube video
- Error output for missing arguments
- Error output for bot missing permissions
- Song queue limit increased to 100
- Arguments are now parsed before config creation, which can be used to skip the introduction altogether
- Adminuser config entry list based with integer entries to support multiple bot admins
- Moved data, logs, cache, and assets to their own separate directories outside of the source folder
- Introduction text reworded
- Change database table and key naming convention
- Package renamed to spacecat in setup.py
- Bot is now officially run using python's -m argument
- Including directory with the file path rather than changing paths. This solves many IO requests when IO commands are executed quickly in succession
- Song time in queue still counting up when song is paused
- YouTube-DL failing to fetch some videos (Version bumped all requirements)
- Repeat message using echo
- Bot wide custom prefix using globalprefix
- Server wide custom prefix using prefix
- Reset prefix to global prefix using resetprefix
- Bot commands now callable using bot mention
- Fetch top 5 YouTube results using playsearch for use in music playback
- Set server wide dynamic command aliases using alias
- Script based setup to handle running the program inside of a virtual environment
- Setup.py for distribution purposes
- Makefile for easy development environment setup
- First run setup to be more streamlined including prefix setting
- README to include new instructions and requirements utilising the script based setup and start
- Automatic WebP conversion trying to convert static images
- Setup process failing if bot is exited during setup
- Invalid config check preventing a fresh install of the bot to run
- Looped songs volume doubling and being invalidated due to incorrect FFmpeg calls
- Current duration in looped songs
- Enable command not handling already enabled modules
- Startup modules function trying to remove disabled modules twice (may have fixed enabling disabled modules)
- Music player now streams rather than downloading music before playing
- Queue now shows additional time information such as song duration, current time in song, and total queue time
- Queue shows how many songs there are past 10 songs
- Song limit set to 3 hours
- Proper conversion error message
- Directory not changing properly when spamming webps
- Gifs not being removed properly when message sending fails
- Text message being removed on image conversion
- Queue not showing when too many songs are added by setting a limit
- Queue now works across multiple servers without conflicting
- First pre-release version 🎉
- Discord.py API to create a modular Python bot system
- Simple user editable TOML based config
- SQLite database for persistent data storage
- SpaceCat module for basic bot tools (disable, enable, exit, modules, ping, reload, version)
- Alexa module for music playback (join, leave, loop, pause, play, queue, resume, skip, stop)
- Configuration module for configuring the bot (activity, perm, permpreset, status)
- PoliteCat module for image based functions (react, reactcfg, reactlist)
- Seethreepio module for fun text based functions (flip, stealuserpic, throw)