30 lines
1.1 KiB
Python
30 lines
1.1 KiB
Python
import json
|
|
import redis.asyncio as redis
|
|
|
|
class RedisService:
|
|
def __init__(self, host: str, port: int):
|
|
self.client = redis.Redis(host=host, port=port, decode_responses=True)
|
|
|
|
async def publish_task(self, task_data: dict):
|
|
channel = "audio_tasks"
|
|
await self.client.publish(channel, json.dumps(task_data))
|
|
|
|
async def wait_for_text(self, user_id: int, chat_id: int, message_id: int, timeout: int = 30):
|
|
pubsub = self.client.pubsub()
|
|
await pubsub.subscribe("texts")
|
|
try:
|
|
async for message in pubsub.listen():
|
|
if message["type"] != "message":
|
|
continue
|
|
try:
|
|
data = json.loads(message["data"])
|
|
except Exception:
|
|
continue
|
|
if (data.get("user_id") == user_id and
|
|
data.get("chat_id") == chat_id and
|
|
data.get("message_id") == message_id):
|
|
return data.get("text")
|
|
finally:
|
|
await pubsub.unsubscribe("texts")
|
|
return None
|