quick update
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 4m49s
CI/CD Pipeline / Security Scanning (push) Successful in 15s
CI/CD Pipeline / Tests (3.11) (push) Failing after 4m58s
CI/CD Pipeline / Tests (3.12) (push) Failing after 5m0s
CI/CD Pipeline / Build Docker Image (push) Has been skipped
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 4m49s
CI/CD Pipeline / Security Scanning (push) Successful in 15s
CI/CD Pipeline / Tests (3.11) (push) Failing after 4m58s
CI/CD Pipeline / Tests (3.12) (push) Failing after 5m0s
CI/CD Pipeline / Build Docker Image (push) Has been skipped
This commit is contained in:
@@ -86,6 +86,43 @@ class WordlistSourceConfig(BaseModel):
|
||||
enabled: bool = True
|
||||
|
||||
|
||||
class GuildDefaults(BaseModel):
|
||||
"""Default values for new guild settings (configurable via env).
|
||||
|
||||
These values are used when creating a new guild configuration.
|
||||
Override via environment variables with GUARDDEN_GUILD_DEFAULT_ prefix.
|
||||
Example: GUARDDEN_GUILD_DEFAULT_PREFIX=? sets the default prefix to "?"
|
||||
"""
|
||||
|
||||
prefix: str = Field(default="!", min_length=1, max_length=10)
|
||||
locale: str = Field(default="en", min_length=2, max_length=10)
|
||||
automod_enabled: bool = True
|
||||
anti_spam_enabled: bool = True
|
||||
link_filter_enabled: bool = False
|
||||
message_rate_limit: int = Field(default=5, ge=1)
|
||||
message_rate_window: int = Field(default=5, ge=1)
|
||||
duplicate_threshold: int = Field(default=3, ge=1)
|
||||
mention_limit: int = Field(default=5, ge=1)
|
||||
mention_rate_limit: int = Field(default=10, ge=1)
|
||||
mention_rate_window: int = Field(default=60, ge=1)
|
||||
ai_moderation_enabled: bool = True
|
||||
ai_sensitivity: int = Field(default=80, ge=0, le=100)
|
||||
ai_confidence_threshold: float = Field(default=0.7, ge=0.0, le=1.0)
|
||||
ai_log_only: bool = False
|
||||
nsfw_detection_enabled: bool = True
|
||||
verification_enabled: bool = False
|
||||
verification_type: Literal["button", "captcha", "math", "emoji"] = "button"
|
||||
strike_actions: dict = Field(
|
||||
default_factory=lambda: {
|
||||
"1": {"action": "warn"},
|
||||
"3": {"action": "timeout", "duration": 3600},
|
||||
"5": {"action": "kick"},
|
||||
"7": {"action": "ban"},
|
||||
}
|
||||
)
|
||||
scam_allowlist: list[str] = Field(default_factory=list)
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
"""Application settings loaded from environment variables."""
|
||||
|
||||
@@ -95,6 +132,7 @@ class Settings(BaseSettings):
|
||||
case_sensitive=False,
|
||||
env_prefix="GUARDDEN_",
|
||||
env_parse_none_str="",
|
||||
env_nested_delimiter="_",
|
||||
)
|
||||
|
||||
@classmethod
|
||||
@@ -164,6 +202,12 @@ class Settings(BaseSettings):
|
||||
description="Managed wordlist sources (JSON array via env overrides)",
|
||||
)
|
||||
|
||||
# Guild defaults (used when creating new guild configurations)
|
||||
guild_default: GuildDefaults = Field(
|
||||
default_factory=GuildDefaults,
|
||||
description="Default values for new guild settings",
|
||||
)
|
||||
|
||||
@field_validator("allowed_guilds", "owner_ids", mode="before")
|
||||
@classmethod
|
||||
def _validate_id_list(cls, value: Any) -> list[int]:
|
||||
|
||||
Reference in New Issue
Block a user