def MonitorChange(self) -> bool: prevdata = json.loads( ShopBot.GET_ItemShop(self, api_key=self.api_key, language=self.language)) prevdata_ = Utility.Split_Special(self, data=prevdata) prevdata_ = Utility.Extract_ItemShop(self, data=prevdata_) time.sleep(600) while True: data = json.loads( ShopBot.GET_ItemShop(self, api_key=self.api_key, language=self.language)) data_ = Utility.Split_Special(self, data=data) data_ = Utility.Extract_ItemShop(self, data=data_) log.info("Checking ItemShop change...") if prevdata_ == data_: log.info("ItemShop changed") date = Utility.ISOtoHuman( self, date=Utility.Now_ISO(self), dateformat=self.text_override['date'], hour=self.text_override['hour'], language=self.language) specialoffer = None if self.text_override['auto-specialoffer-convert']['enabled']: with requests.Session() as session: specialoffer = AuthUtil.get_special_offer( self, session=session, email=self.text_override[ 'auto-specialoffer-convert']['email'], password=self.text_override[ 'auto-specialoffer-convert']['password'], user_agent=self.user_agent, language=self.language) if specialoffer is None: specialoffer = self.text_override[ 'auto-specialoffer-convert']['default'] if data is not None and date is not None: log.info("Generating shop image...") Image = ShopBot.GenerateImage( self, data=data, date=date, text_override=self.text_override, specialoffer=specialoffer, namefont=self.namefont, categoryfont=self.categoryfont) else: log.error("Failed to get shop data") if Image: log.info("Success") else: log.info("ItemShop nothing changed") time.sleep(600)
def GenerateImage(self, data: dict, date: str, text_override: dict = {}, specialoffer: str = "Special Offers", namefont: str = "", categoryfont: str = "") -> bool: try: Splited = Utility.Split_Special(self, data=data) Sorted = Utility.Sort_Item(self, data=Splited) Overrided = Utility.Text_Override( self, data=Sorted, text_override=text_override['categories']) Extracted = Utility.Extract_ItemShop(self, Overrided) if len(Extracted['featured']) > 1 or len( Extracted['daily']) > 1 or len(Extracted['special']) > 1: if len(Extracted['special']) > 1: rows = max(ceil(len(Extracted['featured']) / 4), ceil(len(Extracted['daily']) / 4), ceil(len(Extracted['special']) / 4)) ShopImage = Image.new("RGBA", (3800, ((545 * rows) + 365))) else: rows = max(ceil(len(Extracted['featured']) / 4), ceil(len(Extracted['daily']) / 4)) ShopImage = Image.new("RGBA", (2550, ((545 * rows) + 365))) try: background = ImageUtil.Open(self, "background.png") background = ImageUtil.RatioResize(self, background, ShopImage.width, ShopImage.height) ShopImage.paste( background, ImageUtil.CenterX(self, background.width, ShopImage.width)) except FileNotFoundError: log.warning("Failed to open background.png") for num, unity in enumerate(Extracted.items()): if len(unity[1]) > 1: Unity = ShopBot.GenerateUnity(self, unity[1], namefont, categoryfont) if Unity is not None: canvas = ImageDraw.Draw(ShopImage) font = ImageUtil.OpenFont(self, 48, namefont) ShopImage.paste(Unity, ((num * 1200) + ((num + 1) * 50), 315), Unity) if unity[0] != "special": canvas.text( (50 + (num * 1250), 260), text_override.get(unity[0], unity[0].capitalize()), font=font) else: canvas.text((50 + (num * 1250), 260), specialoffer, font=font) else: log.debug(f"{unity[0]} is None") else: ShopImage = Image.new("RGBA", (2550, 365)) try: background = ImageUtil.Open(self, "background.png") background = ImageUtil.RatioResize(self, background, ShopImage.width, ShopImage.height) ShopImage.paste( background, ImageUtil.CenterX(self, background.width, ShopImage.width)) except FileNotFoundError: log.warning("Failed to open background.png") canvas = ImageDraw.Draw(ShopImage) font = ImageUtil.OpenFont(self, 48, namefont) canvas.text((50, 260), text_override.get("featured", "Featured"), font=font) canvas.text((1300, 260), text_override.get("daily", "Daily"), font=font) log.info("Shop is None") try: logo = ImageUtil.Open(self, "logo.png").convert("RGBA") logo = ImageUtil.RatioResize(self, logo, 0, 210) ShopImage.paste( logo, ImageUtil.CenterX(self, logo.width, ShopImage.width), logo) except FileNotFoundError: log.warning("Failed to open logo.png") font = ImageUtil.OpenFont(self, 40, namefont) canvas.text((5, 5), date, font=font) ShopImage.save("itemshop.png") return True except Exception as e: log.error(self, f"Failed to generate image, {e}") return False