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

Discord机器人work命令time.minutes/seconds未定义问题修复求助

修复time.minutes和time.seconds未定义报错 - Discord.js Work命令冷却问题

嘿,我知道你为啥遇到这个报错了——你用的ms()函数根本不会返回带minutes和seconds属性的对象!它默认返回的是格式化好的字符串(比如"10m 0s"),所以直接访问time.minutes肯定会报未定义的错。下面给你两种简单的修复方案:

方案1:直接使用ms返回的字符串(最简洁)

既然ms()已经帮你把时间格式化成了易读的字符串,直接用它就行,不需要手动拆分分钟和秒:

if (work !== null && timeout - (Date.now() - work) > 0) { 
  let time = ms(timeout - (Date.now() - work)); 
  // 直接使用ms生成的格式化字符串
  message.channel.send(`You already worked, try again in **${time}**!`) 
}

这样会直接输出类似You already worked, try again in **10m 0s**!的消息,完全符合你的需求。

方案2:手动计算分钟和秒(自定义格式)

如果你一定要手动拆分出分钟和秒,可以自己计算剩余时间,不依赖ms的对象(因为它本来就没这个功能):

if (work !== null && timeout - (Date.now() - work) > 0) { 
  let timeLeft = timeout - (Date.now() - work);
  // 计算分钟数:1分钟=60000毫秒
  let minutes = Math.floor(timeLeft / 60000);
  // 计算剩余秒数:取模后除以1000转成秒
  let seconds = Math.floor((timeLeft % 60000) / 1000);
  message.channel.send(`You already worked, try again in **${minutes}m ${seconds}s**!`) 
}

这种方法完全自己控制时间计算,不会有依赖库的问题。

修复后的完整代码(用方案1的版本)

const Discord = require("discord.js"); 
const db = require('quick.db') 
const ms = require("ms"); 
module.exports = class economy { 
  constructor(){ 
    this.name = 'work', 
    this.alias = ['work'], 
    this.usage = 's!work', 
    this.description = 'Work to get paid', 
    this.runnable = 'true' 
  } 
  async run(bot, message, args) { 
    let timeout = 600000 
    let amount = Math.floor(Math.random() * 25) + 15; 
    var jobs = ["Miner", "Bartender", "Cashier", "Cleaner", "Drugdealer", "Assistant", "Nurse", "Cleaner", "Teacher", "Accountants", "Security Guard", "Sheriff", "Lawyer", "Dishwasher", "Electrician", "Singer", "Dancer"]; 
    let work = await db.fetch(`work_${message.author.id}`); 
    if (work !== null && timeout - (Date.now() - work) > 0) { 
      let time = ms(timeout - (Date.now() - work)); 
      message.channel.send(`You already worked, try again in **${time}**!`) 
    } else { 
      var job = jobs[Math.floor(Math.random() * jobs.length)]; 
      message.channel.send(`You worked as a ${job} and earned ${amount} <:shart:646075915293687810>`) 
      db.add(`money_${message.author.id}`, amount) 
      db.set(`work_${message.author.id}`, Date.now()) 
    } 
  } 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:00:49