static void ImportBans(Player player, CommandReader cmd)
{
string serverName = cmd.Next();
string fileName = cmd.Next();
// Make sure all parameters are specified
if (serverName == null || fileName == null)
{
CdImport.PrintUsage(player);
return;
}
// Check if file exists
if (!File.Exists(fileName))
{
player.Message("File not found: {0}", fileName);
return;
}
string[] names;
switch (serverName.ToLower())
{
case "mcsharp":
case "mczall":
case "mclawl":
try {
names = File.ReadAllLines(fileName);
} catch (Exception ex) {
Logger.Log(LogType.Error,
"Could not open \"{0}\" to import bans: {1}",
fileName, ex);
return;
}
break;
default:
player.Message("fCraft does not support importing from {0}", serverName);
return;
}
if (!cmd.IsConfirmed)
{
player.Confirm(cmd, "Import {0} bans from \"{1}\"?",
names.Length, Path.GetFileName(fileName));
return;
}
string reason = "(import from " + serverName + ")";
foreach (string name in names)
{
if (Player.IsValidName(name))
{
PlayerInfo info = PlayerDB.FindExact(name) ??
PlayerDB.AddUnrecognizedPlayer(name, RankChangeType.Default);
info.Ban(player, reason, true, true);
}
else
{
IPAddress ip;
if (IPAddressUtil.IsIP(name) && IPAddress.TryParse(name, out ip))
{
ip.BanIP(player, reason, true, true);
}
else
{
player.Message("Could not parse \"{0}\" as either name or IP. Skipping.", name);
}
}
}
PlayerDB.Save();
IPBanList.Save();
}