Add InteractionCreate

This commit is contained in:
kozabrada123 2023-05-27 17:11:47 +02:00
parent 5b04370d46
commit 15ffdcecaa
4 changed files with 27 additions and 3 deletions

View File

@ -405,7 +405,10 @@ impl Gateway {
let new_data: types::IntegrationDelete = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap(); 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; 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" => { "INVITE_CREATE" => {
let new_data: types::InviteCreate = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap(); 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; self.events.lock().await.invite.create.update_data(new_data).await;
@ -723,6 +726,7 @@ mod events {
pub guild: Guild, pub guild: Guild,
pub invite: Invite, pub invite: Invite,
pub integration: Integration, pub integration: Integration,
pub interaction: Interaction,
pub stage_instance: StageInstance, pub stage_instance: StageInstance,
pub call: Call, pub call: Call,
pub voice: Voice, pub voice: Voice,
@ -837,6 +841,11 @@ mod events {
pub delete: GatewayEvent<types::IntegrationDelete> pub delete: GatewayEvent<types::IntegrationDelete>
} }
#[derive(Default, Debug)]
pub struct Interaction {
pub create: GatewayEvent<types::InteractionCreate>,
}
#[derive(Default, Debug)] #[derive(Default, Debug)]
pub struct Call { pub struct Call {
pub create: GatewayEvent<types::CallCreate>, pub create: GatewayEvent<types::CallCreate>,

View File

@ -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 {}

View File

@ -23,6 +23,7 @@ mod lazy_request;
mod relationship; mod relationship;
mod auto_moderation; mod auto_moderation;
mod stage_instance; mod stage_instance;
mod interaction;
pub use channel::*; pub use channel::*;
pub use guild::*; pub use guild::*;
@ -47,6 +48,7 @@ pub use lazy_request::*;
pub use relationship::*; pub use relationship::*;
pub use auto_moderation::*; pub use auto_moderation::*;
pub use stage_instance::*; pub use stage_instance::*;
pub use interaction::*;
pub trait WebSocketEvent {} pub trait WebSocketEvent {}

View File

@ -3,7 +3,7 @@ use crate::types::utils::Snowflake;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::Value; use serde_json::Value;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct Interaction { pub struct Interaction {
pub id: Snowflake, pub id: Snowflake,
pub r#type: InteractionType, pub r#type: InteractionType,
@ -15,8 +15,9 @@ pub struct Interaction {
pub version: i32, pub version: i32,
} }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub enum InteractionType { pub enum InteractionType {
#[default]
SelfCommand = 0, SelfCommand = 0,
Ping = 1, Ping = 1,
ApplicationCommand = 2, ApplicationCommand = 2,