# To-Do List
## To be implemented
Note that the tasks described here may not exactly be the same once implemented on the bot (for example command names or behavior can change).
### Features
- [ ] Make `/info` and `/remove` autocomplete with items from the queue
### Bug Fixes
- [ ] Enormous delay between each song
### Performance Optimizations
- *nothing*
### New Commands
- [ ] `/rmdupes`: removes duplicate songs from the queue
- [ ] `/lock`: locks the bot to only the user who executed this command and administrators
- [ ] `/save`: save the current queue to a playlist
- [ ] `/load`: loads a saved playlist
- [ ] `/list`: lists all saved playlists
- [ ] `/delete`: deletes a saved playlist
----
## Completed
The completed tasks are ordered by completion date (most recent is at the bottom).
### Features
- [x] A feature to restart the bot (so the CI server can restart it after deploying)
- [x] Add buttons to command outputs
* Create a `CommandAction` class that allows to emulate slash commands
- [x] Support for Argon
- [x] Support for Bandcamp
- [x] Support for SoundCloud
- [x] Disconnect the bot after 30 minutes of inactivity (`VoiceBase.playing` is `false`; do NOT check
for `VoiceBase.paused`)
- [x] Support for HTTP files
- [x] If the URL given to `/add` is a playlist, add all the videos in that playlist to the queue
- [x] Save history of played songs so it is easier to find songs that have already been played
* The `/search` command can use autocompletion and complete with history results
- [x] Pass titles through [YouToo](https://gitlab.minteck.org/minteck/youtoo)'s "magic" title parser
- [x] `/queue` gives the duration (in minutes) of the entire queue
- [x] Block playing songs that are longer than 10 minutes
- [x] Volume normalization
- [x] Make `/queue` more consistent
- `01.` (`00:00`) Song name
- [x] On `/queue`, show time when the playlist will be done
- [x] Make `/lyrics` fetch lyrics from Bandcamp
- [x] Prevent `RESTART` when the bot is playing
- [x] Properly handle connection issues
- [x] More logging
- [x] History matches from SoundCloud result in corrupt entries
- [x] Better loading items with cool messages (like what Discord did)
### Bug Fixes
- [x] Connection reset for random reasons
- [x] Webhook errors for random reasons
- [x] Handle being disconnected by a server moderator (right click > Disconnect)
* This will be harder than expected: class `VoiceConnectionEvents` in `@discordjs/voice` is totally undocumented.
- [x] `/tmp/stream.ogg` is not deleted automatically
- [x] Playing songs from Argon 2 times without wiping /tmp results in an error (BugCheck 0xD460A59A)
- [x] Detect and prevent restart loops (more than 1 restart within 1 minute)
### Performance Optimizations
- [x] On `QueueManager.add`, don't use both `ytdl-core` and the `yt-dlp` command to get metadata
### New Commands
- [x] `/search`: search on YouTube instead of using the full video URL
- [x] `/logs`: displays the bots logs
- [x] `/lyrics`: get lyrics for the currently playing song (probably
use [`genius-api-client`](https://npmjs.com/package/genius-api-client))
- [x] `/shuffle`: randomly changes the queue's order
- [x] `/restart`: restart the bot
- [x] `/random`: picks a random item from history and adds it to the queue
- [x] `/about`: more user-friendly debugging information
- [x] `/skipto`: skip to a certain item in the queue
- [x] `/loopone`: repeat the current playing song instead of the whole queue (`/loop`)
- [x] `/nowplaying`: shows info about the currently playing song
- [x] `/info`: gets info about a song in the queue (who added, when, ...)
- [x] `/clear`: clears all songs in the queue
- [x] `/autodj`: Auto-DJ