javascript - 当我向我的机器人发送 DM 时,事件 messageCreate 没有触发/发射(discord.js v13)
问题描述
我制作了这段代码来记录发送到我的机器人的 DM:
client.on('messageCreate', async message => {
if (message.author.bot) return;
const attachment = message.attachments.first()
if (message.channel.type === 'DM') {
console.log(message.content)
const dmLogEmbed = new MessageEmbed()
.setColor("RANDOM")
.setTitle(`${message.author.tag} dmed the bot and said: `)
.setDescription(message.content)
.setFooter(`User's id: ${message.author.id}`)
if (message.attachments.size !== 0) {
dmLogEmbed.setImage(attachment.url)
}
client.channels.fetch("852220016249798756").then((channel) => {
channel.send({ embeds: [dmLogEmbed] })
})
}
});
但是当更新到 discord.js v13 时它不再起作用了,因为我理解唯一的变化是“dm”频道类型不再是“dm”而是“DM”,所以我在我的代码中更改了它,但它仍然无法正常工作,我真的不知道为什么。
解决方案
确保您DIRECT_MESSAGES
符合客户的意图。
const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "DIRECT_MESSAGES"] });
Discord API v8 中有一个重大变化。参考请看这里。
在 Discord API v8 及更高版本上,DM 通道不会发出
CHANNEL_CREATE
事件,这意味着 discord.js 无法自动缓存它们。为了让您的机器人接收 DM,CHANNEL
必须启用部分。
所以我们也需要启用部分功能CHANNEL
。请记住,在处理部分数据时,您通常希望获取数据,因为它不完整。但是,如果您正在使用该事件,这似乎不是您的情况messageCreate
。收到的message
不偏也不message.channel
。要检查某些内容是否不完整,您可以使用该.partial
属性。例如Message.partial
或Channel.partial
。
const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "DIRECT_MESSAGES"], partials: ["CHANNEL"] });
现在它应该像旧的 discord.js v12 一样工作。
推荐阅读
- node.js - 如何使用带有多个过滤器的猫鼬分页 v2
- arrays - 如何在 OpenRefine 中过滤大量 JSON?
- database - 对于 10 万条记录,是否可以提高 Room 数据库中的行更新速度?
- excel - 使用宏的带有通配符的高级自动过滤器的语法问题
- field - 如何在 Magento 2.3.6 的客户注册表中添加默认电话字段
- android - React native - 组装发布 apk
- dll - 有什么方法可以在 NSIS 中调用 .net(版本 4)dll
- apache - apache 模块 mod_defensible 有日志记录吗?
- flutter - 如何在颤动中检测屏幕录制?
- python - pandas read_excel 添加了原始 xlsx 文件中未出现的小数秒