Почему мангуст крашит моего бота из-за этой ошибки?

avatar
ETLegacy
9 августа 2021 в 00:56
57
1
0

Мой бот каждый раз вылетает из-за этой ошибки при использовании мангуста и просто не знает, как это исправить.

0|Trinity  | [07:26:07] Cluster 0 | [Aug 08 2021 07:26:07] Rethink log: TypeError: Cannot read property 'autoRole' of null
0|Trinity  |     at /root/TrinityVPS/src/events/guildMemberAdd.js:7:20
0|Trinity  |     at immediate (/root/TrinityVPS/node_modules/mongoose/lib/model.js:4870:18)
0|Trinity  |     at process._tickCallback (internal/process/next_tick.js:61:11)
0|Trinity  | [07:26:07] Cluster Manager | cluster 0 disconnected
0|Trinity  | [07:26:07] Cluster Manager | cluster 0 died

Это мой код:

const Guild = require('../db/models/Guild');

exports.handle = async function (guild, member) {

    try {
        Guild.findOne({ guildID: guild.id }, function (err, doc) {
            if(doc.autoRole.enabled) {
                if(doc.autoRole.role) {
                    member.addRole(guild.roles.find(rl=> rl.name === doc.autoRole.role).id, "Trinity's autorole.")
                }
            }

            if(doc.logsChannel.enabled) {
                if(doc.logsChannel.channelID) {
                    this.bot.createMessage(doc.logsChannel.channelID, {
                        embed: {
                            author: {
                                name: `${member.username}#${member.discriminator}`,
                                icon_url: member.avatarURL
                            },
                            color: 0x2196F3,
                            timestamp: new Date(),
                            fields: [
                                {
                                    name: "Member Joined",
                                    value: `**${member.username}** has joined **${guild.name}**`
                                }
                            ]
                        }
                    })
                }
            }
        })
    } catch (err) { }
}

Это код автороли:

async function autoroleCommand (msg, args) {
    // const db = await this.db.getGuild(msg.channel.guild.id);
    // const prefix = db ? db.prefix : this.config.options.prefix;

    Guild.findOne({ guildID: msg.guildID }, function (err, doc) {
        let auto;

        if (!doc.autoRole.enabled) auto = `Status: deactivated.`;
        else auto = `Status: active.`

        let roleid;

        if (!doc.autoRole.role) roleid = `No role has being set.`
        else roleid = `Role is set to: ${doc.autoRole.role}`

        if (!args[0]) {
            return msg.channel.createMessage({
                embed: {
                    color: 0x2196F3,
                    description: `Autorole configuration for this server:\n${auto}\n${roleid}`
                }
            });
        }

        switch(args[0]) {

            case 'role': {
                var role = args.slice(1).join(' ');
                if(!msg.member.permissions.has('manageGuild') && !this.config.options.devs.includes(msg.author.id)) return msg.channel.createMessage('You are missing the `manageGuild` permission!<:notdone:334852376034803714>');
                if(role.length === 0) return msg.channel.createMessage('Role is a required argument!\nUsage: `autorole role <role>`');
                if(!msg.channel.guild.roles.find(rl => rl.name === role)) return msg.channel.createMessage(`I couldn't find the role \`${role}\`. <:notdone:334852376034803714>`);

                if(role === doc.autoRole.role) {
                    return msg.channel.createMessage('That role is already set as the autorole.')
                } else {
                    doc.autoRole.role = role;
                    doc.save();

                    msg.channel.createMessage('Role has been set! :ok_hand:');
                }
                break;
            }

            case 'disable': {
                if(!msg.member.permissions.has('manageGuild') && !this.config.options.devs.includes(msg.author.id)) return msg.channel.createMessage('You are missing the `manageGuild` permission!<:notdone:334852376034803714>');

                if(doc.autoRole.enabled === false) {
                    return msg.channel.createMessage('Autorole is already disabled.')
                } else {
                    doc.autoRole.enabled = false;
                    doc.save().then(async () => {
                        await msg.channel.createMessage('Successfully disabled autorole. To enable autorole: `autorole enable`')
                    })
                }
                break;
            }

            case 'enable': {
                if(!msg.member.permissions.has('manageGuild') && !this.config.options.devs.includes(msg.author.id)) return msg.channel.createMessage('You are missing the `manageGuild` permission!<:notdone:334852376034803714>');

                if(doc.autoRole.enabled === true) {
                    return msg.channel.createMessage('Autorole is already true.')
                } else {
                    doc.autoRole.enabled = true;
                    doc.save().then(async () => {
                        await msg.channel.createMessage('Successfully enabled autorole. To disable autorole: `autorole disable`')
                    })
                }
                break;
            }

            case 'help':
                msg.channel.createMessage('To set autorole, use the following command: `autorole role <role>`\nTo enable autorole: `autorole enable`\nTo disable autorole: `autorole disable`')
        }
    })
}

Я не понимаю, так как в моем коде я обязательно проверил, включен ли он, затем продолжает, но он просто падает. Он также делает это для моего doc.logsChannel.channelID и продолжает сбой моего бота. Как я могу это исправить?

Источник

Ответы (1)

avatar
Wodlo
9 августа 2021 в 20:09
1

Проблема в том, что doc является null, я предполагаю, что не существует Guild с guildID чем бы ни было msg.guildID.

Затем, поскольку doc равно null, в любом месте вашего кода, где вы выполняете doc.autorole, будет ошибка с Cannot read property 'autoRole' of null.

В основном вам нужно решить, что вы хотите делать, когда doc равно null (когда гильдия с данным guildID не найдена). Возможно, вы просто хотите вернуться с каким-то сообщением об ошибке. Что бы вы ни решили, вы не можете получить доступ к свойствам со значением null .

ETLegacy
10 августа 2021 в 03:16
0

Хорошо, это имеет смысл. Должен ли я создать гильдию с помощью чего-то вроде: ``` const newGuild = await Guild.create({ // тогда все, что у меня есть в моей схеме)} ```