[mIRC Scripting] Protezione PART/JOIN FLOOD - Addon

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

Premesso che ho guardato la addon protezioni-chan.mrc di David-bot e che non sono riuscita a estrapolare la sezione JOIN FLOOD , ho creato questa addon:

Codice: Seleziona tutto

on !*:JOIN:#NOME_CANALE:{
  inc -u600 $+(%,join.,$nick,#NOME_CANALE) /nickflood }
  
  .alias nickflood
    if ($me isop #NOME_CANALE) && ($nick !isop #) && ($nick !ishop #) && ($nick !isvoice #) && ($($+(%,join.,$nick,#NOME_CANALE),2) >= 3) { 
      ban -u60 $chan $address($nick,2) 
      kick #NOME_CANALE $nick Piantala di entrare e uscire!
       }
    }
  }
Nell'esempio riportato se in 600 secondi un utente (che non sia un operatore &,@,%,+) entra ed esce 3 volte , viene kikkato e bannato.
Che ne pensate?

P.S.: Se voglio che sia attivo in due canali, mi basta aggiungere il canale separato da virgola?

Codice: Seleziona tutto

on !*:JOIN:#NOME_CANALE,#NOME_CANALE2:{
  inc -u600 $+(%,join.,$nick,#NOME_CANALE,#NOME_CANALE2) /nickflood }
  
  .alias nickflood
    if ($me isop #NOME_CANALE,#NOME_CANALE2) && ($nick !ishop #) && ($nick !isvoice #) && ($($+(%,join.,$nick,#NOME_CANALE,#NOME_CANALE2),2) >= 3) { 
      ban -u60 $chan $address($nick,2) 
      kick #NOME_CANALE,#NOME_CANALE2 $nick Piantala di entrare e uscire!
       }
    }
  }
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, dovrebbe essere ok, l'unica cosa è che se vuoi gestire più canali, dal momento che hai indicato:

Codice: Seleziona tutto

on !*:JOIN:#NOME_CANALE,#NOME_CANALE2:{
Poi nei vari if basta che usi l'identificatore $chan o #:

Codice: Seleziona tutto

if ($me isop $chan) ...
Non ho verificato l'alias ma a occhio mi sa che c'è il rischio che non funzioni, in primis perché è definito dentro il blocco on JOIN e di solito un alias ha una sezione tutta sua a parte e poi non dovrebbe avere i vari identificativi $nick e $chan disponibili... infatti sugli altri alias li passavamo come parametri che diventavano $1 e $2.

Sullo script di David-Bot è già gestita questa cosa, insieme ai vari settaggi ed è in questo punto:

Codice: Seleziona tutto

on *:JOIN:#:{
  if ($nick != $me) {
   ; Controllo se la protezione dal join flood è attiva per il canale
    if ($gettok(%protections.join. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ],1,44) == 1) {
      ; Controllo che il nick non sia un op/halfop e non sia il padrone del canale e del bot, oltre a verificare che non sia nella lista dei nick esclusi dal controllo
      if ($nick !isop $chan) && ($nick !ishop $chan) && ($nick != %owner. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ]) && ($nick != %proprietario. [ $+ [ $network ] ]) && ($istok(%protections.exception. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ],$nick,32) == $false) {
        ; Recupero i settaggi (max join, tempo)
        var %maxjoin $gettok($gettok(%protections.join. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ],2,44),1,58)
        var %time $gettok($gettok(%protections.join. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ],2,44),2,58)
        ; Imposto una variabile, che incremento di volta in volta, sulla base del numero di join effettuati dallo stesso nickname (controllo su hostname)
        var %doinc inc -u $+ %time $chr(37) $+ joinflood. [ $+ [ $address($nick,2) ] ] [ $+ . ] [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ]
        %doinc
        ; Mando un avviso se il limite è stato raggiunto
        if (%joinflood. [ $+ [ $address($nick,2) ] ] [ $+ . ] [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ] == %maxjoin) {
          notice $nick Smetti di uscire e rientrare o verrai bannato! - %logo
        }
       ; Espello tutti i cloni dal canale relativi al nickname e imposto un ban di 300s
        if (%joinflood. [ $+ [ $address($nick,2) ] ] [ $+ . ] [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ] > %maxjoin) {
          kickclones $nick $chan
          ban -ku300 $chan $nick 2 Join Flood - %logo
          unset %joinflood. [ $+ [ $address($nick,2) ] ] [ $+ . ] [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ]
        }
      }
    }
  }
Comunque, come già ti dicevo, se caricassi quello script completo che già ti avevo fornito o utilizzasi David-Bot, molte di queste protezioni generiche sarebbero già incluse e per-configurate di default, con valori che puoi personalizzare per canale e anche avere la possibilità di mettere delle eccezioni per nickname.
Immagine
Avatar utente
YodAlex
Messaggi: 36
Iscritto il: 25/04/2022, 13:29

Sullo script di David-Bot è già gestita questa cosa, insieme ai vari settaggi ed è in questo punto:

Codice: Seleziona tutto

on *:JOIN:#:{
  if ($nick != $me) {
   ; Controllo se la protezione dal join flood è attiva per il canale
    if ($gettok(%protections.join. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ],1,44) == 1) {
      ; Controllo che il nick non sia un op/halfop e non sia il padrone del canale e del bot, oltre a verificare che non sia nella lista dei nick esclusi dal controllo
      if ($nick !isop $chan) && ($nick !ishop $chan) && ($nick != %owner. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ]) && ($nick != %proprietario. [ $+ [ $network ] ]) && ($istok(%protections.exception. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ],$nick,32) == $false) {
        ; Recupero i settaggi (max join, tempo)
        var %maxjoin $gettok($gettok(%protections.join. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ],2,44),1,58)
        var %time $gettok($gettok(%protections.join. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ],2,44),2,58)
        ; Imposto una variabile, che incremento di volta in volta, sulla base del numero di join effettuati dallo stesso nickname (controllo su hostname)
        var %doinc inc -u $+ %time $chr(37) $+ joinflood. [ $+ [ $address($nick,2) ] ] [ $+ . ] [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ]
        %doinc
        ; Mando un avviso se il limite è stato raggiunto
        if (%joinflood. [ $+ [ $address($nick,2) ] ] [ $+ . ] [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ] == %maxjoin) {
          notice $nick Smetti di uscire e rientrare o verrai bannato! - %logo
        }
       ; Espello tutti i cloni dal canale relativi al nickname e imposto un ban di 300s
        if (%joinflood. [ $+ [ $address($nick,2) ] ] [ $+ . ] [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ] > %maxjoin) {
          kickclones $nick $chan
          ban -ku300 $chan $nick 2 Join Flood - %logo
          unset %joinflood. [ $+ [ $address($nick,2) ] ] [ $+ . ] [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ]
        }
      }
    }
  }
Non ho trovato dove si impostano i parametri. Non del proprietario, parlo del numero dei join consentiti e il tempo.


In

Codice: Seleziona tutto

      ; Controllo che il nick non sia un op/halfop e non sia il padrone del canale e del bot, oltre a verificare che non sia nella lista dei nick esclusi dal controllo
      if ($nick !isop $chan) && ($nick !ishop $chan) && ($nick != %owner. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ]) && ($nick != %proprietario. [ $+ [ $network ] ]) && ($istok(%protections.exception. [ $+ [ $chan ] ] [ $+ . ] [ $+ [ $network ] ],$nick,32) == $false)
sono inclusi anche i & ?
"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:

Le impostazioni le setti con:
!protezione join ACCESSI:SECONDI
Di default è attivo con 5 accessi in 60 secondi, ovvero:

Codice: Seleziona tutto

!protezione join 5:60
Puoi consultare l'aiuto con:
!protezione join
Gli & e ~ sono sempre inclusi, in quanto hanno sempre anche il grado di operatore (@). Infatti il check isop copre: ~, & e @
Immagine
Avatar utente
YodAlex
Messaggi: 36
Iscritto il: 25/04/2022, 13:29

Di default è attivo con 5 accessi in 60 secondi, ovvero:

Codice: Seleziona tutto

!protezione join 5:60
Puoi consultare l'aiuto con:
!protezione join
Mah...ho provato a scrivere entrambe i comandi e non succede nulla di nulla. Niente messaggi di conferma, neanche in status e niente messaggi di errore. Ovviamente ho registrato nick (Chandra) , canale #Chandra ed impostato proprietario...
"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:

Hai provato con una copia di David-Bot pulita? Comunque devi essere op nel canale e il bot dev'essere op
Immagine
Avatar utente
YodAlex
Messaggi: 36
Iscritto il: 25/04/2022, 13:29

Dragone2 ha scritto: 05/05/2025, 14:18 Hai provato con una copia di David-Bot pulita? Comunque devi essere op nel canale e il bot dev'essere op
Ok. Funziona ^^

Una domanda....ma in un canale dove sono helper ( % ) e non op ( @ ) ,ma sono autorizzata ad usare la protezine , funziona?
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:

Dovrebbe funzionare anche con % halfop
Immagine
Avatar utente
YodAlex
Messaggi: 36
Iscritto il: 25/04/2022, 13:29

Dragone2 ha scritto: 05/05/2025, 17:25 Dovrebbe funzionare anche con % halfop
Nelle eccezioni

Codice: Seleziona tutto

  if ($nick == $me) || ($nick isop %chan) { halt } 
  
si possono inserire le host? Tipo...

Codice: Seleziona tutto

  if ($nick == $me) || ($nick isop %chan) || ($nick == *!*@host) { halt } 
  
???
"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:

No, l'eccezione è per nickname e la gestisci con:

Codice: Seleziona tutto

!protezione eccezioni
In particolare:

Codice: Seleziona tutto

!protezione eccezioni add NICKNAME
Se vuoi aggiungere un host, dovresti fare il controllo con $address()
Immagine
Rispondi