def fetch_global_emotes(self): # circular import prevention from pajbot.managers.emote import EmoteManager resp = self.get("/chat/emoticon_images", params={"emotesets": "0"}) return [ EmoteManager.twitch_emote(str(data["id"]), data["code"]) for data in resp["emoticon_sets"]["0"] ]
def fetch_global_emotes(self) -> List[Emote]: # circular import prevention from pajbot.managers.emote import EmoteManager resp = self.get("/chat/emotes/global") return [ EmoteManager.twitch_emote(str(emote["id"]), emote["name"]) for emote in resp["data"] ]
def get_global_emotes(self): try: resp = self.get(["chat", "emoticon_images"], {"emotesets": "0"}, base=self.kraken_url) return [ EmoteManager.twitch_emote(data["id"], data["code"]) for data in resp["emoticon_sets"]["0"] ] except urllib.error.HTTPError: log.exception("Error fetching global twitch emotes") return []
def fetch_channel_emotes(self, channel_id, channel_name): """Returns a tuple of three lists of emotes, each one corresponding to tier 1, tier 2 and tier 3 respectively. Tier 2 and Tier 3 ONLY contain the respective extra emotes added to that tier, typically tier 2 and tier 3 will contain exactly one or zero emotes.""" # circular import prevention from pajbot.managers.emote import EmoteManager try: resp = self.get(["channels", channel_id]) if resp is None: log.warning( f"No subscription plans found for channel {channel_name}") return [], [], [] plans = resp["plans"] if len(plans) <= 0: log.warning( f"No subscription plans found for channel {channel_name}") return [], [], [] # plans["$4.99"] is tier 1 # plans["$9.99"] is tier 2 # plans["$24.99"] is tier 1 ret_data = ([], [], []) for emote in resp["emotes"]: tier = 0 if str(emote["emoticon_set"]) == str( plans["$4.99"]): # tier 1 emotes tier = 1 elif str(emote["emoticon_set"]) == str(plans["$9.99"]): tier = 2 else: tier = 3 ret_data[tier - 1].append( EmoteManager.twitch_emote(str(emote["id"]), emote["code"])) return ret_data except HTTPError as e: if e.response.status_code == 404: log.warning(f"No sub emotes found for channel {channel_name}") return [], [], [] else: raise e
def get_channel_emotes(self, channel): """Returns a tuple of three lists of emotes, each one corresponding to tier 1, tier 2 and tier 3 respectively. Tier 2 and Tier 3 ONLY contain the respective extra emotes added to that tier, typically tier 2 and tier 3 will contain exactly one or zero emotes. """ # base is https://api.twitch.tv/api try: resp = self.get(["channels", channel, "product"], base=self.base_url) plans = resp["plans"] if len(plans) <= 0: log.warning( "No subscription plans found for channel {}".format( channel)) return [], [], [] # plans[0] is tier 1 ret_data = [] already_visited_plans = set() for plan in plans: emotes = [ EmoteManager.twitch_emote(data["id"], data["regex"]) for data in plan["emoticons"] if data["emoticon_set"] not in already_visited_plans ] ret_data.append(emotes) already_visited_plans.update(plan["emoticon_set_ids"]) # fill up to form at least three lists of emotes for i in range(len(ret_data), 3): ret_data[i] = [] return tuple(ret_data) except urllib.error.HTTPError as e: if e.code == 404: log.warning( "No sub emotes found for channel {}".format(channel)) return [], [], [] log.exception("Error fetching sub emotes for {}".format(channel)) return [], [], []
def fetch_channel_emotes(self, channel_name): """Returns a tuple of three lists of emotes, each one corresponding to tier 1, tier 2 and tier 3 respectively. Tier 2 and Tier 3 ONLY contain the respective extra emotes added to that tier, typically tier 2 and tier 3 will contain exactly one or zero emotes.""" # circular import prevention from pajbot.managers.emote import EmoteManager try: resp = self.get(["channels", channel_name, "product"]) plans = resp["plans"] if len(plans) <= 0: log.warning( "No subscription plans found for channel {}".format( channel_name)) return [], [], [] # plans[0] is tier 1 ret_data = [] already_visited_plans = set() for plan in plans: emotes = [ EmoteManager.twitch_emote(data["id"], data["regex"]) for data in plan["emoticons"] if data["emoticon_set"] not in already_visited_plans ] ret_data.append(emotes) already_visited_plans.update(plan["emoticon_set_ids"]) # fill up to form at least three lists of emotes for i in range(len(ret_data), 3): ret_data[i] = [] return tuple(ret_data) except HTTPError as e: if e.response.status_code == 404: log.warning( "No sub emotes found for channel {}".format(channel_name)) return [], [], [] else: raise e
def fetch_channel_emotes( self, channel_id: str, channel_name: str) -> Tuple[List[Emote], List[Emote], List[Emote]]: """Returns a tuple of three lists of emotes, each one corresponding to tier 1, tier 2 and tier 3 respectively. Tier 2 and Tier 3 ONLY contain the respective extra emotes added to that tier.""" # circular import prevention from pajbot.managers.emote import EmoteManager resp = self.get("/chat/emotes", {"broadcaster_id": channel_id}) emotes = resp["data"] if len(emotes) <= 0: log.warning( f"No subscription emotes found for channel {channel_name}") return [], [], [] ret_data: Tuple[List[Emote], List[Emote], List[Emote]] = ([], [], []) for emote in emotes: if emote["emote_type"] == "subscriptions": tier = 0 if emote["tier"] == "1000": # tier 1 emotes tier = 1 elif emote["tier"] == "2000": # tier 2 emotes tier = 2 elif emote["tier"] == "3000": # tier 3 emotes tier = 3 else: log.warning( f"Unknown channel emote tier fetched: '{emote}'") continue ret_data[tier - 1].append( EmoteManager.twitch_emote(str(emote["id"]), emote["name"])) elif emote["emote_type"] == "bitstier": # TODO: Figure out where bit emotes fit into pajbot pass else: log.warning(f"Unknown channel emote type fetched: '{emote}'") return ret_data