1
0
mirror of https://github.com/sciwhiz12/Janitor.git synced 2024-11-09 22:51:26 +00:00

Prevent kick command from working on performer and on the bot

This commit is contained in:
Arnold Alejo Nunag 2020-09-30 06:17:12 +08:00
parent e0e0cb448a
commit 48f0aeb5b1
Signed by: sciwhiz12
GPG Key ID: 622CF446534317E1
4 changed files with 53 additions and 24 deletions

View File

@ -3,6 +3,7 @@ package sciwhiz12.janitor.commands;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import sciwhiz12.janitor.JanitorBot;
import sciwhiz12.janitor.msg.Messages;
public abstract class BaseCommand {
private final CommandRegistry registry;
@ -19,5 +20,9 @@ public abstract class BaseCommand {
return registry.getBot();
}
protected Messages messages() {
return getBot().getMessages();
}
public abstract LiteralArgumentBuilder<MessageReceivedEvent> getNode();
}

View File

@ -50,7 +50,7 @@ public class KickCommand extends BaseCommand {
private int runWithReason(CommandContext<MessageReceivedEvent> ctx, @Nullable String reason) throws CommandSyntaxException {
MessageChannel channel = ctx.getSource().getChannel();
if (!ctx.getSource().isFromGuild()) {
getBot().getMessages().GENERAL.guildOnlyCommand(channel).queue();
messages().GENERAL.guildOnlyCommand(channel).queue();
return 1;
}
final Guild guild = ctx.getSource().getGuild();
@ -60,28 +60,26 @@ public class KickCommand extends BaseCommand {
return 1;
}
final Member target = members.get(0);
if (!guild.getSelfMember().hasPermission(KICK_PERMISSION)) {
getBot().getMessages().GENERAL.insufficientPermissions(channel, KICK_PERMISSION).queue();
return 1;
}
if (!guild.getSelfMember().canInteract(target)) {
getBot().getMessages().GENERAL.cannotInteract(channel, target).queue();
return 1;
}
if (!performer.hasPermission(KICK_PERMISSION)) {
getBot().getMessages().MODERATION.performerInsufficientPermissions(channel, performer, KICK_PERMISSION).queue();
return 1;
}
if (!performer.canInteract(target)) {
getBot().getMessages().MODERATION.cannotModerate(channel, performer, target).queue();
return 1;
}
target.getUser().openPrivateChannel()
.flatMap(dm -> getBot().getMessages().MODERATION.kickedDM(dm, performer, target, reason))
.mapToResult()
.flatMap(res -> ModerationHelper.kickUser(target.getGuild(), performer, target, reason)
.flatMap(v -> getBot().getMessages().MODERATION.kickUser(channel, performer, target, reason, res.isSuccess())))
.queue();
if (guild.getSelfMember().equals(target))
messages().GENERAL.cannotActionSelf(channel).queue();
else if (performer.equals(target))
messages().GENERAL.cannotActionPerformer(channel, performer).queue();
else if (!guild.getSelfMember().hasPermission(KICK_PERMISSION))
messages().GENERAL.insufficientPermissions(channel, KICK_PERMISSION).queue();
else if (!guild.getSelfMember().canInteract(target))
messages().GENERAL.cannotInteract(channel, target).queue();
else if (!performer.hasPermission(KICK_PERMISSION))
messages().MODERATION.performerInsufficientPermissions(channel, performer, KICK_PERMISSION).queue();
else if (!performer.canInteract(target))
messages().MODERATION.cannotModerate(channel, performer, target).queue();
else
target.getUser().openPrivateChannel()
.flatMap(dm -> messages().MODERATION.kickedDM(dm, performer, target, reason))
.mapToResult()
.flatMap(res -> ModerationHelper.kickUser(target.getGuild(), performer, target, reason)
.flatMap(
v -> messages().MODERATION.kickUser(channel, performer, target, reason, res.isSuccess())))
.queue();
return 1;
}
}

View File

@ -78,6 +78,27 @@ public class Messages {
.build()
);
}
public RestAction<Message> cannotActionSelf(MessageChannel channel) {
return channel.sendMessage(
new EmbedBuilder()
.setTitle(translate("general.cannot_action_self.title"))
.setDescription(translate("general.cannot_action_self.desc"))
.setColor(General.FAILURE_COLOR)
.build()
);
}
public RestAction<Message> cannotActionPerformer(MessageChannel channel, Member performer) {
return channel.sendMessage(
new EmbedBuilder()
.setTitle(translate("general.cannot_action_performer.title"))
.setDescription(translate("general.cannot_action_performer.desc"))
.addField(translate("general.cannot_action_performer.field.performer"), performer.getUser().getAsMention(), true)
.setColor(General.FAILURE_COLOR)
.build()
);
}
}
public final class Moderation {

View File

@ -1,6 +1,6 @@
{
"general.guild_only_command.title": "Guild only command!",
"general.guild_only_command.desc": "The previous command can only be run in a guild channel.",
"general.guild_only_command.desc": "This command can only be run in a guild channel.",
"general.insufficient_permissions.title": "I have insufficient permissions!",
"general.insufficient_permissions.desc": "I do not have sufficient permissions to carry out this action!\nPlease contact your server admins if you believe this is in error.",
"general.insufficient_permissions.field.permissions": "Required permissions",
@ -9,6 +9,11 @@
"general.cannot_interact.title": "Member is higher than me!",
"general.cannot_interact.desc": "Cannot perform action on the given member, likely due to me being lower in the role hierarchy.",
"general.cannot_interact.field.target": "Target",
"general.cannot_action_self.title": "Cannot act against myself!",
"general.cannot_action_self.desc": "Cannot perform action against myself, as that would be counter-intuitive.",
"general.cannot_action_performer.title": "Performer cannot act against self!",
"general.cannot_action_performer.desc": "You cannot perform this action against yourself.",
"general.cannot_action_performer.field.performer": "Performer/Target",
"moderation.insufficient_permissions.title": "Insufficient permissions.",
"moderation.insufficient_permissions.desc": "The performer of this command has insufficient permissions to use this command.",
"moderation.insufficient_permissions.field.performer": "Performer",