aboutsummaryrefslogtreecommitdiffstats
path: root/bot/exts/evergreen/githubinfo.py
diff options
context:
space:
mode:
authorGravatar ToxicKidz <[email protected]>2021-03-19 15:10:58 -0400
committerGravatar ToxicKidz <[email protected]>2021-03-19 15:10:58 -0400
commit1dea5902487a93d1f9a6382d838928d0a9739627 (patch)
tree239b7d8906527b26f690c146328e6cfdeb4dc7a2 /bot/exts/evergreen/githubinfo.py
parentMerge pull request #631 from python-discord/dependabot/pip/pillow-8.1.1 (diff)
Make .github a group, and add github repo + user commands
Diffstat (limited to 'bot/exts/evergreen/githubinfo.py')
-rw-r--r--bot/exts/evergreen/githubinfo.py72
1 files changed, 64 insertions, 8 deletions
diff --git a/bot/exts/evergreen/githubinfo.py b/bot/exts/evergreen/githubinfo.py
index 2e38e3ab..74371244 100644
--- a/bot/exts/evergreen/githubinfo.py
+++ b/bot/exts/evergreen/githubinfo.py
@@ -8,9 +8,12 @@ from discord.ext import commands
from discord.ext.commands.cooldowns import BucketType
from bot.constants import NEGATIVE_REPLIES
+from bot.exts.utils.extensions import invoke_help_command
log = logging.getLogger(__name__)
+GITHUB_API_URL = "https://api.github.com"
+
class GithubInfo(commands.Cog):
"""Fetches info from GitHub."""
@@ -23,21 +26,27 @@ class GithubInfo(commands.Cog):
async with self.bot.http_session.get(url) as r:
return await r.json()
- @commands.command(name='github', aliases=['gh'])
- @commands.cooldown(1, 60, BucketType.user)
- async def get_github_info(self, ctx: commands.Context, username: Optional[str]) -> None:
+ @commands.group(name='github', aliases=('gh',))
+ @commands.cooldown(1, 10, BucketType.user)
+ async def github_group(self, ctx: commands.Context):
+ """Commands for finding info related to Github."""
+ if ctx.invoked_subcommand is None:
+ await invoke_help_command(ctx)
+
+ @github_group.command(name='user', aliases=('userinfo',))
+ async def github_user_info(self, ctx: commands.Context, username: Optional[str]) -> None:
"""
Fetches a user's GitHub information.
Username is optional and sends the help command if not specified.
"""
if username is None:
- await ctx.invoke(self.bot.get_command('help'), 'github')
+ await invoke_help_command(ctx)
ctx.command.reset_cooldown(ctx)
return
async with ctx.typing():
- user_data = await self.fetch_data(f"https://api.github.com/users/{username}")
+ user_data = await self.fetch_data(f"{GITHUB_API_URL}/users/{username}")
# User_data will not have a message key if the user exists
if user_data.get('message') is not None:
@@ -74,24 +83,71 @@ class GithubInfo(commands.Cog):
embed.add_field(name="Followers",
value=f"[{user_data['followers']}]({user_data['html_url']}?tab=followers)")
- embed.add_field(name="\u200b", value="\u200b")
embed.add_field(name="Following",
value=f"[{user_data['following']}]({user_data['html_url']}?tab=following)")
embed.add_field(name="Public repos",
value=f"[{user_data['public_repos']}]({user_data['html_url']}?tab=repositories)")
- embed.add_field(name="\u200b", value="\u200b")
if user_data['type'] == "User":
embed.add_field(name="Gists", value=f"[{gists}](https://gist.github.com/{username})")
embed.add_field(name=f"Organization{'s' if len(orgs)!=1 else ''}",
value=orgs_to_add if orgs else "No organizations")
- embed.add_field(name="\u200b", value="\u200b")
embed.add_field(name="Website", value=blog)
await ctx.send(embed=embed)
+ @github_group.command(name='repo', aliases=('repositories',))
+ async def github_repo_info(self, ctx: commands.Context, repo: Optional[str]):
+ """
+ Fetches a repositories's GitHub information. Repository should look like `user/reponame`.
+
+ Repository is optional and sends the help command if not specified.
+ """
+ if repo is None:
+ await invoke_help_command(ctx)
+ ctx.command.reset_cooldown()
+ return
+ async with ctx.typing():
+ repo_data = await self.fetch_data(f"{GITHUB_API_URL}/repos/{repo}")
+
+ # There won't be a message key if this repo exists
+ if repo_data.get('message') is not None:
+ await ctx.send(embed=discord.Embed(title=random.choice(NEGATIVE_REPLIES),
+ description=f"The requested repository was not found.",
+ colour=discord.Colour.red()))
+ return
+
+ repo_owner = repo_data['owner']
+
+ parent = repo_data.get('parent')
+
+ embed = discord.Embed(title=f"{repo_data['name']}",
+ description=repo_data["description"],
+ colour=0x7289da,
+ url=repo_data['html_url'],
+ timestamp=datetime.strptime(repo_data['pushed_at'], "%Y-%m-%dT%H:%M:%SZ")
+ )
+
+ # If it's a fork, then it will have a parent key
+ if parent:
+ embed.description += f"\nForked from [{parent['full_name']}]({parent['html_url']})"
+
+ embed.set_author(
+ name=repo_owner["login"],
+ url=repo_owner["html_url"],
+ icon_url=repo_owner["avatar_url"]
+ )
+
+ repo_created_at = datetime.strptime(repo_data['created_at'], "%Y-%m-%dT%H:%M:%SZ").strftime("%d/%m/%Y")
+
+ embed.set_footer(text=f"{repo_data['forks_count']} "
+ f"⑂ • {repo_data['stargazers_count']} ⭐ • Created At {repo_created_at} • "
+ " Last commit ")
+
+ await ctx.send(embed=embed)
+
def setup(bot: commands.Bot) -> None:
"""Adding the cog to the bot."""