From e54ad258f877085a6a23ce6bda9dcfe1b3437c6a Mon Sep 17 00:00:00 2001 From: kozabrada123 <“kozabrada123@users.noreply.github.com”> Date: Mon, 22 May 2023 16:43:06 +0200 Subject: [PATCH] Add GuildScheduledEvent Events --- Cargo.toml | 1 + src/api/types.rs | 105 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 6b9724f..0419177 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ tokio = {version = "1.27.0", features = ["rt", "macros", "rt-multi-thread"]} serde = {version = "1.0.163", features = ["derive"]} serde_json = {version= "1.0.96", features = ["raw_value"]} serde-aux = "4.2.0" +serde_repr = "0.1" reqwest = {version = "0.11.16", features = ["multipart"]} url = "2.3.1" chrono = {version = "0.4.24", features = ["serde"]} diff --git a/src/api/types.rs b/src/api/types.rs index f4b07fa..138ccf9 100644 --- a/src/api/types.rs +++ b/src/api/types.rs @@ -7,7 +7,7 @@ I do not feel like re-documenting all of this, as everything is already perfectl use std::{cell::RefCell, rc::Rc, collections::HashMap}; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; -use serde_json::from_value; +use serde_repr::{Deserialize_repr, Serialize_repr}; use serde_aux::{field_attributes::deserialize_option_number_from_string, prelude::{deserialize_string_from_number, deserialize_number_from_string}}; use crate::{api::limits::Limits, instance::Instance}; @@ -231,6 +231,62 @@ pub struct WelcomeScreenChannel { pub emoji_name: Option, } +#[derive(Serialize, Deserialize, Debug, Default, Clone)] +/// See https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object +pub struct GuildScheduledEvent { + pub id: String, + pub guild_id: String, + pub channel_id: Option, + pub creator_id: Option, + pub name: String, + pub description: String, + pub scheduled_start_time: DateTime, + pub scheduled_end_time: Option>, + pub privacy_level: GuildScheduledEventPrivacyLevel, + pub status: GuildScheduledEventStatus, + pub entity_type: GuildScheduledEventEntityType, + pub entity_id: Option, + pub entity_metadata: Option, + pub creator: Option, + pub user_count: Option, + pub image: Option +} + +#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone)] +#[repr(u8)] +/// See https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-privacy-level +pub enum GuildScheduledEventPrivacyLevel { + #[default] + GuildOnly = 2, +} + +#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone)] +#[repr(u8)] +/// See https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-status +pub enum GuildScheduledEventStatus { + #[default] + Scheduled = 1, + Active = 2, + Completed = 3, + Canceled = 4 +} + +#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone)] +#[repr(u8)] +/// See https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-types +pub enum GuildScheduledEventEntityType { + #[default] + StageInstance = 1, + Voice = 2, + External = 3, +} + +#[derive(Serialize, Deserialize, Debug, Default, Clone)] +/// See https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata +pub struct GuildScheduledEventEntityMetadata { + pub location: Option +} + #[derive(Serialize, Deserialize, Debug, Default, Clone)] /// See https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object pub struct AuditLogEntry { @@ -1524,6 +1580,53 @@ pub struct GuildRoleDelete { impl WebSocketEvent for GuildRoleDelete {} +#[derive(Debug, Default, Deserialize, Serialize)] +/// See https://discord.com/developers/docs/topics/gateway-events#guild-scheduled-event-create +pub struct GuildScheduledEventCreate { + #[serde(flatten)] + pub event: GuildScheduledEvent, +} + +impl WebSocketEvent for GuildScheduledEventCreate {} + +#[derive(Debug, Default, Deserialize, Serialize)] +/// See https://discord.com/developers/docs/topics/gateway-events#guild-scheduled-event-update +pub struct GuildScheduledEventUpdate { + #[serde(flatten)] + pub event: GuildScheduledEvent, +} + +impl WebSocketEvent for GuildScheduledEventUpdate {} + +#[derive(Debug, Default, Deserialize, Serialize)] +/// See https://discord.com/developers/docs/topics/gateway-events#guild-scheduled-event-delete +pub struct GuildScheduledEventDelete { + #[serde(flatten)] + pub event: GuildScheduledEvent, +} + +impl WebSocketEvent for GuildScheduledEventDelete {} + +#[derive(Debug, Default, Deserialize, Serialize)] +/// See https://discord.com/developers/docs/topics/gateway-events#guild-scheduled-event-user-add +pub struct GuildScheduledEventUserAdd { + pub guild_scheduled_event_id: String, + pub user_id: String, + pub guild_id: String, +} + +impl WebSocketEvent for GuildScheduledEventUserAdd {} + +#[derive(Debug, Default, Deserialize, Serialize)] +/// See https://discord.com/developers/docs/topics/gateway-events#guild-scheduled-event-user-remove +pub struct GuildScheduledEventUserRemove { + pub guild_scheduled_event_id: String, + pub user_id: String, + pub guild_id: String, +} + +impl WebSocketEvent for GuildScheduledEventUserRemove {} + #[derive(Debug, Deserialize, Serialize, Default)] /// Officially Undocumented ///