Описание
Скрипт забирает с сайта http://x-traz.ru прикольные статусы для аськи.
Скрипт
namespace eval statusi {
# Сбрасываем значения всех переменных.
foreach p [array names statusi *] { catch {unset statusi($p) } }# Указываем канальный флаг(.chanset #chan +statusi для включения скрипта).
setudef flag statusi### ###
# Меню настроек ниже этой линии: #
# ______________________________ #
### ###
variable statusi
array set statusi {
pref {!}
binds {statusi статусы}
msg 1
delay 5
color1 \00314
color2 \00303
color3 \00305
version "statusi.tcl version 1.1"
author "tvrsh"
}### ###
# Ниже этой линии начинается код, не изменяйте его если не знаете TCL: #
# ____________________________________________________________________ #
### #### Обработка биндов.
foreach bind [split $statusi(binds) " "] {
bind pub -|- "$statusi(pref)$bind" ::statusi::statusi_pub
if {$statusi(msg) >= 1} {
bind msg -|- "$statusi(pref)$bind" ::statusi::statusi_msg
}
}# Процедура обработки приватных команд.
proc ::statusi::statusi_msg {nick uhost hand text} {
variable statusi
::statusi::statusi_proc $nick $uhost $hand $nick
}# Процедура обработки паблик команд.
proc ::statusi::statusi_pub {nick uhost hand chan text} {
variable statusi# Проверяем наличие флага.
if {![channel get $chan statusi]} {
return
}set statusi(start) [clock clicks]
::statusi::statusi_proc $nick $uhost $hand $chan
}# Процедура обработки запроса.
proc ::statusi::statusi_proc {nick uhost hand chan} {
variable statusiif {[info exists statusi(lasttime,$chan)] && [expr $statusi(lasttime,$chan) + $statusi(delay)] > [clock seconds]} {
putserv "NOTICE $nick :$statusi(color1)Запрос не чаще одного раза в $statusi(color2)$statusi(delay) $statusi(color1)[lindex {. секунду секунды секунд} [statusi_numgrp $statusi(delay)]]."
putserv "NOTICE $nick :$statusi(color1)Подождите $statusi(color3)[expr $statusi(delay) - [expr [clock seconds] - $statusi(lasttime,$chan)]] $statusi(color1)[lindex {. секунду секунды секунд} [statusi_numgrp [expr $statusi(delay) - [expr [clock seconds] - $statusi(lasttime,$chan)]]]] до следующего запроса."
return 0
}
set statusi_tok [::http::config -useragent "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)"]
set statusi_tok [::http::geturl "http://x-traz.ru/index.php?page=all" -timeout 15000]
set data [::http::data $statusi_tok]
::http::cleanup $statusi_tok
putlog "\[statusi\] $nick/$chan"regsub -all -nocase -- {\n} $data " " data
regexp {></a> <a href=index.php\?n_page=(.*?)&page=all>...</a>} $data "" pages
set statusi_tok [::http::geturl "http://x-traz.ru/index.php?n_page=[rand $pages]&page=all" -timeout 15000]
set data [::http::data $statusi_tok]
::http::cleanup $statusi_tokregsub -all -nocase -- {\n} $data " " data
regsub -all -nocase -- {</nobr>} $data "|" data
foreach line [split $data "|"] {
if {[regexp -nocase -- {<img\ src=\'com\/status\/images\/status\/st(.*?).gif\'\ \/><\/td><td\ class=\'zcaption\'\ width=\'1000\'>(.*?)\s+<div\ align\=\'right\'>.*?<b>(.*?)<\/b>} $line -> id status reiting]} {
set id [string map {10 Барбекю 11 Дорога 12 Утка 13 ТВ 14 Весело 15 Сплю 16 Коммуникатор 17 Сердце 18 Уставший 19 Друзья 20 Телефон 21 Отрываюсь 22 Мобильный 23 Поиск 24 Вечеринка 25 Кофе 26 Играю 27 "В инете" \
28 Дремлю 29 Читаю 30 Пиво 31 Музыка 32 Учусь 33 Работаю 34 Туалет 35 Перекур 36 Секс 37 "В контакте" 38 "Для одноклассников" 1 Думаю 2 Дела 3 Шопинг 4 Печатаю 5 Вопрос 6 Злой 7 Ем 8 Кино 9 Болею} $id]
lappend statusibase $id|[split $status]|$reiting
}
}
set status [lindex $statusibase [rand [llength $statusibase]]]
set msg "$statusi(color3)($statusi(color2)[lindex [split $status "|"] 0]$statusi(color3)) $statusi(color1)[lindex [split $status "|"] 1] $statusi(color3)($statusi(color2)[lindex [split $status "|"] 2]$statusi(color3))"
set status2 [lindex $statusibase [rand [llength $statusibase]]]
set msg2 "$statusi(color3)($statusi(color2)[lindex [split $status2 "|"] 0]$statusi(color3)) $statusi(color1)[lindex [split $status2 "|"] 1] $statusi(color3)($statusi(color2)[lindex [split $status2 "|"] 2]$statusi(color3))"
set status3 [lindex $statusibase [rand [llength $statusibase]]]
set msg3 "$statusi(color3)($statusi(color2)[lindex [split $status3 "|"] 0]$statusi(color3)) $statusi(color1)[lindex [split $status3 "|"] 1] $statusi(color3)($statusi(color2)[lindex [split $status3 "|"] 2]$statusi(color3))"
putserv "PRIVMSG $chan :$msg\003"
putserv "PRIVMSG $chan :$msg2\003"
putserv "PRIVMSG $chan :$msg3 \00315([expr ([clock clicks] - $statusi(start))/1000.0]мc.)\003"
set statusi(lasttime,$chan) [clock seconds]
return 0
}proc statusi_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 "\[statusi\] $statusi(version) by $statusi(author) loaded"
}