Add a few more gateway events

This commit is contained in:
kozabrada123 2023-05-13 16:24:34 +02:00
parent 11d371eee2
commit 41b75be2fb
3 changed files with 55 additions and 5 deletions

View File

@ -10,7 +10,7 @@ serde = {version = "1.0.159", features = ["derive"]}
serde_json = "1.0.95" serde_json = "1.0.95"
reqwest = {version = "0.11.16", features = ["multipart"]} reqwest = {version = "0.11.16", features = ["multipart"]}
url = "2.3.1" url = "2.3.1"
chrono = "0.4.24" chrono = {version = "0.4.24", features = ["serde"]}
regex = "1.7.3" regex = "1.7.3"
custom_error = "1.9.2" custom_error = "1.9.2"
native-tls = "0.2.11" native-tls = "0.2.11"

View File

@ -4,6 +4,7 @@ https://discord.com/developers/docs .
I do not feel like re-documenting all of this, as everything is already perfectly explained there. I do not feel like re-documenting all of this, as everything is already perfectly explained there.
*/ */
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::{api::limits::Limits, instance::Instance}; use crate::{api::limits::Limits, instance::Instance};
@ -857,6 +858,43 @@ pub struct GatewayHeartbeatAck {
impl WebSocketEvent for GatewayHeartbeatAck {} impl WebSocketEvent for GatewayHeartbeatAck {}
#[derive(Debug, Default, Deserialize, Serialize)]
/// See https://discord.com/developers/docs/topics/gateway-events#channel-pins-update
pub struct ChannelPinsUpdate {
pub guild_id: Option<String>,
pub channel_id: String,
pub last_pin_timestamp: Option<DateTime<Utc>>
}
impl WebSocketEvent for ChannelPinsUpdate {}
#[derive(Debug, Default, Deserialize, Serialize)]
/// See https://discord.com/developers/docs/topics/gateway-events#guild-ban-add-guild-ban-add-event-fields
pub struct GuildBanAdd {
pub guild_id: String,
pub user: UserObject,
}
impl WebSocketEvent for GuildBanAdd {}
#[derive(Debug, Default, Deserialize, Serialize)]
/// See https://discord.com/developers/docs/topics/gateway-events#guild-ban-remove
pub struct GuildBanRemove {
pub guild_id: String,
pub user: UserObject,
}
impl WebSocketEvent for GuildBanRemove {}
#[derive(Debug, Default, Deserialize, Serialize)]
/// See https://discord.com/developers/docs/topics/gateway-events#user-update
/// Not directly serialized, as the inner payload is the user object
pub struct UserUpdate {
pub user: UserObject,
}
impl WebSocketEvent for UserUpdate {}
#[derive(Debug, Default, Deserialize, Serialize)] #[derive(Debug, Default, Deserialize, Serialize)]
pub struct GatewayPayload { pub struct GatewayPayload {
pub op: u8, pub op: u8,

View File

@ -183,6 +183,7 @@ impl<'a> Gateway {
"READY" => { "READY" => {
let data: GatewayReady = serde_json::from_value(gateway_payload.d.unwrap()).unwrap(); let data: GatewayReady = serde_json::from_value(gateway_payload.d.unwrap()).unwrap();
} }
"RESUMED" => {}
"APPLICATION_COMMAND_PERMISSIONS_UPDATE" => {} "APPLICATION_COMMAND_PERMISSIONS_UPDATE" => {}
"AUTO_MODERATION_RULE_CREATE" => {} "AUTO_MODERATION_RULE_CREATE" => {}
"AUTO_MODERATION_RULE_UPDATE" => {} "AUTO_MODERATION_RULE_UPDATE" => {}
@ -200,10 +201,16 @@ impl<'a> Gateway {
"THREAD_MEMBERS_UPDATE" => {} "THREAD_MEMBERS_UPDATE" => {}
"GUILD_CREATE" => {} "GUILD_CREATE" => {}
"GUILD_UPDATE" => {} "GUILD_UPDATE" => {}
"GUILD_DELETE" => {} "GUILD_DELETE" => {
let new_data: UnavailableGuild = serde_json::from_value(gateway_payload.d.unwrap()).unwrap();
}
"GUILD_AUDIT_LOG_ENTRY_CREATE" => {} "GUILD_AUDIT_LOG_ENTRY_CREATE" => {}
"GUILD_BAN_ADD" => {} "GUILD_BAN_ADD" => {
"GUILD_BAN_REMOVE" => {} let new_data: GuildBanAdd = serde_json::from_value(gateway_payload.d.unwrap()).unwrap();
}
"GUILD_BAN_REMOVE" => {
let new_data: GuildBanRemove = serde_json::from_value(gateway_payload.d.unwrap()).unwrap();
}
"GUILD_EMOJIS_UPDATE" => {} "GUILD_EMOJIS_UPDATE" => {}
"GUILD_STICKERS_UPDATE" => {} "GUILD_STICKERS_UPDATE" => {}
"GUILD_INTEGRATIONS_UPDATE" => {} "GUILD_INTEGRATIONS_UPDATE" => {}
@ -270,7 +277,11 @@ impl<'a> Gateway {
let new_data: TypingStartEvent = serde_json::from_value(gateway_payload.d.unwrap()).unwrap(); let new_data: TypingStartEvent = serde_json::from_value(gateway_payload.d.unwrap()).unwrap();
self.events.lock().await.user.typing_start_event.update_data(new_data).await; self.events.lock().await.user.typing_start_event.update_data(new_data).await;
} }
"USER_UPDATE" => {} "USER_UPDATE" => {
let user: UserObject = serde_json::from_value(gateway_payload.d.unwrap()).unwrap();
let new_data = UserUpdate {user};
self.events.lock().await.user.user_update.update_data(new_data).await;
}
"VOICE_STATE_UPDATE" => {} "VOICE_STATE_UPDATE" => {}
"VOICE_SERVER_UPDATE" => {} "VOICE_SERVER_UPDATE" => {}
"WEBHOOKS_UPDATE" => {} "WEBHOOKS_UPDATE" => {}
@ -531,6 +542,7 @@ mod events {
#[derive(Default, Debug)] #[derive(Default, Debug)]
pub struct User { pub struct User {
pub user_update: GatewayEvent<UserUpdate>,
pub presence_update: GatewayEvent<PresenceUpdate>, pub presence_update: GatewayEvent<PresenceUpdate>,
pub typing_start_event: GatewayEvent<TypingStartEvent>, pub typing_start_event: GatewayEvent<TypingStartEvent>,
} }