我的问题是:我怎样才能制作一个命令时钟(当你执行!count
时,4分钟后你输入!time
,它显示4分钟!)不和谐.js
const Discord = require('discord.js');
exports.run = (client, message) => {
var af = 0;
a = setInterval(function(){
console.log("Hi");
af = af+1;
if(af == 25){
clearInterval(a);
}
console.log(af);
}, 60000);
};
exports.help = {
name: 'time',
description: 'time?',
usage: 'time'
};
最佳答案
我会这样做:当您执行 !count
时,您会保存服务器时间,当您执行 !time
时,您会发回这两个日期之间的差异。
伪代码:
var date;
if (command == 'count') {
date = new Date();
message.reply("Done");
}
if (command == 'time') {
let result = require('pretty-ms')(date ? (new Date() - date) : 0);
message.reply(result);
}
我正在使用 pretty-ms
npm 包来格式化毫秒:docs & live demo .
当有人调用 !count
时,将当前日期存储在某处。 new Date() - date
将为您提供当前时间和您存储的时间之间的差异(以毫秒为单位)。
请注意,如果命令位于不同的文件中,正如您发布的代码所示,您需要将日期存储在两个文件均可访问的位置:解决方案之一是将日期存储为全局变量。
// by '...' I mean that you can put it wherever you want in the global object
global['...'].date = new Date():
new Date() - global['...'].date
编辑:Date
类说明
当您创建新的日期
时,它会保存您创建它时的时间。这就像说“!count
于 04:20 执行”。当你想检查已经过去了多少时间时,你需要计算第一个日期减去当前日期:"!count
是在 04:20 执行的。现在是 05:40,所以区别在于 05:40 - 04:20 = 01:20
:距离您第一次执行 !count
已经过去了 1 小时 20 分钟”。这将转换为new Date() - past_date = time_passed
。
由于日期以毫秒为单位存储,因此差异以毫秒为单位:如果您想让它更具可读性,您可以使用 'pretty-ms'
包或类似的函数来格式化它。< br/>
关键概念是:
- 调用
!count
时,您可以保存一个new Date()
来锁定该时间点 - 当调用
!time
时,您可以通过执行new Date() - Past_date
来获得差异
关于discord.js - 如何制作命令时间计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53501474/