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 aa192a4..b41ebac 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommand.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommand.java @@ -4,6 +4,7 @@ import net.dv8tion.jda.api.entities.MessageEmbed; /** * Abstrakte Superklasse für alle Kommandos. + * * @author Yannic Link */ public abstract class YoshiCommand { @@ -17,8 +18,9 @@ public abstract class YoshiCommand { /** - * Erzeugt ein neues Kommando, führt es aber noch nicht aus. Es wird ermittelt, ob die Argumentenkombination - * valide ist und das isOk-Flag gesetzt. Im Fehlerfall wird eine Fehleremeldung spezifiziert. + * Erzeugt ein neues Kommando, führt es aber noch nicht aus. Es wird ermittelt, ob die Argumentenkombination valide + * ist und das isOk-Flag gesetzt. Im Fehlerfall wird eine Fehleremeldung spezifiziert. + * * @param context Der Kontext mit dem das Kommando aufgerufen wurde. */ public YoshiCommand(YoshiCommandContext context) { @@ -27,23 +29,24 @@ public abstract class YoshiCommand { /** * Führt das Kommando aus. + * * @return True, wenn Ausführung erfolgreich. False, wenn Ausführung fehlgeschlagen. Fehlermeldung wird in * errorMessage spezifiziert. */ public boolean execute() { - if(!context.containsArguments(requiredArguments)){ + if (!context.containsArguments(requiredArguments)) { sendMessage("Fehlende Argumente"); return false; } return true; } - protected void sendMessage(String message) { + protected final void sendMessage(String message) { context.getEvent().getTextChannel().sendMessage(message).queue(); } - - public void sendMessage(MessageEmbed messageEmbed){ + + protected final void sendMessage(MessageEmbed messageEmbed) { context.getEvent().getTextChannel().sendMessage(messageEmbed).queue(); } - + } diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandDistributor.java b/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandDistributor.java index c8a8cd2..1103b69 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandDistributor.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandDistributor.java @@ -59,6 +59,9 @@ public class YoshiCommandDistributor { case PAT: command = new PatCommand(context); break; + case WIKIPEDIA: + command = new WikipediaCommand(context); + break; default: context.getEvent().getTextChannel().sendMessage("Dieses Kommando existiert noch nicht.").queue(); break; @@ -104,7 +107,8 @@ public class YoshiCommandDistributor { */ DELETE, SAUCE, - PAT + PAT, + WIKIPEDIA } 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 f1c898a..80eb910 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 @@ -15,6 +15,7 @@ import static de.yannicpunktdee.yoshibot.utils.RestHelper.getFromURL; /** * Schickt einen zufälligen Jokus aus einer zufällig ausgewählten Quelle in den Textchannel. + * * @author Yannic Link */ public class JokeCommand extends YoshiCommand { @@ -29,31 +30,41 @@ public class JokeCommand extends YoshiCommand { /** * {@inheritDoc} */ - @Override public synchronized boolean execute() { + @Override + public synchronized boolean execute() { String message = "Jokus"; Random random = YoshiBot.getInstance().getRandom(); int number = random.nextInt(3); - switch(number) { - case 0: message = jokeApi(); break; - case 1: message = officialJokeApi(); break; - case 2: message = chuckNorris(); break; - default: message = "Jokus"; break; + switch (number) { + case 0: + message = jokeApi(); + break; + case 1: + message = officialJokeApi(); + break; + case 2: + message = chuckNorris(); + break; + default: + message = "Jokus"; + break; } - if(context.containsArguments(new String[] {"channel"})) { + if (context.containsArguments(new String[]{"channel"})) { String arg = context.getArgument("channel"); - if(arg == null) { + if (arg == null) { sendMessage("Es wurde kein channel angegeben."); return false; } - List channels = YoshiBot.getInstance().jda.getTextChannelsByName(context.getArgument("channel"), true); - if(channels.isEmpty()) { + List channels = YoshiBot.getInstance().jda + .getTextChannelsByName(context.getArgument("channel"), true); + if (channels.isEmpty()) { sendMessage("Der Kanalname konnte nicht gefunden werden."); return false; } channels.get(0).sendMessage(message).queue(); - }else { + } else { sendMessage(message); } return true; @@ -68,7 +79,7 @@ public class JokeCommand extends YoshiCommand { String raw = getFromURL(url); json = new JSONObject(raw); return json.getJSONObject("value").getString("joke"); - }catch(JSONException | IOException e) { + } catch (JSONException e) { return "Konnte keinen Jokus von \"" + url + "\" laden."; } } @@ -85,7 +96,7 @@ public class JokeCommand extends YoshiCommand { result += " - "; result += json.getString("punchline"); return result; - }catch(JSONException | IOException e) { + } catch (JSONException e) { return "Konnte keinen Jokus von \"" + url + "\" laden."; } } @@ -102,9 +113,9 @@ public class JokeCommand extends YoshiCommand { result += " - "; result += json.getString("delivery"); return result; - }catch(JSONException | IOException e) { + } catch (JSONException e) { return "Konnte keinen Jokus von \"" + url + "\" laden."; } } - + } 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 new file mode 100644 index 0000000..6cf2ecc --- /dev/null +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/WikipediaCommand.java @@ -0,0 +1,36 @@ +package de.yannicpunktdee.yoshibot.command.commands; + +import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type; +import de.yannicpunktdee.yoshibot.command.YoshiCommand; +import de.yannicpunktdee.yoshibot.command.YoshiCommandContext; +import de.yannicpunktdee.yoshibot.utils.Logger; +import de.yannicpunktdee.yoshibot.utils.RestHelper; +import org.json.JSONObject; + +public class WikipediaCommand extends YoshiCommand { + /** + * Erzeugt ein neues Kommando, führt es aber noch nicht aus. Es wird ermittelt, ob die Argumentenkombination valide + * ist und das isOk-Flag gesetzt. Im Fehlerfall wird eine Fehleremeldung spezifiziert. + * + * @param context Der Kontext mit dem das Kommando aufgerufen wurde. + */ + public WikipediaCommand(YoshiCommandContext context) { + super(context); + } + + @Override + public boolean execute() { + if (!super.execute()) return false; + + String url = "https://de.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext" + + "&redirects&titles=" + context.getArgument("name"); + + JSONObject articleBase = new JSONObject(RestHelper.getFromURL(url)); + JSONObject pages = articleBase.getJSONObject("query").getJSONObject("pages"); + if (pages.has("-1")){ + sendMessage("Kein Artikel namens " + context.getArgument("name") + " gefunden!"); + Logger.log("Konnte Artikel " + context.getArgument("name") + " nicht finden!", Type.WARNING); + } + return true; + } +} diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/utils/RestHelper.java b/app/src/main/java/de/yannicpunktdee/yoshibot/utils/RestHelper.java index bfa2b85..87a8a65 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/utils/RestHelper.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/utils/RestHelper.java @@ -1,5 +1,6 @@ package de.yannicpunktdee.yoshibot.utils; +import lombok.SneakyThrows; import org.apache.commons.lang3.StringEscapeUtils; import java.io.BufferedReader; @@ -10,7 +11,8 @@ import java.net.URL; public final class RestHelper { - public static String getFromURL(String url) throws IOException { + @SneakyThrows + public static String getFromURL(String url) { StringBuilder response = new StringBuilder(""); HttpURLConnection con = null; diff --git a/app/src/main/java/de/yannicpunktdee/yoshibot/utils/SauceProvider.java b/app/src/main/java/de/yannicpunktdee/yoshibot/utils/SauceProvider.java index e76affd..3709117 100644 --- a/app/src/main/java/de/yannicpunktdee/yoshibot/utils/SauceProvider.java +++ b/app/src/main/java/de/yannicpunktdee/yoshibot/utils/SauceProvider.java @@ -136,13 +136,8 @@ public class SauceProvider { } private static JSONObject getParsedSauceData(String url) { - String raw = null; - try { - raw = RestHelper.getFromURL(url); - } catch (IOException e) { - e.printStackTrace(); - } - return new JSONObject(Objects.requireNonNull(raw)); + String raw = RestHelper.getFromURL(url); + return new JSONObject(raw); } private static String tagsForRest(String tags) {