Soucis dans une proc
#1
Bonsoir,

Je viens poster car j ai besoin d une petite aide en ce qui concerne une proc qui permet d ajouter 3 éléments dans un fichier.
En fait, quand j'ajoute une fois un pseudo, il le met bien dans le fichier mais si je retape une seconde fois le même pseudo, il va l'ajouter dans le fichier au lieu de le bloquer.
Merci
je vous c/c ma proc :

TCL
bind pub A .+protect moderation::.+protect
proc .+protect {nick hand host chan arg} {
 variable moderation
 variable salons
 set temp [lindex $arg 0]
 
 if {$temp=="" || ![string match *@* $temp]} {
 putquick "NOTICE $nick :\2Utilisation:\2 .+protect <pseudo*!*@*> ou <*!*@host>"
 putquick "NOTICE $nick :\0034Exemple:\2 .+protect toto*!*@* ou *!*@000000.fr"
 return 0
 }
 
 set x 0
 foreach data $moderation(data) {
 if {[string match [lindex $data 0] $chan] && [string match [lindex $data 1] $arg] && [lindex $data 0]=="PROTECT" && [string tolower [lindex $data 1]]==[string tolower [lindex $arg 0]]} {
 set x 1
 }
 }
 
 if !$x {
 lappend moderation(data) "$chan PROTECT [join $temp]"
 putquick "PRIVMSG $chan :\002$temp est ajouté à la liste des protégés"
 } else {
 putquick "PRIVMSG $chan :\002 $temp est déja dans la liste des protégés"
 }
}


Si les Cons volaient, certains seraient Chef d'Escadrille !
Répondre Avertir
#2
salut,

essais de remplacer ça
TCL
if {[string match [lindex $data 0] $chan] && [string match [lindex $data 1] $arg] && [lindex $data 0]=="PROTECT" && [string tolower [lindex $data 1]]==[string tolower [lindex $arg 0]]} {
 
par 
 
if {[string equal -nocase [lindex $data 0] $chan] && [string match -nocase [lindex $data 1] [lindex $arg 0]] && [lindex $data 0]=="PROTECT"} {


C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#3
salut DjK et merci

Ca ne fonctionne pas. C est pareil ! il ajoute encore le pseudo. Vive les doublons lol Very Happy
Si les Cons volaient, certains seraient Chef d'Escadrille !
Répondre Avertir
#4
J'ai un léger doute sur vos vérifications.
L'enregistrement donne:
TCL
lappend moderation(data) "$chan PROTECT [join $temp]"



Les tests:
TCL
[lindex $data 0]=="PROTECT"


Tiens, pour moi l'index 0 donne le chan
Répondre
#5
salut,

exact CrazyCat je n'avais pas fait attention

TCL
if {[string equal -nocase [lindex $data 0] $chan] && [string match -nocase [lindex $data 2] [lindex $arg 0]] && [lindex $data 1]=="PROTECT"} {


C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#6
Bonjour,

Désolé de répondre tardivement mais pas mal occupé avec le taf donc pas eu trop le temps. Bref, tout çà pour dire que c'est bon, çà fonctionne.

Merci à vous 2
Si les Cons volaient, certains seraient Chef d'Escadrille !
Répondre Avertir
#7
Bonjour,

Je reviens vers vous pour un autre petit soucis toujours dans le même tcl. En fait, lorsque je tape une commande sur un #salonX ( exmple : .+protect pseudo*!*@* , ca note bien dans la db ( #salonX PROTECT pseudo*!*@* ).
Le bot gère donc 2 salons. Dans ma db j'ai donc ( #salonX PROTECT pseudo*!*@* et #salonY PROTECT pseudo*!*@* ). Jusque là tout va bien.
Lorsque je demande à voir la liste des protégés pour le salonX, le bot me donne tous les protégés des 2 salons (#salonX #salonY).
Je vous c/c ma proc en espérant que quelqu'un pourrait m'aiguiller.
TCL
proc protectlist {nick host hand chan arg} {
 variable moderation
 variable salons
  set x 0
  set d ""
  if {[lsearch [string tolower $salons] [string tolower $chan]]==-1} {putquick "NOTICE $nick :\002Erreur:\002 $chan n'est pas un salon que je modère actuellement";return}
    foreach data $moderation(data) {
    if {[lindex $data 1]!="PROTECT"} continue
    set x 1
    lappend d [lindex $data 2]
    if {[llength $d]==10 && [lsearch [string tolower $salons] [string tolower $chan]]==1 } {
      putquick "NOTICE $nick : $chan PROTECT [join $d]"
	  set d ""
 
	}
  }
 
  if {[llength $d]>0 && [lsearch [string tolower $salons] [string tolower $chan]]==1} {
    putquick "NOTICE $nick : $chan PROTECT [join $d]" 
    set d ""
  }
  if !$x {putquick "NOTICE $nick : Liste Protect vide."}
 
}




Merci d'avance
Si les Cons volaient, certains seraient Chef d'Escadrille !
Répondre Avertir
#8
C'est logique, tu ne vérifies jamais que la ligne contient le canal visé.
Il faut modifier:
TCL
if {[lindex $data 1]!="PROTECT"} continue


Pour en faire:
TCL
if {[string tolower [lindex $data 0]]==[string tolower $chan] && [lindex $data 1]!="PROTECT"} continue


Répondre
#9
Merci CrazyCat

J'ai testé ta ligne qui ne fonctionnait pas également ( j'avais toujours la même chose ). J'ai modifié la proc directement et là, çà fonctionne niquel.
Plus aucune erreur.

Cdt,
Si les Cons volaient, certains seraient Chef d'Escadrille !
Répondre Avertir


Atteindre :


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