const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js"); const { getCookieBalance } = require("./cookieEconomy"); const { createInteractionSession, requireInteractionSession } = require("./interactionSession"); async function showCrumbSaucer(interaction) { if (interaction.isButton()) { const session = await requireInteractionSession(interaction); if (!session) { return; } const balance = await getCookieBalance(interaction.user.id); const embed = buildMainMenuEmbed(interaction.user, balance); return interaction.update({ embeds: [embed], components: buildMainMenuButtons() }); } const balance = await getCookieBalance(interaction.user.id); const embed = buildMainMenuEmbed(interaction.user, balance); await interaction.reply({ embeds: [embed], components: buildMainMenuButtons() }); const message = await interaction.fetchReply(); await createInteractionSession( interaction, { messageId: message.id, ownerId: interaction.user.id, kind: "crumbSaucer" } ); return message; } function buildMainMenuEmbed(user, balance) { return new EmbedBuilder() .setTitle("🎰 The Crumb Saucer") .setDescription( [ `Welcome, ${user}!`, "", "Where Cookies are won, lost,", "and occasionally confiscated by ShaiBot.", "", "### 🍪 Cookie Bakery", "Collect your regular batch of Cookies.", "", "### 🎰 Slots", "Spin the reels and chase the Cookie jackpot.", "", "### 🃏 Blackjack", "Beat the dealer without going over 21.", "", "### 🎡 Roulette", "Bet on Red, Black, Odd, Even, or Zero.", "", "### 🏦 Vault Heist", "Attempt to breach ShaiBot's Cookie Vault.", "", "### 🛟 Bankruptcy", "At exactly 0 Cookies, claim a 1,000 Cookie starter kit." ].join("\n") ) .addFields({ name: "Your Vault", value: `**${balance.toLocaleString()} 🍪**` }) .setFooter({ text: `crumbSaucer:${user.id}` }); } function buildMainMenuButtons() { return [ new ActionRowBuilder() .addComponents( new ButtonBuilder() .setCustomId("crumbSaucerSlots") .setLabel("Slots") .setEmoji("🎰") .setStyle(ButtonStyle.Primary), new ButtonBuilder() .setCustomId("crumbSaucerBlackjack") .setLabel("Blackjack") .setEmoji("🃏") .setStyle(ButtonStyle.Primary), new ButtonBuilder() .setCustomId("crumbSaucerRoulette") .setLabel("Roulette") .setEmoji("🎡") .setStyle(ButtonStyle.Primary), new ButtonBuilder() .setCustomId("crumbSaucerHeist") .setLabel("Vault Heist") .setEmoji("🏦") .setStyle(ButtonStyle.Danger) ), new ActionRowBuilder() .addComponents( new ButtonBuilder() .setCustomId("crumbSaucerCollectMenu") .setLabel("Cookie Bakery") .setEmoji("🍪") .setStyle(ButtonStyle.Secondary), new ButtonBuilder() .setCustomId("crumbSaucerBankruptcy") .setLabel("Bankruptcy") .setEmoji("🛟") .setStyle(ButtonStyle.Secondary), new ButtonBuilder() .setCustomId("crumbSaucerProfile") .setLabel("Profile") .setEmoji("👤") .setStyle(ButtonStyle.Secondary), new ButtonBuilder() .setCustomId("sessionClose") .setLabel("Close") .setEmoji("✖️") .setStyle(ButtonStyle.Danger) ) ]; } function getCrumbSaucerSessionOwner(interaction) { const footer = interaction.message?.embeds?.[0]?.footer?.text; const parts = footer?.split(":") ?? []; switch (parts[0]) { case "crumbSaucer": case "crumbSaucerCollect": case "crumbSaucerSlots": case "crumbSaucerSlotsResult": case "crumbSaucerBlackjack": case "crumbBlackjackResult": case "crumbRouletteMenu": case "crumbRouletteBet": case "crumbRouletteResult": case "cookieHeist": return parts[1]; case "crumbBlackjack": return parts[2]; default: return null; } } module.exports = { showCrumbSaucer, buildMainMenuEmbed, buildMainMenuButtons, getCrumbSaucerSessionOwner };