UNPKG

@diamondbot/memberage-command

Version:

DiamondBot command to display the time a user been a member of the server

103 lines (79 loc) 2.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _core = require("@diamondbot/core"); var _dayjs = _interopRequireDefault(require("dayjs")); var _dayjsPreciseRange = _interopRequireDefault(require("dayjs-precise-range")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _dayjs.default.extend(_dayjsPreciseRange.default); const and = function (l) { const n = l.length; if (n === 1) { return l[0]; } if (n === 2) { return l.join(' and '); } return `${l.slice(0, n - 1).join(', ')} and ${l[n - 1]}`; }; class MemberageCommand extends _core.ChatCommand { constructor(options = {}) { super(Object.assign({ name: 'memberage', format: '[user]', description: 'Displays the time a member been on this server' }, options)); } async exec({ member, channel, guild }, [user]) { let target; if (!user) { target = member; } else if (_core.Discord.MessageMentions.USERS_PATTERN.test(user)) { target = await guild.members.fetch(user.replace(_core.Discord.MessageMentions.USERS_PATTERN, '$1')); } else { const members = await guild.members.fetch({ query: user }); if (members.length > 1) { return await message.reply(`try mentioning, your command matched several users: ${members.join(', ')}`); } else if (members.length === 0) { return await message.reply(`try mentioning, user not found`); } target = members.first(); } const measures = { years: ['year', 'years'], months: ['month', 'months'], days: ['day', 'days'], hours: ['hour', 'hours'], minutes: ['minute', 'minutes'], seconds: ['second', 'seconds'] }; const joined = (0, _dayjs.default)(target.joinedTimestamp); const now = (0, _dayjs.default)(); const diff = _dayjs.default.preciseDiff(joined, now, true); let count = 0; const timeParts = []; for (const [key, value] of Object.entries(diff)) { if (count === 3) { break; } else if (count > 0) { count++; } if (measures[key] && value > 0) { if (count === 0) { count++; } timeParts.push(`${value} ${measures[key][value === 1 ? 0 : 1]}`); } } return await channel.send(`${target} has been a member of this server for ${and(timeParts)}.`); } } exports.default = MemberageCommand;