From c44ddd42beafa64d214d7f13f5bf126ebdcf1d90 Mon Sep 17 00:00:00 2001 From: anthorob Date: Mon, 14 Mar 2022 07:03:39 -0400 Subject: [PATCH] Check for valid json in crypto commands, move class --- .gitignore | 3 +++ src/main/java/netneutrality/NetNeutrality.java | 2 +- .../java/netneutrality/command/basic/HelpCommand.java | 2 +- .../command/crypto/BitcoinPriceCommand.java | 9 ++++++++- .../netneutrality/command/crypto/CryptoPriceCommand.java | 9 ++++++++- .../command/crypto/EthereumPriceCommand.java | 9 ++++++++- .../command/crypto/LitecoinPriceCommand.java | 9 ++++++++- .../netneutrality/{command => core}/CommandManager.java | 3 ++- .../handler/hooks/message/MessageReceivedHandler.java | 2 +- src/main/java/netneutrality/http/WebModule.java | 9 ++++++--- 10 files changed, 46 insertions(+), 11 deletions(-) rename src/main/java/netneutrality/{command => core}/CommandManager.java (96%) diff --git a/.gitignore b/.gitignore index fcc2aa9..a27df78 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,6 @@ hs_err_pid* # Maven log/ target/ + +#log4j +logs/ \ No newline at end of file diff --git a/src/main/java/netneutrality/NetNeutrality.java b/src/main/java/netneutrality/NetNeutrality.java index 16b2731..e4d5c4e 100644 --- a/src/main/java/netneutrality/NetNeutrality.java +++ b/src/main/java/netneutrality/NetNeutrality.java @@ -6,7 +6,7 @@ import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.entities.Activity; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.requests.GatewayIntent; -import netneutrality.command.CommandManager; +import netneutrality.core.CommandManager; import netneutrality.core.LogHandler; import netneutrality.db.DBController; import netneutrality.handler.hooks.guilds.ServerJoinHandler; diff --git a/src/main/java/netneutrality/command/basic/HelpCommand.java b/src/main/java/netneutrality/command/basic/HelpCommand.java index 69bf7c9..7a3d2c1 100644 --- a/src/main/java/netneutrality/command/basic/HelpCommand.java +++ b/src/main/java/netneutrality/command/basic/HelpCommand.java @@ -9,7 +9,7 @@ package netneutrality.command.basic; import net.dv8tion.jda.api.MessageBuilder; import net.dv8tion.jda.api.entities.MessageEmbed; import netneutrality.command.AbstractCommand; -import netneutrality.command.CommandManager; +import netneutrality.core.CommandManager; import netneutrality.command.CommandType; import netneutrality.command.CommandUsage; import netneutrality.core.context.CommandContext; diff --git a/src/main/java/netneutrality/command/crypto/BitcoinPriceCommand.java b/src/main/java/netneutrality/command/crypto/BitcoinPriceCommand.java index 48750c0..adba8db 100644 --- a/src/main/java/netneutrality/command/crypto/BitcoinPriceCommand.java +++ b/src/main/java/netneutrality/command/crypto/BitcoinPriceCommand.java @@ -13,6 +13,7 @@ import netneutrality.core.LogHandler; import netneutrality.core.context.CommandContext; import netneutrality.http.WebModule; import org.json.JSONException; +import org.json.JSONObject; import java.io.IOException; import java.text.NumberFormat; @@ -84,7 +85,13 @@ public class BitcoinPriceCommand extends AbstractCommand { try { WebModule http = new WebModule(String.format("%s?fsym=%s&tsyms=%s", baseURL, crypto, finalCurrency.toUpperCase())).request(); - price = dollarFormat.format(http.getAsObject().getDouble(finalCurrency)); + JSONObject json = http.getAsObject(); + if (json.has("Response") && json.getString("Response").equalsIgnoreCase("Error")) { + t.editMessage(String.format("Failed getting price of %s", crypto)).queue(); + return; + } + + price = dollarFormat.format(json.getDouble(finalCurrency)); t.editMessage(String.format("The current price of %s in %s is %s", crypto, finalCurrency, price)).queue(); } catch (IOException | JSONException | IllegalArgumentException | ArithmeticException e) { t.editMessage(String.format("Error getting price of %s!", crypto)).queue(); diff --git a/src/main/java/netneutrality/command/crypto/CryptoPriceCommand.java b/src/main/java/netneutrality/command/crypto/CryptoPriceCommand.java index d9d16f4..c05a072 100644 --- a/src/main/java/netneutrality/command/crypto/CryptoPriceCommand.java +++ b/src/main/java/netneutrality/command/crypto/CryptoPriceCommand.java @@ -13,6 +13,7 @@ import netneutrality.core.LogHandler; import netneutrality.core.context.CommandContext; import netneutrality.http.WebModule; import org.json.JSONException; +import org.json.JSONObject; import java.io.IOException; import java.text.NumberFormat; @@ -87,7 +88,13 @@ public class CryptoPriceCommand extends AbstractCommand { try { WebModule http = new WebModule(String.format("%s?fsym=%s&tsyms=%s", baseURL, crypto, finalCurrency.toUpperCase())).request(); - price = dollarFormat.format(http.getAsObject().getDouble(finalCurrency)); + JSONObject json = http.getAsObject(); + if (json.has("Response") && json.getString("Response").equalsIgnoreCase("Error")) { + t.editMessage("Crypto doesn't exist.. yet").queue(); + return; + } + + price = dollarFormat.format(json.getDouble(finalCurrency)); t.editMessage(String.format("The current price of %s in %s is %s", crypto, finalCurrency, price)).queue(); } catch (IOException | JSONException | IllegalArgumentException | ArithmeticException e) { diff --git a/src/main/java/netneutrality/command/crypto/EthereumPriceCommand.java b/src/main/java/netneutrality/command/crypto/EthereumPriceCommand.java index 49f2706..65948cf 100644 --- a/src/main/java/netneutrality/command/crypto/EthereumPriceCommand.java +++ b/src/main/java/netneutrality/command/crypto/EthereumPriceCommand.java @@ -13,6 +13,7 @@ import netneutrality.core.LogHandler; import netneutrality.core.context.CommandContext; import netneutrality.http.WebModule; import org.json.JSONException; +import org.json.JSONObject; import java.io.IOException; import java.text.NumberFormat; @@ -84,7 +85,13 @@ public class EthereumPriceCommand extends AbstractCommand { try { WebModule http = new WebModule(String.format("%s?fsym=%s&tsyms=%s", baseURL, crypto, finalCurrency.toUpperCase())).request(); - price = dollarFormat.format(http.getAsObject().getDouble(finalCurrency)); + JSONObject json = http.getAsObject(); + if (json.has("Response") && json.getString("Response").equalsIgnoreCase("Error")) { + t.editMessage(String.format("Failed getting price of %s", crypto)).queue(); + return; + } + + price = dollarFormat.format(json.getDouble(finalCurrency)); t.editMessage(String.format("The current price of %s in %s is %s", crypto, finalCurrency, price)).queue(); } catch (IOException | JSONException | IllegalArgumentException e) { t.editMessage(String.format("Error getting price of %s!", crypto)).queue(); diff --git a/src/main/java/netneutrality/command/crypto/LitecoinPriceCommand.java b/src/main/java/netneutrality/command/crypto/LitecoinPriceCommand.java index bbd7bc5..165cc51 100644 --- a/src/main/java/netneutrality/command/crypto/LitecoinPriceCommand.java +++ b/src/main/java/netneutrality/command/crypto/LitecoinPriceCommand.java @@ -13,6 +13,7 @@ import netneutrality.core.LogHandler; import netneutrality.core.context.CommandContext; import netneutrality.http.WebModule; import org.json.JSONException; +import org.json.JSONObject; import java.io.IOException; import java.text.NumberFormat; @@ -84,7 +85,13 @@ public class LitecoinPriceCommand extends AbstractCommand { try { WebModule http = new WebModule(String.format("%s?fsym=%s&tsyms=%s", baseURL, crypto, finalCurrency.toUpperCase())).request(); - price = dollarFormat.format(http.getAsObject().getDouble(finalCurrency)); + JSONObject json = http.getAsObject(); + if (json.has("Response") && json.getString("Response").equalsIgnoreCase("Error")) { + t.editMessage(String.format("Failed getting price of %s", crypto)).queue(); + return; + } + + price = dollarFormat.format(json.getDouble(finalCurrency)); t.editMessage(String.format("The current price of %s in %s is %s", crypto, finalCurrency, price)).queue(); } catch (IOException | JSONException | IllegalArgumentException | ArithmeticException e) { t.editMessage(String.format("Error getting price of %s!", crypto)).queue(); diff --git a/src/main/java/netneutrality/command/CommandManager.java b/src/main/java/netneutrality/core/CommandManager.java similarity index 96% rename from src/main/java/netneutrality/command/CommandManager.java rename to src/main/java/netneutrality/core/CommandManager.java index f0dfb74..16a5234 100644 --- a/src/main/java/netneutrality/command/CommandManager.java +++ b/src/main/java/netneutrality/core/CommandManager.java @@ -1,4 +1,4 @@ -package netneutrality.command; +package netneutrality.core; /* * Copyright (c) anthorob @@ -7,6 +7,7 @@ package netneutrality.command; * https://discord.gg/CdFcyQ */ +import netneutrality.command.AbstractCommand; import org.reflections.Reflections; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/netneutrality/handler/hooks/message/MessageReceivedHandler.java b/src/main/java/netneutrality/handler/hooks/message/MessageReceivedHandler.java index 4cb6d96..52ab9ce 100644 --- a/src/main/java/netneutrality/handler/hooks/message/MessageReceivedHandler.java +++ b/src/main/java/netneutrality/handler/hooks/message/MessageReceivedHandler.java @@ -12,7 +12,7 @@ import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import netneutrality.command.AbstractCommand; -import netneutrality.command.CommandManager; +import netneutrality.core.CommandManager; import netneutrality.core.GuildManager; import netneutrality.core.context.CommandContext; import netneutrality.utils.Settings; diff --git a/src/main/java/netneutrality/http/WebModule.java b/src/main/java/netneutrality/http/WebModule.java index cd8c8a6..47eb57d 100644 --- a/src/main/java/netneutrality/http/WebModule.java +++ b/src/main/java/netneutrality/http/WebModule.java @@ -17,6 +17,9 @@ public class WebModule { private final String url; private final OkHttpClient client = new OkHttpClient(); private Response response; + //private final String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 OPR/82.0.4227.43"; + private final String userAgent = "NetNeutrality/1.0 (Discord bot, anthorob@xtremmail.com)"; + public WebModule(String url) { this.url = url; @@ -31,7 +34,7 @@ public class WebModule { public WebModule request() { Sentry.addBreadcrumb(Breadcrumb.http(url, "get")); Request request = new Request.Builder().url(this.url) - .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 OPR/82.0.4227.43") + .addHeader("User-Agent", userAgent) .build(); try { response = client.newCall(request).execute(); @@ -46,7 +49,7 @@ public class WebModule { public WebModule request(Map headers) throws IOException { Sentry.addBreadcrumb(Breadcrumb.http(url, "get")); Request.Builder builder = new Request.Builder().url(this.url) - .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); + .addHeader("User-Agent", userAgent); for (Map.Entry header : headers.entrySet()) { builder.addHeader(header.getKey(), header.getValue()); @@ -68,7 +71,7 @@ public class WebModule { Sentry.addBreadcrumb(Breadcrumb.http(url, "post")); RequestBody body = RequestBody.create(createJson(params), MediaType.parse("application/json; charset=utf-8")); Request.Builder builder = new Request.Builder().url(this.url) - .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); + .addHeader("User-Agent", userAgent); for (Map.Entry header : headers.entrySet()) { builder.addHeader(header.getKey(), header.getValue());