Thursday, May 23, 2024
 Popular · Latest · Hot · Upcoming
131
rated 0 times [  135] [ 4]  / answers: 1 / hits: 5976  / 3 Years ago, thu, january 14, 2021, 12:00:00

I'm trying to create a simple discord bot, currently using nodeJS.
I'm creating specific commands that only specific users can use and whenever someone who does not have permission to use such command can get a reply "You don't have permission". (I hope you get the idea. sorry for the bad wording).


This is my current code:


const Discord = require('discord.js');
const client = new Discord.Client();
const prefix = '!';

client.once('ready', () => {
console.log('Bot is online');
});

client.on('message', message =>{
if(!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).split(/ +/);
const command = args.shift().toLowerCase();


if(command === 'ban' && message.author.id === "123456789"){
message.channel.send('suspended');
}
else{message.channel.send('no permission.')
;}
if(command === 'chat' && message.author.id === "123456789"){
message.channel.send('chat-restricted');
}
else{message.channel.send('no permission.')
;}
if(command === 'coins' && message.author.id === "123456789"){
message.channel.send('balance updated.');
}
else{message.channel.send('no permission.')
;}

if(command === 'coins 2' && message.author.id === "123456789"){
message.channel.send('balance updated.');
}
else{message.channel.send('no permission.')
;}
});


But what happens is, whenever someone uses a command, the yes or no condition will show 4 times, because there are 4 commands.


So if a user tried to use the !ban command the output would be


no permission
no permission
no permission
no permission

I'm pretty sure i messed up something in my if/else conditions but im not sure what it is..
Help is highly appreciated, i'm sorry for the bad wording of things..


More From » node.js

 Answers
3

As you have all the conditions separately they will execute one by one. You should use else if after the first clause to tie all the clauses.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else


You can also use a switch case statement for the use-case you explained.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch


    if(command === 'ban' && message.author.id === "123456789"){
message.channel.send('suspended');
}
else if(command === 'chat' && message.author.id === "123456789"){
message.channel.send('chat-restricted');
}
else if(command === 'coins' && message.author.id === "123456789"){
message.channel.send('balance updated.');
}
else if(command === 'coins 2' && message.author.id === "123456789"){
message.channel.send('balance updated.');
}
else{message.channel.send('no permission.')
;}

You can also simplify your if clause by checking the message.author.id first and then proceed to check which command is executed like the following.


if (message.author.id === "123456789"){
if(command === "coins 2"){
...
else if(command === "chat"){
...(command specific execution)
}
... (rest of the commands)
}else{
message.channel.send("No permission.")
}


[#1959] Sunday, January 10, 2021, 3 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
gerardob

Total Points: 571
Total Questions: 115
Total Answers: 96

Location: Cyprus
Member since Mon, Oct 24, 2022
2 Years ago
gerardob questions
;