Ask to confirm before changing rank of non-existent players.

This commit is contained in:
UnknownShadow200 2016-09-05 09:12:17 +10:00
parent e3d6177794
commit 6fe6b7a067
3 changed files with 52 additions and 11 deletions

View File

@ -35,7 +35,7 @@ namespace MCGalaxy.Commands.Moderation {
}
string[] args = message.SplitSpaces(2);
string reason = args.Length > 1 ? args[1] : Server.defaultBanMessage;
string reason = args.Length > 1 ? args[1] : Server.defaultBanMessage;
if (reason == "-") reason = "&c-";
reason = GetReason(p, reason);
if (reason == null) return;

View File

@ -31,17 +31,22 @@ namespace MCGalaxy.Commands.Moderation {
string[] args = message.SplitSpaces(3);
if (args.Length < 2) { Help(p); return; }
string rank = null, name = null;
if (args[0].CaselessEq("+up") || args[0].CaselessEq("-down")) {
rank = args[0]; name = args[1];
} else {
rank = args[1]; name = args[0];
}
string reason = args.Length > 2 ? args[2] : null, rankMsg = null;
Player who = PlayerInfo.Find(name);
if (args[0].CaselessEq("+up")) {
rank = args[0];
name = RankCmd.FindName(p, "promote", "", args[1], ref reason);
} else if (args[0].CaselessEq("-down")) {
rank = args[0];
name = RankCmd.FindName(p, "demote", "", args[1], ref reason);
} else {
rank = args[1];
name = RankCmd.FindName(p, "rank", " " + rank, args[0], ref reason);
}
if (name == null) return;
Player who = PlayerInfo.FindExact(name);
if (who == p && who != null) { Player.Message(p, "Cannot change your own rank."); return; }
if (who != null) name = who.name;
Group curRank = who != null ? who.group : PlayerInfo.GetGroup(name);
Group newRank = TargetRank(p, rank.ToLower(), curRank);

View File

@ -20,7 +20,7 @@ using System.IO;
namespace MCGalaxy.Commands.Moderation {
internal static class RankCmd {
internal static void ChangeRank(string name, Group oldRank, Group newRank,
Player who, bool saveToNewRank = true) {
Server.reviewlist.Remove(name);
@ -42,5 +42,41 @@ namespace MCGalaxy.Commands.Moderation {
who.Send(Packet.MakeUserType(who));
Entities.SpawnEntities(who, false);
}
internal static string FindName(Player p, string action, string cmdArgs,
string name, ref string reason) {
string match = MatchName(p, ref name);
if (match != null) {
if (match.CaselessEq(name)) return match;
// Not an exact match, may be wanting to ban an offline account
Player.Message(p, "1 player matches \"{0}\": {1}", name, match);
}
string confirmed = IsConfirmed(reason);
if (confirmed != null) { reason = confirmed; return name; }
string msgReason = String.IsNullOrEmpty(reason) ? "" : " " + reason;
Player.Message(p, "If you still want to {0} {1}, use %T/{0} {1}{2} confirm {3}",
action, name, cmdArgs, msgReason);
return null;
}
static string MatchName(Player p, ref string name) {
int matches = 0;
Player target = PlayerInfo.FindMatches(p, name, out matches);
if (matches > 1) return null;
if (matches == 1) { name = target.name; return name; }
Player.Message(p, "Searching PlayerDB...");
return PlayerInfo.FindOfflineNameMatches(p, name);
}
static string IsConfirmed(string reason) {
if (reason == null) return null;
if (reason.CaselessEq("confirm"))
return "";
if (reason.CaselessStarts("confirm "))
return reason.Substring("confirm ".Length);
return null;
}
}
}