Skip to content

Commit 90a80c3

Browse files
authored
Added defer reply to mod commands (#750)
1 parent 65afbdb commit 90a80c3

File tree

5 files changed

+29
-20
lines changed

5 files changed

+29
-20
lines changed

application/src/main/java/org/togetherjava/tjbot/commands/moderation/BanCommand.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,14 @@ public BanCommand(ModerationActionsStore actionsStore) {
7272
this.actionsStore = Objects.requireNonNull(actionsStore);
7373
}
7474

75-
private static RestAction<InteractionHook> handleAlreadyBanned(Guild.Ban ban,
76-
IReplyCallback event) {
75+
private static RestAction<Message> handleAlreadyBanned(Guild.Ban ban, InteractionHook hook) {
7776
String reason = ban.getReason();
7877
String reasonText =
7978
reason == null || reason.isBlank() ? "" : " (reason: %s)".formatted(reason);
8079

8180
String message = "The user '%s' is already banned%s.".formatted(ban.getUser().getAsTag(),
8281
reasonText);
83-
return event.reply(message).setEphemeral(true);
82+
return hook.sendMessage(message).setEphemeral(true);
8483
}
8584

8685
private static RestAction<Boolean> sendDm(ISnowflake target,
@@ -115,8 +114,8 @@ private static MessageEmbed sendFeedback(boolean hasSentDm, User target, Member
115114
durationText + dmNoticeText, reason);
116115
}
117116

118-
private static Optional<RestAction<InteractionHook>> handleNotAlreadyBannedResponse(
119-
Throwable alreadyBannedFailure, IReplyCallback event, Guild guild, User target) {
117+
private static Optional<RestAction<Message>> handleNotAlreadyBannedResponse(
118+
Throwable alreadyBannedFailure, InteractionHook hook, Guild guild, User target) {
120119
if (alreadyBannedFailure instanceof ErrorResponseException errorResponseException) {
121120
if (errorResponseException.getErrorResponse() == ErrorResponse.UNKNOWN_BAN) {
122121
return Optional.empty();
@@ -125,7 +124,7 @@ private static Optional<RestAction<InteractionHook>> handleNotAlreadyBannedRespo
125124
if (errorResponseException.getErrorResponse() == ErrorResponse.MISSING_PERMISSIONS) {
126125
logger.error("The bot does not have the '{}' permission on the guild '{}'.",
127126
Permission.BAN_MEMBERS, guild.getName());
128-
return Optional.of(event.reply(
127+
return Optional.of(hook.sendMessage(
129128
"I can not ban users in this guild since I do not have the %s permission."
130129
.formatted(Permission.BAN_MEMBERS))
131130
.setEphemeral(true));
@@ -134,18 +133,18 @@ private static Optional<RestAction<InteractionHook>> handleNotAlreadyBannedRespo
134133
logger.warn(LogMarkers.SENSITIVE,
135134
"Something unexpected went wrong while trying to ban the user '{}'.",
136135
target.getAsTag(), alreadyBannedFailure);
137-
return Optional.of(event.reply("Failed to ban the user due to an unexpected problem.")
136+
return Optional.of(hook.sendMessage("Failed to ban the user due to an unexpected problem.")
138137
.setEphemeral(true));
139138
}
140139

141-
private RestAction<InteractionHook> banUserFlow(User target, Member author,
140+
private RestAction<Message> banUserFlow(User target, Member author,
142141
@Nullable ModerationUtils.TemporaryData temporaryData, String reason,
143142
int deleteHistoryDays, Guild guild, SlashCommandInteractionEvent event) {
144143
return sendDm(target, temporaryData, reason, guild, event)
145144
.flatMap(hasSentDm -> banUser(target, author, temporaryData, reason, deleteHistoryDays,
146145
guild).map(banResult -> hasSentDm))
147146
.map(hasSentDm -> sendFeedback(hasSentDm, target, author, temporaryData, reason))
148-
.flatMap(event::replyEmbeds);
147+
.flatMap(event.getHook()::sendMessageEmbeds);
149148
}
150149

151150
private AuditableRestAction<Void> banUser(User target, Member author,
@@ -208,14 +207,16 @@ public void onSlashCommand(SlashCommandInteractionEvent event) {
208207
int deleteHistoryDays = Math
209208
.toIntExact(Objects.requireNonNull(event.getOption(DELETE_HISTORY_OPTION)).getAsLong());
210209

210+
event.deferReply().queue();
211+
InteractionHook hook = event.getHook();
211212
// Ban the user, but only if not already banned
212213
guild.retrieveBan(target).mapToResult().flatMap(alreadyBanned -> {
213214
if (alreadyBanned.isSuccess()) {
214-
return handleAlreadyBanned(alreadyBanned.get(), event);
215+
return handleAlreadyBanned(alreadyBanned.get(), hook);
215216
}
216217

217218
return handleNotAlreadyBannedResponse(
218-
Objects.requireNonNull(alreadyBanned.getFailure()), event, guild, target)
219+
Objects.requireNonNull(alreadyBanned.getFailure()), hook, guild, target)
219220
.orElseGet(() -> banUserFlow(target, author, temporaryData.orElse(null),
220221
reason, deleteHistoryDays, guild, event));
221222
}).queue();

application/src/main/java/org/togetherjava/tjbot/commands/moderation/KickCommand.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,13 @@ private static void handleAbsentTarget(IReplyCallback event) {
6060

6161
private void kickUserFlow(Member target, Member author, String reason, Guild guild,
6262
SlashCommandInteractionEvent event) {
63+
event.deferReply().queue();
64+
6365
sendDm(target, reason, guild, event)
6466
.flatMap(hasSentDm -> kickUser(target, author, reason, guild)
6567
.map(kickResult -> hasSentDm))
6668
.map(hasSentDm -> sendFeedback(hasSentDm, target, author, reason))
67-
.flatMap(event::replyEmbeds)
69+
.flatMap(event.getHook()::sendMessageEmbeds)
6870
.queue();
6971
}
7072

application/src/main/java/org/togetherjava/tjbot/commands/moderation/MuteCommand.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,13 @@ private AuditableRestAction<Void> muteUser(Member target, Member author,
115115
private void muteUserFlow(Member target, Member author,
116116
@Nullable ModerationUtils.TemporaryData temporaryData, String reason, Guild guild,
117117
SlashCommandInteractionEvent event) {
118+
event.deferReply().queue();
119+
118120
sendDm(target, temporaryData, reason, guild, event)
119121
.flatMap(hasSentDm -> muteUser(target, author, temporaryData, reason, guild)
120122
.map(result -> hasSentDm))
121123
.map(hasSentDm -> sendFeedback(hasSentDm, target, author, temporaryData, reason))
122-
.flatMap(event::replyEmbeds)
124+
.flatMap(event.getHook()::sendMessageEmbeds)
123125
.queue();
124126
}
125127

application/src/main/java/org/togetherjava/tjbot/commands/moderation/QuarantineCommand.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,13 @@ private AuditableRestAction<Void> quarantineUser(Member target, Member author, S
100100

101101
private void quarantineUserFlow(Member target, Member author, String reason, Guild guild,
102102
SlashCommandInteractionEvent event) {
103+
event.deferReply().queue();
104+
103105
sendDm(target, reason, guild, event)
104106
.flatMap(hasSentDm -> quarantineUser(target, author, reason, guild)
105107
.map(result -> hasSentDm))
106108
.map(hasSentDm -> sendFeedback(hasSentDm, target, author, reason))
107-
.flatMap(event::replyEmbeds)
109+
.flatMap(event.getHook()::sendMessageEmbeds)
108110
.queue();
109111
}
110112

application/src/main/java/org/togetherjava/tjbot/commands/moderation/WarnCommand.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import net.dv8tion.jda.api.entities.*;
44
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
5-
import net.dv8tion.jda.api.interactions.InteractionHook;
65
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
76
import net.dv8tion.jda.api.interactions.commands.OptionType;
87
import net.dv8tion.jda.api.requests.RestAction;
@@ -46,14 +45,17 @@ public WarnCommand(ModerationActionsStore actionsStore) {
4645
this.actionsStore = Objects.requireNonNull(actionsStore);
4746
}
4847

49-
private RestAction<InteractionHook> warnUserFlow(User target, Member author, String reason,
50-
Guild guild, SlashCommandInteractionEvent event) {
51-
return dmUser(target, reason, guild, event).map(hasSentDm -> {
48+
private void warnUserFlow(User target, Member author, String reason, Guild guild,
49+
SlashCommandInteractionEvent event) {
50+
event.deferReply().queue();
51+
52+
dmUser(target, reason, guild, event).map(hasSentDm -> {
5253
warnUser(target, author, reason, guild);
5354
return hasSentDm;
5455
})
5556
.map(hasSentDm -> sendFeedback(hasSentDm, target, author, reason))
56-
.flatMap(event::replyEmbeds);
57+
.flatMap(event.getHook()::sendMessageEmbeds)
58+
.queue();
5759
}
5860

5961
private static RestAction<Boolean> dmUser(ISnowflake target, String reason, Guild guild,
@@ -99,7 +101,7 @@ public void onSlashCommand(SlashCommandInteractionEvent event) {
99101
return;
100102
}
101103

102-
warnUserFlow(targetOption.getAsUser(), author, reason, guild, event).queue();
104+
warnUserFlow(targetOption.getAsUser(), author, reason, guild, event);
103105
}
104106

105107
private boolean handleChecks(Member bot, Member author, @Nullable Member target, String reason,

0 commit comments

Comments
 (0)