Add Auto Moderation types & events
This commit is contained in:
parent
ab902c5ef2
commit
8d0083e11d
|
@ -233,10 +233,22 @@ impl Gateway {
|
|||
}
|
||||
"RESUMED" => {}
|
||||
"APPLICATION_COMMAND_PERMISSIONS_UPDATE" => {}
|
||||
"AUTO_MODERATION_RULE_CREATE" => {}
|
||||
"AUTO_MODERATION_RULE_UPDATE" => {}
|
||||
"AUTO_MODERATION_RULE_DELETE" => {}
|
||||
"AUTO_MODERATION_ACTION_EXECUTION" => {}
|
||||
"AUTO_MODERATION_RULE_CREATE" => {
|
||||
let new_data: types::AutoModerationRuleCreate = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap();
|
||||
self.events.lock().await.auto_moderation.rule_create.update_data(new_data).await;
|
||||
}
|
||||
"AUTO_MODERATION_RULE_UPDATE" => {
|
||||
let new_data: types::AutoModerationRuleUpdate = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap();
|
||||
self.events.lock().await.auto_moderation.rule_update.update_data(new_data).await;
|
||||
}
|
||||
"AUTO_MODERATION_RULE_DELETE" => {
|
||||
let new_data: types::AutoModerationRuleDelete = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap();
|
||||
self.events.lock().await.auto_moderation.rule_delete.update_data(new_data).await;
|
||||
}
|
||||
"AUTO_MODERATION_ACTION_EXECUTION" => {
|
||||
let new_data: types::AutoModerationActionExecution = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap();
|
||||
self.events.lock().await.auto_moderation.action_execution.update_data(new_data).await;
|
||||
}
|
||||
"CHANNEL_CREATE" => {
|
||||
let new_data: types::ChannelCreate = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap();
|
||||
self.events.lock().await.channel.create.update_data(new_data).await;
|
||||
|
@ -692,6 +704,7 @@ mod events {
|
|||
use super::*;
|
||||
#[derive(Default, Debug)]
|
||||
pub struct Events {
|
||||
pub auto_moderation: AutoModeration,
|
||||
pub session: Session,
|
||||
pub message: Message,
|
||||
pub user: User,
|
||||
|
@ -708,6 +721,14 @@ mod events {
|
|||
pub gateway_resume: GatewayEvent<types::GatewayResume>,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug)]
|
||||
pub struct AutoModeration {
|
||||
pub rule_create: GatewayEvent<types::AutoModerationRuleCreate>,
|
||||
pub rule_update: GatewayEvent<types::AutoModerationRuleUpdate>,
|
||||
pub rule_delete: GatewayEvent<types::AutoModerationRuleDelete>,
|
||||
pub action_execution: GatewayEvent<types::AutoModerationActionExecution>,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug)]
|
||||
pub struct Session {
|
||||
pub ready: GatewayEvent<types::GatewayReady>,
|
||||
|
|
|
@ -0,0 +1,135 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
use serde_repr::{Serialize_repr, Deserialize_repr};
|
||||
|
||||
use crate::types::utils::Snowflake;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object
|
||||
pub struct AutoModerationRule {
|
||||
pub id: Snowflake,
|
||||
pub guild_id: Snowflake,
|
||||
pub name: String,
|
||||
pub creator_id: Snowflake,
|
||||
pub event_type: AutoModerationRuleEventType,
|
||||
pub trigger_type: AutoModerationRuleTriggerType,
|
||||
pub trigger_metadata: AutoModerationRuleTriggerMetadata,
|
||||
pub actions: Vec<AutoModerationAction>,
|
||||
pub enabled: bool,
|
||||
pub exempt_roles: Vec<Snowflake>,
|
||||
pub exempt_channels: Vec<Snowflake>,
|
||||
}
|
||||
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Default)]
|
||||
#[repr(u8)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-event-types
|
||||
pub enum AutoModerationRuleEventType {
|
||||
#[default]
|
||||
MessageSend = 1
|
||||
}
|
||||
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Default)]
|
||||
#[repr(u8)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-trigger-types
|
||||
pub enum AutoModerationRuleTriggerType {
|
||||
#[default]
|
||||
Keyword = 1,
|
||||
Spam = 3,
|
||||
KeywordPreset = 4,
|
||||
MentionSpam = 5
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
#[serde(untagged)]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-trigger-metadata
|
||||
pub enum AutoModerationRuleTriggerMetadata {
|
||||
ForKeyword(AutoModerationRuleTriggerMetadataForKeyword),
|
||||
ForKeywordPreset(AutoModerationRuleTriggerMetadataForKeywordPreset),
|
||||
ForMentionSpam(AutoModerationRuleTriggerMetadataForMentionSpam),
|
||||
#[default]
|
||||
None
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-trigger-metadata
|
||||
pub struct AutoModerationRuleTriggerMetadataForKeyword {
|
||||
pub keyword_filter: Vec<String>,
|
||||
pub regex_patterns: Vec<String>,
|
||||
pub allow_list: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-trigger-metadata
|
||||
pub struct AutoModerationRuleTriggerMetadataForKeywordPreset {
|
||||
pub presets: Vec<AutoModerationRuleKeywordPresetType>,
|
||||
pub allow_list: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-trigger-metadata
|
||||
pub struct AutoModerationRuleTriggerMetadataForMentionSpam {
|
||||
/// Max 50
|
||||
pub mention_total_limit: u8,
|
||||
pub mention_raid_protection_enabled: bool
|
||||
}
|
||||
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Default)]
|
||||
#[repr(u8)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-keyword-preset-types
|
||||
pub enum AutoModerationRuleKeywordPresetType {
|
||||
#[default]
|
||||
Profanity = 1,
|
||||
SexualContent = 2,
|
||||
Slurs = 3
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-action-object
|
||||
pub struct AutoModerationAction {
|
||||
#[serde(rename = "type")]
|
||||
pub action_type: AutoModerationActionType,
|
||||
pub metadata: Option<AutoModerationActionMetadata>
|
||||
}
|
||||
|
||||
#[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Default)]
|
||||
#[repr(u8)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-action-object-action-types
|
||||
pub enum AutoModerationActionType {
|
||||
#[default]
|
||||
BlockMessage = 1,
|
||||
SendAlertMessage = 2,
|
||||
Timeout = 3
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
#[serde(untagged)]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-action-object-action-metadata
|
||||
pub enum AutoModerationActionMetadata {
|
||||
ForBlockMessage(AutoModerationActionMetadataForBlockMessage),
|
||||
ForSendAlertMessage(AutoModerationActionMetadataForSendAlertMessage),
|
||||
ForTimeout(AutoModerationActionMetadataForTimeout),
|
||||
#[default]
|
||||
None
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-action-object-action-metadata
|
||||
pub struct AutoModerationActionMetadataForBlockMessage {
|
||||
pub custom_message: Option<String>
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-action-object-action-metadata
|
||||
pub struct AutoModerationActionMetadataForSendAlertMessage {
|
||||
pub channel_id: Snowflake
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
/// See https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-action-object-action-metadata
|
||||
pub struct AutoModerationActionMetadataForTimeout {
|
||||
/// Max 2419200
|
||||
pub duration_seconds: u32,
|
||||
}
|
|
@ -18,6 +18,7 @@ mod voice_state;
|
|||
mod webhook;
|
||||
mod audit_log;
|
||||
mod relationship;
|
||||
mod auto_moderation;
|
||||
|
||||
pub use application::*;
|
||||
pub use attachment::*;
|
||||
|
@ -38,4 +39,5 @@ pub use user_settings::*;
|
|||
pub use voice_state::*;
|
||||
pub use webhook::*;
|
||||
pub use audit_log::*;
|
||||
pub use relationship::*;
|
||||
pub use relationship::*;
|
||||
pub use auto_moderation::*;
|
|
@ -0,0 +1,48 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::types::{WebSocketEvent, AutoModerationRule, Snowflake, AutoModerationAction, AutoModerationRuleTriggerType};
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Default)]
|
||||
/// See https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-create
|
||||
pub struct AutoModerationRuleCreate {
|
||||
#[serde(flatten)]
|
||||
pub rule: AutoModerationRule,
|
||||
}
|
||||
|
||||
impl WebSocketEvent for AutoModerationRuleCreate {}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Default)]
|
||||
/// See https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-update
|
||||
pub struct AutoModerationRuleUpdate {
|
||||
#[serde(flatten)]
|
||||
pub rule: AutoModerationRule,
|
||||
}
|
||||
|
||||
impl WebSocketEvent for AutoModerationRuleUpdate {}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Default)]
|
||||
/// See https://discord.com/developers/docs/topics/gateway-events#auto-moderation-rule-delete
|
||||
pub struct AutoModerationRuleDelete {
|
||||
#[serde(flatten)]
|
||||
pub rule: AutoModerationRule,
|
||||
}
|
||||
|
||||
impl WebSocketEvent for AutoModerationRuleDelete {}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Default)]
|
||||
/// See https://discord.com/developers/docs/topics/gateway-events#auto-moderation-action-execution
|
||||
pub struct AutoModerationActionExecution {
|
||||
pub guild_id: Snowflake,
|
||||
pub action: AutoModerationAction,
|
||||
pub rule_id: Snowflake,
|
||||
pub rule_trigger_type: AutoModerationRuleTriggerType,
|
||||
pub user_id: Snowflake,
|
||||
pub channel_id: Option<Snowflake>,
|
||||
pub message_id: Option<Snowflake>,
|
||||
pub alert_system_message_id: Option<Snowflake>,
|
||||
pub content: Option<String>,
|
||||
pub matched_keyword: Option<String>,
|
||||
pub matched_content: Option<String>
|
||||
}
|
||||
|
||||
impl WebSocketEvent for AutoModerationActionExecution {}
|
|
@ -21,6 +21,7 @@ mod invite;
|
|||
mod call;
|
||||
mod lazy_request;
|
||||
mod relationship;
|
||||
mod auto_moderation;
|
||||
|
||||
pub use channel::*;
|
||||
pub use guild::*;
|
||||
|
@ -43,6 +44,7 @@ pub use invite::*;
|
|||
pub use call::*;
|
||||
pub use lazy_request::*;
|
||||
pub use relationship::*;
|
||||
pub use auto_moderation::*;
|
||||
|
||||
pub trait WebSocketEvent {}
|
||||
|
||||
|
|
Loading…
Reference in New Issue