Add pain command

Signed-off-by: trivernis <trivernis@protonmail.com>
pull/11/head
trivernis 3 years ago
parent cfbd68a7c2
commit 619d8aa30b
Signed by: Trivernis
GPG Key ID: DFFFCC2C7A02DB45

@ -3,6 +3,7 @@ use serenity::framework::standard::macros::group;
use about::ABOUT_COMMAND;
use add_gif::ADD_GIF_COMMAND;
use gifs::GIFS_COMMAND;
use pain::PAIN_COMMAND;
use ping::PING_COMMAND;
use qalc::QALC_COMMAND;
use shutdown::SHUTDOWN_COMMAND;
@ -14,6 +15,7 @@ mod about;
mod add_gif;
mod gifs;
pub(crate) mod help;
mod pain;
mod ping;
mod qalc;
mod shutdown;
@ -22,5 +24,7 @@ mod time;
mod timezones;
#[group]
#[commands(ping, stats, shutdown, time, timezones, qalc, about, add_gif, gifs)]
#[commands(
ping, stats, shutdown, time, timezones, qalc, about, add_gif, gifs, pain
)]
pub struct Misc;

@ -0,0 +1,42 @@
use crate::utils::context_data::get_database_from_context;
use crate::utils::error::BotError;
use rand::prelude::IteratorRandom;
use serenity::client::Context;
use serenity::framework::standard::macros::command;
use serenity::framework::standard::{Args, CommandResult};
use serenity::model::channel::Message;
static CATEGORY_PREFIX: &str = "pain-";
static NOT_FOUND_PAIN: &str = "404";
#[command]
#[description("Various types of pain (pain-peko)")]
#[usage("<pain-type>")]
#[example("peko")]
#[min_args(1)]
#[max_args(1)]
#[bucket("general")]
async fn pain(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
log::debug!("Got pain command");
let pain_type = args.message().to_lowercase();
let database = get_database_from_context(ctx).await;
let mut gifs = database
.get_gifs_by_category(format!("{}{}", CATEGORY_PREFIX, pain_type).as_str())
.await?;
if gifs.is_empty() {
log::debug!("No gif found for pain {}. Using 404", pain_type);
gifs = database
.get_gifs_by_category(format!("{}{}", CATEGORY_PREFIX, NOT_FOUND_PAIN).as_str())
.await?;
}
let gif = gifs
.into_iter()
.choose(&mut rand::thread_rng())
.ok_or(BotError::from("No gifs found."))?;
log::trace!("Gif for pain is {:?}", gif);
msg.reply(ctx, gif.url).await?;
Ok(())
}
Loading…
Cancel
Save