[mIRC Scripting] BADNICK JOIN/CHANGE - Auto-kick

Richieste per scripts, codici, software e quant'altro saranno pubblicate in questa sezione del forum. Hai una richiesta? Pubblicala qui!
Rispondi
Avatar utente
YodAlex
Messaggi: 36
Iscritto il: 25/04/2022, 13:29

Ciao di nuovo. Sto creando questa addon che controlla i join e i cambio nick:

Codice: Seleziona tutto

on !*:JOIN:#NOME_CANALE:{
  var %x = 1
  while (%x <= $lines($mircdirbnicks.txt)) {
    if ($read(bnicks.txt,%x) iswm $nick) {
      kick $chan $nick  NON SONO AMMESSI NICK STUPIDI ! 
    }
    inc %x
  }
}

ON  *!:nick: {
  var %newnick = 1 , %badwords = 1
  while ($comchan($newnick,%newnick) != $null )  {
    var %chan $v1
    if  (!$istok(#NOME_CANALE,%chan,32))  { break }
    if ($nick(%chan,$me,~&@%) || !$nick(%chan,$newnick,~&@%)) {
      while (%badwords <= $lines(bnicks.txt)) {
        if ($read(bnicks.txt,%badwords) iswm $newnick) {
          kick $chan $nick  NON SONO AMMESSI NICK STUPIDI ! 
        }
        inc %badwords
      }
    }
    inc %newnick
  }
}
Ho creato un file bnicks.txt dove ho inserito (uno per linea ed in ordine alfabetico) una serie di nicks non ammessi.
Se un utente ENTRA nel canale specificato con un nick non ammesso, viene kikkato. E questa parte funziona.

Se un utente entra con un nick ammesso , ma poi LO CAMBIA con un nick non ammesso, dovrebbe venire kikkato.
E questo non funziona.
Non trovo l'errore.
Ogni aiuto è gradito.
Grazie
"E' meglio tacere e dare l'impressione di essere scemi , piuttosto che aprire la bocca e togliere ogni dubbio."
Avatar utente
Dragone2
Amministratore
Messaggi: 145
Iscritto il: 30/07/2014, 18:35
Località: Italia
Contatta:

Ciao,
ci sono un po' di cosette che non tornano, perché l'evento ON NICK non ha $chan come parametro popolato, in quanto non necessariamente è un canale specifico, ma può essere un insieme (anche vuoto, se non sei in nessun canale) di canali.

Ho riscritto quella parte così:

Codice: Seleziona tutto

on *:NICK:{
  var %i = 1, %badwords = 1
  while (%i <= $comchan($newnick,0)) {
    if ($comchan($newnick,%i) != #NOME_CANALE) { break }
    if ($newnick !isop $comchan($newnick,%i)) && ($newnick !ishop $comchan($newnick,%i)) && ($newnick != $me) {

      while (%badwords <= $lines(bnicks.txt)) {
        if ($read(bnicks.txt,%badwords) iswm $newnick) {

          kick $comchan($newnick,%i) $nick  NON SONO AMMESSI NICK STUPIDI ! 
        }
        inc %badwords
      }
    }
    inc %i
  }
}
In questo modo, il primo ciclo fa un controllo su tutti i canali in comune con l'utente che ha cambiato nick. Se l'utente poi risulta essere su #NOME_CANALE, allora interviene, altrimenti salta il canale.
L'altra condizione è il controllo per verificare che il nuovo nickname non sia un operatore, un halfop o che il nick non sia sé stesso.
Dopodiché si entra nel ciclo di lettura del file di testo che hai definito e qui l'unica cosa da sistemare era di utilizzare l'identificatore $comchan per espellere il nickname in questione.

A me dava errore per come avevi fatto il controllo per owner, voice ecc., quindi l'ho riscritto con i controlli standard di mIRC ma volendo potresti valutare di variarlo.

Ho verificato e funziona come atteso.

Saluti
Immagine
Avatar utente
YodAlex
Messaggi: 36
Iscritto il: 25/04/2022, 13:29

Dragone2 ha scritto: 30/04/2025, 17:34 Ciao,
ci sono un po' di cosette che non tornano, perché l'evento ON NICK non ha $chan come parametro popolato, in quanto non necessariamente è un canale specifico, ma può essere un insieme (anche vuoto, se non sei in nessun canale) di canali.

Ho riscritto quella parte così:

Codice: Seleziona tutto

on *:NICK:{
  var %i = 1, %badwords = 1
  while (%i <= $comchan($newnick,0)) {
    if ($comchan($newnick,%i) != #NOME_CANALE) { break }
    if ($newnick !isop $comchan($newnick,%i)) && ($newnick !ishop $comchan($newnick,%i)) && ($newnick != $me) {

      while (%badwords <= $lines(bnicks.txt)) {
        if ($read(bnicks.txt,%badwords) iswm $newnick) {

          kick $comchan($newnick,%i) $nick  NON SONO AMMESSI NICK STUPIDI ! 
        }
        inc %badwords
      }
    }
    inc %i
  }
}
In questo modo, il primo ciclo fa un controllo su tutti i canali in comune con l'utente che ha cambiato nick. Se l'utente poi risulta essere su #NOME_CANALE, allora interviene, altrimenti salta il canale.
L'altra condizione è il controllo per verificare che il nuovo nickname non sia un operatore, un halfop o che il nick non sia sé stesso.
Dopodiché si entra nel ciclo di lettura del file di testo che hai definito e qui l'unica cosa da sistemare era di utilizzare l'identificatore $comchan per espellere il nickname in questione.

A me dava errore per come avevi fatto il controllo per owner, voice ecc., quindi l'ho riscritto con i controlli standard di mIRC ma volendo potresti valutare di variarlo.

Ho verificato e funziona come atteso.

Saluti

Tempestivo ed efficace come sempre. Grazie.
"E' meglio tacere e dare l'impressione di essere scemi , piuttosto che aprire la bocca e togliere ogni dubbio."
Rispondi