2023-10-13 15:04:11 +02:00
import { EmbedBuilder , SlashCommandBuilder } from "discord.js" ;
import config from "../../config.json" assert { type : "json" } ;
2023-09-13 21:12:45 +02:00
const { sanctionChannelId } = config ;
2022-11-09 14:44:05 +01:00
2023-09-13 21:12:45 +02:00
export default {
2023-10-13 15:04:11 +02:00
data : new SlashCommandBuilder ( )
. setName ( "ban" )
. setDescription ( "Bannir un utilisateur !" )
2022-11-09 14:44:05 +01:00
. setDefaultMemberPermissions ( 0x4 )
2023-10-13 15:04:11 +02:00
. addUserOption ( ( option ) =>
option
. setName ( "user" )
. setDescription (
"Membre à bannir / id si le membre n'est pas sur le serveur" ,
)
. setRequired ( true ) ,
)
. addStringOption ( ( option ) =>
option
. setName ( "reason" )
. setDescription ( "Raison du bannissement" )
. setRequired ( true ) ,
) ,
2022-11-09 14:44:05 +01:00
async execute ( interaction , client ) {
2023-10-13 15:04:11 +02:00
const user = interaction . options . getUser ( "user" ) ;
const member = interaction . options . getMember ( "user" ) ;
const reason = interaction . options . getString ( "reason" ) ;
if ( member ) {
2022-12-14 11:52:28 +01:00
const userRoleRawPos = member . roles . highest . rawPosition ;
2023-10-13 15:04:11 +02:00
const memberRoleRawPos =
interaction . member . roles . highest . rawPosition ;
if ( user . id === interaction . user . id )
return interaction . reply ( {
content : ` Vous ne pouvez pas vous bannir vous-même! ! ` ,
ephemeral : true ,
} ) ;
if ( userRoleRawPos >= memberRoleRawPos )
return interaction . reply ( {
content : ` Vous ne pouvez pas bannir cet utilisateur. ` ,
ephemeral : true ,
} ) ;
if ( ! member . bannable )
return interaction . reply ( {
content : ` Je ne peux pas bannir cet utilisateur. Cela est dû au fait que l'utilisateur est modérateur/administrateur ou que son rôle est au dessus du rôle du bot... ` ,
ephemeral : true ,
} ) ;
2022-12-14 11:52:28 +01:00
}
2022-11-09 14:44:05 +01:00
2023-10-13 15:04:11 +02:00
await interaction . guild . bans . create ( user . id , {
reason : reason + " - Banni.e par " + interaction . member . user . tag ,
} ) ;
2022-11-09 14:44:05 +01:00
2022-12-14 11:52:28 +01:00
const banEMBED = new EmbedBuilder ( )
. setColor ( ` #009500 ` )
. setThumbnail ( ` https://i.imgur.com/zcZsfNA.png ` )
. setTitle ( ` ➔ Art' Portal - Bannissement ` )
. addFields (
2023-10-13 15:04:11 +02:00
{
2022-12-14 11:52:28 +01:00
name : "・Utilisateur.trice・" ,
value : ` **Tag: ${ user . tag } \n ID: ${ user . id } ** ` ,
2023-10-13 15:04:11 +02:00
inline : true ,
2022-12-14 11:52:28 +01:00
} ,
2023-10-13 15:04:11 +02:00
{
2022-12-14 11:52:28 +01:00
name : "・Raison du bannissement・" ,
2023-10-13 15:04:11 +02:00
value : ` ** ${
reason !== null ? ` ${ reason } ` : "No reason specified"
} * * ` ,
inline : true ,
2022-12-14 11:52:28 +01:00
} ,
{
name : ` ・Modérateur.trice・ ` ,
2023-10-13 15:04:11 +02:00
value : ` ** ${ interaction . member . user . tag } ** ` ,
2022-12-14 11:52:28 +01:00
} ,
{
name : ` ・Date・ ` ,
2023-10-13 15:04:11 +02:00
value : ` <t: ${ Math . floor ( new Date ( ) . getTime ( ) / 1000 ) } :D> ` ,
inline : true ,
2022-12-14 11:52:28 +01:00
} ,
) ;
2023-10-13 15:04:11 +02:00
await interaction . reply ( { embeds : [ banEMBED ] , ephemeral : true } ) ;
const channel =
await interaction . guild . channels . cache . get ( sanctionChannelId ) ;
2023-09-30 08:29:50 +02:00
await channel . send ( {
2023-10-13 15:04:11 +02:00
embeds : [ banEMBED ] ,
2023-09-30 08:29:50 +02:00
} ) ;
await client . database . modlog . create ( {
name : user . id ,
username : user . tag ,
type : "Ban" ,
reason : reason ,
2023-10-13 15:04:11 +02:00
timestamp : Math . floor ( new Date ( ) . getTime ( ) / 1000 ) ,
moderatorid : interaction . member . user . id ,
2023-09-30 08:29:50 +02:00
} ) ;
2023-10-31 22:04:10 +01:00
try {
if ( member ) {
await member . send ( {
content : "Vous avez reçu une sanction sur Art'Portal !" ,
embeds : [ banEMBED ] ,
} ) ;
}
} catch ( error ) { }
2023-09-30 08:29:50 +02:00
} ,
2022-12-14 11:52:28 +01:00
} ;