# chanstats.tcl # # Copyright (c) 2004 Jochen "Y0Gi" Kupperschmidt <http://homework.nwsnet.de/> # Version: 17-Sep-2004 # Released under the terms of the MIT License. # # Periodically writes channel states to files (as plain # text and XML by default) so you can use it e.g. on a # website by retrieving and parsing it using PHP, Perl, # Python or whatever is your language or tool of choice. # # Note: Does no checks, so correct XML is not guaranteed. # configuration set channels [list #somechannel1 #somechannel2 #somechannel3] set output(text) 1 set output(xml) 1 bind time - "30 * * * *" chst:time:update proc chst:time:update { min hour day month year } { global channels foreach chan $channels { chst:output [chst:getstats $chan] } return 0 } proc chst:getstats { chan } { set stats(channel) $chan set stats(users_total) [llength [chanlist $chan]] set stats(users_op) 0 set stats(users_voice) 0 set stats(users_normal) 0 foreach nickname [chanlist $chan] { if { [isop $nickname $chan] } { incr stats(users_op) } elseif { [isvoice $nickname $chan] } { incr stats(users_voice) } else { incr stats(users_normal) } } set stats(topic) [topic $chan] set stats(timestamp) [clock format [clock scan now] -format "%Y-%m-%d %R"] return [array get stats] } proc chst:output { stats } { global output if { $output(text) } { chst:output_text $stats } if { $output(xml) } { chst:output_xml $stats } } proc chst:output_text { stats } { array set stats_tmp $stats set fs [open "chanstats.$stats_tmp(channel).txt" w] foreach key [lsort [array names stats_tmp]] { puts $fs "$key: $stats_tmp($key)" } close $fs } proc chst:output_xml { stats } { array set stats_tmp $stats set fs [open "chanstats.$stats_tmp(channel).xml" w] puts $fs "<chanstats>" foreach key [lsort [array names stats_tmp]] { puts $fs " <$key>$stats_tmp($key)</$key>" } puts $fs "</chanstats>" close $fs } putlog "chanstats.tcl loaded."