discord.js垃圾邮件命令麻烦

时间:2018-02-05 00:11:13

标签: javascript node.js discord discord.js

  bot.on('message', message => {
    if (message.content === 'spam') {
        message.channel.send('spam');
        while (message.channel.send('spam')) {
            if (message.content === 'stop spam') {
                return message.channel.send('stopped');
            }
        }
    }
});

即时通讯仍然是javascript的新手,所以我不确定这是否有可能我一直试图做的方式我通过w3schools developers.mozilla,甚至已经在这里的一些问题;香港专业教育学院尝试使用do while,for for循环和香港专业教育学院尝试了多个版本的代码我在那里

最终目标是,如果用户发送“垃圾邮件”一词,机器人应该不断发送“垃圾邮件”一词,并继续这样做,直到机器人关闭或用户发送“停止垃圾邮件”字样

2 个答案:

答案 0 :(得分:0)

尝试使用变量。您不能将message.channel.send('spam')用于while循环。

var spam = false;
if (message.content === 'spam') {
    if (message.author.id !== bot.user.id) { // Replace bot with the instance of your bot Client.
        spam = true;
    } else {
        if(spam) {
            message.channel.send('spam');
        }
    }
    if (message.content === 'stop spam') {
        if(spam) {
            message.channel.send('stopped');
        }
        spam = false;
    }
}

答案 1 :(得分:0)

以下是您应该了解的与您合作的代码:

  1. message.channel.send会返回Promise,因此您无法将其置于while循环中,因为您需要true或{{{{}} 1}}(a false)。
  2. 现在,当您在Boolean内查看内容是否等于{时,您正在尝试检查邮件的内容是否等于'stop spam' {1}} - 所以你永远不会进入内部if-statement
  3. 我建议更多地练习基本的javascript,然后转移到Node.js,然后回到Discord.js - 但是,看到垃圾邮件发送者的工作可能很酷,所以我写了一些垃圾邮件代码你可以使用 - 检查出来:

    首先,创建一个名为'spam'的新文件,如下所示(请参阅代码中的注释,了解正在进行的操作):

    if-statement

    接下来,将该文件导入spamCtrl.js文件(必须与let spamming = false; let spamChannel = undefined; // spam function repeats until variable spamming is false function spam() { return new Promise((resolve, reject) => { // add check to make sure discord channel exists if (!spamChannel) reject('Channel is undefined!'); // send message on spam channel spamChannel.send('spam') .then(msg => { // wait 100 ms until sending next spam message setTimeout(() => { // continue spamming if spamming variable is true if (spamming) { spam() .then(resolve) // not entirely necessary, but good practice .catch(console.log); // log error to console in case one shows up } // otherwise, just resolve promise to end this looping else { resolve(); } }, 100) }) .catch(console.log); }); } // public functions that will be used in your index.js file module.exports = { // pass in discord.js channel for spam function setChannel: function(channel) { spamChannel = channel; }, // set spam status (true = start spamming, false = stop spamming) setStatus: function (statusFlag) { // get current status let currentStatus = spamming; // update spamming flag spamming = statusFlag; // if spamming should start, and it hasn't started already, call spam() if (statusFlag && currentStatus != statusFlag) { spam(); } }, // not used in my commands, but you may find this useful somewhere getStatus: function() { return spamming; } }; 文件位于同一目录中 - 除非您更改下面的index.js声明。)

    spamCtrl.js

    最后一步:在require文件中(或您处理垃圾邮件命令的任何地方)设置命令(可以根据需要重命名):

    // in index.js file, get controller for spam messages
    let spamCtrl = require('./spamCtrl');
    

    如果您想对任何内容进行任何其他说明,或者您希望在此处看到一些调整,请与我们联系。