####################################################
# WindropClan @ http://windrop.clan.su
# Автор: Vladislav
# Версия: 1.0
# Описание: Скрипт показывает статистику бота на сайте http://uptime.eggheads.org
# Команды: !ранк
####################################################
namespace eval rank {
setudef flag no[namespace tail [namespace current]]
variable timer 10
variable pbind 1
variable clock 0
foreach bind {rank ранк} {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 host hand chan text} {
variable timer; variable clock
if {$chan != $nick && [channel get $chan no[namespace tail [namespace current]]]} {return} else {set lastbind $::lastbind; set text [string trim [string map { {}} [stripcodes cubr $text]]]}
if {[expr [clock seconds]-$clock] < $timer} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Команда недавно запрашивалась. Повтори попытку через [expr $timer-([clock seconds]-$clock)] сек."; return}; set clock [clock seconds]
if {[regexp -nocase -- {^-(\d+)} $text -> num]} {regsub -- {-\d+\s?} $text "" text} else {set num 1}
if {[string is space $text]} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Формат: $lastbind \[-номер\] \[-топ \[от-до\]\] \<ботнет-ник бота\>"; return}
::http::config -urlencoding utf-8 -useragent {Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.6.30 Version/10.60}
set opts "?botnick=[::http::formatQuery $text]"
if {[regexp -nocase -- {^-top} $text] || [regexp -nocase -- {^-топ} $text]} {
regsub -- {\s?-top\s?} $text "" text; regsub -- {\s?-топ\s?} $text "" text
if {[regexp -- {^(\d+)-(\d+)$} $text -> rangemin rangemax]} {set rangemin [scan $rangemin %d]; set rangemax [scan $rangemax %d]} else {set rangemin 1; set rangemax 10}
if {$rangemin > $rangemax || [expr {$rangemax-$rangemin}] == 0} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Указан неверный диапазон."; return}
if {[expr {$rangemax-$rangemin}] > 10} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Диапазон слишком велик."; return}
if {$rangemin eq 0} {set rangemin 1; set rangemax 10}
set opts "?top=10&offset=[expr ${rangemin}-1]"; set text [list top $rangemin $rangemax]
}
if {[string is integer $text] && [llength [split $text]] eq 1 && $text > 0} {set opts "?top=5&offset=[expr ${text}-1]"; set text "place"}
if {[catch {set token [http::geturl http://uptime.eggheads.org/$opts -timeout 16000 -command [list [namespace current]::data $nick $chan [scan $num %d] $text]]} err]} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Не могу соединиться с сайтом!"; return}
}
proc data {nick chan num text token} {
if {[::http::status $token] ne "ok" || [::http::ncode $token] ne "200"} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ошибка при соединении с сайтом..."; ::http::cleanup $token; return}
set data [regsub -all -- {\n|\r|\t|\v} [::http::data $token] ""]; ::http::cleanup $token
set res [list]; foreach {b x} [regexp -nocase -inline -all {(.*?)(?:
(.*?) | (.*?) | (.*?) | (.*?)} $x -> place botname version uptime]} {
set place [string trim [regsub -all -- {<.*?>} $place ""]]; set botname [string trim [regsub -all -- {<.*?>} $botname ""]]; set version [string trim [regsub -all -- {<.*?>} $version ""]]; set uptime [string trim [regsub -all -- {<.*?>} $uptime ""]]
if {$place != "" && $botname != "" && $version != "" && $uptime != ""} {lappend res [list $place $botname $version $uptime]}
}
}
if {[llength $res] == 0} {putserv "[expr {$nick == $chan ? "PRIVMSG":"NOTICE"}] $nick :Ничего не найдено."; return}
if {[lindex $text 0] == "top"} {
set rmin [lindex $text 1]; set rmax [lindex $text 2]; set rmid [expr ($rmax - $rmin)]
set msg [list]; set i 0; foreach _ $res {
lappend msg "$::gcolor(4)[lindex $_ 0]. $::gcolor(5)[lindex $_ 1][rtime [lindex $_ 3]]"
if {[incr $i] == [expr ${rmid}+1]} {break}
}
::ccs::put_msgdest $chan "$::gcolor(14)Топ ботов: [join $msg " "]"; return
}
if {$text == "place"} {
lassign [lindex $res 0] place botname version uptime
::ccs::put_msgdest $chan "$::gcolor(4)$place. $::gcolor(5)$botname $::gcolor(14)($::gcolor(12)$version$::gcolor(14))[rtime $uptime]"; return
}
set total [llength $res]; if {$num > $total} {set num $total}; if {$num == 0} {set num 1}
set str [lindex $res [expr ${num}-1]]
lassign $str place botname version uptime
::ccs::put_msgdest $chan "$::gcolor(14)\[$::gcolor(6)$num$::gcolor(14)/$total\] $::gcolor(4)$place. $::gcolor(5)$botname $::gcolor(14)($::gcolor(12)$version$::gcolor(14))[rtime $uptime]"
}
proc rtime {t} {
set t [split $t]
if {[lindex $t 5] != ""} {
return " $::gcolor(14)-> [lindex $t 0] [lindex {. год года лет} [numgrp [lindex $t 0]]] [lindex $t 2] [lindex {. день дня дней} [numgrp [lindex $t 2]]] [lindex $t 4] [lindex {. час часа часов} [numgrp [lindex $t 4]]]"
} elseif {[lindex $t 3] != ""} {
if {[string index [lindex $t 1] 0] == "y" && [string index [lindex $t 3] 0] == "d"} {
return " $::gcolor(14)-> [lindex $t 0] [lindex {. год года лет} [numgrp [lindex $t 0]]] [lindex $t 2] [lindex {. день дня дней} [numgrp [lindex $t 2]]]"
} elseif {[string index [lindex $t 1] 0] == "y" && [string index [lindex $t 3] 0] == "h"} {
return " $::gcolor(14)-> [lindex $t 0] [lindex {. год года лет} [numgrp [lindex $t 0]]] [lindex $t 2] [lindex {. час часа часов} [numgrp [lindex $t 2]]]"
} elseif {[string index [lindex $t 1] 0] == "d" && [string index [lindex $t 3] 0] == "h"} {
return " $::gcolor(14)-> [lindex $t 0] [lindex {. день дня дней} [numgrp [lindex $t 0]]] [lindex $t 2] [lindex {. час часа часов} [numgrp [lindex $t 2]]]"
} else {return ""}
} elseif {[lindex $t 1] != ""} {
if {[string index [lindex $t 1] 0] == "y"} {
return " $::gcolor(14)-> [lindex $t 0] [lindex {. год года лет} [numgrp [lindex $t 0]]]"
} elseif {[string index [lindex $t 1] 0] == "d"} {
return " $::gcolor(14)-> [lindex $t 0] [lindex {. день дня дней} [numgrp [lindex $t 0]]]"
} elseif {[string index [lindex $t 1] 0] == "h"} {
return " $::gcolor(14)-> [lindex $t 0] [lindex {. час часа часов} [numgrp [lindex $t 0]]]"
} else {return ""}
} else {return ""}
}
proc 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} } }
} |