Add mute command
This commit is contained in:
parent
269c44c065
commit
4fc3b58ad1
2 changed files with 75 additions and 0 deletions
48
src/main/java/net/hypr/doki/commands/moderation/Mute.java
Normal file
48
src/main/java/net/hypr/doki/commands/moderation/Mute.java
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
package net.hypr.doki.commands.moderation;
|
||||||
|
|
||||||
|
import com.freya02.botcommands.api.annotations.CommandMarker;
|
||||||
|
import com.freya02.botcommands.api.prefixed.BaseCommandEvent;
|
||||||
|
import com.freya02.botcommands.api.prefixed.CommandEvent;
|
||||||
|
import com.freya02.botcommands.api.prefixed.TextCommand;
|
||||||
|
import com.freya02.botcommands.api.prefixed.annotations.Category;
|
||||||
|
import com.freya02.botcommands.api.prefixed.annotations.Description;
|
||||||
|
import com.freya02.botcommands.api.prefixed.annotations.JDATextCommand;
|
||||||
|
import com.freya02.botcommands.api.prefixed.annotations.TextOption;
|
||||||
|
import net.dv8tion.jda.api.Permission;
|
||||||
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
import net.dv8tion.jda.api.interactions.commands.Command;
|
||||||
|
import net.hypr.doki.utils.DurationUtils;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
|
||||||
|
@CommandMarker
|
||||||
|
@Category("Moderation")
|
||||||
|
@Description("Mutes a user for a specified amount of time")
|
||||||
|
public class Mute extends TextCommand {
|
||||||
|
@JDATextCommand(name = "mute", order = 1)
|
||||||
|
public void execute(BaseCommandEvent event, @TextOption(example = "<@437970062922612737>") Member member, @TextOption(example = "30m") String duration) {
|
||||||
|
Member commandExecutor = event.getMember();
|
||||||
|
if (!commandExecutor.hasPermission(Permission.KICK_MEMBERS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Duration timeoutDuration;
|
||||||
|
try {
|
||||||
|
timeoutDuration = DurationUtils.parseDuration(duration);
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
event.reply("Invalid duration format!").queue();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Math.abs(timeoutDuration.toDays()) > 28) {
|
||||||
|
event.reply("Duration must be less than 28 days!").queue();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
member.timeoutFor(timeoutDuration).queue();
|
||||||
|
event.reply("Muted " + member.getAsMention() + " (" + member.getEffectiveName() + ") for " + duration).queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@JDATextCommand(name = "mute", order = 2)
|
||||||
|
public void execute(CommandEvent event) {
|
||||||
|
event.reply("You must specify a user and duration!").queue();
|
||||||
|
}
|
||||||
|
}
|
27
src/main/java/net/hypr/doki/utils/DurationUtils.java
Normal file
27
src/main/java/net/hypr/doki/utils/DurationUtils.java
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
package net.hypr.doki.utils;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class DurationUtils {
|
||||||
|
private static final Pattern timePattern = Pattern.compile("(\\d+)(?:([dhms]))?");
|
||||||
|
public static Duration parseDuration(String input) throws IllegalArgumentException {
|
||||||
|
Matcher matcher = timePattern.matcher(input);
|
||||||
|
|
||||||
|
if (!matcher.matches()) {
|
||||||
|
throw new IllegalArgumentException("Invalid duration format");
|
||||||
|
}
|
||||||
|
|
||||||
|
int value = Integer.parseInt(matcher.group(1));
|
||||||
|
String unit = matcher.group(2);
|
||||||
|
|
||||||
|
return switch (unit == null || unit.isEmpty() ? "m" : unit.toLowerCase()) {
|
||||||
|
case "d" -> Duration.ofDays(value);
|
||||||
|
case "h" -> Duration.ofHours(value);
|
||||||
|
case "m" -> Duration.ofMinutes(value);
|
||||||
|
case "s" -> Duration.ofSeconds(value);
|
||||||
|
default -> throw new IllegalArgumentException("Invalid unit");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue