use async_trait::async_trait; #[cfg(feature = "clap")] use clap::Parser; use euphoxide::api::Message; #[cfg(feature = "clap")] use crate::command::clap::ClapCommand; use crate::command::{Command, Context, Propagate}; pub struct Ping(pub String); impl Ping { pub fn new(reply: S) -> Self { Self(reply.to_string()) } } impl Default for Ping { fn default() -> Self { Self::new("Pong!") } } #[async_trait] impl Command for Ping where E: From, { async fn execute( &self, arg: &str, msg: &Message, ctx: &Context, _bot: &B, ) -> Result { if arg.trim().is_empty() { ctx.reply_only(msg.id, &self.0).await?; Ok(Propagate::No) } else { Ok(Propagate::Yes) } } } /// Trigger a short reply. #[cfg(feature = "clap")] #[derive(Parser)] pub struct PingArgs {} #[cfg(feature = "clap")] #[async_trait] impl ClapCommand for Ping where E: From, { type Args = PingArgs; async fn execute( &self, _args: Self::Args, msg: &Message, ctx: &Context, _bot: &B, ) -> Result { ctx.reply_only(msg.id, &self.0).await?; Ok(Propagate::No) } }