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

Запросы

Обзор

В этом разделе рассматриваются методы обработки запросов на вступление в канал (гильдию, чат, клан и так далее). Как правило, запросы на вступление приходят владельцу канала от других игроков. Например, игроки могут отправлять запрос на вступление в клан или на участие во внутриигровом событии. Владелец канала может принять запрос на вступление, либо отклонить его.

Сервис позволяет создавать следующие виды запросов:

  • gp.channels.acceptJoinRequest - принятие запроса на вступление +1 Request
  • gp.channels.rejectJoinRequest - отклонение запроса на вступление +1 Request
  • gp.channels.fetchJoinRequests - получить список входящих запросов на вступление в выбранном канале +1 Request
  • gp.channels.fetchMoreJoinRequests - дополнительно подгрузить список входящих запросов на вступление в выбранном канале +1 Request
  • gp.channels.fetchSentJoinRequests - получить список разосланных запросов игроком на вступление в каналы +1 Request
  • gp.channels.fetchMoreSentJoinRequests - дополнительно подгрузить список разосланных запросов игроком на вступление в каналы +1 Request

Принятие запроса на вступление

+1 Request

Игрок playerId: 123456 принимает запрос на вступление в канал channelId: 123. Для этого используется метод gp.channels.acceptJoinRequest:

gp.channels.acceptJoinRequest({ channelId: 123, playerId: 123456 });

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

gp.channels.on('acceptJoinRequest', () => {
// успешно принят запрос
});

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

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

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

базовые ошибкисценарные ошибки
player_not_foundempty_channel_id
project_not_foundchannel_not_found
origin_not_allowedaccess_denied
player_bannedalready_in_channel
internal_errorchannel_capacity_reached

После отправки запроса игрок присоединяется к каналу и всем игрокам в канале приходит уведомление о его вступлении:

gp.channels.on('event:join', (member) => {
// ID канала
member.channelId;
// ID вступившего игрока
member.id;
// Поля игрока (аватар, имя, кастомные поля)
member.state;
// Информация о мьюте игрока
member.mute;
});

Отклонение запроса на вступление

+1 Request

Игрок playerId: 123456 отклоняет запрос на вступление в канал channelId: 123. Для этого используется метод gp.channels.rejectJoinRequest:

gp.channels.rejectJoinRequest({ channelId: 123, playerId: 123456 });

Если игрок - владелец канала отклоняет запрос на вступление в канал, то уведомление о том, что кто-то отклонил запрос приходит:

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

gp.channels.on('rejectJoinRequest', () => {
// запрос успешно отклонен
});

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

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

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

базовые ошибкисценарные ошибки
player_not_foundempty_channel_id
project_not_foundchannel_not_found
origin_not_allowedaccess_denied
player_bannedjoin_request_not_found
internal_error
gp.channels.on('event:rejectJoinRequest', (joinRequest) => {
// ID канала
joinRequest.channelId;
// ID игрока, который подал запрос на вступление
joinRequest.playerId;
});
tip

Отклонять запросы может игрок - владелец канала и другие игроки в канале (если им разрешено принимать запросы на вступление).

Получить список входящих запросов на вступление в выбранном канале

+1 Request

Чтобы получить список входящих запросов на вступление в выбранном канале используется метод gp.channels.fetchJoinRequests:

const response = await gp.channels.fetchJoinRequests({
// ID канала
channelId: 123,
// сколько запросить за раз, макс. 100
limit: 100,
// сколько записей пропустить, макс. 10000, используется для постраничной навигации или "подгрузить еще"
offset: 0
});
tip

Обязательно наличие права доступа Разрешено принимать запросы на вступление

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

gp.channels.on('fetchJoinRequests', (result) => {
result.items - массив списка запросов на вступление
result.canLoadMore - можно ли подгрузить еще запросы

result.items.forEach((joinRequest) => {
// все поля запроса

// Публичные поля игрока, который подал запрос
joinRequest.player
joinRequest.player.id
joinRequest.player.name
joinRequest.player.avatar
// и другие публичные поля

// дата отправки запроса, ISO 8601
invite.date
});
});

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

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

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

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

Чтобы дополнительно подгрузить запросы на вступление, используйте удобный метод gp.channels.fetchMoreJoinRequests:

const response = await gp.channels.fetchMoreJoinRequests({
channelId: 123,
// сколько запросить за раз, макс. 100
limit: 100,
});

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

gp.channels.on('fetchMoreJoinRequests', (result) => {
result.items - массив списка запросов
result.canLoadMore - можно ли подгрузить еще запросы
});

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

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

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

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

Получить список разосланных запросов игроком на вступление

+1 Request

Получить список разосланных игроком запросов на вступление в различные каналы:

const response = await gp.channels.fetchSentJoinRequests({
// сколько запросить за раз, макс. 100
limit: 100,
// сколько записей пропустить, макс. 10000, используется для постраничной навигации или "подгрузить еще"
offset: 0
});

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

gp.channels.on('fetchSentJoinRequests', (result) => {
result.items - массив списка запросов на вступление
result.canLoadMore - можно ли подгрузить еще запросы

result.items.forEach((joinRequest) => {
// все поля инвайта
// поля канала, в который приглашается другой игрок
joinRequest.channel
joinRequest.channel.id
joinRequest.channel.tags
joinRequest.channel.projectId
joinRequest.channel.capacity
joinRequest.channel.ownerId
joinRequest.channel.name
joinRequest.channel.description
joinRequest.channel.private
joinRequest.channel.visible
joinRequest.channel.hasPassword
joinRequest.channel.membersCount

// дата отправки приглашения, ISO 8601
joinRequest.date
});
});

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

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

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

базовые ошибки
player_not_found
project_not_found
origin_not_allowed
player_banned
internal_error

Чтобы дополнительно подгрузить запросы на вступление, используйте удобный метод gp.channels.fetchMoreSentJoinRequests:

const response = await gp.channels.fetchMoreSentJoinRequests({
// сколько запросить за раз, макс. 100
limit: 100,
});

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

gp.channels.on('fetchMoreSentJoinRequests', (result) => {
result.items - массив списка запросов на вступление
result.canLoadMore - можно ли подгрузить еще запросы
});

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

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

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

базовые ошибки
player_not_found
project_not_found
origin_not_allowed
player_banned
internal_error

Оставайтесь на связи

С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.

Сообщество GamePush в Telegram: @gs_community.

Для ваших обращений e-mail: [email protected]

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