comparison feeds.tcl @ 0:1c4e2814cd41

Initial import.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 21 Sep 2010 13:12:49 +0300
parents
children 51e6b16a7601
comparison
equal deleted inserted replaced
-1:000000000000 0:1c4e2814cd41
1 ############################################################################
2 #
3 # FeedCheck v0.7 by ccr/TNSP <ccr@tnsp.org>
4 # (C) Copyright 2008-2010 Tecnic Software productions (TNSP)
5 #
6 # Requires get_feeds.tcl to be run as a cronjob, for example
7 # 15 * * * * /absolute/path/to/get_feeds.tcl
8 #
9 # This script is freely distributable under GNU GPL (version 2) license.
10 #
11 ############################################################################
12
13 # Datafile, MUST be set to same as in get_feeds.tcl
14 set feeds_datafile "/home/niinuska/bot/data.feeds"
15
16 # Set channels and feed filters here:
17 # "channel" "feedname|feedname2"
18 # feednames can use matching, e.g. "mtv3*" would match all beginning with "mtv3"
19 array set feeds_channels {
20 "mazmlame" "the adventurers|oots|mestari|blastwave"
21 "fireball" "mestari"
22 "tnsp" "the adventurers|oots|mestari"
23 }
24
25
26 set feeds_preferredmsg "PRIVMSG"
27
28
29 ############################################################################
30 # No need to look below this line
31 ############################################################################
32 set feeds_name "FeedCheck"
33 set feeds_message "$feeds_name v0.7 by ccr/TNSP"
34
35 putlog "$feeds_message"
36 bind pub - !feeds feeds_pubfetch
37 bind pub - !last feeds_publast
38
39
40 # -------------------------------------------------------------------------
41 proc feeds_smsg {uchan umsg} {
42 global feeds_preferredmsg
43 putserv "$feeds_preferredmsg $uchan :$umsg"
44 }
45
46 proc feeds_log {umsg} {
47 global feeds_name
48 putlog "$feeds_name: $umsg"
49 }
50
51 proc feeds_msg {urec} {
52 global feeds_channels
53 set uname [string tolower [lindex $urec 1]]
54 foreach {uchan ufilter} [array get feeds_channels] {
55 foreach umatch [split [string tolower $ufilter] "|"] {
56 if {[string match $umatch $uname]} {
57 feeds_smsg "#$uchan" "[lindex $urec 1]: \002[lindex $urec 3]\002 -- [lindex $urec 2]"
58 }
59 }
60 }
61 }
62
63 proc feeds_ctime {utime} {
64 if {$utime == "" || $utime == "*"} {
65 set utime 0
66 }
67 return [clock format $utime -format "%d.%m.%Y %H:%M"]
68 }
69
70
71 # -------------------------------------------------------------------------
72 proc feeds_check {} {
73 global feeds_datafile
74
75 set results {}
76
77 # Otetaan aika
78 set newtime [clock seconds]
79
80 # Haetaan edellinen
81 set oldtime 0
82 if {![catch {set ufile [open "$feeds_datafile.time" r 0600]} uerrmsg]} {
83 gets $ufile oldtime
84 close $ufile
85 } else {
86 feeds_log "Could not open timefile: $uerrmsg"
87 }
88
89 # Tarkistetaan
90 if {![catch {set ufile [open "$feeds_datafile" r 0600]} uerrmsg]} {
91 while {![eof $ufile]} {
92 gets $ufile uline
93 set urec [split $uline "½"]
94 if {[llength $urec] == 4 && [lindex $urec 0] > $oldtime} {
95 lappend results $urec
96 }
97 }
98 close $ufile
99 } else {
100 feeds_log "Could not open datafile: $uerrmsg"
101 }
102
103 # Talletetaan
104 if {[llength $results] > 0} {
105 if {![catch {set ufile [open "$feeds_datafile.time" w 0600]} uerrmsg]} {
106 puts $ufile $newtime
107 close $ufile
108 }
109 }
110
111 return $results
112 }
113
114 # -------------------------------------------------------------------------
115 proc feeds_exec {} {
116 feeds_log "Checking for new entries."
117 set uresult [feeds_check]
118 set nresult [llength $uresult]
119 if {$nresult >= 20} {
120 feeds_log "$nresult entries, probably broken datafile. Ignoring."
121 } else {
122 foreach urec $uresult { feeds_msg $urec }
123 }
124 timer 5 feeds_exec
125 }
126
127 if {![info exists feeds_running]} {
128 feeds_log "Starting timed feed check."
129 timer 5 feeds_exec
130 set feeds_running 1
131 }
132
133 # -------------------------------------------------------------------------
134 proc feeds_pubfetch {unick uhost uhand uchan utext} {
135 feeds_log "Manual check invoked on $uchan."
136 set uresult [feeds_check]
137 set nresult [llength $uresult]
138 if {$nresult > 0} {
139 if {$nresult >= 20} {
140 feeds_smsg $uchan "$nresult uutta, tod. näk. epäsynkissä. Ignoorataan."
141 } else {
142 foreach urec $uresult { feeds_msg $urec }
143 feeds_smsg $uchan "$nresult uutta."
144 }
145 } else {
146 feeds_smsg $uchan "Ei uusia."
147 }
148
149 }
150
151
152 # -------------------------------------------------------------------------
153 proc feeds_checklast {ufeed} {
154 global feeds_datafile
155
156 set result ""
157 set oldtime 0
158 set matsi [string tolower "*$ufeed*"]
159
160 # Tarkistetaan
161 if {![catch {set ufile [open "$feeds_datafile" r 0600]} uerrmsg]} {
162 while {![eof $ufile]} {
163 gets $ufile uline
164 set urec [split $uline "½"]
165 if {[llength $urec] == 4 && [lindex $urec 0] >= $oldtime} {
166 if {[string match $matsi [string tolower [lindex $urec 1]]]} {
167 set result $urec
168 set oldtime [lindex $urec 0]
169 }
170 }
171 }
172 close $ufile
173 } else {
174 feeds_log "Could not open datafile: $uerrmsg"
175 }
176
177 return $result
178 }
179
180
181 proc feeds_publast {unick uhost uhand uchan utext} {
182 set uresult [feeds_checklast $utext]
183 if {$uresult != ""} {
184 feeds_smsg $uchan "Uusin '[lindex $uresult 1]' / [feeds_ctime [lindex $uresult 0]]: [lindex $uresult 3] -- [lindex $uresult 2]"
185 } else {
186 feeds_smsg $uchan "Ei osumia haulla '$utext'."
187 }
188
189 }
190