Skip to content

Commit

Permalink
Merge branch 'Chew:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
JellyBrick authored Nov 12, 2024
2 parents 1a1a078 + cba0a2c commit 7b0b6a5
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 5 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
## JDA-Chewtils
JDA-Chewtils is a fork of [JDA-Utilities](https://github.com/JDA-Applications/JDA-Utilities) which is a series of tools and utilities for use with [JDA](https://github.com/DV8FromTheWorld/JDA) to assist in bot creation.
JDA-Chewtils is a modern and updated fork of [JDA-Utilities](https://github.com/JDA-Applications/JDA-Utilities) which is a series of tools and utilities for use with [JDA](https://github.com/DV8FromTheWorld/JDA) to assist in bot creation.

## Support

Expand All @@ -23,7 +23,7 @@ Visit individual modules to read more about their contents!
## Getting Started
You will need to add this project as a dependency (via Maven or Gradle), as well as [JDA](https://github.com/DV8FromTheWorld/JDA).

**Keep in mind the 1.x version of JDA-Chewtils is only compatible with JDA 4, for compatibility with JDA 5, see [the wiki](https://github.com/Chew/JDA-Chewtils/wiki/Compatibility-with-JDA-4-%26-5)**
**Keep in mind the 1.x version of JDA-Chewtils is only compatible with JDA 4, for compatibility with JDA 5, you need 2.x. See [the wiki](https://github.com/Chew/JDA-Chewtils/wiki/Compatibility-with-JDA-4-%26-5) for more information.**

With Maven:
```xml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -969,13 +969,13 @@ private SlashCommand findSlashCommand(String path)
case 2: // Slash command with children
// child check
for(SlashCommand cmd: command.getChildren())
if(cmd.isCommandFor(parts[1]))
if(cmd.isCommandFor(parts[1]) && cmd.getSubcommandGroup() == null)
return cmd;

return null;
case 3: // Slash command with a group and a child
for(SlashCommand cmd: command.getChildren())
if(cmd.isCommandFor(parts[2]) && cmd.getSubcommandGroup().getName().equals(parts[1]))
if(cmd.isCommandFor(parts[2]) && cmd.getSubcommandGroup() != null && cmd.getSubcommandGroup().getName().equals(parts[1]))
return cmd;

return null;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package com.jagrosh.jdautilities.commons.utils;

import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.interactions.DiscordLocale;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
* Very basic translation lib that accepts properties of translations for different locales.
* <br>
* If you would like to use this for interactions, the locale MUST Be loaded before the CommandClient is built.
*
* @author Olivia
*/
public class TranslateUtil {
public static final Map<DiscordLocale, Properties> LOCALES = new HashMap<>();
private static DiscordLocale DEFAULT = DiscordLocale.ENGLISH_US;

// Prevent instantiation
private TranslateUtil() {}

/**
* Sets the default locale for the bot. By default, this is {@link DiscordLocale#ENGLISH_US}.
*
* @param locale The default locale
*/
public static void setDefaultLocale(DiscordLocale locale) {
DEFAULT = locale;
}

/**
* Loads a locale file from the given path and adds it to the locale map.
* The properties file should be loaded already.
*
* @param locale The locale to load
* @param prop The loaded properties file
*/
public static void addLocale(DiscordLocale locale, Properties prop) {
LOCALES.put(locale, prop);
}

/**
* Translates a string into the given server's locale.
* Recommended for non-ephemeral responses. For ephemeral responses, use {@link #t(DiscordLocale, String)}.
*
* @param key The key to translate
* @param server The server to translate for
* @return The translated string
*/
public static String t(Guild server, String key) {
DiscordLocale locale = server.getLocale();

String def = LOCALES.get(DEFAULT).getProperty(key, "No translation provided");

String translated = LOCALES.getOrDefault(locale, LOCALES.get(DEFAULT)).getProperty(key, def);

if (translated.equals(def)) {
LoggerFactory.getLogger(TranslateUtil.class).warn("No translation provided for key {} in locale {}", key, locale);
}

return translated;
}

/**
* Converts the following key to the provided locale. Will default to {@code DEFAULT} if no locale.<br>
* Recommended use: {@code t("MY_KEY", event.getUserLocale())} on interactions.
*
* @param locale The locale to convert to
* @param key The key to convert
* @return The translated string
*/
public static String t(DiscordLocale locale, String key) {
return LOCALES.getOrDefault(locale, LOCALES.get(DEFAULT)).getProperty(key, LOCALES.get(DEFAULT).getProperty(key, "No translation provided"));
}

/**
* Builds a locale map for the given key, used for command descriptions and options.
* If there is no provided translation for a locale, it will not be included in the map.
*
* @param key The key to use for the command description
* @return A map of locales to their respective descriptions
*/
public static Map<DiscordLocale, String> buildLocaleMap(String key) {
HashMap<DiscordLocale, String> locales = new HashMap<>();
// default
locales.put(DEFAULT, LOCALES.get(DEFAULT).getProperty(key, "No translation provided"));

for (DiscordLocale locale : LOCALES.keySet()) {
String translation = LOCALES.get(locale).getProperty(key);
if (translation != null) {
locales.put(locale, translation);
}
}

return locales;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,9 @@ private void handleButtonInteraction(ButtonInteractionEvent event, Message messa
}
}
} else if (emoji.equals(STOP)) {
finalAction.accept(message);
event.deferEdit().queue(
interactionHook -> finalAction.accept(message)
);
return;
}

Expand Down

0 comments on commit 7b0b6a5

Please sign in to comment.