diff options
| author | 2019-10-02 20:58:00 +0100 | |
|---|---|---|
| committer | 2019-10-02 20:58:00 +0100 | |
| commit | 1da22f8a9bd64f13883a4bc8011c9f5069b4dac9 (patch) | |
| tree | deaed1b2caf7f650f05e12613cdff5b8a12629c9 /bot/seasons/evergreen/issues.py | |
| parent | Removed unused json (diff) | |
| parent | Merge pull request #285 from Numerlor/hacktober-date-channel-fixes (diff) | |
Merge pull request #3 from python-discord/master
Update
Diffstat (limited to 'bot/seasons/evergreen/issues.py')
| -rw-r--r-- | bot/seasons/evergreen/issues.py | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/bot/seasons/evergreen/issues.py b/bot/seasons/evergreen/issues.py index fb85323f..438ab475 100644 --- a/bot/seasons/evergreen/issues.py +++ b/bot/seasons/evergreen/issues.py @@ -3,41 +3,55 @@ import logging import discord from discord.ext import commands +from bot.constants import Colours +from bot.decorators import override_in_channel + log = logging.getLogger(__name__) class Issues(commands.Cog): - """Cog that allows users to retrieve issues from GitHub""" + """Cog that allows users to retrieve issues from GitHub.""" - def __init__(self, bot): + def __init__(self, bot: commands.Bot): self.bot = bot @commands.command(aliases=("issues",)) - async def issue(self, ctx, number: int, repository: str = "seasonalbot", user: str = "python-discord"): - """Command to retrieve issues from a GitHub repository""" + @override_in_channel() + async def issue( + self, ctx: commands.Context, number: int, repository: str = "seasonalbot", user: str = "python-discord" + ) -> None: + """Command to retrieve issues from a GitHub repository.""" + api_url = f"https://api.github.com/repos/{user}/{repository}/issues/{number}" + failed_status = { + 404: f"Issue #{number} doesn't exist in the repository {user}/{repository}.", + 403: f"Rate limit exceeded. Please wait a while before trying again!" + } + + async with self.bot.http_session.get(api_url) as r: + json_data = await r.json() + response_code = r.status - url = f"https://api.github.com/repos/{user}/{repository}/issues/{str(number)}" - status = {"404": f"Issue #{str(number)} doesn't exist in the repository {user}/{repository}.", - "403": f"Rate limit exceeded. Please wait a while before trying again!"} + if response_code in failed_status: + return await ctx.send(failed_status[response_code]) - async with self.bot.http_session.get(url) as r: - json_data = await r.json() + repo_url = f"https://github.com/{user}/{repository}" + issue_embed = discord.Embed(colour=Colours.bright_green) + issue_embed.add_field(name="Repository", value=f"[{user}/{repository}]({repo_url})", inline=False) + issue_embed.add_field(name="Issue Number", value=f"#{number}", inline=False) + issue_embed.add_field(name="Status", value=json_data["state"].title()) + issue_embed.add_field(name="Link", value=json_data["html_url"], inline=False) - if str(r.status) in status: - return await ctx.send(status.get(str(r.status))) + description = json_data["body"] + if len(description) > 1024: + placeholder = " [...]" + description = f"{description[:1024 - len(placeholder)]}{placeholder}" - valid = discord.Embed(colour=0x00ff37) - valid.add_field(name="Repository", value=f"{user}/{repository}", inline=False) - valid.add_field(name="Issue Number", value=f"#{str(number)}", inline=False) - valid.add_field(name="Status", value=json_data.get("state").title()) - valid.add_field(name="Link", value=url, inline=False) - if len(json_data.get("body")) < 1024: - valid.add_field(name="Description", value=json_data.get("body"), inline=False) - await ctx.send(embed=valid) + issue_embed.add_field(name="Description", value=description, inline=False) + await ctx.send(embed=issue_embed) -def setup(bot): - """Cog Retrieves Issues From Github""" +def setup(bot: commands.Bot) -> None: + """Github Issues Cog Load.""" bot.add_cog(Issues(bot)) log.info("Issues cog loaded") |