如何使用不和谐命令停止 setInterval() 循环?

时间:2021-06-01 12:49:42

标签: javascript node.js discord.js bots

我为 Discord 服务器编写了自己的机器人。所以,我想创建命令,它可以每 3 秒更改一次您的昵称(是的,它是如此无用,但很有趣:3)。所以,我编写了启动程序,但我不知道如何在不崩溃的情况下停止这台机器。我想做单独的参数“停止”,这将停止循环并恢复旧昵称。我怎样才能在一个脚本中做到这一点? Discord 中的命令看起来像 ?nicks start?nicks stop。 我有一个处理程序脚本,它检查 config.json 中的命令巧合并从命令传递参数和消息对象。所以,我的目标是在一个脚本中启动和停止函数。 Cylce 由 setInterval() 重新实现,我必须停止它。我希望有人会明白我想要什么...) P.S.对不起我的英语:3

'use strict';
const Discord = require('discord.js');
const config = require('../config.json');
const writeLogs = require('../writeLogs.js'); 
const fs = require('fs');

function creepingLine(msg, args) {
    const user = msg.guild.member(msg.author) 
    const firstNickname = user.nickname; // backup for stopping
    if (args[0] === "старт") {
        let nicks = args.slice(1);
        let pointer = 0;
        function changeNick() {
            user.setNickname(nicks[pointer]);
            if (pointer === nicks.length - 1) {
                pointer = 0;
            }
            else pointer++; 
        }
        let timer = setInterval(changeNick, 3000);
    }
}

module.exports = creepingLine;

1 个答案:

答案 0 :(得分:0)

您可以创建一个对象来保留对间隔的引用,如下所示:

...
const intervals = {};

function creepingLine(msg, args) {
    ...
        intervals[msg.author] = setInterval(changeNick, 3000);
    }
}

然后用它来停止间隔

function stopInterval(author) {
    clearInterval(intervals[author]);
}
相关问题