Add a few more gateway events
This commit is contained in:
parent
11d371eee2
commit
41b75be2fb
|
@ -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"
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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>,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue