Discord JS:TypeError:无法读取未定义的属性“id”

时间:2020-12-18 17:48:18

标签: 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
                                };                          

2 个答案:

答案 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。 ~ヾ(・ω・)