Об IRC. Доступно и со вкусом.

Пишем нашего первого бота на сокетах

Данная статья рассматривает самые азы понятия сокетов и написания простейшего бота на них.
Не буду вас долго напрягать лекциями что же такое сокет, если хотите поищите в интернете масса информации по данной теме.
Очень коротко о главном: сокеты представляют из себя прикладной программный интерфейс, входящий в состав многих ОС. Сокеты находятся на так назывемом транспортном уровне - ниже находится сетевой протокол IP, выше - специализированные протоколы, ориентированные на решение конкретных задач - это всем известные HTTP, FTP, SMTP и т.д.
Для начала советую хотя бы разок прочитать раздел хелпа, касающийся socket.
Итак, приступим.. Все что здесь будет написано нужно помещать в раздел ремоуты(Remote):
; создаем алиас для коннекта нашего бота, здесь sbot название сокета, далее сервак и порт для соединения
alias bot { sockopen sbot irc.spir.ru 6667 }

on *:sockopen:sbot: {
; если мы действительно законекались
if ($sock($sockname,1).status == active) {
; посылаем данные, необходимые для соединения, кому не понятно читаем статью русский RFC 1459
.sockwrite -n $sockname user 11 22 33 44
.sockwrite -n $sockname nick sockbot
; заходим на канал
.sockwrite -n $sockname join #test
}
}

on *:sockread:sbot:{
; читаем текст полученный от сокета
sockread %sock.text
; создаем окно для текста от бота
window -e @sockbot
; добавляем полученный текст
aline @sockbot %sock.text
; если сервак пингует нас, отвечаем, иначе улетим как мертвый груз ;)
if ($gettok(%sock.text,1,32) == PING) { .sockwrite -tn $sockname PONG $gettok(%sock.text,2,32) }
}

on *:input:@sockbot:{
; посылаем команды боту, команды должны соответствовать RFC 1459. Ну или просто добавляем условия и пишем свои команды...
.sockwrite -n sbot $1-
}

Все команды, полученные от сервера, будут обрабатываться on *:sockread так что если хотите добавить что либо ползем туда. На пример, если бота кикнут, чтоб он снова заходил на канал:
просто добавить:
if ($gettok(%sock.text,2,32) == KICK) { .sockwrite -tn $sockname JOIN $gettok(%sock.text,3,32) }
Ну и т.д.
Играя с этими командами можно создать специализированного бота, например для защиты канала, или развлекательного, допустим для чтения анекдотов с какого либо сайта.
В следущей статье я расскажу как осуществить соединение через прокси, а точнее через Socks4 протокол.
Удачи вам в скриптописании.