XChat Perl scriptingl

Не так часто встретишь скрипт на Перле для XChat. Популяризация всяких правильных языков для унылых адекватов делает свое дело. Так или иначе, жизнь продолжается. Как-то я столкнулся с необходимостью сделать себе нечто маленькое, но функциональное. Конечно, захотел это написать на любимом языке. Проблемой стало не столько написание крошечного скриптика на десяток строчек, сколько вообще понимание правил написания их изучение внутренних функций клиента. Имеется документация на языке магов не нашего ордена. Их письмена тяжелы для моего понимания, а русских текстов на тот момент не было. Приходилось воспринимать то, что есть, ну и искать другие скрипты, ко которым можно разобраться в функциях. На самом деле, там все довольно просто. Будем разглядывать на практике.

Имеется клевое радио-рекорд, которое аяксом подгружает текстовый файл на своем сайте. В файле находится название композиции и прочая чушь, если там в данный момент реклама, а не музыка. Фактически, нам надо принять информацию из интернета на блюдечке и красиво ее выводить. Для начала, самое-то. Вот код в красивой обертке. Он же просто тут. Лень париться со всякими подсветками и прочим.

#!/usr/bin/perl;
# Буковки!
# use warnings;
# Закомментировал прагму, когда начал использовать скрипт.
use utf8;
# Это чтобы не мучиться с кракозябрами.
use LWP::Simple;
# А этот волшебный и простой класс поможет нам без проблем выдирать из интернета данные.
Xchat::register (»RadioRecord script», «0.1.0″);
# Самое интересное начинается! В любом скрипте для XChat должна присутствовать эта штука.
#Она регистрирует в самом клиенте наш скрипт. Все будет по правилам и красиво.

Xchat::hook_command( ‘rr’, ‘get_rr’ );
# Ставим хук на выполнение команды. В нашем случае, при написании команды «/rr», управление передается функции «get rr»

sub get_rr {
#ой, что это?!
my $content = get(»http://radiorecord.ru/script/record.txt»);
# Открываем тот-самый текстовый файл, в котором название музяки!
if ($content =~ m%В эфире: <strong>(.+)</strong> — (.+)%) {
# Здесь с помощью регулярки выдергиваем нужные буквы из строки в файле.
$chan = Xchat::get_info(’channel’);
# Еще одна интересная функция: получить название канала, на котором находимся.

Xchat::command(»msg $chan Сейчас на рекорде: $1 — $2″);
# Тут все довольно очевидно: выполнить команду. В нашем случае, послать сообщение на канал с названием музыки. В переменных имя исполнителя и, собственно, название.

}
else {
print qq/$content/;
# Если там не называние песни, а что-то другое, то просто выбросить на экран, а не на канал.
}
}

Так, на случай, если отвалится. Искренне надеюсь, что комментарии понятны. На всякий случай, отдельно пропишу:

Xchat::register (»Название скрипта», «Версия); -регистрация сценария в клиенте.

Xchat::hook_command( ‘IRC-команда’, ‘Функция’ ); — ставим хук на команду и обрабатываем.

Xchat::get_info(’channel’); — получение информации. В нашем случае, текущий канал.

Xchat::command(»IRC команда″); — Выполнение команды.

Xchat::hook_print(‘Channel Message’, «check»); — Нужная и полезная штука. Хук на сообщения на канале.

Xchat::hook_print(‘Channel Message’, «check»);

sub check {
my $pubstring = $_[0][1]; # Собственно, сама строка!
my $nick = Xchat::strip_code($_[0][0]); # А вот еще одна нужная функция. Выдергиваем ник написавшего.

}

Конечно, текст можно сравнивать, определять команды и прочее. Фактически, можно клиент превратить в полноценного бота, только к нему добавится еще и вся мощность языка Perl. Сделать всякие крутые штуки с БД, блекджеком и шлюхами, однако, стоит помнить, что чем сложнее система, тем она уязвимее. С другими командами я вас не познакомлю, т.к. не было необходимости и я в них не разбирался. ((:

Удачного онанизма программирования!

1 комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *