default @NonNull CompletableFuture<CommandResult<C>> executeCommand(
            final @NonNull C commandSender,
            final @NonNull String input
    ) {
        return this.executeCommand(commandSender, input, context -> {});
    }
Executes a command and get a future that completes with the result. The command may be executed immediately
or at some point in the future, depending on the {@link ExecutionCoordinator} used in the command manager.

<p>The command may also be filtered out by preprocessors (see {@link CommandPreprocessor}) before they are parsed,
or by the {@link CommandComponent} command components during parsing. The execution may also be filtered out
after parsing by a {@link CommandPostprocessor}. In the case that a command was filtered out at any of the
execution stages, the future will complete with {@code null}.</p>

<p>The future may also complete exceptionally.
These exceptions will be handled using exception handlers registered in the
{@link org.incendo.cloud.exception.handling.ExceptionController}.
The exceptions will be forwarded to the future, if the exception was transformed during the exception handling, then the
new exception will be present in the completed future.</p>

@param commandSender Sender of the command
@param input         Input provided by the sender. Prefixes should be removed before the method is being called, and
                     the input here will be passed directly to the command parsing pipeline, after having been tokenized.
@return future that completes with the command result, or {@code null} if the execution was cancelled at any of the
        processing stages.
cloud-core/src/main/java/org/incendo/cloud/execution/CommandExecutor.java