From 4d5a7b640793cce0f8346210a2db06130fec3c08 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Wed, 9 Jan 2019 11:06:34 -0500 Subject: [PATCH 01/18] Added basics for Google Cloud Vision --- build.gradle | 5 +- src/main/java/com/mazawrath/beanbot/Main.java | 7 ++ .../beanbot/utilities/GoogleCloudVision.java | 85 +++++++++++++++++++ 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java diff --git a/build.gradle b/build.gradle index a9ef2c6..997b57d 100644 --- a/build.gradle +++ b/build.gradle @@ -51,7 +51,10 @@ dependencies { 'org.toile-libre.libe:curl:0.0.23', - 'com.google.api-client:google-api-client:1.24.1' + 'com.google.api-client:google-api-client:1.24.1', + + 'com.google.cloud:google-cloud-vision:1.55.0', + 'com.google.cloud:google-cloud-storage:1.55.0' ) runtime( diff --git a/src/main/java/com/mazawrath/beanbot/Main.java b/src/main/java/com/mazawrath/beanbot/Main.java index 15383d3..dbf715a 100644 --- a/src/main/java/com/mazawrath/beanbot/Main.java +++ b/src/main/java/com/mazawrath/beanbot/Main.java @@ -27,6 +27,13 @@ public static void main(String[] args) { // Enable debugging, if no slf4j logger was found //FallbackLoggerConfiguration.setDebug(false); + GoogleCloudVision cloudVision = new GoogleCloudVision(); + try { + cloudVision.checkImange(); + } catch (Exception e) { + e.printStackTrace(); + } + Connection conn = r.connection().hostname("localhost").port(28015).connect(); Points points = new Points(conn); diff --git a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java new file mode 100644 index 0000000..33ca85d --- /dev/null +++ b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java @@ -0,0 +1,85 @@ +package com.mazawrath.beanbot.utilities; + +import com.google.api.client.auth.oauth2.Credential; +import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; +import com.google.cloud.vision.v1.AnnotateImageRequest; +import com.google.cloud.vision.v1.AnnotateImageResponse; +import com.google.cloud.vision.v1.BatchAnnotateImagesResponse; +import com.google.cloud.vision.v1.EntityAnnotation; +import com.google.cloud.vision.v1.Feature; +import com.google.cloud.vision.v1.Feature.Type; +import com.google.cloud.vision.v1.Image; +import com.google.cloud.vision.v1.ImageAnnotatorClient; +import com.google.protobuf.ByteString; +import org.apache.commons.io.IOUtils; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.URI; +import java.net.URL; +import java.net.URLConnection; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class GoogleCloudVision { + + public void checkImange() throws Exception { + try (ImageAnnotatorClient vision = ImageAnnotatorClient.create()) { + + // The path to the image file to annotate + URL url = new URL("https://news.nationalgeographic.com/content/dam/news/2018/05/17/you-can-train-your-cat/02-cat-training-NationalGeographic_1484324.ngsversion.1526587209178.adapt.1900.1.jpg"); + + // Reads the image file into memory + //Path path = Paths.get(uri); + //byte[] data = Files.readAllBytes(path); + ByteString imgBytes = ByteString.copyFrom(Objects.requireNonNull(downloadFile(url))); + + // Builds the image annotation request + List requests = new ArrayList<>(); + Image img = Image.newBuilder().setContent(imgBytes).build(); + Feature feat = Feature.newBuilder().setType(Type.LABEL_DETECTION).build(); + AnnotateImageRequest request = AnnotateImageRequest.newBuilder() + .addFeatures(feat) + .setImage(img) + .build(); + requests.add(request); + + // Performs label detection on the image file + BatchAnnotateImagesResponse response = vision.batchAnnotateImages(requests); + List responses = response.getResponsesList(); + + for (AnnotateImageResponse res : responses) { + if (res.hasError()) { + System.out.printf("Error: %s\n", res.getError().getMessage()); + return; + } + + for (EntityAnnotation annotation : res.getLabelAnnotationsList()) { + annotation.getAllFields().forEach((k, v) -> + System.out.printf("%s : %s\n", k, v.toString())); + } + } + } + } + + private static byte[] downloadFile(URL url) { + try { + URLConnection conn = url.openConnection(); + conn.setConnectTimeout(5000); + conn.setReadTimeout(5000); + conn.connect(); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + IOUtils.copy(conn.getInputStream(), baos); + + return baos.toByteArray(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } +} From 36a7a04d58204e763dd9c3154d706ff1a3889adb Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Wed, 9 Jan 2019 11:08:37 -0500 Subject: [PATCH 02/18] Updated gradle wrapper --- gradle/wrapper/gradle-wrapper.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e0b3fb8..ece76aa 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Tue Jan 08 23:50:16 EST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip From cdb64f5d7e2fa546d60024855106002a58369bfc Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Wed, 9 Jan 2019 17:28:23 -0500 Subject: [PATCH 03/18] Added face analyzing and fixed getting image URL's --- .../beanbot/utilities/GoogleCloudVision.java | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java index 33ca85d..9ec476f 100644 --- a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java +++ b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java @@ -1,42 +1,26 @@ package com.mazawrath.beanbot.utilities; -import com.google.api.client.auth.oauth2.Credential; -import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; -import com.google.cloud.vision.v1.AnnotateImageRequest; -import com.google.cloud.vision.v1.AnnotateImageResponse; -import com.google.cloud.vision.v1.BatchAnnotateImagesResponse; -import com.google.cloud.vision.v1.EntityAnnotation; -import com.google.cloud.vision.v1.Feature; +import com.google.cloud.vision.v1.*; import com.google.cloud.vision.v1.Feature.Type; -import com.google.cloud.vision.v1.Image; -import com.google.cloud.vision.v1.ImageAnnotatorClient; import com.google.protobuf.ByteString; import org.apache.commons.io.IOUtils; import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; import java.io.IOException; -import java.net.URI; +import java.io.PrintStream; import java.net.URL; import java.net.URLConnection; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Objects; public class GoogleCloudVision { - public void checkImange() throws Exception { + public List getLabelDetection(URL image) { try (ImageAnnotatorClient vision = ImageAnnotatorClient.create()) { - // The path to the image file to annotate - URL url = new URL("https://news.nationalgeographic.com/content/dam/news/2018/05/17/you-can-train-your-cat/02-cat-training-NationalGeographic_1484324.ngsversion.1526587209178.adapt.1900.1.jpg"); - - // Reads the image file into memory - //Path path = Paths.get(uri); - //byte[] data = Files.readAllBytes(path); - ByteString imgBytes = ByteString.copyFrom(Objects.requireNonNull(downloadFile(url))); + ByteString imgBytes = ByteString.copyFrom(Objects.requireNonNull(downloadFile(image))); // Builds the image annotation request List requests = new ArrayList<>(); @@ -55,15 +39,15 @@ public void checkImange() throws Exception { for (AnnotateImageResponse res : responses) { if (res.hasError()) { System.out.printf("Error: %s\n", res.getError().getMessage()); - return; + return null; } - for (EntityAnnotation annotation : res.getLabelAnnotationsList()) { - annotation.getAllFields().forEach((k, v) -> - System.out.printf("%s : %s\n", k, v.toString())); - } + return res.getLabelAnnotationsList(); } + } catch (IOException e) { + e.printStackTrace(); } + return null; } private static byte[] downloadFile(URL url) { @@ -82,4 +66,22 @@ private static byte[] downloadFile(URL url) { } return null; } + + public List getFaceDetection(URL image) throws Exception, IOException { + List requests = new ArrayList<>(); + + ByteString imgBytes = ByteString.copyFrom(Objects.requireNonNull(downloadFile(image))); + + Image img = Image.newBuilder().setContent(imgBytes).build(); + Feature feat = Feature.newBuilder().setType(Type.FACE_DETECTION).build(); + AnnotateImageRequest request = + AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build(); + requests.add(request); + + try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) { + BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); + List responses = response.getResponsesList(); + return responses; + } + } } From 16f36b7ddf83638de8a2935380e9c9350895d151 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Wed, 9 Jan 2019 17:29:00 -0500 Subject: [PATCH 04/18] Added analyze command --- src/main/java/com/mazawrath/beanbot/Main.java | 8 +- .../commands/googlevision/AnalyzeCommand.java | 75 +++++++++++++++++++ 2 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java diff --git a/src/main/java/com/mazawrath/beanbot/Main.java b/src/main/java/com/mazawrath/beanbot/Main.java index dbf715a..664db37 100644 --- a/src/main/java/com/mazawrath/beanbot/Main.java +++ b/src/main/java/com/mazawrath/beanbot/Main.java @@ -7,6 +7,7 @@ import com.mazawrath.beanbot.commands.copypasta.GiveModCommand; import com.mazawrath.beanbot.commands.beancoin.*; import com.mazawrath.beanbot.commands.copypasta.*; +import com.mazawrath.beanbot.commands.googlevision.AnalyzeCommand; import com.mazawrath.beanbot.utilities.*; import com.mazawrath.beanbot.commands.admin.*; import com.mazawrath.beanbot.utilities.jersey.RestServer; @@ -28,11 +29,6 @@ public static void main(String[] args) { //FallbackLoggerConfiguration.setDebug(false); GoogleCloudVision cloudVision = new GoogleCloudVision(); - try { - cloudVision.checkImange(); - } catch (Exception e) { - e.printStackTrace(); - } Connection conn = r.connection().hostname("localhost").port(28015).connect(); @@ -75,6 +71,8 @@ public static void main(String[] args) { cmdHandler.registerCommand(new BeanInvestCommand(points, stockMarket)); // Bean Lottery Commands cmdHandler.registerCommand(new BeanLotteryCommand(points, lottery)); + // Google Vision Commands + cmdHandler.registerCommand(new AnalyzeCommand(cloudVision)); // Admin commands cmdHandler.registerCommand(new AdminPostChangeLogCommand()); cmdHandler.registerCommand(new AdminDeleteMessageCommand()); diff --git a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java new file mode 100644 index 0000000..67a8cf4 --- /dev/null +++ b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java @@ -0,0 +1,75 @@ +package com.mazawrath.beanbot.commands.googlevision; + +import com.google.cloud.vision.v1.AnnotateImageResponse; +import com.google.cloud.vision.v1.EntityAnnotation; +import com.mazawrath.beanbot.utilities.GoogleCloudVision; +import de.btobastian.sdcf4j.Command; +import de.btobastian.sdcf4j.CommandExecutor; +import org.javacord.api.DiscordApi; +import org.javacord.api.entity.channel.ServerTextChannel; +import org.javacord.api.entity.message.Message; +import org.javacord.api.entity.message.MessageBuilder; +import org.javacord.api.entity.server.Server; +import org.javacord.api.entity.user.User; + +import javax.activation.MimetypesFileTypeMap; +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; + +public class AnalyzeCommand implements CommandExecutor { + private GoogleCloudVision cloudVision; + + public AnalyzeCommand(GoogleCloudVision cloudVision) { + this.cloudVision = cloudVision; + } + + @Command( + aliases = {"analyze"}, + usage = "cloudVision", + privateMessages = false + ) + + public void onCommand(String[] args, Message message, DiscordApi api, ServerTextChannel serverTextChannel, User author, Server server) { + MessageBuilder messageBuilder = new MessageBuilder(); + List labelAnnotation = null; + List faceDetection = null; + URL url; + if (message.getAttachments().size() != 0) + url = message.getAttachments().get(0).getUrl(); + else { + try { + url = new URL(args[0]); + } catch (MalformedURLException e) { + e.printStackTrace(); + serverTextChannel.sendMessage("URL is not valid."); + return; + } + } + if (checkImage(url)) { + try { + labelAnnotation = cloudVision.getLabelDetection(url); + faceDetection = cloudVision.getFaceDetection(url); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + serverTextChannel.sendMessage("URL must be an image."); + return; + } + for (int i = 0; i Date: Wed, 9 Jan 2019 21:09:40 -0500 Subject: [PATCH 05/18] Cleaned up code and renamed methods --- .../beanbot/commands/googlevision/AnalyzeCommand.java | 5 ++--- .../com/mazawrath/beanbot/utilities/GoogleCloudVision.java | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java index 67a8cf4..7a653bc 100644 --- a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java +++ b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java @@ -14,7 +14,6 @@ import javax.activation.MimetypesFileTypeMap; import java.io.File; -import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.List; @@ -48,7 +47,7 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText return; } } - if (checkImage(url)) { + if (urlContainsImage(url)) { try { labelAnnotation = cloudVision.getLabelDetection(url); faceDetection = cloudVision.getFaceDetection(url); @@ -66,7 +65,7 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText messageBuilder.send(serverTextChannel); } - private boolean checkImage(URL url) { + private boolean urlContainsImage(URL url) { File f = new File(url.toString()); String mimetype= new MimetypesFileTypeMap().getContentType(f); String type = mimetype.split("/")[0]; diff --git a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java index 9ec476f..34cc351 100644 --- a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java +++ b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java @@ -80,8 +80,7 @@ public List getFaceDetection(URL image) throws Exception, try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) { BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); - List responses = response.getResponsesList(); - return responses; + return response.getResponsesList(); } } } From dabe8049e00038d5e5796e15b598f38d30fb1a34 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 00:01:37 -0500 Subject: [PATCH 06/18] Set up features of .analyze --- .../commands/googlevision/AnalyzeCommand.java | 79 +++++++++++++++--- .../beanbot/utilities/GoogleCloudVision.java | 81 +++++++++++++++---- 2 files changed, 136 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java index 7a653bc..2798c70 100644 --- a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java +++ b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java @@ -2,17 +2,22 @@ import com.google.cloud.vision.v1.AnnotateImageResponse; import com.google.cloud.vision.v1.EntityAnnotation; +import com.google.cloud.vision.v1.SafeSearchAnnotation; import com.mazawrath.beanbot.utilities.GoogleCloudVision; import de.btobastian.sdcf4j.Command; import de.btobastian.sdcf4j.CommandExecutor; +import org.apache.commons.lang3.text.WordUtils; import org.javacord.api.DiscordApi; import org.javacord.api.entity.channel.ServerTextChannel; import org.javacord.api.entity.message.Message; import org.javacord.api.entity.message.MessageBuilder; +import org.javacord.api.entity.message.embed.Embed; +import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.server.Server; import org.javacord.api.entity.user.User; import javax.activation.MimetypesFileTypeMap; +import java.awt.*; import java.io.File; import java.net.MalformedURLException; import java.net.URL; @@ -32,9 +37,11 @@ public AnalyzeCommand(GoogleCloudVision cloudVision) { ) public void onCommand(String[] args, Message message, DiscordApi api, ServerTextChannel serverTextChannel, User author, Server server) { - MessageBuilder messageBuilder = new MessageBuilder(); - List labelAnnotation = null; - List faceDetection = null; + List labelAnnotation; + AnnotateImageResponse faceDetection; + SafeSearchAnnotation safeSearchAnnotation; + List logoDetection; + URL url; if (message.getAttachments().size() != 0) url = message.getAttachments().get(0).getUrl(); @@ -51,23 +58,77 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText try { labelAnnotation = cloudVision.getLabelDetection(url); faceDetection = cloudVision.getFaceDetection(url); + safeSearchAnnotation = cloudVision.detectSafeSearch(url); + logoDetection = cloudVision.detectLogos(url); } catch (Exception e) { e.printStackTrace(); + serverTextChannel.sendMessage("Something went wrong."); + return; } } else { serverTextChannel.sendMessage("URL must be an image."); return; } - for (int i = 0; i 1) + emotionsSeen.append("joy, "); + if (faceDetection.getFaceAnnotations(i).getSorrowLikelihoodValue() > 1) + emotionsSeen.append("sorrow, "); + if (faceDetection.getFaceAnnotations(i).getAngerLikelihoodValue() > 1) + emotionsSeen.append("anger, "); + if (faceDetection.getFaceAnnotations(i).getSurpriseLikelihoodValue() > 1) + emotionsSeen.append("surprise, "); + + if (emotionsSeen.length() != 0) + embed.addField("Face " + (i + 1) + "'s Possible Emotions", emotionsSeen.substring(0, emotionsSeen.length() - 2)); + else + embed.addField("Face " + (i + 1) + "'s Possible Emotions", "none"); + } + StringBuilder logos = new StringBuilder(); + for (int i = 0; i < logoDetection.size(); i++) { + if (i != logoDetection.size() -1 ){ + logos.append(logoDetection.get(i)).append(", "); + } else + logos.append(logoDetection.get(i)); + } + if (logos.length() != 0) + embed.addField("Logos I See", logos.toString()); + + if (safeSearchAnnotation.getAdultValue() > 2) + embed.addField("Adult Content", WordUtils.capitalizeFully(safeSearchAnnotation.getAdult().name().replaceAll("_", " "))); + if (safeSearchAnnotation.getSpoofValue() > 2) + embed.addField("Spoof / Edited Phto", WordUtils.capitalizeFully(safeSearchAnnotation.getSpoof().name().replaceAll("_", " "))); + if (safeSearchAnnotation.getMedicalValue() > 2) + embed.addField("Blood / Gore", WordUtils.capitalizeFully(safeSearchAnnotation.getMedical().name().replaceAll("_", " "))); + if (safeSearchAnnotation.getViolenceValue() > 2) + embed.addField("Violence", WordUtils.capitalizeFully(safeSearchAnnotation.getMedical().name().replaceAll("_", " "))); + if (safeSearchAnnotation.getRacyValue() > 2) + embed.addField("Skimpy / Nudity", WordUtils.capitalizeFully(safeSearchAnnotation.getMedical().name().replaceAll("_", " "))); + + serverTextChannel.sendMessage(embed); } private boolean urlContainsImage(URL url) { File f = new File(url.toString()); - String mimetype= new MimetypesFileTypeMap().getContentType(f); + String mimetype = new MimetypesFileTypeMap().getContentType(f); String type = mimetype.split("/")[0]; return type.equals("image"); } diff --git a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java index 34cc351..a24231f 100644 --- a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java +++ b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java @@ -6,9 +6,7 @@ import org.apache.commons.io.IOUtils; import java.io.ByteArrayOutputStream; -import java.io.FileInputStream; import java.io.IOException; -import java.io.PrintStream; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; @@ -50,24 +48,34 @@ public List getLabelDetection(URL image) { return null; } - private static byte[] downloadFile(URL url) { - try { - URLConnection conn = url.openConnection(); - conn.setConnectTimeout(5000); - conn.setReadTimeout(5000); - conn.connect(); + public SafeSearchAnnotation detectSafeSearch(URL image) throws IOException { + List requests = new ArrayList<>(); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - IOUtils.copy(conn.getInputStream(), baos); + ByteString imgBytes = ByteString.copyFrom(Objects.requireNonNull(downloadFile(image))); - return baos.toByteArray(); - } catch (IOException e) { - e.printStackTrace(); + Image img = Image.newBuilder().setContent(imgBytes).build(); + Feature feat = Feature.newBuilder().setType(Type.SAFE_SEARCH_DETECTION).build(); + AnnotateImageRequest request = + AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build(); + requests.add(request); + + try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) { + BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); + List responses = response.getResponsesList(); + + for (AnnotateImageResponse res : responses) { + if (res.hasError()) { + return null; + } + + // For full list of available annotations, see http://g.co/cloud/vision/docs + return res.getSafeSearchAnnotation(); + } } return null; } - public List getFaceDetection(URL image) throws Exception, IOException { + public AnnotateImageResponse getFaceDetection(URL image) throws Exception, IOException { List requests = new ArrayList<>(); ByteString imgBytes = ByteString.copyFrom(Objects.requireNonNull(downloadFile(image))); @@ -80,7 +88,50 @@ public List getFaceDetection(URL image) throws Exception, try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) { BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); - return response.getResponsesList(); + return response.getResponsesList().get(0); } } + + public List detectLogos(URL image) throws Exception, IOException { + List requests = new ArrayList<>(); + + ByteString imgBytes = ByteString.copyFrom(Objects.requireNonNull(downloadFile(image))); + + Image img = Image.newBuilder().setContent(imgBytes).build(); + Feature feat = Feature.newBuilder().setType(Type.LOGO_DETECTION).build(); + AnnotateImageRequest request = + AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build(); + requests.add(request); + + try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) { + BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); + List responses = response.getResponsesList(); + + for (AnnotateImageResponse res : responses) { + if (res.hasError()) { + return null; + } + + return res.getLabelAnnotationsList(); + } + } + return null; + } + + private static byte[] downloadFile(URL url) { + try { + URLConnection conn = url.openConnection(); + conn.setConnectTimeout(5000); + conn.setReadTimeout(5000); + conn.connect(); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + IOUtils.copy(conn.getInputStream(), baos); + + return baos.toByteArray(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } } From a456cce33e9f19ceb3a6b8f4b4352252d225d474 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 00:59:48 -0500 Subject: [PATCH 07/18] Removed logo detection --- .../commands/googlevision/AnalyzeCommand.java | 11 -------- .../beanbot/utilities/GoogleCloudVision.java | 26 ------------------- 2 files changed, 37 deletions(-) diff --git a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java index 2798c70..e18362b 100644 --- a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java +++ b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java @@ -40,7 +40,6 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText List labelAnnotation; AnnotateImageResponse faceDetection; SafeSearchAnnotation safeSearchAnnotation; - List logoDetection; URL url; if (message.getAttachments().size() != 0) @@ -59,7 +58,6 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText labelAnnotation = cloudVision.getLabelDetection(url); faceDetection = cloudVision.getFaceDetection(url); safeSearchAnnotation = cloudVision.detectSafeSearch(url); - logoDetection = cloudVision.detectLogos(url); } catch (Exception e) { e.printStackTrace(); serverTextChannel.sendMessage("Something went wrong."); @@ -102,15 +100,6 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText else embed.addField("Face " + (i + 1) + "'s Possible Emotions", "none"); } - StringBuilder logos = new StringBuilder(); - for (int i = 0; i < logoDetection.size(); i++) { - if (i != logoDetection.size() -1 ){ - logos.append(logoDetection.get(i)).append(", "); - } else - logos.append(logoDetection.get(i)); - } - if (logos.length() != 0) - embed.addField("Logos I See", logos.toString()); if (safeSearchAnnotation.getAdultValue() > 2) embed.addField("Adult Content", WordUtils.capitalizeFully(safeSearchAnnotation.getAdult().name().replaceAll("_", " "))); diff --git a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java index a24231f..dae8428 100644 --- a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java +++ b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java @@ -92,32 +92,6 @@ public AnnotateImageResponse getFaceDetection(URL image) throws Exception, IOExc } } - public List detectLogos(URL image) throws Exception, IOException { - List requests = new ArrayList<>(); - - ByteString imgBytes = ByteString.copyFrom(Objects.requireNonNull(downloadFile(image))); - - Image img = Image.newBuilder().setContent(imgBytes).build(); - Feature feat = Feature.newBuilder().setType(Type.LOGO_DETECTION).build(); - AnnotateImageRequest request = - AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build(); - requests.add(request); - - try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) { - BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); - List responses = response.getResponsesList(); - - for (AnnotateImageResponse res : responses) { - if (res.hasError()) { - return null; - } - - return res.getLabelAnnotationsList(); - } - } - return null; - } - private static byte[] downloadFile(URL url) { try { URLConnection conn = url.openConnection(); From e8fdc44347b20f1e66ac113408e35fc44e151a70 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 01:00:12 -0500 Subject: [PATCH 08/18] Fixed safe search fields using the wrong category --- .../beanbot/commands/googlevision/AnalyzeCommand.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java index e18362b..f899836 100644 --- a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java +++ b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java @@ -108,9 +108,9 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText if (safeSearchAnnotation.getMedicalValue() > 2) embed.addField("Blood / Gore", WordUtils.capitalizeFully(safeSearchAnnotation.getMedical().name().replaceAll("_", " "))); if (safeSearchAnnotation.getViolenceValue() > 2) - embed.addField("Violence", WordUtils.capitalizeFully(safeSearchAnnotation.getMedical().name().replaceAll("_", " "))); + embed.addField("Violence", WordUtils.capitalizeFully(safeSearchAnnotation.getViolence().name().replaceAll("_", " "))); if (safeSearchAnnotation.getRacyValue() > 2) - embed.addField("Skimpy / Nudity", WordUtils.capitalizeFully(safeSearchAnnotation.getMedical().name().replaceAll("_", " "))); + embed.addField("Skimpy / Nudity", WordUtils.capitalizeFully(safeSearchAnnotation.getRacy().name().replaceAll("_", " "))); serverTextChannel.sendMessage(embed); } From 206ae67b3cf7bbede712b77d9269c28c5f277e3b Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 16:04:13 -0500 Subject: [PATCH 09/18] Enabled async for command --- .../beanbot/commands/googlevision/AnalyzeCommand.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java index f899836..c95523d 100644 --- a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java +++ b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java @@ -33,7 +33,8 @@ public AnalyzeCommand(GoogleCloudVision cloudVision) { @Command( aliases = {"analyze"}, usage = "cloudVision", - privateMessages = false + privateMessages = false, + async = true ) public void onCommand(String[] args, Message message, DiscordApi api, ServerTextChannel serverTextChannel, User author, Server server) { From b0fd02be288e4543183c978c2d10db7f0c2e6101 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 16:04:31 -0500 Subject: [PATCH 10/18] Added web detection --- .../beanbot/utilities/GoogleCloudVision.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java index dae8428..1dbdef9 100644 --- a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java +++ b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java @@ -92,6 +92,26 @@ public AnnotateImageResponse getFaceDetection(URL image) throws Exception, IOExc } } + public WebDetection getWebDetection(URL image) throws Exception, + IOException { + List requests = new ArrayList<>(); + + ByteString imgBytes = ByteString.copyFrom(Objects.requireNonNull(downloadFile(image))); + + Image img = Image.newBuilder().setContent(imgBytes).build(); + Feature feat = Feature.newBuilder().setType(Type.WEB_DETECTION).build(); + AnnotateImageRequest request = + AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build(); + requests.add(request); + + try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) { + BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); + + return response.getResponsesList().get(0).getWebDetection(); + } + } + + private static byte[] downloadFile(URL url) { try { URLConnection conn = url.openConnection(); From 69c4f76173fcf9503fc85a19db161c478e31000d Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 16:30:48 -0500 Subject: [PATCH 11/18] Set up best guess and cleaned up other code --- .../commands/googlevision/AnalyzeCommand.java | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java index c95523d..4a60549 100644 --- a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java +++ b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java @@ -3,6 +3,7 @@ import com.google.cloud.vision.v1.AnnotateImageResponse; import com.google.cloud.vision.v1.EntityAnnotation; import com.google.cloud.vision.v1.SafeSearchAnnotation; +import com.google.cloud.vision.v1.WebDetection; import com.mazawrath.beanbot.utilities.GoogleCloudVision; import de.btobastian.sdcf4j.Command; import de.btobastian.sdcf4j.CommandExecutor; @@ -10,8 +11,6 @@ import org.javacord.api.DiscordApi; import org.javacord.api.entity.channel.ServerTextChannel; import org.javacord.api.entity.message.Message; -import org.javacord.api.entity.message.MessageBuilder; -import org.javacord.api.entity.message.embed.Embed; import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.server.Server; import org.javacord.api.entity.user.User; @@ -41,6 +40,7 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText List labelAnnotation; AnnotateImageResponse faceDetection; SafeSearchAnnotation safeSearchAnnotation; + WebDetection webDetection; URL url; if (message.getAttachments().size() != 0) @@ -59,6 +59,7 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText labelAnnotation = cloudVision.getLabelDetection(url); faceDetection = cloudVision.getFaceDetection(url); safeSearchAnnotation = cloudVision.detectSafeSearch(url); + webDetection = cloudVision.getWebDetection(url); } catch (Exception e) { e.printStackTrace(); serverTextChannel.sendMessage("Something went wrong."); @@ -83,7 +84,7 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText embed.addField("Things I see", labels.toString()); - embed.addField("Faces I See", String.valueOf(faceDetection.getFaceAnnotationsCount())); + embed.addInlineField("Faces I See", String.valueOf(faceDetection.getFaceAnnotationsCount())); for (int i = 0; i < faceDetection.getFaceAnnotationsCount(); i++) { StringBuilder emotionsSeen = new StringBuilder(); @@ -97,21 +98,31 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText emotionsSeen.append("surprise, "); if (emotionsSeen.length() != 0) - embed.addField("Face " + (i + 1) + "'s Possible Emotions", emotionsSeen.substring(0, emotionsSeen.length() - 2)); + embed.addInlineField("Face " + (i + 1) + "'s Possible Emotions", emotionsSeen.substring(0, emotionsSeen.length() - 2)); else - embed.addField("Face " + (i + 1) + "'s Possible Emotions", "none"); + embed.addInlineField("Face " + (i + 1) + "'s Possible Emotions", "none"); } + embed.addInlineField("Best Guess", webDetection.getBestGuessLabels(0).getLabel()); + + StringBuilder webLabels = new StringBuilder(); + for (int i = 0; i < webDetection.getWebEntitiesCount(); i++) { + if (i != webDetection.getWebEntitiesCount() - 1) + webLabels.append(webDetection.getWebEntities(i).getDescription()).append(" (").append(Math.round(webDetection.getWebEntities(i).getScore() * 100)).append("%), "); + else + webLabels.append(webDetection.getWebEntities(i).getDescription()).append(" (").append(Math.round(webDetection.getWebEntities(i).getScore() * 100)).append("%)"); + } + embed.addField("Things I Think This Is", webLabels.toString()); if (safeSearchAnnotation.getAdultValue() > 2) - embed.addField("Adult Content", WordUtils.capitalizeFully(safeSearchAnnotation.getAdult().name().replaceAll("_", " "))); + embed.addInlineField("Adult Content", WordUtils.capitalizeFully(safeSearchAnnotation.getAdult().name().replaceAll("_", " "))); if (safeSearchAnnotation.getSpoofValue() > 2) - embed.addField("Spoof / Edited Phto", WordUtils.capitalizeFully(safeSearchAnnotation.getSpoof().name().replaceAll("_", " "))); + embed.addInlineField("Spoof / Edited Photo", WordUtils.capitalizeFully(safeSearchAnnotation.getSpoof().name().replaceAll("_", " "))); if (safeSearchAnnotation.getMedicalValue() > 2) - embed.addField("Blood / Gore", WordUtils.capitalizeFully(safeSearchAnnotation.getMedical().name().replaceAll("_", " "))); + embed.addInlineField("Medical / Surgery", WordUtils.capitalizeFully(safeSearchAnnotation.getMedical().name().replaceAll("_", " "))); if (safeSearchAnnotation.getViolenceValue() > 2) - embed.addField("Violence", WordUtils.capitalizeFully(safeSearchAnnotation.getViolence().name().replaceAll("_", " "))); + embed.addInlineField("Violence / Blood / Gore", WordUtils.capitalizeFully(safeSearchAnnotation.getViolence().name().replaceAll("_", " "))); if (safeSearchAnnotation.getRacyValue() > 2) - embed.addField("Skimpy / Nudity", WordUtils.capitalizeFully(safeSearchAnnotation.getRacy().name().replaceAll("_", " "))); + embed.addInlineField("Skimpy / Nudity", WordUtils.capitalizeFully(safeSearchAnnotation.getRacy().name().replaceAll("_", " "))); serverTextChannel.sendMessage(embed); } From 5a707a042be1429960eb69ae3071cd8616085273 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 16:36:27 -0500 Subject: [PATCH 12/18] Added price for analyzing images --- src/main/java/com/mazawrath/beanbot/Main.java | 2 +- .../beanbot/commands/googlevision/AnalyzeCommand.java | 11 ++++++++++- .../java/com/mazawrath/beanbot/utilities/Points.java | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mazawrath/beanbot/Main.java b/src/main/java/com/mazawrath/beanbot/Main.java index 664db37..1dc60e4 100644 --- a/src/main/java/com/mazawrath/beanbot/Main.java +++ b/src/main/java/com/mazawrath/beanbot/Main.java @@ -72,7 +72,7 @@ public static void main(String[] args) { // Bean Lottery Commands cmdHandler.registerCommand(new BeanLotteryCommand(points, lottery)); // Google Vision Commands - cmdHandler.registerCommand(new AnalyzeCommand(cloudVision)); + cmdHandler.registerCommand(new AnalyzeCommand(points, cloudVision)); // Admin commands cmdHandler.registerCommand(new AdminPostChangeLogCommand()); cmdHandler.registerCommand(new AdminDeleteMessageCommand()); diff --git a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java index 4a60549..a1f7f9b 100644 --- a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java +++ b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java @@ -5,6 +5,7 @@ import com.google.cloud.vision.v1.SafeSearchAnnotation; import com.google.cloud.vision.v1.WebDetection; import com.mazawrath.beanbot.utilities.GoogleCloudVision; +import com.mazawrath.beanbot.utilities.Points; import de.btobastian.sdcf4j.Command; import de.btobastian.sdcf4j.CommandExecutor; import org.apache.commons.lang3.text.WordUtils; @@ -23,9 +24,11 @@ import java.util.List; public class AnalyzeCommand implements CommandExecutor { + private Points points; private GoogleCloudVision cloudVision; - public AnalyzeCommand(GoogleCloudVision cloudVision) { + public AnalyzeCommand(Points points, GoogleCloudVision cloudVision) { + this.points = points; this.cloudVision = cloudVision; } @@ -37,6 +40,12 @@ public AnalyzeCommand(GoogleCloudVision cloudVision) { ) public void onCommand(String[] args, Message message, DiscordApi api, ServerTextChannel serverTextChannel, User author, Server server) { + if (!points.removePoints(author.getIdAsString(), api.getYourself().getIdAsString(), server.getIdAsString(), Points.GOOGLE_VISION_COST)) { + serverTextChannel.sendMessage("You do not have enough beanCoin for this command"); + return; + } + serverTextChannel.sendMessage("Analyzing image..."); + List labelAnnotation; AnnotateImageResponse faceDetection; SafeSearchAnnotation safeSearchAnnotation; diff --git a/src/main/java/com/mazawrath/beanbot/utilities/Points.java b/src/main/java/com/mazawrath/beanbot/utilities/Points.java index 8419e8d..abffc20 100644 --- a/src/main/java/com/mazawrath/beanbot/utilities/Points.java +++ b/src/main/java/com/mazawrath/beanbot/utilities/Points.java @@ -25,6 +25,7 @@ public class Points { public static final BigDecimal COMMAND_COST_SPECIAL = new BigDecimal("10.00").setScale(SCALE, ROUNDING_MODE); public static final BigDecimal LOTTERY_TICKET_COST = new BigDecimal("20.00").setScale(SCALE, ROUNDING_MODE); public static final BigDecimal LOTTERY_DRAWING_COST = new BigDecimal("20000.00").setScale(SCALE, ROUNDING_MODE); + public static final BigDecimal GOOGLE_VISION_COST = new BigDecimal("50.00").setScale(SCALE, ROUNDING_MODE); private Connection conn; private static final BigDecimal NUMBER_TO_PERCENT = new BigDecimal(.01); From cb091f826d4320fa2544a5bf1f90097fb635ce82 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 16:42:42 -0500 Subject: [PATCH 13/18] Set up to check if link is valid before taking beanCoin --- .../commands/googlevision/AnalyzeCommand.java | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java index a1f7f9b..17ac6a4 100644 --- a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java +++ b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java @@ -40,21 +40,10 @@ public AnalyzeCommand(Points points, GoogleCloudVision cloudVision) { ) public void onCommand(String[] args, Message message, DiscordApi api, ServerTextChannel serverTextChannel, User author, Server server) { - if (!points.removePoints(author.getIdAsString(), api.getYourself().getIdAsString(), server.getIdAsString(), Points.GOOGLE_VISION_COST)) { - serverTextChannel.sendMessage("You do not have enough beanCoin for this command"); - return; - } - serverTextChannel.sendMessage("Analyzing image..."); - - List labelAnnotation; - AnnotateImageResponse faceDetection; - SafeSearchAnnotation safeSearchAnnotation; - WebDetection webDetection; - URL url; if (message.getAttachments().size() != 0) url = message.getAttachments().get(0).getUrl(); - else { + else if (args.length > 0) { try { url = new URL(args[0]); } catch (MalformedURLException e) { @@ -62,7 +51,23 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText serverTextChannel.sendMessage("URL is not valid."); return; } + } else { + serverTextChannel.sendMessage("You must either have a URL in your message or an attachment."); + return; } + + if (!points.removePoints(author.getIdAsString(), api.getYourself().getIdAsString(), server.getIdAsString(), Points.GOOGLE_VISION_COST)) { + serverTextChannel.sendMessage("You do not have enough beanCoin for this command"); + return; + } + + serverTextChannel.sendMessage("Analyzing image..."); + + List labelAnnotation; + AnnotateImageResponse faceDetection; + SafeSearchAnnotation safeSearchAnnotation; + WebDetection webDetection; + if (urlContainsImage(url)) { try { labelAnnotation = cloudVision.getLabelDetection(url); @@ -91,7 +96,7 @@ public void onCommand(String[] args, Message message, DiscordApi api, ServerText labels.append(labelAnnotation.get(i).getDescription()).append(" (").append(Math.round(labelAnnotation.get(0).getScore() * 100)).append("%)"); } - embed.addField("Things I see", labels.toString()); + embed.addField("Things I See", labels.toString()); embed.addInlineField("Faces I See", String.valueOf(faceDetection.getFaceAnnotationsCount())); From c3c06af12e21c325d1de1d24ddc4de2e451c5349 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 19:48:36 -0500 Subject: [PATCH 14/18] Disabled .beanlottery draw --- .../commands/beanlottery/BeanLotteryCommand.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/mazawrath/beanbot/commands/beanlottery/BeanLotteryCommand.java b/src/main/java/com/mazawrath/beanbot/commands/beanlottery/BeanLotteryCommand.java index 33201fa..b8c4d90 100644 --- a/src/main/java/com/mazawrath/beanbot/commands/beanlottery/BeanLotteryCommand.java +++ b/src/main/java/com/mazawrath/beanbot/commands/beanlottery/BeanLotteryCommand.java @@ -42,13 +42,13 @@ public void onCommand(String[] args, DiscordApi api, ServerTextChannel serverTex lottery.scheduleWeeklyDrawing(points, server, api, serverTextChannel); return; } - } else if (args[0].equalsIgnoreCase("draw")) { - if (points.removePoints(author.getIdAsString(), api.getYourself().getIdAsString(), server.getIdAsString(), Points.LOTTERY_DRAWING_COST)) { - lottery.drawNumbers(points, server, api, serverTextChannel); - } else - serverTextChannel.sendMessage("You do not have enough beanCoin for this command"); - return; - } + } //else if (args[0].equalsIgnoreCase("draw")) { +// if (points.removePoints(author.getIdAsString(), api.getYourself().getIdAsString(), server.getIdAsString(), Points.LOTTERY_DRAWING_COST)) { +// lottery.drawNumbers(points, server, api, serverTextChannel); +// } else +// serverTextChannel.sendMessage("You do not have enough beanCoin for this command"); +// return; +// } if (Integer.parseInt(args[0]) > 200) { serverTextChannel.sendMessage("You can only buy 200 tickets at a time."); return; From 5dd962c40d422602eb29cf639a852c222f35acc5 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 19:48:58 -0500 Subject: [PATCH 15/18] Set emotions to capitalize each word --- .../mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java index 17ac6a4..04764f4 100644 --- a/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java +++ b/src/main/java/com/mazawrath/beanbot/commands/googlevision/AnalyzeCommand.java @@ -112,7 +112,7 @@ else if (args.length > 0) { emotionsSeen.append("surprise, "); if (emotionsSeen.length() != 0) - embed.addInlineField("Face " + (i + 1) + "'s Possible Emotions", emotionsSeen.substring(0, emotionsSeen.length() - 2)); + embed.addInlineField("Face " + (i + 1) + "'s Possible Emotions", WordUtils.capitalizeFully(emotionsSeen.substring(0, emotionsSeen.length() - 2))); else embed.addInlineField("Face " + (i + 1) + "'s Possible Emotions", "none"); } From 7179a822473c5b93b40bca728ea8d814f2a57993 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 19:51:54 -0500 Subject: [PATCH 16/18] Updated change log. --- .../admin/AdminPostChangeLogCommand.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/mazawrath/beanbot/commands/admin/AdminPostChangeLogCommand.java b/src/main/java/com/mazawrath/beanbot/commands/admin/AdminPostChangeLogCommand.java index ec0ff3d..9d5716d 100644 --- a/src/main/java/com/mazawrath/beanbot/commands/admin/AdminPostChangeLogCommand.java +++ b/src/main/java/com/mazawrath/beanbot/commands/admin/AdminPostChangeLogCommand.java @@ -34,18 +34,16 @@ public void onCommand(String[] args, DiscordApi api, ServerTextChannel serverTex private String getRecentChangeLog() { return "**New beanBOT update released.**\n" + - "Release can be found on https://github.com/Mazawrath/beanBOT/releases/tag/v3.1.1\n" + - "Detailed changelog can be found on https://github.com/Mazawrath/beanBOT/compare/v3.1.0...v3.1.1\n" + + "Release can be found on https://github.com/Mazawrath/beanBOT/releases/tag/v3.2.0\n" + + "Detailed changelog can be found on https://github.com/Mazawrath/beanBOT/compare/v3.1.1...v3.2.0\n" + "\n" + - "**v3.1.1**\n" + -// "**New**\n" + -// "\t- Twitch Update\n" + -// "\t\t- beanBOT can now notify servers when a Twitch channel goes live.\n" + + "**v3.2.0**\n" + + "**New**\n" + + "\t- Added `.analyze`.\n" + + "\t\t- Using Google Cloud Vision, beanBOT can now examine a photo for objects, faces, emotions, and more.\n" + // "\t\t- Server owners can now type `.admintwitch add [twitch channel name]` to subscribe to live notifications for a twitch channel.\n" + "**Changes**\n" + - "\t- Set up Twitch to only notify servers if streamer was previously offline and has not been online within the past 10 minutes.\n" + - "\t- Changed price of `.beanlottery draw` from 400 beanCoin to 20,000 beanCoin.\n" + - "\t- Lowered time of bean lottery drawing from 7 days to 3 days."; + "\t- Disabled `.beanlottery draw`."; // "**Bug Fixes**\n" + // "\t- Fixed an issue with `.beanlottery` not giving help information.\n"; } From 80caa6d4e9c2c716e258978de81fbbdfc5c8b474 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 20:29:22 -0500 Subject: [PATCH 17/18] Fixed issue with certain operating systems not processing HTML files correctly --- .../com/mazawrath/beanbot/utilities/GoogleCloudVision.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java index 1dbdef9..cbe7ed5 100644 --- a/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java +++ b/src/main/java/com/mazawrath/beanbot/utilities/GoogleCloudVision.java @@ -15,6 +15,10 @@ public class GoogleCloudVision { + public GoogleCloudVision() { + System.setProperty("http.agent", "Chrome"); + } + public List getLabelDetection(URL image) { try (ImageAnnotatorClient vision = ImageAnnotatorClient.create()) { From 63f0e6f4c077f117dea69c300c38355e667411d4 Mon Sep 17 00:00:00 2001 From: Mazawrath Date: Thu, 10 Jan 2019 20:30:32 -0500 Subject: [PATCH 18/18] Updated gradle --- gradle/wrapper/gradle-wrapper.properties | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ece76aa..e0b3fb8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Jan 08 23:50:16 EST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip