code: public DefaultShardManagerBuilder addEventListenerProviders(final Collection<IntFunction<Object>> listenerProviders)
      {
          Checks.noneNull(listenerProviders, "listener providers");
  
          this.listenerProviders.addAll(listenerProviders);
          return this;
      }
docs: Adds the provided listener providers to the list of listener providers that will be used to create listeners.
  On shard creation (including shard restarts) each provider will have the shard id applied and must return a listener,
  which will be used, along all other listeners, to populate the listeners of the JDA object of that shard.
  
  <br>This uses the {@link net.dv8tion.jda.core.hooks.InterfacedEventManager InterfacedEventListener} by default.
  <br>To switch to the {@link net.dv8tion.jda.core.hooks.AnnotatedEventManager AnnotatedEventManager},
  use {@link #setEventManagerProvider(IntFunction) setEventManager(id -> new AnnotatedEventManager())}.
  
  <p><b>Note:</b> When using the {@link net.dv8tion.jda.core.hooks.InterfacedEventManager InterfacedEventListener} (default),
  given listener(s) <b>must</b> be instance of {@link net.dv8tion.jda.core.hooks.EventListener EventListener}!
  
  @param  listenerProviders
  The listener provider to add to the list of listener providers.
  
  @return The DefaultShardManagerBuilder instance. Useful for chaining.