Here are some instructions to get esmBot up and running from source.
Recommended system requirements
If you want to run the bot on Windows, Windows Subsystem for Linux is recommended. This guide is somewhat Linux-centric, so for now you're mostly on your own if you decide not to use WSL.
If you have any further questions regarding setup, feel free to ask in the #support channel on the esmBot Support server.
You can run the bot using Docker for a somewhat simpler setup experience. Click here to go to the Docker setup guide.
1. Install the required native dependencies.
Choose the distro you're using below for insallation instructions.
These instructions apply to Debian version 12 (bookworm) or Ubuntu version 22.04 (jammy) or later.
sudo apt-get install git curl build-essential cmake ffmpeg sqlite3 ttf-mscorefonts-installer libmagick++-dev libvips-dev libcgif-dev libgirepository1.0-dev fonts-noto-color-emoji libimagequant-dev meson
These instructions apply to Fedora 36/RHEL 9 or later.
Some of these packages require that you add the RPM Fusion and/or EPEL repositories. You can find instructions on how to add them here.
sudo dnf install git curl cmake ffmpeg sqlite gcc-c++ libcgif-devel ImageMagick-c++-devel vips-devel libimagequant-devel gobject-introspection-devel google-noto-emoji-color-fonts meson
These instructions apply to the current Edge versions.
doas apk add git curl msttcorefonts-installer python3 sqlite3 alpine-sdk cmake ffmpeg imagemagick-dev vips-dev font-noto-emoji gobject-introspection-dev cgif-dev libimagequant-dev meson
sudo pacman -S git curl cmake pango ffmpeg npm imagemagick libvips sqlite3 libltdl noto-fonts-emoji gobject-introspection libcgif libimagequant meson
ttf-ms-win10-autofrom the AUR.
2. Install libvips.
libvips is the core of esmBot's image processing commands. Version 8.13.0 or higher is recommended because it contains fixes to GIF handling and support for the freeze command; however, this version isn't packaged for most distros yet. To fix this, you'll need to build libvips from source.
Alpine, Arch, RHEL (not Fedora!), and Ubuntu 22.10 (Kinetic Kudu) users can skip this step, since these distros now have 8.13.0 packaged.
First, download the source and move into it:
git clone https://github.com/libvips/libvips cd libvips
meson setup --prefix=/usr --buildtype=release -Dnsgif=true build
cd build meson compile sudo meson install
3. Install Node.js.
Node.js is the runtime that esmBot is built on top of. The bot requires version 16 or above to run.
First things first, we'll need to install pnpm, the package manager used by the bot. Run the following to install it:
curl -fsSL https://get.pnpm.io/install.sh | sh -
Once you've done that, continue with the instructions for your operating system below.
You'll need a more recent version than what's provided in most Debian/Ubuntu-based distros. You can add a repository that contains a supported version by running this command:
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo bash -
sudo apt-get install nodejs
sudo dnf install nodejs
doas apk add nodejs
sudo pacman -S nodejs
4. Set up the database.
esmBot officially supports two database systems: SQLite and PostgreSQL. While SQLite is smaller and requires no initial setup, PostgreSQL has better performance (especially in large environments).
If you're new to databases and self-hosting, choose SQLite.
If you would like to use the SQLite database, no configuration is needed and you can move on to the next step.
If you would like to use the PostgreSQL database, view the setup instructions here and come back here when you're finished.
5. Clone the repo and install the required Node modules.
cd ~ git clone --recursive https://github.com/esmBot/esmBot cd esmBot pnpm i -g node-gyp pnpm install pnpm build
6. (Optional) Set up Lavalink.
Lavalink is the audio server used by esmBot for soundboard commands and music playback. If you do not plan on using these features, you can safely skip this step.
There are websites out there providing lists of public Lavalink instances that can be used with the bot. However, these are not recommended due to performance/security concerns and missing features, and it is highly recommended to set one up yourself instead using the steps below.
Lavalink requires a Java (11 or later) installation. You can use SDKMAN to install Eclipse Temurin, a popular Java distribution:
sdk install java 11.0.15-tem
Initial setup is like this:
cd ~ mkdir Lavalink cd Lavalink curl -OL https://github.com/freyacodes/Lavalink/releases/latest/download/Lavalink.jar cp ~/esmBot/application.yml . ln -s ~/esmBot/assets assets
java -Djdk.tls.client.protocols=TLSv1.2 -jar Lavalink.jar
You'll need to run Lavalink alongside the bot in order to use it. There are a few methods to do this, such as the
screen command, creating a new systemd service, or simply just opening a new terminal session alongside your current one.
7. Configure the bot.
Configuration is done via environment variables which can be specified through a
.env file. Copy
.env.example to get a starter config file:
cp .env.example .env
If you can't see either of these files, don't worry - Linux treats files whose names start with a . as hidden files.
To edit this file in the terminal, run this command:
When you're finished editing the file, press Ctrl + X, then Y and Enter.
An overview of each of the variables in the
.env file can be found here.
8. Run the bot.
Once everything else is set up, you can start the bot like so:
You will need to select the
The following permissions are needed in most cases for the bot to work properly:
If you want the bot to run 24/7, you can use the PM2 process manager. Install it using the following command:
pnpm add -g pm2
Once you've done that, you can start the bot using the following command:
pm2 start ecosystem.config.cjs
If you wish to update the bot to the latest version/commit at any time, just run
git pull and
Error: Cannot find module './build/Release/image.node'
The native image functions haven't been built. Run
pnpm run build to build them.
pnpm install or
pnpm build fails with error 'ELIFECYCLE Command failed.'
You seem to be missing node-gyp. This can be fixed by running:
pnpm i -g node-gyp rm -rf node_modules pnpm install
Error: connect ECONNREFUSED 127.0.0.1:5432
PostgreSQL isn't running, you should be able to start it with
sudo systemctl start postgresql. If you don't intend to use PostgreSQL, you should take another look at your
DB variable in the .env file.
Gifs from Tenor result in a "no decode delegate for this image format" or "improper image header" error
Tenor GIFs are actually stored as MP4s, which libvips can't decode most of the time. You'll need to get a Tenor API key from here and put it in the
TENOR variable in .env.
If you have any further questions regarding self-hosting, feel free to ask in the #support channel on the esmBot Support server.