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()
    方法(应该快一点)。()
  • 您的代码,但包含来自@Gaben的(大部分)建议

    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我刚刚注意到你的错误并更改了我的答案。