首页 > 解决方案 > 有没有办法让我的机器人检查 DM 并将它们发布到我服务器的频道中?

问题描述

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

标签: node.jsbotsdiscorddiscord.jsdm

解决方案


是的你可以。
现在怎么办?

您必须首先获得 dm 消息。Message具有表示接收消息的通道的channel属性。该属性可以是 3 种不同的类型,所有类型都扩展自Channel具有type属性。
type属性可以有 6 个值:

  • dm - DM 频道
  • group - 组 DM 频道
  • text - 公会文本频道
  • voice - 公会语音频道
  • 类别 - 公会类别频道
  • 新闻 - 公会新闻频道
  • store - 公会商店频道

并且从属性Message.channel上有这样的迹象:

类型:TextChannelDMChannelGroupDMChannel

所以这里我们有 3 个可能的结果message.channel.type"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);
  }
});

在此处输入图像描述
在此处输入图像描述


推荐阅读