Method to delegate command to other methods Since I am working alone on this, I would like someone who would take a look and point out any mistakes or things I could have done better.
My questions:

How could I improve this big switch statement?
Is there any obvious beginner flaws?

The executeModeration is a method I call when a command is an moderation command. The command.parameters[0] contains the parameters a commmand needs to be executed
const executeModeration = async (command, channel) =&gt; {
  switch (command.command)  {
    case &quot;ban&quot;:
      if(command.parameters[0])
        await moderation.ban(channel, command.parameters[0], command.parameters[1] !== undefined ? command.parameters[1] : '');
      break;
    case &quot;unban&quot;:
      if(command.parameters[0])
        await moderation.unban(channel, command.parameters[0]);
      break;
    case &quot;timeout&quot;:
      if(command.parameters[0])
        await moderation.timeout(channel, command.parameters[0], command.parameters[1] !== undefined ? command.parameters[1] : 300, command.parameters[2] !== undefined ? command.parameters[2] : '');
      break;
    case &quot;emoteonly&quot;:
      await moderation.emoteonly(channel);
      break;
    case &quot;emoteonlyoff&quot;:
      await moderation.emoteonlyoff(channel);
      break;
    case &quot;followersonly&quot;:
      await moderation.followersonly(channel,command.parameters[0] !== undefined ? command.parameters[0] : 30);
      break;
    case &quot;followersonlyoff&quot;:
      await moderation.followersonlyoff(channel);
      break;
    case &quot;r9kbeta&quot;:
      await moderation.r9kbeta(channel);
      break;
    case &quot;r9kbetaoff&quot;:
      await moderation.r9kbetaoff(channel);
      break;
    case &quot;slow&quot;:
      await moderation.slow(channel, command.parameters[0] !== undefined ? command.parameters[0] : 30);
      break;
    case &quot;slowoff&quot;:
      await moderation.slowoff(channel);
      break;
    case &quot;subscribers&quot;:
      await moderation.subscribers(channel);
      break;
    case  &quot;subscribersoff&quot;:
      await moderation.subscribersoff(channel);
      break;
    case  &quot;mod&quot;:
      if(command.parameters[0])
        await moderation.mod(channel, command.parameters[0]);
      break;
    case  &quot;unmod&quot;:
      if(command.parameters[0])
        await moderation.unmod(channel, command.parameters[0]);
      break;
    case  &quot;vip&quot;:
      if(command.parameters[0])
        await moderation.vip(channel, command.parameters[0]);
      break;
    case  &quot;unvip&quot;:
      if(command.parameters[0])
        await moderation.unvip(channel, command.parameters[0]);
      break;
    case  &quot;clear&quot;:
      await moderation.clear(channel);
      break;
    case  &quot;host&quot;:
      if(command.parameters[0])
        await moderation.host(channel, command.parameters[0]);
      break;
    case  &quot;unhost&quot;:
      await moderation.unhost(channel);
      break;
    case  &quot;commercial&quot;:
      if(command.parameters[0])
        await moderation.commercial(channel, command.parameters[0]);
      break;
  }
Spread Similar to Mohammed's answer, but without mutation and with spread syntax, which I find easier to read than .apply, you can do something like:
const executeModeration = async (command, channel) =&gt; {
    await moderation[command.command](...command.parameters);
}

Default parameters
You use a number of conditional operators when calling functions, eg:
.ban(
    channel,
    command.parameters[0],
    command.parameters[1] !== undefined ? command.parameters[1] : ''
);

.timeout(
    channel,
    command.parameters[0],
    command.parameters[1] !== undefined ? command.parameters[1] : 300,
    command.parameters[2] !== undefined ? command.parameters[2] : ''
);

If possible, it would be good to define the methods such that they assign default parameters, rather than having to pass the defaults from up above. For example, for the timeout method, you could define it like:
timeout(arg1, arg2 = 300, arg3 = '') {
}

and then simply pass the spread parameters when calling timeout from the script in your question, and the default parameters will take care of the rest.
If you cannot modify the moderation object's methods, then a DRY way to create these default parameters would be to make an object indexed by command, whose values are functions which need default parameters and call the moderation method. For example, for .ban and .timeout:
const executeModeration = ({ command, parameters }, channel) =&gt; {
    const fnsWithDefaultParams = {
        ban(arg1, arg2 = '') {
            return moderation.ban(channel, arg1, arg2);
        },
        timeout(arg1, arg2 = 300, arg3 = '') {
            return moderation.timeout(channel, arg1, arg2, arg3);
        },
        // ...
    };
    return fnsWithDefaultParams[command]
        ? fnsWithDefaultParams[command](...parameters)
        : moderation[command](...parameters)
};


Note that there's now no need for an async function if the function explicitly returns a Promise, like above.