29 lines
838 B
Python
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])
|