![]() |
Пишем простого Irc бота на Perl
Пишем IRC бота на PERL
Здравствуйте! Сегодня я вам расскажу, как написать простенького irc бота на PERL. Сам недавно только взялся за изучение этого языка. Как то раз скачал книгу Клинтон Пирс - "Освой самостоятельно Perl за 24 часа" Скажу сразу - книга так себе, только основы (Но мне как раз это и нужно было) И вот, когда я дошел до модулей, наткнулся на IO::Socket. Тем вечером я еще сидел в ирке, и подумал: "А почему бы не попробовать..." Ну вот, лирическое отступление кончилось =) Начнем! И так, что нам понадобится: ActivePerl, подключение к интернету, mIRC(или другой клиент для IRC), минимальные знания PERL, а также документация по протоколу IRC со стороны клиента (я брал http://tools.ietf.org/html/rfc2812) Собственно вот... Открываем текстовый редакор, пишем строчки: Код:
#!/usr/bin/perlПодключаем модули: Код:
use strict; Код:
my $server = "irc.inattack.ru"; В переменной $port хранится порт irc сервера (вписываем нужный) И в переменной $chanel хранится адрес канала В переменной $nick хранится Ник бота В переменной $ident хранится Идент бота В переменной $name хранится имя бота (увидите при хуизе) Идем дальше: Код:
my $socket = new IO::Socket::INET(PeerAddr => $server, PeerPort => $port, Proto => "tcp");Ну вот, переменные мы задали, начало есть =) Теперь идем к документации, видим, что первым делом мы должны послать Цитата:
Код:
print $socket "NICK $nick\r\n";Идем дальше, следущей командой должна быть: Цитата:
Код:
print $socket "USER $ident 8 * :$name\r\n";Цитата:
Код:
print $socket "JOIN $chanel\r\n";Этого нам конечно же не нужно. По протоколу, спустя какое то время, сервер на посылает запрос вида "PING : irc.site.com", а нам надо отправить ответ PONG. Идем к документации, видим: Цитата:
Код:
while (my $body = <$socket>) { Но все равно чего-то не хватает, правда? =) Давайте сделаем, чтоб при заходе на канал, он говорил привет: Код:
print $socket ("PRIVMSG $chanel : Привет всем =)\r\n");Приведу пример некоторых: (пишем в цикл while() ) Код:
if ($body =~ /^.*!yandex(.*)$/i) { Основы я вам дал, дальше давайте сами. Прошу сильно не критиковать, ибо только недавно взялся за изучение перл. С радостью выслушаю вашу критику и замечания. Ниже приведу весь исходник бота. Код:
#!/usr/bin/perl |
1. может значение $port тоже надо писать в кавычках?
2. команды серверу должны начинаться со слеша "/" |
про perldoc рассказывать даже не пытаюсь=\
Код:
/^.*!yandex(.*)$/iкароче незачот |
Зачем из этого делать статью?Выложил бы своего бота, кому надо переделают...
А вообще для начала дай хотябы одну книгу по языку pel :D :D |
Цитата:
|
>1. может значение $port тоже надо писать в кавычках?
Числа можно писать без кавычек >2. команды серверу должны начинаться со слеша "/" Нет, это в мирке и др так сделано. Прочитай документацию. >регекс ваще не в тему... надеюсь сам разберешься почему Да.. ступанул =) Учу... соррь >А вообще для начала дай хотябы одну книгу по языку pel Очепятался, бывает ;) За критику спасибо! |
Раз пошел такой колинкор предлагаю заценить и это кто не видел: http://www.gfs-team.ru/?act=articles&pact=55 - Perl.Irc Bot
Цитата:
|
В обоих статьях не увидел нормального парсинга...
Код:
/^:(.+?)!(.+?)@(.+?)\sPRIVMSG\s(#.+?)\s:(.+?)$/ |
Cobalt, прочел, только он криво работает
Цитата:
|
правильно что убрали из статей --- а так старо как мир -- но чтобы не совсем наезжали на новечка похвалю чуток =) молодца для начала нормально -- я как вспомню что сам сначала писал -- это пиздец был
|
| Время: 18:11 |