【问题标题】:Bot doesn't go over switch case properly | Discord.js v12Bot 无法正确检查开关盒 |不和谐.js v12
【发布时间】:2021-04-06 20:52:51
【问题描述】:

我正在检查我的 discord 机器人,试图稍微重构我的代码,我有这个 switch case,它可以完美地与 if/else 配合使用,但它不能在 switch 中运行。任何想法为什么?我尝试了很多东西,但我无法让它工作......我也很确定这是我正在做的一个愚蠢的错误...... 有问题的案例是未运行的“自我”案例。 所以正常情况下是这样的

if (getTag == self) {
   // code
}

这里是代码。 提前致谢!

var getTag = message.mentions.users.first(); 
var self = message.author.id;
switch (getTag) {
    case undefined: 
        // sample
        break;
    case self:
        // sample
        break;
    case client.user: 
        // sample 
        break;
    default: 
        // sample
        break;
}

【问题讨论】:

  • 你能发布当前工作的 if-else 代码吗?

标签: javascript discord.js


【解决方案1】:

message.mentions.users.first() 返回一个用户对象。这意味着,您不能简单地将其与其他对象或字符串进行比较。

您的第一种情况,undefined 将起作用,因为如果没有提及,message.mentions.users.first() 返回 undefined。

第二个不起作用,因为您尝试将对象与字符串(用户 ID)进行比较。

当您尝试将用户对象与另一个用户对象进行比较时,第三个也不起作用。

尝试只比较它的id 属性,甚至更好,去掉 switch 语句并改用 if 语句:

const getTag = message.mentions.users.first();
const self = message.author;

if (!getTag) {
  // same as case: undefined
  return;
}

if (getTag.id === self.id) {
  // same as case: self
  return;
}

if (getTag.id === client.user.id) {
// same as case: client.user
  return;
}

// same as default case

【讨论】:

  • 感谢您的解释!我将回到 if 语句。我只是认为 switch 看起来会更好,但它却影响了我的整个机器人:D
  • 不客气,我也更喜欢 if 语句 :)
【解决方案2】:

您将用户对象与用户 ID 进行比较,因此您需要将 getTag 更改为以下代码:

var getTag = message.mentions.users.first() ? message.mentions.users.first().id : undefined; 

【讨论】:

  • 如果没有提及,这将引发错误。
  • 我已经更改了我的代码,谢谢@ZsoltMeszaros
猜你喜欢
  • 2021-07-18
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 2021-08-26
  • 2021-02-01
  • 2021-06-23
相关资源
最近更新 更多