mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-01 23:35:29 +00:00
[AB-xxx] changing the structure of starboard post model
This commit is contained in:
@@ -97,7 +97,7 @@ public class LeaderBoardCommand extends AbstractConditionableCommand {
|
|||||||
} else {
|
} else {
|
||||||
leaderBoard = userExperienceService.findLeaderBoardData(server, page);
|
leaderBoard = userExperienceService.findLeaderBoardData(server, page);
|
||||||
}
|
}
|
||||||
List<CompletableFuture> futures = new ArrayList<>();
|
List<CompletableFuture<?>> futures = new ArrayList<>();
|
||||||
CompletableFuture<List<LeaderBoardEntryModel>> completableFutures = converter.fromLeaderBoard(leaderBoard, actorUser.getGuild().getIdLong());
|
CompletableFuture<List<LeaderBoardEntryModel>> completableFutures = converter.fromLeaderBoard(leaderBoard, actorUser.getGuild().getIdLong());
|
||||||
futures.add(completableFutures);
|
futures.add(completableFutures);
|
||||||
log.info("Rendering leaderboard for page {} in server {} for user {}.", page, actorUser.getId(), actorUser.getGuild().getId());
|
log.info("Rendering leaderboard for page {} in server {} for user {}.", page, actorUser.getId(), actorUser.getGuild().getId());
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import dev.sheldan.abstracto.core.models.database.AChannel;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.models.database.PostTarget;
|
import dev.sheldan.abstracto.core.models.database.PostTarget;
|
||||||
import dev.sheldan.abstracto.core.models.property.SystemConfigProperty;
|
import dev.sheldan.abstracto.core.models.property.SystemConfigProperty;
|
||||||
|
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
|
||||||
|
import dev.sheldan.abstracto.core.models.template.display.UserDisplay;
|
||||||
import dev.sheldan.abstracto.core.service.*;
|
import dev.sheldan.abstracto.core.service.*;
|
||||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementService;
|
import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementService;
|
||||||
@@ -148,22 +150,43 @@ public class StarboardServiceBean implements StarboardService {
|
|||||||
|
|
||||||
|
|
||||||
private CompletableFuture<StarboardPostModel> buildStarboardPostModel(CachedMessage message, Integer starCount) {
|
private CompletableFuture<StarboardPostModel> buildStarboardPostModel(CachedMessage message, Integer starCount) {
|
||||||
return userService.retrieveUserForId(message.getAuthor().getAuthorId())
|
CompletableFuture<User> userFuture = userService.retrieveUserForId(message.getAuthor().getAuthorId());
|
||||||
.thenApply(user -> createStarboardModel(message, starCount, user))
|
CompletableFuture<Member> memberFuture = memberService.retrieveMemberInServer(message.getAuthorAsServerUser());
|
||||||
|
CompletableFuture<StarboardPostModel> returnedFuture = new CompletableFuture<>();
|
||||||
|
FutureUtils.toSingleFuture(List.of(userFuture, memberFuture))
|
||||||
|
.whenComplete((any, error) -> {
|
||||||
|
User user = null;
|
||||||
|
if(!userFuture.isCompletedExceptionally()) {
|
||||||
|
user = userFuture.join();
|
||||||
|
} else {
|
||||||
|
log.warn("Failed to retrieve user for author {} of starboard post.", message.getAuthor().getAuthorId());
|
||||||
|
}
|
||||||
|
Member member = null;
|
||||||
|
if(!memberFuture.isCompletedExceptionally()) {
|
||||||
|
member = memberFuture.join();
|
||||||
|
} else {
|
||||||
|
log.warn("Failed to retrieve user for author {} of starboard post.", message.getAuthor().getAuthorId());
|
||||||
|
}
|
||||||
|
StarboardPostModel starboardModel = createStarboardModel(message, starCount, user, member);
|
||||||
|
returnedFuture.complete(starboardModel);
|
||||||
|
})
|
||||||
.exceptionally(throwable -> {
|
.exceptionally(throwable -> {
|
||||||
log.warn("Failed to retrieve user for author {} of starboard post.", message.getAuthor().getAuthorId(), throwable);
|
log.warn("Complete failure when handling creation starboard post of message {}.", message.getMessageId(), throwable);
|
||||||
return createStarboardModel(message, starCount, null);
|
returnedFuture.completeExceptionally(throwable);
|
||||||
|
return null;
|
||||||
});
|
});
|
||||||
|
return returnedFuture;
|
||||||
}
|
}
|
||||||
|
|
||||||
private StarboardPostModel createStarboardModel(CachedMessage message, Integer starCount, net.dv8tion.jda.api.entities.User user) {
|
private StarboardPostModel createStarboardModel(CachedMessage message, Integer starCount, net.dv8tion.jda.api.entities.User user, Member member) {
|
||||||
Optional<GuildMessageChannel> channel = channelService.getMessageChannelFromServerOptional(message.getServerId(), message.getChannelId());
|
Optional<GuildMessageChannel> channel = channelService.getMessageChannelFromServerOptional(message.getServerId(), message.getChannelId());
|
||||||
Optional<Guild> guild = guildService.getGuildByIdOptional(message.getServerId());
|
Optional<Guild> guild = guildService.getGuildByIdOptional(message.getServerId());
|
||||||
String starLevelEmote = getAppropriateEmote(message.getServerId(), starCount);
|
String starLevelEmote = getAppropriateEmote(message.getServerId(), starCount);
|
||||||
return StarboardPostModel
|
return StarboardPostModel
|
||||||
.builder()
|
.builder()
|
||||||
.message(message)
|
.message(message)
|
||||||
.author(user)
|
.authorUser(user != null ? UserDisplay.fromUser(user) : null)
|
||||||
|
.authorMember(member != null ? MemberDisplay.fromMember(member) : null)
|
||||||
.sourceChannelId(message.getChannelId())
|
.sourceChannelId(message.getChannelId())
|
||||||
.channel(channel.orElse(null))
|
.channel(channel.orElse(null))
|
||||||
.starCount(starCount)
|
.starCount(starCount)
|
||||||
@@ -214,7 +237,7 @@ public class StarboardServiceBean implements StarboardService {
|
|||||||
int count = 3;
|
int count = 3;
|
||||||
List<CompletableFuture<StarStatsUser>> topStarGiverFutures = starboardPostReactorManagementService.retrieveTopStarGiver(serverId, count);
|
List<CompletableFuture<StarStatsUser>> topStarGiverFutures = starboardPostReactorManagementService.retrieveTopStarGiver(serverId, count);
|
||||||
List<CompletableFuture<StarStatsUser>> topStarReceiverFutures = starboardPostReactorManagementService.retrieveTopStarReceiver(serverId, count);
|
List<CompletableFuture<StarStatsUser>> topStarReceiverFutures = starboardPostReactorManagementService.retrieveTopStarReceiver(serverId, count);
|
||||||
List<CompletableFuture> allFutures = new ArrayList<>();
|
List<CompletableFuture<?>> allFutures = new ArrayList<>();
|
||||||
allFutures.addAll(topStarGiverFutures);
|
allFutures.addAll(topStarGiverFutures);
|
||||||
allFutures.addAll(topStarReceiverFutures);
|
allFutures.addAll(topStarReceiverFutures);
|
||||||
return FutureUtils.toSingleFuture(allFutures).thenApply(aVoid -> {
|
return FutureUtils.toSingleFuture(allFutures).thenApply(aVoid -> {
|
||||||
|
|||||||
@@ -2,17 +2,19 @@ package dev.sheldan.abstracto.starboard.model.template;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||||
import dev.sheldan.abstracto.core.models.context.ServerContext;
|
import dev.sheldan.abstracto.core.models.context.ServerContext;
|
||||||
|
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
|
||||||
|
import dev.sheldan.abstracto.core.models.template.display.UserDisplay;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
import net.dv8tion.jda.api.entities.User;
|
|
||||||
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
public class StarboardPostModel extends ServerContext {
|
public class StarboardPostModel extends ServerContext {
|
||||||
private User author;
|
private UserDisplay authorUser;
|
||||||
|
private MemberDisplay authorMember;
|
||||||
private GuildMessageChannel channel;
|
private GuildMessageChannel channel;
|
||||||
private Long sourceChannelId;
|
private Long sourceChannelId;
|
||||||
private CachedMessage message;
|
private CachedMessage message;
|
||||||
|
|||||||
@@ -426,7 +426,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
Parameter param = parameters.get(0);
|
Parameter param = parameters.get(0);
|
||||||
CommandParameterIterators iterators = new CommandParameterIterators(channelIterator, emoteIterator, memberIterator, roleIterator);
|
CommandParameterIterators iterators = new CommandParameterIterators(channelIterator, emoteIterator, memberIterator, roleIterator);
|
||||||
Set<CommandParameterHandler> usedParameterHandler = findNecessaryCommandParameterHandlers(parameters, unParsedCommandParameter);
|
Set<CommandParameterHandler> usedParameterHandler = findNecessaryCommandParameterHandlers(parameters, unParsedCommandParameter);
|
||||||
List<CompletableFuture> futures = new ArrayList<>();
|
List<CompletableFuture<?>> futures = new ArrayList<>();
|
||||||
// the actual parameters which were handled, might not coincide with the unparsed parameters
|
// the actual parameters which were handled, might not coincide with the unparsed parameters
|
||||||
// because we might ignore some parameters (for example referenced messages) in case the command does not use this as a parameter
|
// because we might ignore some parameters (for example referenced messages) in case the command does not use this as a parameter
|
||||||
int parsedParameter = 0;
|
int parsedParameter = 0;
|
||||||
@@ -443,7 +443,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
.getDependentFeatures()
|
.getDependentFeatures()
|
||||||
.stream()
|
.stream()
|
||||||
.map(s -> featureConfigService.getFeatureEnum(s))
|
.map(s -> featureConfigService.getFeatureEnum(s))
|
||||||
.collect(Collectors.toList());
|
.toList();
|
||||||
boolean parameterActiveForFeatures = false;
|
boolean parameterActiveForFeatures = false;
|
||||||
for (FeatureDefinition featureDefinition : featureDefinitions) {
|
for (FeatureDefinition featureDefinition : featureDefinitions) {
|
||||||
if(featureFlagService.getFeatureFlagValue(featureDefinition, message.getGuild().getIdLong())) {
|
if(featureFlagService.getFeatureFlagValue(featureDefinition, message.getGuild().getIdLong())) {
|
||||||
@@ -460,7 +460,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
try {
|
try {
|
||||||
if (handler.handles(param.getType(), value)) {
|
if (handler.handles(param.getType(), value)) {
|
||||||
if (handler.async()) {
|
if (handler.async()) {
|
||||||
CompletableFuture future = handler.handleAsync(value, iterators, param, message, command);
|
CompletableFuture<?> future = handler.handleAsync(value, iterators, param, message, command);
|
||||||
futures.add(future);
|
futures.add(future);
|
||||||
parsedParameters.add(ParseResult.builder().parameter(param).result(future).build());
|
parsedParameters.add(ParseResult.builder().parameter(param).result(future).build());
|
||||||
} else {
|
} else {
|
||||||
@@ -488,11 +488,11 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
combinedFuture.thenAccept(aVoid -> {
|
combinedFuture.thenAccept(aVoid -> {
|
||||||
List<Object> allParamResults = parsedParameters.stream().map(o -> {
|
List<Object> allParamResults = parsedParameters.stream().map(o -> {
|
||||||
if (o.getResult() instanceof CompletableFuture) {
|
if (o.getResult() instanceof CompletableFuture) {
|
||||||
return ((CompletableFuture) o.getResult()).join();
|
return ((CompletableFuture<?>) o.getResult()).join();
|
||||||
} else {
|
} else {
|
||||||
return o.getResult();
|
return o.getResult();
|
||||||
}
|
}
|
||||||
}).collect(Collectors.toList());
|
}).toList();
|
||||||
List<ParseResult> parseResults = new ArrayList<>();
|
List<ParseResult> parseResults = new ArrayList<>();
|
||||||
for (int i = 0; i < allParamResults.size(); i++) {
|
for (int i = 0; i < allParamResults.size(); i++) {
|
||||||
if (allParamResults.get(i) != null) {
|
if (allParamResults.get(i) != null) {
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ public class CacheEntityServiceBean implements CacheEntityService {
|
|||||||
List<CompletableFuture<CachedReactions>> reactionFutures = new ArrayList<>();
|
List<CompletableFuture<CachedReactions>> reactionFutures = new ArrayList<>();
|
||||||
log.debug("Caching {} reactions.", message.getReactions().size());
|
log.debug("Caching {} reactions.", message.getReactions().size());
|
||||||
message.getReactions().forEach(messageReaction -> reactionFutures.add(getCachedReactionFromReaction(messageReaction)));
|
message.getReactions().forEach(messageReaction -> reactionFutures.add(getCachedReactionFromReaction(messageReaction)));
|
||||||
List<CompletableFuture> allFutures = new ArrayList<>(reactionFutures);
|
List<CompletableFuture<?>> allFutures = new ArrayList<>(reactionFutures);
|
||||||
allFutures.add(referencedMessageFuture);
|
allFutures.add(referencedMessageFuture);
|
||||||
FutureUtils.toSingleFuture(allFutures).thenAccept(aVoid ->
|
FutureUtils.toSingleFuture(allFutures).thenAccept(aVoid ->
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import net.dv8tion.jda.api.entities.Member;
|
|||||||
@Builder
|
@Builder
|
||||||
public class MemberDisplay {
|
public class MemberDisplay {
|
||||||
private String memberMention;
|
private String memberMention;
|
||||||
|
private String avatarUrl;
|
||||||
private String name;
|
private String name;
|
||||||
private Long userId;
|
private Long userId;
|
||||||
private String discriminator;
|
private String discriminator;
|
||||||
@@ -25,6 +26,7 @@ public class MemberDisplay {
|
|||||||
.memberMention(member.getAsMention())
|
.memberMention(member.getAsMention())
|
||||||
.name(member.getEffectiveName())
|
.name(member.getEffectiveName())
|
||||||
.discriminator(member.getUser().getDiscriminator())
|
.discriminator(member.getUser().getDiscriminator())
|
||||||
|
.avatarUrl(member.getEffectiveAvatarUrl())
|
||||||
.serverId(member.getGuild().getIdLong())
|
.serverId(member.getGuild().getIdLong())
|
||||||
.userId(member.getIdLong())
|
.userId(member.getIdLong())
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
@@ -15,13 +15,15 @@ public class UserDisplay {
|
|||||||
private String userMention;
|
private String userMention;
|
||||||
private String discriminator;
|
private String discriminator;
|
||||||
private String name;
|
private String name;
|
||||||
|
private String globalName;
|
||||||
private String avatarUrl;
|
private String avatarUrl;
|
||||||
|
|
||||||
public static UserDisplay fromUser(User user) {
|
public static UserDisplay fromUser(User user) {
|
||||||
return UserDisplay
|
return UserDisplay
|
||||||
.builder()
|
.builder()
|
||||||
.userMention(MemberUtils.getUserAsMention(user.getIdLong()))
|
.userMention(user.getAsMention())
|
||||||
.name(user.getEffectiveName())
|
.name(user.getEffectiveName())
|
||||||
|
.globalName(user.getGlobalName())
|
||||||
.discriminator(user.getDiscriminator())
|
.discriminator(user.getDiscriminator())
|
||||||
.id(user.getIdLong())
|
.id(user.getIdLong())
|
||||||
.avatarUrl(user.getEffectiveAvatarUrl())
|
.avatarUrl(user.getEffectiveAvatarUrl())
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public class FutureUtils {
|
|||||||
return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
|
return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CompletableFuture<Void> toSingleFuture(List<CompletableFuture> futures) {
|
public static CompletableFuture<Void> toSingleFuture(List<CompletableFuture<?>> futures) {
|
||||||
return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
|
return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user