Add roleinfo/userinfo, closes #71

This commit is contained in:
Zeva Rose 2021-07-25 01:25:19 -06:00
parent 433563d52d
commit 44d6b5675e

View file

@ -1,9 +1,11 @@
import re
from io import BytesIO
from discord import User
from discord import File, Role, User
from discord.ext import commands
from discord_slash import SlashContext, cog_ext
from discord_slash.utils.manage_commands import create_option
from PIL import Image, ImageDraw
import jarvis
from jarvis import config, jarvis_self, logo
@ -11,6 +13,8 @@ from jarvis.data.robotcamo import emotes, names
from jarvis.utils import build_embed, convert_bytesize, get_repo_hash
from jarvis.utils.field import Field
guild_ids = [862402786116763668]
class UtilCog(commands.Cog):
"""
@ -118,6 +122,113 @@ class UtilCog(commands.Cog):
)
await ctx.send(embed=embed)
@cog_ext.cog_slash(
name="roleinfo",
description="Get role info",
guild_ids=guild_ids,
options=[
create_option(
name="role",
description="Role to get info of",
option_type=8,
required=True,
)
],
)
async def _roleinfo(self, ctx: SlashContext, role: Role):
fields = [
Field(name="ID", value=role.id),
Field(name="Name", value=role.name),
Field(name="Color", value=str(role.color)),
Field(name="Mention", value=f"`{role.mention}`"),
Field(name="Hoisted", value="Yes" if role.hoist else "No"),
Field(name="Position", value=str(role.position)),
Field(
name="Mentionable", value="Yes" if role.mentionable else "No"
),
]
embed = build_embed(
title="",
description="",
fields=fields,
color=str(role.color),
timestamp=role.created_at,
)
embed.set_footer(text="Role Created")
embed.set_thumbnail(url="attachment://color_circle.png")
im = Image.new("RGBA", size=(200, 200), color=(0, 0, 0, 0))
canvas = ImageDraw.Draw(im)
color = role.color.to_rgb()
color = list(color)
color.append(255)
color = tuple(color)
canvas.rectangle([(0, 0), (200, 200)], fill=color)
del canvas
with BytesIO() as image_bytes:
im.save(image_bytes, "PNG")
image_bytes.seek(0)
color_circle = File(image_bytes, filename="color_circle.png")
await ctx.send(embed=embed, file=color_circle)
@cog_ext.cog_slash(
name="userinfo",
description="Get user info",
guild_ids=guild_ids,
options=[
create_option(
name="user",
description="User to get info of",
option_type=6,
required=False,
)
],
)
async def _userinfo(self, ctx: SlashContext, user: User = None):
if not user:
user = ctx.author
user_roles = user.roles
if user_roles:
user_roles = sorted(user.roles, key=lambda x: -x.position)
_ = user_roles.pop(-1)
fields = [
Field(
name="Joined",
value=user.joined_at.strftime("%a, %b %d, %Y %I:%M %p"),
),
Field(
name="Registered",
value=user.created_at.strftime("%a, %b %d, %Y %I:%M %p"),
),
Field(
name=f"Roles [{len(user_roles)}]",
value=" ".join([x.mention for x in user_roles])
if user_roles
else "None",
inline=False,
),
]
embed = build_embed(
title="",
description=user.mention,
fields=fields,
color=str(user_roles[0].color) if user_roles else "#FF0000",
)
embed.set_author(
name=f"{user.name}#{user.discriminator}", icon_url=user.avatar_url
)
embed.set_thumbnail(url=user.avatar_url)
embed.set_footer(text=f"ID: {user.id}")
await ctx.send(embed=embed)
def setup(bot):
bot.add_cog(UtilCog(bot))