###
#
# Название: 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 "" 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 {