Запросы
Обзор
В этом разделе рассматриваются методы обработки запросов на вступление в канал (гильдию, чат, клан и так далее). Как правило, запросы на вступление приходят владельцу канала от других игроков. Например, игроки могут отправлять запрос на вступление в клан или на участие во внутриигровом событии. Владелец канала может принять запрос на вступление, либо отклонить его.
Сервис позволяет создавать следующие виды запросов:
gp.channels.acceptJoinRequest
- принятие запроса на вступлениеgp.channels.rejectJoinRequest
- отклонение запроса на вступлениеgp.channels.fetchJoinRequests
- получить список входящих запросов на вступление в выбранном каналеgp.channels.fetchMoreJoinRequests
- дополнительно подгрузить список входящих запросов на вступление в выбранном каналеgp.channels.fetchSentJoinRequests
- получить список разосланных запросов игроком на вступление в каналыgp.channels.fetchMoreSentJoinRequests
- дополнительно подгрузить список разосланных запросов игроком на вступление в каналы
Принятие запроса на вступление
Игрок 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_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | access_denied |
player_banned | already_in_channel |
internal_error | channel_capacity_reached |
После отправки запроса игрок присоединяется к каналу и всем игрокам в канале приходит уведомление о его вступлении:
gp.channels.on('event:join', (member) => {
// ID канала
member.channelId;
// ID вступившего игрока
member.id;
// Поля игрока (аватар, имя, кастомные поля)
member.state;
// Информация о мьюте игрока
member.mute;
});
Отклонение запроса на вступление
Игрок 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_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | access_denied |
player_banned | join_request_not_found |
internal_error |
gp.channels.on('event:rejectJoinRequest', (joinRequest) => {
// ID канала
joinRequest.channelId;
// ID игрока, который подал запрос на вступление
joinRequest.playerId;
});
Отклонять запросы может игрок - владелец канала и другие игроки в канале (если им разрешено принимать запросы на вступление).
Получить список входящих запросов на вступление в выбранном канале
Чтобы получить список входящих запросов на вступление в выбранном канале используется метод gp.channels.fetchJoinRequests
:
const response = await gp.channels.fetchJoinRequests({
// ID канала
channelId: 123,
// сколько запросить за раз, макс. 100
limit: 100,
// сколько записей пропустить, макс. 10000, используется для постраничной навигации или "подгрузить еще"
offset: 0
});
Обязательно наличие права доступа Разрешено принимать запросы на вступление
Чтобы получить результат вызова метода, можно подписаться на события
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_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | access_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_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | access_denied |
player_banned | |
internal_error |
Получить список разосланных запросов игроком на вступление
Получить список разосланных игроком запросов на вступление в различные каналы:
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]
Желаем вам успехов!