[Question] Logger.tcl
#1
Salutations,

J'utilise le script Logger afin de créer des logs pour mes statistiques.
Seulement je constate qu'il ne log pas ce que le bot 'dit' et j'aimerai bien que les phrase dites par le bot soient loggée aussi.

Vous pouvez m'aidez?
Voici le script :

Code :
######################################################## # Eggdrop Logger 2.0 - www.mircstats.com # # Logging in mIRC 6.17 format. 27/04/2006 # # # # Make sure you have created the dir 'logger(dir)' # # # # Created by Lanze <simon@freeworld.dk> # # Improved by zowtar <zowtar@gmail.com> # # # ######################################################## ### Configuration #;;; Where the logs will be saved. set logger(dir) "logs/" #;;; Strip codes? #;;; 0 = save codes\colors #;;; 1 = no save codes\colors set logger(strip) "1" #;;; Save by Day, Week, Month or Disable? set logger(time) "Month" # # # # # # # # # # # # # # # # DO NOT CHANGE ANYTHING BELOW HERE # # # # # # # # # # # # # # # # ### Events bind join - "#* *!*@*" logger:join bind part - "#* *!*@*" logger:part bind sign - "#* *!*@*" logger:quit bind pubm - "#* *" logger:text bind nick - "#* *" logger:nick bind kick - "#* *" logger:kick bind mode - "#* *" logger:mode bind topc - "#* *" logger:topic bind raw - "333" logger:topic-author bind ctcp - "ACTION" logger:action ### Primary Commands proc logger:join {nick uhost handle chan} { global logger botnick if {$nick == $botnick} { set log "[open "$logger(dir)$chan.log" a]" puts $log "\r" puts $log "Session Start: [strftime "%a %b %d %T %Y"]\r" puts $log "Session Ident: $chan\r" puts $log "\[[strftime "%H:%M"]\] * Now talking in $chan\r" close $log } else { logger:save $chan "* $nick ($uhost) has joined $chan" } } proc logger:part {nick uhost handle chan msg} { if {$msg == ""} { logger:save $chan "* $nick ($uhost) has left $chan" } else { logger:save $chan "* $nick ($uhost) has left $chan ($msg)" } } proc logger:quit {nick uhost handle chan reason} { logger:save $chan "* $nick ($uhost) Quit ($reason)" } proc logger:text {nick uhost handle chan text} { if {[isop $nick $chan] == "1"} { set nick "@$nick" } elseif {[ishalfop $nick $chan] == "1"} { set nick "%$nick" } elseif {[isvoice $nick $chan] == "1"} { set nick "+$nick" } logger:save $chan "<$nick> $text" } proc logger:nick {nick uhost handle chan newnick} { logger:save $chan "* $nick is now known as $newnick" } proc logger:kick {nick uhost handle chan target reason} { logger:save $chan "* $target was kicked by $nick ($reason)" } proc logger:mode {nick uhost handle chan mode victim} { logger:save $chan "* $nick sets mode: $mode $victim" } proc logger:topic {nick uhost handle chan topic} { if {$nick == "*"} { logger:save $chan "* Topic is '$topic'" } else { logger:save $chan "* $nick changes topic to '$topic'" } } proc logger:topic-author {from keyword text} { logger:save [lindex $text 1] "* Set by [lindex $text 2] on [strftime "%a %b %d %T" [lindex $text 3]]" } proc logger:action {nick uhost handle dest keyword text} { if {[validchan $dest] == "1"} { if {[isop $nick $dest] == "1"} { set nick "@$nick" } elseif {[ishalfop $nick $dest] == "1"} { set nick "%$nick" } elseif {[isvoice $nick $dest] == "1"} { set nick "+$nick" } logger:save $dest "* $nick $text" } } ### Secondary Commands proc logger:save {chan text} { global logger set log "[open "$logger(dir)$chan.log" a]" puts $log "\[[strftime "%H:%M"]\] [logger:strip $text]\r" close $log } ### Tertiary Commands proc logger:strip {text} { global logger numversion if {$logger(strip) == "1"} { if {$numversion >= "1061700"} { set text "[stripcodes bcruag $text]" } else { regsub -all -- {\002,\003([0-9][0-9]?(,[0-9][0-9]?)?)?,\017,\026,\037} $text "" text } } return $text } ### Time proc logger:time {} { global logger foreach bind [binds time] { if {[string match "time * logger:time-save" $bind] == "1"} { unbind time - "[lindex $bind 2]" logger:time-save } } switch [string toupper $logger(time)] { DAY { bind time - "00 00 [strftime "%d" [expr [unixtime] + 86400]] * *" logger:time-save } WEEK { bind time - "00 00 [strftime "%d" [expr [unixtime] + ((7 - [strftime "%w"]) * 86400)]] * *" logger:time-save } MONTH { bind time - "00 00 01 [strftime "%m" [expr [unixtime] + ((32 - [strftime "%d"]) * 86400)]] *" logger:time-save } } } proc logger:time-save {minute hour day month year} { global logger foreach channel [channels] { if {[file exists "$logger(dir)$channel.log"] == "1"} { file rename -force "$logger(dir)$channel.log" "$logger(dir)${channel}_\[[strftime "%Y.%m.%d"]\].log" } set log "[open "$logger(dir)$channel.log" w]" puts $log "\r" puts $log "Session Start: [strftime "%a %b %d %T %Y"]\r" puts $log "Session Ident: $channel\r" puts $log "\[[strftime "%H:%M"]\] * Now talking in $channel\r" close $log putquick "TOPIC $channel" } logger:time } logger:time putlog "TCL Logger.tcl Loaded!"
Répondre
#2
Malheureusement je peux pas t'aider sur ceci mais je t'invite la prochaine fois a utiliser les balise [ tcl ] code tcl [ /tcl ] sans les espace pour identifier un code TCL ;)
Répondre
#3
Utas: a ma connaissance, c'est (heu) impossible. ou presque.
Tout simplement par ce qu'il n'y a pas "d'echo" lorsque l'on envoie un message sur IRC (le serveur ne renvoie pas le message à celui qui l'envoie)
Par conséquent, il faut détecter les messages a la sortie du bot.
C'est possible, bien sur, en modifiant les commandes putquick et autres, mais c'est vraiment du bricolage, et ne va pas marcher dans certains cas (messages envoyés par un module C.. etc)
Ce genre de bricolage peut faire l'affaire :

tcl
proc logger:traceOutgoing {command errorCode errorInfo step} {
if $errorCode return
logger:logOutgoing [lindex $command 1]
return }
proc logger:tracePutdccrawOutgoing {comand errorCode errorInfo step} {
if $errorCode return
if [lindex $command 1] return
logger:logOutgoing [lindex $command 3]
return }
proc logger:logOutgoing {rawLine} {
foreach line [split $rawLine "\n"] {
if {[lindex [set splitLine [split $line]] 0] ne "PRIVMSG"} continue
if ![validchan [set chan [lindex $splitLine 1] continue
if ![string first ":" [set text [lrange $line 2 end]]] { set text [string range $text 1 end] }
logger:save $chan "<$botnick> $text" }
return }
trace add execution putquick leave logger:traceOutgoing
trace add execution putserv leave logger:traceOutgoing
trace add execution puthelp leave logger:traceOutgoing
trace add execution putdccraw leave logger:tracePutdccrawOutgoing



non testé :°

ah, au passage, j'ai ptet raté quelque chose, mais pourquoi ne pas utiliser le système de log intégré à eggdrop >< ?
Répondre
#4
Artix a écrit :Utas: a ma connaissance, c'est (heu) impossible. ou presque.
Tout simplement par ce qu'il n'y a pas "d'echo" lorsque l'on envoie un message sur IRC (le serveur ne renvoie pas le message à celui qui l'envoie)
Par conséquent, il faut détecter les messages a la sortie du bot.
C'est possible, bien sur, en modifiant les commandes putquick et autres, mais c'est vraiment du bricolage, et ne va pas marcher dans certains cas (messages envoyés par un module C.. etc)
Ce genre de bricolage peut faire l'affaire :

tcl
proc logger:traceOutgoing {command errorCode errorInfo step} {
if $errorCode return
logger:logOutgoing [lindex $command 1]
return }
proc logger:tracePutdccrawOutgoing {comand errorCode errorInfo step} {
if $errorCode return
if [lindex $command 1] return
logger:logOutgoing [lindex $command 3]
return }
proc logger:logOutgoing {rawLine} {
foreach line [split $rawLine "\n"] {
if {[lindex [set splitLine [split $line]] 0] ne "PRIVMSG"} continue
if ![validchan [set chan [lindex $splitLine 1] continue
if ![string first ":" [set text [lrange $line 2 end]]] { set text [string range $text 1 end] }
logger:save $chan "<$botnick> $text" }
return }
trace add execution putquick leave logger:traceOutgoing
trace add execution putserv leave logger:traceOutgoing
trace add execution puthelp leave logger:traceOutgoing
trace add execution putdccraw leave logger:tracePutdccrawOutgoing



non testé :°

ah, au passage, j'ai ptet raté quelque chose, mais pourquoi ne pas utiliser le système de log intégré à eggdrop >< ?

Coucou,

Merci pour la réponse je vais tester ça!
Sinon, parce que je n'arrive pas à configurer le log correctement afin de pouvoir l'exploiter sur Mircstats, et je n'ai rien trouvé de bien concluant sur le net, j'arrive à faire log le bot quotidiennement mais pas mensuellement :/
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit - Discutez en toute liberté - Transitionnez vers Linux - Discussions dans le Lauragais - Communauté LGBT respectueuse - soutien aux victimes de cybermalveillance - pour les filles par les filles Le forum pour passer le temps