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