# @name Kick # @desc Follower count of a Kick channel with customizable colors and effects # @author Korrupt (Blueforcer orignal script) # @version 1.2 # @config user text "Kick Channel" default="UserName" maxlen=32 # @config txt_color color "Text Color" default=#53FC18 # @config fx_name select "Effect" default=None options=None,Matrix,Plasma,ColorWaves,TwinklingStars,Fireworks,Ripple # @config fx_speed slider "FX Speed" default=0.3 min=0.1 max=2.0 step=0.1 class Kick var url, user, period var count, label, full, err var ticks, busy var opts, px, fx_opts def init() self.user = store.get("user") self.url = "https://kick.com/api/v1/channels/" + self.user self.period = 3600 # once an hour self.count = store.get("who") == self.user ? store.get("n") : nil self.label = self.count == nil ? nil : self.human(self.count) self.full = self.count == nil ? nil : str(self.count) self.err = false self.ticks = 0 self.busy = false self.opts = {'headers': {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', 'Accept': 'application/json'}, 'find': "\"followersCount\":", 'keep': 32} # Settings map for background effect self.fx_opts = {"speed": store.get("fx_speed")} # Pixel array for Kick logo (8x8) self.px = [0x53FC18, 0x53FC18, 0x53FC18, 0x000000, 0x000000, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x000000, 0x53FC18, 0x53FC18, 0x53FC18, 0x000000, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x000000, 0x000000, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x000000, 0x000000, 0x000000, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x000000, 0x000000, 0x000000, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x53FC18, 0x000000, 0x000000, 0x53FC18, 0x53FC18, 0x53FC18, 0x000000, 0x53FC18, 0x53FC18, 0x53FC18, 0x000000, 0x53FC18, 0x53FC18, 0x53FC18, 0x000000, 0x000000, 0x53FC18, 0x53FC18, 0x53FC18] end def human(n) if n < 1000 return str(n) end var d = 1000 var suf = "K" if n >= 1000000000 d = 1000000000 suf = "B" elif n >= 1000000 d = 1000000 suf = "M" end var v = n / (d + 0.0) if v >= 10 return str(round(v)) + suf end var t = round(v * 10) return str(int(t / 10)) + "." + str(t % 10) + suf end def on_body(body, status) self.busy = false shared.set("f", 0) if status != 200 || body == nil self.err = true return end var m = re.search("(\\d+)", body) if m == nil self.err = true return end var n = num(m[1]) if n == nil return end self.err = false if n == self.count return end self.count = n self.full = str(n) self.label = self.human(n) store.set("n", n) store.set("who", self.user) end def tls_busy() for k : shared.keys() if size(k) > 2 && k[size(k) - 2 .. size(k) - 1] == ".f" && shared.get(k) == 1 var a = shared.age(k) if a != nil && a < 20000 return true end end end return false end def loop() if self.ticks <= 0 if !self.busy && !self.tls_busy() self.ticks = self.period self.busy = true shared.set("f", 1) http.get(self.url, / b, st -> self.on_body(b, st), self.opts) end end self.ticks -= 1 end def draw() clear() # Apply background effect first if configured var fx = store.get("fx_name") if fx != nil && fx != "None" self.fx_opts["speed"] = store.get("fx_speed") effect(fx, self.fx_opts) end # Draw Kick logo pixel matrix over background for y : 0 .. 7 for x : 0 .. 7 var i = y * 8 + x if self.px[i] != 0 pixel(x, y, self.px[i]) end end end var color = store.get("txt_color") if self.label != nil var avail = width() - 9 var s = self.full var w = text_ink_width(s) if w > avail s = self.label w = text_ink_width(s) end text(9 + (avail - w) / 2, 6, s, color) return end var s = self.err ? "?" : "..." var w = text_ink_width(s) text(9 + (width() - 9 - w) / 2, 6, s, self.err ? 0xCC7722 : 0x555555) end end return Kick()