96 lines
2.7 KiB
Python
96 lines
2.7 KiB
Python
"""
|
|
Pydantic models used by the Dashboard API endpoints.
|
|
"""
|
|
|
|
from pydantic import BaseModel, Field
|
|
from typing import Dict, List, Optional, Any
|
|
|
|
|
|
class GuildSettingsResponse(BaseModel):
|
|
guild_id: str
|
|
prefix: Optional[str] = None
|
|
welcome_channel_id: Optional[str] = None
|
|
welcome_message: Optional[str] = None
|
|
goodbye_channel_id: Optional[str] = None
|
|
goodbye_message: Optional[str] = None
|
|
enabled_cogs: Dict[str, bool] = {} # Cog name -> enabled status
|
|
command_permissions: Dict[str, List[str]] = (
|
|
{}
|
|
) # Command name -> List of allowed role IDs (as strings)
|
|
|
|
|
|
class GuildSettingsUpdate(BaseModel):
|
|
# Use Optional fields for PATCH, only provided fields will be updated
|
|
prefix: Optional[str] = Field(None, min_length=1, max_length=10)
|
|
welcome_channel_id: Optional[str] = Field(
|
|
None
|
|
) # Allow empty string or null to disable
|
|
welcome_message: Optional[str] = Field(None)
|
|
goodbye_channel_id: Optional[str] = Field(
|
|
None
|
|
) # Allow empty string or null to disable
|
|
goodbye_message: Optional[str] = Field(None)
|
|
cogs: Optional[Dict[str, bool]] = Field(None) # Dict of {cog_name: enabled_status}
|
|
|
|
|
|
class CommandPermission(BaseModel):
|
|
command_name: str
|
|
role_id: str # Keep as string for consistency
|
|
|
|
|
|
class CommandPermissionsResponse(BaseModel):
|
|
permissions: Dict[str, List[str]] # Command name -> List of allowed role IDs
|
|
|
|
|
|
class CommandCustomizationDetail(BaseModel):
|
|
name: str
|
|
description: Optional[str] = None
|
|
|
|
|
|
class CommandCustomizationResponse(BaseModel):
|
|
command_customizations: Dict[str, Dict[str, Optional[str]]] = (
|
|
{}
|
|
) # Original command name -> {name, description}
|
|
group_customizations: Dict[str, Dict[str, Optional[str]]] = (
|
|
{}
|
|
) # Original group name -> {name, description}
|
|
command_aliases: Dict[str, List[str]] = (
|
|
{}
|
|
) # Original command name -> List of aliases
|
|
|
|
|
|
class CommandCustomizationUpdate(BaseModel):
|
|
command_name: str
|
|
custom_name: Optional[str] = None # If None, removes customization
|
|
custom_description: Optional[str] = (
|
|
None # If None, keeps existing or no description
|
|
)
|
|
|
|
|
|
class GroupCustomizationUpdate(BaseModel):
|
|
group_name: str
|
|
custom_name: Optional[str] = None # If None, removes customization
|
|
|
|
|
|
class CommandAliasAdd(BaseModel):
|
|
command_name: str
|
|
alias_name: str
|
|
|
|
|
|
class CommandAliasRemove(BaseModel):
|
|
command_name: str
|
|
alias_name: str
|
|
|
|
|
|
class CogCommandInfo(BaseModel):
|
|
name: str
|
|
description: Optional[str] = None
|
|
enabled: bool = True
|
|
|
|
|
|
class CogInfo(BaseModel):
|
|
name: str
|
|
description: Optional[str] = None
|
|
enabled: bool = True
|
|
commands: List[Dict[str, Any]] = []
|