Add support for loading config values from environment variables
parent
1007dc0dd1
commit
8dd6513ca3
|
@ -4,6 +4,8 @@
|
||||||
* **Change default configuration format to .ini**
|
* **Change default configuration format to .ini**
|
||||||
* Existing `config.json` files will continue to work and will not be deprecated
|
* Existing `config.json` files will continue to work and will not be deprecated
|
||||||
* This makes the default configuration format for the bot much more approachable than JSON
|
* This makes the default configuration format for the bot much more approachable than JSON
|
||||||
|
* Config values can now also be loaded from environment variables
|
||||||
|
(see [Configuration](docs/configuration.md#environment-variables) for more details)
|
||||||
* New rewritten instructions for setting up and using the bot
|
* New rewritten instructions for setting up and using the bot
|
||||||
* New easy-to-use `start.bat` file for Windows
|
* New easy-to-use `start.bat` file for Windows
|
||||||
* Update several package dependencies
|
* Update several package dependencies
|
||||||
|
|
|
@ -7,6 +7,7 @@ Haven't set up the bot yet? Check out [Setting up the bot](setup.md) first!
|
||||||
- [Required options](#required-options)
|
- [Required options](#required-options)
|
||||||
- [Other options](#other-options)
|
- [Other options](#other-options)
|
||||||
- [config.ini vs config.json](#configini-vs-configjson)
|
- [config.ini vs config.json](#configini-vs-configjson)
|
||||||
|
- [Environment variables](#environment-variables)
|
||||||
|
|
||||||
## Configuration file
|
## Configuration file
|
||||||
All bot options are saved in a configuration file in the bot's folder.
|
All bot options are saved in a configuration file in the bot's folder.
|
||||||
|
@ -313,3 +314,23 @@ by escaping the newline with a backslash (`\ `):
|
||||||
This is the second line of the greeting."
|
This is the second line of the greeting."
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Environment variables
|
||||||
|
Config options can be passed via environment variables.
|
||||||
|
|
||||||
|
To get the name of the corresponding environment variable for an option, convert the option to SNAKE_CASE with periods
|
||||||
|
being replaced by two underscores and add `MM_` as a prefix. If adding multiple values for the same option, separate the
|
||||||
|
values with two pipe characters: `||`.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
* `mainGuildId` -> `MM_MAIN_GUILD_ID`
|
||||||
|
* `commandAliases.mv` -> `MM_COMMAND_ALIASES__MV`
|
||||||
|
* From:
|
||||||
|
```ini
|
||||||
|
inboxServerPermission[] = kickMembers
|
||||||
|
inboxServerPermission[] = manageMessages
|
||||||
|
```
|
||||||
|
To:
|
||||||
|
`MM_INBOX_SERVER_PERMISSION=kickMembers||manageMessages`
|
||||||
|
|
||||||
|
The `port` option also accepts the environment variable `PORT` without a prefix, but `MM_PORT` takes precedence.
|
||||||
|
|
|
@ -137,17 +137,21 @@ for (const [key, value] of Object.entries(process.env)) {
|
||||||
.replace(/([a-z])_([a-z])/g, (m, m1, m2) => `${m1}${m2.toUpperCase()}`)
|
.replace(/([a-z])_([a-z])/g, (m, m1, m2) => `${m1}${m2.toUpperCase()}`)
|
||||||
.replace('__', '.');
|
.replace('__', '.');
|
||||||
|
|
||||||
userConfig[configKey] = process.env[key];
|
userConfig[configKey] = value.includes('||')
|
||||||
|
? value.split('||')
|
||||||
|
: value;
|
||||||
|
|
||||||
|
loadedEnvValues++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.env.PORT && !process.env.MM_PORT) {
|
||||||
|
// Special case: allow common "PORT" environment variable without prefix
|
||||||
|
userConfig.port = process.env.PORT;
|
||||||
loadedEnvValues++;
|
loadedEnvValues++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (loadedEnvValues > 0) {
|
if (loadedEnvValues > 0) {
|
||||||
console.log(`Loaded ${loadedEnvValues} values from environment variables`);
|
console.log(`Loaded ${loadedEnvValues} ${loadedEnvValues === 1 ? 'value' : 'values'} from environment variables`);
|
||||||
}
|
|
||||||
|
|
||||||
if (process.env.PORT) {
|
|
||||||
// Special case: allow common "PORT" environment variable without prefix
|
|
||||||
userConfig.port = process.env.PORT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert config keys with periods to objects
|
// Convert config keys with periods to objects
|
||||||
|
|
Loading…
Reference in New Issue