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

如何获取Discord机器人所在的所有服务器与频道以开发/info页面

获取Discord机器人的服务器与频道信息(用于/info页面开发)

核心实现思路

Discord机器人的客户端实例会维护已加入服务器(Guild)和对应频道(Channel)的缓存集合,通过调用官方API的fetch方法确保数据完整后,即可提取所需信息用于/info页面展示。以下以Discord.js v14为例给出具体实现方案:

1. 基础数据获取代码

// 假设已完成Discord客户端client的初始化与登录
async function getBotStats() {
  // 强制拉取所有服务器数据到缓存
  await client.guilds.fetch();
  
  const serverList = client.guilds.cache.map(guild => {
    // 拉取当前服务器下的所有频道数据
    guild.channels.fetch();
    const channelStats = {
      total: guild.channels.cache.size,
      text: guild.channels.cache.filter(c => c.type === 0).size,
      voice: guild.channels.cache.filter(c => c.type === 2).size,
      category: guild.channels.cache.filter(c => c.type === 4).size
    };
    
    return {
      id: guild.id,
      name: guild.name,
      memberCount: guild.memberCount,
      icon: guild.iconURL(),
      channels: channelStats
    };
  });

  return {
    totalServers: client.guilds.cache.size,
    totalChannels: client.channels.cache.size,
    servers: serverList
  };
}

2. 集成到/info slash命令

const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');

module.exports = {
  data: new SlashCommandBuilder()
    .setName('info')
    .setDescription('查看机器人的服务器与频道统计信息'),
  async execute(interaction) {
    const botStats = await getBotStats();
    
    // 构建基础统计Embed
    const mainEmbed = new EmbedBuilder()
      .setTitle('机器人运行统计')
      .setColor('#2F3136')
      .addFields(
        { name: '总服务器数', value: botStats.totalServers.toString(), inline: true },
        { name: '总频道数', value: botStats.totalChannels.toString(), inline: true }
      )
      .setTimestamp();

    // 若需要展示详细服务器列表,可添加分页按钮(示例简化版)
    const row = new ActionRowBuilder()
      .addComponents(
        new ButtonBuilder()
          .setCustomId('view_servers')
          .setLabel('查看服务器列表')
          .setStyle(ButtonStyle.Primary)
      );

    await interaction.reply({ embeds: [mainEmbed], components: [row] });
  },
};

3. 旧代码无法运行的常见排查点

  • 权限缺失:确保机器人在所有服务器中拥有View Channels权限,否则无法读取频道数据
  • 缓存未同步:必须调用guilds.fetch()和channels.fetch(),否则只能获取本地缓存的部分数据
  • 版本兼容问题:若使用Discord.js v13及以下版本,需替换API(如EmbedBuilder改为MessageEmbed,频道类型判断用枚举值而非数字)
  • 异步处理错误:所有fetch操作必须用await包裹,避免返回Promise而非实际数据

4. 页面展示优化建议

  • 分页展示:服务器数量较多时,用Discord按钮组件实现分页加载,避免单条消息过长
  • 可视化分类:按频道类型(文本/语音/分类)统计数量,让数据更直观
  • 权限过滤:仅展示机器人有权限访问的频道,避免统计无效数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:57:07