From 34ed46d63ba533afad68229e5ccb3ea1365f951b Mon Sep 17 00:00:00 2001 From: Aleksei Gryczewski Date: Wed, 29 Jul 2020 03:17:28 -0400 Subject: [PATCH 01/58] Add build badge --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d524100..01dd605 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ -#Fashionscape Bot | [![Discord](https://img.shields.io/discord/340511685024546816?color=RED&label=Discord&style=flat-square)](https://discord.gg/Tfvxe22) +#Fashionscape Bot | +[![Discord](https://img.shields.io/discord/340511685024546816?color=RED&label=Discord&style=flat-square)](https://discord.gg/Tfvxe22) +![Java CI with Gradle](https://github.com/Salmonllama/Fashionscape-Bot/workflows/Java%20CI%20with%20Gradle/badge.svg) ---> More info coming soon! \ No newline at end of file +--> More info coming soon! From 42550e992b7958bb0ef8f52cf8892fe72d9c0312 Mon Sep 17 00:00:00 2001 From: Aleksei Gryczewski Date: Wed, 29 Jul 2020 03:20:22 -0400 Subject: [PATCH 02/58] Update Discord badge appearance for consistency --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 01dd605..157332e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ #Fashionscape Bot | -[![Discord](https://img.shields.io/discord/340511685024546816?color=RED&label=Discord&style=flat-square)](https://discord.gg/Tfvxe22) +[![Discord](https://img.shields.io/discord/340511685024546816)](https://discord.gg/Tfvxe22) ![Java CI with Gradle](https://github.com/Salmonllama/Fashionscape-Bot/workflows/Java%20CI%20with%20Gradle/badge.svg) --> More info coming soon! From f23550822f773cb350b73540fe9a91d2b9d25522 Mon Sep 17 00:00:00 2001 From: Aleksei Gryczewski Date: Wed, 29 Jul 2020 03:24:43 -0400 Subject: [PATCH 03/58] Update badge label from chat -> Discord --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 157332e..c767558 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ #Fashionscape Bot | -[![Discord](https://img.shields.io/discord/340511685024546816)](https://discord.gg/Tfvxe22) +[![Discord](https://img.shields.io/discord/340511685024546816?label=Discord)](https://discord.gg/Tfvxe22) ![Java CI with Gradle](https://github.com/Salmonllama/Fashionscape-Bot/workflows/Java%20CI%20with%20Gradle/badge.svg) --> More info coming soon! From 4b6dc282d4001e8be6d6eae7e6fbce970f178498 Mon Sep 17 00:00:00 2001 From: Aleksei Gryczewski Date: Wed, 29 Jul 2020 15:35:53 -0400 Subject: [PATCH 04/58] Revision for official privacy policy --- privacy.md | 95 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 60 insertions(+), 35 deletions(-) diff --git a/privacy.md b/privacy.md index 16c959f..6eeda36 100644 --- a/privacy.md +++ b/privacy.md @@ -1,47 +1,72 @@ # Privacy Policy +**Last updated and effective: July 29, 2020** -To comply with Discord's new Terms of Service, this document exists -to provide an overview of Fashionscape Bot and the information it -collects, and why. +In compliance with Discord’s new Terms of Service regarding Bot/API usage, the FashionScape Bot has created a privacy policy to provide transparency to users regarding the information our bot collects, why it collects this information, and how data is used. A link to this privacy policy can be found by running the `~privacy` command in any Discord server that uses our bot. -This document is also accessible to users within Discord through the -`~privacy` command. +# Stored Data +## Server Data +The FashionScape Bot tracks the “Guild Snowflakes” (also known as “Server ID”) of Discord Servers. -## The data we store -### Guild Data: -Guild Snowflakes (IDs) - Generated by Discord +## User Data +The FashionScape Bot tracks the “User Snowflakes” (also known as “User ID”) of Discord accounts. -### User Data: -User Snowflakes (IDs) - Generated by Discord +## User Content +The FashionScape Bot stores permanent links of user-provided images that have been posted to its designated gallery channels. -### User Content: -Permanent links to user-provided images supplied in gallery channels. -## Why we store it and how we use it -### Guild Data: -Guild IDs are stored so that the bot may use custom prefixes and settings -as a guild's administrators see fit. It is also used to prevent the bot -from joining a guild, should the guild prove to be abusing or misusing -either the bot, or Discord/Jagex Terms of Service. +# Why data is stored, and how we use your data +Data and information are not collected beyond the base information necessary for the FashionScape Bot to perform its necessary functions for users. Such information is outlined below as follows: -### User Data: -User IDs are stored mainly for image attribution, to give proper credit -to users who submit their screenshots to the gallery. +## Guild Data: +- Guild IDs are stored so that the bot may use custom prefixes and settings as a guild's administrators see fit. It is also used to prevent the bot from joining a guild, should the guild prove to be abusing or misusing either the bot, or Discord/Jagex Terms of Service. -User IDs may also be used to prevent a user from utilizing some or all -features of the bot, if the user is proven to be abusing or misusing it. +## User Data: +- User IDs are stored so we can track and give attribution to users who submit screenshots to the FashionScape Bot’s gallery. +- User IDs may also be stored to deny a user from utilizing some or all features of the bot, if we suspect the user to be abusing or misusing our services. -User Content: -Images posted to gallery channels are not stored directly. The bot -first uploads them to a private imgur gallery, and retrieves the link. -This link is then stored in the bot's database as part of the gallery. +## User Content: +- Images posted to gallery channels are not stored directly by the FashionScape Bot. Rather, the bot first uploads them to a private imgur gallery, and retrieves the link. This link is then stored in the bot's database as part of the gallery. +- Text-based content that is sent in the same message as the image being posted. In Discord, this will be the message posted in the “Add A Comment” box in an image upload. [Here](https://media.discordapp.net/attachments/458346171681996815/737738392929829007/meta-describe.png?width=400&height=293) is an example. + - This meta information is only collected so users may add clarifying information to their outfit submissions, such as components used in its creation. In addition, it can be used to credit someone if the outfit was not self-made. -## Accessing and deleting your data -You may request deletion of your submitted content through myself -or another administrator. To do this, either join our discord and -ping one of us, or create an issue on GitHub. +# Accessing and deleting your data +You may request deletion of your data by contacting Salmonllama#5727 or another FashionScapers Administrator. To do this, either join our discord and ping one of us, or create an issue on GitHub. A link to both are provided at the bottom of this privacy policy. -## Questions, Comments, Concerns -Any further questions or concerns may be submitted through the -[Fashionscape Server](https://discord.com/invite/Tfvxe22)'s #report-issues-here channel, or directed to -Salmonllama#5727 or LisaaRS#2604. +# Our Disclosure of Your Information. +We are not in the business of selling your information. We consider this information to be a vital part of our relationship with you. There are, however, certain circumstances in which we may share your information with certain third parties, as set forth below: +- Consent: We may transfer your information with your consent. +- Related Companies: We may also share your information with our Related Companies for purposes consistent with this Privacy Policy. For example, because the FashionScape Bot stores submissions on a private Imgur gallery, that information is sent to Imgur, who are considered to be a “related company.” +- Legal Requirements: We may disclose your information if required to do so by law or in the good faith belief that such action is necessary to (i) comply with a legal obligation, (ii) protect and defend the rights or property of the Company or Related Companies, (iii) protect the personal safety of users of the Services or the public, or (iv) protect against legal liability. + +# Unsolicited Suggestions +You may provide us with ideas for new FashionScape Bot functions, or modifications to existing features, and other unsolicited submissions (collectively, “Unsolicited Suggestions”). All Unsolicited Suggestions shall be deemed to be non-confidential and we shall be free to reproduce, use, disclose, and distribute such unsolicited Information to others without limitation or attribution. + +# Children +Our Services are for users age 13 and over and we do not knowingly collect personal information from children under the age of 13. If you are a parent or guardian of a child under the age of 13 and believe he or she has disclosed personal information to us please contact us through one of our listed contact outlets at the end of this privacy policy. Note: In some countries, the age of digital consent is older than 13. If you are in those countries, you must be at least that age to use the Services. For example, for residents of the EEA, where processing of personal information is based on consent, FashionScape Bot will not knowingly engage in that processing for users under the age of consent established by applicable data protection law. If we learn that we are engaged in that processing with such users, we will halt such processing and will take reasonable measures to promptly remove applicable information from our records. + +# Security +We take reasonable steps to protect the information provided via the Services from loss, misuse, and unauthorized access, disclosure, alteration, or destruction. However, no Internet or email transmission is ever fully secure or error free. In particular, email sent to or from the Services may not be secure. Therefore, you should take special care in deciding what information you send to us via email. Please keep this in mind when disclosing any information via the Internet. + +# Your Data Rights & Choices +- **How can I access the personal data you have about me?** + +If you would like to submit a data access request, please contact us through one of our listed contact outlets at the end of this privacy policy. We will then start the process and provide you a link to access the personal data that FashionScape Bot has on you within 30 days. + +- **How do I correct, update, amend, or delete the personal data you have about me?** + +Please contact us with an explanation of what data subject right you are seeking to exercise. For your protection, we may take steps to verify identity before responding to your request. + +- **How do I object or restrict the manner in which Discord processes my personal data?** +You have a right to ask us to stop using or limit our use of your personal data in certain circumstances—for example, if we have no lawful basis to keep using your data, or if you think your personal data is inaccurate. + +# Changes to this Privacy Policy +We reserve the right to update or modify this Privacy Policy at any time and from time to time without prior notice. Please review this policy periodically, and especially before you provide any information. This Privacy Policy was last updated on the date indicated above. Your continued use of the Services after any changes or revisions to this Privacy Policy shall indicate your agreement with the terms of such revised Privacy Policy. + +# Contact +If you need to contact us for assistance regarding information outlined in this policy, you may contact us through the following methods: + +Salmonllama’s Discord Tag: Salmonllama#5727 +LisaaRS’s Discord Tag: LisaaRS#2604. +FashionScapers Discord Server: [https://discord.com/invite/Tfvxe22](https://discord.com/invite/Tfvxe22). Please use the “#report-issues-here” channel. +Github: [https://github.com/Salmonllama/Fashionscape-Bot/issues/new](https://github.com/Salmonllama/Fashionscape-Bot/issues/new) +Email: salmonllama999@gmail.com From 36d733f97b4531a29a60625c5dbbb425a61eea4b Mon Sep 17 00:00:00 2001 From: Aleksei Gryczewski Date: Wed, 29 Jul 2020 15:36:58 -0400 Subject: [PATCH 05/58] Update newlines in Contact section --- privacy.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/privacy.md b/privacy.md index 6eeda36..ce60103 100644 --- a/privacy.md +++ b/privacy.md @@ -67,6 +67,6 @@ If you need to contact us for assistance regarding information outlined in this Salmonllama’s Discord Tag: Salmonllama#5727 LisaaRS’s Discord Tag: LisaaRS#2604. -FashionScapers Discord Server: [https://discord.com/invite/Tfvxe22](https://discord.com/invite/Tfvxe22). Please use the “#report-issues-here” channel. -Github: [https://github.com/Salmonllama/Fashionscape-Bot/issues/new](https://github.com/Salmonllama/Fashionscape-Bot/issues/new) -Email: salmonllama999@gmail.com +FashionScapers Discord Server: [https://discord.com/invite/Tfvxe22](https://discord.com/invite/Tfvxe22). Please use the “#report-issues-here” channel. +Github: [https://github.com/Salmonllama/Fashionscape-Bot/issues/new](https://github.com/Salmonllama/Fashionscape-Bot/issues/new) +Email: salmonllama999@gmail.com From 1b167ae369d5242cd005a85044a6093d5fbf3f5e Mon Sep 17 00:00:00 2001 From: Aleksei Gryczewski Date: Wed, 29 Jul 2020 15:37:23 -0400 Subject: [PATCH 06/58] Update privacy.md --- privacy.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/privacy.md b/privacy.md index ce60103..9f88c45 100644 --- a/privacy.md +++ b/privacy.md @@ -65,8 +65,8 @@ We reserve the right to update or modify this Privacy Policy at any time and fro # Contact If you need to contact us for assistance regarding information outlined in this policy, you may contact us through the following methods: -Salmonllama’s Discord Tag: Salmonllama#5727 -LisaaRS’s Discord Tag: LisaaRS#2604. +Salmonllama’s Discord Tag: Salmonllama#5727. +LisaaRS’s Discord Tag: LisaaRS#2604. FashionScapers Discord Server: [https://discord.com/invite/Tfvxe22](https://discord.com/invite/Tfvxe22). Please use the “#report-issues-here” channel. Github: [https://github.com/Salmonllama/Fashionscape-Bot/issues/new](https://github.com/Salmonllama/Fashionscape-Bot/issues/new) Email: salmonllama999@gmail.com From 176711a858ecae3f245a9ec039b116b01a3f4ec6 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sun, 6 Sep 2020 12:13:01 -0400 Subject: [PATCH 07/58] Added logger --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index ac7d1e7..95a97b5 100644 --- a/build.gradle +++ b/build.gradle @@ -26,6 +26,7 @@ dependencies { implementation 'org.javacord:javacord:3.0.6' implementation 'com.vdurmont:emoji-java:4.0.0' implementation 'com.squareup.okhttp3:okhttp:4.4.0' + implementation 'ch.qos.logback:logback-classic:1.2.3' testImplementation group: 'junit', name: 'junit', version: '4.12' } From 28fc5c202c506e9b5d32314f6629304787362b1d Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sun, 6 Sep 2020 12:13:23 -0400 Subject: [PATCH 08/58] scape.fashion scaffolding --- .../scapefashion/ScapeFashionConnection.java | 92 +++++++++++++++++++ .../scapefashion/ScapeFashionItem.java | 63 +++++++++++++ .../scapefashion/ScapeFashionResult.java | 32 +++++++ 3 files changed, 187 insertions(+) create mode 100644 src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java create mode 100644 src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java create mode 100644 src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionResult.java diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java new file mode 100644 index 0000000..947bf7c --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.endpoints.scapefashion; + +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +public class ScapeFashionConnection { + private final String RS3_REQUEST_URL = "https://api.rune.scape.fashion"; + private final String RS3_LINK_URL = "https://rune.scape.fashion"; + + private final String OSRS_REQUEST_URL = "https://api.scape.fashion"; + private final String OSRS_LINK_URL = "https://scape.fashion"; + + private final String USER_AGENT = "Fashionscape-Bot github.com/salmonllama/fashionscape-bot"; + + private final OkHttpClient client; + private final Request.Builder requestBuilder; + + public ScapeFashionConnection() { + + client = new OkHttpClient().newBuilder().build(); + requestBuilder = new Request.Builder(); + } + + // Uses the color endpoint to search for items + // Returns an object with a list of the top results, and a link redirect to see full list + public JSONArray osrsColor(String color) throws IOException { + String url = OSRS_REQUEST_URL + "/colors/" + encode(color); + System.out.println(url); + + return makeRequest(url); + } + + private void osrsColor(String color, String slot) { + + } + + private void osrsItem(String item) { + + } + + private void osrsItem(String item, String slot) { + + } + + private void rs3Color(String color) { + + } + + private void rs3Color(String color, String slot) { + + } + + private void rs3Item(String item) { + + } + + private void rs3Item(String item, String slot) { + + } + + private JSONArray makeRequest(String url) throws IOException { + // Returns the items JSONObject + Request request = requestBuilder.get().url(url).addHeader("User-Agent", USER_AGENT).build(); + + Response response = client.newCall(request).execute(); + // returns a JSONArray of JSONObjects + System.out.println(response.body().string()); + return new JSONObject(response.body().string()).getJSONArray("items"); + } + + private String encode(String value) throws UnsupportedEncodingException { + return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); + } + + private ScapeFashionResult extract(JSONObject json) { + + return null; + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java new file mode 100644 index 0000000..d245bbd --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.endpoints.scapefashion; + +public class ScapeFashionItem { + private final String name; + private final String slot; + private final String link; + private final String[] colors; + private final float match; + + private ScapeFashionItem(Builder builder) { + this.name = builder.name; + this.slot = builder.slot; + this.link = builder.link; + this.colors = builder.colors; + this.match = builder.match; + } + + public static class Builder { + private String name; + private String slot; + private String link; + private String[] colors; + private float match; + + public Builder() { + + } + + public Builder setName(String name) { + this.name = name; + return this; + } + + public Builder setSlot(String slot) { + this.slot = slot; + return this; + } + + public Builder setLink(String link) { + this.link = link; + return this; + } + + public Builder setColors(String[] colors) { + this.colors = colors; + return this; + } + + public Builder setMatch(float match) { + this.match = match; + return this; + } + + public ScapeFashionItem build() { + return new ScapeFashionItem(this); + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionResult.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionResult.java new file mode 100644 index 0000000..8bc8518 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionResult.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.endpoints.scapefashion; + +import java.util.ArrayList; +import java.util.Collection; + +public class ScapeFashionResult { + private final String link; + private Collection items; + + public ScapeFashionResult(String link) { + this.link = link; + items = new ArrayList<>(); + } + + public ScapeFashionResult addItem(ScapeFashionItem item) { + this.items.add(item); + return this; + } + + public String getLink() { + return link; + } + + public Collection getItems() { + return items; + } +} From c93457123ebf25712d5690fb6d6be396d5c1076a Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sun, 6 Sep 2020 12:13:34 -0400 Subject: [PATCH 09/58] Testing and logging --- .../fsbot/commands/developer/TestCommand.java | 20 +++++++------------ src/main/resources/logback.xml | 18 +++++++++++++++++ 2 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 src/main/resources/logback.xml diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java index 3cac897..a32ef6f 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java @@ -5,18 +5,15 @@ package dev.salmonllama.fsbot.commands.developer; -import dev.salmonllama.fsbot.database.controllers.OutfitController; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; import dev.salmonllama.fsbot.guthix.Command; import dev.salmonllama.fsbot.guthix.CommandContext; import dev.salmonllama.fsbot.guthix.CommandPermission; import dev.salmonllama.fsbot.guthix.PermissionType; -import org.javacord.api.entity.message.Message; -import org.javacord.api.entity.permission.Role; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.stream.Collectors; public class TestCommand extends Command { @Override public String name() { return "Test"; } @@ -28,15 +25,12 @@ public class TestCommand extends Command { @Override public void onCommand(CommandContext ctx) { - Message msg = ctx.getMessage(); + ScapeFashionConnection conn = new ScapeFashionConnection(); - Collection roles = msg.getMentionedRoles(); - - roles.stream().map(Role::getIdAsString).collect(Collectors.toList()).forEach(id -> { - ctx.getServer().ifPresent(server -> { - Role r = server.getRoleById(id).orElse(null); - ctx.reply(r.getMentionTag()); - }); - }); + try { + ctx.reply(conn.osrsColor("#00ff00").toString(2)); + } catch (Exception e) { + ctx.reply(e.getMessage()); + } } } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..7db775f --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,18 @@ + + + + + + + %d{HH:mm:ss.SSS} %boldCyan(%-34.-34thread) %red(%10.10X{jda.shard}) %boldGreen(%-15.-15logger{0}) %highlight(%-6level) %msg%n + + + + + + + + From b826de55a1c9ca8d5104ddce4912c5d0d6c62fa2 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sun, 6 Sep 2020 18:41:16 -0400 Subject: [PATCH 10/58] incremented version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 03ce3b2..b0b1f08 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ plugins { } group 'dev.salmonllama' -version '2.0.0' +version '2.0.2' sourceCompatibility = 11 From 8407c54a91f3df22992a88ab03008313860e794e Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sun, 6 Sep 2020 18:41:16 -0400 Subject: [PATCH 11/58] Revert "incremented version" This reverts commit b826de55a1c9ca8d5104ddce4912c5d0d6c62fa2. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b0b1f08..03ce3b2 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ plugins { } group 'dev.salmonllama' -version '2.0.2' +version '2.0.0' sourceCompatibility = 11 From 877e3656169ccef7f9ceb84057f5e7bf0c4829c0 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sun, 6 Sep 2020 18:53:02 -0400 Subject: [PATCH 12/58] Version increment --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 203ec66..49e6b08 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ plugins { apply plugin: 'io.spring.dependency-management' group 'dev.salmonllama' -version '2.0.1' +version '2.0.2' sourceCompatibility = 11 From df6c208a4c16dd9abcbb3c29329cd6e70b4a40e7 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sun, 6 Sep 2020 19:17:01 -0400 Subject: [PATCH 13/58] Tweaked Dockerfile for proper cp rule --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 22e54e5..251b5d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,6 @@ EXPOSE 8080 RUN mkdir /app -COPY --from=build /home/gradle/src/build/libs/*.jar /app/fashionscape-bot.jar +COPY --from=build /home/gradle/src/build/libs/fsbot*.jar /app/ -ENTRYPOINT ["java","-jar","-Xmx800m","/app/fashionscape-bot.jar"] +ENTRYPOINT ["java","-jar","-Xmx800m","/app/fsbot*.jar"] From 806ea326ecf180fb3f3e77c9ceefa7d78a2fe8d7 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Mon, 7 Sep 2020 16:07:17 -0400 Subject: [PATCH 14/58] scape.fashion WIP --- .../fsbot/commands/developer/TestCommand.java | 2 +- .../scapefashion/ScapeFashionConnection.java | 22 +++++++++++++++++-- .../scapefashion/ScapeFashionItem.java | 20 +++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java index a32ef6f..7c109ee 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java @@ -28,7 +28,7 @@ public class TestCommand extends Command { ScapeFashionConnection conn = new ScapeFashionConnection(); try { - ctx.reply(conn.osrsColor("#00ff00").toString(2)); + conn.osrsColor("#00ff00"); } catch (Exception e) { ctx.reply(e.getMessage()); } diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java index 947bf7c..ace0aaa 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java @@ -13,8 +13,13 @@ import org.json.JSONObject; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.net.URI; import java.net.URLEncoder; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; +import java.util.concurrent.CompletableFuture; public class ScapeFashionConnection { private final String RS3_REQUEST_URL = "https://api.rune.scape.fashion"; @@ -36,11 +41,11 @@ public class ScapeFashionConnection { // Uses the color endpoint to search for items // Returns an object with a list of the top results, and a link redirect to see full list - public JSONArray osrsColor(String color) throws IOException { + public void osrsColor(String color) throws IOException { String url = OSRS_REQUEST_URL + "/colors/" + encode(color); System.out.println(url); - return makeRequest(url); + makeRequestNEW(url); } private void osrsColor(String color, String slot) { @@ -81,6 +86,19 @@ public class ScapeFashionConnection { return new JSONObject(response.body().string()).getJSONArray("items"); } + private void makeRequestNEW(String url) { + var client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_2).build(); + + HttpRequest request = HttpRequest.newBuilder(URI.create(url)) + .header("Content-Type", "application/json") + .header("User-Agent", USER_AGENT) + .GET() + .build(); + + CompletableFuture> response = client.sendAsync(request, HttpResponse.BodyHandlers.ofString()); + response.thenAcceptAsync(res -> System.out.println(res.body())); + } + private String encode(String value) throws UnsupportedEncodingException { return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); } diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java index d245bbd..392715c 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java @@ -20,6 +20,26 @@ public class ScapeFashionItem { this.match = builder.match; } + public String getName() { + return name; + } + + public String getSlot() { + return slot; + } + + public String getLink() { + return link; + } + + public String[] getColors() { + return colors; + } + + public float getMatch() { + return match; + } + public static class Builder { private String name; private String slot; From c18c6f1a69344ae6fa8c1d4b2cf883806f19989a Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Mon, 7 Sep 2020 23:15:33 -0400 Subject: [PATCH 15/58] Edited dockerfile for consecutive runs in the same container --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 251b5d8..73f8c04 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,7 @@ ENV ENVIRONMENT=PROD COPY --chown=gradle:gradle . /home/gradle/src WORKDIR /home/gradle/src +RUN gradle clean --no-daemon RUN gradle build --no-daemon FROM openjdk:11-jre-slim @@ -12,6 +13,6 @@ EXPOSE 8080 RUN mkdir /app -COPY --from=build /home/gradle/src/build/libs/fsbot*.jar /app/ +COPY --from=build /home/gradle/src/build/libs/*.jar /app/fashionscape-bot.jar -ENTRYPOINT ["java","-jar","-Xmx800m","/app/fsbot*.jar"] +ENTRYPOINT ["java","-jar","-Xmx800m","/app/fashionscape-bot.jar"] From ee3fe8aecc02a634aa85e6d1c77aeeabbb696e80 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Tue, 8 Sep 2020 20:13:19 -0400 Subject: [PATCH 16/58] Put ENV var in correct container --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 73f8c04..ac1188d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,5 @@ FROM gradle:6.6.1-jdk11 AS build -ENV ENVIRONMENT=PROD - COPY --chown=gradle:gradle . /home/gradle/src WORKDIR /home/gradle/src RUN gradle clean --no-daemon @@ -11,6 +9,8 @@ FROM openjdk:11-jre-slim EXPOSE 8080 +ENV ENVIRONMENT=PROD + RUN mkdir /app COPY --from=build /home/gradle/src/build/libs/*.jar /app/fashionscape-bot.jar From 72f6d75cdad7115cda6130e65f25e5f8829b0f52 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Tue, 8 Sep 2020 20:14:37 -0400 Subject: [PATCH 17/58] Remove debug messages --- .../java/dev/salmonllama/fsbot/listeners/ImageListener.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/listeners/ImageListener.java b/src/main/java/dev/salmonllama/fsbot/listeners/ImageListener.java index 021d49d..986b203 100644 --- a/src/main/java/dev/salmonllama/fsbot/listeners/ImageListener.java +++ b/src/main/java/dev/salmonllama/fsbot/listeners/ImageListener.java @@ -50,11 +50,9 @@ public class ImageListener implements MessageCreateListener { if (System.getenv("ENVIRONMENT") != null) { // Upload the image(s) to Imgur, store in database, log the stored images. - System.out.println("PROD environment, uploading"); uploadAndStore(event, channel, image); } else { // Store the image(s) in database, log the stored images. - System.out.println("DEV environment, not uploading"); store(event, channel, image); } }); From 87c08d5c97e0fb06fecd87fe03b02745160e63be Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Tue, 8 Sep 2020 20:43:47 -0400 Subject: [PATCH 18/58] update for ease of dockering --- Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a50a986..361821d 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,12 @@ USERNAME=salmonllama IMAGE=fsbot TAG := $(shell git describe --tags) + BUILD=${USERNAME}/${IMAGE}:${TAG} + LATEST=${USERNAME}/${IMAGE}:latest docker: echo ${TAG} - docker build -t ${USERNAME}/${IMAGE}:${TAG} . \ No newline at end of file + docker build -t ${BUILD} . + docker tag ${BUILD} ${LATEST} + docker push ${BUILD} + docker push ${LATEST} \ No newline at end of file From 9d85f8e6d6a0d38b0f5ceb7bcf3e5490267732e3 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Tue, 8 Sep 2020 23:36:45 -0400 Subject: [PATCH 19/58] Added gson dep --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 6e271dd..e62a1fd 100644 --- a/build.gradle +++ b/build.gradle @@ -30,6 +30,7 @@ dependencies { implementation 'com.vdurmont:emoji-java:4.0.0' implementation 'com.squareup.okhttp3:okhttp:4.4.0' implementation 'ch.qos.logback:logback-classic:1.2.3' + implementation 'com.google.code.gson:gson:2.8.6' implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-web' From eafdc7fbe6e343faef248630dffbb2a8b3430023 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Tue, 8 Sep 2020 23:39:55 -0400 Subject: [PATCH 20/58] Added OSRS request logic --- .../scapefashion/ScapeFashionConnection.java | 76 ++++++++----------- 1 file changed, 33 insertions(+), 43 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java index ace0aaa..c3f5d5d 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java @@ -5,13 +5,7 @@ package dev.salmonllama.fsbot.endpoints.scapefashion; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.IOException; +import com.google.gson.Gson; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; @@ -19,7 +13,6 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; -import java.util.concurrent.CompletableFuture; public class ScapeFashionConnection { private final String RS3_REQUEST_URL = "https://api.rune.scape.fashion"; @@ -28,36 +21,44 @@ public class ScapeFashionConnection { private final String OSRS_REQUEST_URL = "https://api.scape.fashion"; private final String OSRS_LINK_URL = "https://scape.fashion"; - private final String USER_AGENT = "Fashionscape-Bot github.com/salmonllama/fashionscape-bot"; - - private final OkHttpClient client; - private final Request.Builder requestBuilder; - - public ScapeFashionConnection() { - - client = new OkHttpClient().newBuilder().build(); - requestBuilder = new Request.Builder(); - } + public ScapeFashionConnection() {} // Uses the color endpoint to search for items // Returns an object with a list of the top results, and a link redirect to see full list - public void osrsColor(String color) throws IOException { - String url = OSRS_REQUEST_URL + "/colors/" + encode(color); - System.out.println(url); + public ScapeFashionResult osrsColor(String color) throws Exception { + String uri = OSRS_REQUEST_URL + "/colors/" + encode(color); + String link = OSRS_LINK_URL + "/colors/" + encode(color); - makeRequestNEW(url); + var response = makeRequest(uri); + response.setLink(link); + return response; } - private void osrsColor(String color, String slot) { + private ScapeFashionResult osrsColor(String color, String slot) throws Exception { + String uri = OSRS_REQUEST_URL + "/colors/" + encode(color) + "?slot=" + encode(slot); + String link = OSRS_LINK_URL + "/colors/" + encode(color) + "?slot=" + encode(slot); + var response = makeRequest(uri); + response.setLink(link); + return response; } - private void osrsItem(String item) { + private ScapeFashionResult osrsItem(String item) throws Exception { + String uri = OSRS_REQUEST_URL + "/items/" + encode(item); + String link = OSRS_LINK_URL + "/items/" + encode(item); + var response = makeRequest(uri); + response.setLink(link); + return response; } - private void osrsItem(String item, String slot) { + private ScapeFashionResult osrsItem(String item, String slot) throws Exception { + String uri = OSRS_REQUEST_URL + "/items/" + encode(item) + "?slot=" + encode(slot); + String link = OSRS_LINK_URL + "/items/" + encode(item) + "?slot=" + encode(slot); + var response = makeRequest(uri); + response.setLink(link); + return response; } private void rs3Color(String color) { @@ -76,35 +77,24 @@ public class ScapeFashionConnection { } - private JSONArray makeRequest(String url) throws IOException { - // Returns the items JSONObject - Request request = requestBuilder.get().url(url).addHeader("User-Agent", USER_AGENT).build(); - - Response response = client.newCall(request).execute(); - // returns a JSONArray of JSONObjects - System.out.println(response.body().string()); - return new JSONObject(response.body().string()).getJSONArray("items"); - } - - private void makeRequestNEW(String url) { + private ScapeFashionResult makeRequest(String url) throws Exception { var client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_2).build(); + String USER_AGENT = "Fashionscape-Bot github.com/salmonllama/fashionscape-bot"; + HttpRequest request = HttpRequest.newBuilder(URI.create(url)) .header("Content-Type", "application/json") .header("User-Agent", USER_AGENT) .GET() .build(); - CompletableFuture> response = client.sendAsync(request, HttpResponse.BodyHandlers.ofString()); - response.thenAcceptAsync(res -> System.out.println(res.body())); + Gson gson = new Gson(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + var json = response.body(); + return gson.fromJson(json, ScapeFashionResult.class); } private String encode(String value) throws UnsupportedEncodingException { return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); } - - private ScapeFashionResult extract(JSONObject json) { - - return null; - } } From 1cb720d09fe2517b93785bc91c5eff96ad74390f Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Tue, 8 Sep 2020 23:40:24 -0400 Subject: [PATCH 21/58] Added simple toString() for testing --- .../fsbot/endpoints/scapefashion/ScapeFashionItem.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java index 392715c..a9faa13 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java @@ -40,6 +40,11 @@ public class ScapeFashionItem { return match; } + @Override + public String toString() { + return String.format("Item: [%s]", name); + } + public static class Builder { private String name; private String slot; From 083a5d47e6180d6816e23fec8a13dc1f72f1d4f2 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Tue, 8 Sep 2020 23:40:54 -0400 Subject: [PATCH 22/58] Modified for serializeability --- .../scapefashion/ScapeFashionResult.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionResult.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionResult.java index 8bc8518..00b76fd 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionResult.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionResult.java @@ -5,16 +5,22 @@ package dev.salmonllama.fsbot.endpoints.scapefashion; +import com.google.gson.annotations.SerializedName; + import java.util.ArrayList; -import java.util.Collection; +import java.util.List; public class ScapeFashionResult { - private final String link; - private Collection items; + private String link; + @SerializedName("items") + private final List items = new ArrayList<>(); + + public ScapeFashionResult() { + + } public ScapeFashionResult(String link) { this.link = link; - items = new ArrayList<>(); } public ScapeFashionResult addItem(ScapeFashionItem item) { @@ -22,11 +28,15 @@ public class ScapeFashionResult { return this; } + public void setLink(String link) { + this.link = link; + } + public String getLink() { return link; } - public Collection getItems() { + public List getItems() { return items; } } From d2f7e1276511ba418c711de0a97dd3a7d807c271 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Wed, 9 Sep 2020 23:08:40 -0400 Subject: [PATCH 23/58] Completed logic for RS3 --- .../scapefashion/ScapeFashionConnection.java | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java index c3f5d5d..6676f2a 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java @@ -34,9 +34,9 @@ public class ScapeFashionConnection { return response; } - private ScapeFashionResult osrsColor(String color, String slot) throws Exception { - String uri = OSRS_REQUEST_URL + "/colors/" + encode(color) + "?slot=" + encode(slot); - String link = OSRS_LINK_URL + "/colors/" + encode(color) + "?slot=" + encode(slot); + private ScapeFashionResult osrsColor(String color, ScapeFashionSlotOSRS slot) throws Exception { + String uri = OSRS_REQUEST_URL + "/colors/" + encode(color) + "?slot=" + encode(slot.getValue()); + String link = OSRS_LINK_URL + "/colors/" + encode(color) + "?slot=" + encode(slot.getValue()); var response = makeRequest(uri); response.setLink(link); @@ -52,29 +52,49 @@ public class ScapeFashionConnection { return response; } - private ScapeFashionResult osrsItem(String item, String slot) throws Exception { - String uri = OSRS_REQUEST_URL + "/items/" + encode(item) + "?slot=" + encode(slot); - String link = OSRS_LINK_URL + "/items/" + encode(item) + "?slot=" + encode(slot); + private ScapeFashionResult osrsItem(String item, ScapeFashionSlotOSRS slot) throws Exception { + String uri = OSRS_REQUEST_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); + String link = OSRS_LINK_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); var response = makeRequest(uri); response.setLink(link); return response; } - private void rs3Color(String color) { + private ScapeFashionResult rs3Color(String color) throws Exception { + String uri = RS3_REQUEST_URL + "/colors/" + encode(color); + String link = RS3_LINK_URL + "/colors/" + encode(color); + var response = makeRequest(uri); + response.setLink(link); + return response; } - private void rs3Color(String color, String slot) { + private ScapeFashionResult rs3Color(String color, ScapeFashionSlotRs3 slot) throws Exception { + String uri = RS3_REQUEST_URL + "/colors/" + encode(color) + "?slot=" + encode(slot.getValue()); + String link = RS3_LINK_URL + "/colors/" + encode(color) + "?slot=" + encode(slot.getValue()); + var response = makeRequest(uri); + response.setLink(link); + return response; } - private void rs3Item(String item) { + private ScapeFashionResult rs3Item(String item) throws Exception { + String uri = RS3_REQUEST_URL + "/items/" + encode(item); + String link = RS3_LINK_URL + "/items/" + encode(item); + var response = makeRequest(uri); + response.setLink(link); + return response; } - private void rs3Item(String item, String slot) { + private ScapeFashionResult rs3Item(String item, ScapeFashionSlotRs3 slot) throws Exception { + String uri = RS3_REQUEST_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); + String link = RS3_LINK_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); + var response = makeRequest(uri); + response.setLink(link); + return response; } private ScapeFashionResult makeRequest(String url) throws Exception { From cfb60cc8d6329be7b284c5ccbedac8519f15dc52 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Wed, 9 Sep 2020 23:09:11 -0400 Subject: [PATCH 24/58] Slot enums with matcher for command use --- .../scapefashion/ScapeFashionSlotOSRS.java | 42 +++++++++++++++++ .../scapefashion/ScapeFashionSlotRs3.java | 45 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotOSRS.java create mode 100644 src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotRs3.java diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotOSRS.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotOSRS.java new file mode 100644 index 0000000..7a15895 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotOSRS.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.endpoints.scapefashion; + +import java.util.Optional; + +// Source: https://github.com/ncpierson/fashionscape/blob/master/api/data/tools/slot.js +public enum ScapeFashionSlotOSRS { + AMMUNITION("ammunition"), + BODY("body"), + CAPE("cape"), + FEET("feet"), + HAND("hand"), + HEAD("head"), + LEG("leg"), + NECK("neck"), + RING("ring"), + SHIELD("shield"), + WEAPON("weapon"); + + private final String value; + + ScapeFashionSlotOSRS(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public static Optional matches(String s) { + try { + var slot = ScapeFashionSlotOSRS.valueOf(s); + return Optional.of(slot); + } catch (IllegalArgumentException e) { + return Optional.empty(); + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotRs3.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotRs3.java new file mode 100644 index 0000000..d99cbe1 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotRs3.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.endpoints.scapefashion; + +import java.util.Optional; + +// Source: https://github.com/ncpierson/fashionscape/blob/master/api/data/tools/slot.js +public enum ScapeFashionSlotRs3 { + AMMUNITION("ammunition"), + BACK("back"), + FEET("feet"), + HAND("hand"), + HEAD("head"), + LEG("leg"), + MAIN_HAND("main_hand"), + NECK("neck"), + OFF_HAND("off-hand"), + POCKET("pocket"), + RING("ring"), + SIGIL("sigil"), + TORSO("torso"), + TWO_HANDED("two-handed"); + + private final String value; + + ScapeFashionSlotRs3(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public static Optional matches(String s) { + try { + var slot = ScapeFashionSlotRs3.valueOf(s); + return Optional.of(slot); + } catch (IllegalArgumentException e) { + return Optional.empty(); + } + } +} From 7d0fbe37d41286ed90d6bef2c123caf09c39bd52 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Thu, 10 Sep 2020 21:37:20 -0400 Subject: [PATCH 25/58] enum-ified command categories --- .../developer/BlacklistUserCommand.java | 7 +- .../developer/CreateGalleryCommand.java | 7 +- .../commands/developer/DefaultCommand.java | 7 +- .../commands/developer/InviteCommand.java | 7 +- .../commands/developer/PermissionCommand.java | 7 +- .../fsbot/commands/developer/TestCommand.java | 10 +- .../fsbot/commands/general/ColorCommand.java | 7 +- .../fsbot/commands/general/ColorsCommand.java | 7 +- .../fsbot/commands/general/HelpCommand.java | 8 +- .../fsbot/commands/general/OutfitCommand.java | 7 +- .../fsbot/commands/general/PingCommand.java | 7 +- .../commands/general/PrivacyCommand.java | 7 +- .../general/ShowGalleriesCommand.java | 7 +- .../fsbot/commands/general/StatsCommand.java | 7 +- .../commands/osrssearch/OsrsBodyCommand.java | 26 ++++ .../fsbot/commands/staff/EchoCommand.java | 7 +- .../commands/staff/GetOutfitCommand.java | 19 ++- .../commands/staff/GetServersCommand.java | 8 +- .../commands/staff/OutfitInfoCommand.java | 40 +++--- .../commands/staff/RemoveOutfitCommand.java | 109 ++++++++-------- .../fsbot/commands/staff/RetagCommand.java | 119 +++++++++--------- .../commands/staff/SetStatusCommand.java | 8 +- .../commands/staff/WelcomeMessageCommand.java | 7 +- .../dev/salmonllama/fsbot/guthix/Command.java | 2 +- .../fsbot/guthix/CommandCategory.java | 24 ++++ 25 files changed, 223 insertions(+), 248 deletions(-) create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/BlacklistUserCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/BlacklistUserCommand.java index 5a8cfe4..a83490d 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/BlacklistUserCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/BlacklistUserCommand.java @@ -2,10 +2,7 @@ package dev.salmonllama.fsbot.commands.developer; import dev.salmonllama.fsbot.database.controllers.UserBlacklistController; import dev.salmonllama.fsbot.database.models.UserBlacklist; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import java.util.Arrays; @@ -15,7 +12,7 @@ public class BlacklistUserCommand extends Command { @Override public String name() { return "Blacklist User"; } @Override public String description() { return "Adds the user to the bot's blacklist, preventing them from using any commands or features"; } @Override public String usage() { return "blacklistuser "; } - @Override public String category() { return "Developer"; } + @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "owner"); } @Override public Collection aliases() { return Arrays.asList("blacklistuser", "bluser", "sabusr"); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/CreateGalleryCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/CreateGalleryCommand.java index 5838bc6..3c6d3c0 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/CreateGalleryCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/CreateGalleryCommand.java @@ -10,10 +10,7 @@ import com.vdurmont.emoji.EmojiParser; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.database.controllers.GalleryController; import dev.salmonllama.fsbot.database.models.GalleryChannel; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.util.logging.ExceptionLogger; @@ -26,7 +23,7 @@ public class CreateGalleryCommand extends Command { // TODO: This command needs @Override public String name() { return "Create Gallery"; } @Override public String description() { return "Creates a channel gallery, tracking any posted images"; } @Override public String usage() { return "creategallery "; } - @Override public String category() { return "Developer"; } + @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "owner"); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("creategallery", "addgallery", "newgallery")); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/DefaultCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/DefaultCommand.java index ad811a4..ee3ac6e 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/DefaultCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/DefaultCommand.java @@ -1,9 +1,6 @@ package dev.salmonllama.fsbot.commands.developer; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import java.util.Collection; @@ -13,7 +10,7 @@ public class DefaultCommand extends Command { @Override public String name() { return "Default"; } @Override public String description() { return "The command that gets invoked when the prefix is used, but the command is not recognized"; } @Override public String usage() { return "you don't use this command"; } - @Override public String category() { return "Invisible"; } + @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.OWNER); } @Override public Collection aliases() { return Collections.singletonList("default"); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/InviteCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/InviteCommand.java index 487e8de..8c49b64 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/InviteCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/InviteCommand.java @@ -5,10 +5,7 @@ package dev.salmonllama.fsbot.commands.developer; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.DiscordApi; import org.javacord.api.entity.channel.TextChannel; @@ -20,7 +17,7 @@ public class InviteCommand extends Command { @Override public String name() { return "Invite"; } @Override public String description() { return "Spits out a bot invite"; } @Override public String usage() { return "invite"; } - @Override public String category() { return "Developer"; } + @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "owner"); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("invite", "inv")); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/PermissionCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/PermissionCommand.java index 676c7d6..bc70722 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/PermissionCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/PermissionCommand.java @@ -7,10 +7,7 @@ package dev.salmonllama.fsbot.commands.developer; import dev.salmonllama.fsbot.database.controllers.StaticPermissionController; import dev.salmonllama.fsbot.database.models.StaticPermission; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.user.User; import org.javacord.api.util.logging.ExceptionLogger; @@ -24,7 +21,7 @@ public class PermissionCommand extends Command { @Override public String name() { return "Permission"; } @Override public String description() { return "Manages a user's static permissions"; } @Override public String usage() { return "permission "; } - @Override public String category() { return "Staff"; } + @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.OWNER); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("permission", "permissions", "perm", "perms")); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java index 7c109ee..8b73033 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java @@ -6,10 +6,7 @@ package dev.salmonllama.fsbot.commands.developer; import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import java.util.ArrayList; import java.util.Arrays; @@ -19,7 +16,7 @@ public class TestCommand extends Command { @Override public String name() { return "Test"; } @Override public String description() { return "A test command"; } @Override public String usage() { return "test"; } - @Override public String category() { return "Developer"; } + @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.OWNER); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("test", "t")); } @@ -28,7 +25,8 @@ public class TestCommand extends Command { ScapeFashionConnection conn = new ScapeFashionConnection(); try { - conn.osrsColor("#00ff00"); + var result = conn.osrsColor("#00ff00"); + ctx.reply(String.format("Best match: %s", result.getItems().get(0).toString())); } catch (Exception e) { ctx.reply(e.getMessage()); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/ColorCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/ColorCommand.java index ca11050..3233977 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/ColorCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/ColorCommand.java @@ -7,10 +7,7 @@ package dev.salmonllama.fsbot.commands.general; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.database.controllers.ColorRoleController; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.apache.logging.log4j.util.Strings; import org.javacord.api.entity.server.Server; import org.javacord.api.entity.user.User; @@ -23,7 +20,7 @@ public class ColorCommand extends Command { @Override public String name() { return "Color"; } @Override public String description() { return "Assigns the provided cosmetic role"; } @Override public String usage() { return "color "; } - @Override public String category() { return "General"; } + @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("color", "colour")); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/ColorsCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/ColorsCommand.java index 6fa021e..7b61b73 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/ColorsCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/ColorsCommand.java @@ -7,10 +7,7 @@ package dev.salmonllama.fsbot.commands.general; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.database.controllers.ColorRoleController; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import java.util.ArrayList; @@ -21,7 +18,7 @@ public class ColorsCommand extends Command { @Override public String name() { return "Colors"; } @Override public String description() { return "Lists available cosmetic roles"; } @Override public String usage() { return "colors"; } - @Override public String category() { return "General"; } + @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("colors", "colours")); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java index 224e331..73be01e 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java @@ -21,7 +21,7 @@ public class HelpCommand extends Command { @Override public String name() { return "Help"; } @Override public String description() { return "Shows all commands, or a specific command's information"; } @Override public String usage() { return "help [String command]"; } - @Override public String category() { return "General"; } + @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("help", "h")); } @@ -60,7 +60,7 @@ public class HelpCommand extends Command { List categories = new ArrayList<>(); for (Command cmd : guthix.listCommands()) { - String category = cmd.category(); + String category = cmd.category().getCategory(); if (!categories.contains(category)) { categories.add(category); @@ -82,7 +82,7 @@ public class HelpCommand extends Command { StringBuilder builder = new StringBuilder().append("```yml"); for (Command cmd : guthix.listCommands()) { - String cat = cmd.category().toLowerCase(); + String cat = cmd.category().getCategory().toLowerCase(); if (cat.equals(category.toLowerCase())) { builder.append("\n- ").append(cmd.name()); } @@ -161,7 +161,7 @@ public class HelpCommand extends Command { public boolean isCategory(String input) { for (Command cmd : guthix.listCommands()) { - String category = cmd.category(); + String category = cmd.category().getCategory(); if (category.toLowerCase().equals(input.toLowerCase())) { return true; } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/OutfitCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/OutfitCommand.java index 4540ecd..f439337 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/OutfitCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/OutfitCommand.java @@ -7,10 +7,7 @@ package dev.salmonllama.fsbot.commands.general; import dev.salmonllama.fsbot.database.controllers.OutfitController; import dev.salmonllama.fsbot.database.models.Outfit; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.Message; import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.util.logging.ExceptionLogger; @@ -27,7 +24,7 @@ public class OutfitCommand extends Command { @Override public String name() { return "Outfit"; } @Override public String description() { return "Generates a random image with the given tag. Use ~tags to see valid tags."; } @Override public String usage() { return "outfit "; } - @Override public String category() { return "General"; } + @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } @Override public Collection aliases() { return initAliases(); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/PingCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/PingCommand.java index 5ef8811..1e437aa 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/PingCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/PingCommand.java @@ -5,10 +5,7 @@ package dev.salmonllama.fsbot.commands.general; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import java.util.*; @@ -16,7 +13,7 @@ public class PingCommand extends Command { @Override public String name() { return "Ping"; } @Override public String description() { return "Pings the bot, checks for a heartbeat"; } @Override public String usage() { return "ping"; } - @Override public String category() { return "General"; } + @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } @Override public Collection aliases() { return new ArrayList<>(Collections.singletonList("ping")); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/PrivacyCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/PrivacyCommand.java index 253f115..0280006 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/PrivacyCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/PrivacyCommand.java @@ -1,9 +1,6 @@ package dev.salmonllama.fsbot.commands.general; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import java.util.Collection; @@ -13,7 +10,7 @@ public class PrivacyCommand extends Command { @Override public String name() { return "Privacy"; } @Override public String description() { return "Directs users to the bot's privacy policy"; } @Override public String usage() { return "privacy"; } - @Override public String category() { return "General"; } + @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } @Override public Collection aliases() { return Collections.singletonList("privacy"); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/ShowGalleriesCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/ShowGalleriesCommand.java index 6467fbd..ff786e6 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/ShowGalleriesCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/ShowGalleriesCommand.java @@ -10,23 +10,20 @@ import java.util.Arrays; import java.util.Collection; import java.util.stream.Collectors; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.channel.ServerTextChannel; import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.server.Server; import dev.salmonllama.fsbot.database.controllers.GalleryController; import dev.salmonllama.fsbot.database.models.GalleryChannel; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; import org.javacord.api.util.logging.ExceptionLogger; public class ShowGalleriesCommand extends Command { @Override public String name() { return "Show Galleries"; } @Override public String description() { return "Shows registered gallery channels in the current server"; } @Override public String usage() { return "showgalleries"; } - @Override public String category() { return "General"; } + @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("showgalleries", "listgalleries")); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/StatsCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/StatsCommand.java index c2338f2..c47983d 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/StatsCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/StatsCommand.java @@ -4,19 +4,16 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import dev.salmonllama.fsbot.database.controllers.OutfitController; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; public class StatsCommand extends Command { @Override public String name() { return "Stats"; } @Override public String description() { return "Shows various stats from Fashionscape Bot"; } @Override public String usage() { return "stats"; } - @Override public String category() { return "General"; } + @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("stats")); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java new file mode 100644 index 0000000..d975048 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.osrssearch; + +import dev.salmonllama.fsbot.guthix.*; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +public class OsrsBodyCommand extends Command { + @Override public String name() { return "OSRS Body"; } + @Override public String description() { return "Searches scape.fashion for body slot items."; } + @Override public String usage() { return "osrsbody <#color or item name"; } + @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public Collection aliases() { return new ArrayList<>(Collections.singletonList("07body")); } + + @Override + public void onCommand(CommandContext ctx) { + + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java index a2dee70..d583d52 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java @@ -6,10 +6,7 @@ package dev.salmonllama.fsbot.commands.staff; import dev.salmonllama.fsbot.config.BotConfig; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import java.util.ArrayList; import java.util.Collection; @@ -19,7 +16,7 @@ public class EchoCommand extends Command { @Override public String name() { return "Echo"; } @Override public String description() { return "Echos your message. Typical bash"; } @Override public String usage() { return "echo "; } - @Override public String category() { return "Staff"; } + @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } @Override public Collection aliases() { return new ArrayList<>(Collections.singletonList("echo")); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/GetOutfitCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/GetOutfitCommand.java index 583c043..8411e23 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/GetOutfitCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/GetOutfitCommand.java @@ -6,20 +6,17 @@ package dev.salmonllama.fsbot.commands.staff; import dev.salmonllama.fsbot.database.controllers.OutfitController; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -public class GetOutfitCommand extends Command { // TODO: This command also needs HELP +public class GetOutfitCommand extends Command { @Override public String name() { return "Get Outift"; } @Override public String description() { return "Shows the outfit, given an ID"; } @Override public String usage() { return "getoutfit "; } - @Override public String category() { return "Staff"; } + @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("getoutfit", "get")); } @@ -29,11 +26,9 @@ public class GetOutfitCommand extends Command { // TODO: This command also needs String[] args = ctx.getArgs(); String id = args[0]; - OutfitController.findById(id).thenAccept(outfitOpt -> { - outfitOpt.ifPresentOrElse( - outfit -> ctx.reply(outfit.toString()), - () -> ctx.reply("Outfit not found, did you get the id right?") - ); - }); + OutfitController.findById(id).thenAccept(outfitOpt -> outfitOpt.ifPresentOrElse( + outfit -> ctx.reply(outfit.toString()), + () -> ctx.reply("Outfit not found, did you get the id right?") + )); } } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/GetServersCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/GetServersCommand.java index 54be113..ac849ca 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/GetServersCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/GetServersCommand.java @@ -5,11 +5,7 @@ package dev.salmonllama.fsbot.commands.staff; -import dev.salmonllama.fsbot.config.BotConfig; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.DiscordApi; import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.server.Server; @@ -23,7 +19,7 @@ public class GetServersCommand extends Command { @Override public String name() { return "Get Servers"; } @Override public String description() { return "Lists all the servers the bot is in"; } @Override public String usage() { return "getservers"; } - @Override public String category() { return "Staff"; } + @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("getservers", "servers")); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/OutfitInfoCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/OutfitInfoCommand.java index 607d36c..7f61f08 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/OutfitInfoCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/OutfitInfoCommand.java @@ -5,12 +5,8 @@ package dev.salmonllama.fsbot.commands.staff; -import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.database.controllers.OutfitController; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import java.util.ArrayList; @@ -21,7 +17,7 @@ public class OutfitInfoCommand extends Command { @Override public String name() { return "Outfit Info"; } @Override public String description() { return "Shows all related info about the outfit"; } @Override public String usage() { return "outfitinfo "; } - @Override public String category() { return "Staff"; } + @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("outfitinfo", "oinfo")); } @@ -35,23 +31,19 @@ public class OutfitInfoCommand extends Command { } String id = args[0]; - OutfitController.findById(id).thenAcceptAsync(possibleOutfit -> { - possibleOutfit.ifPresentOrElse(outfit -> { - EmbedBuilder embed = new EmbedBuilder() - .setTitle("Outfit Info") - .setThumbnail(outfit.getLink()) - .setAuthor(ctx.getApi().getYourself()) - .setUrl(outfit.getLink()) - .setFooter(String.format("Tag: %s", outfit.getTag())) - .addField("Added", outfit.getCreated().toString(), true) - .addField("Updated", outfit.getUpdated().toString(), true) - .addField("Submitted by:", ctx.getApi().getUserById(outfit.getSubmitter()).join().getDiscriminatedName()) - .addField("Deleted", outfit.isDeleted() ? "True" : "False", true) - .addField("Featured", outfit.isFeatured() ? "True" : "False", true); - ctx.reply(embed); - }, () -> { - ctx.reply("Outfit not found"); - }); - }); + OutfitController.findById(id).thenAcceptAsync(possibleOutfit -> possibleOutfit.ifPresentOrElse(outfit -> { + EmbedBuilder embed = new EmbedBuilder() + .setTitle("Outfit Info") + .setThumbnail(outfit.getLink()) + .setAuthor(ctx.getApi().getYourself()) + .setUrl(outfit.getLink()) + .setFooter(String.format("Tag: %s", outfit.getTag())) + .addField("Added", outfit.getCreated().toString(), true) + .addField("Updated", outfit.getUpdated().toString(), true) + .addField("Submitted by:", ctx.getApi().getUserById(outfit.getSubmitter()).join().getDiscriminatedName()) + .addField("Deleted", outfit.isDeleted() ? "True" : "False", true) + .addField("Featured", outfit.isFeatured() ? "True" : "False", true); + ctx.reply(embed); + }, () -> ctx.reply("Outfit not found"))); } } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java index 3912aad..bb80328 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java @@ -8,10 +8,7 @@ package dev.salmonllama.fsbot.commands.staff; import com.vdurmont.emoji.EmojiParser; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.database.controllers.OutfitController; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.channel.TextChannel; import org.javacord.api.entity.message.embed.EmbedBuilder; @@ -23,7 +20,7 @@ public class RemoveOutfitCommand extends Command { @Override public String name() { return "Remove Outfit"; } @Override public String description() { return "Removes an outfit from the database given an id"; } @Override public String usage() { return "remove "; } - @Override public String category() { return "Staff"; } + @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("removeoutfit", "remove")); } @@ -40,67 +37,65 @@ public class RemoveOutfitCommand extends Command { // get the outfit, confirm deletion through reaction. String outfitId = args[0]; - OutfitController.findById(outfitId).thenAcceptAsync(possibleOutfit -> { - possibleOutfit.ifPresentOrElse(outfit -> { - // Send outfit info, react with selectors, add a listener to the message - EmbedBuilder embed = new EmbedBuilder() - .setTitle("Confirm Outfit Deletion") - .setThumbnail(outfit.getLink()) - .setAuthor(ctx.getApi().getUserById(outfit.getSubmitter()).join()) - .setUrl(outfit.getLink()) - .setFooter(String.format("Tag: %s", outfit.getTag())) - .addField("Added", outfit.getCreated().toString(), true) - .addField("Updated", outfit.getUpdated().toString(), true) - .addField("Submitted by:", ctx.getApi().getUserById(outfit.getSubmitter()).join().getDiscriminatedName()) - .addField("Deleted", outfit.isDeleted() ? "True" : "False", true) - .addField("Featured", outfit.isFeatured() ? "True" : "False", true); + OutfitController.findById(outfitId).thenAcceptAsync(possibleOutfit -> possibleOutfit.ifPresentOrElse(outfit -> { + // Send outfit info, react with selectors, add a listener to the message + EmbedBuilder embed = new EmbedBuilder() + .setTitle("Confirm Outfit Deletion") + .setThumbnail(outfit.getLink()) + .setAuthor(ctx.getApi().getUserById(outfit.getSubmitter()).join()) + .setUrl(outfit.getLink()) + .setFooter(String.format("Tag: %s", outfit.getTag())) + .addField("Added", outfit.getCreated().toString(), true) + .addField("Updated", outfit.getUpdated().toString(), true) + .addField("Submitted by:", ctx.getApi().getUserById(outfit.getSubmitter()).join().getDiscriminatedName()) + .addField("Deleted", outfit.isDeleted() ? "True" : "False", true) + .addField("Featured", outfit.isFeatured() ? "True" : "False", true); - ctx.reply(embed).thenAcceptAsync(msg -> { - msg.addReaction(EmojiParser.parseToUnicode(":white_check_mark:")); - msg.addReaction(EmojiParser.parseToUnicode(":octagonal_sign:")); + ctx.reply(embed).thenAcceptAsync(msg -> { + msg.addReaction(EmojiParser.parseToUnicode(":white_check_mark:")); + msg.addReaction(EmojiParser.parseToUnicode(":octagonal_sign:")); - msg.addReactionAddListener(event -> { - if (event.getUser().getId() != authorId) { - return; - } + msg.addReactionAddListener(event -> { + if (event.getUser().getId() != authorId) { + return; + } - if (event.getEmoji().equalsEmoji(EmojiParser.parseToUnicode(":white_check_mark:"))) { - // Delete the outfit - OutfitController.delete(outfit.getId()); + if (event.getEmoji().equalsEmoji(EmojiParser.parseToUnicode(":white_check_mark:"))) { + // Delete the outfit + OutfitController.delete(outfit.getId()); - EmbedBuilder response = new EmbedBuilder() - .setTitle("Deletion Successful!") - .setDescription(String.format("Outfit %s marked as deleted", outfit.getId())); + EmbedBuilder response = new EmbedBuilder() + .setTitle("Deletion Successful!") + .setDescription(String.format("Outfit %s marked as deleted", outfit.getId())); - msg.delete(); - ctx.reply(response); + msg.delete(); + ctx.reply(response); - EmbedBuilder log = new EmbedBuilder() - .setTitle("Outfit Marked as Deleted") - .setThumbnail(outfit.getLink()) - .addField("Deleted By:", ctx.getAuthor().getDiscriminatedName()); + EmbedBuilder log = new EmbedBuilder() + .setTitle("Outfit Marked as Deleted") + .setThumbnail(outfit.getLink()) + .addField("Deleted By:", ctx.getAuthor().getDiscriminatedName()); - ctx.getApi().getServerTextChannelById(BotConfig.OUTFIT_LOG).ifPresent(chnl -> { - chnl.sendMessage(log); - }); + ctx.getApi().getServerTextChannelById(BotConfig.OUTFIT_LOG).ifPresent( + chnl -> chnl.sendMessage(log) + ); - } else if (event.getEmoji().equalsEmoji(EmojiParser.parseToUnicode(":octagonal_sign:"))) { - // Do nothing - EmbedBuilder response = new EmbedBuilder() - .setTitle("Deletion Aborted") - .setDescription(String.format("No modifications were made to %s", outfit.getId())); + } else if (event.getEmoji().equalsEmoji(EmojiParser.parseToUnicode(":octagonal_sign:"))) { + // Do nothing + EmbedBuilder response = new EmbedBuilder() + .setTitle("Deletion Aborted") + .setDescription(String.format("No modifications were made to %s", outfit.getId())); - ctx.reply(response); - } - }); - }); - }, () -> { - EmbedBuilder response = new EmbedBuilder() - .setTitle("Outfit not Found") - .setDescription(String.format("ID %s does not exist", outfitId)); + ctx.reply(response); + } + }); + }); + }, () -> { + EmbedBuilder response = new EmbedBuilder() + .setTitle("Outfit not Found") + .setDescription(String.format("ID %s does not exist", outfitId)); - ctx.reply(response); - }); - }); + ctx.reply(response); + })); } } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java index c362e3e..dc6b58c 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java @@ -9,10 +9,7 @@ import com.vdurmont.emoji.EmojiParser; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.database.controllers.OutfitController; import dev.salmonllama.fsbot.database.models.Outfit; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.channel.TextChannel; import org.javacord.api.entity.message.embed.EmbedBuilder; @@ -26,7 +23,7 @@ public class RetagCommand extends Command { @Override public String name() { return "Retag"; } @Override public String description() { return "Changes the tag of the given outfit"; } @Override public String usage() { return "retag "; } - @Override public String category() { return "Staff"; } + @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } @Override public Collection aliases() { return new ArrayList<>(Collections.singletonList("retag")); } @@ -45,71 +42,69 @@ public class RetagCommand extends Command { String outfitId = args[0]; String newTag = args[1]; - OutfitController.findById(outfitId).thenAcceptAsync(possibleOutfit -> { - possibleOutfit.ifPresentOrElse(outfit -> { - // Send info, confirmation, and add reaction listener - EmbedBuilder response = new EmbedBuilder() - .setTitle("Confirm Tag Edit") - .setThumbnail(outfit.getLink()) - .setAuthor(ctx.getApi().getUserById(outfit.getSubmitter()).join()) - .setUrl(outfit.getLink()) - .addField("Current Tag:", outfit.getTag()) - .addField("New Tag:", newTag); + OutfitController.findById(outfitId).thenAcceptAsync(possibleOutfit -> possibleOutfit.ifPresentOrElse(outfit -> { + // Send info, confirmation, and add reaction listener + EmbedBuilder response = new EmbedBuilder() + .setTitle("Confirm Tag Edit") + .setThumbnail(outfit.getLink()) + .setAuthor(ctx.getApi().getUserById(outfit.getSubmitter()).join()) + .setUrl(outfit.getLink()) + .addField("Current Tag:", outfit.getTag()) + .addField("New Tag:", newTag); - ctx.reply(response).thenAcceptAsync(msg -> { - msg.addReaction(EmojiParser.parseToUnicode(":white_check_mark:")); - msg.addReaction(EmojiParser.parseToUnicode(":octagonal_sign:")); + ctx.reply(response).thenAcceptAsync(msg -> { + msg.addReaction(EmojiParser.parseToUnicode(":white_check_mark:")); + msg.addReaction(EmojiParser.parseToUnicode(":octagonal_sign:")); - msg.addReactionAddListener(event -> { - if (event.getUser().getId() != authorId) { - return; - } + msg.addReactionAddListener(event -> { + if (event.getUser().getId() != authorId) { + return; + } - if (event.getEmoji().equalsEmoji(EmojiParser.parseToUnicode(":white_check_mark:"))) { - // Update the outfit - Outfit newOutfit = new Outfit.OutfitBuilder(outfit) - .setTag(newTag) - .setUpdated(new Timestamp(System.currentTimeMillis())) - .build(); + if (event.getEmoji().equalsEmoji(EmojiParser.parseToUnicode(":white_check_mark:"))) { + // Update the outfit + Outfit newOutfit = new Outfit.OutfitBuilder(outfit) + .setTag(newTag) + .setUpdated(new Timestamp(System.currentTimeMillis())) + .build(); - OutfitController.update(newOutfit).thenAcceptAsync((Void) -> { - EmbedBuilder embed = new EmbedBuilder() - .setTitle("Outfit retagged successfully!") - .setDescription(String.format("Outfit %s will now display as %s", newOutfit.getId(), newOutfit.getTag())); - - msg.delete(); - ctx.reply(embed); - - EmbedBuilder log = new EmbedBuilder() - .setTitle("Outfit Retagged") - .setThumbnail(outfit.getLink()) - .addField("New tag:", newTag); - - ctx.getApi().getServerTextChannelById(BotConfig.OUTFIT_LOG).ifPresent(chnl -> { - chnl.sendMessage(log); - }); - }); - - } else if (event.getEmoji().equalsEmoji(EmojiParser.parseToUnicode(":octagonal_sign:"))) { - // Do nothing - msg.delete(); + OutfitController.update(newOutfit).thenAcceptAsync((Void) -> { EmbedBuilder embed = new EmbedBuilder() - .setTitle("Update Cancelled") - .setDescription("No modifications were made"); + .setTitle("Outfit retagged successfully!") + .setDescription(String.format("Outfit %s will now display as %s", newOutfit.getId(), newOutfit.getTag())); + msg.delete(); ctx.reply(embed); - } - }); - }); - }, () -> { - // Err, outfit not found - EmbedBuilder response = new EmbedBuilder() - .setTitle("Error occurred") - .setDescription("That ID was not found in the database") - .setColor(Color.RED); - ctx.reply(response); + EmbedBuilder log = new EmbedBuilder() + .setTitle("Outfit Retagged") + .setThumbnail(outfit.getLink()) + .addField("New tag:", newTag); + + ctx.getApi().getServerTextChannelById(BotConfig.OUTFIT_LOG).ifPresent( + chnl -> chnl.sendMessage(log) + ); + }); + + } else if (event.getEmoji().equalsEmoji(EmojiParser.parseToUnicode(":octagonal_sign:"))) { + // Do nothing + msg.delete(); + EmbedBuilder embed = new EmbedBuilder() + .setTitle("Update Cancelled") + .setDescription("No modifications were made"); + + ctx.reply(embed); + } + }); }); - }); + }, () -> { + // Err, outfit not found + EmbedBuilder response = new EmbedBuilder() + .setTitle("Error occurred") + .setDescription("That ID was not found in the database") + .setColor(Color.RED); + + ctx.reply(response); + })); } } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/SetStatusCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/SetStatusCommand.java index 785371a..23d14c1 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/SetStatusCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/SetStatusCommand.java @@ -6,11 +6,7 @@ package dev.salmonllama.fsbot.commands.staff; import com.vdurmont.emoji.EmojiParser; -import dev.salmonllama.fsbot.config.BotConfig; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import java.awt.*; @@ -22,7 +18,7 @@ public class SetStatusCommand extends Command { @Override public String name() { return "Set Status"; } @Override public String description() { return "Updates the bot's current status"; } @Override public String usage() { return "updatestatus "; } - @Override public String category() { return "Staff"; } + @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("setstatus", "status")); } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/WelcomeMessageCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/WelcomeMessageCommand.java index 997260d..1beb597 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/WelcomeMessageCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/WelcomeMessageCommand.java @@ -8,10 +8,7 @@ package dev.salmonllama.fsbot.commands.staff; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.database.controllers.ServerConfigController; import dev.salmonllama.fsbot.database.models.ServerConfig; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.util.logging.ExceptionLogger; @@ -23,7 +20,7 @@ public class WelcomeMessageCommand extends Command { @Override public String name() { return "Welcome Message"; } @Override public String description() { return "View or update the server welcome message. Options: get|set|getchannel|setchannel."; } @Override public String usage() { return "welcomemessage [String newMessage]"; } - @Override public String category() { return "Staff"; } + @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("welcomemessage", "wmsg")); } diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/Command.java b/src/main/java/dev/salmonllama/fsbot/guthix/Command.java index 92c8df8..8ee9c16 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/Command.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/Command.java @@ -12,7 +12,7 @@ public abstract class Command { public abstract String name(); public abstract String description(); public abstract String usage(); - public abstract String category(); + public abstract CommandCategory category(); public abstract CommandPermission permission(); public abstract Collection aliases(); diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java b/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java new file mode 100644 index 0000000..47903db --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.guthix; + +public enum CommandCategory { + DEVELOPER("Developer"), + GENERAL("General"), + OSRS_ITEM_SEARCH("Oldschool Item Search"), + RS3_ITEM_SEARCH("Runescape Item Search"), + STAFF("Staff"); + + private final String category; + + CommandCategory(String category) { + this.category = category; + } + + public String getCategory() { + return category; + } +} From 0b81aae27202c1ef6752cacb26801ba8a95cd3aa Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Thu, 10 Sep 2020 21:43:04 -0400 Subject: [PATCH 26/58] Missed a command --- .../salmonllama/fsbot/commands/staff/AddColorCommand.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/AddColorCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/AddColorCommand.java index 2863f78..4d0bb79 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/AddColorCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/AddColorCommand.java @@ -8,10 +8,7 @@ package dev.salmonllama.fsbot.commands.staff; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.database.controllers.ColorRoleController; import dev.salmonllama.fsbot.database.models.ColorRole; -import dev.salmonllama.fsbot.guthix.Command; -import dev.salmonllama.fsbot.guthix.CommandContext; -import dev.salmonllama.fsbot.guthix.CommandPermission; -import dev.salmonllama.fsbot.guthix.PermissionType; +import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.permission.Role; import java.util.ArrayList; @@ -23,7 +20,7 @@ public class AddColorCommand extends Command { @Override public String name() { return "Add Color"; } @Override public String description() { return "adds the provided role to the toggleable cosmetic roles."; } @Override public String usage() { return "addcolor "; } - @Override public String category() { return "Staff"; } + @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("addcolor", "addcolour", "addclr")); } From 187e2dd79b38f8f4ba1f9ca5ba43ae7b333e1cf9 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Thu, 10 Sep 2020 22:12:23 -0400 Subject: [PATCH 27/58] Fixed naming consistency --- .../endpoints/scapefashion/ScapeFashionConnection.java | 4 ++-- ...capeFashionSlotOSRS.java => ScapeFashionSlotOsrs.java} | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/{ScapeFashionSlotOSRS.java => ScapeFashionSlotOsrs.java} (79%) diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java index 6676f2a..dccb24e 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java @@ -34,7 +34,7 @@ public class ScapeFashionConnection { return response; } - private ScapeFashionResult osrsColor(String color, ScapeFashionSlotOSRS slot) throws Exception { + public ScapeFashionResult osrsColor(String color, ScapeFashionSlotOsrs slot) throws Exception { String uri = OSRS_REQUEST_URL + "/colors/" + encode(color) + "?slot=" + encode(slot.getValue()); String link = OSRS_LINK_URL + "/colors/" + encode(color) + "?slot=" + encode(slot.getValue()); @@ -52,7 +52,7 @@ public class ScapeFashionConnection { return response; } - private ScapeFashionResult osrsItem(String item, ScapeFashionSlotOSRS slot) throws Exception { + private ScapeFashionResult osrsItem(String item, ScapeFashionSlotOsrs slot) throws Exception { String uri = OSRS_REQUEST_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); String link = OSRS_LINK_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotOSRS.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotOsrs.java similarity index 79% rename from src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotOSRS.java rename to src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotOsrs.java index 7a15895..04a5651 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotOSRS.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionSlotOsrs.java @@ -8,7 +8,7 @@ package dev.salmonllama.fsbot.endpoints.scapefashion; import java.util.Optional; // Source: https://github.com/ncpierson/fashionscape/blob/master/api/data/tools/slot.js -public enum ScapeFashionSlotOSRS { +public enum ScapeFashionSlotOsrs { AMMUNITION("ammunition"), BODY("body"), CAPE("cape"), @@ -23,7 +23,7 @@ public enum ScapeFashionSlotOSRS { private final String value; - ScapeFashionSlotOSRS(String value) { + ScapeFashionSlotOsrs(String value) { this.value = value; } @@ -31,9 +31,9 @@ public enum ScapeFashionSlotOSRS { return value; } - public static Optional matches(String s) { + public static Optional matches(String s) { try { - var slot = ScapeFashionSlotOSRS.valueOf(s); + var slot = ScapeFashionSlotOsrs.valueOf(s); return Optional.of(slot); } catch (IllegalArgumentException e) { return Optional.empty(); From 28534320cf6353175cc48ef5c5e8535c82191eb8 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Fri, 11 Sep 2020 23:20:53 -0400 Subject: [PATCH 28/58] Added more class fields for better 1:1 result mapping --- .../scapefashion/ScapeFashionImages.java | 13 ++++++++++ .../scapefashion/ScapeFashionItem.java | 26 ++++++++++++++----- .../scapefashion/ScapeFashionWiki.java | 23 ++++++++++++++++ 3 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionImages.java create mode 100644 src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionWiki.java diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionImages.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionImages.java new file mode 100644 index 0000000..9bc208c --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionImages.java @@ -0,0 +1,13 @@ +package dev.salmonllama.fsbot.endpoints.scapefashion; + +public class ScapeFashionImages { + private String detail; + + public ScapeFashionImages() { + + } + + public String getDetail() { + return detail; + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java index a9faa13..051e9d2 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionItem.java @@ -6,20 +6,26 @@ package dev.salmonllama.fsbot.endpoints.scapefashion; public class ScapeFashionItem { + private final ScapeFashionImages images; private final String name; private final String slot; - private final String link; + private final ScapeFashionWiki wiki; private final String[] colors; private final float match; private ScapeFashionItem(Builder builder) { + this.images = builder.images; this.name = builder.name; this.slot = builder.slot; - this.link = builder.link; + this.wiki = builder.wiki; this.colors = builder.colors; this.match = builder.match; } + public ScapeFashionImages getImages() { + return images; + } + public String getName() { return name; } @@ -28,8 +34,8 @@ public class ScapeFashionItem { return slot; } - public String getLink() { - return link; + public ScapeFashionWiki getWiki() { + return wiki; } public String[] getColors() { @@ -46,9 +52,10 @@ public class ScapeFashionItem { } public static class Builder { + private ScapeFashionImages images; private String name; private String slot; - private String link; + private ScapeFashionWiki wiki; private String[] colors; private float match; @@ -56,6 +63,11 @@ public class ScapeFashionItem { } + public Builder setImages(ScapeFashionImages images) { + this.images = images; + return this; + } + public Builder setName(String name) { this.name = name; return this; @@ -66,8 +78,8 @@ public class ScapeFashionItem { return this; } - public Builder setLink(String link) { - this.link = link; + public Builder setWiki(ScapeFashionWiki wiki) { + this.wiki = wiki; return this; } diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionWiki.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionWiki.java new file mode 100644 index 0000000..2bb26a4 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionWiki.java @@ -0,0 +1,23 @@ +package dev.salmonllama.fsbot.endpoints.scapefashion; + +public class ScapeFashionWiki { + private String api; + private String link; + private int pageId; + + public ScapeFashionWiki() { + + } + + public String getApi() { + return api; + } + + public String getLink() { + return link; + } + + public int getPageId() { + return pageId; + } +} From 86614754724392109500b52536113df415939863 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Fri, 11 Sep 2020 23:23:01 -0400 Subject: [PATCH 29/58] Initial body command and base utilities --- .../commands/osrssearch/OsrsBodyCommand.java | 21 +++++++++++ .../osrssearch/OsrsSearchUtilities.java | 36 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java index d975048..8342ae1 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java @@ -5,9 +5,13 @@ package dev.salmonllama.fsbot.commands.osrssearch; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotOsrs; import dev.salmonllama.fsbot.guthix.*; +import org.apache.logging.log4j.util.Strings; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -21,6 +25,23 @@ public class OsrsBodyCommand extends Command { @Override public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + var args = ctx.getArgs(); + if (OsrsSearchUtilities.isColor(args[0])) { + // Color search + ScapeFashionConnection conn = new ScapeFashionConnection(); + try { // TODO: Commands with items instead of colors do not work + var bestMatch = conn.osrsColor(Strings.join(Arrays.asList(args), ' '), ScapeFashionSlotOsrs.BODY); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + OsrsSearchUtilities.handleException(e, ctx); + } + } else { + // Item search + } } } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java new file mode 100644 index 0000000..a9bd1ff --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.osrssearch; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionResult; +import dev.salmonllama.fsbot.guthix.CommandContext; +import org.javacord.api.entity.channel.TextChannel; +import org.javacord.api.entity.message.embed.EmbedBuilder; + +public class OsrsSearchUtilities { + static boolean isColor(String s) { + return s.startsWith("#"); + } + + static void sendResult(ScapeFashionResult result, TextChannel channel) { + var bestMatch = result.getItems().get(0); + EmbedBuilder embed = new EmbedBuilder() + .setTitle(String.format("Best Match - %s", bestMatch.getName())) + .setImage(bestMatch.getImages().getDetail()) + .setUrl(result.getLink()) + .setDescription(String.format("Click the title or visit %s for full results!", result.getLink())); + + channel.sendMessage(embed); + } + + static void handleException(Exception e, CommandContext ctx) { + EmbedBuilder embed = new EmbedBuilder() + .setTitle("An error has occurred!") + .setDescription(e.getMessage()); + + ctx.reply(embed); + } +} From e44687377b46457199d6d25847f50d523e76b34c Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 12:27:24 -0400 Subject: [PATCH 30/58] Adding frontend-exception handler utility --- .../fsbot/utilities/DiscordUtilities.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java diff --git a/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java b/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java new file mode 100644 index 0000000..c3c72e6 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.utilities; + +import dev.salmonllama.fsbot.config.BotConfig; +import dev.salmonllama.fsbot.guthix.CommandContext; +import org.javacord.api.entity.message.embed.EmbedBuilder; + +import java.awt.*; + +public class DiscordUtilities { + public static void handleException(Exception e, CommandContext ctx) { + EmbedBuilder embed = new EmbedBuilder() + .setTitle("Exception caught in command thread:") + .addField("message:", e.getMessage()) + .setColor(Color.RED); + + logException(e, ctx); + ctx.reply(embed); + } + + private static void logException(Exception e, CommandContext ctx) { + EmbedBuilder embed = new EmbedBuilder() + .setTitle("Runtime error:") + .addField("Message:", e.getMessage()) + .setColor(Color.RED); + + ctx.getApi().getTextChannelById(BotConfig.ACTIVITY_LOG).ifPresent(channel -> channel.sendMessage(embed)); + } +} From ccd19910b5ab559070c68bb432ba03c9a5d8df6f Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 12:27:49 -0400 Subject: [PATCH 31/58] Removed unused import --- .../java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java index d583d52..f0a4e6a 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java @@ -5,7 +5,6 @@ package dev.salmonllama.fsbot.commands.staff; -import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.guthix.*; import java.util.ArrayList; From ce62a37fdd9eaab21bec84cc6e3dfa2db9906911 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 12:28:03 -0400 Subject: [PATCH 32/58] Implemented Logback --- src/main/java/dev/salmonllama/fsbot/Main.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/Main.java b/src/main/java/dev/salmonllama/fsbot/Main.java index 794cb29..940cb07 100644 --- a/src/main/java/dev/salmonllama/fsbot/Main.java +++ b/src/main/java/dev/salmonllama/fsbot/Main.java @@ -12,6 +12,8 @@ import dev.salmonllama.fsbot.listeners.*; import org.javacord.api.DiscordApiBuilder; import dev.salmonllama.fsbot.utilities.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -20,6 +22,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Main { + + private final static Logger logger = LoggerFactory.getLogger(Main.class); + public static void main(String[] args) { String configLocation = Constants.BOT_FOLDER.concat(Constants.CONFIG_NAME); BotConfig.initConfig(configLocation, false); @@ -40,8 +45,7 @@ public class Main { api.addMessageCreateListener(new AchievementListener()); api.addMessageCreateListener(new ReportListener()); - System.out.printf("Bot invite: %s%n", api.createBotInvite()); - System.out.printf("Logged in as %s%n", api.getYourself().getDiscriminatedName()); + logger.info("{} reporting for duty", api.getYourself().getDiscriminatedName()); }); SpringApplication.run(Main.class, args); From bc69c31713d5e03dda6ec1241f6751d93d952cbe Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 12:28:28 -0400 Subject: [PATCH 33/58] Finalized response embed --- .../osrssearch/OsrsSearchUtilities.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java index a9bd1ff..9debece 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java @@ -6,10 +6,13 @@ package dev.salmonllama.fsbot.commands.osrssearch; import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionResult; -import dev.salmonllama.fsbot.guthix.CommandContext; +import org.apache.logging.log4j.util.Strings; import org.javacord.api.entity.channel.TextChannel; import org.javacord.api.entity.message.embed.EmbedBuilder; +import java.awt.*; +import java.util.Arrays; + public class OsrsSearchUtilities { static boolean isColor(String s) { return s.startsWith("#"); @@ -17,20 +20,17 @@ public class OsrsSearchUtilities { static void sendResult(ScapeFashionResult result, TextChannel channel) { var bestMatch = result.getItems().get(0); + var colors = Strings.join(Arrays.asList(bestMatch.getColors()), ','); EmbedBuilder embed = new EmbedBuilder() .setTitle(String.format("Best Match - %s", bestMatch.getName())) .setImage(bestMatch.getImages().getDetail()) .setUrl(result.getLink()) + .setColor(Color.decode(bestMatch.getColors()[0])) + .addField("Match:", String.valueOf(bestMatch.getMatch()), true) + .addField("Colors:", colors, true) + .setDescription(String.format("Click the title or visit %s for full results!", result.getLink())); channel.sendMessage(embed); } - - static void handleException(Exception e, CommandContext ctx) { - EmbedBuilder embed = new EmbedBuilder() - .setTitle("An error has occurred!") - .setDescription(e.getMessage()); - - ctx.reply(embed); - } } From 26cbbee03e82d850ae45cb4a32842cb2da5a4823 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 15:34:01 -0400 Subject: [PATCH 34/58] Completed OSRS Search Module --- .../commands/osrssearch/OsrsBodyCommand.java | 28 ++++++--- .../commands/osrssearch/OsrsCapeCommand.java | 61 +++++++++++++++++++ .../commands/osrssearch/OsrsFeetCommand.java | 61 +++++++++++++++++++ .../commands/osrssearch/OsrsHandCommand.java | 61 +++++++++++++++++++ .../commands/osrssearch/OsrsHeadCommand.java | 61 +++++++++++++++++++ .../commands/osrssearch/OsrsLegsCommand.java | 61 +++++++++++++++++++ .../commands/osrssearch/OsrsNeckCommand.java | 61 +++++++++++++++++++ .../osrssearch/OsrsSearchCommand.java | 60 ++++++++++++++++++ .../osrssearch/OsrsShieldCommand.java | 61 +++++++++++++++++++ .../osrssearch/OsrsWeaponCommand.java | 61 +++++++++++++++++++ 10 files changed, 569 insertions(+), 7 deletions(-) create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsCapeCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsFeetCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHandCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHeadCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsLegsCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsNeckCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsShieldCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsWeaponCommand.java diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java index 8342ae1..b799eb1 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java @@ -8,20 +8,24 @@ package dev.salmonllama.fsbot.commands.osrssearch; import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotOsrs; import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; public class OsrsBodyCommand extends Command { @Override public String name() { return "OSRS Body"; } @Override public String description() { return "Searches scape.fashion for body slot items."; } - @Override public String usage() { return "osrsbody <#color or item name"; } + @Override public String usage() { return "osrsbody <#color or item name>"; } @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Collections.singletonList("07body")); } + @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07body", "osrsbody")); } + + private static final Logger logger = LoggerFactory.getLogger(OsrsBodyCommand.class); @Override public void onCommand(CommandContext ctx) { @@ -31,17 +35,27 @@ public class OsrsBodyCommand extends Command { } var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + if (OsrsSearchUtilities.isColor(args[0])) { // Color search - ScapeFashionConnection conn = new ScapeFashionConnection(); - try { // TODO: Commands with items instead of colors do not work - var bestMatch = conn.osrsColor(Strings.join(Arrays.asList(args), ' '), ScapeFashionSlotOsrs.BODY); + try { + var bestMatch = conn.osrsColor(params, ScapeFashionSlotOsrs.BODY); OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); } catch (Exception e) { - OsrsSearchUtilities.handleException(e, ctx); + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); } } else { // Item search + try { + var bestMatch = conn.osrsItem(params, ScapeFashionSlotOsrs.BODY); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } } } } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsCapeCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsCapeCommand.java new file mode 100644 index 0000000..135cc89 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsCapeCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.osrssearch; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotOsrs; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +public class OsrsCapeCommand extends Command { + @Override public String name() { return "OSRS Cape"; } + @Override public String description() { return "Searches scape.fashion for cape slot items."; } + @Override public String usage() { return "osrscape <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07cape", "osrscape")); } + + private static final Logger logger = LoggerFactory.getLogger(OsrsCapeCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (OsrsSearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.osrsColor(params, ScapeFashionSlotOsrs.CAPE); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.osrsItem(params, ScapeFashionSlotOsrs.CAPE); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsFeetCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsFeetCommand.java new file mode 100644 index 0000000..dc4ad65 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsFeetCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.osrssearch; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotOsrs; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +public class OsrsFeetCommand extends Command { + @Override public String name() { return "OSRS Feet"; } + @Override public String description() { return "Searches scape.fashion for foot slot items."; } + @Override public String usage() { return "osrsfeet <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07feet", "osrsfeet")); } + + private static final Logger logger = LoggerFactory.getLogger(OsrsFeetCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (OsrsSearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.osrsColor(params, ScapeFashionSlotOsrs.FEET); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.osrsItem(params, ScapeFashionSlotOsrs.FEET); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHandCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHandCommand.java new file mode 100644 index 0000000..44a0f33 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHandCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.osrssearch; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotOsrs; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +public class OsrsHandCommand extends Command { + @Override public String name() { return "OSRS Hand"; } + @Override public String description() { return "Searches scape.fashion for hand slot items."; } + @Override public String usage() { return "osrshand <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07hand", "osrshand")); } + + private static final Logger logger = LoggerFactory.getLogger(OsrsHandCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (OsrsSearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.osrsColor(params, ScapeFashionSlotOsrs.HAND); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.osrsItem(params, ScapeFashionSlotOsrs.HAND); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHeadCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHeadCommand.java new file mode 100644 index 0000000..140ef2e --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHeadCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.osrssearch; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotOsrs; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +public class OsrsHeadCommand extends Command { + @Override public String name() { return "OSRS Head"; } + @Override public String description() { return "Searches scape.fashion for head slot items."; } + @Override public String usage() { return "osrshead <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07head", "osrshead")); } + + private static final Logger logger = LoggerFactory.getLogger(OsrsHeadCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (OsrsSearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.osrsColor(params, ScapeFashionSlotOsrs.HEAD); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.osrsItem(params, ScapeFashionSlotOsrs.HEAD); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsLegsCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsLegsCommand.java new file mode 100644 index 0000000..95302ff --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsLegsCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.osrssearch; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotOsrs; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +public class OsrsLegsCommand extends Command { + @Override public String name() { return "OSRS Legs"; } + @Override public String description() { return "Searches scape.fashion for leg slot items."; } + @Override public String usage() { return "osrslegs <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07legs", "osrslegs")); } + + private static final Logger logger = LoggerFactory.getLogger(OsrsLegsCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (OsrsSearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.osrsColor(params, ScapeFashionSlotOsrs.LEG); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.osrsItem(params, ScapeFashionSlotOsrs.LEG); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsNeckCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsNeckCommand.java new file mode 100644 index 0000000..b7af727 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsNeckCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.osrssearch; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotOsrs; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +public class OsrsNeckCommand extends Command { + @Override public String name() { return "OSRS Neck"; } + @Override public String description() { return "Searches scape.fashion for neck slot items."; } + @Override public String usage() { return "osrsneck <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07neck", "osrsneck")); } + + private static final Logger logger = LoggerFactory.getLogger(OsrsNeckCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (OsrsSearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.osrsColor(params, ScapeFashionSlotOsrs.NECK); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.osrsItem(params, ScapeFashionSlotOsrs.NECK); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchCommand.java new file mode 100644 index 0000000..6cf5fcf --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchCommand.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.osrssearch; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +public class OsrsSearchCommand extends Command { + @Override public String name() { return "OSRS Search"; } + @Override public String description() { return "Searches scape.fashion for any items."; } + @Override public String usage() { return "osrssearch <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07search", "osrssearch")); } + + private static final Logger logger = LoggerFactory.getLogger(OsrsSearchCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (OsrsSearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.osrsColor(params); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.osrsItem(params); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsShieldCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsShieldCommand.java new file mode 100644 index 0000000..f776eae --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsShieldCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.osrssearch; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotOsrs; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +public class OsrsShieldCommand extends Command { + @Override public String name() { return "OSRS Shield"; } + @Override public String description() { return "Searches scape.fashion for shield slot items."; } + @Override public String usage() { return "osrsshield <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07shield", "osrsshield")); } + + private static final Logger logger = LoggerFactory.getLogger(OsrsShieldCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (OsrsSearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.osrsColor(params, ScapeFashionSlotOsrs.SHIELD); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.osrsItem(params, ScapeFashionSlotOsrs.SHIELD); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsWeaponCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsWeaponCommand.java new file mode 100644 index 0000000..6898449 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsWeaponCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.osrssearch; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotOsrs; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +public class OsrsWeaponCommand extends Command { + @Override public String name() { return "OSRS Weapon"; } + @Override public String description() { return "Searches scape.fashion for weapo slot items."; } + @Override public String usage() { return "osrsweapon <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07weapon", "osrsweapon")); } + + private static final Logger logger = LoggerFactory.getLogger(OsrsWeaponCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (OsrsSearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.osrsColor(params, ScapeFashionSlotOsrs.WEAPON); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.osrsItem(params, ScapeFashionSlotOsrs.WEAPON); + OsrsSearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} From bd747c630283f385777e1dceed5e7f54acccd826 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 15:34:26 -0400 Subject: [PATCH 35/58] Registered OSRS search commands --- .../java/dev/salmonllama/fsbot/guthix/Guthix.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java index e65f7ae..8cdd874 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java @@ -7,6 +7,7 @@ package dev.salmonllama.fsbot.guthix; import dev.salmonllama.fsbot.commands.developer.*; import dev.salmonllama.fsbot.commands.general.*; +import dev.salmonllama.fsbot.commands.osrssearch.*; import dev.salmonllama.fsbot.commands.staff.OutfitInfoCommand; import dev.salmonllama.fsbot.commands.staff.*; import org.javacord.api.DiscordApi; @@ -64,6 +65,20 @@ public class Guthix implements MessageCreateListener { addCommand(new HelpCommand(this)); addCommand(new StatsCommand()); addCommand(new PrivacyCommand()); + + // Osrs Search Commands + addCommand(new OsrsSearchCommand()); + addCommand(new OsrsHeadCommand()); + addCommand(new OsrsBodyCommand()); + addCommand(new OsrsHeadCommand()); + addCommand(new OsrsLegsCommand()); + addCommand(new OsrsFeetCommand()); + addCommand(new OsrsCapeCommand()); + addCommand(new OsrsNeckCommand()); + addCommand(new OsrsShieldCommand()); + addCommand(new OsrsWeaponCommand()); + + // Rs3 Search Commands } public void addCommand(Command cmd) { From e3db8db80b02f2fc995c39433b167f115e2487fe Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 15:35:57 -0400 Subject: [PATCH 36/58] Fix filter bug for new category system --- .../dev/salmonllama/fsbot/commands/general/HelpCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java index 73be01e..70dbb64 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java @@ -161,7 +161,7 @@ public class HelpCommand extends Command { public boolean isCategory(String input) { for (Command cmd : guthix.listCommands()) { - String category = cmd.category().getCategory(); + String category = cmd.category().getCategory().toLowerCase(); if (category.toLowerCase().equals(input.toLowerCase())) { return true; } From 3788c3f042a611b617dcb2d2b0abfa9da7ec8ab6 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 15:36:34 -0400 Subject: [PATCH 37/58] Prevented returning bestMatch as searched items --- .../scapefashion/ScapeFashionConnection.java | 23 ++++++++++++++++--- .../fsbot/guthix/CommandCategory.java | 4 ++-- .../dev/salmonllama/fsbot/guthix/Guthix.java | 6 ++--- .../fsbot/utilities/DiscordUtilities.java | 10 ++++++++ 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java index dccb24e..2bf6301 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java @@ -6,6 +6,9 @@ package dev.salmonllama.fsbot.endpoints.scapefashion; import com.google.gson.Gson; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; @@ -21,6 +24,8 @@ public class ScapeFashionConnection { private final String OSRS_REQUEST_URL = "https://api.scape.fashion"; private final String OSRS_LINK_URL = "https://scape.fashion"; + private static final Logger logger = LoggerFactory.getLogger(ScapeFashionConnection.class); + public ScapeFashionConnection() {} // Uses the color endpoint to search for items @@ -43,21 +48,27 @@ public class ScapeFashionConnection { return response; } - private ScapeFashionResult osrsItem(String item) throws Exception { + public ScapeFashionResult osrsItem(String item) throws Exception { String uri = OSRS_REQUEST_URL + "/items/" + encode(item); String link = OSRS_LINK_URL + "/items/" + encode(item); var response = makeRequest(uri); response.setLink(link); + if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { + response.getItems().remove(0); + } return response; } - private ScapeFashionResult osrsItem(String item, ScapeFashionSlotOsrs slot) throws Exception { + public ScapeFashionResult osrsItem(String item, ScapeFashionSlotOsrs slot) throws Exception { String uri = OSRS_REQUEST_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); String link = OSRS_LINK_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); var response = makeRequest(uri); response.setLink(link); + if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { + response.getItems().remove(0); + } return response; } @@ -85,6 +96,9 @@ public class ScapeFashionConnection { var response = makeRequest(uri); response.setLink(link); + if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { + response.getItems().remove(0); + } return response; } @@ -94,6 +108,9 @@ public class ScapeFashionConnection { var response = makeRequest(uri); response.setLink(link); + if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { + response.getItems().remove(0); + } return response; } @@ -115,6 +132,6 @@ public class ScapeFashionConnection { } private String encode(String value) throws UnsupportedEncodingException { - return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); + return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()).replace("+", "%20"); } } diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java b/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java index 47903db..36edc54 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java @@ -8,8 +8,8 @@ package dev.salmonllama.fsbot.guthix; public enum CommandCategory { DEVELOPER("Developer"), GENERAL("General"), - OSRS_ITEM_SEARCH("Oldschool Item Search"), - RS3_ITEM_SEARCH("Runescape Item Search"), + OSRS_ITEM_SEARCH("07Search"), + RS3_ITEM_SEARCH("RS3Search"), STAFF("Staff"); private final String category; diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java index 8cdd874..9e81aa1 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java @@ -23,10 +23,10 @@ import java.util.HashMap; */ public class Guthix implements MessageCreateListener { @SuppressWarnings("unused") - private DiscordApi api; + private final DiscordApi api; - private Registry registry; - private PermissionManager manager; + private final Registry registry; + private final PermissionManager manager; public Guthix(DiscordApi api) { this.api = api; diff --git a/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java b/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java index c3c72e6..ae419e0 100644 --- a/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java +++ b/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java @@ -8,8 +8,14 @@ package dev.salmonllama.fsbot.utilities; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.guthix.CommandContext; import org.javacord.api.entity.message.embed.EmbedBuilder; +import org.javacord.api.util.logging.ExceptionLogger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.awt.*; +import java.util.Arrays; +import java.util.function.Consumer; +import java.util.function.Function; public class DiscordUtilities { public static void handleException(Exception e, CommandContext ctx) { @@ -30,4 +36,8 @@ public class DiscordUtilities { ctx.getApi().getTextChannelById(BotConfig.ACTIVITY_LOG).ifPresent(channel -> channel.sendMessage(embed)); } + + public static void report(Class... throwable) { + System.out.println(Arrays.stream(throwable)); + } } From c83c93d339dfe51d2194d69a8be6f3d9d37e5846 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 15:37:53 -0400 Subject: [PATCH 38/58] Revert "Prevented returning bestMatch as searched items" This reverts commit 3788c3f0 --- .../scapefashion/ScapeFashionConnection.java | 23 +++---------------- .../fsbot/guthix/CommandCategory.java | 4 ++-- .../dev/salmonllama/fsbot/guthix/Guthix.java | 6 ++--- .../fsbot/utilities/DiscordUtilities.java | 10 -------- 4 files changed, 8 insertions(+), 35 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java index 2bf6301..dccb24e 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java @@ -6,9 +6,6 @@ package dev.salmonllama.fsbot.endpoints.scapefashion; import com.google.gson.Gson; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; @@ -24,8 +21,6 @@ public class ScapeFashionConnection { private final String OSRS_REQUEST_URL = "https://api.scape.fashion"; private final String OSRS_LINK_URL = "https://scape.fashion"; - private static final Logger logger = LoggerFactory.getLogger(ScapeFashionConnection.class); - public ScapeFashionConnection() {} // Uses the color endpoint to search for items @@ -48,27 +43,21 @@ public class ScapeFashionConnection { return response; } - public ScapeFashionResult osrsItem(String item) throws Exception { + private ScapeFashionResult osrsItem(String item) throws Exception { String uri = OSRS_REQUEST_URL + "/items/" + encode(item); String link = OSRS_LINK_URL + "/items/" + encode(item); var response = makeRequest(uri); response.setLink(link); - if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { - response.getItems().remove(0); - } return response; } - public ScapeFashionResult osrsItem(String item, ScapeFashionSlotOsrs slot) throws Exception { + private ScapeFashionResult osrsItem(String item, ScapeFashionSlotOsrs slot) throws Exception { String uri = OSRS_REQUEST_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); String link = OSRS_LINK_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); var response = makeRequest(uri); response.setLink(link); - if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { - response.getItems().remove(0); - } return response; } @@ -96,9 +85,6 @@ public class ScapeFashionConnection { var response = makeRequest(uri); response.setLink(link); - if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { - response.getItems().remove(0); - } return response; } @@ -108,9 +94,6 @@ public class ScapeFashionConnection { var response = makeRequest(uri); response.setLink(link); - if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { - response.getItems().remove(0); - } return response; } @@ -132,6 +115,6 @@ public class ScapeFashionConnection { } private String encode(String value) throws UnsupportedEncodingException { - return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()).replace("+", "%20"); + return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); } } diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java b/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java index 36edc54..47903db 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java @@ -8,8 +8,8 @@ package dev.salmonllama.fsbot.guthix; public enum CommandCategory { DEVELOPER("Developer"), GENERAL("General"), - OSRS_ITEM_SEARCH("07Search"), - RS3_ITEM_SEARCH("RS3Search"), + OSRS_ITEM_SEARCH("Oldschool Item Search"), + RS3_ITEM_SEARCH("Runescape Item Search"), STAFF("Staff"); private final String category; diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java index 9e81aa1..8cdd874 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java @@ -23,10 +23,10 @@ import java.util.HashMap; */ public class Guthix implements MessageCreateListener { @SuppressWarnings("unused") - private final DiscordApi api; + private DiscordApi api; - private final Registry registry; - private final PermissionManager manager; + private Registry registry; + private PermissionManager manager; public Guthix(DiscordApi api) { this.api = api; diff --git a/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java b/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java index ae419e0..c3c72e6 100644 --- a/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java +++ b/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java @@ -8,14 +8,8 @@ package dev.salmonllama.fsbot.utilities; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.guthix.CommandContext; import org.javacord.api.entity.message.embed.EmbedBuilder; -import org.javacord.api.util.logging.ExceptionLogger; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.awt.*; -import java.util.Arrays; -import java.util.function.Consumer; -import java.util.function.Function; public class DiscordUtilities { public static void handleException(Exception e, CommandContext ctx) { @@ -36,8 +30,4 @@ public class DiscordUtilities { ctx.getApi().getTextChannelById(BotConfig.ACTIVITY_LOG).ifPresent(channel -> channel.sendMessage(embed)); } - - public static void report(Class... throwable) { - System.out.println(Arrays.stream(throwable)); - } } From ee066fb084f52cf574323dae52e59d46147abc7b Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 15:38:42 -0400 Subject: [PATCH 39/58] Revert "Revert "Prevented returning bestMatch as searched items"" This reverts commit c83c93d3 --- .../scapefashion/ScapeFashionConnection.java | 23 ++++++++++++++++--- .../fsbot/guthix/CommandCategory.java | 4 ++-- .../dev/salmonllama/fsbot/guthix/Guthix.java | 6 ++--- .../fsbot/utilities/DiscordUtilities.java | 10 ++++++++ 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java index dccb24e..2bf6301 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java @@ -6,6 +6,9 @@ package dev.salmonllama.fsbot.endpoints.scapefashion; import com.google.gson.Gson; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; @@ -21,6 +24,8 @@ public class ScapeFashionConnection { private final String OSRS_REQUEST_URL = "https://api.scape.fashion"; private final String OSRS_LINK_URL = "https://scape.fashion"; + private static final Logger logger = LoggerFactory.getLogger(ScapeFashionConnection.class); + public ScapeFashionConnection() {} // Uses the color endpoint to search for items @@ -43,21 +48,27 @@ public class ScapeFashionConnection { return response; } - private ScapeFashionResult osrsItem(String item) throws Exception { + public ScapeFashionResult osrsItem(String item) throws Exception { String uri = OSRS_REQUEST_URL + "/items/" + encode(item); String link = OSRS_LINK_URL + "/items/" + encode(item); var response = makeRequest(uri); response.setLink(link); + if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { + response.getItems().remove(0); + } return response; } - private ScapeFashionResult osrsItem(String item, ScapeFashionSlotOsrs slot) throws Exception { + public ScapeFashionResult osrsItem(String item, ScapeFashionSlotOsrs slot) throws Exception { String uri = OSRS_REQUEST_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); String link = OSRS_LINK_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); var response = makeRequest(uri); response.setLink(link); + if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { + response.getItems().remove(0); + } return response; } @@ -85,6 +96,9 @@ public class ScapeFashionConnection { var response = makeRequest(uri); response.setLink(link); + if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { + response.getItems().remove(0); + } return response; } @@ -94,6 +108,9 @@ public class ScapeFashionConnection { var response = makeRequest(uri); response.setLink(link); + if (response.getItems().get(0).getName().toLowerCase().equals(item.toLowerCase())) { + response.getItems().remove(0); + } return response; } @@ -115,6 +132,6 @@ public class ScapeFashionConnection { } private String encode(String value) throws UnsupportedEncodingException { - return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); + return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()).replace("+", "%20"); } } diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java b/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java index 47903db..36edc54 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/CommandCategory.java @@ -8,8 +8,8 @@ package dev.salmonllama.fsbot.guthix; public enum CommandCategory { DEVELOPER("Developer"), GENERAL("General"), - OSRS_ITEM_SEARCH("Oldschool Item Search"), - RS3_ITEM_SEARCH("Runescape Item Search"), + OSRS_ITEM_SEARCH("07Search"), + RS3_ITEM_SEARCH("RS3Search"), STAFF("Staff"); private final String category; diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java index 8cdd874..9e81aa1 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java @@ -23,10 +23,10 @@ import java.util.HashMap; */ public class Guthix implements MessageCreateListener { @SuppressWarnings("unused") - private DiscordApi api; + private final DiscordApi api; - private Registry registry; - private PermissionManager manager; + private final Registry registry; + private final PermissionManager manager; public Guthix(DiscordApi api) { this.api = api; diff --git a/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java b/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java index c3c72e6..ae419e0 100644 --- a/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java +++ b/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java @@ -8,8 +8,14 @@ package dev.salmonllama.fsbot.utilities; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.guthix.CommandContext; import org.javacord.api.entity.message.embed.EmbedBuilder; +import org.javacord.api.util.logging.ExceptionLogger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.awt.*; +import java.util.Arrays; +import java.util.function.Consumer; +import java.util.function.Function; public class DiscordUtilities { public static void handleException(Exception e, CommandContext ctx) { @@ -30,4 +36,8 @@ public class DiscordUtilities { ctx.getApi().getTextChannelById(BotConfig.ACTIVITY_LOG).ifPresent(channel -> channel.sendMessage(embed)); } + + public static void report(Class... throwable) { + System.out.println(Arrays.stream(throwable)); + } } From 8282ccfe11cec2405321d9d7540567b77c4f1df7 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 16:29:14 -0400 Subject: [PATCH 40/58] "engine work" --- .../fsbot/commands/developer/BlacklistUserCommand.java | 4 ++-- .../fsbot/commands/developer/CreateGalleryCommand.java | 7 ++----- .../fsbot/commands/developer/DefaultCommand.java | 4 ++-- .../fsbot/commands/developer/InviteCommand.java | 3 ++- .../fsbot/commands/developer/PermissionCommand.java | 5 ++--- .../salmonllama/fsbot/commands/developer/TestCommand.java | 5 ++--- .../salmonllama/fsbot/commands/general/ColorCommand.java | 5 ++--- .../salmonllama/fsbot/commands/general/ColorsCommand.java | 5 ++--- .../salmonllama/fsbot/commands/general/HelpCommand.java | 4 ++-- .../salmonllama/fsbot/commands/general/OutfitCommand.java | 7 ++++--- .../salmonllama/fsbot/commands/general/PingCommand.java | 2 +- .../fsbot/commands/general/PrivacyCommand.java | 6 +++--- .../fsbot/commands/general/ShowGalleriesCommand.java | 8 ++++---- .../salmonllama/fsbot/commands/general/StatsCommand.java | 6 ++---- .../fsbot/commands/osrssearch/OsrsBodyCommand.java | 5 ++--- .../fsbot/commands/osrssearch/OsrsCapeCommand.java | 5 ++--- .../fsbot/commands/osrssearch/OsrsFeetCommand.java | 5 ++--- .../fsbot/commands/osrssearch/OsrsHandCommand.java | 5 ++--- .../fsbot/commands/osrssearch/OsrsHeadCommand.java | 5 ++--- .../fsbot/commands/osrssearch/OsrsLegsCommand.java | 5 ++--- .../fsbot/commands/osrssearch/OsrsNeckCommand.java | 5 ++--- .../fsbot/commands/osrssearch/OsrsSearchCommand.java | 5 ++--- .../fsbot/commands/osrssearch/OsrsShieldCommand.java | 5 ++--- .../fsbot/commands/osrssearch/OsrsWeaponCommand.java | 5 ++--- .../salmonllama/fsbot/commands/staff/AddColorCommand.java | 4 +--- .../dev/salmonllama/fsbot/commands/staff/EchoCommand.java | 5 ++--- .../fsbot/commands/staff/GetOutfitCommand.java | 5 ++--- .../fsbot/commands/staff/GetServersCommand.java | 5 ++--- .../fsbot/commands/staff/OutfitInfoCommand.java | 5 ++--- .../fsbot/commands/staff/RemoveOutfitCommand.java | 5 ++--- .../salmonllama/fsbot/commands/staff/RetagCommand.java | 5 ++--- .../fsbot/commands/staff/SetStatusCommand.java | 3 ++- .../fsbot/commands/staff/WelcomeMessageCommand.java | 5 ++--- .../fsbot/database/controllers/OutfitController.java | 7 ++++--- src/main/java/dev/salmonllama/fsbot/guthix/Command.java | 4 ++-- 35 files changed, 75 insertions(+), 99 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/BlacklistUserCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/BlacklistUserCommand.java index a83490d..8a7ff04 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/BlacklistUserCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/BlacklistUserCommand.java @@ -6,7 +6,7 @@ import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class BlacklistUserCommand extends Command { @Override public String name() { return "Blacklist User"; } @@ -14,7 +14,7 @@ public class BlacklistUserCommand extends Command { @Override public String usage() { return "blacklistuser "; } @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "owner"); } - @Override public Collection aliases() { return Arrays.asList("blacklistuser", "bluser", "sabusr"); } + @Override public List aliases() { return Arrays.asList("blacklistuser", "bluser", "sabusr"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/CreateGalleryCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/CreateGalleryCommand.java index 3c6d3c0..1a38b3d 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/CreateGalleryCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/CreateGalleryCommand.java @@ -5,19 +5,16 @@ package dev.salmonllama.fsbot.commands.developer; -import com.vdurmont.emoji.EmojiManager; import com.vdurmont.emoji.EmojiParser; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.database.controllers.GalleryController; import dev.salmonllama.fsbot.database.models.GalleryChannel; import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; -import org.javacord.api.util.logging.ExceptionLogger; import java.awt.*; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class CreateGalleryCommand extends Command { // TODO: This command needs help. @Override public String name() { return "Create Gallery"; } @@ -25,7 +22,7 @@ public class CreateGalleryCommand extends Command { // TODO: This command needs @Override public String usage() { return "creategallery "; } @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "owner"); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("creategallery", "addgallery", "newgallery")); } + @Override public List aliases() { return Arrays.asList("creategallery", "addgallery", "newgallery"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/DefaultCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/DefaultCommand.java index ee3ac6e..ffa135e 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/DefaultCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/DefaultCommand.java @@ -3,8 +3,8 @@ package dev.salmonllama.fsbot.commands.developer; import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; -import java.util.Collection; import java.util.Collections; +import java.util.List; public class DefaultCommand extends Command { @Override public String name() { return "Default"; } @@ -12,7 +12,7 @@ public class DefaultCommand extends Command { @Override public String usage() { return "you don't use this command"; } @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.OWNER); } - @Override public Collection aliases() { return Collections.singletonList("default"); } + @Override public List aliases() { return Collections.singletonList("default"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/InviteCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/InviteCommand.java index 8c49b64..01ca801 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/InviteCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/InviteCommand.java @@ -12,6 +12,7 @@ import org.javacord.api.entity.channel.TextChannel; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.List; public class InviteCommand extends Command { @Override public String name() { return "Invite"; } @@ -19,7 +20,7 @@ public class InviteCommand extends Command { @Override public String usage() { return "invite"; } @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "owner"); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("invite", "inv")); } + @Override public List aliases() { return Arrays.asList("invite", "inv"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/PermissionCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/PermissionCommand.java index bc70722..caeab46 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/PermissionCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/PermissionCommand.java @@ -13,9 +13,8 @@ import org.javacord.api.entity.user.User; import org.javacord.api.util.logging.ExceptionLogger; import java.awt.*; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class PermissionCommand extends Command { @Override public String name() { return "Permission"; } @@ -23,7 +22,7 @@ public class PermissionCommand extends Command { @Override public String usage() { return "permission "; } @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.OWNER); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("permission", "permissions", "perm", "perms")); } + @Override public List aliases() { return Arrays.asList("permission", "permissions", "perm", "perms"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java index 8b73033..69e1336 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/developer/TestCommand.java @@ -8,9 +8,8 @@ package dev.salmonllama.fsbot.commands.developer; import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; import dev.salmonllama.fsbot.guthix.*; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class TestCommand extends Command { @Override public String name() { return "Test"; } @@ -18,7 +17,7 @@ public class TestCommand extends Command { @Override public String usage() { return "test"; } @Override public CommandCategory category() { return CommandCategory.DEVELOPER; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.OWNER); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("test", "t")); } + @Override public List aliases() { return Arrays.asList("test", "t"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/ColorCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/ColorCommand.java index 3233977..c9ac0d5 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/ColorCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/ColorCommand.java @@ -12,9 +12,8 @@ import org.apache.logging.log4j.util.Strings; import org.javacord.api.entity.server.Server; import org.javacord.api.entity.user.User; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class ColorCommand extends Command { @Override public String name() { return "Color"; } @@ -22,7 +21,7 @@ public class ColorCommand extends Command { @Override public String usage() { return "color "; } @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("color", "colour")); } + @Override public List aliases() { return Arrays.asList("color", "colour"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/ColorsCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/ColorsCommand.java index 7b61b73..762003e 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/ColorsCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/ColorsCommand.java @@ -10,9 +10,8 @@ import dev.salmonllama.fsbot.database.controllers.ColorRoleController; import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class ColorsCommand extends Command { @Override public String name() { return "Colors"; } @@ -20,7 +19,7 @@ public class ColorsCommand extends Command { @Override public String usage() { return "colors"; } @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("colors", "colours")); } + @Override public List aliases() { return Arrays.asList("colors", "colours"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java index 70dbb64..22cdefd 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/HelpCommand.java @@ -23,7 +23,7 @@ public class HelpCommand extends Command { @Override public String usage() { return "help [String command]"; } @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("help", "h")); } + @Override public List aliases() { return Arrays.asList("help", "h"); } private final Guthix guthix; @@ -84,7 +84,7 @@ public class HelpCommand extends Command { for (Command cmd : guthix.listCommands()) { String cat = cmd.category().getCategory().toLowerCase(); if (cat.equals(category.toLowerCase())) { - builder.append("\n- ").append(cmd.name()); + builder.append("\n- ").append(cmd.aliases().get(0)); } } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/OutfitCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/OutfitCommand.java index f439337..ce5dc62 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/OutfitCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/OutfitCommand.java @@ -15,6 +15,7 @@ import org.javacord.api.util.logging.ExceptionLogger; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.concurrent.CompletableFuture; public class OutfitCommand extends Command { @@ -26,7 +27,7 @@ public class OutfitCommand extends Command { @Override public String usage() { return "outfit "; } @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return initAliases(); } + @Override public List aliases() { return initAliases(); } @Override public void onCommand(CommandContext ctx) { @@ -192,8 +193,8 @@ public class OutfitCommand extends Command { } } - private Collection initAliases() { - Collection aliases = OutfitController.getDistinctTags().join(); + private List initAliases() { + List aliases = OutfitController.getDistinctTags().join(); aliases.addAll(NON_TAG_ALIASES); return aliases; } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/PingCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/PingCommand.java index 1e437aa..8138376 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/PingCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/PingCommand.java @@ -15,7 +15,7 @@ public class PingCommand extends Command { @Override public String usage() { return "ping"; } @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Collections.singletonList("ping")); } + @Override public List aliases() { return Collections.singletonList("ping"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/PrivacyCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/PrivacyCommand.java index 0280006..753be84 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/PrivacyCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/PrivacyCommand.java @@ -3,8 +3,8 @@ package dev.salmonllama.fsbot.commands.general; import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; -import java.util.Collection; import java.util.Collections; +import java.util.List; public class PrivacyCommand extends Command { @Override public String name() { return "Privacy"; } @@ -12,12 +12,12 @@ public class PrivacyCommand extends Command { @Override public String usage() { return "privacy"; } @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return Collections.singletonList("privacy"); } + @Override public List aliases() { return Collections.singletonList("privacy"); } @Override public void onCommand(CommandContext ctx) { - String privacyUrl = "https://github.com/Salmonllama/Fashionscape-Bot/blob/database-rewrite/privacy.md"; // TODO: Change this to master + String privacyUrl = "https://github.com/Salmonllama/Fashionscape-Bot/blob/master/privacy.md"; EmbedBuilder response = new EmbedBuilder() .setTitle("Click Here to open") diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/ShowGalleriesCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/ShowGalleriesCommand.java index ff786e6..2c04ac4 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/ShowGalleriesCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/ShowGalleriesCommand.java @@ -5,9 +5,9 @@ package dev.salmonllama.fsbot.commands.general; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.stream.Collectors; import dev.salmonllama.fsbot.guthix.*; @@ -25,11 +25,11 @@ public class ShowGalleriesCommand extends Command { @Override public String usage() { return "showgalleries"; } @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("showgalleries", "listgalleries")); } + @Override public List aliases() { return Arrays.asList("showgalleries", "listgalleries"); } @Override public void onCommand(CommandContext ctx) { if (ctx.isPrivateMessage()) { - ctx.reply("This command can only be used within a server"); // TODO: Preset embeds again, yeah + ctx.reply("This command can only be used within a server"); return; } @@ -42,7 +42,7 @@ public class ShowGalleriesCommand extends Command { }); } - EmbedBuilder galleryEmbed(Collection galleries, Server server) { // TODO: Base FSBot embed. + EmbedBuilder galleryEmbed(Collection galleries, Server server) { EmbedBuilder embed = new EmbedBuilder() .setTitle("Server Gallery Channels"); diff --git a/src/main/java/dev/salmonllama/fsbot/commands/general/StatsCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/general/StatsCommand.java index c47983d..b8f78c0 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/general/StatsCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/general/StatsCommand.java @@ -1,8 +1,6 @@ package dev.salmonllama.fsbot.commands.general; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; +import java.util.*; import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; @@ -15,7 +13,7 @@ public class StatsCommand extends Command { @Override public String usage() { return "stats"; } @Override public CommandCategory category() { return CommandCategory.GENERAL; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("stats")); } + @Override public List aliases() { return Collections.singletonList("stats"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java index b799eb1..e10a9d3 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsBodyCommand.java @@ -13,9 +13,8 @@ import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class OsrsBodyCommand extends Command { @Override public String name() { return "OSRS Body"; } @@ -23,7 +22,7 @@ public class OsrsBodyCommand extends Command { @Override public String usage() { return "osrsbody <#color or item name>"; } @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07body", "osrsbody")); } + @Override public List aliases() { return Arrays.asList("07body", "osrsbody"); } private static final Logger logger = LoggerFactory.getLogger(OsrsBodyCommand.class); diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsCapeCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsCapeCommand.java index 135cc89..00a04af 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsCapeCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsCapeCommand.java @@ -13,9 +13,8 @@ import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class OsrsCapeCommand extends Command { @Override public String name() { return "OSRS Cape"; } @@ -23,7 +22,7 @@ public class OsrsCapeCommand extends Command { @Override public String usage() { return "osrscape <#color or item name>"; } @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07cape", "osrscape")); } + @Override public List aliases() { return Arrays.asList("07cape", "osrscape"); } private static final Logger logger = LoggerFactory.getLogger(OsrsCapeCommand.class); diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsFeetCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsFeetCommand.java index dc4ad65..0ec2345 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsFeetCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsFeetCommand.java @@ -13,9 +13,8 @@ import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class OsrsFeetCommand extends Command { @Override public String name() { return "OSRS Feet"; } @@ -23,7 +22,7 @@ public class OsrsFeetCommand extends Command { @Override public String usage() { return "osrsfeet <#color or item name>"; } @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07feet", "osrsfeet")); } + @Override public List aliases() { return Arrays.asList("07feet", "osrsfeet"); } private static final Logger logger = LoggerFactory.getLogger(OsrsFeetCommand.class); diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHandCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHandCommand.java index 44a0f33..5307266 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHandCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHandCommand.java @@ -13,9 +13,8 @@ import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class OsrsHandCommand extends Command { @Override public String name() { return "OSRS Hand"; } @@ -23,7 +22,7 @@ public class OsrsHandCommand extends Command { @Override public String usage() { return "osrshand <#color or item name>"; } @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07hand", "osrshand")); } + @Override public List aliases() { return Arrays.asList("07hand", "osrshand"); } private static final Logger logger = LoggerFactory.getLogger(OsrsHandCommand.class); diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHeadCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHeadCommand.java index 140ef2e..c180bd3 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHeadCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsHeadCommand.java @@ -13,9 +13,8 @@ import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class OsrsHeadCommand extends Command { @Override public String name() { return "OSRS Head"; } @@ -23,7 +22,7 @@ public class OsrsHeadCommand extends Command { @Override public String usage() { return "osrshead <#color or item name>"; } @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07head", "osrshead")); } + @Override public List aliases() { return Arrays.asList("07head", "osrshead"); } private static final Logger logger = LoggerFactory.getLogger(OsrsHeadCommand.class); diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsLegsCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsLegsCommand.java index 95302ff..0cc79b6 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsLegsCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsLegsCommand.java @@ -13,9 +13,8 @@ import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class OsrsLegsCommand extends Command { @Override public String name() { return "OSRS Legs"; } @@ -23,7 +22,7 @@ public class OsrsLegsCommand extends Command { @Override public String usage() { return "osrslegs <#color or item name>"; } @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07legs", "osrslegs")); } + @Override public List aliases() { return Arrays.asList("07legs", "osrslegs"); } private static final Logger logger = LoggerFactory.getLogger(OsrsLegsCommand.class); diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsNeckCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsNeckCommand.java index b7af727..e6ac5c8 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsNeckCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsNeckCommand.java @@ -13,9 +13,8 @@ import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class OsrsNeckCommand extends Command { @Override public String name() { return "OSRS Neck"; } @@ -23,7 +22,7 @@ public class OsrsNeckCommand extends Command { @Override public String usage() { return "osrsneck <#color or item name>"; } @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07neck", "osrsneck")); } + @Override public List aliases() { return Arrays.asList("07neck", "osrsneck"); } private static final Logger logger = LoggerFactory.getLogger(OsrsNeckCommand.class); diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchCommand.java index 6cf5fcf..695fe01 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchCommand.java @@ -12,9 +12,8 @@ import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class OsrsSearchCommand extends Command { @Override public String name() { return "OSRS Search"; } @@ -22,7 +21,7 @@ public class OsrsSearchCommand extends Command { @Override public String usage() { return "osrssearch <#color or item name>"; } @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07search", "osrssearch")); } + @Override public List aliases() { return Arrays.asList("07search", "osrssearch"); } private static final Logger logger = LoggerFactory.getLogger(OsrsSearchCommand.class); diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsShieldCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsShieldCommand.java index f776eae..51262ed 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsShieldCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsShieldCommand.java @@ -13,9 +13,8 @@ import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class OsrsShieldCommand extends Command { @Override public String name() { return "OSRS Shield"; } @@ -23,7 +22,7 @@ public class OsrsShieldCommand extends Command { @Override public String usage() { return "osrsshield <#color or item name>"; } @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07shield", "osrsshield")); } + @Override public List aliases() { return Arrays.asList("07shield", "osrsshield"); } private static final Logger logger = LoggerFactory.getLogger(OsrsShieldCommand.class); diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsWeaponCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsWeaponCommand.java index 6898449..ea2d7c9 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsWeaponCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsWeaponCommand.java @@ -13,9 +13,8 @@ import org.apache.logging.log4j.util.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class OsrsWeaponCommand extends Command { @Override public String name() { return "OSRS Weapon"; } @@ -23,7 +22,7 @@ public class OsrsWeaponCommand extends Command { @Override public String usage() { return "osrsweapon <#color or item name>"; } @Override public CommandCategory category() { return CommandCategory.OSRS_ITEM_SEARCH; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("07weapon", "osrsweapon")); } + @Override public List aliases() { return Arrays.asList("07weapon", "osrsweapon"); } private static final Logger logger = LoggerFactory.getLogger(OsrsWeaponCommand.class); diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/AddColorCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/AddColorCommand.java index 4d0bb79..8ff0c0e 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/AddColorCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/AddColorCommand.java @@ -11,9 +11,7 @@ import dev.salmonllama.fsbot.database.models.ColorRole; import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.permission.Role; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.List; public class AddColorCommand extends Command { @@ -22,7 +20,7 @@ public class AddColorCommand extends Command { @Override public String usage() { return "addcolor "; } @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("addcolor", "addcolour", "addclr")); } + @Override public List aliases() { return Arrays.asList("addcolor", "addcolour", "addclr"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java index f0a4e6a..82076fe 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/EchoCommand.java @@ -7,9 +7,8 @@ package dev.salmonllama.fsbot.commands.staff; import dev.salmonllama.fsbot.guthix.*; -import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; +import java.util.List; public class EchoCommand extends Command { @Override public String name() { return "Echo"; } @@ -17,7 +16,7 @@ public class EchoCommand extends Command { @Override public String usage() { return "echo "; } @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } - @Override public Collection aliases() { return new ArrayList<>(Collections.singletonList("echo")); } + @Override public List aliases() { return Collections.singletonList("echo"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/GetOutfitCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/GetOutfitCommand.java index 8411e23..b5d8911 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/GetOutfitCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/GetOutfitCommand.java @@ -8,9 +8,8 @@ package dev.salmonllama.fsbot.commands.staff; import dev.salmonllama.fsbot.database.controllers.OutfitController; import dev.salmonllama.fsbot.guthix.*; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class GetOutfitCommand extends Command { @Override public String name() { return "Get Outift"; } @@ -18,7 +17,7 @@ public class GetOutfitCommand extends Command { @Override public String usage() { return "getoutfit "; } @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("getoutfit", "get")); } + @Override public List aliases() { return Arrays.asList("getoutfit", "get"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/GetServersCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/GetServersCommand.java index ac849ca..7c6207f 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/GetServersCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/GetServersCommand.java @@ -11,9 +11,8 @@ import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.server.Server; import java.awt.*; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class GetServersCommand extends Command { @Override public String name() { return "Get Servers"; } @@ -21,7 +20,7 @@ public class GetServersCommand extends Command { @Override public String usage() { return "getservers"; } @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("getservers", "servers")); } + @Override public List aliases() { return Arrays.asList("getservers", "servers"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/OutfitInfoCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/OutfitInfoCommand.java index 7f61f08..f1de22d 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/OutfitInfoCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/OutfitInfoCommand.java @@ -9,9 +9,8 @@ import dev.salmonllama.fsbot.database.controllers.OutfitController; import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class OutfitInfoCommand extends Command { @Override public String name() { return "Outfit Info"; } @@ -19,7 +18,7 @@ public class OutfitInfoCommand extends Command { @Override public String usage() { return "outfitinfo "; } @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("outfitinfo", "oinfo")); } + @Override public List aliases() { return Arrays.asList("outfitinfo", "oinfo"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java index bb80328..c3de223 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java @@ -12,9 +12,8 @@ import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.channel.TextChannel; import org.javacord.api.entity.message.embed.EmbedBuilder; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class RemoveOutfitCommand extends Command { @Override public String name() { return "Remove Outfit"; } @@ -22,7 +21,7 @@ public class RemoveOutfitCommand extends Command { @Override public String usage() { return "remove "; } @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("removeoutfit", "remove")); } + @Override public List aliases() { return Arrays.asList("removeoutfit", "remove"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java index dc6b58c..fc60b47 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java @@ -15,9 +15,8 @@ import org.javacord.api.entity.message.embed.EmbedBuilder; import java.awt.*; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; +import java.util.List; public class RetagCommand extends Command { @Override public String name() { return "Retag"; } @@ -25,7 +24,7 @@ public class RetagCommand extends Command { @Override public String usage() { return "retag "; } @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } - @Override public Collection aliases() { return new ArrayList<>(Collections.singletonList("retag")); } + @Override public List aliases() { return Collections.singletonList("retag"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/SetStatusCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/SetStatusCommand.java index 23d14c1..7199d10 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/SetStatusCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/SetStatusCommand.java @@ -13,6 +13,7 @@ import java.awt.*; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.List; public class SetStatusCommand extends Command { @Override public String name() { return "Set Status"; } @@ -20,7 +21,7 @@ public class SetStatusCommand extends Command { @Override public String usage() { return "updatestatus "; } @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("setstatus", "status")); } + @Override public List aliases() { return Arrays.asList("setstatus", "status"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/WelcomeMessageCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/WelcomeMessageCommand.java index 1beb597..cc678db 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/WelcomeMessageCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/WelcomeMessageCommand.java @@ -12,9 +12,8 @@ import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.util.logging.ExceptionLogger; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; +import java.util.List; public class WelcomeMessageCommand extends Command { @Override public String name() { return "Welcome Message"; } @@ -22,7 +21,7 @@ public class WelcomeMessageCommand extends Command { @Override public String usage() { return "welcomemessage [String newMessage]"; } @Override public CommandCategory category() { return CommandCategory.STAFF; } @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } - @Override public Collection aliases() { return new ArrayList<>(Arrays.asList("welcomemessage", "wmsg")); } + @Override public List aliases() { return Arrays.asList("welcomemessage", "wmsg"); } @Override public void onCommand(CommandContext ctx) { diff --git a/src/main/java/dev/salmonllama/fsbot/database/controllers/OutfitController.java b/src/main/java/dev/salmonllama/fsbot/database/controllers/OutfitController.java index 8d6e385..ae9de84 100644 --- a/src/main/java/dev/salmonllama/fsbot/database/controllers/OutfitController.java +++ b/src/main/java/dev/salmonllama/fsbot/database/controllers/OutfitController.java @@ -13,6 +13,7 @@ import java.sql.SQLException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; @@ -159,7 +160,7 @@ public class OutfitController { }); } - public static CompletableFuture> getDistinctTags() { + public static CompletableFuture> getDistinctTags() { return CompletableFuture.supplyAsync(() -> { try { return getDistinctTagsExec(); @@ -332,10 +333,10 @@ public class OutfitController { return extractCount(rs); } - private static Collection getDistinctTagsExec() throws SQLException { + private static List getDistinctTagsExec() throws SQLException { ResultSet rs = FSDB.get().select("SELECT DISTINCT tag FROM outfits"); - Collection tags = new ArrayList<>(); + List tags = new ArrayList<>(); while (rs.next()) { tags.add(rs.getString("tag")); } diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/Command.java b/src/main/java/dev/salmonllama/fsbot/guthix/Command.java index 8ee9c16..c904818 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/Command.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/Command.java @@ -5,7 +5,7 @@ package dev.salmonllama.fsbot.guthix; -import java.util.Collection; +import java.util.List; import java.util.concurrent.CompletableFuture; public abstract class Command { @@ -14,7 +14,7 @@ public abstract class Command { public abstract String usage(); public abstract CommandCategory category(); public abstract CommandPermission permission(); - public abstract Collection aliases(); + public abstract List aliases(); public abstract void onCommand(CommandContext ctx); From a98ef34290725bf2e9d4c81a8a941f66056800eb Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 16:29:28 -0400 Subject: [PATCH 41/58] Added wiki link to embed footer --- .../fsbot/commands/osrssearch/OsrsSearchUtilities.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java index 9debece..bf58007 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java @@ -26,6 +26,7 @@ public class OsrsSearchUtilities { .setImage(bestMatch.getImages().getDetail()) .setUrl(result.getLink()) .setColor(Color.decode(bestMatch.getColors()[0])) + .setFooter(String.format("Wiki: %s", result.getLink())) .addField("Match:", String.valueOf(bestMatch.getMatch()), true) .addField("Colors:", colors, true) From a4a0f6a6346750754ebdb95f5d7d4a3b7044f754 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 17:27:35 -0400 Subject: [PATCH 42/58] Temporarily disabled unsafe operations --- .../salmonllama/fsbot/utilities/DiscordUtilities.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java b/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java index ae419e0..770c72b 100644 --- a/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java +++ b/src/main/java/dev/salmonllama/fsbot/utilities/DiscordUtilities.java @@ -8,14 +8,9 @@ package dev.salmonllama.fsbot.utilities; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.guthix.CommandContext; import org.javacord.api.entity.message.embed.EmbedBuilder; -import org.javacord.api.util.logging.ExceptionLogger; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.awt.*; import java.util.Arrays; -import java.util.function.Consumer; -import java.util.function.Function; public class DiscordUtilities { public static void handleException(Exception e, CommandContext ctx) { @@ -37,7 +32,7 @@ public class DiscordUtilities { ctx.getApi().getTextChannelById(BotConfig.ACTIVITY_LOG).ifPresent(channel -> channel.sendMessage(embed)); } - public static void report(Class... throwable) { - System.out.println(Arrays.stream(throwable)); - } +// public static void report(Class... throwable) { +// System.out.println(Arrays.stream(throwable)); +// } } From 39cf590cf4902a0b68d06a3aaaaa187c737df929 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Sat, 12 Sep 2020 17:41:28 -0400 Subject: [PATCH 43/58] Add wiki denotation to author field --- .../fsbot/commands/osrssearch/OsrsSearchUtilities.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java index bf58007..1c7c28d 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java @@ -24,9 +24,9 @@ public class OsrsSearchUtilities { EmbedBuilder embed = new EmbedBuilder() .setTitle(String.format("Best Match - %s", bestMatch.getName())) .setImage(bestMatch.getImages().getDetail()) + .setAuthor(String.format("Wiki: %s", bestMatch.getName()), bestMatch.getWiki().getLink(), bestMatch.getImages().getDetail()) .setUrl(result.getLink()) .setColor(Color.decode(bestMatch.getColors()[0])) - .setFooter(String.format("Wiki: %s", result.getLink())) .addField("Match:", String.valueOf(bestMatch.getMatch()), true) .addField("Colors:", colors, true) From 17c88fa37935093ab7bf9bc0bb49f1a748ff2a7d Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Mon, 14 Sep 2020 09:24:18 -0400 Subject: [PATCH 44/58] Completed RS3Search module --- .../commands/rs3search/Rs3BackCommand.java | 61 +++++++++++++++++++ .../commands/rs3search/Rs3BodyCommand.java | 61 +++++++++++++++++++ .../commands/rs3search/Rs3FeetCommand.java | 61 +++++++++++++++++++ .../commands/rs3search/Rs3HandCommand.java | 61 +++++++++++++++++++ .../commands/rs3search/Rs3HeadCommand.java | 61 +++++++++++++++++++ .../commands/rs3search/Rs3LegsCommand.java | 61 +++++++++++++++++++ .../rs3search/Rs3MainhandCommand.java | 60 ++++++++++++++++++ .../commands/rs3search/Rs3NeckCommand.java | 61 +++++++++++++++++++ .../commands/rs3search/Rs3OffhandCommand.java | 60 ++++++++++++++++++ .../commands/rs3search/Rs3SearchCommand.java | 60 ++++++++++++++++++ .../rs3search/Rs3SearchUtilities.java | 35 +++++++++++ .../rs3search/Rs3TwohandedCommand.java | 60 ++++++++++++++++++ .../dev/salmonllama/fsbot/guthix/Guthix.java | 14 ++++- 13 files changed, 715 insertions(+), 1 deletion(-) create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3BackCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3BodyCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3FeetCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3HandCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3HeadCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3LegsCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3MainhandCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3NeckCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3OffhandCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3SearchCommand.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3SearchUtilities.java create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3TwohandedCommand.java diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3BackCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3BackCommand.java new file mode 100644 index 0000000..3fffdc4 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3BackCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotRs3; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class Rs3BackCommand extends Command { + @Override public String name() { return "RS3 Back"; } + @Override public String description() { return "Searches scape.fashion for rs3 back slot items."; } + @Override public String usage() { return "rs3back <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.RS3_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public List aliases() { return Collections.singletonList("rs3back"); } + + private static final Logger logger = LoggerFactory.getLogger(Rs3BackCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (Rs3SearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.rs3Color(params, ScapeFashionSlotRs3.BACK); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.rs3Item(params, ScapeFashionSlotRs3.BACK); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3BodyCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3BodyCommand.java new file mode 100644 index 0000000..1102423 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3BodyCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotRs3; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class Rs3BodyCommand extends Command { + @Override public String name() { return "RS3 Body"; } + @Override public String description() { return "Searches scape.fashion for rs3 body slot items."; } + @Override public String usage() { return "rs3body <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.RS3_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public List aliases() { return Collections.singletonList("rs3body"); } + + private static final Logger logger = LoggerFactory.getLogger(Rs3BodyCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (Rs3SearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.rs3Color(params, ScapeFashionSlotRs3.TORSO); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.rs3Item(params, ScapeFashionSlotRs3.TORSO); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3FeetCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3FeetCommand.java new file mode 100644 index 0000000..bf3ee85 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3FeetCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotRs3; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class Rs3FeetCommand extends Command { + @Override public String name() { return "RS3 Feet"; } + @Override public String description() { return "Searches scape.fashion for rs3 foot slot items."; } + @Override public String usage() { return "rs3feet <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.RS3_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public List aliases() { return Collections.singletonList("rs3feet"); } + + private static final Logger logger = LoggerFactory.getLogger(Rs3FeetCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (Rs3SearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.rs3Color(params, ScapeFashionSlotRs3.FEET); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.rs3Item(params, ScapeFashionSlotRs3.FEET); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3HandCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3HandCommand.java new file mode 100644 index 0000000..25b4c88 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3HandCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotRs3; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class Rs3HandCommand extends Command { + @Override public String name() { return "RS3 Hand"; } + @Override public String description() { return "Searches scape.fashion for rs3 hand slot items."; } + @Override public String usage() { return "rs3hand <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.RS3_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public List aliases() { return Collections.singletonList("rs3hand"); } + + private static final Logger logger = LoggerFactory.getLogger(Rs3HandCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (Rs3SearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.rs3Color(params, ScapeFashionSlotRs3.HAND); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.rs3Item(params, ScapeFashionSlotRs3.HAND); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3HeadCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3HeadCommand.java new file mode 100644 index 0000000..6311fe7 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3HeadCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotRs3; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class Rs3HeadCommand extends Command { + @Override public String name() { return "RS3 Head"; } + @Override public String description() { return "Searches scape.fashion for rs3 head slot items."; } + @Override public String usage() { return "rs3head <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.RS3_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public List aliases() { return Collections.singletonList("rs3head"); } + + private static final Logger logger = LoggerFactory.getLogger(Rs3HeadCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (Rs3SearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.rs3Color(params, ScapeFashionSlotRs3.HEAD); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.rs3Item(params, ScapeFashionSlotRs3.HEAD); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3LegsCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3LegsCommand.java new file mode 100644 index 0000000..fdf245d --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3LegsCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotRs3; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class Rs3LegsCommand extends Command { + @Override public String name() { return "RS3 Legs"; } + @Override public String description() { return "Searches scape.fashion for rs3 leg slot items."; } + @Override public String usage() { return "rs3legs <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.RS3_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public List aliases() { return Collections.singletonList("rs3legs"); } + + private static final Logger logger = LoggerFactory.getLogger(Rs3LegsCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (Rs3SearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.rs3Color(params, ScapeFashionSlotRs3.LEG); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.rs3Item(params, ScapeFashionSlotRs3.LEG); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3MainhandCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3MainhandCommand.java new file mode 100644 index 0000000..1ae22a5 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3MainhandCommand.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotRs3; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.List; + +public class Rs3MainhandCommand extends Command { + @Override public String name() { return "RS3 Mainhand"; } + @Override public String description() { return "Searches scape.fashion for rs3 mainhand slot items."; } + @Override public String usage() { return "rs3mainhand <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.RS3_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public List aliases() { return Arrays.asList("rs3mainhand", "rs3mh"); } + + private static final Logger logger = LoggerFactory.getLogger(Rs3MainhandCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (Rs3SearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.rs3Color(params, ScapeFashionSlotRs3.MAIN_HAND); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.rs3Item(params, ScapeFashionSlotRs3.MAIN_HAND); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3NeckCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3NeckCommand.java new file mode 100644 index 0000000..466ed77 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3NeckCommand.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotRs3; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class Rs3NeckCommand extends Command { + @Override public String name() { return "RS3 Neck"; } + @Override public String description() { return "Searches scape.fashion for rs3 neck slot items."; } + @Override public String usage() { return "rs3neck <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.RS3_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public List aliases() { return Collections.singletonList("rs3neck"); } + + private static final Logger logger = LoggerFactory.getLogger(Rs3NeckCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (Rs3SearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.rs3Color(params, ScapeFashionSlotRs3.NECK); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.rs3Item(params, ScapeFashionSlotRs3.NECK); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3OffhandCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3OffhandCommand.java new file mode 100644 index 0000000..a5fe708 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3OffhandCommand.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotRs3; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.List; + +public class Rs3OffhandCommand extends Command { + @Override public String name() { return "RS3 Offhand"; } + @Override public String description() { return "Searches scape.fashion for rs3 offhand slot items."; } + @Override public String usage() { return "rs3offhand <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.RS3_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public List aliases() { return Arrays.asList("rs3offhand", "rs3oh"); } + + private static final Logger logger = LoggerFactory.getLogger(Rs3OffhandCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (Rs3SearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.rs3Color(params, ScapeFashionSlotRs3.OFF_HAND); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.rs3Item(params, ScapeFashionSlotRs3.OFF_HAND); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3SearchCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3SearchCommand.java new file mode 100644 index 0000000..362496c --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3SearchCommand.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class Rs3SearchCommand extends Command { + @Override public String name() { return "RS3 Search"; } + @Override public String description() { return "Searches scape.fashion for rs3 items."; } + @Override public String usage() { return "rs3search <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.RS3_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public List aliases() { return Collections.singletonList("rs3search"); } + + private static final Logger logger = LoggerFactory.getLogger(Rs3SearchCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (Rs3SearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.rs3Color(params); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.rs3Item(params); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3SearchUtilities.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3SearchUtilities.java new file mode 100644 index 0000000..d2d22d6 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3SearchUtilities.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionResult; +import org.apache.logging.log4j.util.Strings; +import org.javacord.api.entity.channel.TextChannel; +import org.javacord.api.entity.message.embed.EmbedBuilder; + +import java.awt.*; +import java.util.Arrays; + +public class Rs3SearchUtilities { + static boolean isColor(String s) { + return s.startsWith("#"); + } + + static void sendResult(ScapeFashionResult result, TextChannel channel) { + var bestMatch = result.getItems().get(0); + var colors = Strings.join(Arrays.asList(bestMatch.getColors()), ','); + EmbedBuilder embed = new EmbedBuilder() + .setTitle(String.format("Best Match - %s", bestMatch.getName())) + .setImage(bestMatch.getImages().getDetail()) + .setAuthor(String.format("Wiki: %s", bestMatch.getName()), bestMatch.getWiki().getLink(), bestMatch.getImages().getDetail()) + .setUrl(result.getLink()) + .setColor(Color.decode(bestMatch.getColors()[0])) + .addField("Match:", String.valueOf(bestMatch.getMatch()), true) + .addField("Colors:", colors, true); + + channel.sendMessage(embed); + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3TwohandedCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3TwohandedCommand.java new file mode 100644 index 0000000..3499732 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/rs3search/Rs3TwohandedCommand.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.rs3search; + +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionConnection; +import dev.salmonllama.fsbot.endpoints.scapefashion.ScapeFashionSlotRs3; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.utilities.DiscordUtilities; +import org.apache.logging.log4j.util.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.List; + +public class Rs3TwohandedCommand extends Command { + @Override public String name() { return "RS3 Twohanded"; } + @Override public String description() { return "Searches scape.fashion for rs3 twohanded slot items."; } + @Override public String usage() { return "rs3twohanded <#color or item name>"; } + @Override public CommandCategory category() { return CommandCategory.RS3_ITEM_SEARCH; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.NONE); } + @Override public List aliases() { return Arrays.asList("rs3twohanded", "rs32h"); } + + private static final Logger logger = LoggerFactory.getLogger(Rs3TwohandedCommand.class); + + @Override + public void onCommand(CommandContext ctx) { + if (ctx.getArgs().length == 0) { + ctx.reply("Specify something"); + return; + } + + var args = ctx.getArgs(); + ScapeFashionConnection conn = new ScapeFashionConnection(); + var params = Strings.join(Arrays.asList(args), ' '); + + if (Rs3SearchUtilities.isColor(args[0])) { + // Color search + try { + var bestMatch = conn.rs3Color(params, ScapeFashionSlotRs3.TWO_HANDED); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } else { + // Item search + try { + var bestMatch = conn.rs3Item(params, ScapeFashionSlotRs3.TWO_HANDED); + Rs3SearchUtilities.sendResult(bestMatch, ctx.getChannel()); + } catch (Exception e) { + logger.error(e.getMessage()); + DiscordUtilities.handleException(e, ctx); + } + } + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java index 9e81aa1..f53fca4 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java @@ -8,6 +8,7 @@ package dev.salmonllama.fsbot.guthix; import dev.salmonllama.fsbot.commands.developer.*; import dev.salmonllama.fsbot.commands.general.*; import dev.salmonllama.fsbot.commands.osrssearch.*; +import dev.salmonllama.fsbot.commands.rs3search.*; import dev.salmonllama.fsbot.commands.staff.OutfitInfoCommand; import dev.salmonllama.fsbot.commands.staff.*; import org.javacord.api.DiscordApi; @@ -70,7 +71,7 @@ public class Guthix implements MessageCreateListener { addCommand(new OsrsSearchCommand()); addCommand(new OsrsHeadCommand()); addCommand(new OsrsBodyCommand()); - addCommand(new OsrsHeadCommand()); + addCommand(new OsrsHandCommand()); addCommand(new OsrsLegsCommand()); addCommand(new OsrsFeetCommand()); addCommand(new OsrsCapeCommand()); @@ -79,6 +80,17 @@ public class Guthix implements MessageCreateListener { addCommand(new OsrsWeaponCommand()); // Rs3 Search Commands + addCommand(new Rs3SearchCommand()); + addCommand(new Rs3HeadCommand()); + addCommand(new Rs3BodyCommand()); + addCommand(new Rs3NeckCommand()); + addCommand(new Rs3HandCommand()); + addCommand(new Rs3FeetCommand()); + addCommand(new Rs3LegsCommand()); + addCommand(new Rs3BackCommand()); + addCommand(new Rs3MainhandCommand()); + addCommand(new Rs3OffhandCommand()); + addCommand(new Rs3TwohandedCommand()); } public void addCommand(Command cmd) { From 6c3f4c27bfd37bc419d81270fafbb189d7509b86 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Mon, 14 Sep 2020 09:24:57 -0400 Subject: [PATCH 45/58] Removed embed body text --- .../fsbot/commands/osrssearch/OsrsSearchUtilities.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java index 1c7c28d..d337a2c 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/osrssearch/OsrsSearchUtilities.java @@ -28,9 +28,7 @@ public class OsrsSearchUtilities { .setUrl(result.getLink()) .setColor(Color.decode(bestMatch.getColors()[0])) .addField("Match:", String.valueOf(bestMatch.getMatch()), true) - .addField("Colors:", colors, true) - - .setDescription(String.format("Click the title or visit %s for full results!", result.getLink())); + .addField("Colors:", colors, true); channel.sendMessage(embed); } From 2fde19f703c6d51cd6aaa921daaab8663770b571 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Mon, 14 Sep 2020 09:25:12 -0400 Subject: [PATCH 46/58] Made rs3 search methods public --- .../endpoints/scapefashion/ScapeFashionConnection.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java index 2bf6301..19ce43a 100644 --- a/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java +++ b/src/main/java/dev/salmonllama/fsbot/endpoints/scapefashion/ScapeFashionConnection.java @@ -72,7 +72,7 @@ public class ScapeFashionConnection { return response; } - private ScapeFashionResult rs3Color(String color) throws Exception { + public ScapeFashionResult rs3Color(String color) throws Exception { String uri = RS3_REQUEST_URL + "/colors/" + encode(color); String link = RS3_LINK_URL + "/colors/" + encode(color); @@ -81,7 +81,7 @@ public class ScapeFashionConnection { return response; } - private ScapeFashionResult rs3Color(String color, ScapeFashionSlotRs3 slot) throws Exception { + public ScapeFashionResult rs3Color(String color, ScapeFashionSlotRs3 slot) throws Exception { String uri = RS3_REQUEST_URL + "/colors/" + encode(color) + "?slot=" + encode(slot.getValue()); String link = RS3_LINK_URL + "/colors/" + encode(color) + "?slot=" + encode(slot.getValue()); @@ -90,7 +90,7 @@ public class ScapeFashionConnection { return response; } - private ScapeFashionResult rs3Item(String item) throws Exception { + public ScapeFashionResult rs3Item(String item) throws Exception { String uri = RS3_REQUEST_URL + "/items/" + encode(item); String link = RS3_LINK_URL + "/items/" + encode(item); @@ -102,7 +102,7 @@ public class ScapeFashionConnection { return response; } - private ScapeFashionResult rs3Item(String item, ScapeFashionSlotRs3 slot) throws Exception { + public ScapeFashionResult rs3Item(String item, ScapeFashionSlotRs3 slot) throws Exception { String uri = RS3_REQUEST_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); String link = RS3_LINK_URL + "/items/" + encode(item) + "?slot=" + encode(slot.getValue()); From 48f3c252a6e39cd41d7301d9deff562b552c2117 Mon Sep 17 00:00:00 2001 From: Aleksei Gryczewski Date: Sat, 3 Oct 2020 15:31:44 +0000 Subject: [PATCH 47/58] Restored color-coded log messages --- .../salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java | 2 ++ .../java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java | 1 + .../java/dev/salmonllama/fsbot/listeners/ImageListener.java | 2 ++ 3 files changed, 5 insertions(+) diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java index c3de223..c4044be 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java @@ -12,6 +12,7 @@ import dev.salmonllama.fsbot.guthix.*; import org.javacord.api.entity.channel.TextChannel; import org.javacord.api.entity.message.embed.EmbedBuilder; +import java.awt.Color; import java.util.Arrays; import java.util.List; @@ -73,6 +74,7 @@ public class RemoveOutfitCommand extends Command { EmbedBuilder log = new EmbedBuilder() .setTitle("Outfit Marked as Deleted") .setThumbnail(outfit.getLink()) + .setColor(Color.RED) .addField("Deleted By:", ctx.getAuthor().getDiscriminatedName()); ctx.getApi().getServerTextChannelById(BotConfig.OUTFIT_LOG).ifPresent( diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java index fc60b47..f548e22 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java @@ -77,6 +77,7 @@ public class RetagCommand extends Command { EmbedBuilder log = new EmbedBuilder() .setTitle("Outfit Retagged") + .setColor(Color.YELLOW) .setThumbnail(outfit.getLink()) .addField("New tag:", newTag); diff --git a/src/main/java/dev/salmonllama/fsbot/listeners/ImageListener.java b/src/main/java/dev/salmonllama/fsbot/listeners/ImageListener.java index 021d49d..6b9f98d 100644 --- a/src/main/java/dev/salmonllama/fsbot/listeners/ImageListener.java +++ b/src/main/java/dev/salmonllama/fsbot/listeners/ImageListener.java @@ -17,6 +17,7 @@ import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.event.message.MessageCreateEvent; import org.javacord.api.listener.message.MessageCreateListener; import org.javacord.api.util.logging.ExceptionLogger; +import java.awt.Color; import java.util.UUID; @@ -107,6 +108,7 @@ public class ImageListener implements MessageCreateListener { .setThumbnail(outfit.getLink()) .setFooter(String.format("%s | %s", outfit.getTag(), outfit.getId())) .setUrl(outfit.getLink()) + .setColor(Color.GREEN) .addField("Uploaded:", outfit.getCreated().toString()); if (!outfit.getMeta().equals("")) { From 19b2eef56b0b376b4fced753ef33cfd30c64d1a9 Mon Sep 17 00:00:00 2001 From: salmonllama Date: Sat, 3 Oct 2020 18:04:39 -0400 Subject: [PATCH 48/58] Added command to edit outfit meta --- .../fsbot/commands/staff/EditMetaCommand.java | 98 +++++++++++++++++++ .../fsbot/database/models/Outfit.java | 4 + .../dev/salmonllama/fsbot/guthix/Guthix.java | 1 + 3 files changed, 103 insertions(+) create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/staff/EditMetaCommand.java diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/EditMetaCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/EditMetaCommand.java new file mode 100644 index 0000000..fc00479 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/EditMetaCommand.java @@ -0,0 +1,98 @@ +package dev.salmonllama.fsbot.commands.staff; + +import com.vdurmont.emoji.EmojiParser; +import dev.salmonllama.fsbot.config.BotConfig; +import dev.salmonllama.fsbot.database.controllers.OutfitController; +import dev.salmonllama.fsbot.guthix.*; +import org.apache.logging.log4j.util.Strings; +import org.javacord.api.entity.message.embed.EmbedBuilder; + +import java.awt.*; +import java.util.Arrays; +import java.util.List; + +public class EditMetaCommand extends Command { + @Override public String name() { return "Edit Meta"; } + @Override public String description() { return "Edit the meta information on the given outfit"; } + @Override public String usage() { return "editmeta "; } + @Override public CommandCategory category() { return CommandCategory.STAFF; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "staff"); } + @Override public List aliases() { return Arrays.asList("editmeta", "emeta"); } + + @Override + public void onCommand(CommandContext ctx) { + var args = ctx.getArgs(); + var newMeta = Strings.join(Arrays.asList(Arrays.copyOfRange(args, 1, args.length)), ' '); + var channel = ctx.getChannel(); + var authorId = ctx.getUser().getId(); + + if (args.length != 1) { + channel.sendMessage("You must supply a valid outfit ID."); + return; + } + + // get the outfit, confirm meta-edit through confirmation + String outfitId = args[0]; + OutfitController.findById(outfitId).thenAcceptAsync(possibleOutfit -> possibleOutfit.ifPresentOrElse(outfit -> { + // Send outfit info, react with selectors, add a listener to the message + EmbedBuilder embed = new EmbedBuilder() + .setTitle("Confirm Meta Edit") + .setThumbnail(outfit.getLink()) + .setAuthor(ctx.getApi().getUserById(outfit.getSubmitter()).join()) + .setUrl(outfit.getLink()) + .setFooter(String.format("Tag: %s", outfit.getTag())) + .addField("Submitted by:", ctx.getApi().getUserById(outfit.getSubmitter()).join().getDiscriminatedName()) + .addField("Current Meta", outfit.getMeta()) + .addField("Proposed Meta", newMeta); + + ctx.reply(embed).thenAcceptAsync(msg -> { + msg.addReaction(EmojiParser.parseToUnicode(":white_check_mark:")); + msg.addReaction(EmojiParser.parseToUnicode(":octagonal_sign:")); + + msg.addReactionAddListener(event -> { + if (event.getUser().getId() != authorId) { + return; + } + + if (event.getEmoji().equalsEmoji(EmojiParser.parseToUnicode(":white_check_mark:"))) { + // Edit the outfit's meta + + outfit.setMeta(newMeta); + OutfitController.update(outfit); + + EmbedBuilder response = new EmbedBuilder() + .setTitle("Meta Modification Successful!") + .setDescription(String.format("New Meta: %s", outfit.getMeta())); + + msg.delete(); + ctx.reply(response); + + EmbedBuilder log = new EmbedBuilder() + .setTitle("Outfit Meta Changed") + .setThumbnail(outfit.getLink()) + .setColor(Color.YELLOW) + .addField("Edited By:", ctx.getAuthor().getDiscriminatedName()); + + ctx.getApi().getServerTextChannelById(BotConfig.OUTFIT_LOG).ifPresent( + chnl -> chnl.sendMessage(log) + ); + + } else if (event.getEmoji().equalsEmoji(EmojiParser.parseToUnicode(":octagonal_sign:"))) { + // Do nothing + EmbedBuilder response = new EmbedBuilder() + .setTitle("Meta Modification Aborted") + .setDescription(String.format("No modifications were made to %s", outfit.getId())); + + ctx.reply(response); + } + }); + }); + }, () -> { + EmbedBuilder response = new EmbedBuilder() + .setTitle("Outfit not Found") + .setDescription(String.format("ID %s does not exist", outfitId)); + + ctx.reply(response); + })); + } +} diff --git a/src/main/java/dev/salmonllama/fsbot/database/models/Outfit.java b/src/main/java/dev/salmonllama/fsbot/database/models/Outfit.java index 6791f5d..3e436ac 100644 --- a/src/main/java/dev/salmonllama/fsbot/database/models/Outfit.java +++ b/src/main/java/dev/salmonllama/fsbot/database/models/Outfit.java @@ -56,6 +56,10 @@ public class Outfit extends DatabaseModel { return meta; } + public void setMeta(String meta) { + this.meta = meta; + } + public Timestamp getCreated() { return created; } diff --git a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java index f53fca4..edcda78 100644 --- a/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java +++ b/src/main/java/dev/salmonllama/fsbot/guthix/Guthix.java @@ -57,6 +57,7 @@ public class Guthix implements MessageCreateListener { addCommand(new SetStatusCommand()); addCommand(new WelcomeMessageCommand()); addCommand(new ShowGalleriesCommand()); + addCommand(new EditMetaCommand()); // General Commands addCommand(new PingCommand()); From 567a6585aef24da3f26ae381201f357071ef7e81 Mon Sep 17 00:00:00 2001 From: salmonllama Date: Sat, 3 Oct 2020 18:51:35 -0400 Subject: [PATCH 49/58] Added 5 minute Member role to NewMember workflow --- .../salmonllama/fsbot/config/BotConfig.java | 3 +++ .../fsbot/listeners/NewMemberListener.java | 12 +++++++++++- .../fsbot/utilities/AddMemberRole.java | 18 ++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/main/java/dev/salmonllama/fsbot/utilities/AddMemberRole.java diff --git a/src/main/java/dev/salmonllama/fsbot/config/BotConfig.java b/src/main/java/dev/salmonllama/fsbot/config/BotConfig.java index f202a66..5424747 100644 --- a/src/main/java/dev/salmonllama/fsbot/config/BotConfig.java +++ b/src/main/java/dev/salmonllama/fsbot/config/BotConfig.java @@ -63,6 +63,9 @@ public class BotConfig { @ConfigurationOption public static String HYDRIX_ROLE = "hydrix role id here"; + @ConfigurationOption + public static String MEMBER_ROLE = "member role id here"; + @ConfigurationOption public static String IMGUR_ID = "imgur_id_here"; diff --git a/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java b/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java index 458b439..de11c98 100644 --- a/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java +++ b/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java @@ -7,22 +7,32 @@ package dev.salmonllama.fsbot.listeners; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.database.controllers.ServerConfigController; +import dev.salmonllama.fsbot.utilities.AddMemberRole; import org.javacord.api.event.server.member.ServerMemberJoinEvent; import org.javacord.api.listener.server.member.ServerMemberJoinListener; +import java.util.concurrent.TimeUnit; + public class NewMemberListener implements ServerMemberJoinListener { + ServerMemberJoinEvent event; + public void onServerMemberJoin(ServerMemberJoinEvent event) { + this.event = event; if (!event.getServer().getIdAsString().equals(BotConfig.HOME_SERVER)) { // Only active in the Fashionscape server, currently. return; } - // TODO: Use the ServerConfig to retrieve the welcome channel as well. + // Send the welcome message in the welcome channel event.getApi().getServerTextChannelById(BotConfig.WELCOME_CHANNEL).ifPresent( // Get the Welcome Channel channel -> ServerConfigController.get(event.getServer().getIdAsString()).thenAcceptAsync( // Fetch the server config, if set. possibleConfig -> possibleConfig.ifPresent( // If config exists config -> channel.sendMessage(String.format(config.getWelcomeMessage(), event.getUser().getMentionTag()))))); // Send the welcome message + + // Add the Member role after 5 minutes + var roleAdder = new AddMemberRole(event); + event.getApi().getThreadPool().getScheduler().schedule(roleAdder, 5, TimeUnit.MINUTES); } } diff --git a/src/main/java/dev/salmonllama/fsbot/utilities/AddMemberRole.java b/src/main/java/dev/salmonllama/fsbot/utilities/AddMemberRole.java new file mode 100644 index 0000000..84c3548 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/utilities/AddMemberRole.java @@ -0,0 +1,18 @@ +package dev.salmonllama.fsbot.utilities; + +import dev.salmonllama.fsbot.config.BotConfig; +import org.javacord.api.event.server.member.ServerMemberJoinEvent; + +public class AddMemberRole implements Runnable{ + + ServerMemberJoinEvent event; + + public AddMemberRole(ServerMemberJoinEvent event) { + this.event = event; + } + + @Override + public void run() { + event.getApi().getRoleById(BotConfig.MEMBER_ROLE).ifPresent(role -> role.addUser(event.getUser())); + } +} From c8b7cf243116b36fb7b40f82ed4f8ec149ad3267 Mon Sep 17 00:00:00 2001 From: salmonllama Date: Sat, 3 Oct 2020 18:54:11 -0400 Subject: [PATCH 50/58] Refactored MemberRole service for simplicity --- .../java/dev/salmonllama/fsbot/utilities/AddMemberRole.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/salmonllama/fsbot/utilities/AddMemberRole.java b/src/main/java/dev/salmonllama/fsbot/utilities/AddMemberRole.java index 84c3548..b400895 100644 --- a/src/main/java/dev/salmonllama/fsbot/utilities/AddMemberRole.java +++ b/src/main/java/dev/salmonllama/fsbot/utilities/AddMemberRole.java @@ -13,6 +13,6 @@ public class AddMemberRole implements Runnable{ @Override public void run() { - event.getApi().getRoleById(BotConfig.MEMBER_ROLE).ifPresent(role -> role.addUser(event.getUser())); + event.getApi().getRoleById(BotConfig.MEMBER_ROLE).ifPresent(event.getUser()::addRole); } } From 9a8131b1e11bd090643446b24015c40d190cbc84 Mon Sep 17 00:00:00 2001 From: salmonllama Date: Sat, 3 Oct 2020 19:01:29 -0400 Subject: [PATCH 51/58] Reorganize for services --- .../dev/salmonllama/fsbot/listeners/NewMemberListener.java | 6 +++--- .../AddMemberRole.java => services/MemberRoleService.java} | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/dev/salmonllama/fsbot/{utilities/AddMemberRole.java => services/MemberRoleService.java} (68%) diff --git a/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java b/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java index de11c98..6e477c3 100644 --- a/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java +++ b/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java @@ -7,7 +7,7 @@ package dev.salmonllama.fsbot.listeners; import dev.salmonllama.fsbot.config.BotConfig; import dev.salmonllama.fsbot.database.controllers.ServerConfigController; -import dev.salmonllama.fsbot.utilities.AddMemberRole; +import dev.salmonllama.fsbot.services.MemberRoleService; import org.javacord.api.event.server.member.ServerMemberJoinEvent; import org.javacord.api.listener.server.member.ServerMemberJoinListener; @@ -32,7 +32,7 @@ public class NewMemberListener implements ServerMemberJoinListener { config -> channel.sendMessage(String.format(config.getWelcomeMessage(), event.getUser().getMentionTag()))))); // Send the welcome message // Add the Member role after 5 minutes - var roleAdder = new AddMemberRole(event); - event.getApi().getThreadPool().getScheduler().schedule(roleAdder, 5, TimeUnit.MINUTES); + var memberRoleService = new MemberRoleService(event); + event.getApi().getThreadPool().getScheduler().schedule(memberRoleService, 5, TimeUnit.MINUTES); } } diff --git a/src/main/java/dev/salmonllama/fsbot/utilities/AddMemberRole.java b/src/main/java/dev/salmonllama/fsbot/services/MemberRoleService.java similarity index 68% rename from src/main/java/dev/salmonllama/fsbot/utilities/AddMemberRole.java rename to src/main/java/dev/salmonllama/fsbot/services/MemberRoleService.java index b400895..a778cb6 100644 --- a/src/main/java/dev/salmonllama/fsbot/utilities/AddMemberRole.java +++ b/src/main/java/dev/salmonllama/fsbot/services/MemberRoleService.java @@ -1,13 +1,13 @@ -package dev.salmonllama.fsbot.utilities; +package dev.salmonllama.fsbot.services; import dev.salmonllama.fsbot.config.BotConfig; import org.javacord.api.event.server.member.ServerMemberJoinEvent; -public class AddMemberRole implements Runnable{ +public class MemberRoleService implements Runnable { ServerMemberJoinEvent event; - public AddMemberRole(ServerMemberJoinEvent event) { + public MemberRoleService(ServerMemberJoinEvent event) { this.event = event; } From 70ffa9c1f0b756b892b2915453e063720b453c67 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Wed, 11 Nov 2020 11:07:45 -0500 Subject: [PATCH 52/58] Updated Javacord Dependency --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e62a1fd..b8dbbb8 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,7 @@ repositories { dependencies { implementation 'org.xerial:sqlite-jdbc:3.30.1' implementation 'com.github.Kaaz:ConfigurationBuilder:0.4' - implementation 'org.javacord:javacord:3.0.6' + implementation 'org.javacord:javacord:3.1.1' implementation 'com.vdurmont:emoji-java:4.0.0' implementation 'com.squareup.okhttp3:okhttp:4.4.0' implementation 'ch.qos.logback:logback-classic:1.2.3' From 0b916cdb9fdc026ccc89f46f60ee4e71a95c576d Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Wed, 11 Nov 2020 11:18:09 -0500 Subject: [PATCH 53/58] Update for breaking changes --- src/main/java/dev/salmonllama/fsbot/Main.java | 1 - .../dev/salmonllama/fsbot/commands/staff/EditMetaCommand.java | 2 +- .../salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java | 2 +- .../java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/Main.java b/src/main/java/dev/salmonllama/fsbot/Main.java index 940cb07..482f7e2 100644 --- a/src/main/java/dev/salmonllama/fsbot/Main.java +++ b/src/main/java/dev/salmonllama/fsbot/Main.java @@ -34,7 +34,6 @@ public class Main { new DiscordApiBuilder().setToken(BotConfig.TOKEN).login().thenAccept(api -> { - @SuppressWarnings("unused") Guthix guthix = new Guthix(api); // Register listeners diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/EditMetaCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/EditMetaCommand.java index fc00479..0fc61df 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/EditMetaCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/EditMetaCommand.java @@ -50,7 +50,7 @@ public class EditMetaCommand extends Command { msg.addReaction(EmojiParser.parseToUnicode(":octagonal_sign:")); msg.addReactionAddListener(event -> { - if (event.getUser().getId() != authorId) { + if (event.getUserId() != authorId) { return; } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java index c4044be..92f19a5 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/RemoveOutfitCommand.java @@ -56,7 +56,7 @@ public class RemoveOutfitCommand extends Command { msg.addReaction(EmojiParser.parseToUnicode(":octagonal_sign:")); msg.addReactionAddListener(event -> { - if (event.getUser().getId() != authorId) { + if (event.getUserId() != authorId) { return; } diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java index f548e22..a503a56 100644 --- a/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/RetagCommand.java @@ -56,7 +56,7 @@ public class RetagCommand extends Command { msg.addReaction(EmojiParser.parseToUnicode(":octagonal_sign:")); msg.addReactionAddListener(event -> { - if (event.getUser().getId() != authorId) { + if (event.getUserId() != authorId) { return; } From f862ebcae1d07aa178f5aeaffe315f106cbf7efe Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Wed, 11 Nov 2020 11:34:46 -0500 Subject: [PATCH 54/58] Version Bump --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6e271dd..4cf358e 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ plugins { apply plugin: 'io.spring.dependency-management' group 'dev.salmonllama' -version '2.0.2' +version '2.0.3' sourceCompatibility = 11 From 24d1cd7425d2d017ed5a467fb6ee8fdc28021435 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Fri, 13 Nov 2020 19:16:58 -0500 Subject: [PATCH 55/58] Added audit log reason to new member services --- .../dev/salmonllama/fsbot/listeners/NewMemberListener.java | 4 ---- .../dev/salmonllama/fsbot/services/MemberRoleService.java | 5 ++++- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java b/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java index 6e477c3..0b7249a 100644 --- a/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java +++ b/src/main/java/dev/salmonllama/fsbot/listeners/NewMemberListener.java @@ -14,11 +14,7 @@ import org.javacord.api.listener.server.member.ServerMemberJoinListener; import java.util.concurrent.TimeUnit; public class NewMemberListener implements ServerMemberJoinListener { - - ServerMemberJoinEvent event; - public void onServerMemberJoin(ServerMemberJoinEvent event) { - this.event = event; if (!event.getServer().getIdAsString().equals(BotConfig.HOME_SERVER)) { // Only active in the Fashionscape server, currently. diff --git a/src/main/java/dev/salmonllama/fsbot/services/MemberRoleService.java b/src/main/java/dev/salmonllama/fsbot/services/MemberRoleService.java index a778cb6..38f0f32 100644 --- a/src/main/java/dev/salmonllama/fsbot/services/MemberRoleService.java +++ b/src/main/java/dev/salmonllama/fsbot/services/MemberRoleService.java @@ -1,6 +1,7 @@ package dev.salmonllama.fsbot.services; import dev.salmonllama.fsbot.config.BotConfig; + import org.javacord.api.event.server.member.ServerMemberJoinEvent; public class MemberRoleService implements Runnable { @@ -13,6 +14,8 @@ public class MemberRoleService implements Runnable { @Override public void run() { - event.getApi().getRoleById(BotConfig.MEMBER_ROLE).ifPresent(event.getUser()::addRole); + event.getApi().getRoleById(BotConfig.MEMBER_ROLE).ifPresent(role -> + event.getServer().addRoleToUser(event.getUser(), role, "FSBot 5-minute member role") + ); } } From 1d8dcacd8a7948513814fa7646aa67ead0f7219f Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Fri, 13 Nov 2020 19:27:13 -0500 Subject: [PATCH 56/58] Added operation for deleting outfits --- .../database/controllers/OutfitController.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/dev/salmonllama/fsbot/database/controllers/OutfitController.java b/src/main/java/dev/salmonllama/fsbot/database/controllers/OutfitController.java index ae9de84..059ed16 100644 --- a/src/main/java/dev/salmonllama/fsbot/database/controllers/OutfitController.java +++ b/src/main/java/dev/salmonllama/fsbot/database/controllers/OutfitController.java @@ -200,6 +200,16 @@ public class OutfitController { }); } + public static CompletableFuture forceRemove(String id) { + return CompletableFuture.runAsync(() -> { + try { + forceRemoveExec(id); + } catch (SQLException e) { + throw new CompletionException(e); + } + }); + } + private static void insertExec(Outfit outfit) throws SQLException { if (outfit.getCreated() == null) { outfit.setCreated(new Timestamp(System.currentTimeMillis())); @@ -369,6 +379,10 @@ public class OutfitController { FSDB.get().query("UPDATE outfits SET deleted = true WHERE id = ?", id); } + private static void forceRemoveExec(String id) throws SQLException { + FSDB.get().query("DELETE FROM outfits WHERE id = ?", id); + } + private static Optional> extractMultiple(ResultSet rs) throws SQLException { Collection outfits = new ArrayList<>(); From 7fc3932f4391b6c9c1e88d6323942fdd7726157d Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Fri, 13 Nov 2020 19:27:23 -0500 Subject: [PATCH 57/58] WIP admin command --- .../commands/staff/ForceDeleteCommand.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/main/java/dev/salmonllama/fsbot/commands/staff/ForceDeleteCommand.java diff --git a/src/main/java/dev/salmonllama/fsbot/commands/staff/ForceDeleteCommand.java b/src/main/java/dev/salmonllama/fsbot/commands/staff/ForceDeleteCommand.java new file mode 100644 index 0000000..78e5166 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/commands/staff/ForceDeleteCommand.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.commands.staff; + +import dev.salmonllama.fsbot.database.controllers.OutfitController; +import dev.salmonllama.fsbot.guthix.*; +import dev.salmonllama.fsbot.listeners.ForceDeleteAttachedListener; +import org.javacord.api.entity.message.MessageBuilder; +import org.javacord.api.entity.message.embed.EmbedBuilder; +import org.javacord.api.event.message.MessageCreateEvent; + +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.TimeUnit; + +public class ForceDeleteCommand extends Command { + @Override public String name() { return "Force Delete"; } + @Override public String description() { return "Forcefully deletes the given outfit from the database. Destructive action"; } + @Override public String usage() { return "forcedelete "; } + @Override public CommandCategory category() { return CommandCategory.STAFF; } + @Override public CommandPermission permission() { return new CommandPermission(PermissionType.STATIC, "owner"); } + @Override public List aliases() { return Arrays.asList("forcedelete", "sudorm"); } + + @Override + public void onCommand(CommandContext ctx) { + // Send a confirmation, confirming the outfit to delete. + // Confirmation will be done via DM for special confirmation of a destructive action. + + if (ctx.getArgs().length == 0) { + ctx.reply("You must supply a valid ID"); + } + + var outfitId = ctx.getArgs()[0]; + + MessageBuilder builder = new MessageBuilder(); + builder.setContent( + ":warning: THIS IS A DESTRUCTIVE ACTION :warning:\n\n" + + "You are about to destroy an entry from the database.\n\n" + + "This is unrecoverable, if the entry in question does not\n" + + "break Discord, Fashionscape, or FSBot TOS, please consider using\n" + + "`~remove` instead.\n\n" + + "Verify the entry's information below and respond with `YES` to proceed\n" + + "or `NO` to cancel.\n\n" + + "*After 5 minutes, the response window will close and you will have to re-run the command*" + ); + + OutfitController.findById(outfitId).thenAcceptAsync(possibleOutfit -> possibleOutfit.ifPresentOrElse(outfit -> { + // DM the user with confirmation message, disclaimer, and info embed + // Attach a 5 minute listener looking for YES or NO + EmbedBuilder embed = new EmbedBuilder() + .setTitle("Outift Information |" + outfit.getId()) + .setUrl(outfit.getLink()) + .addField("Submitter:", outfit.getSubmitter()) + .addField("Meta:", outfit.getMeta()) + .addField("Link:", outfit.getLink()) + .addField("Submitted:", outfit.getCreated().toString()) + .setThumbnail(outfit.getLink()) + .setFooter(String.format("%s | %s", outfit.getTag(), outfit.getId())); + + builder.setEmbed(embed); + + builder.send(ctx.getChannel()).thenAcceptAsync(msg -> { + // Add the event listeners and check for YES/NO + var fdal = new ForceDeleteAttachedListener(ctx); + ctx.getChannel().addMessageCreateListener(fdal); + + ctx.getChannel().addMessageCreateListener(event -> { + if (event.getMessageAuthor().getIdAsString().equals(ctx.getAuthor().getIdAsString())) { + // If it's the same user, do the things + if (event.getMessageContent().equals("YES")) { + // ForceRemove the outfit + } else if (event.getMessageContent().equals("NO")) { + // Abort the operation. Delete the message. + + } else { + ctx.reply("Response must be YES or NO. In caps. Because shouting increases security."); + } + } + }).removeAfter(5, TimeUnit.MINUTES); + }); + }, () -> ctx.reply("An outfit with that ID was not found."))); + } +} From 758e3962c8c671e663facbed822fee09e6ecb9d6 Mon Sep 17 00:00:00 2001 From: Salmonllama Date: Tue, 24 Nov 2020 09:40:44 -0500 Subject: [PATCH 58/58] Attached Listener for Force Deletes --- .../ForceDeleteAttachedListener.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/dev/salmonllama/fsbot/listeners/ForceDeleteAttachedListener.java diff --git a/src/main/java/dev/salmonllama/fsbot/listeners/ForceDeleteAttachedListener.java b/src/main/java/dev/salmonllama/fsbot/listeners/ForceDeleteAttachedListener.java new file mode 100644 index 0000000..42d2fe9 --- /dev/null +++ b/src/main/java/dev/salmonllama/fsbot/listeners/ForceDeleteAttachedListener.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2020. Aleksei Gryczewski + * All rights reserved. + */ + +package dev.salmonllama.fsbot.listeners; + +import dev.salmonllama.fsbot.guthix.CommandContext; +import org.javacord.api.event.message.MessageCreateEvent; +import org.javacord.api.listener.message.MessageCreateListener; + +public class ForceDeleteAttachedListener implements MessageCreateListener { + + private CommandContext ctx; + + public ForceDeleteAttachedListener(CommandContext ctx) { + this.ctx = ctx; + } + + @Override + public void onMessageCreate(MessageCreateEvent event) { + + } +}