|
30 | 30 | import xyz.dynxsty.dih4jda.util.ComponentIdBuilder; |
31 | 31 |
|
32 | 32 | import java.util.*; |
| 33 | +import java.util.stream.Collectors; |
33 | 34 | import java.util.stream.Stream; |
34 | 35 |
|
35 | 36 | /** |
@@ -79,6 +80,7 @@ protected boolean removeEldestEntry(Map.Entry<Long, Long> eldest) { |
79 | 80 | return System.currentTimeMillis() > eldest.getValue() || size() >= 32; |
80 | 81 | } |
81 | 82 | }; |
| 83 | + private final AnswerOverflowService answerOverflowService; |
82 | 84 |
|
83 | 85 | @Override |
84 | 86 | public void onMessageReceived(@NotNull MessageReceivedEvent event) { |
@@ -121,12 +123,8 @@ public void onMessageReceived(@NotNull MessageReceivedEvent event) { |
121 | 123 | return; |
122 | 124 | } |
123 | 125 | // cache messages |
124 | | - List<Message> messages = new ArrayList<>(); |
125 | | - messages.add(event.getMessage()); |
126 | | - if (HELP_POST_MESSAGES.containsKey(post.getIdLong())) { |
127 | | - messages.addAll(HELP_POST_MESSAGES.get(post.getIdLong())); |
128 | | - } |
129 | | - HELP_POST_MESSAGES.put(post.getIdLong(), messages); |
| 126 | + HELP_POST_MESSAGES.computeIfAbsent(post.getIdLong(), _ -> new ArrayList<>()) |
| 127 | + .add(event.getMessage()); |
130 | 128 | // suggest to close post on "problem solved"-messages |
131 | 129 | replyCloseSuggestionIfPatternMatches(event.getMessage()); |
132 | 130 | } |
@@ -291,17 +289,34 @@ private void handleThanksCloseButton(@NotNull ButtonInteractionEvent event, Help |
291 | 289 | event.getMessage().delete().queue(s -> { |
292 | 290 | experienceService.addMessageBasedHelpXP(post, true); |
293 | 291 | // thank all helpers |
294 | | - getButtonStream(event.getMessage()) |
295 | | - .filter(b -> b.getCustomId() != null) |
296 | | - .filter(b -> b.isDisabled() || (b.getCustomId().equals(additionalButtonId))) |
297 | | - .forEach(b -> manager.thankHelper( |
298 | | - event.getGuild(), |
299 | | - post, |
300 | | - Long.parseLong(ComponentIdBuilder.split(b.getCustomId())[2]) |
301 | | - )); |
| 292 | + |
| 293 | + Set<Long> helpersToThank = getButtonStream(event.getMessage()) |
| 294 | + .filter(b -> b.getCustomId() != null) |
| 295 | + .filter(b -> b.isDisabled() || (b.getCustomId().equals(additionalButtonId))) |
| 296 | + .map(b -> Long.parseLong(ComponentIdBuilder.split(b.getCustomId())[2])) |
| 297 | + .collect(Collectors.toSet()); |
| 298 | + |
| 299 | + for (Long helperId : helpersToThank) { |
| 300 | + manager.thankHelper(event.getGuild(), post, helperId); |
| 301 | + } |
| 302 | + markAnswer(post, helpersToThank); |
| 303 | + HELP_POST_MESSAGES.remove(post.getIdLong()); |
302 | 304 | }); |
303 | 305 | } |
304 | 306 |
|
| 307 | + private void markAnswer(ThreadChannel post, Set<Long> helpers) { |
| 308 | + List<Message> messages = HELP_POST_MESSAGES.get(post.getIdLong()); |
| 309 | + if (messages == null) { |
| 310 | + return; |
| 311 | + } |
| 312 | + for (Message msg : messages.reversed()) { |
| 313 | + if (helpers.contains(msg.getAuthor().getIdLong())) { |
| 314 | + answerOverflowService.markAnswer(post.getIdLong(), msg.getIdLong()); |
| 315 | + return; |
| 316 | + } |
| 317 | + } |
| 318 | + } |
| 319 | + |
305 | 320 | private void handleReplyGuidelines(@NotNull IReplyCallback callback, @NotNull ForumChannel channel) { |
306 | 321 | callback.replyEmbeds(new EmbedBuilder().setTitle("Help Guidelines") |
307 | 322 | .setDescription(channel.getTopic()) |
|
0 commit comments