async def _configs(self, ctx): conexao = Conexao() servidor = ServidorRepository().get_servidor(conexao, ctx.guild.id) conexao.fechar() e = discord.Embed(title=f'Todas as configurações deste servidor!', colour=discord.Colour(random_color()), description='** **', timestamp=datetime.utcnow()) e.set_footer(text=f'{ctx.author}', icon_url=f'{ctx.author.avatar_url}') if ctx.guild.icon: e.set_thumbnail(url=ctx.guild.icon_url) if ctx.guild.banner: e.set_image(url=ctx.guild.banner_url) elif ctx.guild.splash_url: e.set_image(url=ctx.guild.splash_url) elif ctx.guild.discovery_splash_url: e.set_image(url=ctx.guild.discovery_splash_url) e.add_field(name=f'Prefixo', value=f'{servidor.prefixo}', inline=True) if servidor.sugestao_de_comando: sugestao_cmd = '<a:ativado:755774682334101615>' else: sugestao_cmd = '<a:desativado:755774682397147226>' e.add_field(name=f'Sugestao de comando', value=sugestao_cmd, inline=True) if servidor.channel_id_log is not None: e.add_field( name=f'Log', value= f'<a:ativado:755774682334101615>\nEm: <#{servidor.channel_id_log}>', inline=True) logs = [] if servidor.mensagem_deletada: logs.append('``mensagem deletada``') if servidor.mensagem_editada: logs.append('``mensagem editada``') if servidor.avatar_alterado: logs.append('``avatar alterado``') if servidor.nome_alterado: logs.append('``nome alterado``') if servidor.tag_alterado: logs.append('``tag alterada``') if servidor.nick_alterado: logs.append('``nick alterado``') if servidor.role_alterado: logs.append('``cargo adicionado/removido``') if len(logs) != 0: e.add_field(name=f'Logs ativos', value=capitalize(', '.join(logs)), inline=True) else: e.add_field(name=f'Log', value=f'<a:desativado:755774682397147226>', inline=True) await ctx.send(embed=e)
async def _configs(self, ctx): servidor = await ServidorRepository().get_servidor(self.bot.db_connection, ctx.guild.id) e = discord.Embed(title=f'Todas as configurações deste servidor!', colour=discord.Colour.random(), timestamp=datetime.utcnow()) e.set_footer(text=f'{ctx.author}', icon_url=f'{ctx.author.avatar_url}') if ctx.guild.icon: e.set_thumbnail(url=ctx.guild.icon_url) if ctx.guild.banner: e.set_image(url=ctx.guild.banner_url) elif ctx.guild.splash_url: e.set_image(url=ctx.guild.splash_url) elif ctx.guild.discovery_splash_url: e.set_image(url=ctx.guild.discovery_splash_url) e.add_field(name=f'Prefixo', value=f'{servidor.prefixo}', inline=True) if servidor.sugestao_de_comando: sugestao_cmd = self.bot.emoji('ativado') else: sugestao_cmd = self.bot.emoji('desativado') e.add_field(name=f'Sugestao de comando', value=sugestao_cmd, inline=True) if servidor.channel_id_log is not None: e.add_field(name=f'Log', value=f'{self.bot.emoji("ativado")}\nEm: <#{servidor.channel_id_log}>', inline=True) logs = [] if servidor.mensagem_deletada: logs.append('`mensagem deletada`') if servidor.mensagem_editada: logs.append('`mensagem editada`') if servidor.avatar_alterado: logs.append('`avatar alterado`') if servidor.nome_alterado: logs.append('`nome alterado`') if servidor.tag_alterado: logs.append('`tag alterada`') if servidor.nick_alterado: logs.append('`nick alterado`') if servidor.role_alterado: logs.append('`cargo adicionado/removido`') if len(logs) != 0: e.add_field(name=f'Logs ativos', value=capitalize(', '.join(logs)), inline=True) else: e.add_field(name=f'Log', value=f'{self.bot.emoji("desativado")}', inline=True) await ctx.reply(embed=e, mention_author=False)
async def _modificar_comando(self, ctx, comando='', resposta='', in_text='t'): in_text = convert_to_bool(in_text) if in_text is None: await ctx.send( f'Valor ``{in_text}`` inválido! Os valores que eu aceito são: sim, não, yes, no, 0, 1' ) return if ctx.message.content.count('"') != 4: return await ctx.send( 'Parece que você digitou o comando errado!\nVocê deve usar o comando assim:\n' + f'{ctx.prefix}modificar_comando **"**comando**"** **"**resposta**"**' ) if (comando.replace(' ', '') == '') or (resposta.replace(' ', '') == ''): return await self.bot.send_help(ctx) conexao = Conexao() servidor = ServidorRepository().get_servidor(conexao, ctx.guild.id) comando_personalizado = ComandoPersonalizado(servidor, comando.lower(), resposta, in_text) # vai verificar se o comando está no banco # aliás, pra modificar o comando, ele precisa existir no banco if comando_personalizado not in [ cmd for cmd in ComandoPersonalizadoRepository().get_commands( conexao, servidor) ]: conexao.fechar() return await ctx.send( '<a:atencao:755844029333110815> Este comando não existe!') try: ComandoPersonalizadoRepository().update(conexao, comando_personalizado) in_text_str = capitalize(convert_to_string(in_text)) embed = discord.Embed( title=f'Comando modificado com sucesso!', colour=discord.Colour(random_color()), description=f'Comando: {comando}\nResposta: {resposta}\n' f'Ignorar a posição do comando: {in_text_str}', timestamp=datetime.utcnow()) embed.set_footer(text=f'{ctx.author}', icon_url=ctx.author.avatar_url) await ctx.send(content=get_emoji_dance(), embed=embed) except Exception as e: raise e finally: conexao.fechar()
async def _adicionar_comando(self, ctx, comando='', resposta='', in_text='t'): in_text = convert_to_bool(in_text) if in_text is None: return await ctx.send( f'Valor ``{in_text}`` inválido! Os valores que eu aceito são: sim, não, yes, no, 0, 1' ) if ctx.message.content.count('"') < 4: return await ctx.send( 'Parece que você digitou o comando errado!\nVocê deve usar o comando assim:\n' + f'{ctx.prefix}adicionar_comando **"**comando**"** **"**resposta**"**' ) if (comando.replace(' ', '') == '') or (resposta.replace(' ', '') == ''): return await self.bot.send_help(ctx) conexao = Conexao() servidor = ServidorRepository().get_servidor(conexao, ctx.guild.id) comando_personalizado = ComandoPersonalizado(servidor, comando.lower(), resposta, in_text) try: ComandoPersonalizadoRepository().create(conexao, comando_personalizado) in_text_str = capitalize(convert_to_string(in_text)) embed = discord.Embed(title=f'Comando adicionado com sucesso!', colour=discord.Colour(random_color()), description='** **', timestamp=datetime.utcnow()) embed.set_footer(text=f'{ctx.author}', icon_url=ctx.author.avatar_url) embed.add_field( name= f'Comando: {comando.lower()}\nResposta: {resposta}\nIgnorar a posição do comando: {in_text_str}', value=f'** **', inline=False) await ctx.send(content=get_emoji_dance(), embed=embed) except Exception as e: raise e finally: conexao.fechar()
async def _userinfo(self, ctx, *args): try: user = None if ctx.message.mentions: # se tiver alguma menção na mensagem user = ctx.message.mentions[0] # vai pegar a primeira menção else: # se a pessoa não mencionou ninguém, entra aqui if args: # se a pessoa passou pelo menos alguma coisa try: # vai tentar converter o primeiro argumento para int id_user = int(args[0]) # conversão if ctx.guild: user = ctx.guild.get_member( id_user ) # vai tentar pegar o membro do server com esse id if user is None: # se não achou na guild, vai ver se o bot acha user = self.bot.get_user(id_user) # se o bot não achou um user, ele vai pega pela API do discord if user is None: try: user = await self.bot.fetch_user(id_user) except discord.errors.NotFound: user = None except discord.HTTPException: user = None # se mesmo assim, não achar o user if user is None: return await ctx.send( f'{ctx.author.mention} não consegui um usuário com este id!' ) except ValueError: # se der erro, é porque a pessoa não passou número no primeiro argumento user = None # se o user for None if user is None: # se entrou aqui, é o user ainda não foi achado args = ' '.join(args) # listas que vão ser usadas caso a pessoa digite um nome inválido name = [] name_tag = [] nickname = [] # se o comando foi usado de um servidor: if ctx.guild: # vai procurar o membro passado pela pessoa for member in ctx.guild.members: # se a pessoa tiver um nick if member.nick is not None: # vai ver se a pessoa digitou esse nick if member.nick.lower() == args.lower(): user = member break # lista que vai ser usada caso não ache o membro nickname.append(member.nick.lower()) # se a pessoa passou o nome ou nome#tag de algum membro: if (args.lower() == member.name.lower()) or ( args.lower() == str(member).lower()): user = member break # listas que vão ser usadas caso não ache o membro name.append(member.name.lower()) name_tag.append(str(member).lower()) # se não achou a pessoa na guild if user is None: # vai ver se o bot acha a pessoa for _user in self.bot.users: # se a pessoa passou o nome ou nome#tag de algum user que o bot tem acesso: if (args.lower() == _user.name) or (args.lower() == str(_user)): user = _user break name.append(_user.name.lower()) name_tag.append(str(_user).lower()) # se o bot não achou nem o membro nem a pessoa if user is None: # é passado para um set, apenas para eliminar os itens repetidos name = list(set(name)) name_tag = list(set(name_tag)) nickname = list(set(nickname)) # mensagem padrão msg = f'{ctx.author.mention} Eu não achei nenhum usuário com este nome/nick.' user_by_nick = get_most_similar_items_with_similarity( args, nickname) # se veio pelo menos 1 user pelo nick if user_by_nick: # vai pegar o nick mais parecido que veio, e se a similaridade for maior que 60%: if user_by_nick[0][-1] > 0.6: msg += f'\nVocê quis dizer `{capitalize(user_by_nick[0][0])}` ?' raise InvalidArgument(msg=msg) # se não passou pelo return de cima, vai ver se acha algum nome parecido # com o que a pessoa digitou user_by_name_tag = get_most_similar_items_with_similarity( args, name_tag) # se veio pelo menos 1 user pelo nametag if user_by_name_tag: # se for pelo menos 60% similar: if user_by_name_tag[0][-1] > 0.6: msg += f'\nVocê quis dizer `{capitalize(user_by_name_tag[0][0])}` ?' raise InvalidArgument(msg=msg) # se não passou pelo return de cima, vai ver se acha algum user#tag parecido com o # que a pessoa digitou user_by_name = get_most_similar_items_with_similarity( args, name) # se veio pelo menos 1 user pelo nametag if user_by_name: # vai pegar o nome mais parecido que veio e se a similaridade for maior que 60%: if user_by_name[0][-1] > 0.6: msg += f'\nVocê quis dizer `{capitalize(user_by_name[0][0])}` ?' raise InvalidArgument(msg=msg) # se não passou por nenhum if de cima, vai mandar a mensagem dizendo que não achou raise InvalidArgument(msg=msg) else: # se a pessoa não passou nenhum argumento: user = ctx.author roles = None if hasattr(user, 'roles'): roles = ', '.join([ f"<@&{x.id}>" for x in sorted( user.roles, key=lambda x: x.position, reverse=True) if x.id != ctx.guild.default_role.id ]) if len(user.roles) > 1 else None if hasattr(user, 'top_role'): cor = user.top_role.colour.value else: cor = discord.Colour(random_color()) info2 = None badges = '' pf = user.public_flags if ctx.guild: if ctx.guild.owner_id == user.id: badges += '👑' if pf.staff: badges += '<:staff:767508404687863844>' if pf.partner: badges += '<:parceiro:767508978162073670>' if pf.hypesquad: badges += '<:hypesquad:767509441926004746>' if pf.bug_hunter or pf.bug_hunter_level_2: badges += '<:bug_hunter:767510394021216277>' if pf.hypesquad_bravery: badges += '<:hypesquad_bravery:767510882238333009>' if pf.hypesquad_brilliance: badges += '<:hypesquad_brilliance:767511165173235763>' if pf.hypesquad_balance: badges += '<:hypesquad_balance:767511585080999966>' if pf.early_supporter: badges += '<:early_supporter:767511883368366100>' if user.bot: badges += '<:bot:763808270426177538>' if pf.verified_bot_developer or pf.early_verified_bot_developer: badges += '<:dev_tag:763812174514487346>' # como o discord não deixar bots verem o profile do user # e no profile que diz se a pessoa tem nitro, vamos ver se # ela tem um gif no avatar, se tiver, ela tem nitro # ou vamos ver se ela está dando boost no servidor if user.is_avatar_animated(): badges += '<a:nitro:767516060785311744>' elif hasattr(user, 'premium_since'): if user.premium_since is not None: badges += '<a:nitro:767516060785311744>' if hasattr(user, 'premium_since'): if user.premium_since is not None: badges += '<a:boost:767518522619985930>' status = '' if hasattr(user, 'raw_status'): if user.raw_status == 'online': status = '<:online:768461948743843861>' elif user.raw_status == 'dnd': status = '<:dnd:768461948928655381>' elif user.raw_status == 'idle': status = '<:idle:768461949041246229>' elif (user.raw_status == 'offline') or (user.raw_status == 'invisible'): status = '<:offline:768461948790243349>' info1 = discord.Embed( title=f'{badges} {user.display_name} {status}', colour=cor, description='** **', timestamp=datetime.utcnow()) info1.set_footer(text=f'{ctx.author}', icon_url=ctx.author.avatar_url) info1.set_thumbnail(url=user.avatar_url) info1.add_field(name="📑 Nome e tag:", value=f'`{user}`', inline=True) info1.add_field(name="🆔 Id: ", value=f'``{user.id}``', inline=True) if hasattr(user, 'raw_status'): # se a pessoa não estiver offline ou invisivel if (user.raw_status != 'offline') and (user.raw_status != 'invisible'): if user.is_on_mobile(): plataforma = '📱 Celular' else: plataforma = '💻 Pc' info1.add_field(name="🗯 Está no:", value=f'``{plataforma}``', inline=True) if hasattr(user, 'activities'): activities = user.activities streaming = False custom = False playing = False if len(activities) != 0: for activity in activities: if (activity.type.name == 'streaming') and (not streaming): info1.add_field( name= '<:stream:768461948538454017> Fazendo live', value= f'**🎙 Plataforma**: `{activity.platform}`\n' f'**🏷 Nome da live**: `{activity.name}`\n' f'**🕛 Começou**: `{datetime_format(activity.created_at)}`', inline=True) streaming = True elif (activity.type.name == 'custom') and (not custom): if (activity.emoji is not None) or (activity.name is not None): if activity.emoji is not None: if activity.emoji.id in [ c.id for c in self.bot.emojis ]: emoji = f'{activity.emoji}' else: emoji = f'❓' else: emoji = '`🚫 Nulo`' if activity.name is not None: texto = f'`{activity.name}`' else: texto = '`🚫 Nulo`' info1.add_field( name= '<a:disco:763811701589803098> Status personalizado', value=f'🔰 Emoji: {emoji}\n' f'🖋 Frase: {texto}', inline=True) custom = True elif (activity.type.name == 'playing') and (not playing): if activity.start is not None: value = f'`{activity.name}`\n**🕛 Começou a jogar:**\n' + \ f'`{datetime_format(activity.start)}`' else: value = f'`{activity.name}`' info1.add_field(name='🕹 Jogando', value=value, inline=True) playing = True if hasattr(user, 'nick'): if user.nick is not None: info1.add_field(name="🔄 Nickname", value=f'``{user.nick}``', inline=True) info1.add_field( name="🗓 Conta criada em:", value= f'``{user.created_at.strftime("%d/%m/%Y")}``({datetime_format(user.created_at)})', inline=True) if hasattr(user, 'joined_at'): rank_members = [ str(c) for c in sorted(user.guild.members, key=lambda x: x.joined_at) ] info1.add_field( name="📥 Entrou no servidor em:", value= f'`{user.joined_at.strftime("%d/%m/%Y")}`({datetime_format(user.joined_at)})' f'\n**🏆 Está na `{rank_members.index(str(user)) + 1}°` posição, ' 'no rank dos membros mais antigos!**', inline=True) if user.premium_since is not None: info1.add_field( name= "<a:boost:767518522619985930> Começou a dar boost neste servidor em:", value=f'`{user.premium_since.strftime("%d/%m/%Y")}`(' f'{datetime_format(user.premium_since)})', inline=True) # só vai mostrar as permissões da pessoa, se ela estiver no server info2 = discord.Embed(title=f'{badges} {user.display_name}', colour=cor, description='** **', timestamp=datetime.utcnow()) info2.set_footer(text=f'{ctx.author}', icon_url=ctx.author.avatar_url) info2.set_thumbnail(url=user.avatar_url) if roles is not None: info2.add_field( name=f'🏅 Cargos({len(roles.split(", "))}):', value=roles, inline=False) all_perms = user.permissions_in(ctx.message.channel) perms = [] for atributo in dir(all_perms): if isinstance(getattr(all_perms, atributo), bool): if getattr(all_perms, atributo): perms.append(atributo) perms_traduzidas = { 'add_reactions': 'adicionar reações', 'administrator': 'administrador', 'attach_files': 'anexar arquivos', 'ban_members': 'banir membros', 'change_nickname': 'mudar apelido', 'create_instant_invite': 'criar convite', 'embed_links': 'enviar links', 'kick_members': 'expulsar membros', 'manage_channels': 'gerenciar canais', 'manage_emojis': 'gerenciar emojis', 'manage_guild': 'gerenciar servidor', 'manage_messages': 'gerenciar mensagens', 'manage_nicknames': 'gerenciar apelidos', 'manage_permissions': 'gerenciar permissões', 'manage_roles': 'gerenciar cargos', 'manage_webhooks': 'gerenciar webhooks', 'mention_everyone': 'mencionar everyone', 'read_message_history': 'ler histórico de mensagens', 'read_messages': 'ver mensagens', 'send_messages': 'enviar mensagens', 'send_tts_messages': 'enviar mensagem com tts', 'view_audit_log': 'ver registro de auditoria', 'view_channel': 'ver canal', 'view_guild_insights': 'ver desempenho do servidor', 'use_external_emojis': 'usar emojis externos' } for c in range(0, len(perms)): # vai substituir os "_" por espaços e tirar o external_emojis for perm_traducao in perms_traduzidas.items(): if perm_traducao[0] == perms[c]: perms[c] = f"``{perm_traducao[-1]}``" break if 'external_emojis' in perms: perms.pop(perms.index('external_emojis')) if len(perms) >= 1: info2.add_field( name=f'📌 Permissões neste chat({len(perms)}):', value=capitalize(', '.join(perms)), inline=False) else: info2.add_field( name=f'📌 Permissão neste chat(0):', value= 'Este usuário não tem nenhuma permissão, neste chat!', inline=False) except InvalidArgument as erro: return await ctx.send(erro.msg) async def menus_user_info(ctx, msg): def check_page1( reaction, user, msg ): # fica verificando a pagina 1, para ver se é para ir para a pagina 2 user_check = user.id == ctx.author.id reaction_check = str(reaction.emoji) == '➡' msg_check = msg.id == reaction.message.id return user_check and reaction_check and msg_check def check_page2( reaction, user, msg ): # fica verificando a pagina 2, para ver se é para ir para a pagina 1 user_check = user.id == ctx.author.id reaction_check = str(reaction.emoji) == '⬅' msg_check = msg.id == reaction.message.id return user_check and reaction_check and msg_check async def check_reactions_without_perm(ctx, bot, msg): while True: while True: reaction, user = await bot.wait_for('reaction_add', timeout=900.0) if check_page1(reaction, user, msg): break await msg.delete() msg = await ctx.send(embed=info2) await msg.add_reaction('⬅') while True: reaction, user = await bot.wait_for('reaction_add', timeout=900.0) if check_page2(reaction, user, msg): break await msg.delete() msg = await ctx.send(embed=info1) await msg.add_reaction('➡') async def check_reactions_with_perm(bot, msg): while True: while True: reaction, user = await bot.wait_for('reaction_add', timeout=900.0) if check_page1(reaction, user, msg): break await msg.clear_reactions() await msg.add_reaction('⬅') await msg.edit(embed=info2) while True: reaction, user = await bot.wait_for('reaction_add', timeout=900.0) if check_page2(reaction, user, msg): break await msg.clear_reactions() await msg.add_reaction('➡') await msg.edit(embed=info1) # se o bot tiver perm pra usar o "clear_reactions" if ctx.guild.me.guild_permissions.manage_messages: await check_reactions_with_perm(self.bot, msg) else: # se o bot não tiver permissão: await check_reactions_without_perm(ctx, self.bot, msg) msg_bot = await ctx.send(embed=info1) if info2: # se tiver o info2, significa que foi usado num servidor await msg_bot.add_reaction('➡') try: # vai fica 1 minuto e meio esperando o usuário apertas nas reações await asyncio.wait_for(menus_user_info(ctx, msg_bot), timeout=90.0) except asyncio.TimeoutError: # se acabar o tempo pass
async def _userinfo(self, ctx, *, user: DiscordUser = None): if user is None: user = ctx.author if hasattr(user, 'top_role'): cor = user.top_role.colour.value else: cor = discord.Colour.random() emojis_badges = { 'staff': self.bot.get_emoji('staff_badge'), 'partner': self.bot.get_emoji('parceiro_badge'), 'hypesquad': self.bot.get_emoji('hs_badge'), 'bug_hunter': self.bot.get_emoji('bug_hunter_badge'), 'hypesquad_bravery': self.bot.get_emoji('hs_bravery_badge'), 'hypesquad_brilliance': self.bot.get_emoji('hs_brilliance_badge'), 'hypesquad_balance': self.bot.get_emoji('hs_balance_badge'), 'early_supporter': self.bot.get_emoji('early_supporter_badge'), 'team_user': '', 'system': '', 'bug_hunter_level_2': self.bot.get_emoji('bug_hunter_badge'), 'verified_bot': '', 'verified_bot_developer': self.bot.get_emoji('dev_badge') } badges = '' if ctx.guild: if ctx.guild.owner_id == user.id: badges += '👑' if user.bot: badges += str(self.bot.get_emoji('bot_badge')) if hasattr(user, 'public_flags'): for flag, have in iter(user.public_flags): if have: badges += str(emojis_badges[flag]) if user.is_avatar_animated() or (hasattr(user, 'premium_since') and user.premium_since is not None): badges += str(self.bot.get_emoji('nitro')) if hasattr(user, 'premium_since') and user.premium_since is not None: badges += str(self.bot.get_emoji('boost')) status_emoji = '' status_text = None if hasattr(user, 'raw_status'): if user.raw_status == 'online': status_emoji = str(self.bot.get_emoji('online')) status_text = 'online' elif user.raw_status == 'dnd': status_emoji = str(self.bot.get_emoji('dnd')) status_text = 'ocupado' elif user.raw_status == 'idle': status_emoji = str(self.bot.get_emoji('idle')) status_text = 'ausente' elif (user.raw_status == 'offline') or (user.raw_status == 'invisible'): status_emoji = str(self.bot.get_emoji('offline')) status_text = 'offline' embed_base = discord.Embed(title=f'{badges} {user.display_name} {status_emoji}', colour=cor, timestamp=datetime.utcnow()) embeds = [] embed1 = embed_base.copy() embed1.set_image(url=user.avatar_url) embed1.add_field(name="📑 Nome e tag:", value=f'`{user}`', inline=True) embed1.add_field(name="🆔 Id: ", value=f'`{user.id}`', inline=True) embed1.add_field(name='🙋♂️ Menção:', value=user.mention, inline=True) if hasattr(user, 'nick') and (user.nick is not None): embed1.add_field(name="🔄 Apelido", value=f'`{user.nick}`', inline=True) embeds.append(embed1) embed2 = embed_base.copy() embed2.set_thumbnail(url=user.avatar_url) embed2.add_field(name="🗓 Conta criada em:", value=f'`{user.created_at.strftime("%d/%m/%Y")}`({datetime_format(user.created_at)})', inline=True) if hasattr(user, 'joined_at'): rank_members = [str(c) for c in sorted(user.guild.members, key=lambda x: x.joined_at)] embed2.add_field(name="📥 Entrou no servidor em:", value=f'`{user.joined_at.strftime("%d/%m/%Y")}`({datetime_format(user.joined_at)})', inline=True) embed2.add_field(name='🏆 rank dos membros mais antigos:', value=f'**{prettify_number(rank_members.index(str(user)) + 1)}°**/' f'{prettify_number(len(rank_members))}', inline=True) if user.premium_since is not None: embed2.add_field( name=f'{self.bot.get_emoji("boost")} Começou a dar boost neste servidor em:', value=f'`{user.premium_since.strftime("%d/%m/%Y")}`(' f'{datetime_format(user.premium_since)})', inline=True) embeds.append(embed2) if hasattr(user, 'raw_status') and (user.raw_status != 'offline') and \ (user.raw_status != 'invisible') and (not user.bot): embed3 = embed_base.copy() embed3.set_thumbnail(url=user.avatar_url) if user.is_on_mobile(): plataforma = '📱 Celular' else: if user.web_status.value != 'offline': plataforma = '💻 Pc ─ usando o site 🌐' else: plataforma = '💻 Pc ─ usando o discord desktop 🖥' embed3.add_field(name=f'{self.bot.get_emoji("hacking")} Está acessando o discord pelo:', value=f'`{plataforma}`', inline=False) if status_text is not None: embed3.add_field(name=f'🕵️ Status: {status_text}', value='** **', inline=True) if hasattr(user, 'activities') and len(user.activities) > 0: streaming = False custom = False playing = False for activity in user.activities: if (activity.type.name == 'streaming') and (not streaming): embed3.add_field(name=f'{self.bot.emoji("streaming")} Fazendo live', value=f'**🎙 Plataforma**: `{activity.platform}`\n' f'**🏷 Nome da live**: `{activity.name}`\n' f'**🕛 Começou**: `{datetime_format(activity.created_at)}`', inline=False) streaming = True elif (activity.type.name == 'custom') and (not custom): if (activity.emoji is not None) or (activity.name is not None): if activity.emoji is not None: if activity.emoji.id in [c.id for c in self.bot.emojis]: emoji = f'{activity.emoji}' else: emoji = f'❓' else: emoji = '`🚫 Nulo`' if activity.name is not None: texto = f'`{activity.name}`' else: texto = '`🚫 Nulo`' embed3.add_field(name=f'{self.bot.emoji("disco")} Status personalizado', value=f'🔰 Emoji: {emoji}\n' f'🖋 Frase: {texto}', inline=False) custom = True elif (activity.type.name == 'playing') and (not playing): if activity.start is not None: value = f'`{activity.name}`\n**🕛 Começou a jogar:**\n' + \ f'`{datetime_format(activity.start)}`' else: value = f'`{activity.name}`' embed3.add_field(name='🕹 Jogando', value=value, inline=False) playing = True embeds.append(embed3) if hasattr(user, 'roles') and len(user.roles) > 1: roles = [role for role in sorted(user.roles, key=lambda r: r.position, reverse=True) if role.id != ctx.guild.default_role.id] roles_count = len(roles) if roles_count > 0: roles_mention = ', '.join(f'<@&{r.id}>' for r in roles) roles_name = None if len(roles_mention) > 1000: roles_name = ', '.join(f'`{r.name}`' for r in roles) if roles_name is not None and len(roles_name) > 1000: roles_name = f'{roles_name[:1000]}...' roles = roles_name or roles_mention roles = f'**{roles}**' embed4 = embed_base.copy() embed4.set_thumbnail(url=user.avatar_url) embed4.add_field(name=f'🏅 Cargos({roles_count}):', value=roles, inline=False) # estamos pegando e filtrando as permissões que o user tem, neste chat all_perms = user.permissions_in(ctx.message.channel) perms = [] for atributo in dir(all_perms): if isinstance(getattr(all_perms, atributo), bool): if getattr(all_perms, atributo): perms.append(atributo) perms_traduzidas = { 'add_reactions': 'adicionar reações', 'administrator': 'administrador', 'attach_files': 'anexar arquivos', 'ban_members': 'banir membros', 'change_nickname': 'mudar apelido', 'create_instant_invite': 'criar convite', 'embed_links': 'enviar links', 'kick_members': 'expulsar membros', 'manage_channels': 'gerenciar canais', 'manage_emojis': 'gerenciar emojis', 'manage_guild': 'gerenciar servidor', 'manage_messages': 'gerenciar mensagens', 'manage_nicknames': 'gerenciar apelidos', 'manage_permissions': 'gerenciar permissões', 'manage_roles': 'gerenciar cargos', 'manage_webhooks': 'gerenciar webhooks', 'mention_everyone': 'mencionar everyone', 'read_message_history': 'ler histórico de mensagens', 'read_messages': 'ver mensagens', 'send_messages': 'enviar mensagens', 'send_tts_messages': 'enviar mensagem com tts', 'view_audit_log': 'ver registro de auditoria', 'view_channel': 'ver canal', 'view_guild_insights': 'ver desempenho do servidor', 'use_external_emojis': 'usar emojis externos' } for c in range(0, len(perms)): # vai substituir os "_" por espaços e tirar o external_emojis for perm_traducao in perms_traduzidas.items(): if perm_traducao[0] == perms[c]: perms[c] = f"`{perm_traducao[-1]}`" break if 'external_emojis' in perms: perms.pop(perms.index('external_emojis')) if len(perms) >= 1: embed4.add_field(name=f'📌 Permissões neste chat({len(perms)}):', value=capitalize(', '.join(perms)), inline=False) else: embed4.add_field(name=f'📌 Permissão neste chat(0):', value='Este usuário não tem possui permissões, neste chat!', inline=False) embeds.append(embed4) for pos, embed in enumerate(embeds): embed.set_footer(text=f'{ctx.author} ─ {pos + 1}/{len(embeds)}', icon_url=ctx.author.avatar_url) paginator = CustomEmbedPaginator(ctx=ctx, timeout=60, auto_footer=False, remove_reactions=ctx.channel.permissions_for( ctx.me).manage_messages) if len(embeds) > 2: paginator.add_reaction('⏮', 'first') paginator.add_reaction('◀️', 'back') paginator.add_reaction('⏹️', 'clear') paginator.add_reaction('▶', 'next') if len(embeds) > 2: paginator.add_reaction('⏭', 'last') msg = await paginator.run(embeds) for reaction in msg.reactions: if reaction.me: await reaction.remove(ctx.me)