finished Modals

This commit is contained in:
ION606
2023-04-25 20:33:28 -04:00
parent 75f263f88c
commit 9aa6c2189a
3 changed files with 55 additions and 15 deletions
+39 -8
View File
@@ -1,3 +1,4 @@
import { MessageActionRow } from "../messages/MessageActionRow.js";
import { Interaction } from "./interaction.js"; import { Interaction } from "./interaction.js";
/** @enum {number} */ /** @enum {number} */
@@ -41,6 +42,8 @@ export class ModalComponent {
} }
constructor(obj) { constructor(obj) {
if (obj == undefined) return;
for (const k in this) { for (const k in this) {
if (obj[k] != undefined) { if (obj[k] != undefined) {
this[k] = obj[k]; this[k] = obj[k];
@@ -57,34 +60,62 @@ export class Modal extends Interaction {
/** @type {String} */ /** @type {String} */
custom_id; custom_id;
/** @type {ModalComponent[]} */ /** @type {Map<String, ModalComponent>} */
components; components;
/** /**
* @param {ModalComponent} c * @param {ModalComponent} c
* @returns {Boolean} true is added false otherwise
*/ */
addComponent(c) { addComponent(c) {
this.components.push(c); if (!c || this.components.has(c.custom_id)) return true;
this.components.set(c.custom_id, c);
}
/**
* @description returns the Modal's components as a map of
*
* `custom_id ==> input`
* @returns {[{value: String, custom_id: String}]}
*/
getComponents() {
const m = new Map();
for (const k of this.components) {
m.set(k[0], k[1]);
}
return m;
}
/**
* @description returns the component with the custom id specified
* @param {String} cid
* @returns {String}
*/
getComponent(cid) {
return this.components.get(cid).value;
} }
toObj() { toObj() {
const obj = {title: this.title, custom_id: this.custom_id, components: []}; const obj = {title: this.title, custom_id: this.custom_id, components: []};
for (const comp of this.components) { for (const key in this.components) {
obj.components.push(comp.toObj()); const comp = this.components.get(key);
const a = new MessageActionRow();
a.addComponent(comp);
obj.components.push(a.toObj());
} }
return obj; return obj;
} }
constructor(intRaw, client) { constructor(intRaw, client) {
super(intRaw, client); super(intRaw, client);
this.components = []; this.components = new Map();
if (!intRaw) return; if (!intRaw) return;
// [ { value: 'nnnnnnnnnnnnn', type: 4, custom_id: 'nonononononono' } ]
for (const opt of intRaw.data.components) { for (const opt of intRaw.data.components) {
//These are nested const compRaw = opt.components[0];
// this.components.push(new ModalComponent()); const comp = new ModalComponent(compRaw);
this.components.set(comp.custom_id, comp.value);
} }
} }
} }
+2 -2
View File
@@ -50,8 +50,8 @@ export function createInteraction(intRaw, client) {
return createSelectMenu(intRaw, client); return createSelectMenu(intRaw, client);
case interactionTypes.ModalSubmit: case interactionTypes.ModalSubmit:
return console.log("MODALS NOT FULLY IMPLEMENTED!"); // return console.log("MODALS NOT FULLY IMPLEMENTED!");
// return new Modal(intRaw, client); return new Modal(intRaw, client);
case interactionTypes.Ping: case interactionTypes.Ping:
console.log("pong"); console.log("pong");
+13 -4
View File
@@ -14,12 +14,17 @@ export default async (interaction) => {
c.custom_id = 'nonononononono'; c.custom_id = 'nonononononono';
c.label = "hi"; c.label = "hi";
c.style = 1; c.style = 1;
const c2 = new ModalComponent();
c2.custom_id = 'the_capital_letter_n';
c2.label = "NIIIIIIIIIIIIII";
c2.style = 1;
m.custom_id = "temp"; m.custom_id = "temp";
m.title = "TITLE HERE"; m.title = "TITLE HERE";
const a = new MessageActionRow(); m.addComponent(c);
a.addComponent(c); m.addComponent(c2);
m.addComponent(a);
interaction.reply(m); interaction.reply(m);
return; return;
@@ -37,7 +42,11 @@ export default async (interaction) => {
// }); // });
// const delResp = await interaction.client.commands.delete('none'); // const delResp = await interaction.client.commands.delete('none');
// console.log(delResp); // console.log(delResp);
} else { }
else if (interaction.type == interactionTypes.ModalSubmit) {
console.log(interaction.getComponents());
}
else {
console.log(interaction); console.log(interaction);
} }
} }