Mercurial > hg > egg-tcls
view feeds.tcl @ 115:5db02af76016
urllog: Improve entity conversion.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 13 Oct 2011 20:11:02 +0300 |
parents | 593874678e45 |
children | c99df41a691a |
line wrap: on
line source
########################################################################## # # FeedCheck v0.7 by Matti 'ccr' Hamalainen <ccr@tnsp.org> # (C) Copyright 2008-2010 Tecnic Software productions (TNSP) # # Requires get_feeds.tcl to be run as a cronjob, for example # 15 * * * * /absolute/path/to/get_feeds.tcl # # This script is freely distributable under GNU GPL (version 2) license. # ########################################################################## # Datafile, MUST be set to same as in get_feeds.tcl set feeds_datafile "/home/niinuska/bot/data.feeds" # Set channels and feed filters here: # "channel" "feedname|feedname2" # feednames can use matching, e.g. "mtv3*" would match all beginning with "mtv3" array set feeds_channels { "mazmlame" "the adventurers|oots|mestari|blastwave" "fireball" "mestari" "tnsp" "the adventurers|oots|mestari" } set feeds_preferredmsg "PRIVMSG" ########################################################################## # No need to look below this line ########################################################################## set feeds_name "FeedCheck" set feeds_message "$feeds_name v0.7 by ccr/TNSP" putlog "$feeds_message" bind pub - !feeds feeds_pubfetch bind pub - !last feeds_publast # ------------------------------------------------------------------------ proc feeds_smsg {uchan umsg} { global feeds_preferredmsg putserv "$feeds_preferredmsg $uchan :$umsg" } proc feeds_log {umsg} { global feeds_name putlog "$feeds_name: $umsg" } proc feeds_msg {urec} { global feeds_channels set uname [string tolower [lindex $urec 1]] foreach {uchan ufilter} [array get feeds_channels] { foreach umatch [split [string tolower $ufilter] "|"] { if {[string match $umatch $uname]} { feeds_smsg "#$uchan" "[lindex $urec 1]: \002[lindex $urec 3]\002 -- [lindex $urec 2]" } } } } proc feeds_ctime {utime} { if {$utime == "" || $utime == "*"} { set utime 0 } return [clock format $utime -format "%d.%m.%Y %H:%M"] } # ------------------------------------------------------------------------ proc feeds_check {} { global feeds_datafile set results {} # Otetaan aika set newtime [clock seconds] # Haetaan edellinen set oldtime 0 if {![catch {set ufile [open "$feeds_datafile.time" r 0600]} uerrmsg]} { gets $ufile oldtime close $ufile } else { feeds_log "Could not open timefile: $uerrmsg" } # Tarkistetaan if {![catch {set ufile [open "$feeds_datafile" r 0600]} uerrmsg]} { while {![eof $ufile]} { gets $ufile uline set urec [split $uline "½"] if {[llength $urec] == 4 && [lindex $urec 0] > $oldtime} { lappend results $urec } } close $ufile } else { feeds_log "Could not open datafile: $uerrmsg" } # Talletetaan if {[llength $results] > 0} { if {![catch {set ufile [open "$feeds_datafile.time" w 0600]} uerrmsg]} { puts $ufile $newtime close $ufile } } return $results } # ------------------------------------------------------------------------ proc feeds_exec {} { # feeds_log "Checking for new entries." set uresult [feeds_check] set nresult [llength $uresult] if {$nresult >= 20} { feeds_log "$nresult entries, probably broken datafile. Ignoring." } else { foreach urec $uresult { feeds_msg $urec } } timer 5 feeds_exec } if {![info exists feeds_running]} { feeds_log "Starting timed feed check." timer 5 feeds_exec set feeds_running 1 } # ------------------------------------------------------------------------ proc feeds_pubfetch {unick uhost uhand uchan utext} { feeds_log "Manual check invoked on $uchan." set uresult [feeds_check] set nresult [llength $uresult] if {$nresult > 0} { if {$nresult >= 20} { feeds_smsg $uchan "$nresult uutta, tod. näk. epäsynkissä. Ignoorataan." } else { foreach urec $uresult { feeds_msg $urec } feeds_smsg $uchan "$nresult uutta." } } else { feeds_smsg $uchan "Ei uusia." } } # ------------------------------------------------------------------------ proc feeds_checklast {ufeed} { global feeds_datafile set result "" set oldtime 0 set matsi [string tolower "*$ufeed*"] # Tarkistetaan if {![catch {set ufile [open "$feeds_datafile" r 0600]} uerrmsg]} { while {![eof $ufile]} { gets $ufile uline set urec [split $uline "½"] if {[llength $urec] == 4 && [lindex $urec 0] >= $oldtime} { if {[string match $matsi [string tolower [lindex $urec 1]]]} { set result $urec set oldtime [lindex $urec 0] } } } close $ufile } else { feeds_log "Could not open datafile: $uerrmsg" } return $result } proc feeds_publast {unick uhost uhand uchan utext} { set uresult [feeds_checklast $utext] if {$uresult != ""} { feeds_smsg $uchan "Uusin '[lindex $uresult 1]' / [feeds_ctime [lindex $uresult 0]]: [lindex $uresult 3] -- [lindex $uresult 2]" } else { feeds_smsg $uchan "Ei osumia haulla '$utext'." } }