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

如何在discord.js机器人自定义状态中显示对应服务器使用的分片编号

实现方案

完全可以实现该需求,以下为discord.js v14 版本的可落地实现逻辑:

实现原理

Discord本身会根据用户所在 guild 对应的分片,向用户展示对应分片实例的机器人状态。只需要在每个分片的客户端实例就绪后,将自身分片编号配置到自定义状态中即可。


代码示例

1. 分片管理主进程代码(sharder.js)

const { ShardingManager } = require('discord.js');
const TOKEN = '你的机器人令牌';

const manager = new ShardingManager('./index.js', {
  token: TOKEN,
  // 分片数量填auto会自动根据服务器数量计算最优分片数
  totalShards: 'auto'
});

manager.on('shardCreate', shard => {
  console.log(`分片 ${shard.id} 已启动`);
});

manager.spawn();

2. 机器人客户端核心代码(index.js)

const { Client, ActivityType } = require('discord.js');
const client = new Client({
  intents: [/* 你的意图配置 */]
});

client.on('ready', () => {
  // 读取当前分片编号,单进程单分片场景下直接取第一个值即可
  const currentShardId = client.shard.ids[0];
  // 设置自定义状态
  client.user.setActivity({
    name: `Shard ${currentShardId}`,
    type: ActivityType.Watching
  });

  // 可选:每10分钟刷新一次状态,避免异常丢失
  setInterval(() => {
    client.user.setActivity({
      name: `Shard ${currentShardId}`,
      type: ActivityType.Watching
    });
  }, 10 * 60 * 1000);

  console.log(`分片 ${currentShardId} 对应的客户端已就绪`);
});

client.login();

注意事项

  • 如果你使用单进程多分片配置,client.shard.ids会返回当前进程承载的所有分片编号数组,可自行拼接后展示
  • 若使用discord.js v13及更早版本,不需要导入ActivityType,直接将type属性替换为字符串'WATCHING'即可
  • 启动机器人时直接运行sharder.js即可,不需要单独运行index.js

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:06:03