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

如何在Discord.js中用毫秒生成相对时间戳实现冷却倒计时

Discord.js Revive指令冷却相对时间戳实现方案

需求说明

开发Discord.js的revive指令时,需要实现以下冷却提示逻辑:

  • 指令无冷却时,回复 Wasn't on cooldown!
  • 指令处于冷却状态时,回复 Cooldown! (带冷却结束的相对时间戳),让用户直观知晓冷却结束时间,避免频繁刷指令

当前已完成冷却逻辑,但无法生成符合要求的Discord相对时间戳,使用依赖版本:Discord.js v13.10.2、quick.db v9.0.6、ms v2.1.3,Node.js 16.14.2

解决方法

Discord的相对时间戳采用固定格式 <t:Unix秒级时间戳:R>,核心是将冷却结束时间转换为秒级Unix时间戳(注意不是毫秒)。具体步骤:

  1. 从数据库获取冷却开始时间(Date.now() 存储的毫秒数)
  2. 计算冷却结束时间:冷却开始时间 + 冷却时长(毫秒)
  3. 将结束时间转换为秒级Unix时间戳:Math.floor(结束时间 / 1000)
  4. 套入Discord相对时间戳格式,生成可显示的倒计时

修改后的核心代码

替换原代码中Main Code部分的内容:

// Main Code \\
let ReviveCooldown = 1.8e+6; // 30分钟对应的毫秒数
let cooldownDB = await db.get(`ReviveCooldown`);

// 检查冷却是否有效(避免数据库无记录时出错)
if (cooldownDB && ReviveCooldown - (Date.now() - cooldownDB) > 0) {
    // 计算冷却结束的毫秒时间
    const cooldownEndTime = cooldownDB + ReviveCooldown;
    // 转换为秒级Unix时间戳
    const unixTimestamp = Math.floor(cooldownEndTime / 1000);
    // 生成Discord相对时间戳
    const relativeTimestamp = `<t:${unixTimestamp}:R>`;
    message.reply(`Cooldown! ${relativeTimestamp}`);
} else { 
    await db.set(`ReviveCooldown`, Date.now());
    message.reply(`Wasn't on cooldown!`)
}

注意事项

  • 新增cooldownDB &&判断,防止数据库未存储冷却记录时出现计算错误
  • 无需依赖额外的discord-timestamps包,直接使用Discord原生时间戳格式更稳定可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:15:34