Add a few more gateway events

This commit is contained in:
kozabrada123 2023-05-13 16:24:34 +02:00
parent b8f649b04b
commit 3cac8c18c0
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"
reqwest = {version = "0.11.16", features = ["multipart"]}
url = "2.3.1"
chrono = "0.4.24"
chrono = {version = "0.4.24", features = ["serde"]}
regex = "1.7.3"
custom_error = "1.9.2"
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.
*/
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::{api::limits::Limits, instance::Instance};
@ -857,6 +858,43 @@ pub struct 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)]
pub struct GatewayPayload {
pub op: u8,

View File

@ -183,6 +183,7 @@ impl<'a> Gateway {
"READY" => {
let data: GatewayReady = serde_json::from_value(gateway_payload.d.unwrap()).unwrap();
}
"RESUMED" => {}
"APPLICATION_COMMAND_PERMISSIONS_UPDATE" => {}
"AUTO_MODERATION_RULE_CREATE" => {}
"AUTO_MODERATION_RULE_UPDATE" => {}
@ -200,10 +201,16 @@ impl<'a> Gateway {
"THREAD_MEMBERS_UPDATE" => {}
"GUILD_CREATE" => {}
"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_BAN_ADD" => {}
"GUILD_BAN_REMOVE" => {}
"GUILD_BAN_ADD" => {
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_STICKERS_UPDATE" => {}
"GUILD_INTEGRATIONS_UPDATE" => {}
@ -270,7 +277,11 @@ impl<'a> Gateway {
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;
}
"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_SERVER_UPDATE" => {}
"WEBHOOKS_UPDATE" => {}
@ -531,6 +542,7 @@ mod events {
#[derive(Default, Debug)]
pub struct User {
pub user_update: GatewayEvent<UserUpdate>,
pub presence_update: GatewayEvent<PresenceUpdate>,
pub typing_start_event: GatewayEvent<TypingStartEvent>,
}