<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-gb">
	<link rel="self" type="application/atom+xml" href="https://forum.eggheads.org/app.php/feed/topic/13568" />

	<title>egghelp/eggheads community</title>
	<subtitle>Discussion of eggdrop bots, shell accounts and tcl scripts.</subtitle>
	<link href="https://forum.eggheads.org/index.php" />
	<updated>2007-06-09T22:33:41-04:00</updated>

	<author><name><![CDATA[egghelp/eggheads community]]></name></author>
	<id>https://forum.eggheads.org/app.php/feed/topic/13568</id>

		<entry>
		<author><name><![CDATA[MenzAgitat]]></name></author>
		<updated>2007-06-09T22:33:41-04:00</updated>

		<published>2007-06-09T22:33:41-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=73382#p73382</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=73382#p73382"/>
		<title type="html"><![CDATA[BashFrFetcher.tcl - french quotes fetcher (curr.version 1.0)]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=73382#p73382"><![CDATA[
 <br>hem, little problem : the forum converts some html codes into their unicode representation, even inside <strong class="text-strong">[<em class="text-italics"></em>code]</strong> tags...<br>(eg.: "<strong class="text-strong">&amp;<em class="text-italics"></em>#169;</strong>" becomes automatically "<strong class="text-strong">©</strong>")<br><br>Download the script from here until it is added into the Tcl Archive (this link will cease to work after it is done) because cut/pasting the code above won't do any good :<br><a href="http://www.boulets-roxx.com/buffer/BashFrFetcher1_0.zip" class="postlink">BashFrFetcher1_0.zip</a><br> <br> <p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=7933">MenzAgitat</a> — Sat Jun 09, 2007 10:33 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[MenzAgitat]]></name></author>
		<updated>2007-06-06T15:30:27-04:00</updated>

		<published>2007-06-06T15:30:27-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=73307#p73307</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=73307#p73307"/>
		<title type="html"><![CDATA[BashFrFetcher.tcl - french quotes fetcher (curr.version 1.0)]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=73307#p73307"><![CDATA[
French script that fetches and displays quotes from bashfr.org (french version of bash.org).<br><br><span style="text-decoration:underline">Syntax :</span><br>!bashfr: displays a random quote<br>!bashfr last: displays the most recent quote<br>!bashfr 1234: displays the quote #1234<br><br><span style="text-decoration:underline">Features :</span><br>- colors are fully configurable<br>- flood prevention system<br>- choose on which chans you want it to work<br>- bypasses the settings double-help and double-server<br>in the eggdrop.conf which causes duplicates lines in quote<br>not to be displayed.<br><br>The script is heavily commented (in french) so everyone should<br>understand how it work and easily modify it (giving proper credits)<br>as they wish.<br><div class="codebox"><p>Code: </p><pre><code> ################################################                                               ##          B a s h F r   F e t c h e r          ##       v1.0 (06/06/2007)  par MenzAgitat       ##                                               ##          http://www.boulets-roxx.com          ##          IRC: irc.teepi.net #boulets          ##                                               ##        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## 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 publiqueset bashfr_cmd "!bashfr"##### Chans sur lesquels BashFr Fetcher sera disponible##### exemple : set bashfr_chans "#chan1 #chan2 chan3"set bashfr_chans "#votrechan"##### Contrôle de flood##### -----------------##### Nombre maximum de lignes affichéesset bashfr_maxlines 10##### Anti-flood actif ?  ( 1 pour oui, 0 pour non )set bashfr_antiflood 1##### Nombre maximum de requêtesset bashfr_antiflood_max_request 4##### toutes les ? secondesset bashfr_antiflood_queue_time 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 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 citationset bashfr_numcolfg 01##### Couleur de fond du n° de la citationset bashfr_numcolbg 15##### Couleur du texte de la citationset bashfr_quotecolfg 00##### Couleur de fond de la citationset bashfr_quotecolbg 14####################################################                                                 ## NE MODIFIEZ RIEN EN DESSOUS DE CE CADRE A MOINS ##     DE SAVOIR EXACTEMENT CE QUE VOUS FAITES     ##                                                 ####################################################package require httpset bashfr_version "1.0"set bashfr_DEBUGMODE 0set bashfr_antiflood_msg 0set bashfr_instance 0set 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://www.bashfr.org/"bind pub -|- $bashfr_cmd pub:bashfr##### Procédure principaleproc 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 &gt;= $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) &amp;&amp; ($arg != "last") &amp;&amp; ($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 $useragentset token [::http::geturl "$url"]##### 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\"&gt;&lt;/span&gt;&lt;br /&gt;(.+?)&lt;/div&gt;" [::http::data $token] res    if { $res != ""  } {bashfr_quote_processing $res $chan $url $numquote} else {  puthelp "privmsg $chan :\00314$nick &gt; La citation demandée n'existe pas.\003"}}###   l'argument est "last", on veut la dernière citation en date    if {($bashfr_DEBUGMODE) &amp;&amp; ($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) &amp;&amp; ($arg == "")} {putlog "\00304\[BASHFR DEBUG\]\003 requête d'une citation aléatoire"}if {($arg == "last") || ($arg == "")} {    regexp "&lt;span id=\"com-(.+?)\" class=\"com\"&gt;" [::http::data $token] numquoteregsub -all {[^0-9]+} $numquote "" numquote    regexp "class=\"com\"&gt;&lt;/span&gt;&lt;br /&gt;(.+?)&lt;/div&gt;" [::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'occurence d'une sous-chaîne dans une chaîne de caractères donnéeproc scount {subs string} {regsub -all $subs $string $subs string}##### Syntaxeproc bashfr_syntax { chan } {  global bashfr_cmdputhelp "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ésproc bashfr_channel_check { chan } {global bashfr_chansif {[lsearch -exact $bashfr_chans $chan] != -1} {set permission 1} else {set permission 0}return $permission}##### Traitement des donnéesproc bashfr_quote_processing { res chan url numquote } {global bashfr_DEBUGMODEif $bashfr_DEBUGMODE {putlog "\00304\[BASHFR DEBUG\]\003 \037PRE-REGSUB\037 $res"}regsub -all "class=\"com\"&gt;" $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 filtrageif {$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 HTMLproc bashfr_quote_filter { res } {global bashfr_DEBUGMODEset res [string map -nocase {"à""à""à""à""á""á""â""â""ã""ã""ä""ä""å""å""æ""æ""ç""ç""è""è""é""é""ê""ê""ë""ë""ì""ì""í""í""î""î""ï""ï""ð""ð""ñ""ñ""ò""ò""ó""ó""ô""ô""õ""õ""ö""ö""÷""÷""ø""ø""ù""ù""ú""ú""û""û""ü""ü""ý""ý""þ""þ""ÿ""ÿ"""""\"""&amp;""&amp;""€""€""œ""œ""Ÿ""Ÿ"" "" ""¡""¡""¢""¢""£""£""¤""¤""¥""¥""¦""¦""&amp;brkbar;""¦""§""§""¨""¨""&amp;die;""¨""©""©""ª""ª""«""«""¬""¬""­""­-""®""®""¯""¯""&amp;hibar;""¯""°""°""±""±""²""²""³""³""´""´""µ""µ""¶""¶""·""·""¸""¸""¹""¹""º""º""»""»""¼""¼""½""½""¾""¾""¿""¿""À""À""Á""Á""Â""Â""Ã""Ã""Ä""Ä""Å""Å""Æ""Æ""Ç""Ç""È""È""É""É""Ê""Ê""Ë""Ë""Ì""Ì""Í""Í""Î""Î""Ï""Ï""Ð""Ð""&amp;Dstrok;""Ð""Ñ""Ñ""Ò""Ò""Ó""Ó""Ô""Ô""Õ""Õ""Ö""Ö""×""×""Ø""Ø""Ù""Ù""Ú""Ú""Û""Û""Ü""Ü""Ý""Ý""Þ""Þ""ß""ß""\r""\n""\t""""'""\'""'""\'"""""\'""&amp;""&amp;""#91;""\(""\""\/""]"")""{""(""}"")""£""£""¨""¨""©""©""«""«""­""­""®""®""´""´""·""·""¹""¹""»""»""¼""¼""½""½""¾""¾""À""À""Á""Á""Â""Â""Ã""Ã""Ä""Ä""Å""Å""Æ""Æ""Ç""Ç""È""È""É""É""Ê""Ê""Ë""Ë""Ì""Ì""Í""Í""Î""Î""Ï""Ï""Ð""Ð""Ñ""Ñ""Ò""Ò""Ó""Ó""Ô""Ô""Õ""Õ""Ö""Ö""×""×""Ø""Ø""Ù""Ù""Ú""Ú""Û""Û""Ü""Ü""Ý""Ý""Þ""Þ""ß""ß""à""à""á""á""â""â""ã""ã""ä""ä""å""å""æ""æ""ç""ç""è""è""é""é""ê""ê""ë""ë""ì""ì""í""í""î""î""ï""ï""ð""ð""ñ""ñ""ò""ò""ó""ó""ô""ô""õ""õ""ö""ö""÷""÷""ø""ø""ù""ù""ú""ú""û""û""ü""ü""ý""ý""þ""þ"} $res]regsub -all "&lt;br /&gt;" $res "\n" resregsub -all "&lt;\[^&lt;\]*&gt;" $res "" resset res [string map -nocase {"&lt;""&lt;""&gt;""&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 citationproc bashfr_display_quote { res chan url numquote } {global bashfr_numcolfg bashfr_numcolbg bashfr_quotecolfg bashfr_quotecolbg bashfr_maxlines bashfr_DEBUGMODE bashfr_url bashfr_duplicatesfixset numresults [scount "\n" $res] set res [split $res "\n"]set counter 1foreach line $res {if {[string trim $line] != "" &amp;&amp; [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 &gt;= $bashfr_maxlines) &amp;&amp; ($numresults &gt;= $bashfr_maxlines)} { set line "$line \003\00304  (...)\003" }# si, et tant qu'on trouve une autre ligne identique dans la citationwhile {[expr [lsearch -exact $bashfr_duplicatesfix [bashfr_calculate_checksum $line]]] &gt;= 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ésultatputquick "privmsg $chan :\003$bashfr_quotecolfg,$bashfr_quotecolbg$line \003"if {($counter &gt;= $bashfr_maxlines) &amp;&amp; ($numresults &gt;= $bashfr_maxlines)} {putquick "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élaiproc bashfr_antiflood_close_instance { } {     global bashfr_DEBUGMODE bashfr_instance     if { $bashfr_instance &gt; 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-floodproc bashfr_antiflood_msg_reset { } {     global bashfr_antiflood_msg     set bashfr_antiflood_msg 0}##### Calcul du checksum (simplifié) d'une chaîne ASCIIproc bashfr_calculate_checksum { line } {set line_chars [split $line {}]set checksum 0foreach char $line_chars {scan $char "%c" valueincr 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é."</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=7933">MenzAgitat</a> — Wed Jun 06, 2007 3:30 pm</p><hr />
]]></content>
	</entry>
	</feed>
