Skip to content

Commit 28bb131

Browse files
authored
Merge pull request #441 from danthe1st/help-ping-block-closed
block marking help notification of closed posts as "still needs help"
2 parents 3a75519 + 1a5ff1f commit 28bb131

File tree

1 file changed

+32
-9
lines changed

1 file changed

+32
-9
lines changed

src/main/java/net/javadiscord/javabot/systems/help/commands/HelpPingSubcommand.java

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public void execute(@NotNull SlashCommandInteractionEvent event) {
103103
TextChannel notifChannel = config.getHelpConfig().getHelpNotificationChannel();
104104

105105
notifChannel.sendMessageEmbeds(createHelpEmbed(comment, post, member))
106-
.addActionRow(createAcknowledgementButton())
106+
.addActionRow(createAcknowledgementButton(post.getId()))
107107
.queue();
108108
event.reply("""
109109
Successfully requested help.
@@ -160,12 +160,12 @@ private void appendComment(EmbedBuilder eb, String comment) {
160160
}
161161
}
162162

163-
private Button createAcknowledgementButton() {
164-
return Button.of(ButtonStyle.SECONDARY, ComponentIdBuilder.build("help-ping", "acknowledge"), "Mark as acknowledged");
163+
private Button createAcknowledgementButton(String postId) {
164+
return Button.of(ButtonStyle.SECONDARY, ComponentIdBuilder.build("help-ping", "acknowledge", postId), "Mark as acknowledged");
165165
}
166166

167-
private Button createUndoAcknowledgementButton() {
168-
return Button.of(ButtonStyle.SECONDARY, ComponentIdBuilder.build("help-ping", "unacknowledge"), "Mark as unacknowledged");
167+
private Button createUndoAcknowledgementButton(String postId) {
168+
return Button.of(ButtonStyle.SECONDARY, ComponentIdBuilder.build("help-ping", "unacknowledge", postId), "Mark as unacknowledged");
169169
}
170170

171171
/**
@@ -221,17 +221,40 @@ private void cleanTimeoutCache() {
221221
@Override
222222
public void handleButton(ButtonInteractionEvent event, Button button) {
223223
String[] id = ComponentIdBuilder.split(event.getComponentId());
224+
String postId = "";
225+
if (id.length > 2) {
226+
postId = id[2];
227+
}
224228
switch(id[1]) {
225229
case "acknowledge" ->
226-
acknowledgeChangeAction(event, true);
230+
acknowledgeChangeAction(event, postId, true);
227231
case "unacknowledge" ->
228-
acknowledgeChangeAction(event, false);
232+
handleUnacknowledge(event, postId);
229233
default -> event.reply("Unknown button").setEphemeral(true).queue();
230234
}
235+
}
236+
237+
private void handleUnacknowledge(ButtonInteractionEvent event, String postId) {
238+
if (postId.isEmpty() || isPostOpen(event.getGuild(), postId)) {
239+
acknowledgeChangeAction(event, postId, false);
240+
} else {
241+
Responses.error(event, """
242+
This post is closed or dormant.
243+
If this post is dormant, you can mark it as active by sending a message in the post.
244+
If it is closed and you still need help, please create a new post.
245+
""").queue();
246+
}
247+
}
231248

249+
private boolean isPostOpen(Guild guild, String postId) {
250+
ThreadChannel post = guild.getThreadChannelById(postId);
251+
return post != null &&
252+
post.getParentChannel().getIdLong() == botConfig.get(guild).getHelpConfig().getHelpForumChannelId() &&
253+
!post.isArchived() &&
254+
!post.isLocked();
232255
}
233256

234-
private void acknowledgeChangeAction(ButtonInteractionEvent event, boolean acknowledged) {
257+
private void acknowledgeChangeAction(ButtonInteractionEvent event, String postId, boolean acknowledged) {
235258
event.editMessageEmbeds(
236259
event.getMessage()
237260
.getEmbeds()
@@ -243,7 +266,7 @@ private void acknowledgeChangeAction(ButtonInteractionEvent event, boolean ackno
243266
.map(this::removeOldField)
244267
.map(EmbedBuilder::build)
245268
.toList())
246-
.setActionRow(acknowledged?createUndoAcknowledgementButton():createAcknowledgementButton())
269+
.setActionRow(acknowledged?createUndoAcknowledgementButton(postId):createAcknowledgementButton(postId))
247270
.queue();
248271
}
249272

0 commit comments

Comments
 (0)