// Import our needed HTTP Lib var http = require('unirest'); const { MessageActionRow, MessageSelectMenu } = require('discord.js'); // Our main list array - STORAGE let boardList=[] let data let desc let columns = []; //Requiring our discord components and paginator const { MessageEmbed, MessageButton } = require("discord.js"); const { Pagination } = require("pagination.djs"); // Setting up our Global Config require("dotenv").config(); // Grab RUN - get Client, interaction from the bot exports.run = async (client, interaction) => { // eslint-disable-line no-unused-vars // Defer to aloow for embed building await interaction.deferReply(); // Setting up our Request, using getAllProjects method var Request = http.get('https://' + process.env.ROOT_DOMAIN + '/jsonrpc.php').headers({ Accept: 'application/json', 'Content-Type': 'application/json' }).send({ "jsonrpc": "2.0", "method": "getAllProjects", "id": 0 }); // Begin the request and send authenication using the jsonrpc2.0 protocol. Request.auth({ user: 'jsonrpc', pass: process.env.KANBOARD_API_KEY, sendImmediately: false }).then(function (response) { // We have a response, lets set up a var let data = response.body.result // Setting up the correct formatting for our paginator const pusherFunc = board=>boardList.push({label: board.name, description: board.name, value:board.id}); data.forEach(pusherFunc); console.log(boardList) const row = new MessageActionRow() .addComponents( new MessageSelectMenu() .setCustomId('select') .setPlaceholder('Select a Project') .addOptions(boardList), ); (async function(){ await interaction.editReply({ content: 'Use the menu below to choose a Project', components: [row] }); })() // await interaction.reply({ content: 'Pong!', components: [row] }); client.on('interactionCreate', interaction => { if (!interaction.isSelectMenu()) return; if (interaction.customId === 'select') { (async () => { await interaction.update({ content: 'Selection Detected.', components: [] }); console.log(interaction.values[0]); var Request = http.get('https://board.grwh.work/jsonrpc.php').headers({ Accept: 'application/json', 'Content-Type': 'application/json' }).send({"jsonrpc": "2.0","method": "getBoard","id": 0,"params": [interaction.values[0]]}); // Begin the request and send authenication using the jsonrpc2.0 protocol. Request.auth({ user: 'jsonrpc', pass: process.env.KANBOARD_API_KEY, sendImmediately: false }).then(function (response) { data = response.body.result[0] console.log(data) const date = require('date-and-time'); const now = new Date(); if (data.description == ''){ desc = "N/A" } else { desc = data.description } const pusherFunc = column=>columns.push(column.title + " Position: " + column.nb_tasks + " tasks.\n"); data.columns.forEach(pusherFunc); const mainEmbed = new MessageEmbed() .setColor('#0099ff') .addFields( { name: 'Swimlane', value: data.name , inline: true }, { name: 'Project ID', value: data.project_id , inline: true}, { name: 'Description', value: desc }, { name: 'Task Info', value: columns.join(" "), inline: true }, { name: 'link', value: "https://" + process.env.ROOT_DOMAIN + "/board/" + data.project_id, inline: true } ) .setTitle('Requested Details') .setDescription("Position " + data.position) // .setThumbnail("https://wiki.codingvm.codes/paomedia-small-n-flat-terminal.ico") .setFooter(date.format(now, 'MM/DD/YYYY hh:mm:ss')); (async () => { await interaction.editReply({ embeds: [mainEmbed] }); })(); }) })(); } }) }) } // Clear the list boardList = []; desc = ""; exports.commandData = { name: "projectdetails", description: "Lists all of the current projects", options: [], defaultPermission: true, }; // Set guildOnly to true if you want it to be available on guilds only. // Otherwise false is global. exports.conf = { permLevel: "User", guildOnly: true };