Haven't set up the bot yet? Check out Setting up the bot first!
- Configuration file (start here)
- Adding new options
- Required options
- Other options
- config.ini vs config.json
- Other formats
- Environment variables
All bot options are saved in a configuration file in the bot's folder.
This is created during the setup and is generally either config.ini
or, if you've been using the bot for
longer, config.json
.
The instructions on this page are for config.ini
but can be adapted to config.json
as well.
See config.ini vs config.json for more details.
Note that the format of .ini
and .json
are different -- you can't simply rename a .json
to .ini
or
vice versa.
To add a new option to your config.ini
, open the file in a text editor such as notepad.
Each option is put on a new line, and follows the format option = value
. For example, mainGuildId = 1234
.
You need to restart the bot for configuration changes to take effect!
You can add comments in the config file by prefixing the line with #
. Example:
# This is a comment
option = value
Some options like allowMove
are "Toggle options": they control whether certain features are enabled (on) or not (off).
- To enable a toggle option, set its value to
on
,true
, or1
- To disable a toggle option, set its value to
off
,false
, or0
- E.g.
allowMove = on
orallowMove = off
Some options are marked as "Accepts multiple values". To give these options multiple values,
write the option as option[] = value
and repeat for every value. For example:
inboxServerPermission[] = kickMembers
inboxServerPermission[] = manageMessages
You can also give these options a single value in the usual way, i.e. inboxServerPermission = kickMembers
For some options, such as greetingMessage
, you might want to add text that spans multiple lines.
To do that, use the same format as with "Accepts multiple values" above:
greetingMessage[] = Welcome to the server!
greetingMessage[] = This is the second line of the greeting.
greetingMessage[] =
greetingMessage[] = Fourth line! With an empty line in the middle.
The bot user's token from Discord Developer Portal.
Your server's ID, wrapped in quotes.
For a two-server setup, the inbox server's ID.
For a single-server setup, same as mainGuildId.
ID of a channel on the inbox server where logs are posted after a modmail thread is closed
Default: Your Discord account is not old enough to contact modmail.
See requiredAccountAge
below
Default: off
If enabled, allows you to move threads between categories using !move <category>
Default: off
If enabled, users can use the close command to close threads by themselves from their DMs with the bot
Default: off
If enabled, all messages in modmail threads will be sent to the user without having to use !r
.
To send internal messages in the thread when this option is enabled, prefix them with !note
(using your prefix
),
e.g. !note This is an internal message
.
Default: off
If alwaysReply
is enabled, this option controls whether the auto-reply is anonymous
Default: local
Controls how attachments in modmail threads are stored. Possible values:
- local - Files are saved locally on the machine running the bot
- discord - Files are saved as attachments on a special channel on the inbox server. Requires
attachmentStorageChannelId
to be set.
Default: None
When using attachmentStorage is set to "discord", the id of the channel on the inbox server where attachments are saved
Default: None
If set, the bot auto-replies to bot mentions (pings) with this message. Use {userMention}
in the text to ping the user back.
Default: None
ID of the category where new threads are opened. Also functions as a fallback for categoryAutomation.newThreadFromGuild
.
Default: None
When running the bot on multiple main servers, this allows you to specify new thread categories for users from each guild. Example:
# When the user is from the server ID 94882524378968064, their modmail thread will be placed in the category ID 360863035130249235
categoryAutomation.newThreadFromGuild.94882524378968064 = 360863035130249235
# When the user is from the server ID 541484311354933258, their modmail thread will be placed in the category ID 542780020972716042
categoryAutomation.newThreadFromGuild.541484311354933258 = 542780020972716042
Default: None
If set, the bot sends this message to the user when the modmail thread is closed.
Default: None
Custom aliases/shortcuts for commands. Example:
# !mv is an alias/shortcut for !move
commandAliases.mv = move
# !x is an alias/shortcut for !close
commandAliases.x = close
Default: off
When enabled, the bot will send a greeting DM to users that join the main server.
Default: None
Path to an image or other attachment to send as a greeting. Requires enableGreeting
to be enabled.
Default: None
Message to send as a greeting. Requires enableGreeting
to be enabled. Example:
greetingMessage[] = Welcome to the server!
greetingMessage[] = Remember to read the rules.
Default: None
When running the bot on multiple main servers, this allows you to set different greetings for each server. Example:
guildGreetings.94882524378968064.message = Welcome to server ID 94882524378968064!
guildGreetings.94882524378968064.attachment = greeting.png
guildGreetings.541484311354933258.message[] = Welcome to server ID 541484311354933258!
guildGreetings.541484311354933258.message[] = Second line of the greeting.
Default: off
If enabled, the bot attempts to ignore common "accidental" messages that would start a new thread, such as "ok", "thanks", etc.
Default: None
Accepts multiple values. Permission name, user id, or role id required to use bot commands on the inbox server.
See "Permissions" on this page for supported permission names (e.g. kickMembers
).
Default: You haven't been a member of the server for long enough to contact modmail.
If requiredTimeOnServer
is set, users that are too new will be sent this message if they try to message modmail.
Default: here
Accepts multiple values. Role that is mentioned when new threads are created or the bot is mentioned.
Accepted values are "here", "everyone", or a role id.
Requires pingOnBotMention
to be enabled.
Set to an empty value (mentionRole=
) to disable these pings entirely.
Default: off
If enabled, mentions the user messaging modmail in the modmail thread's header.
Default: None
Deprecated. Same as categoryAutomation.newThread
.
Default: on
If enabled, the bot will mention staff (see mentionRole
option) on the inbox server when the bot is mentioned on the main server.
Default: None
Accepts multiple values. External plugins to load on startup. See Plugins for more information.
Default: 8890
Port to use for attachments (when attachmentStorage
is set to local
) and logs.
Make sure to do the necessary port forwarding and add any needed firewall exceptions so the port is accessible from the internet.
Default: !
Prefix for bot commands
Default: off
If enabled, small attachments from users are sent as real attachments rather than links in modmail threads.
The limit for "small" is 2MB by default; you can change this with the smallAttachmentLimit
option.
Default: None
Required account age for contacting modmail (in hours). If the account is not old enough, a new thread will not be created and the bot will reply with accountAgeDeniedMessage
(if set) instead.
Default: None
Required amount of time (in minutes) the user must be a member of the server before being able to contact modmail. If the user hasn't been a member of the server for the specified time, a new thread will not be created and the bot will reply with timeOnServerDeniedMessage
(if set) instead.
Default: Thank you for your message! Our mod team will reply to you here as soon as possible.
The bot's response to the user when they message the bot and open a new modmail thread
Default: off
If enabled, the user's roles will be shown in the modmail thread header
Default: 2097152
Size limit of relaySmallAttachmentsAsAttachments
in bytes (default is 2MB)
Default: !!
Prefix for snippets
Default: !!!
Prefix to use snippets anonymously
Default: Message me for help
The bot's "Playing" text
Default: on
If enabled, channel permissions for the thread are synchronized with the category when using !move
. Requires allowMove
to be enabled.
Default: off
If enabled, modmail threads will show accurate UTC timestamps for each message, in addition to Discord's own timestamps.
Logs show these always, regardless of this setting.
Default: off
If enabled, any time a user is typing to modmail in their DMs, the modmail thread will show the bot as "typing"
Default: off
If enabled, any time a moderator is typing in a modmail thread, the user will see the bot "typing" in their DMs
Default: on
If enabled, the bot will automatically check for new bot updates periodically and notify about them at the top of new modmail threads
Default: None
URL to use for attachment and log links. Defaults to http://IP:PORT
.
Default: off
If enabled, mod replies will use their nicknames (on the inbox server) instead of their usernames
Earlier versions of the bot instructed you to create a config.json
instead of a config.ini
.
This is still fully supported, and will be in the future as well.
However, there are some differences between config.ini
and config.json
.
See the example on the Wikipedia page for JSON for a general overview of the JSON format.
- In
config.json
, all text values and IDs need to be wrapped in quotes, e.g."mainGuildId": "94882524378968064"
- In
config.json
, all numbers (other than IDs) are written without quotes, e.g."port": 3000
In config.json
, valid values for toggle options are true
and false
(not quoted),
which correspond to on
and off
in config.ini
.
Multiple values are specified in config.json
using arrays:
{
"inboxPermission": [
"kickMembers",
"manageMessages"
]
}
Since config.json
is parsed using JSON5, multiple lines of text are supported
by escaping the newline with a backslash (\
):
{
"greetingMessage": "Welcome to the server!\
This is the second line of the greeting."
}
Loading config values programmatically is also supported.
Create a config.js
in the bot's folder and export the config object with module.exports
.
All other configuration files take precedence, so make sure you don't have both.
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:
To:
inboxServerPermission[] = kickMembers inboxServerPermission[] = manageMessages
MM_INBOX_SERVER_PERMISSION=kickMembers||manageMessages
The port
option also accepts the environment variable PORT
without a prefix, but MM_PORT
takes precedence.