Impulsojunte-se à Impulso

18/10/24

9 min de leitura

Minhas Aventuras Criando Bots no Discord com Golang: Desafios e Descobertas

Karine BallardinKarine Ballardin

E aí, pessoal! Hoje resolvi abrir o coração e contar um pouco das minhas aventuras pelo mundo dos bots do Discord usando Golang.

Apesar de passar meus dias trabalhando com Ruby on Rails, tenho uma quedinha (ou seria um tombo?) por Golang. Sério, essa linguagem tem um quê de especial, uma mistura de simplicidade com poder que me deixa fascinada. E não tem coisa melhor do que juntar essa paixão com a oportunidade de compartilhar conhecimento, né? Por isso, adoro esses eventos onde a gente troca ideia e aprende junto.

Por que criar Bots para o Discord com Go?

Hoje vamos dar o start numa série de encontros onde vou te mostrar como criar bots para o Discord com Golang. No entanto, não pense que é só brincadeira, não! Desenvolver bots com Go é tipo desbloquear um novo nível no jogo da programação. Além disso, você ganha habilidades que são verdadeiras joias no mercado.

A Linguagem Go

Primeiro, vamos falar de Go. Imagina uma linguagem que é rápida como um guepardo, simples como um “olá mundo” e escalável como uma startup que vira unicórnio. Pois é, essa é a vibe do Go. Além do mais, empresas ficam de olho brilhando quando veem alguém que domina essa linguagem, especialmente para projetos que precisam ser robustos e eficientes.

Adicionalmente, criar bots te coloca em contato direto com APIs, que são a espinha dorsal das aplicações modernas. Dessa forma, você vai lidar com autenticação, eventos em tempo real, chamadas assíncronas… Tudo isso enquanto conversa com a API do Discord. Ou seja, é como aprender a dançar vários ritmos ao mesmo tempo!

Concorrência em Go

E não podemos esquecer da concorrência. Nesse sentido, trabalhar com goroutines e channels no Go é quase como ser maestro de uma orquestra, onde cada músico toca uma música diferente, mas no final tudo faz sentido. Consequentemente, essa experiência te prepara para criar sistemas que aguentam o tranco, perfeitos para o mundo de hoje, onde tudo é em tempo real e os dados voam para todos os lados.

Então, se prepara! O que vem por aí não só vai turbinar suas habilidades como pessoa desenvolvedora, mas também pode abrir aquela porta mágica no mercado de trabalho.

Por que Go é uma boa escolha para bots do Discord?

Pensa comigo: você quer criar um bot que vai estar em milhares de canais, respondendo mensagens, gerenciando eventos e talvez até contando umas piadas ruins. Portanto, você quer que ele seja rápido, leve e que não te deixe na mão, certo? É justamente aí que o Go entra em cena!

Desempenho

O Go é como aquele carro esportivo que todo mundo sonha em ter. Como é uma linguagem compilada, ele já vem pronto para acelerar. Ao contrário das linguagens interpretadas que ficam pensando no meio do caminho, o Go vai direto ao ponto. Por isso, seu bot vai rodar liso, sem engasgos, mesmo quando a coisa ficar intensa.

Simplicidade

Outra coisa que me faz amar o Go é a simplicidade. Os criadores da linguagem queriam algo direto, sem firulas. Com isso, com apenas 25 palavras-chave, você consegue expressar ideias complexas sem se perder em um mar de código. Em outras palavras, é como escrever uma mensagem para um amigo, só que essa mensagem é um programa que faz coisas incríveis!

Concorrência

Agora, a cereja do bolo: concorrência. Como sabemos, os bots precisam fazer mil coisas ao mesmo tempo, e o Go trata isso como um passeio no parque. Por meio das goroutines, você consegue rodar múltiplas tarefas simultaneamente sem esquentar a cabeça. É quase mágico!

Compilação rápida

E para fechar com chave de ouro, a compilação é super rápida. Fez uma mudança? Em segundos já está rodando de novo. Isso significa que você ganha mais agilidade na maratona de testes e ajustes.

No fim das contas, o Go é uma escolha fantástica para bots do Discord porque une simplicidade, performance e concorrência eficiente. Assim, se você quer um bot que não te deixe na mão, pode apostar no Go!

Pontos negativos

Por outro lado, nem tudo são flores. Alguns devs acham que o Go é simples até demais, sentindo falta de recursos como herança ou programação funcional mais avançada. Além disso, se você não tomar cuidado com as goroutines, pode acabar se enrolando com problemas como deadlocks ou race conditions.

Quando não usar Go:

Apesar disso, o Go talvez não seja a melhor escolha para desenvolver front-end ou aplicações que exigem modelagens de dados mais complexas. Nesses casos, linguagens como Python ou Ruby podem ser mais adequadas.

Resumindo, use o Go quando você precisa de:

  • Alto desempenho
  • Concorrência eficiente
  • Simplicidade no desenvolvimento
  • Aplicações escaláveis e distribuídas

De fato, o Go é como aquela ferramenta multiuso que, quando você menos espera, resolve um problemão!

Instalação e Configuração do Go

Para começar, acesse o site oficial do Go em golang.org/dl. Baixe a versão adequada para o seu sistema operacional e arquitetura. Se você estiver usando WSL em um sistema ARM64, lembre-se de baixar a versão correta para evitar dores de cabeça.

Depois de baixar, abra o terminal e remova qualquer versão antiga:

sudo rm -rf /usr/local/go

Então, extraia o pacote que você baixou,. No meu caso foi , go1.23.1.linux-amd64.tar.gz:

sudo tar -C /usr/local -xzf go1.23.1.linux-amd64.tar.gz

Configure o ambiente adicionando o Go ao seu PATH e definindo o GOPATH. Recomendo usar uma IDE como VS Code ou GoLand para facilitar sua vida.

  • Se estiver no VSCode use code ~/.zshrc ou code ~/.bashrc a depender do shell que você estiver usando
  • Dependendo do shell que você estiver usando, você também pode usar algum outro editor. É só substituir o comando code por nano ou vim, por exemplo

A API do Discord

A API do Discord é um prato cheio para quem quer criar bots incríveis. Com ela, você pode interagir com servidores, canais, mensagens e usuários de forma direta.

Autenticação

Primeiro, você precisa de um token de bot, que você obtém registrando seu bot no portal de devs do Discord. Após criar uma nova aplicação, escolher um nome legal e uma imagem que será a carinha do seu bot, clique em Bot e depois em Reset Token. Não vá perder esse token, hein? Certifique-se de guardar esse código em uma variável de ambiente ou lugar seguro.

API REST

A API REST é onde a mágica acontece. Basicamente, você faz requisições HTTP para endpoints específicos para realizar ações como enviar mensagens, gerenciar servidores ou manipular membros. Tudo em formato JSON, simples e direto.

‍ Fazendo requisições pelo terminal

Você pode testar a API usando o curl no terminal. Por exemplo, para obter informações sobre um canal:

curl https://discord.com/api/v10/channels/SEU_ID_DO_CANAL \
  -H "Authorization: Bot SEU_BOT_TOKEN"

Para enviar uma mensagem:

curl -X POST https://discord.com/api/v10/channels/SEU_ID_DO_CANAL/messages \
  -H "Authorization: Bot SEU_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"content": "Olá, mundo!"}'

️ WebSockets e Gateway API

Para receber eventos em tempo real, você precisa se conectar ao Gateway API via WebSockets. Desse modo, seu bot pode reagir instantaneamente a novos eventos, como mensagens ou reações.

Componentes Interativos
Você pode tornar suas mensagens mais dinâmicas usando componentes interativos como botões e menus de seleção. Aqui estão alguns exemplos:

  • Action Row (Tipo 1)

É um contêiner para outros componentes.

{
  "content": "Aqui está um botão:",
  "components": [
    {
      "type": 1,
      "components": [
        {
          "type": 2,
          "label": "Clique aqui!",
          "style": 1,
          "custom_id": "botao_exemplo"
        }
      ]
    }
  ]
}
  • Botão (Tipo 2)

Um botão interativo.

{
  "content": "Clique no botão abaixo:",
  "components": [
    {
      "type": 1,
      "components": [
        {
          "type": 2,
          "label": "Clique aqui!",
          "style": 1,
          "custom_id": "meu_botao"
        }
      ]
    }
  ]
}
  • String Select (Tipo 3)

Um menu suspenso com opções de texto.

{
  "content": "Selecione uma opção:",
  "components": [
    {
      "type": 1,
      "components": [
        {
          "type": 3,
          "custom_id": "select_opcoes",
          "options": [
            {
              "label": "Opção 1",
              "value": "valor_opcao_1"
            },
            {
              "label": "Opção 2",
              "value": "valor_opcao_2"
            },
            {
              "label": "Opção 3",
              "value": "valor_opcao_3"
            }
          ]
        }
      ]
    }
  ]
}
  • User Select (Tipo 5)

Permite selecionar um ou mais usuários.

{
  "content": "Selecione um usuário:",
  "components": [
    {
      "type": 1,
      "components": [
        {
          "type": 5,
          "custom_id": "select_usuario"
        }
      ]
    }
  ]
}
  • Role Select (Tipo 6)

Permite selecionar uma função (role) do servidor.

{
  "content": "Selecione uma função (role):",
  "components": [
    {
      "type": 1,
      "components": [
        {
          "type": 6,
          "custom_id": "select_role"
        }
      ]
    }
  ]
}
  • Mentionable Select (Tipo 7)

Seleciona usuários ou roles mencionáveis.

{
  "content": "Selecione um usuário ou role mencionável:",
  "components": [
    {
      "type": 1,
      "components": [
        {
          "type": 7,
          "custom_id": "select_mentionable"
        }
      ]
    }
  ]
}
  • Channel Select (Tipo 8)

Permite selecionar canais do servidor.

{
  "content": "Selecione um canal:",
  "components": [
    {
      "type": 1,
      "components": [
        {
          "type": 8,
          "custom_id": "select_canal"
        }
      ]
    }
  ]
}

 

Bônus especial pra quem chegou até aqui

Desenvolver bots para o Discord com Go é uma jornada e tanto. Você vai aprender não só sobre a linguagem, mas também sobre como criar aplicações eficientes, escaláveis e prontas para o mundo real. E quem sabe, no meio do caminho, você não descobre uma nova paixão? Então, bora codar e ver onde essa aventura nos leva!

Ah, quase ia esquecendo: clicando aqui, você poderá assistir esse evento super bacana que rolou lá na nossa comunidade do Discord. Se você ainda não participa da comunidade, é só acessar https://impulso.link/discord.

Te vejo por lá,

Nós usamos cookies para melhorar sua experiência no site. Ao aceitar, você concorda com nossa Política de Privacidade

Assine nossa newsletter

Toda semana uma News com oportunidades de trabalho, conteúdos selecionados, eventos importantes e novidades sobre o Mundo da Tecnologia.

Pronto, em breve você vai receber novidades 👍