IRC.VOLYN.NET -> Волынский IRC сервер
Что такое IRC | Как подключится? | Web чат | О сети Волынь
О сети Волынь
Как основалась
Основные правила
Основные отличия
 
Для пользователей
Фотогалерея
Гостевая книга
Обратная связь
 
Немного о IRC
Что такое IRC?
Этикет в сетях IRC
Вопрос ответ
 
Для новичков в IRC
Для новичков в IRC
Сокращения в IRC
Основные улыбки
 
Немного о services
Что такое services?
Про ChanServ
Про NickServ
Про бот Lola
 
Как подключится?
Для PC - Windows
Для PC - Unix
Для Mac - MacOS
 
Для продвинутых
Как написать бот
Свой mirc скрипт
Как написать IRCD
Как написать сервис
Все IRC протоколы
Реклама


Our counter


Наш спонсор:
Волиньнет
IRC сервер: irc2.volyn.net канал #volyn. Подключайтесь! English Russian  

Свой собственный скрипт для IRC своими руками.

Андрей Каролик (andrusha@sl.ru; http://www.ruschannel.xxi.ru)

Тебе не знать, как сделать кульный скрипт для IRC, тоже самое, как не дать слону банан на завтрак в зоопарке. Но если слон протянет и на кашке, то тебе без собственного скрипта будет стыдно даже в зеркало смотреться. Скачать чужой скрипт в инете конечно выход, но для отсталых :). Они даже на новый Х заработать не могут, а что такое скрипт знают понаслышке. Но не будем о грустном, а лучше сделаем свой собственный и самый кульный на всем белом свете скрипт для IRC.

*** Потопчемся снаружи.

Прежде чем что-то начать, нужно сначала подумать головой, с чего начать :). В данном случае нужно сначала определиться, что тебе не хватает для полного счастья в ирке. Ну естественно должно быть сухо и комфортно, а значит требуется скрипт защиты, protection по англицки. К сожалению, на данный момент существует очень много версий Mirc и что самое главное, в новых версиях появляются новые возможности. В результате скрипты, созданные в новых версиях, не работают в старых. Печально, но факт. И чтобы не травмировать твою психику фразами "скачай такую-то и только такую-то версию", я пошёл более простым путём. Ты когда-нибудь видел настоящие кульные хацкерские программы навороченными? Оптимизация - главный их конёк! Это сейчас Петенька может взять у своего папы пачку баксов и купить 20-гигабайтный винт, раньше такого себе позволить не могли. Соответственно верхом естества является минимум кода и минимум геммороя с использованием софта. Учтя всё вышесказанное, я приведу пример создания скрипта в Mirc версии 4.72. Меньше этой версии уж точно ни у кого ничего не завалялось. Короче, хацкер, пофиг какая у тебя версия Mirc :), читай статью и ваяй скрипт в том, что есть.

*** Разложим пирожки по полочкам.

Программа без названия не бывает, поэтому назовём наш скрипт X-Protection. А далее осталось только определиться, что твой скрипт будет творить. Вот что будет уметь твой скрипт:

1) при конекте выдлеять нужную информацию и забивать ненужную
2) отслеживать повтор киков и кикбанов в канале
3) отслеживать флуд повтором текста в канале
4) отслеживать флуд частой сменой ников
5) остлеживать флуд длинными сообщениями в канал
6) отслеживать флуд частым заходом на канал
7) отслеживать "нехорошие" ники
8) заносить нужных людей в Auto-Op/Protect
9) заносить нужных людей в BlackList, ну не люблю я слово шит :)
10) работать в режиме Revenge, то есть любой плохой чел попадает прямиком в BlackList
11) делать грамотный away
12) а на досуге считать кинкутых ламеров :)

Ну а теперь пойдём по всему этому делу попунктно...

*** Пунктик первый - конект должен быть правильным.

Полезай в Tools -> Remote -> Raw и пиши следующее:
;*********************** Startup Routines ****************************
001:*: { echo 2 [X-Protection] Sending login info to server. | halt }
002:*: { echo 2 [X-Protection] You nick is $parm1 connected to $parm5* | halt }
003:*: { halt }
004:*: { halt }
251:*: { echo 1 [X-Protection] Server Connections: $parm4 user(s), $parm7 invisible, on $parm10 server(s). | halt }
252:*: { echo 1 [X-Protection] $parm2 operator(s) online. | halt }
254:*: { echo 1 [X-Protection] $parm3 Channels | halt }
255:*: { halt }
375:*: { echo 2 [X-Protection] Blocking Server MOTD. | halt }
376:*: { reset.vars | halt }
372:*: { halt }

Нумерация строк в примере специально от балды, чтобы было понятно, что роли не играет. Главное чтобы постоянно увеличивалась, иначе порядок выполнения будет совсем не тот, что тебе нужен.

reset.vars в данном случае, это Aliases. Служит для некоторых начальных установок в нашем защитном скрипте. Соответственно пропиши в Tools -> Aliases следующее:

;************* Reset Variables - used on start up mainly *************
reset.vars {
echo 2 $chr(160)
.timers off
echo 3 [X-Protection] Resetting needed variables
set %nick.flood.protect Off
set %text.flood.protect Off
set %max.text.protect Off
set %repeat.detector Off
set %join.flood.protect Off
unset %last.msg.*
echo 2 [X-Protection] Text Flood Protection 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 in 15 secs.
echo 2 [X-Protection] Max Text Length is %max.text.protect set to: max %max.text.length characters per line.
echo 2 [X-Protection] Join Flood Protection is %join.flood.protect set to: max %join.flood.trigger
echo 2 [X-Protection] Repeat Detector is %repeat.detector set to: %on.repeat on %repeat.flood.trigger repeats.
echo 2 [X-Protection] Vulgar Nick Kick is %vulgar.nick.kick
}
Установки при конекте можешь менять под себя. А вся эта пофигень нужна для того, чтобы каждый раз не ставить некоторые установки вручную. Непонятные закорючки % показывают, что это переменные, которые будут хранится в памяти с определёнными значениями. Их текущие значения и возможность поменять значения вручную есть в Tools -> Remote -> Variables.

*** Пунктик второй - кикать и банить надо в меру.

Для отслеживания повтора киков и банов на канале понадобится сканер этих самых киков и банов. Но для начала сделаем менюшку, в котрой можно отключать эти самые установки. Для этого в Tools -> Popups -> Status напиши следующее:

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

В данном случае я поставил контрольный интервал времени 10 секунд, но можно поставить и любой. При включении установок будет появляться запрос, на какое количество повторов должен срабатывать скрипт. Далее нужно будет прописать соответствующие инструкции в детектор на события в Tools -> Remote -> Events. Смотри ниже приложение 1.

*** Пунткик третий - повторяют текст в канале только дебилы.

Для отслеживания повтора текста в канале пропишем опять установку этого мода и его настройку в Tools -> Popups -> Status:

.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

Все сделано по аналогии, как и в п.2, только уже свои переменные и свои таймеры. Далее нужно будет прописать соответствующие инструкции в детектор на события в Tools -> Remote -> Events. Смотри ниже приложение 1.

*** Пунктик четвёртый - ники менять часто противопоказано.

Для отслеживания повтора текста в канале пропишем опять установку этого мода и его настройку в Tools -> Popups -> Status:

.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

Далее нужно будет прописать соответствующие инструкции в детектор на события в Tools -> Remote -> Events. Смотри ниже приложение 1.

*** Пунктик пятый - отслеживаем длинные сообщения, как у слона :).

Для отслеживания черезчур длинных сообщений в канале пропишем опять установку этого мода и его настройку в Tools -> Popups -> Status:

.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

Далее нужно будет прописать соответствующие инструкции в детектор на события в Tools -> Remote -> Events. Смотри ниже приложение 1.

*** Пунктик шестой - по одному, товарищи.

Для отслеживания флуда частым заходом на канал пропишем опять установку этого мода и его настройку в Tools -> Popups -> Status:

.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

Далее нужно будет прописать соответствующие инструкции в детектор на события в Tools -> Remote -> Events. Смотри ниже приложение 1.

*** Пунктик седьмой - воспитывать надо с детства.

Для отслеживания нехороших ников на канале пропишем опять установку этого мода и его настройку в Tools -> Popups -> Status:

.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

Далее нужно будет прописать соответствующие инструкции в детектор на события в Tools -> Remote -> Events. Смотри ниже приложение 1.

*** Пунктик восьмой - кто на наших?

Теперь займемся занесением некоторых особей в красную книгу :). Для начала пропишем саму книгу в Tools -> Popups -> Status:

.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

Далее пропишем собственно саму защиту в Tools -> Remote -> Events:

;********************** Auto-Ops and Protection ************************ @100!:ON JOIN:#: if (%auto.op.protect == On) { mode $chan +o $nick }
@100!:ON DEOP:#: if (%auto.op.protect == On) { if ($nick == ChanServ) { halt } | if ($level($nick) == 100) { halt } | kick $chan $nick [X-Protection] -=- Protected User -=- [X-Protection] | ban $chan $nick 3 | mode $chan +o $opnick }
@100!:ON KICK:#: if (%auto.op.protect == On) { if ($level($nick) == 100) { halt } | inc %kick.counter 1 | kick $chan $nick [X-Protection] -=- Protected User -=- << $+ %kick.counter $+ >> | ban $chan $nick 3 | invite $chan $knick }
@100!:ON BAN:#: if (%auto.op.protect == On) { if ($banmask isin %illegal.bans) { inc %kick.counter 1 | kick $chan $nick [X-Protection] You have lost all priveleges! << $+ %kick.counter $+ >> | ban $chan $nick 3 | mode $chan -b $banmask | ruser $nick | ruser $nick 3 } | }

Тут 100 - это уровень (level) юзверей, который и будет их причислять к подзащитным.

*** Пунктик девятый - знай наших.

Своих защитили, теперь других пинать будем. Сделаем это через BlackList, хотя чаще в скрптах пишут ShitList. Но как не назови какашку, конфеткой она не станет :). Пропишем опять же в Tools -> Popups -> Status:

.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

И пропишем в Tools -> Remote -> Events:

;************************* Black List *********************************
@999!:ON JOIN:#: if (%black.list == On) { ban $chan $nick 3 | inc %kick.counter 1 | kick $chan $nick [X-Protection] -=- Blacklisted Member -=- << $+ %kick.counter $+ >> }
@999!:ON TEXT:*:#: if (%black.list == On) { ban $chan $nick 3 | inc %kick.counter 1 | kick $chan $nick [X-Protection] -=- Blacklisted Member -=- << $+ %kick.counter $+ >> }
@999!:ON TEXT:*:?:!
@999!:ON PART:#: if (%black.list == On) { ban $chan $nick 3 }
@999!:ON KICK:#: if (%black.list == On) { ban $chan $nick 3 | inc %kick.counter 1 | kick $chan $nick [X-Protection] -=- Blacklisted Member -=- << $+ %kick.counter $+ >> }
@999!:ON BAN:#: if (%black.list == On) { ban $chan $nick 3 | inc %kick.counter 1 | kick $chan $nick [X-Protection] -=- Blacklisted Member -=- << $+ %kick.counter $+ >> }
@999!:ON OP:#: if (%black.list == On) { ban $chan $opnick 3 | inc %kick.counter 1 | kick $chan $opnick [X-Protection] -=- Blacklisted Member -=- << $+ %kick.counter $+ >> | mode $chan -o $nick }
@999:ON DEOP:#: if (%black.list == On) { ban $chan $opnick 3 | inc %kick.counter 1 | kick $chan $opnick [X-Protection] -=- Blacklisted Member -=- << $+ %kick.counter $+ >> }

Тут 999 - это уровень (level) юзверей, который и будет их причислять к педерастам :).

*** Пунктик десятый - ни грамма жалости.

Если же тебе надоело добавлять непонятливых в BlackList ручками, то можно просто прописать мод Revenge, который автоматом будет прописывать в BlackList. Пропиши в Tools -> Popups -> Status:

.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

Далее нужно будет прописать соответствующие инструкции в детектор на события в Tools -> Remote -> Events. Смотри ниже приложение 1.

*** Пунктик одинадцатый - away красиво.

Обычно away делают ручками. Особенно привычным стало делать ник nickname_away, но мы не ищем легких путей :). Пропиши в Tools -> Popups -> Status:

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
}

Теперь ник будет автоматически сам меняться на nickname_away, а при возвращении опять меняться на nickname без приставки away. Все гениальное просто :).

*** Пунктик двенадцатый - ну а теперь подсчитаем козлов отпущения.

После установок всех защит и их исправной работы можно и статистику подвести. Для этого пропиши в Tools -> Popups -> Status:

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

*** Итоги.

Ну вот и готов твой первый кульный скрипт, который реально будет тебя защищать от заморозков на севере :). Теперь осталось только подлизать все места :) и разобраться в детекторе событий. Если ты сделаешь все в точности, как я написал, то скрипт будет работать на все 100 процентов.
*** Приложение 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, чтобы не задеть шальной пулей своих :), возможность через меню править списки ювзерей или полностью обнулять их.

*** P.S.

Это естественно всего лишь "маленький" :) пример, как можно использовать скрипты в своих целях, но наглядно показывающий весь процесс, а главное с конечным результатом, который может использовать каждый. Единственное данный скрипт не подойдёт пользователям Pirch, потому что там написание скрипта немного отлично от mIRC.
Жінкам сподобається жіночий журнал суперова.