Skip to content

Commit 265d6a2

Browse files
authored
handling error when member left guild (#986)
* handling error when member left guild * taking carre of debugging leftovers * sonar fix * refactor loggers, archiving thread incase of failure * fallback archiving in same queue * archive logic in supplier * consumer only logs, so better name * refactor error handling in rest chain * refactor if check for clarity * extra line for readabilty * sonar fix * handling error in pipeline * cleaning up debugging leftovers * renaming from logger -> LOGGER * log level changed to info with better message * logging all the errors, instead of just ErrorResponseException type * refactoring * replacing Function type with Supplier for sendEmbedWithoutMention * changing variable for more clarity on fetched members * reverting back LOGGER->logger based on project style * removing unnecessary error handling
1 parent 0b403ff commit 265d6a2

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadAutoArchiver.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import net.dv8tion.jda.api.EmbedBuilder;
44
import net.dv8tion.jda.api.JDA;
55
import net.dv8tion.jda.api.entities.Guild;
6+
import net.dv8tion.jda.api.entities.Member;
7+
import net.dv8tion.jda.api.entities.Message;
68
import net.dv8tion.jda.api.entities.MessageEmbed;
79
import net.dv8tion.jda.api.entities.channel.concrete.ForumChannel;
810
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
911
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
10-
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
12+
import net.dv8tion.jda.api.requests.RestAction;
13+
import net.dv8tion.jda.api.utils.Result;
1114
import net.dv8tion.jda.api.utils.TimeUtil;
1215
import org.slf4j.Logger;
1316
import org.slf4j.LoggerFactory;
@@ -19,7 +22,8 @@
1922
import java.util.List;
2023
import java.util.Optional;
2124
import java.util.concurrent.TimeUnit;
22-
import java.util.function.Consumer;
25+
import java.util.function.Function;
26+
import java.util.function.Supplier;
2327

2428
/**
2529
* Routine, which periodically checks all help threads and archives them if there has not been any
@@ -122,18 +126,27 @@ private static boolean shouldBeArchived(MessageChannel channel, Instant archiveA
122126
}
123127

124128
private void handleArchiveFlow(ThreadChannel threadChannel, MessageEmbed embed) {
125-
Consumer<Throwable> handleFailure = error -> {
126-
if (error instanceof ErrorResponseException) {
127-
logger.warn("Unknown error occurred during help thread auto archive routine",
128-
error);
129-
}
130-
};
129+
130+
Function<Result<Member>, RestAction<Message>> sendEmbedWithMention =
131+
member -> threadChannel.sendMessage(member.get().getAsMention()).addEmbeds(embed);
132+
133+
Supplier<RestAction<Message>> sendEmbedWithoutMention =
134+
() -> threadChannel.sendMessageEmbeds(embed);
131135

132136
threadChannel.getGuild()
133137
.retrieveMemberById(threadChannel.getOwnerIdLong())
134-
.flatMap(author -> threadChannel.sendMessage(author.getAsMention()).addEmbeds(embed))
138+
.mapToResult()
139+
.flatMap(foundMember -> {
140+
if (foundMember.isSuccess()) {
141+
return sendEmbedWithMention.apply(foundMember);
142+
}
143+
logger.info(
144+
"Owner of thread with id: {} left the server, sending embed without mention",
145+
threadChannel.getId(), foundMember.getFailure());
146+
147+
return sendEmbedWithoutMention.get();
148+
})
135149
.flatMap(any -> threadChannel.getManager().setArchived(true))
136-
.queue(any -> {
137-
}, handleFailure);
150+
.queue();
138151
}
139152
}

0 commit comments

Comments
 (0)