From fe16903e6a47a0e023f2dd93e7588e5b85953727 Mon Sep 17 00:00:00 2001 From: natto1784 Date: Thu, 24 Jun 2021 20:07:12 +0530 Subject: [PATCH] separate interactions and handler --- src/{ => commands}/general.rs | 0 src/commands/mod.rs | 1 + src/handler/interactions.rs | 28 ++++++++++++++++++ src/handler/mod.rs | 46 ++++++++++++++++++++++++++++ src/main.rs | 56 ++++------------------------------- 5 files changed, 80 insertions(+), 51 deletions(-) rename src/{ => commands}/general.rs (100%) create mode 100644 src/commands/mod.rs create mode 100644 src/handler/interactions.rs create mode 100644 src/handler/mod.rs diff --git a/src/general.rs b/src/commands/general.rs similarity index 100% rename from src/general.rs rename to src/commands/general.rs diff --git a/src/commands/mod.rs b/src/commands/mod.rs new file mode 100644 index 0000000..2bd296d --- /dev/null +++ b/src/commands/mod.rs @@ -0,0 +1 @@ +pub mod general; diff --git a/src/handler/interactions.rs b/src/handler/interactions.rs new file mode 100644 index 0000000..8355cb8 --- /dev/null +++ b/src/handler/interactions.rs @@ -0,0 +1,28 @@ +use serenity::builder::{CreateApplicationCommand, CreateInteractionResponseData}; +use std::collections::HashMap; + +pub fn general() -> Vec { + let allah: CreateApplicationCommand = CreateApplicationCommand(HashMap::new()) + .name("allah") + .description("acha bhay islam") + .to_owned(); + let ping: CreateApplicationCommand = CreateApplicationCommand(HashMap::new()) + .name("ping") + .description("Pong! bhay") + .to_owned(); + let chut: CreateApplicationCommand = CreateApplicationCommand(HashMap::new()) + .name("chut") + .description("yummy parantha") + .to_owned(); + vec![allah, ping, chut] +} + +pub fn responses( + interaction_name: String, + message: &mut CreateInteractionResponseData, +) -> &mut CreateInteractionResponseData { + match interaction_name.as_str() { + "allah" => message.content("suar ki chamdi".to_string()), + _ => message.content("na hai bhay".to_string()), + } +} diff --git a/src/handler/mod.rs b/src/handler/mod.rs new file mode 100644 index 0000000..247b5ad --- /dev/null +++ b/src/handler/mod.rs @@ -0,0 +1,46 @@ +mod interactions; +use serenity::{ + async_trait, + model::{ + event::ResumedEvent, + gateway::Ready, + interactions::{ + ApplicationCommand, Interaction, InteractionData, InteractionResponseType, + InteractionType, + }, + }, + prelude::*, +}; +use tracing::info; + +pub struct Handler; + +#[async_trait] +impl EventHandler for Handler { + async fn ready(&self, ctx: Context, ready: Ready) { + info!("{} connected bhay", ready.user.name); + let _ = ApplicationCommand::create_global_application_commands(&ctx.http, |commands| { + commands.set_application_commands(interactions::general()) + }) + .await; + } + async fn resume(&self, _: Context, _: ResumedEvent) { + info!("how th when the"); + } + async fn interaction_create(&self, ctx: Context, interaction: Interaction) { + if interaction.kind == InteractionType::ApplicationCommand { + if let Some(InteractionData::ApplicationCommand(data)) = interaction.data.as_ref() { + if let Err(why) = interaction + .create_interaction_response(&ctx.http, |response| { + response + .kind(InteractionResponseType::ChannelMessageWithSource) + .interaction_response_data(|message| interactions::responses(data.name.to_string(), message)) + }) + .await + { + println!("Cannot respond to slash command: {}", why); + } + } + } + } +} diff --git a/src/main.rs b/src/main.rs index 1793116..0c90f3e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,61 +1,21 @@ -mod general; +mod commands; +mod handler; use serenity::{ - async_trait, client::bridge::gateway::ShardManager, framework::{standard::macros::group, StandardFramework}, http::Http, - model::{ - event::ResumedEvent, - gateway::Ready, - interactions::{ApplicationCommand, Interaction, InteractionResponseType, InteractionType, InteractionData}, - }, prelude::*, }; use std::{collections::HashSet, env, sync::Arc}; -use tracing::{error, info}; - +use tracing::error; pub struct ShardManagerContainer; -use general::*; +use commands::general::*; +use handler::Handler; impl TypeMapKey for ShardManagerContainer { type Value = Arc>; } -struct Handler; - -#[async_trait] -impl EventHandler for Handler { - async fn interaction_create(&self, ctx: Context, interaction: Interaction) { - if interaction.kind == InteractionType::ApplicationCommand { - if let Some(InteractionData::ApplicationCommand(data)) = interaction.data.as_ref() { - let content = match data.name.as_str() { - "ping" => "Hey, I'm alive!".to_string(), - _ => "not implemented :(".to_string(), - }; - - if let Err(why) = interaction - .create_interaction_response(&ctx.http, |response| { - response - .kind(InteractionResponseType::ChannelMessageWithSource) - .interaction_response_data(|message| message.content(content)) - }) - .await - { - println!("Cannot respond to slash command: {}", why); - } - } - } - } - - async fn ready(&self, _: Context, ready: Ready) { - info!("{} connected bhay", ready.user.name); - } - - async fn resume(&self, _: Context, _: ResumedEvent) { - info!("how th when the"); - } -} - #[group] #[commands(ping)] struct General; @@ -63,9 +23,7 @@ struct General; #[tokio::main] async fn main() { let token = env::var("DISCORD_TOKEN").expect("Token daal madarchod"); - let http = Http::new_with_token(&token); - let (owners, bot_id) = match http.get_current_application_info().await { Ok(info) => { let mut owners = HashSet::new(); @@ -93,10 +51,6 @@ async fn main() { let mut data = client.data.write().await; data.insert::(client.shard_manager.clone()); } - let _ = ApplicationCommand::create_global_application_command(&http, |a| { - a.name("ping").description("A simple ping command") - }) - .await; if let Err(why) = client.start().await { error!("Client error: {:?}", why);