Skip to content

Commit 9969223

Browse files
committed
Rewrite starboard to use a queue on a timer instead
1 parent e236167 commit 9969223

9 files changed

Lines changed: 287 additions & 179 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apply plugin: 'java'
22

33
group 'com.avairebot'
4-
version '1.1'
4+
version '1.2'
55
description 'Adds a starboard command to Ava, allowing servers to define a starboard channel'
66

77
sourceCompatibility = 1.8

src/main/java/com/avairebot/starboard/EmoteEventListener.java

Lines changed: 0 additions & 164 deletions
This file was deleted.

src/main/java/com/avairebot/starboard/Starboard.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
import com.avairebot.Constants;
44
import com.avairebot.database.collection.DataRow;
55
import com.avairebot.plugin.JavaPlugin;
6+
import com.avairebot.scheduler.ScheduleHandler;
7+
import com.avairebot.starboard.command.StarboardCommand;
8+
import com.avairebot.starboard.handlers.EmoteEventListener;
9+
import com.avairebot.starboard.job.UpdateStarJob;
10+
import com.avairebot.starboard.migrations.SetupStarboardTableAndFieldMigration;
611
import org.slf4j.Logger;
712
import org.slf4j.LoggerFactory;
813

@@ -13,8 +18,8 @@
1318

1419
public class Starboard extends JavaPlugin {
1520

16-
static final Logger LOGGER = LoggerFactory.getLogger(Starboard.class);
17-
static final String STARBOARD_TABLE = "starboard";
21+
public static final Logger LOGGER = LoggerFactory.getLogger(Starboard.class);
22+
public static final String STARBOARD_TABLE = "starboard";
1823

1924
private final Map<String, String> starboardCache = new HashMap<>();
2025

@@ -26,17 +31,19 @@ public void onEnable() {
2631
registerCommand(new StarboardCommand(this));
2732
registerEventListener(new EmoteEventListener(this));
2833
registerMigration(new SetupStarboardTableAndFieldMigration());
34+
35+
ScheduleHandler.registerJob(new UpdateStarJob(this));
2936
}
3037

31-
int getReactionRequirement() {
38+
public int getReactionRequirement() {
3239
return getConfig().getInt("reaction-requirement", 3);
3340
}
3441

35-
boolean getIgnoreOwnMessages() {
42+
public boolean getIgnoreOwnMessages() {
3643
return getConfig().getBoolean("ignore-own-messages", false);
3744
}
3845

39-
Color getColor(float percentage) {
46+
public Color getColor(float percentage) {
4047
percentage = percentage > 1.0F ? 1.0F : percentage;
4148
percentage = percentage < 0.0F ? 0.05F : percentage;
4249

@@ -49,7 +56,7 @@ Color getColor(float percentage) {
4956
);
5057
}
5158

52-
String getStarEmote(int stars) {
59+
public String getStarEmote(int stars) {
5360
if (stars <= 5) {
5461
return "\u2B50";
5562
} else if (stars <= 10) {
@@ -60,7 +67,7 @@ String getStarEmote(int stars) {
6067
return "\u2728";
6168
}
6269

63-
String getStarboardValueFromGuild(String guildId) {
70+
public String getStarboardValueFromGuild(String guildId) {
6471
if (starboardCache.containsKey(guildId)) {
6572
return starboardCache.get(guildId);
6673
}
@@ -86,7 +93,7 @@ String getStarboardValueFromGuild(String guildId) {
8693
return null;
8794
}
8895

89-
boolean updateStarboardDatabaseValue(String guildId, String value) {
96+
public boolean updateStarboardDatabaseValue(String guildId, String value) {
9097
try {
9198
getDatabase().newQueryBuilder(Constants.GUILD_TABLE_NAME)
9299
.where("id", guildId)

src/main/java/com/avairebot/starboard/StarboardCommand.java renamed to src/main/java/com/avairebot/starboard/command/StarboardCommand.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
package com.avairebot.starboard;
1+
package com.avairebot.starboard.command;
22

33
import com.avairebot.commands.Category;
44
import com.avairebot.commands.CategoryHandler;
55
import com.avairebot.commands.CommandMessage;
66
import com.avairebot.contracts.commands.Command;
7+
import com.avairebot.starboard.Starboard;
78
import com.avairebot.utilities.ComparatorUtil;
89
import com.avairebot.utilities.MentionableUtil;
910
import net.dv8tion.jda.core.entities.Channel;
@@ -17,7 +18,7 @@ public class StarboardCommand extends Command {
1718

1819
private final Starboard starboard;
1920

20-
StarboardCommand(Starboard starboard) {
21+
public StarboardCommand(Starboard starboard) {
2122
super(starboard, false);
2223

2324
this.starboard = starboard;
@@ -30,7 +31,7 @@ public String getName() {
3031

3132
@Override
3233
public String getDescription() {
33-
return "Sets test";
34+
return "Can be used to see the current starboard channel, if an channel is mentioned, the mentioned channel will be set to the new starboard channel.";
3435
}
3536

3637
@Override
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.avairebot.starboard.handlers;
2+
3+
import com.avairebot.contracts.handlers.EventListener;
4+
import com.avairebot.starboard.Starboard;
5+
import com.avairebot.utilities.RestActionUtil;
6+
import net.dv8tion.jda.core.entities.Member;
7+
import net.dv8tion.jda.core.entities.MessageReaction;
8+
import net.dv8tion.jda.core.entities.TextChannel;
9+
import net.dv8tion.jda.core.events.message.guild.react.GuildMessageReactionAddEvent;
10+
import net.dv8tion.jda.core.events.message.guild.react.GuildMessageReactionRemoveEvent;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
14+
import java.util.HashMap;
15+
import java.util.Map;
16+
17+
public class EmoteEventListener extends EventListener {
18+
19+
public static final Map<Long, StarReaction> queue = new HashMap<>();
20+
21+
private static final Logger LOGGER = LoggerFactory.getLogger(EmoteEventListener.class);
22+
23+
private final Starboard starboard;
24+
25+
public EmoteEventListener(Starboard starboard) {
26+
this.starboard = starboard;
27+
}
28+
29+
@Override
30+
public void onGuildMessageReactionAdd(GuildMessageReactionAddEvent event) {
31+
if (!event.getReactionEmote().getName().equals("\u2B50")) {
32+
return;
33+
}
34+
handleStarEvent(event.getReaction(), event.getMember(), event.getMessageIdLong());
35+
}
36+
37+
@Override
38+
public void onGuildMessageReactionRemove(GuildMessageReactionRemoveEvent event) {
39+
if (!event.getReactionEmote().getName().equals("\u2B50")) {
40+
return;
41+
}
42+
handleStarEvent(event.getReaction(), event.getMember(), event.getMessageIdLong());
43+
}
44+
45+
private void handleStarEvent(MessageReaction messageReaction, Member member, long messageId) {
46+
String starboardChannelId = starboard.getStarboardValueFromGuild(messageReaction.getGuild().getId());
47+
if (starboardChannelId == null || starboardChannelId.trim().length() == 0) {
48+
return;
49+
}
50+
51+
TextChannel starboardChannel = messageReaction.getGuild().getTextChannelById(starboardChannelId);
52+
if (starboardChannel == null) {
53+
LOGGER.warn("A starboard channel ID has been not, but no channel was found with the set ID {0}, maybe a mistake?", starboardChannelId);
54+
return;
55+
}
56+
57+
messageReaction.getTextChannel().getMessageById(messageId).queue(message -> {
58+
if (starboard.getIgnoreOwnMessages() && message.getAuthor().getIdLong() == member.getUser().getIdLong()) {
59+
return;
60+
}
61+
62+
queue.put(messageId, new StarReaction(message, starboardChannel));
63+
}, RestActionUtil.IGNORE);
64+
}
65+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.avairebot.starboard.handlers;
2+
3+
import net.dv8tion.jda.core.entities.Message;
4+
import net.dv8tion.jda.core.entities.TextChannel;
5+
6+
public class StarReaction {
7+
8+
private final TextChannel starboardChannel;
9+
private final Message message;
10+
11+
StarReaction(Message message, TextChannel starboardChannel) {
12+
this.message = message;
13+
this.starboardChannel = starboardChannel;
14+
}
15+
16+
public Message getMessage() {
17+
return message;
18+
}
19+
20+
public TextChannel getStarboardChannel() {
21+
return starboardChannel;
22+
}
23+
}

0 commit comments

Comments
 (0)