Skip to content

Commit

Permalink
Fix potential rounding issue with join dates comparison during Guild
Browse files Browse the repository at this point in the history
Creation
  • Loading branch information
SoAJeff committed Sep 21, 2023
1 parent 5bb9f87 commit 09ac649
Showing 1 changed file with 14 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,17 @@ public class GuildCreateMemberReviewer {
private List<Long> guildUsers;
private List<GuildUser> allUsers;
private List<GuildUser> leftUsers;
private List<GuildUser> usersToSubmit = new ArrayList<>();
private final List<GuildUser> usersToSubmit = new ArrayList<>();
private long guildId;
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

public Mono<Void> reviewMember(Member member) {
SoaLogging.getLogger(this)
.debug("Processing member [" + getMemberName(member) + ", " + member.getId().asLong() + ", " + member
.getGuildId().asLong() + "]");
List<GuildUser> listUser = this.allUsers.stream()
.filter(guildUser -> guildUser.getSnowflake() == member.getId().asLong()).collect(Collectors.toList());
if (listUser.size() > 0) {
if (!listUser.isEmpty()) {
//Existing user
guildUsers.remove(member.getId().asLong());
GuildUser user = updateExistingMember(member, listUser.get(0));
Expand All @@ -46,7 +46,7 @@ public Mono<Void> reviewMember(Member member) {
.filter(guildUser -> guildUser.getSnowflake() == member.getId().asLong())
.collect(Collectors.toList());
GuildUser user;
if (leftUser.size() > 0) {
if (!leftUser.isEmpty()) {
SoaLogging.getLogger(this)
.debug("Member [" + getMemberName(member) + ", " + member.getGuildId().asLong()
+ "] previously left server and has returned.");
Expand Down Expand Up @@ -87,9 +87,15 @@ GuildUser updateExistingMember(Member member, GuildUser user) {
newUser.setJoinedServer(Date.from(member.getJoinTime().get()));
}
if (!sdf.format(user.getJoinedServer()).equals(sdf.format(newUser.getJoinedServer()))) {
SoaLogging.getLogger(this).debug("Joined server times did not match, assuming rejoined server.");
this.recentActionUtility
.addRecentAction(member.getGuildId().asLong(), member.getId().asLong(), "Joined the server");
//Need an additional check to account for rounding, since snowflakes are in milliseconds.
if (!sdf.format(user.getJoinedServer().getTime() - 1000).equals(sdf.format(newUser.getJoinedServer()))) {
SoaLogging.getLogger(this).debug("Joined server times did not match, assuming rejoined server.");
SoaLogging.getLogger(this)
.trace("Existing user: " + sdf.format(user.getJoinedServer()) + ", New User: " + sdf.format(
newUser.getJoinedServer()));
this.recentActionUtility.addRecentAction(member.getGuildId().asLong(), member.getId().asLong(),
"Joined the server");
}
}
//We will see if this needs to be updated after, make it equal for now...
newUser.setLastSeen(user.getLastSeen());
Expand Down Expand Up @@ -133,7 +139,7 @@ Mono<Void> removeRemainingUsers() {
.debug("GuildUsers has " + guildUsers.size() + " items remaining after all processed, marking as left");
for (long id : guildUsers) {
List<GuildUser> listUser = this.userUtility.getGuildUser(id, guildId);
if (listUser.size() > 0) {
if (!listUser.isEmpty()) {
GuildUser user = listUser.get(0);
SoaLogging.getLogger(this)
.debug("Marking " + user.getUsername() + " [" + user.getSnowflake() + "] as left server.");
Expand Down

0 comments on commit 09ac649

Please sign in to comment.