diff options
| author | Sin-MacBook <[email protected]> | 2020-08-10 23:44:20 +0200 |
|---|---|---|
| committer | Sin-MacBook <[email protected]> | 2020-08-10 23:44:20 +0200 |
| commit | 2a53887abba882bf7b63aeda8dfa55fdb3ab8792 (patch) | |
| tree | ad7a95eb41faa6ff13c3142285cdc0eb3ca92183 /src/modules/block.js | |
| download | modmail-2a53887abba882bf7b63aeda8dfa55fdb3ab8792.tar.xz modmail-2a53887abba882bf7b63aeda8dfa55fdb3ab8792.zip | |
clean this up when home
Diffstat (limited to 'src/modules/block.js')
| -rw-r--r-- | src/modules/block.js | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/modules/block.js b/src/modules/block.js new file mode 100644 index 0000000..94913c4 --- /dev/null +++ b/src/modules/block.js @@ -0,0 +1,99 @@ +const humanizeDuration = require('humanize-duration'); +const moment = require('moment'); +const blocked = require("../data/blocked"); +const utils = require("../utils"); + +module.exports = ({ bot, knex, config, commands }) => { + async function removeExpiredBlocks() { + const expiredBlocks = await blocked.getExpiredBlocks(); + const logChannel = utils.getLogChannel(); + for (const userId of expiredBlocks) { + await blocked.unblock(userId); + logChannel.createMessage(`Block of <@!${userId}> (id \`${userId}\`) expired`); + } + } + + async function expiredBlockLoop() { + try { + removeExpiredBlocks(); + } catch (e) { + console.error(e); + } + + setTimeout(expiredBlockLoop, 2000); + } + + bot.on('ready', expiredBlockLoop); + + const blockCmd = async (msg, args, thread) => { + const userIdToBlock = args.userId || (thread && thread.user_id); + if (! userIdToBlock) return; + + const isBlocked = await blocked.isBlocked(userIdToBlock); + if (isBlocked) { + msg.channel.createMessage('User is already blocked'); + return; + } + + const expiresAt = args.blockTime + ? moment.utc().add(args.blockTime, 'ms').format('YYYY-MM-DD HH:mm:ss') + : null; + + const user = bot.users.get(userIdToBlock); + await blocked.block(userIdToBlock, (user ? `${user.username}#${user.discriminator}` : ''), msg.author.id, expiresAt); + + if (expiresAt) { + const humanized = humanizeDuration(args.blockTime, { largest: 2, round: true }); + msg.channel.createMessage(`Blocked <@${userIdToBlock}> (id \`${userIdToBlock}\`) from modmail for ${humanized}`); + } else { + msg.channel.createMessage(`Blocked <@${userIdToBlock}> (id \`${userIdToBlock}\`) from modmail indefinitely`); + } + }; + + commands.addInboxServerCommand('block', '<userId:userId> [blockTime:delay]', blockCmd); + commands.addInboxServerCommand('block', '[blockTime:delay]', blockCmd); + + const unblockCmd = async (msg, args, thread) => { + const userIdToUnblock = args.userId || (thread && thread.user_id); + if (! userIdToUnblock) return; + + const isBlocked = await blocked.isBlocked(userIdToUnblock); + if (! isBlocked) { + msg.channel.createMessage('User is not blocked'); + return; + } + + const unblockAt = args.unblockDelay + ? moment.utc().add(args.unblockDelay, 'ms').format('YYYY-MM-DD HH:mm:ss') + : null; + + const user = bot.users.get(userIdToUnblock); + if (unblockAt) { + const humanized = humanizeDuration(args.unblockDelay, { largest: 2, round: true }); + await blocked.updateExpiryTime(userIdToUnblock, unblockAt); + msg.channel.createMessage(`Scheduled <@${userIdToUnblock}> (id \`${userIdToUnblock}\`) to be unblocked in ${humanized}`); + } else { + await blocked.unblock(userIdToUnblock); + msg.channel.createMessage(`Unblocked <@${userIdToUnblock}> (id ${userIdToUnblock}) from modmail`); + } + }; + + commands.addInboxServerCommand('unblock', '<userId:userId> [unblockDelay:delay]', unblockCmd); + commands.addInboxServerCommand('unblock', '[unblockDelay:delay]', unblockCmd); + + commands.addInboxServerCommand('is_blocked', '[userId:userId]',async (msg, args, thread) => { + const userIdToCheck = args.userId || (thread && thread.user_id); + if (! userIdToCheck) return; + + const blockStatus = await blocked.getBlockStatus(userIdToCheck); + if (blockStatus.isBlocked) { + if (blockStatus.expiresAt) { + msg.channel.createMessage(`<@!${userIdToCheck}> (id \`${userIdToCheck}\`) is blocked until ${blockStatus.expiresAt} (UTC)`); + } else { + msg.channel.createMessage(`<@!${userIdToCheck}> (id \`${userIdToCheck}\`) is blocked indefinitely`); + } + } else { + msg.channel.createMessage(`<@!${userIdToCheck}> (id \`${userIdToCheck}\`) is NOT blocked`); + } + }); +}; |