“ TypeError:无法读取未定义的属性'url'”和错误的命令行为。 -discord.js

发布时间:2020-07-07 15:17

我一直在研究“ artwall ”机器人,基本上是写入.json文件命令。我希望该机器人获取第一个消息附件,获取它的URL并将其保存到save.json

如果存在附件,则一切正常,但是如果命令以url或根本没有任何参数启动,则会出现以下错误:

TypeError: Cannot read property 'url' of undefined

这是命令代码:

const fs = require('fs');
// Export code for command.
module.exports = {
    // In name type name of this command to execute it.
    name: 'done',
    // In description type description.
    description: 'N/A',
    // In execute() {...} circle brackets type execution parameters.
    execute(client, message, args) {
        // Type command code here.
        const safety = JSON.parse(fs.readFileSync('./assets/save.json', 'utf8'));
        const currentdeg = JSON.parse(fs.readFileSync('./assets/currentDEBUG.json', 'utf8'));
        // const attache = JSON.parse(fs.readFileSync('./assets/attach.json', 'utf8'));
        if(safety == 'no') {
            if(currentdeg == 'not claimed') {
                message.channel.send('The wall is not claimed yet. Claim it by using `wol claim`');
            }
            else if(currentdeg == message.author.id) {
                const Attachment = (message.attachments).array();
                console.log(Attachment);
                if (Attachment == []) {
                    if (!args) {
                        message.reply('there\'s no image present. Make sure you attached one message or used url.');
                        return;
                    }
                    else {
                        fs.writeFile('assets/currentDEBUG.json', JSON.stringify('not claimed', null, 2), err => {
                        // Checking for errors
                            if (err) throw err;
                            console.log('Done writing (claim)');
                        });
                        fs.writeFile('assets/attach.json', JSON.stringify(args[0], null, 2), err => {
                        // Checking for errors
                            if (err) throw err;
                            console.log('Done writing (attache)');
                        });
                    }
                }
                // stuff
                fs.writeFile('assets/currentDEBUG.json', JSON.stringify('not claimed', null, 2), err => {
                    // Checking for errors
                    if (err) throw err;
                    console.log('Done writing (claim)');
                });
                fs.writeFile('assets/attach.json', JSON.stringify(Attachment[0].url, null, 2), err => {
                    // Checking for errors
                    if (err) throw err;
                    console.log('Done writing (attache)');
                });
            }
            else {
                // stuff
                message.channel.send('The artwall was claimed by someone else already. Wait for them to finish their work.');
            }
        }
        else {
            message.channel.send('The artwall is locked right now. Please wait for the next event!');
        }
    },
};

谢谢!

回答1