File tree Expand file tree Collapse file tree 2 files changed +21
-10
lines changed
Expand file tree Collapse file tree 2 files changed +21
-10
lines changed Original file line number Diff line number Diff line change 88} from '../../codeyCommand' ;
99import { banUser } from '../../components/admin' ;
1010import { vars } from '../../config' ;
11+ import { pluralize } from '../../utils/pluralize' ;
1112
1213// Ban a user
1314const banExecuteCommand : SapphireMessageExecuteType = async ( client , messageFromUser , args ) => {
@@ -31,13 +32,11 @@ const banExecuteCommand: SapphireMessageExecuteType = async (client, messageFrom
3132 ) ;
3233 }
3334 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
3636 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 ) ) {
3938 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 ) } ` : ``
4140 } for the following reason: ${ reason } `;
4241 } else {
4342 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' ;
22import { vars } from '../config' ;
33import { logger } from '../logger/default' ;
44import { pluralize } from '../utils/pluralize' ;
@@ -19,16 +19,28 @@ a reason why you think you should be unbanned.
1919` ;
2020
2121/* 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)
2224export const banUser = async (
23- member : GuildMember ,
25+ guild : Guild ,
26+ user : User ,
2427 reason : string ,
2528 days ?: number ,
2629) : Promise < boolean > => {
2730 let isSuccessful = false ;
2831 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+ } ) ;
3244 isSuccessful = true ;
3345 } catch ( err ) {
3446 logger . error ( {
You can’t perform that action at this time.
0 commit comments