Управление каналами
Обзор
Рассматриваются методы для управления каналами:
gp.channels.createChannel
- создание канала +1 Requestgp.channels.updateChannel
- обновление канала +1 Requestgp.channels.deleteChannel
- удаление канала +1 Requestgp.channels.fetchChannel
- получить информацию о канале по ID +1 Requestgp.channels.fetchChannels
- получить список каналов по идентификаторам +1 Requestgp.channels.fetchMoreChannels
- дополнительно подгрузить список каналов +1 Request
В реальном времени можно отслеживать любые действия других игроков в канале: написали сообщение, вступили или пригласили в канал и т.д.
Создание канала
+1 RequestИгрок может создавать каналы только от предустановленных разработчиком шаблонов. При создании канала игрок автоматически в него вступает.
Для создания канала используется метод gp.channels.createChannel
. В качестве примера покажем создание канала - группы для прохождения подземелья Demons Lord Castle
на 5 человек x5
в героической сложности heroic
.
Поля канала доступны для редактирования, если в шаблоне разрешено их редактирование
- JavaScript
- Unity
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,
},
});
public void Create()
{
// обязательно ID или тег шаблона канала
var filter = new CreateChannelFilter(5);
// теги, по которым можно найти канал
filter.tags = new string[] {"dungeon", "x5", "demons_lord_castle", "heroic"};
// максимальное количество человек в канале
filter.capacity = 5;
// имя канала
filter.name = 'Dungeon Demons Lord Castle',
// описание канала
filter.description = 'fast, need all',
// вход только по приглашениям или свободный
filter.private = true,
// канал виден в поиске или доступен только по прямому запросу
filter.visible = true,
// пароль для входа
filter.password = '',
// доступы владельца канала
var ownerAcl = new OwnerAcl();
// может читать сообщения
ownerAcl.canViewMessages = true;
// может создавать сообщения
ownerAcl.canAddMessage = true;
// может изменять сообщения
ownerAcl.canEditMessage = true;
// может удалять сообщения
ownerAcl.canDeleteMessage = true;
// может просматривать участников
ownerAcl.canViewMembers = true;
// может приглашать других игроков
ownerAcl.canInvitePlayer = true;
// может удалять игроков
ownerAcl.canKickPlayer = true;
// может принимать запросы на вступление
ownerAcl.canAcceptJoinRequest = true;
// может мьютить игроков
ownerAcl.canMutePlayer = true;
filter.ownerAcl = ownerAcl;
// доступы участника канала
var memberAcl = new MemberAcl();
// может читать сообщения
memberAcl.canViewMessages = true;
// может создавать сообщения
memberAcl.canAddMessage = true;
// может изменять сообщения
memberAcl.canEditMessage = true;
// может удалять сообщения
memberAcl.canDeleteMessage = true;
// может просматривать участников
memberAcl.canViewMembers = true;
// может приглашать других игроков
memberAcl.canInvitePlayer = false;
// может удалять игроков
memberAcl.canKickPlayer = false;
// может принимать запросы на вступление
memberAcl.canAcceptJoinRequest = false;
// может мьютить игроков
memberAcl.canMutePlayer = false;
filter.memberAcl = memberAcl;
// channel guest access
var guestAcl = new GuestAcl();
// может читать сообщения
guestAcl.canViewMessages = false;
// может создавать сообщения
guestAcl.canAddMessage = false;
// может изменять сообщения
guestAcl.canEditMessage = false;
// может удалять сообщения
guestAcl.canDeleteMessage = false;
// может просматривать участников
guestAcl.canViewMembers = false;
// может приглашать других игроков
guestAcl.canInvitePlayer = false;
// может удалять игроков
guestAcl.canKickPlayer = false;
// может принимать запросы на вступление
guestAcl.canAcceptJoinRequest = false;
// может мьютить игроков
guestAcl.canMutePlayer = false;
filter.guestAcl = guestAcl;
GP_Channels.CreateChannel(filter);
}
Установить пароль канала можно передав строку с паролем, например password: '123'
. Убрать пароль можно передав пустую строку password: ''
.
Все поля канала
Чтобы получить результат вызова метода gp.channels.createChannel
, можно подписаться на события:
- JavaScript
- Unity
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;
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnCreateChannel += OnCreateChannel;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnCreateChannel -= OnCreateChannel;
}
private void OnCreateChannel(CreateChannelData data)
{
Debug.Log("ON CHANNEL CREATE: ID: " + data.id);
for (int x = 0; x < data.tags.Length; x++)
{
Debug.Log("ON CHANNEL CREATE: TAGS: " + data.tags[x]);
}
for (int i = 0; i < data.messageTags.Length; i++)
{
Debug.Log("ON CHANNEL CREATE: MESSAGE TAGS: " + data.messageTags[i]);
}
Debug.Log("ON CHANNEL CREATE: TEMPLATE ID: " + data.templateId);
Debug.Log("ON CHANNEL CREATE: CAPACITY: " + data.capacity);
Debug.Log("ON CHANNEL CREATE: OWNER ID: " + data.ownerId);
Debug.Log("ON CHANNEL CREATE: NAME: " + data.name);
Debug.Log("ON CHANNEL CREATE: DESCRIPTION: " + data.description);
Debug.Log("ON CHANNEL CREATE: PRIVATE: " + data.ch_private);
Debug.Log("ON CHANNEL CREATE: VISIBLE: " + data.visible);
Debug.Log("ON CHANNEL CREATE: PERMANENT: " + data.permanent);
Debug.Log("ON CHANNEL CREATE: HAS PASSWORD: " + data.hasPassword);
Debug.Log("ON CHANNEL CREATE: IS JOINED: " + data.isJoined);
Debug.Log("ON CHANNEL CREATE: IS REQUEST SENT: " + data.isRequestSent);
Debug.Log("ON CHANNEL CREATE: IS INVITED: " + data.isInvited);
Debug.Log("ON CHANNEL CREATE: IS MUTED: " + data.isMuted);
Debug.Log("ON CHANNEL CREATE: PASSWORD: " + data.password);
Debug.Log("ON CHANNEL CREATE: MEMBERS COUNT: " + data.membersCount);
Debug.Log("ON CHANNEL CREATE: OWNER ACL: " + JsonUtility.ToJson(data.ownerAcl));
Debug.Log("ON CHANNEL CREATE: MemberAcl: " + JsonUtility.ToJson(data.memberAcl));
Debug.Log("ON CHANNEL CREATE: Guest Acl: " + JsonUtility.ToJson(data.guestAcl));
}
Пример выполнения с ошибкой:
- JavaScript
- Unity
gp.channels.on('error:createChannel', (err) => {
// завершен с ошибкой
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnCreateChannelError += OnCreateChannelError;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnCreateChannelError -= OnCreOnCreateChannelErrorateChannel;
}
// завершен с ошибкой
private void OnCreateChannelError() => Debug.Log("CREATE CHANNEL: ERROR");
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
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 могут возвращать информацию о прохождении уровня. Подробнее см. в разделе Теги каналов и сообщений |
📝 Название канала | При нажатии на кнопку Перевести открывается весь список языков, доступных для перевода |
📝 Описание канала | При нажатии на кнопку Перевести открывается весь список языков, доступных для перевода |
📝 Максимальное количество участников | Целое число, максимальное количество участников канала не ограничено |
📝 Пароль | По умолчанию канал создается без пароля |
🔘 Приватный | Разрешает вступить в канал только через запрос или инвайт |
🔘 Хранить историю | Позволяет хранить историю сообщений (доступно только на планах с подпиской). По умолчанию сообщения хранятся сутки. |
🔘 Видимый в поиске | Показывает канал в поисковой выдаче |
🔘 Видимый только в тестовой версии | Позволяет использовать созданный канал для тестирования |
🔘 Выходить игроком из канала при выходе из игры | |
🔘 Удалять канал при выходе последнего участника | |
🔘 Ограничивать частоту отправки сообщений | Если хотите пресечь спам или контролировать количество запросов, то вы можете выставить ограничение в секундах по частоте отправки, например, не чаще раза в 10 секунд. |
🔘 Замьютить игрока при достижении количества сообщений в период времени | Если хотите пресечь спам, вы можете автоматически мьютить игроков при достижении лимита сообщений за период. Например, не более 5 сообщений за 10 секунд. |
🔘 Настройки цензуры | Вы можете запретить плохие слова в чате, спам, ссылки и оскорбления. Подробнее про настройки: Цензурирование данных. |
🔘 Разрешить игроку - владельцу редактировать опции канала | По умолчанию владелец канала может редактировать: название, описание, теги, менять владельца, вместимость канала, приватность, видимость, права владельца, права участника, права гостя |
🔘 Доступы игрока, участника, гостя | Полный список прав доступа и их значения по умолчанию см. в таблице |
Если оставить настройки по умолчанию, то созданный канал можно использовать как чат игроков
Доступы различных ролей в канале
Метод | Разрешить | 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
:
- JavaScript
- Unity
gp.channels.updateChannel({ channelId: 123, visible: false });
public void UpdateChannel()
{
var filter = new UpdateChannelFilter(Channel_ID: 123);
filter.capacity = 50;
filter.visible = false;
filter.ch_private = true;
GP_Channels.UpdateChannel(filter);
}
Передать канал другому игроку:
- JavaScript
- Unity
gp.channels.updateChannel({ channelId: 123, ownerId: 123456 });
public void UpdateChannel()
{
var filter = new UpdateChannelFilter(Channel_ID: 123);
filter.ownerId = 123456;
GP_Channels.UpdateChannel(filter);
}
Полный список параметров:
- JavaScript
- Unity
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,
},
});
public void UpdateChannel()
{
var filter = new UpdateChannelFilter(Channel_ID: 123);
// теги, по которым можно найти канал
filter.tags = new string[] {"dungeon", "x5", "demons_lord_castle", "heroic"};
// максимальное количество человек в канале
filter.capacity = 5;
// имя канала
filter.name = 'Dungeon Demons Lord Castle',
// описание канала
filter.description = 'fast, need all',
// вход только по приглашениям или свободный
filter.private = true,
// канал виден в поиске или доступен только по прямому запросу
filter.visible = true,
// пароль для входа
filter.password = '',
// new owner ID
filter.ownerId = 123456;
// доступы владельца канала
var ownerAcl = new OwnerAcl();
// может читать сообщения
ownerAcl.canViewMessages = true;
// может создавать сообщения
ownerAcl.canAddMessage = true;
// может изменять сообщения
ownerAcl.canEditMessage = true;
// может удалять сообщения
ownerAcl.canDeleteMessage = true;
// может просматривать участников
ownerAcl.canViewMembers = true;
// может приглашать других игроков
ownerAcl.canInvitePlayer = true;
// может удалять игроков
ownerAcl.canKickPlayer = true;
// может принимать запросы на вступление
ownerAcl.canAcceptJoinRequest = true;
// может мьютить игроков
ownerAcl.canMutePlayer = true;
filter.ownerAcl = ownerAcl;
// доступы участника канала
var memberAcl = new MemberAcl();
// может читать сообщения
memberAcl.canViewMessages = true;
// может создавать сообщения
memberAcl.canAddMessage = true;
// может изменять сообщения
memberAcl.canEditMessage = true;
// может удалять сообщения
memberAcl.canDeleteMessage = true;
// может просматривать участников
memberAcl.canViewMembers = true;
// может приглашать других игроков
memberAcl.canInvitePlayer = false;
// может удалять игроков
memberAcl.canKickPlayer = false;
// может принимать запросы на вступление
memberAcl.canAcceptJoinRequest = false;
// может мьютить игроков
memberAcl.canMutePlayer = false;
filter.memberAcl = memberAcl;
// channel guest access
var guestAcl = new GuestAcl();
// может читать сообщения
guestAcl.canViewMessages = false;
// может создавать сообщения
guestAcl.canAddMessage = false;
// может изменять сообщения
guestAcl.canEditMessage = false;
// может удалять сообщения
guestAcl.canDeleteMessage = false;
// может просматривать участников
guestAcl.canViewMembers = false;
// может приглашать других игроков
guestAcl.canInvitePlayer = false;
// может удалять игроков
guestAcl.canKickPlayer = false;
// может принимать запросы на вступление
guestAcl.canAcceptJoinRequest = false;
// может мьютить игроков
guestAcl.canMutePlayer = false;
filter.guestAcl = guestAcl;
GP_Channels.UpdateChannel(filter);
}
Чтобы получить результат вызова метода, можно подписаться на события:
- JavaScript
- Unity
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;
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnUpdateChannel += OnUpdateChannel;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnUpdateChannel -= OnUpdateChannel;
}
private void OnUpdateChannel(UpdateChannelData data)
{
Debug.Log("UPDATE CHANNEL: ID: " + data.id);
for (int i = 0; i < data.tags.Length; i++)
{
Debug.Log("UPDATE CHANNEL: TAGS: " + data.tags[i]);
}
for (int i = 0; i < data.messageTags.Length; i++)
{
Debug.Log("UPDATE CHANNEL: MESSAGE TAGS: " + data.messageTags[i]);
}
Debug.Log("UPDATE CHANNEL: CAPACITY: " + data.capacity);
Debug.Log("UPDATE CHANNEL: OWNER ID: " + data.ownerId);
Debug.Log("UPDATE CHANNEL: NAME: " + data.name);
Debug.Log("UPDATE CHANNEL: DESCRIPTION: " + data.description);
Debug.Log("UPDATE CHANNEL: PRIVATE: " + data.ch_private);
Debug.Log("UPDATE CHANNEL: VISIBLE: " + data.visible);
Debug.Log("UPDATE CHANNEL: PERMANENT: " + data.permanent);
Debug.Log("UPDATE CHANNEL: HAS PASSWORD: " + data.hasPassword);
Debug.Log("UPDATE CHANNEL: PASSWORD: " + data.password);
Debug.Log("UPDATE CHANNEL: IS JOINED: " + data.isJoined);
Debug.Log("UPDATE CHANNEL: IS INVITED: " + data.isInvited);
Debug.Log("UPDATE CHANNEL: IS MUTED: " + data.isMuted);
Debug.Log("UPDATE CHANNEL: IS REQUEST SENT: " + data.isRequestSent);
Debug.Log("UPDATE CHANNEL: MEMBERS COUNT: " + data.membersCount);
Debug.Log("UPDATE CHANNEL: OWNER ACL: " + JsonUtility.ToJson(data.ownerAcl));
Debug.Log("UPDATE CHANNEL: MEMBER ACL: " + JsonUtility.ToJson(data.memberAcl));
Debug.Log("UPDATE CHANNEL: GUEST ACL: " + JsonUtility.ToJson(data.guestAcl));
}
Выполнение с ошибкой:
- JavaScript
- Unity
gp.channels.on('error:updateChannel', (err) => {
// завершен с ошибкой
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnUpdateChannelError += OnUpdateChannelError;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnUpdateChannelError -= OnUpdateChannelError;
}
// завершен с ошибкой
private void OnUpdateChannelError() => Debug.Log("UPDATE CHANNEL: ERROR");
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
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
При обновлении канала всем игрокам в канале приходит уведомление о его изменении:
- JavaScript
- Unity
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;
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnUpdateChannel += OnUpdateChannel;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnUpdateChannel -= OnUpdateChannel;
}
private void OnUpdateChannel(UpdateChannelData data)
{
Debug.Log("UPDATE CHANNEL: ID: " + data.id);
for (int i = 0; i < data.tags.Length; i++)
{
Debug.Log("UPDATE CHANNEL: TAGS: " + data.tags[i]);
}
for (int i = 0; i < data.messageTags.Length; i++)
{
Debug.Log("UPDATE CHANNEL: MESSAGE TAGS: " + data.messageTags[i]);
}
Debug.Log("UPDATE CHANNEL: CAPACITY: " + data.capacity);
Debug.Log("UPDATE CHANNEL: OWNER ID: " + data.ownerId);
Debug.Log("UPDATE CHANNEL: NAME: " + data.name);
Debug.Log("UPDATE CHANNEL: DESCRIPTION: " + data.description);
Debug.Log("UPDATE CHANNEL: PRIVATE: " + data.ch_private);
Debug.Log("UPDATE CHANNEL: VISIBLE: " + data.visible);
Debug.Log("UPDATE CHANNEL: PERMANENT: " + data.permanent);
Debug.Log("UPDATE CHANNEL: HAS PASSWORD: " + data.hasPassword);
Debug.Log("UPDATE CHANNEL: PASSWORD: " + data.password);
Debug.Log("UPDATE CHANNEL: IS JOINED: " + data.isJoined);
Debug.Log("UPDATE CHANNEL: IS INVITED: " + data.isInvited);
Debug.Log("UPDATE CHANNEL: IS MUTED: " + data.isMuted);
Debug.Log("UPDATE CHANNEL: IS REQUEST SENT: " + data.isRequestSent);
Debug.Log("UPDATE CHANNEL: MEMBERS COUNT: " + data.membersCount);
Debug.Log("UPDATE CHANNEL: OWNER ACL: " + JsonUtility.ToJson(data.ownerAcl));
Debug.Log("UPDATE CHANNEL: MEMBER ACL: " + JsonUtility.ToJson(data.memberAcl));
Debug.Log("UPDATE CHANNEL: GUEST ACL: " + JsonUtility.ToJson(data.guestAcl));
}
Удаление канала
+1 RequestПри удалении канала удаляются так же: все сообщения, участники канала, инвайты и запросы на вступление в канал
Для удаления канала с идентификатором ChannelId: 123
используется метод gp.channels.deleteChannel
:
- JavaScript
- Unity
gp.channels.deleteChannel({ channelId: 123 });
GP_Channels.DeleteChannel(channel_ID: 123);
Чтобы получить результат вызова метода, можно подписаться на события:
- JavaScript
- Unity
gp.channels.on('deleteChannel', () => {
// канал удален
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnDeleteChannelSuccess += OnDeleteChannelSuccess;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnDeleteChannelSuccess -= OnDeleteChannelSuccess;
}
// канал удален
private void OnDeleteChannelSuccess() => Debug.Log("DELETE CHANNEL: SUCCESS");
Выполнение с ошибкой:
- JavaScript
- Unity
gp.channels.on('error:deleteChannel', (err) => {
// завершен с ошибкой
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnDeleteChannelError += OnDeleteChannelError;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnDeleteChannelError -= OnDeleteChannelError;
}
// завершен с ошибкой
private void OnDeleteChannelError() => Debug.Log("DELETE CHANNEL: ERROR");
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | access_denied 💡 |
player_banned | |
internal_error |
access_denied 💡 - игрок не является владельцем, поэтому не имеет прав на удаление канала
При удалении канала всем игрокам в канале приходит уведомление об этом событии:
- JavaScript
- Unity
gp.channels.on('event:deleteChannel', (channel) => {
// ID канала
channel.id;
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnDeleteChannelEvent += OnDeleteChannelEvent;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnDeleteChannelEvent -= OnDeleteChannelEvent;
}
private void OnDeleteChannelEvent(int channel_Id) => Debug.Log("DELETE CHANNEL EVENT: CHANNEL ID: " + channel_Id);
Получить информацию о канале по ID
+1 RequestЧтобы получить информацию о канале по идентификатору, используйте метод gp.channels.fetchChannel
:
- JavaScript
- Unity
const response = await gp.channels.fetchChannel({
// ID канала
channelId: 123,
});
GP_Channels.FetchChannel(channel_ID: 123);
Чтобы получить результат вызова метода, можно подписаться на события:
- JavaScript
- Unity
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;
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnFetchChannel += OnFetchChannel;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnFetchChannel -= OnFetchChannel;
}
private void OnFetchChannel(FetchChannelData data)
{
Debug.Log("FETCH CHANNEL: ID: " + data.id);
for (int i = 0; i < data.tags.Length; i++)
{
Debug.Log("FETCH CHANNEL: TAGS: " + data.tags[i]);
}
for (int i = 0; i < data.messageTags.Length; i++)
{
Debug.Log("FETCH CHANNEL: MESSAGE TAGS: " + data.messageTags[i]);
}
Debug.Log("FETCH CHANNEL: TEMPLATE ID: " + data.templateId);
Debug.Log("FETCH CHANNEL: PROJECT ID: " + data.projectId);
Debug.Log("FETCH CHANNEL: CAPACITY: " + data.capacity);
Debug.Log("FETCH CHANNEL: OWNER ID: " + data.ownerId);
Debug.Log("FETCH CHANNEL: NAME: " + data.name);
Debug.Log("FETCH CHANNEL: DESCRIPTION: " + data.description);
Debug.Log("FETCH CHANNEL: PRIVATE: " + data.ch_private);
Debug.Log("FETCH CHANNEL: VISIBLE: " + data.visible);
Debug.Log("FETCH CHANNEL: PERMANENT: " + data.permanent);
Debug.Log("FETCH CHANNEL: HAS PASSWORD: " + data.hasPassword);
Debug.Log("FETCH CHANNEL: PASSWORD: " + data.password);
Debug.Log("FETCH CHANNEL: IS JOINED: " + data.isJoined);
Debug.Log("FETCH CHANNEL: IS INVITED: " + data.isInvited);
Debug.Log("FETCH CHANNEL: IS MUTED: " + data.isMuted);
Debug.Log("FETCH CHANNEL: IS REQUEST SENT: " + data.isRequestSent);
Debug.Log("FETCH CHANNEL: MEMBERS COUNT: " + data.membersCount);
Debug.Log("FETCH CHANNEL: OWNER ACL: " + JsonUtility.ToJson(data.ownerAcl));
Debug.Log("FETCH CHANNEL: MEMBER ACL: " + JsonUtility.ToJson(data.memberAcl));
Debug.Log("FETCH CHANNEL: GUEST ACL: " + JsonUtility.ToJson(data.guestAcl));
}
Выполнение с ошибкой:
- JavaScript
- Unity
gp.channels.on('error:fetchChannel', (err) => {
// завершен с ошибкой
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnFetchChannelError += OnFetchChannelError;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnFetchChannelError -= OnFetchChannelError;
}
// завершен с ошибкой
private void OnFetchChannelError() => Debug.Log("FETCH CHANNEL: ERROR");
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | |
player_banned | |
internal_error |
Получить список каналов
+1 RequestЧтобы получить список каналов, можно использовать метод gp.channels.fetchChannels
:
- JavaScript
- Unity
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,
});
public void FetchChannels()
{
var filter = new FetchChannelsFilter();
// список ID каналов
filter.ids = new int[] {123, 124, 125};
// Теги сообщений для фильтрации, через И (&)
filter.tags = new string[] {"chat", "trade"};
// Поиск по ID или названию канала
filter.search = "";
// Поиск каналов только в которых есть мой игрок
filter.onlyJoined = true;
// Поиск каналов только в которых мой игрок - владелец канала
filter.onlyOwned = true;
// сколько запросить за раз, макс. 100
filter.limit = 100;
// сколько записей пропустить, макс. 10000, используется для постраничной навигации или "подгрузить еще"
filter.offset = 0;
GP_Channels.FetchChannels(filter);
}
Чтобы получить результат вызова метода, можно подписаться на события:
- JavaScript
- Unity
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
});
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnFetchChannels += OnFetchChannels;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnFetchChannels -= OnFetchChannels;
}
private void OnFetchChannels(List<FetchChannelData> data, bool canLoadMore)
{
Debug.Log("FETCH CHANNELS: CAN LOAD MORE: " + canLoadMore);
for (int i = 0; i < data.Count; i++)
{
Debug.Log("FETCH CHANNELS: ID: " + data[i].id);
Debug.Log("FETCH CHANNELS: NAME: " + data[i].name);
Debug.Log("FETCH CHANNELS: DESCRIPTION: " + data[i].description);
Debug.Log("FETCH CHANNELS: HAS PASSWORD: " + data[i].hasPassword);
Debug.Log("FETCH CHANNELS: MEMBERS COUNT: " + data[i].membersCount);
Debug.Log("FETCH CHANNELS: OWNER ID: " + data[i].ownerId);
Debug.Log("FETCH CHANNELS: PROJECT ID: " + data[i].projectId);
for (int x = 0; x < data[i].tags.Length; x++)
{
Debug.Log("FETCH CHANNELS: TAGS: " + data[i].tags[x]);
}
for (int a = 0; a < data[i].messageTags.Length; a++)
{
Debug.Log("FETCH CHANNELS: MESSAGE TAGS: " + data[i].messageTags[a]);
}
Debug.Log("FETCH CHANNELS: TEMPLATE ID: " + data[i].templateId);
Debug.Log("FETCH CHANNELS: CAPACITY: " + data[i].capacity);
Debug.Log("FETCH CHANNELS: VISIBLE: " + data[i].visible);
Debug.Log("FETCH CHANNELS: PRIVATE: " + data[i].ch_private);
Debug.Log("FETCH CHANNELS: PERMANENT: " + data[i].permanent);
Debug.Log("FETCH CHANNELS: HAS PASSWORD: " + data[i].hasPassword);
Debug.Log("FETCH CHANNELS: PASSWORD: " + data[i].password);
Debug.Log("FETCH CHANNELS: IS JOINED: " + data[i].isJoined);
Debug.Log("FETCH CHANNELS: IS INVITED: " + data[i].isInvited);
Debug.Log("FETCH CHANNELS: IS MUTED: " + data[i].isMuted);
Debug.Log("FETCH CHANNELS: IS REQUEST SENT: " + data[i].isRequestSent);
Debug.Log("FETCH CHANNELS: MEMBERS COUNT: " + data[i].membersCount);
Debug.Log("FETCH CHANNELS: OWNER ACL: " + JsonUtility.ToJson(data[i].ownerAcl));
Debug.Log("FETCH CHANNELS: MEMBER ACL: " + JsonUtility.ToJson(data[i].memberAcl));
Debug.Log("FETCH CHANNELS: GUEST ACL: " + JsonUtility.ToJson(data[i].guestAcl));
}
}
Выполнение с ошибкой:
- JavaScript
- Unity
gp.channels.on('error:fetchChannels', (err) => {
// завершен с ошибкой
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnFetchChannelsError += OnFetchChannelsError;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnFetchChannelsError -= OnFetchChannelsError;
}
// завершен с ошибкой
private void OnFetchChannelsError() => Debug.Log("FETCH CHANNELS: ERROR");
Возможные ошибки приведены в таблице ниже:
базовые ошибки |
---|
player_not_found |
project_not_found |
origin_not_allowed |
player_banned |
internal_error |
Чтобы дополнительно подгрузить список каналов по такому же запросу, есть удобный метод gp.channels.fetchMoreChannels
:
- JavaScript
- Unity
const response = await gp.channels.fetchMoreChannels({
// ID канала
channelId: 123,
// Теги сообщений для фильтрации, через И (&)
tags: ['chat', 'trade'],
// сколько запросить за раз, макс. 100
limit: 100,
});
public void FetchMoreChannels()
{
var filter = new FetchMoreChannelsFilter();
// список ID каналов
filter.ids = new int[] {123, 124, 125};
// Теги сообщений для фильтрации, через И (&)
filter.tags = new string[] {"chat", "trade"};
// сколько запросить за раз, макс. 100
filter.limit = 10;
GP_Channels.FetchMoreChannels(filter);
}
Чтобы получить результат вызова метода, можно подписаться на события:
- JavaScript
- Unity
gp.channels.on('fetchMoreChannels', (result) => {
result.items - массив списка каналов
result.canLoadMore - можно ли подгрузить еще каналы
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnFetchMoreChannels += OnFetchMoreChannels;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnFetchMoreChannels -= OnFetchMoreChannels;
}
private void OnFetchMoreChannels(List<FetchChannelData> data, bool canLoadMore)
{
Debug.Log("FETCH MORE CHANNELS: CAN LOAD MORE: " + canLoadMore);
for (int i = 0; i < data.Count; i++)
{
Debug.Log("FETCH MORE CHANNELS: ID: " + data[i].id);
Debug.Log("FETCH MORE CHANNELS: NAME: " + data[i].name);
Debug.Log("FETCH MORE CHANNELS: DESCRIPTION: " + data[i].description);
Debug.Log("FETCH MORE CHANNELS: HAS PASSWORD: " + data[i].hasPassword);
Debug.Log("FETCH MORE CHANNELS: MEMBERS COUNT: " + data[i].membersCount);
Debug.Log("FETCH MORE CHANNELS: OWNER ID: " + data[i].ownerId);
Debug.Log("FETCH MORE CHANNELS: PROJECT ID: " + data[i].projectId);
for (int x = 0; x < data[i].tags.Length; x++)
{
Debug.Log("FETCH MORE CHANNELS: TAGS: " + data[i].tags[x]);
}
for (int a = 0; a < data[i].messageTags.Length; a++)
{
Debug.Log("FETCH MORE CHANNELS: MESSAGE TAGS: " + data[i].messageTags[a]);
}
Debug.Log("FETCH MORE CHANNELS: TEMPLATE ID: " + data[i].templateId);
Debug.Log("FETCH MORE CHANNELS: CAPACITY: " + data[i].capacity);
Debug.Log("FETCH MORE CHANNELS: VISIBLE: " + data[i].visible);
Debug.Log("FETCH MORE CHANNELS: PRIVATE: " + data[i].ch_private);
Debug.Log("FETCH MORE CHANNELS: PERMANENT: " + data[i].permanent);
Debug.Log("FETCH MORE CHANNELS: HAS PASSWORD: " + data[i].hasPassword);
Debug.Log("FETCH MORE CHANNELS: PASSWORD: " + data[i].password);
Debug.Log("FETCH MORE CHANNELS: IS JOINED: " + data[i].isJoined);
Debug.Log("FETCH MORE CHANNELS: IS INVITED: " + data[i].isInvited);
Debug.Log("FETCH MORE CHANNELS: IS MUTED: " + data[i].isMuted);
Debug.Log("FETCH MORE CHANNELS: IS REQUEST SENT: " + data[i].isRequestSent);
Debug.Log("FETCH MORE CHANNELS: MEMBERS COUNT: " + data[i].membersCount);
Debug.Log("FETCH MORE CHANNELS: OWNER ACL: " + JsonUtility.ToJson(data[i].ownerAcl));
Debug.Log("FETCH MORE CHANNELS: MEMBER ACL: " + JsonUtility.ToJson(data[i].memberAcl));
Debug.Log("FETCH MORE CHANNELS: GUEST ACL: " + JsonUtility.ToJson(data[i].guestAcl));
}
}
Выполнение с ошибкой:
- JavaScript
- Unity
gp.channels.on('error:fetchMoreChannels', (err) => {
// завершен с ошибкой
});
// подписка на событие
private void OnEnable()
{
GP_Channels.OnFetchMoreChannelsError += OnFetchMoreChannelsError;
}
// отписка от события
private void OnDisable()
{
GP_Channels.OnFetchMoreChannelsError -= OnFetchMoreChannelsError;
}
// завершен с ошибкой
private void OnFetchMoreChannelsError() => Debug.Log("FETCH MORE CHANNELS: ERROR");
Возможные ошибки приведены в таблице ниже:
базовые ошибки |
---|
player_not_found |
project_not_found |
origin_not_allowed |
player_banned |
internal_error |
Оставайтесь на связи
С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.
Сообщество GamePush в Telegram
: @gs_community.
Для ваших обращений e-mail
: [email protected]
Желаем вам успехов!