Mercurial > hg > egg-tcls
annotate feeds.tcl @ 114:593874678e45
Clarify authorship by doing sed "s/ccr\/TNSP/Matti 'ccr' Hamalainen/g".
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 21 Sep 2011 07:47:47 +0300 |
parents | 15fc72bc3f3e |
children | c99df41a691a |
rev | line source |
---|---|
70 | 1 ########################################################################## |
0 | 2 # |
114
593874678e45
Clarify authorship by doing sed "s/ccr\/TNSP/Matti 'ccr' Hamalainen/g".
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
3 # FeedCheck v0.7 by Matti 'ccr' Hamalainen <ccr@tnsp.org> |
0 | 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 # | |
70 | 11 ########################################################################## |
0 | 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 | |
70 | 29 ########################################################################## |
0 | 30 # No need to look below this line |
70 | 31 ########################################################################## |
0 | 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 | |
70 | 40 # ------------------------------------------------------------------------ |
0 | 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 | |
70 | 71 # ------------------------------------------------------------------------ |
0 | 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 | |
70 | 114 # ------------------------------------------------------------------------ |
0 | 115 proc feeds_exec {} { |
53
51e6b16a7601
feeds: No need to spam the bot log with "checking for new entries".
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
116 # feeds_log "Checking for new entries." |
0 | 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 | |
70 | 133 # ------------------------------------------------------------------------ |
0 | 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 | |
70 | 152 # ------------------------------------------------------------------------ |
0 | 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 } |