Bot do discord com Elixir e Nostrum

8468 단어 elixirbrasiltutorial

요건


  • Ter o elixir 설치
  • Antes de tudo é necessário ter um bot criado no Portal de desenvolvedores do discord , caso não tenha ou não saiba como fazer, recomendo seguir os passo desse post do canaltech.

  • 프로젝트 시작



    Antes de tudo vamos iniciar nosso projeto rodando o comando:mix new <nome_do_aplicativo> --sup
    Passamos a flag --sup para que o mix inicie nosso projeto com um Supervisor configurado, assim ao iniciarmos nossa aplicação o Supervisor irá iniciar todas as aplicações que pedirmos.

    Com isso nossa estrutura de arquivos se encontra da seguinte forma:


    추가 및 구성 o nostrum



    다음과 같은 새로운 프로젝트 시작은 arquivomix.exs 및 modificar a funçãodeps 형식에 따라 수정됩니다.

    defp deps do
      [
        {:nostrum, "~> 0.4"}
      ]
    end
    


    e executar 또는 comando:mix deps.get
    com isso agora devemos configurar o nostrum e fornecer o token do nosso bot, para isso vamos criar o diretório config e dentro o arquivo config.exs , pode ser feito com o comando:mkdir config && touch config.exs
    추가 구성 항목에 대한 추가 정보 없음:

    import Config
    
    config :nostrum,
      token: "SEU TOKEN"
      # OU caso não queria deixar de forma explicita, podemos pegar ele de uma variável de ambiente ao inicializa-lo
      #token: System.get_env("BOT_TOKEN")
    


    e por vamos criar um modulo para iniciar o bot e adicionar esse modulo ao Supervisor. vamos criar o arquivo consumer.ex, dentro de lib//, com o seguinte conteúdo:

    defmodule Example.Consumer do
      use Nostrum.Consumer
    
      def start_link do
        Consumer.start_link(__MODULE__)
      end
    
      def handle_event(_) do
        :ok
      end
    end
    


    Trocando o Example , pelo nome da sua aplicação, agora em lib//application.ex, vai ficar da seguinte forma:

    defmodule Example.Application do
      use Application
    
      def start(_type,_args) do 
        children = [
          Example.Consumer 
        ]
    
      opts = [strategy: :one_for_one, name: Example.Supervisor]
      Supervisor.start_link(children,opts)
      end
    end
    


    Com isso ao rodarmos or comando:mix run --no-halt ou iex -S mix , nosso bot deve ficar 온라인 no discord 🙂

    OBS: Caso você tenha optado por usar o System.get_env("BOT_TOKEN") é necessário rodar o comando da seguinte forma:BOT_TOKEN="TOKEN" mix run --no-halt 또는 BOT_TOKEN="TOKEN" iex -S mix


    Mas estamos ignorando todos os eventos, então por enquanto ele não está fazendo nada 😥

    Lidando com comandos



    Para lidar comandos devemos cuidado do evento :MESSAGE_CREATE , então nosso consumer.ex fica da seguinte forma:

    defmodule Example.Consumer do
      use Nostrum.Consumer
      alias Nostrum.Api
    
      def start_link do
        Consumer.start_link(__MODULE__)
      end
    
      def handle_event({:MESSAGE_CREATE,msg, _ws_state}) do
         case msg.content do
          "!ping" -> Api.create_message(msg.channel_id, "Pong")
           _ -> :ok
         end
      end
    
      def handle_event(_) do
        :ok
      end
    end
    
    


    Com isso nosso bot responde ao comando!ping, com a mensagem pong, no canal que a mensagem foi enviada.



    Com isso nosso bot já esta respondendo a comandos, mas está bem simples, agora você é livre para organizar os arquivos e lidar com os comandos da forma que deseja, aqui está o link do repositório do github com alguns comandos e a forma que preferi programar.

    Qualquer dúvida pode deixar nos comentários ou mandar uma mensagem no discord: dudu#6876

    레포: https://github.com/uduDudu/discord-bot-elixir

    좋은 웹페이지 즐겨찾기