В мире IRC самым популярным клиентом является, конечно же, mIRC. Некоторые личности пытаются с этим поспорить, но увы - почти 90% виндовых пользователей отдают предпочтение именно мирку. Если приглядеться в эту приличную цифру, то можно сделать вывод - из этих процентов найдется добрая половина тех, кто пишет IRC-скрипты. Да, это полезное дело, но единственным (по моему личному мнению!) косяком mIRC является его среда программирования. Почему минус? Да только потому, что язык нестандартный и довольно сложный. Лично я "боялся" открывать раздел Remote из-за неприязни к языку. Я думаю, многие меня поймут.
Именно из-за этой проблемы большую популярность получил клиент xchat (как оригинальный, так и портированный), BersIRC и несколько других клиентов. В них среда программирования вполне стандартизирована. Там используются такие языки программирования, как Pascal, C и, конечно же, Perl. Perl является очень удобным языком, и по словам Ларри Уолла предназначен для ленивых людей. Таковыми и являются IRC-чатлане.
Так было до недавнего времени, а точнее до той поры, когда я нашел на CPAN-свалке модуль Win32-mIRC. Почесав макушку, я слил этот модуль, честно говоря, не ожидая увидеть интересный проект. На самом деле, это первый модуль, связывающий mIRC и Perl. Дружелюбный ман в конце файла помог быстро разобраться с использованием этого проекта.
Вначале необходимо заюзать модуль. В экзэмпле также указывается юзание warnings и stricts. Это необязательно, более того, из-за этих модулей скрипт может не запуститься. По крайней мере так вышло у меня. В остальном проблем нет - используем все процедуры этого модуля:
#!/usr/bin/perl
use Win32::mIRC qw( :all );
Ах да, я совсем забыл. Точнее положился на твою ответственность и прямые руки. Ты, конечно же, знаешь, как правильно устанавливать модули под Win (с помощью ppm). В нашем случае даже все проще - можно просто скопировать модуль в каталог %PERLPATH%\site\lib'win32.
Затем самое интересное - вызовем конструктор connect(). Хотя назвать
конструктором connect() довольно сложно - метод в свою очередь использует new() модуля Win32::DDE::Client. Функция свяжется с mIRC посредством DDE-обращения (именно на этом основана работа модуля). Параметрами функции являются: имя сервера, порт, канал, а также активная переменная. Запомни, что имя сервера и порт следует указывать
те, с которым уже соединен mIRC (в противном случае произойдет дисконнект и попытка приконнектиться на новый IRC-сервер). Что касается переменной активности окна, то она нужна вот для чего: после выполнения функции при значении 1 окно mIRC станет активным. В противном случае ничего не изменится.
В моем случае функция вызывается следующим образом:
connect('irc.telenet.ru',6667,'#convex',0);
Теперь насладимся вкусностями скрипта, а именно импортом мирковских переменных. Допустим, тебе нужно узнать аптайм клиента. Никаких проблем, просто вызовем метод Evaluate() следующим образом:
my $evaluate = evaluate();
my $uptime = $evaluate->Request('$duration($uptime)');
print "my uptime: $uptime\n";
Вот и все... Теперь скрестим пальцы на ногах и запустим наш чудо-скрипт. Ура! Оно работает :).
C:\perl>perl test.pl
my uptime: 29mins 23secs
Далее попробуем что-нибудь сказать. Чтобы было интересно, модифицируем аптайм (для чего мы использовали Perl вообще?). Для этого обычным регехпом заменим "mins" на "минут", а "secs" на "секунд". В mIRC это заняло больших трудов, в Perl - всего две строки:
$uptime = ~s/mins/минут/;
$uptime = ~s/secs/секунд/;
Далее выведем $uptime на канал:
my $command = command();
$command->Execute('/say Мой аптайм: $uptime');
Теперь понятно зачем в функции connect() применяется название канала. Оно используется по дефолту в таких командах как "/me" или "/say", что и доказывает скрипт, выводящий измененную строку аптайма в IRC.
Вот собственно и все. Да, я знаю, что ты ждал от этой статьи полного разруливания Win32:mIRC, но я этого делать не буду, поскольку знаю - ты с этим справишься сам. При желании можно сделать крутой обменник по DDE и парсить все входящие пакеты Perl'ом. Можно просто организовать Web-гейт для короткого пейджинга. Либо просто юзать скрипт для удаленного мониторинга компьютера (команду /run еще никто не отменял). Фантазируй, твори и пусть тебе улыбнется удача :).