Eggdrop - Alle zeilen aus Externe txt ausgeben

#1
Hoi wertes Team,

Ich habe hier im Board das script gefunden:

Code:
package require http
bind pub - !test pub:x
proc pub:x {nick host hand chan text} {
    set url "http://test.letsbaron.de/test2.txt"
    set connection [http::config -useragent "Mozilla"]
    catch { set connection [http::geturl $url -timeout 10000] } error
        if {![string match -nocase "*::http::*" $error]} {
            putserv "PRIVMSG $chan :Fehler beim Verbinden!"
            return 0
        } else {
                set data [http::data $connection]
                http::cleanup $connection
                putserv "PRIVMSG $chan : $data"
         }
}
Es funzt auch soweit, nur möchte ich das gerne so anpassen das er nicht nur die erstezeile ausliest sondern die gesamte txt datei.
Es befinden sich zwischen 3-9 zeilen in der txt, jenachdem zuwelchen zeitpunkt sie abgerufen wird. hat da jemand nen anstoß dazu.
 

DJFelipe

Well-Known Member
c-b Experte
#2
Du liest derzeit den gesamten Inhalt, den du über http:data bekommst in eine Variable ein. Diesen gibst du per putserv weiter... Du hast aber natürlich einen LineFeed ("\n") und einen Carriage Return ("\r") am Ende jeder Zeile (Mag variieren.. manchmal nur \n und manchmal nur \r...) und genau deswegen siehst du nur die 1. Zeile, da nach dem ersten LineFeed der putserv natürlich abschliesst... der Rest geht hierbei ins Nirvana

Es gibt jetzt 2 Varianten, mit denen du arbeiten kannst..

Variante A)
Du splittest die Variable $data anhand des \r\n und gehst mit einer while durch, um jede Zeile zu posten.

Variante B)
Du speicherst die Variable $data temporär in einer Datei zwischen und liest sie dann aus
z.B.:
Code:
  set fs [open "/tmp/eggdrop_http_data" r]
  while {![eof $fs]} {
    gets $fs line
    putserv "PRIVMSG $chan :$line";
  }
  close $fs
Bleibt somit jetzt dir überlassen. Wie du in Variante A den String anhand des Zeichen splittest um ihn in einer while/foreach/whatever zu durchforsten, fällt mir derzeit leider nicht ein:rolleyes:
 
Oben