commande multi flag
#1
Bonjour,

Voila j'aimerais faire une liste de commandes qui reagisse en fonction des utilisateurs avec un certain flag.

J'ai essayé en faisant le code suivant, quand quelqu'un avec le flag Z tapes !commandes ca lui donne les commandes qui vont pour le flag Z mais aussi la partie de ceux qui n'ont pas de flag. Pareil pour ceux avec le flag X, mais quand un utilisateur qui n'est pas reg dans le bot ca lui donne les commandes du bot. Voici le code ce sera peut etre plus facile à comprendre.

TCL
bind pubm - *!commandes* liste
proc liste {nick host hand channel arg} {
global botnick
   if {[matchattr $nick Z]} {
   putserv "NOTICE $nick :Voici la liste des commandes ADMIN"
   putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
   putserv "NOTICE $nick :Tape !cdebl pour avoir la liste des commandes de la BlackListe"
}
   if {[matchattr $nick X]} {
   putserv "NOTICE $nick :Voici la liste des commandes OPERATEUR"
   putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
} else {
   putserv "NOTICE $nick :Voici la liste des commandes Disponibles TOUS"
   putserv "NOTICE $nick :Tape !cdejeux pour avoir la commande des jeux"
}
}



Voila donc j'aimerais que quand quelqu'un non reg dans le bot tape !commandes ca lui donne que la derniere partie.

Quelqu'un avec un flag Z ca lui donne la partie qui correspond a son flag et la derniere partie.

Et quand quelqu'un avec un flag X ca lui donne la partie su flag X et la derniere partie.

La actuellement quand ca fonctionne pas totalement bien, car quelqu'un avec un flag Z qui tape la commande ca lui donne bien la partie de son flag et sa commence a dire la premiere phrase de la derniere partie mais ca s'arrete.

Et quelqu'un avec un flag X ca lui donne que sa partie, ca ne commence meme pas la premiere phrase de la derniere partie.

Si quelqu'un a une idée.

Merci d'avance
Répondre Avertir
#2
salut,

déjà tu devrais utiliser la variable $hand plutôt que $nick
par exemple:
TCL
bind pubm - *!commandes* liste
proc liste {nick host hand channel arg} {
   if [matchattr $hand Z] {
      putserv "NOTICE $nick :Voici la liste des commandes ADMIN"
      putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
      putserv "NOTICE $nick :Tape !cdebl pour avoir la liste des commandes de la BlackListe"
   }
   if [matchattr $hand X] {
      putserv "NOTICE $nick :Voici la liste des commandes OPERATEUR"
      putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
   }
   if ![validuser $hand] {
      putserv "NOTICE $nick :Voici la liste des commandes Disponibles TOUS"
      putserv "NOTICE $nick :Tape !cdejeux pour avoir la commande des jeux"
   }
}


C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#3
djkenny a écrit :salut,

déjà tu devrais utiliser la variable $hand plutôt que $nick
par exemple:
TCL
bind pubm - *!commandes* liste
proc liste {nick host hand channel arg} {
   if [matchattr $hand Z] {
      putserv "NOTICE $nick :Voici la liste des commandes ADMIN"
      putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
      putserv "NOTICE $nick :Tape !cdebl pour avoir la liste des commandes de la BlackListe"
   }
   if [matchattr $hand X] {
      putserv "NOTICE $nick :Voici la liste des commandes OPERATEUR"
      putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
   }
   if ![validuser $hand] {
      putserv "NOTICE $nick :Voici la liste des commandes Disponibles TOUS"
      putserv "NOTICE $nick :Tape !cdejeux pour avoir la commande des jeux"
   }
}


Quand un utilisateur avec le flag Z tape !commandes, ca donne bien la partie pour le flag Z mais pas la suite des commandes pour tous.Et j'ai maintenant cette erreur en PL ==> [00:52:56] Tcl error [liste]: wrong # args: no script following "!1" argument
Répondre Avertir
#4
ah, je pensai (comme tu avais mis un "else") que les commandes étaient disponibles seulement pour les personnes non enregistrées
donc:
TCL
bind pubm - *!commandes* liste
proc liste {nick host hand channel arg} {
   if [matchattr $hand Z] {
      putserv "NOTICE $nick :Voici la liste des commandes ADMIN"
      putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
      putserv "NOTICE $nick :Tape !cdebl pour avoir la liste des commandes de la BlackListe"
   }
   if [matchattr $hand X] {
      putserv "NOTICE $nick :Voici la liste des commandes OPERATEUR"
      putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
   }
   putserv "NOTICE $nick :Voici la liste des commandes Disponibles TOUS"
   putserv "NOTICE $nick :Tape !cdejeux pour avoir la commande des jeux"
}


C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#5
Ce que je ferais:
TCL
bind pubm - *!commandes* liste
proc liste {nick host hand channel arg} {
   if {[matchattr $hand Z]} {
      putserv "NOTICE $nick :Voici la liste des commandes ADMIN"
      putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
      putserv "NOTICE $nick :Tape !cdebl pour avoir la liste des commandes de la BlackListe"
   }
   if {[matchattr $hand Z] || [matchattr $hand X]} {
     putserv "NOTICE $nick :Voici la liste des commandes OPERATEUR"
     putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
  }
  if {[matchattr $hand Z] || [matchattr $hand X] || [matchattr $hand Y]} {
     putserv "NOTICE $nick :Voici la liste des commandes HALFOP"
  }
  putserv "NOTICE $nick :Voici la liste des commandes Disponibles TOUS"
  putserv "NOTICE $nick :Tape !cdejeux pour avoir la commande des jeux"
}


Evidemment, il ne faut pas avoir 50 niveaux possibles sinon les "if" deviennent imbitables.
Répondre
#6
Moi j'aurait fait plutot comme ça :

TCL
bind pubm - *!commandes* liste
        proc liste {nick host hand channel arg} {
		 set commande [lindex $arg 1]
         set commande [stripcodes abcu [lindex $arg 0]]
    if {$commande == ""} {
         puthelp "privmsg $nick :Commande du Robot"
    foreach c [channels] {
    if [matchattr $hand Z $c] {
       puthelp "privmsg $nick :Voici la liste des commandes ADMIN"
       ....
       break
    }
}
    if [matchattr $hand ZX $c] {
        puthelp "privmsg $nick :Voici la liste des commandes OPERATEUR"
        ....
        break
    }
  }
}



Et j'utilise puthelp pour ce type de message puthelp et largement suffisants.
Et pour les autre level au lieu de faire :

TCL
if {[matchattr $hand Z] || [matchattr $hand X]} {



Pourquoi ?
Autant faire :

TCL
if {[matchattr $hand ZX] {



Sa fera exactement la même chose en plus court non ?
Répondre Avertir
#7
alias_angelius a écrit :
TCL
if {[matchattr $hand Z] || [matchattr $hand X]} {


Pourquoi ?
Autant faire :
TCL
if {[matchattr $hand ZX]} {


Sa fera exactement la même chose en plus court non ?

Je n'en étais pas certain et j'avais la flemme de faire les tests. Sinon dans le principe, nous faisons pareil.

Concernant le puthelp ou putserv: je suis d'accord avec toi, je n'ai modifié que ce qui était important pour la compréhension (donc les if).

Par contre, je ne suis pas d'accord avec ta boucle sur les canaux, pour deux raisons:
1) au départ le script semble être pour des droits globaux, donc le canal est inutile,
2) c'est une commande en canal, donc à quoi bon aller chercher les droits sur les autres canaux ?
Répondre
#8
alias_angelius a écrit :Et pour les autre level au lieu de faire :

TCL
if {[matchattr $hand Z] || [matchattr $hand X]} {



Pourquoi ?
Autant faire :

TCL
if {[matchattr $hand ZX] {



Sa fera exactement la même chose en plus court non ?

je ne suis pas d 'accord la
TCL
if {[matchattr $hand ZX] {


équivaut à
TCL
if {[matchattr $hand Z] && [matchattr $hand X]} {


ce qui est très différent de
TCL
if {[matchattr $hand Z] || [matchattr $hand X]} {


C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#9
Ah ! Je savais que j'aurais du tester avant de répondre à alias_angelius Smile
Merci djkenny Smile
Répondre
#10
Mais pourquoi faire deux matchattr alors qu'un seul suffit ? ou alors j'ai pas compris le sens..

Oui pour le canal j'ai pas fait gaffe désolé CC Smile
Répondre Avertir
#11
djkenny a écrit :
TCL
if {[matchattr $hand ZX] {


équivaut à
TCL
if {[matchattr $hand Z] && [matchattr $hand X]} {


ce qui est très différent de
TCL
if {[matchattr $hand Z] || [matchattr $hand X]} {


alias_angelius a écrit :Mais pourquoi faire deux matchattr alors qu'un seul suffit ? ou alors j'ai pas compris le sens..

Non, ce n'est pas équivalent, c'est ce que dit djkenny. Ce que tu fais est un ET logique (il faut les deux flags) alors que l'on cherche un OU logique (l'un ou l'autre des flags).
Répondre
#12
Merci à vous CrazyCat, djkenny et alias_angelius

Pour vos réponse et votre aide.

Donc j'ai testé et celui là fonctionne tres bien

TCL
bind pubm - *!commandes* liste
proc liste {nick host hand channel arg} {
   if [matchattr $hand Z] {
      putserv "NOTICE $nick :Voici la liste des commandes ADMIN"
      putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
      putserv "NOTICE $nick :Tape !cdebl pour avoir la liste des commandes de la BlackListe"
   }
   if [matchattr $hand X] {
      putserv "NOTICE $nick :Voici la liste des commandes OPERATEUR"
      putserv "NOTICE $nick :Tape !cdegene pour avoir la liste des commandes pour les ajouts/suppressions d'users/admin Ban/Unban etc..."
   }
   putserv "NOTICE $nick :Voici la liste des commandes Disponibles TOUS"
   putserv "NOTICE $nick :Tape !cdejeux pour avoir la commande des jeux"
}



Merci encore.

SUJET RESOLU
Répondre Avertir
#13
Heu, j'ai un gros doute sur la résolution.
Un admin (+Z) voit les commandes admin et operateur ? Ou bien il a les flags +Z et +X ?
Répondre
#14
non s'il donne que le flag +Z il ne verra pas les commande ayant le flag +X.
Sauf si il fesait comme j'avait dit mettre ZX... la les admins vois les commandes Opérateur aussi.
Répondre Avertir
#15
Non un admin flag Z vois la partie des commandes ADMIN et la partie pour tous, pas la partie
du flag X.

C'est donc bien ce que je voulais.
Répondre Avertir


Atteindre :


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