node.js - 有没有办法让我的机器人检查 DM 并将它们发布到我服务器的频道中?
问题描述
当有人 DM 机器人时,我如何让我的机器人向特定频道发送消息?我在考虑 webhook,但我不确定这是否是正确的方法。
解决方案
是的你可以。
现在怎么办?
您必须首先获得 dm 消息。Message
具有表示接收消息的通道的channel
属性。该属性可以是 3 种不同的类型,所有类型都扩展自Channel
具有type
属性。
该type
属性可以有 6 个值:
- dm - DM 频道
- group - 组 DM 频道
- text - 公会文本频道
- voice - 公会语音频道
- 类别 - 公会类别频道
- 新闻 - 公会新闻频道
- store - 公会商店频道
并且从属性Message.channel
上有这样的迹象:
类型:
TextChannel
或DMChannel
或GroupDMChannel
所以这里我们有 3 个可能的结果message.channel.type
:"dm"
, "text"
, "group"
。
一旦您检查了该消息是否为 dm,您必须将其复制到您的服务器。同样,该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);
}
});
推荐阅读
- java - 如何使用JAVA异步执行存储过程
- java - 当我从 Excel 表中读取 inf 时,我无法按顺序打印 doc 文件中的信息
- android - Android 资源 $NotFoundException:资源 ID #0x7f070075
- excel - 在透视值内的excel中排序
- python - 为什么 Tokenizer 跟踪的单词比 num_words 多?
- python - PyINIT 没有被调用
- java - Maven 无法处理 Unicode 字符
- drupal - 为什么在 Drupal 8 中卸载时不会自动删除自定义模块中的配置
- validation - 停止光标跳到行尾 - SAP UI5
- c++ - 如何取消删除子类中的构造函数?