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

Сообщения

Обзор

Игроки в канале могут обмениваться сообщениями. При этом возможно реализовать отправку личного сообщения, а также сообщений в фид или канал. Реализованы методы, которые позволяют изменять и удалять отправленные сообщения. С помощью сообщений также может быть реализована отправка подарков игрокам или даже пошаговое сражение.

В этом разделе рассматриваются методы для работы с сообщениями. Сервис позволяет отправлять, изменять, удалять сообщения и многое другое:

  • gp.channels.sendMessage - отправка сообщения в канал +1 Request
  • gp.channels.sendPersonalMessage - отправка личного сообщения игроку +1 Request
  • gp.channels.sendFeedMessage - отправка сообщения в фид +1 Request
  • gp.channels.editMessage - изменить отправленное сообщение +1 Request
  • gp.channels.deleteMessage - удалить отправленное сообщение +1 Request
  • gp.channels.fetchMessages - получить список сообщений в выбранном канале +1 Request
  • gp.channels.fetchMoreMessages - дополнительно подгрузить сообщения в канале +1 Request
  • gp.channels.fetchPersonalMessages - получить список личных сообщений +1 Request
  • gp.channels.fetchMorePersonalMessages - дополнительно подгрузить личные сообщения +1 Request
  • gp.channels.fetchFeedMessages - получить список сообщений в фиде игрока +1 Request
  • gp.channels.fetchMoreFeedMessages - дополнительно подгрузить сообщения в фиде +1 Request

Отправка сообщения

+1 Request

Для отправки сообщения Hello! в канал channelId: 123 используется метод gp.channels.sendMessage:

gp.channels.sendMessage({
// ID канала
channelId: 123,
// текст сообщения
text: 'Hello!',
// теги сообщения для удобной фильтрации, необязательно
tags: ['chat', 'trade'],
});

Отправка личного сообщения и в фид игрока

+1 Request

Существует возможность отправки личного сообщения игроку и отправки сообщения в фид.

tip

Фид - публичный канал игрока, в который может отправить сообщение любой участник канала

Для отправки личного сообщения 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_foundempty_messageempty_channel_id
project_not_foundaccess_deniedchannel_not_found
origin_not_allowedmessage_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;
// Назначение сообщения: 'CHANNEL' | 'PERSONAL' | 'FEED'
message.target;
});

Вы можете обратить внимание на message.target:

  • CHANNEL: в канале появилось новое сообщение
  • PERSONAL: игроку написали в личные сообщения
  • FEED: игроку написали в фид

Изменение сообщения

+1 Request

Изменение отправленного сообщения реализуется с помощью метода 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_foundchannel_message_not_found
project_not_foundempty_message
origin_not_allowedaccess_denied
player_bannedmessage_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;
});

Удаление сообщения

+1 Request

Удаление отправленного сообщения реализуется с помощью метода gp.channels.deleteMessage по идентификатору messageId:

gp.channels.deleteMessage({ messageId: '638d73ee28520fc3b551a8ac' });

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

gp.channels.on('deleteMessage', () => {
// успешно удалено
});

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

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

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

базовые ошибкисценарные ошибки
player_not_foundchannel_message_not_found
project_not_foundaccess_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;
});

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

+1 Request
tip

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

Получить список сообщений в выбранном канале можно с помощью метода 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_foundempty_channel_id
project_not_foundchannel_not_found
origin_not_allowedaccess_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_foundempty_channel_id
project_not_foundchannel_not_found
origin_not_allowedaccess_denied
player_banned
internal_error

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

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

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

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

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