feat,fix: add admin trust level and some other fixies
This commit is contained in:
parent
651db6c8ce
commit
36a138becc
13 changed files with 62 additions and 49 deletions
|
@ -1 +1 @@
|
|||
1131
|
||||
1136
|
|
@ -57,7 +57,8 @@ public class Configuration {
|
|||
}
|
||||
|
||||
public static class Keys {
|
||||
public String normalKey;
|
||||
public String trustedKey;
|
||||
public String adminKey;
|
||||
public String ownerKey;
|
||||
}
|
||||
|
||||
|
@ -93,6 +94,7 @@ public class Configuration {
|
|||
public EmbedColors embedColors = new EmbedColors();
|
||||
public String trustedRoleName = "Trusted";
|
||||
public String adminRoleName = "Admin";
|
||||
public String ownerRoleName = "Owner";
|
||||
public String statusMessage = "Oh hi!";
|
||||
public String inviteLink = "https://discord.gg/xdgCkUyaA4";
|
||||
}
|
||||
|
|
|
@ -125,7 +125,6 @@ public class Main {
|
|||
|
||||
// initialize util classes and plugins
|
||||
PersistentDataUtilities.init();
|
||||
ComponentUtilities.init();
|
||||
|
||||
new ConsolePlugin();
|
||||
LoggerPlugin.init();
|
||||
|
|
|
@ -3,5 +3,6 @@ package me.chayapak1.chomens_bot.command;
|
|||
public enum TrustLevel {
|
||||
PUBLIC,
|
||||
TRUSTED,
|
||||
ADMIN,
|
||||
OWNER
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ public class FilterCommand extends Command {
|
|||
"list"
|
||||
},
|
||||
new String[] { "filterplayer", "ban", "blacklist" },
|
||||
TrustLevel.OWNER,
|
||||
TrustLevel.ADMIN,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
|
|
@ -50,6 +50,7 @@ public class HelpCommand extends Command {
|
|||
final List<Component> list = new ArrayList<>();
|
||||
list.addAll(getCommandListByTrustLevel(TrustLevel.PUBLIC));
|
||||
list.addAll(getCommandListByTrustLevel(TrustLevel.TRUSTED));
|
||||
list.addAll(getCommandListByTrustLevel(TrustLevel.ADMIN));
|
||||
list.addAll(getCommandListByTrustLevel(TrustLevel.OWNER));
|
||||
|
||||
return Component.empty()
|
||||
|
@ -60,7 +61,8 @@ public class HelpCommand extends Command {
|
|||
.append(Component.text("(").color(NamedTextColor.DARK_GRAY))
|
||||
.append(Component.text("Public ").color(NamedTextColor.GREEN))
|
||||
.append(Component.text("Trusted ").color(NamedTextColor.RED))
|
||||
.append(Component.text("Owner").color(NamedTextColor.DARK_RED))
|
||||
.append(Component.text("Admin ").color(NamedTextColor.DARK_RED))
|
||||
.append(Component.text("Owner").color(NamedTextColor.LIGHT_PURPLE))
|
||||
.append(Component.text(") - ").color(NamedTextColor.DARK_GRAY))
|
||||
.append(Component.join(JoinConfiguration.separator(Component.space()), list));
|
||||
}
|
||||
|
@ -98,7 +100,8 @@ public class HelpCommand extends Command {
|
|||
return switch (trustLevel) {
|
||||
case PUBLIC -> NamedTextColor.GREEN;
|
||||
case TRUSTED -> NamedTextColor.RED;
|
||||
case OWNER -> NamedTextColor.DARK_RED;
|
||||
case ADMIN -> NamedTextColor.DARK_RED;
|
||||
case OWNER -> NamedTextColor.LIGHT_PURPLE;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ public class IPFilterCommand extends Command {
|
|||
"list"
|
||||
},
|
||||
new String[] { "filterip", "banip", "ipban" },
|
||||
TrustLevel.OWNER,
|
||||
TrustLevel.ADMIN,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
|
|
@ -41,6 +41,8 @@ public class ServerEvalCommand extends Command {
|
|||
final LuaValue output = chunk.call();
|
||||
|
||||
context.sendOutput(Component.text(output.toString()).color(NamedTextColor.GREEN));
|
||||
} catch (CommandException e) {
|
||||
context.sendOutput(e.message.color(NamedTextColor.RED));
|
||||
} catch (Exception e) {
|
||||
context.sendOutput(Component.text(e.toString()).color(NamedTextColor.RED));
|
||||
}
|
||||
|
|
|
@ -30,8 +30,9 @@ public class ValidateCommand extends Command {
|
|||
|
||||
final String hash = fullArgs[0];
|
||||
|
||||
if (bot.hashing.isCorrectHash(hash, context.userInputCommandName, context.sender)) return Component.text("Valid hash").color(NamedTextColor.GREEN);
|
||||
else if (bot.hashing.isCorrectOwnerHash(hash, context.userInputCommandName, context.sender)) return Component.text("Valid OwnerHash").color(NamedTextColor.GREEN);
|
||||
if (bot.hashing.isCorrectHash(hash, context.userInputCommandName, context.sender)) return Component.text("Valid trusted hash").color(NamedTextColor.GREEN);
|
||||
else if (bot.hashing.isCorrectAdminHash(hash, context.userInputCommandName, context.sender)) return Component.text("Valid admin hash").color(NamedTextColor.GREEN);
|
||||
else if (bot.hashing.isCorrectOwnerHash(hash, context.userInputCommandName, context.sender)) return Component.text("Valid owner hash").color(NamedTextColor.GREEN);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ public class WhitelistCommand extends Command {
|
|||
"Manages whitelist",
|
||||
new String[] { "enable", "disable", "add <player>", "remove <index>", "clear", "list" },
|
||||
new String[] {},
|
||||
TrustLevel.OWNER,
|
||||
TrustLevel.ADMIN,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
|
|
@ -125,28 +125,43 @@ public class CommandHandlerPlugin {
|
|||
|
||||
final String trustedRoleName = bot.config.discord.trustedRoleName;
|
||||
final String adminRoleName = bot.config.discord.adminRoleName;
|
||||
final String ownerRoleName = bot.config.discord.ownerRoleName;
|
||||
|
||||
if (
|
||||
command.trustLevel == TrustLevel.TRUSTED &&
|
||||
roles.stream().noneMatch(role -> role.getName().equalsIgnoreCase(trustedRoleName)) &&
|
||||
roles.stream().noneMatch(role -> role.getName().equalsIgnoreCase(adminRoleName))
|
||||
roles.stream().noneMatch(role -> role.getName().equalsIgnoreCase(adminRoleName)) &&
|
||||
roles.stream().noneMatch(role -> role.getName().equalsIgnoreCase(ownerRoleName))
|
||||
) return Component.text("You're not in the trusted role!").color(NamedTextColor.RED);
|
||||
|
||||
if (
|
||||
command.trustLevel == TrustLevel.OWNER &&
|
||||
roles.stream().noneMatch(role -> role.getName().equalsIgnoreCase(adminRoleName))
|
||||
command.trustLevel == TrustLevel.ADMIN &&
|
||||
roles.stream().noneMatch(role -> role.getName().equalsIgnoreCase(adminRoleName)) &&
|
||||
roles.stream().noneMatch(role -> role.getName().equalsIgnoreCase(ownerRoleName))
|
||||
) return Component.text("You're not in the admin role!").color(NamedTextColor.RED);
|
||||
|
||||
if (
|
||||
command.trustLevel == TrustLevel.OWNER &&
|
||||
roles.stream().noneMatch(role -> role.getName().equalsIgnoreCase(ownerRoleName))
|
||||
) return Component.text("You're not in the owner role!").color(NamedTextColor.RED);
|
||||
} else {
|
||||
if (
|
||||
command.trustLevel == TrustLevel.TRUSTED &&
|
||||
!bot.hashing.isCorrectHash(userHash, splitInput[0], context.sender) &&
|
||||
!bot.hashing.isCorrectAdminHash(userHash, splitInput[0], context.sender) &&
|
||||
!bot.hashing.isCorrectOwnerHash(userHash, splitInput[0], context.sender)
|
||||
) return Component.text("Invalid hash").color(NamedTextColor.RED);
|
||||
|
||||
if (
|
||||
command.trustLevel == TrustLevel.ADMIN &&
|
||||
!bot.hashing.isCorrectAdminHash(userHash, splitInput[0], context.sender) &&
|
||||
!bot.hashing.isCorrectOwnerHash(userHash, splitInput[0], context.sender)
|
||||
) return Component.text("Invalid admin hash").color(NamedTextColor.RED);
|
||||
|
||||
if (
|
||||
command.trustLevel == TrustLevel.OWNER &&
|
||||
!bot.hashing.isCorrectOwnerHash(userHash, splitInput[0], context.sender)
|
||||
) return Component.text("Invalid OwnerHash").color(NamedTextColor.RED);
|
||||
) return Component.text("Invalid owner hash").color(NamedTextColor.RED);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,10 +14,13 @@ public class HashingPlugin {
|
|||
this.bot = bot;
|
||||
}
|
||||
|
||||
public String getHash (String prefix, PlayerEntry sender, boolean sectionSigns) {
|
||||
final long time = System.currentTimeMillis() / 5_000;
|
||||
public String getHash (String prefix, PlayerEntry sender, boolean sectionSigns) { return getGenericHash(bot.config.keys.trustedKey, prefix, sender, sectionSigns); }
|
||||
public String getAdminHash (String prefix, PlayerEntry sender, boolean sectionSigns) { return getGenericHash(bot.config.keys.adminKey, prefix, sender, sectionSigns); }
|
||||
public String getOwnerHash (String prefix, PlayerEntry sender, boolean sectionSigns) { return getGenericHash(bot.config.keys.ownerKey, prefix, sender, sectionSigns); }
|
||||
|
||||
final String key = bot.config.keys.normalKey;
|
||||
// should this be public?
|
||||
public String getGenericHash (String key, String prefix, PlayerEntry sender, boolean sectionSigns) {
|
||||
final long time = System.currentTimeMillis() / 5_000;
|
||||
|
||||
final String hashValue = sender.profile.getIdAsString() + prefix + time + key;
|
||||
|
||||
|
@ -35,40 +38,25 @@ public class HashingPlugin {
|
|||
hash;
|
||||
}
|
||||
|
||||
public String getOwnerHash (String prefix, PlayerEntry sender, boolean sectionSigns) {
|
||||
final long time = System.currentTimeMillis() / 5_000;
|
||||
private boolean checkHash (String hash, String input, String prefix, PlayerEntry sender) {
|
||||
// removes reset section sign
|
||||
if (input.length() == (16 * 2 /* <-- don't forget, we have the section signs */) + 2 && input.endsWith("§r")) input = input.substring(0, input.length() - 2);
|
||||
|
||||
final String key = bot.config.keys.ownerKey;
|
||||
|
||||
final String value = sender.profile.getIdAsString() + prefix + time + key;
|
||||
|
||||
final String hash = Hashing.sha256()
|
||||
.hashString(value, StandardCharsets.UTF_8)
|
||||
.toString()
|
||||
.substring(0, 16);
|
||||
|
||||
return sectionSigns ?
|
||||
String.join("",
|
||||
Arrays.stream(hash.split(""))
|
||||
.map((letter) -> "§" + letter)
|
||||
.toArray(String[]::new)
|
||||
) :
|
||||
hash;
|
||||
return input.equals(hash);
|
||||
}
|
||||
|
||||
public boolean isCorrectHash (String hash, String prefix, PlayerEntry sender) {
|
||||
// removes reset section sign
|
||||
if (hash.length() == (16 * 2 /* <-- don't forget, we have the section signs */) + 2 && hash.endsWith("§r")) hash = hash.substring(0, hash.length() - 2);
|
||||
|
||||
return hash.equals(getHash(prefix, sender, true)) ||
|
||||
hash.equals(getHash(prefix, sender, false));
|
||||
public boolean isCorrectHash (String input, String prefix, PlayerEntry sender) {
|
||||
return checkHash(getHash(prefix, sender, true), input, prefix, sender) ||
|
||||
checkHash(getHash(prefix, sender, false), input, prefix, sender);
|
||||
}
|
||||
|
||||
public boolean isCorrectOwnerHash (String hash, String prefix, PlayerEntry sender) {
|
||||
// removes reset section sign
|
||||
if (hash.length() == (16 * 2 /* <-- don't forget, we have the section signs */) + 2 && hash.endsWith("§r")) hash = hash.substring(0, hash.length() - 2);
|
||||
public boolean isCorrectAdminHash (String input, String prefix, PlayerEntry sender) {
|
||||
return checkHash(getAdminHash(prefix, sender, true), input, prefix, sender) ||
|
||||
checkHash(getAdminHash(prefix, sender, false), input, prefix, sender);
|
||||
}
|
||||
|
||||
return hash.equals(getOwnerHash(prefix, sender, true)) ||
|
||||
hash.equals(getOwnerHash(prefix, sender, false));
|
||||
public boolean isCorrectOwnerHash (String input, String prefix, PlayerEntry sender) {
|
||||
return checkHash(getOwnerHash(prefix, sender, true), input, prefix, sender) ||
|
||||
checkHash(getOwnerHash(prefix, sender, false), input, prefix, sender);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,8 @@ discord:
|
|||
prefix: 'default!'
|
||||
token: 'token here'
|
||||
trustedRoleName: 'Trusted'
|
||||
adminRoleName: 'Admin' # NOTE: admin will be able to access servereval..
|
||||
adminRoleName: 'Admin'
|
||||
ownerRoleName: 'Owner'
|
||||
statusMessage: 'Say Gex'
|
||||
inviteLink: 'https://discord.gg/xdgCkUyaA4'
|
||||
servers:
|
||||
|
@ -75,8 +76,9 @@ trusted:
|
|||
- 'player name'
|
||||
|
||||
keys:
|
||||
normalKey: 'normal hash key here'
|
||||
ownerKey: 'OwnerHash™ key here'
|
||||
trustedKey: 'trusted key here'
|
||||
adminKey: 'admin key here'
|
||||
ownerKey: 'owner key here'
|
||||
|
||||
weatherApiKey: 'key here' # weatherapi.com key
|
||||
|
||||
|
|
Loading…
Reference in a new issue