From 77ee5aec12446ae852b6d949d1e86803f44f7bf0 Mon Sep 17 00:00:00 2001 From: Daedalus <16168171+RedDaedalus@users.noreply.github.com> Date: Tue, 8 Aug 2023 20:48:39 -0600 Subject: [PATCH 1/6] Add custom status support for bots --- .../java/net/dv8tion/jda/api/entities/Activity.java | 9 +++++++++ .../dv8tion/jda/internal/managers/PresenceImpl.java | 10 +++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/dv8tion/jda/api/entities/Activity.java b/src/main/java/net/dv8tion/jda/api/entities/Activity.java index fe21821120..80056cd9d4 100644 --- a/src/main/java/net/dv8tion/jda/api/entities/Activity.java +++ b/src/main/java/net/dv8tion/jda/api/entities/Activity.java @@ -230,6 +230,15 @@ static Activity competing(@Nonnull String name) return EntityBuilder.createActivity(name, null, ActivityType.COMPETING); } + @Nonnull + static Activity customStatus(@Nonnull String name) + { + Checks.notBlank(name, "Name"); + name = name.trim(); + Checks.notLonger(name, 128, "Name"); + return EntityBuilder.createActivity(name, null, ActivityType.CUSTOM_STATUS); + } + /** * Creates a new Activity instance with the specified name. * diff --git a/src/main/java/net/dv8tion/jda/internal/managers/PresenceImpl.java b/src/main/java/net/dv8tion/jda/internal/managers/PresenceImpl.java index c1ec83cb30..06e16dca72 100644 --- a/src/main/java/net/dv8tion/jda/internal/managers/PresenceImpl.java +++ b/src/main/java/net/dv8tion/jda/internal/managers/PresenceImpl.java @@ -184,7 +184,15 @@ private DataObject getGameJson(Activity activity) if (activity == null || activity.getName() == null || activity.getType() == null) return null; DataObject gameObj = DataObject.empty(); - gameObj.put("name", activity.getName()); + + if (activity.getType() == Activity.ActivityType.CUSTOM_STATUS) + { + gameObj.put("name", "Custom Status"); + gameObj.put("state", activity.getName()); + } else { + gameObj.put("name", activity.getName()); + } + gameObj.put("type", activity.getType().getKey()); if (activity.getUrl() != null) gameObj.put("url", activity.getUrl()); From 8a6cc638a6c09af7c525a4542f3688a2e09b50a5 Mon Sep 17 00:00:00 2001 From: Daedalus <16168171+RedDaedalus@users.noreply.github.com> Date: Tue, 8 Aug 2023 20:52:14 -0600 Subject: [PATCH 2/6] docs --- .../net/dv8tion/jda/api/entities/Activity.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/net/dv8tion/jda/api/entities/Activity.java b/src/main/java/net/dv8tion/jda/api/entities/Activity.java index 80056cd9d4..2a0530dff1 100644 --- a/src/main/java/net/dv8tion/jda/api/entities/Activity.java +++ b/src/main/java/net/dv8tion/jda/api/entities/Activity.java @@ -230,6 +230,20 @@ static Activity competing(@Nonnull String name) return EntityBuilder.createActivity(name, null, ActivityType.COMPETING); } + /** + * Creates a new Activity instance with the specified name. + *
This will display without a prefix in the official client + * + * @param name + * The not-null name of the newly created status + * + * @throws IllegalArgumentException + * If the specified name is null, empty, blank or longer than 128 characters + * + * @return A valid Activity instance with the provided name with {@link net.dv8tion.jda.api.entities.Activity.ActivityType#CUSTOM_STATUS} + * + * @since 5.0.0 + */ @Nonnull static Activity customStatus(@Nonnull String name) { From e23d1040526d5e91a3e9341a220858e5d434a64f Mon Sep 17 00:00:00 2001 From: Daedalus <16168171+RedDaedalus@users.noreply.github.com> Date: Tue, 8 Aug 2023 22:39:03 -0600 Subject: [PATCH 3/6] Remove outdated `@Incubating` annotations --- .../java/net/dv8tion/jda/api/entities/Activity.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main/java/net/dv8tion/jda/api/entities/Activity.java b/src/main/java/net/dv8tion/jda/api/entities/Activity.java index 2a0530dff1..a159c8e005 100644 --- a/src/main/java/net/dv8tion/jda/api/entities/Activity.java +++ b/src/main/java/net/dv8tion/jda/api/entities/Activity.java @@ -15,7 +15,6 @@ */ package net.dv8tion.jda.api.entities; -import net.dv8tion.jda.annotations.Incubating; import net.dv8tion.jda.api.entities.emoji.Emoji; import net.dv8tion.jda.api.entities.emoji.EmojiUnion; import net.dv8tion.jda.internal.entities.EntityBuilder; @@ -194,11 +193,8 @@ static Activity listening(@Nonnull String name) * if the specified name is null, empty, blank or longer than 128 characters * * @return A valid Activity instance with the provided name with {@link net.dv8tion.jda.api.entities.Activity.ActivityType#WATCHING} - * - * @incubating This feature is not yet confirmed for the official bot API */ @Nonnull - @Incubating static Activity watching(@Nonnull String name) { Checks.notBlank(name, "Name"); @@ -354,18 +350,12 @@ enum ActivityType /** * Used to indicate that the {@link Activity Activity} should display * as {@code Watching...} in the official client. - * - * @incubating This feature is not yet confirmed for the official bot API */ - @Incubating WATCHING(3), /** * Used to indicate that the {@link Activity Activity} should display as a custom status * in the official client. - * - * @incubating This Activity type is read-only for bots */ - @Incubating CUSTOM_STATUS(4), /** From f87bffa4f48590968312ff8f6c202b52957f2a00 Mon Sep 17 00:00:00 2001 From: Daedalus <16168171+RedDaedalus@users.noreply.github.com> Date: Tue, 8 Aug 2023 22:43:38 -0600 Subject: [PATCH 4/6] Remove direct "Custom Status" check for custom status deserialization --- .../java/net/dv8tion/jda/internal/entities/EntityBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 2b4fc0d644..7a63c0ca2d 100644 --- a/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java +++ b/src/main/java/net/dv8tion/jda/internal/entities/EntityBuilder.java @@ -931,7 +931,7 @@ public static Activity createActivity(DataObject gameJson) if (type == Activity.ActivityType.CUSTOM_STATUS) { - if (gameJson.hasKey("state") && name.equalsIgnoreCase("Custom Status")) + if (gameJson.hasKey("state")) { name = gameJson.getString("state", ""); gameJson = gameJson.remove("state"); From 18ad5cc97e14b3388d6a566678a4a24cea4d14b6 Mon Sep 17 00:00:00 2001 From: Daedalus <16168171+RedDaedalus@users.noreply.github.com> Date: Wed, 9 Aug 2023 13:03:05 -0600 Subject: [PATCH 5/6] Update src/main/java/net/dv8tion/jda/internal/managers/PresenceImpl.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Florian Spieß --- .../java/net/dv8tion/jda/internal/managers/PresenceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/dv8tion/jda/internal/managers/PresenceImpl.java b/src/main/java/net/dv8tion/jda/internal/managers/PresenceImpl.java index 06e16dca72..c858fcdeb8 100644 --- a/src/main/java/net/dv8tion/jda/internal/managers/PresenceImpl.java +++ b/src/main/java/net/dv8tion/jda/internal/managers/PresenceImpl.java @@ -189,7 +189,9 @@ private DataObject getGameJson(Activity activity) { gameObj.put("name", "Custom Status"); gameObj.put("state", activity.getName()); - } else { + } + else + { gameObj.put("name", activity.getName()); } From 098727251d7ee5850a77eabf0bf22c22d534336a Mon Sep 17 00:00:00 2001 From: Daedalus <16168171+RedDaedalus@users.noreply.github.com> Date: Wed, 9 Aug 2023 15:15:24 -0600 Subject: [PATCH 6/6] remove `@since` --- src/main/java/net/dv8tion/jda/api/entities/Activity.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/net/dv8tion/jda/api/entities/Activity.java b/src/main/java/net/dv8tion/jda/api/entities/Activity.java index a159c8e005..2553d74ea7 100644 --- a/src/main/java/net/dv8tion/jda/api/entities/Activity.java +++ b/src/main/java/net/dv8tion/jda/api/entities/Activity.java @@ -237,8 +237,6 @@ static Activity competing(@Nonnull String name) * If the specified name is null, empty, blank or longer than 128 characters * * @return A valid Activity instance with the provided name with {@link net.dv8tion.jda.api.entities.Activity.ActivityType#CUSTOM_STATUS} - * - * @since 5.0.0 */ @Nonnull static Activity customStatus(@Nonnull String name)