Skip to content

Commit ba27863

Browse files
Merge remote-tracking branch 'origin/main' into dynxsty/qotw
2 parents 76b986f + d05e1ea commit ba27863

File tree

7 files changed

+48
-20
lines changed

7 files changed

+48
-20
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public class Bot {
5151
private final DIH4JDA dih4jda;
5252
private final BotConfig config;
5353
private final List<SlashCommand> commands;
54-
private final List<ContextCommand> contextCommands;
54+
private final List<ContextCommand<?>> contextCommands;
5555
private final List<ListenerAdapter> listeners;
5656
private final ApplicationContext ctx;
5757

src/main/java/net/javadiscord/javabot/systems/moderation/AutoMod.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import net.dv8tion.jda.api.Permission;
55
import net.dv8tion.jda.api.entities.Member;
66
import net.dv8tion.jda.api.entities.Message;
7-
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
7+
import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion;
88
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
99
import net.dv8tion.jda.api.events.message.MessageUpdateEvent;
1010
import net.dv8tion.jda.api.hooks.ListenerAdapter;
@@ -150,7 +150,7 @@ private void checkContentAutomod(@Nonnull Message message) {
150150
"Automod: Advertising",
151151
message.getGuild().getMember(message.getJDA().getSelfUser()),
152152
message.getChannel(),
153-
isSuggestionsChannel(message.getChannel().asTextChannel())
153+
isSuggestionsChannel(message.getChannel())
154154
);
155155
message.delete().queue(success -> {
156156
}, error -> log.info("Message was deleted before Automod was able to handle it."));
@@ -168,7 +168,7 @@ private void checkContentAutomod(@Nonnull Message message) {
168168
"Automod: Suspicious Link",
169169
message.getGuild().getMember(message.getJDA().getSelfUser()),
170170
message.getChannel(),
171-
isSuggestionsChannel(message.getChannel().asTextChannel())
171+
isSuggestionsChannel(message.getChannel())
172172
);
173173
message.delete().queue(success -> {
174174
}, error -> log.info("Message was deleted before Automod was able to handle it."));
@@ -256,7 +256,8 @@ public boolean hasAdvertisingLink(@NotNull Message message) {
256256
return false;
257257
}
258258

259-
private boolean isSuggestionsChannel(@NotNull TextChannel channel) {
260-
return channel.equals(botConfig.get(channel.getGuild()).getModerationConfig().getSuggestionChannel());
259+
private boolean isSuggestionsChannel(@NotNull MessageChannelUnion channel) {
260+
return channel.getType().isGuild() &&
261+
channel.getIdLong() == botConfig.get(channel.asGuildMessageChannel().getGuild()).getModerationConfig().getSuggestionChannel().getIdLong();
261262
}
262263
}

src/main/java/net/javadiscord/javabot/systems/moderation/ModerateUserCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ protected ReplyCallbackAction handleModerationCommand(@NotNull SlashCommandInter
3535
return Responses.error(event, "You cannot perform this action on yourself.");
3636
}
3737
Objects.requireNonNull(event.getGuild()).retrieveMemberById(target.getIdLong()).queue(targetMember -> {
38-
if (isRequireStaff() && targetMember.isOwner() || !moderator.canInteract(targetMember)) {
39-
Responses.error(event.getHook(), "You cannot perform actions on a higher member staff member.").queue();
38+
if (isRequireStaff() && (targetMember.isOwner() || !moderator.canInteract(targetMember))) {
39+
Responses.error(event.getHook(), "You cannot perform actions on a higher staff member.").queue();
4040
return;
4141
}
4242
WebhookMessageCreateAction<Message> action = handleModerationUserCommand(event, moderator, target, reasonOption.getAsString());

src/main/java/net/javadiscord/javabot/systems/moderation/ModerationService.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,17 @@ public void removeTimeout(Member member, String reason, Member removedBy, Messag
208208
*/
209209
public void ban(User user, String reason, Member bannedBy, MessageChannel channel, boolean quiet) {
210210
MessageEmbed banEmbed = buildBanEmbed(user, bannedBy, reason);
211+
user.openPrivateChannel().flatMap(privateChannel -> privateChannel.sendMessageEmbeds(banEmbed)).queue(success -> {
212+
banAndSendGuildNotifications(user, reason, bannedBy, channel, quiet, banEmbed);
213+
}, err-> {
214+
banAndSendGuildNotifications(user, reason, bannedBy, channel, quiet, banEmbed);
215+
ExceptionLogger.capture(err, ModerationService.class.getName());
216+
});
217+
}
218+
219+
private void banAndSendGuildNotifications(User user, String reason, Member bannedBy, MessageChannel channel, boolean quiet,
220+
MessageEmbed banEmbed) {
211221
bannedBy.getGuild().ban(user, BAN_DELETE_DAYS, TimeUnit.DAYS).reason(reason).queue(s -> {
212-
notificationService.withUser(user).sendDirectMessage(c -> c.sendMessageEmbeds(banEmbed));
213222
notificationService.withGuild(bannedBy.getGuild()).sendToModerationLog(c -> c.sendMessageEmbeds(banEmbed));
214223
if (!quiet) channel.sendMessageEmbeds(banEmbed).queue();
215224
}, ExceptionLogger::capture);

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

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,13 @@
2929
import net.javadiscord.javabot.data.config.guild.ModerationConfig;
3030
import net.javadiscord.javabot.util.InteractionUtils;
3131
import net.javadiscord.javabot.util.Responses;
32+
import net.javadiscord.javabot.util.WebhookUtil;
33+
3234
import org.jetbrains.annotations.NotNull;
3335

3436
import java.time.Instant;
3537
import java.util.List;
38+
import java.util.function.Consumer;
3639

3740
/**
3841
* Manages all interactions regarding the report-system.
@@ -154,7 +157,11 @@ private void handleMessageReport(ModalInteractionEvent event, String messageId)
154157
embed.setTitle(String.format("%s reported a Message from %s", event.getUser().getName(), target.getAuthor().getName()));
155158
embed.addField("Message", String.format("[Jump to Message](%s)", target.getJumpUrl()), false);
156159
MessageChannel reportChannel = config.getModerationConfig().getReportChannel();
157-
reportChannel.sendMessageEmbeds(embed.build()).queue(m -> createReportThread(m, target.getAuthor().getIdLong(), config.getModerationConfig()));
160+
reportChannel.sendMessageEmbeds(embed.build()).queue(m -> createReportThread(m, target.getAuthor().getIdLong(), config.getModerationConfig(), thread->{
161+
WebhookUtil.ensureWebhookExists(thread.getParentChannel().asStandardGuildMessageChannel(), wh->{
162+
WebhookUtil.mirrorMessageToWebhook(wh, target, target.getContentRaw(), thread.getIdLong());
163+
});
164+
}));
158165
embed.setDescription("Successfully reported " + "`" + target.getAuthor().getAsTag() + "`!\nYour report has been send to our Moderators");
159166
event.getHook().sendMessageEmbeds(embed.build()).queue();
160167
}, failure -> {
@@ -173,13 +180,24 @@ private ActionRow setComponents(long targetId, long threadId) {
173180
}
174181

175182
private void createReportThread(Message message, long targetId, ModerationConfig config) {
183+
createReportThread(message, targetId, config, thread->{});
184+
}
185+
186+
private void createReportThread(Message message, long targetId, ModerationConfig config, Consumer<ThreadChannel> onSuccess) {
176187
message.createThreadChannel(message.getEmbeds().get(0).getTitle()).queue(
177-
thread -> thread.sendMessage(config.getStaffRole().getAsMention())
188+
thread -> {
189+
thread.sendMessage(config.getStaffRole().getAsMention())
178190
.setComponents(setComponents(targetId, thread.getIdLong()))
179-
.queue()
191+
.queue();
192+
onSuccess.accept(thread);
193+
}
180194
);
181195
}
182196

197+
198+
199+
200+
183201
private EmbedBuilder buildReportEmbed(User reported, User reportedBy, String reason, Channel channel) {
184202
return new EmbedBuilder()
185203
.setAuthor(reported.getAsTag(), null, reported.getEffectiveAvatarUrl())

src/main/java/net/javadiscord/javabot/systems/qotw/submissions/SubmissionManager.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,22 @@ public WebhookMessageCreateAction<?> handleSubmission(@NotNull ButtonInteraction
6363
config.getSubmissionChannel().createThreadChannel(
6464
String.format(THREAD_NAME, questionNumber, member.getEffectiveName()), true).queue(
6565
thread -> {
66+
thread.addThreadMember(member).queue();
6667
thread.getManager().setInvitable(false).setAutoArchiveDuration(ThreadChannel.AutoArchiveDuration.TIME_1_WEEK).queue();
67-
try{
68+
try {
6869
QOTWSubmission submission = new QOTWSubmission();
6970
submission.setThreadId(thread.getIdLong());
7071
submission.setQuestionNumber(questionNumber);
7172
submission.setGuildId(thread.getGuild().getIdLong());
7273
submission.setAuthorId(member.getIdLong());
7374
qotwSubmissionRepository.insert(submission);
74-
asyncPool.execute(()->{
75+
asyncPool.execute(() -> {
7576
Optional<QOTWQuestion> questionOptional = questionQueueRepository.findByQuestionNumber(questionNumber);
7677
if (questionOptional.isPresent()) {
7778
thread.sendMessage(member.getAsMention())
7879
.setEmbeds(buildSubmissionThreadEmbed(event.getUser(), questionOptional.get(), config))
7980
.setComponents(ActionRow.of(Button.danger("qotw-submission:delete", "Delete Submission")))
80-
.queue();
81+
.queue(s -> {}, err -> ExceptionLogger.capture(err, getClass().getSimpleName()));
8182
} else {
8283
thread.sendMessage("Could not retrieve current QOTW Question. Please contact an Administrator if you think that this is a mistake.")
8384
.queue();

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import net.dv8tion.jda.api.entities.Message;
1010
import net.dv8tion.jda.api.entities.Message.Attachment;
1111
import net.dv8tion.jda.api.entities.Webhook;
12-
import net.dv8tion.jda.api.entities.channel.middleman.StandardGuildMessageChannel;
12+
import net.dv8tion.jda.api.entities.channel.attribute.IWebhookContainer;
1313
import org.jetbrains.annotations.NotNull;
1414

1515
import java.util.List;
@@ -32,9 +32,8 @@ private WebhookUtil() {
3232
* @param callback an action that is executed once a webhook is
3333
* found/created
3434
*/
35-
public static void ensureWebhookExists(StandardGuildMessageChannel channel, Consumer<? super Webhook> callback) {
36-
ensureWebhookExists(channel, callback, err -> {
37-
});
35+
public static void ensureWebhookExists(@NotNull IWebhookContainer channel, @NotNull Consumer<? super Webhook> callback) {
36+
ensureWebhookExists(channel, callback, ExceptionLogger::capture);
3837
}
3938

4039
/**
@@ -47,7 +46,7 @@ public static void ensureWebhookExists(StandardGuildMessageChannel channel, Cons
4746
* @param failureCallback an action that is executed if the webhook
4847
* lookup/creation failed
4948
*/
50-
public static void ensureWebhookExists(@NotNull StandardGuildMessageChannel channel, Consumer<? super Webhook> callback, Consumer<? super Throwable> failureCallback) {
49+
public static void ensureWebhookExists(@NotNull IWebhookContainer channel, @NotNull Consumer<? super Webhook> callback, @NotNull Consumer<? super Throwable> failureCallback) {
5150

5251
channel.retrieveWebhooks().queue(webhooks -> {
5352
Optional<Webhook> hook = webhooks.stream()

0 commit comments

Comments
 (0)