コード例 #1
0
ファイル: Subscriptions.py プロジェクト: joshcoales/Hallo
 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