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")