code: public T complete(boolean shouldQueue) throws RateLimitedException
      {
          if (CallbackContext.isCallbackContext())
              throw new IllegalStateException("Preventing use of complete() in callback threads! This operation can be a deadlock cause");
          try
          {
              return submit(shouldQueue).get();
          }
          catch (Throwable e)
          {
              if (e instanceof ExecutionException)
              {
                  Throwable t = e.getCause();
                  if (t instanceof RateLimitedException)
                      throw (RateLimitedException) t;
                  else if (t instanceof  PermissionException)
                      throw (PermissionException) t;
                  else if (t instanceof ErrorResponseException)
                      throw (ErrorResponseException) t;
              }
              throw new RuntimeException(e);
          }
      }
docs: Blocks the current Thread and awaits the completion
  of an {@link #submit()} request.
  <br>Used for synchronous logic.
  
  @param  shouldQueue
  Whether this should automatically handle rate limitations (default true)
  
  @throws IllegalStateException
  If used within a {@link #queue(Consumer, Consumer) queue(...)} callback
  @throws RateLimitedException
  If we were rate limited and the {@code shouldQueue} is false.
  Use {@link #complete()} to avoid this Exception.
  
  @return The response value