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

Discord JS机器人状态一段时间后消失,setPresence代码位置存疑

Discord.js机器人状态消失的解决办法

问题根源

  1. setPresence参数格式错误:你当前把activities和status分成两个对象传入,Discord.js v14+版本的setPresence只接受单个配置对象,这种写法会导致状态设置不生效或后续被Discord重置。
  2. 仅设置一次状态:机器人和Discord的连接如果出现波动重连,Discord会自动重置机器人状态,只在ready事件执行一次设置是不够的。
  3. 客户端创建时调用无效:创建Discord.Client时,client.user还未初始化,此时调用setPresence根本不会执行,自然看不到状态。

修复方案

1. 修正参数格式并封装复用函数

把状态设置逻辑封装成单独函数,方便在需要时重复调用:

// 封装状态更新函数,先判断client.user是否存在
function updateBotPresence() {
    if (!client.user) return;
    
    client.user.setPresence({
        activities: [{ name: `Status Servers`, type: ActivityType.Watching }],
        status: 'online'
    }).catch(err => {
        console.error('更新机器人状态失败:', err);
    });
}

// 在ready事件初始化状态
client.once('ready', () => {
    console.log('Bot is now online ✅');
    setInterval(checkWebsiteAndNotify, 10000);
    updateBotPresence();
});

2. 监听重连事件,自动恢复状态

当机器人重新连接Discord时,自动重新设置状态:

client.on('reconnecting', () => {
    updateBotPresence();
});

3. 定期刷新状态(可选)

为了避免Discord主动重置状态,可以每15分钟左右刷新一次:

// 每900000毫秒(15分钟)刷新一次状态
setInterval(updateBotPresence, 900000);

完整代码示例

const { Client, ActivityType } = require('discord.js');
const client = new Client({ intents: ["1793"] });

function updateBotPresence() {
    if (!client.user) return;
    client.user.setPresence({
        activities: [{ name: `Status Servers`, type: ActivityType.Watching }],
        status: 'online'
    }).catch(err => {
        console.error('更新状态失败:', err);
    });
}

client.once('ready', () => {
    console.log('Bot is now online ✅');
    setInterval(checkWebsiteAndNotify, 10000);
    updateBotPresence();
});

client.on('reconnecting', () => {
    updateBotPresence();
});

// 可选:定期刷新状态
setInterval(updateBotPresence, 900000);

client.login('你的机器人Token');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:24:53