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

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

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



Anti Flood Change Nick

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

1

Название: Anti Flood Change Nick
Версия: 1.0
Автор: Epic
Программа: mIRC
Скрипт: AntiFloodChangeNick.mrc

Описание: Скрипт активирует защиту от слишком быстрого и многократного изменения ника пользователями канала. При превышении установленного лимита изменений ника за короткий период времени на пользователя будет установлен "Kick+Ban". Каждый пользователь записывается во временную хеш-таблицу по хосту для дальнейшей проверки.

Настройка: Вы можете изменить возвращаемые значения в указанных названиях алиасов для индивидуальной настройки скрипта:

  • list_channels - возвращает через запятую список каналов, на которых будет работать проверка и установка "Kick+Ban". Для работы на всех каналах установите: [c]all[/c]

  • limit_changes - возвращает максимальный предел для возможного изменения ника, при превышении которого будет установлен "Kick+Ban". По умолчанию: [c]2[/c]

  • time_period - возвращает период времени в секундах, в течении которого будет подсчитываться количество изменений ника пользователя. По умолчанию: [c]600[/c]

  • time_ban - возвращает время в секундах, в течении которого будет действовать "Ban", после чего он будет сброшен. По умолчанию: [c]1800[/c]

  • msg_kick - возвращает текст, который будет отображаться в сообщении при выполнении "Kick". По умолчанию: [c]Flood of nick changes in a short period of time![/c]

Установка:

  • Откройте редактор скриптов вашего клиента с помощью комбинации клавиш "ALT+R" (на вкладке "Remote").

  • Выберите в верхнем меню пункт "File/New", чтобы открыть новый файл и разместите в нём этот код.

  • Выберите в верхнем меню пункт "File/Save As..." и сохраните код по пути "scripts\AntiFloodChangeNick\AntiFloodChangeNick.mrc".

  • Если ранее была установлена предыдущая версия кода, то замените его на этот новый код скрипта.

Скачать 💾

Код:
;#####################################################################
;#  Name: Anti Flood Change Nick v1.0
;#  Author: Epic (https://forum.epicnet.ru, irc.epicnet.ru 6667 #Code)
;#  Description: Protection against frequent and multiple nick changes in a short period of time.
;#####################################################################

on !*:NICK:{
  var %i 1 | while (%i <= $comchan($newnick,0)) {
    var %chan $comchan($newnick,%i), %host $ial($newnick).host
    if ($check_chan(%chan)) {
      if (!$hget(newnick,%host)) { hadd $+(-mu,$time_period) newnick %host 1 | break }
      elseif ($hget(newnick,%host) < $limit_changes) { hinc newnick %host 1 | break }
      else { if ($me isop %chan) { ban $+(-ku,$time_ban) %chan $newnick 2 $msg_kick } | var %cn_ban %host }
    }
    inc %i
  }
  if (%cn_ban) { hdel newnick %cn_ban }
}

alias -l check_chan { if ($list_channels == all) || ($istok($list_channels,$1,44)) { return $true } }

alias -l list_channels { return #channel,#channel2,#channel3 }
alias -l limit_changes { return 2 }
alias -l time_period { return 600 }
alias -l time_ban { return 1800 }
alias -l msg_kick { return Flood of nick changes in a short period of time! }

P.S. Если вы столкнулись с трудностями установки скрипта или вы обнаружили ошибки, а может быть у вас возникли новые идеи по модификации, то обязательно оставьте здесь свой комментарий со списком всех ваших запросов, с подробным описанием и примерами для каждого пункта.

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

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

2

Thanks Epic.

I added a line for a warn.
Max nick change set to 3 and warn after 2:

Код:
;#####################################################################
;#  Name: Anti Flood Change Nick v1.0
;#  Author: Epic (https://forum.epicnet.ru, irc.epicnet.ru 6667 #Code) 
;#  Description: Protection against frequent and multiple nick changes in a short period of time. 
;#####################################################################

on !*:NICK:{ 
  var %i 1 | while (%i <= $comchan($newnick,0)) { 
    var %chan $comchan($newnick,%i), %host $ial($newnick).host 
    if ($check_chan(%chan)) { 
      if (!$hget(newnick,%host)) { hadd $+(-mu,$time_period) newnick %host 1 | break } 
      elseif ($hget(newnick,%host) < $limit_changes) { hinc newnick %host 1 | break }

;=========WARNING=================
      elseif ($hget(newnick,%host) == 2) { notice $newnick NEXT NICK CHANGE YOU'LL BE KICKED!! | hinc newnick %host 1 | break }
;=========END WARNING=============

      else { if ($me isop %chan) { ban $+(-ku,$time_ban) %chan $newnick 2 $msg_kick } | var %cn_ban %host } 
    } 
    inc %i 
  } 
  if (%cn_ban) { hdel newnick %cn_ban } 
}

alias -l check_chan { if ($list_channels == all) || ($istok($list_channels,$1.44)) { return $true } }

alias -l list_channels { return #channel,#channel2,#channel3 } 
alias -l limit_changes { return 3 } 
alias -l time_period { return 600 } 
alias -l time_ban { return 1800 } 
alias -l msg_kick { return Flood of nick changes in a short period of time! }

Is it correct?

I have an error in status:

[18:25:16] * Invalid parameters: $istok (line 25, 3flood_nick_change.mrc)

Thanks

Отредактировано Chandra (07.09.2025 19:52)

3

Правильно ли я понимаю, что вы хотели бы добавить в код строку, которая будет проверять количество выполненных изменений ника для данного хоста пользователя, и если этих изменений уже было 2, то пользователю будет отправлено нотис-сообщение с предупреждением о том, что в следующий раз при 3-ей смене ника он получит "Kick", но не "Kick+Ban", т.к. последнее произойдёт только при 4-ой смене ника в течении 600 секунд ?

При вашей настройке параметра [c]alias -l limit_changes { return 3 }[/c] допускается максимальный лимит изменения ника 3 раза без последствий.

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

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

4

1656,2 написал(а):

Do I understand correctly that you would like to add a line to the code that will check the number of nickname changes performed for a given user host, and if there have already been 2 of these changes, then the user will be sent a notice message warning that the next time the 3rd nickname change is made, he will receive a "Kick", but not "Kick+Ban", since the latter will only happen with the 4th nickname change within 600 seconds?

With your alias -l limit_changes { return 3 } parameter setting , the maximum limit for changing a nickname is 3 times without consequences.

Yes but i added a warn on 2nd change (is line 15 in code above):

[c] elseif ($hget(newnick,%host) == 2) { notice $newnick NEXT NICK CHANGE YOU'LL BE KICKED!! | hinc newnick %host 1 | break } [/c]

Warn on second change as notice and kick/ban on 3rd

Is it correct?

And what about the error on line 25?

Thanks

Отредактировано Chandra (07.09.2025 20:52)

5

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

i added a warn on 2nd change (is line 15 in code above). Is it correct?

Нет, это некорректное решение, потому что таким образом вы добавляете ещё один из возможных вариантов условия для проверки с помощью конструкции "if-elseif-else".
Подробнее о том, как работает данная конструкция можно узнать здесь:  https://en.wikichip.org/wiki/mirc/condi … statements

[indent=0.8,0.5]

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

And what about the error on line 25?

В моём коде в 20 строке второе условие выглядит так: [c]($istok($list_channels,$1,44))[/c] а в предоставленном вами коде так: [c]($istok($list_channels,$1.44))[/c]
Ошибка заключается в том, что все параметры для идентификатора [c]$istok()[/c] должны быть указаны через запятую, а у вас перед последним параметром установлена точка.

[indent=0.8,0.5]

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

Warn on second change as notice and kick/ban on 3rd

Ок. Я внёс необходимые изменения в код, чтобы он работал в соответствии с вашими запросами. Это будет опубликовано в следующей обновлённой версии скрипта.

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

[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

Обновление v1.1

  • Добавлен алиас "msg_warn", который возвращает текст сообщения с предупреждением о "Kick/Ban".

  • Внесено изменение в 12-13 строку кода для проверки количества изменений ника пользователя и при достижении числа лимита из "limit_changes" будет отправлено уведомление с предупреждением из "msg_warn".

  • Удалён алиас "check_chan", т.к. используемые в нём условия проверки были перенесены внутрь тела обработчика "ON NICK" на 10 строку кода.

Скачать 💾

Код:
;#####################################################################
;#  Name: Anti Flood Change Nick v1.1
;#  Author: Epic (https://forum.epicnet.ru, irc.epicnet.ru 6667 #Code)
;#  Description: Protection against frequent and multiple nick changes in a short period of time.
;#####################################################################

on !*:NICK:{
  var %i 1 | while (%i <= $comchan($newnick,0)) {
    var %chan $comchan($newnick,%i), %host $ial($newnick).host
    if ($istok($list_channels,%chan,44)) || ($list_channels == all) {
      if (!$hget(newnick,%host)) { hadd $+(-mu,$time_period) newnick %host 1 | break }
      elseif ($hget(newnick,%host) < $limit_changes) {
        hinc newnick %host 1 | if ($hget(newnick,%host) == $limit_changes) { .notice $newnick $msg_warn } | break
      }
      else { if ($me isop %chan) { ban $+(-ku,$time_ban) %chan $newnick 2 $msg_kick } | var %cn_ban %host }
    }
    inc %i
  }
  if (%cn_ban) { hdel newnick %cn_ban }
}

alias -l list_channels { return #channel,#channel2,#channel3 }
alias -l limit_changes { return 2 }
alias -l time_period { return 600 }
alias -l time_ban { return 1800 }
alias -l msg_kick { return Flood of nick changes in a short period of time! }
alias -l msg_warn { return 04Warning:05 The next nick change you will be kicked out and banned!! }

Скриншот:
    https://i.ibb.co/vx35nwZg/Anti-Flood-Change-Nick.jpg

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

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

7

This is perfect Epic.

As always I also need to write a log on a .txt file, so I think to add this on line 15:

Код:
else { if ($me isop %chan) { ban $+(-ku,$time_ban) %chan $newnick 2 $msg_kick } | write $mircdir $+ logfile.txt *NICKCHANGE_FLOOD* $date $time ---> %host }

Will this be correct?

And to complete it I guess is better no kick/ban for any, who has [c]~ & @ % +[/c]

Отредактировано Chandra (08.09.2025 16:43)

8

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

As always I also need to write a log on a .txt file, so I think to add this on line 15. Will this be correct?

Это не совсем правильное размещение команды [c]write[/c], но точно где то рядом. Это дополнение и несколько других изменений будут реализованы в следующей версии скрипта.

[indent=0.8,0.5]
P.S. Для данного раздела форума было бы лучше, если бы вы подготовили и опубликовали сразу полный список из 2-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]

9

Обновление v1.2

  • Добавлен алиас "log_file", который возвращает путь к лог-файлу для записи и хранения данных о всех установленных банах.

  • Добавлена 24 строка кода с условием проверки существования директории/пути к лог-файлу и в случае отсутствия это будет создано.

  • Добавлена 25 строка кода для выполнения записи в лог-файл строки с данными пользователя, который был забанен.

  • Добавлена 11 строка кода с условием проверки пользователя на наличие префикса канала [c]~ & @ % +[/c], чтобы исключить установку бана на этом канале.

  • Добавлена 18 строка кода для отправки эхо-сообщения с пояснением о том, что на проверяемом канале у бота отсутствует статус оператора @ для установки бана.

  • Внесены дополнительные изменения/исправления для корректной работы скрипта.

Скачать 💾

Код:
;#####################################################################
;#  Name: Anti Flood Change Nick v1.2
;#  Author: Epic (https://forum.epicnet.ru, irc.epicnet.ru 6667 #Code)
;#  Description: Protection against frequent and multiple nick changes in a short period of time.
;#####################################################################

on !*:NICK:{
  var %i 1 | while (%i <= $comchan($newnick,0)) {
    var %chan $comchan($newnick,%i), %host $ial($newnick).host, %addr $gettok($address($newnick,5),2,33)
    if ($istok($list_channels,%chan,44)) || ($list_channels == all) {
      if ($nick(%chan,$newnick,~&@%+)) { goto next }
      if (!$hget(newnick,%host)) { hadd $+(-mu,$time_period) newnick %host 1 | break }
      elseif ($hget(newnick,%host) < $limit_changes) {
        hinc newnick %host 1 | if ($hget(newnick,%host) == $limit_changes) { .notice $newnick $msg_warn } | break
      }
      else {
        if ($me isop %chan) { ban $+(-ku,$time_ban) %chan $newnick 2 $msg_kick | var %cn_ban %host }
        else { echo -t %chan 04I don't have @ on this channel to ban the offender. }
      }
    }
    :next | inc %i
  }
  if (%cn_ban) {
    if (!$exists($nofile($log_file))) { mkdir $nofile($log_file) }
    write $log_file *NICKCHANGE_FLOOD* $date $time $newnick ---> %addr
    hdel newnick %cn_ban
  }
}

alias -l list_channels { return #channel,#channel2,#channel3 }
alias -l limit_changes { return 2 }
alias -l time_period { return 600 }
alias -l time_ban { return 1800 }
alias -l msg_kick { return Flood of nick changes in a short period of time! }
alias -l msg_warn { return 04Warning:05 The next nick change you will be kicked out and banned!! }
alias -l log_file { return scripts\AntiFloodChangeNick\log.txt }
Подпись автора

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

10

You're great Epic ^^
Thanks. I really appreciated Your awesome job

Пост написан 10.09.2025 14:10