Javascript Discord.js | TypeError:无法读取属性';禁止';空的
目的:在创建频道时删除频道,然后禁止创建频道的成员 代码:Javascript Discord.js | TypeError:无法读取属性';禁止';空的,javascript,discord,discord.js,Javascript,Discord,Discord.js,目的:在创建频道时删除频道,然后禁止创建频道的成员 代码: bot.on('channelCreate', async (channel, member) => { if (!channel.guild) return; const audit = (await channel.guild.fetchAuditLogs()).entries.first(); if (audit.action === 'CHANNEL_
bot.on('channelCreate', async (channel, member) => {
if (!channel.guild)
return;
const audit = (await channel.guild.fetchAuditLogs()).entries.first();
if (audit.action === 'CHANNEL_CREATE')
if (audit.executor.id === '833382653779509288')
return;
channel.delete();
channel.guild.member(executor).ban({reason: 'aaaaaa'})
})`
结果:频道被删除,但用户未被禁止
以下是错误:
(node:8388) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'ban' of null
at Client.<anonymous> (C:\Users\Utilisateur\Desktop\discordbot4\main.js:30:49)
at processTicksAndRejections (internal/process/task_queues.js:82:5)
(node:8388) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by
rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:8388) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(节点:8388)未处理的PromisejectionWarning:TypeError:无法读取null的属性“ban”
在客户端。(C:\Users\usilisateur\Desktop\discordbot4\main.js:30:49)
在处理和拒绝时(内部/process/task_queues.js:82:5)
(节点:8388)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者源于
拒绝未使用.catch()处理的承诺。(拒绝id:1)
(节点:8388)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。
有人能帮我纠正这个错误吗?几件事:
帮会.会员
。按相反的顺序做User.ban()
返回一个Promise
对象,因此您应该等待它的结果。()
bot.on('channelCreate'),
没有任何成员
参数,只有频道
()fetchAuditLogs()
您可以使用选项,例如选项。将限制设置为1。这样,您就不需要使用.first()
方法(应该快一点)。()
bot.on('channelCreate',异步(通道)=>{
如果(!channel.guild)返回;
常量审计=
(wait channel.guild.fetchAuditLogs()).entries.first();
如果(
audit.action==='CHANNEL\u CREATE'&&
audit.executor.id==“833382653779509288”
)返回;
频道。公会。成员(执行者)。禁令({
理由:“AAAAA”
});
等待通道。删除();
});
我从来没有使用过Discord.js
,这就是为什么我不愿意过多地修改代码
我刚刚注意到,与代码相比,您的错误看起来如何,我想我知道问题所在。
错误显示,
无法读取null的属性“ban”
,我认为这意味着channel.guild.member(executor)
正在返回null
。查看,我可以看到.member(user)
函数返回GuildMember
,如果找到,则返回null
所以从我所能看出,channel.guild.member(executor)
是空的……看来executor
实际上并不是你想象的那样。在你的channel.guild.member(executor)中executor
的范围是什么
?之前您使用了audit.executor
。您是否有一些表示用户对象的公共变量executor
?audit.executor.id用于反通道保护忽略指定的id。我想我应该在channel.guild.member(executor)中使用audit.executor.id。(我对js很陌生,刚从lua出来)这应该是这样吗?``bot.on('channelCreate',async channel=>{if(!channel.guild)return;const audit=(wait channel.guild.fetchAuditLogs().then(audit=>options.limit(1)).catch(console.error)if(audit.action==='channel\u CREATE'))如果(audit.executor.id=='409699691408785411')返回;(等待channel.guild.member(audit.executor.id).ban({reason:'aaaaaa'})channel.delete();})``首先,谢谢你的回答,我尝试了代码,不幸的是,这不起作用。我更改了channel.guild.member(executor).ban到channel.guild.member(audit.executor.id)。ban但这也不起作用。你对此有什么答案吗?是的,对不起,我以前从未使用过discord.js。我基本上只是复制@Gaben的建议并将其转换成代码形式。@Mengo_u我刚刚注意到你的错误并更改了我的答案。