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


Fun.tcl
#16

tcl
# Channels concernés mettre "*" pour tous les channels:
set fun(chans) "*"
 
bind join - * notice:join
proc notice:join {nick uhost hand channel} {
Global botnick fun 
if {(([lsearch -exact [string tolower $::fun(chans)] [string tolower $channel]] != -1) || ($::fun(chans) == "*")) && ($nick != $botnick)} {
PUTSERV "NOTICE $nick :\00312Bienvenue\0034 $nick ,\00312 je suis Fun le robot d'animation pour connaitre mes commandes tapez !cmd (uniquement en couleur noir)"
}
}


j'aurais fait un truc comme cela,n'allant plus sur l'IRC il ce peut que je suis un peut rouillé! code bien sur a testé.(c'est ce que j'aurai fait personnellement ) y a surement des erreurs .
La différence entre Linux et Windows ,c'est que Linux c'est comme une belle fille , il faut l'apprivoiser , la comprendre , la séduire tandis que Windows , c'est comme une prostitué , il faut payer et surtout bien se protéger.
#17
Tu peut faire comme sa sinon :


tcl
bind join - "*" join:
proc join:  { nick uhost hand chan } {
 if {$chan == "#accueil"} {
putserv "NOTICE $nick \00312Bienvenue\0034 $nick ,\00312 je suis Fun le robot d'animation pour connaitre mes commandes tapez !cmd (uniquement en couleur noir)"
return 0
}
}

Sachant que ce qui te manquer dans ton code etait le "bind join - "*" join:" qui permet au robot de dire un truc ou effectuer une tache au join d'une personne dans un salon
#18
fedora Wrote:
tcl
if {(([lsearch -exact [string tolower $::fun(chans)] [string tolower $channel]] != -1) || ($::fun(chans) == "*")) && ($nick != $botnick)} {

Ourgh ! Depuis Tcl 8.4 (ou 8.5 ?) il existe une option -nocase pour lsearch, et c'est bigrement pratique

Sinon, je pense qu'il est plus simple d'utiliser les variables depuis le namespace global ($::fun et $::botnick) plutot que de faire un global
Donc, a mon tour de proposer ma version:


tcl
set fun(chans) {#chan1 #chan2}
bind join - * join:fun 
proc join:fun {nick uhost handle chan} {
if {(([lsearch -exact -nocase $::fun(chans) $chan != -1) || ($::fun(chans) eq *)) &&  ($nick ne $::botnick)} {
putserv "NOTICE $nick :\00312Bienvenue\00304 $nick, \00312je suis Fun le robot d'animation. Pour connaitre mes commandes tape !cmd (uniquement en couleur noir)." 
}}


Ca reste globalement le meme que celui de fedora (euh.. ><')
#19
Pour ma part, je n'aime pas les bind join - *

Je ferais plutôt:

tcl
set fun(chans) {#chan1 #chan2}
 
proc join:fun {nick uhost handle chan} {
   if {$nick ne $::botnick} {
      putserv "NOTICE $nick :\00312Bienvenue\00304 $nick, \00312je suis Fun le robot d'animation. Pour connaitre mes commandes tape !cmd (uniquement en couleur noir)."
   }
}
 
proc fun:loadbind {} {
   foreach chan $::fun(chan) {
      if {[botonchan $chan] eq 1} {
         bind join - "$chan *" join:fun
      }
   }
}


Et à la fin du tcl:

tcl
fun:loadbind


Ca permet de limiter les appels à la procédure join:fun aux seuls canaux autorisés. Je ne me souviens plus si join est stackable, donc ça peut être utile de mettre cette limite.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#20
bonjour j'ai opter pour la solution de heretoc que je trouve plus facile as comprendre lol encore merci de votre aide
Je vous poste le code complet pour ceux qui veule on ne sais jamais Smile

tcl
#########################
#                       #
#        Fun.tcl        #  
#     Par Alucard68     #
#     Le 29/06/2009     #
#                       #
######################### 
 
set fun_ver "1.1"
set fun_author "Alucard68"
 
bind pub - "!cmd" pub:cmd
bind pub - "!cmds" pub:cmd
bind pub - "!liste" pub:cmd
bind pub - "!jokes" pub:cmd
bind pub - "!commande" pub:cmd
bind pub - "!biere" pub:biere
bind pub - "!champagne" pub:champagne
bind pub - "!sky" pub:sky
bind pub - "!cafe" pub:cafe
bind pub - "!coca" pub:coca
bind pub - "!kiss" pub:kiss
bind pub - "!palo" pub:palo
bind pub - "!calin" pub:calin
bind pub - "!love" pub:love
bind pub - "!rose" pub:rose
bind pub - "!sexy" pub:sexy
bind pub - "!fouette" pub:fouette
bind pub - "!baffe" pub:baffe
bind pub - "!relou" pub:relou
bind pub - "!vanne" pub:vanne
bind pub - "!clope" pub:clope
 
proc pub:cmd { nick uhost handle chan arg } {
  putserv "NOTICE $nick :\0032Pour faire fonctionner les commandes il faut taper de la maniere suivante !cmd pseudo ( exemple: !bierre Hathor )"
  putserv "NOTICE $nick :\0036Voici les commandes de Fun"
  putserv "NOTICE $nick :\0034"
  putserv "NOTICE $nick :\0037Les commandes barman:"
  putserv "NOTICE $nick :\00312!biere\0034 !coca\00312 !sky\0034 !cafe\00312 !champagne"
  putserv "NOTICE $nick :\0037Les commandes love:"
  putserv "NOTICE $nick :\00312!kiss\0034 !palo\00312 !love\0034 !calin\00312 !rose\0034 !sexy"
  putserv "NOTICE $nick :\0037Les commandes violantes:"
  putserv "NOTICE $nick :\00312!fouette\0034 !baffe\00312 !relou\0034 !vanne"
  putserv "NOTICE $nick :\0037Les commandes diverses:"
  putserv "NOTICE $nick :\00312!clope \0034!story (raconte une histoire bizarre)\00312 !chuck (raconte une aventure de Chuck Norris)\0034 !oracle (!oracle Une question ? exemple: !oracle qui est le plus beau ?)"
  putserv "NOTICE $nick :\0034"
  putserv "NOTICE $nick :\0036Fin des commandes de Fun"
  putserv "NOTICE $nick :\0032Fun a été crée par Alucard68 pour SliverChat."
}
 
proc pub:biere { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312offre une bonne bière bien fraiche à  \0034$pseudo"
  }
}
 
proc pub:champagne { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick  \00312offre une bonne coupe de champagne à  \0034$pseudo"
  }
}
 
proc pub:coca { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312offre un coca bien frais à  \0034$pseudo"
  }
}
 
proc pub:sky { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312offre un bon sky 16 ans d'age à  \0034$pseudo"
  }
}
 
proc pub:cafe { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312offre une tasse de \0034café\00312 à  \0034$pseudo \00312Hmmm :D"
  }
}
 
proc pub:kiss { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312fait un énorme kisssss à  \0034$pseudo"
  }
}
 
proc pub:palo { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312roule un énorme paloOoOoOoOo à  \0034$pseudo"
  }
}
 
proc pub:calin { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0034$nick \00312prend \0037$pseudo \00312dans ses bras et lui fait un énorme calin"
  }
}
 
proc pub:love { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0034$nick \00312t'aime de tout son coeur \0037$pseudo ! \00312Déclaration devant vous sur $chan !"
  }
}
 
proc pub:rose { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312offre une belle rose à  \0034$pseudo"
  }
}
 
proc pub:sexy { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312te trouve vraiment \0034très \00313tres \0037SEXY!!! \0034$pseudo"
  }
}
 
proc pub:fouette { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312fouette \0034$pseudo \00312de toute ses force (t'aime sa hein)"
  }
}
 
proc pub:baffe { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312prend le plus d'élant possible et donne une énorme baffe à\0034$ pseudo"
  }
}
 
proc pub:relou { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312trouve vraiment que \0034$pseudo \00312est très relou."
  }
}
 
proc pub:vanne { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\00312C'était \0034Vanne Pourri Edition Collector\00312 powered by\0034 $pseudo \00312!!"
  }
}
 
proc pub:clope { nick uhost handle chan arg } {
  set pseudo [split $arg]
  if {$pseudo != ""} {
    putserv "PRIVMSG $chan :\0037$nick \00312offre une cigarette \002(\037)¯¯¯¯)¯¯¯¯¯¯¯¯¯¯¯\037)~~~\002\00312 à \0034 $pseudo \00312(c'est pas bien de fumer)"
  }
}
 
bind join - "*" join:
  proc join:  { nick uhost hand chan } {
  if {$chan == "#Accueil"} {
    putserv "NOTICE $nick \00312Bienvenue\0034 $nick ,\00312 je suis Fun le robot d'animation pour connaitre mes commandes tapez !cmd (uniquement en couleur noir)"
  return 0
  }
}
 
putlog "\0034Fun Version $fun_ver By $fun_author loaded"
putlog "\0034Have Fun"

Cordialement Aragorn
#21
L'essentiel est que sa marche et que tu est un minimum compris le "pourquoi sa marcher pas et maintenant sa marche"
Bonne continuation
#22
Bonjour, je me permet de relancer se vieux sujet

j'ai prix le tcl de Aragorn pour mon eggdrop toute l'installation c'est parfaitement dérouler. Le Script c'est bien charger le méssage je join fonctionne très bien.

Mais et oui il y a toujours un mais dans se genre de cas, bref.

Quand je tape !cmd sur le salon au lieux de reçevoir en notice la liste des commandes je ne reçois rien.

Et en part line avec mon eggdrop j'ai se message qui s'affiche.


Code:
[13:59:12] Tcl error [pub:cmd]: extra characters after close-quote
Je précise que je n'est pas toucher au code d'Aragorn.

Merci d'avance pour votre aide futur[/quote].

Cordialement.
#23
Bonjour Alucard`68,

tout d'abord, un petit effort sur le français ce serait plutôt sympa de ta part... c'est juste très désagréable de lire autant de fautes en si peu de phrases ;)

Pour ton erreur, je viens de copier / coller le code ci-dessus d'Aragorn et en ne faisant aucune modification tout fonctionne très bien... Tu es sûr de n'avoir rien modifié ?

Quote:14:18 KiBa !cmd
14:18 Alice Pour faire fonctionner les commandes il faut taper de la maniere suivante !cmd pseudo ( exemple: !bierre Hathor )
#24
oups désolé pour l'horto c'est pas mon point fort :s

je viens de recopier le code de nouveau et sa fonctionne j'avais peu être fait une fausse manip désolé du dérangement je vais étudier ça.

Cordialement.
#25
Sans vouloir critiquer ce tcl, je pense que Jokes est un peu plus évolué.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#26
Personnellement j'utilise Jokes depuis des années et je n'ai jamais eu de problème, il est facile à comprendre, parfaitement modifiable en ajoutant ses propres commandes etc.

Je rejoins donc CrazyCat +1

P.S. : laicolle saylemal
#27
ton péaice cénulle ! :D
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#28
coucou :)

j'ajouterait que dans ton/le code, il est fait allusion aux commande !oracle/!chuck /!story; Qui sont des scripts tcl bien à part, et par consèquent reduit les commandes à nèant si le proprietaire de l'eggdrop n'as pas ces codes (et induit certaiment des erreures en PL) .
idée : Peut -être ajouter dans le code " si oracle.tcl (et les autres.tcl) est dans /scripts return result ; sinon, 0 )

Cordialement.
#29
salut,

un petit script que j avais codé il y a quelques temps et qui simplifie grandement la création et la suppression d'une commande

Code:
namespace eval ::jokes {
    variable char !
    unset -nocomplain jokes
    variable jokes
    variable chans {#tcl #chti}
    array set jokes {
        bisous    "%1\$s fait un bisous à %2\$s"
        biere        "%1\$s offre une bière à %2\$s"
        clope        "%1\$s offre une clope à %2\$s"
    }
    proc init {} {
        variable chans
        variable jokes
        variable char
        if [string is space $chans] {set chans [channels]}
        foreach c $chans {
            bind pubm - "$c [set char]*" [namespace current]::send
        }
        set body {
            variable jokes \n
            variable char \n
            set bind [lindex [split [lindex $arg 0] [set char]] 1] \n
            set arg [lrange $arg 1 end] \n
            switch -nocase -glob -- $bind \{ \n
        }
        foreach j [array names jokes] {
            lappend body "$j \{putserv \"PRIVMSG \$chan :\[join \[format \$jokes($j) \$nick \$arg\]\]\"\} \n"
        }
        lappend body "\}"
        proc send {nick host hand chan arg} [join $body]
    }
    init
}
le script crée à la volée la procédure contenant les commandes.
l'avantage est de ne pas avoir a créer de procédures ou de bind, tout est automatisé.
de même lorsqu'on supprime une commande, un simple rehash suffi a prendre en compte les modifications.
en espérant que ça puisse vous servir
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away


Forum Jump:


Users browsing this thread: 1 Guest(s)