2024-09-26 00:14:40 +01:00
const {
SlashCommandBuilder ,
EmbedBuilder ,
PermissionsBitField ,
} = require ( "discord.js" ) ;
module . exports = {
data : new SlashCommandBuilder ( )
. setName ( "help" )
. setDescription ( "Lists all available commands" ) ,
async execute ( interaction , client ) {
try {
const isMod = interaction . member . permissions . has (
PermissionsBitField . Flags . ManageRoles
) ;
const serverName = interaction . guild . name ;
2024-10-28 23:14:58 +00:00
const generalCommands = [ ] ;
const modCommands = [ ] ;
// Categorize commands
client . commands . forEach ( ( command ) => {
const commandLine = ` / ${ command . data . name } - ${ command . data . description } ` ;
if ( ! command . isModOnly ) {
generalCommands . push ( commandLine ) ;
} else if ( isMod ) {
modCommands . push ( ` ${ commandLine } (Mods only) ` ) ;
}
} ) ;
2024-09-26 00:14:40 +01:00
const helpEmbed = new EmbedBuilder ( )
. setColor ( "#0099ff" )
. setTitle ( "Available Commands" )
. setDescription (
"This bot comes from an Open Source project developed by [Ayden](https://github.com/aydenjahola/discord-multipurpose-bot)\n\nHere are all the available commands:"
)
. setTimestamp ( )
. setFooter ( {
2024-09-29 02:37:01 +01:00
text : ` ${ serverName } | Made with ❤️ by Ayden ` ,
2024-09-26 00:14:40 +01:00
iconURL : client . user . displayAvatarURL ( ) ,
} ) ;
2024-10-28 23:14:58 +00:00
// Function to split commands into fields under 1024 characters
const addCommandFields = ( embed , commands , title ) => {
let commandChunk = "" ;
let chunkCount = 1 ;
2024-09-26 00:14:40 +01:00
2024-10-28 23:14:58 +00:00
commands . forEach ( ( command ) => {
// Check if adding this command will exceed the 1024 character limit
if ( ( commandChunk + command ) . length > 1024 ) {
// Add current chunk as a new field
embed . addFields ( {
name : ` ${ title } (Part ${ chunkCount } ) ` ,
value : commandChunk ,
} ) ;
commandChunk = "" ; // Reset chunk for new field
chunkCount += 1 ;
}
// Append command to the current chunk
commandChunk += command + "\n" ;
} ) ;
// Add any remaining commands in the last chunk
if ( commandChunk ) {
embed . addFields ( {
name : ` ${ title } (Part ${ chunkCount } ) ` ,
value : commandChunk ,
} ) ;
2024-09-26 00:14:40 +01:00
}
2024-10-28 23:14:58 +00:00
} ;
2024-09-26 00:14:40 +01:00
2024-10-28 23:14:58 +00:00
// Add general commands in fields
if ( generalCommands . length > 0 ) {
addCommandFields ( helpEmbed , generalCommands , "General Commands" ) ;
}
2024-09-26 00:14:40 +01:00
2024-10-28 23:14:58 +00:00
// Add mod-only commands in fields, if user is a mod
if ( isMod && modCommands . length > 0 ) {
addCommandFields ( helpEmbed , modCommands , "Mod-Only Commands" ) ;
2024-09-26 00:14:40 +01:00
}
2024-10-28 23:14:58 +00:00
// Send the single embed
2024-09-26 00:14:40 +01:00
await interaction . reply ( {
embeds : [ helpEmbed ] ,
} ) ;
} catch ( error ) {
console . error ( "Error executing the help command:" , error ) ;
await interaction . reply ( {
content : "There was an error while executing this command!" ,
ephemeral : true ,
} ) ;
}
} ,
} ;