"""User action models.""" from datetime import datetime, timezone from functools import partial from typing import Optional from beanie import Document, Field def get_now() -> datetime: """Get proper timestamp.""" return datetime.now(tz=timezone.utc) NowField = partial(Field, default_factory=get_now) class Ban(Document): active: bool = True admin: int user: int username: str discrim: int duration: Optional[int] guild: int type: str = "perm" reason: str created_at: datetime = NowField() class Kick(Document): """Kick database object.""" admin: int guild: int reason: str user: int created_at: datetime = NowField() class Mute(Document): """Mute database object.""" active: bool = True user: int admin: int duration: int = 10 guild: int reason: str created_at: datetime = NowField() class Unban(Document): """Unban database object.""" user: int username: str discrim: str guild: int reason: str created_at: datetime = NowField() class Warning(Document): """Warning database object.""" active: bool = True admin: int user: int guild: int duration: int = 24 reason: str expires_at: datetime created_at: datetime = NowField()