【问题标题】:Is there a way to allow my bot to check DMs and post them in a channel in my server?有没有办法让我的机器人检查 DM 并将它们发布到我服务器的频道中?
【发布时间】:2020-05-17 16:26:03
【问题描述】:

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

【问题讨论】:

  • 您的意思是在 discord 上接收 dm 并将其发送到您的 discord 服务器之一?
  • 我希望它接收 DM,并将其发送到我服务器中的频道。
  • 您想从哪里接收 DM?
  • 来自机器人 DM。
  • 你检查过 webhook 吗?

标签: node.js bots discord discord.js dm


【解决方案1】:

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

你必须先得到 dm 消息。 Message 具有属性 channel,它表示接收消息的通道。该属性可以是 3 种不同的类型,均从具有 type 属性的 Channel 扩展而来。
这个type 属性可以有 6 个值:

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

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

类型:TextChannelDMChannelGroupDMChannel

因此,对于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);
  }
});


【讨论】:

    猜你喜欢
    • 2021-03-11
    • 2020-06-30
    • 2021-07-27
    • 2019-09-29
    • 2021-08-21
    • 2021-01-23
    • 2021-07-06
    • 2019-12-31
    • 2020-11-22
    相关资源
    最近更新 更多