首页 > 解决方案 > 当所有者不可见时无法读取未定义的属性“用户”,导致 BOT 崩溃

问题描述

我的 BOT 中有这件事。使用此代码,我可以从用户所在的服务器获取一些信息:

if (command === `server`) {
    message.react("");
    const owner = message.guild.owner.user.tag;
    const embedServer = new Discord.MessageEmbed()
    .setTitle(`**:books: Server Info: ${message.guild.name}**`)
    .setDescription(`Some information about the server you're on.`)
    .addFields(
        { name: ':person_raising_hand: ・ Member Count', value: message.guild.memberCount, inline: true },
        { name: ':calendar_spiral: ・ Creation Date', value: message.guild.createdAt, inline: true },
        { name: ':globe_with_meridians: ・ Server Region', value: (message.guild.region).toUpperCase(), inline: true },
        { name: ':crown: ・ Server Owner', value: owner, inline: true },
    )
    .setFooter(`${botnv}`)
    .setColor('#f04747')
    message.channel.send(embedServer).catch(err => message.channel.send(":warning: Error!"));
};

它在我的私人服务器上工作得很好,但是一旦我在 BOT 无法看到所有者是谁的服务器上测试它,它就会崩溃。我希望它发送一条消息说它找不到它们。我尝试过的一切都没有奏效。if(!user) return 在 const 下不起作用, .catch(err) 也不起作用。我被困住了。

标签: discord.js

解决方案


您可以使用 try/catch 语句并获取错误并将消息发送到通道

if (command === `server`) {
    message.react("");
    try {
        const owner = message.guild.owner.user.tag;
        const embedServer = new Discord.MessageEmbed()
            .setTitle(`**:books: Server Info: ${message.guild.name}**`)
            .setDescription(`Some information about the server you're on.`)
            .addFields({
                name: ':person_raising_hand: ・ Member Count',
                value: message.guild.memberCount,
                inline: true
            }, {
                name: ':calendar_spiral: ・ Creation Date',
                value: message.guild.createdAt,
                inline: true
            }, {
                name: ':globe_with_meridians: ・ Server Region',
                value: (message.guild.region).toUpperCase(),
                inline: true
            }, {
                name: ':crown: ・ Server Owner',
                value: owner,
                inline: true
            }, )
            .setFooter(`${botnv}`)
            .setColor('#f04747')
        message.channel.send(embedServer);
    } catch (error) {
        console.log(error); //Console Log Error
        return message.channel.send(":warning: Error!");
    };
};

在此处了解有关 try/catch的更多信息


推荐阅读