qopscribe/telegram_bot/services/redis_service.py

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