Skip to content
Advertisement

Multiple if/else conditions (discord bot)

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..

Advertisement

Answer

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.")
}

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement