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


[Demande] Optimisation de mon script
#1
Bonjour à tous,

J'aimerai un script assez simple de réponse à !commande, !info ou autre mais sur un channel bien spécifique.

Actuellement j'utilise ceci, il fait ce que je veux mais je suis persuadé qu'il y a beaucoup plus simple :

Quote:bind pub - !help pub:help
if {$chan == "#Channel"} {
proc pub:help { nick uhost handle chan arg } {
putserv "NOTICE $nick :La réponse..."
}
}

bind pub - !info pub:info
if {$chan == "#Channel"} {
proc pub:info { nick uhost handle chan arg } {
putserv "NOTICE $nick :La réponse..."
}
}

........
........

Merci d'avance pour votre aide
#2
Il y a très peu de chances que ça fonctionne:

tcl
bind pub - !info pub:info
if {$chan == "#Channel"} {
   proc pub:info { nick uhost handle chan arg } {
      putserv "NOTICE $nick :La réponse..."
   }
}

Lors du chargement de ton script, tu vas avoir un joli plantage car $chan n'est pas défini. Ta condition doit être DANS la procédure.

Sinon, il n'y a pas grand chose d'optimisable dans un script aussi simple.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#3
Salut,

Alors plusieurs réponse peuvent se faire :


tcl
bind pub - !help pub:help
proc pub:help { nick uhost handle chan arg } {
    if {$chan == "#Channel"} {
        putserv "NOTICE $nick :La réponse..."
    }
}


La j'ai repris ton code au niveau de ton if je l'ai replacer..
Ensuite ce que moi je ferais plutôt :


tcl
namespace eval ::xhelp {
 
    # Salon ou ont décide que le code fonctionne.
    variable salons "#salon"
 
    # Les binds.
    bind pub - "!help" [namespace current]::help
 
    # Les procédures.
    proc help { nick host hand chan arg } {
        variable salons
        putserv "privmsg $salons :La réponse.."
    }
}
 
# Nous pouvons même faire mieux.. Nous désirons sa sois active sur plusieurs salons.
# Pour celà nous allons utilisé le système de sétudef ce qui nous donnerais ceci :
 
namespace eval ::xhelp {
 
    # Nous mettons le nom du setudef.
    setudef flag HH
 
    # Les binds.
    bind pub - "!help" [namespace current]::help
 
    # Les procédures.
    proc help { nick host hand chan arg } {
        if {[channel get $chan HH]==0} { return; }
            putserv "notice $nick :Voice la liste"
    }
}
 
# Pour activer ce système la en PL te faudra tapez : .channel set #salon +HH


Voilà en espérant que je t'aurais était utile en te donnant ceci
#4
Tout d'abord merci à vous pour vos réponses.

Effectivement, petite erreur de frappe, j'utilise ceci:


Code:
bind pub - !commande1 pub:commande1
proc pub:commande1 { nick uhost handle chan arg } { if {$chan == "#MonChannel"} {
putserv "NOTICE $nick :La réponse"
}}
Quand je parle d'optimisation, n'y a t-il pas un moyen plus simple en utilisant des "if" ou autre pour chaque commande ?

Du genre:

if "commande1" alors "réponse1"
if "commande2" alors "réponse2"

Sans devoir à chaque refaire tout le code cité au dessus pour chaque !commande ?
#5
Dans c'est cas la le mieux serait de passer en switch.. Enfin pour ma part sa me semble plus judicieux.

La je n'es pas le temps mais demain lorsque je serait de retour chez moi, Je pourrais montrer un bout de code du moin si cela n'a pas était fait.
Ou alors regarde sur des codes tel que jokes.tcl je crois il dispose d'un système de la sorte.
#6
Comme le dit aliasangelius, le code de jokes.tcl est parfaitement adapté, en le simplifiant un peu.

Sinon, un bind pubm et un switch sur le premier mot est aussi efficace.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP


Forum Jump:


Users browsing this thread: 1 Guest(s)