egghelp.org community Forum Index
[ egghelp.org home | forum home ]
egghelp.org community
Discussion of eggdrop bots, shell accounts and tcl scripts.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

stats.mod and empty spaces

 
Post new topic   Reply to topic    egghelp.org community Forum Index -> Modules & Programming
View previous topic :: View next topic  
Author Message
Torrevado
Op


Joined: 02 Aug 2006
Posts: 101

PostPosted: Sun Feb 28, 2010 7:28 am    Post subject: stats.mod and empty spaces Reply with quote

Hello,

this module is IMHO the best stats creator for eggdrop, but there's an issue with it, it doesn't "strip" extra empty spaces, so if someone types a command or a nick followed by more than one empty space, it won't neither recognize command or nick.

In tcl we can solve this with "set arg [lindex $arg 0]" or something like that, but is there an "easy" way to do it in C?

note: gseen.mod, from the same author, doesn't have such issue.

Thanks.
Back to top
View user's profile Send private message
Torrevado
Op


Joined: 02 Aug 2006
Posts: 101

PostPosted: Sun Mar 07, 2010 1:15 pm    Post subject: Reply with quote

At the end of gseen.conf, after binds, there's some tcl code, 2nd and 3rd "if" are about AI feature, but that part "foreach bnd..." could it be what is doing gseen to work with extra empty spaces?. If so, it maybe would be the solution to fix stats.mod...
Code:
bind chjn - * *chjn:gseen
bind chpt - * *chpt:gseen

catch "unbind pub - !seen *pub:!seen"
catch "unbind pub - !seennick *pub:!seennick"
catch "unbind pub - !seenstats *pub:!seenstats"
bind pub - ${cmdchar}seen *pub:!seen
bind pub - ${cmdchar}seennick *pub:!seennick
bind pub - ${cmdchar}seenstats *pub:!seenstats

foreach bnd [binds pubm] {
  if {([lindex $bnd 2] == "*pubm:seen") || ([lindex $bnd 2] == "*pub:!seenstats")} {
    unbind [lindex $bnd 0] [lindex $bnd 1] [lindex $bnd 2] [lindex $bnd 4]
  }
}

if {${ai-seen-binds} != ""} {
  foreach mask ${ai-seen-binds} {
    bind pubm -|- "% [subst $mask]" *pubm:seen
  }
}

if {${ai-seenstats-binds} != ""} {
  foreach mask ${ai-seenstats-binds} {
    bind pubm -|- "% [subst $mask]" *pub:!seenstats
  }
}
Back to top
View user's profile Send private message
thommey
Halfop


Joined: 01 Apr 2008
Posts: 73

PostPosted: Mon Mar 08, 2010 5:41 pm    Post subject: Reply with quote

You will have to modify the C code of stats.mod to solve this issue. Which version do you use?
Back to top
View user's profile Send private message
Torrevado
Op


Joined: 02 Aug 2006
Posts: 101

PostPosted: Tue Mar 09, 2010 5:14 am    Post subject: Reply with quote

I'm using the stable one (v1.3)

I found a tcl script to display statistics from stats.mod, it's easy to fix stats.mod issue from there.
I know it would be better to modify C code, but I'm not able to do it.


Code:
#################### stats-public.tcl ############################
## Ein schönes TCL was dazu dient um das Stats.mod über
## Channelbefehle zu steuern.
##
## Diese Befehle stehen allen Moderatoren und Operatoren
## zu verfügung.
##
## Settings:
## Statistik Befehle
## ein: !stats +cmd <top10|ttop10|top20|ttop20|stat|tstat|place|tplace|all>
## aus: !stats -cmd <top10|ttop10|top20|ttop20|stat|tstat|place|tplace|all>
##
## User ausschließen von der Channel-Statistik
## ein: !stats +user <nick>
## aus: !stats -user <nick>
##
## User zurücksetzen (resetuser)
## reset: !stats reset <nick>
##
##
## viel spaß damit
## ©2002-2003 by  BlackDeath
################### stats-public.tcl ##############################

catch "unbind pub - !top10 *pub:!top10"
catch "unbind pub - !ttop10 *pub:!ttop10"
catch "unbind pub - !top20 *pub:!top20"
catch "unbind pub - !ttop20 *pub:!ttop20"
catch "unbind pub - !stat *pub:!stat"
catch "unbind pub - !tstat *pub:!tstat"
catch "unbind pub - !place *pub:!place"
catch "unbind pub - !tplace *pub:!tplace"
catch "unbind pub - !wordstats *pub:!wordstats"
catch "unbind pub - !topwords *pub:!topwords"



bind pub - !top10 stats_top10
bind pub - !ttop10 stats_ttop10
bind pub - !top20 stats_top20
bind pub - !ttop20 stats_ttop20
bind pub - !stat stats_stat
bind pub - !tstat stats_tstat
bind pub - !place stats_place
bind pub - !tplace stats_tplace
bind pub - !wordstats stats_wordstats
bind pub - !topwords stats_topwords



proc stats_top10 {nick uhost hand chan rest} {
if {[stats_cmd "top10" $chan]} {
*pub:!top10 $nick $uhost $hand $chan $rest
}
}

proc stats_ttop10 {nick uhost hand chan rest} {
if {[stats_cmd "ttop10" $chan]} {
*pub:!ttop10 $nick $uhost $hand $chan $rest
}
}

proc stats_top20 {nick uhost hand chan rest} {
if {[stats_cmd "top20" $chan]} {
*pub:!top20 $nick $uhost $hand $chan $rest
}
}

proc stats_ttop20 {nick uhost hand chan rest} {
if {[stats_cmd "ttop20" $chan]} {
*pub:!ttop20 $nick $uhost $hand $chan $rest
}
}

proc stats_stat {nick uhost hand chan rest} {
if {[stats_cmd "stat" $chan]} {
*pub:!stat $nick $uhost $hand $chan $rest
}
}

proc stats_tstat {nick uhost hand chan rest} {
if {[stats_cmd "tstat" $chan]} {
*pub:!tstat $nick $uhost $hand $chan $rest
}
}

proc stats_place {nick uhost hand chan rest} {
if {[stats_cmd "place" $chan]} {
*pub:!place $nick $uhost $hand $chan $rest
}
}

proc stats_tplace {nick uhost hand chan rest} {
if {[stats_cmd "tplace" $chan]} {
*pub:!tplace $nick $uhost $hand $chan $rest
}
}

proc stats_wordstats {nick uhost hand chan rest} {
if {[stats_cmd "wordstats" $chan]} {
*pub:!wordstats $nick $uhost $hand $chan $rest
}
}

proc stats_topwords {nick uhost hand chan rest} {
if {[stats_cmd "topwords" $chan]} {
*pub:!topwords $nick $uhost $hand $chan $rest
}
}

set stats_commands {top10 ttop10 top20 ttop20 stat tstat place tplace wordstats topwords}

proc stats_cmd {cmd chan} {
global stats_cmd
stats_cmd_load $chan
set cmd [string tolower $cmd]
if {[info exists stats_cmd($chan,$cmd)]} {
return $stats_cmd($chan,$cmd)
} else {
return true
}
}

proc stats_cmd_load {chan} {
global stats_cmd
global stats_commands
if {[info exists stats_cmd($chan,-loaded-)]} { return }
set filename [string tolower $chan]
set filename "statscom.cmd"
catch {
set f [open $filename r]
while {[gets $f line] >= 0} {
set switch [string range $line 0 0]
set cmd [string tolower [string range $line 1 end]]
set idx [lsearch $stats_commands $cmd]
if {$idx >= 0} {
switch -- $switch {
"+" {set stats_cmd($chan,$cmd) true}
"-" {set stats_cmd($chan,$cmd) false}
}
}
}
close $f
} resp
set stats_cmd($chan,-loaded-) ""
}

proc stats_cmd_save {chan} {
global stats_cmd
global stats_commands
set filename [string tolower $chan]
set filename "statscom.cmd"
catch {
set f [open $filename w]
foreach cmd [split $stats_commands] {
set cmd [string tolower $cmd]
set opt "+"
if {[info exists stats_cmd($chan,$cmd)]} {
if {$stats_cmd($chan,$cmd)} {
set opt "+"
} else {
set opt "-"
}
}
puts $f "${opt}${cmd}"
}
close $f
}
}

bind pub - !stats stats_switch
bind bot - "stats-user" stats_bot_user

proc stats_schattr {nick user opt} {
if {$opt} {
set opt "+list"
set opt_str "ein"
} else {
set opt "-list"
set opt_str "aus"
}

catch {
set dcclist [dcclist TELNET]
set dcc [lindex $dcclist 0]
set xtra [lindex $dcc 4]
set port [lindex $xtra 1]
set idx [connect localhost $port]
set hdl [idx2hand $idx]
catch { *dcc:schattr $hdl $idx "$user $opt" } result
after 1
killdcc $idx
if {$result != "0"} {
return $result
}
} result
if {$result == ""} {
puthelp "NOTICE $nick :Anzeigen der Statistiken für Benutzer $user in allen Räumen ${opt_str}geschaltet"
putlog "modpub.tcl: $nick changes $user to $opt"
} else {
puthelp "NOTICE $nick :Fehler beim Umschalten des Statistiken: $result"
}
return
}


proc stats_switch_cmd {nick chan cmd opt} {
global stats_cmd
global stats_commands
stats_cmd_load $chan
if {$opt} {
set opt_str "ein"
} else {
set opt_str "aus"
}
if {[string tolower $cmd] == "all"} {
foreach cmd [split $stats_commands] {
set cmd [string tolower $cmd ]
set stats_cmd($chan,$cmd) $opt
}

puthelp "NOTICE $nick :Alle Befehle im Raum $chan ${opt_str}geschaltet"
stats_cmd_save $chan
return
}

set cmd [string tolower $cmd]
set idx [lsearch $stats_commands $cmd]
if {$idx == -1} {
puthelp "NOTICE $nick :Falscher Befehl \"$cmd\""
return
}

set stats_cmd($chan,$cmd) $opt
puthelp "NOTICE $nick :Der Befehl \"$cmd\" im Raum $chan ${opt_str}geschaltet"
stats_cmd_save $chan
return
}



proc stats_bot_user {from command arg} {
# what are the parameters
set cmd [split $arg]
set nick [lindex $cmd 0]
set user [lindex $cmd 1]
set opt [lindex $cmd 2]
# do the work
stats_schattr $nick $user $opt
}

proc stats_switch_user {nick user opt} {
# inform other bots
# do it yourselt, too
stats_schattr $nick $user $opt
return 0
}



proc stats_reset_user {nick chan opt} {
resetuser $opt $chan
puthelp "NOTICE $nick :Statistiken des Benutzers $opt wurden im Raum $chan zurückgesetzt"
}



proc stats_switch {nick uhost hand chan rest} {
if {![isvoice $nick $chan] && ![isop $nick $chan]} {
puthelp "NOTICE $nick :Dieser Befehl ist nur für Moderatoren"
return 0
}

set lrest [split $rest]
set cmd [lindex $lrest 0]
set arg [lindex $lrest 1]
switch -exact -- $cmd {
+cmd { stats_switch_cmd $nick $chan $arg true }
-cmd { stats_switch_cmd $nick $chan $arg false }
reset { stats_reset_user $nick $chan $arg }
+user { stats_switch_user $nick $arg true }
-user { stats_switch_user $nick $arg false }
}
}

putlog "stats-public.tcl by BlackDeath loaded..."
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    egghelp.org community Forum Index -> Modules & Programming All times are GMT - 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Forum hosting provided by Reverse.net

Powered by phpBB © 2001, 2005 phpBB Group
subGreen style by ktauber