diff --git a/jarvis/cogs/util.py b/jarvis/cogs/util.py index 809791f..689ad93 100644 --- a/jarvis/cogs/util.py +++ b/jarvis/cogs/util.py @@ -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))