Files
AnyMusicBot/bot/modules/fsm/in_db.py
2023-10-08 21:21:15 +03:00

37 lines
1.1 KiB
Python

from bot.modules.database import db
from dataclasses import dataclass, field
from typing import Any, DefaultDict, Dict, Optional
from aiogram.fsm.state import State
from aiogram.fsm.storage.base import (
BaseStorage,
StateType,
StorageKey,
)
@dataclass
class MemoryStorageRecord:
data: Dict[str, Any] = field(default_factory=dict)
state: Optional[str] = None
class InDbStorage(BaseStorage):
def __init__(self) -> None:
self.storage: DefaultDict[StorageKey, MemoryStorageRecord] = db.fsm
async def close(self) -> None:
pass
async def set_state(self, key: StorageKey, state: StateType = None) -> None:
self.storage[key].state = state.state if isinstance(state, State) else state
async def get_state(self, key: StorageKey) -> Optional[str]:
return self.storage[key].state
async def set_data(self, key: StorageKey, data: Dict[str, Any]) -> None:
self.storage[key].data = data.copy()
async def get_data(self, key: StorageKey) -> Dict[str, Any]:
return self.storage[key].data.copy()