53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
"""Modlog database models."""
|
|
from datetime import datetime, timezone
|
|
from functools import partial
|
|
|
|
import nanoid
|
|
from bson import ObjectId
|
|
from beanie import Document
|
|
from pydantic import BaseModel, Field
|
|
|
|
NANOID_ALPHA = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
|
|
|
|
|
def get_now() -> datetime:
|
|
"""Get proper timestamp."""
|
|
return datetime.now(tz=timezone.utc)
|
|
|
|
|
|
def get_id() -> str:
|
|
"""Get nanoid."""
|
|
return nanoid.generate(NANOID_ALPHA, 12)
|
|
|
|
|
|
NanoField = partial(Field, default_factory=get_id)
|
|
NowField = partial(Field, default_factory=get_now)
|
|
|
|
|
|
class Action(BaseModel):
|
|
"""Modlog embedded action document."""
|
|
|
|
action_type: str
|
|
parent: ObjectId
|
|
orphaned: bool = False
|
|
|
|
|
|
class Note(BaseModel):
|
|
"""Modlog embedded note document."""
|
|
|
|
admin: int
|
|
content: str
|
|
created_at: datetime = NowField()
|
|
|
|
|
|
class Modlog(Document):
|
|
"""Modlog database object."""
|
|
|
|
user: int
|
|
nanoid: str = NanoField()
|
|
guild: int
|
|
admin: int
|
|
actions: list[Action] = Field(default_factory=list)
|
|
notes: list[Note] = Field(default_factory=list)
|
|
open: bool = True
|
|
created_at: datetime = NowField
|