on $*:text:!followers:#: {
followers.update -s #
}
alias followers.update {
if (-* iswm $1) {
var %switches = $1
tokenize 32 $2-
}
var %chan = #$$1, %limit = $iif($2,$2,25), %offset = $iif($3,$3,0)
var %sockname = twitch.followers. $+ $ticks
hfree -w %sockname | hmake %sockname
hadd %sockname chan %chan
hadd %sockname limit %limit
hadd %sockname offset %offset
hadd %sockname request /kraken/channels/ $+ $mid(%chan,2-) $+ /follows?limit= $+ %limit $+ &offset= $+ %offset
hadd %sockname method GET
hadd %sockname signal followers.update
if (s isin %switches) hadd %sockname show 1
if (!$hget(followers. $+ %chan)) hadd %sockname init 1
sockopen -e %sockname api.twitch.tv 443
return %sockname
}
on *:signal:followers.update:{
var %err = $1, %sockname = $2, %header = $3, %data = $4
var %chan = $hget(%sockname,chan), %init = $hget(%sockname,init), %show = $hget(%sockname,show)
if (* 200 OK iswm $read(%header,n,1)) {
if (!$hget(followers. $+ %chan)) {
hmake -s followers. $+ %chan $iif($calc($json(%data,_total) / 10) > 100,$v1,$v2)
if ($ini(followers.ini,%chan,0) > 0) hload -i followers. $+ %chan followers.ini %chan
}
var %i = 0, %n = $json(%data,follows).count, %new.count
while (%i < %n) {
var %name = $json(%data,follows,%i,user,name)
var %display_name = $json(%data,follows,%i,user,display_name)
if (!$hget(followers. $+ %chan,%name)) {
hadd followers. $+ %chan %name 1
if (!%init) && (%show) {
set -nz %followers. $+ %chan %followers. [ $+ [ %chan ] ] %display_name
if ($calc($len(%followers. [ $+ [ %chan ] ]) + $len(%display_name)) > 350) {
var %msg = Welcome to our new follower $+ $iif($numtok(%followers. [ $+ [ %chan ] ],32) > 1,s:,:) $regsubex(%followers. [ $+ [ %chan ] ],/( $+ $chr(32) $+ )/g,$iif(\n == \0,$iif(\0 > 2,$chr(44),$chr(32)) and $chr(32),$chr(44) $+ $chr(32))) $+ !
.timer 1 $iif(%flood.protection,$v1,0) msg %chan $safe(%msg)
inc -z %flood.protection 5
unset %followers. [ $+ [ %chan ] ]
}
}
inc %new.count
}
else break
inc %i
}
if (%new.count == $hget(%sockname,limit)) {
followers.update %chan 100 $calc($hget(%sockname,limit) + $hget(%sockname,offset))
var %next = $result
if (%init) hadd %next init 1
if (%show) hadd %next show 1
}
else {
if (!%init) && (%show) && (%new.count) {
var %msg = Welcome to our new follower $+ $iif($numtok(%followers. [ $+ [ %chan ] ],32) > 1,s:,:) $regsubex(%followers. [ $+ [ %chan ] ],/( $+ $chr(32) $+ )/g,$iif(\n == \0,$iif(\0 > 2,$chr(44),$chr(32)) and $chr(32),$chr(44) $+ $chr(32))) $+ !
.timer 1 $iif(%flood.protection,$v1,0) msg %chan $safe(%msg)
inc -z %flood.protection 5
}
unset %followers. [ $+ [ %chan ] ]
if ($hget(followers. $+ %chan)) hsave -i followers. $+ %chan followers.ini %chan
}
}
hfree -w %sockname
if ($isfile(%header)) .remove %header
if ($isfile(%data)) .remove %data
}