我正在为我的送餐机器人发出订单命令。在主服务器外使用该命令时控制台出错,否则该命令在主通道内工作。
错误是 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
};
答案 0 :(得分:0)
下面的行解析为 undefined
,因此如果您尝试访问 employeeRole
上的属性,您将收到该错误。
let employeeRole = msg.guild.roles.get("745410836901789749");
在您的主服务器中,您可能有一个 ID 为 745410836901789749
的角色,但是在其他服务器中,角色的 id
会有所不同。如果您想通过角色名称检查,您应该获取所有角色,遍历它们并通过名称找到您需要的角色。
// Fetch all the roles as per discordjs docs
await message.guild.roles.fetch()
上面的行应该为您获取所有角色
答案 1 :(得分:0)
发生错误的原因可能是您正在尝试获取 emploeeRole
。角色是独一无二的。在其他服务器上,不会有具有此 ID 的角色,因此它将返回 undefined
。
为避免此问题,您应该检查此服务器上的命令执行器是否具有此 id 的角色。 (可能不是,因为已经提到过:角色是独一无二的)。
if (msg.member.roles.cache.find(r => r.id === '745410836901789749')) {
// The user has the requierd role! Execute command
} else {
// Role wasn't found! Do something else
}
此代码的问题在于该命令仅适用于您的服务器。为了解决这个问题,您可以检查角色的名称而不是 id。
if (msg.member.roles.cache.find(r => r.id === 'MY ROLE NAME')) {
// The user has the requierd role! Execute command
} else {
// Role wasn't found! Do something else
}
现在只有具有名为 MY ROLE NAME
的角色的用户才能执行该命令。当然,您可以输入自己的角色名称,而不是使用 MY ROLE NAME
。 ~ヾ(・ω・)