def format_item(self, item): # Event destination channel = self.destination if isinstance(self.destination, Channel) else None user = self.destination if isinstance(self.destination, User) else None # Item data link = "https://reddit.com/r/{}/comments/{}/".format(self.subreddit, item["data"]["id"]) title = item["data"]["title"] author = item["data"]["author"] author_link = "https://www.reddit.com/user/{}".format(author) url = item["data"]["url"] # Check if link is direct to a media file, if so, add photo to output message file_extension = url.split(".")[-1].lower() if file_extension in ["png", "jpg", "jpeg", "bmp", "gif", "mp4", "gifv"]: if file_extension == "gifv": url = url[:-4]+"mp4" # Make output message output = "Update on /r/{}/ subreddit. \"[{}]({})\" by [u/{}]({})\n[direct image]({})".format( Commons.markdown_escape(self.subreddit), Commons.markdown_escape(title), link, author, author_link, url) output_evt = EventMessageWithPhoto(self.server, channel, user, output, url, inbound=False) output_evt.formatting = EventMessage.Formatting.MARKDOWN return output_evt # Handle gfycat links as photos gfycat_regex = re.compile(r"(?:https?://)?(?:www\.)?gfycat\.com/([a-z]+)", re.IGNORECASE) gfycat_match = gfycat_regex.match(url) if gfycat_match is not None: direct_url = "https://giant.gfycat.com/{}.mp4".format(gfycat_match.group(1)) # Make output message output = "Update on /r/{}/ subreddit. \"[{}]({})\" by [u/{}]({})\n[gfycat]({})".format( Commons.markdown_escape(self.subreddit), Commons.markdown_escape(title), link, author, author_link, url) output_evt = EventMessageWithPhoto(self.server, channel, user, output, direct_url, inbound=False) output_evt.formatting = EventMessage.Formatting.MARKDOWN return output_evt # Handle reddit video links vreddit_regex = re.compile(r"https?://v.redd.it/[a-z0-9]+") vreddit_match = vreddit_regex.match(url) if vreddit_match is not None: if item["data"]["secure_media"] is None: direct_url = item["data"]["crosspost_parent_list"][0]["secure_media"]["reddit_video"]["fallback_url"] else: direct_url = item["data"]["secure_media"]["reddit_video"]["fallback_url"] # Make output message output = "Update on /r/{}/ subreddit. \"[{}]({})\" by [u/{}]({})\n[vreddit]({})".format( Commons.markdown_escape(self.subreddit), Commons.markdown_escape(title), link, author, author_link, direct_url) output_evt = EventMessageWithPhoto(self.server, channel, user, output, direct_url, inbound=False) output_evt.formatting = EventMessage.Formatting.MARKDOWN return output_evt # Make output message if the link isn't direct to a media file if item["data"]["selftext"] != "": output = "Update on /r/{}/ subreddit. \"[{}]({})\" by [u/{}]({})".format( Commons.markdown_escape(self.subreddit), Commons.markdown_escape(title), link, author, author_link) else: output = "Update on /r/{}/ subreddit. \"[{}]({})\" by [u/{}]({})\n{}".format( Commons.markdown_escape(self.subreddit), Commons.markdown_escape(title), link, author, author_link, url, link) output_evt = EventMessage(self.server, channel, user, output, inbound=False) output_evt.formatting = EventMessage.Formatting.MARKDOWN return output_evt