04/04/2010, 19:00
Bonjour, je débute un peu dans le tcl...
J'aurais voulu savoir si c'est possible de lancer une VDM toutes les 20 minutes par exemple sur un salon... je pense qu'il faut mettre un timer... mais où ? that is the question ^^
Le code :
Merci par avance de votre aide.
J'aurais voulu savoir si c'est possible de lancer une VDM toutes les 20 minutes par exemple sur un salon... je pense qu'il faut mettre un timer... mais où ? that is the question ^^
Le code :
Code PHP :
###############################################
# #
# V i e D e M e r d e #
# v1.1 (12/03/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
# 1.1 - Correction suite à un changement de payload du site + simplification des regsub
#
#
# 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 "#Accueil"
#### 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 1
# 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.1.20090312"
# 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 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
}
}
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">(.+?)</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 {
"à" "à" "à" "à" "á" "á" "â" "â"
"ã" "ã" "ä" "ä" "å" "å" "æ" "æ"
"ç" "ç" "è" "è" "é" "é" "ê" "ê"
"ë" "ë" "ì" "ì" "í" "í" "î" "î"
"ï" "ï" "ð" "ð" "ñ" "ñ" "ò" "ò"
"ó" "ó" "ô" "ô" "õ" "õ" "ö" "ö"
"÷" "÷" "ø" "ø" "ù" "ù" "ú" "ú"
"û" "û" "ü" "ü" "ý" "ý" "þ" "þ"
"ÿ" "ÿ" """ "\"" "&" "&" "€" "€"
"œ" "Å“" "Ÿ" "Ÿ" " " " " "¡" "¡"
"¢" "¢" "£" "£" "¤" "¤" "¥" "Â¥"
"¦" "¦" "&brkbar;" "¦" "§" "§" "¨" "¨"
"¨" "¨" "©" "©" "ª" "ª" "«" "«"
"¬" "¬" "­" "Â-" "®" "®" "¯" "¯"
"&hibar;" "¯" "°" "°" "±" "±" "²" "²"
"³" "³" "´" "´" "µ" "µ" "¶" "¶"
"·" "·" "¸" "¸" "¹" "¹" "º" "º"
"»" "»" "¼" "¼" "½" "½" "¾" "¾"
"¿" "¿" "À" "À" "Á" "Ã" "Â" "Â"
"Ã" "Ã" "Ä" "Ä" "Å" "Å" "Æ" "Æ"
"Ç" "Ç" "È" "È" "É" "É" "Ê" "Ê"
"Ë" "Ë" "Ì" "í" "Í" "Ã" "Î" "Î"
"Ï" "Ã" "Ð" "Ã" "Đ" "Ã" "Ñ" "Ñ"
"Ò" "Ò" "Ó" "Ó" "Ô" "Ô" "Õ" "Õ"
"Ö" "Ö" "×" "×" "Ø" "Ø" "Ù" "Ù"
"Ú" "Ê" "Û" "Û" "Ü" "í" "Ý" "Ã"
"Þ" "Î" "ß" "ß" "\r" "" "\t" ""
"'" "\'" "'" "\'" ">" ">" "<" "<"
""" "\'" "&" "&" "#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é."
Merci par avance de votre aide.