Управление каналами
Обзор
Рассматриваются методы для управления каналами:
gp.channels.createChannel
- создание каналаgp.channels.updateChannel
- обновление каналаgp.channels.deleteChannel
- удаление каналаgp.channels.fetchChannel
- получить информацию о канале по IDgp.channels.fetchChannels
- получить список каналов по идентификаторамgp.channels.fetchMoreChannels
- дополнительно подгрузить список каналов
В реальном времени можно отслеживать любые действия других игроков в канале: написали сообщение, вступили или пригласили в канал и т.д.
Создание канала
Игрок может создавать каналы только от предустановленных разработчиком шаблонов. При создании канала игрок автоматически в него вступает.
Для создания канала используется метод gp.channels.createChannel
. В качестве примера покажем создание канала - группы для прохождения подземелья Demons Lord Castle
на 5 человек x5
в героической сложности heroic
.
Поля канала доступны для редактирования, если в шаблоне разрешено их редактирование
gp.channels.createChannel({
// обязательно ID или тег шаблона канала
template: 'DUNGEON_5',
// необязательные теги, по которым можно найти канал
tags: ['dungeon', 'x5', 'demons_lord_castle', 'heroic'],
// максимальное количество человек в канале
capacity: 5,
// имя канала
name: 'Подземелье Demons Lord Castle',
// описание канала
description: 'Фаст пронос, нужны все',
// вход только по приглашениям или свободный
private: true,
// канал виден в поиске или доступен только по прямому запросу
visible: true,
// пароль для входа
password: '',
// доступы владельца канала
ownerAcl: {
// может читать сообщения
canViewMessages: true,
// может создавать сообщения
canAddMessage: true,
// может изменять сообщения
canEditMessage: true,
// может удалять сообщения
canDeleteMessage: true,
// может просматривать участников
canViewMembers: true,
// может приглашать других игроков
canInvitePlayer: true,
// может удалять игроков
canKickPlayer: true,
// может принимать запросы на вступление
canAcceptJoinRequest: true,
// может мьютить игроков
canMutePlayer: true,
},
// доступы участника канала
memberAcl: {
// может читать сообщения
canViewMessages: true,
// может создавать сообщения
canAddMessage: true,
// может изменять сообщения
canEditMessage: true,
// может удалять сообщения
canDeleteMessage: true,
// может просматривать участников
canViewMembers: true,
// может приглашать других игроков
canInvitePlayer: false,
// может удалять игроков
canKickPlayer: false,
// может принимать запросы на вступление
canAcceptJoinRequest: false,
// может мьютить игроков
canMutePlayer: false,
},
// доступы гостя канала
guestAcl: {
// может читать сообщения
canViewMessages: false,
// может создавать сообщения
canAddMessage: false,
// может изменять сообщения
canEditMessage: false,
// может удалять сообщения
canDeleteMessage: false,
// может просматривать участников
canViewMembers: false,
// может приглашать других игроков
canInvitePlayer: false,
// может удалять игроков
canKickPlayer: false,
// может принимать запросы на вступление
canAcceptJoinRequest: false,
// может мьютить игроков
canMutePlayer: false,
},
});
Установить пароль канала можно передав строку с паролем, например password: '123'
. Убрать пароль можно передав пустую строку password: ''
.
Все поля канала
Чтобы получить результат вызова метода gp.channels.createChannel
, можно подписаться на события:
gp.channels.on('createChannel', (channel) => {
// все поля канала
channel.id
channel.tags
channel.messageTags
channel.templateId
channel.capacity
channel.ownerId
channel.name
channel.description
channel.private
channel.visible
channel.permanent
channel.hasPassword
channel.isJoined
channel.isRequestSent
channel.isInvited
channel.isMuted
channel.password
channel.membersCount
channel.ownerAcl
channel.memberAcl
channel.guestAcl
});
Пример выполнения с ошибкой:
gp.channels.on('error:createChannel', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | empty_channel_template_id |
project_not_found | channel_template_not_found |
origin_not_allowed | channel_tag_forbidden 💡 |
player_banned | |
internal_error |
channel_tag_forbidden 💡 - теги канала содержат зарезервированные системные теги. Системные теги начинаются с @, например @feed:123456
Создание канала из панели управления
Для создания канала из панели управления GamePush перейдите во вкладку Каналы и нажмите кнопку Добавить Канал:
Названия полей, доступные для редактирования в канале, приведены в таблице ниже:
Название поля | Комментарии |
---|---|
📝 Шаблон канала | см. подробнее в разделе Шаблоны |
📝 Теги | Теги канала используются для упрощения поиска игроком внутриигровых событий. Например, группа для похода в подземелье на 5 человек может иметь теги dungeon и x5 . Подробнее см. в разделе Теги каналов и сообщений |
📝 Теги сообщений | Теги сообщений позволяют выводить логи или заданные виды сообщений в чате. Например, все сообщения с тегами log могут возвращать информацию о прохождении уровня. Подробнее см. в разделе Теги каналов и сообщений |
📝 Название канала | При нажатии на кнопку Перевести открывается весь список языков, доступных для перевода |
📝 Описание канала | При нажатии на кнопку Перевести открывается весь список языков, доступных для перевода |
📝 Максимальное количество участников | Целое число, максимальное количество участников канала не ограничено |
📝 Пароль | По умолчанию канал создается без пароля |
🔘 Приватный | Разрешает вступить в канал только через запрос или инвайт |
🔘 Хранить историю | Позволяет хранить историю сообщений (доступно только на планах с подпиской). По умолчанию сообщения хранятся сутки. |
🔘 Видимый в поиске | Показывает канал в поисковой выдаче |
🔘 Видимый только в тестовой версии | Позволяет использовать созданный канал для тестирования |
🔘 Выходить игроком из канала при выходе из игры | |
🔘 Удалять канал при выходе последнего участника | |
🔘 Разрешить игроку - владельцу редактировать опции канала | По умолчанию владелец канала может редактировать: название, описание, теги, менять владельца, вместимость канала, приватность, видимость, права владельца, права участника, права гостя |
🔘 Доступы игрока, участника, гостя | Полный список прав доступа и их значения по умолчанию см. в таблице |
Если оставить настройки по умолчанию, то созданный канал можно использовать как чат игроков
Доступы различных ролей в канале
Метод | Разрешить | ownerAcl владелец | memberAcl участник | guestAcl гость |
---|---|---|---|---|
canViewMessages | читать сообщения | true 🔘 | true 🔘 | false ⚪ |
canAddMessage | создавать сообщения | true 🔘 | true 🔘 | false ⚪ |
canEditMessage | изменять сообщения | true 🔘 | true 🔘 | false ⚪ |
canDeleteMessage | удалять сообщения | true 🔘 | true 🔘 | false ⚪ |
canViewMembers | просматривать участников | true 🔘 | true 🔘 | false ⚪ |
canInvitePlayer | приглашать других игроков | true 🔘 | false ⚪ | false ⚪ |
canKickPlayer | удалять игроков | true 🔘 | false ⚪ | false ⚪ |
canAcceptJoinRequest | принимать запросы на вступление | true 🔘 | false ⚪ | false ⚪ |
canMutePlayer | мьютить игроков | true 🔘 | false ⚪ | false ⚪ |
Чтобы управлять правами доступа игроков в канале выберите в панели управления Каналы - Изменить - Доступы игрока - владельца / участника / гостя:
Обновление канала
Для обновления канала с идентификатором ChannelId: 123
используется метод gp.channels.updateChannel
:
gp.channels.updateChannel({ channelId: 123, visible: false });
Передать канал другому игроку:
gp.channels.updateChannel({ channelId: 123, ownerId: 123456 });
Полный список параметров:
gp.channels.updateChannel({
// обзятельно ID канала
channelId: 123,
// теги, по которым можно найти канал
tags: ['dungeon', 'x5', 'demons_lord_castle', 'heroic'],
// максимальное количество человек в канале
capacity: 5,
// имя канала
name: 'Подземелье Demons Lord Castle',
// описание канала
description: 'Фаст пронос, нужны все',
// вход только по приглашениям или свободный
private: true,
// канал виден в поиске или доступен только по прямому запросу
visible: true,
// пароль для входа
password: '',
// новый ID владельца
ownerId: 123456,
// доступы владельца канала
ownerAcl: {
// может читать сообщения
canViewMessages: true,
// может создавать сообщения
canAddMessage: true,
// может изменять сообщения
canEditMessage: true,
// может удалять сообщения
canDeleteMessage: true,
// может просматривать участников
canViewMembers: true,
// может приглашать других игроков
canInvitePlayer: true,
// может удалять игроков
canKickPlayer: true,
// может принимать запросы на вступление
canAcceptJoinRequest: true,
// может мьютить игроков
canMutePlayer: true,
},
// доступы участника канала
memberAcl: {
// может читать сообщения
canViewMessages: true,
// может создавать сообщения
canAddMessage: true,
// может изменять сообщения
canEditMessage: true,
// может удалять сообщения
canDeleteMessage: true,
// может просматривать участников
canViewMembers: true,
// может приглашать других игроков
canInvitePlayer: false,
// может удалять игроков
canKickPlayer: false,
// может принимать запросы на вступление
canAcceptJoinRequest: false,
// может мьютить игроков
canMutePlayer: false,
},
// доступы гостя канала
guestAcl: {
// может читать сообщения
canViewMessages: false,
// может создавать сообщения
canAddMessage: false,
// может изменять сообщения
canEditMessage: false,
// может удалять сообщения
canDeleteMessage: false,
// может просматривать участников
canViewMembers: false,
// может приглашать других игроков
canInvitePlayer: false,
// может удалять игроков
canKickPlayer: false,
// может принимать запросы на вступление
canAcceptJoinRequest: false,
// может мьютить игроков
canMutePlayer: false,
},
});
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('updateChannel', (channel) => {
// все поля канала
channel.id
channel.tags
channel.messageTags
channel.channelId
channel.capacity
channel.ownerId
channel.name
channel.description
channel.private
channel.visible
channel.permanent
channel.hasPassword
channel.isJoined
channel.isRequestSent
channel.isInvited
channel.isMuted
channel.password
channel.membersCount
channel.ownerAcl
channel.memberAcl
channel.guestAcl
});
Выполнение с ошибкой:
gp.channels.on('error:updateChannel', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | access_denied 💡 |
player_banned | channel_tag_forbidden 💡 |
internal_error |
access_denied 💡 - игрок не является владельцем, поэтому не имеет прав редактирования.
channel_tag_forbidden 💡 - теги канала содержат зарезервированные системные теги. Системные теги начинаются с @, например @feed:123456
При обновлении канала всем игрокам в канале приходит уведомление о его изменении:
gp.channels.on('event:updateChannel', (channel) => {
// ID канала
channel.id;
// Теги канала
channel.tags;
// Теги сообщений канала
channel.messageTags;
// Максимальное количество участников
channel.capacity;
// Владелец канала
channel.ownerId;
// Название канала
channel.name;
// Описание канала
channel.description;
// Приватность канала
channel.private;
// Видимость канала
channel.visible;
// У канала установлен пароль
channel.hasPassword;
// Доступы владельца канала
channel.ownerAcl;
// Доступы участника канала
channel.memberAcl;
// Доступы гостя канала
channel.guestAcl;
});
Удаление канала
При удалении канала удаляются так же: все сообщения, участники канала, инвайты и запросы на вступление в канал
Для удаления канала с идентификатором ChannelId: 123
используется метод gp.channels.deleteChannel
:
gp.channels.deleteChannel({ channelId: 123 });
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('deleteChannel', () => {
// канал удален
});
Выполнение с ошибкой:
gp.channels.on('error:deleteChannel', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | access_denied 💡 |
player_banned | |
internal_error |
access_denied 💡 - игрок не является владельцем, поэтому не имеет прав на удаление канала
При удалении канала всем игрокам в канале приходит уведомление об этом событии:
gp.channels.on('event:deleteChannel', (channel) => {
// ID канала
channel.id;
});
Получить информацию о канале по ID
Чтобы получить информацию о канале по идентификатору, используйте метод gp.channels.fetchChannel
:
const response = await gp.channels.fetchChannel({
// ID канала
channelId: 123,
});
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('fetchChannel', (result) => {
// поля канала
channel.id
channel.tags
channel.templateId
channel.capacity
channel.ownerId
channel.name
channel.description
channel.private
channel.visible
channel.hasPassword
channel.membersCount
});
Выполнение с ошибкой:
gp.channels.on('error:fetchChannel', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | |
player_banned | |
internal_error |
Получить список каналов
Чтобы получить список каналов, можно использовать метод gp.channels.fetchChannels
:
const response = await gp.channels.fetchChannels({
// Список идентификаторов каналов
ids: [123, 124, 125],
// Теги каналов для фильтрации, через И (&)
tags: ['chat', 'trade'],
// Поиск по ID или названию канала
search: "",
// Поиск каналов только в которых есть мой игрок
onlyJoined: true,
// Поиск каналов только в которых мой игрок - владелец канала
onlyOwned: true,
// сколько запросить за раз, макс. 100
limit: 100,
// сколько записей пропустить, макс. 10000, используется для постраничной навигации или "подгрузить еще"
offset: 0
});
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('fetchChannels', (result) => {
result.items - массив списка каналов
result.canLoadMore - можно ли подгрузить еще каналы
result.items.forEach((channel) => {
// поля канала
channel.id
channel.tags
channel.templateId
channel.capacity
channel.ownerId
channel.name
channel.description
channel.private
channel.visible
channel.hasPassword
channel.membersCount
});
});
Выполнение с ошибкой:
gp.channels.on('error:fetchChannels', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки |
---|
player_not_found |
project_not_found |
origin_not_allowed |
player_banned |
internal_error |
Чтобы дополнительно подгрузить список каналов по такому же запросу, есть удобный метод gp.channels.fetchMoreChannels
:
const response = await gp.channels.fetchMoreChannels({
// ID канала
channelId: 123,
// Теги сообщений для фильтрации, через И (&)
tags: ['chat', 'trade'],
// сколько запросить за раз, макс. 100
limit: 100,
});
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('fetchMoreChannels', (result) => {
result.items - массив списка каналов
result.canLoadMore - можно ли подгрузить еще каналы
});
Выполнение с ошибкой:
gp.channels.on('error:fetchMoreChannels', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки |
---|
player_not_found |
project_not_found |
origin_not_allowed |
player_banned |
internal_error |
Оставайтесь на связи
С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.
Сообщество GamePush в Telegram
: @gs_community.
Для ваших обращений e-mail
: [email protected]
Желаем вам успехов!