Untitled

 avatar
unknown
plain_text
10 months ago
25 kB
8
Indexable
import discord 
from discord.ext import commands
from discord import Intents
import random
from googletrans import Translator
from googlesearch import search
import googlesearch
import sympy
import asyncio







intents = discord.Intents.default()
intents.members = True
intents.messages = True
intents.voice_states = True




bot = commands.Bot(command_prefix="!", intents=intents.all())
intents.bans = True  # Certifique-se de que o bot pode acessar banimentos

async def prompt_user(ctx, message):
    await ctx.send(f"{message}\n\n**Se você não deseja colocar esta opção, use `!pular` para pular para a próxima opção.**")


@bot.event
async def on_ready():
    await bot.change_presence(activity=discord.Game(name="Moderando Diversos Servidores🚀"))
    print('Entramos Como {0.user}'.format(bot))


@bot.event
async def on_member_join(member):
    server = member.guild

    embed = discord.Embed(
        title="Novo membro entrou no servidor",
        description=f"Membro: {member.mention}\n"
                    f"Servidor: {server.name}",
        color=discord.Color.green()
    )

    # ID do canal onde você deseja enviar o log
    log_channel_id = 1224845921993625711
    log_channel = bot.get_channel(log_channel_id)
    await log_channel.send(embed=embed)

@bot.event
async def on_member_remove(member):
    server = member.guild

    embed = discord.Embed(
        title="Membro saiu do servidor",
        description=f"Membro: {member.mention}\n"
                    f"Servidor: {server.name}",
        color=discord.Color.red()
    )

    # ID do canal onde você deseja enviar o log
    log_channel_id = 1224845921993625711
    log_channel = bot.get_channel(log_channel_id)
    await log_channel.send(embed=embed)

@bot.event
async def on_message_delete(message):
    # Verifica se a mensagem deletada não foi enviada pelo próprio bot
    if message.author == bot.user:
        return

    channel = message.channel
    server = message.guild

    embed = discord.Embed(
        title="Mensagem deletada",
        description=f"Autor: {message.author.mention}\n"
                    f"Canal: {channel.mention}\n"
                    f"Servidor: {server.name}\n"
                    f"Conteúdo: {message.content}",
        color=discord.Color.red()
    )
    embed.set_footer(text=f"ID do Canal: {channel.id}")

    # ID do canal onde você deseja enviar o log
    log_channel_id = 1224845921993625711
    log_channel = bot.get_channel(log_channel_id)
    await log_channel.send(embed=embed)

@bot.event
async def on_message_edit(before, after):
    # Verifica se a mensagem editada não foi enviada pelo próprio bot
    if before.author == bot.user:
        return

    channel = before.channel
    server = before.guild

    embed = discord.Embed(
        title="Mensagem editada",
        description=f"Autor: {before.author.mention}\n"
                    f"Canal: {channel.mention}\n"
                    f"Servidor: {server.name}\n"
                    f"Conteúdo anterior: {before.content}\n"
                    f"Conteúdo atual: {after.content}",
        color=discord.Color.orange()
    )
    embed.set_footer(text=f"ID do Canal: {channel.id}")

    # ID do canal onde você deseja enviar o log
    log_channel_id = 1224845921993625711
    log_channel = bot.get_channel(log_channel_id)
    await log_channel.send(embed=embed)

@bot.event
async def on_message(message):
    # Verifica se a mensagem não foi enviada pelo próprio bot
    if message.author == bot.user:
        return

    channel = message.channel
    server = message.guild
    action = "enviada"
   
   
    embed = discord.Embed(
        title=f"Nova mensagem {action}",
        description=f"Autor: {message.author.mention}\n"
                    f"Canal: {channel.mention}\n"
                    f"Servidor: {server.name}\n"
                    f"Conteúdo: {message.content or 'Não disponível'}",
        color=discord.Color.blue()
    )
    embed.set_footer(text=f"ID do Canal: {channel.id}")

    # ID do canal onde você deseja enviar o log
    log_channel_id = 1224845921993625711
    log_channel = bot.get_channel(log_channel_id)
    await log_channel.send(embed=embed)

    await bot.process_commands(message)   

@bot.event
async def on_voice_state_update(member, before, after):
    if before.channel != after.channel:
        if before.channel is None:
            action = "entrou em"
        elif after.channel is None:
            action = "saiu de"
        else:
            action = "mudou de"

        embed = discord.Embed(
            title=f"Membro {action} um canal de voz",
            description=f"Membro: {member.mention}\n"
                        f"Canal anterior: {before.channel.name if before.channel else 'Nenhum'}\n"
                        f"Novo canal: {after.channel.name if after.channel else 'Nenhum'}",
            color=discord.Color.orange()
        )

        # ID do canal onde você deseja enviar o log
        log_channel_id = 1224845921993625711
        log_channel = bot.get_channel(log_channel_id)
        await log_channel.send(embed=embed)     

@bot.command()
async def ajuda(ctx):
    await ctx.send(f'**Olá Membro(a) {ctx.author.mention} Precisa De Ajuda? Aqui Estão Algumas Infomrções: Fui Criado No Dia 31/03/2024 Pelo Fundador Lukas, O Prefixo Para Ativar Algum Comando meu é  a  exclamação  !    Tenho Diversos Comandos Legais! Qualquer Coisa Entre No Servidor Da TechPlay e Relate Um Erro Ou Bug Que Ocorreu Em Mim! ⚡ **')

@bot.command()
async def dado(ctx, numero):
    variavel = random.randint(1,int(numero))
    await ctx.send(f' ** O Numero Que Saiu Do  Dado Foi O Numero {variavel}! 🎲 ** ')    

@bot.command()
@commands.has_permissions(kick_members=True)
async def expulsar(ctx, member: discord.Member = None, *, reason=None):
    if member is None or reason is None:
        await ctx.send('**Para você usar o comando, primeiro veja se tem a permissão de expulsar. Depois de verificar, utilize o comando !expulsar @membro que deseja expulsar e o motivo.**')
        return

    try:
        await member.kick(reason=reason)
        await ctx.send(f'**O usuário {ctx.author.mention} expulsou o membro {member.mention}. O motivo foi: {reason}**')
    except discord.Forbidden:
        await ctx.send('**Eu não tenho permissão para expulsar este usuário.**')

@expulsar.error
async def expulsar_error(ctx, error):
    if isinstance(error, commands.MissingPermissions):
        await ctx.send('**Você não tem permissão para expulsar um usuário.**')
    elif isinstance(error, commands.BadArgument):
        await ctx.send('**Usuário não encontrado. Por favor, mencione um usuário válido.**')


@bot.command()
@commands.has_permissions(ban_members=True)
async def banir(ctx, member: discord.Member = None, *, reason=None):
    if member is None or reason is None:
        await ctx.send('**Para você usar o comando, primeiro veja se tem a permissão de banir. Depois de verificar, utilize o comando !banir @membro que deseja banir e o motivo.**')
        return

    try:
        await member.ban(reason=reason)
        await ctx.send(f'**O usuário {ctx.author.mention} baniu o membro {member.mention}. O motivo foi: {reason}**')
    except discord.Forbidden:
        await ctx.send('**Eu não tenho permissão para banir este usuário.**')

@banir.error
async def banir_error(ctx, error):
    if isinstance(error, commands.MissingPermissions):
        await ctx.send('**Você não tem permissão para banir um usuário.**')
    elif isinstance(error, commands.BadArgument):
        await ctx.send('**Usuário não encontrado. Por favor, mencione um usuário válido.**')




@bot.command()
async def embed(ctx):
    """Comando para criar uma mensagem embed personalizada."""
    def check(m):
        return m.author == ctx.author and m.channel == ctx.channel

    await prompt_user(ctx, "**Por favor, envie o título da embed:**")
    title_msg = await bot.wait_for('message', check=check)

    await prompt_user(ctx, "**Por favor, envie o autor da embed:**")
    author_msg = await bot.wait_for('message', check=check)

    await prompt_user(ctx, "**Por favor, envie a URL da imagem do autor para adicionar à embed (opcional):**")
    author_image_msg = await bot.wait_for('message', check=check)

    await prompt_user(ctx, "**Por favor, envie a descrição da embed:**")
    description_msg = await bot.wait_for('message', check=check)

    await prompt_user(ctx, "**Por favor, envie a cor da embed em formato RGB (por exemplo, `255,0,0` para vermelho):**")
    color_msg = await bot.wait_for('message', check=check)

    await prompt_user(ctx, "**Por favor, envie a URL da imagem para adicionar à embed (opcional):**")
    image_msg = await bot.wait_for('message', check=check)

    await prompt_user(ctx, "**Por favor, envie a URL do thumbnail para adicionar à embed (opcional):**")
    thumbnail_msg = await bot.wait_for('message', check=check)

    await prompt_user(ctx, "**Por favor, envie a URL da segunda imagem para adicionar à embed (opcional):**")
    image2_msg = await bot.wait_for('message', check=check)

    await prompt_user(ctx, "**Por favor, envie o texto para o rodapé da embed:**")
    footer_msg = await bot.wait_for('message', check=check)

    await prompt_user(ctx, "**Por favor, mencione o canal para enviar a embed:**")
    channel_msg = await bot.wait_for('message', check=check)

    # Tratando opção de pular
    title = title_msg.content if title_msg.content.lower() != '!pular' else None
    author = author_msg.content if author_msg.content.lower() != '!pular' else None
    author_image_url = author_image_msg.content if author_image_msg.content.lower() != '!pular' else None
    description = description_msg.content if description_msg.content.lower() != '!pular' else None
    color = discord.Color.default() if color_msg.content.lower() == '!pular' else discord.Color.from_rgb(*map(int, color_msg.content.split(',')))
    image_url = image_msg.content if image_msg.content.lower() != '!pular' else None
    thumbnail_url = thumbnail_msg.content if thumbnail_msg.content.lower() != '!pular' else None
    image2_url = image2_msg.content if image2_msg.content.lower() != '!pular' else None
    footer = footer_msg.content if footer_msg.content.lower() != '!pular' else None
    channel = discord.utils.get(ctx.guild.channels, mention=channel_msg.content) if channel_msg.content.lower() != '!pular' else None

    embed = discord.Embed(title=title, description=description, color=color)
    if author:
        embed.set_author(name=author, icon_url=author_image_url if author_image_url and author_image_url.lower() != '!pular' else None)
    if image_url:
        embed.set_image(url=image_url)
    if thumbnail_url:
        embed.set_thumbnail(url=thumbnail_url)
    if image2_url:
        embed.set_image(url=image2_url)
    if footer:
        embed.set_footer(text=footer)

    if channel:
        await channel.send(embed=embed)
        await ctx.send(f"**Embed enviada para {channel.mention}.**")
    else:
        await ctx.send("**Nenhum canal mencionado. A embed não foi enviada.**")



@bot.command()
async def emoji(ctx, emoji: str = None):
    if emoji is None:
        await ctx.send("Para executar a ação de ver informações do emoji, coloque o emoji depois do comando. Por exemplo: !emoji ✅")
    else:
        try:
            emoji_obj = await commands.PartialEmojiConverter().convert(ctx, emoji)
        except commands.errors.BadArgument:
            await ctx.send("O emoji fornecido é inválido. Certifique-se de usar um emoji válido.")
            return
        
        if emoji_obj.is_custom_emoji():
            created_by = "Desconhecido"
            server_created = "Desconhecido"
            emoji_mention = f"<:{emoji_obj.name}:{emoji_obj.id}>"
        else:
            created_by = "Emoji padrão do Unicode"
            server_created = "N/A"
            emoji_mention = emoji_obj
        
        creation_date = emoji_obj.created_at.strftime("%d/%m/%Y %H:%M:%S")
        
        info_embed = discord.Embed(title="Informações do Emoji", color=0x00ff00)
        info_embed.add_field(name="Nome:", value=emoji_obj.name, inline=False)
        info_embed.add_field(name="ID:", value=emoji_obj.id, inline=False)
        info_embed.add_field(name="Criado por:", value=created_by, inline=False)
        info_embed.add_field(name="Data de Criação:", value=creation_date, inline=False)
        info_embed.add_field(name="Servidor de Criação:", value=server_created, inline=False)
        info_embed.add_field(name="Menção:", value=emoji_mention, inline=False)
        info_embed.set_thumbnail(url=emoji_obj.url if emoji_obj.is_custom_emoji() else None)
        
        await ctx.send(embed=info_embed)

@bot.command()
async def limpar(ctx, quantia: int = None):
    """Comando para limpar o chat."""
    if quantia is None:
        await ctx.send("**Por favor, especifique uma quantia de mensagens a serem limpas. Por exemplo: `!limpar 1000` **")
        return

    if quantia <= 0:
        await ctx.send("**Por favor, especifique uma quantia válida de mensagens para limpar.**")
        return

    try:
        await ctx.channel.purge(limit=quantia + 1)  # +1 para incluir o comando digitado
        await ctx.send(f"**Chat limpo com sucesso✅ Foram removidas {quantia} mensagens.**")
    except discord.Forbidden:
        await ctx.send("**Não tenho permissão para limpar mensagens neste canal.**")


@bot.command()
async def cargo(ctx, *, cargo: discord.Role = None):
    if cargo is None:
        await ctx.send("**Depois de utilizar o comando `!cargo`, mencione o cargo que você deseja saber as informações. Por exemplo: `!cargo @Teste` **")
        return
    
    created_by = ctx.guild.get_member(cargo.guild.owner_id)
    permissions = '\n'.join(perm for perm, value in cargo.permissions if value)

    embed = discord.Embed(title="Informações do Cargo", color=discord.Color.blue())
    embed.add_field(name="ID do Cargo", value=cargo.id, inline=False)
    embed.add_field(name="Nome do Cargo", value=cargo.name, inline=False)
    embed.add_field(name="Menção do Cargo", value=cargo.mention, inline=False)
    embed.add_field(name="Servidor do Cargo", value=cargo.guild.name, inline=False)
    embed.add_field(name="Quem Criou o Cargo", value=created_by.mention if created_by else "Desconhecido", inline=False)
    embed.add_field(name="Quando Foi Criado", value=cargo.created_at.strftime("%d/%m/%Y %H:%M:%S"), inline=False)
    embed.add_field(name="Permissões do Cargo", value=permissions or "Nenhuma", inline=False)

    await ctx.send(embed=embed)     



@bot.command()
async def servidor(ctx):
    guild = ctx.guild
    owner = guild.owner
    creation_date = guild.created_at.strftime("%d/%m/%Y %H:%M:%S")

    embed = discord.Embed(title="Informações do Servidor", color=discord.Color.blue())
    embed.add_field(name="Nome do Servidor", value=guild.name, inline=False)
    embed.add_field(name="Data de Criação do Servidor", value=creation_date, inline=False)
    embed.add_field(name="Fundador do Servidor", value=owner.mention, inline=False)

    await ctx.send(embed=embed)


@bot.command()
async def usuario(ctx, member: discord.Member = None):
    if member is None:
        await ctx.send("Para ver as informações de um usuário, você precisa marcá-lo. Por exemplo: `!usuario @pintinh0`")
        return

    creation_date = member.created_at.strftime("%d/%m/%Y %H:%M:%S")

    embed = discord.Embed(title="Informações do Usuário", color=discord.Color.blue())
    embed.set_thumbnail(url=member.avatar.url)  # Aqui está a correção
    embed.add_field(name="Nick do Usuário", value=member.display_name, inline=False)
    embed.add_field(name="Nome do Usuário", value=member.name, inline=False)
    embed.add_field(name="ID do Usuário", value=member.id, inline=False)
    embed.add_field(name="Perfil do Usuário", value=member.mention, inline=False)
    embed.add_field(name="Data de Criação do Usuário", value=creation_date, inline=False)

    await ctx.send(embed=embed)


@bot.command()
async def canal(ctx, canal: discord.TextChannel = None):
    if canal is None:
        await ctx.send("**Para você utilizar o comando, utilize `!canal #Marque_o_canal_que_deseja_excluir`.**")
        return

    if not ctx.author.guild_permissions.manage_channels:
        await ctx.send("**Você não tem permissões para excluir canais!**")
        return

    try:
        await canal.delete()
        log_channel = ctx.channel
        embed = discord.Embed(
            title=f"Canal Excluído",
            description=f"O Usuário {ctx.author.mention} Excluiu O Canal {canal.mention} Com Sucesso.",
            color=discord.Color.red()
        )
        await log_channel.send(embed=embed)
    except discord.Forbidden:
        await ctx.send('**Eu não tenho permissão para excluir este canal.**')







translator = Translator()



# Evento de inicialização do bot


# Comando de tradução
@bot.command()
async def traduzir(ctx, linguagem_destino: str, *, texto: str):
    try:
        traducao = translator.translate(texto, dest=linguagem_destino)
        await ctx.send(f'**Traduzindo Texto⏰\nTexto Traduzido Com Sucesso✅: {traducao.text}**')
    except Exception as e:
        await ctx.send(f'** :x: Ocorreu um erro ao traduzir o texto: Idioma Invalido, Utilize abreviações de idiomas por exemplo: English a abreviação é en.**')

# Tratamento de erro para argumentos ausentes
@traduzir.error
async def traduzir_error(ctx, error):
    if isinstance(error, commands.MissingRequiredArgument):
        await ctx.send('** :warning: Para você utilizar o comando de traduzir utilize o comando** `!traduzir (Lingua que você quer a tradução por exemplo en, pt etc...) (Texto que você quer traduzir`')





# Evento de inicialização do bot


# Comando de calculadora
@bot.command()
async def calculadora(ctx, *, calculo: str = None):
    if calculo is None:
        await ctx.send('Para você utilizar o comando de calculadora utilize `!calculadora (Cálculo que você quer fazer)`')
        return
    
    # Substitui 'x' por '*' e ':' por '/'
    calculo = calculo.replace('x', '*').replace(':', '/')
    
    try:
        resultado = sympy.sympify(calculo)
        await ctx.send(f'O resultado do cálculo é: {resultado}')
    except Exception as e:
        await ctx.send(f'Ocorreu um erro ao calcular: {str(e)}')


@bot.command()
@commands.has_permissions(ban_members=True)
async def desbanir(ctx, user_id: int = None, *, reason=None):
    if user_id is None:
        await ctx.send('**Para você usar o comando, utilize o comando !desbanir <id_do_usuario> e o motivo.**')
        return
    try:
        user = await bot.fetch_user(user_id)
        await ctx.guild.unban(user, reason=reason)
        await ctx.send(f'**O usuário {ctx.author.mention} desbaniu o usuário {user.mention}. O motivo foi: {reason}**')
    except discord.NotFound:
        await ctx.send('**Usuário não encontrado. Certifique-se de que o ID do usuário está correto.**')
    except discord.Forbidden:
        await ctx.send('**Eu não tenho permissão para desbanir este usuário.**')

@desbanir.error
async def desbanir_error(ctx, error):
    if isinstance(error, commands.MissingPermissions):
        await ctx.send('**Você não tem permissão para desbanir um usuário.**')
    elif isinstance(error, commands.BadArgument):
        await ctx.send('**ID do usuário não encontrado. Por favor, forneça um ID válido.**')






@bot.command()
async def google(ctx, *, query):
    search_results = googlesearch.search(query, num=5, stop=5, pause=2)
    unique_links = set()
    for link in search_results:
        if link not in unique_links:
            unique_links.add(link)
    await ctx.send(f"Aqui está o que encontrei sobre '{query}':")
    for link in unique_links:
        await ctx.send(link)








@bot.command()
async def comandos(ctx):
    embed = discord.Embed(title="Comandos do Bot", description="Aqui estão os comandos disponíveis:", color=discord.Color.purple())
    embed.add_field(name="!ajuda", value="Diz Minha Historia.", inline=False)
    embed.add_field(name="!dado (numero)", value="O numero que você colocar vai cair exato ou abaixo do numero.", inline=False)
    embed.add_field(name="!expulsar @membro motivo", value="Expulsa um membro marcando ele e informa o motivo por que expulsou.", inline=False)
    embed.add_field(name="!banir @membro motivo", value="Bane um mebro marcando ele e informando o motivo de banimento.", inline=False)
    embed.add_field(name="!embed", value="Você pode criar inúmeras embeds e selecionar qual canal que ela será enviada. Também pode customizá-la.", inline=False)
    embed.add_field(name="!emoji (Emoji que você quer ver as informações)", value="Te diz todas as informações do emoji que você selecionou.", inline=False)
    embed.add_field(name="!limpar (quantidade)", value="Limpa a quantidade de mensagens que você deseja que seja limpada em um chat.", inline=False)
    embed.add_field(name="!cargo (cargo que deseja ver as informações )", value="Mostra as informações do cargo que foi mencionado")
    embed.add_field(name="!servidor", value="Mostra informações do servidor que o comando foi executado")
    embed.add_field(name="!usuario (marcar o usuario que quer ver as informações)", value="Mostra informações do usuario que foi marcado.")
    embed.add_field(name="!adicionar (marcar cargo que quer adicionar) (marcar membro que quer adicionar o cargo)", value="Adiciona O Cargo Marcado Em Um Membro Selecionado.")
    embed.add_field(name="!retirar (marcar cargo que quer retirar) (marcar membro que quer retirar o cargo)", value="Retira O Cargo Marcado Em Um Membro Selecionado.")
    embed.add_field(name="!traduzir (idioma que deseja traduzir por exemplo pt, en etc...) (Palavra que quer traduzir)", value="Traduz Palavras com o idioma desejado")
    embed.add_field(name="!google (Oque deseja pesquisar no google)", value="Faz uma pesquisa e envia links da sua pesquisa desejada")
    await ctx.author.send(embed=embed)
    await ctx.send("**Enviei uma mensagem privada com a lista de comandos.**")




@bot.command()
@commands.has_permissions(manage_roles=True)
async def adicionar(ctx, role: discord.Role = None, member: discord.Member = None):
    if role is None or member is None:
        await ctx.send('**Para você adicionar um cargo verifique se você tem a permissão de adicionar um cargo. Se tiver ótimo agora para adicionar um cargo utilize o comando !adicionar @Cargo que quer adicionar @Membro que quer adicionar**')
        return

    if member.top_role >= ctx.author.top_role:
        await ctx.send('**Você não tem permissão para adicionar cargos neste usuário.**')
        return

    try:
        await member.add_roles(role)
        await ctx.send(f'**{ctx.author.mention} adicionou o cargo {role.mention} para {member.mention}**')
    except discord.Forbidden:
        await ctx.send('**Eu não tenho permissão para adicionar este cargo.**')

@adicionar.error
async def adicionar_error(ctx, error):
    if isinstance(error, commands.MissingPermissions):
        await ctx.send('**Você não tem permissão para adicionar cargos.**')

@bot.command()
@commands.has_permissions(manage_roles=True)
async def retirar(ctx, role: discord.Role = None, member: discord.Member = None):
    if role is None or member is None:
        await ctx.send('**Para você utilizar o comando de !retirar verifique se você tem o cargo de Adicionar cargos. Se tiver ótimo utilize o comando !retirar @Cargo que quer retirar o cargo @Membro que quer retirar o cargo**')
        return

    if member.top_role >= ctx.author.top_role:
        await ctx.send('**Você não tem permissão para retirar cargos deste usuário.**')
        return

    try:
        await member.remove_roles(role)
        await ctx.send(f'**{ctx.author.mention} retirou o cargo {role.mention} de {member.mention}**')
    except discord.Forbidden:
        await ctx.send('**Eu não tenho permissão para retirar este cargo.**')

@retirar.error
async def retirar_error(ctx, error):
    if isinstance(error, commands.MissingPermissions):
        await ctx.send('**Você não tem permissão para retirar cargos.**')




bot.run('Token')
Editor is loading...
Leave a Comment