aboutsummaryrefslogtreecommitdiffstats
path: root/bot
diff options
context:
space:
mode:
Diffstat (limited to 'bot')
-rw-r--r--bot/seasons/evergreen/reddit.py130
1 files changed, 130 insertions, 0 deletions
diff --git a/bot/seasons/evergreen/reddit.py b/bot/seasons/evergreen/reddit.py
new file mode 100644
index 00000000..79b40900
--- /dev/null
+++ b/bot/seasons/evergreen/reddit.py
@@ -0,0 +1,130 @@
+import asyncio
+import logging
+import random
+import discord
+
+from collections import deque
+
+from discord.ext import commands
+from discord.ext import buttons
+from discord.ext.commands.cooldowns import BucketType
+
+log = logging.getLogger(__name__)
+
+
+class Paginator(buttons.Paginator):
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+
+class Reddit(commands.Cog):
+ """Fetches reddit posts."""
+ def __init__(self, bot):
+ self.bot = bot
+ self.img_cache = deque(maxlen=10)
+ # self.cache_clear_task = bot.loop.create_task(self.clear_cache())
+
+ # async def clear_cache(self):
+ # self.img_cache.clear()
+ # await asyncio.sleep(43200) # clear cache every 12 hours
+
+ async def fetch(self, session, url):
+ params = {
+ 'limit': 50
+ }
+ headers = {
+ 'User-Agent': 'Iceman'
+ }
+
+ async with session.get(url=url, params=params, headers=headers) as response:
+ return await response.json()
+
+ @commands.command(name='reddit')
+ @commands.cooldown(1, 10, BucketType.user)
+ async def get_reddit(self, ctx, subreddit='python', sort="hot"):
+ """
+ Fetch reddit posts by using this command.
+ Gets a post from r/dndmemes by default.
+ """
+ pages=[]
+ sort_list = ["hot", "new", "top", "rising"]
+ if sort.lower() not in sort_list:
+ await ctx.send(f"Invalid sorting: {sort}\nUsing default sorting: `Hot`")
+ sort = "hot"
+
+ session = self.bot.http_session
+ data = await self.fetch(session, f'https://www.reddit.com/r/{subreddit}/{sort}/.json')
+
+ try:
+ posts = data["data"]["children"]
+ except KeyError:
+ return await ctx.send('Subreddit not found!')
+ if not posts:
+ return await ctx.send('No posts available!')
+
+ if posts[1]["data"]["over_18"] == True:
+ return await ctx.send("You cannot access this Subreddit.")
+
+ upvote_emoji = self.bot.get_emoji(565557799040319508)
+ comment_emoji = self.bot.get_emoji(565576076483624960)
+ user_emoji = "🎅"
+
+ embed_titles = discord.Embed(colour=0xf9f586)
+ embed_titles.title = f"Posts from {posts[0]['data']['subreddit']} Subreddit\n"
+ embed_titles.description = ""
+
+ random_posts = []
+ while True:
+ if len(random_posts) == 5:
+ break
+ rand_post = random.choice(posts)
+ if rand_post not in random_posts:
+ random_posts.append(rand_post)
+
+
+ for i, post in enumerate(random_posts, start=1):
+ post_title = post["data"]["title"][0:50]
+ post_url = post['data']['url']
+ if post_title == "":
+ post_title = "No Title."
+ elif post_title == post_url:
+ post_title = "Title is itself a link."
+
+ embed_titles.description += f"**{i}.**[{post_title}]({post_url})\n"
+ post_stats = (
+ f'{upvote_emoji}{post["data"]["ups"]} '
+ f'{comment_emoji}{post["data"]["num_comments"]} '
+ f'{user_emoji}{post["data"]["author"]}\n\n'
+ )
+
+ embed_titles.description += post_stats
+ new_embed = discord.Embed()
+ new_embed.title = post_title + "\n"
+ new_embed.description = post_stats + "\n\n"
+ new_embed.description = post['data']['selftext'][0:100]
+
+ if post["data"]["media_embed"] != {}:
+ content = post["data"]["media_embed"]["content"]
+ i1 = content.index("src")
+ i2 = content.index("frameborder")
+ print(content)
+ print(i1, i2)
+ imageURL = content[i1+4:i2]
+ print(imageURL)
+ # new_embed.set_image(url=imageURL)
+
+ new_embed.url = post_url
+ pages.append(new_embed)
+
+ pages.append(embed_titles)
+ pages.reverse()
+ embed = Paginator(embed=True, timeout=200, use_defaults=True,
+ extra_pages=pages)
+
+ await embed.start(ctx)
+
+
+def setup(bot):
+ bot.add_cog(Reddit(bot))
+ log.debug('Loaded')