All pastes #2124714 Raw Edit

Unnamed

public text v1 · immutable
#2124714 ·published 2012-03-05 23:30 UTC
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
}