from asgiref.sync import async_to_sync from channels.layers import get_channel_layer from celery import shared_task from core.apps.chat.models import ChatmessageModel @shared_task def send_message_to_chat(message_id, file_url, avatar_url): try: message = ChatmessageModel.objects.get(id=message_id) except ChatmessageModel.DoesNotExist: return "Not found" channel_layer = get_channel_layer() if channel_layer is None: return sender_obj = message.sender if sender_obj: full_name = sender_obj.get_full_name().strip() or str(sender_obj.phone) sender_data = { "id": sender_obj.id, "full_name": full_name, "role": sender_obj.role, "phone": sender_obj.phone, "avatar": avatar_url, } else: sender_data = None async_to_sync(channel_layer.group_send)( f"chat_room_{message.room_id}", { "type": "chat_message", "id": message.id, "message_type": message.message_type, "text": message.text, "file_url": file_url, "sender": sender_data, "created_at": message.created_at.isoformat(), }, )