import json from channels.generic.websocket import AsyncWebsocketConsumer from .models import Message from django.contrib.auth.models import User class ChatConsumer(AsyncWebsocketConsumer): async def connect(self): self.room_name = self.scope['url_route']['kwargs']['room_name'] self.room_group_name = f'chat_{self.room_name}' # Присъединяване към групата await self.channel_layer.group_add( self.room_group_name, self.channel_name ) await self.accept() async def disconnect(self, close_code): # Напускане на групата await self.channel_layer.group_discard( self.room_group_name, self.channel_name ) async def receive(self, text_data): text_data_json = json.loads(text_data) message = text_data_json['message'] # Записване на съобщението в базата user = self.scope["user"] if user.is_authenticated: Message.objects.create(user=user, room=self.room_name, content=message) # Изпращане на съобщението на всички в групата await self.channel_layer.group_send( self.room_group_name, { 'type': 'chat_message', 'message': message, 'username': user.username if user.is_authenticated else 'Anonymous' } ) async def chat_message(self, event): message = event['message'] username = event['username'] await self.send(text_data=json.dumps({ 'message': message, 'username': username }))