有没有办法让我的机器人在我服务器的频道中检查 DM 和 post?

Is there a way to allow my bot to check DMs and post them in a channel in my server?

当有人向机器人发送 DM 消息时,我如何让我的机器人向特定频道发送消息?我在考虑 webhooks,但我不确定这是否是正确的方法。

是的,你可以。
现在怎么样了?

您必须首先收到 dm 消息。 Message has the property channel which represent the channel the the message was received in. This property can be of 3 different types, all extending from Channel 其中有一个 type 属性.
这个 type 属性 可以有 6 个值:

  • dm - DM 频道
  • group - 群组 DM 频道
  • 文本 - 公会文本频道
  • voice - 公会语音频道
  • category - 公会分类频道
  • news - 公会新闻频道
  • store - 公会商店频道

而从属性Message.channel有这样的指示:

Type: TextChannel or DMChannel or GroupDMChannel

因此,message.channel.type 有 3 个可能的结果:"dm""text""group"

一旦您检查了邮件是否是 dm,您必须将其复制到您的服务器。同样,Message 类型对我们有有趣的属性:contentattachments

处理附件的方式比内容本身要复杂一些。您必须查找类型 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);
  }
});