The queue command now displays an embed with pagination and
allows for songs to be queried by providing arguments. Each argument
is interpreted as a keyword that is searched for.
Signed-off-by: trivernis <trivernis@protonmail.com>
Added a gif table to store gifs with optional category and name
as. The command add_gif (owner only) can be used to add a gif to
the database. The command gifs can be used to see all the gifs
stored in the database. The gifs are being used by the pekofy and
matsuri command.
Signed-off-by: trivernis <trivernis@protonmail.com>
The pages of a menu are now wrapped in an enum that contains either
a builder function or a static CreateMessage. The builder function
is used for the now playing message to always return the currently
playing song instead of mapping a static song. This solves the problem
that the old page is being rendered when the page is recreated because
of being sticky.
Signed-off-by: trivernis <trivernis@protonmail.com>
Menus can now be created as sticky menus. When new messages appear
in the channel, the sticky message will be resent to be the latest
one in the channel. It only get's recreated every ten seconds max
to avoid getting ratelimited.
To work with recreatable menus, the message handle returned by
the menu is now wrapped into an Arc<RwLock<>>.
Signed-off-by: trivernis <trivernis@protonmail.com>
The new enquote function is used to enquote command input.
For simplicity reasons the run_command_async doesn't read from
stdout and stderr separately anymore but uses `.output().await`
instead.
Signed-off-by: trivernis <trivernis@protonmail.com>
Introduced the new trait Shuffle that is implemented for
VecDeque and shuffles it. Previously the VecDeque
was shuffled with a function provided in the main utils module.
Signed-off-by: trivernis <trivernis@protonmail.com>
Add subcrate bot-coreutils to move some utilities that don't
depend too heavily on other crates and require heavy testing
there.
Signed-off-by: trivernis <trivernis@protonmail.com>