diff --git a/src/main/java/net/dv8tion/jda/api/exceptions/LocalizationException.java b/src/main/java/net/dv8tion/jda/api/exceptions/LocalizationException.java new file mode 100644 index 0000000000..298ca914ca --- /dev/null +++ b/src/main/java/net/dv8tion/jda/api/exceptions/LocalizationException.java @@ -0,0 +1,35 @@ +/* + * Copyright 2015 Austin Keener, Michael Ritter, Florian Spieß, and the JDA contributors + * + * 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 net.dv8tion.jda.api.exceptions; + +import net.dv8tion.jda.api.interactions.commands.localization.LocalizationFunction; + +/** + * Exception indicating that an error occurred while localizing an application command. + * + *
They are usually caused by invalid strings,
+ * or exceptions in a {@link net.dv8tion.jda.api.interactions.commands.localization.LocalizationFunction LocalizationFunction}.
+ *
+ * @see net.dv8tion.jda.api.interactions.commands.build.CommandData#setLocalizationFunction(LocalizationFunction) CommandData.setLocalizationFunction(LocalizationFunction)
+ */
+public class LocalizationException extends RuntimeException
+{
+ public LocalizationException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+}
diff --git a/src/main/java/net/dv8tion/jda/internal/interactions/CommandDataImpl.java b/src/main/java/net/dv8tion/jda/internal/interactions/CommandDataImpl.java
index 88bc202595..f3e774ef8d 100644
--- a/src/main/java/net/dv8tion/jda/internal/interactions/CommandDataImpl.java
+++ b/src/main/java/net/dv8tion/jda/internal/interactions/CommandDataImpl.java
@@ -94,9 +94,9 @@ public void checkDescription(@Nonnull String description)
@Override
public DataObject toData()
{
- DataArray options = DataArray.fromCollection(this.options);
+ if (localizationMapper != null) localizationMapper.localizeCommand(this);
- if (localizationMapper != null) localizationMapper.localizeCommand(this, options);
+ DataArray options = DataArray.fromCollection(this.options);
DataObject json = DataObject.empty()
.put("type", type.getId())
diff --git a/src/main/java/net/dv8tion/jda/internal/interactions/command/localization/LocalizationMapper.java b/src/main/java/net/dv8tion/jda/internal/interactions/command/localization/LocalizationMapper.java
index d7ab4b9638..57d78e2b35 100644
--- a/src/main/java/net/dv8tion/jda/internal/interactions/command/localization/LocalizationMapper.java
+++ b/src/main/java/net/dv8tion/jda/internal/interactions/command/localization/LocalizationMapper.java
@@ -16,18 +16,15 @@
package net.dv8tion.jda.internal.interactions.command.localization;
+import net.dv8tion.jda.api.exceptions.LocalizationException;
import net.dv8tion.jda.api.interactions.DiscordLocale;
import net.dv8tion.jda.api.interactions.commands.Command;
-import net.dv8tion.jda.api.interactions.commands.OptionType;
-import net.dv8tion.jda.api.interactions.commands.build.CommandData;
-import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
+import net.dv8tion.jda.api.interactions.commands.build.*;
import net.dv8tion.jda.api.interactions.commands.localization.LocalizationFunction;
import net.dv8tion.jda.api.interactions.commands.localization.LocalizationMap;
-import net.dv8tion.jda.api.utils.data.DataArray;
-import net.dv8tion.jda.api.utils.data.DataObject;
-import net.dv8tion.jda.internal.utils.Checks;
import javax.annotation.Nonnull;
+import java.util.List;
import java.util.Map;
import java.util.Stack;
import java.util.StringJoiner;
@@ -69,7 +66,7 @@ public static LocalizationMapper fromFunction(@Nonnull LocalizationFunction loca
return new LocalizationMapper(localizationFunction);
}
- public void localizeCommand(CommandData commandData, DataArray optionArray)
+ public void localizeCommand(CommandData commandData)
{
final TranslationContext ctx = new TranslationContext();
ctx.withKey(commandData.getName(), () ->
@@ -79,59 +76,58 @@ public void localizeCommand(CommandData commandData, DataArray optionArray)
{
final SlashCommandData slashCommandData = (SlashCommandData) commandData;
ctx.trySetTranslation(slashCommandData.getDescriptionLocalizations(), "description");
- localizeOptionArray(optionArray, ctx);
+
+ localizeOptions(ctx, slashCommandData.getOptions());
+ localizeSubcommands(ctx, slashCommandData.getSubcommands());
+ ctx.forEach(slashCommandData.getSubcommandGroups(), SubcommandGroupData::getName, subcommandGroup ->
+ {
+ ctx.trySetTranslation(subcommandGroup.getNameLocalizations(), "name");
+ ctx.trySetTranslation(subcommandGroup.getDescriptionLocalizations(), "description");
+
+ localizeSubcommands(ctx, subcommandGroup.getSubcommands());
+ });
}
});
}
- private void localizeOptionArray(DataArray optionArray, TranslationContext ctx)
+ private static void localizeSubcommands(TranslationContext ctx, List