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.", "", "### ♠️ Poker", "Create or join a 2–6 player Cookie Poker table.", "", "### 🛟 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 ButtonBuilder() .setCustomId( "crumbSaucerPoker" ) .setLabel( "Poker" ) .setEmoji( "♠️" ) .setStyle( ButtonStyle.Success ) ), 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 };