@BlackNight :
définir des variables globales avec des noms aussi peu originaux que $cmd $author $scriptver $url $chan etc... est très risqué. Si un autre script fait de même et utilise des variables du même nom, tu obtiendras des bugs incompréhensibles et des résultats aléatoires.
Utilise un namespace (un article existe à ce sujet dans le wiki) ou au moins choisis des noms de variables uniques tels que $BNG_cmd $BNG_author .... (BNG pour BlackNight Google) afin de réduire les risques de conflit.
-----
Pourquoi faire
tcl
set ::unick$nick
putquick "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"
fais directement
tcl
putquick "PRIVMSG $chan :\002\00307$nick \00312votre recherche se trouve sur\00303 $::url \002\003"
puisque tu n'utilises pas $unick ultérieurement
-----
La commande putfast n'est pas une commande Tcl standard, il me semble qu'elle est liée au script alltools.tcl et tu devrais éviter d'obliger de telles dépendances.
Pour afficher des messages d'aide, la commande Tcl la plus appropriée est puthelp
-----
Le fonctionnement général pourrait également être optimisé mais chaque chose en son temps, en espérant déjà que ces quelques conseils t'aident à progresser.
set ::unick$nick
putquick "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"
fais directement
tcl
putquick "PRIVMSG $chan :\002\00307$nick \00312votre recherche se trouve sur\00303 $::url \002\003"
puisque tu n'utilises pas $unick ultérieurement
$::unick est utilisé dans le lastsearch.
MenzAgitat a écrit :La commande putfast n'est pas une commande Tcl standard, il me semble qu'elle est liée au script alltools.tcl et tu devrais éviter d'obliger de telles dépendances.
Pour afficher des messages d'aide, la commande Tcl la plus appropriée est puthelp
Je vais effectivement changer ça, pas besoin du putfast lorsqu'il s'agit d'envoyer aussi peu de lignes. je vais remplacer par un putquick, et les autres par des puthelp.
Je vais également rajouter des namespace dans les variables.
Merci pour ces précieux conseils.
@bewess: Chez moi il est testé et fonctionne nickel.
Je posterai plus tard une nouvelle version.
Vérifie tout de même que tu utilises la dernière version eggdrop stable, à savoir, la 1.6.19 (corrigez moi si je me trompe)
J'ai porté les quelques modifications au script, et je l'ai commenté un maximum pour que les débutants (enfin, ceux qui le sont encore plus que moi) puissent le comprendre.
le voici donc. Je le met en balise tcl et non pas en joint de manière a faciliter la lecture et la compréhension sans demander de téléchargement.
tcl
############### GNU/GPL ######################################### see www.gnu.org/licenses/agpl.txt #######################################
#je commente la source un maximum pour les débutants.#ici vous définissez les commande à taper sur le salon pour effectuer des recherches.
#commande recherche google classiqueset ::cmd"!search"#commande recherche google imageset ::imgcmd"!images"#commande recherche google videoset ::vidcmd"!videos"#commande pour connaitre la dernière recherche effectuéeset ::lastcmd"!lastsearch"#commande pour obtenir de l'aide sur la rechercheset ::helpcmd"!helpsearch"# auteur du script. merci de ne pas le modifierset ::author"BlackNight"# version du scriptset ::scriptver"1.1.1"
#ici les URL de base dans lesquels seront implémentés les recherchesset ::vidbase"http://video.google.fr/videosearch?q="set ::googlebase"http://www.google.fr/search?hl=fr&q="set ::imgbase"http://images.google.fr/images?hl=fr&q="
#ici les salons ou les commande de recherche sont autorisés.set ::chan{"#accueil""#les-tenebres""#la_tour_des_anges"}
#ici on définis les binds, je pense que les noms sont parlants ...
bind pub - $::cmd google_search
bind pub - $::lastcmd google_lastsearch
bind pub - $::imgcmd google_imgsearch
bind pub - $::vidcmd google_vidsearch
bind pub - $::helpcmd google_help
#ici le proc re recherche classique#le foreach nous sert rammener la liste des salons définis plus haut, et le string match à vérifier #si le salon sur lequel est tapé la command est autorisé.#s'il ne l'est pas, il ne se passera rien.##le join, nous permet de mettre le + entre chaque mot qui sera tapé, et donc ca nous donnera un url comme il faut.#les définitions de variables suivantes vont nous permettre de donner le lien, mais aussi de "mémoriser" la dernière recherche# et la stocker dans $::url ainsi que le nom de celui qui a fait la recherche dans $::unickproc google_search {nick host hand chan arg}{foreach google $::chan{if[string match -nocase $google$chan]{set search [join[lrange$arg0 end] +]set base $::googlebaseset ::url"$base$search"set ::unick$nick
puthelp "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"}}}
#le même principe que le proc de recherche classique est appliqué iciproc google_imgsearch {nick host hand chan arg}{foreach google $::chan{if[string match -nocase $google$chan]{set search [join[lrange$arg0 end] +]set base $::imgbaseset ::url"$base$search"set ::unick$nick
puthelp "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"}}}
#le même principe que le proc de recherche classique est appliqué iciproc google_vidsearch {nick host hand chan arg}{foreach google $::chan{if[string match -nocase $google$chan]{set search [join[lrange$arg0 end] +]set base $::vidbaseset ::url"$base$search"set ::unick$nick
puthelp "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"}}}
#Ici, on ne fait que reprendre nos variables $::url et $::unick pour donner la dernière recherche effectuée.proc google_lastsearch {nick host hand chan arg}{foreach google $::chan{if[string match -nocase $google$chan]{
puthelp "PRIVMSG $chan :\002\00312La dernière recherche effectuée par\00312\00307 $::unick\00307 \00312est\00312 \00303$::url\00303\002"}}}
#ici on définis les messages d'aide à la recherche, les variables des commandes définis plus haut sont utilisées#de manière a ne pas réediter cette partie en cas de changement du nom des commandes#Je vous demanderai encore une fois de ne pas enlever mon pseudo à la dernière ligne.proc google_help {nick host hand chan arg}{foreach google $::chan{if[string match -nocase $google$chan]{
putquick "NOTICE $nick :\00312Pour faire une recherche sur google \00313-> \00303$::cmd \00307<votre recherche>\003"
putquick "NOTICE $nick :\00312Pour faire une recherche d'image sur google \00313-> \00303$::imgcmd \00307<votre recherche>\003"
putquick "NOTICE $nick :\00312Pour faire une recherche de vidéo sur google \00313-> \00303$::vidcmd \00307<votre recherche>"
putquick "NOTICE $nick :\00312Cette fonctionalité vous est proposée par \002BlackNight\002"}}}
#ici un indicateur party-line/telnet qui nous informe du chargement du script.
putlog "GoogleSearch $::scriptver par $::author chargé avec succès"
Bon, deux critiques:
1) à quoi servent les :: dans ta définition de variables alors que tu es dans le niveau le plus haut ?
2) Ce TCL ne fait qu'une concaténation de chaîne, pourquoi ne pas faire un TCL plus utile qui interroge directement google et retourne les X premiers résultats ?
Alors, je me suis servit des :: car cela me permet de ne pas utiliser le "global nomvariable".
Et concernant l'interrogation du site, je ne sais pas encore faire ça, c'est d'un trop haut niveau pour moi pour le moment.
Je tiens à le rappeler, je débute dans le scripting TCL, et j'évolue lentement.
Lorsque je parle des "::", c'est quand tu fais les set. C'est inutile, tu es déjà dans le namespace global. Dans les fonctions, c'est sûr que tu en as besoin.
Pour le reste, compte sur nous pour t'aider à progresser et faire un tcl plus complet.