fix minecraft player lookup error handling
This commit is contained in:
parent
b8ebc1de24
commit
5c78ec907f
@ -1,166 +0,0 @@
|
|||||||
package cc.fascinated.bat.common;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import lombok.experimental.UtilityClass;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Fascinated (fascinated7)
|
|
||||||
*/
|
|
||||||
@UtilityClass
|
|
||||||
public final class TimeUtils {
|
|
||||||
/**
|
|
||||||
* Format a time in millis to a readable time format.
|
|
||||||
*
|
|
||||||
* @param millis the millis to format
|
|
||||||
* @return the formatted time
|
|
||||||
*/
|
|
||||||
public static String format(long millis) {
|
|
||||||
return format(millis, BatTimeFormat.FIT);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Format a time in millis to a readable time format.
|
|
||||||
*
|
|
||||||
* @param millis the millis to format
|
|
||||||
* @param timeUnit the time unit to format the millis to
|
|
||||||
* @return the formatted time
|
|
||||||
*/
|
|
||||||
public static String format(long millis, BatTimeFormat timeUnit) {
|
|
||||||
return format(millis, timeUnit, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Format a time in millis to a readable time format.
|
|
||||||
*
|
|
||||||
* @param millis the millis to format
|
|
||||||
* @param timeUnit the time unit to format the millis to
|
|
||||||
* @param compact whether to use a compact display
|
|
||||||
* @return the formatted time
|
|
||||||
*/
|
|
||||||
public static String format(long millis, BatTimeFormat timeUnit, boolean compact) {
|
|
||||||
return format(millis, timeUnit, true, compact);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Format a time in millis to a readable time format.
|
|
||||||
*
|
|
||||||
* @param millis the millis to format
|
|
||||||
* @param timeUnit the time unit to format the millis to
|
|
||||||
* @param decimals whether to include decimals
|
|
||||||
* @param compact whether to use a compact display
|
|
||||||
* @return the formatted time
|
|
||||||
*/
|
|
||||||
public static String format(long millis, BatTimeFormat timeUnit, boolean decimals, boolean compact) {
|
|
||||||
if (millis == -1L) { // Format permanent
|
|
||||||
return "Perm" + (compact ? "" : "anent");
|
|
||||||
}
|
|
||||||
// Format the time to the best fitting time unit
|
|
||||||
if (timeUnit == BatTimeFormat.FIT) {
|
|
||||||
for (BatTimeFormat otherTimeUnit : BatTimeFormat.VALUES) {
|
|
||||||
if (otherTimeUnit != BatTimeFormat.FIT && millis >= otherTimeUnit.getMillis()) {
|
|
||||||
timeUnit = otherTimeUnit;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
double time = MathUtils.format((double) millis / timeUnit.getMillis(), 1); // Format the time
|
|
||||||
if (!decimals) { // Remove decimals
|
|
||||||
time = (int) time;
|
|
||||||
}
|
|
||||||
String formatted = time + (compact ? timeUnit.getSuffix() : " " + timeUnit.getDisplay()); // Append the time unit
|
|
||||||
if (time != 1.0 && !compact) { // Pluralize the time unit
|
|
||||||
formatted += "s";
|
|
||||||
}
|
|
||||||
return formatted;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert the given input into a time in millis.
|
|
||||||
* <p>
|
|
||||||
* E.g: 1d, 1h, 1d1h, etc
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param input the input to parse
|
|
||||||
* @return the time in millis
|
|
||||||
*/
|
|
||||||
public static long fromString(String input) {
|
|
||||||
Matcher matcher = BatTimeFormat.SUFFIX_PATTERN.matcher(input); // Match the given input
|
|
||||||
long millis = 0; // The total millis
|
|
||||||
|
|
||||||
// Match corresponding suffixes and add up the total millis
|
|
||||||
while (matcher.find()) {
|
|
||||||
int amount = Integer.parseInt(matcher.group(1)); // The amount of time to add
|
|
||||||
String suffix = matcher.group(2); // The unit suffix
|
|
||||||
BatTimeFormat timeUnit = BatTimeFormat.fromSuffix(suffix); // The time unit to add
|
|
||||||
if (timeUnit != null) { // Increment the total millis
|
|
||||||
millis += amount * timeUnit.getMillis();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return millis;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a unit of time.
|
|
||||||
*/
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter(AccessLevel.PRIVATE)
|
|
||||||
@ToString
|
|
||||||
public enum BatTimeFormat {
|
|
||||||
FIT,
|
|
||||||
YEARS("Year", "y", TimeUnit.DAYS.toMillis(365L)),
|
|
||||||
MONTHS("Month", "mo", TimeUnit.DAYS.toMillis(30L)),
|
|
||||||
WEEKS("Week", "w", TimeUnit.DAYS.toMillis(7L)),
|
|
||||||
DAYS("Day", "d", TimeUnit.DAYS.toMillis(1L)),
|
|
||||||
HOURS("Hour", "h", TimeUnit.HOURS.toMillis(1L)),
|
|
||||||
MINUTES("Minute", "m", TimeUnit.MINUTES.toMillis(1L)),
|
|
||||||
SECONDS("Second", "s", TimeUnit.SECONDS.toMillis(1L)),
|
|
||||||
MILLISECONDS("Millisecond", "ms", 1L);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Our cached unit values.
|
|
||||||
*/
|
|
||||||
public static final BatTimeFormat[] VALUES = values();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Our cached suffix pattern.
|
|
||||||
*/
|
|
||||||
public static final Pattern SUFFIX_PATTERN = Pattern.compile("(\\d+)(mo|ms|[ywdhms])");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The display of this time unit.
|
|
||||||
*/
|
|
||||||
private String display;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The suffix of this time unit.
|
|
||||||
*/
|
|
||||||
private String suffix;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The amount of millis in this time unit.
|
|
||||||
*/
|
|
||||||
private long millis;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the time unit with the given suffix.
|
|
||||||
*
|
|
||||||
* @param suffix the time unit suffix
|
|
||||||
* @return the time unit, null if not found
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
public static BatTimeFormat fromSuffix(String suffix) {
|
|
||||||
for (BatTimeFormat unit : VALUES) {
|
|
||||||
if (unit != FIT && unit.getSuffix().equals(suffix)) {
|
|
||||||
return unit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -16,6 +16,7 @@ import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
|||||||
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
|
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import xyz.mcutils.McUtilsAPI;
|
import xyz.mcutils.McUtilsAPI;
|
||||||
|
import xyz.mcutils.exception.ErrorResponse;
|
||||||
import xyz.mcutils.models.cache.CachedPlayer;
|
import xyz.mcutils.models.cache.CachedPlayer;
|
||||||
import xyz.mcutils.models.player.Skin;
|
import xyz.mcutils.models.player.Skin;
|
||||||
|
|
||||||
@ -38,9 +39,19 @@ public class LookupPlayerSubCommand extends BatCommand {
|
|||||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, Message commandMessage, String[] arguments, SlashCommandInteraction event) {
|
||||||
OptionMapping playerOption = event.getOption("player");
|
OptionMapping playerOption = event.getOption("player");
|
||||||
assert playerOption != null;
|
assert playerOption != null;
|
||||||
|
|
||||||
String player = playerOption.getAsString();
|
String player = playerOption.getAsString();
|
||||||
CachedPlayer cachedPlayer = McUtilsAPI.getPlayer(player);
|
|
||||||
|
// Check if the player id is valid
|
||||||
|
if (player.length() > 16 || player.contains(" ")) {
|
||||||
|
event.reply("The player id `%s` is invalid".formatted(player)).queue();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fetch the player from the API
|
||||||
|
CachedPlayer cachedPlayer = null;
|
||||||
|
try {
|
||||||
|
cachedPlayer = McUtilsAPI.getPlayer(player);
|
||||||
|
} catch (ErrorResponse ignored) { } // The error response is handled below
|
||||||
if (cachedPlayer == null) {
|
if (cachedPlayer == null) {
|
||||||
event.reply("The player `%s` could not be found".formatted(player)).queue();
|
event.reply("The player `%s` could not be found".formatted(player)).queue();
|
||||||
return;
|
return;
|
||||||
|
4
src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/ScoresSummarySubCommand.java
4
src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/ScoresSummarySubCommand.java
@ -107,8 +107,8 @@ public class ScoresSummarySubCommand extends BatCommand {
|
|||||||
**Scores Summary**
|
**Scores Summary**
|
||||||
Here is a summary of score for %s
|
Here is a summary of score for %s
|
||||||
\s
|
\s
|
||||||
Total Scores: %s
|
Total Scores: `%s`
|
||||||
Total Ranked Scores: %s
|
Total Ranked Scores: `%s`
|
||||||
""".formatted(
|
""".formatted(
|
||||||
user.getDiscordUser().getAsMention(),
|
user.getDiscordUser().getAsMention(),
|
||||||
NumberFormatter.simpleFormat(scores.size()),
|
NumberFormatter.simpleFormat(scores.size()),
|
||||||
|
Loading…
Reference in New Issue
Block a user