Сообщения
Обзор
Игроки в канале могут обмениваться сообщениями. При этом возможно реализовать отправку личного сообщения, а также сообщений в фид или канал. Реализованы методы, которые позволяют изменять и удалять отправленные сообщения. С помощью сообщений также может быть реализована отправка подарков игрокам или даже пошаговое сражение.
В этом разделе рассматриваются методы для работы с сообщениями. Сервис позволяет отправлять, изменять, удалять сообщения и многое другое:
gp.channels.sendMessage
- отправка сообщения в каналgp.channels.sendPersonalMessage
- отправка личного сообщения игрокуgp.channels.sendFeedMessage
- отправка сообщения в фидgp.channels.editMessage
- изменить отправленное сообщениеgp.channels.deleteMessage
- удалить отправленное сообщениеgp.channels.fetchMessages
- получить список сообщений в выбранном каналеgp.channels.fetchMoreMessages
- дополнительно подгрузить сообщения в каналеgp.channels.fetchPersonalMessages
- получить список личных сообщенийgp.channels.fetchMorePersonalMessages
- дополнительно подгрузить личные сообщенияgp.channels.fetchFeedMessages
- получить список сообщений в фиде игрокаgp.channels.fetchMoreFeedMessages
- дополнительно подгрузить сообщения в фиде
Отправка сообщения
Для отправки сообщения Hello!
в канал channelId: 123
используется метод gp.channels.sendMessage
:
gp.channels.sendMessage({
// ID канала
channelId: 123,
// текст сообщения
text: 'Hello!',
// теги сообщения для удобной фильтрации, необязательно
tags: ['chat', 'trade'],
});
Отправка личного сообщения и в фид игрока
Существует возможность отправки личного сообщения игроку и отправки сообщения в фид.
Фид - публичный канал игрока, в который может отправить сообщение любой участник канала
Для отправки личного сообщения Hello!
игроку playerId: 123456
используется метод gp.channels.sendPersonalMessage
:
gp.channels.sendPersonalMessage({
// ID игрока
playerId: 123,
// текст сообщения
text: 'Hello!',
// теги сообщения для удобной фильтрации, необязательно
tags: ['chat', 'trade'],
});
Для отправки сообщения в фид gp.channels.sendFeedMessage
:
gp.channels.sendFeedMessage({
// ID игрока
playerId: 123,
// текст сообщения
text: 'Hello!',
// теги сообщения для удобной фильтрации, необязательно
tags: ['chat', 'trade'],
});
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('sendMessage', (message) => {
// успешно отправлено
// ID сообщения, его можно использовать, чтобы редактировать или удалять сообщение
message.id
// ID канала
message.channelId
// ID автора сообщения
message.authorId
// Текст сообщения
message.text
// Теги сообщения
message.tags
// Публичные поля игрока - отправителя сообщения
message.player
// Время отправки сообщения
message.createdAt
});
Выполнение с ошибкой:
gp.channels.on('error:sendMessage', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки | сценарные только для sendMessage |
---|---|---|
player_not_found | empty_message | empty_channel_id |
project_not_found | access_denied | channel_not_found |
origin_not_allowed | message_characters_limit_exceeds | |
player_banned | ||
internal_error |
При отправке сообщения всем игрокам в канале приходит уведомление о новом сообщении:
gp.channels.on('event:message', (message) => {
// ID канала
message.channelId;
// ID сообщения
message.id;
// ID автора сообщения
message.authorId;
// Поля автора (аватар, имя, кастомные поля)
message.player;
// Текст сообщения
message.text;
// Теги сообщения
message.tags;
// Дата отправки сообщения
message.createdAt;
});
Изменение сообщения
Изменение отправленного сообщения реализуется с помощью метода gp.channels.editMessage
по идентификатору messageId
:
gp.channels.editMessage({ messageId: '638d73ee28520fc3b551a8ac', text: 'Hello!' });
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('editMessage', (message) => {
// успешно обновлено
// ID сообщения, его можно использовать, чтобы редактировать или удалять сообщение
message.id
// ID канала
message.channelId
// ID автора сообщения
message.authorId
// Текст сообщения
message.text
// Теги сообщения
message.tags
// Публичные поля игрока - отправителя сообщения
message.player
// Время отправки сообщения
message.createdAt
});
Выполнение с ошибкой:
gp.channels.on('error:editMessage', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | channel_message_not_found |
project_not_found | empty_message |
origin_not_allowed | access_denied |
player_banned | message_characters_limit_exceeds |
internal_error |
При изменении сообщения всем игрокам в канале приходит уведомление об изменении сообщения:
gp.channels.on('event:editMessage', (message) => {
// ID канала
message.channelId;
// ID сообщения
message.id;
// ID автора сообщения
message.authorId;
// Текст сообщения
message.text;
// Теги сообщения
message.tags;
// Дата отправки сообщения
message.createdAt;
});
Удаление сообщения
Удаление отправленного сообщения реализуется с помощью метода gp.channels.deleteMessage
по идентификатору messageId
:
gp.channels.deleteMessage({ messageId: '638d73ee28520fc3b551a8ac' });
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('deleteMessage', () => {
// успешно удалено
});
Выполнение с ошибкой:
gp.channels.on('error:deleteMessage', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | channel_message_not_found |
project_not_found | access_denied |
origin_not_allowed | |
player_banned | |
internal_error |
При удалении сообщения всем игрокам в канале приходит уведомление об удалении сообщения:
gp.channels.on('event:deleteMessage', (message) => {
// ID канала
message.channelId;
// ID сообщения
message.id;
// ID автора сообщения
message.authorId;
// Текст сообщения
message.text;
// Теги сообщения
message.tags;
// Дата отправки сообщения
message.createdAt;
});
Получить список сообщений в выбранном канале
Обязательно наличие права доступа Разрешить читать сообщения
Получить список сообщений в выбранном канале можно с помощью метода gp.channels.fetchMessages
:
const response = await gp.channels.fetchMessages({
// ID канала
channelId: 123,
// Теги сообщений для фильтрации, через И (&)
tags: ['chat', 'trade'],
// сколько запросить за раз, макс. 100
limit: 100,
// сколько записей пропустить, макс. 10000, используется для постраничной навигации или "подгрузить еще"
offset: 0
});
Получить список личных сообщений с другим игроком:
const response = await gp.channels.fetchPersonalMessages({
// ID другого игрока
playerId: 123456,
// Теги сообщений для фильтрации, через И (&)
tags: ['chat', 'trade'],
// сколько запросить за раз, макс. 100
limit: 100,
// сколько записей пропустить, макс. 10000, используется для постраничной навигации или "подгрузить еще"
offset: 0
});
Получить список сообщений в фиде игрока:
const response = await gp.channels.fetchFeedMessages({
// ID игрока
playerId: 123456,
// Теги сообщений для фильтрации, через И (&)
tags: ['chat', 'trade'],
// сколько запросить за раз, макс. 100
limit: 100,
// сколько записей пропустить, макс. 10000, используется для постраничной навигации или "подгрузить еще"
offset: 0
});
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('fetchMessages', (result) => {
result.items - массив списка сообщений
result.canLoadMore - можно ли подгрузить еще сообщения
result.items.forEach((message) => {
// все поля сообщения
// ID сообщения, его можно использовать, чтобы редактировать или удалять сообщение
message.id
// ID канала
message.channelId
// ID игрока - автора сообщения
message.authorId
// текст сообщения
message.text
// теги сообщения
message.tags
// Публичные поля автора сообщения
message.player
message.player.id
message.player.name
message.player.avatar
// и другие публичные поля
// дата создания сообщения, ISO 8601
message.createdAt
});
});
Выполнение с ошибкой:
gp.channels.on('error:fetchMessages', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | access_denied |
player_banned | |
internal_error |
Чтобы дополнительно подгрузить сообщения в канале по такому же запросу, есть удобный метод gp.channels.fetchMoreMessages
:
const response = await gp.channels.fetchMoreMessages({
// ID канала
channelId: 123,
// Теги сообщений для фильтрации, через И (&)
tags: ['chat', 'trade'],
// сколько запросить за раз, макс. 100
limit: 100,
});
Чтобы дополнительно подгрузить личные сообщения по такому же запросу, есть удобный метод gp.channels.fetchMorePersonalMessages
:
const response = await gp.channels.fetchMorePersonalMessages({
// ID другого игрока
playerId: 123456,
// Теги сообщений для фильтрации, через И (&)
tags: ['chat', 'trade'],
// сколько запросить за раз, макс. 100
limit: 100,
});
Чтобы дополнительно подгрузить сообщения в фиде по такому же запросу, есть удобный метод gp.channels.fetchMoreFeedMessages
:
const response = await gp.channels.fetchMoreFeedMessages({
// ID игрока
playerId: 123456,
// Теги сообщений для фильтрации, через И (&)
tags: ['chat', 'trade'],
// сколько запросить за раз, макс. 100
limit: 100,
});
Чтобы получить результат вызова метода, можно подписаться на события:
gp.channels.on('fetchMoreMessages', (result) => {
result.items - массив списка сообщений
result.canLoadMore - можно ли подгрузить еще сообщения
});
Выполнение с ошибкой:
gp.channels.on('error:fetchMoreMessages', (err) => {
// завершен с ошибкой
});
Возможные ошибки приведены в таблице ниже:
базовые ошибки | сценарные ошибки |
---|---|
player_not_found | empty_channel_id |
project_not_found | channel_not_found |
origin_not_allowed | access_denied |
player_banned | |
internal_error |
Оставайтесь на связи
С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.
Сообщество GamePush в Telegram
: @gs_community.
Для ваших обращений e-mail
: [email protected]
Желаем вам успехов!