Skip to content

Commit 1df6230

Browse files
authored
Merge pull request #431 from danthe1st/report-resolve
automatically resolve reports when performing mod (inter)actions
2 parents 271070b + 5d7f366 commit 1df6230

File tree

2 files changed

+39
-9
lines changed

2 files changed

+39
-9
lines changed

src/main/java/net/javadiscord/javabot/systems/moderation/report/ReportManager.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,20 @@ public void handleButton(@NotNull ButtonInteractionEvent event, Button button) {
5858
}
5959
Responses.info(event.getHook(), "Report resolved", "Successfully resolved this report!").queue();
6060
event.getMessage().editMessageComponents(ActionRow.of(Button.secondary("report-resolved", "Resolved by " + UserUtils.getUserTag(event.getUser())).asDisabled())).queue();
61-
thread.sendMessage("This thread was resolved by " + event.getUser().getAsMention()).queue(
62-
success -> thread.getManager()
63-
.setName(String.format("[Resolved] %s", thread.getName()))
61+
resolveReport(event.getUser(), thread);
62+
}
63+
64+
/**
65+
* Resolves a report thread.
66+
* This closes the current thread.
67+
* Tis method does not check whether the current thread is actually a report thread.
68+
* @param resolver the {@link User} responsible for resolving the report
69+
* @param reportThread the thread of the report to resolve
70+
*/
71+
public void resolveReport(User resolver, ThreadChannel reportThread) {
72+
reportThread.sendMessage("This thread was resolved by " + resolver.getAsMention()).queue(
73+
success -> reportThread.getManager()
74+
.setName(String.format("[Resolved] %s", reportThread.getName()))
6475
.setArchived(true)
6576
.queue()
6677
);

src/main/java/net/javadiscord/javabot/util/InteractionUtils.java

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import net.dv8tion.jda.api.entities.Guild;
1010
import net.dv8tion.jda.api.entities.Member;
1111
import net.dv8tion.jda.api.entities.Message;
12+
import net.dv8tion.jda.api.entities.User;
13+
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
14+
import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion;
1215
import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent;
1316
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
1417
import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent;
@@ -28,6 +31,7 @@
2831
import net.javadiscord.javabot.data.config.BotConfig;
2932
import net.javadiscord.javabot.data.config.GuildConfig;
3033
import net.javadiscord.javabot.systems.moderation.ModerationService;
34+
import net.javadiscord.javabot.systems.moderation.report.ReportManager;
3135
import net.javadiscord.javabot.systems.moderation.warn.dao.WarnRepository;
3236
import net.javadiscord.javabot.systems.moderation.warn.model.WarnSeverity;
3337
import net.javadiscord.javabot.systems.notification.NotificationService;
@@ -72,6 +76,7 @@ public class InteractionUtils implements ButtonHandler, ModalHandler, StringSele
7276
private final BotConfig botConfig;
7377
private final WarnRepository warnRepository;
7478
private final ExecutorService asyncPool;
79+
private final ReportManager reportManager;
7580

7681
/**
7782
* Deletes a message, only if the person deleting the message is the author
@@ -106,10 +111,11 @@ private void kick(ModalInteraction interaction, @NotNull Guild guild, String mem
106111
return;
107112
}
108113
ModerationService service = new ModerationService(notificationService, botConfig, interaction, warnRepository, asyncPool);
109-
guild.retrieveMemberById(memberId).queue(
110-
member -> {
111-
service.kick(member.getUser(), reason, interaction.getMember(), interaction.getMessageChannel(), false);
114+
guild.getJDA().retrieveUserById(memberId).queue(
115+
user -> {
116+
service.kick(user, reason, interaction.getMember(), interaction.getMessageChannel(), false);
112117
interaction.getMessage().editMessageComponents(ActionRow.of(Button.danger(interaction.getModalId(), "Kicked by " + UserUtils.getUserTag(interaction.getUser())).asDisabled())).queue();
118+
resolveIfInReport(interaction.getChannel(), user);
113119
}, error -> Responses.error(interaction.getHook(), "Could not find member: " + error.getMessage()).queue()
114120
);
115121
}
@@ -120,10 +126,11 @@ private void warn(ModalInteraction interaction, @NotNull Guild guild, String mem
120126
return;
121127
}
122128
ModerationService service = new ModerationService(notificationService, botConfig, interaction, warnRepository, asyncPool);
123-
guild.retrieveMemberById(memberId).queue(
124-
member -> {
125-
service.warn(member.getUser(), severity, reason, interaction.getMember(), interaction.getMessageChannel(), false);
129+
guild.getJDA().retrieveUserById(memberId).queue(
130+
user -> {
131+
service.warn(user, severity, reason, interaction.getMember(), interaction.getMessageChannel(), false);
126132
interaction.getHook().editOriginalComponents(ActionRow.of(Button.primary(interaction.getModalId(), "Warned by " + UserUtils.getUserTag(interaction.getUser())).asDisabled())).queue();
133+
resolveIfInReport(interaction.getChannel(), user);
127134
}, error -> Responses.error(interaction.getHook(), "Could not find member: " + error.getMessage()).queue()
128135
);
129136
}
@@ -138,9 +145,21 @@ private void ban(ModalInteraction interaction, @NotNull Guild guild, String memb
138145
user -> {
139146
service.ban(user, reason, interaction.getMember(), interaction.getMessageChannel(), false);
140147
interaction.getMessage().editMessageComponents(ActionRow.of(Button.danger(interaction.getModalId(), "Banned by " + UserUtils.getUserTag(interaction.getUser())).asDisabled())).queue();
148+
resolveIfInReport(interaction.getChannel(), user);
141149
}, error -> Responses.error(interaction.getHook(), "Could not find member: " + error.getMessage()).queue()
142150
);
143151
}
152+
153+
private void resolveIfInReport(MessageChannelUnion currentChannel, User actioner) {
154+
if (!currentChannel.getType().isThread()) {
155+
return;
156+
}
157+
ThreadChannel currentThread = currentChannel.asThreadChannel();
158+
if (currentThread.getParentChannel().getIdLong() != botConfig.get(currentThread.getGuild()).getModerationConfig().getReportChannelId()) {
159+
return;
160+
}
161+
reportManager.resolveReport(actioner, currentThread);
162+
}
144163

145164
private void unban(ModalInteraction interaction, long memberId, String reason) {
146165
if(!interaction.getMember().hasPermission(Permission.BAN_MEMBERS)) {

0 commit comments

Comments
 (0)