pikadick/commands/
latency.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::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}