类型错误:无法读取空(读取"权限")不和谐的属性.js V13



我试图做一个反链接机器人程序,只有拥有VIEW_AUDIT_LOG权限的人才能发送链接,这是我的代码:

client.on("messageCreate", message => {
const { member } = message;
let blacklisted = ['http://', 'www.', 'https://'];
let foundInText = false;
if(!member.permissions.has(Permissions.FLAGS.VIEW_AUDIT_LOG)) {
for (var i in blacklisted) {

if (message.content.toLowerCase().includes(blacklisted[i].toLowerCase())) foundInText = true;
}
if (foundInText) {
const logembed = new MessageEmbed()
.setColor("DARK_AQUA")
.addField(' with message :', ` ${message.content} `, true)

if(!message.member.roles.cache.has("929434049011941386")) {
message.guild.channels.cache.get('941704496185221221').send({ content: `<@${message.author.id}> tried to send links in <#${message.channel.id}>`, embeds: [logembed] });;
message.delete();
message.channel.send("No links here, " + `${message.author}`);
}
}
}
});

但当他删除一条带有链接的消息时,会出现这个错误:

if(!member.permissions.has(Permissions.FLAGS.VIEW_AUDIT_LOG)) {
^
TypeError: Cannot read properties of null (reading 'permissions')

好吧,这是我的猜测。。。。您已两次或多次点击此事件处理程序。。。第一次是用户键入的消息。如果你console.log(message.member),你会得到他们的会员信息。第二次,您将获得另一个事件,即作为处理程序发送的消息。

因此,简单的解决方案是在该事件处理程序的顶部或附近添加类似的内容:

if (message.author.bot) return;

这基本上是测试是否是一个机器人在调用你的活动。这也是一种良好的卫生习惯,可以确保你不会接受/对其他机器人做出反应,这可能会导致你可能不想要的垃圾邮件。

最新更新