TempMuteCommand.java
package dev.aura.bungeechat.command;
import dev.aura.bungeechat.account.BungeecordAccountManager;
import dev.aura.bungeechat.api.account.AccountManager;
import dev.aura.bungeechat.api.account.BungeeChatAccount;
import dev.aura.bungeechat.api.enums.AccountType;
import dev.aura.bungeechat.api.utils.TimeUtil;
import dev.aura.bungeechat.message.Messages;
import dev.aura.bungeechat.message.MessagesService;
import dev.aura.bungeechat.module.MutingModule;
import dev.aura.bungeechat.permission.Permission;
import dev.aura.bungeechat.permission.PermissionManager;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import net.md_5.bungee.api.CommandSender;
public class TempMuteCommand extends BaseCommand {
private static final List<String> timeUnits = Arrays.asList("s", "m", "h", "d", "w", "mo", "y");
private static final Pattern digitsAndUnit =
Pattern.compile("(\\d+(?:\\.\\d*)?)[a-z]*", Pattern.CASE_INSENSITIVE);
public TempMuteCommand(MutingModule mutingModule) {
super(
"tempmute",
Permission.COMMAND_TEMPMUTE,
mutingModule.getModuleSection().getStringList("aliases.tempmute"));
}
@Override
public void execute(CommandSender sender, String[] args) {
if (!PermissionManager.hasPermission(sender, Permission.COMMAND_TEMPMUTE)) return;
if (args.length < 2) {
MessagesService.sendMessage(
sender, Messages.INCORRECT_USAGE.get(sender, "/tempmute <player> <time>"));
return;
}
Optional<BungeeChatAccount> targetAccount = AccountManager.getAccount(args[0]);
if (!targetAccount.isPresent()) {
MessagesService.sendMessage(sender, Messages.PLAYER_NOT_FOUND.get());
return;
}
if (targetAccount.get().isMuted()) {
MessagesService.sendMessage(sender, Messages.MUTE_IS_MUTED.get());
return;
}
final double timeAmount = TimeUtil.convertStringTimeToDouble(args[1]);
final double currentTime = System.currentTimeMillis();
final java.sql.Timestamp timeStamp = new java.sql.Timestamp((long) (currentTime + timeAmount));
targetAccount.get().setMutedUntil(timeStamp);
MessagesService.sendMessage(sender, Messages.TEMPMUTE.get(targetAccount.get()));
}
@Override
public Collection<String> tabComplete(CommandSender sender, String[] args) {
if (args.length == 1) {
return BungeecordAccountManager.getAccountsForPartialName(args[0], sender).stream()
.filter(account -> account.getAccountType() == AccountType.PLAYER)
.map(BungeeChatAccount::getName)
.collect(Collectors.toList());
} else if (args.length == 2) {
final String time = args[1];
String digits = null;
Matcher match = digitsAndUnit.matcher(time);
if (time.isEmpty()) {
digits = "<duration>";
} else if (match.matches()) {
digits = match.group(1);
}
if (digits != null) {
final String finalDigits = digits;
return timeUnits.stream()
.map(unit -> finalDigits + unit)
.filter(timeStr -> timeStr.startsWith(time))
.collect(Collectors.toList());
}
}
return super.tabComplete(sender, args);
}
}