message.author.id 一直未定义

我正在尝试为我的测验命令做一个记分牌,以一种人运行命令 !quiz 并回答问题的方式。如果问题回答正确,在一个名为 Storage 的特定文件中,她会得到一个额外的分数,从而为正确回答的数量制作一个记分牌。

作为参考,这是我的代码

//Base...

const Discord = require('discord.js');

const client = new Discord.Client();


//Quiz event...

client.on('message', message => {


    if (!message.content.startsWith(prefix) || message.author.bot) return;

    if (message.channel instanceof Discord.DMChannel) return message.channel.send('Aqui não podem ser executado comandos!')

        .then(msg => {

            msg.delete({ timeout: 5000 })

        })

    const quiz = require('./quiz.json');

    const item = quiz[Math.floor(Math.random() * quiz.length)];


    const args = message.content.slice(prefix.length).trim().split(/ +/);

    const command = args.shift().toLowerCase();


    const filter = response => {

        return item.answers.some(answer => answer.toLowerCase() === response.content.toLowerCase());

    };


    if (message.content === '!quiz')

        message.channel.send(item.question).then(() => {

            const userData = fs.readdirSync('./Storage').filter(file => file.endsWith('.json'));


            fs.writeFile('Storage/userData.json', JSON.stringify(), (err) => {

                if (err) console.error(err);

            })


            if (!userData[message.author.id]) userData[message.author.id] = {

                rightQuizAnswers: 0

            

                });

        });


})

测验工作正常,唯一的问题是我支持的文件是这样存储点的:


{(the author's ID:{rightQuizAnswers:(number of questions guessed correct)}}

只得到回应:


undefined

甚至把它变成一个更糟糕的问题,当我用我的 ID 替换 'message.author.id' 以便它会添加一个点到 rightQuizAnswers 时,它仍然返回undefined......


繁花不似锦
浏览 137回答 1
1回答

POPMUISE

我并没有真正深入研究您的代码,但在我看来,JSON 文件可能有问题,该文件至少应包含{}起始内容,或者文件读取/保存有问题。我试图优化读取/保存,其他一切都是一样的,所以这里是代码:const userDataPath = path.resolve(__dirname, './Storage/userData.json');function loadUserData() {  return JSON.parse(fs.readFileSync(userDataPath).toString());}function saveUserData(userData) {  fs.writeFileSync(userDataPath, JSON.stringify(userData, null, 2));}message.channel.awaitMessages(filter, { max: 1, time: 30000, errors: ['time'] })  .then(collected => {    const userData = loadUserData();    message.channel.send(`${collected.first().author} acertou!`);    if (!userData[message.author.id]) {      userData[message.author.id] = {        rightQuizAnswers: 0      };    }    userData[message.author.id].rightQuizAnswers += 1;    saveUserData(userData);  })  .catch(collected => {    message.channel.send('Parece que ninguém acertou :(  (Bando de buro)');  });在其他方面,如果您还没有这样做,您应该像需要 fs 一样需要“路径”。const fs = require('fs');const path = require('path'); // Add this
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript