322 lines
7.7 KiB
JavaScript
322 lines
7.7 KiB
JavaScript
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.",
|
||
"",
|
||
"### ♠️ Poker",
|
||
"Create or join a 2–6 player Cookie Poker table.",
|
||
"",
|
||
"### 🏦 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(
|
||
"crumbSaucerPoker"
|
||
)
|
||
.setLabel(
|
||
"Poker"
|
||
)
|
||
.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
|
||
};
|