問題描述
我正在制作一個 discord.js 機(jī)器人,并在其中放入了排行榜命令.
I'm making a discord.js bot and I've put a leaderboard command in it.
const Discord = require("discord.js");
// Get a filtered list (for this guild only), and convert to an array while we're at it.
const filtered = client.points.filter( p => p.guild === message.guild.id ).array();
// Sort it to get the top results... well... at the top. Y'know.
const sorted = filtered.sort((a, b) => b.points - a.points);
// Slice it, dice it, get the top 10 of it!
const top10 = sorted.splice(0, 10);
// Now shake it and show it! (as a nice embed, too!)
const embed = new Discord.RichEmbed()
.setTitle("Leaderboard")
.setAuthor(client.user.username, client.user.avatarURL)
.setDescription("Our top 10 points leaders!")
.setColor(0xff0000);
for(const data of top10) {
embed.addField(client.users.get(data.user).tag, `${data.points} points (level ${data.level})`);
}
return message.channel.send({embed});
}
但是當(dāng)我運(yùn)行命令時,我在命令行/日志中得到了這個:
But when I run the command I get this in the command line/logs:
embed.addField(client.users.get(data.user).tag, `${data.points} points (level ${data.level})`);
^
TypeError: Cannot read property 'tag' of undefined
at Object.exports.run (/app/commands/leaderboard.js:19:47)
at module.exports (/app/events/message.js:19:7)
at emitOne (events.js:121:20)
at Client.emit (events.js:211:7)
at MessageCreateHandler.handle (/rbd/pnpm-volume/461f582b-2c68-44a2-912c-88cd1fefb0fa/node_modules/.registry.npmjs.org/discord.js/11.4.2/node_modules/discord.js/src/client/websocket/packets/handlers/MessageCreate.js:9:34)
at WebSocketPacketManager.handle (/rbd/pnpm-volume/461f582b-2c68-44a2-912c-88cd1fefb0fa/node_modules/.registry.npmjs.org/discord.js/11.4.2/node_modules/discord.js/src/client/websocket/packets/WebSocketPacketManager.js:103:65)
at WebSocketConnection.onPacket (/rbd/pnpm-volume/461f582b-2c68-44a2-912c-88cd1fefb0fa/node_modules/.registry.npmjs.org/discord.js/11.4.2/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:333:35)
at WebSocketConnection.onMessage (/rbd/pnpm-volume/461f582b-2c68-44a2-912c-88cd1fefb0fa/node_modules/.registry.npmjs.org/discord.js/11.4.2/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:296:17)
at WebSocket.onMessage (/rbd/pnpm-volume/461f582b-2c68-44a2-912c-88cd1fefb0fa/node_modules/.registry.npmjs.org/ws/4.1.0/node_modules/ws/lib/event-target.js:120:16)
at emitOne (events.js:116:13)
我已將機(jī)器人從我的電腦轉(zhuǎn)移到 glitch.com,這似乎修復(fù)了一段時間,但現(xiàn)在問題又回來了.
I've transferred the bot from my pc to glitch.com which seemed to fix it for a while, but now the problem is back.
推薦答案
這個錯誤意味著 client.users.get(data.user)
返回 undefined,因此不能有屬性 標(biāo)記
就可以了.大概這意味著data中指定的用戶不存在.
The error means client.users.get(data.user)
is returning undefined, hence there cannot be a property tag
on it. Presumably this means the user specified in data does not exist.
您應(yīng)該在直接嘗試訪問該屬性之前添加一些防御性代碼,以確保 get()
調(diào)用返回一些內(nèi)容而不是 undefined.
You should add some defensive code before directly trying to access the property to ensure that the get()
call returns something rather than undefined.
例如
const user = client.users.get(data.user);
if (user && user.tag) {
// code here
} else {
// user does not exist..
}
這篇關(guān)于如何修復(fù):“TypeError:無法讀取未定義的屬性‘標(biāo)簽’"discord.js 中的錯誤的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!