<?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/20281" />

	<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>2017-02-05T08:36:33-04:00</updated>

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

		<entry>
		<author><name><![CDATA[klejz0r]]></name></author>
		<updated>2017-02-05T08:36:33-04:00</updated>

		<published>2017-02-05T08:36:33-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=105797#p105797</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=105797#p105797"/>
		<title type="html"><![CDATA[Rss-synd.tcl database feed problem]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=105797#p105797"><![CDATA[
I made it, but why this script is to slow with output ??? Anytime script react on " !rss " and anytime not. What's the problem ? Thanks<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12671">klejz0r</a> — Sun Feb 05, 2017 8:36 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[SpiKe^^]]></name></author>
		<updated>2017-02-04T16:12:33-04:00</updated>

		<published>2017-02-04T16:12:33-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=105795#p105795</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=105795#p105795"/>
		<title type="html"><![CDATA[rss-synd.tcl -- 0.5.1 (forum safe)]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=105795#p105795"><![CDATA[
Here is a copy of that script I have tried to make "forum safe".<br>It does not use the "\&lt;newline&gt;" sequence of chars at all.<div class="codebox"><p>Code: </p><pre><code># rss-synd.tcl -- 0.5.1  (forum safe)##   Highly configurable asynchronous RSS &amp; Atom feed reader for Eggdrops #     written in TCL. Supports multiple feeds, gzip compressed feeds,#     automatically messaging channels with updates at set intervals,#     custom private/channel triggers and more.## Copyright (c) 2011 Andrew Scott, HM2K## Name: RSS &amp; Atom Syndication Script for Eggdrop# Author: Andrew Scott &lt;andrew.scott@wizzer-it.com&gt;# Author: HM2K &lt;irc@hm2k.org&gt;# License: See LICENSE file# Link: http://code.google.com/p/rss-synd/# Tags: rss, atom, syndication# Updated: 05-Jan-2011####Usage# See README file####Revisions# See HISTORY file## Include Settings#if {[catch {source scripts/rss-synd-settings.tcl} err]} {  putlog "Error: Could not load 'rss-synd-settings.tcl file.'";}proc ::rss-synd::init {args} {variable rssvariable defaultvariable versionvariable packagesset version(number)0.5.1set version(date)"2012-02-27"package require httpset packages(base64) [catch {package require base64}]; # http authset packages(tls) [catch {package require tls}]; # httpsset packages(trf) [catch {package require Trf}]; # gzip compressionforeach feed [array names rss] {array set tmp $defaultarray set tmp $rss($feed)set required [list "announce-output" "trigger-output" "max-depth" "update-interval" "timeout" "channels" "output" "user-agent" "url" "database" "trigger-type" "announce-type"]foreach {key value} [array get tmp] {if {[set ptr [lsearch -exact $required $key]] &gt;= 0} {set required [lreplace $required $ptr $ptr]}}if {[llength $required] == 0} {regsub -nocase -all -- {@@feedid@@} $tmp(trigger) $feed tmp(trigger)set ulist [regexp -nocase -inline -- {(http(?:s?))://(?:(.[^:]+:.[^@]+)?)(?:@?)(.*)} $tmp(url)]if {[llength $ulist] == 0} {putlog "\002RSS Error\002: Unable to parse URL, Invalid format for feed \"$feed\"."unset rss($feed)continue}set tmp(url) "[lindex $ulist 1]://[lindex $ulist 3]"if {[lindex $ulist 1] == "https"} {if {$packages(tls) != 0} {putlog "\002RSS Error\002: Unable to find tls package required for https, unloaded feed \"$feed\"."unset rss($feed)continue}::http::register https 443 ::tls::socket}if {(![info exists tmp(url-auth)]) || ($tmp(url-auth) == "")} {set tmp(url-auth) ""if {[lindex $ulist 2] != ""} {if {$packages(base64) != 0} {putlog "\002RSS Error\002: Unable to find base64 package required for http authentication, unloaded feed \"$feed\"."unset rss($feed)continue}set tmp(url-auth) [::base64::encode [lindex $ulist 2]]}}if {[regexp {^[0123]{1}:[0123]{1}$} $tmp(trigger-type)] != 1} {putlog "\002RSS Error\002: Invalid 'trigger-type' syntax for feed \"$feed\"."unset rss($feed)continue}set tmp(trigger-type) [split $tmp(trigger-type) ":"]if {([info exists tmp(charset)]) &amp;&amp; ([lsearch -exact [encoding names] [string tolower $tmp(charset)]] &lt; 0)} {putlog "\002RSS Error\002: Unable to load feed \"$feed\", unknown encoding \"$tmp(charset)\"."unset rss($feed)continue}if {([info exists tmp(feedencoding)]) &amp;&amp; ([lsearch -exact [encoding names] [string tolower $tmp(feedencoding)]] &lt; 0)} {putlog "\002RSS Error\002: Unable to load feed \"$feed\", unknown feedencoding \"$tmp(feedencoding)\"."unset rss($feed)continue}set tmp(updated) 0if {([file exists $tmp(database)]) &amp;&amp; ([set mtime [file mtime $tmp(database)]] &lt; [unixtime])} {set tmp(updated) [file mtime $tmp(database)]}set rss($feed) [array get tmp]} else {putlog "\002RSS Error\002: Unable to load feed \"$feed\", missing one or more required settings. \"[join $required ", "]\""unset rss($feed)}unset tmp}bind evnt -|- prerehash [namespace current]::deinitbind time -|- {* * * * *} [namespace current]::feed_getbind pubm -|- {* *} [namespace current]::triggerbind msgm -|- {*} [namespace current]::triggerputlog "\002RSS Syndication Script v$version(number)\002 ($version(date)): Loaded."}proc ::rss-synd::deinit {args} {catch {unbind evnt -|- prerehash [namespace current]::deinit}catch {unbind time -|- {* * * * *} [namespace current]::feed_get}catch {unbind pubm -|- {* *} [namespace current]::trigger}catch {unbind msgm -|- {*} [namespace current]::trigger}foreach child [namespace children] {catch {[set child]::deinit}}namespace delete [namespace current]}## Trigger Function##proc ::rss-synd::trigger {nick user handle args} {variable rssvariable defaultset i 0set chan ""if {[llength $args] == 2} {set chan [lindex $args 0]incr i}set text [lindex $args $i]array set tmp $defaultif {[info exists tmp(trigger)]} {regsub -all -- {@@(.*?)@@} $tmp(trigger) "" tmp_triggerset tmp_trigger [string trimright $tmp_trigger]if {[string equal -nocase $text $tmp_trigger]} {set list_feeds [list]}}unset -nocomplain tmp tmp_triggerforeach name [array names rss] {array set feed $rss($name)if {(![info exists list_feeds]) &amp;&amp; ([string equal -nocase $text $feed(trigger)])} {if {(![[namespace current]::check_channel $feed(channels) $chan]) &amp;&amp; ([string length $chan] != 0)} {continue}set feed(nick) $nickif {$chan != ""} {set feed(type) [lindex $feed(trigger-type) 0]set feed(channels) $chan} else {set feed(type) [lindex $feed(trigger-type) 1]set feed(channels) ""}if {[catch {set data [[namespace current]::feed_read]} error] == 0} {if {![[namespace current]::feed_info $data]} {putlog "\002RSS Error\002: Invalid feed database file format ($feed(database))!"return}if {$feed(trigger-output) &gt; 0} {set feed(announce-output) $feed(trigger-output)[namespace current]::feed_output $data}} else {putlog "\002RSS Warning\002: $error."}} elseif {[info exists list_feeds]} {if {$chan != ""} {# triggered from a channelif {[[namespace current]::check_channel $feed(channels) $chan]} {lappend list_feeds $feed(trigger)}} else {# triggered from a privmsgforeach tmp_chan $feed(channels) {if {([catch {botonchan $tmp_chan}] == 0) &amp;&amp; ([onchan $nick $tmp_chan])} {lappend list_feeds $feed(trigger)continue}}}}}if {[info exists list_feeds]} {if {[llength $list_feeds] == 0} {lappend list_feeds "None"}lappend list_msgs "Available feeds: [join $list_feeds ", "]."if {$chan != ""} {set list_type [lindex $feed(trigger-type) 0]set list_targets $chan} else {set list_type [lindex $feed(trigger-type) 1]set list_targets ""}[namespace current]::feed_msg $list_type $list_msgs list_targets $nick}}## Feed Retrieving Functions##proc ::rss-synd::feed_get {args} {variable rssset i 0foreach name [array names rss] {if {$i == 3} { break }array set feed $rss($name)if {$feed(updated) &lt;= [expr { [unixtime] - ($feed(update-interval) * 60) }]} {::http::config -useragent $feed(user-agent)set feed(type) $feed(announce-type)set feed(headers) [list]if {$feed(url-auth) != ""} {lappend feed(headers) "Authorization" "Basic $feed(url-auth)"}if {([info exists feed(enable-gzip)]) &amp;&amp; ($feed(enable-gzip) == 1)} {lappend feed(headers) "Accept-Encoding" "gzip"}catch {::http::geturl "$feed(url)" -command "[namespace current]::feed_callback {[array get feed] depth 0}" -timeout $feed(timeout) -headers $feed(headers)} debugset feed(updated) [unixtime]set rss($name) [array get feed]incr i}unset feed}}proc ::rss-synd::feed_callback {feedlist args} {set token [lindex $args end]array set feed $feedlistupvar 0 $token stateif {[set status $state(status)] != "ok"} {if {$status == "error"} { set status $state(error) }putlog "\002RSS HTTP Error\002: $state(url) (State: $status)"::http::cleanup $tokenreturn 1}array set meta $state(meta)if {([::http::ncode $token] == 302) || ([::http::ncode $token] == 301)} {set feed(depth) [expr {$feed(depth) + 1 }]if {$feed(depth) &lt; $feed(max-depth)} {catch {::http::geturl "$meta(Location)" -command "[namespace current]::feed_callback {$feedlist}" -timeout $feed(timeout) -headers $feed(headers)}} else {putlog "\002RSS HTTP Error\002: $state(url) (State: timeout, max refer limit reached)"}::http::cleanup $tokenreturn 1} elseif {[::http::ncode $token] != 200} {putlog "\002RSS HTTP Error\002: $state(url) ($state(http))"::http::cleanup $tokenreturn 1}set data [::http::data $token]if {[info exists feed(feedencoding)]} {set data [encoding convertfrom [string tolower $feed(feedencoding)] $data]}if {[info exists feed(charset)]} {if {[string tolower $feed(charset)] == "utf-8" &amp;&amp; [is_utf8_patched]} {#do nothing, already utf-8} else {set data [encoding convertto [string tolower $feed(charset)] $data]}}if {([info exists meta(Content-Encoding)]) &amp;&amp; ([string equal $meta(Content-Encoding) "gzip"])} {if {[catch {[namespace current]::feed_gzip $data} data] != 0} {putlog "\002RSS Error\002: Unable to decompress \"$state(url)\": $data"::http::cleanup $tokenreturn 1}}if {[catch {[namespace current]::xml_list_create $data} data] != 0} {putlog "\002RSS Error\002: Unable to parse feed properly, parser returned error. \"$state(url)\""::http::cleanup $tokenreturn 1}if {[string length $data] == 0} {putlog "\002RSS Error\002: Unable to parse feed properly, no data returned. \"$state(url)\""::http::cleanup $tokenreturn 1}set odata ""if {[catch {set odata [[namespace current]::feed_read]} error] != 0} {putlog "\002RSS Warning\002: $error."}if {![[namespace current]::feed_info $data]} {putlog "\002RSS Error\002: Invalid feed format ($state(url))!"::http::cleanup $tokenreturn 1}::http::cleanup $tokenif {[catch {[namespace current]::feed_write $data} error] != 0} {putlog "\002RSS Database Error\002: $error."return 1}if {$feed(announce-output) &gt; 0} {[namespace current]::feed_output $data $odata}}proc ::rss-synd::feed_info {data {target "feed"}} {upvar 1 $target feedset length [[namespace current]::xml_get_info $data [list -1 "*"]]for {set i 0} {$i &lt; $length} {incr i} {set type [[namespace current]::xml_get_info $data [list $i "*"] "name"]# tag-name: the name of the element that contains each article and its data# tag-list: the position in the xml structure where all 'tag-name' resideswitch [string tolower $type] {rss {# RSS v0.9x &amp; x2.0set feed(tag-list) [list 0 "channel"]set feed(tag-name) "item"break}rdf:rdf {# RSS v1.0set feed(tag-list) [list]set feed(tag-name) "item"break}feed {# ATOMset feed(tag-list) [list]set feed(tag-name) "entry"break}}}if {![info exists feed(tag-list)]} {return 0}set feed(tag-feed) [list 0 $type]return 1}# decompress gzip formatted data proc ::rss-synd::feed_gzip {cdata} {    return $cdata } proc ::rss-synd::feed_read { } {upvar 1 feed feedif {[catch {open $feed(database) "r"} fp] != 0} {error $fp}set data [read -nonewline $fp]close $fpreturn $data}proc ::rss-synd::feed_write {data} {upvar 1 feed feedif {[catch {open $feed(database) "w+"} fp] != 0} {error $fp}set data [string map { "\n" "" "\r" "" } $data]puts -nonewline $fp $dataclose $fp}## XML Functions##proc ::rss-synd::xml_list_create {xml_data} {set xml_list [list]set ns_current [namespace current]set ptr 0while {[set tag_start [${ns_current}::xml_get_position $xml_data $ptr]] != ""} {set tag_start_first [lindex $tag_start 0]set tag_start_last [lindex $tag_start 1]set tag_string [string range $xml_data $tag_start_first $tag_start_last]# move the pointer to the next character after the current tagset last_ptr $ptrset ptr [expr { $tag_start_last + 2 }]array set tag [list]# match 'special' tags that dont closeif {[regexp -nocase -- {^!(\[CDATA|--|DOCTYPE)} $tag_string]} {set tag_data $tag_stringregexp -nocase -- {^!\[CDATA\[(.*?)\]\]$} $tag_string -&gt; tag_dataregexp -nocase -- {^!--(.*?)--$} $tag_string -&gt; tag_dataif {[info exists tag_data]} {set tag(data) [${ns_current}::xml_escape $tag_data]}} else {# we should only ever encounter opening tags, if we hit a closing one somethings wrongif {[string match {[/]*} $tag_string]} {putlog "\002RSS Malformed Feed\002: Tag not open: \"&lt;$tag_string&gt;\" ($tag_start_first =&gt; $tag_start_last)"continue}# split up the tag name and attributesregexp -- {(.[^ \/\n\r]*)(?: |\n|\r\n|\r|)(.*?)$} $tag_string -&gt; tag_name tag_argsset tag(name) [${ns_current}::xml_escape $tag_name]# split up all of the tags attributesset tag(attrib) [list]if {[string length $tag_args] &gt; 0} {set values [regexp -inline -all -- {(?:\s*|)(.[^=]*)=["'](.[^"']*)["']} $tag_args]foreach {r_match r_tag r_value} $values {lappend tag(attrib) [${ns_current}::xml_escape $r_tag] [${ns_current}::xml_escape $r_value]}}# find the end tag of non-self-closing tagsif {(![regexp {(\?|!|/)(\s*)$} $tag_args]) || (![string match "\?*" $tag_string])} {set tmp_num 1set tag_success 0set tag_end_last $ptr# find the correct closing tag if there are nested elements#  with the same namewhile {$tmp_num &gt; 0} {# search for a possible closing tagset tag_success [regexp -indices -start $tag_end_last -- "&lt;/$tag_name&gt;" $xml_data tag_end]set last_tag_end_last $tag_end_lastset tag_end_first [lindex $tag_end 0]set tag_end_last [lindex $tag_end 1]# check to see if there are any NEW opening tags within the#  previous closing tag and the new closing oneincr tmp_num [regexp -all -- "&lt;$tag_name\(\[\\s\\t\\n\\r\]+\(\[^/&gt;\]*\)?\)?&gt;" [string range $xml_data $last_tag_end_last $tag_end_last]]incr tmp_num -1}if {$tag_success == 0} {putlog "\002RSS Malformed Feed\002: Tag not closed: \"&lt;$tag_name&gt;\""return}# set the pointer to after the last closing tagset ptr [expr { $tag_end_last + 1 }]# remember tag_start*'s character index doesnt include the tag start and end charactersset xml_sub_data [string range $xml_data [expr { $tag_start_last + 2 }] [expr { $tag_end_first - 1 }]]# recurse the data within the currently open tagset result [${ns_current}::xml_list_create $xml_sub_data]# set the list data returned from the recursion we just performedif {[llength $result] &gt; 0} {set tag(children) $result# set the current data we have because we're already at the end of a branch#  (ie: the recursion didnt return any data)} else {set tag(data) [${ns_current}::xml_escape $xml_sub_data]}}}# insert any plain data that appears before the current elementif {$last_ptr != [expr { $tag_start_first - 1 }]} {lappend xml_list [list "data" [${ns_current}::xml_escape [string range $xml_data $last_ptr [expr { $tag_start_first - 2 }]]]]}# inset tag datalappend xml_list [array get tag]unset tag}# if there is still plain data left add itif {$ptr &lt; [string length $xml_data]} {lappend xml_list [list "data" [${ns_current}::xml_escape [string range $xml_data $ptr end]]]}return $xml_list}# simple escape functionproc ::rss-synd::xml_escape {string} {regsub -all -- {([\{\}])} $string {\\\1} stringreturn $string}# this function is to replace:#  regexp -indices -start $ptr {&lt;(!\[CDATA\[.+?\]\]|!--.+?--|!DOCTYPE.+?|.+?)&gt;} $xml_data -&gt; tag_start# which doesnt work correctly with tcl's re_syntaxproc ::rss-synd::xml_get_position {xml_data ptr} {set tag_start [list -1 -1]regexp -indices -start $ptr {&lt;(.+?)&gt;} $xml_data -&gt; tmp(tag)regexp -indices -start $ptr {&lt;(!--.*?--)&gt;} $xml_data -&gt; tmp(comment)regexp -indices -start $ptr {&lt;(!DOCTYPE.+?)&gt;} $xml_data -&gt; tmp(doctype)regexp -indices -start $ptr {&lt;(!\[CDATA\[.+?\]\])&gt;} $xml_data -&gt; tmp(cdata)# 'tag' regexp should be compared lastforeach name [lsort [array names tmp]] {set tmp_s [split $tmp($name)]if {( ([lindex $tmp_s 0] &lt; [lindex $tag_start 0]) &amp;&amp; ([lindex $tmp_s 0] &gt; -1) ) || ([lindex $tag_start 0] == -1)} {set tag_start $tmp($name)}}if {([lindex $tag_start 0] == -1) || ([lindex $tag_start 1] == -1)}  {set tag_start ""}return $tag_start}# recursivly flatten all data without tags or attributesproc ::rss-synd::xml_list_flatten {xml_list {level 0}} {set xml_string ""foreach e_list $xml_list {if {[catch {array set e_array $e_list}] != 0} {return $xml_list}if {[info exists e_array(children)]} {append xml_string [[namespace current]::xml_list_flatten $e_array(children) [expr { $level + 1 }]]} elseif {[info exists e_array(data)]} {append xml_string $e_array(data)}unset e_array}return $xml_string}# returns information on a data structure when given a path.#  paths can be specified using: [struct number] [struct name] &lt;...&gt;proc ::rss-synd::xml_get_info {xml_list path {element "data"}} {set i 0foreach {t_data} $xml_list {array set t_array $t_data# if the name doesnt exist set it so we can still reference the data#  using the 'stuct name' *if {![info exists t_array(name)]} {set t_array(name) ""}if {[string match -nocase [lindex $path 1] $t_array(name)]} {if {$i == [lindex $path 0]} {set result ""if {([llength $path] == 2) &amp;&amp; ([info exists t_array($element)])} {set result $t_array($element)} elseif {[info exists t_array(children)]} {# shift the first path reference of the front of the path and recurseset result [[namespace current]::xml_get_info $t_array(children) [lreplace $path 0 1] $element]}return $result}incr i}unset t_array}if {[lindex $path 0] == -1} {return $i}}# converts 'args' into a list in the same orderproc ::rss-synd::xml_join_tags {args} {set list [list]foreach tag $args {foreach item $tag {if {[string length $item] &gt; 0} {lappend list $item}}}return $list}## Output Feed Functions##proc ::rss-synd::feed_output {data {odata ""}} {upvar 1 feed feedset msgs [list]set path [[namespace current]::xml_join_tags $feed(tag-feed) $feed(tag-list) -1 $feed(tag-name)]set count [[namespace current]::xml_get_info $data $path]for {set i 0} {($i &lt; $count) &amp;&amp; ($i &lt; $feed(announce-output))} {incr i} {set tmpp [[namespace current]::xml_join_tags $feed(tag-feed) $feed(tag-list) $i $feed(tag-name)]set tmpd [[namespace current]::xml_get_info $data $tmpp "children"]if {[[namespace current]::feed_compare $odata $tmpd]} {break}set tmp_msg [[namespace current]::cookie_parse $data $i]if {(![info exists feed(output-order)]) || ($feed(output-order) == 0)} {set msgs [linsert $msgs 0 $tmp_msg]} else {lappend msgs $tmp_msg}}set nick [expr {[info exists feed(nick)] ? $feed(nick) : ""}][namespace current]::feed_msg $feed(type) $msgs $feed(channels) $nick}proc ::rss-synd::feed_msg {type msgs targets {nick ""}} {# check if our target is a nickif {(($nick != "") &amp;&amp; ($targets == "")) || ([regexp -- {[23]} $type])} {set targets $nick}foreach msg $msgs {foreach chan $targets {if {([catch {botonchan $chan}] == 0) || ([regexp -- {^[#&amp;]} $chan] == 0)} {foreach line [split $msg "\n"] {if {($type == 1) || ($type == 3)} {putserv "NOTICE $chan :$line"} else {putserv "PRIVMSG $chan :$line"}}}}}}proc ::rss-synd::feed_compare {odata data} {if {$odata == ""} {return 0}upvar 1 feed feedarray set ofeed [list][namespace current]::feed_info $odata "ofeed"if {[array size ofeed] == 0} {putlog "\002RSS Error\002: Invalid feed format ($feed(database))!"return 0}if {[string equal -nocase [lindex $feed(tag-feed) 1] "feed"]} {set cmp_items [list {0 "id"} "children" "" 3 {0 "link"} "attrib" "href" 2 {0 "title"} "children" "" 1]} else {set cmp_items [list {0 "guid"} "children" "" 3 {0 "link"} "children" "" 2 {0 "title"} "children" "" 1]}set path [[namespace current]::xml_join_tags $ofeed(tag-feed) $ofeed(tag-list) -1 $ofeed(tag-name)]set count [[namespace current]::xml_get_info $odata $path]for {set i 0} {$i &lt; $count} {incr i} {# extract the current article from the databaseset tmpp [[namespace current]::xml_join_tags $ofeed(tag-feed) $ofeed(tag-list) $i $ofeed(tag-name)]set tmpd [[namespace current]::xml_get_info $odata $tmpp "children"]set w 0; # weight valueset m 0; # item tag matchesforeach {cmp_path cmp_element cmp_attrib cmp_weight} $cmp_items {# try and extract the tag info from the current articleset oresult [[namespace current]::xml_get_info $tmpd $cmp_path $cmp_element]if {$cmp_element == "attrib"} {array set tmp $oresultcatch {set oresult $tmp($cmp_attrib)}unset tmp}# if the tag doesnt exist in the article ignore itif {$oresult == ""} { continue }incr m# extract the tag info from the current articleset result [[namespace current]::xml_get_info $data $cmp_path $cmp_element]if {$cmp_element == "attrib"} {array set tmp $resultcatch {set result $tmp($cmp_attrib)}unset tmp}if {[string equal -nocase $oresult $result]} {set w [expr { $w + $cmp_weight }]}}# value of 100 or more means its a matchif {($m &gt; 0) &amp;&amp; ([expr { round(double($w) / double($m) * 100) }] &gt;= 100)} {return 1}}return 0}## Cookie Parsing Functions##proc ::rss-synd::cookie_parse {data current} {upvar 1 feed feedset output $feed(output)set eval 0if {([info exists feed(evaluate-tcl)]) &amp;&amp; ($feed(evaluate-tcl) == 1)} { set eval 1 }set variable_index 0set matches [regexp -inline -nocase -all -- {@@(.*?)@@} $output]foreach {match tmpc} $matches {set tmpc [split $tmpc "!"]set index 0set cookie [list]incr variable_indexforeach piece $tmpc {set tmpp [regexp -nocase -inline -all -- {^(.*?)\((.*?)\)|(.*?)$} $piece]if {[lindex $tmpp 3] == ""} {lappend cookie [lindex $tmpp 2] [lindex $tmpp 1]} else {lappend cookie 0 [lindex $tmpp 3]}}# replace tag-item's index with the current articleif {[string equal -nocase $feed(tag-name) [lindex $cookie 1]]} {set cookie [[namespace current]::xml_join_tags $feed(tag-list) [lreplace $cookie $index $index $current]]}set cookie [[namespace current]::xml_join_tags $feed(tag-feed) $cookie]if {[set tmp [[namespace current]::cookie_replace $cookie $data]] != ""} {set tmp [[namespace current]::xml_list_flatten $tmp]regsub -all -- {([\"\$\[\]\{\}\(\)\\])} $match {\\\1} matchset feed_data "[string map { "&amp;" "\\\x26" } [[namespace current]::html_decode $eval $tmp]]"if {$eval == 1} {# We are going to eval this string so we can't insert untrusted# text. Instead create variables and insert references to those# variables that will be expanded in the subst call below.set cookie_val($variable_index) $feed_dataregsub -- $match $output "\$cookie_val($variable_index)" output} else {regsub -- $match $output $feed_data output}}}# remove empty cookiesif {(![info exists feed(remove-empty)]) || ($feed(remove-empty) == 1)} {regsub -nocase -all -- "@@.*?@@" $output "" output}# evaluate tcl codeif {$eval == 1} {if {[catch {set output [subst $output]} error] != 0} {putlog "\002RSS Eval Error\002: $error"}}return $output}proc ::rss-synd::cookie_replace {cookie data} {set element "children"set tags [list]foreach {num section} $cookie {if {[string equal "=" [string range $section 0 0]]} {set attrib [string range $section 1 end]set element "attrib"break} else {lappend tags $num $section}}set return [[namespace current]::xml_get_info $data $tags $element]if {[string equal -nocase "attrib" $element]} {array set tmp $returnif {[catch {set return $tmp($attrib)}] != 0} {return}}return $return}## Misc Functions##proc ::rss-synd::html_decode {eval data {loop 0}} {if {![string match *&amp;* $data]} {return $data}array set chars { nbsp\x20 amp\x26 quot\x22 lt\x3C gt\x3E iexcl\xA1 cent\xA2 pound\xA3 curren\xA4 yen\xA5 brvbar\xA6 brkbar\xA6 sect\xA7 uml\xA8 die\xA8 copy\xA9 ordf\xAA laquo\xAB not\xAC shy\xAD reg\xAE hibar\xAF macr\xAF deg\xB0 plusmn\xB1 sup2\xB2 sup3\xB3 acute\xB4 micro\xB5 para\xB6 middot\xB7 cedil\xB8 sup1\xB9 ordm\xBA raquo\xBB frac14\xBC frac12\xBD frac34\xBE iquest\xBF Agrave\xC0 Aacute\xC1 Acirc\xC2 Atilde\xC3 Auml\xC4 Aring\xC5 AElig\xC6 Ccedil\xC7 Egrave\xC8 Eacute\xC9 Ecirc\xCA Euml\xCB Igrave\xCC Iacute\xCD Icirc\xCE Iuml\xCF ETH\xD0 Dstrok\xD0 Ntilde\xD1 Ograve\xD2 Oacute\xD3 Ocirc\xD4 Otilde\xD5 Ouml\xD6 times\xD7 Oslash\xD8 Ugrave\xD9 Uacute\xDA Ucirc\xDB Uuml\xDC Yacute\xDD THORN\xDE szlig\xDF agrave\xE0 aacute\xE1 acirc\xE2 atilde\xE3 auml\xE4 aring\xE5 aelig\xE6 ccedil\xE7 egrave\xE8 eacute\xE9 ecirc\xEA euml\xEB igrave\xEC iacute\xED icirc\xEE iuml\xEF eth\xF0 ntilde\xF1 ograve\xF2 oacute\xF3 ocirc\xF4 otilde\xF5 ouml\xF6 divide\xF7 oslash\xF8 ugrave\xF9 uacute\xFA ucirc\xFB uuml\xFC yacute\xFD thorn\xFE yuml\xFF ensp\x20 emsp\x20 thinsp\x20 zwnj\x20 zwj\x20 lrm\x20 rlm\x20 euro\x80 sbquo\x82 bdquo\x84 hellip\x85 dagger\x86 Dagger\x87 circ\x88 permil\x89 Scaron\x8A lsaquo\x8B OElig\x8C oelig\x8D lsquo\x91 rsquo\x92 ldquo\x93 rdquo\x94 ndash\x96 mdash\x97 tilde\x98 scaron\x9A rsaquo\x9B Yuml\x9F apos\x27}regsub -all -- {&lt;(.[^&gt;]*)&gt;} $data " " dataif {$eval != 1} {regsub -all -- {([\$\[\]\{\}\(\)\\])} $data {\\\1} data} else {regsub -all -- {([\$\[\]\{\}\(\)\\])} $data {\\\\\\\1} data}regsub -all -- {&amp;#(\d+);} $data {[subst -nocomm -novar [format \\\u%04x [scan \1 %d]]]} dataregsub -all -- {&amp;#x(\w+);} $data {[format %c [scan \1 %x]]} dataregsub -all -- {&amp;([0-9a-zA-Z#]*);} $data {[if {[catch {set tmp $chars(\1)} char] == 0} { set tmp }]} dataregsub -all -- {&amp;([0-9a-zA-Z#]*);} $data {[if {[catch {set tmp [string tolower $chars(\1)]} char] == 0} { set tmp }]} dataregsub -nocase -all -- "\\s{2,}" $data " " dataset data [subst $data]if {[incr loop] == 1} {set data [[namespace current]::html_decode 0 $data $loop]}return $data}proc ::rss-synd::is_utf8_patched {} { catch {queuesize a} err1; catch {queuesize \u0754} err2; expr {[string bytelength $err2]!=[string bytelength $err1]} }proc ::rss-synd::check_channel {chanlist chan} {foreach match [split $chanlist] {if {[string equal -nocase $match $chan]} {return 1}}return 0}proc ::rss-synd::urldecode {str} {regsub -all -- {([\"\$\[\]\{\}\(\)\\])} $str {\\\1} strregsub -all -- {%([aAbBcCdDeEfF0-9][aAbBcCdDeEfF0-9]);?} $str {[format %c [scan \1 %x]]} strreturn [subst $str]}::rss-synd::init</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=7749">SpiKe^^</a> — Sat Feb 04, 2017 4:12 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[SpiKe^^]]></name></author>
		<updated>2017-02-04T15:17:45-04:00</updated>

		<published>2017-02-04T15:17:45-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=105794#p105794</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=105794#p105794"/>
		<title type="html"><![CDATA[Tcl error: invalid character &quot;\&quot; in expression...]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=105794#p105794"><![CDATA[
Yes, the forum has a way of breaking the "\&lt;newline&gt;" sequence of chars.<br><br>When you cut the code from this page, the forum adds a &lt;space&gt; char at the end of each line, before the &lt;newline&gt; char.<br>That breaks the script by changing "\&lt;newline&gt;" to "\&lt;space&gt;&lt;newline&gt;".<br><br>You can make that script load fine by searching the script for ALL lines that END with the "\&lt;space&gt;&lt;newline&gt;" sequence &amp; REMOVE the &lt;space&gt; at the end of ALL those lines.<br><br>Goodluck:)<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=7749">SpiKe^^</a> — Sat Feb 04, 2017 3:17 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[klejz0r]]></name></author>
		<updated>2017-02-04T10:52:51-04:00</updated>

		<published>2017-02-04T10:52:51-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=105793#p105793</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=105793#p105793"/>
		<title type="html"><![CDATA[Rss-synd.tcl database feed problem]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=105793#p105793"><![CDATA[
Tcl error [::rss-synd::trigger]: invalid character "\"<br>in expression "...xists list_feeds]) &amp;&amp; \<br>          ([string e..."<br><br><br><br>whats wrong now ?<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12671">klejz0r</a> — Sat Feb 04, 2017 10:52 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[PR0r]]></name></author>
		<updated>2017-02-03T21:24:30-04:00</updated>

		<published>2017-02-03T21:24:30-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=105792#p105792</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=105792#p105792"/>
		<title type="html"><![CDATA[Rss-synd.tcl database feed problem]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=105792#p105792"><![CDATA[
<div class="codebox"><p>Code: </p><pre><code># -*- tab-width: 4; indent-tabs-mode: t; -*-# rss-synd.tcl -- 0.5.1##   Highly configurable asynchronous RSS &amp; Atom feed reader for Eggdrops #     written in TCL. Supports multiple feeds, gzip compressed feeds,#     automatically messaging channels with updates at set intervals,#     custom private/channel triggers and more.## Copyright (c) 2011 Andrew Scott, HM2K## Name: RSS &amp; Atom Syndication Script for Eggdrop# Author: Andrew Scott &lt;andrew.scott@wizzer-it.com&gt;# Author: HM2K &lt;irc@hm2k.org&gt;# License: See LICENSE file# Link: http://code.google.com/p/rss-synd/# Tags: rss, atom, syndication# Updated: 05-Jan-2011####Usage# See README file####Revisions# See HISTORY file## Include Settings#if {[catch {source scripts/rss-synd-settings.tcl} err]} {  putlog "Error: Could not load 'rss-synd-settings.tcl file.'";}proc ::rss-synd::init {args} {variable rssvariable defaultvariable versionvariable packagesset version(number)0.5.1set version(date)"2012-02-27"package require httpset packages(base64) [catch {package require base64}]; # http authset packages(tls) [catch {package require tls}]; # httpsset packages(trf) [catch {package require Trf}]; # gzip compressionforeach feed [array names rss] {array set tmp $defaultarray set tmp $rss($feed)set required [list "announce-output" "trigger-output" "max-depth" "update-interval" "timeout" "channels" "output" "user-agent" "url" "database" "trigger-type" "announce-type"]foreach {key value} [array get tmp] {if {[set ptr [lsearch -exact $required $key]] &gt;= 0} {set required [lreplace $required $ptr $ptr]}}if {[llength $required] == 0} {regsub -nocase -all -- {@@feedid@@} $tmp(trigger) $feed tmp(trigger)set ulist [regexp -nocase -inline -- {(http(?:s?))://(?:(.[^:]+:.[^@]+)?)(?:@?)(.*)} $tmp(url)]if {[llength $ulist] == 0} {putlog "\002RSS Error\002: Unable to parse URL, Invalid format for feed \"$feed\"."unset rss($feed)continue}set tmp(url) "[lindex $ulist 1]://[lindex $ulist 3]"if {[lindex $ulist 1] == "https"} {if {$packages(tls) != 0} {putlog "\002RSS Error\002: Unable to find tls package required for https, unloaded feed \"$feed\"."unset rss($feed)continue}::http::register https 443 ::tls::socket}if {(![info exists tmp(url-auth)]) || ($tmp(url-auth) == "")} {set tmp(url-auth) ""if {[lindex $ulist 2] != ""} {if {$packages(base64) != 0} {putlog "\002RSS Error\002: Unable to find base64 package required for http authentication, unloaded feed \"$feed\"."unset rss($feed)continue}set tmp(url-auth) [::base64::encode [lindex $ulist 2]]}}if {[regexp {^[0123]{1}:[0123]{1}$} $tmp(trigger-type)] != 1} {putlog "\002RSS Error\002: Invalid 'trigger-type' syntax for feed \"$feed\"."unset rss($feed)continue}set tmp(trigger-type) [split $tmp(trigger-type) ":"]if {([info exists tmp(charset)]) &amp;&amp; ([lsearch -exact [encoding names] [string tolower $tmp(charset)]] &lt; 0)} {putlog "\002RSS Error\002: Unable to load feed \"$feed\", unknown encoding \"$tmp(charset)\"."unset rss($feed)continue}if {([info exists tmp(feedencoding)]) &amp;&amp; ([lsearch -exact [encoding names] [string tolower $tmp(feedencoding)]] &lt; 0)} {putlog "\002RSS Error\002: Unable to load feed \"$feed\", unknown feedencoding \"$tmp(feedencoding)\"."unset rss($feed)continue}set tmp(updated) 0if {([file exists $tmp(database)]) &amp;&amp; ([set mtime [file mtime $tmp(database)]] &lt; [unixtime])} {set tmp(updated) [file mtime $tmp(database)]}set rss($feed) [array get tmp]} else {putlog "\002RSS Error\002: Unable to load feed \"$feed\", missing one or more required settings. \"[join $required ", "]\""unset rss($feed)}unset tmp}bind evnt -|- prerehash [namespace current]::deinitbind time -|- {* * * * *} [namespace current]::feed_getbind pubm -|- {* *} [namespace current]::triggerbind msgm -|- {*} [namespace current]::triggerputlog "\002RSS Syndication Script v$version(number)\002 ($version(date)): Loaded."}proc ::rss-synd::deinit {args} {catch {unbind evnt -|- prerehash [namespace current]::deinit}catch {unbind time -|- {* * * * *} [namespace current]::feed_get}catch {unbind pubm -|- {* *} [namespace current]::trigger}catch {unbind msgm -|- {*} [namespace current]::trigger}foreach child [namespace children] {catch {[set child]::deinit}}namespace delete [namespace current]}## Trigger Function##proc ::rss-synd::trigger {nick user handle args} {variable rssvariable defaultset i 0set chan ""if {[llength $args] == 2} {set chan [lindex $args 0]incr i}set text [lindex $args $i]array set tmp $defaultif {[info exists tmp(trigger)]} {regsub -all -- {@@(.*?)@@} $tmp(trigger) "" tmp_triggerset tmp_trigger [string trimright $tmp_trigger]if {[string equal -nocase $text $tmp_trigger]} {set list_feeds [list]}}unset -nocomplain tmp tmp_triggerforeach name [array names rss] {array set feed $rss($name)if {(![info exists list_feeds]) &amp;&amp; \    ([string equal -nocase $text $feed(trigger)])} {if {(![[namespace current]::check_channel $feed(channels) $chan]) &amp;&amp; \    ([string length $chan] != 0)} {continue}set feed(nick) $nickif {$chan != ""} {set feed(type) [lindex $feed(trigger-type) 0]set feed(channels) $chan} else {set feed(type) [lindex $feed(trigger-type) 1]set feed(channels) ""}if {[catch {set data [[namespace current]::feed_read]} error] == 0} {if {![[namespace current]::feed_info $data]} {putlog "\002RSS Error\002: Invalid feed database file format ($feed(database))!"return}if {$feed(trigger-output) &gt; 0} {set feed(announce-output) $feed(trigger-output)[namespace current]::feed_output $data}} else {putlog "\002RSS Warning\002: $error."}} elseif {[info exists list_feeds]} {if {$chan != ""} {# triggered from a channelif {[[namespace current]::check_channel $feed(channels) $chan]} {lappend list_feeds $feed(trigger)}} else {# triggered from a privmsgforeach tmp_chan $feed(channels) {if {([catch {botonchan $tmp_chan}] == 0) &amp;&amp; \    ([onchan $nick $tmp_chan])} {lappend list_feeds $feed(trigger)continue}}}}}if {[info exists list_feeds]} {if {[llength $list_feeds] == 0} {lappend list_feeds "None"}lappend list_msgs "Available feeds: [join $list_feeds ", "]."if {$chan != ""} {set list_type [lindex $feed(trigger-type) 0]set list_targets $chan} else {set list_type [lindex $feed(trigger-type) 1]set list_targets ""}[namespace current]::feed_msg $list_type $list_msgs list_targets $nick}}## Feed Retrieving Functions##proc ::rss-synd::feed_get {args} {variable rssset i 0foreach name [array names rss] {if {$i == 3} { break }array set feed $rss($name)if {$feed(updated) &lt;= [expr { [unixtime] - ($feed(update-interval) * 60) }]} {::http::config -useragent $feed(user-agent)set feed(type) $feed(announce-type)set feed(headers) [list]if {$feed(url-auth) != ""} {lappend feed(headers) "Authorization" "Basic $feed(url-auth)"}if {([info exists feed(enable-gzip)]) &amp;&amp; ($feed(enable-gzip) == 1)} {lappend feed(headers) "Accept-Encoding" "gzip"}catch {::http::geturl "$feed(url)" -command "[namespace current]::feed_callback {[array get feed] depth 0}" -timeout $feed(timeout) -headers $feed(headers)} debugset feed(updated) [unixtime]set rss($name) [array get feed]incr i}unset feed}}proc ::rss-synd::feed_callback {feedlist args} {set token [lindex $args end]array set feed $feedlistupvar 0 $token stateif {[set status $state(status)] != "ok"} {if {$status == "error"} { set status $state(error) }putlog "\002RSS HTTP Error\002: $state(url) (State: $status)"::http::cleanup $tokenreturn 1}array set meta $state(meta)if {([::http::ncode $token] == 302) || ([::http::ncode $token] == 301)} {set feed(depth) [expr {$feed(depth) + 1 }]if {$feed(depth) &lt; $feed(max-depth)} {catch {::http::geturl "$meta(Location)" -command "[namespace current]::feed_callback {$feedlist}" -timeout $feed(timeout) -headers $feed(headers)}} else {putlog "\002RSS HTTP Error\002: $state(url) (State: timeout, max refer limit reached)"}::http::cleanup $tokenreturn 1} elseif {[::http::ncode $token] != 200} {putlog "\002RSS HTTP Error\002: $state(url) ($state(http))"::http::cleanup $tokenreturn 1}set data [::http::data $token]if {[info exists feed(feedencoding)]} {set data [encoding convertfrom [string tolower $feed(feedencoding)] $data]}if {[info exists feed(charset)]} {if {[string tolower $feed(charset)] == "utf-8" &amp;&amp; [is_utf8_patched]} {#do nothing, already utf-8} else {set data [encoding convertto [string tolower $feed(charset)] $data]}}if {([info exists meta(Content-Encoding)]) &amp;&amp; \    ([string equal $meta(Content-Encoding) "gzip"])} {if {[catch {[namespace current]::feed_gzip $data} data] != 0} {putlog "\002RSS Error\002: Unable to decompress \"$state(url)\": $data"::http::cleanup $tokenreturn 1}}if {[catch {[namespace current]::xml_list_create $data} data] != 0} {putlog "\002RSS Error\002: Unable to parse feed properly, parser returned error. \"$state(url)\""::http::cleanup $tokenreturn 1}if {[string length $data] == 0} {putlog "\002RSS Error\002: Unable to parse feed properly, no data returned. \"$state(url)\""::http::cleanup $tokenreturn 1}set odata ""if {[catch {set odata [[namespace current]::feed_read]} error] != 0} {putlog "\002RSS Warning\002: $error."}if {![[namespace current]::feed_info $data]} {putlog "\002RSS Error\002: Invalid feed format ($state(url))!"::http::cleanup $tokenreturn 1}::http::cleanup $tokenif {[catch {[namespace current]::feed_write $data} error] != 0} {putlog "\002RSS Database Error\002: $error."return 1}if {$feed(announce-output) &gt; 0} {[namespace current]::feed_output $data $odata}}proc ::rss-synd::feed_info {data {target "feed"}} {upvar 1 $target feedset length [[namespace current]::xml_get_info $data [list -1 "*"]]for {set i 0} {$i &lt; $length} {incr i} {set type [[namespace current]::xml_get_info $data [list $i "*"] "name"]# tag-name: the name of the element that contains each article and its data# tag-list: the position in the xml structure where all 'tag-name' resideswitch [string tolower $type] {rss {# RSS v0.9x &amp; x2.0set feed(tag-list) [list 0 "channel"]set feed(tag-name) "item"break}rdf:rdf {# RSS v1.0set feed(tag-list) [list]set feed(tag-name) "item"break}feed {# ATOMset feed(tag-list) [list]set feed(tag-name) "entry"break}}}if {![info exists feed(tag-list)]} {return 0}set feed(tag-feed) [list 0 $type]return 1}# decompress gzip formatted data proc ::rss-synd::feed_gzip {cdata} {    return $cdata } proc ::rss-synd::feed_read { } {upvar 1 feed feedif {[catch {open $feed(database) "r"} fp] != 0} {error $fp}set data [read -nonewline $fp]close $fpreturn $data}proc ::rss-synd::feed_write {data} {upvar 1 feed feedif {[catch {open $feed(database) "w+"} fp] != 0} {error $fp}set data [string map { "\n" "" "\r" "" } $data]puts -nonewline $fp $dataclose $fp}## XML Functions##proc ::rss-synd::xml_list_create {xml_data} {set xml_list [list]set ns_current [namespace current]set ptr 0while {[set tag_start [${ns_current}::xml_get_position $xml_data $ptr]] != ""} {set tag_start_first [lindex $tag_start 0]set tag_start_last [lindex $tag_start 1]set tag_string [string range $xml_data $tag_start_first $tag_start_last]# move the pointer to the next character after the current tagset last_ptr $ptrset ptr [expr { $tag_start_last + 2 }]array set tag [list]# match 'special' tags that dont closeif {[regexp -nocase -- {^!(\[CDATA|--|DOCTYPE)} $tag_string]} {set tag_data $tag_stringregexp -nocase -- {^!\[CDATA\[(.*?)\]\]$} $tag_string -&gt; tag_dataregexp -nocase -- {^!--(.*?)--$} $tag_string -&gt; tag_dataif {[info exists tag_data]} {set tag(data) [${ns_current}::xml_escape $tag_data]}} else {# we should only ever encounter opening tags, if we hit a closing one somethings wrongif {[string match {[/]*} $tag_string]} {putlog "\002RSS Malformed Feed\002: Tag not open: \"&lt;$tag_string&gt;\" ($tag_start_first =&gt; $tag_start_last)"continue}# split up the tag name and attributesregexp -- {(.[^ \/\n\r]*)(?: |\n|\r\n|\r|)(.*?)$} $tag_string -&gt; tag_name tag_argsset tag(name) [${ns_current}::xml_escape $tag_name]# split up all of the tags attributesset tag(attrib) [list]if {[string length $tag_args] &gt; 0} {set values [regexp -inline -all -- {(?:\s*|)(.[^=]*)=["'](.[^"']*)["']} $tag_args]foreach {r_match r_tag r_value} $values {lappend tag(attrib) [${ns_current}::xml_escape $r_tag] [${ns_current}::xml_escape $r_value]}}# find the end tag of non-self-closing tagsif {(![regexp {(\?|!|/)(\s*)$} $tag_args]) || \    (![string match "\?*" $tag_string])} {set tmp_num 1set tag_success 0set tag_end_last $ptr# find the correct closing tag if there are nested elements#  with the same namewhile {$tmp_num &gt; 0} {# search for a possible closing tagset tag_success [regexp -indices -start $tag_end_last -- "&lt;/$tag_name&gt;" $xml_data tag_end]set last_tag_end_last $tag_end_lastset tag_end_first [lindex $tag_end 0]set tag_end_last [lindex $tag_end 1]# check to see if there are any NEW opening tags within the#  previous closing tag and the new closing oneincr tmp_num [regexp -all -- "&lt;$tag_name\(\[\\s\\t\\n\\r\]+\(\[^/&gt;\]*\)?\)?&gt;" [string range $xml_data $last_tag_end_last $tag_end_last]]incr tmp_num -1}if {$tag_success == 0} {putlog "\002RSS Malformed Feed\002: Tag not closed: \"&lt;$tag_name&gt;\""return}# set the pointer to after the last closing tagset ptr [expr { $tag_end_last + 1 }]# remember tag_start*'s character index doesnt include the tag start and end charactersset xml_sub_data [string range $xml_data [expr { $tag_start_last + 2 }] [expr { $tag_end_first - 1 }]]# recurse the data within the currently open tagset result [${ns_current}::xml_list_create $xml_sub_data]# set the list data returned from the recursion we just performedif {[llength $result] &gt; 0} {set tag(children) $result# set the current data we have because we're already at the end of a branch#  (ie: the recursion didnt return any data)} else {set tag(data) [${ns_current}::xml_escape $xml_sub_data]}}}# insert any plain data that appears before the current elementif {$last_ptr != [expr { $tag_start_first - 1 }]} {lappend xml_list [list "data" [${ns_current}::xml_escape [string range $xml_data $last_ptr [expr { $tag_start_first - 2 }]]]]}# inset tag datalappend xml_list [array get tag]unset tag}# if there is still plain data left add itif {$ptr &lt; [string length $xml_data]} {lappend xml_list [list "data" [${ns_current}::xml_escape [string range $xml_data $ptr end]]]}return $xml_list}# simple escape functionproc ::rss-synd::xml_escape {string} {regsub -all -- {([\{\}])} $string {\\\1} stringreturn $string}# this function is to replace:#  regexp -indices -start $ptr {&lt;(!\[CDATA\[.+?\]\]|!--.+?--|!DOCTYPE.+?|.+?)&gt;} $xml_data -&gt; tag_start# which doesnt work correctly with tcl's re_syntaxproc ::rss-synd::xml_get_position {xml_data ptr} {set tag_start [list -1 -1]regexp -indices -start $ptr {&lt;(.+?)&gt;} $xml_data -&gt; tmp(tag)regexp -indices -start $ptr {&lt;(!--.*?--)&gt;} $xml_data -&gt; tmp(comment)regexp -indices -start $ptr {&lt;(!DOCTYPE.+?)&gt;} $xml_data -&gt; tmp(doctype)regexp -indices -start $ptr {&lt;(!\[CDATA\[.+?\]\])&gt;} $xml_data -&gt; tmp(cdata)# 'tag' regexp should be compared lastforeach name [lsort [array names tmp]] {set tmp_s [split $tmp($name)]if {( ([lindex $tmp_s 0] &lt; [lindex $tag_start 0]) &amp;&amp; \      ([lindex $tmp_s 0] &gt; -1) ) || \            ([lindex $tag_start 0] == -1)} {set tag_start $tmp($name)}}if {([lindex $tag_start 0] == -1) || \    ([lindex $tag_start 1] == -1)}  {set tag_start ""}return $tag_start}# recursivly flatten all data without tags or attributesproc ::rss-synd::xml_list_flatten {xml_list {level 0}} {set xml_string ""foreach e_list $xml_list {if {[catch {array set e_array $e_list}] != 0} {return $xml_list}if {[info exists e_array(children)]} {append xml_string [[namespace current]::xml_list_flatten $e_array(children) [expr { $level + 1 }]]} elseif {[info exists e_array(data)]} {append xml_string $e_array(data)}unset e_array}return $xml_string}# returns information on a data structure when given a path.#  paths can be specified using: [struct number] [struct name] &lt;...&gt;proc ::rss-synd::xml_get_info {xml_list path {element "data"}} {set i 0foreach {t_data} $xml_list {array set t_array $t_data# if the name doesnt exist set it so we can still reference the data#  using the 'stuct name' *if {![info exists t_array(name)]} {set t_array(name) ""}if {[string match -nocase [lindex $path 1] $t_array(name)]} {if {$i == [lindex $path 0]} {set result ""if {([llength $path] == 2) &amp;&amp; \    ([info exists t_array($element)])} {set result $t_array($element)} elseif {[info exists t_array(children)]} {# shift the first path reference of the front of the path and recurseset result [[namespace current]::xml_get_info $t_array(children) [lreplace $path 0 1] $element]}return $result}incr i}unset t_array}if {[lindex $path 0] == -1} {return $i}}# converts 'args' into a list in the same orderproc ::rss-synd::xml_join_tags {args} {set list [list]foreach tag $args {foreach item $tag {if {[string length $item] &gt; 0} {lappend list $item}}}return $list}## Output Feed Functions##proc ::rss-synd::feed_output {data {odata ""}} {upvar 1 feed feedset msgs [list]set path [[namespace current]::xml_join_tags $feed(tag-feed) $feed(tag-list) -1 $feed(tag-name)]set count [[namespace current]::xml_get_info $data $path]for {set i 0} {($i &lt; $count) &amp;&amp; ($i &lt; $feed(announce-output))} {incr i} {set tmpp [[namespace current]::xml_join_tags $feed(tag-feed) $feed(tag-list) $i $feed(tag-name)]set tmpd [[namespace current]::xml_get_info $data $tmpp "children"]if {[[namespace current]::feed_compare $odata $tmpd]} {break}set tmp_msg [[namespace current]::cookie_parse $data $i]if {(![info exists feed(output-order)]) || \    ($feed(output-order) == 0)} {set msgs [linsert $msgs 0 $tmp_msg]} else {lappend msgs $tmp_msg}}set nick [expr {[info exists feed(nick)] ? $feed(nick) : ""}][namespace current]::feed_msg $feed(type) $msgs $feed(channels) $nick}proc ::rss-synd::feed_msg {type msgs targets {nick ""}} {# check if our target is a nickif {(($nick != "") &amp;&amp; \     ($targets == "")) || \    ([regexp -- {[23]} $type])} {set targets $nick}foreach msg $msgs {foreach chan $targets {if {([catch {botonchan $chan}] == 0) || \    ([regexp -- {^[#&amp;]} $chan] == 0)} {foreach line [split $msg "\n"] {if {($type == 1) || ($type == 3)} {putserv "NOTICE $chan :$line"} else {putserv "PRIVMSG $chan :$line"}}}}}}proc ::rss-synd::feed_compare {odata data} {if {$odata == ""} {return 0}upvar 1 feed feedarray set ofeed [list][namespace current]::feed_info $odata "ofeed"if {[array size ofeed] == 0} {putlog "\002RSS Error\002: Invalid feed format ($feed(database))!"return 0}if {[string equal -nocase [lindex $feed(tag-feed) 1] "feed"]} {set cmp_items [list {0 "id"} "children" "" 3 {0 "link"} "attrib" "href" 2 {0 "title"} "children" "" 1]} else {set cmp_items [list {0 "guid"} "children" "" 3 {0 "link"} "children" "" 2 {0 "title"} "children" "" 1]}set path [[namespace current]::xml_join_tags $ofeed(tag-feed) $ofeed(tag-list) -1 $ofeed(tag-name)]set count [[namespace current]::xml_get_info $odata $path]for {set i 0} {$i &lt; $count} {incr i} {# extract the current article from the databaseset tmpp [[namespace current]::xml_join_tags $ofeed(tag-feed) $ofeed(tag-list) $i $ofeed(tag-name)]set tmpd [[namespace current]::xml_get_info $odata $tmpp "children"]set w 0; # weight valueset m 0; # item tag matchesforeach {cmp_path cmp_element cmp_attrib cmp_weight} $cmp_items {# try and extract the tag info from the current articleset oresult [[namespace current]::xml_get_info $tmpd $cmp_path $cmp_element]if {$cmp_element == "attrib"} {array set tmp $oresultcatch {set oresult $tmp($cmp_attrib)}unset tmp}# if the tag doesnt exist in the article ignore itif {$oresult == ""} { continue }incr m# extract the tag info from the current articleset result [[namespace current]::xml_get_info $data $cmp_path $cmp_element]if {$cmp_element == "attrib"} {array set tmp $resultcatch {set result $tmp($cmp_attrib)}unset tmp}if {[string equal -nocase $oresult $result]} {set w [expr { $w + $cmp_weight }]}}# value of 100 or more means its a matchif {($m &gt; 0) &amp;&amp; \    ([expr { round(double($w) / double($m) * 100) }] &gt;= 100)} {return 1}}return 0}## Cookie Parsing Functions##proc ::rss-synd::cookie_parse {data current} {upvar 1 feed feedset output $feed(output)set eval 0if {([info exists feed(evaluate-tcl)]) &amp;&amp; ($feed(evaluate-tcl) == 1)} { set eval 1 }set variable_index 0set matches [regexp -inline -nocase -all -- {@@(.*?)@@} $output]foreach {match tmpc} $matches {set tmpc [split $tmpc "!"]set index 0set cookie [list]incr variable_indexforeach piece $tmpc {set tmpp [regexp -nocase -inline -all -- {^(.*?)\((.*?)\)|(.*?)$} $piece]if {[lindex $tmpp 3] == ""} {lappend cookie [lindex $tmpp 2] [lindex $tmpp 1]} else {lappend cookie 0 [lindex $tmpp 3]}}# replace tag-item's index with the current articleif {[string equal -nocase $feed(tag-name) [lindex $cookie 1]]} {set cookie [[namespace current]::xml_join_tags $feed(tag-list) [lreplace $cookie $index $index $current]]}set cookie [[namespace current]::xml_join_tags $feed(tag-feed) $cookie]if {[set tmp [[namespace current]::cookie_replace $cookie $data]] != ""} {set tmp [[namespace current]::xml_list_flatten $tmp]regsub -all -- {([\"\$\[\]\{\}\(\)\\])} $match {\\\1} matchset feed_data "[string map { "&amp;" "\\\x26" } [[namespace current]::html_decode $eval $tmp]]"if {$eval == 1} {# We are going to eval this string so we can't insert untrusted# text. Instead create variables and insert references to those# variables that will be expanded in the subst call below.set cookie_val($variable_index) $feed_dataregsub -- $match $output "\$cookie_val($variable_index)" output} else {regsub -- $match $output $feed_data output}}}# remove empty cookiesif {(![info exists feed(remove-empty)]) || ($feed(remove-empty) == 1)} {regsub -nocase -all -- "@@.*?@@" $output "" output}# evaluate tcl codeif {$eval == 1} {if {[catch {set output [subst $output]} error] != 0} {putlog "\002RSS Eval Error\002: $error"}}return $output}proc ::rss-synd::cookie_replace {cookie data} {set element "children"set tags [list]foreach {num section} $cookie {if {[string equal "=" [string range $section 0 0]]} {set attrib [string range $section 1 end]set element "attrib"break} else {lappend tags $num $section}}set return [[namespace current]::xml_get_info $data $tags $element]if {[string equal -nocase "attrib" $element]} {array set tmp $returnif {[catch {set return $tmp($attrib)}] != 0} {return}}return $return}## Misc Functions##proc ::rss-synd::html_decode {eval data {loop 0}} {if {![string match *&amp;* $data]} {return $data}array set chars { nbsp\x20 amp\x26 quot\x22 lt\x3C gt\x3E iexcl\xA1 cent\xA2 pound\xA3 curren\xA4 yen\xA5 brvbar\xA6 brkbar\xA6 sect\xA7 uml\xA8 die\xA8 copy\xA9 ordf\xAA laquo\xAB not\xAC shy\xAD reg\xAE hibar\xAF macr\xAF deg\xB0 plusmn\xB1 sup2\xB2 sup3\xB3 acute\xB4 micro\xB5 para\xB6 middot\xB7 cedil\xB8 sup1\xB9 ordm\xBA raquo\xBB frac14\xBC frac12\xBD frac34\xBE iquest\xBF Agrave\xC0 Aacute\xC1 Acirc\xC2 Atilde\xC3 Auml\xC4 Aring\xC5 AElig\xC6 Ccedil\xC7 Egrave\xC8 Eacute\xC9 Ecirc\xCA Euml\xCB Igrave\xCC Iacute\xCD Icirc\xCE Iuml\xCF ETH\xD0 Dstrok\xD0 Ntilde\xD1 Ograve\xD2 Oacute\xD3 Ocirc\xD4 Otilde\xD5 Ouml\xD6 times\xD7 Oslash\xD8 Ugrave\xD9 Uacute\xDA Ucirc\xDB Uuml\xDC Yacute\xDD THORN\xDE szlig\xDF agrave\xE0 aacute\xE1 acirc\xE2 atilde\xE3 auml\xE4 aring\xE5 aelig\xE6 ccedil\xE7 egrave\xE8 eacute\xE9 ecirc\xEA euml\xEB igrave\xEC iacute\xED icirc\xEE iuml\xEF eth\xF0 ntilde\xF1 ograve\xF2 oacute\xF3 ocirc\xF4 otilde\xF5 ouml\xF6 divide\xF7 oslash\xF8 ugrave\xF9 uacute\xFA ucirc\xFB uuml\xFC yacute\xFD thorn\xFE yuml\xFF ensp\x20 emsp\x20 thinsp\x20 zwnj\x20 zwj\x20 lrm\x20 rlm\x20 euro\x80 sbquo\x82 bdquo\x84 hellip\x85 dagger\x86 Dagger\x87 circ\x88 permil\x89 Scaron\x8A lsaquo\x8B OElig\x8C oelig\x8D lsquo\x91 rsquo\x92 ldquo\x93 rdquo\x94 ndash\x96 mdash\x97 tilde\x98 scaron\x9A rsaquo\x9B Yuml\x9F apos\x27}regsub -all -- {&lt;(.[^&gt;]*)&gt;} $data " " dataif {$eval != 1} {regsub -all -- {([\$\[\]\{\}\(\)\\])} $data {\\\1} data} else {regsub -all -- {([\$\[\]\{\}\(\)\\])} $data {\\\\\\\1} data}regsub -all -- {&amp;#(\d+);} $data {[subst -nocomm -novar [format \\\u%04x [scan \1 %d]]]} dataregsub -all -- {&amp;#x(\w+);} $data {[format %c [scan \1 %x]]} dataregsub -all -- {&amp;([0-9a-zA-Z#]*);} $data {[if {[catch {set tmp $chars(\1)} char] == 0} { set tmp }]} dataregsub -all -- {&amp;([0-9a-zA-Z#]*);} $data {[if {[catch {set tmp [string tolower $chars(\1)]} char] == 0} { set tmp }]} dataregsub -nocase -all -- "\\s{2,}" $data " " dataset data [subst $data]if {[incr loop] == 1} {set data [[namespace current]::html_decode 0 $data $loop]}return $data}proc ::rss-synd::is_utf8_patched {} { catch {queuesize a} err1; catch {queuesize \u0754} err2; expr {[string bytelength $err2]!=[string bytelength $err1]} }proc ::rss-synd::check_channel {chanlist chan} {foreach match [split $chanlist] {if {[string equal -nocase $match $chan]} {return 1}}return 0}proc ::rss-synd::urldecode {str} {regsub -all -- {([\"\$\[\]\{\}\(\)\\])} $str {\\\1} strregsub -all -- {%([aAbBcCdDeEfF0-9][aAbBcCdDeEfF0-9]);?} $str {[format %c [scan \1 %x]]} strreturn [subst $str]}::rss-synd::init</code></pre></div><div class="codebox"><p>Code: </p><pre><code>## Start of Settings### See the README file for more information#namespace eval ::rss-synd {variable rssvariable defaultset rss(slashdot) {"url""http://rss.slashdot.org/Slashdot/slashdot""channels""#LiveNews""database""/home/bot/eggdrop/scripts/feeds/slashdot.db""output""\\\[\002Slashdot\002\\\] @@item!title@@ (@@item!slash:section@@) - \[string map { \"&amp;from=rss\" \"\" } \"@@item!feedburner:origLink@@\"\]""trigger""!@@feedid@@""evaluate-tcl"0}#set rss(test1) {#"url""http://www.pheedo.com/f/newscientist_space/atom10"#"channels""#test"#"database""./scripts/feeds/test1.db"#"trigger""!@@feedid@@"#}#set rss(test2) {#"url""http://milw0rm.com/rss.php"#"channels""#test"#"database""./scripts/feeds/test2.db"#"trigger""!@@feedid@@"#}set rss(test3) {"url""http://www.kvirc.net/rss.php""channels""#LiveNews""database""scripts/feeds/test3.db""output""\[\002@@channel!title@@\002\] @@item!title@@ - @@item!guid@@""trigger""!@@feedid@@"}   set rss(news) {"url"           "http://news.google.com/news?pz=1&amp;cf=all&amp;ned=us&amp;hl=en&amp;topic=w&amp;output=rss""database"      "scripts/feeds/testgooglee.db""channels""#LiveNews"      "output"      "Latest News \017\00306\@@item!title@@ - \017\037\[regsub -- {^.*?\\&amp;url=} @@item!link@@ {}\]" "evaluate-tcl"1"announce-output"0"trigger-output"10"trigger"       "!@@feedid@@"   }set rss(reuters) {"url""http://feeds.reuters.com/news/reutersmedia""channels""#LiveNews""database""./scripts/feeds/test4.db""trigger""!@@feedid@@"}# Doesn't work with "charset" "utf-8" because TCL converts characters#  with umlauts in to multibyte characters (eg: ü = Ã¼). Works fine#  without.set rss(test5) {"url""http://www.heise.de/newsticker/heise-atom.xml""channels""#LiveNews""database""./scripts/feeds/test5.db""trigger""!@@feedid@@"}set rss(test6) {"url""http://news.google.ru/?output=rss""channels""#LiveNews""charset""utf-8""database""./scripts/feeds/test6.db""trigger""!@@feedid@@"}set rss(test7) {"url""http://news.google.cn/?output=rss""channels""#LiveNews""charset""utf-8""database""./scripts/feeds/test7.db""trigger""!@@feedid@@"}#set rss(test8) {#"url""http://news.google.it/?output=rss"#"channels""#test"#"charset""utf-8"#"database""./scripts/feeds/test8.db"#"trigger""!@@feedid@@"#}# The default settings, If any setting isn't set for an individual feed#   it'll use the defaults listed here.## WARNING: You can change the options here, but DO NOT REMOVE THEM, doing#   so will create errors.set default {"announce-output"3"trigger-output"3"remove-empty"1"trigger-type"0:2"announce-type"0"max-depth"5"evaluate-tcl"0"update-interval"5"output-order"0"timeout"60000"channels""#LiveNews""trigger""!rss @@feedid@@""output""\[\002@@channel!title@@@@title@@\002\] @@item!title@@@@entry!title@@ - @@item!link@@@@entry!link!=href@@""user-agent""Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"}}## End of Settings#################################################################################</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12454">PR0r</a> — Fri Feb 03, 2017 9:24 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[PR0r]]></name></author>
		<updated>2017-02-03T21:12:14-04:00</updated>

		<published>2017-02-03T21:12:14-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=105791#p105791</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=105791#p105791"/>
		<title type="html"><![CDATA[Rss-synd.tcl database feed problem]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=105791#p105791"><![CDATA[
This issue appears to be standard now. <img class="smilies" src="https://forum.eggheads.org/images/smilies/icon_sad.gif" width="15" height="15" alt=":(" title="Sad"><br>I'm using TCL 8.6 with Eggdrop 1.8 and have this exact issue.<br><br>At a guess, I would say that you started with..<br><br>RSS Warning: couldn't open "./scripts/feeds/&lt;name&gt;.db": no such file or directory.<br><br>Following that, attempting to make the &lt;name&gt;.db manually, resulting in your error:<br>RSS Error: Invalid feed database file format (./scripts/&lt;name&gt;.db)! <br><br>For me with the first "no such file or directory" also has a second error with it:<br>RSS Error: Unable to decompress "<a href="http://rss.slashdot.org/Slashdot/slashdot" class="postlink">http://rss.slashdot.org/Slashdot/slashdot</a>": zlib error (decompressor): invalid stored block lengths<br><br><br>There is a fix for the above zlib decompressor error: (changing the rss-synd.tcl file so use the built-in decompressing which was changed in TCL 8.6) but that appears to be broken too (well for me any way).<br><br>This is that fix if anyone is interested:<br>Changing the rss-synd.tcl by removing the # decompress gzip formatted data lines with the following<br><br># decompress gzip formatted data <br>proc ::rss-synd::feed_gzip {cdata} { <br>   return $cdata <br>}<br><br>I'd love any help too on getting this working.<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12454">PR0r</a> — Fri Feb 03, 2017 9:12 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[caesar]]></name></author>
		<updated>2017-02-02T12:52:03-04:00</updated>

		<published>2017-02-02T12:52:03-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=105788#p105788</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=105788#p105788"/>
		<title type="html"><![CDATA[Rss-synd.tcl database feed problem]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=105788#p105788"><![CDATA[
Share a link to the script to have a look then.<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=187">caesar</a> — Thu Feb 02, 2017 12:52 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[klejz0r]]></name></author>
		<updated>2017-02-02T09:30:27-04:00</updated>

		<published>2017-02-02T09:30:27-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=105787#p105787</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=105787#p105787"/>
		<title type="html"><![CDATA[Rss-synd.tcl database feed problem]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=105787#p105787"><![CDATA[
Still same...doesnt work..<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12671">klejz0r</a> — Thu Feb 02, 2017 9:30 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[caesar]]></name></author>
		<updated>2017-01-31T14:57:42-04:00</updated>

		<published>2017-01-31T14:57:42-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=105779#p105779</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=105779#p105779"/>
		<title type="html"><![CDATA[Rss-synd.tcl database feed problem]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=105779#p105779"><![CDATA[
Maybe drop the ./ ?<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=187">caesar</a> — Tue Jan 31, 2017 2:57 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[klejz0r]]></name></author>
		<updated>2017-01-31T11:39:28-04:00</updated>

		<published>2017-01-31T11:39:28-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=105778#p105778</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=105778#p105778"/>
		<title type="html"><![CDATA[Rss-synd.tcl database feed problem]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=105778#p105778"><![CDATA[
<div class="codebox"><p>Code: </p><pre><code># This is an example of a basic feed, If you dont understand why all#   the \'s are in the examples below use this one as a template.set rss(bbcworld) {"url""http://ircdnevnik.wordpress.com/feed""channels""#chat""database""./scripts/dnevnik.db""output""[\002BBC News\002] @@item!title@@ - @@item!guid@@""trigger""!news"}</code></pre></div> RSS Error: Invalid feed database file format (./scripts/dnevnik.db)!<br><br>Whats wrong there ? Please help. thanks<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=12671">klejz0r</a> — Tue Jan 31, 2017 11:39 am</p><hr />
]]></content>
	</entry>
	</feed>
