Essentials/Essentials/src/main/java/com/earth2me/essentials/commands/Commandafk.java

102 lines
4.2 KiB
Java
Raw Normal View History

package com.earth2me.essentials.commands;
import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.DateUtil;
2020-03-13 03:08:11 +01:00
import net.ess3.api.events.AfkStatusChangeEvent;
2011-11-18 18:42:26 +01:00
import org.bukkit.Server;
import java.util.Collections;
import java.util.List;
2015-04-15 06:06:16 +02:00
import static com.earth2me.essentials.I18n.tl;
public class Commandafk extends EssentialsCommand {
public Commandafk() {
super("afk");
}
2015-04-15 06:06:16 +02:00
@Override
2020-10-03 19:46:05 +02:00
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception {
2015-04-15 06:06:16 +02:00
if (args.length > 0 && user.isAuthorized("essentials.afk.others")) {
User afkUser = user; // if no player found, but message specified, set command executor to target user
String message;
try {
afkUser = getPlayer(server, user, args, 0);
message = args.length > 1 ? getFinalArg(args, 1) : null;
2020-10-03 19:46:05 +02:00
} catch (final PlayerNotFoundException e) {
message = getFinalArg(args, 0);
}
toggleAfk(user, afkUser, message);
2015-04-15 06:06:16 +02:00
} else {
2020-10-03 19:46:05 +02:00
final String message = args.length > 0 ? getFinalArg(args, 0) : null;
toggleAfk(user, user, message);
2015-04-15 06:06:16 +02:00
}
}
2015-04-15 06:06:16 +02:00
@Override
2020-10-03 19:46:05 +02:00
public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception {
2015-04-15 06:06:16 +02:00
if (args.length > 0) {
2020-10-03 19:46:05 +02:00
final User afkUser = getPlayer(server, args, 0, true, false);
final String message = args.length > 1 ? getFinalArg(args, 1) : null;
toggleAfk(null, afkUser, message);
2015-04-15 06:06:16 +02:00
} else {
throw new NotEnoughArgumentsException();
}
}
2020-10-03 19:46:05 +02:00
private void toggleAfk(final User sender, final User user, final String message) throws Exception {
if (message != null && sender != null) {
if (sender.isMuted()) {
2020-10-03 19:46:05 +02:00
final String dateDiff = sender.getMuteTimeout() > 0 ? DateUtil.formatDateDiff(sender.getMuteTimeout()) : null;
if (dateDiff == null) {
throw new Exception(sender.hasMuteReason() ? tl("voiceSilencedReason", sender.getMuteReason()) : tl("voiceSilenced"));
}
throw new Exception(sender.hasMuteReason() ? tl("voiceSilencedReasonTime", dateDiff, sender.getMuteReason()) : tl("voiceSilencedTime", dateDiff));
}
if (!sender.isAuthorized("essentials.afk.message")) {
throw new Exception(tl("noPermToAFKMessage"));
}
}
2015-04-15 06:06:16 +02:00
user.setDisplayNick();
String msg = "";
String selfmsg = "";
2020-03-13 03:08:11 +01:00
if (!user.toggleAfk(AfkStatusChangeEvent.Cause.COMMAND)) {
2015-04-15 06:06:16 +02:00
if (!user.isHidden()) {
msg = tl("userIsNotAway", user.getDisplayName());
selfmsg = tl("userIsNotAwaySelf", user.getDisplayName());
2015-04-15 06:06:16 +02:00
}
2020-03-13 03:08:11 +01:00
user.updateActivity(false, AfkStatusChangeEvent.Cause.COMMAND);
2015-04-15 06:06:16 +02:00
} else {
if (!user.isHidden()) {
if (message != null) {
msg = tl("userIsAwayWithMessage", user.getDisplayName(), message);
selfmsg = tl("userIsAwaySelfWithMessage", user.getDisplayName(), message);
} else {
msg = tl("userIsAway", user.getDisplayName());
selfmsg = tl("userIsAwaySelf", user.getDisplayName());
}
2015-04-15 06:06:16 +02:00
}
user.setAfkMessage(message);
2015-04-15 06:06:16 +02:00
}
if (!msg.isEmpty() && ess.getSettings().broadcastAfkMessage()) {
// exclude user from receiving general AFK announcement in favor of personal message
ess.broadcastMessage(user, msg, u -> u == user);
}
if (!selfmsg.isEmpty()) {
user.sendMessage(selfmsg);
2015-04-15 06:06:16 +02:00
}
user.setDisplayNick(); // Set this again after toggling
2015-04-15 06:06:16 +02:00
}
@Override
2020-10-03 19:46:05 +02:00
protected List<String> getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) {
if (args.length == 1 && sender.isAuthorized("essentials.afk.others", ess)) {
return getPlayers(server, sender);
} else {
return Collections.emptyList();
}
}
}
2013-03-25 14:09:09 +01:00