@@ -146,6 +146,43 @@ module.exports = (config) => {
146
146
}
147
147
} catch ( err ) {
148
148
}
149
+ } ,
150
+ async banUser ( username , remove = false ) {
151
+ const user = await db . users . findOne ( { username : username } )
152
+ if ( ! user ) {
153
+ return `Can't find user "${ username } "`
154
+ }
155
+
156
+ const _id = user . _id
157
+ if ( ! remove ) {
158
+ if ( user . active === 0 ) {
159
+ return `User "${ username } " ${ _id } is already banned.`
160
+ }
161
+ await db . users . update ( { _id } , { $set : { active : 0 } } )
162
+ console . log ( `Suspended user "${ username } " ${ _id } ` )
163
+ return `Suspended user "${ username } " ${ _id } `
164
+ } else {
165
+ await utils . respawnUser ( _id )
166
+ // Remove the bot user from the database
167
+ await db . users . removeWhere ( { _id } )
168
+ await db [ 'users.code' ] . removeWhere ( { user : _id } )
169
+ await env . del ( env . keys . MEMORY + _id )
170
+ await env . del ( env . keys . MEMORY_SEGMENTS + _id )
171
+ console . log ( `Removed user "${ username } " ${ _id } ` )
172
+ return `Removed user "${ username } " ${ _id } `
173
+ }
174
+ } ,
175
+ async unbanUser ( username ) {
176
+ const user = await db . users . findOne ( { username : username } )
177
+ if ( ! user ) {
178
+ return `Can't find user "${ username } "`
179
+ } else if ( user . active !== 0 ) {
180
+ return `User "${ username } " ${ user . _id } is not banned.`
181
+ }
182
+
183
+ await db . users . update ( { _id : user . _id } , { $set : { active : 10000 } } )
184
+ console . log ( `Unbanned user "${ username } " ${ user . _id } ` )
185
+ return `Unbanned user "${ username } " ${ user . _id } `
149
186
}
150
187
} )
151
188
@@ -157,6 +194,9 @@ module.exports = (config) => {
157
194
config . utils . setSocketUpdateRate . _help = 'setSocketUpdateRate(value) Sets socket update rate (in ms)'
158
195
config . utils . getSocketUpdateRate . _help = 'getSocketUpdateRate() Returns current socket update rate'
159
196
config . utils . setShardName . _help = 'setShardName(value) Sets the shard name'
197
+ config . utils . banUser . _help = 'banUser(username, remove = false) Ban the specified user from the server.\n' +
198
+ '\tPassing `false` will suspend their CPU usage, `true` will delete their data entirely.'
199
+ config . utils . unbanUser . _help = 'unbanUser(username) Unban the specified user from the server.'
160
200
161
201
Object . defineProperty ( config . utils , '_help' , {
162
202
get ( ) { // Using a getter here so that loaded services are also included
0 commit comments