All pastes #181114 Raw Edit

Sans titre

public text v1 · immutable
#181114 ·published 2006-09-24 15:01 UTC
rendered paste body
# CrazyCat Programming Factory
#   ___     ____      ____
#  / __)___(  _ \ ___( ___)
# ( (__(___))___/(___))__)
#  \___)   (__)      (__)
#
# http://www.c-p-f.org
#
######################################
#
# DirectNews.tcl 2.0
#
######################################
#
# French news on IRC
#
######################################

## DESCRIPTION ##
#
# Ce tcl permet d'obtenir les informations
# provenant de net2one directement sur un
# canal IRC

## EVOLUTION ##
#
# Utilise désormais le package http.tcl
# ce qui permet de le faire fonctionner
# avec un windrop

package require html

## CONFIGURATION ##
# default bind command !actu, change to your liking
bind msg - "!actu" news:direct
bind pub - "!actu" news:error
bind join - "#actu *" news:join
bind join - "#c-p-f *" news:join
bind msg o "show" news:log
bind msg o "dellog" news:clear

# tempfile to use
set tempfile "news/news.txt"
set logfile "news/news.log"
set working 0
unset working

#define all strings here
set une "A la Une"
set culture "Culture"
set comput "Informatique & Internet"
set nature "Natures, Sciences & Techniques"
set business "Business & Finances"
set politic "Politique, Société & Institutions"
set sports "Sports"
set pratic "Vie pratique, Loisirs & Services"
set movies "Cinéma"
set games "Jeux vidéos"

set news_author "CrazyCat"
set news_ver "2.0"
################
proc news:join { nick uhost handle chan } {
    puthelp "NOTICE $nick :Bonjour, pour afficher les informations, veuillez taper /msg $::botnick !actu help"
}
proc news:error { nick uhost handle chan arg } {
    putquick "NOTICE $nick :Merci de taper /msg $::botnick !actu <rubrique> ou /msg $::botnick !actu help"
}

# Function: news
proc news:direct { nick uhost handle args } {
    set arg [string tolower $args]
    if {[info exists working]} {
	putquick "NOTICE $nick :Une demande est déjà en cours de traitement, veuillez recommencer dans quelques instants."
	return 0
    } elseif {![llength $arg]} {
	putquick "PRIVMSG $nick :Entrez la rubrique qui vous intéresse (/msg $::botnick !actu help)"
    } else {
	if {$arg=="help"} {
	    putquick "NOTICE $nick :Usage: /msg $::botnick !actu <rubrique>"
	    putquick "NOTICE $nick :avec <rubrique> pris dans la liste suivante:"
	    putquick "NOTICE $nick :une => $::une"
	    putquick "NOTICE $nick :culture => $::culture"
	    putquick "NOTICE $nick :informatique => $::comput"
	    putquick "NOTICE $nick :nature => $::nature"
	    putquick "NOTICE $nick :business => $::business"
	    putquick "NOTICE $nick :politique => $::politic"
	    putquick "NOTICE $nick :sports => $::sports"
	    putquick "NOTICE $nick :loisirs => $::pratic"
	    putquick "NOTICE $nick :cinema => $::movies"
	} else {
	    set ::working 1
	    utimer 60 [list error_get $nick]
	    switch [lindex $arg 0] {
		"une" {
		    set rub "n2o1_0_FE99AE8CAC185B6A7413C83748F8EBD9369B541C76907028AA0B1A2C6082ACB4_1.asp"
		    set topic $::une
		    getnews $nick $rub $uhost $topic
		    unset ::working
		}
		"culture" {
		    set rub "n2o1_1_FE99AE8CAC185B6A7413C83748F8EBD9369B541C76907028AA0B1A2C6082ACB4_2.asp"
		    set topic $::culture
		    getnews $nick $rub $uhost $topic
		    unset ::working
		}
		"informatique" {
		    set rub "n2o1_4_FE99AE8CAC185B6A7413C83748F8EBD9369B541C76907028AA0B1A2C6082ACB4_3.asp"
		    set topic $::comput
		    getnews $nick $rub $uhost $topic
		    unset ::working
		}
		"nature" {
		    set rub "n2o1_8_FE99AE8CAC185B6A7413C83748F8EBD9369B541C76907028AA0B1A2C6082ACB4_4.asp"
		    set topic $::nature
		    getnews $nick $rub $uhost $topic
		    unset ::working
		}
		"business" {
		    set rub "n2o1_3_FE99AE8CAC185B6A7413C83748F8EBD9369B541C76907028AA0B1A2C6082ACB4_5.asp"
		    set topic $::business
		    getnews $nick $rub $uhost $topic
		    unset ::working
		}
		"politique" {
		    set rub "n2o1_12_FE99AE8CAC185B6A7413C83748F8EBD9369B541C76907028AA0B1A2C6082ACB4_6.asp"
		    set topic $::politic
		    getnews $nick $rub $uhost $topic
		    unset ::working
		}
		"sports" {
		    set rub "n2o1_7_FE99AE8CAC185B6A7413C83748F8EBD9369B541C76907028AA0B1A2C6082ACB4_7.asp"
		    set topic $::sports
		    getnews $nick $rub $uhost $topic
		    unset ::working
		}
		"loisirs" {
		    set rub "n2o1_10_FE99AE8CAC185B6A7413C83748F8EBD9369B541C76907028AA0B1A2C6082ACB4_8.asp"
		    set topic $::pratic
		    getnews $nick $rub $uhost $topic
		    unset ::working
		}
		"cinema" {
		    set rub "n2o1_894_FE99AE8CAC185B6A7413C83748F8EBD9369B541C76907028AA0B1A2C6082ACB4_9.asp"
		    set topic $::movies
		    getnews $nick $rub $uhost $topic
		    unset ::working
		}
		"jeux" {
		    set rub "n2o1_956_FE99AE8CAC185B6A7413C83748F8EBD9369B541C76907028AA0B1A2C6082ACB4_10.asp"
		    set topic $::games
		    getnews $nick $rub $uhost $topic
		    unset ::working
		}
		default {
		    news:bad $nick $uhost $arg
		    unset ::working
		}
	    }
	}
    }  
    return 0
}

################
# Function: getnews

proc getnews { nick rub host topic } {
	set log [open $::logfile a]
    puts $log "\[[strftime %H:%M]\] \002$nick\002 ($host)"
    puts $log "$nick> \037$topic\037 request"
    close $log
	set url "http://content4web.net2one.fr/error/error.asp?404;http://content4web.net2one.fr/scripts/$rub"
    set endfile "document.write"
	set key [http::geturl $url]
    putquick "NOTICE $nick :L'information en direct avec DirectNews V$::news_ver - \002$topic\002"
	foreach datas [split [http::data $key] "\n"] {
		if {[string first "<span class=t-10x-ar id=black>" $datas] > 0} {
			set b_source [string first ">" $datas]
			incr b_source 1
			set e_source [string first " - " $datas $b_source]
			incr e_source -1
			set inf_source [string range $datas $b_source $e_source]
		}
		if {[string first "<a href=" $datas] > 0} {
			if {[info exists inf_source]} {
				set b_link [string first "<a href=" $datas]
				incr b_link 8
				set e_link [string first " target" $datas $b_link]
				incr e_link -1
				set inf_link [string range $datas $b_link $e_link]
				set b_text [string first ">" $datas $e_link]
				incr b_text 1
				set e_text [string first "</a>" $datas $b_text]
				incr e_text -1
				set inf_text [string range $datas $b_text $e_text]
				regsub -all {\\} $inf_text "" inf_text
				regsub -all {\\} $inf_source "" inf_source
				regsub -all "&nbsp;" $inf_text " " inf_text
				putserv "NOTICE $nick :\002$inf_text\002 : \037$inf_link\037 (Source: $inf_source)"
				unset inf_source
			}
		}
	}
    http::cleanup $key
    putserv "NOTICE $nick :\002Fin de la commande\002 - DirectNews V$::news_ver by $::news_author"
    set log [open $::logfile a]
    puts $log "\[[strftime %H:%M]\] \002$topic\002 for $nick \037successfull\037"
    close $log
    return 0
}

proc error_get { nick } {
	if {[info exists ::working]} {
		putquick "NOTICE $nick :Délai d'acquisition dépassé... Veuillez retentez plus tard."
		unset ::working
	} else {
		return 1
	}
}

proc news:log { nick uhost handle chan } {
    if {![file exists $::logfile]} {
	putquick "NOTICE $nick :Pas d'utilisation depuis le dernier nettoyage du log"
	putquick "NOTICE $nick :DirectNews V$::news_ver by $::news_author"
    } else {
	set viewlog [open $::logfile r]
	putquick "NOTICE $nick :<Log des actualités demandées>"
	while {![eof $viewlog]} {
	    gets $viewlog text
	    putquick "NOTICE $nick :$text"
	}
	close $viewlog
	putquick "NOTICE $nick :/msg $::botnick dellog pour effacer le fichier"
	putquick "NOTICE $nick :DirectNews V$::news_ver by $::news_author"
    }
    return 0
}

proc news:clear { nick uhost handle chan } {
    file delete -force $::logfile
    putquick "NOTICE $nick :log file cleared"
    putquick "NOTICE $nick :DirectNews V$::news_ver by $::news_author"
    return 0
}

proc news:avert { nick uhost handle chan } {
    putquick "NOTICE $nick :Pour afficher en direct les nouvelles, veuillez taper /msg $::botnick !actu"
    return 0
}

proc news:bad { nick host word } {
    putquick "NOTICE $nick :ATTENTION : \002$word\002 n'est pas une bonne option !"
    putquick "NOTICE $nick :Veuillez taper /msg $::botnick !actu help pour les options valides."
    set log [open $::logfile a]
    puts $log "\[[strftime %H:%M]\] \002$nick\002 ($host) \037$word\037 request"
    close $log
    return 0
}

putlog "DirectNews V$::news_ver by $news_author loaded"