separate interactions and handler
This commit is contained in:
		
							
								
								
									
										1
									
								
								src/commands/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/commands/mod.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					pub mod general;
 | 
				
			||||||
							
								
								
									
										28
									
								
								src/handler/interactions.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/handler/interactions.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					use serenity::builder::{CreateApplicationCommand, CreateInteractionResponseData};
 | 
				
			||||||
 | 
					use std::collections::HashMap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn general() -> Vec<CreateApplicationCommand> {
 | 
				
			||||||
 | 
					    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()),
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										46
									
								
								src/handler/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/handler/mod.rs
									
									
									
									
									
										Normal file
									
								
							@@ -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);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										56
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								src/main.rs
									
									
									
									
									
								
							@@ -1,61 +1,21 @@
 | 
				
			|||||||
mod general;
 | 
					mod commands;
 | 
				
			||||||
 | 
					mod handler;
 | 
				
			||||||
use serenity::{
 | 
					use serenity::{
 | 
				
			||||||
    async_trait,
 | 
					 | 
				
			||||||
    client::bridge::gateway::ShardManager,
 | 
					    client::bridge::gateway::ShardManager,
 | 
				
			||||||
    framework::{standard::macros::group, StandardFramework},
 | 
					    framework::{standard::macros::group, StandardFramework},
 | 
				
			||||||
    http::Http,
 | 
					    http::Http,
 | 
				
			||||||
    model::{
 | 
					 | 
				
			||||||
        event::ResumedEvent,
 | 
					 | 
				
			||||||
        gateway::Ready,
 | 
					 | 
				
			||||||
        interactions::{ApplicationCommand, Interaction, InteractionResponseType, InteractionType, InteractionData},
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    prelude::*,
 | 
					    prelude::*,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use std::{collections::HashSet, env, sync::Arc};
 | 
					use std::{collections::HashSet, env, sync::Arc};
 | 
				
			||||||
use tracing::{error, info};
 | 
					use tracing::error;
 | 
				
			||||||
 | 
					 | 
				
			||||||
pub struct ShardManagerContainer;
 | 
					pub struct ShardManagerContainer;
 | 
				
			||||||
use general::*;
 | 
					use commands::general::*;
 | 
				
			||||||
 | 
					use handler::Handler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl TypeMapKey for ShardManagerContainer {
 | 
					impl TypeMapKey for ShardManagerContainer {
 | 
				
			||||||
    type Value = Arc<Mutex<ShardManager>>;
 | 
					    type Value = Arc<Mutex<ShardManager>>;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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]
 | 
					#[group]
 | 
				
			||||||
#[commands(ping)]
 | 
					#[commands(ping)]
 | 
				
			||||||
struct General;
 | 
					struct General;
 | 
				
			||||||
@@ -63,9 +23,7 @@ struct General;
 | 
				
			|||||||
#[tokio::main]
 | 
					#[tokio::main]
 | 
				
			||||||
async fn main() {
 | 
					async fn main() {
 | 
				
			||||||
    let token = env::var("DISCORD_TOKEN").expect("Token daal madarchod");
 | 
					    let token = env::var("DISCORD_TOKEN").expect("Token daal madarchod");
 | 
				
			||||||
 | 
					 | 
				
			||||||
    let http = Http::new_with_token(&token);
 | 
					    let http = Http::new_with_token(&token);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    let (owners, bot_id) = match http.get_current_application_info().await {
 | 
					    let (owners, bot_id) = match http.get_current_application_info().await {
 | 
				
			||||||
        Ok(info) => {
 | 
					        Ok(info) => {
 | 
				
			||||||
            let mut owners = HashSet::new();
 | 
					            let mut owners = HashSet::new();
 | 
				
			||||||
@@ -93,10 +51,6 @@ async fn main() {
 | 
				
			|||||||
        let mut data = client.data.write().await;
 | 
					        let mut data = client.data.write().await;
 | 
				
			||||||
        data.insert::<ShardManagerContainer>(client.shard_manager.clone());
 | 
					        data.insert::<ShardManagerContainer>(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 {
 | 
					    if let Err(why) = client.start().await {
 | 
				
			||||||
        error!("Client error: {:?}", why);
 | 
					        error!("Client error: {:?}", why);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user