fCraft.ModerationCommands.Tempban C# (CSharp) Method

Tempban() private static method

private static Tempban ( Player player, Command cmd ) : void
player Player
cmd Command
return void
        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() );
            }
        }