From 696d989f7be1a18e22495973e25b4f89631bc34f Mon Sep 17 00:00:00 2001 From: anthorob Date: Fri, 7 Jan 2022 12:53:37 -0500 Subject: [PATCH] Create global crypto command --- .../command/crypto/CryptoPriceCommand.java | 95 +++++++++++++++++++ .../command/crypto/LitecoinPriceCommand.java | 2 +- .../java/netneutrality/http/WebModule.java | 24 ++++- 3 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 src/main/java/netneutrality/command/crypto/CryptoPriceCommand.java diff --git a/src/main/java/netneutrality/command/crypto/CryptoPriceCommand.java b/src/main/java/netneutrality/command/crypto/CryptoPriceCommand.java new file mode 100644 index 0000000..14b4ba9 --- /dev/null +++ b/src/main/java/netneutrality/command/crypto/CryptoPriceCommand.java @@ -0,0 +1,95 @@ +package netneutrality.command.crypto; + +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import netneutrality.command.AbstractCommand; +import netneutrality.command.CommandType; +import netneutrality.command.Visibility; +import netneutrality.http.WebModule; +import org.json.JSONException; + +import java.io.IOException; + +public class CryptoPriceCommand extends AbstractCommand { + + private String currency = "USD"; + private final String baseURL = "https://min-api.cryptocompare.com/data/price"; + private String price = ""; + + @Override + public boolean needAdmin() { + return false; + } + + @Override + public boolean isEnabled() { + return true; + } + + @Override + public String getCommand() { + return "crypto"; + } + + @Override + public String[] getAlias() { + return new String[0]; + } + + @Override + public String getUsage() { + return " "; + } + + @Override + public String getDescription() { + return "Get the price of cryptocurrrency"; + } + + @Override + public Visibility getVisibility() { + return Visibility.CHANNEL; + } + + @Override + public CommandType getType() { + return null; + } + + @Override + public String execute(MessageReceivedEvent event, String[] args) { + + if (args.length > 0) { + + if (args.length == 2) { + if (Currency.isCurrency(args[1].toUpperCase())) + this.currency = args[1].toUpperCase(); + else { + event.getTextChannel().sendMessage("Please enter a valid currency").queue(); + return null; + } + + } + + event.getTextChannel().sendMessage("Retreiving price, please wait...").queue(t -> { + + try { + WebModule ethereumHttp = new WebModule(baseURL + "?fsym=" + args[0] + "&tsyms=" + currency.toUpperCase()).request(); + price = Double.toString(ethereumHttp.getAsObject().getDouble(currency)); + + if (price == null) + throw new IllegalArgumentException("Crypto doesn't exist"); + + } catch (IOException | JSONException | IllegalArgumentException e) { + e.printStackTrace(); + t.editMessage("Error getting ethereum price!").queue(); + } + + t.editMessage(String.format("The current price of %s in %s is %s$", args[0].toUpperCase(), currency, price)).queue(); + }); + } + + + return null; + } + +} diff --git a/src/main/java/netneutrality/command/crypto/LitecoinPriceCommand.java b/src/main/java/netneutrality/command/crypto/LitecoinPriceCommand.java index 3a7efb1..c1d2616 100644 --- a/src/main/java/netneutrality/command/crypto/LitecoinPriceCommand.java +++ b/src/main/java/netneutrality/command/crypto/LitecoinPriceCommand.java @@ -15,7 +15,7 @@ import netneutrality.http.WebModule; public class LitecoinPriceCommand extends AbstractCommand { private String currency; - private final String currencyUrl = "https://api.coinmarketcap.com/v1/ticker/litecoin/?convert="; + private final String currencyUrl = "https://min-api.cryptocompare.com/data/price?fsym=LTC&tsyms="; private String price; public LitecoinPriceCommand() { diff --git a/src/main/java/netneutrality/http/WebModule.java b/src/main/java/netneutrality/http/WebModule.java index c955828..b0c8002 100644 --- a/src/main/java/netneutrality/http/WebModule.java +++ b/src/main/java/netneutrality/http/WebModule.java @@ -13,8 +13,8 @@ import java.util.TreeMap; public class WebModule { - private String url; - private OkHttpClient client = new OkHttpClient(); + private final String url; + private final OkHttpClient client = new OkHttpClient(); private Response response; public WebModule(String url) { @@ -30,7 +30,7 @@ public class WebModule { public WebModule request() { Request request = 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", "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") .build(); try { response = client.newCall(request).execute(); @@ -72,8 +72,6 @@ public class WebModule { } public static String createJson(TreeMap params) { - - StringBuilder json = new StringBuilder(); for (Map.Entry param : params.entrySet()) { @@ -86,6 +84,21 @@ public class WebModule { return (json.length() > 1 ? json.substring(0, json.length() - 1) + "}" : ""); } + public static String createJsonObject(List key, List value) { + if (key.size() != value.size()) + throw new IllegalArgumentException("Key list size not equal to value list size"); + + StringBuilder json = new StringBuilder(); + + for (int index = 0; index < key.size();) { + json.append(String.format("\"%s\":\"%s\"", key.get(index), value.get(index))); + json.append(","); + } + json.insert(0, "{"); + + return (json.length() > 1 ? json.substring(0, json.length() - 1) + "}" : ""); + } + public static String createJsonArray(List list) { StringBuilder json = new StringBuilder(); @@ -110,6 +123,7 @@ public class WebModule { return (json.length() > 1 ? json.substring(0, json.length() - 1) + "]" : "[]"); } + /** * @return the response as a JSONObject