diff --git a/Commands/Bots/CmdBotAI.cs b/Commands/Bots/CmdBotAI.cs index 3139a66e5..291f0a386 100644 --- a/Commands/Bots/CmdBotAI.cs +++ b/Commands/Bots/CmdBotAI.cs @@ -36,7 +36,7 @@ namespace MCGalaxy.Commands if (args.Length < 2) { Help(p); return; } string ai = args[1].ToLower(); - if (!ValidName(p, ai, "bot AI")) return; + if (!Formatter.ValidName(p, ai, "bot AI")) return; if (ai == "hunt" || ai == "kill") { Player.Message(p, "Reserved for special AI."); return; } switch (args[0].ToLower()) { diff --git a/Commands/Bots/CmdBotAdd.cs b/Commands/Bots/CmdBotAdd.cs index 8e8818956..87f603b1e 100644 --- a/Commands/Bots/CmdBotAdd.cs +++ b/Commands/Bots/CmdBotAdd.cs @@ -28,7 +28,7 @@ namespace MCGalaxy.Commands { if (message == "") { Help(p); return; } if (p == null) { MessageInGameOnly(p); return; } - if (!ValidName(p, message, "bot")) return; + if (!Formatter.ValidName(p, message, "bot")) return; PlayerBot bot = new PlayerBot(message, p.level, p.pos[0], p.pos[1], p.pos[2], p.rot[0], 0); PlayerBot.Add(bot); } diff --git a/Commands/CPE/CmdSkin.cs b/Commands/CPE/CmdSkin.cs index 2475a315c..3fa4814d7 100644 --- a/Commands/CPE/CmdSkin.cs +++ b/Commands/CPE/CmdSkin.cs @@ -57,7 +57,7 @@ namespace MCGalaxy.Commands.CPE { skin = message; } - if (!ValidName(p, skin, "skin")) return; + if (!Formatter.ValidName(p, skin, "skin")) return; if (p != null && who != null && who.Rank > p.Rank) { MessageTooHighRank(p, "change the skin of", true); return; } diff --git a/Commands/Command.Helpers.cs b/Commands/Command.Helpers.cs index bb2816056..40e773533 100644 --- a/Commands/Command.Helpers.cs +++ b/Commands/Command.Helpers.cs @@ -81,12 +81,6 @@ namespace MCGalaxy { Player.Message(p, "Can only {0} players ranked below {1}", action, grp.ColoredName); } - protected static bool ValidName(Player p, string name, string type) { - if (Player.ValidName(name)) return true; - Player.Message(p, "\"{0}\" is not a valid {1} name.", name, type); - return false; - } - internal void MessageCannotUse(Player p) { var perms = GrpCommands.allowedCommands.Find(C => C.commandName == name); StringBuilder builder = new StringBuilder("Only "); diff --git a/Commands/Information/CmdWhois.cs b/Commands/Information/CmdWhois.cs index 5ed67946a..96856b2be 100644 --- a/Commands/Information/CmdWhois.cs +++ b/Commands/Information/CmdWhois.cs @@ -44,7 +44,7 @@ namespace MCGalaxy.Commands { if (matches == 1) { info = FromOnline(pl); } else { - if (!ValidName(p, message, "player")) return; + if (!Formatter.ValidName(p, message, "player")) return; Player.Message(p, "Searching database for the player.."); PlayerData target = PlayerInfo.FindOfflineMatches(p, message); if (target == null) return; diff --git a/Commands/Moderation/CmdBan.cs b/Commands/Moderation/CmdBan.cs index b7deb18b0..a980a53a6 100644 --- a/Commands/Moderation/CmdBan.cs +++ b/Commands/Moderation/CmdBan.cs @@ -43,7 +43,7 @@ namespace MCGalaxy.Commands.Moderation { Player who = PlayerInfo.Find(args[0]); string target = who == null ? args[0] : who.name; - if (!ValidName(p, target, "player")) return; + if (!Formatter.ValidName(p, target, "player")) return; Group group = who == null ? Group.findPlayerGroup(args[0]) : who.group; if (!CheckPerms(target, group, p)) return; diff --git a/Commands/Moderation/CmdInfoSwap.cs b/Commands/Moderation/CmdInfoSwap.cs index aefff13c0..661ee4b37 100644 --- a/Commands/Moderation/CmdInfoSwap.cs +++ b/Commands/Moderation/CmdInfoSwap.cs @@ -31,8 +31,8 @@ namespace MCGalaxy.Commands { public override void Use(Player p, string text) { string[] args = text.Split(' '); if (args.Length != 2) { Help(p); return; } - if (!ValidName(p, args[0], "player")) return; - if (!ValidName(p, args[1], "player")) return; + if (!Formatter.ValidName(p, args[0], "player")) return; + if (!Formatter.ValidName(p, args[1], "player")) return; if (PlayerInfo.FindExact(args[0]) != null) { Player.Message(p, "\"{0}\" must be offline to use /infoswap.", args[0]); return; diff --git a/Commands/Moderation/CmdSetRank.cs b/Commands/Moderation/CmdSetRank.cs index 2a6e4f3d8..24c2cf0d0 100644 --- a/Commands/Moderation/CmdSetRank.cs +++ b/Commands/Moderation/CmdSetRank.cs @@ -62,6 +62,7 @@ namespace MCGalaxy.Commands.Moderation { who.SendMessage("You are now ranked " + newRank.ColoredName + "%S, type /help for your new set of commands."); } + if (p == null) Player.Message(p, rankMsg); RankCmd.ChangeRank(name, curRank, newRank, who); WriteRankInfo(p, name, newRank, curRank, reason); Server.IRC.Say(rankMsg); diff --git a/Commands/Moderation/CmdTempBan.cs b/Commands/Moderation/CmdTempBan.cs index a155dd331..b5df33a95 100644 --- a/Commands/Moderation/CmdTempBan.cs +++ b/Commands/Moderation/CmdTempBan.cs @@ -26,10 +26,13 @@ namespace MCGalaxy.Commands.Moderation { public override void Use(Player p, string message) { if (message == "") { Help(p); return; } string[] args = message.SplitSpaces(3); - Player who = PlayerInfo.Find(args[0]); + string reason = args.Length > 2 ? args[2] : ""; + + string target = RankCmd.FindName(p, "tempban", args.Length == 1 ? "" : " " + args[1], + args[0], ref reason); + if (target == null) return; + Player who = PlayerInfo.FindExact(target); - string target = who == null ? args[0] : who.name; - if (!ValidName(p, target, "player")) return; Group grp = who == null ? PlayerInfo.GetGroup(target) : who.group; if (p != null && grp.Permission >= p.Rank) { MessageTooHighRank(p, "temp ban", false); return; @@ -42,15 +45,14 @@ namespace MCGalaxy.Commands.Moderation { Server.TempBan tBan; tBan.name = target; - tBan.reason = args.Length > 2 ? args[2] : ""; - tBan.reason = GetReason(p, tBan.reason); + tBan.reason = GetReason(p, reason); if (tBan.reason == null) return; tBan.expiryTime = DateTime.UtcNow.Add(time); AddTempban(tBan); if (who != null) { - string reason = tBan.reason == "" ? "" : " - (" + tBan.reason + ")"; - who.Kick("Banned for " + time.Shorten(true) + "." + reason); + string kickReason = tBan.reason == "" ? "" : " - (" + tBan.reason + ")"; + who.Kick("Banned for " + time.Shorten(true) + "." + kickReason); } Player.Message(p, "Temp banned " + target + " for " + time.Shorten(true) + "."); diff --git a/Commands/Moderation/CmdZone.cs b/Commands/Moderation/CmdZone.cs index efa55b46e..6b173729e 100644 --- a/Commands/Moderation/CmdZone.cs +++ b/Commands/Moderation/CmdZone.cs @@ -95,7 +95,7 @@ namespace MCGalaxy.Commands { bool CheckAdd(Player p, string[] args) { if (!CheckExtraPerm(p, 3)) { MessageNeedExtra(p, "create zones.", 3); return false; } if (args.Length == 1) { Help(p); return false; } - if (!ValidName(p, args[1], "player or rank")) return false; + if (!Formatter.ValidName(p, args[1], "player or rank")) return false; args[1] = FindZoneOwner(p, args[1]); return args[1] != null; diff --git a/Commands/Moderation/RankCmd.cs b/Commands/Moderation/RankCmd.cs index 290d522f8..9f1a412f6 100644 --- a/Commands/Moderation/RankCmd.cs +++ b/Commands/Moderation/RankCmd.cs @@ -46,14 +46,16 @@ namespace MCGalaxy.Commands.Moderation { internal static string FindName(Player p, string action, string cmdArgs, string name, ref string reason) { string match = MatchName(p, ref name); + string confirmed = IsConfirmed(reason); + if (confirmed != null) reason = confirmed; + 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; } + if (confirmed != null) 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); diff --git a/Commands/World/CmdCopyLVL.cs b/Commands/World/CmdCopyLVL.cs index adaedf6fe..997f7fab8 100644 --- a/Commands/World/CmdCopyLVL.cs +++ b/Commands/World/CmdCopyLVL.cs @@ -41,7 +41,7 @@ namespace MCGalaxy.Commands.World { } src = LevelInfo.FindMapMatches(p, src); if (src == null) return; - if (!ValidName(p, dst, "level")) return; + if (!Formatter.ValidName(p, dst, "level")) return; if (LevelInfo.ExistsOffline(dst)) { Player.Message(p, "The level \"" + dst + "\" already exists."); return; } try { diff --git a/Commands/World/CmdDeleteLvl.cs b/Commands/World/CmdDeleteLvl.cs index bde3d5a04..224ea62b1 100644 --- a/Commands/World/CmdDeleteLvl.cs +++ b/Commands/World/CmdDeleteLvl.cs @@ -29,7 +29,7 @@ namespace MCGalaxy.Commands.World { public override void Use(Player p, string message) { if (message == "" || message.Split(' ').Length > 1) { Help(p); return; } - if (!ValidName(p, message, "level")) return; + if (!Formatter.ValidName(p, message, "level")) return; string map = LevelInfo.FindMapMatches(p, message); if (map == null) return; diff --git a/Commands/World/CmdImport.cs b/Commands/World/CmdImport.cs index 87dc43baf..880cd937d 100644 --- a/Commands/World/CmdImport.cs +++ b/Commands/World/CmdImport.cs @@ -29,7 +29,7 @@ namespace MCGalaxy.Commands.World { public override void Use(Player p, string message) { if (message == "") { Help(p); return; } - if (!ValidName(p, message, "level")) return; + if (!Formatter.ValidName(p, message, "level")) return; string file = "extra/import/" + message; if (!Directory.Exists("extra/import")) diff --git a/Commands/World/CmdLockdown.cs b/Commands/World/CmdLockdown.cs index edd9728c2..afe6bd7c8 100644 --- a/Commands/World/CmdLockdown.cs +++ b/Commands/World/CmdLockdown.cs @@ -39,7 +39,7 @@ namespace MCGalaxy.Commands { if (args[0].CaselessEq("map")) { args[1] = args[1].ToLower(); - if (!ValidName(p, args[1], "level")) return; + if (!Formatter.ValidName(p, args[1], "level")) return; string path = "text/lockdown/map/" + args[1]; if (!File.Exists(path)) { diff --git a/Commands/World/CmdMain.cs b/Commands/World/CmdMain.cs index 16ae1092a..bc073adc4 100644 --- a/Commands/World/CmdMain.cs +++ b/Commands/World/CmdMain.cs @@ -36,7 +36,7 @@ namespace MCGalaxy.Commands.World { PlayerActions.ChangeMap(p, Server.mainLevel.name); } else { if (!CheckExtraPerm(p)) { MessageNeedExtra(p, "change the main level"); return; } - if (!ValidName(p, message, "level")) return; + if (!Formatter.ValidName(p, message, "level")) return; string map = LevelInfo.FindMapMatches(p, message); if (map == null) return; diff --git a/Commands/World/CmdNewLvl.cs b/Commands/World/CmdNewLvl.cs index 8a0e6720a..b5a0472b1 100644 --- a/Commands/World/CmdNewLvl.cs +++ b/Commands/World/CmdNewLvl.cs @@ -48,7 +48,7 @@ namespace MCGalaxy.Commands.World { if (!MapGen.OkayAxis(z)) { Player.Message(p, "length must be divisible by 16, and >= 16."); return; } if (!CheckMapSize(p, x, y, z)) return; - if (!ValidName(p, name, "level")) return; + if (!Formatter.ValidName(p, name, "level")) return; if (LevelInfo.ExistsOffline(name)) { Player.Message(p, "Level \"{0}\" already exists", name); return; } diff --git a/Commands/World/CmdRenameLvl.cs b/Commands/World/CmdRenameLvl.cs index 43597c52e..d8af1b6c8 100644 --- a/Commands/World/CmdRenameLvl.cs +++ b/Commands/World/CmdRenameLvl.cs @@ -34,7 +34,7 @@ namespace MCGalaxy.Commands.World { Level lvl = LevelInfo.FindMatches(p, args[0]); if (lvl == null) return; string newName = args[1].ToLower(); - if (!ValidName(p, newName, "level")) return; + if (!Formatter.ValidName(p, newName, "level")) return; if (LevelInfo.ExistsOffline(newName)) { Player.Message(p, "Level already exists."); return; } if (lvl == Server.mainLevel) { Player.Message(p, "Cannot rename the main level."); return; } diff --git a/Commands/building/CmdCopy.cs b/Commands/building/CmdCopy.cs index ded9a19b0..9533ec209 100644 --- a/Commands/building/CmdCopy.cs +++ b/Commands/building/CmdCopy.cs @@ -153,7 +153,7 @@ namespace MCGalaxy.Commands.Building { } void SaveCopy(Player p, string file) { - if (!ValidName(p, file, "saved copy")) return; + if (!Formatter.ValidName(p, file, "saved copy")) return; if (!Directory.Exists("extra/savecopy")) Directory.CreateDirectory("extra/savecopy"); diff --git a/Commands/other/CmdReport.cs b/Commands/other/CmdReport.cs index 459a31654..2a094ac24 100644 --- a/Commands/other/CmdReport.cs +++ b/Commands/other/CmdReport.cs @@ -81,7 +81,7 @@ namespace MCGalaxy.Commands { Player.Message(p, "You need to provide a player's name."); return; } if (!CheckExtraPerm(p)) { MessageNeedExtra(p, "view the details of a report."); return; } - if (!ValidName(p, args[1], "player")) return; + if (!Formatter.ValidName(p, args[1], "player")) return; if (!File.Exists("extra/reported/" + args[1] + ".txt")) { Player.Message(p, "The player you specified has not been reported."); return; @@ -95,7 +95,7 @@ namespace MCGalaxy.Commands { Player.Message(p, "You need to provide a player's name."); return; } if (!CheckExtraPerm(p)) { MessageNeedExtra(p, "delete reports."); return; } - if (!ValidName(p, args[1], "player")) return; + if (!Formatter.ValidName(p, args[1], "player")) return; if (!File.Exists("extra/reported/" + args[1] + ".txt")) { Player.Message(p, "The player you specified has not been reported."); return; diff --git a/Commands/other/CmdServer.cs b/Commands/other/CmdServer.cs index c2a26f433..dee0b14a3 100644 --- a/Commands/other/CmdServer.cs +++ b/Commands/other/CmdServer.cs @@ -105,7 +105,7 @@ namespace MCGalaxy.Commands { Save(true, true, p, true); } else if (type == "table") { if (args.Length == 2) { Player.Message(p, "You need to provide the table name to backup."); return; } - if (!ValidName(p, args[2], "table")) return; + if (!Formatter.ValidName(p, args[2], "table")) return; if (!Database.TableExists(args[2])) { Player.Message(p, "Table \"{0}\" does not exist.", args[2]); return; } Player.Message(p, "Backing up table {0} started. Please wait while backup finishes.", args[2]); diff --git a/util/Formatter.cs b/util/Formatter.cs index cae616439..2e78b793d 100644 --- a/util/Formatter.cs +++ b/util/Formatter.cs @@ -113,5 +113,11 @@ namespace MCGalaxy { else Player.Message(p, "Only {0}%S+ can {1}", grp.ColoredName, action); } + + public static bool ValidName(Player p, string name, string type) { + if (Player.ValidName(name)) return true; + Player.Message(p, "\"{0}\" is not a valid {1} name.", name, type); + return false; + } } }