javascript - Discord.JS 命令问题
问题描述
我一直在研究这个命令(我有问题),当用户说 时u?hi
,机器人会在将你放入集合之前回复。然后,您将进入 20 秒的超时状态,当您处于超时状态时,如果您键入u?hi
,机器人会回复gotta wait x seconds
。当超时结束时,他们可以打字u?hi
并且循环继续进行。
但是,我遇到了一个问题。在我的代码中,在 do 之后u?hi
,我会超时(就像我计划的那样)。但是,在超时期间,如果我输入u?hi
while 让我们说超时 1 秒,而不是机器人说gotta wait 19 more seconds
,机器人说gotta wait 19 more seconds
然后开始倒计时一直到 0。这就是我的意思(屏幕截图):
这是我的代码:
const intervalSet = new Set();
bot.on("message", msg => {
let args = msg.content.substring(prefix.length).split(" ");
switch (args[0]) {
case "hi":
var interval = 20;
var intervalID;
if (intervalSet.has(msg.author.id)) {
intervalID = setInterval(() => {
interval -= 1;
if (interval !== 0 && args[0] === 'hi') {
msg.channel.send(`gotta wait ${interval} more seconds`);
}
if (interval === 0) {
clearInterval(intervalID);
msg.channel.send(`Ended`);
intervalSet.delete(msg.author.id);
}
}, 1000);
} else {
intervalSet.add(msg.author.id);
msg.channel.send("heyy");
}
}
});
我试过移动
if (interval !== 0 && args[0] === 'hi') {
msg.channel.send(`gotta wait ${interval} more seconds`);
}
部分到代码的其他地方并对其进行更改,但似乎没有任何效果。我能做些什么呢?
解决方案
是的,这对您的代码很正常。您需要做的是创建一个名为cooldown
. 用户 ID 将与时间相关联,因此您将能够计算用户处于冷却时间的时间。
这是您的代码的更新:
const cooldown = new Map();
bot.on("message", msg => {
let args = msg.content.substring(prefix.length).split(" ");
switch (args[0]) {
case "hi":
var interval = 20000; // use milliseconds instead of seconds
var intervalID;
if (cooldown.has(msg.author.id)) {
let cooldownTime = Date.now() - cooldown.get(msg.author.id);
let timeToWait = (interval-cooldownTime)/1000;
if(cooldownTime < interval) {
return message.channel.send(`gotta wait ${timeToWait} more seconds`);
}
}
cooldown.set(msg.author.id, Date.now());
msg.channel.send("heyy");
}
});
如果您有任何问题,请不要犹豫发表评论!
推荐阅读
- android - 是否可以使用 kotlin 将数据从 recyclerview 适配器共享到 bottomsheetdialogfragment?
- java - Java 复合模式:为什么我不能自己添加一个组?
- python - 从 Queryset Django 中填写缺失的数据
- reactjs - 如何定义组件类型?
- r - quantmod 两次向图表添加指标
- javascript - 如何使用 Intersection Observer API 获取所有条目?
- java - 无法观察发送到 Azure 时间序列洞察资源管理器的事件
- google-cloud-storage - JSON文件凭据的替代品?
- python-3.x - 如何将 LSTM 与 Dense 连接起来?
- github - 将 github 存储库添加到我的作曲家项目