fix major command handler issue + improve chat (mabe)
This commit is contained in:
parent
732be0f24f
commit
0d84a96ae1
2 changed files with 30 additions and 8 deletions
|
@ -28,8 +28,13 @@ import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class ChatPlugin extends Bot.Listener {
|
public class ChatPlugin extends Bot.Listener {
|
||||||
|
public static final Pattern CHAT_SPLIT_PATTERN = Pattern.compile("\\G\\s*([^\\r\\n]{1,254}(?=\\s|$)|[^\\r\\n]{254})"); // thanks HBot for the regex <3
|
||||||
|
public static final Pattern COLOR_CODE_PATTERN = Pattern.compile("(&[a-f0-9rlonmk])");
|
||||||
|
|
||||||
private final Bot bot;
|
private final Bot bot;
|
||||||
|
|
||||||
private final List<ChatParser> chatParsers;
|
private final List<ChatParser> chatParsers;
|
||||||
|
@ -256,15 +261,31 @@ public class ChatPlugin extends Bot.Listener {
|
||||||
public void clearQueue () { queue.clear(); }
|
public void clearQueue () { queue.clear(); }
|
||||||
|
|
||||||
public void send (String message) {
|
public void send (String message) {
|
||||||
final String[] splitted = message.split("(?<=\\G.{255})|\\n");
|
final Matcher splitMatcher = CHAT_SPLIT_PATTERN.matcher(message);
|
||||||
|
|
||||||
|
String lastColor = "";
|
||||||
|
|
||||||
|
boolean isFirst = true;
|
||||||
|
|
||||||
|
// kinda broken but whatever
|
||||||
|
while (splitMatcher.find()) {
|
||||||
|
final String eachMessage = splitMatcher.group(1);
|
||||||
|
|
||||||
for (String subMessage : splitted) {
|
|
||||||
if (
|
if (
|
||||||
subMessage.trim().equals("") ||
|
eachMessage.trim().isEmpty() ||
|
||||||
IllegalCharactersUtilities.containsIllegalCharacters(subMessage)
|
IllegalCharactersUtilities.containsIllegalCharacters(eachMessage)
|
||||||
) continue;
|
) continue;
|
||||||
|
|
||||||
queue.add(subMessage);
|
if (!isFirst) {
|
||||||
|
final Matcher colorCodeMatcher = COLOR_CODE_PATTERN.matcher(message);
|
||||||
|
while (colorCodeMatcher.find()) lastColor = colorCodeMatcher.group();
|
||||||
|
}
|
||||||
|
|
||||||
|
queue.add(
|
||||||
|
lastColor + eachMessage // the regex has 254 (comes from 256 - 2 (color code length)) so we can do this here
|
||||||
|
);
|
||||||
|
|
||||||
|
isFirst = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -103,13 +103,13 @@ public class CommandHandlerPlugin {
|
||||||
// TODO: improve these minimum args and maximum args stuff, the current one really sucks.,.,
|
// TODO: improve these minimum args and maximum args stuff, the current one really sucks.,.,
|
||||||
final int shortestUsageIndex = getShortestUsageIndex(command.usages());
|
final int shortestUsageIndex = getShortestUsageIndex(command.usages());
|
||||||
final int longestUsageIndex = getLongestUsageIndex(command.usages());
|
final int longestUsageIndex = getLongestUsageIndex(command.usages());
|
||||||
final String shortestUsage = command.usages()[shortestUsageIndex];
|
final String shortestUsage = shortestUsageIndex == 0 && command.usages().length == 0 ? "" : command.usages()[shortestUsageIndex];
|
||||||
final String longestUsage = command.usages()[longestUsageIndex];
|
final String longestUsage = longestUsageIndex == 0 && command.usages().length == 0 ? "" : command.usages()[longestUsageIndex];
|
||||||
|
|
||||||
final int minimumArgs = getMinimumArgs(shortestUsage, inGame, command.trustLevel());
|
final int minimumArgs = getMinimumArgs(shortestUsage, inGame, command.trustLevel());
|
||||||
final int maximumArgs = getMaximumArgs(longestUsage, inGame, command.trustLevel());
|
final int maximumArgs = getMaximumArgs(longestUsage, inGame, command.trustLevel());
|
||||||
if (fullArgs.length < minimumArgs) return Component.text("Excepted minimum of " + minimumArgs + " argument(s), got " + fullArgs.length).color(NamedTextColor.RED);
|
if (fullArgs.length < minimumArgs) return Component.text("Excepted minimum of " + minimumArgs + " argument(s), got " + fullArgs.length).color(NamedTextColor.RED);
|
||||||
if (fullArgs.length > maximumArgs && !longestUsage.contains("{")) return Component.text("Too much arguments, expected " + maximumArgs + " max").color(NamedTextColor.RED);
|
if (fullArgs.length > maximumArgs && !longestUsage.contains("{")) return Component.text("Too many arguments, expected " + maximumArgs + " max").color(NamedTextColor.RED);
|
||||||
|
|
||||||
if (trustLevel != TrustLevel.PUBLIC && splitInput.length < 2 && inGame) return Component.text("Please provide a hash").color(NamedTextColor.RED);
|
if (trustLevel != TrustLevel.PUBLIC && splitInput.length < 2 && inGame) return Component.text("Please provide a hash").color(NamedTextColor.RED);
|
||||||
|
|
||||||
|
@ -220,6 +220,7 @@ public class CommandHandlerPlugin {
|
||||||
minLength = args.length;
|
minLength = args.length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return shortestIndex;
|
return shortestIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue