有没有办法让我的机器人检查 DM 并将它们发布到我服务器的频道中?

Posted

技术标签:

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

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

【问题讨论】:

您的意思是在 discord 上接收 dm 并将其发送到您的 discord 服务器之一? 我希望它接收 DM,并将其发送到我服务器中的频道。 您想从哪里接收 DM? 来自机器人 DM。 你检查过 webhook 吗? 【参考方案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);
  
);

【讨论】:

以上是关于有没有办法让我的机器人检查 DM 并将它们发布到我服务器的频道中?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用maven插件将jar解压到我的项目文件夹并将它们作为java文件获取[关闭]

Discordbot 读取 DM 消息并记录它们

转发DM消息到公会频道

有没有办法将“%”符号添加到我在 Oracle SQL 中的透视结果中并将它们转换为 to_char

消息收集器有没有办法在 Discord.js 中收集 DM?

Discord.py 机器人:如何让我的不和谐机器人向我发送对用户在 DM 中使用的命令的响应,例如进行调查?