Skip to content

Commit

Permalink
feat: #14 スレッドをクローズするときに理由を入力するフォームを開く
Browse files Browse the repository at this point in the history
  • Loading branch information
book000 committed Oct 7, 2022
1 parent 05e2919 commit 0ce7c97
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 17 deletions.
1 change: 1 addition & 0 deletions src/main/java/com/jaoafa/bugreporter/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public static void main(String[] args) {
new BugMenuSubmitEvent(),
new ChangeTitleSubmitEvent(),
new SendToIssueEvent(),
new CloseReportEvent(),
new ThreadButtonEvent())
.build()
.awaitReady();
Expand Down
59 changes: 59 additions & 0 deletions src/main/java/com/jaoafa/bugreporter/event/CloseReportEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.jaoafa.bugreporter.event;

import com.jaoafa.bugreporter.Main;
import com.jaoafa.bugreporter.lib.BugManager;
import com.jaoafa.bugreporter.lib.GitHub;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;

import javax.annotation.Nonnull;
import java.awt.*;
import java.util.Objects;
import java.util.regex.Matcher;

public class CloseReportEvent extends ListenerAdapter {
@Override
public void onModalInteraction(@Nonnull ModalInteractionEvent event) {
if (event.getGuild() == null || event.getGuild().getIdLong() != Main.getConfig().getGuildId()) {
event.reply("このサーバでは利用できません。").setEphemeral(true).queue();
return;
}
if (!event.getModalId().equals("close-report")) {
return;
}
String reason = Objects.requireNonNull(event.getValue("close-reason")).getAsString().trim();

User user = event.getUser();
ThreadChannel thread = BugManager.closeReportMap.get(user.getIdLong());
if (thread == null) {
event.reply("対象スレッドを見つけられませんでした。もう一度お試しください。").queue();
return;
}
BugManager.closeReportMap.remove(user.getIdLong());

event.deferEdit().queue();

thread.sendMessageEmbeds(new EmbedBuilder()
.setTitle("報告がクローズされました")
.setDescription("`%s` のアクションにより、報告をクローズしました。".formatted(user.getAsTag()))
.addField("理由", reason, false)
.setFooter("スレッドの管理権限のあるユーザーはメッセージ送信などでスレッドを再開できますが、原則再開させずに新規で報告を立ち上げてください。")
.setColor(Color.RED)
.build()).complete();
thread.getManager().setArchived(true).setLocked(true).queue();

Matcher matcher = BugManager.ISSUE_PATTERN.matcher(thread.getName());
if (!matcher.find()) {
return;
}
int issueNumber = Integer.parseInt(matcher.group(1));
GitHub.createIssueComment(BugManager.REPOSITORY,
issueNumber,
"`%s` がスレッドをクローズしたため、本 issue もクローズします。\n\n## 理由\n\n%s".formatted(user.getAsTag(), reason));
GitHub.updateIssue(BugManager.REPOSITORY, issueNumber, GitHub.UpdateType.STATE, "closed");

}
}
28 changes: 12 additions & 16 deletions src/main/java/com/jaoafa/bugreporter/event/ThreadButtonEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
import com.jaoafa.bugreporter.Main;
import com.jaoafa.bugreporter.lib.BugManager;
import com.jaoafa.bugreporter.lib.Config;
import com.jaoafa.bugreporter.lib.GitHub;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
Expand All @@ -18,7 +16,6 @@
import org.jetbrains.annotations.NotNull;

import java.util.Objects;
import java.util.regex.Matcher;

public class ThreadButtonEvent extends ListenerAdapter {

Expand Down Expand Up @@ -120,20 +117,19 @@ void actionCloseReport(ButtonInteractionEvent event, ThreadChannel thread) {
event.reply("あなたにはこのアクションを実行する権限がありません。").setEphemeral(true).queue();
return;
}
event.deferEdit().queue();

User user = event.getUser();
thread.sendMessage("`%s` のアクションにより、報告をクローズします".formatted(user.getAsTag())).complete();
thread.getManager().setArchived(true).setLocked(true).queue();
TextInput messageRow = TextInput
.create("close-reason", "報告を閉じる理由", TextInputStyle.PARAGRAPH)
.setPlaceholder("報告を閉じる理由を入力してください(XXXXXで修正した・対応の必要がない など)")
.setMinLength(1)
.setMaxLength(2000)
.setRequired(true)
.build();

Matcher matcher = BugManager.ISSUE_PATTERN.matcher(thread.getName());
if (!matcher.find()) {
return;
}
int issueNumber = Integer.parseInt(matcher.group(1));
GitHub.createIssueComment(BugManager.REPOSITORY,
issueNumber,
"`%s` がスレッドをクローズしたため、本 issue もクローズします。".formatted(user.getAsTag()));
GitHub.updateIssue(BugManager.REPOSITORY, issueNumber, GitHub.UpdateType.STATE, "closed");
BugManager.closeReportMap.put(event.getUser().getIdLong(), thread);

event
.replyModal(Modal.create("close-report", "報告をクローズ").addActionRows(ActionRow.of(messageRow)).build())
.queue();
}
}
3 changes: 2 additions & 1 deletion src/main/java/com/jaoafa/bugreporter/lib/BugManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,10 @@ public class BugManager {
public static Map<Long, Message> messageMap = new HashMap<>();
public static Map<Long, ThreadChannel> changeTitleMap = new HashMap<>();
public static Map<Long, ThreadChannel> sendToIssueMap = new HashMap<>();
public static Map<Long, ThreadChannel> closeReportMap = new HashMap<>();
public static final Pattern ISSUE_PATTERN = Pattern.compile("^\\*(\\d+) ");
public static final String TARGET_REACTION = "\uD83D\uDC1B"; // :bug:
public static final String REPOSITORY = "book000/playground";
public static final String REPOSITORY = "jaoafa/jao-Minecraft-Server";
private final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
private final Path REPORTS_PATH;

Expand Down

0 comments on commit 0ce7c97

Please sign in to comment.