Interface ShardManager

  • All Known Implementing Classes:
    DefaultShardManager

    public interface ShardManager
    This class acts as a manager for multiple shards. It contains several methods to make your life with sharding easier.
    Custom implementations my not support all methods and throw UnsupportedOperationExceptions instead.
    Since:
    3.4
    Author:
    Aljoscha Grebe
    • Method Detail

      • addEventListener

        default void addEventListener​(java.lang.Object... listeners)
        Adds all provided listeners to the event-listeners that will be used to handle events.

        Note: when using the InterfacedEventListener (default), given listener must be instance of EventListener!

        Parameters:
        listeners - The listener(s) which will react to events.
        Throws:
        java.lang.IllegalArgumentException - If either listeners or one of it's objects is null.
      • removeEventListener

        default void removeEventListener​(java.lang.Object... listeners)
        Removes all provided listeners from the event-listeners and no longer uses them to handle events.
        Parameters:
        listeners - The listener(s) to be removed.
        Throws:
        java.lang.IllegalArgumentException - If either listeners or one of it's objects is null.
      • addEventListeners

        default void addEventListeners​(java.util.function.IntFunction<java.lang.Object> eventListenerProvider)
        Adds listeners provided by the listener provider to each shard to the event-listeners that will be used to handle events. The listener provider gets a shard id applied and is expected to return a listener.

        Note: when using the InterfacedEventListener (default), given listener must be instance of EventListener!

        Parameters:
        eventListenerProvider - The provider of listener(s) which will react to events.
        Throws:
        java.lang.IllegalArgumentException - If the provided listener provider or any of the listeners or provides are null.
      • removeEventListeners

        default void removeEventListeners​(java.util.function.IntFunction<java.util.Collection<java.lang.Object>> eventListenerProvider)
        Remove listeners from shards by their id. The provider takes shard ids, and returns a collection of listeners that shall be removed from the respective shards.
        Parameters:
        eventListenerProvider - gets shard ids applied and is expected to return a collection of listeners that shall be removed from the respective shards
        Throws:
        java.lang.IllegalArgumentException - If the provided event listeners provider is null.
      • removeEventListenerProvider

        default void removeEventListenerProvider​(java.util.function.IntFunction<java.lang.Object> eventListenerProvider)
        Remove a listener provider. This will stop further created / restarted shards from getting a listener added by that provider. Default is a no-op for backwards compatibility, see implementations like DefaultShardManager.removeEventListenerProvider(IntFunction) for actual code
        Parameters:
        eventListenerProvider - The provider of listeners that shall be removed.
        Throws:
        java.lang.IllegalArgumentException - If the provided listener provider is null.
      • getShardsQueued

        int getShardsQueued()
        Returns the amount of shards queued for (re)connecting.
        Returns:
        The amount of shards queued for (re)connecting.
      • getShardsRunning

        default int getShardsRunning()
        Returns the amount of running shards.
        Returns:
        The amount of running shards.
      • getShardsTotal

        default int getShardsTotal()
        Returns the amount of shards managed by this ShardManager. This includes shards currently queued for a restart.
        Returns:
        The managed amount of shards.
      • getApplicationInfo

        default RestAction<ApplicationInfo> getApplicationInfo()
        Used to access Bot specific functions like OAuth information.
        Returns:
        The JDABot registry for this instance of JDA.
        Throws:
        java.lang.IllegalStateException - If there is no running shard
      • getAveragePing

        default double getAveragePing()
        The average time in milliseconds between all shards that discord took to respond to our last heartbeat. This roughly represents the WebSocket ping of this session. If there is no shard running this wil return -1.

        RestAction request times do not correlate to this value!

        Returns:
        The average time in milliseconds between heartbeat and the heartbeat ack response
      • getCategories

        default java.util.List<Category> getCategories()
        Gets all Categories visible to the currently logged in account.
        Returns:
        An immutable list of all visible Categories.
      • getCategoriesByName

        default java.util.List<Category> getCategoriesByName​(java.lang.String name,
                                                             boolean ignoreCase)
        Gets a list of all Categories that have the same name as the one provided.
        If there are no matching categories this will return an empty list.
        Parameters:
        name - The name to check
        ignoreCase - Whether to ignore case on name checking
        Returns:
        Immutable list of all categories matching the provided name
        Throws:
        java.lang.IllegalArgumentException - If the provided name is null
      • getCategoryById

        default Category getCategoryById​(long id)
        Gets the Category that matches the provided id.
        If there is no matching Category this returns null.
        Parameters:
        id - The snowflake ID of the wanted Category
        Returns:
        Possibly-null Category for the provided ID.
      • getCategoryById

        default Category getCategoryById​(java.lang.String id)
        Gets the Category that matches the provided id.
        If there is no matching Category this returns null.
        Parameters:
        id - The snowflake ID of the wanted Category
        Returns:
        Possibly-null Category for the provided ID.
        Throws:
        java.lang.IllegalArgumentException - If the provided ID is not a valid long
      • getEmoteById

        default Emote getEmoteById​(long id)
        Retrieves an emote matching the specified id if one is available in our cache.

        Unicode emojis are not included as Emote!

        Parameters:
        id - The id of the requested Emote.
        Returns:
        An Emote represented by this id or null if none is found in our cache.
      • getEmoteById

        default Emote getEmoteById​(java.lang.String id)
        Retrieves an emote matching the specified id if one is available in our cache.

        Unicode emojis are not included as Emote!

        Parameters:
        id - The id of the requested Emote.
        Returns:
        An Emote represented by this id or null if none is found in our cache.
        Throws:
        java.lang.NumberFormatException - If the provided id cannot be parsed by Long.parseLong(String)
      • getEmotesByName

        default java.util.List<Emote> getEmotesByName​(java.lang.String name,
                                                      boolean ignoreCase)
        An unmodifiable list of all Emotes that have the same name as the one provided.
        If there are no Emotes with the provided name, then this returns an empty list.

        Unicode emojis are not included as Emote!

        Parameters:
        name - The name of the requested Emotes.
        ignoreCase - Whether to ignore case or not when comparing the provided name to each Emote.getName().
        Returns:
        Possibly-empty list of all the Emotes that all have the same name as the provided name.
      • getGuildById

        default Guild getGuildById​(long id)
        This returns the Guild which has the same id as the one provided.
        If there is no connected guild with an id that matches the provided one, then this returns null.
        Parameters:
        id - The id of the Guild.
        Returns:
        Possibly-null Guild with matching id.
      • getGuildById

        default Guild getGuildById​(java.lang.String id)
        This returns the Guild which has the same id as the one provided.
        If there is no connected guild with an id that matches the provided one, then this returns null.
        Parameters:
        id - The id of the Guild.
        Returns:
        Possibly-null Guild with matching id.
      • getGuildsByName

        default java.util.List<Guild> getGuildsByName​(java.lang.String name,
                                                      boolean ignoreCase)
        An unmodifiable list of all Guilds that have the same name as the one provided.
        If there are no Guilds with the provided name, then this returns an empty list.
        Parameters:
        name - The name of the requested Guilds.
        ignoreCase - Whether to ignore case or not when comparing the provided name to each Guild.getName().
        Returns:
        Possibly-empty list of all the Guilds that all have the same name as the provided name.
      • getGuilds

        default java.util.List<Guild> getGuilds()
        An unmodifiable List of all Guilds that the logged account is connected to.
        If this account is not connected to any Guilds, this will return an empty list.
        Returns:
        Possibly-empty list of all the Guilds that this account is connected to.
      • getMutualGuilds

        default java.util.List<Guild> getMutualGuilds​(java.util.Collection<User> users)
        Gets all Guilds that contain all given users as their members.
        Parameters:
        users - The users which all the returned Guilds must contain.
        Returns:
        Unmodifiable list of all Guild instances which have all Users in them.
      • getMutualGuilds

        default java.util.List<Guild> getMutualGuilds​(User... users)
        Gets all Guilds that contain all given users as their members.
        Parameters:
        users - The users which all the returned Guilds must contain.
        Returns:
        Unmodifiable list of all Guild instances which have all Users in them.
      • retrieveUserById

        @CheckReturnValue
        default RestAction<User> retrieveUserById​(java.lang.String id)
        Attempts to retrieve a User object based on the provided id.
        This first calls getUserById(long), and if the return is null then a request is made to the Discord servers.

        The returned RestAction can encounter the following Discord errors:

        • ErrorResponse.UNKNOWN_USER
          Occurs when the provided id does not refer to a User known by Discord. Typically occurs when developers provide an incomplete id (cut short).
        Parameters:
        id - The id of the requested User.
        Returns:
        RestAction - Type: User
        On request, gets the User with id matching provided id from Discord.
        Throws:
        java.lang.IllegalArgumentException - If the provided id String is not a valid snowflake.
        java.lang.IllegalStateException - If there isn't any active shards.
      • retrieveUserById

        @CheckReturnValue
        default RestAction<User> retrieveUserById​(long id)
        Attempts to retrieve a User object based on the provided id.
        This first calls getUserById(long), and if the return is null then a request is made to the Discord servers.

        The returned RestAction can encounter the following Discord errors:

        • ErrorResponse.UNKNOWN_USER
          Occurs when the provided id does not refer to a User known by Discord. Typically occurs when developers provide an incomplete id (cut short).
        Parameters:
        id - The id of the requested User.
        Returns:
        RestAction - Type: User
        On request, gets the User with id matching provided id from Discord.
        Throws:
        java.lang.IllegalStateException - If there isn't any active shards.
      • getPrivateChannelById

        default PrivateChannel getPrivateChannelById​(long id)
        This returns the PrivateChannel which has the same id as the one provided.
        If there is no known PrivateChannel with an id that matches the provided one, then this returns null.
        Parameters:
        id - The id of the PrivateChannel.
        Returns:
        Possibly-null PrivateChannel with matching id.
      • getPrivateChannelById

        default PrivateChannel getPrivateChannelById​(java.lang.String id)
        This returns the PrivateChannel which has the same id as the one provided.
        If there is no known PrivateChannel with an id that matches the provided one, then this returns null.
        Parameters:
        id - The id of the PrivateChannel.
        Returns:
        Possibly-null PrivateChannel with matching id.
        Throws:
        java.lang.NumberFormatException - If the provided id cannot be parsed by Long.parseLong(String)
      • getRoleById

        default Role getRoleById​(long id)
        Retrieves the Role associated to the provided id.
        This iterates over all Guilds and check whether a Role from that Guild is assigned to the specified ID and will return the first that can be found.
        Parameters:
        id - The id of the searched Role
        Returns:
        Possibly-null Role for the specified ID
      • getRoleById

        default Role getRoleById​(java.lang.String id)
        Retrieves the Role associated to the provided id.
        This iterates over all Guilds and check whether a Role from that Guild is assigned to the specified ID and will return the first that can be found.
        Parameters:
        id - The id of the searched Role
        Returns:
        Possibly-null Role for the specified ID
        Throws:
        java.lang.NumberFormatException - If the provided id cannot be parsed by Long.parseLong(String)
      • getRoles

        default java.util.List<Role> getRoles()
        All Roles this ShardManager instance can see.
        This will iterate over each Guild retrieved from getGuilds() and collect its Guild.getRoles().
        Returns:
        Immutable List of all visible Roles
      • getRolesByName

        default java.util.List<Role> getRolesByName​(java.lang.String name,
                                                    boolean ignoreCase)
        Retrieves all Roles visible to this ShardManager instance.
        This simply filters the Roles returned by getRoles() with the provided name, either using String.equals(Object) or String.equalsIgnoreCase(String) on Role.getName().
        Parameters:
        name - The name for the Roles
        ignoreCase - Whether to use String.equalsIgnoreCase(String)
        Returns:
        Immutable List of all Roles matching the parameters provided.
      • getShardById

        default JDA getShardById​(int id)
        This returns the JDA instance which has the same id as the one provided.
        If there is no shard with an id that matches the provided one, then this returns null.
        Parameters:
        id - The id of the shard.
        Returns:
        The JDA instance with the given shardId or null if no shard has the given id
      • getShardById

        default JDA getShardById​(java.lang.String id)
        This returns the JDA instance which has the same id as the one provided.
        If there is no shard with an id that matches the provided one, then this returns null.
        Parameters:
        id - The id of the shard.
        Returns:
        The JDA instance with the given shardId or null if no shard has the given id
      • getShards

        default java.util.List<JDA> getShards()
        Gets all JDA instances bound to this ShardManager.
        Returns:
        An immutable list of all managed JDA instances.
      • getStatus

        default JDA.Status getStatus​(int shardId)
        This returns the JDA.Status of the shard which has the same id as the one provided.
        If there is no shard with an id that matches the provided one, then this returns null.
        Parameters:
        shardId - The id of the shard.
        Returns:
        The JDA.Status of the shard with the given shardId or null if no shard has the given id
      • getStatuses

        default java.util.Map<JDA,​JDA.Status> getStatuses()
        Gets the current Status of all shards.
        Returns:
        All current shard statuses.
      • getTextChannelById

        default TextChannel getTextChannelById​(long id)
        This returns the TextChannel which has the same id as the one provided.
        If there is no known TextChannel with an id that matches the provided one, then this returns null.

        Note: just because a TextChannel is present does not mean that you will be able to send messages to it. Furthermore, if you log into this account on the discord client, it is you will not see the channel that this returns. This is because the discord client hides any TextChannel that you don't have the Permission.MESSAGE_READ permission in.

        Parameters:
        id - The id of the TextChannel.
        Returns:
        Possibly-null TextChannel with matching id.
      • getTextChannelById

        default TextChannel getTextChannelById​(java.lang.String id)
        This returns the TextChannel which has the same id as the one provided.
        If there is no known TextChannel with an id that matches the provided one, then this returns null.

        Note: just because a TextChannel is present does not mean that you will be able to send messages to it. Furthermore, if you log into this account on the discord client, it is you will not see the channel that this returns. This is because the discord client hides any TextChannel that you don't have the Permission.MESSAGE_READ permission in.

        Parameters:
        id - The id of the TextChannel.
        Returns:
        Possibly-null TextChannel with matching id.
      • getTextChannels

        default java.util.List<TextChannel> getTextChannels()
        An unmodifiable List of all TextChannels of all connected Guilds.

        Note: just because a TextChannel is present in this list does not mean that you will be able to send messages to it. Furthermore, if you log into this account on the discord client, it is possible that you will see fewer channels than this returns. This is because the discord client hides any TextChannel that you don't have the Permission.MESSAGE_READ permission in.

        Returns:
        Possibly-empty list of all known TextChannels.
      • getUserById

        default User getUserById​(long id)
        This returns the User which has the same id as the one provided.
        If there is no visible user with an id that matches the provided one, this returns null.
        Parameters:
        id - The id of the requested User.
        Returns:
        Possibly-null User with matching id.
      • getUserById

        default User getUserById​(java.lang.String id)
        This returns the User which has the same id as the one provided.
        If there is no visible user with an id that matches the provided one, this returns null.
        Parameters:
        id - The id of the requested User.
        Returns:
        Possibly-null User with matching id.
      • getUsers

        default java.util.List<User> getUsers()
        An unmodifiable list of all Users that share a Guild with the currently logged in account.
        This list will never contain duplicates and represents all Users that JDA can currently see.

        If the developer is sharding, then only users from guilds connected to the specifically logged in shard will be returned in the List.

        Returns:
        List of all Users that are visible to JDA.
      • getVoiceChannelById

        default VoiceChannel getVoiceChannelById​(long id)
        This returns the VoiceChannel which has the same id as the one provided.
        If there is no known VoiceChannel with an id that matches the provided one, then this returns null.
        Parameters:
        id - The id of the VoiceChannel.
        Returns:
        Possibly-null VoiceChannel with matching id.
      • getVoiceChannelById

        default VoiceChannel getVoiceChannelById​(java.lang.String id)
        This returns the VoiceChannel which has the same id as the one provided.
        If there is no known VoiceChannel with an id that matches the provided one, then this returns null.
        Parameters:
        id - The id of the VoiceChannel.
        Returns:
        Possibly-null VoiceChannel with matching id.
      • restart

        void restart()
        Restarts all shards, shutting old ones down first. As all shards need to connect to discord again this will take equally long as the startup of a new ShardManager (using the 5000ms + backoff as delay between starting new JDA instances).
      • restart

        void restart​(int id)
        Restarts the shards with the given id only.
        If there is no shard with the given Id this method acts like start(int).
        Parameters:
        id - The id of the target shard
        Throws:
        java.lang.IllegalArgumentException - if shardId is negative or higher than maxShardId
      • setGameProvider

        default void setGameProvider​(java.util.function.IntFunction<? extends Game> gameProvider)
        Sets provider that provider the Game for all shards.
        A Game can be retrieved via Game.playing(String). For streams you provide a valid streaming url as second parameter.

        This will also change the provider for shards that are created in the future.

        Parameters:
        gameProvider - A Game instance or null to reset
        See Also:
        Game.playing(String), Game.streaming(String, String)
      • setIdle

        default void setIdle​(boolean idle)
        Sets whether all instances should be marked as afk or not

        This is relevant to client accounts to monitor whether new messages should trigger mobile push-notifications.

        This will also change the value for shards that are created in the future.

        Parameters:
        idle - boolean
      • setIdleProvider

        default void setIdleProvider​(java.util.function.IntFunction<java.lang.Boolean> idleProvider)
        Sets the provider that decides for all shards whether they should be marked as afk or not.

        This will also change the provider for shards that are created in the future.

        Parameters:
        idleProvider - boolean
      • setStatus

        default void setStatus​(OnlineStatus status)
        Sets the OnlineStatus for all shards.

        This will also change the status for shards that are created in the future.

        Parameters:
        status - the OnlineStatus to be used (OFFLINE/null -> INVISIBLE)
        Throws:
        java.lang.IllegalArgumentException - if the provided OnlineStatus is UNKNOWN
      • setStatusProvider

        default void setStatusProvider​(java.util.function.IntFunction<OnlineStatus> statusProvider)
        Sets the provider that provides the OnlineStatus for all shards.

        This will also change the provider for shards that are created in the future.

        Parameters:
        statusProvider - the OnlineStatus to be used (OFFLINE/null -> INVISIBLE)
        Throws:
        java.lang.IllegalArgumentException - if the provided OnlineStatus is UNKNOWN
      • shutdown

        void shutdown()
        Shuts down all JDA shards, closing all their connections. After this method has been called the ShardManager instance can not be used anymore.
      • shutdown

        void shutdown​(int shardId)
        Shuts down the shard with the given id only.
        This does nothing if there is no shard with the given id.
        Parameters:
        shardId - The id of the shard that should be stopped
      • start

        void start​(int shardId)
        Adds a new shard with the given id to this ShardManager and starts it.
        Parameters:
        shardId - The id of the shard that should be started