use of fredboat.messaging.internal.Context in project FredBoat by Frederikam.
the class KickCommand method onInvoke.
@Override
public void onInvoke(@Nonnull CommandContext context) {
Guild guild = context.guild;
// Ensure we have a search term
if (!context.hasArguments()) {
HelpCommand.sendFormattedCommandHelp(context);
return;
}
// was there a target provided?
Member target = ArgumentUtil.checkSingleFuzzyMemberSearchResult(context, context.args[0]);
if (target == null)
return;
// are we allowed to do that?
if (!checkKickAuthorization(context, target))
return;
// putting together a reason
String plainReason = DiscordUtil.getReasonForModAction(context);
String auditLogReason = DiscordUtil.formatReasonForAuditLog(plainReason, context.invoker);
// putting together the action
RestAction<Void> modAction = guild.getController().kick(target, auditLogReason);
// on success
String successOutput = context.i18nFormat("kickSuccess", TextUtils.escapeAndDefuse(target.getUser().getName()), target.getUser().getDiscriminator(), target.getUser().getId()) + "\n" + plainReason;
Consumer<Void> onSuccess = aVoid -> {
Metrics.successfulRestActions.labels("kick").inc();
context.replyWithName(successOutput);
};
// on fail
String failOutput = context.i18nFormat("kickFail", target.getUser());
Consumer<Throwable> onFail = t -> {
CentralMessaging.getJdaRestActionFailureHandler(String.format("Failed to kick user %s in guild %s", target.getUser().getId(), guild.getId())).accept(t);
context.replyWithName(failOutput);
};
// issue the mod action
modAction.queue(onSuccess, onFail);
}
use of fredboat.messaging.internal.Context in project FredBoat by Frederikam.
the class ServerInfoCommand method onInvoke.
@Override
public void onInvoke(@Nonnull CommandContext context) {
Guild guild = context.guild;
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
EmbedBuilder eb = CentralMessaging.getColoredEmbedBuilder();
eb.setTitle(context.i18nFormat("serverinfoTitle", guild.getName()), null);
eb.setThumbnail(guild.getIconUrl());
long onlineMembers = guild.getMemberCache().stream().filter(m -> m.getOnlineStatus() != OnlineStatus.OFFLINE).count();
eb.addField(context.i18n("serverinfoOnlineUsers"), String.valueOf(onlineMembers), true);
eb.addField(context.i18n("serverinfoTotalUsers"), String.valueOf(guild.getMembers().size()), true);
eb.addField(context.i18n("serverinfoRoles"), String.valueOf(guild.getRoles().size()), true);
eb.addField(context.i18n("serverinfoText"), String.valueOf(guild.getTextChannels().size()), true);
eb.addField(context.i18n("serverinfoVoice"), String.valueOf(guild.getVoiceChannels().size()), true);
eb.addField(context.i18n("serverinfoCreationDate"), guild.getCreationTime().format(dtf), true);
eb.addField(context.i18n("serverinfoGuildID"), guild.getId(), true);
eb.addField(context.i18n("serverinfoVLv"), guild.getVerificationLevel().name(), true);
eb.addField(context.i18n("serverinfoOwner"), guild.getOwner().getAsMention(), true);
String prefix = TextUtils.shorten(TextUtils.escapeMarkdown(context.getPrefix()), MessageEmbed.VALUE_MAX_LENGTH);
if (prefix.isEmpty()) {
prefix = "No Prefix";
}
eb.addField(context.i18n("prefix"), prefix, true);
context.reply(eb.build());
}
use of fredboat.messaging.internal.Context in project FredBoat by Frederikam.
the class CommandsCommand method onInvoke.
@Override
public void onInvoke(@Nonnull CommandContext context) {
if (!context.hasArguments()) {
Collection<Module> enabledModules = context.getEnabledModules();
if (!PermsUtil.checkPerms(PermissionLevel.BOT_ADMIN, context.invoker)) {
// dont show admin commands/modules for non admins
enabledModules.remove(Module.ADMIN);
}
String prefixAndCommand = "`" + context.getPrefix() + CommandInitializer.COMMANDS_COMM_NAME;
List<String> translatedModuleNames = enabledModules.stream().map(module -> context.i18n(module.translationKey)).collect(Collectors.toList());
context.reply(context.i18nFormat("modulesCommands", prefixAndCommand + " <module>`", prefixAndCommand + " " + ALL + "`") + "\n\n" + context.i18nFormat("musicCommandsPromotion", "`" + context.getPrefix() + CommandInitializer.MUSICHELP_COMM_NAME + "`") + "\n\n" + context.i18n("modulesEnabledInGuild") + " **" + String.join("**, **", translatedModuleNames) + "**" + "\n" + context.i18nFormat("commandsModulesHint", "`" + context.getPrefix() + CommandInitializer.MODULES_COMM_NAME + "`"));
return;
}
List<Module> showHelpFor;
if (context.rawArgs.toLowerCase().contains(ALL.toLowerCase())) {
showHelpFor = new ArrayList<>(Arrays.asList(Module.values()));
if (!PermsUtil.checkPerms(PermissionLevel.BOT_ADMIN, context.invoker)) {
// dont show admin commands/modules for non admins
showHelpFor.remove(Module.ADMIN);
}
} else {
Module module = CommandRegistry.whichModule(context.rawArgs, context);
if (module == null) {
context.reply(context.i18nFormat("moduleCantParse", "`" + context.getPrefix() + context.command.name) + "`");
return;
} else {
showHelpFor = Collections.singletonList(module);
}
}
EmbedBuilder eb = CentralMessaging.getColoredEmbedBuilder();
for (Module module : showHelpFor) {
eb = addModuleCommands(eb, context, CommandRegistry.getCommandModule(module));
}
eb.addField("", context.i18nFormat("commandsMoreHelp", "`" + TextUtils.escapeMarkdown(context.getPrefix()) + CommandInitializer.HELP_COMM_NAME + " <command>`"), false);
context.reply(eb.build());
}
use of fredboat.messaging.internal.Context in project FredBoat by Frederikam.
the class CommandsCommand method addModuleCommands.
private EmbedBuilder addModuleCommands(@Nonnull EmbedBuilder embedBuilder, @Nonnull CommandContext context, @Nonnull CommandRegistry module) {
List<Command> commands = module.getDeduplicatedCommands().stream().filter(command -> {
if (command instanceof ICommandRestricted) {
if (((ICommandRestricted) command).getMinimumPerms().getLevel() >= PermissionLevel.BOT_ADMIN.getLevel()) {
return PermsUtil.checkPerms(PermissionLevel.BOT_ADMIN, context.invoker);
}
}
return true;
}).collect(Collectors.toList());
String prefix = context.getPrefix();
if (commands.size() >= 6) {
// split the commands into three even columns
StringBuilder[] sbs = new StringBuilder[3];
sbs[0] = new StringBuilder();
sbs[1] = new StringBuilder();
sbs[2] = new StringBuilder();
int i = 0;
for (Command c : commands) {
if (c instanceof DestroyCommand) {
// dont want to publicly show this one
continue;
}
sbs[i++ % 3].append(prefix).append(c.name).append("\n");
}
return embedBuilder.addField(context.i18n(module.module.translationKey), sbs[0].toString(), true).addField("", sbs[1].toString(), true).addField("", sbs[2].toString(), true);
} else {
StringBuilder sb = new StringBuilder();
for (Command c : commands) {
sb.append(prefix).append(c.name).append("\n");
}
return embedBuilder.addField(context.i18n(module.module.translationKey), sb.toString(), true).addBlankField(true).addBlankField(true);
}
}
use of fredboat.messaging.internal.Context in project FredBoat by Frederikam.
the class SoftbanCommand method onInvoke.
@Override
public void onInvoke(@Nonnull CommandContext context) {
Guild guild = context.guild;
// Ensure we have a search term
if (!context.hasArguments()) {
HelpCommand.sendFormattedCommandHelp(context);
return;
}
// was there a target provided?
Member target = ArgumentUtil.checkSingleFuzzyMemberSearchResult(context, context.args[0]);
if (target == null)
return;
// are we allowed to do that?
if (!checkAuthorization(context, target))
return;
// putting together a reason
String plainReason = DiscordUtil.getReasonForModAction(context);
String auditLogReason = DiscordUtil.formatReasonForAuditLog(plainReason, context.invoker);
// putting together the action
RestAction<Void> modAction = guild.getController().ban(target, 7, auditLogReason);
// on success
String successOutput = context.i18nFormat("softbanSuccess", TextUtils.escapeAndDefuse(target.getUser().getName()), target.getUser().getDiscriminator(), target.getUser().getId()) + "\n" + plainReason;
Consumer<Void> onSuccess = aVoid -> {
Metrics.successfulRestActions.labels("ban").inc();
guild.getController().unban(target.getUser()).queue(__ -> Metrics.successfulRestActions.labels("unban").inc(), CentralMessaging.getJdaRestActionFailureHandler(String.format("Failed to unban user %s in guild %s", target.getUser().getId(), guild.getId())));
context.replyWithName(successOutput);
};
// on fail
String failOutput = context.i18nFormat("modBanFail", target.getUser());
Consumer<Throwable> onFail = t -> {
CentralMessaging.getJdaRestActionFailureHandler(String.format("Failed to ban user %s in guild %s", target.getUser().getId(), guild.getId())).accept(t);
context.replyWithName(failOutput);
};
// issue the mod action
modAction.queue(onSuccess, onFail);
}
Aggregations