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

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

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



Capslock and NickChange Checker

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

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 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

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 (11.09.2025 18:59)

2

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

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

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

What to check:

- Lenght of nick (at least 3 digits)
- Caps letters (no more than 40%)

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 1 warn on join/nick change (better after 2 sec) and just kick after 30 secs

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.

Код:
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 (11.09.2025 10:13)

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

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