diff options
Diffstat (limited to 'bot/seasons')
| -rw-r--r-- | bot/seasons/evergreen/reddit.py | 96 | 
1 files changed, 51 insertions, 45 deletions
diff --git a/bot/seasons/evergreen/reddit.py b/bot/seasons/evergreen/reddit.py index 79b40900..90ca57af 100644 --- a/bot/seasons/evergreen/reddit.py +++ b/bot/seasons/evergreen/reddit.py @@ -1,35 +1,24 @@ -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__) - +from bot.pagination import ImagePaginator -class Paginator(buttons.Paginator): -    def __init__(self, *args, **kwargs): -        super().__init__(*args, **kwargs) +log = logging.getLogger(__name__)  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): +		"""Send a get request to the reddit API and get json response"""  		params = {  			'limit': 50  		} @@ -45,7 +34,9 @@ class Reddit(commands.Cog):  	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. +		Gets a post from r/python by default. +		Usage: +		--> .reddit [subreddit_name] [hot/top/new]  		"""  		pages=[]  		sort_list = ["hot", "new", "top", "rising"] @@ -70,9 +61,8 @@ class Reddit(commands.Cog):  		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 = "" +		# embed_titles = discord.Embed(colour=0xf9f586) +		embed_titles = ""  		random_posts = []  		while True: @@ -82,6 +72,18 @@ class Reddit(commands.Cog):  			if rand_post not in random_posts:  				random_posts.append(rand_post) +		# ----------------------------------------------------------- +		# This code below is bound of change when the emojis are added. + +		upvote_emoji = self.bot.get_emoji(674608910656733185) +		comment_emoji = self.bot.get_emoji(674608751784755200) +		user_emoji = self.bot.get_emoji(674608692418707467) +		text_emoji = self.bot.get_emoji(674608836312825877) +		video_emoji = self.bot.get_emoji(674608791450550272) +		image_emoji = self.bot.get_emoji(674594916655169536) +		reddit_emoji = self.bot.get_emoji(674087978628284417) + +		# ------------------------------------------------------------  		for i, post in enumerate(random_posts, start=1):  			post_title = post["data"]["title"][0:50] @@ -91,40 +93,44 @@ class Reddit(commands.Cog):  			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 building. + +			embed_titles += f"**{i}.[{post_title}]({post_url})**\n" +			image_url = " " +			post_stats = f"{text_emoji}"  # Set default content type to text. + +			if post["data"]["is_video"] is True or "youtube" in post_url.split("."): +				# This means the content type in the post is a video. +				post_stats = f"{video_emoji} " -			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] +			elif post_url.endswith("jpg") or post_url.endswith("png") or post_url.endswith("gif"): +				# This means the content type in the post is an image. +				post_stats = f"{image_emoji} " +				image_url = post_url -			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) +			votes = f'{upvote_emoji}{post["data"]["ups"]}' +			comments = f'{comment_emoji}\u2002{ post["data"]["num_comments"]}' +			post_stats += ( +					f"\u2002{votes}\u2003" +					f"{comments}" +					f'\u2003{user_emoji}\u2002{post["data"]["author"]}\n' +				) +			embed_titles += f"{post_stats}\n" +			page_text = f"**[{post_title}]({post_url})**\n{post_stats}\n{post['data']['selftext'][0:200]}" -			new_embed.url = post_url -			pages.append(new_embed) +			embed = discord.Embed() +			page_tuple = (page_text, image_url) +			pages.append(page_tuple) -		pages.append(embed_titles) -		pages.reverse() -		embed = Paginator(embed=True, timeout=200, use_defaults=True, -                              extra_pages=pages) +			# ------------------------------------------------------------------ -		await embed.start(ctx) +		pages.insert(0, (embed_titles, " ")) +		embed.set_author(name=f"r/{posts[0]['data']['subreddit']} - {sort}", icon_url=reddit_emoji.url) +		await ImagePaginator.paginate(pages, ctx, embed)  def setup(bot): +	"""Load the Cog"""  	bot.add_cog(Reddit(bot))  	log.debug('Loaded')  |