Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,10 @@ public void onMessageContext(MessageContextInteractionEvent event) {

@Override
public void onModalSubmitted(ModalInteractionEvent event, List<String> args) {
event.deferEdit().queue();

String authorId = args.get(0);
String messageId = args.get(1);
String channelId = args.get(2);
ForumChannel helperForum = getHelperForum(event.getJDA());
TextChannel sourceChannel = event.getChannel().asTextChannel();

// Has been handled if original message was deleted by now.
// Deleted messages cause retrieveMessageById to fail.
Expand All @@ -142,7 +139,7 @@ public void onModalSubmitted(ModalInteractionEvent event, List<String> args) {
Consumer<Throwable> handledAction = failure -> {
if (failure instanceof ErrorResponseException errorResponseException
&& errorResponseException.getErrorResponse() == ErrorResponse.UNKNOWN_MESSAGE) {
alreadyHandled(sourceChannel, helperForum);
alreadyHandled(event, helperForum);
return;
}
logger.warn("Unknown error occurred on modal submission during question transfer.",
Expand All @@ -154,20 +151,24 @@ public void onModalSubmitted(ModalInteractionEvent event, List<String> args) {

private void transferFlow(ModalInteractionEvent event, String channelId, String authorId,
String messageId) {

event.getJDA()
.retrieveUserById(authorId)
.flatMap(fetchedUser -> createForumPost(event, fetchedUser))
.flatMap(createdforumPost -> dmUser(event.getChannel(), createdforumPost,
event.getGuild()))
.flatMap(createdforumPost -> dmUser(event.getChannel(), createdforumPost, event
.getGuild())
.and(event
.reply("Transferred to "
+ createdforumPost.forumPost().getThreadChannel().getAsMention())
.setEphemeral(true)))
.flatMap(dmSent -> deleteOriginalMessage(event.getJDA(), channelId, messageId))
.queue();
}

private void alreadyHandled(TextChannel sourceChannel, ForumChannel helperForum) {
sourceChannel.sendMessage(
private void alreadyHandled(ModalInteractionEvent event, ForumChannel helperForum) {
event.reply(
"It appears that someone else has already transferred this question. Kindly see %s for details."
.formatted(helperForum.getAsMention()))
.setEphemeral(true)
.queue();
}

Expand All @@ -193,7 +194,6 @@ private static boolean isTitleValid(CharSequence title) {
}

private RestAction<ForumPost> createForumPost(ModalInteractionEvent event, User originalUser) {

String originalMessage = event.getValue(MODAL_INPUT_ID).getAsString();

MessageEmbed embedForPost = makeEmbedForPost(originalUser, originalMessage);
Expand All @@ -217,7 +217,7 @@ private RestAction<ForumPost> createForumPost(ModalInteractionEvent event, User

return questionsForum.createForumPost(forumTitle, forumMessage)
.setTags(ForumTagSnowflake.fromId(tag.getId()))
.map(createdPost -> new ForumPost(originalUser, createdPost.getMessage()));
.map(createdPost -> new ForumPost(createdPost, originalUser));
}

private RestAction<Message> dmUser(MessageChannelUnion sourceChannel, ForumPost forumPost,
Expand All @@ -234,10 +234,10 @@ private RestAction<Message> dmUser(MessageChannelUnion sourceChannel, ForumPost
String jumpUrlSuffix = " ";

String messageForDm = messageTemplate.formatted("", " on " + guild.getName(),
forumPost.message.getJumpUrl() + jumpUrlSuffix);
forumPost.forumPost().getMessage().getJumpUrl() + jumpUrlSuffix);

String messageOnDmFailure = messageTemplate.formatted(" " + forumPost.author.getAsMention(),
"", forumPost.message.getJumpUrl() + jumpUrlSuffix);
"", forumPost.forumPost().getMessage().getJumpUrl() + jumpUrlSuffix);

return forumPost.author.openPrivateChannel()
.flatMap(channel -> channel.sendMessage(messageForDm))
Expand Down Expand Up @@ -275,7 +275,8 @@ private MessageEmbed makeEmbedForPost(User originalUser, String originalMessage)
.build();
}

private record ForumPost(User author, Message message) {
private record ForumPost(net.dv8tion.jda.api.entities.channel.forums.ForumPost forumPost,
User author) {
}

private boolean isBotMessageTransfer(User author) {
Expand Down