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循环和香港专业教育学院尝试了多个版本的代码我在那里
最终目标是,如果用户发送“垃圾邮件”一词,机器人应该不断发送“垃圾邮件”一词,并继续这样做,直到机器人关闭或用户发送“停止垃圾邮件”字样
答案 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)
以下是您应该了解的与您合作的代码:
message.channel.send
会返回Promise
,因此您无法将其置于while
循环中,因为您需要true
或{{{{}} 1}}(a false
)。Boolean
内查看内容是否等于{时,您正在尝试检查邮件的内容是否等于'stop spam'
{1}} - 所以你永远不会进入内部if-statement
。我建议更多地练习基本的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');
如果您想对任何内容进行任何其他说明,或者您希望在此处看到一些调整,请与我们联系。