rendered paste body; Dancegeneration shoutcast script v1
; Made by Dani Nordli @ Nhost.no <dani@networld.no>
; Copyright @ 2012 - *
alias join {
var %chans $sorttok($1,44)
var %i $numtok(%chans,44)
while (%i) {
var %a $gettok(%chans,%i,44)
if ( $left(%a,1) != $chr(35) ) {
var %a $+($chr(35),$gettok(%a,%i,44))
if ( $me !ison %a ) { !join $+($chr(35),$gettok(%chans,%i,44)) }
}
elseif ( $me !ison %a ) { !join %a }
dec %i
}
}
on *:start:{
; Check update ? (http://login.nhost.no/~naka/dancegeneration.mrc) (.txt file to check version)
set %Main_Channel #nakenmusa
set %Admin_Channel #nakenmusa
set %Shoutcast_admins naka DG|Neowin
set %version v0.1
; DO NOT change this line, it's for !set command, used to change commands and other variables.
}
on *:text:*:#:{
if ( $chan == %Main_Channel ) && ( $left($1,1) == $chr(33) ) {
; Bitte lite antiflood API
if (!%AntiFlood) { set %AntiFlood 1 }
if ( %AntiFlood >= 5 ) { echo 4 -st ANTIFLOOD limit reached | .halt }
inc -u3 %AntiFlood 1
; Admins commands
; Adduser
if ( $1 == !adduser ) {
; Lage en API på admin-check senere (readini\hashtables)
if ($istok(%Shoutcast_admins,$nick,32)) {
if ( $2 ) {
set %Shoutcast_admins $addtok(%Shoutcast_admins,$2,32)
.msg $chan $2 er lagt til som admin
}
else { .msg $chan Bruk !adduser <nick> }
}
}
; Deluser
if ( $1 == !deluser ) {
; Lage en API på admin-check senere (readini\hashtables), Evt bare $address ?
if ($istok(%Shoutcast_admins,$nick,32)) {
if ( $2 ) {
if ( $istok(%Shoutcast_admins,$2,32) ) {
set %Shoutcast_admins $remtok(%Shoutcast_admins,$2,32)
.msg $chan $2 er fjernet som admin
}
else { .msg $chan $2 Er ikke lagt til som admin, kan ikke fjerne :( }
else { .msg $chan Bruk !deluser <nick> }
}
}
}
if ( $1 == !set ) {
; Lage en API på admin-check senere (readini\hashtables), Evt bare $address ?
if ($istok(%Shoutcast_admins,$nick,32)) {
if ( $istok(%SetVars,$2,32) ) {
if ( $3 ) {
if ( $left($2,3) == CMD ) {
var %s 1
while ($gettok($3-,%s,32)) {
if ( $left($gettok($3-,%s,32),1) != $chr(33) ) { var %tmp $+(%tmp,$chr(32),$+($chr(33),$gettok($3-,%s,32))) }
else { var %tmp $+(%tmp,$chr(32),$gettok($3-,%s,32)) }
inc %s
}
}
else { var %tmp $3- }
set $+($chr(37),$2) %tmp
.msg $chan Satt $2 til %tmp
}
else { .msg $chan Bruk !set <v1> <v2> | .msg $chan Mulige variabler er: %SetVars }
}
else { .msg $chan Bruk !set <v1> <v2> | .msg $chan Mulige variabler er: %SetVars }
}
}
if ( $istok(%CMD_BCAST,$lower($1),32) ) {
if ( $istok(%Shoutcast_admins,$nick,32) ) { .msg %Main_Channel [Broadcast] $2- }
}
; Users
; TODO
; !radio-dj,
; !SoundCloud
; !kickdj, !setdj, !unset-dj ( Change of topic ( &topic == %topic in !set ? :) )
; !info??? Status,song,dj,etc?
;
; Admin cmds: !broadcast
; FNISHED
; - !rules, !hp, !Request
; user commands
if ( $istok(%CMD_Help,$lower($1),32) ) {
if ($istok(%Shoutcast_admins,$nick,32)) { .msg $chan ADMIN: %CMDS_Admin }
.msg $chan USERS %CMDS_User
}
if ( $istok(%CMD_Song,$lower($1),32) ) { ShoutUpdate song $chan $nick }
if ( $istok(%CMD_Listeners,$lower($1),32) ) { ShoutUpdate listeners $chan $nick }
if ( $istok(%CMD_HP,$lower($1),32) ) { .msg $chan %HomePage }
if ( $istok(%CMD_Rules,$lower($1),32) ) { .msg $chan %Rules }
if ( $istok(%CMD_FB,$lower($1),32) ) { .msg $chan %FBPage }
if ( $istok(%CMD_TW,$lower($1),32) ) { .msg $chan %TWPage }
if ( $istok(%CMD_Listen,$lower($1),32) ) { .msg $chan $replace(%listen,&listenpage,$+(http://,$ShoutINFO(host),:,$ShoutINFO(port),/listen.pls?sid=1)) }
if ( $istok(%CMD_Request,$lower($1),32) ) {
if ( $2 ) {
.msg %Admin_Channel Ønske: $+($chr(91),$nick,$chr(93)) ønsker å høre: $+($chr(40),$2-,$chr(41))
.msg $chan Ditt ønske er nå notert.
}
else { .msg $chan Du må bruke %CMD_Request <Låta> [Grunnen] }
}
}
}
alias ShoutINFO {
if ($isid) {
if ($1 == user) { return admin }
if ($1 == pass) { return d4nc3g3n3r4t10n }
if ($1 == host) { return 91.221.130.136 }
if ($1 == port) { return 8000 }
if ($1 == GET) { return /admin.cgi?sid=1&mode=viewxml }
if ($1 == keys) { return CURRENTLISTENERS;PEAKLISTENERS;MAXLISTENERS;REPORTEDLISTENERS;AVERAGETIME;SERVERGENRE;SERVERURL;SERVERTITLE;SONGTITLE;SONGURL;IRC;ICQ;AIM;WEBHITS;STREAMHITS;STREAMSTATUS;BITRATE;CONTENT;VERSION;INDEX;LISTEN;PALM7;LOGIN;LOGINFAIL;PLAYED;ADMIN;UPDINFO }
}
}
alias ShoutUpdate {
set -u10 %ShoutCMD $1 $chan $nick
sockclose radio
sockopen radio $ShoutINFO(host) $ShoutINFO(port)
}
on *:sockopen:radio:{
sockwrite -n $sockname GET $ShoutINFO(GET) HTTP/1.1
sockwrite -n $sockname Authorization: Basic $encode($+($ShoutINFO(user),:,$ShoutINFO(pass)),m)
sockwrite -n $sockname Referer: $+(http://,$ShoutINFO(host),:,$ShoutINFO(port))
sockwrite -n $sockname User-Agent: Chrome/1.0
sockwrite -n $sockname Host: $+($ShoutINFO(host),:,$ShoutINFO(port))
sockwrite -n $sockname Connection: Keep-Alive $+ $str($crlf,2)
}
on *:sockread:radio: {
if ($sockerr > 0) return
:nextread | sockread -f %temp
if ($sockbr == 0) return
var %MaxLen = 900 | dec %MaxLen $len(%BackBuffer)
var %Srch = $+(%BackBuffer,$mid(%temp,1,%MaxLen))
inc %MaxLen | var %BackBuffer = $mid(%temp,%MaxLen)
var %match = $regex(ShoutData,%Srch,/<(\w+?)>(.*?)<\/\1?>/msg)
var %x = 0 , %y = 1 | while (%x < %match) { inc %x
if ($istok($ShoutINFO(keys),$regml(ShoutData,%y),59)) {
echo 3 -st DEBUG: $regml(ShoutData,%y) >-< $regml(ShoutData,$calc(%y + 1))
; ShoutSong_CMD v1 $chan $nick
; !song
if ( $regml(ShoutData,%y) == SONGTITLE ) && ( $gettok(%ShoutCMD,1,32) == song ) { .msg $gettok(%ShoutSong_CMD,1,32) Song: $regml(ShoutData,$calc(%y + 1)) }
; !lyttere
if ( $regml(ShoutData,%y) == CURRENTLISTENERS ) && ( $gettok(%ShoutCMD,1,32) == listeners ) { set -u3 %shout_tmp_listeners $regml(ShoutData,$calc(%y + 1)) }
if ( $regml(ShoutData,%y) == PEAKLISTENERS ) && ( $gettok(%ShoutCMD,1,32) == listeners ) { set -u3 %shout_tmp_listpeak $regml(ShoutData,$calc(%y + 1)) }
if ( $regml(ShoutData,%y) == MAXLISTENERS ) && ( $gettok(%ShoutCMD,1,32) == listeners ) {
set -u3 %shout_tmp_listmax $regml(ShoutData,$calc(%y + 1))
.msg $gettok(%ShoutSong_CMD,1,32) Lyttere: Currently listeners: $+($chr(40),%shout_tmp_listeners,/,%shout_tmp_listmax,$chr(41)) with a peak on $+($chr(40),%shout_tmp_listpeak,$chr(41))
}
}
inc %y 2
}
%match = $regsub(%temp,/<(\w+?)>.*?<\/\1?>/g,$null,%temp)
if (%temp) {
var %match = $regsub(%temp,/<\?[^>]>/g,$null,%temp)
var %match = $regsub(%temp,/<\![^>]>/g,$null,%temp)
%BackBuffer = $+(%BackBuffer,%temp)
}
goto nextread
}