Discord.js v14机器人状态无法显示问题求助
问题排查与修复方案
核心问题分析
你的代码存在两个关键错误(针对Discord.js v14+版本),导致状态设置失效:
- 活动类型使用了字符串字面量而非官方枚举值
setPresence参数结构错误(使用了单数activity,v14要求复数activities数组)
修复步骤
1. 导入ActivityType枚举
Discord.js v14开始,活动类型必须使用ActivityType枚举,不再接受字符串字面量。
2. 修正setPresence参数结构
将单个activity字段改为activities数组,符合v14的API规范。
3. 打印完整错误信息
原代码的catch块仅输出通用提示,添加完整错误对象打印可快速定位问题。
4. 延迟读取缓存状态
Discord网关同步状态存在延迟,设置后立即读取本地缓存可能显示旧值,添加短延迟后再打印。
修复后的完整代码
const { BOT_TOKEN } = require("./config.json"); const { Client, GatewayIntentBits, ActivityType } = require('discord.js'); const client = new Client({ intents: [GatewayIntentBits.Guilds] }); client.on("ready", async () => { try { await client.user.setPresence({ status: 'online', activities: [{ name: 'Test', type: ActivityType.Playing }] }); console.log(`Bot's Status: successfully updated`); // 延迟1秒读取缓存,确保状态同步完成 setTimeout(() => { console.log(`Bot's current status: ${client.user.presence.status}`); console.log(`Bot's current activity: ${client.user.presence.activities[0]?.name || 'None'}`); }, 1000); } catch (error) { console.error("Bot's Status: error while updating status", error); } console.log(`Login process as: ${client.user.tag} was successful`); }); client.login(BOT_TOKEN);
额外检查项
- 确认Discord.js版本:运行
npm list discord.js,若为v13及以下,可保留单数activity和字符串类型,但建议升级到稳定版v14+ - 验证机器人账号:新创建的机器人需确保完成Discord的账号验证流程,避免功能限制
- 检查网关日志:查看控制台是否有网关重连、权限错误等日志,确保机器人稳定在线
内容的提问来源于stack exchange,提问作者theunreallpj
相关产品推荐
相关产品推荐

