Administrators chain Posted November 13, 2022 Administrators Report Share Posted November 13, 2022 Now Playing script for internet radio stations. It uses a SHOUTcast admin page for a given station. Just Played. Will show up to the last 9 songs played on the given station. Commands: !np or !nowplaying will show current song !np [station name] [c,count,l,listner] Shows current listner count. !np [station name] url will show the url of said site. !np [station name] status will show the current status of the stream [Online or Offline] !jp or !justplayed or !lp or !lastplayed will show previous 3 songs !jp [1-9] will show previous 1 or up to 9 previous songs. Default settings allow normal/voice to call up to 5 previous songs. Op/Owners can call up all 9 previous songs. Flood protection is added in to keep a user from calling up the history list more than once in a short period of time. !np [help] Code may look long and complicated, I just have added a lot of notes and comments for future modifications and so I remember what I did. 2012-05-08 - v2.1 Original creation Released to the public. 2012-05-24 - v3.0 Released. Merged personal Just playing script with Now Playing script to create a full feature script. See bottom of script for Version history ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Now Playing ;;;;;;;;;;;;via SHOUTcast ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;ft JustPlayed;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eqrunner;;;;;;;;;;;;v 3.0;;;;;;;;;;;;;;;;;;;;; /* !nowplaying !nowplaying [station name] [s|c|L] !nowplaying [help|?] !justplayed !justplayed [1-9] */ ;alias np { on $*:TEXT:/^[!](nowplaying|np|justplayed|jp|justheard|lastplayed|lastplay|lp|previous|previousplay|previousplayed|history|played)/Si:#:{ ;=== Set up the station Information: === set %np_station SHOUTdrive set %np_ip sanjose.oontz.shoutdrive.com set %np_port 80 set %np_url http://www.shoutdrive.com ;=== End station Information === ; === Nothing below needs to be modified, unless you wish to modify the output, in which case, go down to the sockclose alias. === set %np_nick $nick set %np_chan $chan set %np_network $network ;-- Merges multiple commands down to two commands !nowplaying and !justplayed --; ;- Nowplaying merge var %np_np_list !nowplaying !np if ($1 isin %np_np_list) set %np_command !nowplaying ;- Justplayed merge var %np_jp_list !justplayed !jp !justheard !lastplayed !lastplay !lp !previous !previousplay !previousplayed !played !history if ($1 isin %np_jp_list) set %np_command !justplayed ;--- Help Parameters if ($2 == ?) || ($2 == help) { nowplaying_help | halt } ;--- !nowplaying Parameters --- if (%np_command == !nowplaying) { set %np_sock_GET /7.html HTTP/1.0 } ;--- Variable $3 Parameters --- if ($3 != $null) { if ($3 == s) || ($3 == status) set %np_3 status if ($3 == url) set %np_3 url if ($3 == c) || ($3 == count) || ($3 == listner) || ($3 == l) set %np_3 count } ;--- !justplayed Parameters --- ;- Limits voice and normal to only seeing a max of 5. Allows OPS a max of 10 -- ;-- Helps prevent standard user flooding ;- IF no number is givin, then set to the default amount of 3 if (%np_command == !justplayed) { set %np_sock_GET /played.html HTTP/1.0 if ($2 isnum 1-9) { var %np_oplist isop ishop isowner if (%np_nick isop %np_chan) || (%np_nick isowner %np_chan) { set %np_2 $2 } if (%np_nick isvoice %np_chan) || (%np_nick isreg %np_chan) { if ($2 > 5) { set %np_2 5 } if ($2 <= 5) { set %np_2 $2 } } } if ($2 == $null) { set %np_2 3 } } ;--- Flood Protection if (%np_command == !justplayed) && (%npdelay > 0) { .notice $nick Previous songs already listed. See above. | unset %np_* | halt } ;--- Socket Preperation sockclose nowplaying sockopen nowplaying %np_ip %np_port } ;========== SOCK OPEN ========== on *:SOCKOPEN:nowplaying:{ sockwrite -n $sockname GET %np_sock_GET sockwrite -n $sockname User-Agent: Mozilla sockwrite -n $sockname $crlf } ;========== SOCK READ ========== on *:sockread:nowplaying:{ ;--- !nowplaying Sock Read ---- if (%np_command == !nowplaying) { if ($sockerr > 0) { notice %np_nick %tegn.1 $+ %radio.navn $+ %tegn.2 %tegn.midt %tegn.1 Stream Is Offline %tegn.2 NOTE1 return } :nextread sockread -f %scasttemp1 if ($sockbr == 0) return if (%scasttemp1 == $null) %scasttemp1 = empty set %scasttemp1 $remove(%scasttemp1,<HTML><meta http-equiv="Pragma" content="no-cache"></head><body>,</body></html>) if ((HTTP/1.* !iswm %scasttemp1) && (content-type* !iswm %scasttemp1) && (%scasttemp1 != empty)) { set %np_listeners1 $gettok(%scasttemp1,1,44) set %np_status1 $gettok(%scasttemp1,2,44) set %np_peak1 $gettok(%scasttemp1,3,44) set %np_max1 $gettok(%scasttemp1,4,44) set %np_ulistners1 $gettok(%scasttemp1,5,44) set %np_kbps $gettok(%scasttemp1,6,44) set %np_asong1 $gettok(%scasttemp1,7-,44) set %np_song1 $replace(%np_asong1,&,$chr(38),',$chr(39)) } goto nextread } ;--- !justplayed Sock Read ---- if (%np_command == !justplayed) { sockread -f %jp_temp if ($regex(%jp_temp,/(?i)<td>(.+)<\/td>/)) { ;echo -s $regml(1) ;--- Strips down the code /* Strips down the code down to the needed info with § seperators to be used by the $gettok. Yes, I could of combined this in to one or two lines. But I kept it seperate to help keep it understandable and easy to trouble shoot. -Removes all close tags in the code </*> -Removes all <tr> and <b> tags from the code -Replaces all <td> and <br> with § character -Counts total § characters to be referenced below in the while loop. */ var %jp_stripped $regsubex($regml(1),/</[^>]*>/g,$chr(0)) var %jp_stripped $replace(%jp_stripped,<tr>,$chr(0),<b>,$chr(0)) var %jp_stripped $replace(%jp_stripped,<td>,$chr(167),<br>,$chr(167)) set %jp_167count $count(%jp_stripped,$chr(167)) ;----Sets the first song (current song) /* Have to as the 'Current song' at the end, screws up the count for the remainder. (Song 1 time and song is at 3 and 4 (odd then even), as the rest are at 6 and 7 (even than odd) */ set %jp_time1 $gettok(%jp_stripped,3,167) set %jp_song1 $gettok(%jp_stripped,4,167) var %jp_line_var = 6 var %jp_songline_var = 2 ;---Sets the remainder of the songs, plus extra junk. /* =While the line_var is less than the total number of § characters -Sets the time variable -Increases the token count number -Sets the Song Varible -Increases the token count and song line count */ while (%jp_line_var < %jp_167count) { set $+(%,jp_time,%jp_songline_var) $gettok(%jp_stripped,%jp_line_var,167) inc %jp_line_var set $+(%,jp_song,%jp_songline_var) $gettok(%jp_stripped,%jp_line_var,167) inc %jp_line_var inc %jp_songline_var } ;set %jp_stripped3 $regsubex($regml(1),/§[^>]*§/g,$chr(167)) } } } ;========== SOCK CLOSE ========== on *:sockclose:nowplaying:{ ;=== Station Fail ==== ;-- If station is offline then: if (%np_status1 == 0) { msg %np_chan %np_station $+ : Stream Is Offline goto np_end } ;=== User had added a 3rd parameter to their message. Aka !nowplaying [station] [s,status,url,c,count,listern] ;-- If user has added an S or Status as the 3rd parameter. Then the status of station will show. if (%np_3 == status) { if (%np_status1 == 0) { var %np_status2 = Offline } elseif (%np_status1 == 1) { var %np_status2 = Online } msg %np_chan %np_station Status: %np_status2 ;msg %np_chan %np_station Status: %np_status2 $chr(124) Listeners: %np_listeners1 $chr(124) Peak: %np_peak1 $chr(124) Limit: $+ %np_max1 $chr(124) Stream: $+ %np_kbps $+ kbps } ;-- If user has URL as 3rd parameter, then url of site will show. if (%np_3 == url) { msg %np_chan %np_station $+ : %np_url } ;-- If user has C, Count, or L, then listener count will show. if (%np_3 == count) { msg %np_chan %np_station listener count: %np_listeners1 ( %np_ulistners1 unique ) } ;-- IF user has only asked for !np, or !np [station], then the current song will show. if (%np_3 == $null) { ;--- IF !nowplaying if (%np_command == !nowplaying) { msg %np_chan %np_station $+ : %np_song1 } ;--- IF !justplayed if (%np_command == !justplayed) { inc -z %npdelay $calc(%np_2 * 10) var %jp_t = 1 var %jp_list2_var = 2 while (%jp_t <= %np_2) { .timer 1 %jp_t msg %np_chan %jp_list_var : $($+(%,jp_time,%jp_list2_var),2) : $($+(%,jp_song,%jp_list2_var),2) inc %jp_t inc %jp_list2_var } } } :np_end unset %np_* unset %jp_* } ;============================ ;=== Help Section =========== ;============================ alias nowplaying_help { .timer 1 0 .msg %np_nick --- Now Playing HELP --- .timer 1 1 .msg %np_nick Use command: !nowplaying to see what is currently playing. .timer 1 3 .msg %np_nick Use commands: !justplayed or !lastplayed to see the previous 3 songs .timer 1 4 .msg %np_nick You can add a number on the end to see a specific amount of previous songs. Limit 5 for users, 10 for ops .timer 1 5 .msg %np_nick EX: !justplayed 5 = will give you previous 5 songs. .timer 1 6 .msg %np_nick --- END of Now Playing Help --- %np_tunage_cleanup } /* ==================================== v 2.1 Released to public. Fully working Nowplaying v 3.0 Rewrittin, Now includes Playlist history and HELP ==================================== Notes: Two actions read from seperate pages, but use the same common SOCKOPEN/SOCKREAD. !nowplaying GET's from /7.html !justplayed GET's from /playe Quote Link to comment Share on other sites More sharing options...