Das hier aufgeführte Script liefert die Titelinformationen nach Aufruf eines Triggers – !song – in den IRC-Channel zurück. Um mit dem Shoutcast-Server zu kommunizieren, werden jedoch einige Daten gebraucht. Zu diesen zählen unter anderem die Adresse des Servers, der Port und das Passwort. Diese bilden dann schon die Grundkonfiguration des Scriptes.

1
2
3
4
5
6
7
8
9
10
11
###### config
# radiochan     => IRC-Channel des Radios
# streamip      => IP des Radioservers
# streamport    => Port des Radiostreams
# streampass    => Adminpasswort des Radiostreams
# songurl       => Webadresse des Radios
set radiochan   "#channel"
set streamip    "radioserver.de"
set streamport  "port"
set streampass  "passwort"
set songurl     "http://dein-radio.de"

Um nun den Trigger zu erkennen, benötigt das Script noch ein Binding. Da dieser Trigger im Channel und nicht in einem Query zum Bot erfolgt, sollte dieses Binding „public“, also öffentlich sein.

1
2
3
###### Bindungs
# bind modus - trigger funktion
bind pub - !song pub_song

Die durch das Binding aufgerufene Funktion – in diesem Fall „pub_song“ – liest dann die Daten vom Shoutcast-Server aus und postet das Ergebnis in dem Chat des Radios.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
###### Funktionen
proc shrink {calc number string start bl} {
    return [expr [string first "$string" $bl $start] $calc $number]
}

# Ausgabe des aktuell laufenden Songs.

# Dies wird durch !song getriggert.
proc pub_song {nick uhost hand chan arg} {
    global no_bots streamip streamport streampass

    foreach ch $no_bots {
        if {[string tolower $chan] == $ch} {
            return 0
        }
    }

    if {[catch {set sock [socket $streamip $streamport] } sockerror]} {
        putlog "error: $sockerror"

        putchan $chan "Es tut mir leid, ich kann den Server nicht erreichen."

        return 0
    } else {
        puts $sock "GET /admin.cgi?pass=$streampass&mode=viewxml&page=0 HTTP/1.0"
        puts $sock "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9)"
        puts $sock "Host: $streamip"
        puts $sock "Connection: close"
        puts $sock ""

        flush $sock

        while {[eof $sock] != 1} {
            set bl [gets $sock]

            if {[string first "standalone" $bl] != -1} {
                set streamstatus [string range $bl [shrink + 14 "<STREAMSTATUS>" 0 $bl] [shrink - 1 "</STREAMSTATUS>" 0 $bl]]
                set songtitle [string range $bl [shrink + 11 "<SONGTITLE" 0 $bl] [shrink - 1 "</SONGTITLE>" 0 $bl]]
                set songurl [string range $bl [shrink + 9 "<SONGURL>" 0 $bl] [shrink - 1 "</SONGURL>" 0 $bl]]

                if {$songurl != ""} {
                    set songurl " ($songurl)"
                }

                if {$streamstatus == 1} {
                    putchan $chan "Im Moment hörst Du: \00304 $songtitle \003 $songurl"
                } else {
                    putchan $chan "Es tut mir leid, bei der Abfrage ist ein Fehler aufgetreten."
                }
            }
        }

        close $sock
    }
}

Viel Spaß damit :-)

Schreibe einen Kommentar

Ihre Email-Adresse wird nicht veröffentlicht. Pflichtfelder sind durch * markiert.

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>