2. Мучим бота
Теперь заставим бота, с помощью таймеров, читать файл (каждые 10 минут) и анализировать информацию из него.
Создадим скрипт в директории "/home/vasya/eggdrop/scripts" под названием
sms.tcl. В нем будет примерно следующее:
set mins 10
set actchan #vasya
set file "scripts/mail.txt"
set smsnick Vasya
## Устанавливаем интервал, анализирования файла, путь к файлу и ник (от которого придет
SMS)
foreach tms "[timers]" {
if {([llength $tms] != 0)} {
set tmc [lindex $tms 1]
set tid [lindex $tms 2]
if {($tmc == "check")} {
killtimer $tid
}
}
}
## Убиваем ВСЕ таймеры этого скрипта при его повторном запуске (нам не нужны дубликаты)
proc check { } {
## Процедура проверки новых SMS
global file actchan smsnick
## Обьявляем переменные, заданные выше, как глобальные
set pipefile [open $file]
## Открываем канал, несущий в себе связь с файлом (хранящим
email)
while { [gets $pipefile sms] >=0 } {
## Пока возможно считывание
if {($sms != "empty")} {
## Если сообщение НЕ равно
"empty"
set arg1 [lindex $sms 0]
set maybe [lindex $sms 1]
## Установим переменные: arg1 - слово IRC, maybe - возможное действие на СМС (установка топика, если SMS состоит из первых слов "IRC topic", иначе - вывод простым текстом)
if {($maybe == "topic")} {
set irc [lrange $sms 2 end]
set predtopic [topic $actchan]
## Если есть слово topic - выделяем предыдущий топик канала и текст SMS (переменная irc)
if {([llength $predtopic] <= 100)} {
putserv "topic $actchan :$predtopic // $irc // Sms from $smsnick //"
## Если топик не слишком длинный - сохраняем старый и дописываем текст SMS в топик
} else {
putserv "topic $actchan :$irc // $irc // Sms from $smsnick //"
## Иначе создаем новый топик канала
}
} else {
set irc [lrange $sms 1 end]
putmsg $actchan "$irc // Sms from $smsnick //"
## Если в SMS нет слова topic - выдаем простым текстом
}
}
}
close $pipefile
## Закрываем связь с файлом
set tempfile [open $file w]
puts $tempfile "empty"
close $tempfile
## Открываем связь с файлом (но уже для записи), пишем в файл строку "empty" и закрываем его - для того, чтобы скрипт дважды не скидывал в IRC одно и тоже сообщение
timer mins check
## Создаем таймер на указанный интервал со ссылкой на процедуру check
}
check
## При запуске скрипта - сразу же выполним процедуру
Как видишь - все просто! Бот будет периодически смотреть файл, и если найдет в нем SMS, то напишет её на IRC.
А теперь - как подгрузить скрипт на бота.
1) Лезь на DCC к боту и напиши команду ".tcl source scripts/sms.tcl"
2) Допиши в eggdrop.conf строчку "source scripts/sms.tcl" и выполни команду "killall -1 eggdrop", либо ".rehash" на DCC
Чтобы узнать текущий таймер скрипта, напиши на DCC ".tcl
timers".
И на закуску (для самых ленивых), дам ссылку на скрипт (архив - 2 файла):