File tree 2 files changed +21
-10
lines changed
2 files changed +21
-10
lines changed Original file line number Diff line number Diff line change 8
8
} from '../../codeyCommand' ;
9
9
import { banUser } from '../../components/admin' ;
10
10
import { vars } from '../../config' ;
11
+ import { pluralize } from '../../utils/pluralize' ;
11
12
12
13
// Ban a user
13
14
const banExecuteCommand : SapphireMessageExecuteType = async ( client , messageFromUser , args ) => {
@@ -31,13 +32,11 @@ const banExecuteCommand: SapphireMessageExecuteType = async (client, messageFrom
31
32
) ;
32
33
}
33
34
const days = < number > args [ 'days' ] ;
34
- // Get the GuildMember object corresponding to the user in the guild
35
- // This is needed because we can only ban GuildMembers, not Users
35
+ // get Guild object corresponding to server
36
36
const guild = await client . guilds . fetch ( vars . TARGET_GUILD_ID ) ;
37
- const memberInGuild = await guild . members . fetch ( { user } ) ;
38
- if ( await banUser ( memberInGuild , reason , days ) ) {
37
+ if ( await banUser ( guild , user , reason , days ) ) {
39
38
return `Successfully banned user ${ user . tag } (id: ${ user . id } ) ${
40
- days ? `and deleted their messages in the past ${ days } days ` : ``
39
+ days ? `and deleted their messages in the past ${ days } ${ pluralize ( 'day' , days ) } ` : ``
41
40
} for the following reason: ${ reason } `;
42
41
} else {
43
42
throw new CodeyUserError (
Original file line number Diff line number Diff line change 1
- import { GuildMember } from 'discord.js' ;
1
+ import { Guild , User } from 'discord.js' ;
2
2
import { vars } from '../config' ;
3
3
import { logger } from '../logger/default' ;
4
4
import { pluralize } from '../utils/pluralize' ;
@@ -19,16 +19,28 @@ a reason why you think you should be unbanned.
19
19
` ;
20
20
21
21
/* Ban a user, returns whether ban was successful */
22
+ // Bans user from guild even if they are not in server
23
+ // makeBanMessage is only sent to User if they are in server (in Discord, you cannot send direct messages to users who are not in any mutual servers)
22
24
export const banUser = async (
23
- member : GuildMember ,
25
+ guild : Guild ,
26
+ user : User ,
24
27
reason : string ,
25
28
days ?: number ,
26
29
) : Promise < boolean > => {
27
30
let isSuccessful = false ;
28
31
try {
29
- const user = member . user ;
30
- await user . send ( makeBanMessage ( reason , days ) ) ;
31
- await member . ban ( { reason, deleteMessageDays : days } ) ;
32
+ try {
33
+ await user . send ( makeBanMessage ( reason , days ) ) ;
34
+ } catch ( err ) {
35
+ logger . error ( {
36
+ event : "Can't send message to user not in server" ,
37
+ error : ( err as Error ) . toString ( ) ,
38
+ } ) ;
39
+ }
40
+ await guild . members . ban ( user , {
41
+ reason : reason ,
42
+ deleteMessageSeconds : days == null ? 0 : days * 86400 ,
43
+ } ) ;
32
44
isSuccessful = true ;
33
45
} catch ( err ) {
34
46
logger . error ( {
You can’t perform that action at this time.
0 commit comments