Add Auto Moderation types & events
This commit is contained in:
parent
ab902c5ef2
commit
8d0083e11d
|
@ -233,10 +233,22 @@ impl Gateway {
|
||||||
}
|
}
|
||||||
"RESUMED" => {}
|
"RESUMED" => {}
|
||||||
"APPLICATION_COMMAND_PERMISSIONS_UPDATE" => {}
|
"APPLICATION_COMMAND_PERMISSIONS_UPDATE" => {}
|
||||||
"AUTO_MODERATION_RULE_CREATE" => {}
|
"AUTO_MODERATION_RULE_CREATE" => {
|
||||||
"AUTO_MODERATION_RULE_UPDATE" => {}
|
let new_data: types::AutoModerationRuleCreate = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap();
|
||||||
"AUTO_MODERATION_RULE_DELETE" => {}
|
self.events.lock().await.auto_moderation.rule_create.update_data(new_data).await;
|
||||||
"AUTO_MODERATION_ACTION_EXECUTION" => {}
|
}
|
||||||
|
"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" => {
|
"CHANNEL_CREATE" => {
|
||||||
let new_data: types::ChannelCreate = serde_json::from_str(gateway_payload.d.unwrap().get()).unwrap();
|
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;
|
self.events.lock().await.channel.create.update_data(new_data).await;
|
||||||
|
@ -692,6 +704,7 @@ mod events {
|
||||||
use super::*;
|
use super::*;
|
||||||
#[derive(Default, Debug)]
|
#[derive(Default, Debug)]
|
||||||
pub struct Events {
|
pub struct Events {
|
||||||
|
pub auto_moderation: AutoModeration,
|
||||||
pub session: Session,
|
pub session: Session,
|
||||||
pub message: Message,
|
pub message: Message,
|
||||||
pub user: User,
|
pub user: User,
|
||||||
|
@ -708,6 +721,14 @@ mod events {
|
||||||
pub gateway_resume: GatewayEvent<types::GatewayResume>,
|
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)]
|
#[derive(Default, Debug)]
|
||||||
pub struct Session {
|
pub struct Session {
|
||||||
pub ready: GatewayEvent<types::GatewayReady>,
|
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 webhook;
|
||||||
mod audit_log;
|
mod audit_log;
|
||||||
mod relationship;
|
mod relationship;
|
||||||
|
mod auto_moderation;
|
||||||
|
|
||||||
pub use application::*;
|
pub use application::*;
|
||||||
pub use attachment::*;
|
pub use attachment::*;
|
||||||
|
@ -39,3 +40,4 @@ pub use voice_state::*;
|
||||||
pub use webhook::*;
|
pub use webhook::*;
|
||||||
pub use audit_log::*;
|
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 call;
|
||||||
mod lazy_request;
|
mod lazy_request;
|
||||||
mod relationship;
|
mod relationship;
|
||||||
|
mod auto_moderation;
|
||||||
|
|
||||||
pub use channel::*;
|
pub use channel::*;
|
||||||
pub use guild::*;
|
pub use guild::*;
|
||||||
|
@ -43,6 +44,7 @@ pub use invite::*;
|
||||||
pub use call::*;
|
pub use call::*;
|
||||||
pub use lazy_request::*;
|
pub use lazy_request::*;
|
||||||
pub use relationship::*;
|
pub use relationship::*;
|
||||||
|
pub use auto_moderation::*;
|
||||||
|
|
||||||
pub trait WebSocketEvent {}
|
pub trait WebSocketEvent {}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue