private void Handle_Chat_Mod_Operation_Client_Message( CChatModOperationMessage mod_msg, EPersistenceID player_id )
        {
            CServerChatChannel channel = Get_Channel_By_Channel_ID( mod_msg.ChannelID );
            if ( channel == null )
            {
                Send_Message_To_Player( new CChatModOperationErrorMessage( EChatModOperationError.Unknown_Channel ), player_id );
                return;
            }

            if ( channel.Moderator != player_id )
            {
                Send_Message_To_Player( new CChatModOperationErrorMessage( EChatModOperationError.Not_Moderator ), player_id );
                return;
            }

            EPersistenceID target_id = Get_Persistence_ID_By_Name( mod_msg.PlayerName );
            if ( target_id == EPersistenceID.Invalid || !channel.Is_Member( target_id ) )
            {
                Send_Message_To_Player( new CChatModOperationErrorMessage( EChatModOperationError.No_Such_Player_In_Channel ), player_id );
                return;
            }

            if ( target_id == player_id )
            {
                Send_Message_To_Player( new CChatModOperationErrorMessage( EChatModOperationError.Cannot_Do_That_To_Self ), player_id );
                return;
            }

            switch ( mod_msg.Operation )
            {
                case EChatModOperation.Gag:
                    if ( channel.Gag_Player( target_id ) )
                    {
                        Send_Notification_To_Channel( channel.ID, player_id, target_id, EChatNotification.Player_Gagged, EPersistenceID.Invalid );
                    }
                    else
                    {
                        Send_Message_To_Player( new CChatModOperationErrorMessage( EChatModOperationError.Player_Already_Gagged ), player_id );
                    }
                    break;

                case EChatModOperation.Ungag:
                    if ( channel.Ungag_Player( target_id ) )
                    {
                        Send_Notification_To_Channel( channel.ID, player_id, target_id, EChatNotification.Player_Ungagged, EPersistenceID.Invalid );
                    }
                    else
                    {
                        Send_Message_To_Player( new CChatModOperationErrorMessage( EChatModOperationError.Player_Not_Gagged ), player_id );
                    }
                    break;

                case EChatModOperation.Kick:
                    Remove_From_Channel( target_id, channel.ID, ELeftChannelReason.Kicked_By_Mod, channel.Moderator );
                    break;

                case EChatModOperation.Transfer_Moderator:
                    if ( channel.Transfer_Moderator( target_id ) )
                    {
                        Send_Notification_To_Channel( channel.ID, player_id, target_id, EChatNotification.New_Moderator, EPersistenceID.Invalid );
                    }
                    else
                    {
                        Send_Message_To_Player( new CChatModOperationErrorMessage( EChatModOperationError.Unable_To_Transfer_Moderator ), player_id );
                    }
                    break;
            }
        }
 private void Handle_Chat_Ungag_Command( CChatUngagSlashCommand command )
 {
     CClientChatChannel ungag_channel = Instance.Infer_Channel_From_String( command.ChannelIdentifier );
     if ( ungag_channel != null )
     {
         CChatModOperationMessage mod_op_msg = new CChatModOperationMessage( ungag_channel.ChannelID, EChatModOperation.Ungag, command.PlayerName );
         Send_Message_To_Chat_Server( mod_op_msg );
     }
     else
     {
         CClientResource.Output_Text( EClientTextID.Client_Chat_Unknown_Channel );
     }
 }