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

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

\n

为了避免此问题,您应该检查该服务器上的命令执行程序是否具有具有此 id 的角色。(可能不会,因为已经提到:角色是独一无二的)。

\n
if (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}\n
Run 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}\n
Run Code Online (Sandbox Code Playgroud)\n

现在只有具有名为 name 的角色的用户MY ROLE NAME才能执行该命令。当然,您可以输入自己的角色名称,而不是使用MY ROLE NAME。〜\ xe3 \ x83 \ xbe(\ xe3 \ x83 \ xbb \ xcf \ x89 \ xe3 \ x83 \ xbb)

\n