2020-03-13 22:02:41 +01:00
|
|
|
|
// @ts-check
|
2018-02-05 19:17:52 +01:00
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
const dedent = require('dedent-js');
|
2018-11-28 18:23:57 +01:00
|
|
|
|
const ms = require('millisecond');
|
2018-02-05 19:17:52 +01:00
|
|
|
|
|
|
|
|
|
const { context } = require('../bot');
|
2019-04-06 20:58:56 +02:00
|
|
|
|
const { escapeHtml, link } = require('../utils/tg');
|
2018-11-28 18:23:57 +01:00
|
|
|
|
const {
|
|
|
|
|
expireWarnsAfter = Infinity,
|
|
|
|
|
numberOfWarnsToBan,
|
2020-03-09 23:27:19 +01:00
|
|
|
|
} = require('../utils/config').config;
|
2018-02-05 19:17:52 +01:00
|
|
|
|
const { warn } = require('../stores/user');
|
|
|
|
|
const ban = require('./ban');
|
|
|
|
|
|
2018-11-28 18:23:57 +01:00
|
|
|
|
const isNewerThan = date => warning => warning.date >= date;
|
2018-02-05 19:17:52 +01:00
|
|
|
|
|
2019-07-07 17:58:23 +02:00
|
|
|
|
const cmp = (a, b) => Math.sign(a - b);
|
|
|
|
|
|
2019-05-31 17:02:00 +02:00
|
|
|
|
module.exports = async ({ admin, amend, reason, userToWarn }) => {
|
2018-04-18 21:47:35 +02:00
|
|
|
|
const by_id = admin.id;
|
|
|
|
|
const date = new Date();
|
|
|
|
|
|
2019-05-31 17:02:00 +02:00
|
|
|
|
const { warns } = await warn(
|
|
|
|
|
userToWarn,
|
|
|
|
|
{ by_id, date, reason },
|
|
|
|
|
{ amend }
|
|
|
|
|
);
|
|
|
|
|
|
2020-05-04 23:32:00 +02:00
|
|
|
|
const recentWarns = warns.filter(
|
|
|
|
|
isNewerThan(date.getTime() - ms(expireWarnsAfter))
|
|
|
|
|
);
|
2018-02-05 19:17:52 +01:00
|
|
|
|
|
2019-07-07 17:58:23 +02:00
|
|
|
|
const count = {
|
|
|
|
|
'-1': recentWarns.length + '/' + numberOfWarnsToBan,
|
|
|
|
|
0: `${recentWarns.length}/${numberOfWarnsToBan}, <b>last warning!</b>`,
|
2020-05-04 23:32:00 +02:00
|
|
|
|
1: `<b>banned</b> for receiving ${numberOfWarnsToBan} warnings!`,
|
2019-07-07 17:58:23 +02:00
|
|
|
|
}[cmp(recentWarns.length + 1, numberOfWarnsToBan)];
|
2019-04-06 20:58:56 +02:00
|
|
|
|
|
2018-02-05 19:17:52 +01:00
|
|
|
|
const warnMessage = dedent(`
|
|
|
|
|
⚠️ ${link(admin)} <b>warned</b> ${link(userToWarn)} <b>for</b>:
|
|
|
|
|
|
2019-04-06 20:58:56 +02:00
|
|
|
|
${escapeHtml(reason)} (${count})`);
|
2018-02-05 19:17:52 +01:00
|
|
|
|
|
2018-11-28 18:23:57 +01:00
|
|
|
|
if (recentWarns.length >= numberOfWarnsToBan) {
|
2018-02-05 19:17:52 +01:00
|
|
|
|
await ban({
|
|
|
|
|
admin: context.botInfo,
|
|
|
|
|
reason: 'Reached max number of warnings',
|
|
|
|
|
userToBan: userToWarn,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return warnMessage;
|
|
|
|
|
};
|