From c8be3949df6e1cfe455b3c5170a20787b8774609 Mon Sep 17 00:00:00 2001 From: trivernis Date: Mon, 16 Aug 2021 10:01:37 +0200 Subject: [PATCH] Add party command Signed-off-by: trivernis --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/commands/misc/fuck.rs | 2 +- src/commands/misc/mod.rs | 5 ++++- src/commands/misc/party.rs | 43 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 src/commands/misc/party.rs diff --git a/Cargo.lock b/Cargo.lock index 02f68f3..e43e0b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2575,7 +2575,7 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tobi-rs" -version = "0.9.1" +version = "0.9.2" dependencies = [ "animethemes-rs", "aspotify", diff --git a/Cargo.toml b/Cargo.toml index 9ee5981..098c3b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tobi-rs" -version = "0.9.1" +version = "0.9.2" authors = ["trivernis "] edition = "2018" diff --git a/src/commands/misc/fuck.rs b/src/commands/misc/fuck.rs index 22ec9c1..adee9c5 100644 --- a/src/commands/misc/fuck.rs +++ b/src/commands/misc/fuck.rs @@ -6,7 +6,7 @@ use serenity::model::id::UserId; #[command] #[description("Fuck this person in particular")] -#[usage("[] []")] +#[usage(" [] []")] #[min_args(1)] #[max_args(3)] #[bucket("general")] diff --git a/src/commands/misc/mod.rs b/src/commands/misc/mod.rs index e5be547..ced7435 100644 --- a/src/commands/misc/mod.rs +++ b/src/commands/misc/mod.rs @@ -6,6 +6,7 @@ use clear::CLEAR_COMMAND; use fuck::FUCK_COMMAND; use media::MEDIA_COMMAND; use pain::PAIN_COMMAND; +use party::PARTY_COMMAND; use ping::PING_COMMAND; use qalc::QALC_COMMAND; use shutdown::SHUTDOWN_COMMAND; @@ -21,6 +22,7 @@ mod fuck; pub(crate) mod help; mod media; mod pain; +mod party; mod ping; mod qalc; mod shutdown; @@ -31,6 +33,7 @@ mod xkcd; #[group] #[commands( - ping, stats, shutdown, time, timezones, qalc, about, add_media, media, pain, clear, xkcd, fuck + ping, stats, shutdown, time, timezones, qalc, about, add_media, media, pain, clear, xkcd, fuck, + party )] pub struct Misc; diff --git a/src/commands/misc/party.rs b/src/commands/misc/party.rs new file mode 100644 index 0000000..61abc16 --- /dev/null +++ b/src/commands/misc/party.rs @@ -0,0 +1,43 @@ +use crate::utils::context_data::get_database_from_context; +use crate::utils::error::BotError; +use bot_database::models::Media; +use rand::prelude::SliceRandom; +use serenity::client::Context; +use serenity::framework::standard::macros::command; +use serenity::framework::standard::{Args, CommandResult}; +use serenity::model::channel::Message; + +#[command] +#[description("Party command")] +#[max_args(1)] +#[usage("()")] +#[bucket("general")] +async fn party(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult { + let mut amount = args.single::().unwrap_or(1); + if amount > 5 { + amount = 5; + } + if amount == 0 { + return Ok(()); + } + let database = get_database_from_context(ctx).await; + let mut media = database.get_media_by_category("party").await?; + media.shuffle(&mut rand::thread_rng()); + let mut chosen_gifs = Vec::new(); + + for _ in 0..amount { + chosen_gifs.push(media.pop()); + } + let chosen_gifs: Vec = chosen_gifs.into_iter().filter_map(|g| g).collect(); + if chosen_gifs.is_empty() { + return Err(BotError::from("No media found.").into()); + } + + for gif in chosen_gifs { + msg.channel_id + .send_message(&ctx.http, |m| m.content(gif.url)) + .await?; + } + + Ok(()) +}