const { SlashCommandBuilder, Discord, ActionRowBuilder, ButtonBuilder, ButtonStyle, Events, StringSelectMenuBuilder } = require('discord.js'); //const { madlibState } = require('../main.cjs'); //exports.madlibState = madlibState; //let gameChannel = madlibState; module.exports = { data: new SlashCommandBuilder() .setName('startmadlib') .setDescription('Starts a madlib game in the current channel.'), async execute(interaction, client) { const row = new ActionRowBuilder() .addComponents( new ButtonBuilder() .setCustomId('yes') .setLabel('Yes') .setStyle(ButtonStyle.Primary), ) .addComponents( new ButtonBuilder() .setCustomId('no') .setLabel('No') .setStyle(ButtonStyle.Danger), ); const message = await interaction.reply({ content: "You have requested to start a madlib game in the current channel. I will intercept any message sent in this channel as game input until the game is over. Please refrain from using this in a busy channel, as it can be annoying for others. Would you like to continue?", fetchReply: true, components: [row]}); client.on(Events.InteractionCreate, interaction => { interaction.deferUpdate(); if (!interaction.isButton()) return; if (interaction.customId == 'yes') { console.log("User selected yes"); if (interaction.channel.id != undefined) { const row = new ActionRowBuilder() .addComponents( new StringSelectMenuBuilder() .setCustomId('selectstory') .setPlaceholder('Select an option') .setMaxValues(1) .addOptions( buildOptionJSON()//.toString() ), ); var selectedStory; const channel = client.channels.cache.get(interaction.channel.id); channel.send({ content: 'Select a story', components: [row], fetchMessage: true }); client.on(Events.InteractionCreate, interaction => { //interaction.deferUpdate(); if (!interaction.isStringSelectMenu()) return; selectedStory = interaction.values[0]; console.log("User selected: " +selectedStory); initGame(interaction.channel.id, client, interaction, selectedStory); //storySelectMessage.delete(); //console.log(interaction); //interaction.channel.send("Started game!"); //interaction.deleteReply(); }); } } else if (interaction.customId == 'no') { console.log("User selected no"); if (interaction.channel.id != undefined) { const channel = client.channels.cache.get(interaction.channel.id); channel.send("Game aborted."); } } //message.delete(); }); console.log("User " + interaction.user.tag + " ran /startmadlib"); }, }; function initGame(channelId, client, interaction, selectedStory) { if(global.madlibState.gameChannel == undefined) { console.log("Starting game in channel " + channelId); madlibState.gameChannel = channelId; global.madlibNextPrompt(client, 0, selectedStory); } else { const channel = client.channels.cache.get(interaction.channel.id); channel.send("There is currently an active game! Wait for it to be finished before starting a new one."); } } function buildOptionJSON() { const madlib = require("../madlibs/stories.json"); let returnObj = []; { let entryObj = {}; entryObj["label"] = "Automatically select random story"; entryObj["description"] = "Math.random()" entryObj["value"] = "0" returnObj.push(entryObj); } for (let i = 0; i < Object.keys(madlib.stories).length; ++i) { let entryObj = {}; entryObj["label"] = Object.keys(madlib.stories)[i]; entryObj["description"] = "Story " + (i+1); entryObj["value"] = (i+1).toString(); returnObj.push(entryObj); } return returnObj; } //console.log(buildOptionJSON()); /* { label: 'Select me', description: 'This is a description', value: 'first_option', }, */