You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord v13 获取服务器所有者用户名及修复region返回undefined问题

Discord.js v13 serverinfo命令问题修复方案

1. 服务器所有者信息获取失败问题

原因

Discord.js v13 为了优化性能,取消了 Guild 实例上默认挂载的 owner 属性,仅保留 ownerId 字段存储所有者ID,需要主动调用接口拉取完整的所有者成员信息。

解决方法

在构建嵌入之前调用异步方法 message.guild.fetchOwner() 获取所有者的 GuildMember 实例,即可通过实例的 user 属性获取用户名、tag等信息:

// 新增在siEmbed定义之前
const owner = await message.guild.fetchOwner();

对应的嵌入字段修改为:

.addField("Server Owner", `• \`${owner.user.tag} (${message.guild.ownerId})\``, inline)

注意:如果拉取失败请检查Discord开发者后台中你的机器人是否开启了GUILDS网关意图。

2. guild.region返回undefined问题

原因

Discord官方在v9版本API中废弃了服务器全局区域设置,区域属性改为每个语音频道单独配置,因此Guild实例上的region属性已被完全移除,访问该字段自然返回undefined。

解决方法

目前主流的serverinfo命令都已取消全局服务器区域展示,你可以直接删除该字段。如果确实需要展示区域相关内容,可以统计服务器内语音频道的区域分布:

// 统计所有语音频道的区域,去重后展示
const voiceRegions = [...new Set(message.guild.channels.cache.filter(ch => ch.type === 'GUILD_VOICE').map(ch => ch.rtcRegion || '自动'))];
.addField("语音频道区域", `• \`${voiceRegions.join('、')}\``, inline)

完整修改后代码

const { MessageEmbed } = require("discord.js");
const config = require("../../botconfig");

module.exports = {
    name: "serverinfo",
    aliases: ["si", "server-info", "server-Info"],
    description: "Shows info on a server!",
    usage: `serverinfo`,
    run: async (client, message, args) => {
        const inline = true;
          
        let members = message.guild.memberCount;
        // 拉取服务器所有者信息
        const owner = await message.guild.fetchOwner();
        // 统计语音频道区域(不需要可以删除)
        const voiceRegions = [...new Set(message.guild.channels.cache.filter(ch => ch.type === 'GUILD_VOICE').map(ch => ch.rtcRegion || '自动'))];
    
        const siEmbed = new MessageEmbed()
        .setAuthor(message.guild.name, message.guild.iconURL())
        .setThumbnail(message.guild.iconURL())
        .addField("服务器创建时间", `<t:${~~(message.channel.guild.createdAt / 1000)}:R>`, true)
        .addField("服务器所有者", `• \`${owner.user.tag} (${message.guild.ownerId})\``, inline)
        // 替换原来的region字段,不需要可以删掉这行
        .addField("语音区域", `• \`${voiceRegions.join('、')}\``, inline)
        .addField("总成员数", `• \`${members.toLocaleString()}\``, inline)
        .addField("文字频道数", `• \`${message.guild.channels.cache.filter(ch => ch.type === "GUILD_TEXT").size}\``, inline)
        .addField("语音频道数", `• \`${message.guild.channels.cache.filter(ch => ch.type === "GUILD_VOICE").size}\``, inline)
        .addField("总角色数", `• \`${message.guild.roles.cache.size}\``, inline)
        .setColor("#FFA500")
        .setFooter(`服务器ID: ${message.guild.id}`)
        .setTimestamp()

        message.reply({ embeds: [siEmbed] });
    }
};

额外提示:v13中频道类型枚举值也有调整,原来的voice要改为GUILD_VOICE,text要改为GUILD_TEXT,避免筛选结果不准确。


内容的提问来源于stack exchange,提问作者Roman Beard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:15:07