From c7db029db65f4133602d01036421e496a9465edf Mon Sep 17 00:00:00 2001 From: John Grosh Date: Thu, 11 Jan 2018 22:37:49 -0500 Subject: [PATCH 1/3] added more info for invites, no exceptions yet --- .../jda/core/entities/EntityBuilder.java | 6 ++- .../net/dv8tion/jda/core/entities/Invite.java | 49 ++++++++++++++++++- .../jda/core/entities/impl/InviteImpl.java | 34 +++++++++++-- 3 files changed, 83 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/dv8tion/jda/core/entities/EntityBuilder.java b/src/main/java/net/dv8tion/jda/core/entities/EntityBuilder.java index 22a3d240a3..e2ea14005e 100644 --- a/src/main/java/net/dv8tion/jda/core/entities/EntityBuilder.java +++ b/src/main/java/net/dv8tion/jda/core/entities/EntityBuilder.java @@ -51,6 +51,7 @@ import java.util.function.UnaryOperator; import java.util.stream.Collectors; import java.util.stream.StreamSupport; +import net.dv8tion.jda.core.entities.Guild.VerificationLevel; public class EntityBuilder { @@ -1260,8 +1261,11 @@ public Invite createInvite(JSONObject object) final long guildId = guildObject.getLong("id"); final String guildName = guildObject.getString("name"); final String guildSplashId = guildObject.optString("splash", null); + final VerificationLevel guildVerificationLevel = VerificationLevel.fromKey(guildObject.optInt("verification_level", -1)); + final int presenceCount = object.optInt("approximate_presence_count", -1); + final int memberCount = object.optInt("approximate_member_count", -1); - final Invite.Guild guild = new InviteImpl.GuildImpl(guildId, guildIconId, guildName, guildSplashId); + final Invite.Guild guild = new InviteImpl.GuildImpl(guildId, guildIconId, guildName, guildSplashId, guildVerificationLevel, presenceCount, memberCount); final int maxAge; final int maxUses; diff --git a/src/main/java/net/dv8tion/jda/core/entities/Invite.java b/src/main/java/net/dv8tion/jda/core/entities/Invite.java index 7acb48d53d..8b3a1f21df 100644 --- a/src/main/java/net/dv8tion/jda/core/entities/Invite.java +++ b/src/main/java/net/dv8tion/jda/core/entities/Invite.java @@ -23,6 +23,7 @@ import javax.annotation.CheckReturnValue; import java.time.OffsetDateTime; +import net.dv8tion.jda.core.entities.Guild.VerificationLevel; /** * Representation of a Discord Invite. @@ -53,7 +54,32 @@ public interface Invite */ static RestAction resolve(final JDA api, final String code) { - return InviteImpl.resolve(api, code); + return resolve(api, code, false); + } + + /** + * Retrieves a new {@link net.dv8tion.jda.core.entities.Invite Invite} instance for the given invite code. + *
You cannot resolve invites if you were banned from the origin Guild! + * + *

Possible {@link net.dv8tion.jda.core.requests.ErrorResponse ErrorResponses} include: + *

+ * + * @param api + * The JDA instance + * @param code + * A valid invite code + * @param withCounts + * Whether or not to include online and member counts + * + * @return {@link net.dv8tion.jda.core.requests.RestAction RestAction} - Type: {@link net.dv8tion.jda.core.entities.Invite Invite} + *
The Invite object + */ + static RestAction resolve(final JDA api, final String code, final boolean withCounts) + { + return InviteImpl.resolve(api, code, withCounts); } /** @@ -296,5 +322,26 @@ interface Guild extends ISnowflake * @see #getSplashId() */ String getSplashUrl(); + + /** + * Returns the {@link net.dv8tion.jda.core.entities.Guild.VerificationLevel VerificationLevel} of this guild. + * + * @return the verification level of the guild + */ + VerificationLevel getVerificationLevel(); + + /** + * Returns the approximate count of online members in the guild. + * + * @return TODO + */ + int getOnlineCount(); + + /** + * Returns the approximate count of total members in the guild. + * + * @return TODO + */ + int getMemberCount(); } } diff --git a/src/main/java/net/dv8tion/jda/core/entities/impl/InviteImpl.java b/src/main/java/net/dv8tion/jda/core/entities/impl/InviteImpl.java index c4ef079d24..8efeba8797 100644 --- a/src/main/java/net/dv8tion/jda/core/entities/impl/InviteImpl.java +++ b/src/main/java/net/dv8tion/jda/core/entities/impl/InviteImpl.java @@ -30,6 +30,7 @@ import org.json.JSONObject; import java.time.OffsetDateTime; +import net.dv8tion.jda.core.entities.Guild.VerificationLevel; public class InviteImpl implements Invite { @@ -62,12 +63,15 @@ public InviteImpl(final JDAImpl api, final String code, final boolean expanded, this.guild = guild; } - public static RestAction resolve(final JDA api, final String code) + public static RestAction resolve(final JDA api, final String code, final boolean withCounts) { Checks.notNull(code, "code"); Checks.notNull(api, "api"); - final Route.CompiledRoute route = Route.Invites.GET_INVITE.compile(code); + Route.CompiledRoute route = Route.Invites.GET_INVITE.compile(code); + + if(withCounts) + route = route.withQueryParams("with_counts", "true"); return new RestAction(api, route) { @@ -282,16 +286,21 @@ public ChannelType getType() public static class GuildImpl implements Guild { - private final String iconId, name, splashId; + private final int presenceCount, memberCount; private final long id; + private final VerificationLevel verificationLevel; - 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 VerificationLevel verificationLevel, final int presenceCount, final int memberCount) { this.id = id; this.iconId = iconId; this.name = name; this.splashId = splashId; + this.verificationLevel = verificationLevel; + this.presenceCount = presenceCount; + this.memberCount = memberCount; } @Override @@ -332,6 +341,23 @@ public String getSplashUrl() : "https://cdn.discordapp.com/splashes/" + this.id + "/" + this.splashId + ".jpg"; } + @Override + public VerificationLevel getVerificationLevel() + { + return verificationLevel; + } + + @Override + public int getOnlineCount() + { + return presenceCount; + } + + @Override + public int getMemberCount() + { + return memberCount; + } } } From a0fa13e1f8eeb8dc3ef6fa747b71669dadd5d84f Mon Sep 17 00:00:00 2001 From: John Grosh Date: Wed, 6 Jun 2018 17:07:26 -0400 Subject: [PATCH 2/3] updated docs and fixed import order --- .../net/dv8tion/jda/core/entities/Invite.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/dv8tion/jda/core/entities/Invite.java b/src/main/java/net/dv8tion/jda/core/entities/Invite.java index 8b3a1f21df..00b83793df 100644 --- a/src/main/java/net/dv8tion/jda/core/entities/Invite.java +++ b/src/main/java/net/dv8tion/jda/core/entities/Invite.java @@ -17,13 +17,13 @@ package net.dv8tion.jda.core.entities; import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.core.entities.Guild.VerificationLevel; import net.dv8tion.jda.core.entities.impl.InviteImpl; import net.dv8tion.jda.core.requests.RestAction; import net.dv8tion.jda.core.requests.restaction.AuditableRestAction; import javax.annotation.CheckReturnValue; import java.time.OffsetDateTime; -import net.dv8tion.jda.core.entities.Guild.VerificationLevel; /** * Representation of a Discord Invite. @@ -331,16 +331,22 @@ interface Guild extends ISnowflake VerificationLevel getVerificationLevel(); /** - * Returns the approximate count of online members in the guild. + * Returns the approximate count of online members in the guild. If the online member count was not included in the + * invite, this will return -1. Counts will usually only be returned when resolving the invite via the + * {@link #resolve(net.dv8tion.jda.core.JDA, java.lang.String, boolean) Invite.resolve()} method with the + * withCounts boolean set to {@code true} * - * @return TODO + * @return the approximate count of online members in the guild, or -1 if not present in the invite */ int getOnlineCount(); /** - * Returns the approximate count of total members in the guild. + * Returns the approximate count of total members in the guild. If the total member count was not included in the + * invite, this will return -1. Counts will usually only be returned when resolving the invite via the + * {@link #resolve(net.dv8tion.jda.core.JDA, java.lang.String, boolean) Invite.resolve()} method with the + * withCounts boolean set to {@code true} * - * @return TODO + * @return the approximate count of total members in the guild, or -1 if not present in the invite */ int getMemberCount(); } From db8df1abf70e49c7c17b1ca5f89571d9645739ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Spie=C3=9F?= Date: Thu, 7 Jun 2018 22:40:39 +0200 Subject: [PATCH 3/3] Cleanup --- .../net/dv8tion/jda/core/entities/EntityBuilder.java | 12 +++++++----- .../dv8tion/jda/core/entities/impl/InviteImpl.java | 6 +++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/dv8tion/jda/core/entities/EntityBuilder.java b/src/main/java/net/dv8tion/jda/core/entities/EntityBuilder.java index e2ea14005e..9b39711fac 100644 --- a/src/main/java/net/dv8tion/jda/core/entities/EntityBuilder.java +++ b/src/main/java/net/dv8tion/jda/core/entities/EntityBuilder.java @@ -28,6 +28,7 @@ import net.dv8tion.jda.core.audit.ActionType; import net.dv8tion.jda.core.audit.AuditLogChange; import net.dv8tion.jda.core.audit.AuditLogEntry; +import net.dv8tion.jda.core.entities.Guild.VerificationLevel; import net.dv8tion.jda.core.entities.MessageEmbed.*; import net.dv8tion.jda.core.entities.impl.*; import net.dv8tion.jda.core.exceptions.AccountTypeException; @@ -51,7 +52,6 @@ import java.util.function.UnaryOperator; import java.util.stream.Collectors; import java.util.stream.StreamSupport; -import net.dv8tion.jda.core.entities.Guild.VerificationLevel; public class EntityBuilder { @@ -1261,9 +1261,9 @@ public Invite createInvite(JSONObject object) final long guildId = guildObject.getLong("id"); final String guildName = guildObject.getString("name"); final String guildSplashId = guildObject.optString("splash", null); - final VerificationLevel guildVerificationLevel = VerificationLevel.fromKey(guildObject.optInt("verification_level", -1)); - final int presenceCount = object.optInt("approximate_presence_count", -1); - final int memberCount = object.optInt("approximate_member_count", -1); + final VerificationLevel guildVerificationLevel = VerificationLevel.fromKey(Helpers.optInt(guildObject, "verification_level", -1)); + final int presenceCount = Helpers.optInt(object, "approximate_presence_count", -1); + final int memberCount = Helpers.optInt(object, "approximate_member_count", -1); final Invite.Guild guild = new InviteImpl.GuildImpl(guildId, guildIconId, guildName, guildSplashId, guildVerificationLevel, presenceCount, memberCount); @@ -1293,7 +1293,9 @@ public Invite createInvite(JSONObject object) timeCreated = null; } - return new InviteImpl(api, code, expanded, inviter, maxAge, maxUses, temporary, timeCreated, uses, channel, guild); + return new InviteImpl(api, code, expanded, inviter, + maxAge, maxUses, temporary, + timeCreated, uses, channel, guild); } public void clearCache() diff --git a/src/main/java/net/dv8tion/jda/core/entities/impl/InviteImpl.java b/src/main/java/net/dv8tion/jda/core/entities/impl/InviteImpl.java index 8efeba8797..bb37373c69 100644 --- a/src/main/java/net/dv8tion/jda/core/entities/impl/InviteImpl.java +++ b/src/main/java/net/dv8tion/jda/core/entities/impl/InviteImpl.java @@ -19,6 +19,7 @@ import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.Permission; import net.dv8tion.jda.core.entities.*; +import net.dv8tion.jda.core.entities.Guild.VerificationLevel; import net.dv8tion.jda.core.exceptions.InsufficientPermissionException; import net.dv8tion.jda.core.requests.Request; import net.dv8tion.jda.core.requests.Response; @@ -30,7 +31,6 @@ import org.json.JSONObject; import java.time.OffsetDateTime; -import net.dv8tion.jda.core.entities.Guild.VerificationLevel; public class InviteImpl implements Invite { @@ -70,7 +70,7 @@ public static RestAction resolve(final JDA api, final String code, final Route.CompiledRoute route = Route.Invites.GET_INVITE.compile(code); - if(withCounts) + if (withCounts) route = route.withQueryParams("with_counts", "true"); return new RestAction(api, route) @@ -292,7 +292,7 @@ public static class GuildImpl implements Guild private final VerificationLevel verificationLevel; public GuildImpl(final long id, final String iconId, final String name, final String splashId, - final VerificationLevel verificationLevel, final int presenceCount, final int memberCount) + final VerificationLevel verificationLevel, final int presenceCount, final int memberCount) { this.id = id; this.iconId = iconId;