Sl4ker

Discord.py Avatar completo cmd

Oct 15th, 2020 (edited)
1,503
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import discord
  2. from datetime import datetime
  3. from discord.ext import commands
  4.  
  5. ...
  6.  
  7.  
  8. @commands.command(name='avatar')
  9. async def _avatar(ctx, *args):
  10.     # observe que este * na frente do nome do parâmetro, diz que estamos esperando uma lista
  11.     # então, se a pessoa digitar "avatar fulano de tal#1234", o "args" vai ser ['fulano', 'de', 'tal#1234']
  12.  
  13.     # está vai ser a cor, em hexadecial, que vai ser usada nos embeds
  14.     colour = discord.Colour(0xBDECB6)
  15.     if ctx.message.mentions:  # se tiver alguma menção na mensagem
  16.         # vamos pegar a url do avatar da pessoa mencionada e salvar na variável "avatar_url"
  17.         avatar_url = ctx.message.mentions[0].avatar_url_as(size=2048)
  18.         # depois, vamos criar um embed, para mostrar este avatar
  19.         embed = discord.Embed(title=f'Avatar do(a) {str(ctx.message.mentions[0])}!',
  20.                               colour=colour,
  21.                               # nesta parte, a palavra "aqui" vai ficar em azul
  22.                               # e quando a pessoa clicar, vai ser redirecionada para o
  23.                               # link do avatar da pessoa
  24.                               description=f'Clique [aqui]({avatar_url}) para baixar a foto!',
  25.                               timestamp=datetime.utcnow())
  26.         # vai aparecer em baixo do embed a foto do quem usou o comando e o nome da pessoa
  27.         embed.set_footer(text=f'{ctx.author}', icon_url=ctx.author.avatar_url)
  28.         # aqui, estamos colocando o avatar da pessoa, no embed
  29.         embed.set_image(url=avatar_url)
  30.         # e vamos enviar este embed
  31.         await ctx.send(embed=embed)
  32.     else:  # se a pessoa não mencionou ninguém, entra aqui
  33.         if args:  # se a pessoa passou pelo menos alguma coisa
  34.             if len(args) == 1:  # se a pessoa passou 1 item, vamos ver se este item é um id
  35.                 try:  # vai tentar converter o argumento para int
  36.                     # tentativa de conversão de string para int
  37.                     id_user = int(args[0])
  38.                     # se chegou aqui, vai tentar pegar o usuário com esse id
  39.                     user = bot.get_user(id_user)
  40.                     # se o bot não achou o user, ele vai tentar pega pela API do discord
  41.                     if user is None:
  42.                         try:
  43.                             user = await bot.fetch_user(id_user)
  44.                         except discord.errors.NotFound:
  45.                             # vai dar este erro, ne a API não achar o user
  46.                             user = None
  47.                     # se nem o bot e nem a API achar o user:
  48.                     if user is None:
  49.                         return await ctx.send(f'{ctx.author.mention} id inválido!')
  50.                     # se não passou pelo return acima
  51.                     # é porque o user não é None
  52.                     # então, vamos mandar o avatar desta pessoa
  53.  
  54.                     # vamos salvar a url do avatar do user, na variavel
  55.                     avatar_url = user.avatar_url_as(size=2048)
  56.                     e = discord.Embed(title=f'Avatar do(a) {str(user)}!',
  57.                                       colour=colour,
  58.                                       # nesta parte, a palavra "aqui" vai ficar em azul
  59.                                       # e quando a pessoa clicar, vai ser redirecionada para o
  60.                                       # link do avatar da pessoa
  61.                                       description=f'Clique [aqui]({avatar_url}) para baixar a foto!',
  62.                                       timestamp=datetime.utcnow())
  63.                     # vai aparecer em baixo do embed a foto do quem usou o comando e o nome da pessoa
  64.                     e.set_footer(text=f'{ctx.author}', icon_url=ctx.author.avatar_url)
  65.                     # aqui, estamos colocando o avatar da pessoa, no embed
  66.                     e.set_image(url=avatar_url)
  67.                     # e enviando o embed
  68.                     return await ctx.send(embed=e)
  69.                 except ValueError:  # se der ValueError, é porque a pessoa não passou apenas números
  70.                     pass
  71.             # se chegou até aqui, é porque a pessoa não passou um id ou passou mais de 1 item
  72.             # ou ela não passou apenas números
  73.             user = None
  74.             # vai transformar a lista de argumentos, numa string unica
  75.             args = ' '.join(args)
  76.             # se o comando foi usado de um servidor
  77.             if ctx.guild:
  78.                 # vai pegar todos os membros do servidor
  79.                 for member in ctx.guild.members:
  80.                     # se o membro tiver um nick
  81.                     if member.nick is not None:
  82.                         # vai ver se o usuário digitou o nick neste pessoaz
  83.                         if member.nick.lower() == args.lower():
  84.                             user = member
  85.                             break  # para o for se achou o membro
  86.                     # vai ver se a pessoa passou o nome de um membro ou o nome#tag dele
  87.                     if (args.lower() == member.name.lower()) or (args.lower() == str(member).lower()):
  88.                         user = member
  89.                         break  # para o for se achou o membro
  90.             # se não achou a pessoa na guild
  91.             if user is None:
  92.                 # vai procurar nos users que o bot tem acesso
  93.                 for _user in bot.users:
  94.                     # se a pessoa passou o nome ou nome#tag de algum user que o bot tem acesso:
  95.                     if (args.lower() == _user.name) or (args.lower() == str(_user)):
  96.                         user = _user
  97.                         break  # se achar, vai parar o for
  98.         else:  # se a pessoa não passou nenhum argumento:
  99.             # o "user" vai ser quem usou o comando
  100.             user = ctx.author
  101.         # se chegou aqui, com o "user" sendo None, vai avisar que o bot não achou ninguém
  102.         if user is None:
  103.             return await ctx.send(f'{ctx.author.mention} Eu não achei nenhum usuário com este nome/nick.')
  104.         # se chegou aqui é porque o "user" não é None, então, vai mandar o avatar dele
  105.         avatar_url = user.avatar_url_as(size=2048)
  106.         e = discord.Embed(title=f'Avatar do(a) {str(user)}!',
  107.                           colour=colour,
  108.                           # nesta parte, a palavra "aqui" vai ficar em azul
  109.                           # e quando a pessoa clicar, vai ser redirecionada para o
  110.                           # link do avatar da pessoa
  111.                           description=f'Clique [aqui]({avatar_url}) para baixar a foto!',
  112.                           timestamp=datetime.utcnow())
  113.         # vai aparecer em baixo do embed a foto do quem usou o comando e o nome da pessoa
  114.         e.set_footer(text=f'{ctx.author}', icon_url=ctx.author.avatar_url)
  115.         # aqui, estamos colocando o avatar da pessoa, no embed
  116.         e.set_image(url=avatar_url)
  117.         # e enviando o embed
  118.         await ctx.send(embed=e)
  119.  
  120.  
  121. ...
  122.  
RAW Paste Data