From 378c0b0f943ce80cc077ecad0193659451132c00 Mon Sep 17 00:00:00 2001 From: Azzerial Date: Wed, 30 Jun 2021 07:55:27 +0100 Subject: [PATCH 01/17] added: UnsignedBase512 class --- .../slash/internal/util/UnsignedBase512.java | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 api/src/main/java/com/github/azzerial/slash/internal/util/UnsignedBase512.java diff --git a/api/src/main/java/com/github/azzerial/slash/internal/util/UnsignedBase512.java b/api/src/main/java/com/github/azzerial/slash/internal/util/UnsignedBase512.java new file mode 100644 index 0000000..e35fbfb --- /dev/null +++ b/api/src/main/java/com/github/azzerial/slash/internal/util/UnsignedBase512.java @@ -0,0 +1,132 @@ +/* + * Copyright 2021 Robin Mercier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.github.azzerial.slash.internal.util; + +import java.math.BigInteger; + +public final class UnsignedBase512 { + + private static final BigInteger _512 = BigInteger.valueOf(512); + private static final String NUMERALS = + /* U+0030 -> U+0039 */ "0123456789" + + /* U+0041 -> U+005A */ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + /* U+0061 -> U+007A */ "abcdefghijklmnopqrstuvwxyz" + + /* U+00C0 -> U+00D6 */ "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ" + + /* U+00D8 -> U+00DF */ "ØÙÚÛÜÝÞß" + + /* U+00E0 -> U+00F6 */ "àáâãäåæçèéêëìíîïðñòóôõö" + + /* U+00F8 -> U+00FF */ "øùúûüýþÿ" + + /* U+0100 -> U+0148 */ "ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇň" + + /* U+014A -> U+017F */ "ŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ" + + /* U+0180 -> U+01BF */ "ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ" + + /* U+01C4 -> U+01CC */ "DŽDždžLJLjljNJNjnj" + + /* U+01CD -> U+01DC */ "ǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜ" + + /* U+01DD -> U+01FF */ "ǝǞǟǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ" + + /* U+0200 -> U+0217 */ "ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗ" + + /* U+0218 -> U+021B */ "ȘșȚț" + + /* U+021C -> U+0229 */ "ȜȝȞȟȠȡȢȣȤȥȦȧȨȩ" + + /* U+022A -> U+0233 */ "ȪȫȬȭȮȯȰȱȲȳ" + + /* U+0241 -> U+024F */ "ɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ" + + /* U+0250 -> U+0295 */ "ɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕ"; + + /* Constructors */ + + private UnsignedBase512() {} + + /* Methods */ + + public static byte parseByte(String value) { + return parseBigInteger(value).byteValueExact(); + } + + public static short parseShort(String value) { + return parseBigInteger(value).shortValueExact(); + } + + public static int parseInt(String value) { + return parseBigInteger(value).intValueExact(); + } + + public static long parseLong(String value) { + return parseBigInteger(value).longValueExact(); + } + + public static BigInteger parseBigInteger(String value) { + if (value == null) { + throw new NullPointerException("value must not be null"); + } + if (value.isEmpty()) { + throw new IllegalArgumentException("value must not be empty"); + } + if (!canDecode(value)) { + throw new IllegalArgumentException("value contains characters not present in the encoding"); + } + + BigInteger n = BigInteger.ZERO; + + for (int i = 0; i != value.length(); i++) { + final char c = value.charAt(value.length() - 1 - i); + n = n.add(BigInteger.valueOf(NUMERALS.indexOf(c)).multiply(_512.pow(i))); + } + return n; + } + + public static String toString(byte value) { + return toString(BigInteger.valueOf(value)); + } + + public static String toString(short value) { + return toString(BigInteger.valueOf(value)); + } + + public static String toString(int value) { + return toString(BigInteger.valueOf(value)); + } + + public static String toString(long value) { + return toString(BigInteger.valueOf(value)); + } + + public static String toString(BigInteger value) { + if (value == null) { + throw new NullPointerException("value must not be null"); + } + if (value.signum() == -1) { + throw new IllegalArgumentException("value must not be negative"); + } + + final StringBuilder sb = new StringBuilder(); + int i; + + while (value.signum() != 0) { + i = value.mod(_512).intValueExact(); + sb.append(NUMERALS.charAt(i)); + value = value.divide(_512); + } + return sb.reverse().toString(); + } + + /* Internal */ + + private static boolean canDecode(String s) { + for (char c : s.toCharArray()) { + if (!NUMERALS.contains(String.valueOf(c))) { + return false; + } + } + return true; + } +} From 00a4aa8b6cd0975b66df89dcdf4cd114929d12bd Mon Sep 17 00:00:00 2001 From: Azzerial Date: Wed, 30 Jun 2021 07:58:27 +0100 Subject: [PATCH 02/17] updated: button codes now use base 512 --- .../com/github/azzerial/slash/internal/ButtonRegistry.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/com/github/azzerial/slash/internal/ButtonRegistry.java b/api/src/main/java/com/github/azzerial/slash/internal/ButtonRegistry.java index ac4dd36..eb47e47 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/ButtonRegistry.java +++ b/api/src/main/java/com/github/azzerial/slash/internal/ButtonRegistry.java @@ -16,6 +16,8 @@ package com.github.azzerial.slash.internal; +import com.github.azzerial.slash.internal.util.UnsignedBase512; + import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -24,7 +26,6 @@ public final class ButtonRegistry { public static final int CODE_LENGTH = 4; - public static final int ID_BASE = 32; private static final ButtonRegistry INSTANCE = new ButtonRegistry(); private final List codes; @@ -49,13 +50,13 @@ public String createButtonId(String tag, String data) { return String.format( "%-" + CODE_LENGTH + "." + CODE_LENGTH + "s" + "%." + (100 - CODE_LENGTH) + "s", - Integer.toUnsignedString(code == -1 ? 0 : code, ID_BASE), + UnsignedBase512.toString(code == -1 ? 0 : code), data == null ? "" : data ).trim(); } public ButtonCallback getButtonCallback(String id) { - final int code = Integer.parseUnsignedInt(parseCode(id), ID_BASE); + final int code = UnsignedBase512.parseInt(parseCode(id)); final String tag = codes.get(code); return mappings.get(tag); } From f3bdd5bc527ccef69cdbe80766b86f45a7ba0a4a Mon Sep 17 00:00:00 2001 From: Azzerial Date: Sun, 22 Aug 2021 23:24:11 +0100 Subject: [PATCH 03/17] updated: made ButtonCallback and ButtonRegistry generic --- .../azzerial/slash/components/SlashButton.java | 6 +++--- .../azzerial/slash/internal/CommandRegistry.java | 2 +- ...uttonCallback.java => ComponentCallback.java} | 4 ++-- ...uttonRegistry.java => ComponentRegistry.java} | 16 ++++++++-------- .../slash/internal/InteractionListener.java | 12 ++++++------ .../com/github/azzerial/slash/util/Buffer.java | 7 ++++--- .../com/github/azzerial/slash/util/Session.java | 2 +- 7 files changed, 25 insertions(+), 24 deletions(-) rename api/src/main/java/com/github/azzerial/slash/internal/{ButtonCallback.java => ComponentCallback.java} (91%) rename api/src/main/java/com/github/azzerial/slash/internal/{ButtonRegistry.java => ComponentRegistry.java} (80%) diff --git a/api/src/main/java/com/github/azzerial/slash/components/SlashButton.java b/api/src/main/java/com/github/azzerial/slash/components/SlashButton.java index 35d5295..4aa4263 100644 --- a/api/src/main/java/com/github/azzerial/slash/components/SlashButton.java +++ b/api/src/main/java/com/github/azzerial/slash/components/SlashButton.java @@ -16,7 +16,7 @@ package com.github.azzerial.slash.components; -import com.github.azzerial.slash.internal.ButtonRegistry; +import com.github.azzerial.slash.internal.ComponentRegistry; import net.dv8tion.jda.api.entities.Emoji; import net.dv8tion.jda.api.interactions.components.ButtonStyle; import net.dv8tion.jda.api.interactions.components.Component; @@ -62,7 +62,7 @@ public Type getType() { @Nullable @Override public String getId() { - return tag == null ? null : ButtonRegistry.getInstance().createButtonId(tag, data); + return tag == null ? null : ComponentRegistry.getInstance().formatComponentId(tag, data); } public String getTag() { @@ -81,7 +81,7 @@ public String getData() { public SlashButton withData(String data) { Checks.notEmpty(data, "Data"); - Checks.notLonger(data, 100 - ButtonRegistry.CODE_LENGTH, "Data"); + Checks.notLonger(data, 100 - ComponentRegistry.CODE_LENGTH, "Data"); this.data = data; return this; } diff --git a/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java b/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java index 191bef4..a43db4c 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java +++ b/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java @@ -102,7 +102,7 @@ private void registerButtons(Object obj) { final String tag = method.getAnnotation(Slash.Button.class).value(); if (!tag.isEmpty()) { - ButtonRegistry.getInstance().registerButton(tag, new ButtonCallback(obj, method)); + ComponentRegistry.getInstance().registerComponent(tag, new ComponentCallback(obj, method)); } }); } diff --git a/api/src/main/java/com/github/azzerial/slash/internal/ButtonCallback.java b/api/src/main/java/com/github/azzerial/slash/internal/ComponentCallback.java similarity index 91% rename from api/src/main/java/com/github/azzerial/slash/internal/ButtonCallback.java rename to api/src/main/java/com/github/azzerial/slash/internal/ComponentCallback.java index 2e0ef4e..84e5ee9 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/ButtonCallback.java +++ b/api/src/main/java/com/github/azzerial/slash/internal/ComponentCallback.java @@ -18,14 +18,14 @@ import java.lang.reflect.Method; -public final class ButtonCallback { +public final class ComponentCallback { private final Object obj; private final Method method; /* Constructors */ - ButtonCallback(Object obj, Method method) { + ComponentCallback(Object obj, Method method) { this.obj = obj; this.method = method; } diff --git a/api/src/main/java/com/github/azzerial/slash/internal/ButtonRegistry.java b/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java similarity index 80% rename from api/src/main/java/com/github/azzerial/slash/internal/ButtonRegistry.java rename to api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java index eb47e47..96cd4d4 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/ButtonRegistry.java +++ b/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java @@ -23,17 +23,17 @@ import java.util.List; import java.util.Map; -public final class ButtonRegistry { +public final class ComponentRegistry { public static final int CODE_LENGTH = 4; - private static final ButtonRegistry INSTANCE = new ButtonRegistry(); + private static final ComponentRegistry INSTANCE = new ComponentRegistry(); private final List codes; - private final Map mappings = new HashMap<>(); + private final Map mappings = new HashMap<>(); /* Constructors */ - private ButtonRegistry() { + private ComponentRegistry() { this.codes = new LinkedList<>(); codes.add(null); @@ -41,11 +41,11 @@ private ButtonRegistry() { /* Getters & Setters */ - public static ButtonRegistry getInstance() { + public static ComponentRegistry getInstance() { return INSTANCE; } - public String createButtonId(String tag, String data) { + public String formatComponentId(String tag, String data) { final int code = codes.indexOf(tag); return String.format( "%-" + CODE_LENGTH + "." + CODE_LENGTH + "s" + @@ -55,7 +55,7 @@ public String createButtonId(String tag, String data) { ).trim(); } - public ButtonCallback getButtonCallback(String id) { + public ComponentCallback getComponentCallback(String id) { final int code = UnsignedBase512.parseInt(parseCode(id)); final String tag = codes.get(code); return mappings.get(tag); @@ -63,7 +63,7 @@ public ButtonCallback getButtonCallback(String id) { /* Methods */ - public void registerButton(String tag, ButtonCallback callback) { + public void registerComponent(String tag, ComponentCallback callback) { if (!codes.contains(tag)) { codes.add(tag); mappings.put(tag, callback); diff --git a/api/src/main/java/com/github/azzerial/slash/internal/InteractionListener.java b/api/src/main/java/com/github/azzerial/slash/internal/InteractionListener.java index 8a055a8..5013eda 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/InteractionListener.java +++ b/api/src/main/java/com/github/azzerial/slash/internal/InteractionListener.java @@ -17,7 +17,7 @@ package com.github.azzerial.slash.internal; import com.github.azzerial.slash.SlashCommand; -import net.dv8tion.jda.api.events.interaction.ButtonClickEvent; +import net.dv8tion.jda.api.events.interaction.GenericComponentInteractionCreateEvent; import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; @@ -56,18 +56,18 @@ public void onSlashCommand(SlashCommandEvent event) { } @Override - public void onButtonClick(ButtonClickEvent event) { + public void onGenericComponentInteractionCreate(GenericComponentInteractionCreateEvent event) { if (event.getUser().isBot()) { return; } - final ButtonCallback button = ButtonRegistry.getInstance().getButtonCallback(event.getComponentId()); + final ComponentCallback callback = ComponentRegistry.getInstance().getComponentCallback(event.getComponentId()); - if (button != null) { - final Method method = button.getMethod(); + if (callback != null) { + final Method method = callback.getMethod(); try { - method.invoke(button.getObjectInstance(), event); + method.invoke(callback.getObjectInstance(), event); } catch (IllegalAccessException | InvocationTargetException ignored) {} } } diff --git a/api/src/main/java/com/github/azzerial/slash/util/Buffer.java b/api/src/main/java/com/github/azzerial/slash/util/Buffer.java index 17ed6a6..8efd40b 100644 --- a/api/src/main/java/com/github/azzerial/slash/util/Buffer.java +++ b/api/src/main/java/com/github/azzerial/slash/util/Buffer.java @@ -16,9 +16,10 @@ package com.github.azzerial.slash.util; -import com.github.azzerial.slash.internal.ButtonRegistry; import net.dv8tion.jda.internal.utils.Checks; +import static com.github.azzerial.slash.internal.ComponentRegistry.CODE_LENGTH; + public final class Buffer { /* Nested Classes */ @@ -27,7 +28,7 @@ public static final class Reader { private final String buffer; - private int i = ButtonRegistry.CODE_LENGTH; + private int i = CODE_LENGTH; /* Constructors */ @@ -127,7 +128,7 @@ public static Writer create() { } public Writer write(int size, String s) { - if (sb.length() + size > 100 - ButtonRegistry.CODE_LENGTH) { + if (sb.length() + size > 100 - CODE_LENGTH) { throw new OutOfMemoryError("Required allocation size is greater than the available one!"); } sb.append(String.format("%-" + size + "." + size + "s", s)); diff --git a/api/src/main/java/com/github/azzerial/slash/util/Session.java b/api/src/main/java/com/github/azzerial/slash/util/Session.java index d2926f6..2de85c5 100644 --- a/api/src/main/java/com/github/azzerial/slash/util/Session.java +++ b/api/src/main/java/com/github/azzerial/slash/util/Session.java @@ -32,7 +32,7 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; -import static com.github.azzerial.slash.internal.ButtonRegistry.CODE_LENGTH; +import static com.github.azzerial.slash.internal.ComponentRegistry.CODE_LENGTH; public final class Session extends DataObject { From a6431696be6402929a0bac047204b77ae3518cbc Mon Sep 17 00:00:00 2001 From: Azzerial Date: Mon, 23 Aug 2021 01:51:56 +0100 Subject: [PATCH 04/17] added: @Slash.SelectionMenu annotation --- .../azzerial/slash/annotations/Slash.java | 12 ++++++++++ .../slash/internal/CommandRegistry.java | 22 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/api/src/main/java/com/github/azzerial/slash/annotations/Slash.java b/api/src/main/java/com/github/azzerial/slash/annotations/Slash.java index 82fa436..dc8b1dc 100644 --- a/api/src/main/java/com/github/azzerial/slash/annotations/Slash.java +++ b/api/src/main/java/com/github/azzerial/slash/annotations/Slash.java @@ -74,6 +74,18 @@ String value() default ""; } + /** + * This annotation labels a method as a Slash Command selection menu handler. + */ + @Documented + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + @interface SelectionMenu { + + /** The tag of the selection menu. */ + String value(); + } + /** * This annotations assigns an identification tag to a Slash Command for registration purposes. */ diff --git a/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java b/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java index a43db4c..f2ddeec 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java +++ b/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java @@ -20,6 +20,7 @@ import com.github.azzerial.slash.annotations.Slash; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.events.interaction.ButtonClickEvent; +import net.dv8tion.jda.api.events.interaction.SelectionMenuEvent; import net.dv8tion.jda.api.interactions.commands.build.CommandData; import java.lang.reflect.Method; @@ -61,6 +62,7 @@ public SlashCommand registerCommand(Object obj) { final SlashCommand command = compileCommand(obj); registerButtons(obj); + registerSelectionMenus(obj); registry.put(command.getTag(), command); return command; } @@ -106,4 +108,24 @@ private void registerButtons(Object obj) { } }); } + + private void registerSelectionMenus(Object obj) { + final Class cls = obj.getClass(); + + Arrays.stream(cls.getDeclaredMethods()) + .filter(method -> + (method.getModifiers() & (Modifier.PROTECTED | Modifier.PRIVATE)) == 0 + && method.isAnnotationPresent(Slash.SelectionMenu.class) + && method.getParameterCount() == 1 + && method.getParameterTypes()[0] == SelectionMenuEvent.class + ) + .sorted(Comparator.comparing(Method::getName)) + .forEach(method -> { + final String tag = method.getAnnotation(Slash.SelectionMenu.class).value(); + + if (!tag.isEmpty()) { + ComponentRegistry.getInstance().registerComponent(tag, new ComponentCallback(obj, method)); + } + }); + } } From 0b5374a984ed33bc76a8217d9ee4910b6c1fe247 Mon Sep 17 00:00:00 2001 From: Azzerial Date: Mon, 23 Aug 2021 01:52:32 +0100 Subject: [PATCH 05/17] added: SlashSelectionMenu class --- .../slash/components/SlashSelectionMenu.java | 336 ++++++++++++++++++ 1 file changed, 336 insertions(+) create mode 100644 api/src/main/java/com/github/azzerial/slash/components/SlashSelectionMenu.java diff --git a/api/src/main/java/com/github/azzerial/slash/components/SlashSelectionMenu.java b/api/src/main/java/com/github/azzerial/slash/components/SlashSelectionMenu.java new file mode 100644 index 0000000..2b35768 --- /dev/null +++ b/api/src/main/java/com/github/azzerial/slash/components/SlashSelectionMenu.java @@ -0,0 +1,336 @@ +/* + * Copyright 2021 Robin Mercier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.github.azzerial.slash.components; + +import com.github.azzerial.slash.internal.ComponentRegistry; +import net.dv8tion.jda.api.entities.Emoji; +import net.dv8tion.jda.api.interactions.components.Component; +import net.dv8tion.jda.api.interactions.components.selections.SelectOption; +import net.dv8tion.jda.api.interactions.components.selections.SelectionMenu; +import net.dv8tion.jda.api.utils.data.DataArray; +import net.dv8tion.jda.api.utils.data.DataObject; +import net.dv8tion.jda.internal.utils.Checks; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.*; +import java.util.stream.Collectors; + +public final class SlashSelectionMenu implements Component { + + private String tag; + private String data; + private String placeholder; + private int minValues; + private int maxValues; + private boolean disabled; + private final List options; + + /* Constructors */ + + public SlashSelectionMenu(String tag, String data, String placeholder, int minValues, int maxValues, boolean disabled, List options) { + this.tag = tag; + this.data = data; + this.placeholder = placeholder; + this.minValues = minValues; + this.maxValues = maxValues; + this.disabled = disabled; + this.options = options; + } + + /* Getters & Setters */ + + @NotNull + @Override + public Type getType() { + return Type.SELECTION_MENU; + } + + @Nullable + @Override + public String getId() { + return tag == null ? null : ComponentRegistry.getInstance().formatComponentId(tag, data); + } + + public String getTag() { + return tag; + } + + public SlashSelectionMenu withTag(String tag) { + Checks.notEmpty(tag, "Tag"); + this.tag = tag; + return this; + } + + public String getData() { + return data; + } + + public SlashSelectionMenu withData(String data) { + Checks.notEmpty(data, "Data"); + Checks.notLonger(data, 100 - ComponentRegistry.CODE_LENGTH, "Data"); + this.data = data; + return this; + } + + public String getPlaceholder() { + return placeholder; + } + + public int getMinValues() { + return minValues; + } + + public int getMaxValues() { + return maxValues; + } + + public boolean isDisabled() { + return disabled; + } + + public SlashSelectionMenu asDisabled() { + this.disabled = true; + return this; + } + + public SlashSelectionMenu asEnabled() { + this.disabled = false; + return this; + } + + public SlashSelectionMenu withDisabled(boolean disabled) { + this.disabled = disabled; + return this; + } + + public List getOptions() { + return options; + } + + /* Methods */ + + public static SlashSelectionMenu.Builder create(String tag) { + return create(tag, null); + } + + public static SlashSelectionMenu.Builder create(String tag, String data) { + return new SlashSelectionMenu.Builder(tag, data); + } + + public SlashSelectionMenu.Builder createCopy() { + final SlashSelectionMenu.Builder builder = create(getId()); + + builder.setRequiredRange(getMinValues(), getMaxValues()); + builder.setPlaceholder(getPlaceholder()); + builder.addOptions(getOptions()); + builder.setDisabled(isDisabled()); + return builder; + } + + @NotNull + @Override + public DataObject toData() { + final DataObject json = DataObject.empty(); + + json.put("type", 3); + json.put("custom_id", getId()); + json.put("min_values", minValues); + json.put("max_values", maxValues); + json.put("disabled", disabled); + json.put("options", DataArray.fromCollection(options)); + if (placeholder != null) { + json.put("placeholder", placeholder); + } + return json; + } + + /* Nested Classes */ + + public static final class Builder { + + private String tag; + private String data; + private String placeholder; + private int minValues = 1; + private int maxValues = 1; + private boolean disabled = false; + private final List options = new ArrayList<>(); + + /* Constructors */ + + private Builder(String tag, String data) { + setTag(tag); + if (data != null) { + setData(data); + } + } + + /* Getters & Setters */ + + public String getTag() { + return tag; + } + + public SlashSelectionMenu.Builder setTag(String tag) { + Checks.notEmpty(tag, "Tag"); + this.tag = tag; + return this; + } + + public String getData() { + return data; + } + + public SlashSelectionMenu.Builder setData(String data) { + Checks.notEmpty(data, "Data"); + Checks.notLonger(data, 100 - ComponentRegistry.CODE_LENGTH, "Data"); + this.data = data; + return this; + } + + public String getPlaceholder() { + return placeholder; + } + + public SlashSelectionMenu.Builder setPlaceholder(String placeholder) { + if (placeholder != null) { + Checks.notEmpty(placeholder, "Placeholder"); + Checks.notLonger(placeholder, 100, "Placeholder"); + } + this.placeholder = placeholder; + return this; + } + + public int getMinValues() { + return minValues; + } + + public SlashSelectionMenu.Builder setMinValues(int minValues) { + Checks.notNegative(minValues, "Min Values"); + Checks.check(minValues <= 25, "Min Values may not be greater than 25! Provided: %d", minValues); + this.minValues = minValues; + return this; + } + + public int getMaxValues() { + return maxValues; + } + + public SlashSelectionMenu.Builder setMaxValues(int maxValues) { + Checks.positive(maxValues, "Max Values"); + Checks.check(maxValues <= 25, "Min Values may not be greater than 25! Provided: %d", maxValues); + this.maxValues = maxValues; + return this; + } + + public SlashSelectionMenu.Builder setRequiredRange(int min, int max) { + Checks.check(min <= max, "Min Values should be less than or equal to Max Values! Provided: [%d, %d]", min, max); + return setMinValues(min).setMaxValues(max); + } + + public boolean isDisabled() { + return disabled; + } + + public SlashSelectionMenu.Builder setDisabled(boolean disabled) { + this.disabled = disabled; + return this; + } + + public List getOptions() { + return options; + } + + public SlashSelectionMenu.Builder addOptions(SelectOption... options) { + Checks.noneNull(options, "Options"); + Checks.check(this.options.size() + options.length <= 25, "Cannot have more than 25 options for a selection menu!"); + Collections.addAll(this.options, options); + return this; + } + + public SlashSelectionMenu.Builder addOptions(Collection options) { + Checks.noneNull(options, "Options"); + Checks.check(this.options.size() + options.size() <= 25, "Cannot have more than 25 options for a selection menu!"); + this.options.addAll(options); + return this; + } + + public SlashSelectionMenu.Builder addOption(String label, String value) { + return addOption(label, value, false); + } + + public SlashSelectionMenu.Builder addOption(String label, String value, boolean isDefault) { + return addOption(label, value, null, null, isDefault); + } + + public SlashSelectionMenu.Builder addOption(String label, String value, String description) { + return addOption(label, value, description, false); + } + + public SlashSelectionMenu.Builder addOption(String label, String value, String description, boolean isDefault) { + return addOption(label, value, description, null, isDefault); + } + + public SlashSelectionMenu.Builder addOption(String label, String value, Emoji emoji) { + return addOption(label, value, emoji, false); + } + + public SlashSelectionMenu.Builder addOption(String label, String value, Emoji emoji, boolean isDefault) { + return addOption(label, value, null, emoji, isDefault); + } + + public SlashSelectionMenu.Builder addOption(String label, String value, String description, Emoji emoji) { + return addOption(label, value, description, emoji, false); + } + + public SlashSelectionMenu.Builder addOption(String label, String value, String description, Emoji emoji, boolean isDefault) { + return addOptions( + SelectOption.of(label, value) + .withDescription(description) + .withEmoji(emoji) + .withDefault(isDefault) + ); + } + + public SlashSelectionMenu.Builder setDefaultValues(Collection values) { + Checks.noneNull(values, "Values"); + final Set set = new HashSet<>(values); + + for (ListIterator it = getOptions ().listIterator(); it.hasNext();) { + final SelectOption option = it.next(); + it.set(option.withDefault(set.contains(option.getValue()))); + } + return this; + } + + public SlashSelectionMenu.Builder setDefaultOptions(Collection values) { + Checks.noneNull(values, "Values"); + return setDefaultValues(values.stream().map(SelectOption::getValue).collect(Collectors.toSet())); + } + + /* Methods */ + + public SlashSelectionMenu build() { + Checks.check(minValues <= maxValues, "Min values cannot be greater than max values!"); + Checks.check(options.size() <= 25, "Cannot build a selection menu with more than 25 options."); + int min = Math.min(minValues, options.size()); + int max = Math.min(maxValues, options.size()); + return new SlashSelectionMenu(tag, data, placeholder, min, max, disabled, options); + } + } +} From 1c89a5a821dc0c18eb0a3c74cd974578c1a8cae7 Mon Sep 17 00:00:00 2001 From: Azzerial Date: Mon, 23 Aug 2021 01:57:01 +0100 Subject: [PATCH 06/17] fixed: optimised imports --- .../com/github/azzerial/slash/components/SlashSelectionMenu.java | 1 - 1 file changed, 1 deletion(-) diff --git a/api/src/main/java/com/github/azzerial/slash/components/SlashSelectionMenu.java b/api/src/main/java/com/github/azzerial/slash/components/SlashSelectionMenu.java index 2b35768..f974be9 100644 --- a/api/src/main/java/com/github/azzerial/slash/components/SlashSelectionMenu.java +++ b/api/src/main/java/com/github/azzerial/slash/components/SlashSelectionMenu.java @@ -20,7 +20,6 @@ import net.dv8tion.jda.api.entities.Emoji; import net.dv8tion.jda.api.interactions.components.Component; import net.dv8tion.jda.api.interactions.components.selections.SelectOption; -import net.dv8tion.jda.api.interactions.components.selections.SelectionMenu; import net.dv8tion.jda.api.utils.data.DataArray; import net.dv8tion.jda.api.utils.data.DataObject; import net.dv8tion.jda.internal.utils.Checks; From 06360e634fcb867de0c917c189b1053cc4780c4a Mon Sep 17 00:00:00 2001 From: Azzerial Date: Mon, 30 Aug 2021 12:24:41 +0100 Subject: [PATCH 07/17] updated: SlashClientBuilder#build now checks for JDA status --- .../main/java/com/github/azzerial/slash/SlashClientBuilder.java | 1 + 1 file changed, 1 insertion(+) diff --git a/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java b/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java index 7eda7eb..418c697 100644 --- a/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java +++ b/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java @@ -65,6 +65,7 @@ public SlashClientBuilder deleteUnregisteredCommands(boolean enabled) { } public SlashClient build() { + Checks.check(jda.getStatus() == JDA.Status.CONNECTED, "JDA is not JDA.Status.CONNECTED! Maybe you forgot to call JDA#awaitReady()?"); final Collection commands = registry.getCommands(); loadGlobalCommands(commands); From 93392791445231be13c8ca62be259dd528538434 Mon Sep 17 00:00:00 2001 From: Azzerial Date: Mon, 30 Aug 2021 18:20:54 +0100 Subject: [PATCH 08/17] updated: changed SlashClient config management to use flags --- .../github/azzerial/slash/SlashClient.java | 33 +++++++++++++++++++ .../azzerial/slash/SlashClientBuilder.java | 19 ++++++++--- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/com/github/azzerial/slash/SlashClient.java b/api/src/main/java/com/github/azzerial/slash/SlashClient.java index 3a4a7cd..cac5fa5 100644 --- a/api/src/main/java/com/github/azzerial/slash/SlashClient.java +++ b/api/src/main/java/com/github/azzerial/slash/SlashClient.java @@ -21,6 +21,8 @@ import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.hooks.EventListener; +import java.util.EnumSet; + public final class SlashClient { private final JDA jda; @@ -42,4 +44,35 @@ public final class SlashClient { public SlashCommand getCommand(String tag) { return registry.getCommand(tag); } + + /* Nested Classes */ + + public enum Flag { + DELETE_UNREGISTERED_COMMANDS; + + private final boolean isDefault; + + /* Constructors */ + + Flag() { + this(false); + } + + Flag(boolean isDefault) { + this.isDefault = isDefault; + } + + /* Methods */ + + public static EnumSet getDefault() { + final EnumSet set = EnumSet.noneOf(Flag.class); + + for (Flag flag : values()) { + if (flag.isDefault) { + set.add(flag); + } + } + return set; + } + } } diff --git a/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java b/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java index 7eda7eb..aad8b80 100644 --- a/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java +++ b/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java @@ -16,12 +16,14 @@ package com.github.azzerial.slash; +import com.github.azzerial.slash.SlashClient.Flag; import com.github.azzerial.slash.internal.CommandRegistry; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.interactions.commands.Command; import net.dv8tion.jda.internal.utils.Checks; import java.util.Collection; +import java.util.EnumSet; import java.util.List; public final class SlashClientBuilder { @@ -29,13 +31,14 @@ public final class SlashClientBuilder { private final JDA jda; private final CommandRegistry registry; - private boolean deleteUnregisteredCommands = false; + private final EnumSet flags; /* Constructors */ private SlashClientBuilder(JDA jda) { this.jda = jda; this.registry = new CommandRegistry(jda); + this.flags = Flag.getDefault(); } /* Methods */ @@ -59,12 +62,18 @@ public SlashClientBuilder addCommands(Object... commands) { return this; } - public SlashClientBuilder deleteUnregisteredCommands(boolean enabled) { - this.deleteUnregisteredCommands = enabled; + public SlashClientBuilder setFlag(Flag flag, boolean enabled) { + Checks.notNull(flag, "Flag"); + if (enabled) { + flags.add(flag); + } else { + flags.remove(flag); + } return this; } public SlashClient build() { + Checks.check(jda.getStatus() == JDA.Status.CONNECTED, "JDA is not JDA.Status.CONNECTED! Maybe you forgot to call JDA#awaitReady()?"); final Collection commands = registry.getCommands(); loadGlobalCommands(commands); @@ -81,7 +90,7 @@ private void loadGlobalCommands(Collection commands) { for (Command cmd : cmds) { if (cmd.getName().equals(command.getData().getName())) { command.putCommand(SlashCommand.GLOBAL, cmd); - } else if (deleteUnregisteredCommands) { + } else if (flags.contains(Flag.DELETE_UNREGISTERED_COMMANDS)) { cmd.delete().queue(); } } @@ -97,7 +106,7 @@ private void loadGuildCommands(Collection commands) { for (Command cmd : cmds) { if (cmd.getName().equals(command.getData().getName())) { command.putCommand(guild.getIdLong(), cmd); - } else if (deleteUnregisteredCommands) { + } else if (flags.contains(Flag.DELETE_UNREGISTERED_COMMANDS)) { cmd.delete().queue(); } } From 8965d9c5f8ffa79744ae46ab082fc1c27b0a3c42 Mon Sep 17 00:00:00 2001 From: Azzerial Date: Mon, 30 Aug 2021 19:09:25 +0100 Subject: [PATCH 09/17] updated: refactored dependencie version handling --- api/build.gradle | 3 ++- build.gradle | 21 ++++++++++++++++++--- playground/build.gradle | 5 +++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/api/build.gradle b/api/build.gradle index 04a250e..e9b9842 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -23,5 +23,6 @@ ext.moduleName = 'api' archivesBaseName = moduleName dependencies { - implementation ('net.dv8tion:JDA:4.3.0_277') + implementation jda() + implementation slf4j() } diff --git a/build.gradle b/build.gradle index 115817d..508e0f1 100644 --- a/build.gradle +++ b/build.gradle @@ -19,6 +19,22 @@ ext.moduleName = 'slash-command' allprojects { group = 'com.github.azzerial' version = '1.0' + + ext { + annotationsVersion = '22.0.0' + jdaVersion = '4.3.0_313' + junitVersion = '5.7.2' + logbackVersion = '1.2.3' + slf4jVersion = '1.7.32' + + dependencies { + annotations = { [group: 'org.jetbrains', name: 'annotations', version: annotationsVersion] } + jda = { [group: 'net.dv8tion', name: 'JDA', version: jdaVersion] } + logback = { [group: 'ch.qos.logback', name: 'logback-classic', version: logbackVersion] } + slf4j = { [group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion] } + junit = { [group: 'org.junit.jupiter', name: 'junit-jupiter', version: junitVersion] } + } + } } subprojects { @@ -30,9 +46,8 @@ subprojects { } dependencies { - implementation ('org.jetbrains:annotations:20.1.0') - implementation ('org.slf4j:slf4j-api:1.7.3') - testImplementation ('org.junit.jupiter:junit-jupiter:5.7.0') + implementation annotations() + testImplementation junit() } java { diff --git a/playground/build.gradle b/playground/build.gradle index a51ac39..b6043a9 100644 --- a/playground/build.gradle +++ b/playground/build.gradle @@ -20,8 +20,9 @@ plugins { dependencies { implementation project(':api') - implementation ('ch.qos.logback:logback-classic:1.2.3') - implementation ('net.dv8tion:JDA:4.3.0_277') + implementation logback() + implementation jda() + implementation slf4j() } java { From 2f95ace825edbf7d9f6bb188748dfc6787a7b049 Mon Sep 17 00:00:00 2001 From: Azzerial Date: Mon, 30 Aug 2021 19:18:15 +0100 Subject: [PATCH 10/17] updated: made SLF4J a default dependency --- api/build.gradle | 1 - build.gradle | 1 + playground/build.gradle | 1 - 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/api/build.gradle b/api/build.gradle index e9b9842..17695f6 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -24,5 +24,4 @@ archivesBaseName = moduleName dependencies { implementation jda() - implementation slf4j() } diff --git a/build.gradle b/build.gradle index 508e0f1..8244507 100644 --- a/build.gradle +++ b/build.gradle @@ -47,6 +47,7 @@ subprojects { dependencies { implementation annotations() + implementation slf4j() testImplementation junit() } diff --git a/playground/build.gradle b/playground/build.gradle index b6043a9..60cff9b 100644 --- a/playground/build.gradle +++ b/playground/build.gradle @@ -22,7 +22,6 @@ dependencies { implementation project(':api') implementation logback() implementation jda() - implementation slf4j() } java { From c928c2100164e3fb3881d070933df8528182d6c0 Mon Sep 17 00:00:00 2001 From: Azzerial Date: Wed, 1 Sep 2021 04:58:03 +0100 Subject: [PATCH 11/17] fixed: InteractionListener will not throw errors anymore on components not created from the library components classes --- .../slash/internal/ComponentRegistry.java | 22 +++++++++++++++++++ .../slash/internal/util/UnsignedBase512.java | 4 ++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java b/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java index 96cd4d4..1648d0a 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java +++ b/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java @@ -22,12 +22,31 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; public final class ComponentRegistry { public static final int CODE_LENGTH = 4; + public static final Pattern ID_PATTERN; private static final ComponentRegistry INSTANCE = new ComponentRegistry(); + static { + StringBuilder sb = new StringBuilder("("); + + for (int i = 0; i != CODE_LENGTH; i++) { + sb.append('[' + UnsignedBase512.NUMERALS + "]{").append(i + 1).append('}'); + for (int n = CODE_LENGTH - i - 1; n != 0; n--) { + sb.append(' '); + } + if (i + 1 != CODE_LENGTH) { + sb.append('|'); + } + } + sb.append(")(.)?"); + + ID_PATTERN = Pattern.compile(sb.toString()); + } + private final List codes; private final Map mappings = new HashMap<>(); @@ -56,6 +75,9 @@ public String formatComponentId(String tag, String data) { } public ComponentCallback getComponentCallback(String id) { + if (!ID_PATTERN.matcher(id).matches()) { + return null; + } final int code = UnsignedBase512.parseInt(parseCode(id)); final String tag = codes.get(code); return mappings.get(tag); diff --git a/api/src/main/java/com/github/azzerial/slash/internal/util/UnsignedBase512.java b/api/src/main/java/com/github/azzerial/slash/internal/util/UnsignedBase512.java index e35fbfb..a5bad34 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/util/UnsignedBase512.java +++ b/api/src/main/java/com/github/azzerial/slash/internal/util/UnsignedBase512.java @@ -20,8 +20,7 @@ public final class UnsignedBase512 { - private static final BigInteger _512 = BigInteger.valueOf(512); - private static final String NUMERALS = + public static final String NUMERALS = /* U+0030 -> U+0039 */ "0123456789" + /* U+0041 -> U+005A */ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + /* U+0061 -> U+007A */ "abcdefghijklmnopqrstuvwxyz" + @@ -41,6 +40,7 @@ public final class UnsignedBase512 { /* U+022A -> U+0233 */ "ȪȫȬȭȮȯȰȱȲȳ" + /* U+0241 -> U+024F */ "ɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ" + /* U+0250 -> U+0295 */ "ɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕ"; + private static final BigInteger _512 = BigInteger.valueOf(512); /* Constructors */ From 2303d8042992b703bac19c19c155b1ebf46ad9e4 Mon Sep 17 00:00:00 2001 From: Azzerial Date: Thu, 2 Sep 2021 04:17:34 +0100 Subject: [PATCH 12/17] fixed: removed empty line --- .../main/java/com/github/azzerial/slash/SlashClientBuilder.java | 1 - 1 file changed, 1 deletion(-) diff --git a/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java b/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java index aad8b80..6965fc9 100644 --- a/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java +++ b/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java @@ -30,7 +30,6 @@ public final class SlashClientBuilder { private final JDA jda; private final CommandRegistry registry; - private final EnumSet flags; /* Constructors */ From b20d207ad28f8abc640fec80faff9f44e3307843 Mon Sep 17 00:00:00 2001 From: Azzerial Date: Thu, 2 Sep 2021 04:25:07 +0100 Subject: [PATCH 13/17] updated: added new OptionType.NUMBER --- .../slash/annotations/OptionType.java | 25 ++++++++++++++++--- .../slash/internal/AnnotationCompiler.java | 6 ++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/api/src/main/java/com/github/azzerial/slash/annotations/OptionType.java b/api/src/main/java/com/github/azzerial/slash/annotations/OptionType.java index 0ccecf4..8625bfa 100644 --- a/api/src/main/java/com/github/azzerial/slash/annotations/OptionType.java +++ b/api/src/main/java/com/github/azzerial/slash/annotations/OptionType.java @@ -20,11 +20,30 @@ * This enum represents the type of a Slash Command option. */ public enum OptionType { - STRING, - INTEGER, + STRING(true), + INTEGER(true), BOOLEAN, USER, CHANNEL, ROLE, - MENTIONABLE + MENTIONABLE, + NUMBER(true); + + private final boolean supportsChoices; + + /* Constructors */ + + OptionType() { + this(false); + } + + OptionType(boolean supportsChoices) { + this.supportsChoices = supportsChoices; + } + + /* Getters & Setters */ + + public boolean canSupportsChoices() { + return supportsChoices; + } } diff --git a/api/src/main/java/com/github/azzerial/slash/internal/AnnotationCompiler.java b/api/src/main/java/com/github/azzerial/slash/internal/AnnotationCompiler.java index d059f40..d6f7f17 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/AnnotationCompiler.java +++ b/api/src/main/java/com/github/azzerial/slash/internal/AnnotationCompiler.java @@ -111,14 +111,14 @@ private OptionData compileOption(Option option) { option.required() ); - if (option.type() == com.github.azzerial.slash.annotations.OptionType.STRING - || option.type() == com.github.azzerial.slash.annotations.OptionType.INTEGER) { + if (option.type().canSupportsChoices()) { data.addChoices( Arrays.stream(option.choices()) .map(choice -> { switch (option.type()) { case STRING: return new Command.Choice(choice.name(), choice.value()); - case INTEGER: return new Command.Choice(choice.name(), Integer.parseInt(choice.value())); + case INTEGER: return new Command.Choice(choice.name(), Long.parseLong(choice.value())); + case NUMBER: return new Command.Choice(choice.name(), Double.parseDouble(choice.value())); default: return null; } }) From e13d35f0589f789736e2935b1e4d0e97a75effc9 Mon Sep 17 00:00:00 2001 From: Azzerial Date: Thu, 16 Sep 2021 01:27:38 +0200 Subject: [PATCH 14/17] updated: rewrote the features section and the footer --- README.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index dcffb7b..5db0d09 100644 --- a/README.md +++ b/README.md @@ -28,12 +28,16 @@ ## Features -A few of the things you can do with Slash Commands: +A few things you can do with the library: * Create and manage Slash Commands -* Assign callbacks to Slash Commands events (supports per [command path](https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/api/interactions/commands/CommandInteraction.html#getCommandPath()) callbacks) -* Assign callbacks to buttons -* Session system for interactions (with session store) +* Assign callbacks to Slash Commands (supports per [command path](https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/api/interactions/commands/CommandInteraction.html#getCommandPath()) and wildcard callbacks) +* Assign callbacks to message components: + * Buttons + * Selection Menus +* Bind data to a message component: + * Raw data buffer + * Session storage ## How to Use @@ -48,7 +52,7 @@ public class PingCommand { public static void main(String[] args) throws LoginException, InterruptedException { final JDA jda = JDABuilder.createDefault(...) .build() - .awaitReady(); + .awaitReady(); // wait for JDA to be connected (mandatory) final SlashClient slash = SlashClientBuilder.create(jda) .addCommand(new PingCommand()) // register the ping command .build(); @@ -105,10 +109,11 @@ dependencies { ## License -This project is licensed under the [Apache License 2.0](LICENSE) © 2021 [Robin Mercier](https://github.com/azzerial/). +This project is licensed under the [Apache License 2.0](LICENSE) © 2021 [Robin Mercier](https://github.com/Azzerial). ---

- Slash Commands by @Azzerial + Slash Commands by Robin Mercier • + azzerial.net

From 880b1ec1ee7245bb874e1c03bdedda7474aecfb2 Mon Sep 17 00:00:00 2001 From: Azzerial Date: Thu, 16 Sep 2021 01:41:08 +0200 Subject: [PATCH 15/17] updated: moved component registration methods from CommandRegistry class to ComponentRegistry class --- .../slash/internal/CommandRegistry.java | 50 ++------------ .../slash/internal/ComponentRegistry.java | 67 ++++++++++++++++--- 2 files changed, 62 insertions(+), 55 deletions(-) diff --git a/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java b/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java index f2ddeec..44dc40f 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java +++ b/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java @@ -19,13 +19,12 @@ import com.github.azzerial.slash.SlashCommand; import com.github.azzerial.slash.annotations.Slash; import net.dv8tion.jda.api.JDA; -import net.dv8tion.jda.api.events.interaction.ButtonClickEvent; -import net.dv8tion.jda.api.events.interaction.SelectionMenuEvent; import net.dv8tion.jda.api.interactions.commands.build.CommandData; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; public final class CommandRegistry { @@ -61,8 +60,7 @@ public Collection getCommands() { public SlashCommand registerCommand(Object obj) { final SlashCommand command = compileCommand(obj); - registerButtons(obj); - registerSelectionMenus(obj); + ComponentRegistry.getInstance().registerComponent(obj); registry.put(command.getTag(), command); return command; } @@ -88,44 +86,4 @@ private SlashCommand compileCommand(Object obj) { final Map handlers = annotationCompiler.compileHandlers(cls, data); return new SlashCommand(jda, tag.value(), data, obj, handlers); } - - private void registerButtons(Object obj) { - final Class cls = obj.getClass(); - - Arrays.stream(cls.getDeclaredMethods()) - .filter(method -> - (method.getModifiers() & (Modifier.PROTECTED | Modifier.PRIVATE)) == 0 - && method.isAnnotationPresent(Slash.Button.class) - && method.getParameterCount() == 1 - && method.getParameterTypes()[0] == ButtonClickEvent.class - ) - .sorted(Comparator.comparing(Method::getName)) - .forEach(method -> { - final String tag = method.getAnnotation(Slash.Button.class).value(); - - if (!tag.isEmpty()) { - ComponentRegistry.getInstance().registerComponent(tag, new ComponentCallback(obj, method)); - } - }); - } - - private void registerSelectionMenus(Object obj) { - final Class cls = obj.getClass(); - - Arrays.stream(cls.getDeclaredMethods()) - .filter(method -> - (method.getModifiers() & (Modifier.PROTECTED | Modifier.PRIVATE)) == 0 - && method.isAnnotationPresent(Slash.SelectionMenu.class) - && method.getParameterCount() == 1 - && method.getParameterTypes()[0] == SelectionMenuEvent.class - ) - .sorted(Comparator.comparing(Method::getName)) - .forEach(method -> { - final String tag = method.getAnnotation(Slash.SelectionMenu.class).value(); - - if (!tag.isEmpty()) { - ComponentRegistry.getInstance().registerComponent(tag, new ComponentCallback(obj, method)); - } - }); - } } diff --git a/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java b/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java index 1648d0a..9eb585a 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java +++ b/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java @@ -16,12 +16,15 @@ package com.github.azzerial.slash.internal; +import com.github.azzerial.slash.annotations.Slash; import com.github.azzerial.slash.internal.util.UnsignedBase512; +import net.dv8tion.jda.api.events.interaction.ButtonClickEvent; +import net.dv8tion.jda.api.events.interaction.SelectionMenuEvent; +import net.dv8tion.jda.internal.utils.Checks; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.*; import java.util.regex.Pattern; public final class ComponentRegistry { @@ -85,11 +88,10 @@ public ComponentCallback getComponentCallback(String id) { /* Methods */ - public void registerComponent(String tag, ComponentCallback callback) { - if (!codes.contains(tag)) { - codes.add(tag); - mappings.put(tag, callback); - } + public void registerComponent(Object obj) { + Checks.notNull(obj, "Obj"); + registerButtons(obj); + registerSelectionMenus(obj); } /* Internal */ @@ -105,4 +107,51 @@ private String parseData(String s) { null : s.substring(CODE_LENGTH); } + + private void registerButtons(Object obj) { + final Class cls = obj.getClass(); + + Arrays.stream(cls.getDeclaredMethods()) + .filter(method -> + (method.getModifiers() & (Modifier.PROTECTED | Modifier.PRIVATE)) == 0 + && method.isAnnotationPresent(Slash.Button.class) + && method.getParameterCount() == 1 + && method.getParameterTypes()[0] == ButtonClickEvent.class + ) + .sorted(Comparator.comparing(Method::getName)) + .forEach(method -> { + final String tag = method.getAnnotation(Slash.Button.class).value(); + + if (!tag.isEmpty()) { + registerComponentMapping(tag, new ComponentCallback(obj, method)); + } + }); + } + + private void registerSelectionMenus(Object obj) { + final Class cls = obj.getClass(); + + Arrays.stream(cls.getDeclaredMethods()) + .filter(method -> + (method.getModifiers() & (Modifier.PROTECTED | Modifier.PRIVATE)) == 0 + && method.isAnnotationPresent(Slash.SelectionMenu.class) + && method.getParameterCount() == 1 + && method.getParameterTypes()[0] == SelectionMenuEvent.class + ) + .sorted(Comparator.comparing(Method::getName)) + .forEach(method -> { + final String tag = method.getAnnotation(Slash.SelectionMenu.class).value(); + + if (!tag.isEmpty()) { + registerComponentMapping(tag, new ComponentCallback(obj, method)); + } + }); + } + + private void registerComponentMapping(String tag, ComponentCallback callback) { + if (!codes.contains(tag)) { + codes.add(tag); + mappings.put(tag, callback); + } + } } From e0f15498aa385f1411b51ab0737bd19a33aa82ee Mon Sep 17 00:00:00 2001 From: Azzerial Date: Thu, 16 Sep 2021 16:18:03 +0200 Subject: [PATCH 16/17] updated: changed package namespace to net.azzerial in the api and playground modules --- .../github => net}/azzerial/slash/SlashClient.java | 6 +++--- .../azzerial/slash/SlashClientBuilder.java | 6 +++--- .../github => net}/azzerial/slash/SlashCommand.java | 2 +- .../azzerial/slash/annotations/Choice.java | 2 +- .../azzerial/slash/annotations/Option.java | 2 +- .../azzerial/slash/annotations/OptionType.java | 2 +- .../azzerial/slash/annotations/Slash.java | 2 +- .../azzerial/slash/annotations/Subcommand.java | 2 +- .../azzerial/slash/annotations/SubcommandGroup.java | 2 +- .../azzerial/slash/components/SlashButton.java | 4 ++-- .../azzerial/slash/components/SlashSelectionMenu.java | 4 ++-- .../azzerial/slash/internal/AnnotationCompiler.java | 10 +++++----- .../azzerial/slash/internal/CommandRegistry.java | 6 +++--- .../azzerial/slash/internal/ComponentCallback.java | 2 +- .../azzerial/slash/internal/ComponentRegistry.java | 6 +++--- .../azzerial/slash/internal/InteractionListener.java | 4 ++-- .../azzerial/slash/internal/util/UnsignedBase512.java | 2 +- .../github => net}/azzerial/slash/package-info.java | 2 +- .../github => net}/azzerial/slash/util/Buffer.java | 4 ++-- .../github => net}/azzerial/slash/util/Session.java | 4 ++-- .../github => net}/azzerial/slash/playground/Main.java | 8 ++++---- .../slash/playground/commands/PingCommand.java | 6 +++--- .../azzerial/slash/playground/package-info.java | 2 +- 23 files changed, 45 insertions(+), 45 deletions(-) rename api/src/main/java/{com/github => net}/azzerial/slash/SlashClient.java (92%) rename api/src/main/java/{com/github => net}/azzerial/slash/SlashClientBuilder.java (96%) rename api/src/main/java/{com/github => net}/azzerial/slash/SlashCommand.java (99%) rename api/src/main/java/{com/github => net}/azzerial/slash/annotations/Choice.java (95%) rename api/src/main/java/{com/github => net}/azzerial/slash/annotations/Option.java (96%) rename api/src/main/java/{com/github => net}/azzerial/slash/annotations/OptionType.java (96%) rename api/src/main/java/{com/github => net}/azzerial/slash/annotations/Slash.java (98%) rename api/src/main/java/{com/github => net}/azzerial/slash/annotations/Subcommand.java (95%) rename api/src/main/java/{com/github => net}/azzerial/slash/annotations/SubcommandGroup.java (96%) rename api/src/main/java/{com/github => net}/azzerial/slash/components/SlashButton.java (98%) rename api/src/main/java/{com/github => net}/azzerial/slash/components/SlashSelectionMenu.java (99%) rename api/src/main/java/{com/github => net}/azzerial/slash/internal/AnnotationCompiler.java (96%) rename api/src/main/java/{com/github => net}/azzerial/slash/internal/CommandRegistry.java (95%) rename api/src/main/java/{com/github => net}/azzerial/slash/internal/ComponentCallback.java (95%) rename api/src/main/java/{com/github => net}/azzerial/slash/internal/ComponentRegistry.java (96%) rename api/src/main/java/{com/github => net}/azzerial/slash/internal/InteractionListener.java (96%) rename api/src/main/java/{com/github => net}/azzerial/slash/internal/util/UnsignedBase512.java (99%) rename api/src/main/java/{com/github => net}/azzerial/slash/package-info.java (95%) rename api/src/main/java/{com/github => net}/azzerial/slash/util/Buffer.java (97%) rename api/src/main/java/{com/github => net}/azzerial/slash/util/Session.java (98%) rename playground/src/main/java/{com/github => net}/azzerial/slash/playground/Main.java (90%) rename playground/src/main/java/{com/github => net}/azzerial/slash/playground/commands/PingCommand.java (93%) rename playground/src/main/java/{com/github => net}/azzerial/slash/playground/package-info.java (93%) diff --git a/api/src/main/java/com/github/azzerial/slash/SlashClient.java b/api/src/main/java/net/azzerial/slash/SlashClient.java similarity index 92% rename from api/src/main/java/com/github/azzerial/slash/SlashClient.java rename to api/src/main/java/net/azzerial/slash/SlashClient.java index cac5fa5..72a4b91 100644 --- a/api/src/main/java/com/github/azzerial/slash/SlashClient.java +++ b/api/src/main/java/net/azzerial/slash/SlashClient.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.github.azzerial.slash; +package net.azzerial.slash; -import com.github.azzerial.slash.internal.CommandRegistry; -import com.github.azzerial.slash.internal.InteractionListener; +import net.azzerial.slash.internal.CommandRegistry; +import net.azzerial.slash.internal.InteractionListener; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.hooks.EventListener; diff --git a/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java b/api/src/main/java/net/azzerial/slash/SlashClientBuilder.java similarity index 96% rename from api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java rename to api/src/main/java/net/azzerial/slash/SlashClientBuilder.java index 6965fc9..8cc0f16 100644 --- a/api/src/main/java/com/github/azzerial/slash/SlashClientBuilder.java +++ b/api/src/main/java/net/azzerial/slash/SlashClientBuilder.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.github.azzerial.slash; +package net.azzerial.slash; -import com.github.azzerial.slash.SlashClient.Flag; -import com.github.azzerial.slash.internal.CommandRegistry; +import net.azzerial.slash.SlashClient.Flag; +import net.azzerial.slash.internal.CommandRegistry; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.interactions.commands.Command; import net.dv8tion.jda.internal.utils.Checks; diff --git a/api/src/main/java/com/github/azzerial/slash/SlashCommand.java b/api/src/main/java/net/azzerial/slash/SlashCommand.java similarity index 99% rename from api/src/main/java/com/github/azzerial/slash/SlashCommand.java rename to api/src/main/java/net/azzerial/slash/SlashCommand.java index cde9b25..d99b334 100644 --- a/api/src/main/java/com/github/azzerial/slash/SlashCommand.java +++ b/api/src/main/java/net/azzerial/slash/SlashCommand.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.github.azzerial.slash; +package net.azzerial.slash; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.Guild; diff --git a/api/src/main/java/com/github/azzerial/slash/annotations/Choice.java b/api/src/main/java/net/azzerial/slash/annotations/Choice.java similarity index 95% rename from api/src/main/java/com/github/azzerial/slash/annotations/Choice.java rename to api/src/main/java/net/azzerial/slash/annotations/Choice.java index 60b9d4b..d8b39a1 100644 --- a/api/src/main/java/com/github/azzerial/slash/annotations/Choice.java +++ b/api/src/main/java/net/azzerial/slash/annotations/Choice.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.github.azzerial.slash.annotations; +package net.azzerial.slash.annotations; import java.lang.annotation.*; diff --git a/api/src/main/java/com/github/azzerial/slash/annotations/Option.java b/api/src/main/java/net/azzerial/slash/annotations/Option.java similarity index 96% rename from api/src/main/java/com/github/azzerial/slash/annotations/Option.java rename to api/src/main/java/net/azzerial/slash/annotations/Option.java index ec434d4..5471425 100644 --- a/api/src/main/java/com/github/azzerial/slash/annotations/Option.java +++ b/api/src/main/java/net/azzerial/slash/annotations/Option.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.github.azzerial.slash.annotations; +package net.azzerial.slash.annotations; import java.lang.annotation.*; diff --git a/api/src/main/java/com/github/azzerial/slash/annotations/OptionType.java b/api/src/main/java/net/azzerial/slash/annotations/OptionType.java similarity index 96% rename from api/src/main/java/com/github/azzerial/slash/annotations/OptionType.java rename to api/src/main/java/net/azzerial/slash/annotations/OptionType.java index 8625bfa..404a0f0 100644 --- a/api/src/main/java/com/github/azzerial/slash/annotations/OptionType.java +++ b/api/src/main/java/net/azzerial/slash/annotations/OptionType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.github.azzerial.slash.annotations; +package net.azzerial.slash.annotations; /** * This enum represents the type of a Slash Command option. diff --git a/api/src/main/java/com/github/azzerial/slash/annotations/Slash.java b/api/src/main/java/net/azzerial/slash/annotations/Slash.java similarity index 98% rename from api/src/main/java/com/github/azzerial/slash/annotations/Slash.java rename to api/src/main/java/net/azzerial/slash/annotations/Slash.java index dc8b1dc..4eb9860 100644 --- a/api/src/main/java/com/github/azzerial/slash/annotations/Slash.java +++ b/api/src/main/java/net/azzerial/slash/annotations/Slash.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.github.azzerial.slash.annotations; +package net.azzerial.slash.annotations; import java.lang.annotation.*; diff --git a/api/src/main/java/com/github/azzerial/slash/annotations/Subcommand.java b/api/src/main/java/net/azzerial/slash/annotations/Subcommand.java similarity index 95% rename from api/src/main/java/com/github/azzerial/slash/annotations/Subcommand.java rename to api/src/main/java/net/azzerial/slash/annotations/Subcommand.java index 20f4303..b707499 100644 --- a/api/src/main/java/com/github/azzerial/slash/annotations/Subcommand.java +++ b/api/src/main/java/net/azzerial/slash/annotations/Subcommand.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.github.azzerial.slash.annotations; +package net.azzerial.slash.annotations; import java.lang.annotation.*; diff --git a/api/src/main/java/com/github/azzerial/slash/annotations/SubcommandGroup.java b/api/src/main/java/net/azzerial/slash/annotations/SubcommandGroup.java similarity index 96% rename from api/src/main/java/com/github/azzerial/slash/annotations/SubcommandGroup.java rename to api/src/main/java/net/azzerial/slash/annotations/SubcommandGroup.java index bbafc2d..41eb22a 100644 --- a/api/src/main/java/com/github/azzerial/slash/annotations/SubcommandGroup.java +++ b/api/src/main/java/net/azzerial/slash/annotations/SubcommandGroup.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.github.azzerial.slash.annotations; +package net.azzerial.slash.annotations; import java.lang.annotation.*; diff --git a/api/src/main/java/com/github/azzerial/slash/components/SlashButton.java b/api/src/main/java/net/azzerial/slash/components/SlashButton.java similarity index 98% rename from api/src/main/java/com/github/azzerial/slash/components/SlashButton.java rename to api/src/main/java/net/azzerial/slash/components/SlashButton.java index 4aa4263..2b32794 100644 --- a/api/src/main/java/com/github/azzerial/slash/components/SlashButton.java +++ b/api/src/main/java/net/azzerial/slash/components/SlashButton.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.github.azzerial.slash.components; +package net.azzerial.slash.components; -import com.github.azzerial.slash.internal.ComponentRegistry; +import net.azzerial.slash.internal.ComponentRegistry; import net.dv8tion.jda.api.entities.Emoji; import net.dv8tion.jda.api.interactions.components.ButtonStyle; import net.dv8tion.jda.api.interactions.components.Component; diff --git a/api/src/main/java/com/github/azzerial/slash/components/SlashSelectionMenu.java b/api/src/main/java/net/azzerial/slash/components/SlashSelectionMenu.java similarity index 99% rename from api/src/main/java/com/github/azzerial/slash/components/SlashSelectionMenu.java rename to api/src/main/java/net/azzerial/slash/components/SlashSelectionMenu.java index f974be9..f27d91c 100644 --- a/api/src/main/java/com/github/azzerial/slash/components/SlashSelectionMenu.java +++ b/api/src/main/java/net/azzerial/slash/components/SlashSelectionMenu.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.github.azzerial.slash.components; +package net.azzerial.slash.components; -import com.github.azzerial.slash.internal.ComponentRegistry; +import net.azzerial.slash.internal.ComponentRegistry; import net.dv8tion.jda.api.entities.Emoji; import net.dv8tion.jda.api.interactions.components.Component; import net.dv8tion.jda.api.interactions.components.selections.SelectOption; diff --git a/api/src/main/java/com/github/azzerial/slash/internal/AnnotationCompiler.java b/api/src/main/java/net/azzerial/slash/internal/AnnotationCompiler.java similarity index 96% rename from api/src/main/java/com/github/azzerial/slash/internal/AnnotationCompiler.java rename to api/src/main/java/net/azzerial/slash/internal/AnnotationCompiler.java index d6f7f17..55cf7cb 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/AnnotationCompiler.java +++ b/api/src/main/java/net/azzerial/slash/internal/AnnotationCompiler.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package com.github.azzerial.slash.internal; +package net.azzerial.slash.internal; -import com.github.azzerial.slash.annotations.Option; -import com.github.azzerial.slash.annotations.Slash; -import com.github.azzerial.slash.annotations.Subcommand; -import com.github.azzerial.slash.annotations.SubcommandGroup; +import net.azzerial.slash.annotations.Option; +import net.azzerial.slash.annotations.Slash; +import net.azzerial.slash.annotations.Subcommand; +import net.azzerial.slash.annotations.SubcommandGroup; import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; import net.dv8tion.jda.api.interactions.commands.Command; import net.dv8tion.jda.api.interactions.commands.OptionType; diff --git a/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java b/api/src/main/java/net/azzerial/slash/internal/CommandRegistry.java similarity index 95% rename from api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java rename to api/src/main/java/net/azzerial/slash/internal/CommandRegistry.java index 44dc40f..837464b 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/CommandRegistry.java +++ b/api/src/main/java/net/azzerial/slash/internal/CommandRegistry.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.github.azzerial.slash.internal; +package net.azzerial.slash.internal; -import com.github.azzerial.slash.SlashCommand; -import com.github.azzerial.slash.annotations.Slash; +import net.azzerial.slash.SlashCommand; +import net.azzerial.slash.annotations.Slash; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.interactions.commands.build.CommandData; diff --git a/api/src/main/java/com/github/azzerial/slash/internal/ComponentCallback.java b/api/src/main/java/net/azzerial/slash/internal/ComponentCallback.java similarity index 95% rename from api/src/main/java/com/github/azzerial/slash/internal/ComponentCallback.java rename to api/src/main/java/net/azzerial/slash/internal/ComponentCallback.java index 84e5ee9..768399a 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/ComponentCallback.java +++ b/api/src/main/java/net/azzerial/slash/internal/ComponentCallback.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.github.azzerial.slash.internal; +package net.azzerial.slash.internal; import java.lang.reflect.Method; diff --git a/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java b/api/src/main/java/net/azzerial/slash/internal/ComponentRegistry.java similarity index 96% rename from api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java rename to api/src/main/java/net/azzerial/slash/internal/ComponentRegistry.java index 9eb585a..8ce9c03 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/ComponentRegistry.java +++ b/api/src/main/java/net/azzerial/slash/internal/ComponentRegistry.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.github.azzerial.slash.internal; +package net.azzerial.slash.internal; -import com.github.azzerial.slash.annotations.Slash; -import com.github.azzerial.slash.internal.util.UnsignedBase512; +import net.azzerial.slash.annotations.Slash; +import net.azzerial.slash.internal.util.UnsignedBase512; import net.dv8tion.jda.api.events.interaction.ButtonClickEvent; import net.dv8tion.jda.api.events.interaction.SelectionMenuEvent; import net.dv8tion.jda.internal.utils.Checks; diff --git a/api/src/main/java/com/github/azzerial/slash/internal/InteractionListener.java b/api/src/main/java/net/azzerial/slash/internal/InteractionListener.java similarity index 96% rename from api/src/main/java/com/github/azzerial/slash/internal/InteractionListener.java rename to api/src/main/java/net/azzerial/slash/internal/InteractionListener.java index 5013eda..ad04b4c 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/InteractionListener.java +++ b/api/src/main/java/net/azzerial/slash/internal/InteractionListener.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.github.azzerial.slash.internal; +package net.azzerial.slash.internal; -import com.github.azzerial.slash.SlashCommand; +import net.azzerial.slash.SlashCommand; import net.dv8tion.jda.api.events.interaction.GenericComponentInteractionCreateEvent; import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; diff --git a/api/src/main/java/com/github/azzerial/slash/internal/util/UnsignedBase512.java b/api/src/main/java/net/azzerial/slash/internal/util/UnsignedBase512.java similarity index 99% rename from api/src/main/java/com/github/azzerial/slash/internal/util/UnsignedBase512.java rename to api/src/main/java/net/azzerial/slash/internal/util/UnsignedBase512.java index a5bad34..a28b637 100644 --- a/api/src/main/java/com/github/azzerial/slash/internal/util/UnsignedBase512.java +++ b/api/src/main/java/net/azzerial/slash/internal/util/UnsignedBase512.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.github.azzerial.slash.internal.util; +package net.azzerial.slash.internal.util; import java.math.BigInteger; diff --git a/api/src/main/java/com/github/azzerial/slash/package-info.java b/api/src/main/java/net/azzerial/slash/package-info.java similarity index 95% rename from api/src/main/java/com/github/azzerial/slash/package-info.java rename to api/src/main/java/net/azzerial/slash/package-info.java index 78fe279..c4c92f3 100644 --- a/api/src/main/java/com/github/azzerial/slash/package-info.java +++ b/api/src/main/java/net/azzerial/slash/package-info.java @@ -17,4 +17,4 @@ /** * API module of the Slash Commands library. */ -package com.github.azzerial.slash; \ No newline at end of file +package net.azzerial.slash; \ No newline at end of file diff --git a/api/src/main/java/com/github/azzerial/slash/util/Buffer.java b/api/src/main/java/net/azzerial/slash/util/Buffer.java similarity index 97% rename from api/src/main/java/com/github/azzerial/slash/util/Buffer.java rename to api/src/main/java/net/azzerial/slash/util/Buffer.java index 8efd40b..987c958 100644 --- a/api/src/main/java/com/github/azzerial/slash/util/Buffer.java +++ b/api/src/main/java/net/azzerial/slash/util/Buffer.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.github.azzerial.slash.util; +package net.azzerial.slash.util; import net.dv8tion.jda.internal.utils.Checks; -import static com.github.azzerial.slash.internal.ComponentRegistry.CODE_LENGTH; +import static net.azzerial.slash.internal.ComponentRegistry.CODE_LENGTH; public final class Buffer { diff --git a/api/src/main/java/com/github/azzerial/slash/util/Session.java b/api/src/main/java/net/azzerial/slash/util/Session.java similarity index 98% rename from api/src/main/java/com/github/azzerial/slash/util/Session.java rename to api/src/main/java/net/azzerial/slash/util/Session.java index 2de85c5..47932ea 100644 --- a/api/src/main/java/com/github/azzerial/slash/util/Session.java +++ b/api/src/main/java/net/azzerial/slash/util/Session.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.github.azzerial.slash.util; +package net.azzerial.slash.util; import net.dv8tion.jda.api.interactions.InteractionHook; import net.dv8tion.jda.api.utils.data.DataObject; @@ -32,7 +32,7 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; -import static com.github.azzerial.slash.internal.ComponentRegistry.CODE_LENGTH; +import static net.azzerial.slash.internal.ComponentRegistry.CODE_LENGTH; public final class Session extends DataObject { diff --git a/playground/src/main/java/com/github/azzerial/slash/playground/Main.java b/playground/src/main/java/net/azzerial/slash/playground/Main.java similarity index 90% rename from playground/src/main/java/com/github/azzerial/slash/playground/Main.java rename to playground/src/main/java/net/azzerial/slash/playground/Main.java index 313a378..9789c58 100644 --- a/playground/src/main/java/com/github/azzerial/slash/playground/Main.java +++ b/playground/src/main/java/net/azzerial/slash/playground/Main.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.github.azzerial.slash.playground; +package net.azzerial.slash.playground; -import com.github.azzerial.slash.SlashClient; -import com.github.azzerial.slash.SlashClientBuilder; -import com.github.azzerial.slash.playground.commands.PingCommand; +import net.azzerial.slash.SlashClient; +import net.azzerial.slash.SlashClientBuilder; +import net.azzerial.slash.playground.commands.PingCommand; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.requests.GatewayIntent; diff --git a/playground/src/main/java/com/github/azzerial/slash/playground/commands/PingCommand.java b/playground/src/main/java/net/azzerial/slash/playground/commands/PingCommand.java similarity index 93% rename from playground/src/main/java/com/github/azzerial/slash/playground/commands/PingCommand.java rename to playground/src/main/java/net/azzerial/slash/playground/commands/PingCommand.java index f8622c2..17ab190 100644 --- a/playground/src/main/java/com/github/azzerial/slash/playground/commands/PingCommand.java +++ b/playground/src/main/java/net/azzerial/slash/playground/commands/PingCommand.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.github.azzerial.slash.playground.commands; +package net.azzerial.slash.playground.commands; -import com.github.azzerial.slash.annotations.Slash; -import com.github.azzerial.slash.components.SlashButton; +import net.azzerial.slash.annotations.Slash; +import net.azzerial.slash.components.SlashButton; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.events.interaction.ButtonClickEvent; diff --git a/playground/src/main/java/com/github/azzerial/slash/playground/package-info.java b/playground/src/main/java/net/azzerial/slash/playground/package-info.java similarity index 93% rename from playground/src/main/java/com/github/azzerial/slash/playground/package-info.java rename to playground/src/main/java/net/azzerial/slash/playground/package-info.java index 8e08d50..b787bd1 100644 --- a/playground/src/main/java/com/github/azzerial/slash/playground/package-info.java +++ b/playground/src/main/java/net/azzerial/slash/playground/package-info.java @@ -17,4 +17,4 @@ /** * Implementation module of the Slash Commands library. */ -package com.github.azzerial.slash.playground; \ No newline at end of file +package net.azzerial.slash.playground; \ No newline at end of file From 04a05e57b2c8d8cb093603ed897760517a4f4b58 Mon Sep 17 00:00:00 2001 From: Robin Mercier Date: Thu, 16 Sep 2021 16:19:49 +0200 Subject: [PATCH 17/17] updated: release v1.1 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5db0d09..348b2d0 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ repositories { } dependencies { - implementation 'com.github.azzerial.slash-commands:api:1.0' + implementation 'com.github.azzerial.slash-commands:api:1.1' } ``` @@ -103,7 +103,7 @@ dependencies { com.github.azzerial.slash-commands api - 1.0 + 1.1 ```