36 lines
1015 B
Python
36 lines
1015 B
Python
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) -> Queue:
|
|
#await self.acquire(guildId)
|
|
queue = await self.get(guildId)
|
|
yield queue
|
|
await self.save(guildId)
|
|
#await self.release(guildId)
|
|
|
|
async def acquire(self, guildId: int) -> None:
|
|
await self.redis.acquire(guildId)
|
|
|
|
async def release(self, guildId: int) -> None:
|
|
await self.redis.release(guildId)
|
|
|
|
async def get(self, guildId: int) -> Queue:
|
|
queue: Queue | None = await self.redis.get(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(guildId, self.queues[guildId])
|