From 1bb3ee48cbb5325681768a58a89be07f74f80f28 Mon Sep 17 00:00:00 2001 From: Yannic Link Date: Fri, 26 Mar 2021 21:52:37 +0100 Subject: [PATCH] Singelton-Verwendung angepasst und Say-Command --- README.md | 2 + .../yoshibot/audio/AudioController.java | 2 +- .../audio/AudioControllerManager.java | 2 +- .../command/commands/JokeCommand.java | 2 +- .../command/commands/PlayCommand.java | 6 +- .../yoshibot/command/commands/SayCommand.java | 55 ++++++++++++++++++- .../command/commands/StopCommand.java | 2 +- .../yoshibot/listeners/CommandLine.java | 2 +- .../de/yannicpunktdee/yoshibot/main/Main.java | 4 ++ .../yoshibot/main/Resources.java | 10 +++- rsc/Ordnerstruktur.txt | 1 + 11 files changed, 78 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 0d5b0ad..a52faed 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ Werte enthalten: (dieses Verzeichnis sollte natürlich existieren) - restrict_commands_to_channel -> Textkanalname, auf dem die Botkommandos empfangen werden +Python gTTS installieren mit pip install gTTS + ##Export Zum Exportieren der Applikation führe den Befehl "gradlew clean build" im Root Verzeichnis aus. Die fertige Jar liegt diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/audio/AudioController.java b/app/src/main/java/de/yannicpunktdee/yoshibot/audio/AudioController.java index f7bbdda..fd54724 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/audio/AudioController.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/audio/AudioController.java @@ -13,7 +13,7 @@ public class AudioController { public AudioController(Guild guild) { this.guild = guild; - this.audioPlayer = YoshiBot.audioPlayerManager.createPlayer(); + this.audioPlayer = YoshiBot.getInstance().audioPlayerManager.createPlayer(); audioPlayer.addListener(new AudioPlayerListener(guild.getAudioManager())); this.guild.getAudioManager().setSendingHandler(new AudioSendHandlerImpl(audioPlayer)); diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/audio/AudioControllerManager.java b/app/src/main/java/de/yannicpunktdee/yoshibot/audio/AudioControllerManager.java index 53cd6cb..f8dfb66 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/audio/AudioControllerManager.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/audio/AudioControllerManager.java @@ -19,7 +19,7 @@ public class AudioControllerManager { if(audioController.containsKey(guildId)) ac = audioController.get(guildId); else { - ac = new AudioController(YoshiBot.jda.getGuildById(guildId)); + ac = new AudioController(YoshiBot.getInstance().jda.getGuildById(guildId)); audioController.put(guildId, ac); } return ac; diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/JokeCommand.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/JokeCommand.java index 95c7e56..2df2d51 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/JokeCommand.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/JokeCommand.java @@ -52,7 +52,7 @@ public class JokeCommand extends YoshiCommand { sendMessage("Es wurde kein channel angegeben."); return false; } - List channels = YoshiBot.jda.getTextChannelsByName(context.getArgument("channel"), true); + List channels = YoshiBot.getInstance().jda.getTextChannelsByName(context.getArgument("channel"), true); if(channels.isEmpty()) { sendMessage("Der Kanalname konnte nicht gefunden werden."); return false; diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/PlayCommand.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/PlayCommand.java index 6e61dd3..30ff6bb 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/PlayCommand.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/PlayCommand.java @@ -23,7 +23,7 @@ public class PlayCommand extends YoshiCommand { public boolean execute() { if(!super.execute()) return false; - List channels = YoshiBot.jda.getVoiceChannelsByName(context.getArgument("channel"), true); + List channels = YoshiBot.getInstance().jda.getVoiceChannelsByName(context.getArgument("channel"), true); if(!(channels.size() > 0)) { context.getEvent().getTextChannel().sendMessage("Der Kanalname konnte nicht gefunden werden.").queue(); return false; @@ -36,9 +36,9 @@ public class PlayCommand extends YoshiCommand { return false; } - AudioController ac = YoshiBot.audioControllerManager.getController(vc.getGuild().getIdLong()); + AudioController ac = YoshiBot.getInstance().audioControllerManager.getController(vc.getGuild().getIdLong()); vc.getGuild().getAudioManager().openAudioConnection(vc); - YoshiBot.audioPlayerManager.loadItem(fileName, new AudioLoadResultHandlerImpl(ac)); + YoshiBot.getInstance().audioPlayerManager.loadItem(fileName, new AudioLoadResultHandlerImpl(ac)); return true; } diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/SayCommand.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/SayCommand.java index 3c77ec2..37c4409 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/SayCommand.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/SayCommand.java @@ -1,15 +1,68 @@ package de.yannicpunktdee.yoshibot.command.commands; +import de.yannicpunktdee.yoshibot.audio.AudioController; +import de.yannicpunktdee.yoshibot.audio.AudioLoadResultHandlerImpl; import de.yannicpunktdee.yoshibot.command.YoshiCommand; import de.yannicpunktdee.yoshibot.command.YoshiCommandContext; +import de.yannicpunktdee.yoshibot.main.Resources; +import de.yannicpunktdee.yoshibot.main.YoshiBot; +import de.yannicpunktdee.yoshibot.utils.Logger; +import net.dv8tion.jda.api.entities.VoiceChannel; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.UUID; public class SayCommand extends YoshiCommand { + protected final String[] requiredArguments = {"text", "channel"}; + + public SayCommand(YoshiCommandContext context) { super(context); } @Override - public boolean execute() {return true;} + public boolean execute() { + if(!super.execute()) return false; + + String path = Resources.buildTempAudioFilePath("tts"); + + try { + ProcessBuilder pb = new ProcessBuilder( + "python", + "rsc/tts.py", + "--text", + context.getArgument("text"), + "--lang", + "de", + "--out", + path); + pb.redirectError(); + + Process p = pb.start(); + int exitCode = p.waitFor(); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + return false; + } + + List channels = YoshiBot.getInstance().jda.getVoiceChannelsByName(context.getArgument("channel"), true); + if(!(channels.size() > 0)) { + context.getEvent().getTextChannel().sendMessage("Der Kanalname konnte nicht gefunden werden.").queue(); + return false; + } + VoiceChannel vc = channels.get(0); + + AudioController ac = YoshiBot.getInstance().audioControllerManager.getController(vc.getGuild().getIdLong()); + YoshiBot.getInstance().audioPlayerManager.loadItem(path, new AudioLoadResultHandlerImpl(ac)); + vc.getGuild().getAudioManager().openAudioConnection(vc); + + File deleteFile = new File(path); + deleteFile.delete(); //FIXME Funktioniert noch nicht + + return false; + } } diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/StopCommand.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/StopCommand.java index 842d20f..a29de19 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/StopCommand.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/StopCommand.java @@ -16,7 +16,7 @@ public class StopCommand extends YoshiCommand { @Override public boolean execute() { if(!super.execute()) return false; - YoshiBot.stop(); + YoshiBot.getInstance().stop(); return true; } diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/listeners/CommandLine.java b/app/src/main/java/de/yannicpunktdee/yoshibot/listeners/CommandLine.java index 2b48d3b..9bee151 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/listeners/CommandLine.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/listeners/CommandLine.java @@ -22,7 +22,7 @@ public class CommandLine extends Thread implements Runnable { while((line = reader.readLine()) != null) { line = line.trim(); if(line.equalsIgnoreCase("exit")) { - YoshiBot.stop(); + YoshiBot.getInstance().stop(); return; } System.out.print("> "); diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/main/Main.java b/app/src/main/java/de/yannicpunktdee/yoshibot/main/Main.java index 35dd85a..05883d8 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/main/Main.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/main/Main.java @@ -1,7 +1,11 @@ package de.yannicpunktdee.yoshibot.main; +import java.io.BufferedReader; import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; import java.net.URISyntaxException; +import java.util.UUID; import javax.security.auth.login.LoginException; /** diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/main/Resources.java b/app/src/main/java/de/yannicpunktdee/yoshibot/main/Resources.java index 8c5b18d..c8b55e2 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/main/Resources.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/main/Resources.java @@ -10,7 +10,7 @@ import java.util.Properties; public class Resources { - private static final String default_propertiesFilePath = "../rsc/Config.properties"; + private static final String default_propertiesFilePath = "rsc/Config.properties"; private static String propertiesFilePath = default_propertiesFilePath; private static Properties propertiesFile; @@ -93,6 +93,14 @@ public class Resources { if((new File(name)).exists()) return name; else return null; } + public static String getTempAudioFilePath(String name) { + name = audio_source_directory + (audio_source_directory.endsWith("/")? "" : "/") + "temp/" + name + ".opus"; + if((new File(name)).exists()) return name; + else return null; + } + public static String buildTempAudioFilePath(String name){ + return audio_source_directory + (audio_source_directory.endsWith("/")? "" : "/") + "temp/" + name + ".opus"; + } public static String getAudioSourceDirectory(){ return audio_source_directory; } diff --git a/rsc/Ordnerstruktur.txt b/rsc/Ordnerstruktur.txt index 2cf89d3..23b0eba 100644 --- a/rsc/Ordnerstruktur.txt +++ b/rsc/Ordnerstruktur.txt @@ -2,6 +2,7 @@ rsc |-- .gitkeep |-- Ordnerstruktur.txt |-- Config.properties + |-- tts.py |-- audio |-- temp |-- temp_1.opus