begin process at 2008 08 22 01:28:33
1 229 733 membres
5 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Probleme tcl [ Divers / Eggdrop ] (foufou33)

Probleme tcl le 13/06/2008 21:44:53

foufou33
hello,

j'aurai aimer avoir une aide concernant ce code svp.

proc detect_massjoin {idx sock chan nick} {
global c_ l_ salon nick nickmassjoin pooshy
foreach a $pooshy(chanexc) { if {$chan==$a} {return 0} }
if {![info exists c_($chan)]} {
set c_($chan) 1
if {[array exists l_]} { unset l_ }
set l_($nick) 1
utimer 2 [list unset c_($chan)]
} else {
if {$c_($chan) >= 5} {
set l_($nick) 1
set nickmassjoin "$nick"
putquick "whois $nick"
foreach a [array names l_] {
unset l_($a)
}
} else { incr c_($chan); set l_($nick) 1; }
}
}

Malheureusement quand un Pooshy en socket est sur le salon, et que y'a un join, le socket se deconnecte immédiatement.

Auriez vous une idée pourquoi il se deconnecte svp ?

Merci :)

Re : Probleme tcl le 14/06/2008 08:37:22

uaip
Salut, dans cette procédure, rien n'est suceptible de déconnecter qui que ce soit. Il y a seulement des traitements de variables.

"global c_ l_ salon nick nickmassjoin pooshy"
... ok, c'est bien, mais on ne sait pas ce que certaines contiennent

Cordialement, uaip.

Re : Probleme tcl le 14/06/2008 14:50:43

foufou33
Hello uaip et merci d'avoir répondu.

J'ai oublié de mettre l'autre code hier et j'en suis désolé.

voici ce que ca donne.

proc xsock11_event {idx arg} {

global sock11 pooshy botnick fichier

regsub -all {\\} $arg {\\\\} arg

regsub -all {\{} $arg {\{} arg

regsub -all {\}} $arg {\}} arg

regsub -all {\]} $arg {\]} arg

regsub -all {\[} $arg {\[} arg

regsub -all {\"} $arg {\"} arg

putloglev 8 * "\[IN\] $arg"

if {[lindex $arg 0]=="PING"} { putdcc $pooshy(idxA) "PONG [lrange $arg 1 end]"; return 0 }

if {[lindex $arg 1]=="NOTICE"} {

set nick [string trim [lindex [split $arg !] 0] :]

if {[string match #* [lindex $arg 2]]} { putdcc $pooshy(idxR) ":$pooshy(nickR) KILL $nick :1Veuillez éviter les notices salons sur les salons 1!officiels1!" }

}

if {[lindex $arg 1]=="JOIN"} {

set nick [string trim [lindex [split $arg !] 0] :]

set chan [string trim [lindex $arg 2] :]

if {$nick!=$pooshy(nickA)} { detect_massjoin $pooshy(idxA) $pooshy(nickA) $chan $nick }

}

}

Lors d'un join sur un quelconque salon, voici en retour d'erreur que j'ai: [14:43:55] <Pooshy> [14:44] Erreur tcl [xsock11_event]: invalid command name "detect_massjoin"

EN gros l'erreur donne ca; sur l'evenement de la deco du socket:

[14:43:55] » Join\ Test- guest@687.578.532.513 -[1]- #!cotes-girondines!
[14:43:55] « Quit\ Pooshy-A - guest@2003147087.akseo.fr  EOF from client

Aurai tu une idée ?

Cordialement :)


Re : Probleme tcl le 14/06/2008 15:37:49

uaip
Pour commencer, je ne connais pas parfaitement l'agencement des regexps en TCL mais je crois que tes regsub (à part la première) ne servent à rien.
Ensuite, pour ton erreur [14:43:55] <Pooshy> [14:44] Erreur tcl [xsock11_event]: invalid command name "detect_massjoin"

euh... essaye peut-être de mettre ta proc detect_massjoin avant xsock11_event. Ou alors essaye de vérifier avant si les 4 paramètres envoyés sont bien existants, ainsi je te conseille de les tester.
genre:

if {$nick!=$pooshy(nickA)} {
set toi ton_pseudo
putquick "NOTICE $toi :param1:
$pooshy(idxA)"
putquick "NOTICE $toi :param2: $pooshy(nickA)"
putquick "NOTICE $toi :param3: $chan"
putquick "NOTICE $toi :param4: $nick)"
#detect_massjoin $pooshy(idxA) $pooshy(nickA) $chan $nick
}


Si les 4 paramètres sont bien existants, ben.. à vrai dire, je ne sais pas vraiment, parce-que là c'est pareil, je ne sais pas du tout à quoi correspond $pooshy(idxA) etc... (puis je ne suis pas codeur tcl )
Au pire, mets un lien qui dirige vers ton code (si tu le veux), en attendant je vais parler de ton problème à quelques personnes, voire ce qu'elles en disent.

PS: évite les codes couleurs type mIRC, utilise plutôt l'octal, par exemple \00301 poru écrire en noir (petit tuto ici )

Cordialement, uaip.

Re : Probleme tcl le 14/06/2008 15:49:57

foufou33
re mister alors j'ai suivi comme tu as dis et maintenant il me dit:

[15:44:48] <Pooshy> [15:44] Pooshy joined #!bot!.
[15:44:49] <Pooshy> [15:44] Erreur tcl [xsock00_event]: variable "nick" already exists

A ne plus rien y comprendre...

Pour les couleurs désolé c'est dû au C/c :X

donc le code je l'ai regroupé comme tu me l'a conseillé :)

Mais il me dit que dans la variable, le "nick" existe déjà...

Completement paumé la !

$pooshy(idxA): Socket du Pooshy-A

Set pooshy(nickA) "Pooshy-A"

Etc... bien sur c'est pas la copie conforme du vrai Pooshy !

Je fais meme quelque ajouts dessus par exemple un Anti mass join, Anti channel notice et pourquoi pas anti Flood Bot.

Si y'a des idées suis preneurs :D


Re : Probleme tcl le 14/06/2008 15:56:16

uaip
Ah oui attends tiens, je pense à un truc (c'est la raison de ton nouveau problème)... dans ta proc detect_massjoin, tu appelles une variable gobale nick, cependant... tu nommes également une variable du même nom puisque tu as:

proc detect_massjoin {idx sock chan nick} {
global c_ l_ salon nick nickmassjoin pooshy
(...)
}
Changes donc l'une des 2 de nom. Mais bon, c'est encore des approximations que je te donne, puisqu'encore une fois je répète que tu ne nous donnes pas les valeurs de tes variables globales, donc ça aide pas.


Cordialement, uaip.

Re : Probleme tcl le 14/06/2008 16:04:21

foufou33
Hey tu as eu une idée que moi meme je n'aivais pas vu :s

ca donne ca donc,

### ANTI MASS JOIN ###

proc detect_massjoin {idx sock chan nick} {

global c_ l_ salon nickmassjoin pooshy

foreach a $pooshy(chanexc) { if {$chan==$a} {return 0} }

if {![info exists c_($chan)]} {

set c_($chan) 1

if {[array exists l_]} { unset l_ }

set l_($nick) 1

utimer 2 [list unset c_($chan)]

} else {

if {$c_($chan) >= 5} {

set l_($nick) 1

set nickmassjoin "$nick"

putquick "notice Gpx : whois $nick"

foreach a [array names l_] {

unset l_($a)

}

} else { incr c_($chan); set l_($nick) 1; }

}

}

### Module des sockets ###

proc xsock00_event {idx arg} {

global sock00 pooshy botnick fichier

regsub -all {\\} $arg {\\\\} arg

regsub -all {\{} $arg {\{} arg

regsub -all {\}} $arg {\}} arg

regsub -all {\]} $arg {\]} arg

regsub -all {\[} $arg {\[} arg

regsub -all {\"} $arg {\"} arg

putloglev 8 * "\[IN\] $arg"

if {[lindex $arg 0]=="PING"} { putdcc $pooshy(idxR) "PONG [lrange $arg 1 end]"; return 0 }

if {[lindex $arg 1]=="NOTICE"} {

set nick [string trim [lindex [split $arg !] 0] :]

if {[string match #* [lindex $arg 2]]} { putquick "KILL $nick :1Veuillez éviter les notices salons sur les salons 1!officiels1!" }

}

if {[lindex $arg 1]=="JOIN"} {

set nick [string trim [lindex [split $arg !] 0] :]

set chan [string trim [lindex $arg 2] :]

if {$nick!=$pooshy(nickR)} { detect_massjoin $pooshy(idxR) $pooshy(nickR) $chan $nick }

}

}

proc xsock01_event {idx arg} {

global sock01 pooshy botnick fichier

regsub -all {\\} $arg {\\\\} arg

regsub -all {\{} $arg {\{} arg

regsub -all {\}} $arg {\}} arg

regsub -all {\]} $arg {\]} arg

regsub -all {\[} $arg {\[} arg

regsub -all {\"} $arg {\"} arg

putloglev 8 * "\[IN\] $arg"

if {[lindex $arg 0]=="PING"} { putdcc $pooshy(idxS) "PONG [lrange $arg 1 end]"; return 0 }

if {[lindex $arg 1]=="NOTICE"} {

set nick [string trim [lindex [split $arg !] 0] :]

if {[string match #* [lindex $arg 2]]} { putdcc $pooshy(idxR) ":$pooshy(nickR) KILL $nick :1Veuillez éviter les notices salons sur les salons 1!officiels1!" }

}

if {[lindex $arg 1]=="JOIN"} {

set nick [string trim [lindex [split $arg !] 0] :]

set chan [string trim [lindex $arg 2] :]

if {$nick!=$pooshy(nickS)} { detect_massjoin $pooshy(idxS) $pooshy(nickS) $chan $nick }

}

}

proc xsock10_event {idx arg} {

global sock10 pooshy botnick fichier nickmassjoin

regsub -all {\\} $arg {\\\\} arg

regsub -all {\{} $arg {\{} arg

regsub -all {\}} $arg {\}} arg

regsub -all {\]} $arg {\]} arg

regsub -all {\[} $arg {\[} arg

regsub -all {\"} $arg {\"} arg

putloglev 8 * "\[IN\] $arg"

if {[lindex $arg 0]=="PING"} { putdcc $pooshy(idxH) "PONG [lrange $arg 1 end]"; return 0 }

if {[lindex $arg 1]=="NOTICE"} {

set nick [string trim [lindex [split $arg !] 0] :]

if {[string match #* [lindex $arg 2]]} { putdcc $pooshy(idxR) ":$pooshy(nickR) KILL $nick :1Veuillez éviter les notices salons sur les salons 1!officiels1!" }

}

if {[lindex $arg 1]=="JOIN"} {

set nick [string trim [lindex [split $arg !] 0] :]

set chan [string trim [lindex $arg 2] :]

if {$nick!=$pooshy(nickH)} { detect_massjoin $pooshy(idxH) $pooshy(nickH) $chan $nick }

}

}

[15:56:45] » Join\ TesT - guest@687.578.532.513 -[1]- #!cotes-girondines!
[15:56:46] Modes sur #!cotes-girondines! : +stn
[16:01:19]

Jusque la tout va pour le mieux et me reste à cloner en croisant les doigts que cela fonctionne :s

Je te tiens au courant et si tu avais des eclairises de ton cotes ;)

merci a toi


Re : Probleme tcl le 14/06/2008 16:07:44

foufou33

bon ben fausse joie, la j'ai beau trouvé les erreurs mais que dalle.

Si tu as un mail au pire jte file ca mais pas ici :)


Re : Probleme tcl le 14/06/2008 16:12:26

uaip
Ben mp... (désolé j'ai pas encore regardé ton code, j'ai le bac a réviser )

Cordialement, uaip.

Re : Probleme tcl le 14/06/2008 16:13:41

foufou33
non probleme fait moi signe quand tu es dispo et bon revision ;)


Classé sous : set, nick, chan, unset, if

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS