from collections.abc import AsyncIterator from contextlib import asynccontextmanager from entity import Queue from framework import Redis class QueueManager: def __init__(self, redis: Redis) -> None: self.redis = redis self.queues: dict[int, Queue] = {} @asynccontextmanager async def __call__(self, guildId: int) -> AsyncIterator[Queue]: queue = await self.get(guildId) yield queue await self.save(guildId) async def get(self, guildId: int) -> Queue: queue: Queue | None = await self.redis.get("queue", str(guildId)) if queue is None: queue = Queue() self.queues[guildId] = queue return self.queues[guildId] async def save(self, guildId: int) -> None: await self.redis.set("queue", str(guildId), self.queues[guildId])