Node.js + Discord.js:无法读取未定义的属性“类”

Posted

技术标签:

【中文标题】Node.js + Discord.js:无法读取未定义的属性“类”【英文标题】:Node.js + Discord.js: Cannot read property 'class' of undefined 【发布时间】:2020-12-01 09:36:01 【问题描述】:

我对变量有疑问。我正在开发一个 Discord RPG 机器人,但遇到了玩家数据问题。当我使用控制台启动机器人并发送消息以构建我的统计信息时,控制台将返回

C:\Users\willi\OneDrive\Desktop\discord-bot\homies.js:395
                    player[id].class = reply;
                                     ^

TypeError: Cannot set property 'class' of undefined

我使用下面的代码。这是整个程序的一个片段。这需要的所有文件都存在。

const Discord = require('discord.js');
const  prefix, token  = require('./config.json');
const client = new Discord.Client();
const fs = require('fs');

const player = fs.readFileSync('user.json', 'utf-8');

client.on('message', message => 
    var id = message.author.id;

    if (player[id] === undefined) 
            player[id] = 
                username: message.author.username,
                class: undefined,
                xp: 0,
                lvl: 1,
                xpReq: 100 + this.lvl * 75,
                hp: 0,
                maxHp: 0,
                str: 0,
                def: 0,
                int: 0,
                dex: 0,
                luck: 0,
                mana: 0,
                maxMana: 0,
                equip: 
                    top: undefined,
                    bottom: undefined,
                    hand: undefined,
                    acc1: undefined,
                    acc2: undefined
                ,
                spellcaster: undefined,
                spells: []
            ;
            var authorVerifier = m => m.author.id === id;
            var classAnswer = message.channel.createMessageCollector(authorVerifier,  time: 300000, max: 1 );
            var classInterpreter = function(reply) 
                if (reply !== 'fighter' && reply !== 'adventurer' && reply !== 'mage'
                && reply !== 'healer' && reply !== 'rouge' && reply !== 'tank') 
                    return message.channel.send('That was not a valid class!');
                
                else 
                    player[id].class = reply;
                    fs.writeFileSync('user.json', player[id], (err) => 
                        if (err) throw err;
                    );
                
            
        classAnswer.on('collect', m => classInterpreter(m.content));
    
);

我尝试用message.author.id 替换id,但无济于事。请帮忙!

【问题讨论】:

【参考方案1】:

您可以通过将播放器数组传递给classInterpreter 来解决它 函数,并用它来设置player[id].class的值。

classAnswer.on('collect', m => classInterpreter(m.content, player));

【讨论】:

以上是关于Node.js + Discord.js:无法读取未定义的属性“类”的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript、Discord.js、Node.js 类型错误:无法读取未定义的属性“执行”

使用 Node.js、Mongoose 和 Discord.js 的未定义错误 [无法读取未定义的属性]

Node.js Discord.js UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“calculatedPosition”

node.js / discord.js:TypeError:无法读取null的属性'setPresence'

Discord.js 的欢迎消息 - “无法读取未定义的属性 'get'”

Discord.js Node.js |无法从“导出”的 JS 文件访问 JSON 文件