[mIRC Scripting] ADDON BADWORDS CON ECCEZIONI

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: 43
Iscritto il: 25/04/2022, 13:29

Salve.
Sto apportando modifiche a questa addon che kikka/banna un utente se usa parole contenute in un file badwords.txt.
In particolare vorrei aggiungere una stringa in modo che alcune parole contenute in una frase siano escluse. Queste parole sono contenute in un file eccezioni.txt.

Ad esempio:
-Se una frase contiene CESSO , si viene kikkati. Ma la parola CESSO è contenuta anche in SUCCESSO. Per cui la parola SUCCESSO viene messa nelle eccezioni. Ma un utente potrebbe scrivere "SEI_UN_CESSO_SPORCO", per cui tra le badwords aggiungo *CESS* (così copre il anche plurale). Ogni parola che contiene CESSO/I ma non è volgare, viene aggiunta alle eccezioni (ad esempio sucCESSivamente...)
-Oppure se uno spamma con un http o https , deve essere kikkato/bannato , per cui aggiungo *HTTP* alle badwords , ma nelle eccezioni aggiungo ad esempio *http://www.miositoweb* , oppure *https://www.mioforum* (non sto spammado, quei link sono falsi)

========================

Codice: Seleziona tutto

on *:text:*:#CHANNEL:{ 
  if ($nick !isop #) && ($nick !ishop #) && ($nick !isvoice #) { 
    $bad($1-) 
  } 
} 
alias bad { 
  var %o 1 
  while (%o <= $lines(badwords\badwords.txt)) {
  
  ;============MIA AGGIUNTA=======
if ($read(badwords\eccezioni.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { halt }
    ;===============================
    
    if ($read(badwords\badwords.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { 
      ban -u3600 #CHANNEL $address($nick,2) | write $mircdir $+ banemule.txt *Badwords* $date $time $nick ---> $address
      kick #CHANNEL $nick Eri stato avvisato! Leggi le regole e rientra, fai con calma!
      unset %bad [ $+ [ $nick ] ] 
    } 
    elseif ($read(badwords\badwords.txt, %o) iswm  $1- ) { 
      kick #CHANNEL $nick Scrivere $read(badwords\badwords.txt, %o) non è ammesso in questo canale. Questo è un avviso! Alla prossima scatta il ban!
      set %bad [ $+ [ $nick ] ] $nick 
      .timer 1 300 unset %bad [ $+ [ $nick ] ] 
    } 
    inc %o 
  } 
} 
La addon funziona, tranne per il fatto che non considera le eccezioni e kikka/banna anche le parole messe in eccezioni.txt.
Dove sbaglio?
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: 150
Iscritto il: 30/07/2014, 18:35
Località: Italia
Contatta:

Ciao, è tutto giusto, tranne la parte in cui leggi il file.

I file badwords\badwords.txt e badwords\eccezioni.txt infatti, sono differenti. Non puoi usare quindi lo stesso ciclo while, con lo stesso indice (dato dalla variabile %o) per fare confronti su entrambi i file.

Inoltre, la lunghezza del file badwords.txt potrebbe differire da quella di eccezioni.txt, a maggior ragione, dovresti procedere facendo un primo ciclo while dove leggi tutto il contenuto di eccezioni.txt. Se non trovi nulla, allora procedi:

Codice: Seleziona tutto

 
alias bad { 
   var %i 1
  while (%i <= $lines(badwords\eccezioni.txt)) {
  
    if ($read(badwords\eccezioni.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { halt }
    inc %i
  }

  var %o 1 
  while (%o <= $lines(badwords\badwords.txt)) {
  
    if ($read(badwords\badwords.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { 
      ban -u3600 #CHANNEL $address($nick,2) | write $mircdir $+ banemule.txt *Badwords* $date $time $nick ---> $address
      kick #CHANNEL $nick Eri stato avvisato! Leggi le regole e rientra, fai con calma!
      unset %bad [ $+ [ $nick ] ] 
    } 
    elseif ($read(badwords\badwords.txt, %o) iswm  $1- ) { 
      kick #CHANNEL $nick Scrivere $read(badwords\badwords.txt, %o) non è ammesso in questo canale. Questo è un avviso! Alla prossima scatta il ban!
      set %bad [ $+ [ $nick ] ] $nick 
      .timer 1 300 unset %bad [ $+ [ $nick ] ] 
    } 
    inc %o 
  } 
}
Non l'ho testato ma dovrebbe andare. Se non funziona, accertati di sostituire { halt } con una variabile, tipo { set %fermaban 1 } e poi aggiungi un controllo, tipo if (%fermaban != 1) { ... }. In teoria halt da solo dovrebbe bastare, ma a seconda di che versioni di mIRC usi ci sta che vada comunque avanti.

Ciao
Immagine
Avatar utente
YodAlex
Messaggi: 43
Iscritto il: 25/04/2022, 13:29

Dragone2 ha scritto: 03/06/2025, 15:11 Ciao, è tutto giusto, tranne la parte in cui leggi il file.

I file badwords\badwords.txt e badwords\eccezioni.txt infatti, sono differenti. Non puoi usare quindi lo stesso ciclo while, con lo stesso indice (dato dalla variabile %o) per fare confronti su entrambi i file.

Inoltre, la lunghezza del file badwords.txt potrebbe differire da quella di eccezioni.txt, a maggior ragione, dovresti procedere facendo un primo ciclo while dove leggi tutto il contenuto di eccezioni.txt. Se non trovi nulla, allora procedi:

Codice: Seleziona tutto

 
alias bad { 
   var %i 1
  while (%i <= $lines(badwords\eccezioni.txt)) {
  
    if ($read(badwords\eccezioni.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { halt }
    inc %i
  }

  var %o 1 
  while (%o <= $lines(badwords\badwords.txt)) {
  
    if ($read(badwords\badwords.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { 
      ban -u3600 #CHANNEL $address($nick,2) | write $mircdir $+ banemule.txt *Badwords* $date $time $nick ---> $address
      kick #CHANNEL $nick Eri stato avvisato! Leggi le regole e rientra, fai con calma!
      unset %bad [ $+ [ $nick ] ] 
    } 
    elseif ($read(badwords\badwords.txt, %o) iswm  $1- ) { 
      kick #CHANNEL $nick Scrivere $read(badwords\badwords.txt, %o) non è ammesso in questo canale. Questo è un avviso! Alla prossima scatta il ban!
      set %bad [ $+ [ $nick ] ] $nick 
      .timer 1 300 unset %bad [ $+ [ $nick ] ] 
    } 
    inc %o 
  } 
}
Non l'ho testato ma dovrebbe andare. Se non funziona, accertati di sostituire { halt } con una variabile, tipo { set %fermaban 1 } e poi aggiungi un controllo, tipo if (%fermaban != 1) { ... }. In teoria halt da solo dovrebbe bastare, ma a seconda di che versioni di mIRC usi ci sta che vada comunque avanti.

Ciao
Ora provo. Versione mIRC 7.81
E -come sempre- preciso e puntuale.
Grazie
"E' meglio tacere e dare l'impressione di essere scemi , piuttosto che aprire la bocca e togliere ogni dubbio."
Avatar utente
YodAlex
Messaggi: 43
Iscritto il: 25/04/2022, 13:29

Dragone2 ha scritto: 03/06/2025, 15:11

Codice: Seleziona tutto

 
alias bad { 
   var %i 1
  while (%i <= $lines(badwords\eccezioni.txt)) {
  
    if ($read(badwords\eccezioni.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { halt }
    inc %i
  }

  var %o 1 
  while (%o <= $lines(badwords\badwords.txt)) {
  
    if ($read(badwords\badwords.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { 
      ban -u3600 #CHANNEL $address($nick,2) | write $mircdir $+ banemule.txt *Badwords* $date $time $nick ---> $address
      kick #CHANNEL $nick Eri stato avvisato! Leggi le regole e rientra, fai con calma!
      unset %bad [ $+ [ $nick ] ] 
    } 
    elseif ($read(badwords\badwords.txt, %o) iswm  $1- ) { 
      kick #CHANNEL $nick Scrivere $read(badwords\badwords.txt, %o) non è ammesso in questo canale. Questo è un avviso! Alla prossima scatta il ban!
      set %bad [ $+ [ $nick ] ] $nick 
      .timer 1 300 unset %bad [ $+ [ $nick ] ] 
    } 
    inc %o 
  } 
}
Giusto per testare, ho inserito *FICO* nel file bdwords.txt e *MAGNIFICO* nel file eccezioni.txt.
Poi ho corretto così ( con { halt } non funzionava ):

Codice: Seleziona tutto

on *:text:*:#CANALE:{ 
  if ($nick !isop #) && ($nick !ishop #) && ($nick !isvoice #) { 
    $bad($1-) 
  } 
} 

alias bad { 
  var %i 1
  while (%i <= $lines(badwords\eccezioni.txt)) {
    if ($read(badwords\eccezioni.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { set %fermaban 1 }
    inc %i
  }

  var %o 1 
  while (%o <= $lines(badwords\badwords.txt)) {
    if(%fermaban != 1) && ($read(badwords\badwords.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { 
      ban -u3600 #CANALE $address($nick,2) | write $mircdir $+ banemule.txt *Badwords* $date $time $nick ---> $address
      kick #CANALE $nick Eri stato avvisato! Leggi le regole e rientra, fai con calma!
      unset %bad [ $+ [ $nick ] ] 
    } 
    elseif ($read(badwords\badwords.txt, %o) iswm  $1- ) { 
      kick #CANALE $nick Scrivere $read(badwords\badwords.txt, %o) non è ammesso in questo canale. Questo è un avviso! Alla prossima scatta il ban!
      set %bad [ $+ [ $nick ] ] $nick 
      .timer 1 300 unset %bad [ $+ [ $nick ] ] 
    } 
    inc %o 
  } 
}

Sia scrivendo FICO che MAGNIFICO si viene kikkati/bannati.
Ma...una cosa (magari dico una corbelleria) :

Codice: Seleziona tutto

alias bad { 
  var %i 1
  while (%i <= $lines(badwords\eccezioni.txt)) {
    if ($read(badwords\eccezioni.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { set %fermaban 1 }
    inc %i
  }
Quel %o ---->eccezioni.txt, %o , non deve essere ----> eccezioni.txt, %i?
"E' meglio tacere e dare l'impressione di essere scemi , piuttosto che aprire la bocca e togliere ogni dubbio."
Avatar utente
YodAlex
Messaggi: 43
Iscritto il: 25/04/2022, 13:29

Io ho modificato (leggermente) così:

Codice: Seleziona tutto


    if ($read(badwords\eccezioni.txt, %i) iswm $1- ) { halt }

Così mi dava problemi:

Codice: Seleziona tutto

    if ($read(badwords\eccezioni.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { halt }
    
In particolare kikkava comunque una parola inserita nelle eccezioni in quanto settava comunque la variabile %bad.
Ora viene settata solo al kick ed eliminata al ban.
Mi pare funzioni.
Grazie mille.
P.S.: Se trovi che le modifiche non sian corrette, come sempre ogni aiuto è gradito.
"E' meglio tacere e dare l'impressione di essere scemi , piuttosto che aprire la bocca e togliere ogni dubbio."
Avatar utente
Dragone2
Amministratore
Messaggi: 150
Iscritto il: 30/07/2014, 18:35
Località: Italia
Contatta:

No, è giusto, mi era sfuggita la %o perché non ho testato ahahah
Immagine
Rispondi