From b4ee10ad69581fef0cc01c0539c644bb0f885c61 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Wed, 10 Feb 2021 09:26:53 +0530 Subject: Add stackoverflow cog with answers NOTE: I am not linking to the question page itself anywhere --- bot/exts/evergreen/stackoverflow.py | 44 +++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 bot/exts/evergreen/stackoverflow.py (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py new file mode 100644 index 00000000..ab98c757 --- /dev/null +++ b/bot/exts/evergreen/stackoverflow.py @@ -0,0 +1,44 @@ +from html import unescape +from urllib.parse import quote_plus + +from discord import Embed +from discord.ext.commands import Bot, Cog, Context, command, cooldown + +BASE_URL = "https://api.stackexchange.com/2.2/search/advanced?order=desc&sort=activity&site=stackoverflow&q={query}" +SEARCH_URL = "https://stackoverflow.com/search?q={query}" +SO_COLOR = 0xF98036 + + +class Stackoverflow(Cog): + """A cog which returns the top 5 results of a query from stackoverflow.""" + + def __init__(self, bot: Bot): + self.bot = bot + + @command(name="stackoverflow", aliases=["so"]) + @cooldown(1, 15) + async def stackoverflow(self, ctx: Context, *, search_query: str) -> None: + """Sends the top 5 results from stackoverflow based on a search query.""" + async with self.bot.http_session.get(BASE_URL.format(query=quote_plus(search_query))) as response: + data = await response.json() + + top5 = data["items"][:5] + embed = Embed(title=f"Search results for {search_query!r} - Stackoverflow", + url=SEARCH_URL.format(query=quote_plus(search_query)), + description=f"Here are the top {len(top5)} results:", + color=SO_COLOR) + for item in top5: + embed.add_field( + name=f"{unescape(item['title'])}", + value=(f"{item['score']} upvotes ┃ " + f"{item['view_count']} views ┃ " + f"{item['answer_count']} answers " + ), + inline=False) + embed.set_footer() + await ctx.send(embed=embed) + + +def setup(bot: Bot) -> None: + """Adds the cog to the bot.""" + bot.add_cog(Stackoverflow(bot)) -- cgit v1.2.3 From d8da42d858ce6d20eda941f2141cd199cb66b0a6 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Wed, 10 Feb 2021 22:59:03 +0530 Subject: Add link of question --- bot/exts/evergreen/stackoverflow.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index ab98c757..d388b26d 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -30,10 +30,10 @@ class Stackoverflow(Cog): for item in top5: embed.add_field( name=f"{unescape(item['title'])}", - value=(f"{item['score']} upvotes ┃ " + value=(f"[{item['score']} upvotes ┃ " f"{item['view_count']} views ┃ " - f"{item['answer_count']} answers " - ), + f"{item['answer_count']} answer{'s' if item['answer_count'] != 1 else ''} ]" + f"({item['link']})"), inline=False) embed.set_footer() await ctx.send(embed=embed) -- cgit v1.2.3 From 9e4c24db98755fdc8111f811650fab45ba5d451f Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Wed, 10 Feb 2021 23:07:08 +0530 Subject: Add tags of question and drop the 's' if the score/views are 1. --- bot/exts/evergreen/stackoverflow.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index d388b26d..65c85c3f 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -30,9 +30,10 @@ class Stackoverflow(Cog): for item in top5: embed.add_field( name=f"{unescape(item['title'])}", - value=(f"[{item['score']} upvotes ┃ " - f"{item['view_count']} views ┃ " - f"{item['answer_count']} answer{'s' if item['answer_count'] != 1 else ''} ]" + value=(f"[{item['score']} upvote{'s' if item['score'] != 1 else ''} ┃ " + f"{item['view_count']} view{'s' if item['view_count'] != 1 else ''} ┃ " + f"{item['answer_count']} answer{'s' if item['answer_count'] != 1 else ''} ┃ " + f"Tags: {', '.join(item['tags'])}]" f"({item['link']})"), inline=False) embed.set_footer() -- cgit v1.2.3 From f93cb0d22faf0beeae182d398bd860ac9e67c91b Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Wed, 10 Feb 2021 23:09:12 +0530 Subject: Add footer to embed. --- bot/exts/evergreen/stackoverflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 65c85c3f..6fcd9390 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -36,7 +36,7 @@ class Stackoverflow(Cog): f"Tags: {', '.join(item['tags'])}]" f"({item['link']})"), inline=False) - embed.set_footer() + embed.set_footer(text="View the original link for more results.") await ctx.send(embed=embed) -- cgit v1.2.3 From 33b9cd8e0c2fd06f1a4415cf6adedd631f4f091c Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Thu, 11 Feb 2021 12:07:12 +0530 Subject: Use sir-lancebot's format. Just import discord.ext.commands --- bot/exts/evergreen/stackoverflow.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 6fcd9390..f272bcda 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -2,22 +2,22 @@ from html import unescape from urllib.parse import quote_plus from discord import Embed -from discord.ext.commands import Bot, Cog, Context, command, cooldown +from discord.ext import commands BASE_URL = "https://api.stackexchange.com/2.2/search/advanced?order=desc&sort=activity&site=stackoverflow&q={query}" SEARCH_URL = "https://stackoverflow.com/search?q={query}" SO_COLOR = 0xF98036 -class Stackoverflow(Cog): +class Stackoverflow(commands.Cog): """A cog which returns the top 5 results of a query from stackoverflow.""" - def __init__(self, bot: Bot): + def __init__(self, bot: commands.Bot): self.bot = bot - @command(name="stackoverflow", aliases=["so"]) - @cooldown(1, 15) - async def stackoverflow(self, ctx: Context, *, search_query: str) -> None: + @commands.command(name="stackoverflow", aliases=["so"]) + @commands.cooldown(1, 15) + async def stackoverflow(self, ctx: commands.Context, *, search_query: str) -> None: """Sends the top 5 results from stackoverflow based on a search query.""" async with self.bot.http_session.get(BASE_URL.format(query=quote_plus(search_query))) as response: data = await response.json() @@ -40,6 +40,6 @@ class Stackoverflow(Cog): await ctx.send(embed=embed) -def setup(bot: Bot) -> None: +def setup(bot: commands.Bot) -> None: """Adds the cog to the bot.""" bot.add_cog(Stackoverflow(bot)) -- cgit v1.2.3 From 42594929d611f0e9f0de3e3e5ddfae3ae8805628 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Thu, 11 Feb 2021 12:09:29 +0530 Subject: use discord's orange colour --- bot/exts/evergreen/stackoverflow.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index f272bcda..f5bcba20 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -1,12 +1,11 @@ from html import unescape from urllib.parse import quote_plus -from discord import Embed +from discord import Colour, Embed from discord.ext import commands BASE_URL = "https://api.stackexchange.com/2.2/search/advanced?order=desc&sort=activity&site=stackoverflow&q={query}" SEARCH_URL = "https://stackoverflow.com/search?q={query}" -SO_COLOR = 0xF98036 class Stackoverflow(commands.Cog): @@ -26,7 +25,7 @@ class Stackoverflow(commands.Cog): embed = Embed(title=f"Search results for {search_query!r} - Stackoverflow", url=SEARCH_URL.format(query=quote_plus(search_query)), description=f"Here are the top {len(top5)} results:", - color=SO_COLOR) + color=Colour.orange) for item in top5: embed.add_field( name=f"{unescape(item['title'])}", -- cgit v1.2.3 From b6b271dd5913a0dd978af5d04b20cdc54b88afcd Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Thu, 11 Feb 2021 14:12:50 +0530 Subject: Apply cooldown to all users instead of global cooldown. --- bot/exts/evergreen/stackoverflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index f5bcba20..2a4b5f88 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -15,7 +15,7 @@ class Stackoverflow(commands.Cog): self.bot = bot @commands.command(name="stackoverflow", aliases=["so"]) - @commands.cooldown(1, 15) + @commands.cooldown(1, 15, commands.cooldowns.BucketType.user) async def stackoverflow(self, ctx: commands.Context, *, search_query: str) -> None: """Sends the top 5 results from stackoverflow based on a search query.""" async with self.bot.http_session.get(BASE_URL.format(query=quote_plus(search_query))) as response: -- cgit v1.2.3 From 2c25c0af4a53a4c280476a70f2b0d3823550a50d Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Fri, 12 Feb 2021 09:20:50 +0530 Subject: remove name param in command --- bot/exts/evergreen/stackoverflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 2a4b5f88..54b6555d 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -14,7 +14,7 @@ class Stackoverflow(commands.Cog): def __init__(self, bot: commands.Bot): self.bot = bot - @commands.command(name="stackoverflow", aliases=["so"]) + @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 from stackoverflow based on a search query.""" -- cgit v1.2.3 From 6f43eee295ad5561543584baa2095199dba0af38 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Fri, 12 Feb 2021 09:21:37 +0530 Subject: change docstring --- bot/exts/evergreen/stackoverflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 54b6555d..06aa37e7 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -17,7 +17,7 @@ class Stackoverflow(commands.Cog): @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 from stackoverflow based on a search query.""" + """Sends the top 5 results of a search query from stackoverflow.""" async with self.bot.http_session.get(BASE_URL.format(query=quote_plus(search_query))) as response: data = await response.json() -- cgit v1.2.3 From 60d0bf4b07363f42e246c8dbae27561ad7815b17 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Fri, 12 Feb 2021 09:23:57 +0530 Subject: change docstring --- bot/exts/evergreen/stackoverflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 06aa37e7..51ae567c 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -40,5 +40,5 @@ class Stackoverflow(commands.Cog): def setup(bot: commands.Bot) -> None: - """Adds the cog to the bot.""" + """Loads Stackoverflow Cog.""" bot.add_cog(Stackoverflow(bot)) -- cgit v1.2.3 From 47cde431c13d9e20b3adfb28c39c0c0a9b0863fc Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Tue, 30 Mar 2021 23:06:34 +0530 Subject: retry until status code is 200 and make sure search query isn't very long --- bot/exts/evergreen/stackoverflow.py | 46 +++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 5 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 51ae567c..0aebac2d 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -1,9 +1,15 @@ +import logging from html import unescape from urllib.parse import quote_plus -from discord import Colour, Embed +from discord import Embed +from discord.errors import HTTPException from discord.ext import commands +from bot.constants import Colours + +logger = logging.getLogger(__name__) + BASE_URL = "https://api.stackexchange.com/2.2/search/advanced?order=desc&sort=activity&site=stackoverflow&q={query}" SEARCH_URL = "https://stackoverflow.com/search?q={query}" @@ -18,14 +24,37 @@ class Stackoverflow(commands.Cog): @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.""" - async with self.bot.http_session.get(BASE_URL.format(query=quote_plus(search_query))) as response: - data = await response.json() + for _ in range(3): + async with self.bot.http_session.get(BASE_URL.format(query=quote_plus(search_query))) as response: + if response.status == 200: + data = await response.json() + break + else: + logger.error(f'Status code is not 200, it is {response.status}') + continue + if response.status != 200: # If the status is still not 200 after the 3 tries + 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 mods or send a " + "message in #dev-contrib."), + color=Colours.soft_red + ) + await ctx.send(embed=err_embed) + return + elif not data['items']: + err_embed = Embed( + title=f"No search results found for {search_query!r}", + color=Colours.soft_red + ) + await ctx.send(embed=err_embed) + return top5 = data["items"][:5] embed = Embed(title=f"Search results for {search_query!r} - Stackoverflow", url=SEARCH_URL.format(query=quote_plus(search_query)), description=f"Here are the top {len(top5)} results:", - color=Colour.orange) + color=Colours.orange) for item in top5: embed.add_field( name=f"{unescape(item['title'])}", @@ -36,7 +65,14 @@ class Stackoverflow(commands.Cog): f"({item['link']})"), inline=False) embed.set_footer(text="View the original link for more results.") - await ctx.send(embed=embed) + try: + await ctx.send(embed=embed) + except HTTPException: + err_embed = Embed( + title="Your search query is too long, please try shortening your search query", + color=Colours.soft_red + ) + await ctx.send(embed=err_embed) def setup(bot: commands.Bot) -> None: -- cgit v1.2.3 From ada498686700a2a4678b5233339577fd72f6b570 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Wed, 31 Mar 2021 20:17:51 +0530 Subject: Use a variable for the encoded search query. --- bot/exts/evergreen/stackoverflow.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 0aebac2d..721f31f4 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -24,8 +24,10 @@ class Stackoverflow(commands.Cog): @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.""" + encoded_search_query = quote_plus(search_query) + for _ in range(3): - async with self.bot.http_session.get(BASE_URL.format(query=quote_plus(search_query))) as response: + async with self.bot.http_session.get(BASE_URL.format(query=encoded_search_query)) as response: if response.status == 200: data = await response.json() break @@ -52,7 +54,7 @@ class Stackoverflow(commands.Cog): top5 = data["items"][:5] embed = Embed(title=f"Search results for {search_query!r} - Stackoverflow", - url=SEARCH_URL.format(query=quote_plus(search_query)), + url=SEARCH_URL.format(query=encoded_search_query), description=f"Here are the top {len(top5)} results:", color=Colours.orange) for item in top5: -- cgit v1.2.3 From a6e3343b4ca1b2d7833953228c52b9a4bba73867 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Tue, 13 Apr 2021 18:11:42 +0530 Subject: use emojis and limit tags to 3 --- bot/constants.py | 5 +++++ bot/exts/evergreen/stackoverflow.py | 40 +++++++++++++++++++++---------------- 2 files changed, 28 insertions(+), 17 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/constants.py b/bot/constants.py index bb538487..6c114180 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -201,6 +201,11 @@ class Emojis: status_dnd = "<:status_dnd:470326272082313216>" status_offline = "<:status_offline:470326266537705472>" + stackoverflow_upvote = environ.get('stack_upvote', "<:stack_upvote:831468823320330270>") + stackoverflow_tag = environ.get('stack_tag', "<:stack_tag:831468691647889419> ") + stackoverflow_views = environ.get('stack_views', "<:stack_eye:831455489040318464>") + stackoverflow_ans = environ.get('stack_ans', "<:stack_ans:831455489195638784>") + class Icons: questionmark = "https://cdn.discordapp.com/emojis/512367613339369475.png" diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 721f31f4..316c1ad7 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -6,12 +6,20 @@ from discord import Embed from discord.errors import HTTPException from discord.ext import commands -from bot.constants import Colours +from bot.constants import Colours, Emojis logger = logging.getLogger(__name__) BASE_URL = "https://api.stackexchange.com/2.2/search/advanced?order=desc&sort=activity&site=stackoverflow&q={query}" 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 mods or send a message in #dev-contrib." + ), + color=Colours.soft_red +) class Stackoverflow(commands.Cog): @@ -35,21 +43,14 @@ class Stackoverflow(commands.Cog): logger.error(f'Status code is not 200, it is {response.status}') continue if response.status != 200: # If the status is still not 200 after the 3 tries - 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 mods or send a " - "message in #dev-contrib."), - color=Colours.soft_red - ) - await ctx.send(embed=err_embed) + await ctx.send(embed=ERR_EMBED) return elif not data['items']: - err_embed = Embed( + no_search_result = Embed( title=f"No search results found for {search_query!r}", color=Colours.soft_red ) - await ctx.send(embed=err_embed) + await ctx.send(embed=no_search_result) return top5 = data["items"][:5] @@ -60,23 +61,28 @@ class Stackoverflow(commands.Cog): for item in top5: embed.add_field( name=f"{unescape(item['title'])}", - value=(f"[{item['score']} upvote{'s' if item['score'] != 1 else ''} ┃ " - f"{item['view_count']} view{'s' if item['view_count'] != 1 else ''} ┃ " - f"{item['answer_count']} answer{'s' if item['answer_count'] != 1 else ''} ┃ " - f"Tags: {', '.join(item['tags'])}]" + value=(f"[{Emojis.stackoverflow_upvote} {item['score']} " + f"{Emojis.stackoverflow_views} {item['view_count']} " + f"{Emojis.stackoverflow_ans} {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: - err_embed = Embed( + 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=err_embed) + await ctx.send(embed=search_query_too_long) def setup(bot: commands.Bot) -> None: """Loads Stackoverflow Cog.""" bot.add_cog(Stackoverflow(bot)) + +# View icon made by Gregor Cresnar (https://www.flaticon.com/authors/gregor-cresnar) from www.flaticon.com, and edited +# by me +# Answer icon made by Prosymbols (https://www.flaticon.com/authors/prosymbols) from www.flaticon.com, and edited by me +# Tag icon made by Freepik (https://www.flaticon.com/authors/freepik) from www.flaticon.com, and edited by me -- cgit v1.2.3 From 7a22098801065d8ffcc5ea38d854ebaff0965b52 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Tue, 13 Apr 2021 18:28:20 +0530 Subject: Update emojis --- bot/constants.py | 8 ++++---- bot/exts/evergreen/stackoverflow.py | 4 +--- 2 files changed, 5 insertions(+), 7 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/constants.py b/bot/constants.py index 6c114180..05eea474 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -201,10 +201,10 @@ class Emojis: status_dnd = "<:status_dnd:470326272082313216>" status_offline = "<:status_offline:470326266537705472>" - stackoverflow_upvote = environ.get('stack_upvote', "<:stack_upvote:831468823320330270>") - stackoverflow_tag = environ.get('stack_tag', "<:stack_tag:831468691647889419> ") - stackoverflow_views = environ.get('stack_views', "<:stack_eye:831455489040318464>") - stackoverflow_ans = environ.get('stack_ans', "<:stack_ans:831455489195638784>") + stackoverflow_upvote = environ.get('stack_upvote', "<:stack_upvote:*>") # TODO: Fill in numbers (ids) + stackoverflow_tag = environ.get('stack_tag', "<:stack_tag:*> ") + stackoverflow_views = environ.get('stack_views', "<:stack_eye:*>") + stackoverflow_ans = environ.get('stack_ans', "<:stack_ans:*>") class Icons: diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 316c1ad7..04126d9c 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -82,7 +82,5 @@ def setup(bot: commands.Bot) -> None: """Loads Stackoverflow Cog.""" bot.add_cog(Stackoverflow(bot)) -# View icon made by Gregor Cresnar (https://www.flaticon.com/authors/gregor-cresnar) from www.flaticon.com, and edited -# by me -# Answer icon made by Prosymbols (https://www.flaticon.com/authors/prosymbols) from www.flaticon.com, and edited by me +# Upvote and Comment icon taken from Reddit bot # Tag icon made by Freepik (https://www.flaticon.com/authors/freepik) from www.flaticon.com, and edited by me -- cgit v1.2.3 From bbfe606f36abacb9d722574d104a31fbfb4300c7 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Thu, 13 May 2021 23:45:33 +0530 Subject: change mods to staff --- bot/exts/evergreen/stackoverflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 04126d9c..d77c131c 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -16,7 +16,7 @@ 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 mods or send a message in #dev-contrib." + "time. If this issue persists, please contact the staff or send a message in #dev-contrib." ), color=Colours.soft_red ) -- cgit v1.2.3 From b952356c4227dc719baeda09f98a1ae721e8ac36 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Thu, 13 May 2021 23:46:43 +0530 Subject: change docstring --- bot/exts/evergreen/stackoverflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index d77c131c..b85a0c97 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -23,7 +23,7 @@ ERR_EMBED = Embed( class Stackoverflow(commands.Cog): - """A cog which returns the top 5 results of a query from stackoverflow.""" + """Contains command to interact with stackoverflow from discord.""" def __init__(self, bot: commands.Bot): self.bot = bot -- cgit v1.2.3 From d6066de336708df66e3d071115622a5db54c22b3 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Thu, 13 May 2021 23:47:07 +0530 Subject: change code style --- bot/exts/evergreen/stackoverflow.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index b85a0c97..46577cdd 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -54,18 +54,22 @@ class Stackoverflow(commands.Cog): return top5 = data["items"][:5] - embed = Embed(title=f"Search results for {search_query!r} - Stackoverflow", - url=SEARCH_URL.format(query=encoded_search_query), - description=f"Here are the top {len(top5)} results:", - color=Colours.orange) + embed = Embed( + title=f"Search results for {search_query!r} - 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=f"{unescape(item['title'])}", - value=(f"[{Emojis.stackoverflow_upvote} {item['score']} " - f"{Emojis.stackoverflow_views} {item['view_count']} " - f"{Emojis.stackoverflow_ans} {item['answer_count']} " - f"{Emojis.stackoverflow_tag} {', '.join(item['tags'][:3])}]" - f"({item['link']})"), + value=( + f"[{Emojis.stackoverflow_upvote} {item['score']} " + f"{Emojis.stackoverflow_views} {item['view_count']} " + f"{Emojis.stackoverflow_ans} {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: -- cgit v1.2.3 From 4c7091708d92e8066045de25076959d94e4682e5 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Thu, 13 May 2021 23:51:41 +0530 Subject: remove redundant quote --- bot/exts/evergreen/stackoverflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 46577cdd..6a65bd0b 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -62,7 +62,7 @@ class Stackoverflow(commands.Cog): ) for item in top5: embed.add_field( - name=f"{unescape(item['title'])}", + name=unescape(item['title']), value=( f"[{Emojis.stackoverflow_upvote} {item['score']} " f"{Emojis.stackoverflow_views} {item['view_count']} " -- cgit v1.2.3 From 56896ebc00965de25d69c3781ae1c12235a3b166 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Thu, 13 May 2021 23:53:38 +0530 Subject: change typehint to bot.Bot --- bot/exts/evergreen/stackoverflow.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 6a65bd0b..bda66f95 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -6,6 +6,7 @@ from discord import Embed from discord.errors import HTTPException from discord.ext import commands +from bot import bot from bot.constants import Colours, Emojis logger = logging.getLogger(__name__) @@ -25,7 +26,7 @@ ERR_EMBED = Embed( class Stackoverflow(commands.Cog): """Contains command to interact with stackoverflow from discord.""" - def __init__(self, bot: commands.Bot): + def __init__(self, bot: bot.Bot): self.bot = bot @commands.command(aliases=["so"]) @@ -82,7 +83,7 @@ class Stackoverflow(commands.Cog): await ctx.send(embed=search_query_too_long) -def setup(bot: commands.Bot) -> None: +def setup(bot: bot.Bot) -> None: """Loads Stackoverflow Cog.""" bot.add_cog(Stackoverflow(bot)) -- cgit v1.2.3 From 5c7818455ddf6411c86aea87c5da79f2b9eb3aa2 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Thu, 13 May 2021 23:54:08 +0530 Subject: squish imports --- bot/exts/evergreen/stackoverflow.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index bda66f95..e97e0318 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -2,8 +2,7 @@ import logging from html import unescape from urllib.parse import quote_plus -from discord import Embed -from discord.errors import HTTPException +from discord import Embed, HTTPException from discord.ext import commands from bot import bot -- cgit v1.2.3 From 9e89102f7061e0645563de7333fd162e431e53ef Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Mon, 7 Jun 2021 20:52:23 +0530 Subject: Use reddit emojis for upvote and answers --- bot/constants.py | 4 ++-- bot/exts/evergreen/stackoverflow.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/constants.py b/bot/constants.py index aa26be83..1c62e78b 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -222,10 +222,10 @@ class Emojis: status_offline = "<:status_offline:470326266537705472>" - stackoverflow_upvote = environ.get('stack_upvote', "<:stack_upvote:*>") # TODO: Fill in numbers (ids) + # stackoverflow_upvote = environ.get('stack_upvote', "<:stack_upvote:*>") # TODO: Fill in numbers (ids) stackoverflow_tag = environ.get('stack_tag', "<:stack_tag:*> ") stackoverflow_views = environ.get('stack_views', "<:stack_eye:*>") - stackoverflow_ans = environ.get('stack_ans', "<:sta + # stackoverflow_ans = environ.get('stack_ans', "<:sta") # Reddit emojis reddit = "<:reddit:676030265734332427>" diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index e97e0318..45dcb62a 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -64,9 +64,9 @@ class Stackoverflow(commands.Cog): embed.add_field( name=unescape(item['title']), value=( - f"[{Emojis.stackoverflow_upvote} {item['score']} " + f"[{Emojis.reddit_upvote} {item['score']} " f"{Emojis.stackoverflow_views} {item['view_count']} " - f"{Emojis.stackoverflow_ans} {item['answer_count']} " + f"{Emojis.reddit_comments} {item['answer_count']} " f"{Emojis.stackoverflow_tag} {', '.join(item['tags'][:3])}]" f"({item['link']})" ), -- cgit v1.2.3 From cd55b4796296c5675c17e6cc20a1e168380b8b08 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Mon, 7 Jun 2021 20:54:04 +0530 Subject: stop spamming stackoverflow api in case status code is not 200 --- bot/exts/evergreen/stackoverflow.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 45dcb62a..8607cac7 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -34,14 +34,11 @@ class Stackoverflow(commands.Cog): """Sends the top 5 results of a search query from stackoverflow.""" encoded_search_query = quote_plus(search_query) - for _ in range(3): - async with self.bot.http_session.get(BASE_URL.format(query=encoded_search_query)) as response: - if response.status == 200: - data = await response.json() - break - else: - logger.error(f'Status code is not 200, it is {response.status}') - continue + async with self.bot.http_session.get(BASE_URL.format(query=encoded_search_query)) as response: + if response.status == 200: + data = await response.json() + else: + logger.error(f'Status code is not 200, it is {response.status}') if response.status != 200: # If the status is still not 200 after the 3 tries await ctx.send(embed=ERR_EMBED) return -- cgit v1.2.3 From 5296e7a7aec536de86a752a6f424a582d32bade5 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Mon, 7 Jun 2021 20:55:21 +0530 Subject: use normal string instead of raw string --- bot/exts/evergreen/stackoverflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 8607cac7..8dd4a060 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -44,7 +44,7 @@ class Stackoverflow(commands.Cog): return elif not data['items']: no_search_result = Embed( - title=f"No search results found for {search_query!r}", + title=f"No search results found for {search_query}", color=Colours.soft_red ) await ctx.send(embed=no_search_result) -- cgit v1.2.3 From 14f7c354aabc316c25c1b6cedeb7fcbd6c916098 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Mon, 7 Jun 2021 20:56:05 +0530 Subject: Remove user's query from embed title --- bot/exts/evergreen/stackoverflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 8dd4a060..22963ad9 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -52,7 +52,7 @@ class Stackoverflow(commands.Cog): top5 = data["items"][:5] embed = Embed( - title=f"Search results for {search_query!r} - Stackoverflow", + title="Search results - Stackoverflow", url=SEARCH_URL.format(query=encoded_search_query), description=f"Here are the top {len(top5)} results:", color=Colours.orange -- cgit v1.2.3 From 46d55f402a4f66372f12cff2c98f0b834bc83079 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Mon, 7 Jun 2021 20:56:31 +0530 Subject: remove attribution comments --- bot/exts/evergreen/stackoverflow.py | 3 --- 1 file changed, 3 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 22963ad9..62179150 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -82,6 +82,3 @@ class Stackoverflow(commands.Cog): def setup(bot: bot.Bot) -> None: """Loads Stackoverflow Cog.""" bot.add_cog(Stackoverflow(bot)) - -# Upvote and Comment icon taken from Reddit bot -# Tag icon made by Freepik (https://www.flaticon.com/authors/freepik) from www.flaticon.com, and edited by me -- cgit v1.2.3 From e0ec9b4811e5dcb60b4815c0376356697b6f73f3 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Wed, 9 Jun 2021 22:15:23 +0530 Subject: Remove unecessary if --- bot/exts/evergreen/stackoverflow.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 62179150..30b0a825 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -39,10 +39,9 @@ class Stackoverflow(commands.Cog): data = await response.json() else: logger.error(f'Status code is not 200, it is {response.status}') - if response.status != 200: # If the status is still not 200 after the 3 tries - await ctx.send(embed=ERR_EMBED) - return - elif not data['items']: + 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 -- cgit v1.2.3 From 4cf74068aeb6b4c198e6bea438c320cf2978e863 Mon Sep 17 00:00:00 2001 From: Vivaan Parashar Date: Wed, 9 Jun 2021 22:16:53 +0530 Subject: Change docstring --- bot/exts/evergreen/stackoverflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bot/exts/evergreen/stackoverflow.py') diff --git a/bot/exts/evergreen/stackoverflow.py b/bot/exts/evergreen/stackoverflow.py index 30b0a825..a53cecf7 100644 --- a/bot/exts/evergreen/stackoverflow.py +++ b/bot/exts/evergreen/stackoverflow.py @@ -79,5 +79,5 @@ class Stackoverflow(commands.Cog): def setup(bot: bot.Bot) -> None: - """Loads Stackoverflow Cog.""" + """Load the Stackoverflow Cog.""" bot.add_cog(Stackoverflow(bot)) -- cgit v1.2.3