# Version: 1.0 beta # Copyright © 2005 stalker # Look for updates @ www.IRCWorld.ru # формат команды !alarm <время> или !напомнить <время> # По истечении времени <время> бот говорит вам в приват и нотисами # Здесь вы можете установить префикс для команд (например, реагировать на .alarm или !alarm). Можно использовать любой символ: set cmdpr "." #Максимальное время напоминания в минутах set alarm(time) "120" #Максимальное количество напоминаний set alarm(lim) "20" bind pubm - "* ${cmdpr}help alarm*" :alarm:help bind msgm - "${cmdpr}alarm*" :alarm:sets:timer bind msgm - "${cmdpr}напомнить*" :alarm:sets:timer bind msgm - "${cmdpr}напоминания" :alarm:list bind msgm - "${cmdpr}забыть" :alarm:delete bind part - * :alarm:part bind sign - * :alarm:part bind join - * :alarm:join proc :alarm:help {nick uhost hand chan text} { global alarm cmdpr if {![validuser $hand]} { return } puthelp "privmsg $nick :Команды вводятся в приват боту" -next puthelp "privmsg $nick :\002${cmdpr}напомнить \[минуты\] \[текст\]\002 - Установить, через сколько \002минут\002(не более $alarm(time)) бот должен сказать вам в приват \002текст\002;" puthelp "privmsg $nick :\002${cmdpr}alarm \[минуты\] \[текст\]\002 - Установить, через сколько \002минут\002(не более $alarm(time)) бот должен сказать вам в приват \002текст\002;" puthelp "privmsg $nick :\002${cmdpr}забыть\002 - Удалить ранее установленное напоминание;" if {[matchattr $hand o]} { puthelp "privmsg $nick :\002${cmdpr}напоминания\002 - Просмотреть список активных напоминаний." } return } proc :alarm:sets:timer {nick uhost hand text} { if {![validuser $hand] || ![handonchan $hand]} { return } global alarm set l 0 foreach i [timers] { if {[string range [lindex $i 1] 0 5] == "altim:"} { incr l } } if {$l > $alarm(lim)} { puthelp "privmsg $nick :\00312Извини, но в данный момент нельзя установить напоминание, попробуй позднее" return } set mins [expr int(abs({[lindex $text 1]}))] if {![isnumber $mins]} { puthelp "privmsg $nick :\00314Не указано \002время" return } if {$mins > $alarm(time)} { puthelp "privmsg $nick :\00314Неее, это слишком долго ждать, я могу забыть. Максимум \002$alarm(time) минут." return } set notice [lrange $text 2 end] if {$notice == ""} { puthelp "privmsg $nick :\00314надо бы \002текст\002 указать" return } if {[regexp -nocase -- \{.*?\ altim:$hand\ (timer.*?)\} [timers] g id]} { killtimer $id rename altim:$hand "" } setuser $hand XTRA notice $notice timer $mins [list altim:$hand] proc altim:$hand { } { set procname [lindex [info level 0] 0] set hand [lindex [split $procname ":"] 1] if {[hand2nick $hand] != ""} { putserv "privmsg [hand2nick $hand] :[getuser $hand XTRA notice]" putserv "notice [hand2nick $hand] :[getuser $hand XTRA notice]" utimer 5 [list putserv "notice [hand2nick $hand] :[getuser $hand XTRA notice]"] utimer 10 [list putserv "notice [hand2nick $hand] :[getuser $hand XTRA notice]"] } rename $procname "" setuser $hand XTRA notice "" } puthelp "privmsg $nick :\00303Ok, через \002$mins\002 минут я тебе в приват стукну" return } proc :alarm:list {nick uhost hand text} { if {![matchattr $hand o]} {return } foreach i [timers] { if {[string range [lindex $i 1] 0 5] == "altim:"} { lappend out "\00310[hand2nick [string range [lindex $i 1] 6 end]]\00314(\00305[lindex $i 0]\00314)" } } if {[info exists out]} { if {[llength $out] == 1} { set al "напоминание" } elseif {[llength $out] < 5} { set al "напоминания" } else { set al "напоминаний" } puthelp "privmsg $nick :\00314Всего\00304 [llength $out]\00314 $al." puthelp "privmsg $nick :\00314Их установили - [join $out ","]." } else { puthelp "privmsg $nick :\00314В данный момент нет активных напоминаний" } return } proc :alarm:delete {nick uhost hand text} { if {![validuser $hand]} { return } if {[regexp -nocase -- \{.*?\ altim:$hand\ (timer.*?)\} [timers] g id]} { killtimer $id rename altim:$hand "" puthelp "privmsg $nick :\00314Напоминание удалено" } return } proc :alarm:part {nick uhost hand chan text} { utimer 1 [list :alarm:partoff $hand] } proc :alarm:partoff {hand} { if {![handonchan $hand]} { foreach i [timers] { if {[string first "altim:$hand" [lindex $i 1]] != -1} { utimer 60 "[list :alarm:del [lindex $i 2] $hand]" } } } } proc :alarm:del {id hand} { killtimer $id rename altim:$hand "" return } proc :alarm:join {nick uhost hand chan} { foreach i [utimers] { if {[string match ":alarm:del timer* $hand" "[lindex $i 1]"]} { killutimer [lindex $i 2] } } } putlog "Alarm script by stalker loaded"