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

Discord.js v14机器人状态无法显示问题求助

问题排查与修复方案

核心问题分析

你的代码存在两个关键错误(针对Discord.js v14+版本),导致状态设置失效:

  1. 活动类型使用了字符串字面量而非官方枚举值
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:50:18