From 3c48e9358f0a839720148e1b241d820c119c1a07 Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Thu, 4 Sep 2025 17:05:23 +0200 Subject: [PATCH 1/4] Add `Invite.Guild#getDescription` --- .../java/net/dv8tion/jda/api/entities/Guild.java | 3 ++- .../java/net/dv8tion/jda/api/entities/Invite.java | 10 ++++++++++ .../jda/internal/entities/EntityBuilder.java | 3 ++- .../dv8tion/jda/internal/entities/InviteImpl.java | 14 +++++++++++--- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/dv8tion/jda/api/entities/Guild.java b/src/main/java/net/dv8tion/jda/api/entities/Guild.java index 0d97ca44ec..c14f470aba 100644 --- a/src/main/java/net/dv8tion/jda/api/entities/Guild.java +++ b/src/main/java/net/dv8tion/jda/api/entities/Guild.java @@ -915,7 +915,8 @@ default String getVanityUrl() /** * The description for this guild. - *
This is displayed in the server browser below the guild name for verified guilds. + *
This is displayed in the server browser below the guild name for verified guilds, + * and in embedded invite links. * *

The description can be modified using {@link GuildManager#setDescription(String)}. * diff --git a/src/main/java/net/dv8tion/jda/api/entities/Invite.java b/src/main/java/net/dv8tion/jda/api/entities/Invite.java index 7021de4968..54c6a53b9f 100644 --- a/src/main/java/net/dv8tion/jda/api/entities/Invite.java +++ b/src/main/java/net/dv8tion/jda/api/entities/Invite.java @@ -358,6 +358,16 @@ interface Channel extends ISnowflake */ interface Guild extends ISnowflake { + /** + * The description for this guild. + *
This is displayed in the server browser below the guild name for verified guilds, + * and in embedded invite links. + * + * @return The guild's description + */ + @Nullable + String getDescription(); + /** * The icon id of this guild. * diff --git a/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java b/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java index 03b9080e89..d5c017f6ec 100644 --- a/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java +++ b/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java @@ -2324,6 +2324,7 @@ else if (channelType.isGuild()) final long guildId = guildObject.getLong("id"); final String guildName = guildObject.getString("name"); final String guildSplashId = guildObject.getString("splash", null); + final String description = guildObject.getString("description", null); final VerificationLevel guildVerificationLevel = VerificationLevel.fromKey(guildObject.getInt("verification_level", -1)); final int presenceCount = object.getInt("approximate_presence_count", -1); final int memberCount = object.getInt("approximate_member_count", -1); @@ -2338,7 +2339,7 @@ else if (channelType.isGuild()) ? null : createWelcomeScreen(null, guildObject.getObject("welcome_screen")); - guild = new InviteImpl.GuildImpl(guildId, guildIconId, guildName, guildSplashId, guildVerificationLevel, presenceCount, memberCount, guildFeatures, welcomeScreen); + guild = new InviteImpl.GuildImpl(guildId, guildIconId, guildName, guildSplashId, description, guildVerificationLevel, presenceCount, memberCount, guildFeatures, welcomeScreen); final String channelName = channelObject.getString("name"); final long channelId = channelObject.getLong("id"); diff --git a/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java b/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java index 657026d081..3faa56c45d 100644 --- a/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java +++ b/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java @@ -335,14 +335,14 @@ public String toString() public static class GuildImpl implements Guild { - private final String iconId, name, splashId; + private final String iconId, name, splashId, description; private final int presenceCount, memberCount; private final long id; private final VerificationLevel verificationLevel; private final Set features; private final GuildWelcomeScreen welcomeScreen; - public GuildImpl(final long id, final String iconId, final String name, final String splashId, + public GuildImpl(final long id, final String iconId, final String name, final String splashId, final String description, final VerificationLevel verificationLevel, final int presenceCount, final int memberCount, final Set features, final GuildWelcomeScreen welcomeScreen) { @@ -350,6 +350,7 @@ public GuildImpl(final long id, final String iconId, final String name, final St this.iconId = iconId; this.name = name; this.splashId = splashId; + this.description = description; this.verificationLevel = verificationLevel; this.presenceCount = presenceCount; this.memberCount = memberCount; @@ -359,10 +360,17 @@ public GuildImpl(final long id, final String iconId, final String name, final St public GuildImpl(final net.dv8tion.jda.api.entities.Guild guild) { - this(guild.getIdLong(), guild.getIconId(), guild.getName(), guild.getSplashId(), + this(guild.getIdLong(), guild.getIconId(), guild.getName(), guild.getSplashId(), guild.getDescription(), guild.getVerificationLevel(), -1, -1, guild.getFeatures(), null); } + @Nullable + @Override + public String getDescription() + { + return description; + } + @Override public String getIconId() { From 75331ddd85802dae3722c7d89ebc7efef361a582 Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Thu, 4 Sep 2025 17:10:47 +0200 Subject: [PATCH 2/4] Add `Invite.Guild#getBanner(Id/Url)` --- .../net/dv8tion/jda/api/entities/Invite.java | 40 +++++++++++++++++++ .../jda/internal/entities/EntityBuilder.java | 3 +- .../jda/internal/entities/InviteImpl.java | 14 +++++-- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/dv8tion/jda/api/entities/Invite.java b/src/main/java/net/dv8tion/jda/api/entities/Invite.java index 54c6a53b9f..696d273fd2 100644 --- a/src/main/java/net/dv8tion/jda/api/entities/Invite.java +++ b/src/main/java/net/dv8tion/jda/api/entities/Invite.java @@ -31,6 +31,8 @@ import java.util.List; import java.util.Set; +import static net.dv8tion.jda.api.entities.Guild.BANNER_URL; + /** * Representation of a Discord Invite. * This class is immutable. @@ -358,6 +360,44 @@ interface Channel extends ISnowflake */ interface Guild extends ISnowflake { + /** + * The guild banner id. + *
This is shown in guilds below the guild name. + * + * @return The guild banner id or null + * + * @see #getBannerUrl() + */ + @Nullable + String getBannerId(); + + /** + * The guild banner url. + *
This is shown in guilds below the guild name. + * + * @return The guild banner url or null + */ + @Nullable + default String getBannerUrl() + { + String bannerId = getBannerId(); + return bannerId == null ? null : String.format(BANNER_URL, getId(), bannerId, bannerId.startsWith("a_") ? "gif" : "png"); + } + + /** + * Returns an {@link ImageProxy} for this guild's banner image. + * + * @return Possibly-null {@link ImageProxy} of this guild's banner image + * + * @see #getBannerUrl() + */ + @Nullable + default ImageProxy getBanner() + { + final String bannerUrl = getBannerUrl(); + return bannerUrl == null ? null : new ImageProxy(bannerUrl); + } + /** * The description for this guild. *
This is displayed in the server browser below the guild name for verified guilds, diff --git a/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java b/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java index d5c017f6ec..d6429c1825 100644 --- a/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java +++ b/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java @@ -2320,6 +2320,7 @@ else if (channelType.isGuild()) final DataObject guildObject = object.getObject("guild"); + final String guildBannerId = guildObject.getString("banner", null); final String guildIconId = guildObject.getString("icon", null); final long guildId = guildObject.getLong("id"); final String guildName = guildObject.getString("name"); @@ -2339,7 +2340,7 @@ else if (channelType.isGuild()) ? null : createWelcomeScreen(null, guildObject.getObject("welcome_screen")); - guild = new InviteImpl.GuildImpl(guildId, guildIconId, guildName, guildSplashId, description, guildVerificationLevel, presenceCount, memberCount, guildFeatures, welcomeScreen); + guild = new InviteImpl.GuildImpl(guildId, guildBannerId, guildIconId, guildName, guildSplashId, description, guildVerificationLevel, presenceCount, memberCount, guildFeatures, welcomeScreen); final String channelName = channelObject.getString("name"); final long channelId = channelObject.getLong("id"); diff --git a/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java b/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java index 3faa56c45d..fdffe4dc78 100644 --- a/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java +++ b/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java @@ -335,18 +335,19 @@ public String toString() public static class GuildImpl implements Guild { - private final String iconId, name, splashId, description; + private final String bannerId, iconId, name, splashId, description; private final int presenceCount, memberCount; private final long id; private final VerificationLevel verificationLevel; private final Set features; private final GuildWelcomeScreen welcomeScreen; - public GuildImpl(final long id, final String iconId, final String name, final String splashId, final String description, + public GuildImpl(final long id, final String bannerId, final String iconId, final String name, final String splashId, final String description, final VerificationLevel verificationLevel, final int presenceCount, final int memberCount, final Set features, final GuildWelcomeScreen welcomeScreen) { this.id = id; + this.bannerId = bannerId; this.iconId = iconId; this.name = name; this.splashId = splashId; @@ -360,10 +361,17 @@ public GuildImpl(final long id, final String iconId, final String name, final St public GuildImpl(final net.dv8tion.jda.api.entities.Guild guild) { - this(guild.getIdLong(), guild.getIconId(), guild.getName(), guild.getSplashId(), guild.getDescription(), + this(guild.getIdLong(), guild.getBannerId(), guild.getIconId(), guild.getName(), guild.getSplashId(), guild.getDescription(), guild.getVerificationLevel(), -1, -1, guild.getFeatures(), null); } + @Nullable + @Override + public String getBannerId() + { + return bannerId; + } + @Nullable @Override public String getDescription() From fb593e4b340da8c080034c842e783365e8d1ce0c Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Thu, 4 Sep 2025 17:13:50 +0200 Subject: [PATCH 3/4] Add `Invite.Guild#getVanity(Code/Url)` --- .../net/dv8tion/jda/api/entities/Invite.java | 23 +++++++++++++++++++ .../jda/internal/entities/EntityBuilder.java | 3 ++- .../jda/internal/entities/InviteImpl.java | 14 ++++++++--- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/dv8tion/jda/api/entities/Invite.java b/src/main/java/net/dv8tion/jda/api/entities/Invite.java index 696d273fd2..63927aabad 100644 --- a/src/main/java/net/dv8tion/jda/api/entities/Invite.java +++ b/src/main/java/net/dv8tion/jda/api/entities/Invite.java @@ -360,6 +360,29 @@ interface Channel extends ISnowflake */ interface Guild extends ISnowflake { + /** + * The vanity url code for this Guild. The vanity url is the custom invite code of partnered / official / boosted Guilds. + *
The returned String will be the code that can be provided to {@code discord.gg/{code}} to get the invite link. + * + * @return The vanity code or null + * + * @see #getVanityUrl() + */ + @Nullable + String getVanityCode(); + + /** + * The vanity url for this Guild. The vanity url is the custom invite code of partnered / official / boosted Guilds. + *
The returned String will be the vanity invite link to this guild. + * + * @return The vanity url or null + */ + @Nullable + default String getVanityUrl() + { + return getVanityCode() == null ? null : "https://discord.gg/" + getVanityCode(); + } + /** * The guild banner id. *
This is shown in guilds below the guild name. diff --git a/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java b/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java index d6429c1825..e46b8c0d8e 100644 --- a/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java +++ b/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java @@ -2320,6 +2320,7 @@ else if (channelType.isGuild()) final DataObject guildObject = object.getObject("guild"); + final String guildVanityCode = guildObject.getString("vanity_url_code", null); final String guildBannerId = guildObject.getString("banner", null); final String guildIconId = guildObject.getString("icon", null); final long guildId = guildObject.getLong("id"); @@ -2340,7 +2341,7 @@ else if (channelType.isGuild()) ? null : createWelcomeScreen(null, guildObject.getObject("welcome_screen")); - guild = new InviteImpl.GuildImpl(guildId, guildBannerId, guildIconId, guildName, guildSplashId, description, guildVerificationLevel, presenceCount, memberCount, guildFeatures, welcomeScreen); + guild = new InviteImpl.GuildImpl(guildId, guildVanityCode, guildBannerId, guildIconId, guildName, guildSplashId, description, guildVerificationLevel, presenceCount, memberCount, guildFeatures, welcomeScreen); final String channelName = channelObject.getString("name"); final long channelId = channelObject.getLong("id"); diff --git a/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java b/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java index fdffe4dc78..1c37a9019d 100644 --- a/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java +++ b/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java @@ -335,18 +335,19 @@ public String toString() public static class GuildImpl implements Guild { - private final String bannerId, iconId, name, splashId, description; + private final String vanityCode, bannerId, iconId, name, splashId, description; private final int presenceCount, memberCount; private final long id; private final VerificationLevel verificationLevel; private final Set features; private final GuildWelcomeScreen welcomeScreen; - public GuildImpl(final long id, final String bannerId, final String iconId, final String name, final String splashId, final String description, + public GuildImpl(final long id, final String vanityCode, final String bannerId, final String iconId, final String name, final String splashId, final String description, final VerificationLevel verificationLevel, final int presenceCount, final int memberCount, final Set features, final GuildWelcomeScreen welcomeScreen) { this.id = id; + this.vanityCode = vanityCode; this.bannerId = bannerId; this.iconId = iconId; this.name = name; @@ -361,10 +362,17 @@ public GuildImpl(final long id, final String bannerId, final String iconId, fina public GuildImpl(final net.dv8tion.jda.api.entities.Guild guild) { - this(guild.getIdLong(), guild.getBannerId(), guild.getIconId(), guild.getName(), guild.getSplashId(), guild.getDescription(), + this(guild.getIdLong(), guild.getVanityCode(), guild.getBannerId(), guild.getIconId(), guild.getName(), guild.getSplashId(), guild.getDescription(), guild.getVerificationLevel(), -1, -1, guild.getFeatures(), null); } + @Nullable + @Override + public String getVanityCode() + { + return vanityCode; + } + @Nullable @Override public String getBannerId() From 993bcd6d1e8a3039cc8f5746f22f638d014c1074 Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Thu, 4 Sep 2025 17:18:02 +0200 Subject: [PATCH 4/4] Add `Invite.Guild#getNsfwLevel` --- .../net/dv8tion/jda/api/entities/Invite.java | 4 ++++ .../jda/internal/entities/EntityBuilder.java | 3 ++- .../jda/internal/entities/InviteImpl.java | 17 ++++++++++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/dv8tion/jda/api/entities/Invite.java b/src/main/java/net/dv8tion/jda/api/entities/Invite.java index 63927aabad..82a0ea9049 100644 --- a/src/main/java/net/dv8tion/jda/api/entities/Invite.java +++ b/src/main/java/net/dv8tion/jda/api/entities/Invite.java @@ -32,6 +32,7 @@ import java.util.Set; import static net.dv8tion.jda.api.entities.Guild.BANNER_URL; +import static net.dv8tion.jda.api.entities.Guild.NSFWLevel; /** * Representation of a Discord Invite. @@ -514,6 +515,9 @@ default ImageProxy getSplash() */ @Nonnull VerificationLevel getVerificationLevel(); + + @Nonnull + NSFWLevel getNSFWLevel(); /** * Returns the approximate count of online members in the guild. If the online member count was not included in the diff --git a/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java b/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java index e46b8c0d8e..399e7af560 100644 --- a/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java +++ b/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java @@ -2328,6 +2328,7 @@ else if (channelType.isGuild()) final String guildSplashId = guildObject.getString("splash", null); final String description = guildObject.getString("description", null); final VerificationLevel guildVerificationLevel = VerificationLevel.fromKey(guildObject.getInt("verification_level", -1)); + final Guild.NSFWLevel guildNsfwLevel = Guild.NSFWLevel.fromKey(guildObject.getInt("nsfw_level", -1)); final int presenceCount = object.getInt("approximate_presence_count", -1); final int memberCount = object.getInt("approximate_member_count", -1); @@ -2341,7 +2342,7 @@ else if (channelType.isGuild()) ? null : createWelcomeScreen(null, guildObject.getObject("welcome_screen")); - guild = new InviteImpl.GuildImpl(guildId, guildVanityCode, guildBannerId, guildIconId, guildName, guildSplashId, description, guildVerificationLevel, presenceCount, memberCount, guildFeatures, welcomeScreen); + guild = new InviteImpl.GuildImpl(guildId, guildVanityCode, guildBannerId, guildIconId, guildName, guildSplashId, description, guildVerificationLevel, guildNsfwLevel, presenceCount, memberCount, guildFeatures, welcomeScreen); final String channelName = channelObject.getString("name"); final long channelId = channelObject.getLong("id"); diff --git a/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java b/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java index 1c37a9019d..a83c774662 100644 --- a/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java +++ b/src/main/java/net/dv8tion/jda/internal/entities/InviteImpl.java @@ -41,6 +41,8 @@ import java.util.List; import java.util.Set; +import static net.dv8tion.jda.api.entities.Guild.NSFWLevel; + public class InviteImpl implements Invite { private final JDAImpl api; @@ -339,11 +341,12 @@ public static class GuildImpl implements Guild private final int presenceCount, memberCount; private final long id; private final VerificationLevel verificationLevel; + private final NSFWLevel nsfwLevel; private final Set features; private final GuildWelcomeScreen welcomeScreen; public GuildImpl(final long id, final String vanityCode, final String bannerId, final String iconId, final String name, final String splashId, final String description, - final VerificationLevel verificationLevel, final int presenceCount, final int memberCount, final Set features, + final VerificationLevel verificationLevel, final NSFWLevel nsfwLevel, final int presenceCount, final int memberCount, final Set features, final GuildWelcomeScreen welcomeScreen) { this.id = id; @@ -354,6 +357,7 @@ public GuildImpl(final long id, final String vanityCode, final String bannerId, this.splashId = splashId; this.description = description; this.verificationLevel = verificationLevel; + this.nsfwLevel = nsfwLevel; this.presenceCount = presenceCount; this.memberCount = memberCount; this.features = features; @@ -363,7 +367,7 @@ public GuildImpl(final long id, final String vanityCode, final String bannerId, public GuildImpl(final net.dv8tion.jda.api.entities.Guild guild) { this(guild.getIdLong(), guild.getVanityCode(), guild.getBannerId(), guild.getIconId(), guild.getName(), guild.getSplashId(), guild.getDescription(), - guild.getVerificationLevel(), -1, -1, guild.getFeatures(), null); + guild.getVerificationLevel(), guild.getNSFWLevel(), -1, -1, guild.getFeatures(), null); } @Nullable @@ -432,7 +436,14 @@ public VerificationLevel getVerificationLevel() { return verificationLevel; } - + + @Nonnull + @Override + public NSFWLevel getNSFWLevel() + { + return nsfwLevel; + } + @Override public int getOnlineCount() {