是Java的新手(Discord机器人),If-Else / Switch语句不起作用

问题描述 投票:0回答:1

前提:我不是编码大师,尽管不是一个新手,但对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

依此类推。

想法:考虑到所有这些,显然有一个循环正在检查内容,但是由于某种原因,它在第一次运行循环后实际上并没有对内容做任何事情。我可能会错过一些简单的东西,而且除了whilefor循环以外,我找不到其他循环的信息,因此我只能假定主循环默认是内置的,因为它确实具有侦听和重复的能力,但如果是这样,为什么这个简单的序列不起作用?我知道这不是最花哨的做事方式,并且可能有很多更好的方法可以真正制作一个完整的程序/机器人,但是了解为什么这样做不起作用以及如何解决它是很关键的。谢谢您的时间和事先的帮助!

前提:我不是编码大师,虽然不是一个新手,但对JavaScript和Discord还是陌生的。我环顾四周,并向某人询问了此问题,但无济于事,因此任何帮助都将...

javascript switch-statement bots discord discord.js
1个回答
0
投票

看起来像if / else语句正在按预期方式运行。

© www.soinside.com 2019 - 2024. All rights reserved.