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

Discord机器人await sleep报错:SyntaxError,求修复或替代方案

嘿,我来帮你排查这个Discord机器人的错误!

首先看你的报错信息,SyntaxError: Unexpected reserved word,核心问题有两个:

  1. await只能在async函数里用:你注册的bot.on('message')回调函数不是async函数,直接用await肯定报错。
  2. 语法结构错误:你把await sleep()写在了bot.sendMessage()的参数对象里面——对象里只能放键值对,不能塞执行语句,这完全不符合JS语法。

另外还有个小坑:while (x == 1)里的x根本没定义,运行起来也会出问题。


修复后的代码

先把这些问题都补上,给你写个能跑的版本:

function sleep(ms) { 
  return new Promise(resolve => setTimeout(resolve, ms)); 
}

// 把回调函数改成async的,这样才能用await
bot.on('message', async function (user, userID, channelID, message, evt) {
  if (message.startsWith('!')) { // 用startsWith比substring更直观
    const args = message.slice(1).split(' ');
    const cmd = args.shift(); // 用shift比splice(1)更简洁
    
    switch(cmd) {
      case 'repeat':
        let isRunning = true; // 用更语义化的变量代替x
        // 这里加个退出条件,比如循环10次就停,或者监听停止指令
        let count = 0;
        while (isRunning && count < 10) {
          // 先发送消息,await确保消息发完再等延迟
          await bot.sendMessage({
            to: channelID,
            message: 'repeated message'
          });
          // 延迟10秒,这行要放在sendMessage外面!
          await sleep(10000);
          count++;
          // 如果想手动停止,可以加个!stop指令来把isRunning设为false
        }
        break;
    }
  }
});

更省心的重复任务方案

其实这种定时重复发消息的场景,用setInterval比while+await更合适,不会阻塞机器人的事件循环,代码也更简洁:

let repeatInterval = null; // 存定时器ID,方便停止

bot.on('message', function (user, userID, channelID, message, evt) {
  if (message.startsWith('!')) {
    const args = message.slice(1).split(' ');
    const cmd = args.shift();
    
    switch(cmd) {
      case 'repeat':
        // 先判断有没有在运行,避免重复创建定时器
        if (!repeatInterval) {
          repeatInterval = setInterval(() => {
            bot.sendMessage({
              to: channelID,
              message: 'repeated message'
            });
          }, 10000); // 每10秒发一次
        }
        break;
      case 'stop':
        // 加个停止指令,用户可以手动终止重复
        if (repeatInterval) {
          clearInterval(repeatInterval);
          repeatInterval = null;
          bot.sendMessage({to: channelID, message: '重复消息已停止!'});
        }
        break;
    }
  }
});

重要提醒

不管用哪种方案,都要注意Discord的API速率限制,不要太频繁发送消息,不然机器人可能会被暂时限制使用哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:42:14