Есть ли способ позволить моему боту проверять DM и публиковать их в канале на моем сервере? - PullRequest
1 голос
/ 01 февраля 2020

Я хочу, чтобы мой бот хотел получить DM и затем загрузить его в канал на моем сервере, как бы я go сделал это?

1 Ответ

1 голос
/ 03 февраля 2020

Да, вы можете.
А теперь как?

Сначала вы должны получить сообщение dm. Message имеет свойство channel, представляющее канал, в котором было получено сообщение. Это свойство может быть трех различных типов, все из которых имеют расширение Channel, которые имеют свойство type.
Это свойство type может иметь 6 значений:

  • dm - канал DM
  • group - канал DM группы
  • text - текстовый канал гильдии
  • voice - голосовой канал гильдии
  • category - канал категории гильдии
  • news - канал новостей гильдии
  • store - канал магазина гильдии

и из свойства Message.channel есть такое указание:

Тип: TextChannel или DMChannel или GroupDMChannel

Итак, у нас есть 3 возможных результата для message.channel.type: "dm", "text", "group".

После того, как вы проверили, является ли сообщение дм или нет, вы должны скопировать его на свой сервер. Опять же, тип Message имеет интересные для нас свойства: content и attachments.

Способ обработки вложений немного сложнее, чем сам контент. Вам нужно будет найти тип MessageAttachment и использовать его свойство как url.

Но для content это действительно просто, это просто строка. Таким образом, мы просто должны получить наш канал и отправить сообщение.

В приведенном ниже примере я получаю гильдию и сервер, используя их ID. Вы можете жестко закодировать их, поместить в файл json, в базу данных или получить их в своем сообщении и сделать команду dm, например:
+send ID a message with many words.

let channelID = "X";
let guildID = "X";
client.on('message', (message) => {
  if(message.channel.type === 'dm'){
    let embed = new Discord.RichEmbed()
    .setAuthor(client.guilds.get(guildID).members.get(message.author.id).displayName, message.author.displayAvatarURL)
    .setColor('#FAA')
    .setDescription(message.content);
    client.channels.get(channelID).send(embed);
  }
});

enter image description here
enter image description here

...