diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/src/event_handlers.rs b/src/event_handlers.rs new file mode 100644 index 0000000..e3db203 --- /dev/null +++ b/src/event_handlers.rs @@ -0,0 +1,28 @@ +use poise::serenity_prelude as serenity; +use crate::Data; +type Error = Box; + +pub async fn sc_event_handler( + ctx: &serenity::Context, + event: &serenity::FullEvent, + _framework: poise::FrameworkContext<'_, Data, Error>, + data: &Data, +) -> Result<(), Error> { + match event { + serenity::FullEvent::Ready { .. }=> { + println!("Bot is ready!"); + } + serenity::FullEvent::Message { new_message } => message_handler(ctx, new_message, data)?, + _ => {} + } + Ok(()) +} + +fn message_handler( + _ctx: &serenity::Context, + msg: &serenity::Message, + _data: &Data, +) -> Result<(), Error> { + println!("Received message: {:?}", msg.content); + Ok(()) +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index ea22209..afa326d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,29 +1,37 @@ use poise::serenity_prelude as serenity; -struct Data {} // User data, which is stored and accessible in all command invocations +pub struct Data {} // User data, which is stored and accessible in all command invocations type Error = Box; type Context<'a> = poise::Context<'a, Data, Error>; -/// Displays your or another user's account creation date +pub mod event_handlers; + +/// Ping command with latency measurement #[poise::command(slash_command, prefix_command)] -async fn age( - ctx: Context<'_>, - #[description = "Selected user"] user: Option, -) -> Result<(), Error> { - let u = user.as_ref().unwrap_or_else(|| ctx.author()); - let response = format!("{}'s account was created at {}", u.name, u.created_at()); - ctx.say(response).await?; +async fn ping(ctx: Context<'_>) -> Result<(), Error> { + let original_msg_timestamp = ctx.created_at(); + let msg = ctx.say("Pong!").await?.into_message().await?; + let latency = msg.timestamp.timestamp_millis() - original_msg_timestamp.timestamp_millis(); + ctx.say(format!("Latency: {}ms", latency)).await?; Ok(()) } #[tokio::main] async fn main() { let token = std::env::var("DISCORD_TOKEN").expect("missing DISCORD_TOKEN"); - let intents = serenity::GatewayIntents::non_privileged(); + let intents = + serenity::GatewayIntents::non_privileged().union(serenity::GatewayIntents::MESSAGE_CONTENT); let framework = poise::Framework::builder() .options(poise::FrameworkOptions { - commands: vec![age()], + prefix_options: poise::PrefixFrameworkOptions { + prefix: Some(String::from("!")), + ..Default::default() + }, + commands: vec![ping()], + event_handler: |ctx, event, framework, data| { + Box::pin(event_handlers::sc_event_handler(ctx, event, framework, data)) + }, ..Default::default() }) .setup(|ctx, _ready, framework| {