; Dancegeneration shoutcast script v1 ; Made by Dani Nordli @ Nhost.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 } } } ; 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 } } } } 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 | .msg $chan Mulige variabler er: %SetVars } } else { .msg $chan Bruk !set | .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 [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 }