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;
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.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);
}));
}
}

View file

@ -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);
}
}
}

View file

@ -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);
}
}
}

View file

@ -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<String, ReactionListener> currentReactions = new HashMap<>();
private static final HashMap<Long, ReactionListener> 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);

View file

@ -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!
""";
"""};
}

View file

@ -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
}
}