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

discord.js中sleep函数仅对部分命令生效,该如何修复?

问题原因
  • 你的ping命令配置了cooldown: 2000属性,执行时会走index文件中if (command.cooldown)的逻辑分支
  • 该分支调用command.run()时仅传入了bot, message, args三个参数,没有传入sleep函数,导致ping命令的run方法接收的第四个参数为undefined,调用时就抛出了「sleep is not a function」的错误
  • 无cooldown配置的命令走的是else分支,调用run时传入了sleep,所以可以正常运行
修复方案

方案1(最快捷,仅修改index文件调用逻辑)

找到index文件中command.cooldown的判断分支,修改command.run(bot, message, args)为command.run(bot, message, args, sleep),修改后对应代码块如下:

if (command.cooldown) {
    if (Timeout.has(`${command.name}${message.author.id}`)) return message.channel.send(`Please wait **${ms(Timeout.get(`${command.name}${message.author.id}`) - Date.now(), { long: true })}** before using this command again!`)
    // 新增传入sleep参数
    command.run(bot, message, args, sleep)
    Timeout.set(`${command.name}${message.author.id}`, Date.now() + command.cooldown)
    setTimeout(() => {
        Timeout.delete(`${command.name}${message.author.id}`)
    }, command.cooldown)
} else command.run(bot, message, args, sleep);

方案2(更稳妥,避免后续参数传递遗漏)

直接把sleep函数定义为全局可用,不需要每次调用命令时传参:

  1. 把index文件中定义在message事件内的sleep函数移到文件顶部全局作用域
  2. 所有命令文件中不需要再把sleep作为run方法的参数接收,直接全局调用即可
    示例代码:
// index.js 顶部新增sleep定义
const sleep = (ms) => { 
    return new Promise(resolve => setTimeout(resolve, ms));
}

// 后续所有命令文件中无需再接收sleep参数,直接使用sleep()即可

额外提醒:你提供的ping命令代码末尾多了一行冗余的}),建议删除避免潜在语法问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:57:00