Nach dem Re-Launch von chatmania.ch wollten wir natürlich auch die aktuellen Userzahlen und die Top-Channels auf der Homepage veröffentlichen. Zuerst versuchte ich das ganze mit einem PHP Script, so eine Art PHP IRC Bot. Es hat allerdings nicht schön geklappt, auch ist die IRC-Klasse von PHP mir nicht bekannt, da habe ich kurzerhand ein TCL-Modul für den Eggdrop geschrieben.
Das ganze liest die Userzahlen anhand von /LUSERS aus und speichert sie in einer Datenbank. Desweiteren werden alle Channels ausgelesen und in der DB abgelegt. Das ganze geschieht mit /LIST. Die Datenbank hat zwei Spalten, einmal KEY und einmal VALUE. Im Key speichere ich den Channel und im Value die Userzahl. Die totale Anzahl an Usern speichere ich als KEY USERCOUNT und dem entsprechenden Wert.
###########################
### Settings
###########################
# Database Settings
set dbhost "localhost"
set dbuser "dbuser"
set dbpass "dbpass"
set dbbase "database"
set dbtable "dbtable"
# Set the time in minuets to update the file here.
set chatmania_setting(timer_update) "5"
###########################
### Code
###########################
bind raw - 322 chatmania_listrecieve
bind raw - 323 chatmania_listend
bind raw - 255 chatmania_write_lusers
if {![string match *chatmania_update* [timers]]} {
timer $chatmania_setting(timer_update) chatmania_update
}
proc chatmania_write_lusers {from keyword text} {
global chatmania_lusers_data
set chatmania_lusers_data($keyword) [lindex $text 3]
}
proc chatmania_listrecieve {from keyword text} {
global chatmania_list_data
regsub -all -- "^:" "[lindex [split $text] 3]" "" text2
set text [lreplace [split $text] 3 3 $text2]
set chatmania_list_data([lindex $text 1]) "[lrange $text 2 end]"
}
proc chatmania_listend {from keyword text} {
chatmania_do_final
}
proc chatmania_do_final {} {
global dbhost dbuser dbpass dbbase dbtable chatmania_setting chatmania_list_data chatmania_lusers_data
# mysql connect
mysql_connect $dbbase $dbhost $dbuser $dbpass
# mysql querys
# LUSERS
foreach i [array names chatmania_lusers_data] {
mysql_query "INSERT INTO `website_chatstats` ( `Key` , `Value` ) VALUES ('USERCOUNT', '$chatmania_lusers_data($i)')"
}
# LIST
foreach i [array names chatmania_list_data] {
regsub -all -- ":$" "[join $chatmania_list_data($i)]" "" text2
mysql_query "INSERT INTO `website_chatstats` ( `Key` , `Value` ) VALUES ('$i', '$text2')"
}
# mysql close
mysql_close
}
proc chatmania_update {} {
global chatmania_setting chatmania_uplink
if {[info exists chatmania_uplink]} {
unset chatmania_uplink
}
putserv "LUSERS"
putserv "LIST"
if {![string match *chatmania_update* [timers]]} {
timer $chatmania_setting(timer_update) chatmania_update
}
}
putlog "Chatmania Stats Script loaded. Update every $chatmania_setting(timer_update) minutes."
Ich freue mich über Feedback dieses Scripts.