private static void Tempban( Player player, Command cmd )
{
string targetName = cmd.Next();
string timeString = cmd.Next();
TimeSpan duration;
try {
if ( String.IsNullOrEmpty( targetName ) || String.IsNullOrEmpty( timeString ) ||
!timeString.TryParseMiniTimespan( out duration ) || duration <= TimeSpan.Zero ) {
CdTempBan.PrintUsage( player );
return;
}
} catch ( OverflowException ) {
player.Message( "TempBan: Given duration is too long." );
return;
}
// find the target
PlayerInfo target = PlayerDB.FindPlayerInfoOrPrintMatches( player, targetName );
if ( target == null )
return;
if ( target.Name == player.Name ) {
player.Message( "&WYou cannot tempban yourself" );
return;
}
if ( target.IsBanned ) {
player.Message( "&WPlayer is already banned" );
return;
}
// check permissions
if ( !player.Can( Permission.BanIP, target.Rank ) ) {
player.Message( "You can only Temp-Ban players ranked {0}&S or lower.",
player.Info.Rank.GetLimit( Permission.TempBan ).ClassyName );
player.Message( "{0}&S is ranked {1}", target.ClassyName, target.Rank.ClassyName );
return;
}
// do the banning
if ( target.Tempban( player.Name, duration ) ) {
string reason = cmd.NextAll();
try {
target.Ban( player, "You were Banned for " + timeString, false, true );
DateTime UnbanTime = DateTime.UtcNow;
UnbanTime = UnbanTime.AddSeconds( duration.ToSeconds() );
target.BannedUntil = UnbanTime;
target.IsTempbanned = true;
Server.Message( "&SPlayer {0}&S was Banned by {1}&S for {2}",
target.ClassyName, player.ClassyName, duration.ToMiniString() );
if ( reason.Length > 0 )
Server.Message( "&Wreason: {0}", reason );
Logger.Log( LogType.UserActivity, "Player {0} was Banned by {1} for {2}",
target.Name, player.Name, duration.ToMiniString() );
} catch ( PlayerOpException ex ) {
player.Message( ex.MessageColored );
}
} else {
player.Message( "Player {0}&S is already Banned by {1}&S for {2:0} more.",
target.ClassyName,
target.BannedBy,
target.BannedUntil.Subtract( DateTime.UtcNow ).ToMiniString() );
}
}