Ошибка типа: не удается прочитать свойство ‘ban’ null | Discord.js

#discord #discord.js

#Discord #discord.js

Вопрос:

Цель: запретить неавторизованных пользователей, которые удаляют участников с моего сервера.

Код:

 client.on("guildMemberRemove", async member => {

    const FetchingLogs = await member.guild.fetchAuditLogs({
        limit: 1,
        type: "MEMBER_KICK",
    });

    const kickLog = FetchingLogs.entries.first();

    if (!kickLog) {
        return console.log(red(`${member.user.tag} was kicked in ${member.guild.name} but nothing was registered in the audit log...`));
    }

    const { executor, target, createdAt } = kickLog

    if (target.id === member.id) {
        console.log(greenBright(`${member.user.tag} got kicked in ${member.guild.name}, by ${executor.tag}`));
    } else if (target.id === executor.id) {
        return
    }

    if (executor.id !== client.user.id) {
        member.guild.member(executor).ban({
            reason: `Unauthorised Kick`
        }).then(member.guild.owner.send(`**Unauthorised Kick By:** ${executor.tag} n**Victim:** ${target.tag} n**Time:** ${createdAt.toDateString()} n**Sentence:** Ban.`)).catch();
    }

})
 

Результат: он запрещает исполнителя, но все равно выдает эту ошибку:

 (node:10272) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'ban' of null
 

Не могли бы вы рассказать мне, почему это происходит и что я мог бы сделать, чтобы устранить эту ошибку. Вся помощь приветствуется 😉

Ответ №1:

Это оскорбительная строка:

 member.guild.member(executor).ban(....
 

Вы предоставляете member.guild.member объекту-исполнителю, и он возвращает null, затем он пытается вызвать запрет функции для нулевого объекта, и вы получаете ошибку.

Может быть, попробуйте отправить ему executor.id вместо этого, вот так:

 member.guild.member(executor.id).ban
 

Комментарии:

1. Это работает, и он выполняет запрет, но все равно выдает эту ошибку: (node:1480) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'ban' of null

Ответ №2:

Если вы хотите запретить кому-либо членство в гильдии, вы можете сделать это, написав:

 member.guild.members.ban(executor.id, { reason: "/* Your reason */" })...
 

Источники:

Комментарии:

1. Это работает, и он выполняет запрет, но все равно выдает эту ошибку: (node:1480) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'ban' of null

2. Можете ли вы предоставить свой новый код? Потому что это не должно вызывать эту ошибку

3. Это буквально то, что вы мне дали: if (executor.id !== client.user.id) { member.guild.member(executor.id).ban({ reason: `Unauthorised Kick` }).then(member.guild.owner.send(`**Unauthorised Kick By:** ${executor.tag} n**Victim:** ${target.tag} n**Time:** ${createdAt.toDateString()} n**Sentence:** Ban.`)).catch(); }

4. вы совершили ту же ошибку. if (executor.id !== client.user.id) { member.guild.**member(executor.id)**.ban({ . я пометил это знаком * . Вам нужно изменить его на: members.ban(executor.id ...