diff --git a/src/main/java/com/github/nilstrieb/cofig/Secrets.java b/src/main/java/com/github/nilstrieb/cofig/Secrets.java index ee0d6ea..07b5786 100644 --- a/src/main/java/com/github/nilstrieb/cofig/Secrets.java +++ b/src/main/java/com/github/nilstrieb/cofig/Secrets.java @@ -1,5 +1,5 @@ package com.github.nilstrieb.cofig; public class Secrets { - public static final String TOKEN = "invite xp to your server"; + public static final String TOKEN = "ODAxMDE1MjU0MDIzNzk4ODI1.YAahlg.u5MEQ_2bzQkVVZZYNJ5Q23Se5CU"; } diff --git a/src/main/java/com/github/nilstrieb/commands/fun/DepartureCommand.java b/src/main/java/com/github/nilstrieb/commands/fun/DepartureCommand.java index 01f4d3e..8cb6ad0 100644 --- a/src/main/java/com/github/nilstrieb/commands/fun/DepartureCommand.java +++ b/src/main/java/com/github/nilstrieb/commands/fun/DepartureCommand.java @@ -5,34 +5,47 @@ import com.github.nilstrieb.commands.handler.Command; import com.github.nilstrieb.reactions.ReactionEventManager; import com.github.nilstrieb.reactions.ReactionListener; import com.github.nilstrieb.util.DepartureSong; +import com.github.nilstrieb.util.MultiPageEmbed; +import com.iwebpp.crypto.TweetNaclFast; import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; import net.dv8tion.jda.api.events.message.react.MessageReactionRemoveEvent; -public class DepartureCommand extends Command implements ReactionListener { +import java.util.HashMap; + +public class DepartureCommand extends Command { public DepartureCommand() { super("departure"); } @Override public void called(MessageReceivedEvent event, String args) { - EmbedBuilder builder = Config.getDefaultEmbed(); - builder.setTitle("DEPARTURE - GALNERYUS") - .addField("Youtube Link: ", DepartureSong.DEPARTURE_YOUTUBE_LINK, false); - reply(event, builder.build()); - reply(event, "Lyrics:\n" + DepartureSong.LYRICS_LATIN); - //TODO add message id - } + final EmbedBuilder latinBuilder = Config.getDefaultEmbed(); + latinBuilder.setTitle("DEPARTURE - GALNERYUS") + .addField("Youtube Link: ", "[Here](" + DepartureSong.DEPARTURE_YOUTUBE_LINK + ")", false) + .addField("Spotify Link: ", "[Here](" + DepartureSong.DEPARTURE_SPOTIFY_LINK + ")", false) + .addField("LYRICS (Romanized)", "", false); - @Override - public void onReactionAdded(MessageReactionAddEvent event) { + final EmbedBuilder japaneseBuilder = Config.getDefaultEmbed(); + japaneseBuilder.setTitle("DEPARTURE - GALNERYUS") + .addField("Youtube Link: ", "[Here](" + DepartureSong.DEPARTURE_YOUTUBE_LINK + ")", false) + .addField("Spotify Link: ", "[Here](" + DepartureSong.DEPARTURE_SPOTIFY_LINK + ")", false) + .addField("LYRICS (Japanese)", "", false); - } - @Override - public void onReactionRemoved(MessageReactionRemoveEvent event) { + for (int i = 0; i < DepartureSong.LYRICS_LATIN.length; i++) { + latinBuilder.addField("", DepartureSong.LYRICS_LATIN[i], false); + } + for (int i = 0; i < DepartureSong.LYRICS_JAPANESE.length; i++) { + japaneseBuilder.addField("", DepartureSong.LYRICS_JAPANESE[i], false); + } + + event.getTextChannel().sendMessage(latinBuilder.build()).queue((message -> { + new MultiPageEmbed(message, latinBuilder, japaneseBuilder); + })); } } diff --git a/src/main/java/com/github/nilstrieb/listener/CommandListener.java b/src/main/java/com/github/nilstrieb/listener/CommandListener.java index 7cc5873..2303fb4 100644 --- a/src/main/java/com/github/nilstrieb/listener/CommandListener.java +++ b/src/main/java/com/github/nilstrieb/listener/CommandListener.java @@ -9,6 +9,8 @@ public class CommandListener extends ListenerAdapter { @Override public void onMessageReceived(@NotNull MessageReceivedEvent event) { System.out.println("[CListener] Received message: '" + event.getMessage().getContentRaw() + "'"); - CommandHandler.call(event); + if (!event.getAuthor().isBot()) { + CommandHandler.call(event); + } } } diff --git a/src/main/java/com/github/nilstrieb/listener/ReactionEventListener.java b/src/main/java/com/github/nilstrieb/listener/ReactionEventListener.java index 0201b31..c2ee842 100644 --- a/src/main/java/com/github/nilstrieb/listener/ReactionEventListener.java +++ b/src/main/java/com/github/nilstrieb/listener/ReactionEventListener.java @@ -9,11 +9,15 @@ import org.jetbrains.annotations.NotNull; public class ReactionEventListener extends ListenerAdapter { @Override public void onMessageReactionAdd(@NotNull MessageReactionAddEvent event) { - ReactionEventManager.onReactionAdd(event); + if (!event.getUser().isBot()) { + ReactionEventManager.onReactionAdd(event); + } } @Override public void onMessageReactionRemove(@NotNull MessageReactionRemoveEvent event) { - ReactionEventManager.onReactionRemove(event); + if (!event.getUser().isBot()) { + ReactionEventManager.onReactionRemove(event); + } } } diff --git a/src/main/java/com/github/nilstrieb/reactions/ReactionEventManager.java b/src/main/java/com/github/nilstrieb/reactions/ReactionEventManager.java index b503cc3..268cfc6 100644 --- a/src/main/java/com/github/nilstrieb/reactions/ReactionEventManager.java +++ b/src/main/java/com/github/nilstrieb/reactions/ReactionEventManager.java @@ -1,25 +1,23 @@ package com.github.nilstrieb.reactions; -import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; import net.dv8tion.jda.api.events.message.react.MessageReactionRemoveEvent; -import org.jetbrains.annotations.NotNull; import java.util.HashMap; public class ReactionEventManager { - private static HashMap currentReactions = new HashMap<>(); + private static final HashMap currentReactions = new HashMap<>(); - public static void addMessage(Message message, ReactionListener listener){ - currentReactions.put(message.getId(), listener); + public static void addMessage(long message, ReactionListener listener){ + currentReactions.put(message, listener); } - public static void removeMessage(Message message){ - currentReactions.remove(message.getId()); + public static void removeMessage(String message){ + currentReactions.remove(message); } public static void onReactionAdd(MessageReactionAddEvent event){ - String message = event.getMessageId(); + long message = event.getMessageIdLong(); ReactionListener listener = currentReactions.get(message); if (listener != null) { listener.onReactionAdded(event); @@ -27,7 +25,7 @@ public class ReactionEventManager { } public static void onReactionRemove(MessageReactionRemoveEvent event){ - String message = event.getMessageId(); + long message = event.getMessageIdLong(); ReactionListener listener = currentReactions.get(message); if (listener != null) { listener.onReactionRemoved(event); diff --git a/src/main/java/com/github/nilstrieb/util/DepartureSong.java b/src/main/java/com/github/nilstrieb/util/DepartureSong.java index 6024213..8b1f2e2 100644 --- a/src/main/java/com/github/nilstrieb/util/DepartureSong.java +++ b/src/main/java/com/github/nilstrieb/util/DepartureSong.java @@ -3,12 +3,16 @@ package com.github.nilstrieb.util; public class DepartureSong { public static final String DEPARTURE_YOUTUBE_LINK = "https://www.youtube.com/watch?v=VxFUs1pcWzU"; + public static final String DEPARTURE_SPOTIFY_LINK = "https://open.spotify.com/track/5sjoJa0YmBCCPMrBPsBMge?si=Qb-eIMuBRD6Ms62cFf3yaw"; - public static final String LYRICS_JAPANESE = - """ + public static final String[] LYRICS_JAPANESE = + {""" 大地を踏みしめて 君は目覚めていく 天使の微笑みで 連れ出して! + """, + + """ 孤独でも 一人じゃないさ 生まれてきたことに 必ず意味がある @@ -24,6 +28,9 @@ public class DepartureSong { (you can smile!) "始まり"はいつでも遅くないさ 何度でも立ち上がれ! + """, + + """ 最後まで あきらめないさ やり続けることに 必ず意味がある You just try again @@ -39,79 +46,97 @@ public class DepartureSong { 君は目覚めていく 天使の微笑みで 連れ出して! (you can smile!) - 終わらない冒険に出掛けよう… - """; + 終わらない冒険に出掛けよう + いつまでも どこまでも + """, - public static final String LYRICS_LATIN = - """ + """ + 流れ落ちる涙 勇気に変えていく + 天使の羽広げ 舞い上がれ! + (you can fly!) + 悲しみも痛みも包みこんで + 強くなれ明日 + 大地を踏みしめて + 君は目覚めていく + 天使の微笑みで 連れ出して! + (you can smile!) + "始まり"はいつでも遅くないさ + 何度でも! (you can try!) + 何度でも! (you can try!) + 何度でも立ち上がれ! + """}; + + public static final String[] LYRICS_LATIN = + {""" Daichi wo fumishimete Kimi wa mezameteiku Tenshi no hohoemi de - Tsuredashite! - + Tsuredashite!""", + + """ Kodoku demo Hitori janai sa Umaretekita koto ni - Kanarazu ima ga aru - + Kanarazu ima ga aru""", + """ Yasashisa ni michiafureteru - Aoi hoshi ni arigatou - + Aoi hoshi ni arigatou""", + """ You can smile again Taiyou abite You can fly away Sekai wa kimi no kagayaki - Wo matteru - + Wo matteru""", + """ Daichi wo fumishimete Kimi wa mezameteiku Tenshi no hohoemi de Tsuredashite! (You can smile!) "Hajimari" wa itsudemo Osokunai sa - Nandodemo tachiagare! - + Nandodemo tachiagare!""", + """ Saigo made akiramenai sa Yaritsuzukeru koto ni - Kanarazu imi ga aru - + Kanarazu imi ga aru""", + """ You just try again Yami wo nukete You just go away Mirai wa itsumo bokutachi wo - Matteru - + Matteru""", + """ Oozora nukenukete kaihara Koeteyuke Tenshi no nage kissu Tsukamaete! (You can try!) Mada daremo mita koto nai Sekai he - Tobidasou ashita - + Tobidasou ashita""", + """ Daichi wo fumishimete Kimi wa mezameteiku Tenshi no hohoemi de Tsuredashite! (YOU CAN SMILE!) Owaranai bouken ni dekakeyou - Itsumademo dokomademo - + Itsumademo dokomademo""", + """ Nagareochiru namida yuuki ni Kaeteiku Tenshi no hani hiroge maiagare! (YOU CAN FLY!) Kanashimi mo itami mo Tsutsumikonde - Tsuyoku nare ashita - + Tsuyoku nare ashita""", + """ Daichi wo fumishimete Kimi wa mezameteiku Tenshi no hohoemi de - Tsuredashite! (You can smile!) - + Tsuredashite! (You can smile!)""", + """ "Hajimari" wa itsudemo Osokunai sa Nandodemo! (you can try!) Nandodemo! (you can try!) Nandodemo tachiagare! - """; + """}; } \ No newline at end of file diff --git a/src/main/java/com/github/nilstrieb/util/MultiPageEmbed.java b/src/main/java/com/github/nilstrieb/util/MultiPageEmbed.java index 808e28a..b7d9918 100644 --- a/src/main/java/com/github/nilstrieb/util/MultiPageEmbed.java +++ b/src/main/java/com/github/nilstrieb/util/MultiPageEmbed.java @@ -1,7 +1,66 @@ package com.github.nilstrieb.util; -public class MultiPageEmbed { - public static final String NEXT_PAGE_DEFAULT_REACTION = ""; - public static final String PREVIOUS_PAGE_DEFAULT_REACTION = ""; - //TODO implement +import com.github.nilstrieb.reactions.ReactionEventManager; +import com.github.nilstrieb.reactions.ReactionListener; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; +import net.dv8tion.jda.api.events.message.react.MessageReactionRemoveEvent; + +import java.util.Objects; + +public class MultiPageEmbed implements ReactionListener { + private static final String NEXT_PAGE_DEFAULT_REACTION = "\u27a1"; + private static final String PREVIOUS_PAGE_DEFAULT_REACTION = "\u2b05"; + + private final Message message; + private final MessageEmbed[] pages; + private int currentState; + private final String prevReaction; + private final String nextReaction; + + public MultiPageEmbed(Message message, EmbedBuilder... pages) { + this(message, PREVIOUS_PAGE_DEFAULT_REACTION, NEXT_PAGE_DEFAULT_REACTION, pages); + } + + public MultiPageEmbed(Message message, String prevReaction, String nextReaction, EmbedBuilder... builders) { + this.message = message; + this.prevReaction = prevReaction; + this.nextReaction = nextReaction; + + pages = new MessageEmbed[builders.length]; + for (int i = 0; i < pages.length; i++) { + pages[i] = builders[i].build(); + } + currentState = 0; + + message.addReaction(prevReaction).queue(); + message.addReaction(nextReaction).queue(); + + ReactionEventManager.addMessage(message.getIdLong(), this); + } + + @Override + public void onReactionAdded(MessageReactionAddEvent event) { + String name = event.getReaction().getReactionEmote().getName(); + if (name.equals(nextReaction)) { + if(currentState + 1 < pages.length){ + currentState++; + message.editMessage(pages[currentState]).queue(); + } + } else if (name.equals(prevReaction)) { + if(currentState > 0){ + currentState--; + message.editMessage(pages[currentState]).queue(); + } + } + Objects.requireNonNull(event.getUser(), "[MultiPageEmbed] reaction user was null"); + event.getReaction().removeReaction(event.getUser()).queue(); + } + + @Override + public void onReactionRemoved(MessageReactionRemoveEvent event) { + //leave empty + } }