code: public ScheduledFuture<?> queueAfter(long delay, TimeUnit unit)
      {
          return queueAfter(delay, unit, api.get().getRateLimitPool());
      }
docs: Schedules a call to {@link #queue()} to be executed after the specified {@code delay}.
  <br>This is an <b>asynchronous</b> operation that will return a
  {@link java.util.concurrent.ScheduledFuture ScheduledFuture} representing the task.
  
  <p>This operation gives no access to the response value.
  <br>Use {@link #queueAfter(long, java.util.concurrent.TimeUnit, java.util.function.Consumer)} to access
  the success consumer for {@link #queue(java.util.function.Consumer)}!
  
  <p>The global JDA {@link java.util.concurrent.ScheduledExecutorService ScheduledExecutorService} is used for this operation.
  <br>You can change the core pool size for this Executor through {@link net.dv8tion.jda.core.JDABuilder#setCorePoolSize(int) JDABuilder.setCorePoolSize(int)}
  or provide your own Executor with {@link #queueAfter(long, java.util.concurrent.TimeUnit, java.util.concurrent.ScheduledExecutorService)}
  
  @param  delay
  The delay after which this computation should be executed, negative to execute immediately
  @param  unit
  The {@link java.util.concurrent.TimeUnit TimeUnit} to convert the specified {@code delay}
  
  @throws java.lang.IllegalArgumentException
  If the provided TimeUnit is {@code null}
  
  @return {@link java.util.concurrent.ScheduledFuture ScheduledFuture}
  representing the delayed operation