diff options
Diffstat (limited to 'bot/exts/evergreen/stackoverflow.py')
-rw-r--r-- | bot/exts/evergreen/stackoverflow.py | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py deleted file mode 100644 index 64455e33..00000000 --- a/bot/exts/evergreen/stackoverflow.py +++ /dev/null @@ -1,88 +0,0 @@ -import logging -from html import unescape -from urllib.parse import quote_plus - -from discord import Embed, HTTPException -from discord.ext import commands - -from bot.bot import Bot -from bot.constants import Colours, Emojis - -logger = logging.getLogger(__name__) - -BASE_URL = "https://api.stackexchange.com/2.2/search/advanced" -SO_PARAMS = { - "order": "desc", - "sort": "activity", - "site": "stackoverflow" -} -SEARCH_URL = "https://stackoverflow.com/search?q={query}" -ERR_EMBED = Embed( - title="Error in fetching results from Stackoverflow", - description=( - "Sorry, there was en error while trying to fetch data from the Stackoverflow website. Please try again in some " - "time. If this issue persists, please contact the staff or send a message in #dev-contrib." - ), - color=Colours.soft_red -) - - -class Stackoverflow(commands.Cog): - """Contains command to interact with stackoverflow from discord.""" - - def __init__(self, bot: Bot): - self.bot = bot - - @commands.command(aliases=["so"]) - @commands.cooldown(1, 15, commands.cooldowns.BucketType.user) - async def stackoverflow(self, ctx: commands.Context, *, search_query: str) -> None: - """Sends the top 5 results of a search query from stackoverflow.""" - params = SO_PARAMS | {"q": search_query} - async with self.bot.http_session.get(url=BASE_URL, params=params) as response: - if response.status == 200: - data = await response.json() - else: - logger.error(f'Status code is not 200, it is {response.status}') - await ctx.send(embed=ERR_EMBED) - return - if not data['items']: - no_search_result = Embed( - title=f"No search results found for {search_query}", - color=Colours.soft_red - ) - await ctx.send(embed=no_search_result) - return - - top5 = data["items"][:5] - encoded_search_query = quote_plus(search_query) - embed = Embed( - title="Search results - Stackoverflow", - url=SEARCH_URL.format(query=encoded_search_query), - description=f"Here are the top {len(top5)} results:", - color=Colours.orange - ) - for item in top5: - embed.add_field( - name=unescape(item['title']), - value=( - f"[{Emojis.reddit_upvote} {item['score']} " - f"{Emojis.stackoverflow_views} {item['view_count']} " - f"{Emojis.reddit_comments} {item['answer_count']} " - f"{Emojis.stackoverflow_tag} {', '.join(item['tags'][:3])}]" - f"({item['link']})" - ), - inline=False) - embed.set_footer(text="View the original link for more results.") - try: - await ctx.send(embed=embed) - except HTTPException: - search_query_too_long = Embed( - title="Your search query is too long, please try shortening your search query", - color=Colours.soft_red - ) - await ctx.send(embed=search_query_too_long) - - -def setup(bot: Bot) -> None: - """Load the Stackoverflow Cog.""" - bot.add_cog(Stackoverflow(bot)) |