### # # Название: krf.tcl # Версия: 1.0 # Автор: tvrsh # ### # # Описание: Скрипт забирает с сайта http://www.zakonrf.info/ кодексы РФ. # ### # # Установка: # 1. Скопируйте скрипт krf.tcl в папку scripts/krf вашего бота. # 2. В файле eggdrop.conf впишите строку source scripts/krf/krf.tcl # 3. Сделайте .rehash боту. # ### # # Версион хистори: # # 1.0(29.06.2010) Первая паблик версия. # ### namespace eval krf { # Сбрасываем значения всех переменных. foreach p [array names krf *] { catch {unset krf($p) } } # Указываем канальный флаг(.chanset #chan +krf для включения скрипта). setudef flag krf ### ### # Меню настроек ниже этой линии: # # ______________________________ # ### ### variable krf array set krf { pref {!} binds {krf кодекс rjltrc лка} msg 1 notice 0 delay 7 color1 \00314 color2 \00303 color3 \00305 version "krf.tcl version 1.0" author "tvrsh" } ### ### # Ниже этой линии начинается код, не изменяйте его если не знаете TCL: # # ____________________________________________________________________ # ### ### # Обработка биндов. foreach bind [split $krf(binds) " "] { bind pub -|- "$krf(pref)$bind" ::krf::krf_pub if {$krf(msg) >= 1} { bind msg -|- "$krf(pref)$bind" ::krf::krf_msg } } # Процедура обработки приватных команд. proc ::krf::krf_msg {nick uhost hand text} { variable krf ::krf::krf_proc $nick $uhost $hand $nick $text } # Процедура обработки паблик команд. proc ::krf::krf_pub {nick uhost hand chan text} { variable krf # Проверяем наличие флага. if {![channel get $chan krf]} { return 0 } ::krf::krf_proc $nick $uhost $hand $chan $text } # Процедура обработки запроса. proc ::krf::krf_proc {nick uhost hand chan text} { variable krf global lastbind putlog "\[krf\] $nick/$chan" if {[info exists krf(lasttime,$chan)] && [expr $krf(lasttime,$chan) + $krf(delay)] > [clock seconds]} { ::krf::krf_out $nick $chan "$krf(color1)Запрос не чаще одного раза в $krf(color2)$krf(delay) $krf(color1)[lindex {. секунду секунды секунд} [::krf::krf_numgrp $krf(delay)]]." ::krf::krf_out $nick $chan "$krf(color1)Подождите $krf(color3)[expr $krf(delay) - [expr [clock seconds] - $krf(lasttime,$chan)]] $krf(color1)[lindex {. секунду секунды секунд} [::krf::krf_numgrp [expr $krf(delay) - [expr [clock seconds] - $krf(lasttime,$chan)]]]] до следующего запроса." return 0 } set kodeks [lindex [split $text] 0] if {$kodeks == ""} { set krf_tok [::http::config -useragent "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)"] set krf_tok [::http::geturl "http://www.zakonrf.info/content/view/kodeksy/" -timeout 15000] set data [::http::data $krf_tok] ::http::cleanup $krf_tok if {[info exists ::sp_version]} { set data [encoding convertfrom utf-8 $data] } else { set data [encoding convertto cp1251 [encoding convertfrom utf-8 $data]] } regexp {(.*?)} $data "" title regexp {Актуальность: (.*?) г.} $data "" actual regexp {
(.*?)} $data "" data regsub -all -nocase -- {
|
} $data {} data ::krf::krf_out $nick $chan "$krf(color3)\002$title\002\003" set i 1 if {[file exists "scripts/krf/kodeks.txt"]} { set file [open "scripts/krf/kodeks.txt" "a+"] } set file [open "scripts/krf/kodeks.txt" "w+"] foreach line [split $data "\n"] { if {[regexp -nocase -- {(.*?)
} $line -> href kodeks]} { ::krf::krf_out $nick $chan "$krf(color1)$kodeks $krf(color2)\[$krf(color3)$lastbind $i$krf(color2)\]" set data "$href|$kodeks" puts $file $data incr i } } close $file ::krf::krf_out $nick $chan "$krf(color1)Актуальность: $krf(color2)$actual$krf(color1).\003" set krf(lasttime,$chan) [clock seconds] return 0 } else { set glava [lindex [split $text] 1] if {$glava == ""} { set data [read [set file [open "scripts/krf/kodeks.txt" "r"]]] close $file set link [lindex [split [lindex [split $data "\n"] [expr [lindex [split $text] 0] - 1]] "|"] 0] set krf_tok [::http::config -useragent "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)"] set krf_tok [::http::geturl "http://www.zakonrf.info$link" -timeout 15000] set data [::http::data $krf_tok] ::http::cleanup $krf_tok if {[info exists ::sp_version]} { set data [encoding convertfrom utf-8 $data] } else { set data [encoding convertto cp1251 [encoding convertfrom utf-8 $data]] } regexp {(.*?)} $data "" title regexp {
(.*?)} $data "" data ::krf::krf_out $nick $chan "$krf(color3)\002$title\002\003" if {[file exists "scripts/krf/$kodeks.txt"]} { set file [open "scripts/krf/$kodeks.txt" "a+"] } set file [open "scripts/krf/$kodeks.txt" "w+"] set i 1 foreach line [split $data "\n"] { if {[regexp -nocase -- {Глава (.*?). (.*?)} $line -> glhref glnumb glname]} { ::krf::krf_out $nick $chan "$krf(color2)Глава $glnumb\003 - $krf(color1)$glname $krf(color2)\[$krf(color3)$lastbind $kodeks $i$krf(color2)\]" incr i set data "$glhref|$glname" puts $file $data } } close $file return 0 } else { set statia [lindex [split $text] 2] if {$statia == ""} { set data [read [set file [open "scripts/krf/$kodeks.txt" "r"]]] close $file set link [lindex [split [lindex [split $data "\n"] [expr [lindex [split $text] 1] - 1]] "|"] 0] set krf_tok [::http::config -useragent "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)"] set krf_tok [::http::geturl "http://www.zakonrf.info$link" -timeout 15000] set data [::http::data $krf_tok] ::http::cleanup $krf_tok if {[info exists ::sp_version]} { set data [encoding convertfrom utf-8 $data] } else { set data [encoding convertto cp1251 [encoding convertfrom utf-8 $data]] } regexp {

(.*?)

} $data "" home regexp {
(.*?)} $data "" data if {[regexp -nocase -- {Глава (.*?) (.*?)} $data -> glnumb gltitle]} { ::krf::krf_out $nick $chan "$krf(color3)\002$home / Глава $glnumb $gltitle\002\003" } if {[file exists "scripts/krf/$kodeks.$glava.txt"]} { set file [open "scripts/krf/$kodeks.$glava.txt" "a+"] } set file [open "scripts/krf/$kodeks.$glava.txt" "w+"] set i 1 foreach line [split $data "\n"] { if {[regexp -nocase -- {Статья (.*?). (.*?)} $line -> sthref stnumb stname]} { ::krf::krf_out $nick $chan "$krf(color2)Статья $stnumb\003 - $krf(color1)$stname $krf(color2)\[$krf(color3)$lastbind $kodeks $glava $i$krf(color2)\]" set data "$sthref|$stname" puts $file $data incr i } } close $file return 0 } else { set data [read [set file [open "scripts/krf/$kodeks.$glava.txt" "r"]]] close $file if {[lindex [split $text] 2] < 1 || [lindex [split $text] 2] > [expr [llength [split $data "\n"]] - 1]} { ::krf::krf_out $nick $chan "$krf(color1)Статьи кодекса под введенным Вами номером не существует. Используйте $krf(color2)$lastbind $kodeks $glava $krf(color3)<число от 1 до [expr [llength [split $data "\n"]] - 1]>.\003" return 0 } else { set link [lindex [split [lindex [split $data "\n"] [expr [lindex [split $text] 2] - 1]] "|"] 0] set krf_tok [::http::config -useragent "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)"] set krf_tok [::http::geturl "http://www.zakonrf.info$link" -timeout 15000] set data [::http::data $krf_tok] ::http::cleanup $krf_tok if {[info exists ::sp_version]} { set data [encoding convertfrom utf-8 $data] } else { set data [encoding convertto cp1251 [encoding convertfrom utf-8 $data]] } regexp {

(.*?)<\/h2>} $data "" title regexp {
(.*?)
} $data "" data ::krf::krf_out $nick $chan "$krf(color3)\002$title\002\003" if {[file exists "scripts/krf/$kodeks.$glava.txt"]} { set file [open "scripts/krf/$kodeks.$glava.txt" "a+"] } set file [open "scripts/krf/$kodeks.$glava.$statia.txt" "w+"] foreach line [split $data "\n"] { if {[regexp -nocase -- {(.*?) } $line -> header]} { lappend headmsg $header } } ::krf::krf_out $nick $chan "$krf(color2)[join $headmsg]\003" foreach line [split $data "\n"] { if {[regexp -nocase -- {

(.*?)

} $line -> stext]} { ::krf::krf_out $nick $chan "$krf(color1)$stext\003" set data "$stext" puts $file $data } } close $file return 0 } } } } } # Процедура вывода строк. proc ::krf::krf_out {nick chan text} { variable krf if {$krf(notice) == "1"} { putserv "NOTICE $nick :$text" } else { putserv "PRIVMSG $chan :$text" } } # Процедура подстановки окончаний к числам. proc ::krf::krf_numgrp {number} { switch -glob -- "$number" { *11 {return 3} *12 {return 3} *13 {return 3} *14 {return 3} *1 {return 1} *2 {return 2} *3 {return 2} *4 {return 2} default {return 3} } } # Выводим сообщение о том, что скрипт удачно загружен. putlog "\[krf\] $krf(version) by $krf(author) loaded" }