Ir para o conteúdo

Escolher a compatibilidade certa para o teu bot do Discord

Quando crias uma encomenda para um bot do Discord, o assistente de configuração passa a pedir-te também uma compatibilidade, para além do runtime (Node.js, Python, Bun, Deno, Java ou Outro). Esta página explica o que faz essa escolha, quando importa e como mudá-la num bot que já tens a correr.

As duas opções

Leve é a opção por omissão. Usa uma imagem base pequena (por baixo é Alpine Linux), que arranca mais depressa, ocupa menos disco e descarrega num instante. Encaixa na maioria dos bots: tudo o que use bibliotecas puramente em JavaScript ou Python, os SDK habituais do Discord, clientes HTTP simples e por aí fora.

Padrão (Melhor Compatibilidade) usa uma imagem base maior (baseada em Debian) que traz as ferramentas de sistema esperadas por algumas bibliotecas. Dás algum tempo de arranque a frio e algum disco em troca de um suporte de pacotes muito mais amplo.

Se o teu bot instala sem problemas, deixa em Leve. Caso contrário, Padrão é quase sempre a resposta.

Quando a opção Leve não chega

Alguns pacotes descarregam um binário já compilado durante a instalação (o cenário ideal), e outros têm de compilar um binário a partir de código C/C++ dentro do npm install ou pip install. A base Leve não traz uma cadeia de compilação C/C++ nem as bibliotecas de sistema às quais esses pacotes se ligam, por isso qualquer pacote que tenha de compilar vai falhar.

Os suspeitos do costume:

  • Node.js / npm: canvas, sharp, bcrypt, better-sqlite3, node-canvas, puppeteer, os ajudantes de voz do discord.js (@discordjs/opus, sodium-native), node-sass.
  • Python / pip: Pillow, cryptography, lxml, numpy (de vez em quando), tudo o que envolva libffi, libxml2, libpng ou cairo.

Normalmente apercebes-te pela má via: a instalação parte com erros que mencionam node-gyp, prebuild-install, gcc, python: not found ou Cannot find module. Depois o bot fica preso a reiniciar em ciclo.

Forma rápida de saber

Abre o package.json ou o requirements.txt do teu bot. Se vires algum dos pacotes acima, começa logo em Padrão.

O que perdes ao escolher Padrão

Na prática, pouca coisa:

  • A imagem fica nuns 80 a 150 MB comprimida em vez de uns 50 MB. Só vais notar se andares a reconstruir constantemente.
  • O primeiro download num nó frio demora mais uns segundos. Os reinícios seguintes no mesmo nó são iguais.
  • Uma superfície ligeiramente maior para atualizações de segurança. As duas bases são mantidas pelos respetivos projetos a montante e nós mantemo-las atualizadas.

Para um bot do Discord que corre dias ou semanas seguidas, estes custos são invisíveis. Se temos Leve por omissão é só porque a maioria dos bots realmente não precisa de mais.

Passar um bot existente para Padrão

Se já criaste o bot e ele está a falhar com erros de compilação, não precisas de cancelar e voltar a encomendar. Abre o bot a partir do painel, vai a Configuração e muda aí a compatibilidade. A alteração aplica-se no próximo reinício, que vai disparar uma instalação de dependências de raiz sobre a nova imagem base.

Pode ser preciso limpar dependências antigas

Se o teu bot anda há um bocado a falhar na instalação, a pasta node_modules/ (ou __pycache__/, venv/, etc.) que vive no volume do servidor pode ter ficado a meio. Depois de passar para Padrão, se a instalação ainda não passar, apaga essa pasta a partir do gestor de ficheiros e reinicia uma vez. O runtime reconstrói-a do zero.

Perguntas frequentes

Posso voltar de Padrão para Leve?

Sim, no mesmo sítio. Não há passo de migração. Se as tuas dependências instalam bem em Leve, o bot comporta-se exatamente como um que estivesse em Leve desde o início.

Isto muda a versão de Node / Python / Java que o meu bot corre?

Não. A versão maior do runtime (Node 22, Python 3.13, Java 21, etc.) é a mesma nas duas opções. O que muda é a base de sistema operativo por baixo, não o runtime da linguagem.

A Padrão é mais lenta?

Assim que o contentor está a correr, não. Os runtimes em si são idênticos. A única diferença mensurável é o tempo de descarga da imagem num nó que nunca a tenha executado, e isso é um custo único.

Porquê Leve por omissão se Padrão tem melhor compatibilidade?

A maioria dos bots do Discord são projetos pequenos numa só linguagem e não tiram nada de uma base mais pesada. Pôr toda a gente em Padrão significaria imagens maiores e arranques a frio mais lentos para a maioria dos bots, que nunca veriam a vantagem. Mostramos a escolha para que os bots que precisam mesmo dela possam ativá-la sem complicações.

E se o meu bot usa o runtime «Outro» com um start.sh próprio?

Aplica-se a mesma escolha. Leve dá-te uma shell Alpine; Padrão dá-te uma shell Debian. Se o teu script chama apt-get, precisas de Padrão; se chama apk, precisas de Leve. Scripts POSIX puros funcionam em ambas.