diff --git a/src/main/java/fr/xephi/authme/output/MessageKey.java b/src/main/java/fr/xephi/authme/output/MessageKey.java index bc024abf..b93f956b 100644 --- a/src/main/java/fr/xephi/authme/output/MessageKey.java +++ b/src/main/java/fr/xephi/authme/output/MessageKey.java @@ -79,7 +79,7 @@ public enum MessageKey { INVALID_NAME_LENGTH("name_len"), - INVALID_NAME_CHARACTERS("regex"), + INVALID_NAME_CHARACTERS("regex", "REG_EX"), ADD_EMAIL_MESSAGE("add_email"), @@ -87,7 +87,7 @@ public enum MessageKey { USAGE_CAPTCHA("usage_captcha"), - CAPTCHA_WRONG_ERROR("wrong_captcha"), + CAPTCHA_WRONG_ERROR("wrong_captcha", "THE_CAPTCHA"), CAPTCHA_SUCCESS("valid_captcha"), @@ -119,16 +119,32 @@ public enum MessageKey { ANTIBOT_AUTO_ENABLED_MESSAGE("antibot_auto_enabled"), - ANTIBOT_AUTO_DISABLED_MESSAGE("antibot_auto_disabled"); + ANTIBOT_AUTO_DISABLED_MESSAGE("antibot_auto_disabled", "%m"); private String key; + private String[] tags; - MessageKey(String key) { + MessageKey(String key, String... tags) { this.key = key; + this.tags = tags; } + /** + * Return the key used in the messages file. + * + * @return The key + */ public String getKey() { return key; } + + /** + * Return a list of tags (texts) that are replaced with actual content in AuthMe. + * + * @return List of tags + */ + public String[] getTags() { + return tags; + } } diff --git a/src/main/resources/messages/messages_en.yml b/src/main/resources/messages/messages_en.yml index fdb361a3..2d26cb1f 100644 --- a/src/main/resources/messages/messages_en.yml +++ b/src/main/resources/messages/messages_en.yml @@ -14,7 +14,7 @@ user_regged: '&cYou already have registered this username!' usage_reg: '&cUsage: /register ' max_reg: '&cYou have exceeded the maximum number of registrations for your connection!' no_perm: '&4You don''t have the permission to perform this action!' -error: '&4An unexpected error occurred, please contact an Administrator!' +error: '&4An unexpected error occurred, please contact an administrator!' login_msg: '&cPlease, login with the command "/login "' reg_msg: '&3Please, register to the server with the command "/register "' reg_email_msg: '&3Please, register to the server with the command "/register "' @@ -39,20 +39,20 @@ regex: '&4Your username contains illegal characters. Allowed chars: REG_EX' add_email: '&3Please add your email to your account with the command "/email add "' recovery_email: '&3Forgot your password? Please use the command "/email recovery "' usage_captcha: '&3To login you have to solve a captcha code, please use the command "/captcha "' -wrong_captcha: '&cWrong Captcha, please type "/captcha THE_CAPTCHA" into the chat!' +wrong_captcha: '&cWrong captcha, please type "/captcha THE_CAPTCHA" into the chat!' valid_captcha: '&2Captcha code solved correctly!' -kick_forvip: '&3A VIP Player has joined the server when it was full!' +kick_forvip: '&3A VIP player has joined the server when it was full!' kick_fullserver: '&4The server is full, try again later!' usage_email_add: '&cUsage: /email add ' usage_email_change: '&cUsage: /email change ' usage_email_recovery: '&cUsage: /email recovery ' -new_email_invalid: '&cInvalid New Email, try again!' -old_email_invalid: '&cInvalid Old Email, try again!' -email_invalid: '&cInvalid Email address, try again!' +new_email_invalid: '&cInvalid new email, try again!' +old_email_invalid: '&cInvalid old email, try again!' +email_invalid: '&cInvalid email address, try again!' email_added: '&2Email address successfully added to your account!' email_confirm: '&cPlease confirm your email address!' email_changed: '&2Email address changed correctly!' -email_send: '&2Recovery email sent correctly! Check your email inbox!' +email_send: '&2Recovery email sent successfully! Please check your email inbox!' email_exists: '&cA recovery email was already sent! You can discard it and send a new one using the command below:' country_banned: '&4Your country is banned from this server!' antibot_auto_enabled: '&4[AntiBotService] AntiBot enabled due to the huge number of connections!' diff --git a/src/tools/messages/MessageFileVerifier.java b/src/tools/messages/MessageFileVerifier.java index 75e9927e..904ea1af 100644 --- a/src/tools/messages/MessageFileVerifier.java +++ b/src/tools/messages/MessageFileVerifier.java @@ -1,11 +1,15 @@ package messages; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; import fr.xephi.authme.output.MessageKey; import utils.FileUtils; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -22,6 +26,7 @@ public class MessageFileVerifier { private final Set unknownKeys = new HashSet<>(); // Map with the missing key and a boolean indicating whether or not it was added to the file by this object private final Map missingKeys = new HashMap<>(); + private final Multimap missingTags = HashMultimap.create(); /** * Create a verifier that verifies the given messages file. @@ -53,8 +58,17 @@ public class MessageFileVerifier { return missingKeys; } + /** + * Return the collection of tags the message key defines that aren't present in the read line. + * + * @return Collection of missing tags per message key. Key = message key, value = missing tag. + */ + public Multimap getMissingTags() { + return missingTags; + } + private void verifyKeys() { - Set messageKeys = getAllMessageKeys(); + List messageKeys = getAllMessageKeys(); List fileLines = FileUtils.readLinesFromFile(messagesFile); for (String line : fileLines) { // Skip comments and empty lines @@ -64,22 +78,38 @@ public class MessageFileVerifier { } // All keys that remain are keys that are absent in the file - for (String missingKey : messageKeys) { - missingKeys.put(missingKey, false); + for (MessageKey missingKey : messageKeys) { + missingKeys.put(missingKey.getKey(), false); } } - private void processKeyInFile(String line, Set messageKeys) { + private void processKeyInFile(String line, List messageKeys) { if (line.indexOf(':') == -1) { System.out.println("Skipping line in unknown format: '" + line + "'"); return; } - final String key = line.substring(0, line.indexOf(':')); - if (messageKeys.contains(key)) { - messageKeys.remove(key); - } else { - unknownKeys.add(key); + final String readKey = line.substring(0, line.indexOf(':')); + boolean foundKey = false; + for (Iterator it = messageKeys.iterator(); it.hasNext(); ) { + MessageKey messageKey = it.next(); + if (messageKey.getKey().equals(readKey)) { + checkTagsInMessage(readKey, line.substring(line.indexOf(':')), messageKey.getTags()); + it.remove(); + foundKey = true; + break; + } + } + if (!foundKey) { + unknownKeys.add(readKey); + } + } + + private void checkTagsInMessage(String key, String message, String[] tags) { + for (String tag : tags) { + if (!message.contains(tag)) { + missingTags.put(key, tag); + } } } @@ -105,11 +135,7 @@ public class MessageFileVerifier { FileUtils.appendToFile(messagesFile, sb.toString()); } - private static Set getAllMessageKeys() { - Set messageKeys = new HashSet<>(MessageKey.values().length); - for (MessageKey key : MessageKey.values()) { - messageKeys.add(key.getKey()); - } - return messageKeys; + private static List getAllMessageKeys() { + return new ArrayList<>(Arrays.asList(MessageKey.values())); } } diff --git a/src/tools/messages/VerifyMessagesTask.java b/src/tools/messages/VerifyMessagesTask.java index 2a371216..19eacf24 100644 --- a/src/tools/messages/VerifyMessagesTask.java +++ b/src/tools/messages/VerifyMessagesTask.java @@ -1,5 +1,6 @@ package messages; +import com.google.common.collect.Multimap; import fr.xephi.authme.util.StringUtils; import utils.FileUtils; import utils.ToolTask; @@ -84,6 +85,11 @@ public final class VerifyMessagesTask implements ToolTask { if (!unknownKeys.isEmpty()) { System.out.println(" Unknown keys: " + unknownKeys); } + + Multimap missingTags = verifier.getMissingTags(); + for (Map.Entry entry : missingTags.entries()) { + System.out.println(" Missing tag '" + entry.getValue() + "' in entry with key '" + entry.getKey() + "'"); + } } private static void verifyFileAndAddKeys(MessageFileVerifier verifier, Map defaultMessages) { @@ -106,6 +112,11 @@ public final class VerifyMessagesTask implements ToolTask { if (!unknownKeys.isEmpty()) { System.out.println(" Unknown keys: " + unknownKeys); } + + Multimap missingTags = verifier.getMissingTags(); + for (Map.Entry entry : missingTags.entries()) { + System.out.println(" Missing tag '" + entry.getValue() + "' in entry with key '" + entry.getKey() + "'"); + } } private static Map constructDefaultMessages() {