[mIRC Scripting] Avvisi + kick in base alla lunghezza del nickname e all'uso di maiuscole

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

Buongiorno. Ho questa addon: al join e al cambionick, dovrebbe controllare l'utente e in caso di maiuscole superiori al 30% o nick inferiore ai 3 caratteri, dovrebbe inviare gli avvertimenti. Se il nick non viene modificato entro 60 secondi, il nick viene kikkato

Codice: Seleziona tutto


on @*:join:#channel:if (($len($nick) < 3) || ($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) > 30)) badnick_alias #channel $nick

on *:nick:if (($len($nick) < 3) || ($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) > 30)) && ($me isop #channel) && ($newnick ison #channel) badnick_alias #channel $newnick

alias badnick_alias {
  var %chan $1 , %nick $2
  if ((MindUser* !iswm %nick) || (%nick !ison %chan)) return
  if (!$3) {
    .notice %nick WARN
    .timer 1  30 badnick_alias $unsafe($1-2  30)
    .timer 1  45 badnick_alias $unsafe($1-2  45)
    .timer 1 60 badnick_alias $unsafe($1-2 60)
    return
  }
  elseif ($3 == 30) /notice %nick SECOND WARN
  elseif ($3 == 45) /notice %nick LAST WARN
  elseif ($3 == 60) kick %chan %nick KICK
}
Non funziona. Suggerimenti?
P.S.: Testata su mIRC 6.35 e 7.65
Grazie
Avatar utente
Dragone2
Amministratore
Messaggi: 134
Iscritto il: 30/07/2014, 18:35
Località: Italia
Contatta:

Ciao,
Assicurati di cambiare tutte le occorrenze di

Codice: Seleziona tutto

#channel
con il canale su cui vuoi che lo script agisca.

Dopodiché, l'unico problema che vedo, è su:

Codice: Seleziona tutto

if ((MindUser* !iswm %nick) || (%nick !ison %chan)) return
Il controllo

Codice: Seleziona tutto

(MindUser* !iswm %nick) 
fatto in questo modo, in quel punto, equivale a dire: "Se il nickname non è MindUser<qualcosa>" fermati qui e non fare altro.

Ragion per cui diventa tutto completamente inutile e lo script non agisce.

Se vuoi escludere i nick che contengono MindUser, devi togliere quel "!":

Codice: Seleziona tutto

if ((MindUser* iswm %nick) || (%nick !ison %chan)) return
Fatto così, a me funzionerebbe.

Saluti
Immagine
YodAlex
Messaggi: 23
Iscritto il: 25/04/2022, 13:29

Dragone2 ha scritto: 06/03/2025, 18:04 Ciao,
Assicurati di cambiare tutte......
La riga:

Codice: Seleziona tutto

if ((MindUser* !iswm %nick) || (%nick !ison %chan)) return
in effetti non serve a nulla, si può eliminare (credo). Il controllo non va fatto su quello. Le occorrenze #channel le ho cambiate, non le ho scritte per non spammare
YodAlex
Messaggi: 23
Iscritto il: 25/04/2022, 13:29

Comunque non va :-(
Avatar utente
Dragone2
Amministratore
Messaggi: 134
Iscritto il: 30/07/2014, 18:35
Località: Italia
Contatta:

L'ho risistemato così, a me funziona, ero op su #testing e sono entrato con il nick "a". Dopo 1 minuto e dopo avermi dato 3 avvisi, mi ha espulso:

Codice: Seleziona tutto

on *:JOIN:#testing:{
  if (($len($nick) < 3) || ($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) > 30)) { /badnick_alias $chan $nick }
}

on *:nick:if (($len($nick) < 3) || ($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) > 30)) && ($me isop #testing) && ($newnick ison #testing) badnick_alias $chan $newnick

alias badnick_alias {
  var %chan $1 , %nick $2
  if (%nick !ison %chan) return
  if (!$3) {
    notice %nick Cambia nickname o verrai espulso!
    .timer 1 30 badnick_alias %chan %nick 30
    .timer 1 45 badnick_alias %chan %nick 45
    .timer 1 60 badnick_alias %chan %nick 60
    return
  }
  elseif ($3 == 30) notice %nick Secondo avviso: Cambia nickname o verrai espulso!
  elseif ($3 == 45) notice %nick Ultimo avviso: Cambia nickname o verrai espulso!
  elseif ($3 == 60) kick %chan %nick Cambia nickname!
}
Questa versione dovrebbe essere più compatibile con mIRC recenti. Io l'ho provata su mIRC 7.79 (ultima versione rilasciata).

Se non ti funziona, prova a cambiare versione di mIRC (oppure ci sta che qualche script che hai caricato crei conflitti).
Immagine
YodAlex
Messaggi: 23
Iscritto il: 25/04/2022, 13:29

Dragone2 ha scritto: 07/03/2025, 18:10 L'ho risistemato così, a me funziona, ero op su #testing e sono entrato con il nick "a". Dopo 1 minuto e dopo avermi dato 3 avvisi, mi ha espulso:

Codice: Seleziona tutto

on *:JOIN:#testing:{
  if (($len($nick) < 3) || ($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) > 30)) { /badnick_alias $chan $nick }
}

on *:nick:if (($len($nick) < 3) || ($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) > 30)) && ($me isop #testing) && ($newnick ison #testing) badnick_alias $chan $newnick

alias badnick_alias {
  var %chan $1 , %nick $2
  if (%nick !ison %chan) return
  if (!$3) {
    notice %nick Cambia nickname o verrai espulso!
    .timer 1 30 badnick_alias %chan %nick 30
    .timer 1 45 badnick_alias %chan %nick 45
    .timer 1 60 badnick_alias %chan %nick 60
    return
  }
  elseif ($3 == 30) notice %nick Secondo avviso: Cambia nickname o verrai espulso!
  elseif ($3 == 45) notice %nick Ultimo avviso: Cambia nickname o verrai espulso!
  elseif ($3 == 60) kick %chan %nick Cambia nickname!
}
Questa versione dovrebbe essere più compatibile con mIRC recenti. Io l'ho provata su mIRC 7.79 (ultima versione rilasciata).

Se non ti funziona, prova a cambiare versione di mIRC (oppure ci sta che qualche script che hai caricato crei conflitti).
L'ho provato su una 7.79 vergine (quindi senza nessuna altra addon/script caricata).
Gli avvisi funzionano, ma se un utente cambia il nick e lo mette "in regola" viene comunque kikkato. Sono entrato col nick "m" e...

[18:24] -BOT]bot[- CAMBIA IL NICK: Max maiuscole 30% e lunghezza minima 3 caratteri alfanumerici (scrivi ad esempio /nick Sotomaior) ---> (e fin qua ci siamo)

[18:24] * m is now known as minolta <----cambio il nick con uno "regolamentare" , ma...

[18:25] -BOT]bot[- CAMBIA IL NICK: Max maiuscole 30% e lunghezza minima 3 caratteri alfanumerici (scrivi ad esempio /nick Sotomaior)
[18:25] -BOT]bot[- Secondo avviso, CAMBIA IL NICK : Max maiuscole 30% e lunghezza minima 3 caratteri alfanumerici (scrivi ad esempio /nick Sotomaior)
[18:25] -BOT]bot[- Ultimo avviso, CAMBIA IL NICK : Max maiuscole 30% e lunghezza minima 3 caratteri alfanumerici (scrivi ad esempio /nick Sotomaior)
[18:26] * You were kicked byBOT]bot[ (Eri stato avvisato, CAMBIA IL NICK : Max maiuscole 30% e lunghezza minima 3 caratteri alfanumerici (scrivi ad esempio /nick Sotomaior))

e leggendo su altro pc:

* minolta was kicked by `Chandra]bot[ (Eri stato avvisato, CAMBIA IL NICK : Max maiuscole 30% e lunghezza minima 3 caratteri alfanumerici (scrivi ad esempio /nick Sotomaior))
Avatar utente
Dragone2
Amministratore
Messaggi: 134
Iscritto il: 30/07/2014, 18:35
Località: Italia
Contatta:

Ciao,
Il problema nasce dal fatto che sul controllo del nickname, vai a controllare il nick precedente e non quello che è stato sostituito. Conseguentemente, lo script espelle chi cambia nickname sulla base del precedente, ignorando il fatto che il nuovo nickname sia ok.

Ho risistemato lo script così:

Codice: Seleziona tutto

on *:JOIN:#testing:{
  if (($len($nick) < 3) || ($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) > 50)) { /badnick_alias $chan $nick }
}

on *:NICK:{
  if (($newnick ison #testing) && ($me isop #testing)) {
    if (($len($newnick) < 3) || ($calc($regex($newnick,/[A-Z]/g) * 100 / $len($newnick)) > 50)) { /badnick_alias #testing $newnick }
  }
}

alias badnick_alias {
  var %chan $1 , %nick $2
  if (%nick !ison %chan) return
  if (!$3) {
    notice %nick Cambia nickname o verrai espulso!
    .timer 1 30 badnick_alias %chan %nick 30
    .timer 1 45 badnick_alias %chan %nick 45
    .timer 1 60 badnick_alias %chan %nick 60
    return
  }
  elseif ($3 == 30) notice %nick Secondo avviso: Cambia nickname o verrai espulso!
  elseif ($3 == 45) notice %nick Ultimo avviso: Cambia nickname o verrai espulso!
  elseif ($3 == 60) kick %chan %nick Cambia nickname!
}
In questo modo non dovrebbe dare altri problemi. Nel caso dell'evento on *:NICK: è importante specificare il canale, in quanto quell'evento non ha a disposizione l'alias $chan o #. Mi sono limitato a togliere $nick e sostituirlo con $newnick e così funzionerebbe correttamente.
Ho alzato la percentuale a 50% perché secondo me può facilmente creare falsi positivi su nickname un po' più corti, poi valuta tu se usare 30 o 50.

Saluti
Immagine
YodAlex
Messaggi: 23
Iscritto il: 25/04/2022, 13:29

Dragone2 ha scritto: 11/03/2025, 9:37 Ciao,
Il problema nasce dal fatto che ......... (vedi codice precedente)
Saluti
Alla fine ho risolto così:

Codice: Seleziona tutto

on *:join:#nomecanale:if (($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) > 40)) badnick_alias2 #nomecanale $nick

on *:nick:if (($calc($regex($newnick,/[A-Z]/g) * 100 / $len($newnick)) > 40)) badnick_alias2 #nomecanale $newnick

alias badnick_alias2 {
  var %chan $1 , %nick $2
  if (%nick !ison %chan) return
  if (!$3) {
    .timer 1 5 notice %nick Cambia nick: Max maiuscole 40% (scrivi ad esempio /nick GoldrakE)
    .timer 1 30 badnick_alias2 %chan %nick 20
    .timer 1 45 badnick_alias2 %chan %nick 30
    ;.timer 1 60 badnick_alias2 %chan %nick 40
    .timer 1 61 badnick_alias2 %chan %nick 41
    return
  }
  elseif ($3 == 20) notice %nick Secondo avviso, CAMBIA IL NICK : Max maiuscole 40% (scrivi ad esempio /nick GoldrakE)
  elseif ($3 == 30) notice %nick Ultimo avviso, CAMBIA IL NICK ! Max maiuscole 40% (scrivi ad esempio /nick GoldrakE)
  ;elseif ($3 == 40) ban -u600 %chan %nick 
  elseif ($3 == 41) kick %chan %nick Eri stato avvisato, CAMBIA IL NICK : Max maiuscole 40% (scrivi ad esempio /nick GoldrakE

}
}

Un solo problema...non vorrei che fossero kikkati gli %-@-&.
Ho provato ad aggiungere:

Codice: Seleziona tutto

on *:join:#nomecanale: {
if (%nick isop %chan) { return }
esleif (($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) > 40)) badnick_alias2 #nomecanale $nick
}
Non funziona...Perchè? Dove sbaglio?
Grazie
Avatar utente
Dragone2
Amministratore
Messaggi: 134
Iscritto il: 30/07/2014, 18:35
Località: Italia
Contatta:

Ciao,

Hai scritto:

Codice: Seleziona tutto

esleif
invece di:

Codice: Seleziona tutto

elseif
Comunque il controllo che fai, è nel punto sbagliato, va inserito nell'alias, perché quell'alias si auto-invoca per 3 volte di fila, apposta per avvisare dopo 3 volte a distanza di tempo e applicare il kick.

Quindi puoi estendere il controllo così:

Codice: Seleziona tutto

if (%nick !ison %chan) || (%nick isop %chan) || (%nick ishop %chan) return
Comunque il codice che ti avevo dato l'11 marzo, funziona, l'avevo verificato e riscritto, si tratta solo di aggiungere questo controllo che ti ho appena indicato :)
Immagine
YodAlex
Messaggi: 23
Iscritto il: 25/04/2022, 13:29

Dragone2 ha scritto: 19/03/2025, 16:48 Ciao,

Hai scritto:

Codice: Seleziona tutto

esleif
invece di:

Codice: Seleziona tutto

elseif
Comunque il controllo che fai, è nel punto sbagliato, va inserito nell'alias, perché quell'alias si auto-invoca per 3 volte di fila, apposta per avvisare dopo 3 volte a distanza di tempo e applicare il kick.

Quindi puoi estendere il controllo così:

Codice: Seleziona tutto

if (%nick !ison %chan) || (%nick isop %chan) || (%nick ishop %chan) return
Comunque il codice che ti avevo dato l'11 marzo, funziona, l'avevo verificato e riscritto, si tratta solo di aggiungere questo controllo che ti ho appena indicato :)
SI si, funziona. Solo che era incasinato, c'era una stringa (relativa a Minduser) che non ci azzeccava nulla.
L'ho pulito, ed ora aggiunta la tua ultima stringa, funziona tutto.

Codice: Seleziona tutto

on *:join:#nomecanale:if (($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) > 40)) badnick_alias2 #nomecanale $nick

on *:nick:if (($calc($regex($newnick,/[A-Z]/g) * 100 / $len($newnick)) > 40)) badnick_alias2 #nomecanale $newnick

alias badnick_alias2 {
  var %chan $1 , %nick $2
  ;if (%nick !ison %chan) return
  if (%nick !ison %chan) || (%nick isop %chan) || (%nick ishop %chan) return
  if (!$3) {
    .timer 1 5 notice %nick Cambia nick: Max maiuscole 40% (scrivi ad esempio /nick GoldrakE)
    .timer 1 30 badnick_alias2 %chan %nick 20
    .timer 1 45 badnick_alias2 %chan %nick 30
    ;.timer 1 60 badnick_alias2 %chan %nick 40
    .timer 1 61 badnick_alias2 %chan %nick 41
    return
  }
  elseif ($3 == 20) notice %nick Secondo avviso, CAMBIA IL NICK : Max maiuscole 40% (scrivi ad esempio /nick GoldrakE)
  elseif ($3 == 30) notice %nick Ultimo avviso, CAMBIA IL NICK ! Max maiuscole 40% (scrivi ad esempio /nick GoldrakE)
  ;elseif ($3 == 40) ban -u600 %chan %nick 
  elseif ($3 == 41) kick %chan %nick Eri stato avvisato, CAMBIA IL NICK : Max maiuscole 40% (scrivi ad esempio /nick GoldrakE

}
}
Ecco, lo ri-scrivo completo in caso servisse a qualcuno.
Grazie mille ^^
A presto
Rispondi