initMessageBuilder method
Inits ComponentMessageBuilder
with buttons needed for pagination. And hooks needed events.
Implementation
@override
ComponentMessageBuilder initMessageBuilder() {
final firstPageButtonId = "${customPreId}firstPage";
final firstPageButton = ButtonBuilder(firstLabel, firstPageButtonId, ButtonStyle.secondary, emoji: firstEmoji);
final previousPageButtonId = "${customPreId}previousPage";
final previousPageButton = ButtonBuilder(prevLabel, previousPageButtonId, ButtonStyle.secondary, emoji: prevEmoji);
final nextPageButtonId = "${customPreId}nextPage";
final nextPageButton = ButtonBuilder(nextLabel, nextPageButtonId, ButtonStyle.secondary, emoji: nextEmoji);
final lastPageButtonId = "${customPreId}lastPage";
final lastPageButton = ButtonBuilder(lastLabel, lastPageButtonId, ButtonStyle.secondary, emoji: lastEmoji);
void updateButtonState() {
firstPageButton.disabled = currentPage == 1;
previousPageButton.disabled = currentPage == 1;
nextPageButton.disabled = currentPage == maxPage;
lastPageButton.disabled = currentPage == maxPage;
}
// TODO: use ButtonInteractionEvent, currently it is not exported from nyxx_interactions
StreamSubscription<dynamic> subscription = interactions.events.onButtonEvent.listen((event) async {
if ([firstPageButtonId, previousPageButtonId, nextPageButtonId, lastPageButtonId].contains(event.interaction.customId)) {
await event.acknowledge();
if (user != null && (event.interaction.userAuthor ?? event.interaction.memberAuthor!.user as SnowflakeEntity).id != user!.id) {
await event.respond(this.builder);
return;
}
message = event.interaction.message;
if (event.interaction.customId == firstPageButtonId) {
onFirstPageButtonClicked();
} else if (event.interaction.customId == previousPageButtonId) {
onPreviousPageButtonClicked();
} else if (event.interaction.customId == nextPageButtonId) {
onNextPageButtonClicked();
} else if (event.interaction.customId == lastPageButtonId) {
onLastPageButtonClicked();
}
updateButtonState();
updatePage(currentPage, this.builder, event);
}
});
if (timeout != null) {
Future.delayed(timeout!, () {
subscription.cancel();
firstPageButton.disabled = true;
previousPageButton.disabled = true;
nextPageButton.disabled = true;
lastPageButton.disabled = true;
message?.edit(this.builder);
});
}
updateButtonState();
final builder = ComponentMessageBuilder()
..componentRows = [
ComponentRowBuilder()
..addComponent(firstPageButton)
..addComponent(previousPageButton)
..addComponent(nextPageButton)
..addComponent(lastPageButton),
];
this.builder = initHook(builder);
return getMessageBuilderForPage(1, this.builder);
}