multi-page departure lyrics

This commit is contained in:
nora 2021-01-19 20:59:48 +01:00
parent 70fc06c69e
commit 734260ea11
7 changed files with 160 additions and 59 deletions

View file

@ -1,5 +1,5 @@
package com.github.nilstrieb.cofig; package com.github.nilstrieb.cofig;
public class Secrets { public class Secrets {
public static final String TOKEN = "invite xp to your server"; public static final String TOKEN = "ODAxMDE1MjU0MDIzNzk4ODI1.YAahlg.u5MEQ_2bzQkVVZZYNJ5Q23Se5CU";
} }

View file

@ -5,34 +5,47 @@ import com.github.nilstrieb.commands.handler.Command;
import com.github.nilstrieb.reactions.ReactionEventManager; import com.github.nilstrieb.reactions.ReactionEventManager;
import com.github.nilstrieb.reactions.ReactionListener; import com.github.nilstrieb.reactions.ReactionListener;
import com.github.nilstrieb.util.DepartureSong; 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.EmbedBuilder;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent; 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.MessageReactionAddEvent;
import net.dv8tion.jda.api.events.message.react.MessageReactionRemoveEvent; 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() { public DepartureCommand() {
super("departure"); super("departure");
} }
@Override @Override
public void called(MessageReceivedEvent event, String args) { public void called(MessageReceivedEvent event, String args) {
EmbedBuilder builder = Config.getDefaultEmbed();
builder.setTitle("DEPARTURE - GALNERYUS") final EmbedBuilder latinBuilder = Config.getDefaultEmbed();
.addField("Youtube Link: ", DepartureSong.DEPARTURE_YOUTUBE_LINK, false); latinBuilder.setTitle("DEPARTURE - GALNERYUS")
reply(event, builder.build()); .addField("Youtube Link: ", "[Here](" + DepartureSong.DEPARTURE_YOUTUBE_LINK + ")", false)
reply(event, "Lyrics:\n" + DepartureSong.LYRICS_LATIN); .addField("Spotify Link: ", "[Here](" + DepartureSong.DEPARTURE_SPOTIFY_LINK + ")", false)
//TODO add message id .addField("LYRICS (Romanized)", "", false);
}
@Override final EmbedBuilder japaneseBuilder = Config.getDefaultEmbed();
public void onReactionAdded(MessageReactionAddEvent event) { 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 for (int i = 0; i < DepartureSong.LYRICS_LATIN.length; i++) {
public void onReactionRemoved(MessageReactionRemoveEvent event) { 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);
}));
} }
} }

View file

@ -9,6 +9,8 @@ public class CommandListener extends ListenerAdapter {
@Override @Override
public void onMessageReceived(@NotNull MessageReceivedEvent event) { public void onMessageReceived(@NotNull MessageReceivedEvent event) {
System.out.println("[CListener] Received message: '" + event.getMessage().getContentRaw() + "'"); System.out.println("[CListener] Received message: '" + event.getMessage().getContentRaw() + "'");
CommandHandler.call(event); if (!event.getAuthor().isBot()) {
CommandHandler.call(event);
}
} }
} }

View file

@ -9,11 +9,15 @@ import org.jetbrains.annotations.NotNull;
public class ReactionEventListener extends ListenerAdapter { public class ReactionEventListener extends ListenerAdapter {
@Override @Override
public void onMessageReactionAdd(@NotNull MessageReactionAddEvent event) { public void onMessageReactionAdd(@NotNull MessageReactionAddEvent event) {
ReactionEventManager.onReactionAdd(event); if (!event.getUser().isBot()) {
ReactionEventManager.onReactionAdd(event);
}
} }
@Override @Override
public void onMessageReactionRemove(@NotNull MessageReactionRemoveEvent event) { public void onMessageReactionRemove(@NotNull MessageReactionRemoveEvent event) {
ReactionEventManager.onReactionRemove(event); if (!event.getUser().isBot()) {
ReactionEventManager.onReactionRemove(event);
}
} }
} }

View file

@ -1,25 +1,23 @@
package com.github.nilstrieb.reactions; 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.MessageReactionAddEvent;
import net.dv8tion.jda.api.events.message.react.MessageReactionRemoveEvent; import net.dv8tion.jda.api.events.message.react.MessageReactionRemoveEvent;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap; import java.util.HashMap;
public class ReactionEventManager { public class ReactionEventManager {
private static HashMap<String, ReactionListener> currentReactions = new HashMap<>(); private static final HashMap<Long, ReactionListener> currentReactions = new HashMap<>();
public static void addMessage(Message message, ReactionListener listener){ public static void addMessage(long message, ReactionListener listener){
currentReactions.put(message.getId(), listener); currentReactions.put(message, listener);
} }
public static void removeMessage(Message message){ public static void removeMessage(String message){
currentReactions.remove(message.getId()); currentReactions.remove(message);
} }
public static void onReactionAdd(MessageReactionAddEvent event){ public static void onReactionAdd(MessageReactionAddEvent event){
String message = event.getMessageId(); long message = event.getMessageIdLong();
ReactionListener listener = currentReactions.get(message); ReactionListener listener = currentReactions.get(message);
if (listener != null) { if (listener != null) {
listener.onReactionAdded(event); listener.onReactionAdded(event);
@ -27,7 +25,7 @@ public class ReactionEventManager {
} }
public static void onReactionRemove(MessageReactionRemoveEvent event){ public static void onReactionRemove(MessageReactionRemoveEvent event){
String message = event.getMessageId(); long message = event.getMessageIdLong();
ReactionListener listener = currentReactions.get(message); ReactionListener listener = currentReactions.get(message);
if (listener != null) { if (listener != null) {
listener.onReactionRemoved(event); listener.onReactionRemoved(event);

View file

@ -3,12 +3,16 @@ package com.github.nilstrieb.util;
public class DepartureSong { public class DepartureSong {
public static final String DEPARTURE_YOUTUBE_LINK = "https://www.youtube.com/watch?v=VxFUs1pcWzU"; 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 can smile!)
"始まり"はいつでも遅くないさ "始まり"はいつでも遅くないさ
何度でも立ち上がれ! 何度でも立ち上がれ!
""",
"""
最後まで あきらめないさ 最後まで あきらめないさ
やり続けることに 必ず意味がある やり続けることに 必ず意味がある
You just try again You just try again
@ -39,79 +46,97 @@ public class DepartureSong {
君は目覚めていく 君は目覚めていく
天使の微笑みで 連れ出して! 天使の微笑みで 連れ出して!
(you can smile!) (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 Daichi wo fumishimete
Kimi wa mezameteiku Kimi wa mezameteiku
Tenshi no hohoemi de Tenshi no hohoemi de
Tsuredashite! Tsuredashite!""",
"""
Kodoku demo Kodoku demo
Hitori janai sa Hitori janai sa
Umaretekita koto ni Umaretekita koto ni
Kanarazu ima ga aru Kanarazu ima ga aru""",
"""
Yasashisa ni michiafureteru Yasashisa ni michiafureteru
Aoi hoshi ni arigatou Aoi hoshi ni arigatou""",
"""
You can smile again You can smile again
Taiyou abite Taiyou abite
You can fly away You can fly away
Sekai wa kimi no kagayaki Sekai wa kimi no kagayaki
Wo matteru Wo matteru""",
"""
Daichi wo fumishimete Daichi wo fumishimete
Kimi wa mezameteiku Kimi wa mezameteiku
Tenshi no hohoemi de Tenshi no hohoemi de
Tsuredashite! (You can smile!) Tsuredashite! (You can smile!)
"Hajimari" wa itsudemo "Hajimari" wa itsudemo
Osokunai sa Osokunai sa
Nandodemo tachiagare! Nandodemo tachiagare!""",
"""
Saigo made akiramenai sa Saigo made akiramenai sa
Yaritsuzukeru koto ni Yaritsuzukeru koto ni
Kanarazu imi ga aru Kanarazu imi ga aru""",
"""
You just try again You just try again
Yami wo nukete Yami wo nukete
You just go away You just go away
Mirai wa itsumo bokutachi wo Mirai wa itsumo bokutachi wo
Matteru Matteru""",
"""
Oozora nukenukete kaihara Oozora nukenukete kaihara
Koeteyuke Koeteyuke
Tenshi no nage kissu Tenshi no nage kissu
Tsukamaete! (You can try!) Tsukamaete! (You can try!)
Mada daremo mita koto nai Mada daremo mita koto nai
Sekai he Sekai he
Tobidasou ashita Tobidasou ashita""",
"""
Daichi wo fumishimete Daichi wo fumishimete
Kimi wa mezameteiku Kimi wa mezameteiku
Tenshi no hohoemi de Tenshi no hohoemi de
Tsuredashite! (YOU CAN SMILE!) Tsuredashite! (YOU CAN SMILE!)
Owaranai bouken ni dekakeyou Owaranai bouken ni dekakeyou
Itsumademo dokomademo Itsumademo dokomademo""",
"""
Nagareochiru namida yuuki ni Nagareochiru namida yuuki ni
Kaeteiku Kaeteiku
Tenshi no hani hiroge maiagare! (YOU CAN FLY!) Tenshi no hani hiroge maiagare! (YOU CAN FLY!)
Kanashimi mo itami mo Kanashimi mo itami mo
Tsutsumikonde Tsutsumikonde
Tsuyoku nare ashita Tsuyoku nare ashita""",
"""
Daichi wo fumishimete Daichi wo fumishimete
Kimi wa mezameteiku Kimi wa mezameteiku
Tenshi no hohoemi de Tenshi no hohoemi de
Tsuredashite! (You can smile!) Tsuredashite! (You can smile!)""",
"""
"Hajimari" wa itsudemo "Hajimari" wa itsudemo
Osokunai sa Osokunai sa
Nandodemo! (you can try!) Nandodemo! (you can try!)
Nandodemo! (you can try!) Nandodemo! (you can try!)
Nandodemo tachiagare! Nandodemo tachiagare!
"""; """};
} }

View file

@ -1,7 +1,66 @@
package com.github.nilstrieb.util; package com.github.nilstrieb.util;
public class MultiPageEmbed { import com.github.nilstrieb.reactions.ReactionEventManager;
public static final String NEXT_PAGE_DEFAULT_REACTION = ""; import com.github.nilstrieb.reactions.ReactionListener;
public static final String PREVIOUS_PAGE_DEFAULT_REACTION = ""; import net.dv8tion.jda.api.EmbedBuilder;
//TODO implement 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
}
} }