From 5a359aca703691b1e5919efc36fee53821e540a1 Mon Sep 17 00:00:00 2001 From: Moymoy21 <45497441+Moymoy21@users.noreply.github.com> Date: Mon, 4 May 2026 05:35:11 +0800 Subject: [PATCH 1/6] Update bot.js --- src/config/bot.js | 499 ++++------------------------------------------ 1 file changed, 37 insertions(+), 462 deletions(-) diff --git a/src/config/bot.js b/src/config/bot.js index 36e588cd4..6c19e3122 100644 --- a/src/config/bot.js +++ b/src/config/bot.js @@ -1,33 +1,15 @@ import { logger } from '../utils/logger.js'; - export const botConfig = { // ========================= - // BOT PRESENCE (what users see under the bot name) + // BOT PRESENCE // ========================= - // `status` options: - // - "online" = green dot - // - "idle" = yellow moon - // - "dnd" = red do-not-disturb - // - "invisible" = appears offline presence: { - // Current online state shown on Discord. status: "online", - - // Activity lines shown under the bot name. - // `type` number mapping from Discord: - // 0 = Playing - // 1 = Streaming - // 2 = Listening - // 3 = Watching - // 4 = Custom - // 5 = Competing activities: [ { - // Text users will see (example: "Playing /help | Titan Bot"). - name: "Made with ❤️", - // Activity type number (0 = Playing). - type: 0, + name: "Grow a Garden Market | /myboot", + type: 3, // 3 = Watching }, ], }, @@ -36,514 +18,107 @@ export const botConfig = { // COMMAND BEHAVIOR // ========================= commands: { - // Bot owner user IDs (comma-separated in OWNER_IDS env var). - // Owners can access owner/admin-level bot commands. owners: process.env.OWNER_IDS?.split(",") || [], - - // Default wait time between command uses (in seconds). defaultCooldown: 3, - - // If true, old commands are removed before re-registering. deleteCommands: false, - - // Optional server ID used for testing slash commands quickly. testGuildId: process.env.TEST_GUILD_ID, }, - // ========================= - // APPLICATIONS SYSTEM - // ========================= - applications: { - // Default questions shown when someone fills out an application. - defaultQuestions: [ - { question: "What is your name?", required: true }, - { question: "How old are you?", required: true }, - { question: "Why do you want to join?", required: true }, - ], - - // Embed colors by application status. - statusColors: { - pending: "#FFA500", - approved: "#00FF00", - denied: "#FF0000", - }, - - // How long users must wait before submitting another application (hours). - applicationCooldown: 24, - - // Auto-delete denied applications after this many days. - deleteDeniedAfter: 7, - - // Auto-delete approved applications after this many days. - deleteApprovedAfter: 30, - - // Role IDs allowed to manage applications. - managerRoles: [], // Will be populated from environment or database - }, - // ========================= // EMBED COLORS & BRANDING // ========================= - // IMPORTANT: This is the SINGLE SOURCE OF TRUTH for all bot colors embeds: { colors: { - // Main brand colors. - primary: "#336699", - secondary: "#2F3136", - - // Standard status colors for success/error/warning/info messages. + primary: "#2ecc71", // Garden Green + secondary: "#e67e22", // Clay Pot Orange success: "#57F287", error: "#ED4245", warning: "#FEE75C", info: "#3498DB", - - // Neutral utility colors. - light: "#FFFFFF", - dark: "#202225", - gray: "#99AAB5", - - // Discord-style palette shortcuts. - blurple: "#5865F2", - green: "#57F287", - yellow: "#FEE75C", - fuchsia: "#EB459E", - red: "#ED4245", - black: "#000000", - - // Feature-specific colors. - giveaway: { - active: "#57F287", - ended: "#ED4245", - }, - ticket: { - open: "#57F287", - claimed: "#FAA61A", - closed: "#ED4245", - pending: "#99AAB5", - }, economy: "#F1C40F", - birthday: "#E91E63", - moderation: "#9B59B6", - - // Ticket priority color mapping. - priority: { - none: "#95A5A6", - low: "#3498db", - medium: "#2ecc71", - high: "#f1c40f", - urgent: "#e74c3c", - }, }, footer: { - // Default footer text used in bot embeds. - text: "Titan Bot", - // Footer icon URL (null = no icon). + text: "Grow a Garden Trading Bot", icon: null, }, - // Default thumbnail URL for embeds (null = no thumbnail). - thumbnail: null, - author: { - // Optional default embed author block. - name: null, - icon: null, - url: null, - }, + thumbnail: "https://static.wikia.nocookie.net/grow-a-garden/images/8/8e/Site-logo.png", // Wiki Logo }, // ========================= - // ECONOMY SETTINGS + // MARKET & ECONOMY SETTINGS // ========================= economy: { currency: { - // Currency display name. - name: "coins", - // Plural display name. - namePlural: "coins", - // Currency symbol shown in balances. - symbol: "$", + name: "Coins", + namePlural: "Coins", + symbol: "💰", }, - - // Starting balance for new users. - startingBalance: 0, - - // Maximum bank amount before upgrades (if upgrades are used). - baseBankCapacity: 100000, - - // Daily reward amount. - dailyAmount: 100, - - // Work command random payout range. - workMin: 10, - workMax: 100, - - // Beg command random payout range. - begMin: 5, - begMax: 50, - - // Chance to succeed when robbing (0.4 = 40%). - robSuccessRate: 0.4, - - // Jail time after failed rob (milliseconds). - // 3600000 = 1 hour. - robFailJailTime: 3600000, - }, - - // ========================= - // SHOP SETTINGS - // ========================= - // Add shop defaults here when needed. - shop: { + startingBalance: 100, + dailyAmount: 50, - }, - - // ========================= - // TICKET SYSTEM - // ========================= - tickets: { - // Category ID where new tickets are created (null = no forced category). - defaultCategory: null, - - // Role IDs allowed to manage/support tickets. - supportRoles: [], - - // Priority options users/staff can assign. - priorities: { - none: { - emoji: "⚪", - color: "#95A5A6", - label: "None", - }, - low: { - emoji: "🟢", - color: "#2ECC71", - label: "Low", - }, - medium: { - emoji: "🟡", - color: "#F1C40F", - label: "Medium", - }, - high: { - emoji: "🔴", - color: "#E74C3C", - label: "High", - }, - urgent: { - emoji: "🚨", - color: "#E91E63", - label: "Urgent", - }, - }, - - // Default priority for new tickets. - defaultPriority: "none", - - // Category ID where closed tickets are archived. - archiveCategory: null, - - // Channel ID where ticket logs are sent. - logChannel: null, - }, - - // ========================= - // GIVEAWAY SETTINGS - // ========================= - giveaways: { - // Default giveaway duration in milliseconds. - // 86400000 = 24 hours. - defaultDuration: 86400000, - - // Allowed winner count range. - minimumWinners: 1, - maximumWinners: 10, - - // Allowed giveaway duration range in milliseconds. - // 300000 = 5 minutes. - minimumDuration: 300000, - // 2592000000 = 30 days. - maximumDuration: 2592000000, - - // Role IDs allowed to host giveaways. - allowedRoles: [], - - // Role IDs that bypass giveaway restrictions. - bypassRoles: [], - }, - - // ========================= - // BIRTHDAY SETTINGS - // ========================= - birthday: { - // Role ID given to users on their birthday. - defaultRole: null, - - // Channel ID where birthday announcements are posted. - announcementChannel: null, - - // Timezone used to calculate birthday dates. - timezone: "UTC", - }, - - // ========================= - // VERIFICATION SETTINGS - // ========================= - verification: { - // Message shown when posting the verification panel. - defaultMessage: "Click the button below to verify yourself and gain access to the server!", - - // Text on the verification button. - defaultButtonText: "Verify", - - // Automatic verification behavior. - autoVerify: { - // How automatic verification decides who is auto-approved: - // - "none" = everyone is auto-verified immediately - // - "account_age" = account must be older than set days - // - "server_size" = auto-verify everyone only in smaller servers - defaultCriteria: "none", - - // Days used when `defaultCriteria` is `account_age`. - defaultAccountAgeDays: 7, - - // Member count threshold used when `defaultCriteria` is `server_size`. - // Example: 1000 means auto-verify if server has fewer than 1000 members. - serverSizeThreshold: 1000, - - // Allowed safety limits for account-age requirements. - // 1 = minimum day, 365 = maximum days. - minAccountAge: 1, - maxAccountAge: 365, - - // If true, user receives a DM after verification. - sendDMNotification: true, - - // Human-readable descriptions for each criteria mode. - criteria: { - account_age: "Account must be older than specified days", - server_size: "All users if server has less than 1000 members", - none: "All users immediately" - } - }, - - // Minimum time between verification attempts (milliseconds). - // 5000 = 5 seconds. - verificationCooldown: 5000, - - // Maximum failed attempts allowed inside the time window below. - maxVerificationAttempts: 3, - - // Time window for counting attempts (milliseconds). - // 60000 = 1 minute. - attemptWindow: 60000, - - // In-memory safety limits (helps avoid unbounded memory growth). - maxCooldownEntries: 10000, - maxAttemptEntries: 10000, - // Cleanup frequency for cooldown/attempt maps (milliseconds). - // 300000 = 5 minutes. - cooldownCleanupInterval: 300000, - // Maximum metadata payload size for audit entries (bytes). - maxAuditMetadataBytes: 4096, - // Maximum number of audit entries kept in memory. - maxInMemoryAuditEntries: 1000, - // If true, log every verification action. - logAllVerifications: true, - // If true, preserve verification audit history. - keepAuditTrail: true, - }, - - // ========================= - // WELCOME / GOODBYE MESSAGES - // ========================= - welcome: { - // Welcome template posted when a user joins. - // Placeholders: {user}, {server}, {memberCount} - defaultWelcomeMessage: - "Welcome {user} to {server}! We now have {memberCount} members!", - // Goodbye template posted when a user leaves. - // Placeholders: {user}, {memberCount} - defaultGoodbyeMessage: - "{user} has left the server. We now have {memberCount} members.", - // Channel ID for welcome messages. - defaultWelcomeChannel: null, - // Channel ID for goodbye messages. - defaultGoodbyeChannel: null, - }, - - // ========================= - // COUNTER CHANNELS - // ========================= - counters: { - defaults: { - // Default naming/description templates for counter entries. - name: "{name} Counter", - description: "Server {name} counter", - // Channel type used for counters (typically "voice"). - type: "voice", - // Channel name format. `{count}` is replaced automatically. - channelName: "{name}-{count}", - }, - permissions: { - // Default denied permissions for the counter channel. - deny: ["VIEW_CHANNEL"], - // Default allowed permissions for the counter channel. - allow: ["VIEW_CHANNEL", "CONNECT", "SPEAK"], - }, - messages: { - // Default response messages for counter actions. - created: "✅ Created counter **{name}**", - deleted: "🗑️ Deleted counter **{name}**", - updated: "🔄 Updated counter **{name}**", - }, - types: { - // Built-in counter types and how each count is calculated. - members: { - name: "👥 Members", - description: "Total members in the server", - getCount: (guild) => guild.memberCount.toString(), - }, - bots: { - name: "🤖 Bots", - description: "Total bot accounts in the server", - getCount: (guild) => - guild.members.cache.filter((m) => m.user.bot).size.toString(), - }, - members_only: { - name: "👤 Humans", - description: "Total human members (non-bots)", - getCount: (guild) => - guild.members.cache.filter((m) => !m.user.bot).size.toString(), - }, - }, + // Custom Market Settings + market: { + maxItemsPerBoot: 10, + wikiBaseUrl: "https://grow-a-garden.fandom.com/wiki/", + } }, // ========================= // GENERIC BOT MESSAGES // ========================= messages: { - noPermission: "You do not have permission to use this command.", - cooldownActive: "Please wait {time} before using this command again.", - errorOccurred: "An error occurred while executing this command.", - missingPermissions: - "I am missing required permissions to perform this action.", - commandDisabled: "This command has been disabled.", - maintenanceMode: "The bot is currently in maintenance mode.", + noPermission: "Wala kang permiso para gamitin ito.", + cooldownActive: "Wait ka muna ng {time} bago mag-check ulit ng boot.", + errorOccurred: "May error sa pag-load ng market data.", + maintenanceMode: "Nagdidilig lang kami ng mga halaman (Maintenance).", }, // ========================= - // FEATURE TOGGLES + // FEATURE TOGGLES (Naka-OFF ang mga hindi kailangan) // ========================= - // Set any feature to `false` to disable it globally. features: { - // Core systems. economy: true, - leveling: true, + utility: true, + fun: true, + leveling: false, moderation: true, logging: true, welcome: true, - - // Community engagement systems. - tickets: true, - giveaways: true, - birthday: true, - counter: true, - - // Security and self-service systems. - verification: true, - reactionRoles: true, - joinToCreate: true, - - // Utility/quality-of-life modules. - voice: true, - search: true, - tools: true, - utility: true, - community: true, - fun: true, + tickets: false, // OFF + giveaways: false, // OFF + birthday: false, // OFF + counter: false, // OFF + verification: false, // OFF + reactionRoles: false, + joinToCreate: false, }, }; - export function validateConfig(config) { const errors = []; - - - if (process.env.NODE_ENV !== 'production') { - logger.debug('Environment variables check:'); - logger.debug('DISCORD_TOKEN exists:', !!process.env.DISCORD_TOKEN); - logger.debug('TOKEN exists:', !!process.env.TOKEN); - logger.debug('CLIENT_ID exists:', !!process.env.CLIENT_ID); - logger.debug('GUILD_ID exists:', !!process.env.GUILD_ID); - logger.debug('POSTGRES_HOST exists:', !!process.env.POSTGRES_HOST); - logger.debug('NODE_ENV:', process.env.NODE_ENV); - } - if (!process.env.DISCORD_TOKEN && !process.env.TOKEN) { - errors.push("Bot token is required (DISCORD_TOKEN or TOKEN environment variable)"); + errors.push("Bot token is required!"); } - if (!process.env.CLIENT_ID) { - errors.push("Client ID is required (CLIENT_ID environment variable)"); + errors.push("Client ID is required!"); } - - - if (process.env.NODE_ENV === 'production') { - if (!process.env.POSTGRES_HOST) { - errors.push("PostgreSQL host is required in production (POSTGRES_HOST environment variable)"); - } - if (!process.env.POSTGRES_USER) { - errors.push("PostgreSQL user is required in production (POSTGRES_USER environment variable)"); - } - if (!process.env.POSTGRES_PASSWORD) { - errors.push("PostgreSQL password is required in production (POSTGRES_PASSWORD environment variable)"); - } - } - return errors; } - const configErrors = validateConfig(botConfig); if (configErrors.length > 0) { logger.error("Bot configuration errors:", configErrors.join("\n")); - if (process.env.NODE_ENV === "production") { - process.exit(1); - } } - export const BotConfig = botConfig; -export function getColor(path, fallback = "#99AAB5") { - +export function getColor(path, fallback = "#2ecc71") { if (typeof path === "number") return path; - if (typeof path === "string" && path.startsWith("#")) { - - return parseInt(path.replace("#", ""), 16); - } - const result = path - .split(".") - .reduce( - (obj, key) => (obj && obj[key] !== undefined ? obj[key] : fallback), - botConfig.embeds.colors, - ); - - // Convert the result to integer if it's a hex string + const result = path.split(".").reduce((obj, key) => (obj && obj[key] !== undefined ? obj[key] : fallback), botConfig.embeds.colors); if (typeof result === "string" && result.startsWith("#")) { return parseInt(result.replace("#", ""), 16); } return result; } -export function getRandomColor() { - const colors = Object.values(botConfig.embeds.colors).flatMap((color) => - typeof color === "string" ? color : Object.values(color), - ); - return colors[Math.floor(Math.random() * colors.length)]; -} - export default botConfig; - - - - From dd7d861220ffd3e2b94d2518643ffb94093b5ebb Mon Sep 17 00:00:00 2001 From: Moymoy21 <45497441+Moymoy21@users.noreply.github.com> Date: Mon, 4 May 2026 05:40:33 +0800 Subject: [PATCH 2/6] Create addpet.js --- src/commands/Economy/addpet.js | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/commands/Economy/addpet.js diff --git a/src/commands/Economy/addpet.js b/src/commands/Economy/addpet.js new file mode 100644 index 000000000..947ef0cbf --- /dev/null +++ b/src/commands/Economy/addpet.js @@ -0,0 +1,52 @@ +import { SlashCommandBuilder, EmbedBuilder } from 'discord.js'; +import botConfig from '../../config/botConfig.js'; + +export default { + data: new SlashCommandBuilder() + .setName('addpet') + .setDescription('Magdagdag ng pet sa iyong trading boot') + .addStringOption(option => + option.setName('pet_name') + .setDescription('Pangalan ng pet (hal. Diamond Seedling)') + .setRequired(true)) + .addStringOption(option => + option.setName('presyo') + .setDescription('Magkano mo ibebenta?') + .setRequired(true)) + .addStringOption(option => + option.setName('image_url') + .setDescription('Link ng image galing sa Grow a Garden Wiki') + .setRequired(false)), + + async execute(interaction) { + const name = interaction.options.getString('pet_name'); + const price = interaction.options.getString('presyo'); + const image = interaction.options.getString('image_url'); + + // Gagawa ng magandang card (Embed) para sa pet + const embed = new EmbedBuilder() + .setTitle(`🐾 Bagong Listing sa Market!`) + .setColor(botConfig.embeds.colors.primary || "#2ecc71") + .setDescription(`Nag-post si **${interaction.user.username}** ng item para sa trade.`) + .addFields( + { name: 'Pet Name', value: `**${name}**`, inline: true }, + { name: 'Price', value: `💰 ${price}`, inline: true } + ) + .setFooter({ text: "Grow a Garden Trading System" }) + .setTimestamp(); + + // Check kung valid ang image URL na nilagay + if (image && image.startsWith('http')) { + embed.setThumbnail(image); + } else { + // Default icon kung walang image link + embed.setThumbnail('https://static.wikia.nocookie.net/grow-a-garden/images/8/8e/Site-logo.png'); + } + + await interaction.reply({ + content: "✅ Tagumpay na naidagdag ang iyong pet sa listahan!", + embeds: [embed] + }); + } +}; + From 7a56f1d910d156d7e4e2f74afaec19771ebfe49d Mon Sep 17 00:00:00 2001 From: Moymoy21 <45497441+Moymoy21@users.noreply.github.com> Date: Mon, 4 May 2026 05:41:41 +0800 Subject: [PATCH 3/6] Create myboot.js --- src/commands/Economy/myboot.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/commands/Economy/myboot.js diff --git a/src/commands/Economy/myboot.js b/src/commands/Economy/myboot.js new file mode 100644 index 000000000..b29c01158 --- /dev/null +++ b/src/commands/Economy/myboot.js @@ -0,0 +1,25 @@ +import { SlashCommandBuilder, EmbedBuilder } from 'discord.js'; +import botConfig from '../../config/botConfig.js'; + +export default { + data: new SlashCommandBuilder() + .setName('myboot') + .setDescription('Tingnan ang iyong active listings at seller profile'), + + async execute(interaction) { + const embed = new EmbedBuilder() + .setTitle(`📦 Trading Boot ni ${interaction.user.username}`) + .setColor(botConfig.embeds.colors.secondary || "#e67e22") + .setThumbnail(interaction.user.displayAvatarURL({ dynamic: true })) + .setDescription("Welcome sa iyong personal trading boot! Gamitin ang `/addpet` para mag-post ng mga pets na gusto mong i-trade mula sa Grow a Garden.") + .addFields( + { name: '👤 Seller Status', value: '🟢 Online & Ready to Trade', inline: true }, + { name: '💰 Currency', value: botConfig.economy.currency.name, inline: true }, + { name: '📝 Paano mag-list?', value: 'I-type ang `/addpet` at ilagay ang pangalan ng pet, presyo, at image link mula sa Wiki.', inline: false } + ) + .setFooter({ text: "Grow a Garden Market System" }) + .setTimestamp(); + + await interaction.reply({ embeds: [embed] }); + } +}; From 85b8f9b5f61bcd4df01f94717b0a35ba4800f2e0 Mon Sep 17 00:00:00 2001 From: Moymoy21 <45497441+Moymoy21@users.noreply.github.com> Date: Mon, 4 May 2026 05:48:17 +0800 Subject: [PATCH 4/6] Update bot.js --- src/config/bot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/bot.js b/src/config/bot.js index 6c19e3122..a78e4ad0c 100644 --- a/src/config/bot.js +++ b/src/config/bot.js @@ -20,7 +20,7 @@ export const botConfig = { commands: { owners: process.env.OWNER_IDS?.split(",") || [], defaultCooldown: 3, - deleteCommands: false, + deleteCommands: true, testGuildId: process.env.TEST_GUILD_ID, }, From 12bdf6136aec04c96f832be401a84ba5d22c8632 Mon Sep 17 00:00:00 2001 From: Moymoy21 <45497441+Moymoy21@users.noreply.github.com> Date: Mon, 4 May 2026 06:10:52 +0800 Subject: [PATCH 5/6] Create addpet.js --- src/commands/economy/addpet.js | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/commands/economy/addpet.js diff --git a/src/commands/economy/addpet.js b/src/commands/economy/addpet.js new file mode 100644 index 000000000..947ef0cbf --- /dev/null +++ b/src/commands/economy/addpet.js @@ -0,0 +1,52 @@ +import { SlashCommandBuilder, EmbedBuilder } from 'discord.js'; +import botConfig from '../../config/botConfig.js'; + +export default { + data: new SlashCommandBuilder() + .setName('addpet') + .setDescription('Magdagdag ng pet sa iyong trading boot') + .addStringOption(option => + option.setName('pet_name') + .setDescription('Pangalan ng pet (hal. Diamond Seedling)') + .setRequired(true)) + .addStringOption(option => + option.setName('presyo') + .setDescription('Magkano mo ibebenta?') + .setRequired(true)) + .addStringOption(option => + option.setName('image_url') + .setDescription('Link ng image galing sa Grow a Garden Wiki') + .setRequired(false)), + + async execute(interaction) { + const name = interaction.options.getString('pet_name'); + const price = interaction.options.getString('presyo'); + const image = interaction.options.getString('image_url'); + + // Gagawa ng magandang card (Embed) para sa pet + const embed = new EmbedBuilder() + .setTitle(`🐾 Bagong Listing sa Market!`) + .setColor(botConfig.embeds.colors.primary || "#2ecc71") + .setDescription(`Nag-post si **${interaction.user.username}** ng item para sa trade.`) + .addFields( + { name: 'Pet Name', value: `**${name}**`, inline: true }, + { name: 'Price', value: `💰 ${price}`, inline: true } + ) + .setFooter({ text: "Grow a Garden Trading System" }) + .setTimestamp(); + + // Check kung valid ang image URL na nilagay + if (image && image.startsWith('http')) { + embed.setThumbnail(image); + } else { + // Default icon kung walang image link + embed.setThumbnail('https://static.wikia.nocookie.net/grow-a-garden/images/8/8e/Site-logo.png'); + } + + await interaction.reply({ + content: "✅ Tagumpay na naidagdag ang iyong pet sa listahan!", + embeds: [embed] + }); + } +}; + From 14c138eec6033a671592d0c2a2e046147f6e04da Mon Sep 17 00:00:00 2001 From: Moymoy21 <45497441+Moymoy21@users.noreply.github.com> Date: Mon, 4 May 2026 06:11:49 +0800 Subject: [PATCH 6/6] Create myboot.js --- src/commands/economy/myboot.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/commands/economy/myboot.js diff --git a/src/commands/economy/myboot.js b/src/commands/economy/myboot.js new file mode 100644 index 000000000..3fe856e81 --- /dev/null +++ b/src/commands/economy/myboot.js @@ -0,0 +1,26 @@ +import { SlashCommandBuilder, EmbedBuilder } from 'discord.js'; +import botConfig from '../../config/botConfig.js'; + +export default { + data: new SlashCommandBuilder() + .setName('myboot') + .setDescription('Tingnan ang iyong active listings at seller profile'), + + async execute(interaction) { + const embed = new EmbedBuilder() + .setTitle(`📦 Trading Boot ni ${interaction.user.username}`) + .setColor(botConfig.embeds.colors.secondary || "#e67e22") + .setThumbnail(interaction.user.displayAvatarURL({ dynamic: true })) + .setDescription("Welcome sa iyong personal trading boot! Gamitin ang `/addpet` para mag-post ng mga pets na gusto mong i-trade mula sa Grow a Garden.") + .addFields( + { name: '👤 Seller Status', value: '🟢 Online & Ready to Trade', inline: true }, + { name: '💰 Currency', value: botConfig.economy.currency.name, inline: true }, + { name: '📝 Paano mag-list?', value: 'I-type ang `/addpet` at ilagay ang pangalan ng pet, presyo, at image link mula sa Wiki.', inline: false } + ) + .setFooter({ text: "Grow a Garden Market System" }) + .setTimestamp(); + + await interaction.reply({ embeds: [embed] }); + } +}; +