Твоя подружка IRC`a. Часть 4. mIRC-скриптинг

В завершающей статье цикла (начало см. в «МБ» №№34, 36, 38) мы расскажем о скриптовании в mIRC. Эта статья будет интересна тем, кто хочет модифицировать свой «мирк», а также покажет вам, что возможности языка скриптования этого клиента огромны.

Предвижу первый ваш вопрос: «А почему же именно для «мирка», ведь есть X-Chat и много других клиентов?» Ответ прост: «голый» mIRC (базовый дистрибутив), очень интересно настраивать с нуля. Сидишь, бывало, и думаешь: «А нельзя ли изменить вон ту менюшку? Или добавить что-нибудь своё?» Сказано – сделано: лезем в справку, копаемся там и находим способ реализации задуманного. Так можно перелопатить всю программу.
Мы постараемся ещё более упростить этот процесс, описав скриптовый движок «мирка» так, чтобы вам даже не потребовалось открывать эту самую «стандартную справку». Впрочем, в отдельных случаях заглянуть туда всё-таки придётся. Или же покопаться в Сети – ведь возможности mIRC, как мы уже отметили, безграничны, а значит, никакая справка не может охватить их на 100%.

Ключ на старт
Если у вас нет дистрибутива mIRC, то вам пора на официальный сайт за самой свежей версией программы. Стоит обратить внимание на то, что скрипт, сделанный под опредёленную версию «мирки», может не заработать на более ранней. Связано это с тем, что программа постоянно совершенствуется, в неё вносятся различные исправления и добавления.

Взлёт
Все скрипты строятся по единому принципу. Сначала продумываются функциональность и структура. Начинающим скриптописателям можно взять какую-нибудь простенькую задачу (например, создать новое меню с собственными «слапами» или расширить меню управления, добавив туда новые опции). Затем задачу усложняют, дополняя первоначальный проект и постепенно получают скрипт, удовлетворяющий всем желаниям и прихотям.
Нетрудно догадаться, что у mIRC, имеющей собственный скриптовый движок, есть и собственный редактор скриптов. Вызывается он кнопкой на панели инструментов или комбинацией клавиш Alt+R.
Основное меню скрипта создается на вкладке Popups редактора, там же прописывают простые операции. Более сложные операции выделяют в отдельные сценарии с помощью Aliases (для программистов понятнее будет термин «процедура»); при этом в Popups создаётся ссылка на них. Если требуется анализировать какие-нибудь события в реальном времени, то используют ещё и Remote. Эти три составляющие (Popups, Aliases и Remote) обычно содержатся в любом скрипте. По умолчанию они пишутся в popups.ini, aliases.ini и remote.ini соответственно, но никто не запрещает вам использовать и произвольные имена файлов.

Первая ступень...
Начнём с вкладки Aliases. Здесь расположены описания команд, которые используются достаточно часто или которые просто лень набирать. Например, так можно укоротить слишком длинные команды. Структура их выглядит следующим образом: /< имя команды> < список параметров> (например, /упал под стол me, где /упал под стол – непосредственно команда, а me – это параметр). Пользовательская команда может состоять из одной или нескольких команд, как системных, так и пользовательских (разумеется, до момента их использования они должны быть объявлены). Структура пользовательской команды имеет следующий вид: /< имя новой команды> {< список команд>} или /< имя новой команды> < команда 1> | < команда2> | … | < команда n>. Если используется одна команда, то фигурные скобки можно не ставить.

Примеры:
/main /join #main – если вы в поле ввода введёте /main, то у вас выполнится вход на канал #main;
/ch /join #$1 – $1 обозначает первый параметр, который передаётся в данную команду (параметры разделяются пробелами). Набрав /ch main, мы попадём на данный канал. Здесь имя канала указывается без «#» – этот знак уже определён в команде и при выполнении присоединится к параметру;
/messg /me $2 $1 – здесь присутствует два параметра (каждый новый будет обозначен следующей цифрой). Команда /messg друзьям привет выдаст сообщение на канале – «привет друзьям»;
/jj /join $? – $? означает, что при выполнении скрипта будет отображено диалоговое окно для ввода параметра. Например: $?="Введите канал для входа" выведет окно с соответствующим заголовком;
/aw /away $?="Введите сообщение:" | /say $! – параметр $! содержит строку, которую вы только что ввели в окне диалога, что спасёт вас от дублирования;
/eat /me $$1 взял часть $$2 – префикс $$ обозначает, что данная команда будет запущена, если присутствуют все параметры, т.е. если мы введём /eat nick, то команда не выполнится из-за отсутствия второго параметра;
Также существует префикс канала «#», на котором вы запускаете команду на выполнение. В некоторых случаях это очень удобно, например: /p /part # – команда выйдет с текущего канала.

Верхние слои атмосферы
mIRC поддерживает создание различных меню для окна статуса, окон привата, основного окна чата и списка ников. Для перехода к редактированию меню необходимо переключиться на вкладку Popups в редакторе. В пункте меню View редактора возможно выбрать для изменения следующие типы меню: Status – меню окна статуса сервера; Channel – меню окна канала; Query – меню окна привата; Nick list – меню списка никнеймов; Menu bar – пункт, который появится в головном меню mIRC. Формат записей, которыми мы будем создавать свои собственные меню, выглядит так: < пункт меню>:< команды>.
Создадим, например, меню для списка ников. Прежде всего, выбираем Nick list в пункте меню редактора View. Нам откроется меню, используемое по умолчанию. Если вам оно ещё потребуется, то скопируйте его куда-нибудь, а затем удалите. Создадим пункт меню, который будет выдавать информацию о пользователе из списка ников. Добавляем строку «Информация о юзвере:/uwho $1», и чтобы убедиться, что всё сделано правильно, перейдём на вкладку Popup. Нам будет продемонстрировано только что созданное меню.

20080206_irc_part_4.png

Попробуем свеженаписанный скрипт в действии. Вызовем обновлённое контекстное меню в списке ников, кликнув правой кнопкой мыши на каком-нибудь из них, и выберем только что созданный пункт. Нашему взору предстанет адресная книга mIRC, открытая на вкладке WhoIs (команда /uwho как раз и отвечает за вызов этой книги).
Редкое меню обходится без вложенности. Для создания подменю сперва необходимо обозначить пункт, из которого будет «вываливаться» очередной уровень. В следующей строке надо поставить «.», что и будет означать принадлежность создаваемого пункта к подменю, и вставить название пункта. Для того, чтобы всё стало ясно, разберём небольшой пример:

Управлялка ; пункт меню, из которого будет «вываливаться» подменю
.От «консервы» ; точкой обозначено подменю являющееся родительским для ещё одного меню, а "от «консервы»" - значит, что действие будет производиться от лица стандартного сервиса
..DeSop: /msg chanserv deprotect # $1 ; под-подменю из нашего подменю
..Sop: /msg chanserv protect # $1
..DeOp: /msg chanserv deop # $1
..Op: /msg chanserv op # $1
.В игнор его:/ignore $$1 1
.Убрать игнор:/ignore -r $$1 1

Этот код создаёт меню управления пользователем: снятие/присвоение статуса администратора/оператора от имени стандартного сервиса ChanServ, а также добавление пользователя в список игнорирования и удаление его оттуда. Вставьте этот пример в редактор и посмотрите на результат. При необходимости в ваше меню можно включить разделители – для этого нужно добавить строку, содержащую единственный символ «-».

Отстыковка...
Оставшиеся три вкладки – Remote, Users, Variables – мы рассмотрим вместе, так как они относятся к одному общему разделу Remote. Этот инструмент является самой сложной частью mIRC и будет рассмотрен не так глубоко: тем, кто заинтересуется, рекомендуем использовать стандартную справку. Итак, в секции Users добавляются пользователи с определяемыми для них уровнями доступа. Эти уровни будут управлять выполнением различных реакций скрипта. В секции Variables описываются переменные, которые потом можно будет использовать. В самой же секции Remote будет создаваться ваш собственный скрипт.
А сейчас мы рассмотрим некоторые события, происходящие, когда вы общаетесь в чате. Самое частое событие – on TEXT, возникающее тогда, когда вы получаете сообщение на канале или в привате.
Формат команды выглядит следующим образом: on < уровень>:TEXT:< текст, который получен>:< *>< ?>< #[,#]>:< команды>.
Пример: on *:TEXT:*помоги*:#mirc,#irchelp:/msg $nick какие проблемы?

События on ACTION и on NOTICE имеют аналогичный формат. Возможность определить маску текста, на который будет реагировать ваш скрипт, будет вам в помощь: «*» означает, что возможен любой текст, & – любое слово, тест – возможно сообщение только с данным словом, *тест* – возможно сообщение, где присутствует подстрока «тест». Место же, откуда будут обрабатываться, обозначаются так: ? – любые приваты; # – любые каналы; #main – конкретный канал; «*» – все сообщения.

Событие on ACTIVE возникает тогда, когда вы активируете окно (канала или привата) в mIRC.
Формат команды: on < уровень>:ACTIVE:< *#?=!@>:< команды>. Вот небольшой пример данного события: on *:ACTIVE:#mirc:/echo окно канала #mIRC активно. Также можно воспользоваться идентификаторами $active и $lactive, которые «вставят» на своё место название окна, активированного или деактивированного вами.

События on BAN и UNBAN возникают, когда кого-то банят или с кого-то снимают бан на канале. Формат команды: on < уровень>:BAN:< #[,#]>:< команды>.
Пример: on 9:BAN:#newbies:/mode $chan -o $nick | /mode $chan -b $banmask
В данном примере описано то, что если кто-то забанит пользователя с уровнем доступа 9, то автоматически снимется оп на канале с пользователя, который банил (с помощью идентификаторов $chan и $nick), а также снимется сам бан ($banmask хранит маску бана, по которой пользователь был забанен). Ещё существует идентификатор $bnick, заботливо хранящий ник забаненного пользователя.

События on OPEN и on CLOSE возникнут, когда вы откроете или закроете какое-нибудь окно mIRC. Формат команды:
on < уровень>:OPEN|CLOSE:< ?|@|=|!|*>: < полученный текст>:< команды>
С масками текста работают так же, как и при событии on TEXT.
Вот небольшой пример: on 1:OPEN:?:*:/echo -s Открыто $target окно привата. Здесь идентификатор $target – заголовок окна, которое будет открыто, ? – означает, что это будет окно привата.

Остаются ещё два важных события – on OP/DEOP и on MODE. Как вы можете догадаться, они срабатывают тогда, когда пользователю дают права оператора на канале или же лишают его таких прав. Формат команды: on < уро-вень>:OP:< #[,#]>:< команды>. Небольшой пример: on 1:OP:#main:/msg $nick тебе дали опа, не шали!

Также имеется обработка событий с «войсами» – on VOICE/DEVOICE, которая работает аналогично on OP/DEOP.

Событие on MODE возникает тогда, когда пользователь меняет режимы канала. Формат команды: on < уровень>:MODE:< #[,#]>:< кома-нды>. Пример: on @1:MODE:#:/notice $me $nick установил режим $1- на канале $chan.
@ означает, что событие будет обработано, если пользователь, меняющий режим канала, имеет статус оператора. Идентификатор $me обозначает ваш текущий ник, а идентификатор $nick обозначает ник пользователя, который меняет режим канала. Идентификатор $1— хранит непосредственно сам режим, который был изменен.

Выход в космос
Теперь вам достаточно нажать кнопку «ОК», и созданный скрипт сразу же начнёт функционировать – при условии, что всё было написано правильно. Минусом встроенного редактора скриптов mIRC является то, что если вы напишите что-либо неправильно, то вам не укажут место, где вы могли ошибиться. Команды и события, в которых допущены ошибки, просто не будут работать. Остаётся надеяться, что автор не поленится, и в следующие версии клиента будет встроен также и отладчик скриптов.

PS. Цикл статей об IRC подошёл к концу. Основные аспекты, которые должен знать человек, пользующийся этим сервисом, рассмотрены. Если у вас возникли какие-нибудь вопросы, задавайте их на форуме или на нашем канале, мы постараемся ответить вам на них. Быть может, мы ещё вернёмся к теме IRC, а пока – до свидания и приятного общения на просторах «ирки».


Рекомендуем почитать: