#################################################################################
# #
# NOUVEAUJOUR.tcl affiche tous les jours à 00h15 et à 10h45 des informations #
# sur le jour en cours (par exemple le saint du jour, le dicton du jour, heure #
# du levé du soleil, etc). #
# Ces informations peuvent être demandé à tout moment en tapant : #
# !aujourdhui #
# #
# De plus, vous pouvez mettre votre date d'anniversaire. Le bot le rappellera #
# dans les infos du jour et vous souhaitera un bon anniv lorsque vous joindrez #
# le channel. Pour add sa date de naissance : #
# /msg lebot monanniv <jj/mm/aaaa> #
# Et pour voir celle de kk'un : #
# !anniv <nick> #
# #
# #
#################################################################################
##### CONFIGURATION #####
### nom du channel sur lequel le bot affichera les informations du jour :
set nouveaujour(channel) "#delirium"
##### FIN DE LA CONFIGURATION #####
##### DEBUT DU PROGRAMME #####
bind pub - !aujourdhui aujourd:hui
proc aujourd:hui { nick uhost handle channel arg } {
global nouveaujour
if {$channel != $nouveaujour(channel)} { return 0 }
putlog "#NOUVEAUJOUR# Consultation du jour par $nick sur $channel !"
set res [catch { exec lynx -source http://www.ephemeride.com } x]
if {$x != ""} {
set reponse [string tolower $x]
}
set indextest [string first "img/sun.gif" $reponse]
set test [bongettext "$reponse" "<td width=\"41\" class=\"info\"> " "</td>" $indextest]
set nouveaujour(leve_soleil) [lindex $test 0]
set indextest [lindex $test 1]
set test [bongettext "$reponse" "<td width=\"30\" class=\"info\"> " "</td>" $indextest]
set nouveaujour(couche_soleil) [lindex $test 0]
set indextest [lindex $test 1]
set indextest2 [string first "<font color=\"blue\">" $reponse]
if { $indextest2 == -1 } {
set test [bongettext "$reponse" "<font color=\"#ff5f5f\">" "</font>" $indextest]
} else {
set test [bongettext "$reponse" "<font color=\"blue\">" "</font>" $indextest]
}
set taille [llength $test]
set nouveaujour(saint) [lrange $test 0 [expr $taille - 2]]
set test [bongettext "$reponse" "« " " »" $indextest]
regsub -all "\"" $test "-" test
set taille [llength $test]
set indextest [lindex $test [expr $taille - 1]]
set nouveaujour(dicton) [lrange $test 0 [expr $taille - 2]]
set test [bongettext "$reponse" "« " " »" $indextest]
regsub -all "\"" $test "-" test
set taille [llength $test]
set indextest [lindex $test [expr $taille - 1]]
set nouveaujour(proverbe) [lrange $test 0 [expr $taille - 2]]
puthelp "privmsg $channel :\0033\[[lrange [ctime [unixtime]] 0 2]\] \003\0036Soleil\003 : levé à [traitementtexte [traitementhtml $nouveaujour(leve_soleil)]] et couché à [traitementtexte [traitementhtml $nouveaujour(couche_soleil)]] !"
puthelp "privmsg $channel :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Fête du Jour\003 : [traitementtexte [traitementhtml $nouveaujour(saint)]]"
puthelp "privmsg $channel :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Dicton du Jour\003 : \" [traitementtexte [traitementhtml $nouveaujour(dicton)]] \""
puthelp "privmsg $channel :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Proverbe du Jour\003 : \" [traitementtexte [traitementhtml $nouveaujour(proverbe)]] \""
foreach user [userlist $nouveaujour(channel)] {
set un_anniv [un_anniv $user]
if {$un_anniv != ""} {
if {[lrange [ctime [unixtime]] 1 2] == "[lindex $un_anniv 1] [lindex [string trimleft $un_anniv 0] 0]" } {
puthelp "privmsg $channel :\0033\[[lrange [ctime [unixtime]] 0 2]\] \003\0036Anniversaire du jour\003 : $user !!"
}
}
}
return 0
}
bind time - "* * * * *" nouveau_jour
proc nouveau_jour { min hour day month year } {
global nouveaujour botnick
set nouveaujour(ok) 0
if {[lindex [ctime [unixtime]] 3] == "00:15:00"} {
set nouveaujour(ok) 1
puthelp "privmsg $nouveaujour(channel) :\002~~~~ Voila une nouvelle journée qui commence ! ~~~~\002"
}
if {[lindex [ctime [unixtime]] 3] == "10:45:00"} {
set nouveaujour(ok) 1
puthelp "privmsg $nouveaujour(channel) :\002~~~~ nouveaujour ! Voila pour les leves-tards ... ~~~~\002"
}
if {$nouveaujour(ok)} {
set res [catch { exec lynx -source http://www.ephemeride.com } x]
if {$x != ""} {
set reponse [string tolower $x]
}
set indextest [string first "img/sun.gif" $reponse]
set test [bongettext "$reponse" "<td width=\"41\" class=\"info\"> " "</td>" $indextest]
set nouveaujour(leve_soleil) [string range [lindex $test 0] 1 end]
set indextest [lindex $test 1]
set test [bongettext "$reponse" "<td width=\"30\" class=\"info\"> " "</td>" $indextest]
set nouveaujour(couche_soleil) [lindex $test 0]
set indextest [lindex $test 1]
set indextest2 [string first "<font color=\"blue\">" $reponse]
if { $indextest2 == -1 } {
set test [bongettext "$reponse" "<font color=\"#ff5f5f\">" "</font>" $indextest]
} else {
set test [bongettext "$reponse" "<font color=\"blue\">" "</font>" $indextest]
}
set taille [llength $test]
set nouveaujour(saint) [lrange $test 0 [expr $taille - 2]]
set test [bongettext "$reponse" "« " " »" $indextest]
regsub -all "\"" $test "-" test
set taille [llength $test]
set indextest [lindex $test [expr $taille - 1]]
set nouveaujour(dicton) [lrange $test 0 [expr $taille - 2]]
set test [bongettext "$reponse" "« " " »" $indextest]
regsub -all "\"" $test "-" test
set taille [llength $test]
set indextest [lindex $test [expr $taille - 1]]
set nouveaujour(proverbe) [lrange $test 0 [expr $taille - 2]]
puthelp "privmsg $nouveaujour(channel) :\0033\[[lrange [ctime [unixtime]] 0 2]\] \003\0036Soleil\003 : levé à [traitementtexte [traitementhtml $nouveaujour(leve_soleil)]] et couché à [traitementtexte [traitementhtml $nouveaujour(couche_soleil)]] !"
puthelp "privmsg $nouveaujour(channel) :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Fête du Jour\003 : [traitementtexte [traitementhtml $nouveaujour(saint)]]"
puthelp "privmsg $nouveaujour(channel) :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Dicton du Jour\003 : \" [traitementtexte [traitementhtml $nouveaujour(dicton)]] \""
puthelp "privmsg $nouveaujour(channel) :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Proverbe du Jour\003 : \" [traitementtexte [traitementhtml $nouveaujour(proverbe)]] \""
foreach user [userlist $nouveaujour(channel)] {
set un_anniv [un_anniv $user]
if {$un_anniv != ""} {
if {[lrange [ctime [unixtime]] 1 2] == "[lindex $un_anniv 1] [lindex [string trimleft $un_anniv 0] 0]" } {
puthelp "privmsg $nouveaujour(channel) :\0033\[[lrange [ctime [unixtime]] 0 2]\] \003\0036Anniversaire du jour\003 : $user !!"
}
}
}
return 0
}
}
### /msg lebot monanniv <jj/mm/aaaa>
bind msg - monanniv monanniv:msg
proc monanniv:msg {nick host hand arg} {
global botnick
if {($arg == "") || ([string length $arg] != 10)} {
puthelp "notice $nick :Commande : \002/msg $botnick monanniv <jj/mm/aaaa>\002"
puthelp "notice $nick :Tapez : \002/msg $botnick finanniv\002 pour que votre date d'anniversaire soit supprimé de la mémoire du bot."
return 0
} else {
set monanniv_jour [string range $arg 0 1]
set monanniv_mois [string range $arg 3 4]
set monanniv_annee [string range $arg 6 9]
set monanniv_mois [datefr_dateus $monanniv_mois]
setuser $hand XTRA ANNIV "$monanniv_jour $monanniv_mois $monanniv_annee"
set monanniv_mois [dateus_datefr $monanniv_mois]
puthelp "notice $nick :Votre anniversaire est le $monanniv_jour $monanniv_mois $monanniv_annee"
save
return 0
}
}
### !anniv <handle>
bind pub - !anniv anniv:pub
proc anniv:pub {nick host hand chan arg} {
global botnick
if {$arg == ""} {
puthelp "notice $nick :Commande : \002!anniv <nick_de_la_personne_dans_le_bot>\002"
return 0
} else {
set handle [lindex $arg 0]
if {![validuser $handle]} {
puthelp "notice $nick :Désolé mais je ne connais pas $handle !"
return 0
} else {
set anniv [un_anniv $handle]
if {$anniv == ""} {
puthelp "privmsg $chan :Désolé, mais $handle n'a pas d'anniversaire d'enregistré !"
puthelp "privmsg $chan :Si vous voulez enregistrer votre date d'anniversaire, tapez : /msg $botnick monanniv <jj/mm/aaaa>"
return 0
} else {
set anniv_mois [dateus_datefr [lindex $anniv 1]]
puthelp "privmsg $chan :$handle est né le [lindex $anniv 0] $anniv_mois [lindex $anniv 2]"
return 0
}
}
}
return 0
}
### Fonction pour convertir la date d'anniv des gens !
proc datefr_dateus { moisfr } {
if {$moisfr == "01"} { return "Jan" }
if {$moisfr == "02"} { return "Feb" }
if {$moisfr == "03"} { return "Mar" }
if {$moisfr == "04"} { return "Apr" }
if {$moisfr == "05"} { return "May" }
if {$moisfr == "06"} { return "Jun" }
if {$moisfr == "07"} { return "Jul" }
if {$moisfr == "08"} { return "Aug" }
if {$moisfr == "09"} { return "Sep" }
if {$moisfr == "10"} { return "Oct" }
if {$moisfr == "11"} { return "Nov" }
if {$moisfr == "12"} { return "Dec" }
return 0
}
proc dateus_datefr { moisus } {
if {$moisus == "Jan"} { return "Janvier" }
if {$moisus == "Feb"} { return "Fevrier" }
if {$moisus == "Mar"} { return "Mars" }
if {$moisus == "Apr"} { return "Avril" }
if {$moisus == "May"} { return "Mai" }
if {$moisus == "Jun"} { return "Juin" }
if {$moisus == "Jul"} { return "Juillet" }
if {$moisus == "Aug"} { return "Aout" }
if {$moisus == "Sep"} { return "Septembre" }
if {$moisus == "Oct"} { return "Octobre" }
if {$moisus == "Nov"} { return "Novembre" }
if {$moisus == "Dec"} { return "Decembre" }
}
proc un_anniv { handle } {
set anniv [getuser $handle XTRA ANNIV]
if {$anniv == ""} {
return ""
} else {
return "$anniv"
}
}
### bon anniversaire on join
bind join - * join:anniv
proc join:anniv {nick host handle channel} {
global nouveaujour
if {![validuser $handle]} { return 0 }
if {$channel != $nouveaujour(channel)} { return 0 }
set un_anniv [un_anniv $handle]
if {$un_anniv != ""} {
if {[lrange [ctime [unixtime]] 1 2] == "[lindex $un_anniv 1] [lindex [string trimleft $un_anniv 0] 0]" } {
puthelp "privmsg $channel :Bon anniversaire $nick !!!"
}
}
return 0
}
### outils
proc traitementhtml { contenu } {
regsub -all "<" $contenu "<" contenu
regsub -all ">" $contenu ">" contenu
regsub -all "&" $contenu "et" contenu
regsub -all """ $contenu "" contenu
regsub -all "Á" $contenu "Á" contenu
regsub -all "Â" $contenu "Â" contenu
regsub -all "À" $contenu "À" contenu
regsub -all "Å" $contenu "Å" contenu
regsub -all "Ã" $contenu "Ã" contenu
regsub -all "Ä" $contenu "Ä" contenu
regsub -all "Ç" $contenu "Ç" contenu
regsub -all "É" $contenu "É" contenu
regsub -all "Ê" $contenu "Ê" contenu
regsub -all "È" $contenu "È" contenu
regsub -all "Í" $contenu "Í" contenu
regsub -all "Î" $contenu "Î" contenu
regsub -all "Ì" $contenu "í" contenu
regsub -all "Ï" $contenu "Ã" contenu
regsub -all "Ñ" $contenu "Ñ" contenu
regsub -all "Ó" $contenu "Ó" contenu
regsub -all "Ô" $contenu "Ô" contenu
regsub -all "Ò" $contenu "Ò" contenu
regsub -all "Ø" $contenu "Ø" contenu
regsub -all "Õ" $contenu "Õ" contenu
regsub -all "Ö" $contenu "Ö" contenu
regsub -all "Ú" $contenu "Ú" contenu
regsub -all "Û" $contenu "Û" contenu
regsub -all "Ù" $contenu "Ù" contenu
regsub -all "Ü" $contenu "í" contenu
regsub -all "Ý" $contenu "Ã" contenu
regsub -all "á" $contenu "á" contenu
regsub -all "æ" $contenu "ae" contenu
regsub -all "œ" $contenu "oe" contenu
regsub -all "à" $contenu "à" contenu
regsub -all "å" $contenu "å" contenu
regsub -all "ã" $contenu "ã" contenu
regsub -all "ä" $contenu "ä" contenu
regsub -all "ç" $contenu "ç" contenu
regsub -all "é" $contenu "é" contenu
regsub -all "ë" $contenu "ë" contenu
regsub -all "í" $contenu "í" contenu
regsub -all "è" $contenu "è" contenu
regsub -all "ì" $contenu "ì" contenu
regsub -all "ï" $contenu "ï" contenu
regsub -all "ñ" $contenu "ñ" contenu
regsub -all "ó" $contenu "ó" contenu
regsub -all "ô" $contenu "ô" contenu
regsub -all "â" $contenu "â" contenu
regsub -all "ê" $contenu "ê" contenu
regsub -all "ò" $contenu "ò" contenu
regsub -all "î" $contenu "î" contenu
regsub -all "õ" $contenu "õ" contenu
regsub -all "ö" $contenu "ö" contenu
regsub -all "ú" $contenu "ú" contenu
regsub -all "û" $contenu "û" contenu
regsub -all "ù" $contenu "ù" contenu
regsub -all "ü" $contenu "ü" contenu
regsub -all "ÿ" $contenu "ÿ" contenu
regsub -all "Æ" $contenu "AE" contenu
regsub -all "Œ" $contenu "OE" contenu
regsub -all "®" $contenu "®" contenu
regsub -all "©" $contenu "©" contenu
regsub -all "™" $contenu "(tm)" contenu
regsub -all "±" $contenu "±" contenu
regsub -all "°" $contenu "°" contenu
regsub -all "¹" $contenu "¹" contenu
regsub -all "²" $contenu "²" contenu
regsub -all "³" $contenu "³" contenu
regsub -all "×" $contenu "×" contenu
regsub -all "÷" $contenu "÷" contenu
regsub -all "€" $contenu "euro" contenu
regsub -all -nocase "<p>" $contenu "" contenu
regsub -all -nocase "</p>" $contenu "" contenu
regsub -all -nocase "<i>" $contenu "" contenu
regsub -all -nocase "</i>" $contenu "" contenu
regsub -all -nocase "<b>" $contenu "" contenu
regsub -all -nocase "<u>" $contenu "" contenu
regsub -all -nocase "</u>" $contenu "" contenu
regsub -all -nocase "</b>" $contenu "" contenu
regsub -all -nocase "<br>" $contenu "" contenu
regsub -all -nocase "Å“" $contenu "oe" contenu
regsub -all -nocase "«" $contenu "\"" contenu
regsub -all -nocase "»" $contenu "\"" contenu
regsub -all -nocase "{" $contenu "" contenu
regsub -all -nocase "}" $contenu "" contenu
return $contenu
}
proc traitementtexte { contenu } {
regsub -all "{" $contenu "" contenu
regsub -all "}" $contenu "" contenu
regsub -all "\"" $contenu "\'" contenu
return $contenu
}
proc bongettext { data start end index } {
set index0 [string first $start $data $index]
set index1 [expr $index0 + [string length $start]]
set index2 [string first $end $data $index1]
set index2 [expr $index2 - 1]
set index [expr $index2 + [string length $end]]
return "[string range $data $index1 $index2] $index"
}