pikadick/commands/
latency.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::warn;
15
16#[command]
17#[description("Get the bot's latency in this server")]
18#[checks(Enabled)]
19#[bucket("default")]
20async fn latency(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 shard_manager = client_data.shard_manager.clone();
24    drop(data_lock);
25
26    let shard_id = ctx.shard_id;
27
28    let latency = {
29        let runners = shard_manager.runners.lock().await;
30        let maybe_shard = runners.get(&shard_id);
31        maybe_shard.and_then(|shard| shard.latency)
32    };
33
34    match latency {
35        Some(latency) => {
36            msg.channel_id
37                .say(&ctx.http, format!("Shard Latency: {latency:?}"))
38                .await?;
39        }
40        None => {
41            warn!("Failed to get latency for shard: {shard_id}");
42            msg.channel_id
43                .say(&ctx.http, "Failed to get latency")
44                .await?;
45        }
46    }
47    Ok(())
48}