Skip to content

Commit

Permalink
Switch display names and default avatar calculation to discords new u…
Browse files Browse the repository at this point in the history
…sername system
  • Loading branch information
Alf-Melmac committed Jun 7, 2023
1 parent 1750d9f commit 7f6fbc6
Show file tree
Hide file tree
Showing 9 changed files with 35 additions and 27 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
<!--https://github.com/atteo/classindex/tags -->
<classindex.version>3.13</classindex.version>
<!--https://github.com/DV8FromTheWorld/JDA/releases -->
<jda.version>5.0.0-beta.9</jda.version>
<jda.version>5.0.0-beta.10</jda.version>
<!--https://jsoup.org/news/ -->
<jsoup.version>1.16.1</jsoup.version>
<!--https://github.com/ical4j/ical4j/tags -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,20 @@ public static DiscordUserDto toDto(OAuth2User oAuth2User) {
if (oAuth2User == null) {
return null;
}
String id = getAttribute(oAuth2User, ID);
final String id = getAttribute(oAuth2User, ID);
final String globalName = getAttribute(oAuth2User, GLOBAL_NAME);
return DiscordUserDto.builder()
.id(id)
.name(getAttribute(oAuth2User, USERNAME))
.avatarUrl(getAvatarUrl(id, getAttribute(oAuth2User, AVATAR), getAttribute(oAuth2User, DISCRIMINATOR)))
.name(globalName != null ? globalName : getAttribute(oAuth2User, USERNAME))
.avatarUrl(getAvatarUrl(id, getAttribute(oAuth2User, AVATAR)))
.authorities(getAuthoritiesOfLoggedInUser())
.build();
}

public static DiscordUserDto toDto(DiscordUser user) {
return DiscordUserDto.builder()
.id(Long.toString(user.getId()))
.name(user.getUsername())
.name(user.getEffectiveName())
.avatarUrl(user.getAvatarUrl())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
public enum DiscordUserObjectFields {
ID,
USERNAME,
DISCRIMINATOR,
GLOBAL_NAME,
AVATAR;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ public String getEffectiveName() {
if (nick != null) {
return nick;
} else if (user != null) {
return user.getUsername();
return user.getEffectiveName();
} else {
return null;
}
}

public String getAvatarUrl() {
if (avatar != null) {
return DiscordUserUtils.getAvatarUrl(Long.toString(guild), Long.toString(user.getId()), avatar, Short.toString(user.getDiscriminator()));
return DiscordUserUtils.getAvatarUrl(Long.toString(guild), Long.toString(user.getId()), avatar);
}
return user.getAvatarUrl();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
public class DiscordOauthUser {
private long id;
private String username;
private String globalName;
private String avatar;
private short discriminator;
private String locale;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,44 @@

import de.webalf.slotbot.util.bot.DiscordUserUtils;
import lombok.*;
import net.dv8tion.jda.api.entities.User;

/**
* Representation of a discord user
*
* @author Alf
* @see net.dv8tion.jda.api.entities.User
* @see User
* @see <a href="https://discord.com/developers/docs/resources/user#user-object">User Object</a>
* @since 27.01.2023
*/
//This can't be @Value to allow RestTemplate to create an instance of this class
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DiscordUser {
private long id;
private String username;
private String global_name;
private String avatar;
private short discriminator;

/**
* @see User#getEffectiveName()
*/
public String getEffectiveName() {
return global_name != null ? global_name : username;
}

public String getAvatarUrl() {
return DiscordUserUtils.getAvatarUrl(Long.toString(id), avatar, Short.toString(discriminator));
return DiscordUserUtils.getAvatarUrl(Long.toString(id), avatar);
}

public static DiscordUser fromJda(@NonNull net.dv8tion.jda.api.entities.User jdaUser) {
public static DiscordUser fromJda(@NonNull User jdaUser) {
return DiscordUser.builder()
.id(jdaUser.getIdLong())
.username(jdaUser.getName())
.global_name(jdaUser.getGlobalName())
.avatar(jdaUser.getAvatarId())
.discriminator(Short.parseShort(jdaUser.getDiscriminator()))
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public class DiscordApiService {
*/
@Cacheable("discordUsernames")
public String getName(String userId) {
return getUser(userId).getUsername();
return getUser(userId).getEffectiveName();
}

@Cacheable("discordNicknames")
Expand Down
17 changes: 8 additions & 9 deletions src/main/java/de/webalf/slotbot/util/bot/DiscordUserUtils.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package de.webalf.slotbot.util.bot;

import jakarta.validation.constraints.NotBlank;
import lombok.NonNull;
import lombok.experimental.UtilityClass;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.entities.UserSnowflake;
import net.dv8tion.jda.api.entities.channel.concrete.PrivateChannel;

/**
Expand All @@ -27,27 +29,24 @@ public static PrivateChannel getPrivateChannel(User user) {
/**
* @see User#getEffectiveAvatarUrl()
*/
public static String getAvatarUrl(@NotBlank String id, String avatar, @NotBlank String discriminator) {
public static String getAvatarUrl(@NotBlank String id, String avatar) {
if (avatar == null) {
return getDefaultAvatarUrl(Short.parseShort(discriminator));
return getDefaultAvatarUrl(id);
}
return String.format(User.AVATAR_URL, id, avatar, avatar.startsWith("a_") ? "gif" : "png");
}

/**
* @see Member#getEffectiveAvatarUrl()
*/
public static String getAvatarUrl(@NotBlank String guild, @NotBlank String id, String avatar, @NotBlank String discriminator) {
public static String getAvatarUrl(@NotBlank String guild, @NotBlank String id, String avatar) {
if (avatar == null) {
return getDefaultAvatarUrl(Short.parseShort(discriminator));
return getDefaultAvatarUrl(id);
}
return String.format(Member.AVATAR_URL, guild, id, avatar, avatar.startsWith("a_") ? "gif" : "png");
}

/**
* @see User#getDefaultAvatarUrl()
*/
private static String getDefaultAvatarUrl(short discriminator) {
return String.format(User.DEFAULT_AVATAR_URL, discriminator % 5);
private static String getDefaultAvatarUrl(@NonNull String id) {
return UserSnowflake.fromId(id).getDefaultAvatarUrl();
}
}
4 changes: 2 additions & 2 deletions src/main/java/de/webalf/slotbot/util/bot/MessageUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -273,9 +273,9 @@ static Consumer<Message> doNothing() {

private static void dmFailure(User user, Consumer<? super Message> success, boolean callSuccessOnFailure, Throwable fail) {
if (fail instanceof ErrorResponseException ex && ex.getErrorResponse() == CANNOT_SEND_TO_USER) {
log.warn("Couldn't send DM to {}. Probably the user prevents receiving messages from the bot.", user.getAsTag());
log.warn("Couldn't send DM to @{}. Probably the user prevents receiving messages from the bot.", user.getName());
} else {
log.warn("Couldn't send DM to {}", user.getAsTag(), fail);
log.warn("Couldn't send DM to @{}", user.getName(), fail);
}

if (callSuccessOnFailure) {
Expand Down

0 comments on commit 7f6fbc6

Please sign in to comment.