##################################################################### # Описание: Выводит информацию о праздниках на указанный день. # Включение скрипта: !chanset #канал +holidays # Thanks Vertigo ##################################################################### namespace eval hol { setudef flag holidays bind pub - !праздники [namespace current]::holidays proc holidays {nick uhost hand chan text} { if {![channel get $chan holidays]} { putserv "notice $nick :Команда !праздники отключена на этом канале." return } if {[string is space $text]} { putserv "notice $nick :Используй: !праздники <день> <месяц в родительном падеже> - попытка выяснить праздники на указанный день." return } set text [split $text] lassign $text day mon set day [string tolower $day] set mon [string tolower $mon] if {[string equal "января" $mon] && !($day <= 0 || $day >= 32)} { set m "1"; set d $day } elseif {[string equal "февраля" $mon] && !($day <= 0 || $day >= 29)} { set m "2"; set d $day } elseif {[string equal "марта" $mon] && !($day <= 0 || $day >= 32)} { set m "3"; set d $day } elseif {[string equal "апреля" $mon] && !($day <= 0 || $day >= 31)} { set m "4"; set d $day } elseif {[string equal "мая" $mon] && !($day <= 0 || $day >= 32)} { set m "5"; set d $day } elseif {[string equal "июня" $mon] && !($day <= 0 || $day >= 31)} { set m "6"; set d $day } elseif {[string equal "июля" $mon] && !($day <= 0 || $day >= 32)} { set m "7"; set d $day } elseif {[string equal "августа" $mon] && !($day <= 0 || $day >= 32)} { set m "8"; set d $day } elseif {[string equal "сентября" $mon] && !($day <= 0 || $day >= 31)} { set m "9"; set d $day } elseif {[string equal "октября" $mon] && !($day <= 0 || $day >= 32)} { set m "10"; set d $day } elseif {[string equal "ноября" $mon] && !($day <= 0 || $day >= 31)} { set m "11"; set d $day } elseif {[string equal "декабря" $mon] && !($day <= 0 || $day >= 32)} { set m "12"; set d $day } else {putserv "notice $nick :Ошибка. Неверно указан день или месяц."; return} ::http::config -useragent "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)" set parsing_tok [::http::geturl "http://www.calend.ru/holidays/$m-$d/" -timeout 20000] set data [regsub -all -- {\n|\r|\t|\v} [::http::data $parsing_tok] ""] ::http::cleanup $parsing_tok regexp {(.*?) -.*?<!-- list -->(.*?)</table></div></div>} $data "" num data regsub -all -- "\n" $data "" data regsub -all -- "</tr>" $data "|" data set list [list] foreach line [split $data "|"] { if {[regexp -nocase -- {<div><a href="/holidays/0/0/.*?/">(.*?)</a>} $line -> line]} { lappend list $line } } putserv "privmsg $chan :Праздники [string trim $num]: [join $list "; "]." } putlog "holidays.tcl by Statium loaded" }