Как можно получить список channel_name, которые были добавлены в определенную группу в Django channels?

Есть способ получить список всех подключенных каналов в группе, когда я подключаюсь с помощью данного кода?
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()

Меня интересует, как получить список всех текущих подключений в данной группе. Я пытался искать информацию на эту тему на английском и русском, но не смог найти ответы. Пожалуйста, помогите мне разобраться. Буду благодарен за вашу поддержку.
  • 13 октября 2023 г. 21:07
Ответы на вопрос 3
Для получения списка всех текущих подключений в группе в Django Channels можно использовать метод `channel_layer.group_channels()`.

Обновите ваш код следующим образом:

```python
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync

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()

        # Получаем список каналов в группе и сохраняем их
        channel_layer = get_channel_layer()
        self.group_channels = await channel_layer.group_channels(self.room_group_name)

    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):
        # Доступ к списку всех текущих подключений в группе:
        print(self.group_channels)
```

`channel_layer.group_channels()` возвращает объект-генератор с каналами текущих подключенных клиентов в указанной группе.
 

 Получить список каналов из группы комнаты
[channel for channel in channel_layer.groups.get(room_group_name, set())] 
Похожие вопросы