105 lines
2.8 KiB
Python
105 lines
2.8 KiB
Python
"""JARVIS Backup Models (NYI)."""
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from beanie import Document, Indexed, Link
|
|
from pydantic import BaseModel, Field
|
|
|
|
from jarvis_core import __version__
|
|
from jarvis_core.db.utils import NanoField, NowField
|
|
|
|
|
|
class Image(Document):
|
|
discord_id: int = Indexed(int, unique=True)
|
|
image_data: list[bytes]
|
|
image_ext: str
|
|
created_at: datetime = NowField()
|
|
|
|
|
|
class PermissionOverwriteBackup(BaseModel):
|
|
id: int
|
|
type: int
|
|
allow: int
|
|
deny: int
|
|
|
|
|
|
class WebhookBackup(BaseModel):
|
|
id: int
|
|
channel_id: int
|
|
type: int
|
|
avatar: Link[Image]
|
|
name: str
|
|
|
|
|
|
class ChannelBackup(BaseModel):
|
|
id: int
|
|
name: str
|
|
type: int
|
|
position: int
|
|
topic: Optional[str] = None
|
|
nsfw: bool = False
|
|
rate_limit_per_user: Optional[int] = None
|
|
bitrate: Optional[int] = None
|
|
user_limit: Optional[int] = None
|
|
permission_overwrites: list[PermissionOverwriteBackup] = Field(default_factory=list)
|
|
parent_id: Optional[int] = None
|
|
rtc_region: Optional[str] = None
|
|
video_quality_mode: Optional[int] = None
|
|
default_auto_archive_duration: Optional[int] = None
|
|
webhooks: list[WebhookBackup] = Field(default_factory=list)
|
|
|
|
|
|
class RoleBackup(BaseModel):
|
|
id: int
|
|
name: str
|
|
permissions: int
|
|
color: str
|
|
hoist: bool
|
|
mentionable: bool
|
|
|
|
|
|
class EmojiBackup(BaseModel):
|
|
id: int
|
|
name: str
|
|
image: Link[Image]
|
|
|
|
|
|
class StickerBackup(BaseModel):
|
|
id: int
|
|
name: str
|
|
format_type: int
|
|
tags: str
|
|
type: int
|
|
image: Link[Image]
|
|
|
|
|
|
class GuildBackup(BaseModel):
|
|
name: str
|
|
description: Optional[str] = None
|
|
default_message_notifications: Optional[int] = None
|
|
explicit_content_filter: Optional[int] = None
|
|
afk_channel: Optional[int] = None
|
|
afk_timeout: Optional[int] = None
|
|
icon: Optional[Link[Image]] = None
|
|
owner: int
|
|
splash: Optional[Link[Image]] = None
|
|
discovery_splash: Optional[Link[Image]] = None
|
|
banner: Optional[Link[Image]] = None
|
|
system_channel: Optional[int] = None
|
|
system_channel_flags: Optional[int] = None
|
|
rules_channel: Optional[int] = None
|
|
public_updates_channel: Optional[int] = None
|
|
preferred_locale: Optional[str] = None
|
|
features: list[str] = Field(default_factory=list)
|
|
channels: list[ChannelBackup] = Field(default_factory=list)
|
|
roles: list[RoleBackup] = Field(default_factory=list)
|
|
emojis: list[EmojiBackup] = Field(default_factory=list)
|
|
stickers: list[StickerBackup] = Field(default_factory=list)
|
|
|
|
|
|
class Backup(Document):
|
|
created_at: datetime = NowField()
|
|
guild_id: int
|
|
bkid: str = NanoField()
|
|
guild: GuildBackup
|
|
version: str = Field(default=__version__)
|