dj-embe/service/queueManager.py

29 lines
838 B
Python

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])