Add party command

Signed-off-by: trivernis <trivernis@protonmail.com>
pull/35/head
trivernis 3 years ago
parent 1fd0a16f75
commit c8be3949df
Signed by: Trivernis
GPG Key ID: DFFFCC2C7A02DB45

2
Cargo.lock generated

@ -2575,7 +2575,7 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
[[package]]
name = "tobi-rs"
version = "0.9.1"
version = "0.9.2"
dependencies = [
"animethemes-rs",
"aspotify",

@ -1,6 +1,6 @@
[package]
name = "tobi-rs"
version = "0.9.1"
version = "0.9.2"
authors = ["trivernis <trivernis@protonmail.com>"]
edition = "2018"

@ -6,7 +6,7 @@ use serenity::model::id::UserId;
#[command]
#[description("Fuck this person in particular")]
#[usage("[<amount>] [<verbosity>]")]
#[usage("<person> [<amount>] [<verbosity>]")]
#[min_args(1)]
#[max_args(3)]
#[bucket("general")]

@ -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;

@ -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("(<amount>)")]
#[bucket("general")]
async fn party(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
let mut amount = args.single::<u32>().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<Media> = 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(())
}
Loading…
Cancel
Save