diff --git a/src/main/java/me/braydon/tether/model/DiscordUser.java b/src/main/java/me/braydon/tether/model/DiscordUser.java index 59ef721..b1a6ec9 100644 --- a/src/main/java/me/braydon/tether/model/DiscordUser.java +++ b/src/main/java/me/braydon/tether/model/DiscordUser.java @@ -121,7 +121,14 @@ public final class DiscordUser { */ @AllArgsConstructor @Getter public static class UserFlags { - private final EnumSet list; + /** + * The list of flags the user has. + */ + @NonNull private final EnumSet list; + + /** + * The raw flags the user has. + */ private final int raw; } @@ -130,7 +137,14 @@ public final class DiscordUser { */ @AllArgsConstructor @Getter public static class Avatar { + /** + * The id of the user's avatar. + */ @NonNull private final String id; + + /** + * The URL of the user's avatar. + */ @NonNull private final String url; } @@ -139,7 +153,14 @@ public final class DiscordUser { */ @AllArgsConstructor @Getter public static class Banner { + /** + * The id of the user's avatar. + */ @NonNull private final String id; + + /** + * The URL of the user's avatar. + */ @NonNull private final String url; } @@ -148,11 +169,39 @@ public final class DiscordUser { */ @AllArgsConstructor @Getter public static class SpotifyActivity { + /** + * The currently playing song. + */ @NonNull private final String song; + + /** + * The currently playing artist. + */ @NonNull private final String artist; + + /** + * The album the song is from. + */ + @NonNull private final String album; + + /** + * The current progress of the track. + */ @NonNull private final String trackProgress; + + /** + * The total length of the track. + */ @NonNull private final String trackLength; + + /** + * The unix time of when this track started playing. + */ private final long started; + + /** + * The unix time of when this track stops playing. + */ private final long ends; /** @@ -161,7 +210,7 @@ public final class DiscordUser { * @param richPresence the raw Discord data * @return the built Spotify activity */ - @NonNull + @NonNull @SuppressWarnings("DataFlowIssue") public static SpotifyActivity fromActivity(@NonNull RichPresence richPresence) { SimpleDateFormat dateFormat = new SimpleDateFormat("m:ss"); long started = Objects.requireNonNull(richPresence.getTimestamps()).getStart(); @@ -171,9 +220,9 @@ public final class DiscordUser { long trackProgress = Math.min(System.currentTimeMillis() - started, trackLength); return new SpotifyActivity( - Objects.requireNonNull(richPresence.getDetails()), Objects.requireNonNull(richPresence.getState()).replace(";", ","), + richPresence.getDetails(), richPresence.getState().replace(";", ","), dateFormat.format(trackProgress), dateFormat.format(trackLength), - started, ends + richPresence.getLargeImage().getText(), started, ends ); } } diff --git a/src/main/java/me/braydon/tether/service/DiscordService.java b/src/main/java/me/braydon/tether/service/DiscordService.java index aa17bbb..3b6f9b8 100644 --- a/src/main/java/me/braydon/tether/service/DiscordService.java +++ b/src/main/java/me/braydon/tether/service/DiscordService.java @@ -72,20 +72,9 @@ public final class DiscordService { throw new BadRequestException("Not a valid snowflake"); } try { - // First try to locate the user in a guild - Member member = null; - try { - for (Guild guild : jda.getGuilds()) { - if ((member = guild.retrieveMemberById(snowflake).complete()) != null) { - break; - } - } - } catch (ErrorResponseException ex) { - if (ex.getErrorCode() != 10007) { - throw ex; - } - } - // Then retrieve the user + Member member = getMember(snowflake); // First try to locate the member in a guild + + // Then retrieve the user (first try the cache) CachedDiscordUser cachedUser = cachedUsers.getIfPresent(snowflake); boolean fromCache = cachedUser != null; if (cachedUser == null) { // No cache, retrieve fresh data @@ -130,4 +119,26 @@ public final class DiscordService { self.getAsTag(), inviteUrl ); } + + /** + * Get a member from a guild by their snowflake. + * + * @param snowflake the user's snowflake + * @return the member, null if none + */ + private Member getMember(long snowflake) { + Member member = null; + try { + for (Guild guild : jda.getGuilds()) { + if ((member = guild.retrieveMemberById(snowflake).complete()) != null) { + break; + } + } + } catch (ErrorResponseException ex) { + if (ex.getErrorCode() != 10007) { + throw ex; + } + } + return member; + } } \ No newline at end of file