55 lines
1.5 KiB
Python
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
|