aboutsummaryrefslogtreecommitdiffstats
path: root/bot/exts/evergreen/githubinfo.py
diff options
context:
space:
mode:
authorGravatar Janine vN <[email protected]>2021-09-05 00:12:47 -0400
committerGravatar Janine vN <[email protected]>2021-09-05 00:12:47 -0400
commit66c888ad68ad88ba1d39c2ac4824469560b8c29a (patch)
tree706917000c39c3af1fc92c47fd59fe31a63f601a /bot/exts/evergreen/githubinfo.py
parentMove internal eval and rename utils to core (diff)
Move practical functions into utilities folder
Separates out the useful/practical seasonal bot features from the evergreen folder into a "utilities" folder. Adjusts the paths to resources to reflect the folder move.
Diffstat (limited to 'bot/exts/evergreen/githubinfo.py')
-rw-r--r--bot/exts/evergreen/githubinfo.py178
1 files changed, 0 insertions, 178 deletions
diff --git a/bot/exts/evergreen/githubinfo.py b/bot/exts/evergreen/githubinfo.py
deleted file mode 100644
index bbc9061a..00000000
--- a/bot/exts/evergreen/githubinfo.py
+++ /dev/null
@@ -1,178 +0,0 @@
-import logging
-import random
-from datetime import datetime
-from urllib.parse import quote, quote_plus
-
-import discord
-from discord.ext import commands
-
-from bot.bot import Bot
-from bot.constants import Colours, 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."""
-
- def __init__(self, bot: Bot):
- self.bot = bot
-
- async def fetch_data(self, url: str) -> dict:
- """Retrieve data as a dictionary."""
- async with self.bot.http_session.get(url) as r:
- return await r.json()
-
- @commands.group(name="github", aliases=("gh", "git"))
- @commands.cooldown(1, 10, commands.BucketType.user)
- async def github_group(self, ctx: commands.Context) -> None:
- """Commands for finding information 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: str) -> None:
- """Fetches a user's GitHub information."""
- async with ctx.typing():
- user_data = await self.fetch_data(f"{GITHUB_API_URL}/users/{quote_plus(username)}")
-
- # User_data will not have a message key if the user exists
- if "message" in user_data:
- embed = discord.Embed(
- title=random.choice(NEGATIVE_REPLIES),
- description=f"The profile for `{username}` was not found.",
- colour=Colours.soft_red
- )
-
- await ctx.send(embed=embed)
- return
-
- org_data = await self.fetch_data(user_data["organizations_url"])
- orgs = [f"[{org['login']}](https://github.com/{org['login']})" for org in org_data]
- orgs_to_add = " | ".join(orgs)
-
- gists = user_data["public_gists"]
-
- # Forming blog link
- if user_data["blog"].startswith("http"): # Blog link is complete
- blog = user_data["blog"]
- elif user_data["blog"]: # Blog exists but the link is not complete
- blog = f"https://{user_data['blog']}"
- else:
- blog = "No website link available"
-
- embed = discord.Embed(
- title=f"`{user_data['login']}`'s GitHub profile info",
- description=f"```\n{user_data['bio']}\n```\n" if user_data["bio"] else "",
- colour=discord.Colour.blurple(),
- url=user_data["html_url"],
- timestamp=datetime.strptime(user_data["created_at"], "%Y-%m-%dT%H:%M:%SZ")
- )
- embed.set_thumbnail(url=user_data["avatar_url"])
- embed.set_footer(text="Account created at")
-
- if user_data["type"] == "User":
-
- embed.add_field(
- name="Followers",
- value=f"[{user_data['followers']}]({user_data['html_url']}?tab=followers)"
- )
- 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)"
- )
-
- if user_data["type"] == "User":
- embed.add_field(
- name="Gists",
- value=f"[{gists}](https://gist.github.com/{quote_plus(username, safe='')})"
- )
-
- 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="Website", value=blog)
-
- await ctx.send(embed=embed)
-
- @github_group.command(name='repository', aliases=('repo',))
- async def github_repo_info(self, ctx: commands.Context, *repo: str) -> None:
- """
- Fetches a repositories' GitHub information.
-
- The repository should look like `user/reponame` or `user reponame`.
- """
- repo = "/".join(repo)
- if repo.count("/") != 1:
- embed = discord.Embed(
- title=random.choice(NEGATIVE_REPLIES),
- description="The repository should look like `user/reponame` or `user reponame`.",
- colour=Colours.soft_red
- )
-
- await ctx.send(embed=embed)
- return
-
- async with ctx.typing():
- repo_data = await self.fetch_data(f"{GITHUB_API_URL}/repos/{quote(repo)}")
-
- # There won't be a message key if this repo exists
- if "message" in repo_data:
- embed = discord.Embed(
- title=random.choice(NEGATIVE_REPLIES),
- description="The requested repository was not found.",
- colour=Colours.soft_red
- )
-
- await ctx.send(embed=embed)
- return
-
- embed = discord.Embed(
- title=repo_data["name"],
- description=repo_data["description"],
- colour=discord.Colour.blurple(),
- url=repo_data["html_url"]
- )
-
- # If it's a fork, then it will have a parent key
- try:
- parent = repo_data["parent"]
- embed.description += f"\n\nForked from [{parent['full_name']}]({parent['html_url']})"
- except KeyError:
- log.debug("Repository is not a fork.")
-
- repo_owner = repo_data["owner"]
-
- 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")
- last_pushed = datetime.strptime(repo_data["pushed_at"], "%Y-%m-%dT%H:%M:%SZ").strftime("%d/%m/%Y at %H:%M")
-
- embed.set_footer(
- text=(
- f"{repo_data['forks_count']} ⑂ "
- f"• {repo_data['stargazers_count']} ⭐ "
- f"• Created At {repo_created_at} "
- f"• Last Commit {last_pushed}"
- )
- )
-
- await ctx.send(embed=embed)
-
-
-def setup(bot: Bot) -> None:
- """Load the GithubInfo cog."""
- bot.add_cog(GithubInfo(bot))