Announces when twitch or hitbox streams go live
Requires this script to work http://www.mircscripts.org/showdoc.php?type=code&id=4407
Start announcer with .announce on
Add stream with .addstream twitch.tv/channelname
Remove stream with .delstream hitbox.tv/channelname
Get a list of added streams with .liststreams
Get a list of currently live streams with number of viewers with .streams
Get a the a list of the top10 streamers of a specific game with .topstreams starcraft II (only works on twitch)
Get information about a specific channel with .chaninfo hitbox.tv/channelname
Works with multiple ircchannels.
Enjoy and please report any bugs you may find.
on *:TEXT:*:#: {
if ($nick isop #) {
if ($1 == .announce) {
if ($2 == off) {
timerstreamannouncer off
describe # Announcer deactivated.
}
elseif ($2 == on) {
timerstreamannouncer 0 30 streamannouncer
describe # Announcer activated.
}
else {
if ($timer(streamannouncer)) {
describe # Checking api in $timer(streamannouncer).secs seconds.
}
else { describe # Announcer not active. }
}
}
if ($1 == .addstream) && ($2) {
var %kanal = $remove($2,http://,https://)
if ($left(%kanal,9) == twitch.tv) {
var %kanal = $remove(%kanal,twitch.tv/)
if ($istok($readini(streams.ini,streams,%kanal),#,59)) { describe # %kanal is already added. | halt }
writeini streams.ini streams %kanal $addtok($readini(streams.ini,streams,%kanal),#,59)
describe # %kanal added.
if ($timer(streamannouncer).secs > 5) {
streamannouncer
timerstreamannouncer 0 30 streamannouncer
}
}
elseif ($left(%kanal,9) == hitbox.tv) {
var %kanal = $remove(%kanal,hitbox.tv/)
if ($istok($readini(streams.ini,hitboxstreams,%kanal),#,59)) { describe # %kanal is already added. | halt }
writeini streams.ini hitboxstreams %kanal $addtok($readini(streams.ini,hitboxstreams,%kanal),#,59)
describe # %kanal added.
if ($timer(streamannouncer).secs > 5) {
streamannouncer
timerstreamannouncer 0 30 streamannouncer
}
}
else {
describe # Example: .addstream twitch.tv/channel or .addstream hitbox.tv/channel
}
}
if ($1 == .delstream) && ($2) {
var %kanal = $remove($2,http://,https://)
if ($left(%kanal,9) == twitch.tv) {
var %kanal = $remove(%kanal,twitch.tv/)
if (!$istok($readini(streams.ini,streams,%kanal),#,59)) { describe # %kanal is not added. | halt }
var %numtok = $findtok($readini(streams.ini,streams,%kanal),#,1,59)
if (%numtok == 1) {
remini streams.ini streams %kanal
remini streams.ini viewers %kanal
}
else {
writeini streams.ini streams %kanal $deltok($readini(streams.ini,streams,%kanal),%numtok,59)
}
describe # %kanal removed.
}
elseif ($left(%kanal,9) == hitbox.tv) {
var %kanal = $remove(%kanal,hitbox.tv/)
if (!$istok($readini(streams.ini,hitboxstreams,%kanal),#,59)) { describe # %kanal is not added. | halt }
var %numtok = $findtok($readini(streams.ini,hitboxstreams,%kanal),#,1,59)
if (%numtok == 1) {
remini streams.ini hitboxstreams %kanal
remini streams.ini hitboxviewers %kanal
}
else {
writeini streams.ini hitboxstreams %kanal $deltok($readini(streams.ini,hitboxstreams,%kanal),%numtok,59)
}
describe # %kanal removed.
}
else {
describe # Example: .delstream twitch.tv/channel or .delstream hitbox.tv/channel
}
}
}
if ($1 == .chaninfo) {
var %kanal = $remove($2,http://,https://)
if ($left(%kanal,9) == hitbox.tv) {
var %kanal = $remove(%kanal,hitbox.tv/)
var %url = $+(http://api.hitbox.tv/media/live/,%kanal,?embed=true)
noop $clearjsoncache(%url)
var %islive = $json(%url,livestream,0,media_is_live)
if (%islive == 1) {
var %chanurl = http://hitbox.tv/ $+ %kanal
var %viewers = $json(%url,livestream,0,media_views)
if ($json(%url,livestream,0,category_name)) {
var %game = $v1
}
else { var %game = unknown game }
var %title = " $+ $json(%url,livestream,0,media_status) $+ "
var %followers = $json(%url,livestream,0,channel,followers)
describe # %chanurl is playing %game with title %title
describe # %chanurl has %followers followers and %viewers viewers.
}
else {
var %chanurl = http://hitbox.tv/ $+ %kanal
describe # %chanurl is offline.
}
}
elseif ($left(%kanal,9) == twitch.tv) {
var %kanal = $remove(%kanal,twitch.tv/)
var %url = $+(https://api.twitch.tv/kraken/streams/,%kanal)
noop $clearjsoncache(%url)
var %viewers = $json(%url,stream,viewers)
if (%viewers >= 0) {
var %chanurl = http://twitch.tv/ $+ %kanal
if ($json(%url,stream,game)) {
var %game = $v1
}
else { var %game = unknown game }
var %title = " $+ $json(%url,stream,channel,status) $+ "
var %followers = $json(%url,stream,channel,followers)
describe # %chanurl is playing %game with title %title
describe # %chanurl has %followers followers and %viewers viewers.
}
else {
var %chanurl = http://twitch.tv/ $+ %kanal
describe # %chanurl is offline.
}
}
else {
describe # Example: .chaninfo twitch.tv/channel or .chaninfo hitbox.tv/channel
}
}
if ($1 == .topstreams) {
if (!$2) { describe # Example: .topstreams Counter-Strike: Global Offensive | halt }
var %gamename = $remove($replace($2-,$chr(32),$chr(43)),$chr(36),$chr(38),$chr(59),$chr(44))
var %url = $+(https://api.twitch.tv/kraken/search/streams?q=,%gamename,&limit=10)
var %c = 0
while ($json(%url,streams,%c,channel,display_name)) {
var %displayname = $v1
var %viewers = $json(%url,streams,%c,viewers)
if (%c <= 5) {
var %output = %output $+(http://twitch.tv/,%displayname,$chr(32),$chr(40),%viewers,$chr(41),$chr(32),$chr(45))
}
else {
var %output2 = %output2 $+(http://twitch.tv/,%displayname,$chr(32),$chr(40),%viewers,$chr(41),$chr(32),$chr(45))
}
inc %c
}
var %lm1 = $calc($len(%output) - 1)
var %output = $left(%output,%lm1)
describe # Top 10 $json(%url,streams,0,game) streams on twitch: %output
if (%output2) {
var %lm1 = $calc($len(%output2) - 1)
var %output2 = $left(%output2,%lm1)
describe # %output2
}
}
if ($1 == .liststreams) {
var %lstreams 1
while (%lstreams <= $ini(streams.ini,streams,0)) {
if ($istok($readini(streams.ini,streams,$ini(streams.ini,streams,%lstreams)),#,59)) {
var %chans %chans $+(http://twitch.tv/,$ini(streams.ini,streams,%lstreams))
}
inc %lstreams
}
var %lstreams 1
while (%lstreams <= $ini(streams.ini,hitboxstreams,0)) {
if ($istok($readini(streams.ini,hitboxstreams,$ini(streams.ini,hitboxstreams,%lstreams)),#,59)) {
var %chans %chans $+(http://hitbox.tv/,$ini(streams.ini,hitboxstreams,%lstreams))
}
inc %lstreams
}
describe # Added streams: %chans
}
if ($1 == .streams) {
if ($getCurrentStreamsWithViewers(#)) {
describe # Live streams: $v1
}
else {
describe # No streams are currently live.
}
}
}
alias getCurrentStreamsWithViewers {
var %target = $1
var %c = 1
var %limit = $ini(streams.ini,viewers,0)
while (%c <= %limit) {
var %chan = $ini(streams.ini,viewers,%c)
var %viewers = $readini(streams.ini,viewers,%chan)
if ($istok($readini(streams.ini,streams,%chan),%target,59)) {
var %output = %output $+(http://twitch.tv/,%chan,$chr(32),$chr(40),%viewers,$chr(41),$chr(32),$chr(45))
}
inc %c
}
var %c = 1
var %limit = $ini(streams.ini,hitboxviewers,0)
while (%c <= %limit) {
var %chan = $ini(streams.ini,hitboxviewers,%c)
var %viewers = $readini(streams.ini,hitboxviewers,%chan)
if ($istok($readini(streams.ini,hitboxstreams,%chan),%target,59)) {
var %output = %output $+(http://hitbox.tv/,%chan,$chr(32),$chr(40),%viewers,$chr(41),$chr(32),$chr(45))
}
inc %c
}
var %lm1 = $calc($len(%output) - 1)
var %output = $left(%output,%lm1)
return %output
}
alias streamannouncer {
var %c = 1
var %limit = $ini(streams.ini,streams,0)
while (%c <= %limit) {
var %chan = $ini(streams.ini,streams,%c)
var %url = $+(https://api.twitch.tv/kraken/streams/,%chan)
noop $clearjsoncache(%url)
var %viewers = $json(%url,stream,viewers)
if (%viewers >= 0) {
if ($readini(streams.ini,viewers,%chan) !>= 0) {
var %title = $json(%url,stream,channel,status)
writeini streams.ini viewers %chan %viewers
var %targets = $readini(streams.ini,streams,%chan)
.describe $replace(%targets,$chr(59),$chr(44)) %chan is now live playing %game with title " $+ %title $+ "
}
}
else {
if ($readini(streams.ini,viewers,%chan) >= 0) {
remini streams.ini viewers %chan
}
}
inc %c
}
var %c = 1
var %limit = $ini(streams.ini,hitboxstreams,0)
while (%c <= %limit) {
var %chan = $ini(streams.ini,hitboxstreams,%c)
var %url = $+(http://api.hitbox.tv/media/live/,%chan,?embed=true)
noop $clearjsoncache(%url)
var %islive = $json(%url,livestream,0,media_is_live)
if (%islive == 1) {
if ($readini(streams.ini,hitboxviewers,%chan) !>= 0) {
var %chanurl = http://hitbox.tv/ $+ %kanal
var %viewers = $json(%url,livestream,0,media_views)
writeini streams.ini hitboxviewers %chan %viewers
if ($json(%url,livestream,0,category_name)) {
var %game = $v1
}
else { var %game = unknown game }
var %title = " $+ $json(%url,livestream,0,media_status) $+ "
var %targets = $readini(streams.ini,hitboxstreams,%chan)
.describe $replace(%targets,$chr(59),$chr(44)) %chan is now live playing %game with title " $+ %title $+ "
}
}
else {
if ($readini(streams.ini,hitboxviewers,%chan) >= 0) {
remini streams.ini hitboxviewers %chan
}
}
inc %c
}
}
Thanks for letting me know, i'll fix it if i get around to it, but its low on my list of priorities.