diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommand.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommand.java index 5b2ccbc..151f5d7 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommand.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommand.java @@ -1,6 +1,7 @@ package de.yannicpunktdee.yoshibot.command; import de.yannicpunktdee.yoshibot.audio.AudioLoadResultHandlerImpl; +import de.yannicpunktdee.yoshibot.command.commands.SayCommand; import de.yannicpunktdee.yoshibot.main.YoshiBot; import de.yannicpunktdee.yoshibot.utils.Logger; import de.yannicpunktdee.yoshibot.utils.Resources; @@ -10,7 +11,10 @@ import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.entities.VoiceChannel; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import java.io.BufferedReader; import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -30,6 +34,8 @@ public abstract class YoshiCommand { */ protected YoshiCommandContext context; + public static String resourceToDelete = null; + /** * Erzeugt ein neues Kommando, führt es aber noch nicht aus. Es wird ermittelt, ob die Argumentenkombination valide @@ -41,6 +47,42 @@ public abstract class YoshiCommand { this.context = context; } + public static String buildTTSAudio(String text) { + String path = Resources.getPathToTempAudioFile(UUID.randomUUID().toString()); + + try { + ProcessBuilder pb = new ProcessBuilder( + "python3", + Resources.getTtsPath(), + "--text", + text, + "--lang", + "de", + "--out", + path); + + Process p = pb.start(); + BufferedReader errorReader = new BufferedReader(new InputStreamReader(p.getErrorStream())); + StringBuilder builder = new StringBuilder(); + String line; + while ((line = errorReader.readLine()) != null) { + builder.append(line).append("\n"); + } + if (builder.toString().length() > 0) { + Logger.logError(builder.toString()); + } + if (resourceToDelete != null) + synchronized (resourceToDelete) { + resourceToDelete = path; + } + } catch (IOException e) { + e.printStackTrace(); + return null; + } + + return path; + } + /** * Führt das Kommando aus. * 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 52bb37b..253a903 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,22 +1,10 @@ package de.yannicpunktdee.yoshibot.command.commands; -import de.yannicpunktdee.yoshibot.audio.AudioLoadResultHandlerImpl; import de.yannicpunktdee.yoshibot.command.YoshiCommand; import de.yannicpunktdee.yoshibot.command.YoshiCommandContext; -import de.yannicpunktdee.yoshibot.main.YoshiBot; -import de.yannicpunktdee.yoshibot.utils.Logger; -import de.yannicpunktdee.yoshibot.utils.Resources; -import net.dv8tion.jda.api.entities.VoiceChannel; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.List; -import java.util.UUID; public class SayCommand extends YoshiCommand { - public static String resourceToDelete = null; protected final String[] requiredArguments = {"text", "channel"}; @@ -26,42 +14,6 @@ public class SayCommand extends YoshiCommand { super(context); } - public static String buildTTSAudio(String text) { - String path = Resources.getPathToTempAudioFile(UUID.randomUUID().toString()); - - try { - ProcessBuilder pb = new ProcessBuilder( - "python3", - Resources.getTtsPath(), - "--text", - text, - "--lang", - "de", - "--out", - path); - - Process p = pb.start(); - BufferedReader errorReader = new BufferedReader(new InputStreamReader(p.getErrorStream())); - StringBuilder builder = new StringBuilder(); - String line; - while ((line = errorReader.readLine()) != null) { - builder.append(line).append("\n"); - } - if (builder.toString().length() > 0) { - Logger.logError(builder.toString()); - } - if (resourceToDelete != null) - synchronized (resourceToDelete) { - resourceToDelete = path; - } - } catch (IOException e) { - e.printStackTrace(); - return null; - } - - return path; - } - @Override public boolean execute() { if (!super.execute()) return false; diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/WikipediaCommand.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/WikipediaCommand.java index e2bd64c..0161091 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/WikipediaCommand.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/WikipediaCommand.java @@ -1,13 +1,9 @@ package de.yannicpunktdee.yoshibot.command.commands; -import de.yannicpunktdee.yoshibot.audio.AudioLoadResultHandlerImpl; import de.yannicpunktdee.yoshibot.command.YoshiCommand; import de.yannicpunktdee.yoshibot.command.YoshiCommandContext; -import de.yannicpunktdee.yoshibot.main.YoshiBot; import de.yannicpunktdee.yoshibot.utils.Logger; import de.yannicpunktdee.yoshibot.utils.RestHelper; -import net.dv8tion.jda.api.entities.VoiceChannel; -import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import org.json.JSONObject; import java.util.Arrays; @@ -41,11 +37,13 @@ public class WikipediaCommand extends YoshiCommand { JSONObject page = pages.getJSONObject(pages.keySet().stream().findFirst().get()); String text = page.getString("extract"); - text = String.join(" ", Arrays.asList(text.split(" ")).subList(0, 50)); - sendMessage(text); + sendMessage("Konvertiere Text mittels TTS..."); + List parts = Arrays.asList(text.split(" ")); + text = String.join(" ", parts.subList(0, Math.min(parts.size(), 50))); + - String path = SayCommand.buildTTSAudio(text); + String path = YoshiCommand.buildTTSAudio(text); return YoshiCommand.sayToChannel(path, context.getArgument("channel"), context.getEvent()); } } diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/listeners/DiscordEventListener.java b/app/src/main/java/de/yannicpunktdee/yoshibot/listeners/DiscordEventListener.java index b9b79e3..63e5ab7 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/listeners/DiscordEventListener.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/listeners/DiscordEventListener.java @@ -1,8 +1,8 @@ package de.yannicpunktdee.yoshibot.listeners; +import de.yannicpunktdee.yoshibot.command.YoshiCommand; import de.yannicpunktdee.yoshibot.command.YoshiCommandContext; import de.yannicpunktdee.yoshibot.command.commands.PlayCommand; -import de.yannicpunktdee.yoshibot.command.commands.SayCommand; import de.yannicpunktdee.yoshibot.main.YoshiBot; import de.yannicpunktdee.yoshibot.utils.Resources; import net.dv8tion.jda.api.entities.ChannelType; @@ -57,7 +57,7 @@ public class DiscordEventListener extends ListenerAdapter { nameToPlay = nameToPlay == null ? event.getMember().getUser().getName() : nameToPlay; PlayCommand.play( - SayCommand.buildTTSAudio(Resources.getRandomGreeting(nameToPlay)), + YoshiCommand.buildTTSAudio(Resources.getRandomGreeting(nameToPlay)), event.getMember().getVoiceState().getChannel()); } @@ -73,7 +73,7 @@ public class DiscordEventListener extends ListenerAdapter { nameToPlay = nameToPlay == null ? event.getMember().getUser().getName() : nameToPlay; PlayCommand.play( - SayCommand.buildTTSAudio(Resources.getRandomByebye(nameToPlay)), + YoshiCommand.buildTTSAudio(Resources.getRandomByebye(nameToPlay)), event.getChannelLeft()); }