【问题标题】:Discord.js TypeError: Cannot read property 'client' of undefinedDiscord.js TypeError:无法读取未定义的属性“客户端”
【发布时间】:2021-04-12 15:35:07
【问题描述】:

我在编写命令时遇到错误“TypeError: Cannot read property 'client' of undefined”,我认为从这一行开始,我写对了吗? (我不太确定,因为我是编码新手并且正在从朋友那里获得帮助)我正在使用 discord v12 btw

if(client.guilds.cache.get(order.guildID).client.me.hasPermission("CREATE_INSTANT_INVITE")) {
                                // Send message to cook.
                                

                                message.reply(`Order has been sent to ${client.guilds.cache.get(order.guildID).name}`);
                                
                                
                                // Get invite.
                                
                            }else {
                                // Bot delivers it's self.
                                client.channels.cache.get(order.channelID).send(`${client.users.cache.get(order.userID)}, Here is your taco that you ordered. Remember you can do \`.tip [Amount]\` to give us virtual tips, and \`.feedback [Feedback]\` to give us feedback on how we did. ${order.imageURL}`);

                                
                                
                                // Logs in console.
                                console.log(colors.green(`The bot did not have the Create Instant Invite Permissions for ${client.guilds.get(order.guildID).name}, so it delivered the taco itself.`));
                            }

如果不是问题,则该命令的完整代码在这里:

const { prefix } = require('../config.json');
const Discord = require('discord.js');
const fsn = require("fs-nextra");
const client = new Discord.Client();
const colors = require("colors");
module.exports = {
    name: 'deliver',
    description: 'Deliverying an order',
    args: 'true',
    usage: '<order ID>',
    aliases: ['d'],
    execute(message) {
        
        
        const args = message.content.slice(prefix.length).trim().split(/ +/g);
        
        if (message.member.roles.cache.find(r => r.id === '745410836901789749')) {
            if(message.guild.channels.cache.find(r => r.id === '746423099871985755')) {
                fsn.readJSON("./orders.json").then((orderDB) => {
                    let ticketID = args[1];
                    let order = orderDB[ticketID];

                    // If the order doesn't exist.
                    if(order === undefined) {
                        message.reply(`Couldn't find order \`${args[1]}\` Try again.`);

                        return;
                    }
                    
                    // Checks status.
                    if (order.status === "Ready") {
                        // Delete ticket from database.
                        delete orderDB[ticketID];

                        // Writes data to JSON.
                        fsn.writeJSON("./orders.json", orderDB, {
                            replacer: null,
                            spaces: 4
                        }).then(() => {
                            // If bot has create instant invite permission.
                            
                            if(client.guilds.cache.get(order.guildID).client.me.hasPermission("CREATE_INSTANT_INVITE")) {
                                // Send message to cook.
                                

                                message.reply(`Order has been sent to ${client.guilds.cache.get(order.guildID).name}`);
                                
                                
                                // Get invite.
                                
                            }else {
                                // Bot delivers it's self.
                                client.channels.cache.get(order.channelID).send(`${client.users.cache.get(order.userID)}, Here is your taco that you ordered. Remember you can do \`.tip [Amount]\` to give us virtual tips, and \`.feedback [Feedback]\` to give us feedback on how we did. ${order.imageURL}`);

                                
                                
                                // Logs in console.
                                console.log(colors.green(`The bot did not have the Create Instant Invite Permissions for ${client.guilds.get(order.guildID).name}, so it delivered the popsicle itself.`));
                            }

                            
                        }).catch((err) => {
                            if (err) {
                                message.reply(`There was an error while writing to the database! Show the following message to a developer: \`\`\`${err}\`\`\``);
                            }
                        });
                    }else if(order.status === "Unclaimed") {
                        message.reply("This order hasn't been claimed yet. Run `.claim [Ticket ID]` to claim it.");
                    }else if(order.status === "Claimed") {
                        if(message.author.id === order.chef) {
                            message.reply("You haven't set an image for this order! yet Use `.setorder [Order ID]` to do it.");
                        }else {
                            message.reply(`This order hasn't been set an image yet, and only the chef of the order, ${client.users.get(order.chef).username} may set this order.`);
                        }
                    }else if(order.status === "Waiting") {
                        message.reply("This order is in the waiting process right now. Wait a little bit, then run `.deliver [Order ID] to deliver.");
                    }
                });
            }else {
                message.reply("Please use this command in the correct channel.");
                console.log(colors.red(`${message.author.username} used the claim command in the wrong channel.`));
            }
        }else {
            message.reply("You do not have access to this command.");
            console.log(colors.red(`${message.author.username} did not have access to the deliver command.`));
        }
    }
}

【问题讨论】:

    标签: node.js discord.js


    【解决方案1】:

    在检查客户端权限时,您无需添加client。 您可以简单地使用以下方法来检查您的客户的权限:

    if(client.guilds.cache.get(order.guildID).me.hasPermission("CREATE_INSTANT_INVITE")) {
       // code here
    }
    

    【讨论】:

    • "TypeError: 无法读取未定义的属性 'me'"
    • 那么order.guildID 可能存在问题。
    • 在另一个命令中仍然找不到order.guildID 的问题,我让它将这些信息存储在一个 json 文件中,如下所示:// Sets ticket info. fsn.readJSON("./orders.json").then(orderDB =&gt; { // Set JSON information. if (!orderDB[ticketID]) orderDB[ticketID] = { "orderID": ticketID, "userID": message.author.id, "guildID": message.guild.id, "channelID": message.channel.id, "order": order, "status": "Unclaimed", "ticketChannelMessageID": "not set" };
    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2023-01-14
    • 2020-07-14
    • 2019-07-11
    • 2021-05-29
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多