# Original Author: paultwang - 2010-03-17 # fixed and tweaked: Sebastien 2017-10-25 # This is where pisg.cfg is stored set pp_confname "/home/jedi/pisg/pisg-0.73/pisg.cfg" # This is where your IRC logs are stored set pp_baselogdir "/home/jedi/eggdrop/logs" # This is the file extension of your logs set pp_logfilesuffix ".%Y%m%d" # This is where your output should be set pp_baseoutputdir "/var/www/html/chanstats" # This is the file extension of your output set pp_outputsuffix ".html" # Set IRC network name set pp_networkname "Undernet" # Set log file format set pp_format "eggdrop" # NOTE: When you add channel, it will make eggdrop start logging that channel bind pub m|m !pisgadd pub_pisgadd bind pub m|m !pisgdel pub_pisgdel bind pub m|m !pisgreaddall pub_pisgreaddall #STOP EDITING HERE #STOP EDITING HERE bind join - * join_autoaddbotselfjoin proc pub_pisgadd {n u h c a} { if {[string length $a] == 0} { set chan $c } else { set chan [lindex [split $a] 0] } pp_addchan $chan puthelp "privmsg $c :Added $chan" } proc pub_pisgdel {n u h c a} { if {[string length $a] == 0} { set chan $c } else { set chan [lindex [split $a] 0] } pp_delchan $chan puthelp "privmsg $c :Deleted $chan" } proc pub_pisgreaddall {n u h c a} { pp_readdallchans puthelp "privmsg $c :Re-added all channels" } proc pp_toASCII {char} { return [scan $char %c] } proc pp_toASCIIHEX {string} { set hexvalue [list] foreach char [split $string ""] { lappend hexvalue [format %x [scan $char %c]] } return $hexvalue } proc pp_sanitizechanname {chan} { # This makes it suitable for filename set chan [string tolower [string range $chan 1 end]] set newchan [list] foreach char [split $chan ""] { set ascii [pp_toASCII $char] if {$ascii >= 48 && $ascii <= 57} {lappend newchan $char; continue} if {$ascii >= 65 && $ascii <= 90} {lappend newchan $char; continue} if {$ascii >= 97 && $ascii <= 122} {lappend newchan $char; continue} lappend newchan "%[join [pp_toASCIIHEX $char]]" } set newchan [join $newchan ""] return $newchan } proc pp_addlog {chan} { global pp_baselogdir pp_logfilesuffix set logname [pp_sanitizechanname $chan] logfile "pjk" "$chan" "${pp_baselogdir}/${logname}${pp_logfilesuffix}" } proc pp_addlogfiles {} { foreach chan [channels] { pp_addlog $chan } } proc join_autoaddbotselfjoin {n u h chan} { if {[isbotnick $n]} { pp_addlog $chan } } proc pp_loadconf {} { global pp_confname set conflines [list] set fh [open $pp_confname "r"] for {set i 0} {![eof $fh]} {incr i} { lappend conflines [gets $fh] } close $fh return $conflines } proc pp_overwriteconf {conflines} { global pp_confname {temp-path} set fh [open "${pp_confname}.new" "w"] set lmax [llength $conflines] for {set i 0} {$i < $lmax} {incr i} { puts $fh [lindex $conflines $i] } close $fh file copy -force -- "${pp_confname}.new" $pp_confname file delete -- "${pp_confname}.new" return } proc pp_appendconf {addnewlines} { global pp_confname set fh [open $pp_confname "a"] set lmax [llength $addnewlines] for {set i 0} {$i < $lmax} {incr i} { puts $fh [lindex $addnewlines $i] } close $fh return } proc pp_findchaninconf {conflines} { set lmax [llength $conflines] set chanlines [list] set single [list] set begun 0 for {set i 0} {$i < $lmax} {incr i} { set line [string trim [lindex $conflines $i]] if {!$begun && [string match "" $line]} { set channame [string tolower [join [lrange [split $line "\""] 1 end-1] "\""]] if {[string length $channame] == 0} { set channame "malform" } set single [list $channame] lappend single $i set begun 1 } elseif {$begun && [string match "" $line]} { lappend single $i set begun 0 lappend chanlines $single } } return $chanlines } proc pp_addchan {chan} { global pp_baselogdir pp_logfilesuffix pp_baseoutputdir pp_outputsuffix pp_networkname pp_format if {![string equal [string index $chan 0] "#"]} { putlog "autoadd err: Chan must begin with # sign" return } pp_addlog $chan set conflines [pp_loadconf] set chanlines [pp_findchaninconf $conflines] set lmax [llength $chanlines] for {set i 0} {$i < $lmax} {incr i} { if {[string equal -nocase $chan [lindex [lindex $chanlines $i] 0]]} { # Channel already exists. Ignore command. return } } set addnewlines [list] #puthelp "privmsg #ChanStats :debug 1" lappend addnewlines "" #lappend addnewlines " Logfile=\"${pp_baselogdir}/${chan}${pp_logfilesuffix}\"" lappend addnewlines " LogDir=\"${pp_baselogdir}/\"" lappend addnewlines " LogPrefix=\"[pp_sanitizechanname ${chan}].\"" lappend addnewlines " Format=\"${pp_format}\"" lappend addnewlines " Network=\"${pp_networkname}\"" lappend addnewlines " OutputFile=\"${pp_baseoutputdir}/[pp_sanitizechanname ${chan}]${pp_outputsuffix}\"" lappend addnewlines "" #puthelp "privmsg #ChanStats :debug 1.5" pp_appendconf $addnewlines #puthelp "privmsg #ChanStats :debug 2" } proc pp_delchan {chan} { global pp_logfilesuffix set conflines [pp_loadconf] set chanlines [pp_findchaninconf $conflines] set linestodelete [list] set lmax [llength $chanlines] for {set i 0} {$i < $lmax} {incr i} { if {[string equal -nocase $chan [lindex [lindex $chanlines $i] 0]]} { set linepair [lrange [lindex $chanlines $i] 1 2] lappend linestodelete $linepair } } set linestodelete [lsort -integer -index 0 -decreasing $linestodelete] set lmax [llength $linestodelete] for {set i 0} {$i < $lmax} {incr i} { set d [lindex $linestodelete $i] set conflines [lreplace $conflines [lindex $d 0] [lindex $d 1]] } pp_overwriteconf $conflines } proc pp_readdallchans {} { global pp_logfilesuffix set conflines [pp_loadconf] set chanlines [pp_findchaninconf $conflines] set linestodelete [list] set lmax [llength $chanlines] for {set i 0} {$i < $lmax} {incr i} { set linepair [lrange [lindex $chanlines $i] 1 2] lappend linestodelete $linepair } set linestodelete [lsort -integer -index 0 -decreasing $linestodelete] set lmax [llength $linestodelete] for {set i 0} {$i < $lmax} {incr i} { set d [lindex $linestodelete $i] set conflines [lreplace $conflines [lindex $d 0] [lindex $d 1]] } pp_overwriteconf $conflines foreach chan [channels] { pp_addchan $chan } } pp_addlogfiles