tek*_*eke 5 javascript node.js discord.js
我正在为我的送餐机器人发出订单命令。在主服务器外使用该命令时控制台出错,否则该命令在主通道内工作。
错误是 TypeError: Cannot read property 'id' of undefined代码是
api.commands.add("claim", (msg) => {
let employeeRole = msg.guild.roles.get("745410836901789749");
if(msg.member.roles.has(employeeRole.id)) {
if(msg.channel.id == 746423099871985755) {
api.client.channels.get("746423099871985755").fetchMessages({
around: order.ticketChannelMessageID,
limit: 1
}).then(messages => {
const fetchedMsg = messages.first();
fetchedMsg.edit({embed: {
color: 0xFFFFFF,
title: api.client.users.get(order.userID).username,
fields: [{
name: "Order Description",
value: order,
}, {
name: "Order ID",
value: ticketID,
}, {
name: "Order Status",
value: "claimed",
}],
timestamp: new Date(),
footer: {
text: "Taco Bot"
}
}}).then((m) => {
m = m.id;
// Update Status
delete orderDB[ticketID];
orderDB[ticketID] = {
"orderID": order.orderID,
"userID": order.userID,
"guildID": order.guildID,
"channelID": order.channelID,
"order": order.order,
"status": "Claimed",
"ticketChannelMessageID": m,
"chef": msg.author.id
};
Run Code Online (Sandbox Code Playgroud)
小智 0
发生该错误可能是因为您正在尝试获取emploeeRole. 角色是独一无二的。在其他服务器上,不会有具有此 id 的角色,因此它将返回undefined。
为了避免此问题,您应该检查该服务器上的命令执行程序是否具有具有此 id 的角色。(可能不会,因为已经提到:角色是独一无二的)。
\nif (msg.member.roles.cache.find(r => r.id === '745410836901789749')) {\n // The user has the requierd role! Execute command\n} else {\n // Role wasn't found! Do something else\n}\nRun Code Online (Sandbox Code Playgroud)\n这段代码的问题是该命令只能在您的服务器上运行。要解决这个问题,您可以检查角色的名称而不是 ID。
\n if (msg.member.roles.cache.find(r => r.id === 'MY ROLE NAME')) {\n // The user has the requierd role! Execute command\n} else {\n // Role wasn't found! Do something else\n}\nRun Code Online (Sandbox Code Playgroud)\n现在只有具有名为 name 的角色的用户MY ROLE NAME才能执行该命令。当然,您可以输入自己的角色名称,而不是使用MY ROLE NAME。〜\ xe3 \ x83 \ xbe(\ xe3 \ x83 \ xbb \ xcf \ x89 \ xe3 \ x83 \ xbb)