[feat] add settings with some example schema, initialization and run functionality
This commit is contained in:
@@ -0,0 +1 @@
|
||||
from .models import UserSettingsDocument
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import asyncio
|
||||
|
||||
from utils import env
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
from .settings import UserSettingsDocument
|
||||
|
||||
53
src/utils/db/models/settings.py
Normal file
53
src/utils/db/models/settings.py
Normal file
@@ -0,0 +1,53 @@
|
||||
from typing import Any
|
||||
|
||||
from beanie import Document
|
||||
from pydantic import Field
|
||||
|
||||
from bot.modules.settings import UserSettings
|
||||
|
||||
|
||||
class UserSettingsDocument(Document):
|
||||
user_id: int
|
||||
settings: UserSettings = Field(default_factory=UserSettings)
|
||||
|
||||
class Settings:
|
||||
name = "user_settings"
|
||||
indexes = ["user_id"]
|
||||
|
||||
@classmethod
|
||||
async def get_user_settings(cls, user_id: int) -> UserSettings:
|
||||
doc = await cls.find_one(cls.user_id == user_id)
|
||||
if not doc:
|
||||
doc = cls(user_id=user_id)
|
||||
await doc.insert()
|
||||
return doc.settings
|
||||
|
||||
async def update_settings(self, settings: UserSettings) -> None:
|
||||
self.settings = settings
|
||||
await self.save()
|
||||
|
||||
@classmethod
|
||||
async def update_section(cls, user_id: int, section: str, value: Any) -> None:
|
||||
doc = await cls.find_one(cls.user_id == user_id)
|
||||
if not doc:
|
||||
doc = cls(user_id=user_id)
|
||||
setattr(doc.settings, section, value)
|
||||
await doc.insert()
|
||||
else:
|
||||
setattr(doc.settings, section, value)
|
||||
await doc.save()
|
||||
|
||||
@classmethod
|
||||
async def update_field(
|
||||
cls, user_id: int, section: str, field: str, value: Any
|
||||
) -> None:
|
||||
doc = await cls.find_one(cls.user_id == user_id)
|
||||
if not doc:
|
||||
doc = cls(user_id=user_id)
|
||||
section_obj = getattr(doc.settings, section)
|
||||
setattr(section_obj, field, value)
|
||||
await doc.insert()
|
||||
else:
|
||||
section_obj = getattr(doc.settings, section)
|
||||
setattr(section_obj, field, value)
|
||||
await doc.save()
|
||||
@@ -1,5 +1,5 @@
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
from pydantic import SecretStr
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
|
||||
class BotSettings(BaseSettings):
|
||||
|
||||
@@ -5,7 +5,6 @@ from rich.logging import RichHandler
|
||||
|
||||
from . import env
|
||||
|
||||
|
||||
console = Console(
|
||||
width=env.log.console_width,
|
||||
color_system="auto",
|
||||
|
||||
Reference in New Issue
Block a user