Discord.js v14:如何将机器人状态设为所在服务器数量
解决Discord机器人状态显示服务器数量为undefined的问题
问题原因
你遇到的undefined是因为使用了Discord.js旧版本的API写法,v13及以后的版本中,client.guilds.size已被废弃,无法直接获取服务器数量。
正确代码实现
以下是适配Discord.js v13+的完整代码:
const { Client, ActivityType } = require('discord.js'); // 必须启用Guilds意图才能获取服务器列表 const client = new Client({ intents: ['Guilds'] }); client.on("ready", () => { // 从缓存中获取服务器总数 const guildsCount = client.guilds.cache.size; client.user.setPresence({ activities: [ { name: `${guildsCount} Servers!`, type: ActivityType.Watching }, ], status: "online", }); console.log(`机器人已上线,当前服务${guildsCount}个服务器`); }); // 替换为你的机器人令牌 client.login('YOUR_BOT_TOKEN');
关键说明
- API版本适配:新版本Discord.js将服务器集合移到了
client.guilds.cache中,通过cache.size可以直接获取缓存的服务器总数。 - 权限配置:必须在Discord开发者门户的机器人设置中确认开启
Guilds意图(默认已启用,若修改过配置需检查),同时初始化Client时要声明该意图,否则无法获取服务器数据。 - 错误写法纠正:
- 无需使用
map遍历服务器,cache.size是最直接的统计方式 cache.get()是根据服务器ID查询单个对象,不能用于统计数量
- 无需使用
内容的提问来源于stack exchange,提问作者DiscordJS
相关产品推荐
相关产品推荐

