@@ -38,8 +38,8 @@ public class FormatCodeInteractionHandler implements ButtonHandler, StringSelect
3838 * @param total the number of messages making up the block
3939 * @return the delete-all button
4040 */
41- public static Button createDeleteAllButton (long requesterID , int total ){
42- return Button .secondary (ComponentIdBuilder .build (COMPONENT_ID ,requesterID ,total ),"\uD83D \uDDD1 \uFE0F " );
41+ public static Button createDeleteAllButton (long requesterID , int total ) {
42+ return Button .secondary (ComponentIdBuilder .build (COMPONENT_ID , requesterID , total ), "\uD83D \uDDD1 \uFE0F " );
4343 }
4444
4545 private static StringSelectMenu languageMenu (String customId ) {
@@ -55,23 +55,23 @@ private static StringSelectMenu languageMenu(String customId) {
5555 /**
5656 * Builds the language-selection dropdown row for a code block.
5757 *
58- * @param requesterId the id of the user allowed to change the language
59- * @param total the number of messages making up the block
58+ * @param requesterId the id of the user allowed to change the language
59+ * @param total the number of messages making up the block
60+ * @param firstMessageID the id of first message to check update code block
6061 * @return an action row containing the language dropdown
6162 */
62- public static ActionRow buildLanguageMenu (long requesterId , int total ) {
63- return ActionRow .of (languageMenu (ComponentIdBuilder .build (COMPONENT_ID , requesterId , total )));
63+ public static ActionRow buildLanguageMenu (long requesterId , int total , long firstMessageID ) {
64+ return ActionRow .of (languageMenu (ComponentIdBuilder .build (COMPONENT_ID , requesterId , total , firstMessageID )));
6465 }
6566
6667 @ Override
6768 public void handleButton (ButtonInteractionEvent event , @ NonNull Button button ) {
6869 String [] id = ComponentIdBuilder .split (event .getComponentId ());
6970 long requesterId = Long .parseLong (id [1 ]);
7071
71-
7272 Member member = event .getMember ();
7373 if (member == null ) {
74- Responses .error (event , "This button may only be used inside a server." ).queue ();
74+ Responses .errorWithTitle (event , "Server Required" , "This button may only be used inside a server." ).queue ();
7575 return ;
7676 }
7777 if (!canManage (member , requesterId )) {
@@ -83,7 +83,7 @@ public void handleButton(ButtonInteractionEvent event, @NonNull Button button) {
8383
8484 LinkedMessages .resolveBefore (event .getMessage (), Integer .parseInt (id [2 ]),
8585 messages -> event .getChannel ().purgeMessages (messages ),
86- () -> Responses .error (event .getHook (),"Could not delete the code block" ).queue ());
86+ () -> Responses .errorWithTitle (event .getHook (), "Undefined Behavior" , "Could not delete the code block" ).queue ());
8787 }
8888
8989 @ Override
@@ -93,7 +93,7 @@ public void handleStringSelectMenu(@NonNull StringSelectInteractionEvent event,
9393
9494 Member member = event .getMember ();
9595 if (member == null ) {
96- Responses .error (event , "This menu may only be used inside a server." ).queue ();
96+ Responses .errorWithTitle (event , "Server Required" , "This menu may only be used inside a server." ).queue ();
9797 return ;
9898 }
9999 if (!canManage (member , requesterId )) {
@@ -104,16 +104,19 @@ public void handleStringSelectMenu(@NonNull StringSelectInteractionEvent event,
104104 Language language = Language .fromString (values .getFirst ());
105105 event .deferEdit ().queue ();
106106
107- LinkedMessages .resolveAfter (event .getMessage (), Integer .parseInt (id [2 ]),
108- messages -> messages .forEach (message ->
109- message .editMessage (withLanguage (message .getContentRaw (), language )).queue ()),
110- () -> Responses .error (event .getHook (),"Could not update the code block" ).queue ());
107+ LinkedMessages .resolveAfter (event .getMessage (), Integer .parseInt (id [2 ]), messages -> {
108+ if (messages .getLast ().getIdLong () == Long .parseLong (id [3 ])) {
109+ messages .forEach (message -> message .editMessage (withLanguage (message .getContentRaw (), language )).queue ());
110+ } else {
111+ Responses .errorWithTitle (event .getHook (), "Merge Conflict" , "The code block could not be updated. The messages may have been deleted." ).queue ();
112+ }
113+ }, () -> Responses .errorWithTitle (event .getHook (), "Undefined Behavior" , "Could not update the code block" ).queue ());
111114 }
112115
113116 private boolean canManage (Member member , long requesterId ) {
114117 return member .getIdLong () == requesterId
115118 || Checks .hasStaffRole (botConfig , member )
116- || member .isOwner () ;
119+ || member .isOwner ();
117120 }
118121
119122 /**
0 commit comments