From 7830e5dda5a68627425cca6b2595a7747f32bfba Mon Sep 17 00:00:00 2001 From: Xiled Emerald Date: Sun, 24 Oct 2021 22:48:25 +0100 Subject: [PATCH] Add files via upload --- Events/interactionCreate.js | 180 +++++++++++++++++++++++++++++++++++ Events/messageReactionAdd.js | 43 +++++++++ 2 files changed, 223 insertions(+) create mode 100644 Events/interactionCreate.js create mode 100644 Events/messageReactionAdd.js diff --git a/Events/interactionCreate.js b/Events/interactionCreate.js new file mode 100644 index 0000000..7b06425 --- /dev/null +++ b/Events/interactionCreate.js @@ -0,0 +1,180 @@ +// SupportBot | Emerald Services +// Interaction Create Event + +const fs = require("fs"); + +const Discord = require("discord.js"); +const yaml = require("js-yaml"); +const supportbot = yaml.load(fs.readFileSync("./Data/supportbot.yml", "utf8")); +const cmdconfig = yaml.load(fs.readFileSync("./Data/commands.yml", "utf8")); + +const Event = require("../Structures/Event.js"); + +module.exports = new Event("interactionCreate", (client, interaction) => { + if (interaction.isCommand()) { + const command = client.commands.find( + (cmd) => cmd.name.toLowerCase() == interaction.commandName + ); + + if (interaction.user.bot || !interaction.isCommand() || !interaction.guild) + return; + + const NotValid = new Discord.MessageEmbed() + .setDescription(`:x: \`Invalid Command\` `) + .setColor(supportbot.ErrorColour); + + if (!command) + return interaction.reply({ + embeds: [NotValid], + }); + + const permission = interaction.member.permissions.has(command.permission); + + const ValidPerms = new Discord.MessageEmbed() + .setDescription( + ":x: `Invalid Permissions` Do you have the correct permissions to execute this command?" + ) + .setColor(supportbot.ErrorColour); + + if (!permission) + return interaction.reply({ + embeds: [ValidPerms], + }); + interaction.user = interaction.user; + command.run(interaction); + } + if (interaction.isButton()) { + if (interaction.customId === "openticket") { + try { + const cmd = client.commands.get(cmdconfig.OpenTicket); + if (!cmd) return; + cmd.run(interaction); + } catch (error) { + console.error(error); + } + } + + if (interaction.customId === "ticketclose") { + if (interaction.channel.name.startsWith(`${supportbot.TicketChannel}-`)) { + interaction.message.fetch(); + interaction.deferUpdate(); + const DeleteTicketEmbed = new Discord.MessageEmbed() + .setDescription(supportbot.TicketDeleteMessage) + .setColor(supportbot.EmbedColour); + interaction.channel.send({ embeds: [DeleteTicketEmbed] }); + + let logChannel = + interaction.guild.channels.cache.find( + (channel) => channel.name === supportbot.TranscriptLog + ) || + interaction.guild.channels.cache.find( + (channel) => channel.id === supportbot.TranscriptLog + ); + + let user = interaction.user; + let name = interaction.channel.name; + let ticketChannel = interaction.channel; + let reason = "No Reason Provided."; + + interaction.channel + .send({ content: `**${supportbot.ClosingTicket}**` }) + .then(() => { + const logEmbed = new Discord.MessageEmbed() + .setTitle(supportbot.TranscriptTitle) + .setColor(supportbot.EmbedColour) + .setFooter(supportbot.EmbedFooter) + .addField("Closed By", user.username) + .addField("Reason", reason); + + interaction.channel.messages.fetch({ limit: 100 }).then((msgs) => { + let html = ""; + + msgs = msgs.sort( + (a, b) => a.createdTimestamp - b.createdTimestamp + ); + html += `Server Name: ${interaction.guild.name}
`; + html += `Ticket: ${ticketChannel.name}
`; + html += `Message: ${msgs.size} Messages


`; + + msgs.forEach((msg) => { + if (msg.content) { + html += `User: ${msg.author.tag}
`; + html += `Message: ${msg.content}
`; + html += `-----

`; + } + }); + + const TranscriptSavedEmbed = new Discord.MessageEmbed() + .setDescription(supportbot.TranscriptSavedMessage) + .setColor(supportbot.SuccessColour); + interaction.channel.send({ embeds: [TranscriptSavedEmbed] }); + + let file = new Discord.MessageAttachment( + Buffer.from(html), + `${name}.html` + ); + logChannel.send({ embeds: [logEmbed], files: [file] }); + + setTimeout( + () => interaction.channel.delete(), + supportbot.TicketDeleteTime + ); + }); + }); + } + } + if (interaction.customId === "ticketlock") { + if (interaction.channel.name.startsWith(`${supportbot.TicketChannel}`)) { + interaction.message.fetch(); + interaction.deferUpdate(); + let Admin = + interaction.guild.roles.cache.find( + (AdminUser) => AdminUser.name === supportbot.Admin + ) || + interaction.guild.roles.cache.find( + (AdminUser) => AdminUser.id === supportbot.Admin + ); + let all = interaction.channel.permissionOverwrites.cache; + + let parent = + interaction.guild.channels.cache.find( + (c) => c.name === `${supportbot.LockTicketCategory}` + ) || + interaction.guild.channels.cache.find( + (c) => c.id === `${supportbot.LockTicketCategory}` + ); + if (parent) { + interaction.channel.setParent(parent.id); + } + + all.forEach((perm) => { + interaction.channel.permissionOverwrites.delete(perm.id); + }); + interaction.channel.permissionOverwrites.create(Admin.id, { + VIEW_CHANNEL: true, + }); + + interaction.channel.permissionOverwrites.create(interaction.guild.id, { + VIEW_CHANNEL: false, + }); + + const ticketDeleteButton = new Discord.MessageButton() + .setCustomId("ticketclose") + .setLabel("Close") + .setStyle(supportbot.TicketDeleteColour) + .setEmoji(supportbot.TicketDeleteEmoji); + + const row = new Discord.MessageActionRow().addComponents( + ticketDeleteButton + ); + const ArchiveEmbed = new Discord.MessageEmbed() + .setTitle("Archived") + .setDescription(`Archived ${interaction.channel.name}`) + .setColor(`${supportbot.SuccessColour}`); + + interaction.channel.send({ embeds: [ArchiveEmbed] }); + interaction.message.edit({ components: [row] }); + } + } + } +}); diff --git a/Events/messageReactionAdd.js b/Events/messageReactionAdd.js new file mode 100644 index 0000000..22d20d6 --- /dev/null +++ b/Events/messageReactionAdd.js @@ -0,0 +1,43 @@ +// SupportBot | Emerald Services +// Ready Event + +const fs = require("fs"); + +const Discord = require("discord.js"); +const yaml = require("js-yaml"); +const supportbot = yaml.load(fs.readFileSync("./Data/supportbot.yml", "utf8")); +const cmdconfig = yaml.load(fs.readFileSync("./Data/commands.yml", "utf8")); +const panelconfig = yaml.load( + fs.readFileSync("./Data/ticket-panel.yml", "utf8") +); + +const Event = require("../Structures/Event.js"); + +module.exports = new Event("messageReactionAdd", async (client) => { + let message = { + guild: reaction.message.channel.guild, + author: user, + content: "N/A", + channel: reaction.message.channel, + }; + + if (panelconfig.TicketPanel) { + if (reaction.message.id === panelconfig.TicketPanelID) { + if ( + reaction.emoji.name == panelconfig.ButtonEmoji || + reaction.emoji.id == panelconfig.ButtonEmoji + ) { + await reaction.users.remove(user.id); + + try { + const cmd = client.commands.get(cmdconfig.OpenTicket); + if (!cmd) return; + + cmd.run(message, message.content); + } catch (error) { + console.error(error); + } + } + } + } +});