diff --git a/src/commands/misc/ping.js b/src/commands/misc/ping.js index 6871afe..79772f0 100644 --- a/src/commands/misc/ping.js +++ b/src/commands/misc/ping.js @@ -30,9 +30,10 @@ export default { const getPingColor = (ping) => ping < 150 ? '#00ff00' : ping < 250 ? '#ffff00' : '#ff0000'; - client.commandStats ??= { pingCount: 0, totalPing: 0 }; + client.commandStats ??= { pingCount: 0, totalPing: 0, totalCommands: 0 }; client.commandStats.pingCount++; client.commandStats.totalPing += apiPing; + client.commandStats.totalCommands++; const averagePing = ( client.commandStats.totalPing / client.commandStats.pingCount @@ -42,34 +43,48 @@ export default { : 'Bot not ready'; const { heapUsed, rss } = process.memoryUsage(); + const totalMem = os.totalmem() / 1024 / 1024; + const freeMem = os.freemem() / 1024 / 1024; const systemUptime = os.uptime(); const stats = [ - { name: '📡 Bot Latency', value: `${latency}ms` }, - { name: '🌐 API Latency', value: `${apiPing}ms` }, - { name: '📊 Average Ping', value: `${averagePing}ms` }, - { name: '⏱️ Uptime', value: uptime }, + { name: '🏓 **Bot Latency**', value: `\`${latency}ms\`` }, + { name: '🌐 **API Latency**', value: `\`${apiPing}ms\`` }, + { name: '📊 **Average Ping**', value: `\`${averagePing}ms\`` }, + { name: '⏳ **Uptime**', value: `\`${uptime}\`` }, { - name: '🖥️ Memory Usage', - value: `${(heapUsed / 1024 / 1024).toFixed(2)} MB / ${(rss / 1024 / 1024).toFixed(2)} MB`, + name: '💾 **Memory Usage**', + value: `\`${(heapUsed / 1024 / 1024).toFixed(2)} MB / ${(rss / 1024 / 1024).toFixed(2)} MB\``, }, - { name: '📚 Discord.js Version', value: discordJsVersion }, - { name: '🛠️ Node.js Version', value: process.version }, { - name: '⚙️ System Uptime', - value: formatDistanceToNow(Date.now() - systemUptime * 1000, { + name: '🧠 **System Memory**', + value: `\`Total: ${totalMem.toFixed(2)} MB, Free: ${freeMem.toFixed(2)} MB\``, + }, + { name: '📚 **Discord.js Version**', value: `\`${discordJsVersion}\`` }, + { name: '🛠️ **Node.js Version**', value: `\`${process.version}\`` }, + { + name: '⚙️ **System Uptime**', + value: `\`${formatDistanceToNow(Date.now() - systemUptime * 1000, { addSuffix: true, - }), + })}\``, + }, + { + name: '💻 **OS Info**', + value: `\`${os.type()} ${os.release()}\``, }, { - name: '🔢 Command Usage', - value: `${client.commandStats.pingCount}`, + name: '🖥️ **CPU Info**', + value: `\`${os.cpus()[0].model} (${os.cpus().length} cores)\``, + }, + { + name: '🔢 **Command Usage**', + value: `\`Total Executed: ${client.commandStats.totalCommands}\``, }, ]; const pongEmbed = new EmbedBuilder() .setColor(getPingColor(apiPing)) - .setTitle('🏓 Pong!') + .setTitle('🏓 **Pong!**') .addFields(stats.map((stat) => ({ ...stat, inline: true }))) .setFooter({ text: `Requested by ${interaction.user.username}`, @@ -80,8 +95,10 @@ export default { await interaction.editReply({ embeds: [pongEmbed] }); } catch (error) { console.error('Error in ping command:', error); + + await interaction.editReply( - 'An error occurred while processing the command. Please try again later.' + '❌ An error occurred while processing the command. Please try again later.' ); } }, diff --git a/src/events/guildMemberAdd/welcom.js b/src/events/guildMemberAdd/welcom.js index df2e89c..cacd98d 100644 --- a/src/events/guildMemberAdd/welcom.js +++ b/src/events/guildMemberAdd/welcom.js @@ -7,13 +7,7 @@ import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); -const BACKGROUND_PATH = path.join( - __dirname, - '..', - '..', - 'assets', - 'welcome.png' -); +const BACKGROUND_PATH = path.join(__dirname, '..', '..', 'assets', 'welcome.png'); const DEFAULT_WELCOME_MESSAGE = 'Welcome to our server, {user}!'; export default async (client, errorHandler, member) => { @@ -21,10 +15,7 @@ export default async (client, errorHandler, member) => { const welcomeSettings = await getWelcomeSettings(member.guild.id); if (!welcomeSettings?.enabled) return; - const { welcomeChannel, autoRole } = await getGuildResources( - member.guild, - welcomeSettings - ); + const { welcomeChannel, autoRole } = await getGuildResources(member.guild, welcomeSettings); if (!welcomeChannel) return; const welcomeImage = await generateWelcomeImage(member); @@ -33,14 +24,11 @@ export default async (client, errorHandler, member) => { await sendWelcomeMessage(welcomeChannel, member, embed, welcomeImage); if (autoRole) await assignAutoRole(member, autoRole); } catch (error) { - errorHandler.handleError(error, { - type: 'Welcome Event', - memberId: member.id, - guildId: member.guild.id, - }); + handleError(errorHandler, error, 'Welcome Event', member); } }; +// Fetch welcome settings from the database async function getWelcomeSettings(guildId) { try { return await Welcome.findOne({ guildId }); @@ -50,25 +38,23 @@ async function getWelcomeSettings(guildId) { } } +// Get the welcome channel and auto-role based on settings async function getGuildResources(guild, welcomeSettings) { const welcomeChannel = guild.channels.cache.get(welcomeSettings.channelId); const autoRole = guild.roles.cache.get(welcomeSettings.roleId); if (!welcomeChannel) { - console.warn( - `Welcome channel with ID ${welcomeSettings.channelId} not found in guild ${guild.id}.` - ); + console.warn(`Welcome channel with ID ${welcomeSettings.channelId} not found in guild ${guild.id}.`); } if (!autoRole) { - console.warn( - `Auto role with ID ${welcomeSettings.roleId} not found in guild ${guild.id}.` - ); + console.warn(`Auto role with ID ${welcomeSettings.roleId} not found in guild ${guild.id}.`); } return { welcomeChannel, autoRole }; } +// Generate the welcome image using the profileImage function async function generateWelcomeImage(member) { try { return await profileImage(member.user.id, { @@ -81,14 +67,15 @@ async function generateWelcomeImage(member) { } } +// Create the welcome embed with the specified settings function createWelcomeEmbed(member, welcomeSettings, welcomeImage) { + const welcomeMessage = (welcomeSettings.message || DEFAULT_WELCOME_MESSAGE) + .replace('{user}', `<@${member.id}>`); + const embed = new EmbedBuilder() .setColor('#0099ff') .setTitle(`Welcome to ${member.guild.name}!`) - .setDescription( - welcomeSettings.message?.replace('{user}', `<@${member.id}>`) || - DEFAULT_WELCOME_MESSAGE.replace('{user}', `<@${member.id}>`) - ) + .setDescription(welcomeMessage) .setTimestamp() .setFooter({ text: `Joined: ${member.joinedAt.toUTCString()}` }); @@ -99,6 +86,7 @@ function createWelcomeEmbed(member, welcomeSettings, welcomeImage) { return embed; } +// Send the welcome message to the specified channel async function sendWelcomeMessage(channel, member, embed, welcomeImage) { const messageOptions = { content: `Hey everyone, please welcome <@${member.id}>!`, @@ -106,9 +94,7 @@ async function sendWelcomeMessage(channel, member, embed, welcomeImage) { }; if (welcomeImage) { - const attachment = new AttachmentBuilder(welcomeImage, { - name: 'welcome-image.png', - }); + const attachment = new AttachmentBuilder(welcomeImage, { name: 'welcome-image.png' }); messageOptions.files = [attachment]; } @@ -119,6 +105,7 @@ async function sendWelcomeMessage(channel, member, embed, welcomeImage) { } } +// Assign the auto-role to the new member async function assignAutoRole(member, role) { try { await member.roles.add(role); @@ -126,3 +113,13 @@ async function assignAutoRole(member, role) { console.error(`Error assigning auto role to member ${member.id}:`, error); } } + +// Handle errors and log them appropriately +function handleError(errorHandler, error, eventType, member) { + console.error(`Error in ${eventType} for member ${member.id}:`, error); + errorHandler.handleError(error, { + type: eventType, + memberId: member.id, + guildId: member.guild.id, + }); +}