Beispiel #1
0
    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"]
        ]
Beispiel #2
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"]
        ]
Beispiel #3
0
 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 []
Beispiel #4
0
    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
Beispiel #5
0
    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 [], [], []
Beispiel #6
0
    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
Beispiel #7
0
    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