sp00ktober
sp00ktober
Explore posts from servers
DIAdiscord.js - Imagine an app
Created by sp00ktober on 3/15/2024 in #djs-questions
Modals in Node-Red using Discord JS
A little offtopic but its based on discord.js, i hope to find some support here anyways. In node red i try to show a modal with text input in response to a slash command. for this i took the example from the webpage and modified it to fit into node red, here is my code:
// Create the modal
const modal = new discordjsBuilders.ModalBuilder()
.setCustomId('myModal')
.setTitle('My Modal');

// Add components to modal

// Create the text input components
const favoriteColorInput = new discordjsBuilders.TextInputBuilder()
.setCustomId('favoriteColorInput')
// The label is the prompt the user sees for this input
.setLabel("What's your favorite color?")
// Short means only a single line of text
.setStyle(discordApiTypesV9.TextInputStyle.Short);

const hobbiesInput = new discordjsBuilders.TextInputBuilder()
.setCustomId('hobbiesInput')
.setLabel("What's some of your favorite hobbies?")
// Paragraph means multiple lines of text.
.setStyle(discordApiTypesV9.TextInputStyle.Paragraph);

// An action row only holds one text input,
// so you need one action row per text input.
const firstActionRow = new discordjsBuilders.ActionRowBuilder().addComponents(favoriteColorInput);
const secondActionRow = new discordjsBuilders.ActionRowBuilder().addComponents(hobbiesInput);

// Add inputs to the modal
modal.addComponents(firstActionRow, secondActionRow);

// Show the modal to the user
msg.interactionObject.showModal(modal);
// Create the modal
const modal = new discordjsBuilders.ModalBuilder()
.setCustomId('myModal')
.setTitle('My Modal');

// Add components to modal

// Create the text input components
const favoriteColorInput = new discordjsBuilders.TextInputBuilder()
.setCustomId('favoriteColorInput')
// The label is the prompt the user sees for this input
.setLabel("What's your favorite color?")
// Short means only a single line of text
.setStyle(discordApiTypesV9.TextInputStyle.Short);

const hobbiesInput = new discordjsBuilders.TextInputBuilder()
.setCustomId('hobbiesInput')
.setLabel("What's some of your favorite hobbies?")
// Paragraph means multiple lines of text.
.setStyle(discordApiTypesV9.TextInputStyle.Paragraph);

// An action row only holds one text input,
// so you need one action row per text input.
const firstActionRow = new discordjsBuilders.ActionRowBuilder().addComponents(favoriteColorInput);
const secondActionRow = new discordjsBuilders.ActionRowBuilder().addComponents(hobbiesInput);

// Add inputs to the modal
modal.addComponents(firstActionRow, secondActionRow);

// Show the modal to the user
msg.interactionObject.showModal(modal);
Last line produces this error: TypeError: Cannot read properties of undefined (reading 'rest') The msg.interactionObject is a copy of the interaction object from the discord.js examples callbacks. I modified the node red version to not send deferReply() too early (before my own flow code comes), basically here: https://github.com/Markoudstaal/node-red-contrib-discord-advanced/blob/6dedf30e2f88c616ac28992b733dbff37b23796a/discord/discordInteraction.js#L58 still i dont understand the error i get, ideas?
5 replies