|

Пишем своего eggdrop`а
IRC-маньякам посвящается
Xakep, номер #041, стр. 041-079-1
forb (forb@kamensk.ru)
Настоящий программист должен придерживаться двух основных правил:
а) сложные задачи превращать в несколько простых;
б) разбивать сложную программу на несколько простых и понятных блоков (модулей).
Из теории...
Любая задача программиста решается не сразу на компьютере в каком-либо редакторе: будь то Delphi или обычный Basic... Структурированное программирование облегчает жизнь не только самим программистам, но и пользователю, и его компьютеру, так как обращение к ОДНОЙ процедуре НЕСКОЛЬКО раз занимает гораздо меньше времени и программа весит намного меньше. У тебя два выбора: либо писать программу в лоб (легко запутаться и некоторые элементы будут повторяться несколько раз, что приводит к засорению программы дубликатными строками кода), либо же программировать структурированно (используя процедуры, модули, функции...). Современные языки высокого уровня поддерживают такие возможности.
Задача
Чем мы сегодня займемся? Создадим искусственный интеллект, то бишь своего бота для IRC (небольшое подобие eggdrop ;)). Если ты IRC-мэн и зависаешь там часами - ты меня поймешь. Если ты не знаешь, что такое IRC, то скорее трави своего ослика IE на http://www.irc.ru - там тебе помогут разобраться с данной проблемой :).
Принцип работы бота
Если ты немного знаешь протокол TCP, то ты в курсе, что IRC - это вид сервиса, сидит, как правило, на 6667 порту и ждет в гости чатлан ;). После успешного коннекта клиент (mIRC, Pirch, BitchX, etc...) передает твои nick, ident, username и пароль на подключение (если он нужен), и демон впускает тебя на IRC-просторы, периодически посылая PING и ожидая в ответ PONG, тем самым проверяя тебя на живучесть... Эта особенность очень важна, т.к. если твой бот не отпингуется по истечении 90 секунд - сервер его просто отключит с резоном Ping timeout.
Для написания бота используем язык Perl - жемчужина, содержащая регулярные выражения и стоящая почти на любой Linux-машине... Официальный сайт языка http://www.perl.com, эмулятор под форточки можно слить с http://www.activeperl.com.
Святая святых - конфиг файл для бота
В файле bot.conf определим важные переменные, которые будут использоваться в самом коде. Я реализовал самый простой вариант - перловый файл, который читается в начале работы основного файла. В нем определяем такие переменные, как:
$module_path - директория модулей, относительно главного файла либо относительно корня.
@modules - массив содержащий имена твоих "irc-модулей", которые будут использоваться ботом, например ( @modules=('server','irc'); )
Переменные модуля server:
$host, $port - хост и порт IRC-сервера.
$botnick, $username, $infoname, $serverpass - ник, идент и информация о боте, пароль для коннекта на сервер (если нужен).
Переменные модуля IRC:
@channels - массив, содержащий каналы, на которые будет джойниться бот (первый из них - канал по умолчанию).
Пишем главный файл - bot.pl
Задача главного файла - объявить все модули и файлы, которые будут загружены в память, и запустить процедуру порождения сокета. Он выглядит примерно так:
Содержание Вперед на стр. 041-079-2
|