From ea7e8490041abbb31d19b7a9d4852eb4485f38e3 Mon Sep 17 00:00:00 2001 From: Remy Moll Date: Wed, 26 Aug 2020 23:18:42 +0200 Subject: [PATCH] added reddit functions --- api/reddit.py | 59 ++++++++++++++++++++++++++++++-------------- main.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 105 insertions(+), 22 deletions(-) diff --git a/api/reddit.py b/api/reddit.py index c103228..03428a2 100644 --- a/api/reddit.py +++ b/api/reddit.py @@ -6,24 +6,45 @@ except: stream = praw.Reddit(client_id = keys.reddit_id, client_secret = keys.reddit_secret, user_agent=keys.reddit_user_agent) -def get_top_text(subreddit, number): - message = "" - try: - for submission in stream.subreddit(subreddit).hot(limit=number): - if not submission.stickied: - message += "" + submission.title + "" + "\n" + submission.selftext + "\n\n\n" - return message - except: - return "Api call failed, sorry" +def get_top(subreddit, number, return_type="text"): + if return_type == "text": + message = "" + try: + for submission in stream.subreddit(subreddit).top(limit=number): + if not submission.stickied: + message += "" + submission.title + "" + "\n" + submission.selftext + "\n\n\n" + return message + except: + return "Api call failed, sorry" + else: + images = [] + try: + for submission in stream.subreddit(subreddit).top(limit=number): + if not submission.stickied: + t = {"image": submission.url, "caption": submission.title} + images.append(t) + return images + except: + return ["Api call failed, sorry"] -def get_top_image(subreddit, number): - images = [] - try: - for submission in stream.subreddit(subreddit).hot(limit=number): - if not submission.stickied: - t = {"image": submission.url, "caption": submission.title} - images.append(t) - return images - except: - return ["Api call failed, sorry"] +def get_random_rising(subreddit, number, return_type="text"): + if return_type == "text": + message = "" + try: + for submission in stream.subreddit(subreddit).random_rising(limit=number): + if not submission.stickied: + message += "" + submission.title + "" + "\n" + submission.selftext + "\n\n\n" + return message + except: + return "Api call failed, sorry" + else: + images = [] + try: + for submission in stream.subreddit(subreddit).random_rising(limit=number): + if not submission.stickied: + t = {"image": submission.url, "caption": submission.title} + images.append(t) + return images + except: + return ["Api call failed, sorry"] diff --git a/main.py b/main.py index 6181282..7278d23 100644 --- a/main.py +++ b/main.py @@ -43,6 +43,7 @@ class ChatBot(): "cronjob" : self.bot_cronjob, "joke" : self.bot_tell_joke, "meme" : self.bot_send_meme, + "news" : self.bot_send_news, } @@ -300,19 +301,80 @@ class ChatBot(): def bot_tell_joke(self, params): """Tells you the top joke on r/jokes""" - joke = reddit.get_top_text("jokes",3) + if len(params) == 0: + number = 1 + elif len(params) == 1: + number = int(params[0]) + else: + self.telegram.send_text("Jokes takes only one parameter, the number of jokes.") + return + + joke = reddit.get_random_rising("jokes", number, "text") self.telegram.send_message(joke) def bot_send_meme(self, params): - """Sends a meme from r/memes""" - urls = reddit.get_top_image("memes",3) + """Sends a meme from r/""" + subreddit_name = "memes" + subnames = { + "physics" : "physicsmemes", + "dank" : "dankmemes", + "biology" : "biologymemes", + "math" : "mathmemes" + } + number = 1 + + if len(params) == 1: + try: + number = int(params[0]) + except: + try: + subreddit_name = subnames[str(params[0])] + except: + self.telegram.send_message("Topic not found") + elif len(params) == 2: + try: + number = int(params[0]) + subreddit_name = subnames[str(params[1]).lower()] + except: + number = int(params[1]) + subreddit_name = subnames[str(params[0]).lower()] + + elif len(params) > 2: + self.telegram.send_message("Memes takes 2 parameters: the number of memes, and their topic.") + return + + urls = reddit.get_random_rising(subreddit_name, number, "photo") for u in urls: try: self.telegram.send_photo(u["image"], u["caption"]) except: self.telegram.send_message("Meme won't yeet") + + def bot_send_news(self, params): + """Sends the first entries for new from r/""" + subreddit_name = "worldnews" + subnames = { + "germany" : "germannews", + "france" : "francenews", + "europe" : "eunews", + "usa" : "usanews" + } + if len(params) == 1: + try: + subreddit_name = subnames[str(params[0]).lower()] + except: + self.telegram.send_message("Argument not supported") + return + elif len(params) > 1: + self.telegram.send_message("News takes one argument: the location (world, germany, europe, ...)") + return + + text = reddit.get_top(subreddit_name, 10, "text") + self.telegram.send_message(text) + + ####################################################################### bot = ChatBot("ChatterBot", version="1.03")