Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.internal.requests.CompletedRestAction;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.togetherjava.tjbot.commands.MessageReceiverAdapter;
Expand All @@ -16,6 +18,7 @@
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
Expand All @@ -33,6 +36,9 @@ public final class HelpThreadOverviewUpdater extends MessageReceiverAdapter impl

private static final String STATUS_TITLE = "## __**Active questions**__ ##";
private static final int OVERVIEW_QUESTION_LIMIT = 150;
private static final AtomicInteger FIND_STATUS_MESSAGE_CONSECUTIVE_FAILURES =
new AtomicInteger(0);
private static final int FIND_STATUS_MESSAGE_FAILURE_THRESHOLD = 3;

private final HelpSystemHelper helper;
private final List<String> allCategories;
Expand Down Expand Up @@ -124,15 +130,10 @@ private void updateOverview(@NotNull TextChannel overviewChannel) {
.setContent(STATUS_TITLE + "\n\n" + createDescription(activeThreads))
.build();

getStatusMessage(overviewChannel).flatMap(maybeStatusMessage -> {
logger.debug("Sending the updated question overview");
if (maybeStatusMessage.isEmpty()) {
return overviewChannel.sendMessage(message);
}

String statusMessageId = maybeStatusMessage.orElseThrow().getId();
return overviewChannel.editMessageById(statusMessageId, message);
}).queue();
getStatusMessage(overviewChannel)
.flatMap(maybeStatusMessage -> sendUpdatedOverview(maybeStatusMessage.orElse(null),
message, overviewChannel))
.queue();
}

private @NotNull String createDescription(@NotNull Collection<ThreadChannel> activeThreads) {
Expand Down Expand Up @@ -178,6 +179,30 @@ private static boolean isStatusMessage(@NotNull Message message) {
return content.startsWith(STATUS_TITLE);
}

private @NotNull RestAction<Message> sendUpdatedOverview(@Nullable Message statusMessage,
@NotNull Message updatedStatusMessage, @NotNull MessageChannel overviewChannel) {
logger.debug("Sending the updated question overview");
if (statusMessage == null) {
int currentFailures = FIND_STATUS_MESSAGE_CONSECUTIVE_FAILURES.incrementAndGet();
if (currentFailures >= FIND_STATUS_MESSAGE_FAILURE_THRESHOLD) {
logger.warn(
"Failed to locate the question overview too often ({} times), sending a fresh message instead.",
currentFailures);
FIND_STATUS_MESSAGE_CONSECUTIVE_FAILURES.set(0);
return overviewChannel.sendMessage(updatedStatusMessage);
}

logger.info(
"Failed to locate the question overview ({} times), trying again next time.",
currentFailures);
return new CompletedRestAction<>(overviewChannel.getJDA(), null, null);
}

FIND_STATUS_MESSAGE_CONSECUTIVE_FAILURES.set(0);
String statusMessageId = statusMessage.getId();
return overviewChannel.editMessageById(statusMessageId, updatedStatusMessage);
}

private enum ChannelType {
OVERVIEW,
STAGING
Expand Down