How to Run a Discord.js Bot on a Docker Application

Updated on September 1, 2021
How to Run a Discord.js Bot on a Docker Application header image

Introduction

Discord is a video, voice, and text communication platform that allows bots to perform automated tasks based on user commands. This article explains how to run a Discord.js bot on a Docker application.

1. Create a Discord Application

  1. Go to the Discord Developer Portal and log in.
  2. Click the New Application button.
  3. Enter an application name and click Create.
  4. Select the Bot tab from the Settings menu.
  5. Click Add Bot then click Yes, do it!.
  6. Click Copy to copy your bot's token to the clipboard. Save a copy to use later in this guide.

2. Install Prerequisites

3. Install Dependencies

  1. Install Node.js, a javascript runtime that is required for Discord.js.

     # apt-get install nodejs -y
  2. Install Node Version Manager (nvm), which is used to update Node.js. For example:

     # wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

    > Note: Please see NVM's github repository and use the command for the latest NVM version.

  3. Reboot the server.

     # reboot
  4. Reconnect to the SSH session.

  5. Verify the nvm installation:

     # command -v nvm

    It should return:

     nvm
  6. Update Node.js to the latest version:

     # nvm install node

4. Create the Discord Bot

  1. Switch to your home directory.

     # cd ~
  2. Create a project folder.

     # mkdir discord-bot
  3. Switch to the project folder.

     # cd discord-bot
  4. Initialize your Node.js project.

     # npm init
  5. Answer the questions. Leave the defaults unless you need to change them.

  6. Check the contents of your package.json file:

     # cat package.json

    It should return something like this:

     {
       "name": "discord-bot",
       "version": "1.0.0",
       "description": "A Discord.js bot",
       "main": "index.js",
       "scripts": {
         "test": "echo \"Error: no test specified\" && exit 1"
       },
       "author": "",
       "license": "ISC"
     }

    For this guide, you need to install the Discord.js library using npm. Then, as you add capabilities to your bot, look for other useful libraries on the npm website.

  7. Install the Discord.js library.

     # npm install discord.js --save

    The --save flag adds the library as a dependency in your package.json file.

  8. Create a file named index.js.

     # nano index.js
  9. Paste this sample code to your index.js file. Replace <YOUR BOT TOKEN> with the token you saved in section 1.

     const { Client, Intents } = require('discord.js');
     const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
    
     client.on('message', message => {
         if (message.content === 'hello') {
             message.channel.send('Hello World~!');
         }
         if (message.content === 'testbot') {
             message.channel.send("Hi! I'm up and Running~!");
         }
         if (message.content === 'ping') {
             message.channel.send('Pong~!');
         } 
     })
    
     client.once('ready', () => {
         console.log('The Discord Bot is Ready!');
     })
    
     client.login('<YOUR-BOT-TOKEN>')

    The Discord bot should respond to hello, testbot, and ping commands.

  10. Save and exit the index.js file.

  11. Create a Dockerfile.

    # nano Dockerfile
  12. Paste this to your Dockerfile.

    FROM node:latest
    
    # Create the bot's directory
    RUN mkdir -p /usr/src/bot
    WORKDIR /usr/src/bot
    
    COPY package.json /usr/src/bot
    RUN npm install
    
    COPY . /usr/src/bot
    
    # Start the bot.
    CMD ["node", "index.js"]
  13. Save and exit the Dockerfile.

5. Run the Discord Bot

  1. Change to the Discord bot project directory.

     # cd ~/discord-bot
  2. Build the docker container for the Discord bot.

     # docker build -t discord-bot .
  3. Run the docker container.

     # docker run -d discord-bot

Running the bot with -d flag runs the container in detached mode (it runs in the background).

Common Docker Commands:

  • List all docker processes:

      # docker ps
  • Stop the docker container (discord bot):

      # docker stop <CONTAINER ID>
  • Restart the docker container:

      # docker restart <CONTAINER ID>

You can find the <CONTAINER ID> when you list all the Docker processes.

6. Invite the Bot to a Discord Server

  1. Go to the Discord Developer Portal and login.
  2. Click the Application that you have created.
  3. Navigate to the OAuth2 Tab from the Settings menu.
  4. In the Scopes Section, select bot.
  5. In the Bot Permissions Section, select Administrator. This gives the bot an Administrator Role from the Discord Server.
  6. Click the Copy Button to copy the generated invite link.
  7. Open the invite link on your browser.
  8. Select the Discord server to add the bot to then click Continue.
  9. Authorize the bot and complete the CAPTCHA.

The Discord bot is now up and running.

More Information

To learn more about Discord bots, please see these resources: