[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 Avertir
#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 Wink
Répondre Avertir
#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 Avertir
#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 Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté