> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Como hospedar um bot do Discord 24/7

> Hospede seu bot do Discord 24/7 na Square Cloud: crie o token, escreva um bot com discord.js ou discord.py, faça o deploy e mantenha-o sempre online.

export const RecommendedPlan = ({lang, plan, tier, cpu, appType, min}) => {
  const t = {
    'en': {
      q: <>Which plan should you choose for {appType}?</>,
      rec: p => <>We recommend the {p} plan: its <b>{tier} GB</b> of RAM and <b>{cpu} vCPU</b> handle most projects of this kind, with headroom for traffic spikes.</>,
      min: m => <> Lighter projects also run on the {m} plan.</>,
      pro: p => <> For larger projects, the {p} plan adds more RAM and CPU.</>
    },
    'pt-br': {
      q: <>Qual plano escolher para {appType}?</>,
      rec: p => <>Recomendamos o plano {p}: seus <b>{tier} GB</b> de RAM e <b>{cpu} vCPU</b> atendem a maioria dos projetos desse tipo, com folga para picos de tráfego.</>,
      min: m => <> Projetos mais leves também rodam no plano {m}.</>,
      pro: p => <> Para projetos maiores, o plano {p} oferece mais RAM e CPU.</>
    },
    'es': {
      q: <>¿Qué plan elegir para {appType}?</>,
      rec: p => <>Te recomendamos el plan {p}: sus <b>{tier} GB</b> de RAM y <b>{cpu} vCPU</b> cubren la mayoría de los proyectos de este tipo, con margen para picos de tráfico.</>,
      min: m => <> Los proyectos más ligeros también funcionan en el plan {m}.</>,
      pro: p => <> Para proyectos más grandes, el plan {p} ofrece más RAM y CPU.</>
    },
    'fr': {
      q: <>Quel plan choisir pour héberger {appType} ?</>,
      rec: p => <>Nous recommandons le plan {p} : ses <b>{tier} Go</b> de RAM et <b>{cpu} vCPU</b> suffisent pour la plupart des projets de ce type, avec une marge pour les pics de trafic.</>,
      min: m => <> Les projets plus légers fonctionnent aussi avec le plan {m}.</>,
      pro: p => <> Pour les projets plus importants, le plan {p} offre davantage de RAM et de CPU.</>
    },
    'de': {
      q: <>Welcher Plan eignet sich für {appType}?</>,
      rec: p => <>Wir empfehlen den {p}-Plan: <b>{tier} GB</b> RAM und <b>{cpu} vCPU</b> reichen für die meisten Projekte dieser Art, mit Reserven für Lastspitzen.</>,
      min: m => <> Kleinere Projekte laufen auch mit dem {m}-Plan.</>,
      pro: p => <> Für größere Projekte bietet der {p}-Plan mehr RAM und CPU.</>
    },
    'it': {
      q: <>Quale piano scegliere per {appType}?</>,
      rec: p => <>Ti consigliamo il piano {p}: i suoi <b>{tier}GB</b> di RAM e <b>{cpu}vCPU</b> bastano per la maggior parte dei progetti di questo tipo, con margine per i picchi di traffico.</>,
      min: m => <> I progetti più leggeri funzionano anche con il piano {m}.</>,
      pro: p => <> Per progetti più grandi, il piano {p} offre più RAM e CPU.</>
    },
    'ja': {
      q: <>{appType}にはどのプランを選べばよいですか？</>,
      rec: p => <>{p}プランをおすすめします。<b>{tier}GB</b>のRAMと<b>{cpu}vCPU</b>があれば、この種のプロジェクトの多くをトラフィックのピークにも余裕を持って動かせます。</>,
      min: m => <>軽量なプロジェクトは{m}プランでも動作します。</>,
      pro: p => <>より大規模なプロジェクトには、RAMとCPUが増える{p}プランをご検討ください。</>
    },
    'zh': {
      q: <>托管{appType}应该选择哪个套餐？</>,
      rec: p => <>我们推荐 {p} 套餐：<b>{tier}GB</b> RAM 和 <b>{cpu}vCPU</b> 足以运行大多数此类项目，并能从容应对流量高峰。</>,
      min: m => <>较轻量的项目也可以在 {m} 套餐上运行。</>,
      pro: p => <>对于更大的项目，{p} 套餐提供更多 RAM 和 CPU。</>
    }
  };
  const siteLang = t[lang] ? lang : 'en';
  const c = t[siteLang];
  const pay = (name, query) => <a href={`https://squarecloud.app/${siteLang}/pay?${query}`}>{name}</a>;
  const isPro = plan.toLowerCase() === 'pro';
  return <Note>
      <b>{c.q}</b><br />
      {c.rec(pay(plan, `plan=${plan.toLowerCase()}&tier=${tier}`))}
      {min ? c.min(pay(min, `plan=${min.toLowerCase()}`)) : null}
      {isPro ? null : c.pro(pay('Pro', 'plan=pro'))}
    </Note>;
};

export const appType_0 = "um bot de Discord"

## Introdução

Para desenvolver e hospedar {appType_0} na Square Cloud, siga a sequência de configurações e pré-requisitos abaixo.
Este guia cobre todo o processo, da configuração inicial ao deploy em produção.

### Pré-requisitos

* **Conta Square Cloud**: Cadastre-se através da [página de cadastro](https://squarecloud.app/pt-br/signup) usando seu e-mail.
* **Plano ativo**: Garante recursos dedicados e desempenho otimizado para seu aplicativo. Confira nossos [planos disponíveis](https://squarecloud.app/pt-br/pricing) e escolha o mais adequado às suas necessidades.

<RecommendedPlan appType="bots de Discord" plan="Standard" tier="4" cpu="4" min="Hobby" lang="pt-br" />

Este guia usa o [runtime Node.js](/pt-br/articles/getting-started-with-nodejs) ou o [runtime Python](/pt-br/articles/getting-started-with-python).

## Crie o projeto

Você precisa de uma conta no Discord para criar e gerenciar bots. Se ainda não tiver uma, crie-a no [site oficial do Discord](https://discord.com/).

### Aplicação de bot no Discord

<Steps>
  <Step title="Crie a aplicação" icon="rocket" iconType="solid">
    Acesse o [Developer Portal](https://discord.com/developers/applications) e clique em "New Application". Defina um nome para o seu bot e clique em "Create" para criar a aplicação.

    <Frame>
      <img src="https://cdn.squarecloud.app/docs/articles/discord/create-an-application.webp" alt="Criando uma aplicação no Discord Developer Portal" style={{ borderRadius: "0.2rem" }} />
    </Frame>
  </Step>

  <Step title="Gere o token" icon="key" iconType="solid">
    Após criar a aplicação, navegue até a aba "Bot" e clique em "Reset Token" para gerar o token de autenticação. Copie-o: você vai defini-lo como variável de ambiente na Square Cloud, nunca no seu código.

    <Frame>
      <img src="https://cdn.squarecloud.app/docs/articles/discord/generating-token.webp" alt="Gerando o token de autenticação do bot Discord" style={{ borderRadius: "0.2rem" }} />
    </Frame>
  </Step>

  <Step title="Ative as intents privilegiadas" icon="message" iconType="solid">
    O bot de exemplo lê o texto das mensagens, então precisa da **Message Content Intent**. Permaneça na aba "Bot", role até "Privileged Gateway Intents" e ative a **Message Content Intent**. Este exemplo não precisa das outras duas intents privilegiadas (Presence e Server Members).

    <Frame>
      <img src="https://cdn.squarecloud.app/docs/articles/discord/intent.webp" alt="Ativando intents privilegiadas no Discord" style={{ borderRadius: "0.2rem" }} />
    </Frame>
  </Step>
</Steps>

<Warning>
  **Mantenha o token em segredo**: este token concede controle total sobre o bot. Nunca o escreva no seu código nem o coloque no seu ZIP: os exemplos abaixo o leem da variável de ambiente `DISCORD_TOKEN`.
</Warning>

## Desenvolva o bot

Escreva o bot com discord.js (Node.js) ou discord.py (Python):

<Tabs>
  <Tab title="Discord.js (Node.js)">
    1. Verifique se o Node.js está instalado em seu sistema. Caso contrário, baixe-o no [site oficial do Node.js](https://nodejs.org/).

    2. Inicialize um novo projeto Node.js:

    ```bash Terminal theme={"system"}
    npm init -y
    ```

    3. Instale a biblioteca discord.js:

    ```bash Terminal theme={"system"}
    npm install discord.js
    ```

    4. Crie um arquivo JavaScript (ex.: `index.js`) e adicione o seguinte código para criar um bot Discord básico:

    ```javascript index.js theme={"system"}
    const { Client, Events, GatewayIntentBits } = require("discord.js");

    const client = new Client({
      intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        // Privilegiada: ative a "Message Content Intent" no Developer Portal
        GatewayIntentBits.MessageContent,
      ],
    });

    client.once(Events.ClientReady, (readyClient) => {
      console.log(`Logged in as ${readyClient.user.tag}`);
    });

    client.on(Events.MessageCreate, (message) => {
      if (message.author.bot) return;
      if (message.content === "!hello") {
        message.reply("Olá!");
      }
    });

    // O token vem da variável de ambiente DISCORD_TOKEN
    client.login(process.env.DISCORD_TOKEN);
    ```

    O código usa o discord.js v14, em que o evento de pronto é o `Events.ClientReady` (`"clientReady"`). O antigo nome `"ready"` está obsoleto.
  </Tab>

  <Tab title="Discord.py (Python)">
    1. Verifique se o Python está instalado em seu sistema. Caso contrário, baixe-o no [site oficial do Python](https://www.python.org/).

    2. Instale a biblioteca discord.py usando pip:

    ```bash Terminal theme={"system"}
    pip install discord.py
    ```

    3. Crie um arquivo Python (ex.: `main.py`) e adicione o seguinte código para criar um bot Discord básico:

    ```python main.py theme={"system"}
    import os

    import discord
    from discord.ext import commands

    intents = discord.Intents.default()
    # Privilegiada: ative a "Message Content Intent" no Developer Portal
    intents.message_content = True

    bot = commands.Bot(command_prefix="!", intents=intents)


    @bot.event
    async def on_ready():
        print(f"Logged in as {bot.user}")


    @bot.command()
    async def hello(ctx):
        await ctx.reply("Olá!")


    # O token vem da variável de ambiente DISCORD_TOKEN
    bot.run(os.environ["DISCORD_TOKEN"])
    ```

    4. Crie um arquivo `requirements.txt` para listar todas as bibliotecas externas necessárias para o seu projeto:

    ```txt requirements.txt theme={"system"}
    discord.py
    ```
  </Tab>
</Tabs>

## Configure a Square Cloud

Crie um arquivo `squarecloud.app` na raiz do projeto, ao lado do seu arquivo principal. Ele diz à Square Cloud como rodar o seu bot:

<CodeGroup>
  ```systemd Discord.js theme={"system"}
  DISPLAY_NAME=My Discord Bot
  MAIN=index.js
  MEMORY=512
  VERSION=recommended
  AUTORESTART=true
  ```

  ```systemd Discord.py theme={"system"}
  DISPLAY_NAME=My Discord Bot
  MAIN=main.py
  MEMORY=512
  VERSION=recommended
  AUTORESTART=true
  ```
</CodeGroup>

* `MAIN` é o arquivo que a Square Cloud executa, e `MEMORY` é a RAM do bot em MB. Bots precisam de pelo menos 256 MB; 512 MB deixa espaço para crescer.
* `AUTORESTART=true` inicia o bot de novo se ele travar. Veja [como funciona o auto restart](https://help.squarecloud.app/pt-br/article/como-usar-o-auto-restart-na-square-cloud-mdyj38/).
* Não há `SUBDOMAIN`: um bot não serve páginas web.

Quando você faz o upload pelo dashboard, o formulário de upload pode preencher essas configurações para você. Veja a [referência do arquivo de configuração](/pt-br/getting-started/config-file) para todos os campos.

## Defina o token do bot

O seu código lê o token da variável de ambiente `DISCORD_TOKEN`, então o token nunca entra nos seus arquivos. Defina-o de uma destas formas:

* **Dashboard**: na página de upload, abra **Configuração avançada** e adicione uma variável chamada `DISCORD_TOKEN` com o seu token como valor. Para um bot que já está no ar, adicione-a na página **Variáveis de ambiente** da aplicação e reinicie o bot.
* **CLI**: logo depois de enviar o bot (veja [Faça o deploy e verifique](#faça-o-deploy-e-verifique)), defina-a com [`squarecloud app env set`](/pt-br/cli-reference/environment-variables#squarecloud-app-env-set) e reinicie o bot:

```bash theme={"system"}
squarecloud app env set DISCORD_TOKEN=your_token_here
squarecloud app restart
```

O bot lê as variáveis de ambiente quando inicia, então reinicie-o após cada alteração. Veja [Variáveis de ambiente](/pt-br/platform/environment-variables) para as outras formas de gerenciá-las.

<Tip>Para rodar o bot no seu computador primeiro, defina a variável no terminal: `export DISCORD_TOKEN=your_token_here` no macOS e no Linux, ou `$env:DISCORD_TOKEN="your_token_here"` no PowerShell.</Tip>

## O que vai no ZIP

* O seu arquivo principal (`index.js` ou `main.py`) e os seus outros arquivos de código.
* `package.json` ou `requirements.txt`.
* `squarecloud.app`.

Deixe de fora a `node_modules`, a `.venv` e a `__pycache__`: a Square Cloud instala as suas dependências quando o bot inicia.

## Faça o deploy e verifique

Crie o ZIP descrito acima e faça o upload:

### Via dashboard

<Steps>
  <Step title="Acesse a página de upload">
    Acesse a [página de upload](https://squarecloud.app/pt-br/dashboard/new) e envie seu arquivo zip.
  </Step>

  <Step title="Configure seu ambiente">
    Após fazer o upload do seu arquivo zip, você precisará configurar o nome, o arquivo principal ou o ambiente de execução e outras configurações do seu projeto.\
    Se você estiver enviando um projeto web, certifique-se de selecionar "Publicação na Web" e definir um subdomínio para o seu projeto.
  </Step>

  <Step title="Faça o deploy do projeto">
    Por fim, clique no botão "Deploy" para hospedar seu projeto na Square Cloud.
    Após o deploy, você poderá monitorar o status e os registros do seu projeto no dashboard.

    <Frame>
      <img src="https://cdn.squarecloud.app/docs/articles/dashboard/uploading-pt-br.gif" alt="Enviando aplicação para a Square Cloud" style={{ borderRadius: "0.2rem" }} />
    </Frame>
  </Step>

  <Step title="Confirme que seu app está no ar">
    Seu primeiro deploy geralmente leva menos de um minuto. No [dashboard](https://squarecloud.app/pt-br/dashboard), aguarde o status da sua aplicação mudar para em execução e verifique os registros em busca de erros de inicialização.\
    Se você fez deploy de um site ou API, abra `https://<seu-subdominio>.squareweb.app` no navegador: você deve ver sua aplicação respondendo. Se você fez deploy de um bot, envie um comando para confirmar que ele está online.
    <Tip>Seu app não está iniciando? Veja o [guia de solução de problemas](/pt-br/platform/troubleshooting/app-wont-start) para as causas e correções mais comuns.</Tip>
  </Step>
</Steps>

### Via CLI

Para usar esse método, seu projeto precisa de um arquivo de configuração chamado `squarecloud.app` na raiz. Ele informa à Square Cloud como executar a sua aplicação.

<Card title="Guia do arquivo de configuração" icon="link" href="/pt-br/getting-started/config-file">
  Saiba como criar o arquivo de configuração `squarecloud.app` que define o ambiente da sua aplicação.
</Card>

<Steps>
  <Step title="Instale a CLI">
    Instale a [CLI da Square Cloud](/pt-br/cli-reference/installation). Se você já a tem, execute o mesmo comando para atualizá-la:

    <CodeGroup>
      ```bash macOS, Linux e WSL theme={"system"}
      curl -fsSL https://cli.squarecloud.app/install | bash
      ```

      ```bash Windows com npm theme={"system"}
      npm install -g @squarecloud/cli@latest
      ```
    </CodeGroup>
  </Step>

  <Step title="Faça login">
    Execute o comando abaixo. Ele abre o seu navegador: aprove o login lá e a CLI está pronta. Não há nenhuma chave de API para copiar. Para scripts e CI, veja [autenticação da CLI](/pt-br/cli-reference/authentication).

    ```bash theme={"system"}
    squarecloud auth login
    ```
  </Step>

  <Step title="Envie o seu projeto">
    Na pasta do seu projeto, execute o comando abaixo. A CLI compacta a pasta atual, deixando de fora o que o [`squarecloud.ignore`](/pt-br/getting-started/squarecloud-ignore) lista, e faz o upload:

    ```bash theme={"system"}
    squarecloud upload
    ```

    Para enviar um zip que você mesmo criou, passe-o com `--file`:

    ```bash theme={"system"}
    squarecloud upload --file <caminho/para/zip>
    ```
  </Step>

  <Step title="Confirme que seu app está no ar">
    Seu primeiro deploy geralmente leva menos de um minuto. Verifique o status e os registros da sua aplicação diretamente pelo terminal:

    ```bash theme={"system"}
    squarecloud app status
    squarecloud app logs
    ```

    Se você fez deploy de um site ou API, abra `https://<seu-subdominio>.squareweb.app` no navegador: você deve ver sua aplicação respondendo. Se você fez deploy de um bot, envie um comando para confirmar que ele está online.
    <Tip>Seu app não está iniciando? Veja o [guia de solução de problemas](/pt-br/platform/troubleshooting/app-wont-start) para as causas e correções mais comuns.</Tip>
  </Step>
</Steps>

### Convide o bot para o seu servidor

Para enviar um comando ao bot, adicione-o a um servidor do Discord:

1. Acesse o [Developer Portal](https://discord.com/developers/applications) e selecione seu bot.
2. Navegue até a aba "OAuth2" e vá para "OAuth2 URL Generator".
3. Em "Scopes", marque a opção "bot".
4. Em "Bot Permissions", marque apenas o que o exemplo precisa: **View Channels**, **Send Messages** e **Read Message History**. Evite **Administrator**: bots raramente precisam dela, e um token vazado passaria a controlar o seu servidor inteiro.
5. Copie a URL gerada, abra-a no navegador e adicione o bot ao seu servidor. A URL se parece com esta:

```txt theme={"system"}
https://discord.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&permissions=68608&scope=bot
```

`68608` é a soma dessas três permissões. Substitua `YOUR_CLIENT_ID` pelo ID da sua aplicação, que aparece na aba "General Information". Se você adicionar comandos que precisam de mais permissões, gere uma nova URL com elas marcadas.

Depois, envie `!hello` em um canal que o bot consegue ver. Ele responde com `Olá!`.

<Frame>
  <img src="https://cdn.squarecloud.app/docs/articles/discord/testing-bot.gif" alt="Testando o bot Discord após o deploy" style={{ borderRadius: "0.2rem" }} />
</Frame>

## Erros comuns

### An invalid token was provided

Os logs mostram `Error [TokenInvalid]: An invalid token was provided.` (discord.js) ou `discord.errors.LoginFailure: Improper token has been passed.` (discord.py). A variável `DISCORD_TOKEN` está faltando ou guarda um token antigo. Copie o token atual da aba "Bot", defina-o de novo e reinicie o bot. No discord.py, um `KeyError: 'DISCORD_TOKEN'` significa que a variável nem foi definida.

### Used disallowed intents

Os logs mostram `Error [DisallowedIntents]: Privileged intent provided is not enabled or whitelisted.` (discord.js) ou `discord.errors.PrivilegedIntentsRequired` (discord.py). O código pede a Message Content Intent, mas ela está desativada no Developer Portal. Ative-a na aba "Bot", como em [Aplicação de bot no Discord](#aplicação-de-bot-no-discord), e reinicie o bot.

### O bot está online, mas não responde ao `!hello`

Confira se o bot consegue ver e enviar mensagens nesse canal e se a Message Content Intent está ativada: sem ela, o bot recebe as mensagens com o texto vazio.

Para mais mensagens e correções, veja [Erros de bot do Discord](/pt-br/platform/troubleshooting/discord-bot-errors).

## Próximos passos

<CardGroup cols={3}>
  <Card title="Erros de bot do Discord" icon="triangle-exclamation" href="/pt-br/platform/troubleshooting/discord-bot-errors">
    Corrija um token inválido, intents faltando e outros erros comuns.
  </Card>

  <Card title="Variáveis de ambiente" icon="key" href="/pt-br/platform/environment-variables">
    Gerencie o token do seu bot e outros segredos.
  </Card>

  <Card title="Servidor Lavalink" icon="music" href="/pt-br/tutorials/how-to-create-your-lavalink-server">
    Hospede um servidor Lavalink para tocar música no seu bot.
  </Card>
</CardGroup>

Para saber mais sobre essas bibliotecas, consulte a [documentação oficial do discord.py](https://discordpy.readthedocs.io/en/latest/) e o [guia oficial do discord.js](https://discordjs.guide/).

## Contate-nos

Se você continuar enfrentando **dificuldades técnicas**, nossa **equipe de suporte especializada** está disponível para auxiliá-lo. [**Entre em contato conosco**](https://squarecloud.app/pt-br/support) e teremos prazer em ajudá-lo a resolver qualquer questão: a qualidade do suporte é uma grande parte do motivo pelo qual desenvolvedores avaliam a Square Cloud com [**4,9/5 em 402 avaliações**](https://www.trustpilot.com/review/squarecloud.app) no Google e Trustpilot.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.