Communauté Eggdrop
commande multi flag - Version imprimable

+- Communauté Eggdrop (https://forum.eggdrop.fr)
+-- Forum : Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum : Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Sujet : commande multi flag (/showthread.php?tid=1091)



commande multi flag - loulou7593 - 17/12/2011

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


RE: commande multi flag - djkenny - 18/12/2011

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"
   }
}





RE: commande multi flag - loulou7593 - 18/12/2011

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


RE: commande multi flag - djkenny - 18/12/2011

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"
}





RE: commande multi flag - CrazyCat - 18/12/2011

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.


RE: commande multi flag - aliasangelius - 18/12/2011

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 ?


RE: commande multi flag - CrazyCat - 18/12/2011

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 ?


RE: commande multi flag - djkenny - 19/12/2011

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]} {





RE: commande multi flag - CrazyCat - 19/12/2011

Ah ! Je savais que j'aurais du tester avant de répondre à alias_angelius Smile
Merci djkenny Smile


RE: commande multi flag - aliasangelius - 19/12/2011

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


RE: commande multi flag - CrazyCat - 19/12/2011

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).


RE: commande multi flag - loulou7593 - 19/12/2011

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


RE: commande multi flag - CrazyCat - 19/12/2011

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 ?


RE: commande multi flag - aliasangelius - 20/12/2011

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.


RE: commande multi flag - loulou7593 - 20/12/2011

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.