Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript If语句在不应该时触发';T_Javascript_Json_Node.js_Fs - Fatal编程技术网

Javascript If语句在不应该时触发';T

Javascript If语句在不应该时触发';T,javascript,json,node.js,fs,Javascript,Json,Node.js,Fs,如果没有具有公会id的命令,第14行应该触发 如果用户在该公会中没有命令,则第15行应触发, 但是 !commands@Rusty#2746返回此帮会中没有命令。在服务器中走开。(我在此服务器中有一个命令) !commands@Rusty#2746在该帮会中不返回任何命令。和服务器中的实际命令外科地精。(我在此服务器中有一个命令) let user=message.notices.users.first(); if(args.length!==1)返回message.reply(“参数不正确,+

如果没有具有公会id的命令,第14行应该触发

如果用户在该公会中没有命令,则第15行应触发, 但是

!commands@Rusty#2746
返回
此帮会中没有命令。
在服务器中
走开
。(我在此服务器中有一个命令)

!commands@Rusty#2746
在该帮会中不返回任何命令。服务器中的实际命令
外科地精
。(我在此服务器中有一个命令)

let user=message.notices.users.first();
if(args.length!==1)返回message.reply(“参数不正确,+args.length+”给定,需要1”);
if(message.indications.users.size!==1)返回message.reply(“您必须提到一个用户才能查看的命令”);
fs.readFile(path.join(uu dirname,“../jsonFiles”)+“/customCommands.json”,“utf-8”,函数(err,data){
如果(错误)抛出错误;
var arrayOfObjects=JSON.parse(数据);
if(arrayOfObjects.commands.length==0)返回message.reply(“未找到自定义命令”);
for(设i=0;i

JSON:

如果解决方案对其他人有帮助,我在聊天中与OP讨论了这一点,发现出现问题的原因是OP希望将当前
消息的帮会与JSON数据中相应的帮会进行比较。因此,我建议完全去掉for循环,而是先找到公会(使用
find()
),然后进行比较:

let user = message.mentions.users.first();
if (args.length !== 1) return message.reply("Incorrect arguments, " + args.length + " given, 1 required.");
if (message.mentions.users.size !== 1) return message.reply("You must mention a user to view the commands of.");

fs.readFile(path.join(__dirname, "../jsonFiles") + "/customCommands.json", "utf-8", function(err, data) {
  if (err) throw err;

  var arrayOfObjects = JSON.parse(data);

  if (arrayOfObjects.commands.length === 0) return message.reply("No custom commands found.");

  var guild = arrayOfObjects.commands.find(function(obj) { return obj.guild_id == message.guild.id; });

  if (message.guild.id !== guild.guild_id) return message.reply("No commands in guild.");
  if (message.guild.id !== guild.guild_id && user.id !== guild.user_id) return message.reply(user.username + " has no commands in this guild.");

  fs.writeFile(path.join(__dirname, "../jsonFiles") + "/customCommands.json", JSON.stringify(arrayOfObjects, null, 2), "utf-8", function(err) {
      if (err) throw err;
      const embed = new Discord.RichEmbed()
      .setColor(0x08F258)
      .setAuthor("Custom Commands for " + user.username, message.author.avatarURL)
      .addField(guild.command_name, guild.command_reply)
       return message.channel.sendEmbed(embed);
    });

});

如果这个解决方案对其他任何人都有帮助,我在聊天中与OP讨论了这个问题,发现问题的出现是因为OP想要将当前的
消息
的帮会与JSON数据中相应的帮会进行比较。因此,我建议完全去掉for循环,而是先找到公会(使用
find()
),然后进行比较:

let user = message.mentions.users.first();
if (args.length !== 1) return message.reply("Incorrect arguments, " + args.length + " given, 1 required.");
if (message.mentions.users.size !== 1) return message.reply("You must mention a user to view the commands of.");

fs.readFile(path.join(__dirname, "../jsonFiles") + "/customCommands.json", "utf-8", function(err, data) {
  if (err) throw err;

  var arrayOfObjects = JSON.parse(data);

  if (arrayOfObjects.commands.length === 0) return message.reply("No custom commands found.");

  var guild = arrayOfObjects.commands.find(function(obj) { return obj.guild_id == message.guild.id; });

  if (message.guild.id !== guild.guild_id) return message.reply("No commands in guild.");
  if (message.guild.id !== guild.guild_id && user.id !== guild.user_id) return message.reply(user.username + " has no commands in this guild.");

  fs.writeFile(path.join(__dirname, "../jsonFiles") + "/customCommands.json", JSON.stringify(arrayOfObjects, null, 2), "utf-8", function(err) {
      if (err) throw err;
      const embed = new Discord.RichEmbed()
      .setColor(0x08F258)
      .setAuthor("Custom Commands for " + user.username, message.author.avatarURL)
      .addField(guild.command_name, guild.command_reply)
       return message.channel.sendEmbed(embed);
    });

});

是否可能存在类型不匹配?我们看不到
message.guild.id
是如何定义的……它是否像
arrayOfObjects.commands[i].guild\u id
一样,也是一个字符串?在第13行,我记录了它,它给了我正确的帮会id。
message.guild.id
是内置在Discord.js(我正在使用的框架)中的。但即使根据log语句,该值显然匹配,类型可能不同。例如,尝试将第14行的不等式运算符从
更改为==
=。。。如果<代码>条件仍然为真,则<代码>条件是否仍然为真?@nb1987我得到的响应与<代码>在帮会中没有命令的情况相同。如果您<代码>控制台.log(arrayOfObjects.commands[I].guild\u id)
,输出是什么?(顺便说一句,您可以添加一个
调试器;
语句,而不是使用
控制台.log
来添加断点;这使得检查代码更容易。一旦遇到断点,然后在命令行上键入
repl
。在
repl
模式下,您可以键入任意表达式,如
arrayOfObjects.commands[i].guild_id
--并检查返回值。)使用Ctrl+C退出repl模式,然后使用
C
继续执行。是否可能存在类型不匹配?我们看不到
message.guild.id
是如何定义的……它是否像
arrayOfObjects.commands[i].guild\u id
一样,也是一个字符串?在第13行,我记录了它,它给了我正确的帮会id。
message.guild.id
是内置在Discord.js(我正在使用的框架)中的。但即使根据log语句,该值显然匹配,类型可能不同。例如,尝试将第14行的不等式运算符从
更改为==
=。。。如果<代码>条件仍然为真,则<代码>条件是否仍然为真?@nb1987我得到的响应与<代码>在帮会中没有命令的情况相同。如果您<代码>控制台.log(arrayOfObjects.commands[I].guild\u id)
,输出是什么?(顺便说一句,您可以添加一个
调试器;
语句,而不是使用
控制台.log
来添加断点;这使得检查代码更容易。一旦遇到断点,然后在命令行上键入
repl
。在
repl
模式下,您可以键入任意表达式,如
arrayOfObjects.commands[i].guild_id
--并检查返回值。)使用Ctrl+C退出repl模式,使用
C
继续执行。