diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandContext.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandContext.java index 89d7bf1..53ddd55 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandContext.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandContext.java @@ -110,7 +110,7 @@ public class YoshiCommandContext { */ private Map arguments; - private List argumentList; + protected List argumentList; private MessageReceivedEvent event; @@ -170,7 +170,7 @@ public class YoshiCommandContext { continue; case INTERMEDIATE: if (Character.isWhitespace(currentChar)) continue; - if ((currentChar != '-' || currentChar == '"') && action != Action.SAUCE) { + if (currentChar != '-' || currentChar == '"') { state = State.BAD_SYNTAX; return; } diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/DeleteCommand.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/DeleteCommand.java new file mode 100644 index 0000000..b3b9a65 --- /dev/null +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/DeleteCommand.java @@ -0,0 +1,4 @@ +package de.yannicpunktdee.yoshibot.command.commands; + +public class DeleteCommand { +} diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/SauceCommand.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/SauceCommand.java index a4d25ab..84131de 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/SauceCommand.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/SauceCommand.java @@ -5,6 +5,7 @@ import de.yannicpunktdee.yoshibot.command.YoshiCommandContext; import de.yannicpunktdee.yoshibot.main.SauceProvider; import net.dv8tion.jda.api.entities.MessageEmbed; +import java.util.Arrays; import java.util.List; public class SauceCommand extends YoshiCommand { @@ -28,8 +29,7 @@ public class SauceCommand extends YoshiCommand { sendMessage("Dieser Kanal is nix gut, weil vong nsfw her. Geh woanders hin du kek"); return true; } - List arguments = context.getArguments(); - arguments.remove(0); + List arguments = Arrays.asList(context.getArgument("tags").split(" ")); try { arguments.stream().map(Integer::parseInt).map(this::byIndex).forEach(this::sendMessage); } catch (Exception e) { 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 b8f1696..7a5caec 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 @@ -9,8 +9,10 @@ import de.yannicpunktdee.yoshibot.main.YoshiBot; import de.yannicpunktdee.yoshibot.utils.Logger; import net.dv8tion.jda.api.entities.VoiceChannel; +import java.io.BufferedReader; import java.io.File; import java.io.IOException; +import java.io.InputStreamReader; import java.util.List; import java.util.UUID; @@ -31,20 +33,36 @@ public class SayCommand extends YoshiCommand { if(!super.execute()) return false; String path = Resources.buildTempAudioFilePath(UUID.randomUUID().toString()); - + + File test = new File(System.getProperty("java.io.tmpdir") + "/yoshibot"); + if (!test.exists()) { + if (!test.mkdir()) { + Logger.log("Tempordner konnte nicht erstellt werden!", Logger.Type.ERROR); + return false; + } + } + try { ProcessBuilder pb = new ProcessBuilder( "python", - "rsc/tts.py", + "../rsc/tts.py", "--text", context.getArgument("text"), "--lang", "de", "--out", path); - pb.redirectError(); 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.log(builder.toString(), Logger.Type.ERROR); + } int exitCode = p.waitFor(); if(resourceToDelete != null) synchronized (resourceToDelete){ 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 5bed2c5..9bd6fd6 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/main/Resources.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/main/Resources.java @@ -6,10 +6,7 @@ import de.yannicpunktdee.yoshibot.utils.Logger.Type; import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Properties; +import java.util.*; import java.util.stream.Collectors; public class Resources { @@ -127,7 +124,7 @@ public class Resources { else return null; } public static String buildTempAudioFilePath(String name){ - return audio_source_directory + (audio_source_directory.endsWith("/")? "" : "/") + "temp/" + name + ".opus"; + return System.getProperty("java.io.tmpdir") + "/yoshibot/" + name; } public static String getAudioSourceDirectory() { return audio_source_directory; diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/main/SauceProvider.java b/app/src/main/java/de/yannicpunktdee/yoshibot/main/SauceProvider.java index c730ecd..1b310e0 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/main/SauceProvider.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/main/SauceProvider.java @@ -24,6 +24,8 @@ public class SauceProvider { private boolean isSauceInit = false; + private static MessageEmbed notFoundEmbed = null; + public SauceProvider(int timer) { this(); ScheduledExecutorService sauceScheduler = Executors.newScheduledThreadPool(1); @@ -39,17 +41,24 @@ public class SauceProvider { public static MessageEmbed getSauce(int index) { String url = BASE_URL + "posts?id=" + index; - JSONObject post = getParsedSauceData(url).getJSONArray("posts").getJSONObject(0); + JSONObject base = getParsedSauceData(url); + if (base.getInt("count") == 0){ + return getNotFoundEmbed(); + } + JSONObject post = base.getJSONArray("posts").getJSONObject(0); return makeStringFromJson(post); } public static MessageEmbed getRandomSauce(String tags) { tags = tagsForRest(tags); - tags += String.join("+-", Resources.getGeneralFilterTags()); + tags += "+" + String.join("+", Resources.getGeneralFilterTags()); Random rand = new Random(); String url = BASE_URL + "posts?tags=" + String.join("+", tags); JSONObject baseObj = getParsedSauceData(url); int amount = baseObj.getInt("count"); + if (amount == 0){ + return getNotFoundEmbed(); + } int selectedIndex = rand.nextInt(amount); int page = (selectedIndex / 100) % 100; int pageIndex = selectedIndex % 100; @@ -85,8 +94,15 @@ public class SauceProvider { Collections.reverse(postsInternal); YoshiBot yoshiBot = YoshiBot.getInstance(); for (JSONObject post : postsInternal) { - yoshiBot.jda.getTextChannelsByName(feed.getKey(), true).get(0) - .sendMessage(makeStringFromJson(post)).queue(); + List channels = yoshiBot.jda.getTextChannelsByName(feed.getKey(), true); + if (channels.size() == 0) { + Logger.log("Kein Kanal mit dem Namen " + feed.getKey() + "gefunden", Logger.Type.ERROR); + break; + } else if (!channels.get(0).isNSFW()) { + Logger.log("Kanal " + feed.getKey() + " ist nicht als NSFW markiert!", Logger.Type.ERROR); + break; + } + channels.get(0).sendMessage(makeStringFromJson(post)).queue(); } Logger.log(String.format("Found %d posts for feed '%s'", postsInternal.size(), feed.getKey()), Logger.Type.INFO); @@ -95,12 +111,12 @@ public class SauceProvider { } private void initSauceProviding() { + YoshiBot yoshiBot = YoshiBot.getInstance(); try { - Thread.sleep(5000); + yoshiBot.jda.awaitReady(); } catch (InterruptedException e) { e.printStackTrace(); } - YoshiBot yoshiBot = YoshiBot.getInstance(); for (Map.Entry> entry : Resources.getFeedDetails().entrySet()) { List channels = yoshiBot.jda.getTextChannelsByName(entry.getKey(), true); if (channels.size() > 0) { @@ -143,5 +159,13 @@ public class SauceProvider { return result; } + private static MessageEmbed getNotFoundEmbed(){ + if (SauceProvider.notFoundEmbed == null){ + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Could not find any posts matching the filter!"); + SauceProvider.notFoundEmbed = eb.build(); + } + return SauceProvider.notFoundEmbed; + } } diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/main/YoshiBot.java b/app/src/main/java/de/yannicpunktdee/yoshibot/main/YoshiBot.java index dc6fef2..2649688 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/main/YoshiBot.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/main/YoshiBot.java @@ -65,6 +65,7 @@ public class YoshiBot { System.out.println("Starte YoshiBot."); jdaBuilder = JDABuilder.createDefault(Resources.getJdaBuilderString()); + jdaBuilder.setAutoReconnect(true); jdaBuilder.addEventListeners(new CommandListener());