Skip to content

Commit a1bd338

Browse files
committed
Extracted button click listener logic from slash command listener.
1 parent daa2545 commit a1bd338

File tree

4 files changed

+110
-92
lines changed

4 files changed

+110
-92
lines changed

src/main/java/com/javadiscord/javabot/Bot.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,18 @@ public static void main(String[] args) throws Exception {
6464
* @param jda The JDA bot instance to add listeners to.
6565
*/
6666
private static void addEventListeners(JDA jda) {
67-
jda.addEventListener(new GuildJoin());
68-
jda.addEventListener(new UserJoin());
69-
jda.addEventListener(new UserLeave());
70-
jda.addEventListener(new Startup());
71-
jda.addEventListener(PresenceUpdater.standardActivities());
72-
jda.addEventListener(new SuggestionListener());
73-
jda.addEventListener(new AutoMod());
74-
jda.addEventListener(new SubmissionListener());
75-
jda.addEventListener(new StarboardListener());
67+
jda.addEventListener(
68+
new GuildJoin(),
69+
new UserJoin(),
70+
new UserLeave(),
71+
new Startup(),
72+
PresenceUpdater.standardActivities(),
73+
new SuggestionListener(),
74+
new AutoMod(),
75+
new SubmissionListener(),
76+
new StarboardListener(),
77+
new ButtonClickListener()
78+
);
7679
}
7780

7881
/**

src/main/java/com/javadiscord/javabot/SlashCommands.java

Lines changed: 0 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.google.gson.JsonObject;
44
import com.google.gson.JsonParser;
55
import com.javadiscord.javabot.commands.SlashCommandHandler;
6-
import com.javadiscord.javabot.events.SubmissionListener;
76
import com.javadiscord.javabot.other.Constants;
87
import com.javadiscord.javabot.properties.command.CommandConfig;
98
import com.javadiscord.javabot.properties.command.CommandDataConfig;
@@ -13,9 +12,6 @@
1312
import com.mongodb.client.MongoDatabase;
1413
import net.dv8tion.jda.api.EmbedBuilder;
1514
import net.dv8tion.jda.api.entities.Guild;
16-
import net.dv8tion.jda.api.entities.Member;
17-
import net.dv8tion.jda.api.entities.Role;
18-
import net.dv8tion.jda.api.events.interaction.ButtonClickEvent;
1915
import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
2016
import net.dv8tion.jda.api.hooks.ListenerAdapter;
2117
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
@@ -26,7 +22,6 @@
2622
import java.util.Map;
2723

2824
import static com.javadiscord.javabot.events.Startup.mongoClient;
29-
import static com.javadiscord.javabot.events.Startup.preferredGuild;
3025
import static com.mongodb.client.model.Filters.eq;
3126

3227
/**
@@ -122,80 +117,4 @@ public void registerSlashCommands(Guild guild) {
122117

123118
commands.queue();
124119
}
125-
126-
@Override
127-
public void onButtonClick(ButtonClickEvent event) {
128-
if (event.getUser().isBot()) return;
129-
130-
String[] id = event.getComponentId().split(":");
131-
event.deferEdit().queue();
132-
133-
JsonObject root;
134-
Document document;
135-
136-
Guild guild = preferredGuild;
137-
138-
MongoDatabase database = mongoClient.getDatabase("other");
139-
MongoCollection<Document> reactionroles = database.getCollection("reactionroles");
140-
MongoCollection<Document> openSubmissions = database.getCollection("open_submissions");
141-
MongoCollection<Document> submissionMessages = database.getCollection("submission_messages");
142-
143-
switch (id[0]) {
144-
case "dm-submission":
145-
146-
document = openSubmissions.find(eq("guild_id", guild.getId())).first();
147-
148-
root = JsonParser.parseString(document.toJson()).getAsJsonObject();
149-
String text = root.get("text").getAsString();
150-
151-
switch (id[1]) {
152-
case "send": new SubmissionListener().dmSubmissionSend(event, text); break;
153-
case "cancel": new SubmissionListener().dmSubmissionCancel(event); break;
154-
}
155-
openSubmissions.deleteOne(document);
156-
break;
157-
158-
case "submission":
159-
160-
document = submissionMessages.find(eq("guild_id", guild.getId())).first();
161-
162-
root = JsonParser.parseString(document.toJson()).getAsJsonObject();
163-
String userID = root.get("user_id").getAsString();
164-
165-
switch (id[1]) {
166-
case "approve": new SubmissionListener().submissionApprove(event, userID); break;
167-
case "decline": new SubmissionListener().submissionDecline(event); break;
168-
}
169-
submissionMessages.deleteOne(document);
170-
break;
171-
172-
case "reactionroles":
173-
174-
String messageID = id[1];
175-
String buttonLabel = id[2];
176-
177-
Member member = event.getGuild().retrieveMemberById(event.getUser().getId()).complete();
178-
179-
BasicDBObject criteria = new BasicDBObject()
180-
.append("guild_id", event.getGuild().getId())
181-
.append("message_id", messageID)
182-
.append("button_label", buttonLabel);
183-
184-
String JSON = reactionroles.find(criteria).first().toJson();
185-
186-
JsonObject Root = JsonParser.parseString(JSON).getAsJsonObject();
187-
String roleID = Root.get("role_id").getAsString();
188-
189-
Role role = event.getGuild().getRoleById(roleID);
190-
191-
if (member.getRoles().contains(role)) {
192-
event.getGuild().removeRoleFromMember(member, role).queue();
193-
event.getHook().sendMessage("Removed Role: " + role.getAsMention()).setEphemeral(true).queue();
194-
} else {
195-
event.getGuild().addRoleToMember(member, role).queue();
196-
event.getHook().sendMessage("Added Role: " + role.getAsMention()).setEphemeral(true).queue();
197-
}
198-
break;
199-
}
200-
}
201120
}

src/main/java/com/javadiscord/javabot/commands/moderation/Ban.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
1111
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
1212

13-
import java.util.Date;
13+
import java.time.Instant;
1414

1515
public class Ban implements SlashCommandHandler {
1616

@@ -41,7 +41,7 @@ public void handle(SlashCommandEvent event) {
4141
.addField("ID", "```" + member.getId() + "```", false)
4242
.addField("Reason", "```" + reason + "```", false)
4343
.setFooter("ID: " + member.getId())
44-
.setTimestamp(new Date().toInstant())
44+
.setTimestamp(Instant.now())
4545
.build();
4646

4747
event.replyEmbeds(eb).queue();
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package com.javadiscord.javabot.events;
2+
3+
import com.google.gson.JsonObject;
4+
import com.google.gson.JsonParser;
5+
import com.mongodb.BasicDBObject;
6+
import com.mongodb.client.MongoCollection;
7+
import com.mongodb.client.MongoDatabase;
8+
import net.dv8tion.jda.api.entities.Guild;
9+
import net.dv8tion.jda.api.entities.Member;
10+
import net.dv8tion.jda.api.entities.Role;
11+
import net.dv8tion.jda.api.events.interaction.ButtonClickEvent;
12+
import net.dv8tion.jda.api.hooks.ListenerAdapter;
13+
import org.bson.Document;
14+
15+
import static com.javadiscord.javabot.events.Startup.mongoClient;
16+
import static com.javadiscord.javabot.events.Startup.preferredGuild;
17+
import static com.mongodb.client.model.Filters.eq;
18+
19+
public class ButtonClickListener extends ListenerAdapter {
20+
@Override
21+
public void onButtonClick(ButtonClickEvent event) {
22+
if (event.getUser().isBot()) return;
23+
24+
event.deferEdit().queue();
25+
26+
Guild guild = preferredGuild;
27+
MongoDatabase database = mongoClient.getDatabase("other");
28+
String[] id = event.getComponentId().split(":");
29+
switch (id[0]) {
30+
case "dm-submission":
31+
this.handleDmSubmission(database, guild, event);
32+
break;
33+
case "submission":
34+
this.handleSubmission(database, guild, event);
35+
break;
36+
case "reactionroles":
37+
this.handleReactionRoles(database, guild, event);
38+
break;
39+
}
40+
}
41+
42+
private void handleDmSubmission(MongoDatabase database, Guild guild, ButtonClickEvent event) {
43+
MongoCollection<Document> openSubmissions = database.getCollection("open_submissions");
44+
Document document = openSubmissions.find(eq("guild_id", guild.getId())).first();
45+
JsonObject root = JsonParser.parseString(document.toJson()).getAsJsonObject();
46+
String text = root.get("text").getAsString();
47+
String[] id = event.getComponentId().split(":");
48+
switch (id[1]) {
49+
case "send": new SubmissionListener().dmSubmissionSend(event, text); break;
50+
case "cancel": new SubmissionListener().dmSubmissionCancel(event); break;
51+
}
52+
openSubmissions.deleteOne(document);
53+
}
54+
55+
private void handleSubmission(MongoDatabase database, Guild guild, ButtonClickEvent event) {
56+
MongoCollection<Document> submissionMessages = database.getCollection("submission_messages");
57+
Document document = submissionMessages.find(eq("guild_id", guild.getId())).first();
58+
JsonObject root = JsonParser.parseString(document.toJson()).getAsJsonObject();
59+
String userID = root.get("user_id").getAsString();
60+
String[] id = event.getComponentId().split(":");
61+
switch (id[1]) {
62+
case "approve": new SubmissionListener().submissionApprove(event, userID); break;
63+
case "decline": new SubmissionListener().submissionDecline(event); break;
64+
}
65+
submissionMessages.deleteOne(document);
66+
}
67+
68+
private void handleReactionRoles(MongoDatabase database, Guild guild, ButtonClickEvent event) {
69+
String[] id = event.getComponentId().split(":");
70+
String messageID = id[1];
71+
String buttonLabel = id[2];
72+
73+
Member member = event.getGuild().retrieveMemberById(event.getUser().getId()).complete();
74+
75+
BasicDBObject criteria = new BasicDBObject()
76+
.append("guild_id", event.getGuild().getId())
77+
.append("message_id", messageID)
78+
.append("button_label", buttonLabel);
79+
80+
MongoCollection<Document> reactionroles = database.getCollection("reactionroles");
81+
String JSON = reactionroles.find(criteria).first().toJson();
82+
83+
JsonObject Root = JsonParser.parseString(JSON).getAsJsonObject();
84+
String roleID = Root.get("role_id").getAsString();
85+
86+
Role role = event.getGuild().getRoleById(roleID);
87+
88+
if (member.getRoles().contains(role)) {
89+
event.getGuild().removeRoleFromMember(member, role).queue();
90+
event.getHook().sendMessage("Removed Role: " + role.getAsMention()).setEphemeral(true).queue();
91+
} else {
92+
event.getGuild().addRoleToMember(member, role).queue();
93+
event.getHook().sendMessage("Added Role: " + role.getAsMention()).setEphemeral(true).queue();
94+
}
95+
}
96+
}

0 commit comments

Comments
 (0)