Hi, all.
I'm a full-time (NOVICE) Linux user here at home on my laptop, and I'm also just setting up my first botnet ever.
I have been looking since the beginning for a GOOD RSS announcer for my channels, mainly because the bots will be in a "Canadian Deals" channel, which we have a working RSS feed for.
I have all appropriate modules installed, and get NO error messages when I load up the rssnews.tcl , and thought that I had properly configured the thing; but it is not announcing anything at all publically in the channel. The Eggdrops are version 1.6.17.
Here is EXACTLY the rssnews.tcl I am using:
Code: Select all
#######################################################################
# #
# rssnews.tcl - RSS news announcer for eggdrop by demond@demond.net #
# #
# this will announce the updated news from RSS feed(s), #
# periodically polling the feed(s); supports multiple #
# channels, one feed per channel; you only need to set #
# the feeds array, see below #
# #
# Usage: !rss <news#|*> (read news# or * for headlines list) #
# #
#######################################################################
package require Tcl 8.3
package require eggdrop 1.6
package require http 2.0
namespace eval rssnews {
# set your feed(s) sources here: channel, poll frequency in mins, feed URL
#
set feeds(#splintercell) {5 http://www.******.nl/rss/rss_all.xml}
set feeds(#sPlintercell) {5 http://www.redflagdeals.com/deals/main.php/weblog/rss_atom}
#set feeds(#chan1) {17 http://www.osnews.com/files/recent.rdf}
#set feeds(#chan2) {11 http://news.google.com/news?ned=us&topic=h&output=rss}
#
# if you have to use password-protected feed, set it up like this:
# (requires base64 package from TclLib)
#
#set feeds(#chan3) {13 http://some.site.com/feed username password}
# maximum number of announced new headlines
#
variable maxnew 15
# feed fetch timeout in seconds
#
variable timeout 50
# public trigger flood settings
#
variable pubflud 8:15
# support SSL feeds (requires TLS package)
#
variable usessl 0
# if usessl is 1, request/require valid certificate from server
#
variable reqcert yes:no
#######################################################################
# nothing to edit below
variable version "rssnews-1.6"
if {[info exists feeds]} {
foreach {foo bar} [array get feeds] {
if {[llength $bar] > 2} {package require base64; break}
}}
if {$usessl} {
package require tls 1.5
scan $reqcert {%[^:]:%s} r1 r2
if {$r1 == "yes"} {set r1 1} {set r1 0}
if {$r2 == "yes"} {set r2 1} {set r2 0}
set ssl [list ::tls::socket -request $r1 -require $r2]
::http::register https 443 $ssl
}
bind pub - !rss [namespace current]::news
bind time - * [namespace current]::timer
putlog "$version by demond loaded"
proc timer {min hour day month year} {
variable feeds
if {[info exists feeds]} {
if {$min} {set min [string trimleft $min 0]}
foreach {chan feed} [array get feeds] {
if {$min && $min % [lindex $feed 0] == 0} {
if {[llength $feed] > 2} {
foreach {t url user pass} $feed {break}
fetch $url $chan $user $pass
} {
foreach {t url} $feed {break}
fetch $url $chan
}
}
}}
}
proc fetch {url chan args} {
variable timeout
variable version; variable token
set to [expr {$timeout * 1000}]
set cmd [namespace current]::callback
if {[llength $args] > 0} {
foreach {user pass} $args {break}
set hdr [list Authorization "Basic [::base64::encode $user:$pass]"]
} { set hdr {}}
::http::config -useragent "$version by demond"
if {[catch {set t [::http::geturl $url -command $cmd -timeout $to -headers $hdr]} err]} {
putlog "$version: ERROR($chan): $err"
} {
set token($t) $chan
}
}
proc callback {t} {
variable version; variable token
set chan $token($t)
switch -exact [::http::status $t] {
"timeout" {
putlog "$version: ERROR($chan): timeout"
}
"error" {
putlog "$version: ERROR($chan): [::http::error $t]"
}
"ok" {
if {[::http::ncode $t] != 200} {
putlog "$version: ERROR($chan): [::http::code $t]"
} {
process [::http::data $t] $chan
}
}
default {
putlog "$version: ERROR($chan): got EOF from socket"
}}
::http::cleanup $t
}
proc process {data chan} {
variable news; variable hash
variable maxnew; variable source
set idx 1; set count 0
set news($chan) {}; set source($chan) ""
if {[regexp {(?i)<title>(.*?)</title>} $data -> foo]} {
append source($chan) $foo
}
if {[regexp {(?i)<description>(.*?)</description>} $data -> foo]} {
append source($chan) " | $foo"
}
regsub -all {(?i)<items.*?>.*?</items>} $data {} data
foreach {foo item} [regexp -all -inline {(?i)<item.*?>(.*?)</item>} $data] {
regexp {(?i)<title.*?>(.*?)</title>} $item -> title
regexp {(?i)<link.*?>(.*?)</link} $item -> link
regexp {(?i)<desc.*?>(.*?)</desc.*?>} $item -> descr
if {![info exists title]} {set title "(none)"}
if {![info exists link]} {set link "(none)"}
if {![info exists descr]} {set descr "(none)"}
strip title link descr
if {[info exists hash($chan)]} {
if {[lsearch -exact $hash($chan) [md5 $title]] == -1 && [botonchan $chan]} {
if {$count < $maxnew} {
puthelp "privmsg $chan :($idx) $title"
incr count
} {
lappend indices $idx
}
}}
lappend news($chan) [list $title $link $descr]
lappend hashes [md5 $title]
incr idx
}
if {[info exists indices] && [botonchan $chan]} {
set count [llength $indices]
set indices "(indices: [join $indices {, }])"
puthelp "privmsg $chan :...and $count more $indices"
}
set hash($chan) $hashes
}
proc strip {args} {
variable html
foreach a $args {
upvar $a x
set amp {& &}
set x [string map $amp $x]
set x [string map $html $x]
while {[regexp -indices {(&#[0-9]{1,3};)} $x -> idxs]} {
set b [lindex $idxs 0]; set e [lindex $idxs 1]
set num [string range $x [expr {$b+2}] [expr {$e-1}]]
if {$num < 256} {
set x [string replace $x $b $e [format %c $num]]
}
}
regexp {(?i)<!\[CDATA\[(.*?)\]\]>} $x -> x
regsub -all {(?i)</t[dr]><t[dr].*?>} $x { | } x
regsub -all {(?i)(<p>|<br>|\n)} $x { } x
regsub -all {<[^<]+?>} $x {} x
}
}
proc news {nick uhost hand chan text} {
variable source
variable news; variable feeds
variable pcount; variable pubflud
if {[info exists pcount]} {
set n [lindex $pcount 1]; incr n
set ts [lindex $pcount 0]
set pcount [list $ts $n]
scan $pubflud {%[^:]:%s} maxr maxt
if {$n >= $maxr} {
if {[unixtime] - $ts <= $maxt} {return}
set n 1; set ts [unixtime]
}
} {
set n 1; set ts [unixtime]
}
set pcount [list $ts $n]
set num [lindex [split $text] 0]
if {$num == ""} {
puthelp "notice $nick :Usage: $::lastbind <news#|*>"
return
}
if {$num != "*" && ![string is integer $num]} {
puthelp "notice $nick :argument must be number or *"
return
}
if {![info exists news($chan)]} {
puthelp "notice $nick :no news for this channel"
return
}
if {$num == "*"} {
set idx 1
if {$source($chan) != ""} {
set title $source($chan)
} {
set title [lindex $feeds($chan) 1]
}
puthelp "notice $nick :News source: \002$title\002"
foreach item $news($chan) {
puthelp "notice $nick :($idx) [lindex $item 0]"
incr idx
}
return 1
} {
if {$num < 1 || $num > [llength $news($chan)]} {
puthelp "notice $nick :no such news index, try $::lastbind *"
} {
set idx [expr {$num-1}]
puthelp "notice $nick :......title($num): [lindex [lindex $news($chan) $idx] 0]"
puthelp "notice $nick :description($num): [lindex [lindex $news($chan) $idx] 2]"
puthelp "notice $nick :.......link($num): [lindex [lindex $news($chan) $idx] 1]"
return 1
}}
}
variable html {
" \x22 ' \x27 & \x26 < \x3C
> \x3E \x20 ¡ \xA1 ¤ \xA4
¢ \xA2 £ \xA3 ¥ \xA5 ¦ \xA6
§ \xA7 ¨ \xA8 © \xA9 ª \xAA
« \xAB ¬ \xAC \xAD ® \xAE
¯ \xAF ° \xB0 ± \xB1 ² \xB2
³ \xB3 ´ \xB4 µ \xB5 ¶ \xB6
· \xB7 ¸ \xB8 ¹ \xB9 º \xBA
» \xBB ¼ \xBC ½ \xBD ¾ \xBE
¿ \xBF × \xD7 ÷ \xF7 À \xC0
Á \xC1 Â \xC2 Ã \xC3 Ä \xC4
Å \xC5 Æ \xC6 Ç \xC7 È \xC8
É \xC9 Ê \xCA Ë \xCB Ì \xCC
Í \xCD Î \xCE Ï \xCF Ð \xD0
Ñ \xD1 Ò \xD2 Ó \xD3 Ô \xD4
Õ \xD5 Ö \xD6 Ø \xD8 Ù \xD9
Ú \xDA Û \xDB Ü \xDC Ý \xDD
Þ \xDE ß \xDF à \xE0 á \xE1
â \xE2 ã \xE3 ä \xE4 å \xE5
æ \xE6 ç \xE7 è \xE8 é \xE9
ê \xEA ë \xEB ì \xEC í \xED
î \xEE ï \xEF ð \xF0 ñ \xF1
ò \xF2 ó \xF3 ô \xF4 õ \xF5
ö \xF6 ø \xF8 ù \xF9 ú \xFA
û \xFB ü \xFC ý \xFD þ \xFE
ÿ \xFF
}
}
Now, I have had the tcl loaded for over 3 hours, and haven't seen a single thing appear publically in the channel.
If I say "!rss *" in the actual channel, then it /notice's me 10 results (Without HTTP links to the articles also I should add, something I would like to have if possible) but doesn't say a peep in the channel.
I know the feeds are being updated because I get all kinds of new articles in my Akgregator (KDE RSS Reader).
When the bot loads, I see:
<duckdown> .rehash
<chlorate> [14:05] #duckdown# rehash
<chlorate> Rehashing.
<chlorate> [14:05] Writing user file...
<chlorate> [14:05] Writing channel file...
<chlorate> [14:05] Rehashing ...
<chlorate> [14:05] Listening at telnet port ***** (all).
<chlorate> [14:05] BotNet Commands v1.1 MrHat_ (
mrhat@thepentagon.com EFNet: #SouthPark, #Freedows) loaded
<chlorate> [14:05] Userinfo TCL v1.07 loaded (URL BF GF IRL EMAIL DOB PHONE ICQ).
<chlorate> [14:05] use '.help userinfo' for commands.
<chlorate> [14:05] loaded netops.tcl v1.3 by cucgod
<chlorate> [14:05] rssnews-1.6 by demond loaded
<chlorate> [14:05] Userfile loaded, unpacking...
So I don't spot anything wrong as far as that goes, and as I said, the !rss command is able to display 10 basic results...
Maybe I'm not looking in the right place; or did I do something wrong inside the .tcl ?
I'm on EFnet under the nick 'duckdown' and I'd be more than happy to let you fool around with the bots; they aren't doing anything yet but I'd really like to get these going..
Cheers all, thanks for your time!