2022-08-14 22:29:19 +02:00
import db from '../../models/index.js' ;
2022-08-14 23:28:24 +02:00
const ratelimit = { } ;
2022-08-17 16:22:22 +02:00
import dotenv from 'dotenv' ;
dotenv . config ( ) ;
const { ownerId } = process . env ;
2022-06-17 01:25:05 +02:00
export default {
2022-06-16 09:18:39 +02:00
name : 'interactionCreate' ,
async execute ( interaction ) {
const client = interaction . client ;
if ( ! interaction . isCommand ( ) ) return ;
2022-08-14 22:29:19 +02:00
const globalBlacklist = await db . Blacklists . findOne ( { where : { type : 'global' , uid : interaction . user . id } } ) ;
const commandBlacklist = await db . Blacklists . findOne ( { where : { type : interaction . commandName , uid : interaction . user . id } } ) ;
if ( globalBlacklist ) {
2022-08-14 23:34:19 +02:00
return interaction . reply ( { content : ` You are globally blacklisted for the following reason: \` ${ globalBlacklist . reason } \` ` , ephemeral : true } ) ;
2022-08-14 22:29:19 +02:00
}
else if ( commandBlacklist ) {
2022-08-14 23:34:19 +02:00
return interaction . reply ( { content : ` You are blacklisted for the following reason: \` ${ commandBlacklist . reason } \` ` , ephemeral : true } ) ;
2022-08-14 22:29:19 +02:00
}
2022-08-14 23:28:24 +02:00
const userTag = interaction . user . tag ;
const userID = interaction . user . id ;
const commandName = interaction . commandName ;
2022-06-16 09:18:39 +02:00
2022-08-14 23:28:24 +02:00
const command = client . commands . get ( commandName ) ;
2022-06-16 13:29:23 +02:00
2022-06-16 09:18:39 +02:00
if ( ! command ) return ;
2022-08-17 16:22:22 +02:00
console . log ( ` \x 1b[33m ${ userTag } ( ${ userID } ) \x 1b[0m launched command \x 1b[33m ${ commandName } \x 1b[0m ` ) ;
if ( command . ownerOnly && interaction . user . id !== ownerId ) {
return interaction . reply ( { content : '❌ This command is reserved for the owner!' , ephemeral : true } ) ;
}
2022-06-16 09:18:39 +02:00
try {
2022-08-14 23:28:24 +02:00
const date = new Date ( ) ;
if ( ratelimit [ userID ] ) {
if ( ratelimit [ userID ] . cooldown ) {
if ( commandName === ratelimit [ userID ] . command && date > ratelimit [ userID ] . cooldown ) {
ratelimit [ userID ] . limit = 0 ;
ratelimit [ userID ] . cooldown = undefined ;
}
}
if ( commandName === ratelimit [ userID ] . command && command . ratelimit === ratelimit [ userID ] . limit ) {
return await interaction . reply ( { content : ` You are being rate limited. You can try again in ${ Math . floor ( ( ratelimit [ userID ] . cooldown - date ) / 1000 ) } seconds. ` , ephemeral : true } ) ;
}
}
if ( command . ratelimit ) {
ratelimit [ userID ] = { command : commandName , limit : ratelimit [ userID ] ? ratelimit [ userID ] . limit + 1 : 1 } ;
if ( command . ratelimit === ratelimit [ userID ] . limit ) {
date . setSeconds ( date . getSeconds ( ) + command . cooldown ) ;
ratelimit [ userID ] = { command : commandName , limit : ratelimit [ userID ] . limit , cooldown : date } ;
}
}
2022-06-16 09:18:39 +02:00
await command . execute ( interaction ) ;
}
catch ( error ) {
console . error ( error ) ;
2022-08-18 01:45:55 +02:00
await interaction . followUp ( { content : 'There was an error while executing this command!' , ephemeral : true } ) ;
2022-06-16 09:18:39 +02:00
}
} ,
} ;