180 lines
5.2 KiB
JavaScript
180 lines
5.2 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.",
|
|
"",
|
|
"### 🏦 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
|
|
};
|