From c72bb7baa10e7033210432137229ce9844a883bf Mon Sep 17 00:00:00 2001 From: Essem Date: Tue, 26 Jul 2022 13:48:37 -0500 Subject: [PATCH] Setup mkdocs --- README.md | 2 +- esmbot.png => docs/assets/esmbot.png | Bin docs/assets/permissions.png | Bin 0 -> 81577 bytes docs/config.md | 4 +- docs/custom-commands.md | 6 +- docs/index.md | 3 + docs/postgresql.md | 43 +++--- docs/setup.md | 189 ++++++++++++++------------- mkdocs.yml | 52 ++++++++ utils/help.js | 2 +- 10 files changed, 186 insertions(+), 115 deletions(-) rename esmbot.png => docs/assets/esmbot.png (100%) create mode 100644 docs/assets/permissions.png create mode 100644 docs/index.md create mode 100644 mkdocs.yml diff --git a/README.md b/README.md index 2ffbf51..04e72c3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# esmBot +# esmBot [![esmBot Support](https://discordapp.com/api/guilds/592399417676529688/embed.png)](https://discord.gg/vfFM7YT) ![GitHub license](https://img.shields.io/github/license/esmBot/esmBot.svg) diff --git a/esmbot.png b/docs/assets/esmbot.png similarity index 100% rename from esmbot.png rename to docs/assets/esmbot.png diff --git a/docs/assets/permissions.png b/docs/assets/permissions.png new file mode 100644 index 0000000000000000000000000000000000000000..a603009ab9e5b33be3f28cb4b6291de6f60463f9 GIT binary patch literal 81577 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 z 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 MhL*pVpk4m_7ZW(Ewg3PC literal 0 HcmV?d00001 diff --git a/docs/config.md b/docs/config.md index 9da7def..d216a17 100644 --- a/docs/config.md +++ b/docs/config.md @@ -2,13 +2,15 @@ esmBot uses environment variables for configuration. To make managing them easier, a `.env` file is included with the bot and can be used to load the variables on bot startup. Here's an overview of the environment variables required to run the bot: + - `NODE_ENV`: Used for tuning the bot to different environments. If you don't know what to set it to, leave it as is. -- `TOKEN`: Your bot's token. You can find this at https://discord.com/developers/applications under your application's Bot tab. +- `TOKEN`: Your bot's token. You can find this [here](https://discord.com/developers/applications) under your application's Bot tab. - `DB`: The database connection string. By default the `sqlite` and `postgresql` protocols are available, but this can be expanded by putting proper DB driver scripts into `utils/database/`. You can also set this to `dummy` to make the bot not use a database at all. - `OWNER`: Your Discord user ID. This is used for granting yourself access to certain management commands. Adding multiple users is supported by separating the IDs with a comma; however, this is not recommended for security purposes. - `PREFIX`: The bot's default command prefix. Note that servers can set their own individual prefixes via the `prefix` command. Here's an overview of the variables that are not necessarily required for the bot to run, but can greatly enhance its functionality: + - `STAYVC`: Set this to true if you want the bot to stay in voice chat after playing music/a sound effect. You can make it leave by using the stop command. - `DBL`: An API token from [Top.gg](https://top.gg/). Unnecessary for most users since Top.gg tends to ban forks of bots like esmBot from their list. - `TENOR`: An API token from [Tenor](https://tenor.com/gifapi). This is required for using GIFs from Tenor. diff --git a/docs/custom-commands.md b/docs/custom-commands.md index 35b3454..2425b5c 100644 --- a/docs/custom-commands.md +++ b/docs/custom-commands.md @@ -4,7 +4,7 @@ esmBot has a flexible command handler, allowing you to create new commands and c ## Directory Structure The bot loads commands from subdirectories inside of the `commands` directory, which looks something like this by default: ``` -commands +commands/ - fun > cat.js > ... @@ -40,6 +40,7 @@ As you can see, the first thing we do is import the Command class. We then creat The default command name is the same as the filename that you save it as, excluding the `.js` file extension. If you ever want to change the name of the command, just rename the file. The parameters available to your command consist of the following: + - `this.client`: An instance of an Eris [`Client`](https://abal.moe/Eris/docs/Client), useful for getting info or performing lower-level communication with the Discord API. - `this.cluster`: The ID of the eris-fleet cluster that the command is being run from. This should be a number greater than or equal to 0. - `this.worker`: The ID of the current eris-fleet worker. This should be a number greater than or equal to 0. @@ -52,16 +53,19 @@ The parameters available to your command consist of the following: - `this.options`: When run as a "classic" command, this is an object of special arguments (e.g. `--argument=true`) passed to the command. These arguments are stored in a key/value format, so following the previous example, `this.options.argument` would return true. When run as a slash command, this is an object of every argument passed to the command. Some options are only available depending on the context/original message type, which can be checked with `this.type`. The options only available with "classic" messages are listed below: + - `this.message`: An Eris [`Message`](https://abal.moe/Eris/docs/Message) object of the message that the command was run from, useful for interaction. - `this.args`: An array of text arguments passed to the command. - `this.content`: A string of the raw content of the command message, excluding the prefix and command name. - `this.reference`: An object that's useful if you ever decide to reply to a user inside the command. You can use [`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) to combine your message content with this parameter. The options only available with "application"/slash commands are listed below: + - `this.interaction`: An Eris [`CommandInteraction`](https://abal.moe/Eris/docs/CommandInteraction) object of the incoming slash command data. - `this.optionsArray`: A raw array of command options. Should rarely be used. Some static fields are also available and can be set depending on your command. These fields are listed below: + - `description`: Your command's description, which is shown in the help command. - `aliases`: An array of command aliases. People will be able to run the command using these as well as the normal command name. - `arguments`: An array of command argument types, which are shown in the help command. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..4ff3671 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,3 @@ +Welcome to the esmBot documentation site! + +You're probably looking for the [Setup](setup.md) page. If you're an end user looking to invite the bot, head over to [https://projectlounge.pw/invite](https://projectlounge.pw/invite). \ No newline at end of file diff --git a/docs/postgresql.md b/docs/postgresql.md index 3c52ce7..3b2abda 100644 --- a/docs/postgresql.md +++ b/docs/postgresql.md @@ -1,37 +1,34 @@ # PostgreSQL Here are some instructions for setting up PostgreSQL for use with esmBot. -**1. Install PostgreSQL.** +### 1. Install PostgreSQL. -#### Debian/Ubuntu -```sh -sudo apt-get install postgresql postgresql-client -``` - -#### Fedora -```sh -sudo dnf install postgresql postgresql-server -``` - -#### Alpine -```sh -doas apk add postgresql -``` - -#### Arch/Manjaro -```sh -sudo pacman -S postgresql -``` +=== "Debian/Ubuntu" + ```sh + sudo apt-get install postgresql postgresql-client + ``` +=== "Fedora/RHEL" + ```sh + sudo dnf install postgresql postgresql-server + ``` +=== "Alpine" + ```sh + doas apk add postgresql + ``` +=== "Arch/Manjaro" + ```sh + sudo pacman -S postgresql + ``` *** -**2. (Optional) Tune PostgreSQL.** +### 2. (Optional) Tune PostgreSQL. [PGTune](https://pgtune.leopard.in.ua/) is a useful tool for generating configuration files for your PostgreSQL database. It is highly recommended that you generate a config using this tool as it can increase stability and performance. *** -**3. Create the bot user and database.** +### 3. Create the bot user and database. When you install PostgreSQL, it'll create a new user on your system that acts as the "superuser" of the database. You'll need to run Postgres commands as this user; however, you can run a command as that user without switching to it by using `sudo`. @@ -58,6 +55,8 @@ POSTGRES_USER=esmbot POSTGRES_DB=esmbot utils/psqlinit.sh ``` You're done! +*** + ### Troubleshooting If you get an error like `error: permission denied for table counts` when attempting to run the bot, try running these commands in the PostgreSQL shell: ```sql diff --git a/docs/setup.md b/docs/setup.md index 72f38a4..263b508 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -1,50 +1,52 @@ # Setup Here are some instructions to get esmBot up and running from source. -Recommended system requirements: -- 64-bit CPU/operating system -- Quad-core CPU or better -- 1GB or more of RAM -- Linux-based operating system or virtual machine (Ubuntu 22.04 LTS is recommended) +??? check "Recommended system requirements" + - 64-bit CPU/operating system + - Quad-core CPU or better + - 1GB or more of RAM + - Linux-based operating system or virtual machine ([Ubuntu 22.04 LTS](https://ubuntu.com/download/server) or [Fedora 36](https://getfedora.org/) are recommended) -If you want to run the bot on Windows, [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) is recommended. This guide is somewhat Linux-centric, so for now you're mostly on your own if you decide not to use WSL. +!!! warning + If you want to run the bot on Windows, [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) 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 #self-hosting-support channel on the [esmBot Support server](https://projectlounge.pw/support). -## Setup -#### 1. Install the required native dependencies. -**Debian (bookworm)/Ubuntu (22.04 or later)** -```sh -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 -``` -On older Debian/Ubuntu versions, you may need to install some of these packages (notably libcgif-dev and meson) through alternative methods. +### 1. Install the required native dependencies. +Choose the distro you're using below for insallation instructions. +=== "Debian/Ubuntu" + These instructions apply to Debian version 12 (bookworm) or Ubuntu version 22.04 (jammy) or later. + ```sh + 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 + ``` + On older Debian/Ubuntu versions, you may need to install some of these packages (notably libcgif-dev and meson) through alternative methods. +=== "Fedora/RHEL" + These instructions apply to Fedora 36/RHEL 9 or later. -**Fedora/RHEL** -Some of these packages require that you add the RPM Fusion repository. You can find instructions on how to add it here: https://rpmfusion.org/Configuration -RHEL users may also need to add the EPEL repository. Instructions for adding it can be found here: https://docs.fedoraproject.org/en-US/epel/ -```sh -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 -``` -On RHEL-based distros like AlmaLinux and Rocky Linux, you may need to add [Remi's RPM Repository](https://rpms.remirepo.net) for the vips package. - -**Alpine (edge)** -```sh -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 -``` - -**Arch/Manjaro** -```sh -sudo pacman -S git curl cmake pango ffmpeg npm imagemagick libvips sqlite3 libltdl noto-fonts-emoji gobject-introspection libcgif libimagequant meson -``` -Arch/Manjaro users: you'll also need to install [`ttf-ms-fonts`](https://aur.archlinux.org/packages/ttf-ms-fonts/) from the AUR. + 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](https://rpmfusion.org/Configuration). + ```sh + 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 + ``` + On RHEL-based distros like AlmaLinux and Rocky Linux, you may need to add [Remi's RPM Repository](https://rpms.remirepo.net) for the vips package. +=== "Alpine" + These instructions apply to the current Edge versions. + ```sh + 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 + ``` +=== "Arch/Manjaro" + ```sh + sudo pacman -S git curl cmake pango ffmpeg npm imagemagick libvips sqlite3 libltdl noto-fonts-emoji gobject-introspection libcgif libimagequant meson + ``` + You'll also need to install [`ttf-ms-fonts`](https://aur.archlinux.org/packages/ttf-ms-fonts/) from the AUR. *** -#### 2. Install libvips. +### 2. Install libvips. -[libvips](https://github.com/libvips/libvips) is the core of esmBot's image processing commands. The latest version as of writing this (8.12.2) is recommended because it contains fixes to GIF handling; however, there's also a missing feature in this version that is needed for the freeze command to work (see [libvips pull request #2709](https://github.com/libvips/libvips/pull/2709)). To fix this, you'll need to build libvips from source. +[libvips](https://github.com/libvips/libvips) is the core of esmBot's image processing commands. The latest version (8.13.0) 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 and Arch users can skip this step, since both distros now have 8.13.0 packaged.** +!!! note + Alpine and Arch users can skip this step, since both distros now have 8.13.0 packaged. First, download the source and move into it: ```sh @@ -64,7 +66,7 @@ sudo meson install *** -#### 3. Install Node.js. +### 3. Install Node.js. Node.js is the runtime that esmBot is built on top of. The bot requires version 15 or above to run. @@ -75,34 +77,31 @@ curl -fsSL https://get.pnpm.io/install.sh | sh - Once you've done that, continue with the instructions for your operating system below. -**Debian/Ubuntu** -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: -```sh -curl -fsSL https://deb.nodesource.com/setup_16.x | sudo bash - -``` -After that, you can install Node.js with this command: -```sh -sudo apt-get install nodejs -``` - -**Fedora/RHEL** -```sh -sudo dnf install nodejs -``` - -**Alpine** -```sh -doas apk add nodejs -``` - -**Arch/Manjaro** -```sh -sudo pacman -S nodejs -``` +=== "Debian/Ubuntu" + 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: + ```sh + curl -fsSL https://deb.nodesource.com/setup_16.x | sudo bash - + ``` + After that, you can install Node.js with this command: + ```sh + sudo apt-get install nodejs + ``` +=== "Fedora/RHEL" + ```sh + sudo dnf install nodejs + ``` +=== "Alpine" + ```sh + doas apk add nodejs + ``` +=== "Arch/Manjaro" + ```sh + sudo pacman -S nodejs + ``` *** -#### 4. Set up the database. +### 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). @@ -112,7 +111,7 @@ If you would like to use the PostgreSQL database, view the setup instructions [h *** -#### 5. Clone the repo and install the required Node modules. +### 5. Clone the repo and install the required Node modules. ```sh cd ~ git clone --recurse-submodules https://github.com/esmBot/esmBot @@ -129,7 +128,7 @@ fc-cache -fv *** -#### 6. (Optional) Set up Lavalink. +### 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. @@ -154,17 +153,21 @@ java -Djdk.tls.client.protocols=TLSv1.2 -jar Lavalink.jar *** -#### 7. Configure the bot. +### 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: ```sh 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: + +!!! tip + 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: ```sh nano .env ``` -This will launch a text editor with the file ready to go. Create a Discord application at https://discord.com/developers/applications and select the Bot tab on the left, then create a bot user. Once you've done this, copy the token it gives you and put it in the `TOKEN` variable. +This will launch a text editor with the file ready to go. Create a Discord application [here](https://discord.com/developers/applications) and select the Bot tab on the left, then create a bot user. Once you've done this, copy the token it gives you and put it in the `TOKEN` variable. When you're finished editing the file, press Ctrl + X, then Y and Enter. @@ -172,13 +175,22 @@ An overview of each of the variables in the `.env` file can be found [here](http *** -#### 8. Run the bot. +### 8. Run the bot. Once everything else is set up, you can start the bot like so: ```sh pnpm start ``` -If the bot starts successfully, you're done! You can invite the bot to your server by generating an invite link [here](https://discordapi.com/permissions.html#3533888). +If the bot starts successfully, you're done! You can invite the bot to your server by generating an invite link under OAuth -> URL Generator in the Discord application dashboard. + +!!! note + You will need to select the `bot` and `applications.commands` scopes. + The following permissions are needed in most cases for the bot to work properly: + +

+ ![Required permissions](assets/permissions.png){ loading=lazy, width=500 } +
click to enlarge
+
If you want the bot to run 24/7, you can use the [PM2](https://pm2.keymetrics.io) process manager. Install it using the following command: ```sh @@ -190,39 +202,38 @@ Once you've done that, you can start the bot using the following command: pm2 start app.js ``` -*** - -If you wish to update the bot to the latest version/commit at any time, just run `git pull` and `pnpm install`. +!!! tip + If you wish to update the bot to the latest version/commit at any time, just run `git pull` and `pnpm install`. *** ## Troubleshooting -### Error: Cannot find module './build/Release/image.node' -The native image functions haven't been built. Run `pnpm run build` to build them. +??? faq "Error: Cannot find module './build/Release/image.node'" + The native image functions haven't been built. Run `pnpm run build` to build them. -### pnpm fails with error 'ELIFECYCLE  Command failed.' -You seem to be missing node-gyp, this can be fixed by running: -```sh -pnpm -g install node-gyp -rm -r node_modules -pnpm install -``` +??? faq "pnpm fails with error 'ELIFECYCLE  Command failed.'" + You seem to be missing node-gyp. This can be fixed by running: + ```sh + 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. +??? faq "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](https://developers.google.com/tenor/guides/quickstart) and put it in the `TENOR` variable in .env. +??? faq "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](https://developers.google.com/tenor/guides/quickstart) and put it in the `TENOR` variable in .env. -### Emojis are missing in some commands -Your system doesn't have an emoji font installed. You can install Google's emoji set with `sudo apt-get install fonts-noto-color-emoji` on Debian/Ubuntu systems, `doas apk add font-noto-emoji` on Alpine, and `sudo pacman -S noto-fonts-emoji` on Arch/Manjaro. +??? faq "Emojis are missing in some commands" + Your system doesn't have an emoji font installed. You can install Google's emoji set with `sudo apt-get install fonts-noto-color-emoji` on Debian/Ubuntu systems, `doas apk add font-noto-emoji` on Alpine, and `sudo pacman -S noto-fonts-emoji` on Arch/Manjaro. -If you want to use the same set that Discord and the main bot uses (Twemoji) on Fedora, then you can run `sudo dnf remove google-noto-emoji-color-fonts && sudo dnf install twitter-twemoji-fonts`. + If you want to use the same set that Discord and the main bot uses (Twemoji) on Fedora, then you can run `sudo dnf remove google-noto-emoji-color-fonts && sudo dnf install twitter-twemoji-fonts`. -If you want to install Twemoji on another distro then it's slightly more difficult. Go to https://koji.fedoraproject.org/koji/packageinfo?packageID=26306 and choose the latest build, then download the `noarch` RPM file. You'll then have to extract this file; most graphical tools (e.g. 7-Zip, Ark, The Unarchiver) should be able to extract this just fine, but on the command line you'll have to use the `rpm2cpio` tool. The font file should be inside the archive at `usr/share/fonts/Twemoji/Twemoji.ttf`; copy this to `/usr/share/fonts/Twemoji.ttf` (note the / at the beginning). After this, run `fc-cache -fv` and you should be good to go! + If you want to install Twemoji on another distro then it's slightly more difficult. Go [here](https://koji.fedoraproject.org/koji/packageinfo?packageID=26306) and choose the latest build, then download the `noarch` RPM file. You'll then have to extract this file; most graphical tools (e.g. 7-Zip, Ark, The Unarchiver) should be able to extract this just fine, but on the command line you'll have to use the `rpm2cpio` tool. The font file should be inside the archive at `usr/share/fonts/Twemoji/Twemoji.ttf`; copy this to `/usr/share/fonts/Twemoji.ttf` (note the / at the beginning). After this, run `fc-cache -fv` and you should be good to go! -### Sound/music commands do nothing -Make sure Lavalink is running and started up completely. The bot skips loading sound commands if Lavalink is not present, so make sure it's running when the bot starts as well. +??? faq "Sound/music commands do nothing" + Make sure Lavalink is running and started up completely. The bot skips loading sound commands if Lavalink is not present, so make sure it's running when the bot starts as well. *** diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..926b880 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,52 @@ +site_name: esmBot +docs_dir: docs/ +repo_name: 'esmBot/esmBot' +repo_url: 'https://github.com/esmBot/esmBot' +copyright: Copyright © 2018 - 2022
Essem +nav: + - Home: index.md + - setup.md + - config.md + - custom-commands.md + - docker.md + - postgresql.md +markdown_extensions: + - def_list + - attr_list + - pymdownx.tasklist: + custom_checkbox: true + - admonition + - pymdownx.details + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true +theme: + name: 'material' + features: + - toc.integrate + - content.tabs.link + logo: assets/esmbot.png + favicon: assets/esmbot.png + palette: + - media: "(prefers-color-scheme: light)" + scheme: default + toggle: + icon: material/weather-night + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + toggle: + icon: material/weather-sunny + name: Switch to light mode +plugins: + - glightbox + - git-revision-date-localized: + enable_creation_date: true +extra: + social: + - icon: fontawesome/brands/twitter + link: https://twitter.com/esmBot_ + - icon: fontawesome/brands/github + link: https://github.com/esmBot + - icon: fontawesome/brands/patreon + link: https://patreon.com/TheEssem \ No newline at end of file diff --git a/utils/help.js b/utils/help.js index 2239753..2174ebd 100644 --- a/utils/help.js +++ b/utils/help.js @@ -31,7 +31,7 @@ export async function generateList() { } export async function createPage(output) { - let template = `# esmBot${process.env.NODE_ENV === "development" ? " Dev" : ""} Command List + let template = `# esmBot${process.env.NODE_ENV === "development" ? " Dev" : ""} Command List This page was last generated on \`${new Date().toString()}\`.