11'use strict' ;
22
3+ /**
4+ * @typedef { { id: number } | { username: string } } UserQuery
5+ * @exports UserQuery
6+ */
7+
38// Utils
49const { strip } = require ( '../utils/cmd' ) ;
510
611const Datastore = require ( 'nedb-promise' ) ;
12+ const ms = require ( 'millisecond' ) ;
713const R = require ( 'ramda' ) ;
814
915const User = new Datastore ( {
@@ -117,10 +123,36 @@ const unban = ({ id }) =>
117123 } ,
118124 ) ;
119125
126+ /**
127+ * @param {UserQuery } user
128+ */
129+ const permit = ( user , { by_id, date } ) =>
130+ User . update (
131+ user ,
132+ { $set : { permit : { by_id, date } } } ,
133+ { returnUpdatedDocs : true } ,
134+ ) . then ( getUpdatedDocument ) ;
135+
136+ /**
137+ * @param {UserQuery } user
138+ */
139+ permit . revoke = ( user ) =>
140+ User . update (
141+ { permit : { $exists : true } , ...strip ( user ) } ,
142+ { $unset : { permit : true } } ,
143+ { returnUpdatedDocs : true } ,
144+ ) . then ( getUpdatedDocument ) ;
145+
146+ permit . isValid = ( p ) => Date . now ( ) - ms ( '24h' ) < p ?. date ;
147+
120148const warn = ( { id } , reason , { amend } ) =>
121149 User . update (
122150 { id, $not : { status : 'admin' } } ,
123- { $pop : { warns : + ! ! amend } , $push : { warns : reason } } ,
151+ {
152+ $pop : { warns : + ! ! amend } ,
153+ $push : { warns : reason } ,
154+ $unset : { permit : true } ,
155+ } ,
124156 { returnUpdatedDocs : true } ,
125157 ) . then ( getUpdatedDocument ) ;
126158
@@ -145,6 +177,7 @@ module.exports = {
145177 getUser,
146178 isAdmin,
147179 nowarns,
180+ permit,
148181 unadmin,
149182 unban,
150183 unwarn,
0 commit comments