前提:我不是编码大师,尽管不是一个新手,但对JavaScript和Discord还是陌生的。我环顾四周,并询问某人有关此问题的信息,但无济于事,因此不胜感激。 (这使用的是Node.js,Discord.js)
我开始制作一个简单的机器人,可以响应您的消息,并且我成功地做到了。然后,我继续尝试为其赋予switch
语句,以使其根据所讲内容执行不同的操作。因为我不了解JavaScript,所以我以为我会从简单开始并逐步熟悉。但是,这不能很好地进行。
问题:设置switch
语句后,我发现它只会使用首先初始化的switch
语句的第一个实例。它永远不会交换到下一个。如果switch
语句的工作与我将其更改为if/else
语句之前所看到的不太一样。奇怪的是,发生了相同的结果。我将其简化为基本逻辑无济于事。
// Run dotenv
require('dotenv').config();
const fs = require('fs');
const Discord = require('discord.js');
const client = new Discord.Client();
//Set Var
var testNumb = 0;
// Code Start
console.log("Initial value" + testNumb);
if(testNumb == 0){
console.log("Case 0: Entry value: " + testNumb);
testNumb = 1;
console.log("Case 0: Exit value: " + testNumb);
}else if(testNumb == 1){
console.log("Case 1: Entry value: " + testNumb);
testNumb = 2;
console.log("Case 1: Exit value: " + testNumb);
}else if(testNumb == 2){
console.log("Case 2: Entry value: " + testNumb);
testNumb = 3;
console.log("Case 2: Exit value: " + testNumb);
}else if(testNumb == 3){
console.log("Case 3: Entry value: " + testNumb);
testNumb = 4;
console.log("Case 3: Exit value: " + testNumb);
}else{
console.log("We made it!");
console.log("Current Value: " + testNumb);
};
console.log("Final value: " + testNumb);
控制台结果:
Initial value: 0
Case 0: Entry value: 0
Case 0: Exit value: 1
Final value: 1
已尝试:认为问题可能与无限循环场景有关,因此我将整个if/else
封装在
var testLoopGuard = 0;
if(testLoopGuard == 0){
if(testNumb == 4){ testLoopGuard = 1; };
console.log(testLoopGuard);
};
这没什么区别,但是testLoopGuard保持为0。控制台中的结果:
Initial value: 0
Case 0: Entry value: 0
Case 0: Exit value: 1
0
Final value: 1
已尝试:我的下一个想法是,可能初始循环var testNumb = 0
被循环而不是被初始化。因此,我将其更改为var testNumb;
以调用将其设置为null的初始化,并在情况0中通过更改逻辑以查找未定义的值对其进行了初始化。结果保持不变。
已尝试:接下来,我认为也许不是主循环正常执行的循环,所以它只运行第一个条件,然后程序实质上结束了。不过,这似乎不太可能,因为当使用诸如此类的东西时,它能够监听用户输入的无穷大。
client.on('message', msg => { if (msg.content === 'ping') { msg.reply('pong'); } });
已尝试:出于好奇,我尝试使用
client.on('message'...
设置封装整个模块,并将登录名添加为使用它的机器人代码。这种半完成的方法,但是每次用户输入只能上一步,但是必须输入文本以使其上一步或记录更改,这在任何程序中都不是理想的选择。
client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`); }); client.login(process.env.DISCORD_TOKEN); client.once('ready', () => { console.log('Ready!'); }); client.on('message', message => { *original code* });
已尝试:之后,我尝试将
console.log("Initial value: " + testNumb);
和console.log("Final value: " + testNumb);
移出封装,但是它们在第一次运行时只工作了一次,再也没有运行过。控制台中的结果:
Initial value: 0 Final value: 0 Case 0: Entry Value: 0 Case 0: Exit Value: 1 *user entry* Case 1: Entry Value: 1 Case 1: Exit Value 2 *user entry* Case 2: Entry Value: 2 Case 2: Exit Value 3
依此类推。
想法:考虑到所有这些,显然有一个循环正在检查内容,但是由于某种原因,它在第一次运行循环后实际上并没有对内容做任何事情。我可能会错过一些简单的东西,而且除了while
和for
循环以外,我找不到其他循环的信息,因此我只能假定主循环默认是内置的,因为它确实具有侦听和重复的能力,但如果是这样,为什么这个简单的序列不起作用?我知道这不是最花哨的做事方式,并且可能有很多更好的方法可以真正制作一个完整的程序/机器人,但是了解为什么这样做不起作用以及如何解决它是很关键的。谢谢您的时间和事先的帮助!
前提:我不是编码大师,虽然不是一个新手,但对JavaScript和Discord还是陌生的。我环顾四周,并向某人询问了此问题,但无济于事,因此任何帮助都将...
看起来像if / else语句正在按预期方式运行。