From 23acc0926f1ddbf22e0577baedebf0460a467730 Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 4 Feb 2022 17:49:02 -0600 Subject: [PATCH 01/14] Fix BitField Error --- Events/interactionCreate.js | 23 ++++++++++++++--------- Structures/Command.js | 2 +- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/Events/interactionCreate.js b/Events/interactionCreate.js index 32672e3..49a2ea8 100644 --- a/Events/interactionCreate.js +++ b/Events/interactionCreate.js @@ -15,7 +15,7 @@ const Event = require("../Structures/Event.js"); module.exports = new Event("interactionCreate", async (client, interaction) => { if (interaction.isCommand()) { const command = client.commands.find( - (cmd) => cmd.name.toLowerCase() == interaction.commandName + (cmd) => cmd.name.toLowerCase() === interaction.commandName ); if (interaction.user.bot || !interaction.guild) return; @@ -29,7 +29,7 @@ module.exports = new Event("interactionCreate", async (client, interaction) => { embeds: [NotValid], }); - const permission = interaction.member.permissions.has(command.permission); + const permission = interaction.member.permissions.has(command.permissions); const ValidPerms = new Discord.MessageEmbed() .setDescription( @@ -41,11 +41,13 @@ module.exports = new Event("interactionCreate", async (client, interaction) => { return interaction.reply({ embeds: [ValidPerms], }); - interaction.user = interaction.user; command.run(interaction); } if (interaction.isButton()) { - if (interaction.customId === "openticket") { + if ( + interaction.customId === "openticket" || + interaction.customId.includes("department-") + ) { try { const cmd = client.commands.get(cmdconfig.OpenTicket); if (!cmd) return; @@ -90,19 +92,22 @@ module.exports = new Event("interactionCreate", async (client, interaction) => { (c) => c.id === `${supportbot.LockTicketCategory}` ); if (parent) { - interaction.channel.setParent(parent.id); + await interaction.channel.setParent(parent.id); } all.forEach((perm) => { interaction.channel.permissionOverwrites.delete(perm.id); }); - interaction.channel.permissionOverwrites.create(Admin.id, { + await interaction.channel.permissionOverwrites.create(Admin.id, { VIEW_CHANNEL: true, }); - interaction.channel.permissionOverwrites.create(interaction.guild.id, { - VIEW_CHANNEL: false, - }); + await interaction.channel.permissionOverwrites.create( + interaction.guild.id, + { + VIEW_CHANNEL: false, + } + ); const ticketDeleteButton = new Discord.MessageButton() .setCustomId("ticketclose") diff --git a/Structures/Command.js b/Structures/Command.js index eae47be..77f17c6 100644 --- a/Structures/Command.js +++ b/Structures/Command.js @@ -5,7 +5,7 @@ class Command { constructor(options) { this.name = options.name; this.description = options.description; - this.permissions = options.permissions; + this.permissions = options.permissions || []; this.options = options.options || []; this.run = options.run; this.defaultPermission = true; From e02ecf95535803213dd72e4da11f4488bd046e14 Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 4 Feb 2022 17:55:02 -0600 Subject: [PATCH 02/14] Bug fixes --- Commands/ticket.js | 26 +++++++++++++++----------- Events/ready.js | 4 ++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/Commands/ticket.js b/Commands/ticket.js index b199d3b..c728844 100644 --- a/Commands/ticket.js +++ b/Commands/ticket.js @@ -34,12 +34,12 @@ module.exports = new Command({ let TicketData = await JSON.parse( fs.readFileSync("./Data/TicketData.json", "utf8") ); - const { getRole, getChannel, getCategory } = interaction.client; + const { getRole, getCategory } = interaction.client; let User = interaction.guild.members.cache.get(interaction.user.id); if ( supportbot.MaxAllowedTickets && - TicketData.tickets.filter((t) => t.user == interaction.user.id && t.open) + TicketData.tickets.filter((t) => t.user === interaction.user.id && t.open) .length >= supportbot.MaxAllowedTickets ) { return interaction.reply({ @@ -77,11 +77,15 @@ module.exports = new Command({ .setColor(supportbot.WarningColour); if ( - await interaction.guild.channels.cache.find((ticketChannel) => { - ticketChannel.name === `${supportbot.TicketPrefix}${ticketNumberID}`; - }) + await interaction.guild.channels.cache.find( + (ticketChannel) => + ticketChannel.name === `${supportbot.TicketPrefix}${ticketNumberID}` + ) ) { - return await interaction.reply({ embeds: [TicketExists] }); + return await interaction.reply({ + embeds: [TicketExists], + ephemeral: true, + }); } const Staff = await getRole(supportbot.Staff, interaction.guild); const Admin = await getRole(supportbot.Admin, interaction.guild); @@ -186,13 +190,13 @@ module.exports = new Command({ .setColor(supportbot.EmbedColour); if (supportbot.TicketSubject === "embed") { - if (TicketSubject != "No Reason Provided.") { + if (TicketSubject !== "No Reason Provided.") { TicketMessage.addFields({ name: "Reason", value: TicketSubject }); } } if (supportbot.TicketSubject === "description") { - if (TicketSubject != "No Reason Provided.") { + if (TicketSubject !== "No Reason Provided.") { await ticketChannel.setTopic( `Reason: ${TicketSubject} - User ID: ${interaction.user.id} - Ticket: ${ticketChannel.name}` ); @@ -260,7 +264,7 @@ module.exports = new Command({ time: supportbot.Timeout * 60000, }); } catch (e) { - if (e.code == "INTERACTION_COLLECTOR_ERROR") { + if (e.code === "INTERACTION_COLLECTOR_ERROR") { try { TicketData = await JSON.parse( fs.readFileSync("./Data/TicketData.json", "utf8") @@ -298,10 +302,10 @@ module.exports = new Command({ title = supportbot.DepartmentTitle_3; } - ticketChannel.permissionOverwrites.edit(role.id, { + await ticketChannel.permissionOverwrites.edit(role.id, { VIEW_CHANNEL: true, }); - ticketChannel.permissionOverwrites.edit(Author.id, { + await ticketChannel.permissionOverwrites.edit(Author.id, { SEND_MESSAGES: true, }); diff --git a/Events/ready.js b/Events/ready.js index f7235dd..396360a 100644 --- a/Events/ready.js +++ b/Events/ready.js @@ -74,7 +74,7 @@ module.exports = new Event("ready", async (client) => { console.log(`\u001b[31m`, `――――――――――――――――――――――――――――――――――――――――――――`); if ( !supportbot.Guild || - (await client.guilds.cache.size) !== 1 || + client.guilds.cache.size !== 1 || (await client.guilds.cache.first().id) !== supportbot.Guild ) { console.log( @@ -203,7 +203,7 @@ module.exports = new Event("ready", async (client) => { ); }) .catch((e) => { - console.log("Raw" + e); + console.log("Raw: " + e); }); }); } From dc660ed94a9361451d5dc28c86a0032173a832d1 Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 4 Feb 2022 17:56:11 -0600 Subject: [PATCH 03/14] Bug Fixes --- Commands/ticket.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Commands/ticket.js b/Commands/ticket.js index c728844..8813bab 100644 --- a/Commands/ticket.js +++ b/Commands/ticket.js @@ -270,7 +270,7 @@ module.exports = new Command({ fs.readFileSync("./Data/TicketData.json", "utf8") ); let ticket = await TicketData.tickets.findIndex( - (t) => t.id == ticketChannel.id + (t) => t.id === ticketChannel.id ); TicketData.tickets[ticket].open = false; fs.writeFileSync( From aa48e28162f35c2e1ba57922990ca567e8146731 Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 4 Feb 2022 20:00:31 -0600 Subject: [PATCH 04/14] Fix Typos --- Configs/supportbot.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Configs/supportbot.yml b/Configs/supportbot.yml index 3795178..20ea2f9 100644 --- a/Configs/supportbot.yml +++ b/Configs/supportbot.yml @@ -97,12 +97,12 @@ TicketBlackListMessage: "You are not allowed to open a ticket" MaxAllowedTickets: 2 TicketSubject: "description" -# "description" will displays the ticket reason within the channel description -# "embed" will displays the ticket reason within the ticket embed +# "description" will display the ticket reason within the channel description +# "embed" will display the ticket reason within the ticket embed AllowTicketMentions: true # Set to true to allow the ticket to mention the author and the support team. -# Set to false to dis-allow mentions within tickets. +# Set false to dis-allow mentions within tickets. # --- Creation Config --- # --- Start --- From 3e066d08ce7a806e6ae32b3e5e0074ea7aa83100 Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 11 Feb 2022 23:34:38 -0600 Subject: [PATCH 05/14] New Departments --- Commands/ticket.js | 120 ++++++++++++++++++++--------------------- Configs/supportbot.yml | 42 +++++++-------- Events/ready.js | 41 ++++++++------ 3 files changed, 104 insertions(+), 99 deletions(-) diff --git a/Commands/ticket.js b/Commands/ticket.js index 8813bab..897650e 100644 --- a/Commands/ticket.js +++ b/Commands/ticket.js @@ -31,6 +31,13 @@ module.exports = new Command({ permissions: ["SEND_MESSAGES"], async run(interaction) { + let disableCommand = true; + if (interaction.isCommand() && disableCommand) + return interaction.reply({ + content: "This command is disabled", + ephemeral: true, + }); + let department = interaction.customId?.split("-")[1] || null; let TicketData = await JSON.parse( fs.readFileSync("./Data/TicketData.json", "utf8") ); @@ -73,8 +80,7 @@ module.exports = new Command({ const TicketExists = new MessageEmbed() .setTitle("Ticket Exists!") - .setDescription(`${supportbot.TicketExists}`) - .setColor(supportbot.WarningColour); + .setDescription(`${supportbot.TicketExists}`); if ( await interaction.guild.channels.cache.find( @@ -89,19 +95,7 @@ module.exports = new Command({ } const Staff = await getRole(supportbot.Staff, interaction.guild); const Admin = await getRole(supportbot.Admin, interaction.guild); - const DeptRole1 = await getRole( - supportbot.DepartmentRole_1, - interaction.guild - ); - const DeptRole2 = await getRole( - supportbot.DepartmentRole_2, - interaction.guild - ); - const DeptRole3 = await getRole( - supportbot.DepartmentRole_3, - interaction.guild - ); - if (!Staff || !Admin || !DeptRole1 || !DeptRole2 || !DeptRole3) + if (!Staff || !Admin) return interaction.reply({ content: "Some roles seem to be missing!\nPlease check for errors when starting the bot.", @@ -109,7 +103,7 @@ module.exports = new Command({ }); const Author = interaction.user; let TicketCategory = await getCategory( - supportbot.TicketCategory, + supportbot.Departments[department].category || supportbot.TicketCategory, interaction.guild ); const ticketChannel = await interaction.guild.channels.create( @@ -133,13 +127,13 @@ module.exports = new Command({ ], } ); - if (supportbot.AllowStaff) { - ticketChannel.permissionOverwrites.edit(Staff.id, { + if (supportbot.AllowAllStaff) { + await ticketChannel.permissionOverwrites.edit(Staff.id, { VIEW_CHANNEL: true, }); } - if (supportbot.TicketDepartments) { - ticketChannel.permissionOverwrites.edit(interaction.user.id, { + if (supportbot.TicketDepartments && !department) { + await ticketChannel.permissionOverwrites.edit(interaction.user.id, { SEND_MESSAGES: false, }); } @@ -203,10 +197,10 @@ module.exports = new Command({ } } - if (supportbot.TicketDepartments) { + if (supportbot.TicketDepartments && !department) { TicketMessage.addFields({ name: "Departments", - value: ` **${supportbot.DepartmentTitle_1}**\n **${supportbot.DepartmentTitle_2}**\n **${supportbot.DepartmentTitle_3}**`, + value: ` **${supportbot.Departments.map((X) => X.title).join("\n")}**`, }); } const CloseButton = new MessageButton() @@ -222,33 +216,16 @@ module.exports = new Command({ .setEmoji(supportbot.TicketLockEmoji); const row2 = new MessageActionRow().addComponents(CloseButton, LockButton); - - if (supportbot.TicketDepartments) { + if (supportbot.TicketDepartments && !department) { try { - const Department1Button = new MessageButton() - .setCustomId("Department1") - .setLabel(supportbot.DepartmentTitle_1) - .setStyle(supportbot.TicketDept1Colour) - .setEmoji(supportbot.TicketDept1Emoji); - - const Department2Button = new MessageButton() - .setCustomId("Department2") - .setLabel(supportbot.DepartmentTitle_2) - .setStyle(supportbot.TicketDept2Colour) - .setEmoji(supportbot.TicketDept2Emoji); - - const Department3Button = new MessageButton() - .setCustomId("Department3") - .setLabel(supportbot.DepartmentTitle_3) - .setStyle(supportbot.TicketDept3Colour) - .setEmoji(supportbot.TicketDept3Emoji); - - const row = new MessageActionRow().addComponents( - Department1Button, - Department2Button, - Department3Button + let buttons = await supportbot.Departments.map((x) => + new MessageButton() + .setCustomId("Department" + supportbot.Departments.indexOf(x)) + .setLabel(x.title) + .setStyle(x.color) + .setEmoji(x.emoji) ); - + const row = new MessageActionRow().addComponents(buttons); const m = await ticketChannel.send({ embeds: [TicketMessage], components: [row], @@ -287,20 +264,9 @@ module.exports = new Command({ return await ticketChannel.delete(); } } - let role; - let title; - if (collector.customId === "Department1") { - role = DeptRole1; - title = supportbot.DepartmentTitle_1; - } - if (collector.customId === "Department2") { - role = DeptRole2; - title = supportbot.DepartmentTitle_2; - } - if (collector.customId === "Department3") { - role = DeptRole3; - title = supportbot.DepartmentTitle_3; - } + let num = collector.customId.split("Department")[1]; + let role = getRole(supportbot.Departments[num].role, interaction.guild); + let title = supportbot.Departments[num].title; await ticketChannel.permissionOverwrites.edit(role.id, { VIEW_CHANNEL: true, @@ -327,7 +293,37 @@ module.exports = new Command({ }); } catch (error) {} } else { - await ticketChannel.send({ embeds: [TicketMessage], components: [row2] }); + await ticketChannel.send({ + embeds: [TicketMessage], + components: [row2], + }); + if (department) { + let role = await getRole( + supportbot.Departments[department].role, + interaction.guild + ); + let title = supportbot.Departments[department].title; + await ticketChannel.permissionOverwrites.edit(role.id, { + VIEW_CHANNEL: true, + }); + let TicketCat = await getCategory( + supportbot.Departments[department].category || + supportbot.TicketCategory, + interaction.guild + ); + await ticketChannel.setParent(TicketCat.id); + await ticketChannel.send({ + embeds: [ + { + description: `> Thank for reaching out to the **${title} Department**. Please provide us information regarding your query.`, + color: supportbot.EmbedColour, + }, + ], + }); + } + if (supportbot.AllowTicketMentions) { + await ticketChannel.send("@here"); + } } }, }); diff --git a/Configs/supportbot.yml b/Configs/supportbot.yml index 20ea2f9..93ca137 100644 --- a/Configs/supportbot.yml +++ b/Configs/supportbot.yml @@ -84,7 +84,7 @@ SuggestionDownvote: "❌" # Tickets Configuration # ------------------------- -TicketCategory: "Tickets" +TicketCategory: "Tickets" # Only for tickets without a category TicketPrefix: "ticket-" # The prefix for ticket channel names TicketLog: "logs" @@ -143,14 +143,6 @@ TicketCloseColour: "DANGER" TicketDeleteColour: "DANGER" TicketLockColour: "PRIMARY" -TicketDept1Colour: "PRIMARY" -TicketDept2Colour: "PRIMARY" -TicketDept3Colour: "PRIMARY" - -TicketDept1Emoji: "1️⃣" -TicketDept2Emoji: "2️⃣" -TicketDept3Emoji: "3️⃣" - TranscriptSavedMessage: "📝 **Transcript Saved!**" TicketLockMessage: "❌ **Ticket Locked!**" TicketDeleteMessage: "⚠ **Ticket Deleting!**" # Tickets deleting after 5 seconds by default. @@ -161,22 +153,28 @@ TicketDeleteMessage: "⚠ **Ticket Deleting!**" # Tickets deleting after 5 secon TicketDepartments: true # Delete the ticket if no department selected. TIME IN MINUTES Timeout: 5 -AllowStaff: true -# If set to false users with the "Staff" role will not be able to view tickets -# without a valid department role set below. +# Set to true to allow all staff to access the ticket +AllowAllStaff: false -# Set to false to allow "Staff" to see tickets whether its a department for them or not. - -DepartmentTitle_1: "General Support" -DepartmentTitle_2: "Billing Support" -DepartmentTitle_3: "Admin Team" -# Ticket department title, This is the title for a ticket department to help users know what is available. - -DepartmentRole_1: "Support" -DepartmentRole_2: "Support" -DepartmentRole_3: "Admin" # Ticket roles are the roles that will be able to gain access to tickets depending on what department has been chosen. +Departments: + - title: "General Support" + role: "Support" + color: "PRIMARY" + emoji: "1️⃣" + category: "Tickets" + - title: "Billing Support" + role: "Support" + color: "PRIMARY" + emoji: "2️⃣" + category: "Billing" + - title: "Admin Team" + role: "Admin" + color: "PRIMARY" + emoji: "3️⃣" + category: "Tickets" + # --- Closing Config --- # --- Start --- diff --git a/Events/ready.js b/Events/ready.js index 396360a..12beb16 100644 --- a/Events/ready.js +++ b/Events/ready.js @@ -39,10 +39,12 @@ module.exports = new Event("ready", async (client) => { `Connected to Discord` ); console.log( - `\u001b[33m`, - `Invite to your server:`, - `\u001b[36m`, - `https://discord.com/api/oauth2/authorize?client_id=` + client.user.id + `&permissions=8&scope=bot%20applications.commands` + `\u001b[33m`, + `Invite to your server:`, + `\u001b[36m`, + `https://discord.com/api/oauth2/authorize?client_id=` + + client.user.id + + `&permissions=8&scope=bot%20applications.commands` ); console.log( `\u001b[33m`, @@ -88,10 +90,10 @@ module.exports = new Event("ready", async (client) => { supportbot.Admin, supportbot.Staff, supportbot.TicketBlackListRole, - supportbot.DepartmentRole_1, - supportbot.DepartmentRole_2, - supportbot.DepartmentRole_3, ]; + if (supportbot.TicketDepartments) { + supportbot.Departments.forEach((department) => roles.push(department.role)); + } if (supportbot.AutoRole) roles.push(supportbot.AutoRole_Role); const channels = [ supportbot.SuggestionChannel, @@ -160,7 +162,7 @@ module.exports = new Event("ready", async (client) => { fs.readFileSync("./Data/ticket-panel-id.json", "utf8") ); - chan1.messages.fetch(panelid.TicketPanelID).catch(async (r) => { + chan1.messages.fetch(panelid.TicketPanelID).catch(async () => { let embed = new Discord.MessageEmbed() .setTitle(`${panelconfig.PanelTitle}`) .setColor(supportbot.SuccessColour) @@ -177,13 +179,22 @@ module.exports = new Event("ready", async (client) => { if (panelconfig.TicketPanel_Image) { embed.setImage(panelconfig.PanelImage); } - - let button = new Discord.MessageButton() - .setLabel(panelconfig.ButtonLabel) - .setCustomId("openticket") - .setStyle(panelconfig.ButtonColour) - .setEmoji(panelconfig.ButtonEmoji); - + let button; + if (supportbot.TicketDepartments) { + button = supportbot.Departments.map((x) => + new Discord.MessageButton() + .setCustomId("department-" + supportbot.Departments.indexOf(x)) + .setLabel(x.title) + .setStyle(x.color) + .setEmoji(x.emoji) + ); + } else { + button = new Discord.MessageButton() + .setLabel(panelconfig.ButtonLabel) + .setCustomId("openticket") + .setStyle(panelconfig.ButtonColour) + .setEmoji(panelconfig.ButtonEmoji); + } let row = new Discord.MessageActionRow().addComponents(button); await chan1 From 9b6263e58387f11d77b75129178616e3fe79747f Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 11 Feb 2022 23:41:02 -0600 Subject: [PATCH 06/14] Fix DM help menu --- Commands/help.js | 2 +- package-lock.json | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Commands/help.js b/Commands/help.js index b913320..d13c205 100644 --- a/Commands/help.js +++ b/Commands/help.js @@ -72,7 +72,7 @@ module.exports = new Command({ } if (supportbot.SendHelpPage === "dm") { - interaction.user.reply({ + interaction.user.send({ embeds: [HelpEmbed1], }); } diff --git a/package-lock.json b/package-lock.json index 97c748d..bebc07d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,9 +59,9 @@ } }, "node_modules/@types/node": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz", - "integrity": "sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw==" + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==" }, "node_modules/@types/node-fetch": { "version": "2.5.12", @@ -242,9 +242,9 @@ } }, "node_modules/ws": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", - "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "engines": { "node": ">=10.0.0" }, @@ -299,9 +299,9 @@ "integrity": "sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ==" }, "@types/node": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz", - "integrity": "sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw==" + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==" }, "@types/node-fetch": { "version": "2.5.12", @@ -445,9 +445,9 @@ } }, "ws": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", - "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "requires": {} }, "zod": { From 3aa373c33c14865a66f9c64bab5023d92e437f47 Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 11 Feb 2022 23:47:06 -0600 Subject: [PATCH 07/14] fix bad code --- Commands/add.js | 2 +- Commands/close.js | 2 +- Commands/remove.js | 2 +- Commands/suggest.js | 2 +- Commands/ticket.js | 2 +- Events/interactionCreate.js | 8 ++++---- Events/ready.js | 4 ++-- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Commands/add.js b/Commands/add.js index acce3f2..4108225 100644 --- a/Commands/add.js +++ b/Commands/add.js @@ -56,7 +56,7 @@ module.exports = new Command({ if (ticket === -1) { const Exists = new Discord.MessageEmbed() .setTitle("No Ticket Found!") - .setDescription(`${supportbot.NoValidTicket}`) + .setDescription(supportbot.NoValidTicket) .setColor(supportbot.WarningColour); return interaction.reply({ embeds: [Exists] }); } diff --git a/Commands/close.js b/Commands/close.js index 8f6d29a..7f0a9b2 100644 --- a/Commands/close.js +++ b/Commands/close.js @@ -57,7 +57,7 @@ module.exports = new Command({ if (TicketData === -1) { const Exists = new Discord.MessageEmbed() .setTitle("No Ticket Found!") - .setDescription(`${supportbot.NoValidTicket}`) + .setDescription(supportbot.NoValidTicket) .setColor(supportbot.WarningColour); return interaction.followUp({ embeds: [Exists] }); } diff --git a/Commands/remove.js b/Commands/remove.js index 1abf2cf..9f5b732 100644 --- a/Commands/remove.js +++ b/Commands/remove.js @@ -55,7 +55,7 @@ module.exports = new Command({ if (ticket === -1) { const Exists = new Discord.MessageEmbed() .setTitle("No Ticket Found!") - .setDescription(`${supportbot.NoValidTicket}`) + .setDescription(supportbot.NoValidTicket) .setColor(supportbot.WarningColour); return interaction.reply({ embeds: [Exists] }); } diff --git a/Commands/suggest.js b/Commands/suggest.js index e3363c1..381929a 100644 --- a/Commands/suggest.js +++ b/Commands/suggest.js @@ -34,7 +34,7 @@ module.exports = new Command({ const NoChannel = new Discord.MessageEmbed() .setTitle("Missing Channel!") - .setDescription(`${supportbot.InvalidChannel}`) + .setDescription(supportbot.InvalidChannel) .setColor(supportbot.ErrorColour); if (!suggestChannel) return interaction.reply({ embeds: [NoChannel] }); diff --git a/Commands/ticket.js b/Commands/ticket.js index 897650e..a14655f 100644 --- a/Commands/ticket.js +++ b/Commands/ticket.js @@ -80,7 +80,7 @@ module.exports = new Command({ const TicketExists = new MessageEmbed() .setTitle("Ticket Exists!") - .setDescription(`${supportbot.TicketExists}`); + .setDescription(supportbot.TicketExists); if ( await interaction.guild.channels.cache.find( diff --git a/Events/interactionCreate.js b/Events/interactionCreate.js index 49a2ea8..0a20e94 100644 --- a/Events/interactionCreate.js +++ b/Events/interactionCreate.js @@ -67,7 +67,7 @@ module.exports = new Event("interactionCreate", async (client, interaction) => { } } if (interaction.customId === "ticketlock") { - if (interaction.channel.name.startsWith(`${supportbot.TicketPrefix}`)) { + if (interaction.channel.name.startsWith(supportbot.TicketPrefix)) { interaction.message.fetch(); let Admin = interaction.guild.roles.cache.find( @@ -86,10 +86,10 @@ module.exports = new Event("interactionCreate", async (client, interaction) => { let parent = interaction.guild.channels.cache.find( - (c) => c.name === `${supportbot.LockTicketCategory}` + (c) => c.name === supportbot.LockTicketCategory ) || interaction.guild.channels.cache.find( - (c) => c.id === `${supportbot.LockTicketCategory}` + (c) => c.id === supportbot.LockTicketCategory ); if (parent) { await interaction.channel.setParent(parent.id); @@ -121,7 +121,7 @@ module.exports = new Event("interactionCreate", async (client, interaction) => { const ArchiveEmbed = new Discord.MessageEmbed() .setTitle("Archived") .setDescription(`Archived ${interaction.channel.name}`) - .setColor(`${supportbot.SuccessColour}`); + .setColor(supportbot.SuccessColour); interaction.reply({ embeds: [ArchiveEmbed] }); interaction.message.edit({ components: [row] }); diff --git a/Events/ready.js b/Events/ready.js index 12beb16..2777d2c 100644 --- a/Events/ready.js +++ b/Events/ready.js @@ -164,7 +164,7 @@ module.exports = new Event("ready", async (client) => { chan1.messages.fetch(panelid.TicketPanelID).catch(async () => { let embed = new Discord.MessageEmbed() - .setTitle(`${panelconfig.PanelTitle}`) + .setTitle(panelconfig.PanelTitle) .setColor(supportbot.SuccessColour) .setFooter(supportbot.EmbedFooter); @@ -205,7 +205,7 @@ module.exports = new Event("ready", async (client) => { .then((r) => { let data = { id: panelid.id, - TicketPanelID: `${r.id}`, + TicketPanelID: r.id, }; fs.writeFileSync( "./Data/ticket-panel-id.json", From 8b3f2bc61af8c3a583e52c25ae4a72e9171271b2 Mon Sep 17 00:00:00 2001 From: Noah Date: Thu, 17 Feb 2022 19:57:11 -0600 Subject: [PATCH 08/14] Fix missing user or subuser --- Commands/close.js | 15 +++++++++++---- Commands/ticket.js | 7 +++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Commands/close.js b/Commands/close.js index 7f0a9b2..d5f85ec 100644 --- a/Commands/close.js +++ b/Commands/close.js @@ -108,7 +108,12 @@ module.exports = new Command({ "Ticket", `${interaction.channel.name} (${interaction.channel.id})` ) - .addField("User", `${tUser}#${tUser.discriminator} (${tUser.id})`) + .addField( + "User", + `${tUser?.username || "N/A"}#${tUser?.discriminator || "N/A"} (${ + tUser?.id || ticket.user + })` + ) .addField("Closed By", interaction.user.tag) .addField("Reason", reason); const logEmbed = new Discord.MessageEmbed() @@ -121,7 +126,9 @@ module.exports = new Command({ ) .addField( "User", - `${tUser.username}#${tUser.discriminator} (${tUser.id})` + `${tUser?.username || "N/A"}#${tUser?.discriminator || "N/A"} (${ + tUser?.id || ticket.user + })` ) .addField("Closed By", interaction.user.tag) .addField("Reason", reason); @@ -156,7 +163,7 @@ module.exports = new Command({ console.error(err); }); await tUser - .send({ embeds: [transcriptEmbed], files: [file] }) + ?.send({ embeds: [transcriptEmbed], files: [file] }) .catch(async (err) => { console.error(err); }); @@ -164,7 +171,7 @@ module.exports = new Command({ ticket.subUsers.forEach(async (subUser) => { await interaction.client.users.cache .get(subUser) - .send({ embeds: [transcriptEmbed], files: [file] }); + ?.send({ embeds: [transcriptEmbed], files: [file] }); }); } await interaction.channel.delete().catch(async (error) => { diff --git a/Commands/ticket.js b/Commands/ticket.js index a14655f..ae5f358 100644 --- a/Commands/ticket.js +++ b/Commands/ticket.js @@ -101,7 +101,6 @@ module.exports = new Command({ "Some roles seem to be missing!\nPlease check for errors when starting the bot.", ephemeral: true, }); - const Author = interaction.user; let TicketCategory = await getCategory( supportbot.Departments[department].category || supportbot.TicketCategory, interaction.guild @@ -117,7 +116,7 @@ module.exports = new Command({ allow: [Permissions.FLAGS.VIEW_CHANNEL], }, { - id: Author.id, + id: interaction.user.id, allow: [Permissions.FLAGS.VIEW_CHANNEL], }, { @@ -140,7 +139,7 @@ module.exports = new Command({ await TicketData.tickets.push({ id: ticketChannel.id, name: ticketChannel.name, - user: Author.id, + user: interaction.user.id, number: ticketNumberID, reason: TicketSubject, open: true, @@ -271,7 +270,7 @@ module.exports = new Command({ await ticketChannel.permissionOverwrites.edit(role.id, { VIEW_CHANNEL: true, }); - await ticketChannel.permissionOverwrites.edit(Author.id, { + await ticketChannel.permissionOverwrites.edit(interaction.user.id, { SEND_MESSAGES: true, }); From 473bacf13af513e6d9102222b2e2c00bd2f739f3 Mon Sep 17 00:00:00 2001 From: Noah Date: Thu, 17 Feb 2022 19:57:37 -0600 Subject: [PATCH 09/14] Removed Guild --- Configs/supportbot.yml | 2 -- Events/ready.js | 8 ++------ Structures/Client.js | 2 +- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/Configs/supportbot.yml b/Configs/supportbot.yml index 93ca137..ed3937c 100644 --- a/Configs/supportbot.yml +++ b/Configs/supportbot.yml @@ -18,8 +18,6 @@ SupportBot_Version: "7.4.2" Name: "SupportBot" Token: "BOT_TOKEN" -# Guild ID Ex: 123456789123456789 -Guild: "" # ------------------------- # Activity Configuration diff --git a/Events/ready.js b/Events/ready.js index 2777d2c..363fada 100644 --- a/Events/ready.js +++ b/Events/ready.js @@ -74,14 +74,10 @@ module.exports = new Event("ready", async (client) => { console.log(`\u001b[37m`, `SupportBot proudly created by Emerald Services`); console.log(` `); console.log(`\u001b[31m`, `――――――――――――――――――――――――――――――――――――――――――――`); - if ( - !supportbot.Guild || - client.guilds.cache.size !== 1 || - (await client.guilds.cache.first().id) !== supportbot.Guild - ) { + if (client.guilds.cache.size !== 1) { console.log( `\u001b[31m`, - `${client.user.username} is not in the correct server set in your config. Please join the server and restart the bot.` + `${client.user.username} must be in only 1 server. Please join this server, leave any others, and restart the bot.` ); console.log(`\u001b[31m`, `${client.user.username} will now exit.`); return process.exit(1); diff --git a/Structures/Client.js b/Structures/Client.js index 08520d3..5223546 100644 --- a/Structures/Client.js +++ b/Structures/Client.js @@ -89,7 +89,7 @@ class Client extends Discord.Client { // Slash Commands this.once("ready", async () => { - await this.application?.commands.set(this.commands, supportbot.Guild); + await this.guilds.cache.first()?.commands.set(this.commands); console.log( `\u001b[32;1m`, `Slash Commands Registered for ${this.guilds.cache.first().name}` From 2003f8801a32d7584b3e0af190513b77f57b6f47 Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 25 Feb 2022 21:51:22 -0600 Subject: [PATCH 10/14] Fixed ticket perms --- Commands/ticket.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Commands/ticket.js b/Commands/ticket.js index ae5f358..7c82468 100644 --- a/Commands/ticket.js +++ b/Commands/ticket.js @@ -310,7 +310,7 @@ module.exports = new Command({ supportbot.TicketCategory, interaction.guild ); - await ticketChannel.setParent(TicketCat.id); + await ticketChannel.setParent(TicketCat.id, { lockPermissions: false }); await ticketChannel.send({ embeds: [ { From 026caba68ace4d0243d2014b13feff2bf12d15a6 Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 25 Feb 2022 21:55:33 -0600 Subject: [PATCH 11/14] Fix setFooters --- Commands/close.js | 10 ++++++++-- Commands/help.js | 5 ++++- Commands/suggest.js | 5 ++++- Events/ready.js | 5 ++++- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Commands/close.js b/Commands/close.js index d5f85ec..83fd8ef 100644 --- a/Commands/close.js +++ b/Commands/close.js @@ -103,7 +103,10 @@ module.exports = new Command({ const transcriptEmbed = new Discord.MessageEmbed() .setTitle(supportbot.TranscriptTitle) .setColor(supportbot.EmbedColour) - .setFooter(supportbot.EmbedFooter) + .setFooter({ + text: supportbot.EmbedFooter, + iconURL: interaction.user.displayAvatarURL(), + }) .addField( "Ticket", `${interaction.channel.name} (${interaction.channel.id})` @@ -119,7 +122,10 @@ module.exports = new Command({ const logEmbed = new Discord.MessageEmbed() .setTitle(supportbot.TicketLog_Title) .setColor(supportbot.EmbedColour) - .setFooter(supportbot.EmbedFooter) + .setFooter({ + text: supportbot.EmbedFooter, + iconURL: interaction.user.displayAvatarURL(), + }) .addField( "Ticket", `${interaction.channel.name} (${interaction.channel.id})` diff --git a/Commands/help.js b/Commands/help.js index d13c205..c8d4d13 100644 --- a/Commands/help.js +++ b/Commands/help.js @@ -58,7 +58,10 @@ module.exports = new Command({ ) .setColor(supportbot.EmbedColour) - .setFooter(supportbot.EmbedFooter, interaction.user.displayAvatarURL()); + .setFooter({ + text: supportbot.EmbedFooter, + iconURL: interaction.user.displayAvatarURL(), + }); if ( interaction.member.roles.cache.has(SupportStaff.id) || diff --git a/Commands/suggest.js b/Commands/suggest.js index 381929a..7e37b13 100644 --- a/Commands/suggest.js +++ b/Commands/suggest.js @@ -45,7 +45,10 @@ module.exports = new Command({ .addField("Suggestion", suggestion, true) .addField("From", `<@${interaction.user.id}>`) .setThumbnail(interaction.user.displayAvatarURL()) - .setFooter(supportbot.EmbedFooter, interaction.user.displayAvatarURL()) + .setFooter({ + text: supportbot.EmbedFooter, + iconURL: interaction.user.displayAvatarURL(), + }) .setColor(supportbot.EmbedColour); const suggestionMsg = await suggestChannel.send({ embeds: [SuggestEmbed] }); diff --git a/Events/ready.js b/Events/ready.js index 363fada..2550984 100644 --- a/Events/ready.js +++ b/Events/ready.js @@ -162,7 +162,10 @@ module.exports = new Event("ready", async (client) => { let embed = new Discord.MessageEmbed() .setTitle(panelconfig.PanelTitle) .setColor(supportbot.SuccessColour) - .setFooter(supportbot.EmbedFooter); + .setFooter({ + text: supportbot.EmbedFooter, + iconURL: interaction.user.displayAvatarURL(), + }); if (panelconfig.TicketPanel_Description) { embed.setDescription(panelconfig.PanelMessage); From b37118fee290548bdbd76a993d1f4e04b1ba6caf Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 25 Feb 2022 21:57:54 -0600 Subject: [PATCH 12/14] Fix addon handler --- Structures/Client.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Structures/Client.js b/Structures/Client.js index 5223546..706a6af 100644 --- a/Structures/Client.js +++ b/Structures/Client.js @@ -76,10 +76,10 @@ class Client extends Discord.Client { `\u001b[32;1m`, "Loaded" ); - addon.commands.forEach((command) => { + addon.commands?.forEach((command) => { this.commands.set(command.name, command); }); - addon.events.forEach((event) => { + addon.events?.forEach((event) => { this.on(event.event, (...args) => event.run(this, ...args)); }); }); From 4eb8658459f1d7d72ebe8d62f3dfdf62cb033ae8 Mon Sep 17 00:00:00 2001 From: Xiled Emerald Date: Sun, 27 Feb 2022 00:39:36 +0000 Subject: [PATCH 13/14] Update supportbot.yml --- Configs/supportbot.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Configs/supportbot.yml b/Configs/supportbot.yml index ed3937c..ec52303 100644 --- a/Configs/supportbot.yml +++ b/Configs/supportbot.yml @@ -88,6 +88,7 @@ TicketPrefix: "ticket-" # The prefix for ticket channel names TicketLog: "logs" TranscriptLog: "transcripts" +DMTranscripts: true TranscriptTitle: "Ticket Transcript" TicketLog_Title: "Ticket Closed" TicketBlackListMessage: "You are not allowed to open a ticket" From 45bd88e4d2887f2bb20ffe6ff1173d0876c90f9f Mon Sep 17 00:00:00 2001 From: ItzEmerald Date: Sun, 27 Feb 2022 04:30:15 +0000 Subject: [PATCH 14/14] 7.5 commit --- Commands/close.js | 8 ++++++- Commands/embed.js | 46 ++++++++++++++++++++++++++++++++++++++- Configs/supportbot.yml | 4 ++-- Data/ticket-panel-id.json | 5 +---- Events/guildMemberAdd.js | 32 +++++++++++++++++++++++++++ Events/ready.js | 2 +- 6 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 Events/guildMemberAdd.js diff --git a/Commands/close.js b/Commands/close.js index 83fd8ef..620cb7a 100644 --- a/Commands/close.js +++ b/Commands/close.js @@ -168,7 +168,10 @@ module.exports = new Command({ .catch(async (err) => { console.error(err); }); - await tUser + + if (supportbot.DMTranscripts) { + + await tUser ?.send({ embeds: [transcriptEmbed], files: [file] }) .catch(async (err) => { console.error(err); @@ -180,6 +183,9 @@ module.exports = new Command({ ?.send({ embeds: [transcriptEmbed], files: [file] }); }); } + + } + await interaction.channel.delete().catch(async (error) => { console.error(error); if (error.code !== Discord.Constants.APIErrors.UNKNOWN_CHANNEL) { diff --git a/Commands/embed.js b/Commands/embed.js index 2ad25b2..3926ca6 100644 --- a/Commands/embed.js +++ b/Commands/embed.js @@ -29,6 +29,41 @@ module.exports = new Command({ type: "STRING", required: true, }, + + { + name: "color", + description: "Embed HEX Color", + type: "STRING", + required: false, + }, + + { + name: "fieldtitle", + description: "Add an additional Embed Field", + type: "STRING", + required: false, + }, + + { + name: "fieldcontent", + description: "Add an additional Embed Field", + type: "STRING", + required: false, + }, + + { + name: "thumbnail", + description: "Embed Thumbnail URL", + type: "STRING", + required: false, + }, + + { + name: "image", + description: "Embed Image URL", + type: "STRING", + required: false, + }, ], permissions: ["SEND_MESSAGES"], @@ -54,10 +89,19 @@ module.exports = new Command({ ) { const EmbedTitle = interaction.options.getString("title"); const EmbedSubject = interaction.options.getString("message"); + const EmbedColour = interaction.options.getString("color"); + const EmbedThumbnail = interaction.options.getString("thumbnail"); + const EmbedImage = interaction.options.getString("image"); + const EmbedFieldContent = interaction.options.getString("fieldcontent"); + const EmbedFieldTitle = interaction.options.getString("fieldtitle"); const EmbedMsg = new Discord.MessageEmbed() .setTitle(EmbedTitle) - .setDescription(EmbedSubject); + .setDescription(EmbedSubject) + .addField(EmbedFieldTitle, EmbedFieldContent) + .setColor(EmbedColour) + .setThumbnail(EmbedThumbnail) + .setImage(EmbedImage); interaction.reply({ embeds: [EmbedMsg], diff --git a/Configs/supportbot.yml b/Configs/supportbot.yml index ec52303..63a8287 100644 --- a/Configs/supportbot.yml +++ b/Configs/supportbot.yml @@ -10,7 +10,7 @@ # Discord Support: https://emeraldsrv.dev/discord # Community Resources: https://emeraldsrv.dev/resources -SupportBot_Version: "7.4.2" +SupportBot_Version: "7.5" # ------------------------- # General Configuration @@ -85,7 +85,7 @@ SuggestionDownvote: "❌" TicketCategory: "Tickets" # Only for tickets without a category TicketPrefix: "ticket-" # The prefix for ticket channel names -TicketLog: "logs" +TicketLog: "ticket-logs" TranscriptLog: "transcripts" DMTranscripts: true diff --git a/Data/ticket-panel-id.json b/Data/ticket-panel-id.json index feb5b04..6bd01c2 100644 --- a/Data/ticket-panel-id.json +++ b/Data/ticket-panel-id.json @@ -1,4 +1 @@ -{ - "id": 0, - "TicketPanelID": "" -} +{"id":0,"TicketPanelID":"947337678720999458"} \ No newline at end of file diff --git a/Events/guildMemberAdd.js b/Events/guildMemberAdd.js new file mode 100644 index 0000000..f2767ee --- /dev/null +++ b/Events/guildMemberAdd.js @@ -0,0 +1,32 @@ + +const Discord = require('discord.js'); +const fs = require("fs"); +const Event = require("../Structures/Event.js"); +const yaml = require("js-yaml"); +const supportbot = yaml.load( + fs.readFileSync("./Configs/supportbot.yml", "utf8") +); + +module.exports = new Event("guildMemberAdd", async (client, member, interaction, guild) => { + + const WelcomeChannel = interaction.guild.channels.get(supportbot.WelcomeChannel) + + const WelcomeEmbed = new Discord.MessageEmbed() + .setColor(supportbot.WelcomeColour) + .setTitle(supportbot.WelcomeTitle) + .setDescription(supportbot.WelcomeMessage.replace(/%joined_user%/g, member.user)) + .setThumbnail(member.user.displayAvatarURL()) + .setTimestamp(); + + member.guild.channels.cache.get( + supportbot.WelcomeChannel).send({ + embeds: [WelcomeEmbed] + + }) + + + const WelcomeMsg = await WelcomeChannel.send({ + embeds: [WelcomeEmbed] + }); + +}); diff --git a/Events/ready.js b/Events/ready.js index 2550984..e154785 100644 --- a/Events/ready.js +++ b/Events/ready.js @@ -14,7 +14,7 @@ const panelconfig = yaml.load( const Event = require("../Structures/Event.js"); -module.exports = new Event("ready", async (client) => { +module.exports = new Event("ready", async (client, interaction) => { const { getRole, getChannel, getCategory } = client; client.user.setActivity(supportbot.BotActivity, { type: supportbot.ActivityType,