Создание общего чата
Обзор
В этом туториале расскажем, как создать общий чат игроков, отправлять и получать сообщения из чата и подписываться на события. Последовательность действий в чате, которую мы рассмотрим:
- создание чата в панели управления играми
- вступление Игрока 1 в чат
- получение списка сообщений из чата
- отправка сообщения в чат
- подписка на уведомление об отправке сообщений в реальном времени
- вступление Игрока 2 в чат и отправка сообщений
- проверка онлайна игроков в чате
Рассмотрим действия на каждом шаге более подробно.
Создание чата
Создать общий чат можно с помощью функций каналов. То есть мы создадим канал, который будет играть роль общего чата. Чтобы это сделать перейдите в панель управления играми, выберите раздел “Каналы - Добавить канал”:
В поле название канала
укажите произвольное имя, например, Chat
. Остальные настройки канала оставьте по умолчанию, нажмите кнопку “Сохранить канал”. Так будет создан канал - чат. В нашем примере он имеет идентификатор ID: 90
:
Вступление игрока в чат
Когда Игрок заходит в игру, он может вступить в созданный канал по идентификатору:
gp.channel.join({channelID:90})
Проверить наличие игрока в канале можно из панели управления играми. Для этого кликните по названию созданного канала Chat
и нажмите кнопку выбора участников. Будет показан список игроков, находящихся в канале. В нашем примере в чат вступил один игрок с ID: 1807696:
Действия в канале
После вступления в чат, Игрок 1 может получить сообщения. Для этого используется метод fetchMessages, в который нужно передать ID канала:
gp.channels.fetchMessages({channelId:90})
Если все сделано правильно, то промис будет содержать информацию о том, что в чате пока нет сообщений. Повторим запрос позднее, когда добавим в чат второго участника - Игрока 2.
А пока можно отправить сообщение от имени Игрока 1:
gp.channels.sendMessages({channelId:90, text: `privet`})
При этом всем участникам чата приходит ивент event:message
с информацией о том, что “кто-то” отправил сообщение в канал. Отправителю помимо event:message
также приходит ответ от сервера, который содержит:
- Id игрока - отправителя сообщения
- текст - text
- дату отправки - createdAt
- информацию об отправителе player. При этом у игрока player перечислены все публичные поля: имя, аватар и т.д. То есть при желании можно отрисовать аватар отправителя и показать всю публичную информацию в интерфейсе игры:
Все остальные участники чата должны подписаться на это уведомление. И как только придет сообщение, нужно его где-то вывести. В качестве примера подпишемся на ивент о том, что “кто-то” написал в чат. Подписываемся на событие и говорим, какую функцию вызвать, если это событие произойдет:
gp.channels.on('event:message', (message) => {
//вывести сообщение в чат (добавить новое сообщение)
console.log(`игрок #${message.player.id}: ${message.text}`);
})
То есть мы подписались на событие и ждем, когда другие игроки напишут в общий чат.
Отправка сообщений вторым игроком
В качестве эксперимента в этот же чат отправим сообщение другим игроком. Но сначала добавим Игрока 2:
gp.channel.join({channelID:90})
Запрашиваем список сообщений в чате от имени Игрока 2:
gp.channels.fetchMessages({channelId:90})
В промис видим информацию о том, что в чате существует одно сообщение. То самое сообщение privet
, которое отправил Игрок 1:
Отправляем сообщение в канал от имени Игрока 2:
gp.channels.sendMessages({channelId:90, text: `Hello`})
При этом в чат пришел ивент о том, что игрок прислал сообщение Hello
:
Также стоит отметить, что из панели управления можно мониторить передаваемые сообщения и писать в чат от имени администратора игры:
Если администратор напишет сообщение из панели управления, то все игроки в чате получат сообщения от игрока с Id:0 (нулевой идентификатор игрока позволяет его определять как администратора):
Также можно посмотреть список игроков в чате с помощью fetchMembers
:
gp.channels.fetchMembers({channelId: 90})
В нашем примере промис будет содержать двух участников (Игрок 1 и Игрок 2), а также общую информацию об игроках (замьчен или нет, аватар, количество золота и т.д.). Отдельно показывается статус isOnline, который позволяет проверить, кто из участников чата онлайн:
Проверка онлайна игроков
В то же время есть дополнительное свойство при запросе, позволяющее запросить пользователей, которые онлайн. Для этого можно передать isOnline:true
в качестве дополнительного аргумента в метод fetchMembers
. В этом случае будут возвращены только те игроки, которые онлайн:
Если кто-то выйдет из чата, всем участникам чата придет соответствующее уведомление:
Итак, канал, созданный с дефолтными настройками, можно использовать в качестве общего чата. Все остальные игроки могут вступать в чат, получать / отправлять сообщений и подписываться на уведомления. Надеемся, что данный функционал будет вам полезен.
Оставайтесь на связи
С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.
Сообщество GamePush в Telegram
: @gs_community.
Для ваших обращений e-mail
: [email protected]
Желаем вам успехов!