Данная статья посвящается в первую очередь личностям, юзающими psybnc в сети с сервисами или пользующими опцию setawaynick (который естественно зарегистрирован в сети). В итоге, после сплита либо лага bnc получаем картину:
[22:21:51] * proteriot is now known as prot{St
[22:21:52] * prot{St is now known as proteriot
[22:23:52] * proteriot is now known as prot{St
[22:23:54] * prot{St is now known as proteriot
[22:25:55] * proteriot is now known as prot{St
[22:25:56] * prot{St is now known as proteriot
[22:27:52] * proteriot is now known as prot{St
[22:27:52] * prot{St is now known as proteriot
и, как это ни печально, дело доходит до бана этого посетителя (а еще печальнее, когда забанить его нет возможности).
Итак, после этого небольшого вступления, я расскажу о скриптинге в psybnc, а также об интересных опциях. Возможно, ты о них еще ни разу не слышал или видел краем уха, читая /bhelp. Но в любом случае, повторение - мать учения, поэтому не будет лишним узнать об этих фишках еще раз.
Изначально в Psybnc со скриптами все было плохо. Нет, сами скрипты исправно работали, но... существовал один минус. Если юзер юзает скрипты, то на каждый event этого скрипта создается не умирающий процесс-зомби. Таким образом, зомбей в системе могло быть до 300 штук. Согласись, что легче отказаться от скриптов, чем смотреть гадость в таблице процессов. Но наука не дремлет, и человек по нику BetaTEST (из Подольска), а быть может кто-то еще (лично я не видел), написал патч к кривому p_script.c, плохо завершающему созданные сокеты. Радикальным решением проблемы является даунлоад (http://kamensk.net.ru/forb/1/psybnc.patch) и рекомпиляция psybnc (разумеется, перед make будет команда patch < psybnc.patch). Лично у меня после такой процедуры не возникало проблем со скриптами.
Соббсно скриптинг. Не надейся, я не буду тебе перепечатывать файл SCRIPTING, это ты прекрасно сделаешь сам (с помощью твоего любимого словаря). Я лишь расскажу азы и создание маленьких, но необходимых скриптов, с помощью которых ты можешь решить вышесказанную проблему.
Для начала тебе нужно знать, что скрипты для каждого юзера лежат в scripts/USER#.SCRIPT, где # - личный номер юзера на bnc (его можно узнать пролистав psybnc.conf). Этот файл, естественно, должен быть доступен для чтения юзеру, под которым запущена пся.
Синтаксис скрипта очень простой. Он состоит из нескольких частей:
событие команда от_кого кому текст действие
Подробнее о каждой части скрипта.
Cобытие - реакция на какое либо действие от сервера или другого пользователя. Например, server - мессага от сервера, ctcp - реакция на ctcp-запрос, alias - собственная команда юзера на psybnc, dccchat - реакция на dcc-чат и другие.
Команда зависит от события. Если это server, команда должна быть строкой, пришедшей с сервера (NOTICE, JOIN, etc). Если это ctcp, под командой должен выступать запрос ctcp и так далее.
От_кого, Кому - маска исходящего (входящего) адресата (получателя) сообщения.
Текст - собственно на что реагируем. Для server - часть строки сообщения, для остальных событий не используется.
Действие - собственно сам скрипт. Как правило начинается с оператора echo, в котором находится сообщение посылаемое в определенный сокет. Их 3: STDIN (прямая команда на сервер), STDOUT (команда в DCC-чат) и STDERR (команда в главный лог psybnc). Если ты знаешь как обращаться с потоками, то перенаправить команду для тебя не составит труда. Это делается стандартным > &№, где № номер потока от 0 до 2.
Вот общие сведения для того, чтобы начать писать элементарные скрипты. Напишем наш первый скрипт. Нет, не hello world, а hello nickserv :)), то есть передачу идентификационной информации NickServ'у, а именно пароля на ник в случае сплита (или в общем случае - по запросу сервиса).
server NOTICE *!Services@ircnet.ru * "*registered and protected*" echo "IDENTIFY coolpassword"
server NOTICE *!Services@ircnet.ru * "*зарегистрирован и защищен*" echo "IDENTIFY coolpassword"
Вот эти две строки прекратят беспорядок с никами. Разумеется, маска сервисов должна подходить под шаблон *!Services@ircnet.ru, а нотайс от них содержать registered and protected, или аналог на русском языке. При этом событии на сервер будет автоматически отправлена строка IDENTIFY coolpassword (как ты наверное догадался, по умолчанию данные заносятся в нулевой дескриптор aka прямо на сервер).
С помощью lame-скрипта, можно легко сделать реакции на ctcp-запросы (учти, что когда ты в сети, ответ будет как от псюхи, так и от твоего клиента), например таким образом:
ctcp PING *!*@* * * echo "NOTICE $NICK :pong!"
Ах да, я совершенно забыл о переменных, которые способны скрасить жизнь скриптера. Это в первую очередь пропарсенная строка от события сервер, включающая в себя $P1, $P2, $P3 ее части, разделенные пробелом, а также универсальные переменные $TO, $NICK и прочие (содержащие в себе адресата, либо канал). Служебные переменные USERNUMBER, USERLOGIN, USERNICK, USERHOST и USERON, хранящие в себе инфу о подключенном юзвере (значения этих переменных можно посмотреть в psybnc.conf либо в SCRIPTING-мане).
Вернемся к потокам. Допустим, тебе захотелось узнать, когда заходил человек под ником FreeMan на канал #programmers, даже если в это время ты был в оффлайне. Заставим псюху писать эту конфиденциальную инфу в твой log, который будет тебе выведен, когда ты будешь online. Это можно сделать следующим скриптом:
server JOIN FreeMan!*@* #programmers * echo "User $NICK joined on $TO" >&2
Как видишь все просто. Еще раз повторю, что полное описание синтаксиса скриптов изложено в SCRIPTING (на нудном английском языке и с банальными примерами =)). На этом кончаю %). Пусть ты понял вышеизложенный материал и освоил скрипты в psybnc.
PS: после изменения личного скрипт-файла набери команду sreload на бнц, чтобы перезагрузить скрипт.
Вообще о псюхе можно говорить часами. Это самый чудесный баунсер, который я когда-либо видел. В нем слилось все - возможность скриптить, разные опции и настройки, небольшие недоработки и глюки с процессорным временем ;). Хотелось бы отметить пару фишек, которые есть в /BHELP, но удостоены внимания быть описаны в этой статье.
ADDOP и ADDAUTOOP. Позволяют опать ники на определенном канале. Отличие первой команды от второй в том, что в ней задается пароль для опа (при мессаге "OP пароль" в приват человеку дается оп на канале). ADDAUTOOP же дает автоматический оп по определению и по хосту ;).
ADDBAN. Награждает человека баном на определенном канале при его заходе на него. Иными словами, симуляция akick-листа =).
ADDCC. Прелестная опция, которая позволяет соединиться с ботом по DCC. Причем, когда ты свалишь с баунсера, соединение не пропадет. Любители эггдропов - это ваша команда.
Синтаксис этих (и других) команд, ты можешь посмотреть, опять же, через /BHELP. Всегда помни, что твой друг - RTFM и его нельзя стесняться =).
На этом сей урок объявляю законченным. Я отнюдь не заставляю тебя скачивать псюху и юзать ее в полную силу. Просто хочу, чтобы ты усвоил этот материал и прекратил флудить каналы и сеть лишними сменами ников =).
Взято тут