pikadick/commands/
xkcd.rs1use 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}