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

Приглашения

Обзор

С помощью приглашений (инвайтов) можно управлять добавлением игроков в канал. Так как на основе каналов можно реализовать чаты, гильдии, лобби и многое другое, то инвайты становятся неотъемлемой их частью и обеспечивают работу механизма вступления куда-либо. Например, игроку могут предложить вступить в:

  • группу или отряд
  • рейд
  • гильдию или клан
  • сообщество и так далее

Механика работы инвайтов 💡 может быть следующей: когда игрока собираются куда-то пригласить, по центру экрана возникает мигающий значком с предложением присоединиться к чату, группе или рейду и основной информацией об этом событии. В этом случае игрок может принять предложение, отказаться, проигнорировать и т.д.

tip

Механика работы инвайтов 💡 приведена в качестве примера. Средствами сервиса GamePush визуально ничего не отображается, однако разработчик может реализовать это самостоятельно

Ниже представлен полный список методов, реализованных для управления приглашениями в каналах:

  • gp.channels.sendInvite - отправка приглашения +1 Request
  • gp.channels.cancelInvite - отмена отправки приглашения +1 Request
  • gp.channels.acceptInvite - принятие приглашения +1 Request
  • gp.channels.rejectInvite - отклонение приглашения +1 Request
  • gp.channels.fetchInvites - получить список приглашений в канал +1 Request
  • gp.channels.fetchMoreInvites - дополнительно подгрузить список приглашений в канал +1 Request
  • gp.channels.fetchChannelInvites - получить список приглашений, отправленных из канала +1 Request
  • gp.channels.fetchMoreChannelInvites - дополнительно подгрузить список приглашений, отправленных из канала +1 Request
  • gp.channels.fetchSentInvites - получить список всех разосланных приглашений +1 Request
  • gp.channels.fetchMoreSentInvites - дополнительно подгрузить список всех разосланных приглашений +1 Request

Отправка приглашения

+1 Request

Для отправки приглашения игроку playerId: 123456 в канал channelId: 123:

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

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

gp.channels.on('sendInvite', () => {
// приглашение отправлено
});

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

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

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

базовые ошибкисценарные ошибки
player_not_foundnot_invited
project_not_foundempty_channel_id
origin_not_allowedchannel_not_found
player_bannedaccess_denied
internal_erroralready_in_channel
already_invited

Приглашенному игроку приходит инвайт. Остальным игрокам (если они могут приглашать других игроков) приходит уведомление о том, что игроку прислали приглашение:

gp.channels.on('event:invite', (invite) => {
// ID канала
invite.channelId;
// ID игрока кто послал инвайт
invite.playerFromId;
// ID игрока кому послали инвайт
invite.playerToId;
// Дата отправки инвайта в ISO 8601 UTC "2022-12-01T04:52:26+0000"
invite.date;

if (invite.playerToId === gp.player.id) {
// Пригласили меня в канал
} else {
// В канале кто-то выслал кому-то инвайт
}
});

Отмена отправки приглашения

+1 Request

Для отмены отправки приглашения игроку playerId: 123456 в канал channelId: 123:

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

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

gp.channels.on('cancelInvite', () => {
// приглашение отправлено
});

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

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

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

базовые ошибкисценарные ошибки
player_not_foundnot_invited
project_not_foundempty_channel_id
origin_not_allowedchannel_not_found
player_bannedaccess_denied
internal_errornot_invited

Приглашенному игроку приходит отмена инвайта. Остальным игрокам (если они могут приглашать других игроков) приходит уведомление о том, что приглашение было отменено:

gp.channels.on('event:cancelInvite', (invite) => {
// ID канала
invite.channelId;
// ID игрока кто послал инвайт
invite.playerFromId;
// ID игрока кому послали инвайт
invite.playerToId;

if (invite.playerToId === gp.player.id) {
// Отправленный мне инвайт отменили
} else {
// В моем канале кто-то отменил отосланный инвайт
}
});

Принятие приглашения

+1 Request

Игрок может принять приглашение в канал channelId: 123:

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

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

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

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

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

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

базовые ошибкисценарные ошибки
player_not_foundnot_invited
project_not_foundempty_channel_id
origin_not_allowedchannel_not_found
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

Игрок может отклонить приглашение в канал channelId: 123:

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

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

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

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

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

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

базовые ошибкисценарные ошибки
player_not_foundnot_invited
project_not_foundempty_channel_id
origin_not_allowedchannel_not_found
player_banned
internal_error

Всем игрокам в канале (если они могут приглашать других игроков) приходит уведомление о том, что приглашение было отменено:

gp.channels.on('event:rejectInvite', (invite) => {
// ID канала
invite.channelId;
// ID игрока, отправившего приглашение
invite.playerFromId;
// ID игрока, которому отправили приглашение
invite.playerToId;

if (invite.playerFromId === gp.player.id) {
// Мой инвайт отклонили
} else {
// Кто-то отклонил отправленное приглашение
}
});

Получить список приглашений игрока в каналы

+1 Request

С помощью метода gp.channels.fetchInvites вы можете получить список всех каналов, в которые пригласили игрока:

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

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

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

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

// Публичные поля игрока, который приглашает
invite.playerFrom
invite.playerFrom.id
invite.playerFrom.name
invite.playerFrom.avatar
// и другие публичные поля

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

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

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

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

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

Чтобы подгрузить еще инвайты по такому же запросу, существует удобный метод:

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

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

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

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

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

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

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

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

+1 Request

С помощью метода gp.channels.fetchChannelInvites вы можете получить список всех разосланных приглашений в выбранном канале:

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

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

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

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

result.items.forEach((invite) => {
// все поля инвайта

// Публичные поля игрока, который приглашает
invite.playerFrom
invite.playerFrom.id
invite.playerFrom.name
invite.playerFrom.avatar
// и другие публичные поля

// Публичные поля игрока, который приглашен
invite.playerTo
invite.playerTo.id
invite.playerTo.name
invite.playerTo.avatar
// и другие публичные поля

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

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

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

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

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

Чтобы подгрузить еще инвайты по такому же запросу, есть удобный метод:

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

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

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

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

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

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

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

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

+1 Request

Получить список разосланных приглашений игрокам в каналы можно с помощью метода gp.channels.fetchSentInvites:

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

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

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

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

// Публичные поля игрока, который приглашен
invite.playerTo
invite.playerTo.id
invite.playerTo.name
invite.playerTo.avatar
// и другие публичные поля

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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