diff --git a/README.md b/README.md index 114516c..c1c2606 100644 --- a/README.md +++ b/README.md @@ -84,3 +84,5 @@ These go in `config.json`. See also `config.example.json`. |typingProxy|false|If enabled, any time a user is typing to modmail in their DMs, the modmail thread will show the bot as "typing"| |typingProxyReverse|false|If enabled, any time a moderator is typing in a modmail thread, the user will see the bot "typing" in their DMs| |mentionRole|"here"|Role that is mentioned when new threads are created or the bot is mentioned. Accepted values are "here", "everyone", or a role id as a string. Set to null to disable these pings entirely.| +|userOlderThan|null|The amount of days the user's account has to exist. If the user's account is not old enough, the bot will not make a new thread and reply to the user with the message defined in `userDeniedMessage`.| +|userDeniedMessage|"Your Discord account is not old enough to contact modmail."|The message to reply to a user when their account is not old enough to contact modmail.| \ No newline at end of file diff --git a/src/config.js b/src/config.js index 952a589..55b0d37 100644 --- a/src/config.js +++ b/src/config.js @@ -65,6 +65,9 @@ const defaultConfig = { "greetingMessage": null, "greetingAttachment": null, + "userOlderThan": null, // Amount of days + "userDeniedMessage": "Your Discord account is not old enough to contact modmail.", + "relaySmallAttachmentsAsAttachments": false, "port": 8890, diff --git a/src/data/threads.js b/src/data/threads.js index 8e195d3..e0bb1b6 100644 --- a/src/data/threads.js +++ b/src/data/threads.js @@ -56,6 +56,18 @@ async function createNewThreadForUser(user, quiet = false) { throw new Error('Attempted to create a new thread for a user with an existing open thread!'); } + // Check the config for a requirement of account age to contact modmail, + // if the account is too young, return an optional message without making a new thread + if (config.userOlderThan) { + if (user.createdAt > moment() - config.userOlderThan * 86400000){ + if (config.userDeniedMessage) { + const privateChannel = await user.getDMChannel(); + await privateChannel.createMessage(config.userDeniedMessage); + } + return; + } + } + // Use the user's name+discrim for the thread channel's name // Channel names are particularly picky about what characters they allow, so we gotta do some clean-up let cleanName = transliterate.slugify(user.username); diff --git a/src/main.js b/src/main.js index 6b51fcc..8b58881 100644 --- a/src/main.js +++ b/src/main.js @@ -86,7 +86,7 @@ bot.on('messageCreate', async msg => { thread = await threads.createNewThreadForUser(msg.author); } - await thread.receiveUserReply(msg); + if (thread) await thread.receiveUserReply(msg); }); });