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

Discord.js中setActivity每10秒循环失效问题求助

排查Discord机器人setActivity循环失效问题

嘿,我来帮你拆解这段代码里的问题,搞定每10秒循环更新活动状态的需求~

你的代码里的核心问题

  • 无限递归的sleep函数:你写的sleep函数里直接调用了await sleep(1000),这会让函数自己调用自己,陷入无限递归,直接卡死程序,根本没法正常执行后续的setActivity。而且这个sleep函数没有返回Promise,await对普通函数完全不起作用,等于白写。
  • 语法错误:最后一行setActivity里用了中文逗号,,JavaScript不认中文符号,这会直接导致代码报错跑不起来。另外你的代码片段末尾的括号、大括号都没闭合,也是语法问题。
  • 没有循环逻辑:就算sleep没问题,你现在的写法也只是在ready事件里执行两次setActivity就结束了,没有持续循环的逻辑,自然没法每10秒更新一次。

修复后的代码示例

我给你调整成了非阻塞的循环方式,用Node.js推荐的setInterval来实现定时任务:

const tokenfile = require("./token1.json");
const Discord = require("discord.js");
const bot = new Discord.Client({ disableEveryone: true });

bot.on("ready", async () => {
    console.log(`${bot.user.username} is online and running!`);
    
    // 把要循环的活动内容存在数组里,方便后续扩展
    const activityList = [
        { content: 'you everyday.', type: 'WATCHING' },
        { content: '22 e...', type: 'WATCHING' }
        // 可以继续添加更多活动项
    ];
    
    let currentActivityIndex = 0;
    
    // 每10秒执行一次切换逻辑
    setInterval(() => {
        const currentActivity = activityList[currentActivityIndex];
        bot.user.setActivity(currentActivity.content, { type: currentActivity.type });
        
        // 更新索引,循环回到数组开头
        currentActivityIndex = (currentActivityIndex + 1) % activityList.length;
    }, 10000); // 10000毫秒 = 10秒
});

// 记得用你的token登录机器人
bot.login(tokenfile.token);

为什么这样写更靠谱

  1. 非阻塞定时:setInterval是Node.js的非阻塞定时器,不会像你之前的sleep那样卡死事件循环,机器人能正常处理其他指令和事件。
  2. 可扩展的活动列表:把活动内容存在数组里,后续要加新状态直接往数组里加就行,不用改循环逻辑。
  3. 避免API限制:Discord对setActivity的调用有频率限制,10秒一次完全在安全范围内,不会触发限流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:50:32