Author: Kenn Carlo Gutierrez
Last Updated: Wed, Sep 1, 2021Discord 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 and host it on a CentOS 8 cloud server at Vultr.
Install Node.js, a javascript runtime that is required for Discord.js.
# yum install nodejs -y
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.
Reboot the server.
Verify the nvm installation:
# command -v nvm
It should return:
nvm
Update Node.js to the latest version:
# nvm install node
Switch to your home directory.
# cd ~
Create a project folder.
# mkdir discord-bot
Switch to the project folder.
# cd discord-bot
Initialize your Node.js project.
# npm init
Answer the questions. Leave the defaults unless you need to change them.
Check the contents of your package.json
file:
# cat package.json
It should look like this:
{
"name": "discord-bot",
"version": "1.0.0",
"description": "A Discord.js Bot on CentOS 8",
"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. As you add capabilities to your bot, look for other useful libraries on the npm website.
Install the Discord.js library.
# npm install discord.js --save
The --save
flag adds the library as a dependency in your package.json
file.
Create a file named index.js
.
# nano index.js
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 commands such as !hello
, !testbot
, and !ping
.
Save and exit the file.
Your Discord bot stops running when you exit the SSH session. To keep the bot running full-time, use Tmux or PM2.
create a tmux session, run:
# tmux new -s DiscordBot
Change to the Discord bot project directory.
# cd ~/discord-bot
Start the bot.
# node index.js
It should return:
The Discord Bot is Ready!
To stop the Discord Bot, press CTRL + C
PM2 is a daemon process manager that will help you manage and keep your application running.
Install the PM2 process manager to manage your bot.
# npm install pm2 -g
Change to the Discord bot project directory.
# cd ~/discord-bot
Start the Bot.
# pm2 start index.js
Verify if the bot is online.
# pm2 logs
It should return:
0|index | The Discord Bot is Ready!
To exit the log, press CTRL + C
Make sure you are in the ~/discord-bot
directory, then use these commands to control your bot.
List all PM2 processes:
# pm2 list
Stop the Discord bot:
# pm2 stop index.js
Restart the Discord bot:
# pm2 restart index.js
The Discord bot is now up and running.
To learn more about Discord bots, please see these resources: