All pastes #274757 Raw Edit

Seykron

public text v1 · immutable
·published 2006-12-10 23:05 UTC
rendered paste body
alias antiboth {
  ;
  ; Manipula el control anticlones/antibot
  ;

  ; $1 = { set; unset; check }, $2 = Network, $3 = Channel
  ;

  var %icnt = $readini(%se_configfile, antibot, 0)
  var %sitem = $null, %schanlst = $null
  var %chancnt = 0, %schan = $null, %snet = $null
  var %i = 1, %ind = 1


  while ( %i <= %icnt ) {
    ;
    ; Lee cada linea de la configuración antibot.
    ; Formato de linea: $network!#canal01;#canal02;#canalN
    ;
    %sitem = $readini( %se_configfile, antibot, %i )
    %snet = $gettok(%sitem, 1, 33)

    if ( $2 == %snet ) {
      ;
      ; Se encontró la red especificada.
      ;
      %schanlst = $gettok(%sitem, 2, 33)

      if ($1 == check) {
        ;
        ; Verifica si el canal especificado tiene habilitada la protección antibot.
        ;
        %chancnt = $numtok(%schanlst, 59)

        while (%ind <= %chancnt) {
          %schan = $gettok(%schanlst, %ind, 59)

          if ($3 == %schan ) {
            return 1
          }

          inc %ind

        }

        return 0
      }
      elseif ( ($1 == set) || ($1 == unset) ) {
        if ( $1 == unset ) {
          ;
          ; Elimina la protección del canal especificado.
          ;
          %schanlst = $remtok(%schanlst, $3, 1, 59)
        }
        else {
          ;
          ; Agrega la protección del canal especificado.
          ;
          %schanlst = $addtok(%schanlst, $3, 59)
        }

        %sitem = %snet $+ ! $+ %schanlst

        ;
        ; Actualiza los datos en el archivo de configuración.
        ;
        writeini %se_configfile antibot %i %sitem

        return 1
      }

    }

    inc %i
  }

  if ( $1 == set ) {
    ;
    ; Agrega la red en el caso de que todavía no exista en la config.
    ;
    %sitem = $2 $+ ! $+ $3
    iniadd %se_configfile antibot  %sitem

    return 1
  }
  else {
    return 0
  }
}