为了账号安全,请及时绑定邮箱和手机立即绑定

message.author.id 一直未定义

message.author.id 一直未定义

繁花不似锦 2023-06-15 15:57:38
我正在尝试为我的测验命令做一个记分牌,以一种人运行命令 !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......
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

我并没有真正深入研究您的代码,但在我看来,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


查看完整回答
反对 回复 2023-06-15
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信