Перейти к основному содержимому

Управление каналами

Обзор

Рассматриваются методы для управления каналами:

  • gp.channels.createChannel - создание канала +1 Request
  • gp.channels.updateChannel - обновление канала +1 Request
  • gp.channels.deleteChannel - удаление канала +1 Request
  • gp.channels.fetchChannel - получить информацию о канале по ID +1 Request
  • gp.channels.fetchChannels - получить список каналов по идентификаторам +1 Request
  • gp.channels.fetchMoreChannels - дополнительно подгрузить список каналов +1 Request
info

В реальном времени можно отслеживать любые действия других игроков в канале: написали сообщение, вступили или пригласили в канал и т.д.

Создание канала

+1 Request

Игрок может создавать каналы только от предустановленных разработчиком шаблонов. При создании канала игрок автоматически в него вступает.

Для создания канала используется метод gp.channels.createChannel. В качестве примера покажем создание канала - группы для прохождения подземелья Demons Lord Castle на 5 человек x5 в героической сложности heroic.

tip

Поля канала доступны для редактирования, если в шаблоне разрешено их редактирование

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: ''.

info

Гибко использовать возможности каналов позволяют теги и шаблоны каналов.

Все поля канала

Чтобы получить результат вызова метода 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_foundempty_channel_template_id
project_not_foundchannel_template_not_found
origin_not_allowedchannel_tag_forbidden 💡
player_banned
internal_error
tip

channel_tag_forbidden 💡 - теги канала содержат зарезервированные системные теги. Системные теги начинаются с @, например @feed:123456

Создание канала из панели управления

Для создания канала из панели управления GamePush перейдите во вкладку Каналы и нажмите кнопку Добавить Канал:

Названия полей, доступные для редактирования в канале, приведены в таблице ниже:

Название поляКомментарии
📝 Шаблон каналасм. подробнее в разделе Шаблоны
📝 ТегиТеги канала используются для упрощения поиска игроком внутриигровых событий. Например, группа для похода в подземелье на 5 человек может иметь теги dungeon и x5. Подробнее см. в разделе Теги каналов и сообщений
📝 Теги сообщенийТеги сообщений позволяют выводить логи или заданные виды сообщений в чате. Например, все сообщения с тегами log могут возвращать информацию о прохождении уровня. Подробнее см. в разделе Теги каналов и сообщений
📝 Название каналаПри нажатии на кнопку Перевести открывается весь список языков, доступных для перевода
📝 Описание каналаПри нажатии на кнопку Перевести открывается весь список языков, доступных для перевода
📝 Максимальное количество участниковЦелое число, максимальное количество участников канала не ограничено
📝 ПарольПо умолчанию канал создается без пароля
🔘 ПриватныйРазрешает вступить в канал только через запрос или инвайт
🔘 Хранить историюПозволяет хранить историю сообщений (доступно только на планах с подпиской). По умолчанию сообщения хранятся сутки.
🔘 Видимый в поискеПоказывает канал в поисковой выдаче
🔘 Видимый только в тестовой версииПозволяет использовать созданный канал для тестирования
🔘 Выходить игроком из канала при выходе из игры
🔘 Удалять канал при выходе последнего участника
🔘 Разрешить игроку - владельцу редактировать опции каналаПо умолчанию владелец канала может редактировать: название, описание, теги, менять владельца, вместимость канала, приватность, видимость, права владельца, права участника, права гостя
🔘 Доступы игрока, участника, гостяПолный список прав доступа и их значения по умолчанию см. в таблице
info

Если оставить настройки по умолчанию, то созданный канал можно использовать как чат игроков

Доступы различных ролей в канале

МетодРазрешить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 ⚪

Чтобы управлять правами доступа игроков в канале выберите в панели управления Каналы - Изменить - Доступы игрока - владельца / участника / гостя:

Обновление канала

+1 Request

Для обновления канала с идентификатором 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_foundempty_channel_id
project_not_foundchannel_not_found
origin_not_allowedaccess_denied 💡
player_bannedchannel_tag_forbidden 💡
internal_error
info

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;
});

Удаление канала

+1 Request
caution

При удалении канала удаляются так же: все сообщения, участники канала, инвайты и запросы на вступление в канал

Для удаления канала с идентификатором ChannelId: 123 используется метод gp.channels.deleteChannel:

gp.channels.deleteChannel({ channelId: 123 });

Чтобы получить результат вызова метода, можно подписаться на события:

gp.channels.on('deleteChannel', () => {
// канал удален
});

Выполнение с ошибкой:

gp.channels.on('error:deleteChannel', (err) => {
// завершен с ошибкой
});

Возможные ошибки приведены в таблице ниже:

базовые ошибкисценарные ошибки
player_not_foundempty_channel_id
project_not_foundchannel_not_found
origin_not_allowedaccess_denied 💡
player_banned
internal_error
info

access_denied 💡 - игрок не является владельцем, поэтому не имеет прав на удаление канала

При удалении канала всем игрокам в канале приходит уведомление об этом событии:

gp.channels.on('event:deleteChannel', (channel) => {
// ID канала
channel.id;
});

Получить информацию о канале по ID

+1 Request

Чтобы получить информацию о канале по идентификатору, используйте метод 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_foundempty_channel_id
project_not_foundchannel_not_found
origin_not_allowed
player_banned
internal_error

Получить список каналов

+1 Request

Чтобы получить список каналов, можно использовать метод 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]

Желаем вам успехов!