Communauté sur les Eggdrops - Community about Eggdrops
[Demande] Optimisation de mon script - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (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)
+--- Thread: [Demande] Optimisation de mon script (/showthread.php?tid=1441)



Optimisation de mon script - DeeJay - 14/10/2013

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


RE: Optimisation de mon script - CrazyCat - 14/10/2013

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.


RE: Optimisation de mon script - aliasangelius - 14/10/2013

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


RE: Optimisation de mon script - DeeJay - 14/10/2013

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 ?


RE: Optimisation de mon script - aliasangelius - 14/10/2013

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.


RE: Optimisation de mon script - CrazyCat - 14/10/2013

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.