mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-16 20:29:08 +00:00
[AB-99] changing the way roles are added/removed for experience system, as discord has a race condition in which quick additions/removals cause unexpected problems
This commit is contained in:
@@ -371,9 +371,17 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
|
|||||||
userExperienceManagementService.saveUser(aUserExperience);
|
userExperienceManagementService.saveUser(aUserExperience);
|
||||||
}
|
}
|
||||||
if(!Objects.equals(result.getOldRoleId(), result.getNewRoleId())) {
|
if(!Objects.equals(result.getOldRoleId(), result.getNewRoleId())) {
|
||||||
|
if(result.getOldRoleId() != null && result.getNewRoleId() != null) {
|
||||||
|
roleService.updateRolesIds(member, Arrays.asList(result.getOldRoleId()), Arrays.asList(result.getNewRoleId())).thenAccept(unused -> {
|
||||||
|
log.debug("Removed role {} from and added role {} to member {} in server {}.", result.getOldRoleId(), result.getNewRoleId(), member.getIdLong(), member.getGuild().getIdLong());
|
||||||
|
}).exceptionally(throwable -> {
|
||||||
|
log.warn("Failed to remove role {} from and add role {} to member {} in server {}.", result.getOldRoleId(), member.getIdLong(), member.getGuild().getIdLong(), throwable);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
if(result.getOldRoleId() != null) {
|
if(result.getOldRoleId() != null) {
|
||||||
roleService.removeRoleFromMemberAsync(member, result.getOldRoleId()).thenAccept(unused -> {
|
roleService.removeRoleFromMemberAsync(member, result.getOldRoleId()).thenAccept(unused -> {
|
||||||
log.debug("Removed role {} to member {} in server {}.", result.getOldRoleId(), member.getIdLong(), member.getGuild().getIdLong());
|
log.debug("Removed role {} from member {} in server {}.", result.getOldRoleId(), member.getIdLong(), member.getGuild().getIdLong());
|
||||||
}).exceptionally(throwable -> {
|
}).exceptionally(throwable -> {
|
||||||
log.warn("Failed to remove role {} from {} member {} in server {}.", result.getOldRoleId(), member.getIdLong(), member.getGuild().getIdLong(), throwable);
|
log.warn("Failed to remove role {} from {} member {} in server {}.", result.getOldRoleId(), member.getIdLong(), member.getGuild().getIdLong(), throwable);
|
||||||
return null;
|
return null;
|
||||||
@@ -381,13 +389,14 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
|
|||||||
}
|
}
|
||||||
if(result.getNewRoleId() != null) {
|
if(result.getNewRoleId() != null) {
|
||||||
roleService.addRoleToMemberAsync(member, result.getNewRoleId()).thenAccept(unused -> {
|
roleService.addRoleToMemberAsync(member, result.getNewRoleId()).thenAccept(unused -> {
|
||||||
log.debug("Added role {} to member {} in server {}.", result.getOldRoleId(), member.getIdLong(), member.getGuild().getIdLong());
|
log.debug("Added role {} to member {} in server {}.", result.getNewRoleId(), member.getIdLong(), member.getGuild().getIdLong());
|
||||||
}).exceptionally(throwable -> {
|
}).exceptionally(throwable -> {
|
||||||
log.warn("Failed to add role {} to {} member {} in server {}.", result.getOldRoleId(), member.getIdLong(), member.getGuild().getIdLong(), throwable);
|
log.warn("Failed to add role {} to {} member {} in server {}.", result.getOldRoleId(), member.getIdLong(), member.getGuild().getIdLong(), throwable);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
log.debug("Experience gain was disabled. User did not gain any experience.");
|
log.debug("Experience gain was disabled. User did not gain any experience.");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,6 +85,23 @@ public class RoleServiceBean implements RoleService {
|
|||||||
return addRoleToMemberAsync(member.getGuild(), member.getIdLong(), role);
|
return addRoleToMemberAsync(member.getGuild(), member.getIdLong(), role);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<Void> updateRolesIds(Member member, List<Long> rolesToRemove, List<Long> rolesToAdd) {
|
||||||
|
List<Role> rolesObjToRemove = rolesToRemove
|
||||||
|
.stream().map(aLong -> member.getGuild().getRoleById(aLong))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
List<Role> rolesObjToAdd = rolesToAdd
|
||||||
|
.stream().map(aLong -> member.getGuild().getRoleById(aLong))
|
||||||
|
.toList();
|
||||||
|
return updateRolesObj(member, rolesObjToRemove, rolesObjToAdd);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<Void> updateRolesObj(Member member, List<Role> rolesToRemove, List<Role> rolesToAdd) {
|
||||||
|
return member.getGuild().modifyMemberRoles(member, rolesToAdd, rolesToRemove).submit();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Void> addRoleToMemberAsync(Member member, Role role) {
|
public CompletableFuture<Void> addRoleToMemberAsync(Member member, Role role) {
|
||||||
return addRoleToMemberAsync(member.getGuild(), member.getIdLong(), role);
|
return addRoleToMemberAsync(member.getGuild(), member.getIdLong(), role);
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ public interface RoleService {
|
|||||||
void addRoleToMember(AUserInAServer aUserInAServer, ARole role);
|
void addRoleToMember(AUserInAServer aUserInAServer, ARole role);
|
||||||
CompletableFuture<Void> addRoleToUserAsync(AUserInAServer aUserInAServer, ARole role);
|
CompletableFuture<Void> addRoleToUserAsync(AUserInAServer aUserInAServer, ARole role);
|
||||||
CompletableFuture<Void> addRoleToMemberAsync(Member member, Long roleId);
|
CompletableFuture<Void> addRoleToMemberAsync(Member member, Long roleId);
|
||||||
|
CompletableFuture<Void> updateRolesIds(Member member, List<Long> rolesToRemove, List<Long> rolesToAdd);
|
||||||
|
CompletableFuture<Void> updateRolesObj(Member member, List<Role> rolesToRemove, List<Role> rolesToAdd);
|
||||||
CompletableFuture<Void> addRoleToMemberAsync(Member member, Role role);
|
CompletableFuture<Void> addRoleToMemberAsync(Member member, Role role);
|
||||||
void addRoleToMember(Member member, ARole role);
|
void addRoleToMember(Member member, ARole role);
|
||||||
CompletableFuture<Void> addRoleToMemberAsync(Member member, ARole role);
|
CompletableFuture<Void> addRoleToMemberAsync(Member member, ARole role);
|
||||||
|
|||||||
Reference in New Issue
Block a user