pikadick/commands/
xkcd.rs

1use crate::{
2    checks::ENABLED_CHECK,
3    ClientDataKey,
4};
5use serenity::{
6    framework::standard::{
7        macros::command,
8        Args,
9        CommandResult,
10    },
11    model::prelude::*,
12    prelude::*,
13};
14use tracing::error;
15
16#[command]
17#[description("Get a random comic from Xkcd")]
18#[checks(Enabled)]
19#[bucket("default")]
20async fn xkcd(ctx: &Context, msg: &Message, _args: Args) -> CommandResult {
21    let data_lock = ctx.data.read().await;
22    let client_data = data_lock.get::<ClientDataKey>().unwrap();
23    let client = client_data.xkcd_client.clone();
24    drop(data_lock);
25
26    match client.get_random().await {
27        Ok(data) => {
28            msg.channel_id.say(&ctx.http, data).await?;
29        }
30        Err(e) => {
31            msg.channel_id
32                .say(&ctx.http, format!("Failed to get xkcd comic: {}", e))
33                .await?;
34            error!("Failed to get xkcd comic: {}", e);
35        }
36    }
37
38    Ok(())
39}