Приложение 1 — детектор событий

Пишется в Tools -> Remote -> Events:

;*** Channel Text Scanning ***
1:ON TEXT:*:#: {
if (%repeat.detector == On) {
if ((%no.op.kick == On) && ($nick isop $chan)) { goto shutupkick }
if (%last.msg. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] == $parms) {
if (%repeat.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] == $null) { set %repeat.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] 0 }
inc %repeat.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] 1
if (%repeat.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] >= %repeat.flood.trigger) {
if (%on.repeat == Ban) { ban $chan $nick 3 } 
inc %kick.counter 1
kick $chan $nick [X-Protection] Repeated %repeat.flood.trigger times in 10 secs << $+ %kick.counter $+ >>
unset %repeat.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ]
goto shutupkick
}
}
set %last.msg. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] $parms
}
:shutupkick
if ($nick == %shut.up.kick) {
inc %kick.counter 1
kick $chan $nick [X-Protection] Shut up kick has been enforced. << $+ %kick.counter $+ >>
}
if (%text.flood.protect == On) {
if ((%no.op.kick == On) && ($nick isop $chan)) { halt }
if (%text.flood.rate. [ $+ [ $nick ] ] >= %text.flood.trigger) { ban $chan $nick 3 | inc %kick.counter 1 | kick $chan $nick [X-Protection] Max %text.flood.trigger Lines in 10 secs Reached << $+ %kick.counter $+ >> | unset %flood.rate. [ $+ [ $nick ] ] }
inc %text.flood.rate. [ $+ [ $nick ] ] 1
}
if (%max.text.protect == On) {
if ($len($parms) >= %max.text.length) {
if ((%no.op.kick == On) && ($nick isop $chan)) { halt }
inc %kick.counter 1
ban $chan $nick 3
kick $chan $nick [X-Protection] Max Text Length %max.text.length Your’s was $len($parms) characters long << $+ %kick.counter $+ >>
}
}
}
1:ON ACTION:*:#: {
if (%repeat.detector == On) {
if ((%no.op.kick == On) && ($nick isop $chan)) { goto shutupkick }
if (%last.msg. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] == $parms) {
if (%repeat.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] == $null) { set %repeat.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] 0 }
inc %repeat.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] 1
if (%repeat.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] >= %repeat.flood.trigger) {
if (%on.repeat == Ban) { ban $chan $nick 3 } 
inc %kick.counter 1
kick $chan $nick [X-Protection] Repeated %repeat.flood.trigger times in 10 secs << $+ %kick.counter $+ >>
unset %repeat.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ]
goto shutupkick
}
}
set %last.msg. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] $parms
}
:shutupkick
if ($nick == %shut.up.kick) {
inc %kick.counter 1
kick $chan $nick [X-Protection] Shut up kick has been enforced. << $+ %kick.counter $+ >>
}
if (%text.flood.protect == On) {
if ((%no.op.kick == On) && ($nick isop $chan)) { halt }
if (%text.flood.rate. [ $+ [ $nick ] ] >= %text.flood.trigger) { ban $chan $nick 3 | inc %kick.counter 1 | kick $chan $nick [X-Protection] Max %text.flood.trigger Lines in 10 secs Reached << $+ %kick.counter $+ >> | unset %flood.rate. [ $+ [ $nick ] ] }
inc %text.flood.rate. [ $+ [ $nick ] ] 1
}
if (%max.text.protect == On) {
if ($len($parms) >= %max.text.length) {
if ((%no.op.kick == On) && ($nick isop $chan)) { halt }
inc %kick.counter 1
ban $chan $nick 3
kick $chan $nick [X-Protection] Max Text Length %max.text.length Your’s was $len($parms) characters long << $+ %kick.counter $+ >>
}
}
}
;*** Nick Scanning Routines ***
1:ON NICK: {
if ($nick == %shut.up.kick) { shutupkick $newnick }
if (%nick.flood.protect == On) {
if (%nick.flood.rate. [ $+ [ $nick ] ] == $null) { set %nick.flood.rate. [ $+ [ $nick ] ] 0 }
set %nick.flood.rate. [ $+ [ $newnick ] ] %nick.flood.rate. [ $+ [ $nick ] ]
inc %nick.flood.rate. [ $+ [ $newnick ] ] 1
unset %nick.flood.rate. [ $+ [ $nick ] ]
if (%nick.flood.rate. [ $+ [ $newnick ] ] >= %nick.flood.trigger) { nickflood $newnick }
}
if (%vulgar.nick.kick == On) {
if (shit isin $newnick) { vulgarnick $newnick }
if (cunt isin $newnick) { vulgarnick $newnick }
if (fuck isin $newnick) { vulgarnick $newnick }
if (bitch isin $newnick) { vulgarnick $newnick }
if (dickhead isin $newnick) { vulgarnick $newnick }
if (pussy isin $newnick) { vulgarnick $newnick }
}
}
;*** Join Scanning Routines ***
1:ON JOIN:#: {
if (%anti.sex.channel == On) {
whois $nick
}
if (%join.flood.protect == On) {
if (%join.flood.rate. [ $+ [ $nick [ $+ [$chan ] ] ] ] == $null) { set %join.flood.rate. [ $+ [ $nick [ $+ [$chan ] ] ] ] 0 }
inc %join.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] 1
if (%join.flood.rate. [ $+ [ $nick. [ $+ [ $chan ] ] ] ] >= %join.flood.trigger) {
inc %kick.counter 1
ban $chan $nick 3
kick $chan $nick [X-Protection] Revolving Door. Max %join.flood.trigger joins in 10 secs << $+ %kick.counter $+ >>
}
}
if (%vulgar.nick.kick == On) {
if (shit isin $nick) { mode $chan +b $nick | inc %kick.counter 1 | kick $chan $nick [X-Protection] Vulgar Nick — Change it << $+ %kick.counter $+ >> }
if (cunt isin $nick) { mode $chan +b $nick | inc %kick.counter 1 | kick $chan $nick [X-Protection] Vulgar Nick — Change it << $+ %kick.counter $+ >> }
if (bitch isin $nick) { mode $chan +b $nick | inc %kick.counter 1 | kick $chan $nick [X-Protection] Vulgar Nick — Change it << $+ %kick.counter $+ >> }
if (fuck isin $nick) { mode $chan +b $nick | inc %kick.counter 1 | kick $chan $nick [X-Protection] Vulgar Nick — Change it << $+ %kick.counter $+ >> }
if (dickhead isin $nick) { mode $chan +b $nick | inc %kick.counter 1 | kick $chan $nick [X-Protection] Vulgar Nick — Change it << $+ %kick.counter $+ >> }
if (pussy isin $nick) { mode $chan +b $nick | inc %kick.counter 1 | kick $chan $nick [X-Protection] Vulgar Nick — Change it << $+ %kick.counter $+ >> }
}
}
1:ON KICK:#: {
if ($knick == $me) { kick $chan $nick Bitch }
if (%revenge == On) {
if ($knick == $me) { auser =999 $nick | guser =999 $nick 3 }
}
}

В принципе все должно быть понятно %), но если не все понятно, вот несколько подсказок:
— значок % означает переменную в памяти
— $chan, $nick, $parms и т.п. — служебные переменные
— ==, &&, >= и т.п. — логические операторы
— inc — оператор-инкремент, короче единичку прибавляет
— halt — стоп-кран 🙂
— $+ — разделитель, позволяющий собирать конструкцию

Приложение 2 — подлизанный Popups для окна статуса

Пишется в Tools -> Popups -> Status:

X-protection:/ame is using the X-Protection — http://www.xakep.ru

Channel Options
.[X-Protection] Channel Options: { 
echo 2 [X-Protection] Repeat Kick is %repeat.detector set to: %on.repeat on %repeat.flood.trigger repeats 
echo 2 [X-Protection] Channel Text Flood Protect is %text.flood.protect set to: max %text.flood.trigger lines in 10 secs. 
echo 2 [X-Protection] Nick Flood Protection is %nick.flood.protect set to: max %nick.flood.trigger nick changes in 15 secs 
echo 2 [X-Protection] Max Text Length is %max.text.protect set to: %max.text.length characters max 
echo 2 [X-Protection] Join Flood Protection is %join.flood.protect set to: max %join.flood.trigger joins in 10 secs
echo 2 [X-Protection] Vulgar Nick Kick is %vulgar.nick.kick
}
.-
.Repeat Protection
..Kick
…On:/set %repeat.flood.trigger $$?=»Max Repeats in 10 secs:» | /.timer102 0 10 /unset %repeat.flood.rate* | /set %repeat.detector On | /set %on.repeat Kick | /echo 2 [X-Protection] Repeat Detector On set to %on.repeat on %repeat.flood.trigger repeats.
…Off:/set %repeat.detector Off | /echo 2 [X-Protection] Repeat Detector Off
..Kick/Ban
…On:/set %repeat.flood.trigger $$?=»Max Repeats in 10 secs:» | /.timer102 0 10 /unset %repeat.flood.rate* | /set %repeat.detector On | /set %on.repeat Ban | /echo 2 [X-Protection] Repeat Detector On set to Ban on %repeat.flood.trigger repeats.
…Off:/set %repeat.detector Off | /echo 2 [X-Protection] Repeat Detector Off
.Text Flood Protection
..On:/set %text.flood.trigger $$?=»Max Lines Allowed in 10 secs:» | /.timer100 0 10 /unset %text.flood.rate* | /set %text.flood.protect On | /echo 2 [X-Protection] Text Flood Protect On set to max %text.flood.trigger lines in 10 secs.
..Off:/.timer100 off | /set %text.flood.protect Off | /echo 2 [X-Protection] Text Flood Protect Off
.Nick Flood Protection
..On:/set %nick.flood.trigger $$?=»Max Nicks Allowed in 15 secs:» | /.timer101 0 15 /unset %nick.flood.rate* | /set %nick.flood.protect On | /echo 2 [X-Protection] Nick Flood Protect On set to max %nick.flood.trigger nicks in 15 secs.
..Off:/.timer101 off | /set %nick.flood.protect Off | /echo 2 [X-Protection] Nick Flood Protection Off
.Text Length Protection
..On:/set %max.text.length $$?=»Max Length of Channel Text:» | /set %max.text.protect On | /echo 2 [X-Protection] Text Length Protect On set to max %max.text.length characters.
..Off:/set %max.text.protect Off | /echo 2 [X-Protection] Text Length Protect Off
.Join Flood Protection
..On:/set %join.flood.trigger $$?=»Max Joins in 10 secs:» | /set %join.flood.protect On | /timer103 0 10 /unset %join.flood.rate* | /echo 2 [X-Protection] Join Flood Protection On set to max %join.flood.trigger joins in 10 secs.
..Off:/set %join.flood.protect off | /timer103 off | /echo 2 [X-Protection] Join Flood Protection Off
.Vulgar Nick Protection
..On:/set %vulgar.nick.kick On | /echo 2 [X-Protection] Vulgar Nick Kick On
..Off:/set %vulgar.nick.kick Off | /echo 2 [X-Protection] Vulgar Nick Kick Off
User Options
.[X-Protection] User Options: {
echo 2 [X-Protection] No Op Kick is %no.op.kick 
echo 2 [X-Protection] Blacklist is %black.list
echo 2 [X-Protection] Auto-Op Protection is %auto.op.protect
echo 2 [X-Protection] Revenge is %revenge
}
.-
.No Op Kick
..On:/set %no.op.kick On | /echo 2 [X-Protection] No Op Kick is On
..Off:/set %no.op.kick Off | /echo 2 [X-Protection] No Op Kick is Off
.BlackList
..On:/set %black.list On | /echo 2 [X-Protection] Blacklist is On
..Off:/set %black.list Off | /echo 2 [X-Protection] Blacklist is Off
.Auto-Op/Protect
..On:/set %auto.op.protect On | /echo 2 [X-Protection] Now Protecting and auto-oping your friends.
..Off:/set %auto.op.protect Off | /echo 2 [X-Protection] Auto-Op/Protection is now Off
.Revenge
..On:/set %revenge On | /echo 2 [X-Protection] Revenge Mode is On — Auto-Blacklisting Users
..Off:/set %revenge Off | /echo 2 [X-Protection] Revenge is Off
User Levels
.Auto-Op/Protect
..Add User:/set %auser $$?=»Enter Nick to Blacklist:» | /auser 100 %auser | /guser 100 %auser 3
..Remove User:/set %ruser $$?=»Enter Nick to Remove:» | /ruser %ruser | /ruser %ruser 3
..List:/ulist 100
..Reset:/rlevel 100
.BlackList
..Add User:/set %auser $$?=»Enter Nick to Blacklist:» | /auser =999 %auser | /guser =999 %auser 3
..Remove User:/set %ruser $$?=»Enter Nick to Remove:» | /ruser %ruser | /ruser %ruser 3
..List:/ulist =999
..Reset:/rlevel =999

Away
.Set Away: { 
if ($away == $true) { echo 4 [X-Protection] You are already marked as being away! | halt }
set %away.msg $$?=»Enter Your Away Msg:» | set %away.nick $me | nick $me $+ -Away | away %away.msg | ame is away -=- %away.msg -=- since [ $+ $time] [X-Protection] | .timer800 0 300 /ame is away -=- %away.msg -=- since [ $+ $time] [X-Protection] 

.Set Back: { 
if ($away == $false) { echo 4 [X-Protection] You are not away! | halt }
nick %away.nick | away | ame is back! | unset %away* | .timer800 off 
}
Kick Counter
.Echo Info:/echo 2 [X-Protection] Kick Counter: %kick.counter lamers kicked since %kick.counter.date
.Amsg Info:/amsg [X-Protection] Kick Counter: %kick.counter lamers kicked since %kick.counter.date
.Reset Counter:/set %kick.counter 0 | /set %kick.counter.date $adate | /echo 2 [X-Protection] Kick Counter Reset

Ко всему вышеперечисленному я добавил еще в менюшки вывод текущих установок, установку NoOp Kick, чтобы не задеть шальной пулей своих :), возможность через меню править списки
юзверей или полностью обнулять их. 

Пы.Сы. 

Это естественно всего лишь «маленький» 🙂 пример, как можно использовать скрипты в своих целях, но наглядно показывающий весь процесс, а главное с конечным результатом, который может использовать каждый. Единственное данный скрипт не подойдёт пользователям Pirch, потому что там написание скрипта немного отлично от Mirc.

Оставить мнение

Check Also

Алмазный фонд «Хакера». Важные материалы по взлому за последние несколько лет

В прошлом выпуске мы сделали подборку по реверсингу и анализу malware-кода, которая в перв…