Untitled

 avatar
unknown
plain_text
a year ago
25 kB
11
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