2020-03-13 22:02:41 +01:00
// @ts-check
2018-02-05 19:17:52 +01:00
'use strict' ;
const { context } = require ( '../bot' ) ;
2020-06-15 14:45:55 +02:00
const { html , lrm } = require ( '../utils/html' ) ;
2020-05-13 15:11:43 +02:00
const { link } = require ( '../utils/tg' ) ;
2023-03-08 09:57:39 +01:00
const { isWarnNotExpired , expireWarnsAfter } = require ( '../utils/config' ) ;
2020-05-08 21:30:49 +02:00
const { numberOfWarnsToBan } = require ( '../utils/config' ) . config ;
2018-02-05 19:17:52 +01:00
const { warn } = require ( '../stores/user' ) ;
const ban = require ( './ban' ) ;
2023-03-08 09:57:39 +01:00
const ms = require ( 'millisecond' ) ;
2018-02-05 19:17:52 +01:00
2023-03-08 09:57:39 +01:00
/** @type {(n: number, d?: number) => string} */
const z = ( n , d = 2 ) => String ( n ) . padStart ( d , '0' ) ;
2018-02-05 19:17:52 +01:00
2023-03-08 09:57:39 +01:00
/** @type {(d: Date) => string} */
const yyyymmdd = d => ` ${ z ( d . getFullYear ( ) , 4 ) } - ${ z ( d . getMonth ( ) + 1 ) } - ${ z ( d . getDate ( ) ) } ` ;
/** @type {(a: number, b: number) => number} */
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 } ,
2020-05-08 14:08:11 +02:00
{ amend } ,
2019-05-31 17:02:00 +02:00
) ;
2020-05-08 21:30:49 +02:00
const recentWarns = warns . filter ( isWarnNotExpired ( date ) ) ;
2018-02-05 19:17:52 +01:00
2019-07-07 17:58:23 +02:00
const count = {
2020-05-13 15:11:43 +02:00
'-1' : html ` <b> ${ recentWarns . length } </b>/ ${ numberOfWarnsToBan } ` ,
0 : html ` <b>Final warning</b> ` ,
// eslint-disable-next-line max-len
1 : html ` <b> ${ recentWarns . length } </b>/ ${ numberOfWarnsToBan } (🚫 <b>banned</b>) ` ,
2019-07-07 17:58:23 +02:00
} [ cmp ( recentWarns . length + 1 , numberOfWarnsToBan ) ] ;
2019-04-06 20:58:56 +02:00
2020-05-13 15:11:43 +02:00
const warnMessage = html `
2020-06-15 14:45:55 +02:00
⚠ ️ $ { lrm } $ { admin . first _name } < b > warned < / b > $ { l i n k ( u s e r T o W a r n ) } .
$ { count } : $ { lrm } $ { reason }
2023-09-25 12:26:38 +02:00
< i > $ { typeof expireWarnsAfter === 'undefined' || expireWarnsAfter === Infinity ? '' : ` This warning expires on ${ yyyymmdd ( new Date ( date . getTime ( ) + ms ( expireWarnsAfter ) ) ) } ` } < / i >
2020-05-13 15:11:43 +02:00
` ;
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 ;
} ;