#################################################### # WindropClan @ http://windrop.clan.su # Автор: Vladislav # Версия: 1.3 # Описание: Очень интересный и полезный скрипт для тех кто выбрал ucoz-хостинг для своего проекта. # Скрипт выводит последнее сообщение с ucoz-форума при команде !форум <сайт>, без указания сайта выведет сообщение с того форума, который указан в скрипте. # Также есть параметр для статистики форума. Указывать нужно лишь имя сайта, остальное скрипт подставит сам. # Команды: !форум ? #################################################### namespace eval uforum { setudef flag no[namespace tail [namespace current]] # Сайт по умолчанию: variable defsite "windrop.clan.su" # Антифлуд в секундах: variable timer 10 # Длина сообщения в символах: variable limit 1200 # [1/0] Выводить время, автора, дату, ссылку, название темы: variable title 1 # [1/0] Разрешить работу в привате: variable pbind 1 # Не трогать, нужно для антифлуда: variable clock 0 foreach bind {форум uforum} {bind pub - $::gprefix(1)$bind [namespace current]::pub; if {$pbind} {bind msg - $::gprefix(1)$bind [namespace current]::msg}} proc msg {nick host hand text} {pub $nick $host $hand $nick $text; return} proc pub {nick uhost hand chan text} { variable defsite; variable timer; variable clock if {$chan != $nick && [channel get $chan no[namespace tail [namespace current]]]} {return} set text [string trim [string map { {}} [stripcodes cubr $text]]]; set lastbind $::lastbind if {[string equal -nocase "стат" [lindex [split $text] 0]] || [string equal -nocase "stat" [lindex [split $text] 0]]} {set s 1; if {[lindex [split $text] 1] == ""} {set url $defsite} else {set url [lindex [split $text] 1]}} else {set s 0; if {[lindex [split $text] 0] == ""} {set url $defsite} else {set url [lindex [split $text] 0]}} set url [string map {https:// http://} $url]; regexp -nocase -- {http://(.*?)/} $url -> url; regexp -nocase -- {http://(.*?)$} $url -> url; regexp -nocase -- {^(.*?)/} $url -> url; regsub -all -nocase -- {^www.} $url "" url; set url "http://$url" if {![string match "*\.*" $url]} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Формат: $lastbind \[стат\] \[ucoz-сайт\] - статистика форума и последнее сообщение. По умолчанию сайт $defsite"; return} if {[expr [clock seconds]-$clock] < $timer} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Команда недавно запрашивалась. Повтори попытку через [expr $timer-([clock seconds]-$clock)] сек."; return}; set clock [clock seconds] if {$s} {stat $nick $uhost $hand $chan $url} else {post $nick $uhost $hand $chan $url} } proc stat {nick uhost hand chan url} { ::http::config -urlencoding utf-8 -useragent "Mozilla/6.0" if {[catch {set parsing [::http::geturl $url/forum -binary true -timeout 20000]} error]} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка: $error"; return} elseif {[http::ncode $parsing] == "404"} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка: [http::code $parsing]"} elseif {[http::status $parsing] == "ok"} {set data [regsub -all -- {\n|\r|\t|\v} [encoding convertfrom utf-8 [::http::data $parsing]] ""]; regsub -all -- {\s+} $data " " data} elseif {[http::status $parsing] == "timeout"} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Таймаут соединения."} elseif {[http::status $parsing] == "error"} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка: [http::error $parsing]"} ::http::cleanup $parsing; if {![info exists data]} {return} if {[regexp -nocase -- {.*
(.*?) | .*?(.*?) | } $data -> text1 text2 text3]} { putserv "PRIVMSG $chan :[string map -nocase {Посетители: Посетителей:} [webstrip $text1]] :: [webstrip $text2] [webstrip [regsub -all -nocase -- {(.*?) | } $data -> data]} { if {[regexp -nocase -- {(.*?).*? | (.*?) | (.*?) | .*?class="forumLastPostLink".*?ef="(.*?)">(.*?).*?(.*?)} $data -> fname fpost fview fcurls fdata fauthor]} { if {![string match "http://*" $fcurls]} {set fcurls "$url$fcurls"} new $nick $uhost $hand $chan [webstrip $fname] $fpost $fview [webstrip $fauthor] $fcurls [string map -nocase {январь января февраль февраля март марта апрель апреля май мая июнь июня июль июля август августа сентябрь сентября октябрь октября ноябрь ноября декабрь декабря} [webstrip $fdata]]; return } {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка парсинга (4)"} } {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка парсинга (3)"} } proc new {nick uhost hand chan fname fpost fview fauthor fcurls fdata} { variable limit; variable title if {$title} {putserv "PRIVMSG $chan :Последнее сообщение $fdata от $fauthor в теме \"\002$fname\002\" ($fpost/$fview) $::gcolor(5)@ $::gcolor(12)$fcurls"} ::http::config -urlencoding utf-8 -useragent "Mozilla/6.0"; if {[catch {set parsing [::http::geturl $fcurls -binary true -timeout 20000]} error]} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка: $error"; return} elseif {[http::ncode $parsing] == "404"} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка: [http::code $parsing]"} elseif {[http::status $parsing] == "ok"} {array set ufmeta [::http::meta $parsing]} elseif {[http::status $parsing] == "timeout"} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Таймаут соединения."} elseif {[http::status $parsing] == "error"} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка: [http::error $parsing]"} ::http::cleanup $parsing; if {[info exists ufmeta(Location)]} {set url $ufmeta(Location)} else {set url $fcurls} if {[catch {set parsing [::http::geturl $url -binary true -timeout 20000]} error]} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка: $error"; return} elseif {[http::ncode $parsing] == "404"} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка: [http::code $parsing]"} elseif {[http::status $parsing] == "ok"} {set data [regsub -all -- {\n|\r|\t|\v} [encoding convertfrom utf-8 [::http::data $parsing]] ""]; regsub -all -nocase -- {} $data "" data; regsub -all -- {\s+} $data " " data} elseif {[http::status $parsing] == "timeout"} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Таймаут соединения."} elseif {[http::status $parsing] == "error"} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка: [http::error $parsing]"} ::http::cleanup $parsing; if {![info exists data]} {return} if {[regexp -nocase -- {.*(.*?)( ).*$} $data -> ufmpd] || [regexp -nocase -- {.* (.*?)( ).*$} $data -> ufmpd] || [regexp -nocase -- {.*(.*?)( ).*$} $data -> ufmpd]} { regsub -all -nocase -- { (.*?) } $ufmpd " $::gcolor(4)'\017\\1$::gcolor(4)'\017 " ufmpd; regsub -all -nocase -- {(.*?) } $ufmpd " $::gcolor(12)'\017\\1$::gcolor(12)'\017 " ufmpd
set i 0; set i2 0; foreach {b x} [regexp -nocase -inline -all {(.*?)(?:| |