mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-23 12:42:22 -04:00
Ask to confirm before changing rank of non-existent players.
This commit is contained in:
parent
e3d6177794
commit
6fe6b7a067
@ -31,17 +31,22 @@ namespace MCGalaxy.Commands.Moderation {
|
|||||||
string[] args = message.SplitSpaces(3);
|
string[] args = message.SplitSpaces(3);
|
||||||
if (args.Length < 2) { Help(p); return; }
|
if (args.Length < 2) { Help(p); return; }
|
||||||
string rank = null, name = null;
|
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;
|
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 == 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 curRank = who != null ? who.group : PlayerInfo.GetGroup(name);
|
||||||
Group newRank = TargetRank(p, rank.ToLower(), curRank);
|
Group newRank = TargetRank(p, rank.ToLower(), curRank);
|
||||||
|
@ -42,5 +42,41 @@ namespace MCGalaxy.Commands.Moderation {
|
|||||||
who.Send(Packet.MakeUserType(who));
|
who.Send(Packet.MakeUserType(who));
|
||||||
Entities.SpawnEntities(who, false);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user