@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
JavaScript
;
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;