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


[script] Vie de merde (VDM)
#46
(?:.*?) = parenthèse non-capturante, non-greedy.
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
#47
Bonjour

J'ai tester comme l'a mis lealexp et apparemment cela fonctionne.

Un grand merci :)
DodY
#48
Bonjour,

pour ma part je viens de test et le retour est toujours le même

Tcl error [::vdm::pub_disp_vdm]: can't read "res": no such variable

la ligne 127 bien modifier comme la notifier lealexp

la procédure donc modifier


Code:
proc vdm::pub_disp_vdm {nick host handle chan args} {
    if {[lsearch -exact [split $vdm::allowed_chans] $chan] != -1} {
        if {($vdm::antiflood == 1) && ([vdm::antiflood $chan "vdm"] == "flood")} { return }

        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 url "http://www.viedemerde.fr/aleatoire"
        
        ::http::config -useragent $useragent
        set token [::http::geturl "$url" -timeout 6000]
        
        if {[::http::status $token] == "ok"} {
                     regexp {<div class="post"  id=(?:.*?)>(.+?)</p>} [::http::data  $token] res
            regsub {\n} $res "" res
            regsub -all {<[^>]+>} $res "" res
            regsub {VDM$} $res "\002VDM\002" res
            set result [vdm::string_filter $res]
            puthelp "privmsg $chan :$result"
        } else {
            puthelp "privmsg $chan :\00314La connexion à \002Vie de merde\002 n'a pu être établie. Peut-être le site rencontre-t-il des difficultés techniques. Veuillez réessayer plus tard.\003"
        }
    }
}
une idée svp ?

Merci d'avance :)
#49
graouw salut ,
Tu as deux lignes à éditer comme dit dans le post plus haut, pas une seule :)
(ici ça fonsctionne apres avoir editer les deux lignes)
#50
ealexp Wrote:Bonsoir,

Ligne 127, remplace
tcl
regexp {<div class="post">(.+?)</p>} [::http::data $token] res

par
tcl
regexp {<div class="post" id=(?:.*?)>(.+?)</p>} [::http::data $token] res


ealexp


hum la 127 ouai je ne vois pas ou est la 2ème don tu parle :s
#51
Re .. salut
fais un petit ctrl +f quand ton tcl VDM.tcl est ouvert, et rechercher la ligne
Quote: regexp {<div class="post">(.+?)</p>} [::http::data $token] res

Tu devrais la trouver trés vite :) , puis remplace comme dis précèdement . ( bien entendu un .rehash ou même mieux, un restart de l'eggdrop vas de soit pour que ça soit pris en compte.)
ps: j'espere que tu as bien http.tcl, sinon ça risque fort de ne jamais fonctionner.
#52
re salut nan mais le tcl je l'avais déjà puis il c'est mis a ne plus fonctionner j'ai donc modifier la ligne dite la mais dans le tcl elle ne s'y trouve qu'une fois donc je ne vois pas de quel 2ème ligne a modifier que tu me parle justement :D on est bien d'accord que celle la a été remplacer
et le problème reste entier

Code:
[15:36] Tcl error [::vdm::pub_disp_vdm]: can't read "res": no such variable
donc j'avoue ne pas comprendre ^^'
#53
re ,
Bha , plus haut,dans le TCL j'ai ça perso :

tcl
# -> Tout les combiens de minutes voulez vous que la publicité soit envoyé ?
 
proc ::AutoMsgVdm {min hour args} {
global botnick
 
foreach chan $vdm::allowed_chans {
 
		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 url "http://www.viedemerde.fr/aleatoire"
 
		::http::config -useragent $useragent
		set token [::http::geturl "$url" -timeout 6000]
 
         if {[::http::status $token] == "ok"} {
#####           regexp {<div class="post">(.+?)</p>} [::http::data $token] res   <---- ici  l'ancienne ligne commentée,
#####           puis dessous celle modifiée.
		   regexp {<div class="post" id=(?:.*?)>(.+?)</p>} [::http::data $token] res
           regsub {\n} $res "" res
           regsub -all {<[^>]+>} $res "" res
           regsub {VDM$} $res "\002VDM\002" res
           set result [vdm::string_filter $res]
           puthelp "privmsg $chan :$result"
           } else {
puthelp "privmsg  #chanlog : blablablablablablablablalba"

#54
re,
hum effectivement je n'avais pas ceci dans mon tcl bref c'est bon les 2 lignes on été modifier et pourtant

[15:54] Tcl error [::vdm::pub_disp_vdm]: can't read "res": no such variable

j'ai bien fait attention au majuscule dans le nom du chan etc mais il persiste
:/ le tiens fonctionne ? peux tu le mettre en pièce jointe stp ?
#55
re,
non, je ne le metrait pas en fichier en join, c'est la solution de facilité à mon humble avis, il faut plutot trouver d'ou viens la "panne".

• As tu bien rederammé ton eggdrop apres modifications ?
• Quelle version d'eggdrop as tu ?
• Quel version http.tcl ?
eventuellement poses nous ton TCL complet entre les balises [ tcl ] [ /tcl ] peut etre que ce n'est qu'une petite erreure .
#56
re,

oui j'ai reboot l'eggdrop 2fois toujours pareil
eggdrop1.6.18 et oui aussi j'ai bien le http.tcl

et vue ce que dis l'erreur en pl elle fait donc référence a ceci

tcl
###############################################
#                                               #
#             V i e D e M e r d e               #
#  v1.0 (01/01/2009) par Galdinx et MenzAgitat  #
#                                               #
#          http://www.boulets-roxx.com          #
#        IRC:  irc.teepi.net    #boulets        #
#              irc.epiknet.org  #boulets        #
#                                               #
#         Les scripts de MenzAgitat sont        #
#  téléchargeables sur  http://www.egghelp.org  #
#                   ou  http://www.eggdrop.fr   #
#                                               #
 ###############################################
 
#
# Description
# Script permettant d'afficher une citation au hasard pris sur le site 
# http://www.viedemerde.fr/ grâce a une commande publique, "!vdm" par exemple
#
 
#
# Changelog
#
# 1.0 - 1ère version
#
 
#
# 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 PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
 
if { [lindex [split $version] 1] < 1061800 } { putloglev o * "\00304\002\[VDM - ERREUR\]\002\003 La version de votre eggdrop est \00304\002[lindex [split $version] 0]\002\003; vdm.tcl ne fonctionnera correctement que sur les eggdrops version 1.6.18 ou supérieure." ; return }
if { $tcl_version < 8.4 } { putloglev o * "\00304\002\[VDM - ERREUR\]\002\003 vdm.tcl nécessite que Tcl 8.4 (ou plus) soit installé pour fonctionner. Votre version actuelle de Tcl est \00304\002$tcl_version\002\003." ; return }
package require Tcl 8.4
if {[info commands vdm::uninstall] eq "::vdm::uninstall"} { vdm::uninstall }
namespace eval vdm {
 
 
 
	#######################
	#		  PARAMETRES      #
	#######################
 
	# Chans sur lesquels le script sera actif (séparés par un espace)
	# Remarque : attention aux majuscules, le nom du chan est sensible à la casse
	variable allowed_chans "#Dynastie"
 
 
	#### COMMANDES PUBLIQUES ET AUTORISATIONS
 
  # Commande utilisée pour afficher une citation
 	# ex. : "!vdm"
 	variable vdmcmd "!vdm"
 	# autorisations pour la commande !vdm
 	variable vdmauth "-|-"
 
 
	#### PARAMETRES DE L'ANTI-FLOOD
 
 	# Anti-flood (0 = désactivé, 1 = activé)
 	variable antiflood 0
 	# Combien de commandes sont autorisées en combien de temps ?
 	# exemple : "4:45" = 4 commandes maximum en 45 secondes;
 	# les suivantes seront ignorées.
 	variable cmdflood_vdm "4:45"
 	# 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 être floodé par les messages
 	# d'avertissement de l'anti-flood...)
 	variable antiflood_msg_interval 20
 
 
 
 
 
####################################################################
#                                                                  #
# NE MODIFIEZ RIEN APRES CE CADRE SI VOUS NE CONNAISSEZ PAS LE TCL #
#                                                                  #
#   DO NOT MODIFY ANYTHING BELOW THIS BOX IF YOU DON'T KNOW TCL    #
#                                                                  #
####################################################################
 
	variable scriptname "VieDeMerde"
	variable version "1.0.20090101"
	# inutilisé, conservé au cas où
	variable cmdflood_global "5:120"
 
	variable floodsettingsstring [split "global $cmdflood_global vdm $cmdflood_vdm"]
	variable floodsettings ; array set floodsettings $floodsettingsstring
	variable instance ; array set instance {}
	variable antiflood_msg ; array set antiflood_msg {}
	bind evnt - prerehash [namespace current]::uninstall
	bind time -|- {*0 * * * *} ::AutoMsgVdm
	bind pub $vdmauth $vdmcmd [namespace current]::pub_disp_vdm
	proc uninstall {args} {
		putlog "Désallocation des ressources de \002$vdm::scriptname...\002"
 		unbind evnt - prerehash [namespace current]::uninstall
 		catch { unbind pub $vdm::vdmauth $vdm::vdmcmd [namespace current]::pub_disp_vdm }
		namespace delete ::vdm
	}
 
}
 
 
#  Envoie de la Citation sur le Salon 
 
# -> Tout les combiens de minutes voulez vous que la publicité soit envoyé ?
 
proc ::AutoMsgVdm {min hour args} {
global botnick
 
foreach chan $vdm::allowed_chans {
 
		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 url "http://www.viedemerde.fr/aleatoire"
 
		::http::config -useragent $useragent
		set token [::http::geturl "$url" -timeout 6000]
 
         if {[::http::status $token] == "ok"} {
         regexp {<div class="post"  id=(?:.*?)>(.+?)</p>} [::http::data  $token] res
           regsub {\n} $res "" res
           regsub -all {<[^>]+>} $res "" res
           regsub {VDM$} $res "\002VDM\002" res
           set result [vdm::string_filter $res]
           puthelp "privmsg $chan :$result"
           } else {
			puthelp "privmsg $chan :\00314La connexion à \002Vie de merde\002 n'a pu être établie. Peut-être le site rencontre-t-il des difficultés techniques. Veuillez réessayer plus tard.\003"
		}
	}
  }
 
proc vdm::pub_disp_vdm {nick host handle chan args} {
	if {[lsearch -exact [split $vdm::allowed_chans] $chan] != -1} {
		if {($vdm::antiflood == 1) && ([vdm::antiflood $chan "vdm"] == "flood")} { return }
 
		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 url "http://www.viedemerde.fr/aleatoire"
 
		::http::config -useragent $useragent
		set token [::http::geturl "$url" -timeout 6000]
 
         if {[::http::status $token] == "ok"} {
         regexp {<div class="post"  id=(?:.*?)>(.+?)</p>} [::http::data  $token] res
           regsub {\n} $res "" res
           regsub -all {<[^>]+>} $res "" res
           regsub {VDM$} $res "\002VDM\002" res
           set result [vdm::string_filter $res]
           puthelp "privmsg $chan :$result"
           } else {
			puthelp "privmsg $chan :\00314La connexion à \002Vie de merde\002 n'a pu être établie. Peut-être le site rencontre-t-il des difficultés techniques. Veuillez réessayer plus tard.\003"
		}
	}
}
 
 
##### Conversion des caractères html spéciaux et filtrage des balises HTML
proc vdm::string_filter { str } {
	set str [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;"			"Ý"
		"&THORN;"			"Î"		"&szlig;"			"ß"		"\r"				""		"\t"				""
		"'"			"\'"	"'"				"\'"	"&gt;"				">"		"&lt;"				"<"
		"""				"\'"	"&"				"&"		"#91;"				"\("	"\"				"\/"
		"]"				")"		"{"			"("		"}"			")"		"£"			"£"
		"¨"			"¨"		"©"			"©"		"«"			"«"		"­"			"­"
		"®"			"®"		"´"			"´"		"·"			"·"		"¹"			"¹"
		"»"			"»"		"¼"			"¼"		"½"			"½"		"¾"			"¾"
		"À"			"À"		"Á"			"Á"		"Â"			"Â"		"Ã"			"Ã"
		"Ä"			"Ä"		"Å"			"Å"		"Æ"			"Æ"		"Ç"			"Ç"
		"È"			"È"		"É"			"É"		"Ê"			"Ê"		"Ë"			"Ë"
		"Ì"			"í"		"Í"			"Í"		"Î"			"Î"		"Ï"			"Ï"
		"Ð"			"Ð"		"Ñ"			"Ñ"		"Ò"			"Ò"		"Ó"			"Ó"
		"Ô"			"Ô"		"Õ"			"Õ"		"Ö"			"Ö"		"×"			"×"
		"Ø"			"Ø"		"Ù"			"Ù"		"Ú"			"Ê"		"Û"			"Û"
		"Ü"			"í"		"Ý"			"Ý"		"Þ"			"Î"		"ß"			"ß"
		"à"			"à"		"á"			"á"		"â"			"â"		"ã"			"ã"
		"ä"			"ä"		"å"			"å"		"æ"			"æ"		"ç"			"ç"
		"è"			"è"		"é"			"é"		"ê"			"ê"		"ë"			"ë"
		"ì"			"ì"		"í"			"í"		"î"			"î"		"ï"			"ï"
		"ð"			"ð"		"ñ"			"ñ"		"ò"			"ò"		"ó"			"ó"
		"ô"			"ô"		"õ"			"õ"		"ö"			"ö"		"÷"			"÷"
		"ø"			"ø"		"ù"			"ù"		"ú"			"ú"		"û"			"û"
		"ü"			"ü"		"ý"			"ý"		"þ"			"þ"		
 
	} $str]
	regsub -all "<br />" $str " " str
 	set str [encoding convertfrom "utf-8" $str ]
	return "${str}"
}
 
 
proc vdm::antiflood {chan type} {
  variable antiflood_msg
  if {![info exists antiflood_msg($chan$type)]} { set antiflood_msg($chan$type) 0 }
  variable instance
  if {![info exists instance($chan$type)]} { set instance($chan$type) 0 }
  set max_instances [lindex [split $vdm::floodsettings($type) ":"] 0]
  set instance_length [lindex [split $vdm::floodsettings($type) ":"] 1]
  if { $instance($chan$type) >= $max_instances } {
    if { $antiflood_msg($chan$type) == 0 } {
      set antiflood_msg($chan$type) 1
      if {$type != "global"} {
        putquick "privmsg $chan :\0037:::\00314 Contrôle de flood activé pour la commande \002!$type\002 : pas plus de $max_instances requête(s) toutes les $instance_length secondes.\003"
      } else {
        putquick "privmsg $chan :\0037:::\00314 Contrôle de flood sur les commandes de \002Vie De Merde\002 : pas plus de $max_instances commandes toutes les $instance_length secondes.\003"
      }
      utimer $vdm::antiflood_msg_interval "vdm::antiflood_msg_reset $chan $type"
    }
    return "flood"
  } else {
    incr instance($chan$type)
    utimer $instance_length "vdm::antiflood_close_instance $chan $type"
    return "no flood"
  }
}
 
proc vdm::antiflood_close_instance {chan type} {
  variable instance
  if { $instance($chan$type) > 0 } { incr instance($chan$type) -1 }
}
 
proc vdm::antiflood_msg_reset {chan type} {
  variable antiflood_msg
  set antiflood_msg($chan$type) 0
}
 
 
putlog "\002*$vdm::scriptname v$vdm::version*\002 par Galdinx et MenzAgitat ( \037\00312http://www.boulets-roxx.com\003\037 ) a été chargé."



mais le je vois pas ou es le souci :s
voici le tcl que j'utilise. merci
#57
Je suis un peu offtopic, mais c'était pour parler de l'histoire des parenthèses non capturantes.... puisque l'on récupère tout ce qu'est matché (premier argument après le texte à matcher et la regexp), est ce que c'est pas plus simple d'utiliser des parenthèses standard ?
Ou même, pas du tout de parenthèses pour le coup.
#58
Bonjour.

N'ayant que peu de temps et d'envie de m'occuper des mises à jour du script, je viens de mettre en ligne (cela devrait être publié très rapidement) la version 2.0 que m'a généreusement fournie ealexp et qui est l'adaptation de la version originale.

Cette nouvelle version ajoute :
- Correction suite à un changement du payload du site.
- Commandes !vdm last[- nombre] et !vdm <numéro>.
- Paramètres supplémentaires (urls du site, et couleurs de la VDM).
- Diverses optimisations

N'hésitez pas à tout de même faire remonter vos commentaires et problèmes, même si ce n'est pas moi, quelqu'un finira bien par vous répondre^^


@+
#59
Ne pas oublier qu'il est possible de joindre le fichier lorsqu'il est très volumineux !

Donc si votre code TCL fait plus de 10 lignes....

Pensez donc à le mettre en fichier joint ! :)

Ce serra plus simple pour tous le monde à lire ;)
#60
coucou tt le monde,

VDM redéconne :p

qualqu'un aurait une version a jour pour le faire fonctionner correctement en !vdm ?

merci a tousssssssssss :)


Forum Jump:


Users browsing this thread: 1 Guest(s)