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


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 !
#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 ;)
Away
#3
salut DjK et merci

Ca ne fonctionne pas. C est pareil ! il ajoute encore le pseudo. Vive les doublons lol :D
Si les Cons volaient, certains seraient Chef d'Escadrille !
#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
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#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 ;)
Away
#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 !
#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 !
#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

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#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 !


Possibly Related Threads…
Thread Author Replies Views Last Post
  Proc incrementation des scores trivia fonctionnel Epsilon 0 2,558 30/03/2017, 20:08
Last Post: Epsilon
  Probleme namespace, variable, proc ZarTek 3 4,310 03/08/2013, 21:10
Last Post: CrazyCat
  Soucis proc Ixion 5 5,279 26/03/2011, 00:54
Last Post: Ixion
  problem de proc yannick22 2 3,665 06/11/2010, 05:32
Last Post: yannick22

Forum Jump:


Users browsing this thread: 1 Guest(s)