Skip to content

Commit

Permalink
Implemeht slash method in all new mod commands
Browse files Browse the repository at this point in the history
  • Loading branch information
duncte123 committed Sep 2, 2024
1 parent 55bb496 commit ef36eb5
Show file tree
Hide file tree
Showing 22 changed files with 367 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,14 @@

package me.duncte123.skybot.commands.guild.mod;

import me.duncte123.skybot.Variables;
import me.duncte123.skybot.database.AbstractDatabase;
import me.duncte123.skybot.entities.jda.DunctebotGuild;
import me.duncte123.skybot.objects.command.CommandContext;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import net.dv8tion.jda.api.utils.MiscUtil;
import org.jetbrains.annotations.NotNull;

Expand All @@ -33,6 +39,49 @@ public AutoBanBypassCommand() {
this.usage = "<user id>";
}

@Override
protected void configureSlashSupport(@NotNull SlashCommandData baseData) {
baseData.addOptions(
new OptionData(
OptionType.USER,
"user_id",
"The id of the user that you want to create the bypass for.",
true
)
);
}

@Override
public void handleEvent(@NotNull SlashCommandInteractionEvent event, @NotNull DunctebotGuild guild, @NotNull Variables variables) {
final var checkId = event.getOption("user_id").getAsLong();

final var database = variables.getDatabase();
final var guildId = event.getGuild().getIdLong();

event.deferReply().queue();

database.getBanBypass(guildId, checkId).thenAccept((byPass) -> {
if (byPass == null) {
database.createBanBypass(guildId, checkId);
event.getHook()
.editOriginal("Single use bypass created, please note that this bypass will expire after a week if unused." +
"\nPlease keep in mind that this has not unbanned any user, meaning that you will have to unban the user yourself if they are banned")
.queue();
return;
}

event.getHook()
.editOriginal("A bypass already exists for this user")
.queue();
}).exceptionally((thr) -> {
event.getHook()
.editOriginal("Something went wrong: " + thr.getMessage())
.queue();

return null;
});
}

@Override
public void execute(@NotNull CommandContext ctx) {
final long checkId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,23 @@

package me.duncte123.skybot.commands.guild.mod;

import me.duncte123.skybot.Variables;
import me.duncte123.skybot.entities.jda.DunctebotGuild;
import me.duncte123.skybot.objects.command.CommandContext;
import me.duncte123.skybot.objects.command.Flag;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import org.jetbrains.annotations.NotNull;

import javax.annotation.Nonnull;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.TimeUnit;

import static me.duncte123.botcommons.messaging.MessageUtils.sendMsg;
Expand Down Expand Up @@ -60,6 +69,59 @@ public BanCommand() {
};
}

@Override
protected void configureSlashSupport(@NotNull SlashCommandData baseData) {
baseData.addOptions(
new OptionData(
OptionType.USER,
"user",
"The user that you want to ban.",
true
),
new OptionData(
OptionType.STRING,
"reason",
"The reason for this ban",
false
),
new OptionData(
OptionType.BOOLEAN,
"nodel",
"Prevents the deletion of any messages",
false
)
);
}

@Override
public void handleEvent(@NotNull SlashCommandInteractionEvent event, @NotNull DunctebotGuild guild, @NotNull Variables variables) {
final var toBanMember = event.getOption("user").getAsMember();
final var moderator = event.getMember();

if (!canInteract(moderator, toBanMember, "ban", event.getChannel())) {
return;
}

final var reason = Optional.ofNullable(event.getOption("reason"))
.map(OptionMapping::getAsString)
.orElse("No reason given");
final var nodel = Optional.ofNullable(event.getOption("nodel"))
.map(OptionMapping::getAsBoolean)
.orElse(false);

final int delDays = nodel ? 0 : 1;
final var modUser = moderator.getUser();

guild.ban(toBanMember, delDays, TimeUnit.DAYS)
.reason(String.format("%#s: %s", modUser, reason))
.queue(
(m) -> {
modLog(modUser, toBanMember.getUser(), "banned", reason, null, guild);
event.reply("User has been banned").queue();
}
);
}

@Override
public void execute(@Nonnull CommandContext ctx) {
final List<String> args = ctx.getArgs();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,20 @@
import gnu.trove.map.hash.TLongObjectHashMap;
import io.sentry.Sentry;
import me.duncte123.botcommons.messaging.MessageConfig;
import me.duncte123.skybot.Variables;
import me.duncte123.skybot.entities.jda.DunctebotGuild;
import me.duncte123.skybot.objects.command.CommandContext;
import me.duncte123.skybot.objects.command.Flag;
import me.duncte123.skybot.utils.AirUtils;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
import net.dv8tion.jda.api.requests.ErrorResponse;
import net.dv8tion.jda.api.requests.Request;
import net.dv8tion.jda.api.requests.RestFuture;
import org.jetbrains.annotations.NotNull;

import javax.annotation.Nonnull;
import java.lang.reflect.Field;
Expand Down Expand Up @@ -80,6 +84,11 @@ public CleanupCommand() {
};
}

@Override
public void handleEvent(@NotNull SlashCommandInteractionEvent event, @NotNull DunctebotGuild guild, @NotNull Variables variables) {
event.reply("This command does not yet support slash commands").setEphemeral(true).queue();
}

@Override
public void execute(@Nonnull CommandContext ctx) {
final long channelId = ctx.getChannel().getIdLong();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,18 @@
package me.duncte123.skybot.commands.guild.mod;

import io.sentry.Sentry;
import me.duncte123.skybot.Variables;
import me.duncte123.skybot.entities.jda.DunctebotGuild;
import me.duncte123.skybot.objects.command.CommandContext;
import me.duncte123.skybot.objects.command.Flag;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.entities.UserSnowflake;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
import net.dv8tion.jda.api.exceptions.HierarchyException;
import net.dv8tion.jda.internal.requests.RestActionImpl;
import org.jetbrains.annotations.NotNull;

import javax.annotation.Nonnull;
import java.util.ArrayList;
Expand Down Expand Up @@ -56,6 +60,11 @@ public HackbanCommand() {
};
}

@Override
public void handleEvent(@NotNull SlashCommandInteractionEvent event, @NotNull DunctebotGuild guild, @NotNull Variables variables) {
event.reply("This command does not yet support slash commands").setEphemeral(true).queue();
}

@Override
public void execute(@Nonnull CommandContext ctx) {
final Map<String, List<String>> parsedFlags = ctx.getParsedFlags(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,24 @@
package me.duncte123.skybot.commands.guild.mod;

import me.duncte123.botcommons.messaging.MessageUtils;
import me.duncte123.skybot.Variables;
import me.duncte123.skybot.entities.jda.DunctebotGuild;
import me.duncte123.skybot.objects.command.CommandContext;
import me.duncte123.skybot.objects.command.Flag;
import me.duncte123.skybot.utils.ModerationUtils;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import net.dv8tion.jda.api.requests.restaction.AuditableRestAction;
import org.jetbrains.annotations.NotNull;

import javax.annotation.Nonnull;
import java.util.List;
import java.util.Optional;

import static me.duncte123.botcommons.messaging.MessageUtils.sendMsg;
import static me.duncte123.skybot.utils.ModerationUtils.canInteract;
Expand Down Expand Up @@ -55,6 +64,47 @@ public KickCommand() {
};
}

@Override
protected void configureSlashSupport(@NotNull SlashCommandData baseData) {
baseData.addOptions(
new OptionData(
OptionType.USER,
"user",
"The user to kick.",
true
),
new OptionData(
OptionType.STRING,
"reason",
"Reason for kicking",
false
)
);
}

@Override
public void handleEvent(@NotNull SlashCommandInteractionEvent event, @NotNull DunctebotGuild guild, @NotNull Variables variables) {
final var toKickMember = event.getOption("user").getAsMember();
final var moderator = event.getMember();

if (!canInteract(moderator, toKickMember, "kick", event.getChannel())) {
return;
}

final var reason = Optional.ofNullable(event.getOption("reason"))
.map(OptionMapping::getAsString)
.orElse("No reason given");

guild.kick(toKickMember)
.reason(String.format("%#s: %s", moderator, reason))
.queue(
(ignored) -> {
ModerationUtils.modLog(moderator.getUser(), toKickMember.getUser(), "kicked", reason, null, guild);
event.reply("User has been kicked").queue();
}
);
}

@Override
public void execute(@Nonnull CommandContext ctx) {
final List<Member> mentioned = ctx.getMentionedArg(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,5 @@ protected void configureSlashSupport(@NotNull SlashCommandData baseData) {
}

@Override
public void handleEvent(@NotNull SlashCommandInteractionEvent event, @NotNull DunctebotGuild guild, @NotNull Variables variables) {
event.reply("soontm").queue();
}
public abstract void handleEvent(@NotNull SlashCommandInteractionEvent event, @NotNull DunctebotGuild guild, @NotNull Variables variables);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,25 @@
package me.duncte123.skybot.commands.guild.mod;

import com.dunctebot.models.settings.GuildSetting;
import me.duncte123.skybot.Variables;
import me.duncte123.skybot.entities.jda.DunctebotGuild;
import me.duncte123.skybot.objects.command.CommandContext;
import me.duncte123.skybot.objects.command.Flag;
import me.duncte123.skybot.utils.ModerationUtils;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import org.jetbrains.annotations.NotNull;

import javax.annotation.Nonnull;
import java.util.List;
import java.util.Optional;

import static me.duncte123.botcommons.messaging.MessageUtils.sendMsg;
import static me.duncte123.botcommons.messaging.MessageUtils.sendSuccess;
Expand Down Expand Up @@ -56,6 +66,62 @@ public MuteCommand() {
};
}

@Override
protected void configureSlashSupport(@NotNull SlashCommandData baseData) {
baseData.addOptions(
new OptionData(
OptionType.USER,
"user",
"The user to mute.",
true
),
new OptionData(
OptionType.STRING,
"reason",
"Reason for muting",
false
)
);
}

@Override
public void handleEvent(@NotNull SlashCommandInteractionEvent event, @NotNull DunctebotGuild guild, @NotNull Variables variables) {
final GuildSetting settings = guild.getSettings();

if (settings.getMuteRoleId() <= 0) {
event.reply("No mute/spamrole is currently set. Use `/settings muteRole set:@role` to set one")
.setEphemeral(true)
.queue();
return;
}

final Member mod = event.getMember();
final Member self = guild.getSelfMember();
final Member toMute = event.getOption("user").getAsMember();
final Role role = guild.getRoleById(settings.getMuteRoleId());

if (canNotProceed(event, mod, toMute, role, self)) {
return;
}

event.deferReply().queue();

final var reason = Optional.ofNullable(event.getOption("reason"))
.map(OptionMapping::getAsString)
.orElse("No reason given");

final User user = event.getUser();

guild.addRoleToMember(toMute, role)
.reason("Muted by " + String.format("%#s: %s", user, reason)).queue(success -> {
ModerationUtils.modLog(user, toMute.getUser(), "muted", null, null, guild);
event.getHook()
.editOriginal("User has been muted")
.queue();
}
);
}

@Override
public void execute(@Nonnull CommandContext ctx) {
final List<String> args = ctx.getArgs();
Expand Down
Loading

0 comments on commit ef36eb5

Please sign in to comment.