Приглашения
Обзор
С помощью приглашений (инвайтов) можно управлять добавлением игроков в канал. Так как на основе каналов можно реализовать чаты, гильдии, лобби и многое другое, то инвайты становятся неотъемлемой их частью и обеспечивают работу механизма вступления куда-либо. Например, игроку могут предложить вступить в:
- группу или отряд
- рейд
- гильдию или клан
- сообщество и так далее
Механика работы инвайтов 💡 может быть следующей: когда игрока собираются куда-то пригласить, по центру экрана возникает мигающий значком с предложением присоединиться к чату, группе или рейду и основной информацией об этом событии. В этом случае игрок может принять предложение, отказаться, проигнорировать и т.д.
Механика работы инвайтов 💡 приведена в качестве примера. Средствами сервиса GamePush визуально ничего не отображается, однако разработчик может реализовать это самостоятельно
Ниже представлен полный список методов, реализованных для управления приглашениями в каналах:
gp.channels.sendInvite
- отправка приглашенияgp.channels.cancelInvite
- отмена отправки приглашенияgp.channels.acceptInvite
- принятие приглашенияgp.channels.rejectInvite
- отклонение приглашенияgp.channels.fetchInvites
- получить список приглашений в каналgp.channels.fetchMoreInvites
- дополнительно подгрузить список приглашений в каналgp.channels.fetchChannelInvites
- получить список приглашений, отправленных из каналаgp.channels.fetchMoreChannelInvites
- дополнительно подгрузить список приглашений, отправленных из каналаgp.channels.fetchSentInvites
- получить список всех разосланных приглашенийgp.channels.fetchMoreSentInvites
- дополнительно подгрузить список всех разосланных приглашений
Отправка приглашения
Для отправки приглашения игроку playerId: 123456
в канал channelId: 123
:
gp.channels.sendInvite({ channelId: 123, playerId: 123456 });
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('sendInvite', () => {
// приглашение отправлено
});
Выполнение с ошибкой:
gp.channels.on('error:sendInvite', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | not_invited |
project_not_found | empty_channel_id |
origin_not_allowed | channel_not_found |
player_banned | access_denied |
internal_error | already_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 {
// В канале кто-то выслал кому-то инвайт
}
});
Отмена отправки приглашения
Для отмены отправки приглашения игроку playerId: 123456
в канал channelId: 123
:
gp.channels.cancelInvite({ channelId: 123, playerId: 123456 });
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('cancelInvite', () => {
// приглашение отправлено
});
Выполнение с ошибкой:
gp.channels.on('error:cancelInvite', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | not_invited |
project_not_found | empty_channel_id |
origin_not_allowed | channel_not_found |
player_banned | access_denied |
internal_error | not_invited |
Приглашенному игроку приходит отмена инвайта. Остальным игрокам (если они могут приглашать других игроков) приходит уведомление о том, что приглашение было отменено:
gp.channels.on('event:cancelInvite', (invite) => {
// ID канала
invite.channelId;
// ID игрока кто послал инвайт
invite.playerFromId;
// ID игрока кому послали инвайт
invite.playerToId;
if (invite.playerToId === gp.player.id) {
// Отправленный мне инвайт отменили
} else {
// В моем канале кто-то отменил отосланный инвайт
}
});
Принятие приглашения
Игрок может принять приглашение в канал channelId: 123
:
gp.channels.acceptInvite({ channelId: 123 });
После этого игрок вступает в канал. Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('acceptInvite', () => {
// успешно принят
});
Выполнение с ошибкой:
gp.channels.on('error:acceptInvite', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | not_invited |
project_not_found | empty_channel_id |
origin_not_allowed | channel_not_found |
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;
});
Отклонение приглашения
Игрок может отклонить приглашение в канал channelId: 123
:
gp.channels.rejectInvite({ channelId: 123 });
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('rejectInvite', () => {
// успешно отклонен
});
Выполнение с ошибкой:
gp.channels.on('error:rejectInvite', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | not_invited |
project_not_found | empty_channel_id |
origin_not_allowed | channel_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 {
// Кто-то отклонил отправленное приглашение
}
});
Получить список приглашений игрока в каналы
С помощью метода 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 |
Получить список отправленных приглашений из канала
С помощью метода gp.channels.fetchChannelInvites
вы можете получить список всех разосланных приглашений в выбранном канале:
const response = await gp.channels.fetchChannelInvites({
// ID канала
channelId: 123,
// сколько запросить за раз, макс. 100
limit: 100,
// сколько записей пропустить, макс. 10000, используется для постраничной навигации или "подгрузить еще"
offset: 0
});
Обязательно наличие права доступа Разрешить приглашать других игроков
Чтобы получить результат вызова метода, можно подписаться на события:
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_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | access_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_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | access_denied |
player_banned | |
internal_error |
Получить список разосланных приглашений игрокам в каналы
Получить список разосланных приглашений игрокам в каналы можно с помощью метода 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]
Желаем вам успехов!