use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIAutoModerationRule {
pub id: String,
pub guild_id: String,
pub name: String,
pub creator_id: String,
pub event_type: AutoModerationRuleEventType,
pub trigger_type: AutoModerationRuleTriggerType,
pub trigger_metadata: APIAutoModerationRuleTriggerMetadata,
pub actions: Vec<APIAutoModerationAction>,
pub enabled: bool,
pub exempt_roles: Vec<String>,
pub exempt_channels: Vec<String>,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum AutoModerationRuleTriggerType {
Keyword = 1,
Spam = 3,
KeywordPreset = 4,
MentionSpam = 5,
MemberProfile = 6,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIAutoModerationRuleTriggerMetadata {
pub keyword_filter: Option<Vec<String>>,
pub presets: Option<Vec<AutoModerationRuleKeywordPresetType>>,
pub allow_list: Option<Vec<String>>,
pub regex_patterns: Option<Vec<String>>,
pub mention_total_limit: Option<i64>,
pub mention_raid_protection_enabled: Option<bool>,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum AutoModerationRuleKeywordPresetType {
Profanity = 1,
SexualContent = 2,
Slurs = 3,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum AutoModerationRuleEventType {
MessageSend = 1,
MemberUpdate = 2,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIAutoModerationAction {
#[serde(rename = "type")]
pub r#type: AutoModerationActionType,
pub metadata: Option<APIAutoModerationActionMetadata>,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum AutoModerationActionType {
BlockMessage = 1,
SendAlertMessage = 2,
Timeout = 3,
BlockMemberInteraction = 4,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIAutoModerationActionMetadata {
pub channel_id: Option<String>,
pub duration_seconds: Option<i64>,
pub custom_message: Option<String>,
}