labanane
#1
Bonjour,

J'aimerais trouver une âme charitable pour m'aider sur un script tcl.
Voila je vous explique j'ai actuellement le script bash de MenzAgitat qui est fort niquel et fonctionnel et j'aimerais le transformer aussi pour le site http://labanane.org qui est construit presque exactement de la même façon à quelques détails près. J'ai déjà essayer de faire le novice en ne changeant que l'url mais j'obtient ceci.

Citation :[11:24] Tcl error [pub:bananefr]: can't read "numquote": no such variable
Alors que le script actuel de bashfr marche niquel le voici :

Code :
############################################### # # # B a s h F r F e t c h e r # # v1.02 (13/03/2009) par MenzAgitat # # # # IRC: irc.epiknet.org #boulets # # # # Mes scripts sont téléchargeables sur # # http://www.egghelp.org # # ou http://www.eggdrop.fr # # # # merci à B0unTy pour sa routine # # antiflood dont je me suis inspiré # # ainsi qu'à wiki.tcl.tk pour les # # nombreuses bonnes idées que j'y trouve # # # ############################################### # # Description # Affiche des citations de BashFr.org # Syntaxe : !bashfr : affiche une citation aléatoire # !bashfr last : affiche la dernière citation en date # !bashfr n° : affiche la citation qui correspond au n° demandé # # Remarques : # Ce script inclut une petite bidouille qui permet de contourner le filtrage # de lignes en double dans la file d'attente des messages envoyés au serveur. # Cette fonction (réglable au moyen des paramètres double-mode double-server # et double-help dans le fichier eggdrop.conf) est problématique car elle # supprime également les lignes en double dans les citations de BashFr # (fi du comique de répétition donc ^^) # # Ce script est lourdement commenté et équippé d'un mode DEBUG, ceci dans le # but que chacun puisse aisément le lire et le comprendre afin peut-être de # le modifier, l'améliorer, l'adapter, ou de s'en inspirer pour ses propres # scripts. # Merci, le cas échéant de citer les auteurs respectifs lorsque vous reprenez # le travail d'autrui. # Changelog : # 1.0 : Première version # 1.01: Ajout d'un timeout si la connexion ne s'établit pas dans les temps # 1.02: Correction du script qui ne fonctionnait plus suite à un changement # sur le site www.bashfr.org # LICENCE: # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A RTICULAR PURPOSE. See the # GNU General Public License for more details. # ########################### # REGLAGES # ########################### ##### Commande publique set bashfr_cmd "!bash" ##### Chans sur lesquels BashFr Fetcher sera disponible ##### exemple : set bashfr_chans "#chan1 #chan2 chan3" set bashfr_chans "#Accueil" ##### Contrôle de flood ##### ----------------- ##### Nombre maximum de lignes affichées set bashfr_maxlines 15 ##### Anti-flood actif ? ( 1 pour oui, 0 pour non ) set bashfr_antiflood 1 ##### Nombre maximum de requêtes set bashfr_antiflood_max_request 1 ##### toutes les ? secondes set bashfr_antiflood_queue_time 60 ##### Intervalle de temps minimum entre l'affichage de 2 messages ##### avertissant que l'anti-flood a été déclenché (ne réglez pas ##### cette valeur trop bas afin de ne pas flooder avec les messages ##### d'avertissement de l'anti-flood lui-même... set bashfr_antiflood_msg_interval 20 ##### Apparence ##### --------- ##### Les couleurs possible vont de 00 à 15 ##### Couleur du texte du n° de la citation set bashfr_numcolfg 09 ##### Couleur de fond du n° de la citation set bashfr_numcolbg 01 ##### Couleur du texte de la citation set bashfr_quotecolfg 04 ##### Couleur de fond de la citation set bashfr_quotecolbg 15 ################################################### # # # NE MODIFIEZ RIEN EN DESSOUS DE CE CADRE A MOINS # # DE SAVOIR EXACTEMENT CE QUE VOUS FAITES # # # ################################################### package require http set bashfr_version "1.02.20090313" set bashfr_DEBUGMODE 0 set bashfr_antiflood_msg 0 set bashfr_instance 0 set bashfr_duplicatesfix {} set useragent "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" set bashfr_url "http://danstonchat.com/" bind pub -|- $bashfr_cmd pub:bashfr ##### Procédure principale proc pub:bashfr {nick host hand chan arg} { global bashfr_DEBUGMODE bashfr_antiflood bashfr_instance bashfr_antiflood_max_request bashfr_antiflood_queue_time bashfr_antiflood_msg_interval bashfr_antiflood_msg ##### Avons-nous la permission d'utiliser cette commande sur ce chan ? set permission_result [bashfr_channel_check $chan] if {$permission_result == 0} {return} ### contrôle de flood if { $bashfr_antiflood == 1 } { ## flood détecté ? if { $bashfr_instance >= $bashfr_antiflood_max_request } { if {$bashfr_DEBUGMODE == 1} { putlog "\00304\[BASHFR DEBUG\]\003 anti-flood : flood détecté" } if { $bashfr_antiflood_msg == 0 } { set bashfr_antiflood_msg 1 putquick "privmsg $chan :Contrôle de flood : pas plus de $bashfr_antiflood_max_request requête(s) toutes les $bashfr_antiflood_queue_time secondes." utimer $bashfr_antiflood_msg_interval bashfr_antiflood_msg_reset } return } incr bashfr_instance if { $bashfr_DEBUGMODE == 1 } { putlog "\00304\[BASHFR DEBUG\]\003 anti-flood : nouvelle instance $bashfr_instance" } utimer [set bashfr_antiflood_queue_time] bashfr_antiflood_close_instance } set arg [string trim $arg] # Si l'argument n'est pas numérique ET n'est pas "last" et n'est pas "" # on affiche de l'aide if {([regexp {^[0-9]+$} $arg] != 1) && ($arg != "last") && ($arg != "")} { bashfr_syntax $chan # sinon, on traite la demande } else { global useragent bashfr_url bashfr_cmd bashfr_maxlines bashfr_numcolfg bashfr_numcolbg bashfr_quotecolfg bashfr_quotecolbg # putcmdlog "$nick@$chan $bashfr_cmd $arg" set res "" set bashfr_duplicatesfix {} ## Construction de l'url if {[regexp {^[0-9]+$} $arg] == 1} { set bashfr_url2 "?$arg" } if {$arg == ""} { set bashfr_url2 "?sort=random" } if {$arg == "last"} { set bashfr_url2 "?sort=latest" } set url "$bashfr_url$bashfr_url2" if $bashfr_DEBUGMODE {putlog "\00304\[BASHFR DEBUG\]\003 url = $url"} ##### on envoie la requête au socket ::http::config -useragent $useragent set token [::http::geturl "$url" -timeout 6000] ##### si la connexion est établie, on traite les données reçues. if {[::http::status $token] == "ok"} { ### l'argument est numérique donc on cherche une citation bien précise. if {[regexp {^[0-9]+$} $arg] == 1} { if $bashfr_DEBUGMODE {putlog "\00304\[BASHFR DEBUG\]\003 l'argument est numérique - n° de citation demandé : $arg"} set numquote $arg regexp "class=\"com\"></span></span><br />(.+?)</p>" [::http::data $token] res if { $res != "" } { bashfr_quote_processing $res $chan $url $numquote } else { puthelp "privmsg $chan :\00314$nick > La citation demandée n'existe pas.\003" } } ### l'argument est "last", on veut la dernière citation en date if {($bashfr_DEBUGMODE) && ($arg == "last")} {putlog "\00304\[BASHFR DEBUG\]\003 requête de la dernière citation en date"} ### l'argument est inexistant, on veut une citation aléatoire if {($bashfr_DEBUGMODE) && ($arg == "")} {putlog "\00304\[BASHFR DEBUG\]\003 requête d'une citation aléatoire"} if {($arg == "last") || ($arg == "")} { regexp "<span id=\"com-(.+?)\" class=\"com\">" [::http::data $token] numquote regsub -all {[^0-9]+} $numquote "" numquote regexp "class=\"com\"></span></span><br />(.+?)</p>" [::http::data $token] res if { $res != "" } { bashfr_quote_processing $res $chan $url $numquote } else { puthelp "privmsg $chan :\00314Aucune information identifiable n'a pu être récupérée. BashFr rencontre peut-être un problème ou bien le layout du site a changé.\003" } } } else { puthelp "privmsg $chan :\00314La connexion à \002BashFr\002 n'a pu être établie. Peut-être le site rencontre-t-il des difficultés techniques. Veuillez réessayer plus tard.\003" } ::http::cleanup $token } } ##### Compte le nombre d'occurrence d'une sous-chaîne dans une chaîne de caractères donnée proc scount {subs string} {regsub -all $subs $string $subs string} ##### Syntaxe proc bashfr_syntax { chan } { global bashfr_cmd puthelp "privmsg $chan :\037Syntaxe :\037 \002$bashfr_cmd\002 \00314\[\003paramètre\00314\] \00307| \003Affiche une citation du site www.bashfr.org \00307| \003Cette commande a 3 fonctions : \002$bashfr_cmd\002 affiche une citation aléatoire. \00307— \003\002$bashfr_cmd\002 \00314\[\003n° de quote\00314\] \003affiche la citation du n° demandé. \00307— \003\002$bashfr_cmd\002 \00314\[\003last\00314\] \003affiche la dernière citation en date." return "done" } ##### Vérifie si le chan est dans la liste des chans autorisés proc bashfr_channel_check { chan } { global bashfr_chans if {[lsearch -exact $bashfr_chans $chan] != -1} { set permission 1 } else { set permission 0 } return $permission } ##### Traitement des données proc bashfr_quote_processing { res chan url numquote } { global bashfr_DEBUGMODE if $bashfr_DEBUGMODE {putlog "\00304\[BASHFR DEBUG\]\003 \037PRE-REGSUB\037 $res"} regsub -all "class=\"com\">" $res "" res ## Conversion des caractères html spéciaux et filtrage des balises HTML set res [bashfr_quote_filter $res] ## On teste si on a encore du contenu intéressant après le filtrage if {$res != ""} { # Si oui, on affiche le résultat bashfr_display_quote $res $chan $url $numquote } return "done" } ##### Conversion des caractères html spéciaux et filtrage des balises HTML proc bashfr_quote_filter { res } { global bashfr_DEBUGMODE set res [string map -nocase { "&agrave;" "à" "&agrave;" "à" "&aacute;" "á" "&acirc;" "â" "&atilde;" "ã" "&auml;" "ä" "&aring;" "å" "&aelig;" "æ" "&ccedil;" "ç" "&egrave;" "è" "&eacute;" "é" "&ecirc;" "ê" "&euml;" "ë" "&igrave;" "ì" "&iacute;" "í" "&icirc;" "î" "&iuml;" "ï" "&eth;" "ð" "&ntilde;" "ñ" "&ograve;" "ò" "&oacute;" "ó" "&ocirc;" "ô" "&otilde;" "õ" "&ouml;" "ö" "&divide;" "÷" "&oslash;" "ø" "&ugrave;" "ù" "&uacute;" "ú" "&ucirc;" "û" "&uuml;" "ü" "&yacute;" "ý" "&thorn;" "þ" "&yuml;" "ÿ" "&quot;" "\"" "&amp;" "&" "&euro;" "€" "&oelig;" "Å“" "&Yuml;" "Ÿ" "&nbsp;" " " "&iexcl;" "¡" "&cent;" "¢" "&pound;" "£" "&curren;" "¤" "&yen;" "Â¥" "&brvbar;" "¦" "&brkbar;" "¦" "&sect;" "§" "&uml;" "¨" "&die;" "¨" "&copy;" "©" "&ordf;" "ª" "&laquo;" "«" "&not;" "¬" "&shy;" "­-" "&reg;" "®" "&macr;" "¯" "&hibar;" "¯" "&deg;" "°" "&plusmn;" "±" "&sup2;" "²" "&sup3;" "³" "&acute;" "´" "&micro;" "µ" "&para;" "¶" "&middot;" "·" "&cedil;" "¸" "&sup1;" "¹" "&ordm;" "º" "&raquo;" "»" "&frac14;" "¼" "&frac12;" "½" "&frac34;" "¾" "&iquest;" "¿" "&Agrave;" "À" "&Aacute;" "Á" "&Acirc;" "Â" "&Atilde;" "Ã" "&Auml;" "Ä" "&Aring;" "Å" "&AElig;" "Æ" "&Ccedil;" "Ç" "&Egrave;" "È" "&Eacute;" "É" "&Ecirc;" "Ê" "&Euml;" "Ë" "&Igrave;" "í" "&Iacute;" "Í" "&Icirc;" "Î" "&Iuml;" "Ï" "&ETH;" "Ð" "&Dstrok;" "Ð" "&Ntilde;" "Ñ" "&Ograve;" "Ò" "&Oacute;" "Ó" "&Ocirc;" "Ô" "&Otilde;" "Õ" "&Ouml;" "Ö" "&times;" "×" "&Oslash;" "Ø" "&Ugrave;" "Ù" "&Uacute;" "Ê" "&Ucirc;" "Û" "&Uuml;" "í" "&Yacute;" "Ý" "&hellip;" "..." "&THORN;" "Î" "&szlig;" "ß" "\r" "\n" "\t" "" "'" "\'" "'" "\'" """ "\'" "&" "&" "#91;" "\(" "\" "\/" "]" ")" "{" "(" "}" ")" "£" "£" "¨" "¨" "©" "©" "«" "«" "­" "­" "®" "®" "´" "´" "·" "·" "¹" "¹" "»" "»" "¼" "¼" "½" "½" "¾" "¾" "À" "À" "Á" "Á" "Â" "Â" "Ã" "Ã" "Ä" "Ä" "Å" "Å" "Æ" "Æ" "Ç" "Ç" "È" "È" "É" "É" "Ê" "Ê" "Ë" "Ë" "í" "í" "Í" "Í" "Î" "Î" "Ï" "Ï" "Ð" "Ð" "Ñ" "Ñ" "Ò" "Ò" "Ó" "Ó" "Ô" "Ô" "Õ" "Õ" "Ö" "Ö" "×" "×" "Ø" "Ø" "Ù" "Ù" "Ê" "Ê" "Û" "Û" "í" "í" "Ý" "Ý" "Î" "Î" "ß" "ß" "à" "à" "á" "á" "â" "â" "ã" "ã" "ä" "ä" "å" "å" "æ" "æ" "ç" "ç" "è" "è" "é" "é" "ê" "ê" "ë" "ë" "ì" "ì" "í" "í" "î" "î" "ï" "ï" "ð" "ð" "ñ" "ñ" "ò" "ò" "ó" "ó" "ô" "ô" "õ" "õ" "ö" "ö" "÷" "÷" "ø" "ø" "ù" "ù" "ú" "ú" "û" "û" "ü" "ü" "ý" "ý" "þ" "þ" "…" "..." } $res] regsub -all "<br />" $res "\n" res regsub -all "<\[^<\]*>" $res "" res set res [string map -nocase { "&lt;" "<" "&gt;" ">" } $res] set res [encoding convertfrom "utf-8" $res ] if $bashfr_DEBUGMODE {putlog "\00304\[BASHFR DEBUG\]\003 \037POST-REGSUB\037 $res"} return "${res}" } ##### Affichage de la citation proc bashfr_display_quote { res chan url numquote } { global bashfr_numcolfg bashfr_numcolbg bashfr_quotecolfg bashfr_quotecolbg bashfr_maxlines bashfr_DEBUGMODE bashfr_url bashfr_duplicatesfix set numresults [scount "\n" $res] set res [split $res "\n"] set counter 1 foreach line $res { if {[string trim $line] != "" && [string trim $line] != " "} { if {$counter == 1} { set line "\002\003$bashfr_numcolfg,$bashfr_numcolbg\[$numquote\]\002\003$bashfr_quotecolfg,$bashfr_quotecolbg $line \003" } if {($counter >= $bashfr_maxlines) && ($numresults >= $bashfr_maxlines)} { set line "$line \003\00304 (...)\003" } # si, et tant qu'on trouve une autre ligne identique dans la citation while {[expr [lsearch -exact $bashfr_duplicatesfix [bashfr_calculate_checksum $line]]] >= 0} { # alors on ajoute un espace (caractère ascii 32 (40 en octal)) à la fin pour # outrepasser le filtrage des lignes en double dans la file d'attente du bot. set line "$line \003\040" if $bashfr_DEBUGMODE {putlog "\00304\[BASHFR DEBUG\]\003 on a modifié la ligne \00314\"$line\"\003 car elle était identique à une autre dans la file d'attente"} } # maintenant qu'on est sûr qu'il n'y a pas d'autre ligne identique dans la queue, # on ajoute cette ligne dans la liste pour comparaisons ultérieures. lappend bashfr_duplicatesfix [bashfr_calculate_checksum $line] # on affiche le résultat puthelp "privmsg $chan :\003$bashfr_quotecolfg,$bashfr_quotecolbg$line \003" if {($counter >= $bashfr_maxlines) && ($numresults >= $bashfr_maxlines)} { puthelp "privmsg $chan :\00314La suite ici : \00312\037$bashfr_url?$numquote\037\003" set bashfr_duplicatesfix {} return "done" } incr counter } } set bashfr_duplicatesfix {} } ##### Clôture d'une instance de l'anti-flood après expiration du délai proc bashfr_antiflood_close_instance { } { global bashfr_DEBUGMODE bashfr_instance if { $bashfr_instance > 0 } { incr bashfr_instance -1 } if { $bashfr_DEBUGMODE == 1 } { putlog "\00304\[BASHFR DEBUG\]\003 anti-flood : le n° d'instance est descendu à $bashfr_instance" } } ##### Remise en service du message d'avertissement de l'anti-flood proc bashfr_antiflood_msg_reset { } { global bashfr_antiflood_msg set bashfr_antiflood_msg 0 } ##### Calcul du checksum (simplifié) d'une chaîne ASCII proc bashfr_calculate_checksum { line } { set line_chars [split $line {}] set checksum 0 foreach char $line_chars { scan $char "%c" value incr checksum $value } return $checksum } putlog "\002*BashFr Fetcher v$bashfr_version*\002 par MenzAgitat (\037\00312http://www.boulets-roxx.com\003\037) a été chargé."

Merci à tous de m'avoir lu et j'espere que quelqu'un pourra m'aider :)
Répondre
#2
Aucune âme charitable ? :/
Je relance quand même on ne sait jamais ^^
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit - Discutez en toute liberté - Transitionnez vers Linux - Discussions dans le Lauragais - Communauté LGBT respectueuse - soutien aux victimes de cybermalveillance - pour les filles par les filles Le forum pour passer le temps