NickTRacker - mIRC Snippet | PremiumChat.ro Back

NickTRacker

;# Homepage:                                                                                                                                                           
;# http://hawkee.com/snippet/1368/                                                                                                                                      

on *:start: {
  nicktracker
  delnumnick 
}


alias delnumnick {
  var %thelounge = $hfind(TABLE,thelounge*, 0, w).data
  var %kiwi = $hfind(TABLE,kiwi*, 0, w).data
  while (%thelounge) {
    hdel $hfind(TABLE,thelounge*, %thelounge, w).data
    dec %thelounge
  }
  goto goon
  :goon
  while (%kiwi) {
    if ($hget((TABLE,kiwi*, 0, w).data)(TABLE,kiwi*, %kiwi, w)) 
    hdel $hfind(TABLE,kiwi*, %kiwi, w).data
    dec %kiwi
  }
  echo $color(other text) -s $+($chr(3),$color(info).dd) Nicks: thelounge Nicknamen wurden entfernt! 
  echo $color(other text) -s $+($chr(3),$color(info).dd) Nicks: Kiwi Nicknamen wurden entfernt!   
}

; Funktion um zu prüfen, ob es sich um einen Nickban handelt
alias isNickBan {
  if (!$1) return $false
  var %banmask = $1

  ; Prüfen ob es ein reiner Nickban ist (nur Nickname ohne ! oder @)
  if (!$regex(%banmask,/[!@]/)) return $true

  ; Prüfen ob es ein Nickban in der Form nick!*@* ist
  if ($regex(%banmask,/^([^!]+)!\*@\*$/)) return $true

  return $false
}

on ^*:join:#: {
  if (!$hget(join)) nicktracker
  hinc join $address($nick,2) $+ $chan $+ .num

  ; Bann-Check und erweiterte Join-Nachricht
  var %baninfo = $getBanInfo($address($nick,2))
  var %bantext

  if (%baninfo) {
    var %bancount = $gettok(%baninfo,1,32)
    var %lastban = $gettok(%baninfo,2,32)
    var %isNickBan = $gettok(%baninfo,3,32)
    var %bandiff = $calc($ctime - %lastban)

    ; Nur Warnung anzeigen wenn es kein Nickban war
    if (!%isNickBan) {
      if (%bandiff < 43200) {
        ; Weniger als 12 Stunden - Rote Warnung
        %bantext = $+($chr(3),4) ⚠️ WARNUNG: Letzter Bann vor $duration(%bandiff) $+ ! Bann-Count: %bancount
      }
      else {
        ; Mehr als 12 Stunden - Normale Info
        %bantext = $+($chr(3),$color(info).dd) Letzter Bann vor $duration(%bandiff) $+ , Count: %bancount
      }
    }
  }

  if ($hget(join,$address($nick,2) $+ $chan $+ .last)) {
    if (%bantext) {
      echo $color(join) -t # ➬➩➫ $nick ( $+ $address $+ ) join # $+($chr(3),$color(ctcp).dd) joins: $+ ( $+ $hget(join,$address($nick,2) $+ $chan $+ .num) $+ ) Last: $hget(join,$address($nick,2) $+ $chan) $duration($calc($ctime - $hget(join,$address($nick,2) $+ $chan $+ .last))) %bantext
    }
    else {
      echo $color(join) -t # ➬➩➫ $nick ( $+ $address $+ ) join # $+($chr(3),$color(ctcp).dd) joins: $+ ( $+ $hget(join,$address($nick,2) $+ $chan $+ .num) $+ ) Last: $hget(join,$address($nick,2) $+ $chan) $duration($calc($ctime - $hget(join,$address($nick,2) $+ $chan $+ .last)))
    }
  }
  else {
    if (%bantext) {
      echo $color(join) -t # ➬➩➫ $nick ( $+ $address $+ ) join $chan $+($chr(3),$color(ctcp).dd) First join %bantext
    }
    else {
      echo $color(join) -t # ➬➩➫ $nick ( $+ $address $+ ) join $chan $+($chr(3),$color(ctcp).dd) First join
    }
  }

  hadd join $address($nick,2) $+ $chan $nick
  hadd join $address($nick,2) $+ $chan $+ .last $ctime
  var %a = 1,%n = 0,%b = 1, %clones
  while $hget(join,$address($nick,2) $+ .nicknum. $+ %a) {
    if ($v1 == $nick) %n = 1 
    inc %a
  }
  if (%n == 0) hadd join $address($nick,2) $+ .nicknum.  $+ %a $nick

  ; Clone-Erkennung beim Join
  while $nick(#,%b) {
    if ($nick(#,%b) != $nick) && ($address($nick(#,%b),2) == $address($nick,2)) {
      %clones = %clones $nick(#,%b)
    }
    inc %b
  }

  ; Clone-Warnung nur beim Join ausgeben
  if (%clones) {
    echo $color(info) -t $chan 👥 $nick ist ein Clone von: %clones
  }

  haltdef
}

on *:nick: {
  if (!$hget(join)) nicktracker
  var %a = 1,%n = 0
  while $hget(join,$address($newnick,2) $+ .nicknum. $+ %a) {
    if ($v1 == $newnick) %n = 1 
    inc %a
  }
  if (%n == 0) hadd join $address($newnick,2) $+ .nicknum. $+ %a $newnick
}

; Automatische Ban-Erkennung
on *:ban:#: {
  if (!$hget(join)) nicktracker

  ; Ban-Counter für die Hostmask erhöhen
  hinc join $banmask $+ .bancount

  ; Letzte Ban-Zeit speichern
  hadd join $banmask $+ .lastban $ctime

  ; Prüfen und speichern ob es ein Nickban ist
  hadd join $banmask $+ .isnickban $isNickBan($banmask)
}

; Erkennung von manuellen /mode +b Befehlen
raw 367:*: {
  ; Beim Abrufen der Banliste (z.B. /mode #channel +b)  
  ; Format: :server 367 nick #channel banmask banner time
  if (!$hget(join)) nicktracker

  var %chan = $3
  var %banmask = $4
  var %banner = $5
  var %bantime = $6

  ; Nur verarbeiten wenn wir eine gültige Zeit haben und es noch nicht erfasst wurde
  if (%bantime && !$hget(join,%banmask $+ .importtime)) {
    hinc join %banmask $+ .bancount
    hadd join %banmask $+ .lastban %bantime
    hadd join %banmask $+ .importtime $ctime
    hadd join %banmask $+ .isnickban $isNickBan(%banmask)
  }
}

; Input-Handler für eigene Ban-Befehle
on *:input:#: {
  if (!$hget(join)) nicktracker

  ; Erkennung von /ban Befehlen
  if ($regex($1-,/^\/ban\s+(.+)/i)) {
    var %target = $regml(1)
    var %hostmask = $iif($address(%target,2),$address(%target,2),%target)

    ; Ban-Counter erhöhen
    hinc join %hostmask $+ .bancount
    hadd join %hostmask $+ .lastban $ctime
    hadd join %hostmask $+ .isnickban $isNickBan(%hostmask)
  }

  ; Erkennung von /mode +b Befehlen
  if ($regex($1-,/^\/mode\s+[#&]\S+\s+\+.*b.*\s+(.+)/i)) {
    var %banmask = $regml(1)

    ; Ban-Counter erhöhen
    hinc join %banmask $+ .bancount
    hadd join %banmask $+ .lastban $ctime
    hadd join %banmask $+ .isnickban $isNickBan(%banmask)
  }
}

; Bann-Statistik Funktionen
alias addBan {
  if (!$1) {
    echo $color(other text) -ag [BANN-TRACKER] Verwendung: /addBan <host>
    return
  }

  if (!$hget(join)) nicktracker

  ; Bann-Counter erhöhen
  hinc join $1 $+ .bancount

  ; Letzte Bann-Zeit speichern
  hadd join $1 $+ .lastban $ctime

  ; Prüfen ob es ein Nickban ist
  hadd join $1 $+ .isnickban $isNickBan($1)

  var %bancount = $hget(join,$1 $+ .bancount)

  echo $color(highlight) -ag [BANN-TRACKER] $+($chr(3),$color(other text).dd) Host $+($chr(3),$color(nick).dd) $1 $+($chr(3),$color(other text).dd) wurde gebannt! $+($chr(3),$color(info).dd) (Bann #%bancount)
}

alias getBanInfo {
  if (!$1) return
  if (!$hget(join)) return

  var %bancount = $hget(join,$1 $+ .bancount)
  var %lastban = $hget(join,$1 $+ .lastban)
  var %isNickBan = $hget(join,$1 $+ .isnickban)

  if (%bancount && %lastban) {
    return %bancount %lastban %isNickBan
  }
  return $null
}

alias showBanStats {
  if (!$1) {
    echo $color(other text) -ag [BANN-STATS] Verwendung: /showBanStats <host>
    return
  }

  if (!$hget(join)) nicktracker

  var %bancount = $hget(join,$1 $+ .bancount)
  var %lastban = $hget(join,$1 $+ .lastban)
  var %isNickBan = $hget(join,$1 $+ .isnickban)

  if (%bancount) {
    if (%lastban) {
      var %timediff = $calc($ctime - %lastban)
      var %bantype = $iif(%isNickBan,Nickban,Hostban)
      echo $color(nick) -ag [BANN-STATS] $+($chr(3),$color(other text).dd) Host: $+($chr(3),$color(nick).dd) $1 $+($chr(3),$color(other text).dd) - Banns: $+($chr(3),$color(info).dd) %bancount $+($chr(3),$color(other text).dd) - Letzter Bann: $+($chr(3),$color(info).dd) $duration(%timediff) $+ her $+($chr(3),$color(other text).dd) (Typ: %bantype $+ )
    }
    else {
      echo $color(nick) -ag [BANN-STATS] $+($chr(3),$color(other text).dd) Host: $+($chr(3),$color(nick).dd) $1 $+($chr(3),$color(other text).dd) - Banns: $+($chr(3),$color(info).dd) %bancount $+($chr(3),$color(other text).dd) - Keine Zeitinfo verfügbar
    }
  }
  else {
    echo $color(other text) -ag [BANN-STATS] $+($chr(3),$color(nick).dd) $1 $+($chr(3),$color(other text).dd) wurde noch nie gebannt.
  }
}

; Clone-Scanner für Channel
alias scanClones {
  if (!$1) {
    echo $color(other text) -ag [CLONE-SCANNER] Verwendung: /scanClones #channel
    return
  }

  if (!$me ison $1) {
    echo $color(other text) -ag [CLONE-SCANNER] Du bist nicht in $1
    return
  }

  var %i = 1, %cloneGroups, %foundClones = 0

  ; Alle Nicks im Channel durchgehen
  while $nick($1,%i) {
    var %currentNick = $nick($1,%i)
    var %currentHost = $address(%currentNick,2)
    var %cloneList, %j = 1

    ; Nach anderen Nicks mit gleicher Hostmask suchen
    while $nick($1,%j) {
      if ($address($nick($1,%j),2) == %currentHost) {
        %cloneList = %cloneList $nick($1,%j)
      }
      inc %j
    }

    ; Wenn mehr als 1 Nick mit gleicher Hostmask
    if ($numtok(%cloneList,32) > 1) {
      ; Prüfen ob wir diese Clone-Gruppe schon hatten
      if (!$istok(%cloneGroups,%currentHost,32)) {
        %cloneGroups = %cloneGroups %currentHost
        inc %foundClones

        ; Ältesten Clone finden (wer am längsten im Channel ist)
        var %oldestNick, %oldestTime = $ctime, %k = 1
        while $gettok(%cloneList,%k,32) {
          var %checkNick = $gettok(%cloneList,%k,32)
          var %nickTime = $nick($1,%checkNick).idle
          if (%nickTime < %oldestTime) {
            %oldestTime = %nickTime
            %oldestNick = %checkNick
          }
          inc %k
        }

        ; Clone-Info ausgeben      
        echo $color(info) -ag [CLONE-SCANNER] $+($chr(3),$color(other text).dd) $chan
        echo $color(info) -ag  Clones gefunden: $+($chr(3),$color(text).dd) %cloneList
        echo $color(info) -ag Host: $+($chr(3),$color(other text).dd) %currentHost $+($chr(3),$color(info).dd) Ältester Clone: $+($chr(3),$color(nick).dd) %oldestNick $+($chr(3),7) $+($chr(3),$color(other text).dd) (im Channel seit: $duration($nick($1,%oldestNick).idle) $+ )
        echo -ag $str(-,50)
      }
    }
    inc %i
  }

  if (%foundClones == 0) {
    echo $color(info) -ag [CLONE-SCANNER] Keine Clones in $1 gefunden.
  }
  else {
    echo $color(mode) -ag [CLONE-SCANNER]  Insgesamt %foundClones Clone-Gruppen in $1 gefunden!
  }
}

; Schneller Clone-Check für aktuellen Channel
alias clones {
  scanClones $active
}

menu channel {
  -
  Clone-Scanner
  .Clones scannen:/scanClones #
  .Schnell-Scan:/clones
}

menu nicklist,query {
  -
  Verfolgen
  .$1 Tracken:/prevnicks $1
}

alias prevnicks {
  if (!$hget(join)) $nick!user nicktracker
  var %a = 1,%s
  while $hget(join,$address($1,2) $+ .nicknum. $+ %a) {
    %s = %s $v1
    inc %a
  }    
  echo $color(nick) -ag  [NICKTRACKER] $+($chr(3),$color(other text).dd) $1 auch bekannt als: $+($chr(3),$color(nick).dd) %s $+($chr(3),$color(other text).dd) ( $+ $address($1,2) $+ )
}


alias nicktracker {
  if (!$hget(join)) hmake join 1000
  hload join join.hsh
  .timer 0 600 hsave join join.hsh
}