Você quer tocar música no seu servidor Discord, mas não pode contar com o YouTube devido a restrições de API, problemas de direitos autorais ou risco de o bot ser derrubado. Muitos bots públicos que dependem do YouTube eventualmente quebram por causa de cartas de cessação ou limites de taxa. Este artigo explica como construir um bot de música personalizado que reproduz áudio de arquivos locais, serviços de streaming com licenciamento adequado ou fontes de áudio diretas que não violam os termos de serviço. Você aprenderá os componentes principais, a configuração passo a passo e as armadilhas comuns a evitar.
Principais Conclusões: Construir um Bot de Música para Discord Sem YouTube
- FFmpeg e discord.py v2.0+: As ferramentas essenciais para transmitir áudio de arquivos locais ou URLs diretos para canais de voz.
- Reprodução de arquivos locais: Use ffmpeg para tocar arquivos MP3, FLAC ou WAV armazenados na sua máquina.
- SoundCloud ou URLs de stream direto: Alternativas legais ao YouTube para obter música sem restrições de API.
O Que Você Precisa Antes de Construir o Bot
Um bot de música para Discord é um programa que se conecta a canais de voz do Discord e transmite áudio. Sem o YouTube, você deve usar outras fontes de áudio. As opções mais confiáveis são arquivos locais, streams do SoundCloud ou links diretos para arquivos de áudio hospedados em plataformas legais. Você também precisa de um aplicativo Discord registrado no Portal do Desenvolvedor Discord, um token de bot e Python 3.8 ou superior instalado no seu computador ou servidor. O bot usa a biblioteca discord.py e o FFmpeg para decodificar e transmitir áudio. FFmpeg é um framework multimídia gratuito que converte e transmite praticamente qualquer formato de áudio.
Considerações Legais
Usar o YouTube como fonte para um bot de música viola os Termos de Serviço do YouTube e geralmente leva à desativação do bot. Ao usar arquivos locais que você possui ou streams de serviços que permitem isso, você evita riscos legais. O SoundCloud permite a transmissão de faixas que o artista marcou como baixáveis ou incorporáveis. Sempre verifique se você tem o direito de reproduzir e compartilhar o áudio no seu servidor.
Passos para Construir o Bot de Música
Siga estes passos para criar um bot que reproduz arquivos de áudio locais ou streams do SoundCloud. O bot aceitará comandos como !play com um caminho de arquivo ou URL.
Passo 1: Configurar o Aplicativo Discord e o Token do Bot
- Criar um Aplicativo Discord
Acesse o Portal do Desenvolvedor Discord. Clique em New Application. Dê um nome e clique em Create. - Adicionar um Usuário Bot
No menu à esquerda, clique em Bot. Depois clique em Add Bot e confirme. Copie o token exibido. Armazene-o com segurança. - Definir Permissões do Bot
No menu à esquerda, clique em OAuth2 > URL Generator. Selecione bot em Scopes. Em Bot Permissions, selecione Connect, Speak e Use Voice Activity. Copie a URL gerada e abra-a no navegador para convidar o bot para um servidor onde você tenha permissões de administrador.
Passo 2: Instalar o Software Necessário
- Instalar o Python
Baixe o Python 3.8 ou superior em python.org. Durante a instalação, marque Add Python to PATH. - Instalar o FFmpeg
Baixe o FFmpeg em ffmpeg.org. Extraia os arquivos e adicione a pastabinao PATH do sistema. Verifique abrindo o Prompt de Comando e digitandoffmpeg -version. Você deve ver as informações da versão. - Instalar discord.py e Outros Pacotes
Abra o Prompt de Comando ou Terminal e execute:pip install discord.py[voice]
Isso instala o discord.py com suporte a voz.
Passo 3: Escrever o Código do Bot
- Criar um Arquivo Python
Abra um editor de texto e crie um arquivo chamadomusic_bot.py. - Adicionar a Estrutura Básica do Bot
Cole o seguinte código:import discord from discord.ext import commands import asyncio intents = discord.Intents.default() intents.message_content = True bot = commands.Bot(command_prefix='!', intents=intents) @bot.event async def on_ready(): print(f'Logado como {bot.user}') bot.run('SEU_TOKEN_DO_BOT') - Adicionar o Comando Play para Arquivos Locais
Adicione isto antes debot.run():@bot.command() async def play(ctx, , query): if not ctx.author.voice: await ctx.send('Você precisa estar em um canal de voz.') return channel = ctx.author.voice.channel voice_client = discord.utils.get(bot.voice_clients, guild=ctx.guild) if voice_client and voice_client.is_connected(): await voice_client.move_to(channel) else: voice_client = await channel.connect() # Para arquivos locais, query é um caminho de arquivo como "C:\\musica\\musica.mp3" # Para streams, query é uma URL direta if query.startswith('http'): # Transmitir de URL (ex.: link direto do SoundCloud) source = discord.FFmpegPCMAudio(query, before_options='-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5') else: # Reproduzir arquivo local source = discord.FFmpegPCMAudio(query) voice_client.play(source, after=lambda e: print(f'Erro no player: {e}') if e else None) await ctx.send(f'Tocando agora: {query}') - Adicionar Comandos Stop e Leave
Adicione estes comandos:@bot.command() async def stop(ctx): voice_client = discord.utils.get(bot.voice_clients, guild=ctx.guild) if voice_client and voice_client.is_playing(): voice_client.stop() await ctx.send('Reprodução interrompida.') @bot.command() async def leave(ctx): voice_client = discord.utils.get(bot.voice_clients, guild=ctx.guild) if voice_client and voice_client.is_connected(): await voice_client.disconnect() await ctx.send('Desconectado do canal de voz.') - Executar o Bot
Salve o arquivo. No terminal, navegue até a pasta e execute:python music_bot.py
O bot ficará online.
Passo 4: Testar o Bot
- Entrar em um Canal de Voz
No Discord, entre em um canal de voz. - Reproduzir um Arquivo Local
Digite!play C:\musica\musica.mp3(Windows) ou!play /home/usuario/musica/musica.mp3(Linux/macOS). O bot deve entrar e começar a tocar. - Reproduzir uma URL de Stream
Encontre uma URL de áudio direta de um serviço como SoundCloud (clique com o botão direito em uma faixa, copie o link e, se terminar em .mp3 ou .m3u8, pode funcionar). Digite!play https://exemplo.com/audio.mp3. O bot transmite o áudio.
Problemas Comuns e Limitações
O Bot Não Entra no Canal de Voz
Certifique-se de que o bot tenha as permissões Connect e Speak. Verifique também se o token do bot está correto e se o bot está online. Se estiver usando um servidor virtual privado, verifique se as portas 443 e 1024-65535 estão abertas para tráfego UDP.
Áudio com Engasgos ou Pulando
Isso acontece quando a conexão com a internet é lenta ou a fonte de áudio não é confiável. Para arquivos locais, use uma conexão com fio ou um disco rígido mais rápido. Para streams, reduza a taxa de bits ou use um arquivo hospedado em CDN. Você também pode aumentar o buffer do FFmpeg adicionando before_options='-buffer_size 96000'.
Links do SoundCloud Não Tocam
O SoundCloud não fornece URLs de stream direto facilmente. Você precisa usar uma ferramenta de terceiros para extrair a URL de áudio real, o que pode violar os termos do SoundCloud. Uma abordagem mais segura é baixar o arquivo de áudio se o artista permitir e reproduzi-lo localmente. Alternativamente, use serviços como Bandcamp que fornecem links de download direto para faixas compradas.
O Bot Cai Após Alguns Minutos
As conexões de voz do Discord exigem pacotes keep-alive periódicos. A biblioteca discord.py lida com isso automaticamente. Se o bot desconectar, verifique seu firewall ou antivírus. Algumas redes corporativas bloqueiam tráfego UDP. Use uma rede diferente ou um VPS com suporte UDP adequado.
Opções de Fonte de Áudio: Arquivos Locais vs URLs de Stream vs SoundCloud
| Item | Arquivos Locais | URLs de Stream Direto | Streams do SoundCloud |
|---|---|---|---|
| Legalidade | Legal se você possui os arquivos | Depende da fonte; evite conteúdo protegido por direitos autorais sem permissão | Apenas para faixas marcadas como baixáveis ou incorporáveis |
| Complexidade de configuração | Simples; basta fornecer o caminho do arquivo | Moderada; precisa encontrar URLs funcionais | Complexa; requer ferramentas de extração de URL |
| Confiabilidade | Alta; sem dependência de rede | Média; o stream pode cair | Baixa; links mudam ou são bloqueados |
| Requisito de armazenamento | Alto; arquivos armazenados localmente | Nenhum | Nenhum |
| Exemplo de comando | !play C:\musica\musica.mp3 |
!play https://exemplo.com/stream.mp3 |
Não recomendado sem extração |
Agora você tem um bot de música funcional que não depende do YouTube. Você pode reproduzir arquivos locais ou URLs de stream direto. Para a melhor experiência, use arquivos locais que você possui. Para expandir o bot, adicione um sistema de fila usando asyncio.Queue e o callback after em voice_client.play(). Uma fila permite que os usuários adicionem várias músicas que tocam uma após a outra. Considere também adicionar um comando !volume que ajusta o nível de áudio usando o filtro de volume do FFmpeg.