Search in sources :

Example 11 with Context

use of me.shadorc.shadbot.core.command.Context in project Shadbot by Shadorc.

the class KickCmd method execute.

@Override
public void execute(Context context) throws MissingArgumentException, IllegalCmdArgumentException {
    if (!context.hasArg()) {
        throw new MissingArgumentException();
    }
    List<IUser> mentionedUsers = context.getMessage().getMentions();
    if (mentionedUsers.isEmpty()) {
        throw new MissingArgumentException();
    }
    if (!PermissionUtils.hasPermissions(context.getChannel(), context.getAuthor(), Permissions.KICK)) {
        throw new IllegalArgumentException("You don't have permission to kick.");
    }
    if (!BotUtils.hasPermissions(context.getChannel(), Permissions.KICK)) {
        BotUtils.sendMessage(TextUtils.missingPerm(Permissions.KICK), context.getChannel());
        return;
    }
    if (mentionedUsers.contains(context.getAuthor())) {
        throw new IllegalCmdArgumentException("You cannot kick yourself.");
    }
    for (IUser mentionedUser : mentionedUsers) {
        if (!PermissionUtils.isUserHigher(context.getGuild(), context.getAuthor(), mentionedUser)) {
            throw new IllegalCmdArgumentException(String.format("You can't kick **%s** because he has the same or a higher role " + "position than you in the role hierarchy.", mentionedUser.getName()));
        }
        if (!BotUtils.canInteract(context.getGuild(), mentionedUser)) {
            throw new IllegalCmdArgumentException(String.format("I cannot kick **%s** because he has the same or a higher role " + "position than me in the role hierarchy.", mentionedUser.getName()));
        }
    }
    StringBuilder reason = new StringBuilder();
    reason.append(StringUtils.remove(context.getArg(), FormatUtils.format(mentionedUsers, user -> user.mention(false), " ")).trim());
    if (reason.length() > Ban.MAX_REASON_LENGTH) {
        throw new IllegalCmdArgumentException(String.format("Reason cannot exceed **%d characters**.", Ban.MAX_REASON_LENGTH));
    }
    if (reason.length() == 0) {
        reason.append("Reason not specified.");
    }
    for (IUser user : mentionedUsers) {
        if (!user.isBot()) {
            BotUtils.sendMessage(String.format(Emoji.INFO + " You were kicked from the server **%s** by **%s**. Reason: `%s`", context.getGuild().getName(), context.getAuthorName(), reason), user.getOrCreatePMChannel());
        }
        RequestBuffer.request(() -> {
            context.getGuild().kickUser(user, reason.toString());
        }).get();
    }
    BotUtils.sendMessage(String.format(Emoji.INFO + " (Requested by **%s**) **%s** got kicked. Reason: `%s`", context.getAuthorName(), FormatUtils.format(mentionedUsers, IUser::getName, ", "), reason), context.getChannel());
}
Also used : IllegalCmdArgumentException(me.shadorc.shadbot.exception.IllegalCmdArgumentException) Ban(sx.blah.discord.util.Ban) RequestBuffer(sx.blah.discord.util.RequestBuffer) HelpBuilder(me.shadorc.shadbot.utils.embed.HelpBuilder) CommandCategory(me.shadorc.shadbot.core.command.CommandCategory) PermissionUtils(sx.blah.discord.util.PermissionUtils) EmbedObject(sx.blah.discord.api.internal.json.objects.EmbedObject) FormatUtils(me.shadorc.shadbot.utils.FormatUtils) BotUtils(me.shadorc.shadbot.utils.BotUtils) MissingArgumentException(me.shadorc.shadbot.exception.MissingArgumentException) IllegalCmdArgumentException(me.shadorc.shadbot.exception.IllegalCmdArgumentException) StringUtils(me.shadorc.shadbot.utils.StringUtils) CommandPermission(me.shadorc.shadbot.core.command.CommandPermission) Command(me.shadorc.shadbot.core.command.annotation.Command) List(java.util.List) IUser(sx.blah.discord.handle.obj.IUser) Context(me.shadorc.shadbot.core.command.Context) TextUtils(me.shadorc.shadbot.utils.TextUtils) AbstractCommand(me.shadorc.shadbot.core.command.AbstractCommand) Emoji(me.shadorc.shadbot.utils.object.Emoji) Permissions(sx.blah.discord.handle.obj.Permissions) MissingArgumentException(me.shadorc.shadbot.exception.MissingArgumentException) IUser(sx.blah.discord.handle.obj.IUser)

Example 12 with Context

use of me.shadorc.shadbot.core.command.Context in project Shadbot by Shadorc.

the class SoftBanCmd method execute.

@Override
public void execute(Context context) throws MissingArgumentException, IllegalCmdArgumentException {
    if (!context.hasArg()) {
        throw new MissingArgumentException();
    }
    List<IUser> mentionedUsers = context.getMessage().getMentions();
    if (mentionedUsers.isEmpty()) {
        throw new MissingArgumentException();
    }
    if (!PermissionUtils.hasPermissions(context.getChannel(), context.getAuthor(), Permissions.BAN)) {
        throw new IllegalArgumentException("You don't have permission to ban.");
    }
    if (!BotUtils.hasPermissions(context.getChannel(), Permissions.BAN)) {
        BotUtils.sendMessage(TextUtils.missingPerm(Permissions.BAN), context.getChannel());
        return;
    }
    if (mentionedUsers.contains(context.getAuthor())) {
        throw new IllegalCmdArgumentException("You cannot softban yourself.");
    }
    for (IUser mentionedUser : mentionedUsers) {
        if (!PermissionUtils.isUserHigher(context.getGuild(), context.getAuthor(), mentionedUser)) {
            throw new IllegalCmdArgumentException(String.format("You can't softban **%s** because he has the same or a higher role " + "position than you in the role hierarchy.", mentionedUser.getName()));
        }
        if (!BotUtils.canInteract(context.getGuild(), mentionedUser)) {
            throw new IllegalCmdArgumentException(String.format("I cannot softban **%s** because he has the same or a higher role " + "position than me in the role hierarchy.", mentionedUser.getName()));
        }
    }
    StringBuilder reason = new StringBuilder();
    reason.append(StringUtils.remove(context.getArg(), FormatUtils.format(mentionedUsers, user -> user.mention(false), " ")).trim());
    if (reason.length() > Ban.MAX_REASON_LENGTH) {
        throw new IllegalCmdArgumentException(String.format("Reason cannot exceed **%d characters**.", Ban.MAX_REASON_LENGTH));
    }
    if (reason.length() == 0) {
        reason.append("Reason not specified.");
    }
    for (IUser user : mentionedUsers) {
        if (!user.isBot()) {
            BotUtils.sendMessage(String.format(Emoji.INFO + " You were softbanned from the server **%s** by **%s**. Reason: `%s`", context.getGuild().getName(), context.getAuthorName(), reason), user.getOrCreatePMChannel());
        }
        RequestBuffer.request(() -> {
            context.getGuild().banUser(user, reason.toString(), 7);
        });
        RequestBuffer.request(() -> {
            context.getGuild().pardonUser(user.getLongID());
        });
    }
    BotUtils.sendMessage(String.format(Emoji.INFO + " (Requested by **%s**) **%s** got softbanned. Reason: `%s`", context.getAuthorName(), FormatUtils.format(mentionedUsers, IUser::getName, ", "), reason), context.getChannel());
}
Also used : IllegalCmdArgumentException(me.shadorc.shadbot.exception.IllegalCmdArgumentException) Ban(sx.blah.discord.util.Ban) RequestBuffer(sx.blah.discord.util.RequestBuffer) HelpBuilder(me.shadorc.shadbot.utils.embed.HelpBuilder) CommandCategory(me.shadorc.shadbot.core.command.CommandCategory) PermissionUtils(sx.blah.discord.util.PermissionUtils) EmbedObject(sx.blah.discord.api.internal.json.objects.EmbedObject) FormatUtils(me.shadorc.shadbot.utils.FormatUtils) BotUtils(me.shadorc.shadbot.utils.BotUtils) MissingArgumentException(me.shadorc.shadbot.exception.MissingArgumentException) IllegalCmdArgumentException(me.shadorc.shadbot.exception.IllegalCmdArgumentException) StringUtils(me.shadorc.shadbot.utils.StringUtils) CommandPermission(me.shadorc.shadbot.core.command.CommandPermission) Command(me.shadorc.shadbot.core.command.annotation.Command) List(java.util.List) IUser(sx.blah.discord.handle.obj.IUser) Context(me.shadorc.shadbot.core.command.Context) TextUtils(me.shadorc.shadbot.utils.TextUtils) AbstractCommand(me.shadorc.shadbot.core.command.AbstractCommand) Emoji(me.shadorc.shadbot.utils.object.Emoji) Permissions(sx.blah.discord.handle.obj.Permissions) MissingArgumentException(me.shadorc.shadbot.exception.MissingArgumentException) IUser(sx.blah.discord.handle.obj.IUser)

Aggregations

Context (me.shadorc.shadbot.core.command.Context)12 MissingArgumentException (me.shadorc.shadbot.exception.MissingArgumentException)11 List (java.util.List)9 AbstractCommand (me.shadorc.shadbot.core.command.AbstractCommand)9 CommandCategory (me.shadorc.shadbot.core.command.CommandCategory)9 Command (me.shadorc.shadbot.core.command.annotation.Command)9 IllegalCmdArgumentException (me.shadorc.shadbot.exception.IllegalCmdArgumentException)9 FormatUtils (me.shadorc.shadbot.utils.FormatUtils)9 StringUtils (me.shadorc.shadbot.utils.StringUtils)9 HelpBuilder (me.shadorc.shadbot.utils.embed.HelpBuilder)9 EmbedObject (sx.blah.discord.api.internal.json.objects.EmbedObject)9 BotUtils (me.shadorc.shadbot.utils.BotUtils)8 EmbedUtils (me.shadorc.shadbot.utils.embed.EmbedUtils)8 EmbedBuilder (sx.blah.discord.util.EmbedBuilder)8 Utils (me.shadorc.shadbot.utils.Utils)7 Emoji (me.shadorc.shadbot.utils.object.Emoji)7 RateLimited (me.shadorc.shadbot.core.command.annotation.RateLimited)6 Collectors (java.util.stream.Collectors)5 TextUtils (me.shadorc.shadbot.utils.TextUtils)5 LoadingMessage (me.shadorc.shadbot.utils.object.LoadingMessage)5