Твой собственный супер-скрипт для IRC
Итак, ты уже не раз бывал на IRC, ты часто чатишься с людьми, но все-таки многие команды тебе приходится вводить своими собственными золотыми ручонками. Ничего плохого в этом, конечно, нет. Ты познаешь свой IRC-клиент, учишь его команды, однако, часто бывает очень утомительно вводить одну и ту же команду по 10 раз. Не надо! Для это и предназначены скрипты.
Скрипт - это дополнительная подпрограмма, которая модифицирует твой IRC-клиент и позволяет автоматизировать некоторые процессы. Например, когда тебя выкинули с канала, тебе приходится писать /join #channel, а затем еще и выкидывать обидчика: /kick #channel Nick <причина>. Все это можно вогнать в скрипт, который сам будет выполнять все эти действия, а тебе останется лишь наслаждаться пребыванием на IRC.
PIRCH
Все нижеизложенное будет относиться к IRC-клиенту PIRCH. Почему не mIRC? Потому что лично я предпочитаю PIRCH и именно под него я умею писать скрипты. А под mIRC-ом я работать не умею, а значит ничего путного тебе рассказать не смогу.
Поехали
Для начала тебе нужно понять работу любого IRC-клиента. В нем есть несколько разделов, под которые мы и будет скриптовать. Первый, и пожалуй, самый важный раздел - это Events (События). Events - это типа сниффера, который следит за всем, что происходит в канале и других окошках. И ведь в этих окошках постоянно что-то происходит. То кто-нибудь зайдет, то выйдет, то скажет что-нибудь, то кикнут кого-нибудь. Вот за всеми этими событиями у нас и будут следить Events-ы.
Далее. Aliases. Алаизисы - это сокращенные команды. То есть тебе, предположим, надо набрать команду /join #xakep. Ты можешь создать алаизис "x", который будет выполнять эту команду. И тогда, для того чтобы зайти на канал #xakep, тебе всего-то нужно будет набрать /x. Круто? То-то же! И под каждый алаизис ты можешь прописывать не одну, а сразу несколько команд.
Но пока забудем об этом и перейдем к следующему пункту. Popups. Те, кто постоянно шастает по WWW, знает, что Popups - это появляющиеся новые окна браузера. В IRC приблизительно то же =). Только здесь Popups - это выскакивающие менюшки. Допустим, тебе нужно забанить какого-нибудь чувака. Если ты прописал в скрипте кучу соответствующий попупсов, то, кликнув на его нике правой кнопкой крысы, получишь огромное меню, в котором сможешь выбрать, каким способом и с каким мессаджем ты избавишься от этого засранца.
Ближе к телу
Ну что ж. Основы ты знаешь, теперь уже можно переходить к освоению всей этой галиматьи. Предупрежу сразу - я не буду затрагивать PERL-скриптинг, так как это вообще отдельная история, и для работы с этой фишкой тебе нужно изучить хотя бы основы языка Перл. У тебя, насколько я понимаю, такого желания вовсе не возникает, поэтому мы это занудство пропустим. Да и потом, не особо-то нам нужны все эти лагметеры и счетчики юзеров на канале. Так что поехали.
EVENTS
Список событий ты можешь вызвать, кликнув на кнопку Events в окне PIRCH-а.
Давай-ка теперь с тобой поймем, как эти самые эвенты работают. Итак, у тебя есть окно, разделенное на 3 части. В левой части у тебя список событий. Ты можешь давать им любые названия, но важно одно - они, заметь, все пронумерованы. В случае, когда происходит какое-нибудь событие, PIRCH начинает искать команды к этому событию с первых Эвентов (верх списка) к последним (конец списка). Поэтому основные эвенты нужно прописывать с наименьшим числом.
Запутался? Не проблема. Говоря проще, все события, которые происходят чаще всего, ты должен прописать в Эвентах с номерами 000 или 001, а вот события, которые происходят реже, - в эвентах с номерами 666 или 999. Т.е. свой PhrIenD$ L1sT ты должен поставить где-то в центральную часть эвентов (у меня это эвент 400), а вот защиту от банов и киков как можно ближе к началу (у меня это эвент 002). Кстати, маленький хинт: самым первым эвентом, с самым маленьким номером ставь default, в котором будут абсолютная чистота и пустота. Он тебе еще пригодится, поверь.
Теперь перейдем к другим частям окошка. Верхняя правая часть - это список юзеров, на которых срабатывает событие. Если ты туда поставишь "*!*@*" (без кавычек), то эвент будет срабатывать на всех. Если же ты укажешь какую-нибудь другую маску (по нику или хосту), то эвент будет срабатывать только на людей с такой маской (т.е. с таким ником или хостом). В моем примере, под номером 002, идет эвент "Все" с маской "*!*@*", который срабатывает на всех остальных ЧАТлан.
Теперь рассмотрим нижнее правое окошко. Это и есть сами эвенты. Т.е. список событий, которые срабатывают на юзера, которого ты указал. Пройдемся по самым простым из них.
ON TEXT - эвент, срабатывающий на появление определенного текста в канале или любом другом окошке. Формат такой: ON TEXT:*mirc*:#: /msg # =SINtez Russin Script= засек слово mIRC в канале... хм... mIRC = May I Recive a Copy of PIRCH!!!!
Поясню: сначала идет само событие ON TEXT, затем двоеточие, после которого ты объясняешь PIRCH-у, что и где должно происходить на это событие. Как видишь, у меня там стоит "*mirc*", которое означает, что событие сработает на любой текст, содержащий слово mirc. Причем, звездочки в начале и в конце слова показывают ПИРЧу, что это выражение может содержаться внутри слова (звездочка вначале - любой текст перед словом, в конце - любой текст после слова). Т.е. если ты поставишь в такой эвент слово "ламер", то скрипт будет срабатывать только на отдельно стоящее слово ламер. А вот если ты поставишь "ламер*", то скрипт будет реагировать и на "ламеру", и на "ламеров" и т.д.
Дальше в эвенте стоит двоеточие, показывающее, что текст закончен, а затем стоит знак "#". Этот знак показывает, что событие срабатывает в любом канале, на котором ты находишься. Если вместо "#" ты поставишь звездочку, то событие будет срабатывать на любое окно, которое у тебя открыто, в том числе и окна приватов.
Дальше опять стоит двоеточие, показывающее, что описание, где этот эвент будет срабатывать, закончено, и после него идут уже непосредственно команды, которые должны выполняться. В моем случае скрипт посылает в канал (значок #) мессадж "=SINtez Russin Script= засек слово mIRC в канале... хм... mIRC = May I Recive a Copy of PIRCH!!!!".
Вот так. Все, как видишь, не так уж и сложно. А вот теперь давай перейдем к более сложным эвентам.
ON KICK - это событие срабатывает на ЛЮБОЙ кик в канале. Т.е. не только когда кикнули тебя, но и когда кикнули любого другого чела. Тебе этот эвент понадобится только для защиты своих друзей, которых ты пропишешь в свой pHr1end$ L1sT, но это уже отдельная история. Поэтому мы рассмотрим другой эвент, который намного ближе к тебе, любимому.
ON KICKED - вот он! Эвент, срабатывающий, когда какая-то гадина кикнула именно тебя. Формат у эвента такой же, как и у ON TEXT (кстати, у них у всех один формат), за исключением маленькой поправки. Если перед этим эвентом ты поставил знак @, вот так: @ON KICKED, то эвент будет срабатывать только если ты ОП на канале. Если ты этот значок не поставишь, то эвент будет пытаться сработать в любом случае.
В моей версии этот эвент работает вот так:
@ON KICKED:*:#:/chanserv unban # |/chanserv deop # $nick |/join # |/chanserv op # $me |/timer $nick 1 60 | /kick # $nick (=SINtez Russian Script=) ЕщЕ ра3 киКнеШь и тЫ в $hiT L!$tE!!!
Объясняю - я обычно сижу на сетке DalNet, где фунциклируют всякие боты типа ChanServ-а и NickServ-а. Поэтому, когда меня кто-нибудь кикнет (то он сразу покойник :))), скрипт посылает ChanServ-у команду деопнуть обидчика ($nick - это переменная, которая записывается в память и несет в себе ник человека, который тебя кикнул). Затем пытается зайти на канал (/join #). Причем, заметь, команды отделяются знаком "|", который означает переход на новую строку. Затем приказывает Чансерву опнуть меня (/chanserv op # $me. Где $me - переменная, которая хранит в памяти мой ник). Затем, из-за того, что модемная связь дает тебе лаг (торможение) и твои команды не исполняются сразу, включает таймер на ник обидчика (имя таймера можешь ставить любое, но мне удобнее называть их по имени врагов). В таймере показывается, что он сработает с циклом 1 раз на 60 миллисекунд (т.е. на одну секунду). Затем, как только таймер закончится (т.е. через секунду), скрипт пытается кикнуть обидчика (обычно секунды хватает на то, чтобы вернуться на канал). Все ясно? Если нет, то прочитай этот абзай еще раз, а если да, то пойдем дальше.
ON BAN - событие, срабатывающее на любой бан в канале. К сожалению, в ПИРЧе нет команды ON BANNED, а извратиться другими способами я не смог (хотя, возможно, кто-то смог). Поэтому у меня не получилось настроить свой скрипт реагировать, когда банят только меня, и он у меня реагирует на любой бан, пытаясь защитить хозяина. Но не будем отвлекаться. У меня это событие выглядит вот так:
ON BAN:*:#:/chanserv unban #
Т.е. если кто-то поставил бан, то скрипт дает команду чансерву отбанить меня. Заметь, я не стал это вносить в событие ON KICKED, хотя, чаще всего, после бана следует кик. А все из-за того, что я пытаюсь опередить врага. Т.е. как только он меня забанит, скрипт меня отбанивает. А когда он меня кикнет, мой скрипт уже начнет операцию по возвращению в канал и наказанию засранца. К тому же, бывают все-таки случаи, когда тебя банят, но не кикают, поэтому лучше все события разделять, а не загонять все в одну большую кучу дерьма. Если ты очень воинственный боец, то можешь добавить в событие ON BAN наказание. Тогда, если успеешь, то сможешь выкинуть обидчика, не дожидаясь, пока это сделает он. Я этого делать не стал, т.к. на модемной связи это чаще всего не успеть.
Дальше. ON DEOPED - срабатывает тогда, когда какая-то зараза сняла с тебя статус Оператора. В моем случае я не начинаю сразу разворачивать артиллерию, а просто предупреждаю обидчика:
ON DEOPED:#:/chanserv op # $me |/chanserv deop # $nick | /notice $nick (=SINtez Russian Script=) тЫ поКа п0ШутИ тАк... д0 п0явЛеНиЯ тЕбЯ в $hiT Li$Te!
Смотри: если кто-то меня деопнул, то скрипт, через чансерв, пытается меня опнуть. Затем он деопит (через тот же чансерв) этого уродца, а потом кидает ему приватный нотис "(=SINtez Russian Script=) тЫ поКа п0ШутИ тАк... д0 п0явЛеНиЯ тЕбЯ в $hiT Li$Te!". Если ты злой чувак, то можешь поставить вместо предупреждений всякие кики и баны.
ON OPED - срабатывает, когда кто-то тебя опнул. В моем случае я говорю чуваку "Спасибо":
ON OPED:#:/notice $nick Спасибо за @
Ну что ж, это, пожалуй, основные эвенты, которые тебе необходимы. Конечно же, этих самых эвентов существует целая куча, но многие из них тебе никогда не понадобятся. Хотя... Если ты хочешь выглядеть супер-челом, просто агентом 007, то советую тебе создать еще один эвент. У меня это 030-SiN-ИНФО. В этом эвенте можно управлять запросами юзеров на твою версию, название IRC-клиента и инфу о тебе самом.
VERSION - этот CTCP команда, которую выполняет другой юзверь, пытаясь узнать инфу о твоем клиенте. Если у тебя включен режим CTCP, то он узнает, что у тебя стоит PIRCH такой-то версии. Но ты можешь не показывать ему эту секретную информацию, а притвориться гуру IRC. Смори:
VERSION:/notice $nick \-1 VERSION \-1 \-2 PIRCH98 Powered by =SINtez Russian Script= \-2 :-
В моем случае на этот запрос скрипт выдает юзеру нотис, в котором пишет "PIRCH98 Powered by =SINtez Russian Script=". Причем, значки "\-1" говорят ПИРЧу, что это слово надо выделить цветом инфы (как в стандартном ответе клиента). А знаки "\-2" показывают, что этот текст надо выделить болдом. А вот и самое главное - в конце команды стоят двоеточие и минус. Это означает, что надо посылать в ответ только ТВОЮ команду, а стандартный ответ глушить. Если вместо минуса ты поставишь плюс, то будут выдаваться оба ответа. Точно так же работают и USERINFO, и CLIENTINFO.
Ладно, я думаю, что с основными понятиями эвентов ты разобрался. Если тебе захочется проапгрейдить свои знания - лезь в хелпы. Тебе будет уже проще, т.к. все другие эвенты работают по такой же системе.
ALIASES
Чтобы вызвать список алаизисов, жми на кнопку с этим названием в окне ПИРЧа. Здесь все еще проще. Слева список названий алаизисов, справа команды, которые они выполняют.
Создаешь алаизис, допустим, "xakep". Затем щелкаешь на нем мышкой и прописываешь в правом окне все команды, которые ты хочешь выполнить для этого алаизиса. Ну, например: /join #xakep |/msg Здарова ребята! Вот я и на хакере! Как дела? |/me рад вас всех видеть.
Но перво-наперво создай вот такой алаизис:
Название: "j". Команда: /join $# $$1
Т.е. когда ты наберешь "/j xakep", то скрипт запустит алаизис "j", в котором прописано, что нужно исполнить команду /join, затем поставить значок "#", затем поставить первое слово, которое ты ввел после алаизиса.
Вообще, к любому алаизису можно присобачивать введенные слова. $$1 - это первое слово, $$2 - второе и так далее. Поэтому, если ты создашь алаизис "b", который будет банить людей, то команду пропиши туда вот такую: /ban # $$1. Тогда, введя в канале "/b Vasya", твой скрипт сразу же забанит чувака с ником Vasya.
Ну, с алаизисами все просто, тут и объяснять нечего. Перейдем к Popups-ам.
POPUPS
Ну вот, мы и добрались до менюшек. Менюшки, пожалуй, вторая по удобности вещь после эвентов. Созданы они для Виндусоидов, которые не привыкли что-либо набирать ручками и хотят всего добиться, щелкая мышкой. Ну раз хочешь - пожалуйста!
Твои попупсы разделены на несколько закладок: Server Window (Окно статуса), Channel (Names List) (Окно канала (Список имен юзеров)), Channel (Main Pane) (Окно канала (Главная панель, т.е. та, где текст)), Private Msg/DCC (Окно привата или DCC чата) и Main Menu (Главное меню).
Нас с тобой прежде всего интересует закладка "Channel (Names List)". Потому как, кликнув в канале на ник какого-нибудь чувака правой кнопкой мыши, у тебя появится именно эта менюшка, и все кики-баны и т.д. нужно засовывать именно туда. Приступим.
Первой строчкой у меня стоит: Обращение: $$1 > $?= text
Т.е. у меня в менюшке есть пункт "Обращение", и когда я на него кликну, появится окошко ввода текста, который пошлется чуваку.
$$1 - ник чувака в списке, на которого я кликнул. ">" - показывает, что после ника нужно поставить этот знак. "$?=text" - показывает, что нужно вывести окно ввода текста.
Дальше еще интереснее. Смотри:
[[ УпРаВл@нИе кАНАЛом ]]
.MassOp: /mop
.MassDeOp: /mdop
.MassDeOpBan: /mdopb
.MassBan: /mban
.MassIPBan: /mban2
.MassDeBan: /mdban
.MassWar: /mdopbk
.-
Первой строкой у меня идет название пункта меню ([[ УпРаВл@нИе кАНАЛом ]]). Затем идет ".MassOp: /mop". Вот тут притормозим. Точка в начале этой фразы означает, что это подменю. Т.е. когда ты выберешь пункт "[[ УпРаВл@нИе кАНАЛом ]]", у тебя вывалится подменю, в котором будет следующий список. В моем случает это все МассБаны. После каждого названия стоит двоеточие, показывающие, что название менюшки закончилось и начинается команда. Дальше, через пробел, идет сама команда. В моем случает это алаизис, но ты можешь прописать туда и полную команду. А теперь посмотри на последнюю строчку. Там точка и минус. Это означает, что здесь в менюшке нужно поставить разделительную полоску.
Вообще, ты можешь создавать целое дерево подменюшек. Каждый последующий виток отделяется большим количеством точек. Т.е. подменюшка первого уровня - одна точка вначале. Второго - две. И так далее. Смотри, как это у меня:
[[ uSer-c0NtRoL ]]
.Ban
..Ident, Port & Server: /ban1 $$1
..Ident, Server: /ban2 $$1
..Port, Server: /ban3 $$1
..Nick: /ban4 $$1
..Server: /ban5 $$1
.UnBan
..Ident, Port & Server:/unban1 $$1
..Port, Server:/unban3 $$1
Видишь, у меня в пункте "[[ uSer-c0NtRoL ]]" открывается подменю с двумя подпунктами - Ban и UnBan, а в этих подпунктах еще подменю. И так можно до бесконечности (а тебе это надо? :)).
В принципе это все. Запомни, что попупсы реагируют на переменную $$1 - которая означает имя чувака, которого ты выбрал в списке юзеров.
Спасибо, я кончил
Ну что, для начала, я думаю, хватит. Конечно же, делая эту статью, я не ставил себе задачу обучить тебя скриптам на профессиональном уровне. Для этого понадобился бы весь журнал. Но основы я тебе рассказал, так что дерзай. Если захочешь чего-то большего - лезь в хелпы и посещай канал #pirch, где ты сможешь получить ответы почти на все свои вопросы (а те, которые в стиле "почему меня девушки не любят", лучше побереги для других каналов :)).
Если совсем труба - ищи меня на DalNet, канал #xakep. Чем смогу - помогу.
Спасибо, что прочел до конца. Удачи тебе!