2011-03-19 22:39:51 +00:00
|
|
|
package com.earth2me.essentials.commands;
|
|
|
|
|
2013-10-16 19:59:39 +00:00
|
|
|
import com.earth2me.essentials.CommandSource;
|
2011-03-19 22:39:51 +00:00
|
|
|
import com.earth2me.essentials.User;
|
2020-07-06 18:52:51 +00:00
|
|
|
import com.earth2me.essentials.utils.DateUtil;
|
2020-03-13 02:08:11 +00:00
|
|
|
import net.ess3.api.events.AfkStatusChangeEvent;
|
2011-11-18 17:42:26 +00:00
|
|
|
import org.bukkit.Server;
|
2011-03-19 22:39:51 +00:00
|
|
|
|
2017-06-11 00:17:43 +00:00
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.List;
|
|
|
|
|
2015-04-15 04:06:16 +00:00
|
|
|
import static com.earth2me.essentials.I18n.tl;
|
|
|
|
|
|
|
|
public class Commandafk extends EssentialsCommand {
|
|
|
|
public Commandafk() {
|
|
|
|
super("afk");
|
|
|
|
}
|
2011-03-19 22:39:51 +00:00
|
|
|
|
2015-04-15 04:06:16 +00:00
|
|
|
@Override
|
2020-10-03 17:46:05 +00:00
|
|
|
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception {
|
2015-04-15 04:06:16 +00:00
|
|
|
if (args.length > 0 && user.isAuthorized("essentials.afk.others")) {
|
2016-06-18 16:44:17 +00:00
|
|
|
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 17:46:05 +00:00
|
|
|
} catch (final PlayerNotFoundException e) {
|
2016-06-18 16:44:17 +00:00
|
|
|
message = getFinalArg(args, 0);
|
|
|
|
}
|
2016-07-10 19:27:48 +00:00
|
|
|
toggleAfk(user, afkUser, message);
|
2015-04-15 04:06:16 +00:00
|
|
|
} else {
|
2020-10-03 17:46:05 +00:00
|
|
|
final String message = args.length > 0 ? getFinalArg(args, 0) : null;
|
2016-07-10 19:27:48 +00:00
|
|
|
toggleAfk(user, user, message);
|
2015-04-15 04:06:16 +00:00
|
|
|
}
|
|
|
|
}
|
2011-03-19 22:39:51 +00:00
|
|
|
|
2015-04-15 04:06:16 +00:00
|
|
|
@Override
|
2020-10-03 17:46:05 +00:00
|
|
|
public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception {
|
2015-04-15 04:06:16 +00:00
|
|
|
if (args.length > 0) {
|
2020-10-03 17:46:05 +00:00
|
|
|
final User afkUser = getPlayer(server, args, 0, true, false);
|
|
|
|
final String message = args.length > 1 ? getFinalArg(args, 1) : null;
|
2016-07-10 19:27:48 +00:00
|
|
|
toggleAfk(null, afkUser, message);
|
2015-04-15 04:06:16 +00:00
|
|
|
} else {
|
|
|
|
throw new NotEnoughArgumentsException();
|
|
|
|
}
|
|
|
|
}
|
2011-07-02 22:53:54 +00:00
|
|
|
|
2020-10-03 17:46:05 +00:00
|
|
|
private void toggleAfk(final User sender, final User user, final String message) throws Exception {
|
2016-07-10 19:27:48 +00:00
|
|
|
if (message != null && sender != null) {
|
|
|
|
if (sender.isMuted()) {
|
2020-10-03 17:46:05 +00:00
|
|
|
final String dateDiff = sender.getMuteTimeout() > 0 ? DateUtil.formatDateDiff(sender.getMuteTimeout()) : null;
|
2020-07-06 18:52:51 +00:00
|
|
|
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));
|
2016-07-10 19:27:48 +00:00
|
|
|
}
|
|
|
|
if (!sender.isAuthorized("essentials.afk.message")) {
|
|
|
|
throw new Exception(tl("noPermToAFKMessage"));
|
|
|
|
}
|
|
|
|
}
|
2015-04-15 04:06:16 +00:00
|
|
|
user.setDisplayNick();
|
|
|
|
String msg = "";
|
2020-04-13 13:33:37 +00:00
|
|
|
String selfmsg = "";
|
2020-03-13 02:08:11 +00:00
|
|
|
if (!user.toggleAfk(AfkStatusChangeEvent.Cause.COMMAND)) {
|
2015-04-15 04:06:16 +00:00
|
|
|
if (!user.isHidden()) {
|
|
|
|
msg = tl("userIsNotAway", user.getDisplayName());
|
2020-04-14 10:56:17 +00:00
|
|
|
selfmsg = tl("userIsNotAwaySelf", user.getDisplayName());
|
2015-04-15 04:06:16 +00:00
|
|
|
}
|
2020-03-13 02:08:11 +00:00
|
|
|
user.updateActivity(false, AfkStatusChangeEvent.Cause.COMMAND);
|
2015-04-15 04:06:16 +00:00
|
|
|
} else {
|
|
|
|
if (!user.isHidden()) {
|
2016-06-18 16:44:17 +00:00
|
|
|
if (message != null) {
|
2016-06-18 16:54:21 +00:00
|
|
|
msg = tl("userIsAwayWithMessage", user.getDisplayName(), message);
|
2020-04-14 10:56:17 +00:00
|
|
|
selfmsg = tl("userIsAwaySelfWithMessage", user.getDisplayName(), message);
|
2016-06-18 16:44:17 +00:00
|
|
|
} else {
|
|
|
|
msg = tl("userIsAway", user.getDisplayName());
|
2020-04-14 10:56:17 +00:00
|
|
|
selfmsg = tl("userIsAwaySelf", user.getDisplayName());
|
2016-06-18 16:44:17 +00:00
|
|
|
}
|
2015-04-15 04:06:16 +00:00
|
|
|
}
|
2016-06-18 16:44:17 +00:00
|
|
|
user.setAfkMessage(message);
|
2015-04-15 04:06:16 +00:00
|
|
|
}
|
2020-04-13 13:33:37 +00: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 04:06:16 +00:00
|
|
|
}
|
2018-12-11 13:26:15 +00:00
|
|
|
user.setDisplayNick(); // Set this again after toggling
|
2015-04-15 04:06:16 +00:00
|
|
|
}
|
2017-06-11 00:17:43 +00:00
|
|
|
|
|
|
|
@Override
|
2020-10-03 17:46:05 +00:00
|
|
|
protected List<String> getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) {
|
2020-08-30 16:06:39 +00:00
|
|
|
if (args.length == 1 && sender.isAuthorized("essentials.afk.others", ess)) {
|
2017-06-11 00:17:43 +00:00
|
|
|
return getPlayers(server, sender);
|
|
|
|
} else {
|
|
|
|
return Collections.emptyList();
|
|
|
|
}
|
|
|
|
}
|
2011-03-19 22:39:51 +00:00
|
|
|
}
|
2013-03-25 13:09:09 +00:00
|
|
|
|