首页 > 解决方案 > 无法读取未定义的属性“标签”

问题描述

我最近为我的 Discord 服务器制作了一个 Discord 机器人,它在将特定消息输入聊天时基本上会计算一个数字。为此,我还做了一个排行榜,看看谁得分最高。直到最近,该机器人运行良好,但现在它在尝试获取排行榜时总是崩溃,并且在控制台中我收到以下错误。

TypeError: Cannot read property 'tag' of undefined
    at Client.<anonymous> (C:\Users\***\Desktop\DiscordBot\bot.js:71:61)
    at Client.emit (events.js:219:5)
    at MessageCreateAction.handle (C:\Users\***\Desktop\DiscordBot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (C:\Users\***\Desktop\DiscordBot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (C:\Users\***\Desktop\DiscordBot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (C:\Users\***\Desktop\DiscordBot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (C:\Users\***\Desktop\DiscordBot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
    at WebSocket.onMessage (C:\Users\***\Desktop\DiscordBot\node_modules\ws\lib\event-target.js:125:16)
    at WebSocket.emit (events.js:219:5)
    at Receiver.receiverOnMessage (C:\Users\***\Desktop\DiscordBot\node_modules\ws\lib\websocket.js:797:20)

我已经做了一些研究,发现“标签”用于在排行榜上打印不和谐用户的姓名,而不是他的 ID。现在的问题是我不能只删除“标签”,因为那样你只能在排行榜中看到 ID,而没有人知道他的 ID。

如果有人需要,这是我的代码。

    if (!table['count(*)']) {
        // If the table isn't there, create it and setup the database correctly.
        sql.prepare("CREATE TABLE scores (id TEXT PRIMARY KEY, user TEXT, guild TEXT, points INTEGER);").run();
        // Ensure that the "id" row is always unique and indexed.
        sql.prepare("CREATE UNIQUE INDEX idx_scores_id ON scores (id);").run();
        sql.pragma("synchronous = 1");
        sql.pragma("journal_mode = wal");
    }
      // And then we have two prepared statements to get and set the score data.
    client.getScore = sql.prepare("SELECT * FROM scores WHERE user = ? AND guild = ?");
    client.setScore = sql.prepare("INSERT OR REPLACE INTO scores (id, user, guild, points) VALUES (@id, @user, @guild, @points);");
    console.log('Ready!');
});

client.on('message', message => {
    if (message.author.bot) return;
    if (message.guild) {
        if (message.content === '!aulaner') {
            let score = client.getScore.get(message.author.id, message.guild.id);
            if (!score) {
                score = {
                    id: `${message.guild.id}-${message.author.id}`,
                    user: message.author.id,
                    guild: message.guild.id,
                    points: 0,
            }
        }
            score.points++;
            
            
            //const user_rank = sql.prepare("SELECT * FROM (SELECT *, RANK() OVER(ORDER BY points DESC) AS rank FROM scores) WHERE user = ?")
            
            //const user_rank = sql.prepare("SELECT * FROM scores ORDER BY points WHERE user = ?")
            
            client.setScore.run(score);
            //var x = score.points % 24
            //if (x != 0){
                message.reply('Sie haben ihr ' +score.points+ '. Aulaner geöffnet <:aulanergrab:739469308165619802>');
            //} else if (x == 0) {
            //  score.kisten++;
            //  message.reply('Glückwunsch du hast deinen ' +score.kisten+ '. Kasten Aulaner Ezi geöffnet! :partying_face:');
            //}
            console.log(score);
            //console.log(score.rowid);
            //console.log(rank);
            //console.log(user_rank.rank);
            
        }
        if(message.content === "!aulanerboard") {
            const top10 = sql.prepare("SELECT * FROM scores WHERE guild = ? ORDER BY points DESC LIMIT 10;").all(message.guild.id);

            // Now shake it and show it! (as a nice embed, too!)
            const embed = new Discord.MessageEmbed()
                .setTitle("Aulanerboard")
                .setAuthor(client.user.username, client.user.avatarURL())
                .setDescription("Unsere Top 10 Aulaner säufer")
                .setColor(0x00AE86);

            for(const data of top10) {
            console.log(data);
            embed.addFields({ name: client.users.cache.get(data.user).tag, value: `${data.points} Aulaner geöffnet` });
            }   
            return message.channel.send({embed});
        }
        
        if(message.content === "!aulaneropened") {
            let score = client.getScore.get(message.author.id, message.guild.id);
            if(score == null){
                message.reply('Sie haben bis jetzt noch kein Aulaner geöffnet');
            } else {
                message.reply('Sie haben bis jetzt ' +score.points+ ' Aulaner geöffnet.');
            }
        }
    }
});

我希望有人能帮助我

标签: javascriptdiscorddiscord.jsbetter-sqlite3

解决方案


推荐阅读