Probleme tcl

cs_foufou33 Messages postés 37 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 16 janvier 2010 - 13 juin 2008 à 21:44
cs_foufou33 Messages postés 37 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 16 janvier 2010 - 14 juin 2008 à 16:13
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 :)

9 réponses

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
14 juin 2008 à 08:37
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.
0
cs_foufou33 Messages postés 37 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 16 janvier 2010
14 juin 2008 à 14:50
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 :�3;1Veuillez éviter les notices salons sur les salons �3;1!officiels�3;1!" }

}

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] [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- [mailto:guest@687.578.532.513 guest@687.578.532.513] -[1]- #!cotes-girondines!
[14:43:55] « Quit\ Pooshy-A - [mailto:guest@2003147087.akseo.fr guest@2003147087.akseo.fr]  EOF from client

Aurai tu une idée ?

Cordialement :)
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
14 juin 2008 à 15:37
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] [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.
0
cs_foufou33 Messages postés 37 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 16 janvier 2010
14 juin 2008 à 15:49
re mister alors j'ai suivi comme tu as dis et maintenant il me dit:

[15:44:48] [15:44] Pooshy joined #!bot!.
[15:44:49] [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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
14 juin 2008 à 15:56
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.
0
cs_foufou33 Messages postés 37 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 16 janvier 2010
14 juin 2008 à 16:04
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 :�3;1Veuillez éviter les notices salons sur les salons �3;1!officiels�3;1!" }

}

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 :�3;1Veuillez éviter les notices salons sur les salons �3;1!officiels�3;1!" }

}

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 :�3;1Veuillez éviter les notices salons sur les salons �3;1!officiels�3;1!" }

}

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 - [mailto:guest@687.578.532.513 guest@687.578.532.513] -[1]- #!cotes-girondines!
[15:56:46] × Mode : TesT / +stn
[16:01:16] » Join\ Pooshy-R - [mailto:guest@2003147087.akseo.fr guest@2003147087.akseo.fr] -[2]- #!cotes-girondines!
[16:01:16] [Info] L'ancien pseudo de Pooshy-R était Pooshy. ([mailto:*!*@2003147087.akseo.fr *!*@2003147087.akseo.fr])
[16:01:18] « Part\ TesT  - [mailto:guest@687.578.532.513 guest@687.578.532.513] -[1]- #!cotes-girondines!
[16:01:19] » Join\ TesT  - [mailto:guest@687.578.532.513 guest@687.578.532.513] -[1]- #!cotes-girondines!
[16:01:19] × 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
0
cs_foufou33 Messages postés 37 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 16 janvier 2010
14 juin 2008 à 16:07
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 :)
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
14 juin 2008 à 16:12
Ben mp... (désolé j'ai pas encore regardé ton code, j'ai le bac a réviser )

Cordialement, uaip.
0
cs_foufou33 Messages postés 37 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 16 janvier 2010
14 juin 2008 à 16:13
non probleme fait moi signe quand tu es dispo et bon revision ;)
0
Rejoignez-nous