2.0.1 โ€ข Published 2 years ago

@zerotwobot/discord-modals v2.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

this is a modified fork of discord-modals with a few bug fixes, and to make it work better with ZeroTwo's framework.

installation

npm install @zerotwobot/discord-modals

๐Ÿ”ฎ What is this package for?

Recently, Discord announced Modal Interactions. What is that? Modal is a popup of Text Input Components [Example]. It's so cool and useful for many commands that needs arguments. However, discord.js hasn't added it yet. @zerotwobot/discord-modals can be a solution if you want to test or use modals right now in v13. Try it!

โœจ Setup

const { Client } = require('discord.js'); // Extract the Client class
const client = new Client({ intents: 32767 }); // Create a Client
const discordModals = require('@zerotwobot/discord-modals'); // Define the @zerotwobot/discord-modals package!
discordModals(client); // @zerotwobot/discord-modals needs your client in order to interact with modals

client.login('token'); // Login with your bot

โ“ How can i use it?

First of all, we need to understand that Modals and Text Input Components are completely different. Modals is a popup that shows the text input components and text input are the components of modals. To understand better, you can explore the Discord API Documentation here.

Modals have:

  • A Title.
  • A Custom Id.
  • Components (Text Input)

Text Input have:

  • A Custom Id
  • A Style (Short or Paragraph)
  • A Label
  • A minimum length
  • A maximum length
  • A value (A prefilled value if there is not text)
  • And...a place holder

If you have understood this, you can continue on "Examples" section.

๐Ÿ“œ Examples

If you are ready, take this examples.

  • First, we are going to create a Modal.
const { Modal } = require('@zerotwobot/discord-modals'); // Modal class

const modal = new Modal() // We create a Modal
  .setCustomId('customid')
  .setTitle('Test of @zerotwobot/discord-modals!')
  .addComponents();

This is a basic structure of a Modal, but something is missing. Yeah! Text Input components.

  • We are going to create and add a Text Input Component to the Modal.
const { Modal, TextInputComponent } = require('@zerotwobot/discord-modals'); // Modal and TextInputComponent class

const modal = new Modal() // We create a Modal
  .setCustomId('modal-customid')
  .setTitle('Test of @zerotwobot/discord-modals!')
  .addComponents(
    new TextInputComponent() // We create a Text Input Component
      .setCustomId('textinput-customid')
      .setLabel('Some text Here')
      .setStyle('SHORT') //IMPORTANT: Text Input Component Style can be 'SHORT' or 'LONG'
      .setMinLength(4)
      .setMaxLength(10)
      .setPlaceholder('Write a text here')
      .setRequired(true) // If it's required or not
  );

Yay! We have the full Modal & Text Input Component, but... How can i send/show a Modal?

  • We are going to use the showModal() method to send the modal in an interaction.
const {
  Modal,
  TextInputComponent,
  showModal,
} = require('@zerotwobot/discord-modals'); // Now we extract the showModal method

const modal = new Modal() // We create a Modal
  .setCustomId('modal-customid')
  .setTitle('Test of @zerotwobot/discord-modals!')
  .addComponents(
    new TextInputComponent() // We create a Text Input Component
      .setCustomId('textinput-customid')
      .setLabel('Some text Here')
      .setStyle('SHORT') //IMPORTANT: Text Input Component Style can be 'SHORT' or 'LONG'
      .setMinLength(4)
      .setMaxLength(10)
      .setPlaceholder('Write a text here')
      .setRequired(true) // If it's required or not
  );

client.on('interactionCreate', (interaction) => {
  // Let's say the interaction will be a Slash Command called 'ping'.
  if (interaction.commandName === 'ping') {
    showModal(modal, {
      client: client, // This method needs the Client to show the Modal through the Discord API.
      interaction: interaction, // This method needs the Interaction to show the Modal with the Interaction ID & Token.
    });
  }
});

Congrats! You show the Modal to the Interaction User. Now, how can i receive the Modal Interaction?

๐Ÿ“ข Events: Receiving Modal Submit Interaction

  • @zerotwobot/discord-modals integrates to your Client a new event called modalSubmit. We are going to use it.
  • To have access to the responses, just use the .getTextInputValue() method with the Custom Id of the Text Input Component.

Reply Examples

  • Usual Reply:
client.on('modalSubmit', (modal) => {
  if (modal.customId === 'modal-customid') {
    const firstResponse = modal.getTextInputValue('textinput-customid');
    modal.reply(
      'Congrats! Powered by @zerotwobot/discord-modals.' +
        `\`\`\`${firstResponse}\`\`\``
    );
  }
});
  • Ephemeral Reply:
client.on('modalSubmit', (modal) => {
  if (modal.customId === 'modal-customid') {
    const firstResponse = modal.getTextInputValue('textinput-customid');
    await modal.deferReply({ ephemeral: true });
    modal.followUp({
      content:
        'Congrats! Powered by @zerotwobot/discord-modals.' +
        `\`\`\`${firstResponse}\`\`\``,
      ephemeral: true,
    });
  }
});

And you made it! I hope this examples help you :)

Final Result

๐Ÿ“š Documentation

  • Check our documentation here.

๐Ÿ”จ Developers

  • ใ€Ž๐‘ด๐’‚๐’•๐’†๐’แต—แต‰แตใ€#9999

โ›” Issues/Bugs?

Please report it on our GitHub Repository here to fix it inmmediately.