Название: Anti Flood Join/Part
Версия: 1.1
Дата: 10.10.2025
Разработчик: Epic
Приложение: mIRC
Скрипт: AntiFloodJoinPart.mrc
Описание: Скрипт активирует защиту, когда пользователь совершает множество перезаходов на канал за короткий промежуток времени. При превышении установленного лимита перезаходов "max_join" в течении указанного периода времени "period_time" пользователь получит "Kick+Ban". Это похоже на то, как работает функция IRCd модуля для установки режима канала [c]/mode #channel +j <joins>:<sec>[/c], но скрипт имеет более широкие возможности настройки.
Настройка: С помощью специальных алиасов в нижней части кода вы можете изменить возвращаемые параметры на необходимые вам значения:
log_file - возвращает путь к лог-файлу для записи причины бана, с датой, временем, каналом и пользовательскими данными.
delay_check - возвращает время задержки в миллисекундах, которое должно пройти перед запуском проверки, чтобы пользователь успел получить префикс канала [c]~ & @ % +[/c]
echo_info - возвращает "yes" или "no" для включения или отключения эхо-сообщения с информацией о количестве выполненных "Join" на канале.
when_warn - возвращает количество совершённых перезаходов на канале, при котором пользователю будет отправлено уведомление с предупреждением.
max_join - возвращает максимальное количество перезаходов на канале, при превышении которого пользователь получит "Kick+Ban".
period_time - возвращает период времени в секундах, в течении которого пользователь может получить "Kick+Ban", если превысит значение max_join.
ban_type - возвращает числовое значение типа бана, который будет использоваться для установки "Ban" на канале.
ban_time - возвращает время в секундах, на которое будет установлен "Ban" на канале.
warn_msg - возвращает текст сообщения, которое будет отправлено пользователю-нарушителю, с помощью команды "notice".
ban_msg - возвращает текст сообщения, которое будет отправлено пользователю-нарушителю при установке "Ban" на канале.
Примечание: Наиболее эффективная защита будет при интенсивной флуд-атаке, когда большое количество пользователей/ботов совершают массовый набег на ваш канал, бесконечно выполняя "Join/Part" действия, в течении короткого периода времени (1-5 секунд). При этом, не рекомендуется устанавливать слишком большое значение для параметра "period_time" вместе с маленьким значением для параметра "max_join", если не хотите случайно забанить большую часть пользователей вашего канала, у которых могли быть разные причины для выполнения нескольких перезаходов на канал в течении установленного периода времени, например, если у них были проблемы с интернет связью или иные причины, требующие выключения IRC клиента или перезагрузки компьютера и т.д. Поэтому старайтесь осторожно подходить к настройке данных параметров. Тем не менее, при необходимости вы можете установить префиксы [c]~ & @ % +[/c] для дружелюбных пользователей канала, чтобы исключить их из проверки.
[indent=0.8,0.5]
Установка:
Откройте редактор скриптов вашего клиента с помощью комбинации клавиш "ALT+R" (на вкладке "Remote").
Выберите в верхнем меню пункт "File/New", чтобы открыть новый файл и разместите в нём этот код.
Выберите в верхнем меню пункт "File/Save As..." и сохраните код в директории "scripts\FolderName\ScriptName.mrc".
Если ранее была установлена предыдущая версия кода, то замените его на этот новый код скрипта.
Скачать 💾
;#####################################################################
;# Name: Anti Flood Join/Part v1.1
;# Developer: Epic (https://forum.epicnet.ru, irc.epicnet.ru 6667 #Code)
;# Description: Protection against "Join/Part" flooding will be activated when a user makes multiple re-joins to the channel in a short period of time.
;#####################################################################
on !*:JOIN:#:{
var %tname $+(AFJP,$chan,$ial($nick).host,$ticks)
$+(.timer,%tname) -m 1 $delay_check check_start $unsafe($chan $address($nick,5))
}
alias -l check_start {
var %chan $1, %hname $+(jpflood,%chan), %nick $geta($2).nick, %host $geta($2).host, %addr $geta($2).addr
if ($nick(%chan,%nick,~&@%+)) { return }
if (!$hget(%hname,%host)) { hadd $+(-mu,$period_time) %hname %host 1 }
else {
if ($hget(%hname,%host) <= $max_join) {
hinc %hname %host 1 | if ($hget(%hname,%host) == $when_warn) { .notice %nick $warn_msg }
}
if ($hget(%hname,%host) > $max_join) {
ban $+(-ku,$ban_time) %chan %nick $ban_type $ban_msg
if (!$exists($nofile($log_file))) { mkdir $nofile($log_file) }
write $log_file *JoinFlood* $date $time %chan %nick %addr | hdel %hname %host
}
}
if ($echo_info == yes && $hget(%hname,%host)) {
var %addtext $+($chr(40),left07 $hget(%hname,%host).unset,$chr(32),sec,$chr(41))
echo 14 %chan JoinFlood ::05 %nick ::04 $v1 rejoins in04 $period_time sec %addtext
}
}
alias -l geta {
if ($prop == nick) { return $gettok($1,1,33) }
if ($prop == ident) { return $gettok($gettok($1,2,33),1,64) }
if ($prop == host) { return $gettok($1,2,64) }
if ($prop == addr) { return $+($gettok($gettok($1,2,33),1,64),@,$gettok($1,2,64)) }
}
alias -l log_file { return scripts\AntiFloodJoinPart\log.txt }
alias -l delay_check { return 1000 }
alias -l echo_info { return yes }
alias -l when_warn { return 3 }
alias -l max_join { return 3 }
alias -l period_time { return 10 }
alias -l ban_type { return 2 }
alias -l ban_time { return 1800 }
alias -l warn_msg { return Warning: Too many re-joins in a short time. Stop, else will be banned! }
alias -l ban_msg { return Reason: Multiple re-joins to a channel 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]
