[General] Rich embeds for user/serverinfo (#469)

This commit is contained in:
Lunar Dust 2016-11-17 05:28:58 -06:00 committed by Twentysix
parent b62108c56a
commit 58f1558f00

View File

@ -156,66 +156,101 @@ class General:
await self.bot.say(msg) await self.bot.say(msg)
@commands.command(pass_context=True, no_pm=True) @commands.command(pass_context=True, no_pm=True)
async def userinfo(self, ctx, user : discord.Member = None): async def userinfo(self, ctx, user: discord.Member=None):
"""Shows users's informations""" """Shows users's informations"""
author = ctx.message.author author = ctx.message.author
server = ctx.message.server server = ctx.message.server
if not user: if not user:
user = author user = author
roles = [x.name for x in user.roles if x.name != "@everyone"] roles = [x.name for x in user.roles if x.name != "@everyone"]
if not roles: roles = ["None"]
data = "```python\n" joined_at = self.fetch_joined_at(user, server)
data += "Name: {}\n".format(escape_mass_mentions(str(user))) since_created = (ctx.message.timestamp - user.created_at).days
data += "Nickname: {}\n".format(escape_mass_mentions(str(user.nick))) since_joined = (ctx.message.timestamp - joined_at).days
data += "ID: {}\n".format(user.id) user_joined = joined_at.strftime("%d %b %Y %H:%M")
user_created = user.created_at.strftime("%d %b %Y %H:%M")
created_on = "{}\n({} days ago)".format(user_created, since_created)
joined_on = "{}\n({} days ago)".format(user_joined, since_joined)
game = "Chilling in {} status".format(user.status)
if user.game is None: if user.game is None:
pass pass
elif user.game.url is None: elif user.game.url is None:
data += "Playing: {}\n".format(escape_mass_mentions(str(user.game))) game = "Playing {}".format(user.game)
else: else:
data += "Streaming: {} ({})\n".format(escape_mass_mentions(str(user.game)), game = "Streaming: {} ({})".format(user.game, user.game.url)
escape_mass_mentions(user.game.url))
passed = (ctx.message.timestamp - user.created_at).days if roles:
data += "Created: {} ({} days ago)\n".format(user.created_at, passed) roles = sorted(roles, key=[x.name for x in server.role_hierarchy
joined_at = self.fetch_joined_at(user, server) if x.name != "@everyone"].index)
passed = (ctx.message.timestamp - joined_at).days roles = ", ".join(roles)
data += "Joined: {} ({} days ago)\n".format(joined_at, passed)
data += "Roles: {}\n".format(", ".join(roles))
if user.avatar_url != "":
data += "Avatar:"
data += "```"
data += user.avatar_url
else: else:
data += "```" roles = "None"
await self.bot.say(data)
data = discord.Embed(description=game, colour=user.colour)
data.add_field(name="Joined Discord on", value=created_on)
data.add_field(name="Joined this server on", value=joined_on)
data.add_field(name="Nickname", value=str(user.nick))
data.add_field(name="Roles", value=roles, inline=False)
data.set_footer(text="ID: {}".format(user.id))
if user.avatar_url:
data.set_author(name=user.name, url=user.avatar_url,
icon_url=user.avatar_url)
else:
data.set_author(name=user.name)
try:
await self.bot.say(embed=data)
except:
await self.bot.say("I need the `Embed links` permission "
"to send this")
@commands.command(pass_context=True, no_pm=True) @commands.command(pass_context=True, no_pm=True)
async def serverinfo(self, ctx): async def serverinfo(self, ctx):
"""Shows server's informations""" """Shows server's informations"""
server = ctx.message.server server = ctx.message.server
online = str(len([m.status for m in server.members if str(m.status) == "online" or str(m.status) == "idle"])) online = len([m.status for m in server.members
total_users = str(len(server.members)) if m.status == discord.Status.online or
text_channels = len([x for x in server.channels if str(x.type) == "text"]) m.status == discord.Status.idle])
total_users = len(server.members)
text_channels = len([x for x in server.channels
if x.type == discord.ChannelType.text])
voice_channels = len(server.channels) - text_channels voice_channels = len(server.channels) - text_channels
data = "```python\n"
data += "Name: {}\n".format(server.name)
data += "ID: {}\n".format(server.id)
data += "Region: {}\n".format(server.region)
data += "Users: {}/{}\n".format(online, total_users)
data += "Text channels: {}\n".format(text_channels)
data += "Voice channels: {}\n".format(voice_channels)
data += "Roles: {}\n".format(len(server.roles))
passed = (ctx.message.timestamp - server.created_at).days passed = (ctx.message.timestamp - server.created_at).days
data += "Created: {} ({} days ago)\n".format(server.created_at, passed) created_at = ("Created on {} ({} days ago!)"
data += "Owner: {}\n".format(server.owner) "".format(server.created_at.strftime("%d %b %Y %H:%M"),
if server.icon_url != "": passed))
data += "Icon:"
data += "```" colour = ''.join([randchoice('0123456789ABCDEF') for x in range(6)])
data += server.icon_url colour = int(colour, 16)
data = discord.Embed(
description="ID: " + server.id,
colour=discord.Colour(value=colour))
data.add_field(name="Region", value=str(server.region))
data.add_field(name="Users", value="{}/{}".format(online, total_users))
data.add_field(name="Text Channels", value=text_channels)
data.add_field(name="Voice Channels", value=voice_channels)
data.add_field(name="Roles", value=len(server.roles))
data.add_field(name="Owner", value=str(server.owner))
data.set_footer(text=created_at)
if server.icon_url:
data.set_author(name=server.name, url=server.icon_url,
icon_url=server.icon_url)
else: else:
data += "```" data.set_author(name=server.name)
await self.bot.say(data)
try:
await self.bot.say(embed=data)
except:
await self.bot.say("I need the `Embed links` permission "
"to send this")
@commands.command() @commands.command()
async def urban(self, *, search_terms : str, definition_number : int=1): async def urban(self, *, search_terms : str, definition_number : int=1):