'use strict';
// Utils
const { parse, strip } = require('../../utils/parse');
const { scheduleDeletion } = require('../../utils/tg');
// Bot
const { replyOptions } = require('../../bot/options');
// DB
const { getUser } = require('../../stores/user');
const html = require('tg-html');
const formatDate = date =>
date && date.toISOString().slice(0, -5).replace('T', ' ');
const formatEntry = async (entry, defaultVal) => {
if (!entry || !entry.by_id) return defaultVal;
const { first_name } = await getUser({ id: entry.by_id }) || {};
if (!first_name) return html`${entry.reason} (${formatDate(entry.date)})`;
return html`${entry.reason} (${first_name}, ${formatDate(entry.date)})`;
};
const formatWarn = async (warn, i) =>
html`${i + 1}. ${await formatEntry(warn, warn)}`;
const optional = (header, content) =>
content
? header + content + '\n'
: '';
const getWarnsHandler = async ({ from, message, reply }) => {
if (!from) {
return reply(
'ℹ️ This command is not available in channels.',
replyOptions
).then(scheduleDeletion());
}
const { targets } = parse(message);
if (targets.length > 1) {
return reply(
'ℹ️ Specify one user.',
replyOptions
).then(scheduleDeletion());
}
const theUser = targets.length && from.status === 'admin'
? await getUser(strip(targets[0]))
: from;
if (!theUser) {
return reply(
'❓ User unknown.',
replyOptions
).then(scheduleDeletion());
}
const { id, first_name, last_name } = theUser;
const userName = html`Name: ${first_name} ${last_name}\n`;
const userId = `ID: ${id}
\n`;
const userUsername = optional('Username: @', theUser.username);
const banReason = optional(
'\n🚫 Ban reason: ',
await formatEntry(theUser.ban_details, theUser.ban_reason)
);
const userWarns = optional(
'\n⚠️ Warns:\n',
(await Promise.all(theUser.warns.map(formatWarn))).join('\n')
);
return reply(
userName +
userId +
userUsername +
userWarns +
banReason,
replyOptions
).then(scheduleDeletion());
};
module.exports = getWarnsHandler;