jarvis-core/jarvis_core/db/models/backups.py

104 lines
2.7 KiB
Python

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__)