Interface User

All Superinterfaces:
Formattable, IMentionable, ISnowflake, UserSnowflake
All Known Subinterfaces:
SelfUser

public interface User extends UserSnowflake
Represents a Discord User. Contains all publicly available information about a specific Discord User.

Formattable
This interface extends Formattable and can be used with a Formatter such as used by String.format(String, Object...) or PrintStream.printf(String, Object...).

This will use IMentionable.getAsMention() rather than Object.toString()!
Supported Features:

  • Alternative
    - Uses the Discord Tag (Username#Discriminator) instead (Example: %#s - results in getName()#getDiscriminator() -> Minn#6688)
  • Width/Left-Justification
    - Ensures the size of a format (Example: %20s - uses at minimum 20 chars; %-10s - uses left-justified padding)
  • Precision
    - Cuts the content to the specified size (Example: %.20s)

More information on formatting syntax can be found in the format syntax documentation!

See Also:
  • Field Details

  • Method Details

    • fromId

      @Nonnull static UserSnowflake fromId(long id)
      Creates a User instance which only wraps an ID.
      Parameters:
      id - The user id
      Returns:
      A UserSnowflake instance
      See Also:
    • fromId

      @Nonnull static UserSnowflake fromId(@Nonnull String id)
      Creates a User instance which only wraps an ID.
      Parameters:
      id - The user id
      Returns:
      A UserSnowflake instance
      Throws:
      IllegalArgumentException - If the provided ID is not a valid snowflake
      See Also:
    • getName

      @Nonnull String getName()
      The username of the User. Length is between 2 and 32 characters (inclusive).
      Returns:
      Never-null String containing the User's username.
    • getGlobalName

      @Nullable String getGlobalName()
      The global display name of the user.
      This name is not unique and allows more characters.

      This name is usually displayed in the UI.

      Returns:
      The global display name or null if unset.
    • getEffectiveName

      @Nonnull default String getEffectiveName()
      The name visible in the UI.
      If the global name is null, this returns the username instead.
      Returns:
      The effective display name
    • getDiscriminator

      @Nonnull String getDiscriminator()
      The discriminator of the User. Used to differentiate between users with the same usernames.
      This only contains the 4 digits after the username and the #.

      For most users, no discriminator is used and this will be "0000" instead. The primary use-case for discriminators is bot and guest accounts, to prevent name squatting.

      Returns:
      Never-null String containing the User discriminator.
    • getAvatarId

      @Nullable String getAvatarId()
      The Discord ID for this user's avatar image. If the user has not set an image, this will return null.
      Returns:
      Possibly-null String containing the User avatar id.
    • getAvatarUrl

      @Nullable default String getAvatarUrl()
      The URL for the user's avatar image. If the user has not set an image, this will return null.
      Returns:
      Possibly-null String containing the User avatar url.
    • getAvatar

      @Nullable default ImageProxy getAvatar()
      Returns an ImageProxy for this user's avatar.
      Returns:
      Possibly-null ImageProxy of this user's avatar
      See Also:
    • getEffectiveAvatarUrl

      @Nonnull default String getEffectiveAvatarUrl()
      The URL for the user's avatar image. If they do not have an avatar set, this will return the URL of their default avatar
      Returns:
      Never-null String containing the User effective avatar url.
    • getEffectiveAvatar

      @Nonnull default ImageProxy getEffectiveAvatar()
      Returns an ImageProxy for this user's effective avatar image.
      Returns:
      Never-null ImageProxy of this user's effective avatar image
      See Also:
    • retrieveProfile

      Loads the user's User.Profile data. Returns a completed RestAction if this User has been retrieved using JDA.retrieveUserById(long). You can use useCache(false) to force the request for a new profile with up-to-date information.
      Returns:
      CacheRestAction - Type: User.Profile
    • getAsTag

      @Nonnull String getAsTag()
      The "tag" for this user

      This is the equivalent of calling String.format("%#s", user)

      Users without a discriminator use #0000 instead.

      Returns:
      Never-null String containing the tag for this user, for example DV8FromTheWorld#6297
    • hasPrivateChannel

      boolean hasPrivateChannel()
      Whether or not the currently logged in user and this user have a currently open PrivateChannel or not.
      Returns:
      True if the logged in account shares a PrivateChannel with this user.
    • openPrivateChannel

      Opens a PrivateChannel with this User.
      If a channel has already been opened with this user, it is immediately returned in the RestAction's success consumer without contacting the Discord API. You can use useCache(false) to force the request for a new channel object, which is rarely useful since the channel id never changes.

      Examples

      
       // Send message without response handling
       public void sendMessage(User user, String content) {
           user.openPrivateChannel()
               .flatMap(channel -> channel.sendMessage(content))
               .queue();
       }
      
       // Send message and delete 30 seconds later
       public RestAction<Void> sendSecretMessage(User user, String content) {
           return user.openPrivateChannel() // RestAction<PrivateChannel>
                      .flatMap(channel -> channel.sendMessage(content)) // RestAction<Message>
                      .delay(30, TimeUnit.SECONDS) // RestAction<Message> with delayed response
                      .flatMap(Message::delete); // RestAction<Void> (executed 30 seconds after sending)
       }
       
      Returns:
      CacheRestAction - Type: PrivateChannel
      Retrieves the PrivateChannel to use to directly message this User.
      Throws:
      UnsupportedOperationException - If the recipient User is the currently logged in account (represented by SelfUser) or if the user was created with fromId(long)
      See Also:
    • getMutualGuilds

      @Nonnull @Unmodifiable List<Guild> getMutualGuilds()
      Finds and collects all Guild instances that contain this User within the current JDA instance.

      This method is a shortcut for JDA.getMutualGuilds(User).

      Returns:
      Immutable list of all Guilds that this user is a member of.
    • isBot

      boolean isBot()
      Returns whether or not the given user is a Bot-Account (special badge in client, some different behaviour)
      Returns:
      If the User's Account is marked as Bot
    • isSystem

      boolean isSystem()
      Returns whether or not the given user is a System account, which includes the urgent message account and the community updates bot.
      Returns:
      Whether the User's account is marked as System
    • getJDA

      @Nonnull JDA getJDA()
      Returns the JDA instance of this User
      Returns:
      the corresponding JDA instance
    • getFlags

      Returns the UserFlags of this user.
      Returns:
      EnumSet containing the flags of the user.
    • getFlagsRaw

      int getFlagsRaw()
      Returns the bitmask representation of the UserFlags of this user.
      Returns:
      bitmask representation of the user's flags.