[英]Node.js + Discord.js: Cannot read property 'class' of undefined
I have a problem with variables.我对变量有疑问。 I am working on a Discord RPG bot, but ran into a problem with player data.
我正在研究 Discord RPG 机器人,但遇到了玩家数据问题。 When I start the bot up with the console and sent a message to build my stats, the console would return
当我使用控制台启动机器人并发送消息以构建我的统计信息时,控制台将返回
C:\Users\willi\OneDrive\Desktop\discord-bot\homies.js:395
player[id].class = reply;
^
TypeError: Cannot set property 'class' of undefined
I use the below code.我使用下面的代码。 This is a fragment of the whole program.
这是整个程序的一个片段。 All files required by this exists.
这需要的所有文件都存在。
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));
}
});
I tried replacing id
with message.author.id
, but to no avail.我尝试用
message.author.id
替换id
,但无济于事。 Please help!请帮忙!
You can solve it by passing the player array to the
classInterpreter
function, and use that to setplayer[id].class
value.您可以通过将播放器数组传递给
classInterpreter
function 来解决它,并使用它来设置player[id].class
值。
classAnswer.on('collect', m => classInterpreter(m.content, player));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.