Javascript If语句在不应该时触发';T
如果没有具有公会id的命令,第14行应该触发 如果用户在该公会中没有命令,则第15行应触发, 但是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(“参数不正确,+
!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
继续执行。