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);
+ }
+ }
+ }
+ }
+});