Mercurial > hg > egg-tcls
diff feeds.tcl @ 0:1c4e2814cd41
Initial import.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 21 Sep 2010 13:12:49 +0300 |
parents | |
children | 51e6b16a7601 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/feeds.tcl Tue Sep 21 13:12:49 2010 +0300 @@ -0,0 +1,190 @@ +############################################################################ +# +# FeedCheck v0.7 by ccr/TNSP <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'." + } + +} +