我最近为我的 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.');
}
}
}
});
我希望有人能帮助我