mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-22 03:55:18 -04:00
Ask to confirm before changing rank of non-existent players.
This commit is contained in:
parent
e3d6177794
commit
6fe6b7a067
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user