Вот Вы наконец-то установили себе бота, настроили конфиг, запустили, бот увидел вас как хозяина и сидит красуется на канале.
Что же теперь? Как же "научить" его выполнять ваши команды или например просто приветствовать всех при их входе на канал? Вы
думаете это очень сложно и непонятно? Эта статья создана что бы развеять эти убеждения. Начнем с простого.
Написание простейшего скрипта на TCL
Команда bind. Вы конечно спросите - "Что же она делает и зачем нужна?" - вот ответ: Она сообщает боту что нужно ожидать
определенное событие и как на него реагировать.
Команда: bind
Синтаксис: bind <тип события> <флаги пользователя> <текст> <процедура, которую вызывать при данном событии>
Теперь поясним каждый пункт:
<тип события> - тип события, произошедшего на IRC (в чате) или в ботнете (ботнет - 2 или более слинкованных вместе ботов, об этом
чуть позже). Например bind pub будет означать что ожидать определенной строки на канале. (о типах событий будет в продолжении)
<флаги пользорвателя> - у каждого пользователя на боте есть определенные внутренние флаги. (о флагах поговорим немного позже)
<текст> - на канале это может быть например !op или !kick, в некоторых событиях (напр. join или part) в этом месте идет хостмаска вида
"#канал ник!юзер@хост".
<процедура, которую вызывать при данном событии> - процедура (функция), которую вызывать при происхождении описанного события.
Пример:
bind pub - !beer pub:beer
Эта команда будет ожидать строку, в начале которой идет !beer и вызовет функцию pub:beer
Теперь мы создадим процедуру pub:beer. Как? - Все очень просто - командой proc.
Команда: proc
Синтакис: proc {<параметры>} { <тело процедуры> }
Поясним:
<параметры> - это параметры, которые нужны этой процедуре для нормальной работы
<тело> - это тело самой процедуры
Пример:
proc pub:beer {nick uhost hand chan text} {
<тело>
}
Почему именно эти параметры? - спросите вы. Отвечу - именно эти параметры возвращает bind с типом pub. Сейчас коротко опишем каждый:
nick - ник человека, который произнес данную фразу
uhost (userhost) - хост пользователя вида "user@host.domain.com"
hand - имя, под которым пользователь записан на боте
chan - канал, на котором была произнесена фраза
text - текст, который был написан после строки, указанной в bind (напр. !beer всем)
Теперь допишем тело процедуры.
proc pub:beer {nick uhost hand chan text} {
putserv "privmsg $chan : Держи пиво $nick!"
}
Команда: putserv
Cинтаксис: putserv "текст, отправляемый на сервер"
Пример:
putserv "privmsg $chan : Держи пиво $nick!"
Данная команда отправит на сервер строку "privmsg $chan :Держи пиво $nick"
Где $chan - переменная, содержащая имя канала, а $nick - переменная, содержащая ник.
Что же мы получим, соединив все что тут описано?
Код на TCL:
bind pub - !beer pub:beer
proc pub:beer {nick uhost hand chan text} {
putserv "privmsg $chan :Держи пиво $nick!"
}
Событие на IRC:
<юзер_Вася> !beer
<бот> Держи пиво юзер_Вася!
Как подключить скрипт к боту?
Подключение готового скрипта к боту:
Команда: source
Синтаксис: source </путь/до/файла/имяфайла.tcl>
Пример:
source scripts/beer.tcl
Сохраним наш скрипт в папку scripts в папке с ботом и этой командой подключим его к боту.
Файлы скриптов должны быть написаны в формате text-only, т.е. не должны содержать никакой
разметки как в MS Word и т.п. Создавать их лучше всего блокнотом (notepad) или vim под UNIX.
Несколько полезных советов:
1. Создайте файл scripts.conf в папке с ботом и прописывайте все нужные скрипты оттуда. Не забудьте подключить его командой source scripts.conf в конфиге бота (в самом низу)
Для чего? - А для того чтобы не листать целиком здоровый конфиг с кучей коментариев (при медленной связи по ssh или ftp, да и просто неудобно).
Усложнение нашего скрипта.
Возьмем наш скрипт:
bind pub - !beer pub:beer
proc pub:beer {nick uhost hand chan text} {
putserv "privmsg $chan :Держи пиво $nick!"
}
И научим его молчать на каналах, где скрипт не нужен.
Сделаем мы это с помощью оператора if
Синтаксис: if {<условие>} {<выполняемое действие>}
Пример:
if {1==1} { putlog "верно" }
Что за putlog? Это команда, которая пишет в лог бота указанный текст. Этот текст также идет в DCC (т.н. патилайн бота). Используется в целях отладки.
Синтаксис: putlog "text"
Пример:
putlog "текст, который пойдет в лог"
Операторы условий:
== - строго равно
!= - строго НЕ равно
>= - больше, либо равно
<= - меньше, либо равно
В одной строке if можно указывать несколько условий, объединяя их знаками:
&& - И
|| - ИЛИ
Пример:
if {{$var1==$var2} && {$var3==$var1}} { <действие> }
Вернемся к нашему скрипту:
Мы допишем в него строку if {$chan=="#MyChannel"} {}
Получим:
bind pub - !beer pub:beer
proc pub:beer {nick uhost hand chan text} {
if {$chan=="#MyChan" } {
putserv "privmsg $chan :Держи пиво $nick!"
}
}
Теперь бот будет откликаться на !beer только на канале #MyChan
Для принятия изменений в силу достаточно команды rehash
(В патилайне наберите .rehash)
|