EpicNet.Ru - Форум IRC Чата

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Capslock and NickChange Checker

Сообщений 1 страница 6 из 6

1

Hello again!
This is another script that I'm trying to study and edit but really too advanced for my knowledge.
Is a  on join and nickchange check.

What to check:

- Lenght of nick (at least 3 LETTERS : Max59 allowed, M59 not allowed or Max59 allowed , Ma_59 not allwed. All symbols ,;.:?!_ are not allowed)
- Caps letters (no more than 40%)
- MindUser can't be part of nick (i.e. MindUser65432 not allowed)
- If user is op (~ & @ % +) = NO ACTION

So, if not allowed nick:

- 1st NOTICE WARN after 1 seconds
- 2nd NOTICE WARN after 10 seconds
- 3rd NOTICE WARN after 20 seconds
- KICK (no need ban) after 30 seconds

No needs log because is just a kick.

This is the one that I found around and tried to use but as I said, I can't understand it.

Код:
on !*:JOIN:#CHANNEL:{
  if ($nick($chan,$me,@&~%)) {  
    if ($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) < 40 && $len( $nick ) > 2) 
    }
    var %banmask = $gettok($gettok($address( $nick ,1),2,33),1,42)  
    if ($calc($regex(%nick,/[A-Z]/g) * 100 / $len(%nick)) > 40 || $len( %nick ) < 3)  { 
      if (!$Timer($+(ChckNickZ,.,$network,.,$chan,.,%banmask))) {   .Timer $+ $+(ChckNickZ,.,$network,.,$chan,.,%banmask)  -md 1 750 xxbadnick_alias $unsafe($chan) $nick        } 
    }
  }
}

ON *:nick:{
  haltdef
  var %whloop = 1, %banmask = $gettok($gettok($address( $newnick ,1),2,33),1,42)
  while ( $comchan($newnick,%whloop) != $null )  {
    var %chan $v1
    if (!$istok(MindForge,$network,32) || !$istok(#CHANNEL,%chan,32)) {  break } 
    if (!$nick(%chan,$newnick,~&@%) && $nick(%chan,$me,~&@%+)) {  xxbadnick_alias %chan $newnick  }
    inc %whloop
  }
  halt
}

Alias xxbadnick_alias {
  var %chan $1 , %nick $2, %banmask = $gettok($gettok($address( $2 ,1),2,33),1,42)
  if (%nick !ison %chan || $nick( %chan , %nick ,@&~%+)) { halt }
  if ($calc($regex(%nick,/[A-Z]/g) * 100 / $len(%nick)) < 40 && $len( %nick ) > 2)  
    if ($Timer($+(CheckNickZ,.,$network,.,%chan,.,%banmask))) { .timer $+ $+(CheckNickZ,.,$network,.,%chan,.,%banmask) off } 
    unset $eval($+(%,CheckWarnings,.,$network,.,%chan,.,%banmask),1) 
  }
  if ($len( %nick ) < 3 || $calc($regex(%nick,/[A-Z]/g) * 100 / $len(%nick)) > 40)  { .timer 1 2 notice %nick NOTICE WARN }
  if ($len( %nick ) < 3 || $calc($regex(%nick,/[A-Z]/g) * 100 / $len(%nick)) > 40)  {
    if (!$Timer($+(CheckNickZ,.,$network,.,%chan,.,%banmask))) {   
      .Timer $+ $+(CheckNickZ,.,$network,.,%chan,.,%banmask)  3 15 xxbadnick_still_on_chan $unsafe(%chan) %nick  
    } 
  }
}

Alias -l xxbadnick_still_on_chan {
  var %chan $1 , %nick $2, %banmask = $gettok($gettok($address( $2 ,1),2,33),1,42)
  if ($nick(%chan,%nick,~&@%+)) { halt }
  if ($len( %nick ) > 2 && $calc($regex(%nick,/[A-Z]/g) * 100 / $len(%nick)) < 40)
    if ($Timer($+(CheckNickZ,.,$network,.,%chan,.,%banmask))) .Timer $+ $+(CheckNickZ,.,$network,.,%chan,.,%banmask) off 
    if ($+(%,CheckWarnings,.,$network,.,%chan,.,%banmask)) unset $eval($+(%,CheckWarnings,.,$network,.,%chan,.,%banmask),1) 
    halt
  }
  inc $+(%,CheckWarnings,.,$network,.,%chan,.,%banmask)
  if (%nick ison %chan && $($+(%,CheckWarnings,.,$network,.,%chan,.,%banmask),2) < 3) { notice %nick NOTICE WARN } 
  else {
    if ($eval($+(%,CheckWarnings,.,$network,.,%chan,.,%banmask),2)  == 3 && %nick ison %chan && $len( %nick ) < 3 || $calc($regex(%nick,/[A-Z]/g) * 100 / $len(%nick)) > 40) { kick %chan %nick REASON FOR KICK | if ($Timer($+(CheckNickZ,.,$network,.,%chan,.,%banmask))) .Timer $+ $+(CheckNickZ,.,$network,.,%chan,.,%banmask) off | if ($+(%,CheckWarnings,.,$network,.,%chan,.,%banmask)) unset $eval($+(%,CheckWarnings,.,$network,.,%chan,.,%banmask),1)  }
    if (%nick !ison %chan) { if ($Timer($+(CheckNickZ,.,$network,.,%chan,.,%banmask))) .Timer $+ $+(CheckNickZ,.,$network,.,%chan,.,%banmask) off | if ($+(%,CheckWarnings,.,$network,.,%chan,.,%banmask)) unset $eval($+(%,CheckWarnings,.,$network,.,%chan,.,%banmask),1)  }
  }
}

I tried to edit it, and it doesn't work (and that's too advanced that I not even remind what I edited, it blown my brain)
Thanks for help

P.S. Or maybe is possible to integrate something here:  https://forum.epicnet.ru/viewtopic.php?id=1042#p1644

Something like:
[c]if ($calc($regex(%nick,/[A-Z]/g) * 100 / $len(%nick)) > 40 || $len( %nick ) < 3) DO SOMETHING[/c]
or:
[c]if ($calc($regex($nick,/[A-Z]/g) * 100 / $len($nick)) < 40 && $len( $nick ) > 2) {halt}[/c]

Отредактировано Chandra (28.09.2025 13:10)

2

Я бы предпочёл встроить/интегрировать описанную вами функцию в скрипт по указанной ссылке или создать новый аналогичный скрипт, чем пытаться разобраться в предоставленном вами коде-франкенштейне.

Но прежде, чем я начну кодить, я бы хотел уточнить некоторые детали:

1663,387 написал(а):

What to check:

- Lenght of nick (at least 3 digits)
- Caps letters (no more than 40%)
- MindUser can't be part of nick (i.e. MindUser65432 not allowed)
- If user is op (~ & @ % +) = NO ACTION

So, if not allowed nick:

- 1st NOTICE WARN after 1 seconds
- 2nd NOTICE WARN after 10 seconds
- 3rd NOTICE WARN after 20 seconds
- KICK (no need ban) after 30 seconds

1. Правильно ли я понимаю, что в случае нарушения установленного лимита ограничений для используемого ника - пользователь должен получить 3 последовательно отправленных ботом уведомления, через 1, 10 и 20 секунд? Мне кажется это излишним, т.к. это может вызвать раздражение или будет расценено средствами IRC безопасности как флуд, с соответствующими последствиями. Не будет ли лучше ограничиться единственным предупреждением и без временной задержки?

2. Проверка будет осуществляться каждый раз при входе пользователя на канал, таким образом, после выполнения "Kick" пользователь может снова автоматически перезайти на канал, что в свою очередь активирует новую проверку его ника, и так может продолжаться бесконечно, по кругу, если пользователь будет намеренно игнорировать поступающие уведомления или потому, что в этот момент он отлучился в туалет/ванную комнату, или ушёл в магазин за пивом, а может просто выгуливает свою собаку. Не будет ли лучше вместе с выполнением "Kick" устанавливать временный краткосрочный "Ban" в формате [c]nick!*@*[/c], чтобы избежать "Join/Kick" флуда и повторного использования данного ника?

Подпись автора

[html]<style>img {vertical-align:middle;}.hnet{color:#FFFFFF;}.hstar{color:#DE0000;}.htext{font-family:Verdana;font-size:13px;color:#6E1E00;}.heading{font-family:Verdana;font-size:13px;font-weight:bold;background-color:#4897E7;}.stitle{font-family:Verdana;font-size:12px;}.dot{color:#808000;}.desc{color:#ADADAD;}a .curl{font-family:Verdana;font-size:13px;color:#3A92CD;}</style><table><tr><td width="20px" height="20px"><img src="https://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="https://forum.epicnet.ru/viewtopic.php?id=234"><span class="heading"> <span class="hstar">★</span> <span class="hnet">EpicNet.Ru</span> <span class="hstar">★</span> </span><span class="htext"> - IRC Чат © 2008</span></a></td></tr><tr><td></td><td><div class="stitle"><span class="dot">•</span> <span class="desc">Вход через вебгейт:</span> <a href="http://irc.epicnet.ru"><span class="curl">http://irc.epicnet.ru</span></a><br><span class="dot">•</span> <span class="desc">Сервер:</span> irc.epicnet.ru <span class="desc">Порты:</span> 6667, 6668 (ssl)<br><div></td></tr></table>[/html]

3

1. Do I understand correctly that in case of violation of the established limit of restrictions for the used nickname - the user should receive 3 consecutive notifications sent by the bot, after 1, 10 and 20 seconds? It seems to me unnecessary, because it can cause irritation or can be considered as flooding, by IRC security tools, with the corresponding consequences. Wouldn't it be better to limit it to a single warning and without a time delay?

You right Epic, that's surely better ^^ So better just 1 warn on join/nick change (better after 2 sec) and just kick after 30 secs
[indent=0.0,0.0]

2. The check will be performed every time the user enters the channel, so after performing "Kick" the user can automatically re-enter the channel, which in turn activates a new check of his nickname, and this can continue indefinitely, in a circle, if the user will intentionally ignore incoming notifications or because at that moment he went to the toilet/bathroom, or went to the store for beer, or maybe just walks his dog. Wouldn't it be better to set a temporary short "Ban" in the format nick!*@* together with the "Kick" to avoid "Join/Kick" flood and repeated use of this nickname?

I have a script that check Join flood. So if user re-join more than 3 times with a wrong nick , he receive a temporary short ban in the format *!*@host.
[indent=0.0,0.0]

Код:
On *:JOIN:#CHANNEL:{
  if (!$Timer($+(CheckAccessOP,_,$chan,_,$site,_,$network))) { .timer $+ $+(CheckAccessOP,_,$chan,_,$site,_,$network) -m 1 400 OP_check_access $unsafe($chan) $wildsite $nick }
}

Alias -l OP_check_access { 
  var %chan = $1, %site = $gettok($2,2,64) , %nick = $3, %wildsite = $2
  if (!$nick(%chan,%nick,!~&@%+)) { 
    if ($+(%,JoinPartFlood_,%site,_,%chan) == $null ) { set $+(%,JoinPartFlood_,%site,_,%chan) 1 }
    else { inc -u $+ $duration(1h) $+(%,JoinPartFlood_,%site,_,%chan) 1 }
    if ($($+(%,JoinPartFlood_,%site,_,%chan),2) == 3) { .timerwarn 1 4 notice $unsafe(%nick) WARN }    
    if ($($+(%,JoinPartFlood_,%site,_,%chan),2) == 4) {
      if (%wildsite !isban %chan) { ban -u $+ $duration(4h)  %chan %nick 2  | write $mircdir $+ banemule.txt *Join_Flood* $date $time %nick ---> %site }
      if (%nick ison %chan) { kick %chan %nick REASON FOR BAN! (Part/Join }
      unset $eval($+(%,JoinPartFlood_,%site,_,%chan),1)
    }
  }
}
}

If I set a temporary short ban in the format nick!*@* as You suggest, he always may use another wrong nick and rejoin all time he wish ;-)

Thanks

Отредактировано Chandra (26.09.2025 14:54)

4

What about this solution?

Код:
on !*:JOIN:#test: check_bnicks $nick $chan 
on !*:NICK:{ 
  var %i 1 | while (%i <= $comchan($newnick,0)) { 
    if ($comchan($newnick,%i) == #test) { 
      check_bnicks $newnick $comchan($newnick,%i) | break 
    } 
    inc %i 
  } 
}

alias -l check_bnicks { 
  var %x 1, %i 1, %ident $remove($ial($1).user,~), %addr $address($1.5) 
  if ($1 isop $2) || ($1 ishop $2) { return } 
  while (%x <= $lines(exceptednick.txt)) { 
    if ($read(exceptednick.txt,nt,%x) iswm %addr) { return } | inc %x 
  } 
  while (%i <= $lines(bnicks.txt)) { 
    if ($read(bnicks.txt,nt,%i) iswm %ident) { 
      echo $2 * Ban of ident by mask: 04 $v1 
      cs ban $2 +3600 $+(*!*,%ident,*@*) IDENT NOT ALLOWED ! 
      write banemule.txt *Bad-Ident* $date $time $1 ---> $gettok(%addr,2,33) 
    } 
    if ($read(bnicks.txt,nt,%i) iswm $1) { 
      echo $2 * Ban of nick by mask: 04 $v1 
      cs ban $2 +3600 $+(*,$1,*!*@*) NICK NOT ALLOWED ! 
      write banemule.txt *Bad-Nick* $date $time $1 ---> $gettok(%addr,2,33) 
    } 
  if ($calc($regex($1,/[A-Z]/g) * 100 / $len($1)) > 40 || $len( $1 ) < 3) || Mindforge iswm ($1) { 
    .timermind 1 2 WARN
    .timermind 1 30 KICK REASON
  }
    inc %i 
  }
}

5

В предоставленном вами коде присутствуют ошибки. Кто это сделал?

Это отдалённо похоже на то, как я хотел реализовать данный функционал, но на мой взгляд эти условия должны быть в самом верху алиаса, или это будет реализовано как то иначе.
Тут нужно подумать, как это сделать лучше, а также провести дополнительное тестирование.

Ожидайте... сначала мне нужно сварить себе кофе, а потом, в течении дня, я займусь вашим вопросом 

Подпись автора

[html]<style>img {vertical-align:middle;}.hnet{color:#FFFFFF;}.hstar{color:#DE0000;}.htext{font-family:Verdana;font-size:13px;color:#6E1E00;}.heading{font-family:Verdana;font-size:13px;font-weight:bold;background-color:#4897E7;}.stitle{font-family:Verdana;font-size:12px;}.dot{color:#808000;}.desc{color:#ADADAD;}a .curl{font-family:Verdana;font-size:13px;color:#3A92CD;}</style><table><tr><td width="20px" height="20px"><img src="https://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="https://forum.epicnet.ru/viewtopic.php?id=234"><span class="heading"> <span class="hstar">★</span> <span class="hnet">EpicNet.Ru</span> <span class="hstar">★</span> </span><span class="htext"> - IRC Чат © 2008</span></a></td></tr><tr><td></td><td><div class="stitle"><span class="dot">•</span> <span class="desc">Вход через вебгейт:</span> <a href="http://irc.epicnet.ru"><span class="curl">http://irc.epicnet.ru</span></a><br><span class="dot">•</span> <span class="desc">Сервер:</span> irc.epicnet.ru <span class="desc">Порты:</span> 6667, 6668 (ssl)<br><div></td></tr></table>[/html]

6

1 - You're my Jedi master so I don't ask someone else help. Your codes are more easy to study and understand. And they never had any problems.
2 - This code is based on a code You made here ---> Badnick Join/Change I only tried to add a part to check lenght of nick, caps letters and MindUser:

Код:
 
if ($calc($regex($1,/[AZ]/g) * 100 / $len($1)) > 40 || $len( $1 ) < 3) || Mindforge iswm ($1) { 
    .timermind 1 2 WARN 
    .timermind 1 30 KICK REASON 
  }
 

3 - You always so kind , I'm never in rush. I just tried    If I won't try I'll never learn a bit. I'll compare my wrong code with Your working one , it'll help me to understand 

Enjoy Your coffee Epic and thanks in advance

Отредактировано Chandra (28.09.2025 12:36)

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»