diff --git a/pom.xml b/pom.xml index 84dace3..c4d1c70 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,16 @@ - + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + ${java.version} + + + diff --git a/src/main/java/DiscordApi.java b/src/main/java/DiscordApi.java index f62402a..23d8b30 100644 --- a/src/main/java/DiscordApi.java +++ b/src/main/java/DiscordApi.java @@ -10,24 +10,25 @@ import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; +import java.util.List; public class DiscordApi { - public static void main(String[] args) throws IOException, InterruptedException, JSONException { + private static SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + public static void main(String[] args) throws IOException, InterruptedException, JSONException { String uriToManager = args[0]; - String urlDiscord = args[1]; - HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .GET() .uri(URI.create(uriToManager)) .build(); - HttpResponse response = client.send(request, - HttpResponse.BodyHandlers.ofString()); + HttpClient client = HttpClient.newHttpClient(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); JSONArray jsonArray = new JSONArray(response.body()); @@ -35,46 +36,55 @@ public static void main(String[] args) throws IOException, InterruptedException, ArrayList listOfTopics = new ArrayList<>(); ArrayList listOfLeaders = new ArrayList<>(); - for (int i = 0 ; i < jsonArray.length(); i++){ + for (int i = 0; i < jsonArray.length(); i++) { listOfDates.add(jsonArray.getJSONObject(i).get("date").toString()); listOfTopics.add(jsonArray.getJSONObject(i).get("topic").toString()); listOfLeaders.add(jsonArray.getJSONObject(i).get("leader").toString()); } - long firstDate = Long.parseLong(listOfDates.get(0)); - long secondDate = Long.parseLong(listOfDates.get(1)); - - Timestamp firstDateTimestamp = new Timestamp(firstDate); - Date firstDateToDateTime = new Date(firstDateTimestamp.getTime()); - - Timestamp secondDateTimestamp = new Timestamp(secondDate); - Date secondDateToDateTime = new Date(secondDateTimestamp.getTime()); + DiscordWebhook.EmbedObject nearestTopicMessage = createNearestTopicMessage(formatDate(listOfDates.get(0)), listOfTopics.get(0), listOfLeaders.get(0)); + DiscordWebhook.EmbedObject nextTopicMessage = createNextTopicMessage(formatDate(listOfDates.get(1)), listOfTopics.get(1), listOfLeaders.get(1)); - SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - - String nearestDate = sdfDate.format(firstDateToDateTime); - String nextDate = sdfDate.format(secondDateToDateTime); + sendWebhook(urlDiscord, Arrays.asList(nearestTopicMessage, nextTopicMessage)); + } + private static void sendWebhook(String urlDiscord, List messages) throws IOException { DiscordWebhook webhook = new DiscordWebhook(urlDiscord); webhook.setContent("@everyone"); webhook.setAvatarUrl("https://cdn3.vectorstock.com/i/1000x1000/99/37/white-tree-icon-in-green-round-vector-1869937.jpg"); webhook.setUsername("Przypominajka"); webhook.setTts(true); - webhook.addEmbed(new DiscordWebhook.EmbedObject() + + for (DiscordWebhook.EmbedObject eo : messages) { + webhook.addEmbed(eo); + } + + webhook.execute(); + } + + private static DiscordWebhook.EmbedObject createNearestTopicMessage(String nearestDate, String topic, String leader) { + return new DiscordWebhook.EmbedObject() .setTitle(":exclamation: Najbliższe spotkanie już " + nearestDate + " :exclamation:") .setColor(Color.green) -// .addField("Data", nearestDate, false) - .addField(":mega: Temat", listOfTopics.get(0), false) - .addField(":speaking_head: Prowadzący", listOfLeaders.get(0), false) + .addField(":mega: Temat", topic, false) + .addField(":speaking_head: Prowadzący", leader, false) .addField(":arrow_right: Link do aplikacji - linkiem może być tytuł postu, wtedy bedzie na niebiesko", "jakiś url", true) .setThumbnail("https://www.kindpng.com/picc/m/73-737324_abstract-submission-nutrition-congress-circle-meeting-icon-png.png") - .setImage("https://cdn3.iconfinder.com/data/icons/roles-computer-it/128/programmer-2-512.png")); -// .setAuthor("Coding Tree", "https://kryptongta.com", "https://kryptongta.com/images/kryptonlogowide.png") - webhook.addEmbed(new DiscordWebhook.EmbedObject() + .setImage("https://cdn3.iconfinder.com/data/icons/roles-computer-it/128/programmer-2-512.png"); + } + + private static DiscordWebhook.EmbedObject createNextTopicMessage(String nextDate, String topic, String leader) { + return new DiscordWebhook.EmbedObject() .setColor(Color.lightGray) .setAuthor("Kolejne spotkanie " + nextDate, " ", " ") - .addField(":mega: Temat ", listOfTopics.get(1), true) - .addField(":speaking_head: Prowadzący ", listOfLeaders.get(1), true)); - webhook.execute(); + .addField(":mega: Temat ", topic, true) + .addField(":speaking_head: Prowadzący ", leader, true); + } + + private static String formatDate(String date) { + long firstDate = Long.parseLong(date); + Timestamp firstDateTimestamp = new Timestamp(firstDate); + Date firstDateToDateTime = new Date(firstDateTimestamp.getTime()); + return sdfDate.format(firstDateToDateTime); } } diff --git a/src/main/java/DiscordWebhook.java b/src/main/java/DiscordWebhook.java index 11e8cb9..3afcbe4 100644 --- a/src/main/java/DiscordWebhook.java +++ b/src/main/java/DiscordWebhook.java @@ -1,14 +1,12 @@ +import org.json.JSONObject; + import javax.net.ssl.HttpsURLConnection; -import java.awt.Color; +import java.awt.*; import java.io.IOException; import java.io.OutputStream; -import java.lang.reflect.Array; import java.net.URL; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Set; public class DiscordWebhook { @@ -75,15 +73,14 @@ public void execute() throws IOException { jsonEmbed.put("color", rgb); } - EmbedObject.Footer footer = embed.getFooter(); - EmbedObject.Image image = embed.getImage(); - EmbedObject.Thumbnail thumbnail = embed.getThumbnail(); - EmbedObject.Author author = embed.getAuthor(); - List fields = embed.getFields(); + Footer footer = embed.getFooter(); + Image image = embed.getImage(); + Thumbnail thumbnail = embed.getThumbnail(); + Author author = embed.getAuthor(); + List fields = embed.getFields(); if (footer != null) { JSONObject jsonFooter = new JSONObject(); - jsonFooter.put("text", footer.getText()); jsonFooter.put("icon_url", footer.getIconUrl()); jsonEmbed.put("footer", jsonFooter); @@ -91,21 +88,18 @@ public void execute() throws IOException { if (image != null) { JSONObject jsonImage = new JSONObject(); - jsonImage.put("url", image.getUrl()); jsonEmbed.put("image", jsonImage); } if (thumbnail != null) { JSONObject jsonThumbnail = new JSONObject(); - jsonThumbnail.put("url", thumbnail.getUrl()); jsonEmbed.put("thumbnail", jsonThumbnail); } if (author != null) { JSONObject jsonAuthor = new JSONObject(); - jsonAuthor.put("name", author.getName()); jsonAuthor.put("url", author.getUrl()); jsonAuthor.put("icon_url", author.getIconUrl()); @@ -113,7 +107,7 @@ public void execute() throws IOException { } List jsonFields = new ArrayList<>(); - for (EmbedObject.Field field : fields) { + for (Field field : fields) { JSONObject jsonField = new JSONObject(); jsonField.put("name", field.getName()); @@ -240,143 +234,95 @@ public EmbedObject addField(String name, String value, boolean inline) { return this; } - private static class Footer { - private String text; - private String iconUrl; - - private Footer(String text, String iconUrl) { - this.text = text; - this.iconUrl = iconUrl; - } + } - private String getText() { - return text; - } + private static class Footer { + private String text; + private String iconUrl; - private String getIconUrl() { - return iconUrl; - } + private Footer(String text, String iconUrl) { + this.text = text; + this.iconUrl = iconUrl; } - private static class Thumbnail { - private String url; - - private Thumbnail(String url) { - this.url = url; - } - - private String getUrl() { - return url; - } + private String getText() { + return text; } - private static class Image { - private String url; + private String getIconUrl() { + return iconUrl; + } + } - private Image(String url) { - this.url = url; - } + private static class Thumbnail { + private String url; - private String getUrl() { - return url; - } + private Thumbnail(String url) { + this.url = url; } - private static class Author { - private String name; - private String url; - private String iconUrl; - - private Author(String name, String url, String iconUrl) { - this.name = name; - this.url = url; - this.iconUrl = iconUrl; - } + private String getUrl() { + return url; + } + } - private String getName() { - return name; - } + private static class Image { + private String url; - private String getUrl() { - return url; - } + private Image(String url) { + this.url = url; + } - private String getIconUrl() { - return iconUrl; - } + private String getUrl() { + return url; } + } - private static class Field { - private String name; - private String value; - private boolean inline; + private static class Author { + private String name; + private String url; + private String iconUrl; - private Field(String name, String value, boolean inline) { - this.name = name; - this.value = value; - this.inline = inline; - } + private Author(String name, String url, String iconUrl) { + this.name = name; + this.url = url; + this.iconUrl = iconUrl; + } - private String getName() { - return name; - } + private String getName() { + return name; + } - private String getValue() { - return value; - } + private String getUrl() { + return url; + } - private boolean isInline() { - return inline; - } + private String getIconUrl() { + return iconUrl; } } - private static class JSONObject { + private static class Field { + private String name; + private String value; + private boolean inline; - private final HashMap map = new HashMap<>(); - - void put(String key, Object value) { - if (value != null) { - map.put(key, value); - } + private Field(String name, String value, boolean inline) { + this.name = name; + this.value = value; + this.inline = inline; } - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - Set> entrySet = map.entrySet(); - builder.append("{"); - - int i = 0; - for (Map.Entry entry : entrySet) { - Object val = entry.getValue(); - builder.append(quote(entry.getKey())).append(":"); - - if (val instanceof String) { - builder.append(quote(String.valueOf(val))); - } else if (val instanceof Integer) { - builder.append(Integer.valueOf(String.valueOf(val))); - } else if (val instanceof Boolean) { - builder.append(val); - } else if (val instanceof JSONObject) { - builder.append(val.toString()); - } else if (val.getClass().isArray()) { - builder.append("["); - int len = Array.getLength(val); - for (int j = 0; j < len; j++) { - builder.append(Array.get(val, j).toString()).append(j != len - 1 ? "," : ""); - } - builder.append("]"); - } - - builder.append(++i == entrySet.size() ? "}" : ","); - } + private String getName() { + return name; + } - return builder.toString(); + private String getValue() { + return value; } - private String quote(String string) { - return "\"" + string + "\""; + private boolean isInline() { + return inline; } }