Communauté sur les Eggdrops - Community about Eggdrops
Gline logs - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (https://forum.eggdrop.fr)
+-- Forum: Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum: Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Thread: Gline logs (/showthread.php?tid=1145)



Gline logs - Ryan - 27/02/2012

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


RE: Gline logs - CrazyCat - 28/02/2012

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
    }




RE: Gline logs - CrazyCat - 28/02/2012

Et voila, corrigé sur le canal IRC: souci sur le texte de la regexp principale, donc jamais de match.