Paste #tT13Df8U1hrUhESNnlIR

Welcome On LodgeIt

Welcome to the LodgeIt pastebin. In order to use the notification feature a 31 day cookie with an unique ID was created for you. The lodgeit database does not store any information about you, it's just used for an advanced pastebin experience :-). Read more on the about lodgeit page. Have fun :-)

hide this notification

  1
  2
  3
  4
  5
  6
  7
  8
  9
 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
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
###
#
#  Название: newtime.tcl
#  Версия: 1.3
#  Автор: tvrsh 
#  Оффсайт: http://egghelp.ru/
#
###
#
# Описание: Скрипт забирает с сайта http://www.timeserver.ru точное время в городах России.
#
###
#
# Установка: 
#         1. Скопируйте скрипт newtime.tcl в папку scripts вашего бота.
#         2. В файле eggdrop.conf впишите строку source scripts/newtime.tcl 
#         3. Сделайте .rehash боту.
#
###
#
# Версион хистори:
#
#              1.0(28.08.2010) Первая паблик версия.
#              1.1(29.08.2010) Добавлена поддрежка Suzi ботов.
#                              + сравнение времени в друх городах.
#              1.2(11.11.2010) + работа с многословными городами.
#                              + показ даты.
#              1.3(13.11.2010) + показ времени каждый час.
#
###

namespace eval newtime {
# Сбрасываем значения всех переменных.
foreach p [array names newtime *] { catch {unset newtime($p) } }

# Указываем канальный флаг(.chanset #chan +newtime для включения скрипта).
setudef flag newtime

###                            ###
# Меню настроек ниже этой линии: #
# ______________________________ #
###                            ###
	variable newtime
	array set newtime {
	pref {!}
	binds {time время dhtvz ешьу}
	msg 1
	delay 5
       autotimer {}
       color1 \00314
       color2 \00303
       color3 \00305
	version "newtime.tcl version 1.3"
	author "tvrsh"
	}

###                                                                  ###
# Ниже этой линии начинается код, не изменяйте его если не знаете TCL: #
# ____________________________________________________________________ #
###                                                                  ###

# Обработка биндов.
foreach bind [split $newtime(binds) " "] {
    bind pub -|- "$newtime(pref)$bind" ::newtime::newtime_pub
    if {$newtime(msg) >= 1} {
        bind msg -|- "$newtime(pref)$bind" ::newtime::newtime_msg
    }
}

# начальный счетчик редиректов
variable redirs 0

# Биндим ежечасный показ времени.
if {$newtime(autotimer) != ""} {
    bind time - "00 * * * *" ::newtime::newtime_onhour
}

proc ::newtime::newtime_onhour {min hour day month year} {
    variable newtime
    foreach elem [split $newtime(autotimer) "\n"] {
        if {[llength $elem]} {
            ::newtime::newtime_proc nick uhost hand [lindex [split [join $elem]] 0] 1 [lrange [split [join $elem]] 1 end]
        }
    }
}

# Процедура обработки приватных команд.
proc ::newtime::newtime_msg {nick uhost hand text} {
    variable newtime
    ::newtime::newtime_proc $nick $uhost $hand $nick 0 $text
}

# Процедура обработки паблик команд.
proc ::newtime::newtime_pub {nick uhost hand chan text} {
    variable newtime

    # Проверяем наличие флага.
    if {![channel get $chan newtime]} { 
        return 0
    }
    ::newtime::newtime_proc $nick $uhost $hand $chan 0 $text
}

# Процедура обработки запроса.
proc ::newtime::newtime_proc {nick uhost hand chan auto text} {
    global lastbind
    variable newtime 

    if {[info exists newtime(lasttime,$chan)] && [expr $newtime(lasttime,$chan) + $newtime(delay)] > [clock seconds]} {
        putserv "NOTICE $nick :$newtime(color1)Запрос не чаще одного раза в $newtime(color2)$newtime(delay) $newtime(color1)[lindex {. секунду секунды секунд} [::newtime::numgrp $newtime(delay)]]."
        putserv "NOTICE $nick :$newtime(color1)Подождите $newtime(color3)[expr $newtime(delay) - [expr [clock seconds] - $newtime(lasttime,$chan)]] $newtime(color1)[lindex {. секунду секунды секунд} [::newtime::numgrp [expr $newtime(delay) - [expr [clock seconds] - $newtime(lasttime,$chan)]]]] до следующего запроса."
        return 0
    }

    set newtime(start) [clock clicks]

    if {[llength [split $text]] == "0"} {
        putserv "PRIVMSG $chan :$newtime(color1)Используйте $newtime(color3)\002$lastbind \[-номер\] город\002 $newtime(color1)для просмотра точного текущего времени в городах мира ...\003"
       # putserv "PRIVMSG $chan :$newtime(color1)... или $newtime(color3)\002$lastbind город1+город2\002 $newtime(color1)для просмотра разницы во времени между городами.\003"
        return 0
    }
	
	if {![regexp -- {^\-(\d+)\s*(.*?)$} $text - num text]} {
		set num 1
	}
	
	set num [scan $num %d]
	
	if {$num <= 0} {set num 1}
		
    set text [stripcodes bc [::newtime::en2ru $text]]
    set tmp [list]
	set text_ $text
	foreach _ [split $text] {lappend tmp [string totitle $_]}
	if {[llength $tmp]} {set text [join $tmp]}

    if {![string match "*+*" $text]} {
        # Поддержка Suzi?
        if {![info exists ::sp_version]} {
            set text [encoding convertfrom cp1251 $text]
        }

        set newtime_tok [::http::config -urlencoding utf-8 -useragent "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)"]
        set newtime_tok [::http::geturl "http://www.timeserver.ru/ajax/header/search/?q=[string map {%20 +} [::http::formatQuery $text]]" -timeout 25000 -command [list ::newtime::data $nick $chan $text_ 1 $auto $num 1]]  
		
		}
		
		
		}
		
		
		proc ::newtime::data {nick chan text type auto num total newtime_tok} {
		
		
		set status [::http::status $newtime_tok]
		set ncode [::http::ncode $newtime_tok]
		array set meta [::http::meta $newtime_tok]
		variable redirs
		variable newtime
		
		if {$status eq "ok"} {
		
		if {[string range $ncode 0 1] == "30" && [info exists meta(Location)] && $redirs < 2} {
		if {[string index $meta(Location) 0] == "/"} {
			set url "http://www.timeserver.ru$meta(Location)"
		} else {
			set url $meta(Location)
		}
		::http::cleanup $newtime_tok
		::http::geturl $url -timeout 25000 -command [list ::newtime::data $nick $chan $text $type $auto $num $total]
		incr redirs
		return
		}
		
		set redirs 0
		
		if {[http::ncode $newtime_tok] != "200"} {
		putserv "PRIVMSG $chan :$newtime(color3)\002$nick\002\00304, ошибка запроса $newtime(color1)... ([http::code $newtime_tok])"
		::http::cleanup $newtime_tok
		return
		}
		
		
		
		 set data [::http::data $newtime_tok]
        ::http::cleanup $newtime_tok
		
		# [{"id":6023,"text":"Москва (Московская область, Российская Федерация)","name":"Москва","region_name":"Московская область","country_name":"Российская Федерация"},{"id":240018,"text":"Москва (United Kingdom (general), Великобритания)","name":"Москва","region_name":"United Kingdom (general)","country_name":"Великобритания"}]
		
		
		if {[string match "\\\[*\\\]" $data]} {
		
		set data [regexp -all -nocase -inline -- {"id":(\d+)\,} $data]
		
		if {[string is space $data]} {
			putserv "PRIVMSG $chan :$newtime(color3)\002$nick\002\00304, ошибка запроса $newtime(color1)... (ошибка парсинга списка городов)"
			return
		}
		
		set tmp [list]
		
		foreach {k v} $data {lappend tmp $v}
		
		set id [lindex $tmp [expr {$num - 1}]]
		
		if {![string is digit -strict $id]} {
			putserv "PRIVMSG $chan :$newtime(color3)\002$nick\002\00304, ошибка запроса $newtime(color1)... (ошибка выбора города)"
			return
		}
		
		set url "http://www.timeserver.ru/${id}.html"
		
		set total [llength $tmp]
		
	#	putserv "PRIVMSG $chan :newtime-debug: id: $url :: total: $total ($tmp)"
	#	return
		
		::http::geturl $url -timeout 25000 -command [list ::newtime::data $nick $chan $text $type $auto $num $total]
		return
		}
		
		if {$type == "1"} {
		
        if {[info exists ::sp_version]} {
            putlog "\[newtime\] $nick/$chan/$text"
          #  set data [encoding convertfrom cp1251 $data]
        } else {
            putlog "\[newtime\] $nick/$chan/[encoding convertto utf-8 $text]"
        }

        regsub -nocase -- {^.*?<div id="container">} $data "" data
	regsub -nocase -- {<div class="selected">.*?$} $data "" data


        set nmsg [list]
		
		if {![regexp -nocase -- {<div class="city_view_box">(.+?)<noindex>} $data - data]} {
                putserv "PRIVMSG $chan :$newtime(color3)\002$nick\002$newtime(color1), Такого города не существует или нет в нашей базе городов, или ошибка обработки $newtime(color1)..."
                set newtime(lasttime,$chan) [clock seconds]
                return 0
		}
		
		
            if {[regexp -nocase -- {<div class="city_clock_board">(.+?)</div>.*?<p class="city_view_date.*?">(.+?)</p>} $data -> time date]} {
			regsub -all -- {<.*?>} $date {} date
			regsub -all -- {<.*?>} $time {:} time
                lappend nmsg "$newtime(color3)[string totitle $date], [string trim $time ":"] $newtime(color1)::"
            } 


            if {[regexp -nocase -- {<h\d+.*?">Точное время в(.*?)</span>.*?<span class="timeofday">(.*?)</span><div class="sunrise_sunset">} $data -> city region]} {
                lappend nmsg "$newtime(color1)Точное текущее время в $newtime(color2)[string trim $city]$newtime(color1), $newtime(color2)[string trim $region]$newtime(color1),"
            } 
			
		
			if {[regexp -nocase -- {</span>(UTC[\+\-]\d+).*?(MSK[\+\-]\d+)<span} $data - utc msk]} {
			lappend nmsg "$newtime(color2)$utc (по Гринвичу), $msk (по Московскому времени)"
			
			}
			
			
            if {![llength $nmsg]} {
                putserv "PRIVMSG $chan :$newtime(color3)\002$nick\002$newtime(color1), Такого города не существует или нет в нашей базе городов $newtime(color1)..."
                set newtime(lasttime,$chan) [clock seconds]
                return 0
            }
			
			set nmsg [regsub -all -- {[\x20\x09]+} [regsub -all -- {<.*?>} [join $nmsg] { }] { }]

            if {[regexp -nocase -- {<div class="info">(.*?)</div>} $data -> ninfo]} {
                regsub -all -- {\s+} $ninfo { } ninfo
                regsub -all -- {<br>} $ninfo {$newtime(color1),$newtime(color2)} ninfo
                set ninfo [string trim $ninfo]
                lappend nmsg "$newtime(color2)[subst -nocommand $ninfo]\003$newtime(color1)."
            } 
			
			if {$total > 1} {set pfx "\[$num\/$total\] :: "} else {set pfx ""}

            if {$auto == "0"} {
                putserv "PRIVMSG $chan :$pfx$nmsg \00315([format "%.2f" [expr ([clock clicks] - $newtime(start))/1000.0/1000.0]]c.)\003"
                set newtime(lasttime,$chan) [clock seconds]
                return 0
            } else { 
                putserv "PRIVMSG $chan :$pfx$nmsg \00315([format "%.2f" [expr ([clock clicks] - $newtime(start))/1000.0/1000.0]]c.)\003"
            }
		
      
    } else {
        # Поддержка Suzi?
        if {[info exists ::sp_version]} {
            set ntext $text
        } else {
            set ntext [encoding convertfrom cp1251 $text]
        }

        set newtime_tok [::http::config -useragent "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)"]
        set newtime_tok [::http::geturl "http://www.timeserver.ru/compare/[lindex [split $ntext "+"] 0]/[lindex [split $ntext "+"] 1]" -timeout 15000]  
        set data [::http::data $newtime_tok]
        ::http::cleanup $newtime_tok

        if {[info exists ::sp_version]} {
            putlog "\[newtime\] $nick/$chan/Compare: [lindex [split $ntext] 0]/[lindex [split $ntext] 1]"
            set data [encoding convertfrom cp1251 $data]
        } else {
            putlog "\[newtime\] $nick/$chan/Compare: [encoding convertto utf-8 [lindex [split $ntext] 0]/[lindex [split $ntext] 1]]"
        }

        regsub -all -- "\n" $data "" data
        regsub -all -- {\s+} $data { } data
        if {[regexp -nocase -- {</fieldset> </form> </div> <div>(.*?)\..*?<a } $data -> error]} {
            regexp {<div>\ (.*?)\ -} $error "" city
            putserv "PRIVMSG $chan :$newtime(color3)$nick$newtime(color1), города $newtime(color2)$city $newtime(color1)не существует или нет в нашей базе городов.\003"
            set newtime(lasttime,$chan) [clock seconds]
            return 0
        } 

        foreach line [split $data "\n"] {
            if {[regexp -nocase -- {<div>(.*?)<span id="clock_head">.*?</span></div>} $line -> date]} {
                set date "$newtime(color3)$date $newtime(color1)::"
            } 
        }

        regexp {<div class="difference">(.*?)</div>} $data "" diff
        regsub -all -- "<strong>| </strong>" $diff "\002" diff
        regexp {<div\ class=\"compared\ \">(.*?)<br } $data "" data
        regsub -all -- "<div class=\"city\">" $data "|" data
        regsub -all -- "<a .*?>" $data "" data
        regsub -all -- "</a>" $data "" data
        regsub -all -- "<br>" $data "," data
        foreach line [split $data "|"] {
            if {[regexp -nocase -- {<h2>(.*?) <span>\((.*?)\)</span>.*?</h2> <div class="time"> <div class="clock" id=".*?">(.*?)</div> <div class="info">\ (.*?),} $line -> ncity nregion ntime ninfo]} {
                lappend compare "$newtime(color2)$ncity$newtime(color1), $newtime(color2)$nregion $newtime(color1)($newtime(color3)$ntime$newtime(color1), $newtime(color2)$ninfo$newtime(color1))"
            } 
        }

        putserv "PRIVMSG $chan :$date $newtime(color1)Между [lindex $compare 0] $newtime(color1)и [lindex $compare 1] $newtime(color3)$diff \00315([expr ([clock clicks] - $newtime(start))/1000.0]мc.)\003"
        set newtime(lasttime,$chan) [clock seconds]
        return 0
        }  
		
				
		} else {
		::http::cleanup $newtime_tok
		putserv "NOTICE $nick :Не удалось соединиться с сервером. Попробуйте позже."
		return
		}
}

# Процедура переводит текст набранный в неправильно раксладке.
proc ::newtime::en2ru {t} {
    return [string map {f а \, б d в u г l д t е \` ё \; ж p з b и q й r к k л v м y н j о g п h р c с n т e у a ф \[ х w ц x ч i ш m ь o щ \] ъ \' э s ы \. ю z я} [string tolower $t]]
}

# Возвращает правильное окончание слов.
proc ::newtime::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 "\[newtime\] $newtime(version) by $newtime(author) loaded"
}