Skip to content

Commit 43bd07e

Browse files
committed
fixed issues and simplified.
1 parent eb35bdf commit 43bd07e

1 file changed

Lines changed: 26 additions & 17 deletions

File tree

src/main/java/net/discordjug/javabot/systems/user_commands/format_code/FormatCodeInteractionHandler.java

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
import net.discordjug.javabot.data.config.BotConfig;
66
import net.discordjug.javabot.util.Checks;
77
import net.discordjug.javabot.util.Responses;
8+
import net.dv8tion.jda.api.components.Component;
89
import net.dv8tion.jda.api.components.actionrow.ActionRow;
910
import net.dv8tion.jda.api.components.buttons.Button;
1011
import net.dv8tion.jda.api.components.selections.SelectOption;
1112
import net.dv8tion.jda.api.components.selections.StringSelectMenu;
1213
import net.dv8tion.jda.api.entities.Member;
1314
import net.dv8tion.jda.api.entities.Message;
14-
import java.util.stream.Stream;
15+
16+
import java.util.ArrayList;
17+
1518
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
1619
import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent;
1720
import org.jspecify.annotations.NonNull;
@@ -40,8 +43,8 @@ public class FormatCodeInteractionHandler implements ButtonHandler, StringSelect
4043
* @param total the number of messages making up the block
4144
* @return the delete-all button
4245
*/
43-
public static Button createDeleteAllButton(long requesterID, int total){
44-
return Button.secondary(ComponentIdBuilder.build(COMPONENT_ID,requesterID,total),"\uD83D\uDDD1\uFE0F");
46+
public static Button createDeleteAllButton(long requesterID, int total) {
47+
return Button.secondary(ComponentIdBuilder.build(COMPONENT_ID, requesterID, total), "\uD83D\uDDD1\uFE0F");
4548
}
4649

4750
private static StringSelectMenu languageMenu(String customId) {
@@ -85,7 +88,7 @@ public void handleButton(ButtonInteractionEvent event, @NonNull Button button) {
8588

8689
LinkedMessages.resolveBefore(event.getMessage(), Integer.parseInt(id[2]),
8790
messages -> event.getChannel().purgeMessages(messages),
88-
() -> Responses.error(event.getHook(),"Could not delete the code block").queue());
91+
() -> Responses.error(event.getHook(), "Could not delete the code block").queue());
8992
}
9093

9194
@Override
@@ -106,32 +109,38 @@ public void handleStringSelectMenu(@NonNull StringSelectInteractionEvent event,
106109
Language language = Language.fromString(values.getFirst());
107110
event.deferEdit().queue();
108111

109-
Runnable onError = () -> Responses.error(event.getHook(),
110-
"Could not update the code block — it may have changed or no longer be yours.").queue();
111112
LinkedMessages.resolveAfter(event.getMessage(), Integer.parseInt(id[2]),
112113
messages -> {
113114
if (ownsBlock(messages, event.getUser().getIdLong())) {
114115
messages.forEach(message ->
115116
message.editMessage(withLanguage(message.getContentRaw(), language)).queue());
116117
} else {
117-
onError.run();
118+
Responses.error(event.getHook(),"Could not update the code block — it may have changed or no longer be yours.").queue();
118119
}
119-
},
120-
onError);
120+
}, () -> Responses.error(event.getHook(), "Could not update the code block — it may have changed or no longer be yours.").queue());
121121
}
122122

123123
private static boolean ownsBlock(List<Message> messages, long userId) {
124-
Message last = messages.get(messages.size() - 1);
125-
boolean lastIsUsers = buttonsOf(last).anyMatch(button -> isDeleteButtonOf(button, userId));
126-
boolean noOtherHasButton = messages.subList(0, messages.size() - 1).stream()
127-
.flatMap(FormatCodeInteractionHandler::buttonsOf)
128-
.noneMatch(FormatCodeInteractionHandler::isDeleteButton);
124+
Message last = messages.getFirst();
125+
boolean lastIsUsers = buttonsOf(last).stream().anyMatch(button -> isDeleteButtonOf(button, userId));
126+
boolean noOtherHasButton = messages.size() <= 1 ;
127+
for (Message message : messages.subList(0,messages.size()-1)){
128+
for(Button button: buttonsOf(message)){
129+
if(isDeleteButton(button)){
130+
noOtherHasButton = true;
131+
}
132+
}
133+
}
129134
return lastIsUsers && noOtherHasButton;
130135
}
131136

132-
private static Stream<Button> buttonsOf(Message message) {
133-
return message.getComponents().stream()
134-
.flatMap(component -> component instanceof ActionRow row ? row.getButtons().stream() : Stream.of());
137+
private static List<Button> buttonsOf(Message message) {
138+
for (Component component: message.getComponents()) {
139+
if(component instanceof ActionRow row) {
140+
return row.getButtons();
141+
}
142+
}
143+
return new ArrayList<>();
135144
}
136145

137146
private static boolean isDeleteButton(Button button) {

0 commit comments

Comments
 (0)