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 файла):

http://kamensk.net.ru/files/sms.zip

Оставить мнение

Check Also

Я у мамы инженер! Как перестать бояться паяльника и начать творить

Ты наверняка встречал в интернете потрясающие проекты вроде оркестра из дисководов, макета…