UNPKG

xfinity

Version:

Easy to use discord.js multipurpose package for your bot

253 lines (242 loc) 8.62 kB
const { Client, MessageEmbed, MessageButton, MessageActionRow, MessageAttachment, } = require("discord.js"); const chalk = require("chalk"); const fetchTranscript = require("./trans"); /** * * @param {Client} client */ async function handleinteraction(client, options = []) { client.on("interactionCreate", async (button) => { if (button.isButton()) { const close = new MessageButton() .setStyle(options.closeButtonColor || "DANGER") .setEmoji("🔒") .setLabel("Close") .setCustomId("close"); const openbt = new MessageButton() .setStyle(options.reopenButtonColor || "SUCCESS") .setEmoji("🔓") .setLabel("Reopen") .setCustomId("openbt"); const deletebt = new MessageButton() .setStyle(options.deleteButtonColor || "SECONDARY") .setEmoji("❌") .setLabel("Delete") .setCustomId("deletebt"); const tr = new MessageButton() .setStyle(options.trasncriptButtonColor || "SECONDARY") .setEmoji("📰") .setLabel("Transcript") .setCustomId("tr"); const row = new MessageActionRow().addComponents([openbt, deletebt, tr]); const surebtn = new MessageButton() .setStyle(options.yesButtonColor || "DANGER") .setLabel("Yes") .setCustomId("yes"); const nobtn = new MessageButton() .setStyle(options.noButtonColor || "SUCCESS") .setLabel("No") .setCustomId("no"); const row1 = new MessageActionRow().addComponents([surebtn, nobtn]); const closerow = new MessageActionRow().addComponents([close]); await button.deferUpdate(); if (button.customId === "start") { let ticketname = `ticket-${button.user.id}`; if (options.ticketName) { ticketname = options.ticketName .replace("{username}", button.user.username) .replace("{tag}", button.user.tag); } let topic = `ticket-${button.user.id}`; const spam = button.guild.channels.cache.find( (ch) => ch.topic === topic.toLowerCase() ); if (spam) { button.channel.send({ content: `${ options.spamMessage || `A ticket named \`${ticketname}\` has already been opened. Close it first to reopen new one.` }`, }); return; } try { button.guild.channels .create(ticketname, { type: "GUILD_TEXT", topic: topic, parent: options.parentId || null, permissionOverwrites: [ { id: button.message.guild.roles.everyone, deny: [ "VIEW_CHANNEL", "SEND_MESSAGES", "READ_MESSAGE_HISTORY", ], }, { id: button.user.id, allow: [ "VIEW_CHANNEL", "SEND_MESSAGES", "READ_MESSAGE_HISTORY", ], }, ], }) .then((pussy) => { const reembed = new MessageEmbed() .setTitle("Ticket Created") .setDescription( `${ options.ticketOpenMessage || `A new Ticket has been created by ${button.user}.` }` ) .setThumbnail(button.message.guild.iconURL()) .setTimestamp() .setColor(options.ticketOpenEmbedColor || "#075FFF") .setFooter( `Requested by - ${button.user.tag}`, button.user.displayAvatarURL({ dynamic: true }) ); pussy.send({ content: `${button.user}`, embeds: [reembed], components: [closerow], }); }); } catch (e) { console.log(chalk.redBright(`Error Ocurred. | Error: ${e.stack}`)); } } else if (button.customId === "close") { button.channel.permissionOverwrites .edit(button.user.id, { SEND_MESSAGES: false, VIEW_CHANNEL: true, }) .catch((err) => {}); const reembed = new MessageEmbed() .setTitle("Ticket Created") .setDescription( `${ options.ticketOpenMessage || `A new Ticket has been created by ${button.user}.` }` ) .setThumbnail(button.message.guild.iconURL()) .setTimestamp() .setColor(options.ticketOpenEmbedColor || "#075FFF") .setFooter( `Requested by - ${button.user.tag}`, button.user.displayAvatarURL({ dynamic: true }) ); button.message.edit({ content: `${button.user}`, embeds: [reembed], components: [row], }); } else if (button.customId === "openbt") { button.channel.permissionOverwrites .edit(button.user.id, { SEND_MESSAGES: true, VIEW_CHANNEL: true, }) .catch((err) => {}); const emb = new MessageEmbed() .setTitle("Ticket Created") .setDescription( `${ options.ticketOpenMessage || `A new Ticket has been created by ${button.user}.` }` ) .setThumbnail(button.message.guild.iconURL()) .setTimestamp() .setColor(options.ticketOpenEmbedColor || "#075FFF") .setFooter( `Requested by - ${button.user.tag}`, button.user.displayAvatarURL({ dynamic: true }) ); button.message.edit({ content: `${button.user}`, embedDesc: [emb], components: [closerow], }); button.channel.send({ content: "Reopened!", }); } else if (button.customId === "deletebt") { const emb2 = new MessageEmbed() .setTitle("Are you sure ?") .setDescription( `${ options.confirmationMessage || `Clicking yes will result in channel delete and ticket delete. You cant undo this action` }` ) .setTimestamp() .setColor(options.confirmationEmbedColor || "#c90000") .setTimestamp(); button.channel.send({ embeds: [emb2], components: [row1] }); } else if (button.customId === "yes") { button.channel.send({ content: options.ticketDeleteMessage || "Deleting the ticket and channel.. Please wait.", }); setTimeout(() => { let fuck = button.guild.channels.cache.get(button.message.channel.id); fuck.delete().catch((err) => { button.message.channel.send({ content: "An Error Occured. " + err, }); }); }, 5000); } else if (button.customId === "no") { button.message.delete(); button.channel.send({ content: options.ticketDeleteCancelMessage || "Aborted!", }); } const transEmbed = new MessageEmbed() .setColor("RED") .setTitle(`Hey` + ` ` + button.user.username) .setDescription( options.closeDescription || `Are you sure you want to delete **this** ticket ?` ); if (button.customId === "del") { const ok = new MessageActionRow().addComponents( new MessageButton() .setCustomId("sure") .setLabel(`Delete`) .setStyle(options.deleteChannelButtonColor || "DANGER") ); await button.channel.send({ embeds: [transEmbed], components: [ok], }); } if (button.customId === "sure") { button.channel.delete(); } } if (button.customId === "del2") { await button.channel.delete(); } else if (button.customId === "tr") { fetchTranscript(button.channel, button, 100).then((data) => { const file = new MessageAttachment(data, "index.html"); button.channel.send({ files: [file] }); }); } }); } module.exports = handleinteraction;