use of net.robinfriedli.aiode.command.argument.CommandArgument in project aiode by robinfriedli.
the class HelpCommand method showCommandHelp.
private void showCommandHelp() {
getManager().getCommand(getContext(), getCommandInput()).ifPresentOrElse(command -> {
String prefix;
GuildSpecification specification = getContext().getGuildContext().getSpecification();
String setPrefix = specification.getPrefix();
String botName = specification.getBotName();
if (!Strings.isNullOrEmpty(setPrefix)) {
prefix = setPrefix;
} else if (!Strings.isNullOrEmpty(botName)) {
prefix = botName + " ";
} else {
prefix = PrefixProperty.DEFAULT_FALLBACK + " ";
}
char argumentPrefix = ArgumentPrefixProperty.getForCurrentContext().getArgumentPrefix();
EmbedBuilder embedBuilder = new EmbedBuilder();
embedBuilder.setTitle("Command " + command.getIdentifier() + ":");
String descriptionFormat = command.getDescription();
String descriptionText = String.format(descriptionFormat, prefix, argumentPrefix);
embedBuilder.setDescription(descriptionText);
Guild guild = getContext().getGuild();
Optional<AccessConfiguration> accessConfiguration = Aiode.get().getSecurityManager().getAccessConfiguration(command.getPermissionTarget(), guild);
if (accessConfiguration.isPresent()) {
String title = "Available to roles: ";
String text;
List<Role> roles = accessConfiguration.get().getRoles(guild);
if (!roles.isEmpty()) {
text = StringList.create(roles, Role::getName).toSeparatedString(", ");
} else {
text = "Guild owner and administrator roles only";
}
embedBuilder.addField(title, text, false);
}
ArgumentController argumentController = command.getArgumentController();
if (argumentController.hasArguments()) {
embedBuilder.addField("__Arguments__", "Keywords that alter the command behavior or define a search scope.", false);
argumentController.getArguments().values().stream().sorted(Comparator.comparing(CommandArgument::getIdentifier)).forEach(argument -> embedBuilder.addField(argumentPrefix + argument.getIdentifier(), String.format(argument.getDescription(), prefix, argumentPrefix), false));
}
List<XmlElement> examples = command.getCommandContribution().query(tagName("example")).collect();
if (!examples.isEmpty()) {
embedBuilder.addField("__Examples__", "Practical usage examples for this command.", false);
for (XmlElement example : examples) {
String exampleText = String.format(example.getTextContent(), prefix, argumentPrefix);
String titleText = String.format(example.getAttribute("title").getValue(), prefix, argumentPrefix);
embedBuilder.addField(titleText, exampleText, false);
}
}
sendMessage(embedBuilder);
}, () -> {
throw new InvalidCommandException(String.format("No command found for '%s'", getCommandInput()));
});
}
use of net.robinfriedli.aiode.command.argument.CommandArgument in project aiode by robinfriedli.
the class PermissionCommand method getSelectedTargets.
private Set<? extends PermissionTarget> getSelectedTargets() {
Set<? extends PermissionTarget> selectedRootTargets = getSelectedRootTargets();
if (!argumentSet("argument")) {
return selectedRootTargets;
}
String argumentValue;
if (argumentSet("all")) {
argumentValue = getArgumentValueOrElse("argument", getCommandInput());
} else {
argumentValue = getArgumentValueWithTypeOrElse("argument", String.class, null);
}
if (argumentValue == null) {
return getAllArguments(selectedRootTargets);
}
List<String> argumentIdentifiers = COMMA_SPLITTER.splitToList(argumentValue);
if (argumentIdentifiers.isEmpty()) {
return getAllArguments(selectedRootTargets);
}
Set<CommandArgument> selectedArguments = Sets.newHashSet();
for (String argumentIdentifier : argumentIdentifiers) {
for (PermissionTarget selectedRootTarget : selectedRootTargets) {
if (selectedRootTarget instanceof CommandContribution) {
CommandContribution commandContribution = (CommandContribution) selectedRootTarget;
CommandArgument argument = commandContribution.getArgument(argumentIdentifier);
if (argument != null) {
selectedArguments.add(argument);
} else {
throw new InvalidCommandException(String.format("No such argument '%s' on command '%s'.", argumentIdentifier, commandContribution.getIdentifier()));
}
} else {
throw new InvalidCommandException(String.format("Cannot find argument '%s' on permission target '%s' as it is not a command.", argumentIdentifier, selectedRootTarget.getFullPermissionTargetIdentifier()));
}
}
}
return selectedArguments;
}
Aggregations