Files
GIA/core/lib/deferred.py

55 lines
1.5 KiB
Python

# Deferred processing library
from core.util import logs
from pydantic import BaseModel
from typing import Annotated
from uuid import UUID
from pydantic import ValidationError
from core.models import QueuedMessage, Message
from core.clients import signal
from core.lib.prompts.functions import delete_messages
from asgiref.sync import sync_to_async
log = logs.get_logger("deferred")
class DeferredRequest(BaseModel):
type: str
method: str
user_id: int
message_id: Annotated[str, UUID]
async def process_deferred(data: dict):
try:
validated_data = DeferredRequest(**data)
log.info(f"Validated Data: {validated_data}")
# Process the validated data
except ValidationError as e:
log.info(f"Validation Error: {e}")
return
method = validated_data.method
user_id = validated_data.user_id
message_id = validated_data.message_id
try:
message = await sync_to_async(QueuedMessage.objects.get)(
user_id=user_id,
id=message_id,
)
log.info(f"Got {message}")
except QueuedMessage.DoesNotExist:
log.info(f"Didn't get message from {message_id}")
return
if message.session.identifier.service == "signal":
log.info(f"Is sisngla")
if method == "accept_message":
await signal.send_message(message)
else:
log.warning(f"Method not yet supported: {method}")
return
else:
log.warning(f"Protocol not supported: {message.session.identifier.service}")
return