separate interactions and handler

This commit is contained in:
2021-06-24 20:07:12 +05:30
parent 8d75b36431
commit fe16903e6a
5 changed files with 80 additions and 51 deletions

View 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
View 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);
}
}
}
}
}