33import com .github .benmanes .caffeine .cache .Cache ;
44import com .github .benmanes .caffeine .cache .Caffeine ;
55import net .dv8tion .jda .api .EmbedBuilder ;
6- import net .dv8tion .jda .api .entities .Guild ;
7- import net .dv8tion .jda .api .entities .Message ;
8- import net .dv8tion .jda .api .entities .MessageEmbed ;
9- import net .dv8tion .jda .api .entities .Role ;
6+ import net .dv8tion .jda .api .entities .*;
107import net .dv8tion .jda .api .entities .channel .concrete .TextChannel ;
118import net .dv8tion .jda .api .events .interaction .ModalInteractionEvent ;
129import net .dv8tion .jda .api .events .interaction .command .MessageContextInteractionEvent ;
1310import net .dv8tion .jda .api .interactions .InteractionHook ;
1411import net .dv8tion .jda .api .interactions .commands .build .Commands ;
1512import net .dv8tion .jda .api .interactions .components .Modal ;
13+ import net .dv8tion .jda .api .interactions .components .buttons .Button ;
1614import net .dv8tion .jda .api .interactions .components .text .TextInput ;
1715import net .dv8tion .jda .api .interactions .components .text .TextInputStyle ;
1816import net .dv8tion .jda .api .requests .restaction .MessageCreateAction ;
2321import org .togetherjava .tjbot .commands .BotCommandAdapter ;
2422import org .togetherjava .tjbot .commands .CommandVisibility ;
2523import org .togetherjava .tjbot .commands .MessageContextCommand ;
26- import org .togetherjava .tjbot .commands .utils .DiscordClientAction ;
2724import org .togetherjava .tjbot .commands .utils .MessageUtils ;
2825import org .togetherjava .tjbot .config .Config ;
2926
3734import java .util .function .Predicate ;
3835import java .util .regex .Pattern ;
3936
40-
4137/**
4238 * Implements the /report command, which allows users to report a selected offensive message from
4339 * another user. The message is then forwarded to moderators in a dedicated channel given by
4440 * {@link Config#getModMailChannelPattern()}.
4541 */
4642public final class ReportCommand extends BotCommandAdapter implements MessageContextCommand {
47-
4843 private static final Logger logger = LoggerFactory .getLogger (ReportCommand .class );
4944 private static final String COMMAND_NAME = "report" ;
5045 private static final String REPORT_REASON_INPUT_ID = "reportReason" ;
@@ -92,6 +87,7 @@ public void onMessageContext(MessageContextInteractionEvent event) {
9287
9388 String reportedMessage = event .getTarget ().getContentRaw ();
9489 String reportedMessageID = event .getTarget ().getId ();
90+ String reportedMessageJumpUrl = event .getTarget ().getJumpUrl ();
9591 String reportedMessageChannel = event .getTarget ().getChannel ().getId ();
9692 String reportedAuthorName = event .getTarget ().getAuthor ().getName ();
9793 String reportedAuthorAvatarURL = event .getTarget ().getAuthor ().getAvatarUrl ();
@@ -105,8 +101,8 @@ public void onMessageContext(MessageContextInteractionEvent event) {
105101 .build ();
106102
107103 String reportModalComponentID = generateComponentId (reportedMessage , reportedMessageID ,
108- reportedMessageChannel , reportedMessageTimestamp , reportedAuthorName ,
109- reportedAuthorAvatarURL , reportedAuthorID );
104+ reportedMessageJumpUrl , reportedMessageChannel , reportedMessageTimestamp ,
105+ reportedAuthorName , reportedAuthorAvatarURL , reportedAuthorID );
110106 Modal reportModal = Modal .create (reportModalComponentID , "Report this to a moderator" )
111107 .addActionRow (modalTextInput )
112108 .build ();
@@ -169,7 +165,6 @@ private Optional<TextChannel> handleRequireModMailChannel(ModalInteractionEvent
169165
170166 private MessageCreateAction createModMessage (String reportReason ,
171167 ReportedMessage reportedMessage , Guild guild , TextChannel modMailAuditLog ) {
172-
173168 MessageEmbed reportedMessageEmbed = new EmbedBuilder ().setTitle ("Report" )
174169 .setDescription (MessageUtils .abbreviate (reportedMessage .content ,
175170 MessageEmbed .DESCRIPTION_MAX_LENGTH ))
@@ -185,9 +180,7 @@ private MessageCreateAction createModMessage(String reportReason,
185180
186181 MessageCreateAction message =
187182 modMailAuditLog .sendMessageEmbeds (reportedMessageEmbed , reportReasonEmbed )
188- .addActionRow (DiscordClientAction .Channels .GUILD_CHANNEL_MESSAGE .asLinkButton (
189- "Go to Message" , guild .getId (), reportedMessage .channelID ,
190- reportedMessage .id ));
183+ .addActionRow (Button .link (reportedMessage .jumpUrl , "Go to message" ));
191184
192185 Optional <Role > moderatorRole = guild .getRoles ()
193186 .stream ()
@@ -210,12 +203,12 @@ private void sendModMessage(ModalInteractionEvent event, List<String> args,
210203 ReportedMessage reportedMessage = ReportedMessage .ofArgs (args );
211204
212205 createModMessage (reportReason , reportedMessage , guild , modMailAuditLog ).mapToResult ()
213- .map (this ::createUserReply )
206+ .map (ReportCommand ::createUserReply )
214207 .flatMap (hook ::editOriginal )
215208 .queue ();
216209 }
217210
218- private String createUserReply (Result <Message > result ) {
211+ private static String createUserReply (Result <Message > result ) {
219212 if (result .isFailure ()) {
220213 logger .warn ("Unable to forward a message report to modmail channel." ,
221214 result .getFailure ());
@@ -224,19 +217,18 @@ private String createUserReply(Result<Message> result) {
224217 return "Thank you for reporting this message. A moderator will take care of the matter as soon as possible." ;
225218 }
226219
227- private record ReportedMessage (String content , String id , String channelID , Instant timestamp ,
228- String authorName , String authorAvatarUrl ) {
220+ private record ReportedMessage (String content , String id , String jumpUrl , String channelID ,
221+ Instant timestamp , String authorName , String authorAvatarUrl ) {
229222 static ReportedMessage ofArgs (List <String > args ) {
230223 String content = args .get (0 );
231224 String id = args .get (1 );
232- String channelID = args .get (2 );
233- Instant timestamp = Instant .parse (args .get (3 ));
234- String authorName = args .get (4 );
235- String authorAvatarUrl = args .get (5 );
236- return new ReportedMessage (content , id , channelID , timestamp , authorName ,
225+ String jumpUrl = args .get (2 );
226+ String channelID = args .get (3 );
227+ Instant timestamp = Instant .parse (args .get (4 ));
228+ String authorName = args .get (5 );
229+ String authorAvatarUrl = args .get (6 );
230+ return new ReportedMessage (content , id , jumpUrl , channelID , timestamp , authorName ,
237231 authorAvatarUrl );
238232 }
239-
240233 }
241-
242234}
0 commit comments