Skip to content

Commit 9a43a3a

Browse files
Added negative effect, bit spaghetti rn
1 parent d77a86d commit 9a43a3a

File tree

1 file changed

+28
-9
lines changed
  • application/src/main/java/org/togetherjava/tjbot/features/basic

1 file changed

+28
-9
lines changed

application/src/main/java/org/togetherjava/tjbot/features/basic/Starboard.java

+28-9
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@
44
import com.github.benmanes.caffeine.cache.Caffeine;
55
import net.dv8tion.jda.api.EmbedBuilder;
66
import net.dv8tion.jda.api.Permission;
7-
import net.dv8tion.jda.api.entities.Guild;
8-
import net.dv8tion.jda.api.entities.Message;
9-
import net.dv8tion.jda.api.entities.MessageEmbed;
10-
import net.dv8tion.jda.api.entities.User;
7+
import net.dv8tion.jda.api.entities.*;
118
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
129
import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
1310
import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent;
11+
import net.dv8tion.jda.api.events.message.react.MessageReactionRemoveEvent;
1412
import net.dv8tion.jda.api.hooks.ListenerAdapter;
1513
import org.jetbrains.annotations.NotNull;
1614
import org.slf4j.Logger;
@@ -48,7 +46,7 @@ public void onMessageReactionAdd(@NotNull MessageReactionAddEvent event) {
4846
String emojiName = event.getEmoji().getName();
4947
Guild guild = event.getGuild();
5048
long messageId = event.getMessageIdLong();
51-
if (shouldIgnoreMessage(emojiName, guild, event.getGuildChannel(), messageId)) {
49+
if (shouldIgnoreMessage(emojiName, guild, event.getGuildChannel(), messageId, true)) {
5250
return;
5351
}
5452
Optional<TextChannel> starboardChannel = getStarboardChannel(guild);
@@ -65,14 +63,35 @@ public void onMessageReactionAdd(@NotNull MessageReactionAddEvent event) {
6563
.queue();
6664
}
6765

66+
@Override
67+
public void onMessageReactionRemove(@NotNull MessageReactionRemoveEvent event) {
68+
String emojiName = event.getEmoji().getName();
69+
Guild guild = event.getGuild();
70+
long messageId = event.getMessageIdLong();
71+
if (shouldIgnoreMessage(emojiName, guild, event.getGuildChannel(), messageId, false)) {
72+
return;
73+
}
74+
event.retrieveMessage()
75+
.map(m -> m.getReactions()
76+
.stream()
77+
.map(reaction -> reaction.getEmoji().getName())
78+
.noneMatch(config.emojiNames()::contains))
79+
.onSuccess(noGoodReactions -> {
80+
if (noGoodReactions) {
81+
database.write(context -> context.data().remove(messageId));
82+
messageCache.invalidate(messageId);
83+
}
84+
})
85+
.queue();
86+
}
87+
6888
private boolean shouldIgnoreMessage(String emojiName, Guild guild, GuildChannel channel,
69-
long messageId) {
89+
long messageId, boolean addingMessage) {
7090
return !config.emojiNames().contains(emojiName)
7191
|| !guild.getPublicRole().hasPermission(channel, Permission.VIEW_CHANNEL)
72-
|| messageCache.getIfPresent(messageId) != null
73-
|| database
92+
|| (addingMessage == (messageCache.getIfPresent(messageId) != null || database
7493
.read(context -> context.fetchExists(context.selectFrom(STARBOARD_MESSAGES)
75-
.where(STARBOARD_MESSAGES.MESSAGE_ID.eq(messageId))));
94+
.where(STARBOARD_MESSAGES.MESSAGE_ID.eq(messageId))))));
7695
}
7796

7897
private Optional<TextChannel> getStarboardChannel(Guild guild) {

0 commit comments

Comments
 (0)