Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Gline logs
#1
Bonsoir,
J'ai un soucis avec ce code qui sert à enregistrer les users gliner de mon serveur avec leurs IPs dans un fichier gline.db, et retirer la trace du gline dans la base après son expiration. Le problème c'est que le bot n'écrit rien dans le fichier quand un user est gliné, et même quand je fasse /msg Bot listgline je n'ai aucun retour.


tcl
##################
##    CONFIG    ##
##################
 
if {[file exists "./gline.db"]} {
source "./gline.db"
}
 
 
bind raw - NOTICE rawgline
proc rawgline {from keyword arg} {
    global gline
    if {[string match "*Client exiting at*User has been banned from nomserv.org*" $arg]} {
        set linegl [lindex $arg 8]
        regsub -all {^([^<]+)!.*} $linegl "\\1" nickexit
        regsub -all {.*@([^<]+)$} $linegl "\\1" hostexit
        set gline($nickexit) $hostexit
        set datagl [open "./gline.db" "w"]
        puts $datagl [list array set gline [array get gline]]
        close $datagl
    }
    if {[string match "*Expiring G:Line*" $arg]} {
        set linedegl [lindex $arg 4]
        regsub -all {.*@([^<]+)\)$} $linedegl "\\1" hostdeexit
        foreach le [array names gline] {
            if {[string equal -nocase $hostdeexit $gline($le)]} {
                unset gline($le)
            }
        }
        set datagl [open "./gline.db" "w"]
        puts $datagl [list array set gline [array get gline]]
        close $datagl
    }
    if {[string match "*removed G:Line*" $arg]} {
        set lineremgl [lindex $arg 4]
        regsub -all {^\*@([^<]+)$} $lineremgl "\\1" hostremexit
        foreach le [array names gline] {
            if {[string equal -nocase $hostremexit $gline($le)]} {
                unset gline($le)
           } 
        }
        set datagl [open "./gline.db" "w"]
        puts $datagl [list array set gline [array get gline]]
        close $datagl
    }
}
 
bind msg - degline msgdegline
proc msgdegline {nick host hand arg} {
    global vhostniv3 gline
    foreach vhost $vhostniv3 {
        if {[string match -nocase $vhost $host]}  {
            set nickdegl [lindex $arg 0]
            if {$nickdegl==""} {
                putquick "NOTICE $nick : \002\00304Syntax !!\002\00306 DEGLINE \00301<\00312Pseudo\00301>"
                return 0
            } else {
                set listgline " [array names gline] "
                if {![string match -nocase "* $nickdegl *" $listgline]} {
                    putquick "NOTICE $nick : \00304**\00303\002 $nickdegl \002Non présent dans la liste de glines !"
                    return 0
                }
            }
            putquick "gline -*@$gline($nickdegl)"
            unset gline($nickdegl)
            set datagl [open "./gline.db" "w"]
            puts $datagl [list array set gline [array get gline]]
            close $datagl
            putquick "NOTICE $nick :\00304**\002\00303 $nickdegl \002a été degline !"
            return 1
        }
    }
}
 
bind msg - listgline msglistgline
proc msglistgline {nick host hand arg} {
    global vhostniv3 gline
    set countgline 0
    foreach vhost $vhostniv3 {
        if {[string match -nocase $vhost $host]}  {
            if {[info exists gline]} {
                foreach gl [lsort -dictionary [array names gline]] {
                    putquick "NOTICE $nick :4* $gl 12>> $gline($gl)"
                    incr countgline
                }
                putquick "NOTICE $nick :\002\00301 $countgline \00304glines"
            }
        }
    }
}


Merci de me corriger s'il y a une erreur quelque part dans ce code.
Cordialement.
Ryan
#2
Je te conseille de mettre des putlog un peu partout, pour vérifier que l'eggdrop reçoit bien les notices serveur, que les regexp marchent bien et que tu obtiens bien ce que tu veux.
Exemple:

tcl
proc rawgline {from keyword arg} {
    global gline
    putlog "Got a notice: $arg"
    if {[string match "*Client exiting at*User has been banned from nomserv.org*" $arg]} {
	    putlog "got a gline exit"
        set linegl [lindex $arg 8]
        regsub -all {^([^<]+)!.*} $linegl "\\1" nickexit
        regsub -all {.*@([^<]+)$} $linegl "\\1" hostexit
        set gline($nickexit) $hostexit
        putlog "In file: [list array set gline [array get gline]]"
        set datagl [open "./gline.db" "w"]
        puts $datagl [list array set gline [array get gline]]
        close $datagl
    }

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#3
Et voila, corrigé sur le canal IRC: souci sur le texte de la regexp principale, donc jamais de match.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away


Possibly Related Threads…
Thread Author Replies Views Last Post
  Gline user nispOr 6 4,407 13/07/2012, 12:04
Last Post: aliasangelius
  Mettre les logs sur le net loulou7593 20 10,947 15/03/2010, 14:35
Last Post: CC30

Forum Jump:


Users browsing this thread: 1 Guest(s)