From fb863d91868e30d641c09eb6fa515774e3717d58 Mon Sep 17 00:00:00 2001 From: kozabrada123 <“kozabrada123@users.noreply.github.com”> Date: Sat, 27 May 2023 17:11:47 +0200 Subject: [PATCH] Add InteractionCreate --- src/gateway.rs | 11 ++++++++++- src/types/events/interaction.rs | 12 ++++++++++++ src/types/events/mod.rs | 2 ++ src/types/interfaces/interaction.rs | 5 +++-- 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 src/types/events/interaction.rs diff --git a/src/gateway.rs b/src/gateway.rs index 2f3136d..1c6734a 100644 --- a/src/gateway.rs +++ b/src/gateway.rs @@ -405,7 +405,10 @@ impl Gateway { let new_data: types::IntegrationDelete = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap(); self.events.lock().await.integration.delete.update_data(new_data).await; } - "INTERACTION_CREATE" => {} + "INTERACTION_CREATE" => { + let new_data: types::InteractionCreate = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap(); + self.events.lock().await.interaction.create.update_data(new_data).await; + } "INVITE_CREATE" => { let new_data: types::InviteCreate = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap(); self.events.lock().await.invite.create.update_data(new_data).await; @@ -723,6 +726,7 @@ mod events { pub guild: Guild, pub invite: Invite, pub integration: Integration, + pub interaction: Interaction, pub stage_instance: StageInstance, pub call: Call, pub voice: Voice, @@ -837,6 +841,11 @@ mod events { pub delete: GatewayEvent } + #[derive(Default, Debug)] + pub struct Interaction { + pub create: GatewayEvent, + } + #[derive(Default, Debug)] pub struct Call { pub create: GatewayEvent, diff --git a/src/types/events/interaction.rs b/src/types/events/interaction.rs new file mode 100644 index 0000000..560ef55 --- /dev/null +++ b/src/types/events/interaction.rs @@ -0,0 +1,12 @@ +use serde::{Deserialize, Serialize}; + +use crate::types::{Interaction, WebSocketEvent}; + +#[derive(Debug, Default, Deserialize, Serialize)] +/// See https://discord.com/developers/docs/topics/gateway-events#interaction-create +pub struct InteractionCreate { + #[serde(flatten)] + pub interaction: Interaction, +} + +impl WebSocketEvent for InteractionCreate {} \ No newline at end of file diff --git a/src/types/events/mod.rs b/src/types/events/mod.rs index 41396f3..53234b6 100644 --- a/src/types/events/mod.rs +++ b/src/types/events/mod.rs @@ -23,6 +23,7 @@ mod lazy_request; mod relationship; mod auto_moderation; mod stage_instance; +mod interaction; pub use channel::*; pub use guild::*; @@ -47,6 +48,7 @@ pub use lazy_request::*; pub use relationship::*; pub use auto_moderation::*; pub use stage_instance::*; +pub use interaction::*; pub trait WebSocketEvent {} diff --git a/src/types/interfaces/interaction.rs b/src/types/interfaces/interaction.rs index 76b0361..0827078 100644 --- a/src/types/interfaces/interaction.rs +++ b/src/types/interfaces/interaction.rs @@ -3,7 +3,7 @@ use crate::types::utils::Snowflake; use serde::{Deserialize, Serialize}; use serde_json::Value; -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)] pub struct Interaction { pub id: Snowflake, pub r#type: InteractionType, @@ -15,8 +15,9 @@ pub struct Interaction { pub version: i32, } -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)] pub enum InteractionType { + #[default] SelfCommand = 0, Ping = 1, ApplicationCommand = 2,