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'."
+  }
+  
+}
+