added ability to define and use default emotes (introduced them in starboard/embed deletion/command reactions/suggestions)

fixed post target validation for suggestions
This commit is contained in:
Sheldan
2020-04-10 11:24:16 +02:00
parent ef8dcb61d9
commit e84e384706
13 changed files with 99 additions and 79 deletions

View File

@@ -14,5 +14,4 @@ import java.util.List;
@ConfigurationProperties(prefix = "abstracto.starboard")
public class StarboardConfig {
private List<Integer> lvl = new ArrayList<>();
private List<String> badge = new ArrayList<>();
}

View File

@@ -5,6 +5,7 @@ import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.EmoteService;
import dev.sheldan.abstracto.core.service.MessageService;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
import dev.sheldan.abstracto.core.utils.EmoteUtils;
@@ -37,30 +38,29 @@ public class MessageEmbedRemovalReactionListener implements ReactedAddedListener
@Autowired
private MessageService messageService;
@Autowired
private EmoteService emoteService;
@Override
public void executeReactionAdded(CachedMessage message, MessageReaction reaction, AUserInAServer userAdding) {
Long guildId = message.getServerId();
Optional<AEmote> aEmote = emoteManagementService.loadEmoteByName(REMOVAL_EMOTE, guildId);
if(aEmote.isPresent()) {
AEmote emote = aEmote.get();
MessageReaction.ReactionEmote reactionEmote = reaction.getReactionEmote();
Optional<Emote> emoteInGuild = bot.getEmote(guildId, emote);
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, emote, emoteInGuild.orElse(null))) {
Optional<EmbeddedMessage> embeddedMessageOptional = messageEmbedPostManagementService.findEmbeddedPostByMessageId(message.getMessageId());
if(embeddedMessageOptional.isPresent()) {
EmbeddedMessage embeddedMessage = embeddedMessageOptional.get();
if(embeddedMessage.getEmbeddedUser().getUserReference().getId().equals(userAdding.getUserReference().getId())
|| embeddedMessage.getEmbeddingUser().getUserReference().getId().equals(userAdding.getUserReference().getId())
) {
messageService.deleteMessageInChannelInServer(message.getServerId(), message.getChannelId(), message.getMessageId()).thenAccept(aVoid -> {
messageEmbedPostManagementService.deleteEmbeddedMessageTransactional(embeddedMessage);
});
}
AEmote aEmote = emoteService.getEmoteOrFakeEmote(REMOVAL_EMOTE, guildId);
MessageReaction.ReactionEmote reactionEmote = reaction.getReactionEmote();
Optional<Emote> emoteInGuild = bot.getEmote(guildId, aEmote);
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, aEmote, emoteInGuild.orElse(null))) {
Optional<EmbeddedMessage> embeddedMessageOptional = messageEmbedPostManagementService.findEmbeddedPostByMessageId(message.getMessageId());
if(embeddedMessageOptional.isPresent()) {
EmbeddedMessage embeddedMessage = embeddedMessageOptional.get();
if(embeddedMessage.getEmbeddedUser().getUserReference().getId().equals(userAdding.getUserReference().getId())
|| embeddedMessage.getEmbeddingUser().getUserReference().getId().equals(userAdding.getUserReference().getId())
) {
messageService.deleteMessageInChannelInServer(message.getServerId(), message.getChannelId(), message.getMessageId()).thenAccept(aVoid -> {
messageEmbedPostManagementService.deleteEmbeddedMessageTransactional(embeddedMessage);
});
}
}
} else {
log.warn("Emote {} is not defined for guild {}. Embed link deletion not functional.", REMOVAL_EMOTE, guildId);
}
}

View File

@@ -8,6 +8,7 @@ import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.EmoteService;
import dev.sheldan.abstracto.core.service.MessageCache;
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
@@ -59,6 +60,9 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
@Autowired
private UserManagementService userManagementService;
@Autowired
private EmoteService emoteService;
@Override
@Transactional
public void executeReactionAdded(CachedMessage message, MessageReaction addedReaction, AUserInAServer userAdding) {
@@ -66,17 +70,12 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
return;
}
Long guildId = message.getServerId();
Optional<AEmote> aEmote = emoteManagementService.loadEmoteByName(STAR_EMOTE, guildId);
if(aEmote.isPresent()) {
AEmote emote = aEmote.get();
MessageReaction.ReactionEmote reactionEmote = addedReaction.getReactionEmote();
Optional<Emote> emoteInGuild = bot.getEmote(guildId, emote);
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, emote, emoteInGuild.orElse(null))) {
Optional<CachedReaction> reactionOptional = EmoteUtils.getReactionFromMessageByEmote(message, emote);
updateStarboardPost(message, reactionOptional.orElse(null), userAdding, true);
}
} else {
log.warn("Emote {} is not defined for guild {}. Starboard not functional.", STAR_EMOTE, guildId);
AEmote aEmote = emoteService.getEmoteOrFakeEmote(STAR_EMOTE, guildId);
MessageReaction.ReactionEmote reactionEmote = addedReaction.getReactionEmote();
Optional<Emote> emoteInGuild = bot.getEmote(guildId, aEmote);
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, aEmote, emoteInGuild.orElse(null))) {
Optional<CachedReaction> reactionOptional = EmoteUtils.getReactionFromMessageByEmote(message, aEmote);
updateStarboardPost(message, reactionOptional.orElse(null), userAdding, true);
}
}
@@ -124,17 +123,12 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
return;
}
Long guildId = message.getServerId();
Optional<AEmote> aEmote = emoteManagementService.loadEmoteByName(STAR_EMOTE, guildId);
if(aEmote.isPresent()) {
AEmote emote = aEmote.get();
MessageReaction.ReactionEmote reactionEmote = removedReaction.getReactionEmote();
Optional<Emote> emoteInGuild = bot.getEmote(guildId, emote);
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, emote, emoteInGuild.orElse(null))) {
Optional<CachedReaction> reactionOptional = EmoteUtils.getReactionFromMessageByEmote(message, emote);
updateStarboardPost(message, reactionOptional.orElse(null), userRemoving, false);
}
} else {
log.warn("Emote {} is not defined for guild {}. Starboard not functional.", STAR_EMOTE, guildId);
AEmote aEmote = emoteService.getEmoteOrFakeEmote(STAR_EMOTE, guildId);
MessageReaction.ReactionEmote reactionEmote = removedReaction.getReactionEmote();
Optional<Emote> emoteInGuild = bot.getEmote(guildId, aEmote);
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, aEmote, emoteInGuild.orElse(null))) {
Optional<CachedReaction> reactionOptional = EmoteUtils.getReactionFromMessageByEmote(message, aEmote);
updateStarboardPost(message, reactionOptional.orElse(null), userRemoving, false);
}
}

View File

@@ -106,15 +106,7 @@ public class StarboardServiceBean implements StarboardService {
AChannel aChannel = AChannel.builder().id(message.getChannelId()).build();
AUser user = AUser.builder().id(message.getAuthorId()).build();
AServer server = AServer.builder().id(message.getServerId()).build();
Optional<AEmote> appropriateEmoteOptional = getAppropriateEmote(message.getServerId(), starCount);
String emoteText;
if(appropriateEmoteOptional.isPresent()) {
AEmote emote = appropriateEmoteOptional.get();
emoteText = emoteService.getEmoteAsMention(emote, message.getServerId(), "");
} else {
log.warn("No emote defined to be used for starboard post. Falling back to default.");
emoteText = "";
}
String starLevelEmote = getAppropriateEmote(message.getServerId(), starCount);
return StarboardPostModel
.builder()
.message(message)
@@ -125,7 +117,7 @@ public class StarboardServiceBean implements StarboardService {
.guild(guild.orElse(null))
.user(user)
.server(server)
.starLevelEmote(emoteText)
.starLevelEmote(starLevelEmote)
.build();
}
@@ -161,10 +153,7 @@ public class StarboardServiceBean implements StarboardService {
Integer reactionCount = starboardPostReactorManagementService.getStarCount(serverId);
List<String> emotes = new ArrayList<>();
for (int i = 1; i < count + 1; i++) {
Optional<AEmote> starboardRankingEmote = getStarboardRankingEmote(serverId, i);
AEmote emote = starboardRankingEmote.orElse(null);
String defaultEmoji = starboardConfig.getBadge().get(i - 1);
emotes.add(emoteService.getEmoteAsMention(emote, serverId, defaultEmoji));
emotes.add(getStarboardRankingEmote(serverId, i));
}
return StarStatsModel
@@ -178,17 +167,21 @@ public class StarboardServiceBean implements StarboardService {
.build();
}
private Optional<AEmote> getStarboardRankingEmote(Long serverId, Integer position) {
return emoteManagementService.loadEmoteByName("starboardBadge" + position, serverId);
private String getStarboardRankingEmote(Long serverId, Integer position) {
return emoteService.getUsableEmoteOrDefault(serverId, buildBadgeName(position));
}
private Optional<AEmote> getAppropriateEmote(Long serverId, Integer starCount) {
private String buildBadgeName(Integer position) {
return "starboardBadge" + position;
}
private String getAppropriateEmote(Long serverId, Integer starCount) {
for(int i = starboardConfig.getLvl().size(); i > 0; i--) {
Double starMinimum = configService.getDoubleValue("starLvl" + i, serverId);
if(starCount >= starMinimum) {
return emoteManagementService.loadEmoteByName("star" + i, serverId);
return emoteService.getUsableEmoteOrDefault(serverId, "star" + i);
}
}
return emoteManagementService.loadEmoteByName("star0", serverId);
return emoteService.getUsableEmoteOrDefault(serverId, "star0");
}
}

View File

@@ -138,8 +138,6 @@ public class SuggestionServiceBean implements SuggestionService {
@Override
public void validateSetup(Long serverId) {
emoteService.throwIfEmoteDoesNotExist(SUGGESTION_YES_EMOTE, serverId);
emoteService.throwIfEmoteDoesNotExist(SUGGESTION_NO_EMOTE, serverId);
postTargetService.throwIfPostTargetIsNotDefined(SUGGESTION_YES_EMOTE, serverId);
postTargetService.throwIfPostTargetIsNotDefined(SUGGESTIONS_TARGET, serverId);
}
}

View File

@@ -2,13 +2,21 @@ abstracto.postTargets.utility=suggestions,starboard
abstracto.emoteNames.suggestion=suggestionYes,suggestionNo
abstracto.emoteNames.starboard=star,star1,star2,star3,star4,starboardBadge1,starboardBadge2,starboardBadge3
abstracto.emoteNames.embed=removeEmbed
abstracto.defaultEmotes.suggestionYes=\u2B06\uFE0F
abstracto.defaultEmotes.suggestionNo=\u2B07\uFE0F
abstracto.defaultEmotes.star=\u2B50
abstracto.defaultEmotes.star1=\u2B50
abstracto.defaultEmotes.star2=\uD83C\uDF1F
abstracto.defaultEmotes.star3=\uD83D\uDCAB
abstracto.defaultEmotes.star4=\uD83C\uDF20
abstracto.defaultEmotes.starboardBadge1=\ud83e\udd47
abstracto.defaultEmotes.starboardBadge2=\ud83e\udd48
abstracto.defaultEmotes.starboardBadge3=\ud83e\udd49
abstracto.defaultEmotes.removeEmbed=\uD83D\uDDD1\uFE0F
abstracto.starboard.lvl[0]=5
abstracto.starboard.lvl[1]=8
abstracto.starboard.lvl[2]=13
abstracto.starboard.lvl[3]=17
abstracto.starboard.badge[0]=\ud83e\udd47
abstracto.starboard.badge[1]=\ud83e\udd48
abstracto.starboard.badge[2]=\ud83e\udd49
abstracto.scheduling.jobs.reminderJob.name=reminderJob
abstracto.scheduling.jobs.reminderJob.group=utility
@@ -16,8 +24,8 @@ abstracto.scheduling.jobs.reminderJob.clazz=dev.sheldan.abstracto.utility.jobs.R
abstracto.scheduling.jobs.reminderJob.standAlone=false
abstracto.scheduling.jobs.reminderJob.active=true
abstracto.features.starboard=false
abstracto.features.reminder=false
abstracto.features.starboard=true
abstracto.features.remind=true
abstracto.features.suggestion=false
abstracto.features.utility=false
abstracto.features.embeds=true