From c1ba677b82d3427976bcebaf4894a468a34d01dd Mon Sep 17 00:00:00 2001 From: DJj123dj <80536295+DJj123dj@users.noreply.github.com> Date: Mon, 25 Jul 2022 20:09:52 +0200 Subject: [PATCH] v2.3.3 --- README.md | 6 ++-- commands/add.js | 4 +-- commands/delete.js | 4 +-- commands/remove.js | 4 +-- commands/rename.js | 4 +-- commands/ticket.js | 4 +-- config.json | 2 +- core/api/api docs.md | 56 ++++++++++++++++++++++++++++++++++++++ core/api/api.json | 3 ++ core/api/modules/base.js | 26 ++++++++++++++++++ core/api/modules/custom.js | 9 ++++++ core/api/modules/events.js | 55 +++++++++++++++++++++++++++++++++++++ core/closebuttons.js | 46 +++++++++++++++++++++++-------- core/errorLogSystem.js | 10 +++++-- core/ticketCloser.js | 31 +++++++++++++++------ core/ticketOpener.js | 2 ++ package.json | 2 +- 17 files changed, 231 insertions(+), 37 deletions(-) create mode 100644 core/api/api docs.md create mode 100644 core/api/api.json create mode 100644 core/api/modules/base.js create mode 100644 core/api/modules/custom.js create mode 100644 core/api/modules/events.js diff --git a/README.md b/README.md index 014ec09..ef34e4c 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ make a ticket in our server to start! *if you translate, you will come in the credits* # open-ticket -[![discord](https://img.shields.io/badge/discord-join%20our%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![version](https://img.shields.io/badge/version-2.3.2%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v2.3.2) [![npm](https://img.shields.io/badge/npm-external%20libraries%20needed-CB3837.svg?style=flat-square&logo=npm)](#packages) [![license](https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) +[![discord](https://img.shields.io/badge/discord-join%20our%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![version](https://img.shields.io/badge/version-2.4.0%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v2.4.0) [![npm](https://img.shields.io/badge/npm-external%20libraries%20needed-CB3837.svg?style=flat-square&logo=npm)](#packages) [![license](https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) This is an open-source discord ticket bot, you can configure it and it comes with cool features like transcripts & custom options! @@ -62,7 +62,7 @@ if there are any errors, you can open an **issue on github** or **contact me in ### config Our config documentation is moved to another file: -[click here to view](https://www.github.com/DJj123dj/open-ticket/wiki/config-v2.3.2) +[click here to view](https://www.github.com/DJj123dj/open-ticket/wiki/config-v2.4.0) ### intents & permissions In the discord developer portal in the "bot" panel you will find 3 switches under the title "Gateaway Intents". The following switches should always be turned on @@ -74,7 +74,7 @@ You can also configure your own permissions ## information -_v2.3.2 stable_ +_v2.4.0 stable_ changelog: [click here](https://www.github.com/DJj123dj/open-ticket/wiki/Changelog) diff --git a/commands/add.js b/commands/add.js index 08d9fb3..350e892 100644 --- a/commands/add.js +++ b/commands/add.js @@ -11,7 +11,7 @@ module.exports = () => { var user = msg.mentions.users.first() if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"add `")]}) - if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ + if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ try { return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) }catch{ @@ -40,7 +40,7 @@ module.exports = () => { const user = interaction.options.getUser("user") const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) return } diff --git a/commands/delete.js b/commands/delete.js index 91e5bfa..12e70fe 100644 --- a/commands/delete.js +++ b/commands/delete.js @@ -9,7 +9,7 @@ module.exports = () => { client.on("messageCreate",msg => { if (!msg.content.startsWith(config.prefix+"delete")) return - if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ + if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ try { return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) }catch{ @@ -45,7 +45,7 @@ module.exports = () => { if (interaction.commandName != "delete") return const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) return } diff --git a/commands/remove.js b/commands/remove.js index 002e29d..3caec34 100644 --- a/commands/remove.js +++ b/commands/remove.js @@ -11,7 +11,7 @@ module.exports = () => { var user = msg.mentions.users.first() if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"remove `")]}) - if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ + if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ try { return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) }catch{ @@ -41,7 +41,7 @@ module.exports = () => { const user = interaction.options.getUser("user") const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) return } diff --git a/commands/rename.js b/commands/rename.js index 45bc168..46c6076 100644 --- a/commands/rename.js +++ b/commands/rename.js @@ -14,7 +14,7 @@ module.exports = () => { if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) - if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ + if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ try { return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) }catch{ @@ -58,7 +58,7 @@ module.exports = () => { if (firstmsg == undefined || firstmsg.author.id != client.user.id)return interaction.reply({embeds:[bot.errorLog.notInATicket]}) const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) return } diff --git a/commands/ticket.js b/commands/ticket.js index 530e0f5..94f9ee6 100644 --- a/commands/ticket.js +++ b/commands/ticket.js @@ -16,7 +16,7 @@ module.exports = () => { client.on("messageCreate", msg => { if (msg.content.startsWith(config.prefix+"msg"||config.prefix+"message")){ - if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ + if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ try { return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) }catch{ @@ -43,7 +43,7 @@ module.exports = () => { if (interaction.commandName != "message") return const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) return } diff --git a/config.json b/config.json index 5cc3bb5..9dd5158 100644 --- a/config.json +++ b/config.json @@ -79,7 +79,7 @@ "name":"Choose Your Ticket", "description":"You can click one of the buttons below!", "enableFooter":false, - "footer":"Open Ticket v2.3.2 - I'm a footer!", + "footer":"Open Ticket v2.4.0 - I'm a footer!", "enableThumbnail":false, "thumbnail":"https://www.example.com/catmemes/cat.png", "color":"#ffffff", diff --git a/core/api/api docs.md b/core/api/api docs.md new file mode 100644 index 0000000..c8b0832 --- /dev/null +++ b/core/api/api docs.md @@ -0,0 +1,56 @@ +# OT-API Documentation +Extend open ticket with your own features! + +The api is made for EXTENDING open ticket, not replacing! So with this api you are not able to replace existing features! You can only add your own features! + +### DISCLAIMER: +Only edit or extend the code when you know what you are doing! + +If open ticket crashes while you change the code, then we can't help you! + +**DO IT ON YOUR OWN RISK!** + +## Events: +Everything in the `events.js` file! + +### onTicketOpen(...) +This function is executed when a new ticket is created. It happens after everything else is done, so the channel is already created! + +Parameters: +- user: `discord.User` +- channel: `discord.TextChannel` +- guild: `discord.Guild` +- date: `Date` +- ticketdata: `OT TicketData` or `false` (more info further down this document) + +### onTicketClose(...) +This function is executed when a ticket gets closed, it can happen multiple times with one ticket (because of reopen). + +Parameters: +- user: `discord.User` +- channel: `discord.TextChannel` +- guild: `discord.Guild` +- date: `Date` +- ticketdata: `OT TicketData` or `false` (more info further down this document) + +### onTicketDelete(...) +This function is executed when a ticket gets deleted, it can happen only 1 time. + +Parameters: +- user: `discord.User` +- channel: `discord.TextChannel` +- guild: `discord.Guild` +- date: `Date` +- ticketdata: `OT TicketData` or `false` (more info further down this document) + +### onTicketReopen(...) +... + +### onTranscriptCreation(...) +... + +### onCommand(...) +... + +### onReactionRole(...) +... \ No newline at end of file diff --git a/core/api/api.json b/core/api/api.json new file mode 100644 index 0000000..ea2feef --- /dev/null +++ b/core/api/api.json @@ -0,0 +1,3 @@ +{ + "version":"1.0.0" +} \ No newline at end of file diff --git a/core/api/modules/base.js b/core/api/modules/base.js new file mode 100644 index 0000000..1da67c2 --- /dev/null +++ b/core/api/modules/base.js @@ -0,0 +1,26 @@ +const discord = require('discord.js') +const bot = require("../../../index") +const client = bot.client +const config = bot.config +const log = bot.errorLog.log +const l = bot.language +const storage = bot.storage + +/** FOR DEVELOPERS ONLY!! + * Don't change anything in this file, read the api documentation first! + * look into "api docs.md" for the docs! + */ + +//used when creating plugins! +exports.enableApiLogs = false + +//this is used when embedding open ticket into another bot +exports.embeddedMode = false +exports.clientLocation = require("../../../index").client + +/** !! WARNING !! + * Only edit or extend the code when you know what you are doing! + * If open ticket crashes while you change the code, then we can't help you! + * + * DO IT ON YOUR OWN RISK! + */ \ No newline at end of file diff --git a/core/api/modules/custom.js b/core/api/modules/custom.js new file mode 100644 index 0000000..1ef099d --- /dev/null +++ b/core/api/modules/custom.js @@ -0,0 +1,9 @@ +const discord = require("discord.js") +const client = require("../../../index").client + +module.exports = () => { + //this code will run when the bot starts! + + + +} \ No newline at end of file diff --git a/core/api/modules/events.js b/core/api/modules/events.js new file mode 100644 index 0000000..14601f2 --- /dev/null +++ b/core/api/modules/events.js @@ -0,0 +1,55 @@ +const discord = require('discord.js') +const bot = require('../../../index') +const client = bot.client +const config = bot.config +const log = bot.errorLog.log +const l = bot.language +const storage = bot.storage + +/** + * + * @param {discord.User} user + * @param {discord.TextChannel} channel + * @param {discord.Guild} guild + * @param {Date} date + * @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata + */ +exports.onTicketOpen = (user,channel,guild,date,ticketdata) => { + //system + bot.errorLog.log("api","new ticket created",[{key:"userid",value:user.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}]) + + //custom code + +} + +/** + * + * @param {discord.User} user + * @param {discord.TextChannel} channel + * @param {discord.Guild} guild + * @param {Date} date + * @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata + */ +exports.onTicketClose = (user,channel,guild,date,ticketdata) => { + //system + bot.errorLog.log("api","ticket closed",[{key:"userid",value:user.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}]) + + //custom code + +} + +/** + * + * @param {discord.User} user + * @param {discord.TextChannel} channel + * @param {discord.Guild} guild + * @param {Date} date + * @param {{name:String,status:"open"|"closed"|"deleted"|"reopened",ticketOptions:Object|false}} ticketdata + */ +exports.onTicketDelete = (user,channel,guild,date,ticketdata) => { + //system + bot.errorLog.log("api","ticket deleted",[{key:"userid",value:user.id},{key:"channelid",value:channel.id},{key:"guildid",value:guild.id},{key:"ticketdata",value:JSON.stringify(ticketdata)}]) + + //custom code + +} \ No newline at end of file diff --git a/core/closebuttons.js b/core/closebuttons.js index c48dd52..c7ae7f7 100644 --- a/core/closebuttons.js +++ b/core/closebuttons.js @@ -131,15 +131,20 @@ module.exports = () => { interaction.deferUpdate() interaction.message.edit({components:[closeRowNormal]}) }) - client.on("interactionCreate",interaction => { + + var closeTicketButtonChecker = false + client.on("interactionCreate",async interaction => { if (!interaction.isButton()) return if (interaction.customId != "closeTicketTrue") return interaction.deferUpdate() + if (closeTicketButtonChecker == true) return + closeTicketButtonChecker = true + if (config.system.closeMode == "adminonly"){ const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ try { return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) }catch{ @@ -162,18 +167,23 @@ module.exports = () => { } }) - require("./ticketCloser").closeTicket(interaction,prefix,"close") + await require("./ticketCloser").closeTicket(interaction,prefix,"close") + closeTicketButtonChecker = false }) - client.on("interactionCreate",interaction => { + var closeTicket1ButtonChecker = false + client.on("interactionCreate",async interaction => { if (!interaction.isButton()) return if (interaction.customId != "closeTicketTrue1") return interaction.deferUpdate() + if (closeTicket1ButtonChecker == true) return + closeTicket1ButtonChecker = true + if (config.system.closeMode == "adminonly"){ const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ try { return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]}) }catch{ @@ -208,7 +218,8 @@ module.exports = () => { } }) - require("./ticketCloser").closeTicket(interaction,prefix,"close") + await require("./ticketCloser").closeTicket(interaction,prefix,"close") + closeTicket1ButtonChecker = false }) @@ -228,14 +239,18 @@ module.exports = () => { interaction.deferUpdate() interaction.message.edit({components:[closeRowNormal]}) }) - client.on("interactionCreate",interaction => { + var deleteTicketButtonChecker = false + client.on("interactionCreate",async interaction => { if (!interaction.isButton()) return if (interaction.customId != "deleteTicketTrue") return interaction.deferUpdate() + if (deleteTicketButtonChecker == true) return + deleteTicketButtonChecker = true + const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ try { return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]}) }catch{ @@ -255,7 +270,8 @@ module.exports = () => { } }) - require("./ticketCloser").closeTicket(interaction,prefix,"delete") + await require("./ticketCloser").closeTicket(interaction,prefix,"delete") + deleteTicketButtonChecker = false }) @@ -277,14 +293,19 @@ module.exports = () => { interaction.deferUpdate() interaction.message.edit({components:[closeRowClosed]}) }) - client.on("interactionCreate",interaction => { + + var deleteTicket1ButtonChecker = false + client.on("interactionCreate",async interaction => { if (!interaction.isButton()) return if (interaction.customId != "deleteTicketTrue1") return interaction.deferUpdate() + if (deleteTicket1ButtonChecker == true) return + deleteTicket1ButtonChecker = true + const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ try { return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]}) }catch{ @@ -304,6 +325,7 @@ module.exports = () => { } }) - require("./ticketCloser").closeTicket(interaction,prefix,"deletenotranscript") + await require("./ticketCloser").closeTicket(interaction,prefix,"deletenotranscript") + deleteTicket1ButtonChecker = false }) } \ No newline at end of file diff --git a/core/errorLogSystem.js b/core/errorLogSystem.js index 8fa8833..24811ce 100644 --- a/core/errorLogSystem.js +++ b/core/errorLogSystem.js @@ -88,11 +88,12 @@ const normalLog = (debugString) => { /** * - * @param {"system"|"command"|"info"} type + * @param {"system"|"command"|"info"|"api"} type * @param {String} message * @param {[{key:String,value:String}]} params */ -exports.log = async (type,message,params) => { +exports.log = async (ptype,message,params) => { + var type = ptype const chalk = await loadChalk() var paramstring = "" if (params){ @@ -110,6 +111,11 @@ exports.log = async (type,message,params) => { console.log(chalk.blue("[info] ")+message+" "+chalk.yellow(parameters)) }else if (type == "system"){ console.log(chalk.green("[system] ")+message+" "+chalk.yellow(parameters)) + }else if (type == "api"){ + if (require("./api/base").enableApiLogs == true){ + console.log(chalk.red("[api v"+require("./api/api.json").version+"] ")+message+" "+chalk.yellow(parameters)) + } + type = "api v"+require("./api/api.json").version } const cd = new Date() diff --git a/core/ticketCloser.js b/core/ticketCloser.js index 4bb2aca..f97bd10 100755 --- a/core/ticketCloser.js +++ b/core/ticketCloser.js @@ -45,7 +45,7 @@ exports.closeTicket = async (interaction,prefix,mode) => { if (mode == "delete"){ const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ try { return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]}) }catch{ @@ -53,17 +53,22 @@ exports.closeTicket = async (interaction,prefix,mode) => { } } deleteRequired = true - interaction.channel.send({content:"**"+l.messages.gettingdeleted+"**"}) + await interaction.channel.send({content:"**"+l.messages.gettingdeleted+"**"}) log("system","deleted a ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name}]) if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1) //getID & send DM - interaction.channel.messages.fetchPinned().then(msglist => { + await interaction.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false + const ticketId = firstmsg.embeds[0].footer.text.split("Ticket Type: ")[1] + const ticketData = require("./getoptions").getOptionsById("newT"+ticketId) + + require("./api/modules/events").onTicketDelete(interaction.user,interaction.channel,interaction.guild,new Date(),{name:interaction.channel.name,status:"deleted",ticketOptions:ticketData}) + if (!firstmsg.embeds[0].author) return false const id = firstmsg.embeds[0].author.name @@ -81,7 +86,7 @@ exports.closeTicket = async (interaction,prefix,mode) => { if (config.system.closeMode == "adminonly"){ const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ try { return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]}) }catch{ @@ -142,12 +147,17 @@ exports.closeTicket = async (interaction,prefix,mode) => { interaction.channel.send({embeds:[embed],components:[closeButtonRow]}) log("system","closed a ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name}]) + //getID & send DM - interaction.channel.messages.fetchPinned().then(msglist => { + await interaction.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false + const ticketId = firstmsg.embeds[0].footer.text.split("Ticket Type: ")[1] + const ticketData = require("./getoptions").getOptionsById("newT"+ticketId) + + require("./api/modules/events").onTicketClose(interaction.user,interaction.channel,interaction.guild,new Date(),{name:interaction.channel.name,status:"closed",ticketOptions:ticketData}) const id = firstmsg.embeds[0].author.name @@ -165,7 +175,7 @@ exports.closeTicket = async (interaction,prefix,mode) => { }else if (mode == "deletenotranscript"){ const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("MANAGE_GUILD")){ interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) return } @@ -178,11 +188,16 @@ exports.closeTicket = async (interaction,prefix,mode) => { if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1) //getID & send DM - interaction.channel.messages.fetchPinned().then(msglist => { + await interaction.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false + const ticketId = firstmsg.embeds[0].footer.text.split("Ticket Type: ")[1] + const ticketData = require("./getoptions").getOptionsById("newT"+ticketId) + + require("./api/modules/events").onTicketDelete(interaction.user,interaction.channel,interaction.guild,new Date(),{name:interaction.channel.name,status:"deleted",ticketOptions:ticketData}) + const id = firstmsg.embeds[0].author.name if (!id) return false @@ -238,7 +253,7 @@ exports.closeTicket = async (interaction,prefix,mode) => { setTimeout(() => {resolve(true)},7000) })} await timer() - interaction.channel.delete() + await interaction.channel.delete() } } diff --git a/core/ticketOpener.js b/core/ticketOpener.js index 48a6b63..dce1fbb 100755 --- a/core/ticketOpener.js +++ b/core/ticketOpener.js @@ -178,6 +178,7 @@ module.exports = () => { .setAuthor({name:interaction.user.id}) .setColor(config.main_color) .setTitle(currentTicketOptions.name) + .setFooter({text:"Ticket Type: "+currentTicketOptions.id}) if (currentTicketOptions.ticketmessage.length > 0) ticketEmbed.setDescription(currentTicketOptions.ticketmessage) ticketChannel.send({ @@ -190,6 +191,7 @@ module.exports = () => { }) log("system","created new ticket",[{key:"ticket",value:ticketName},{key:"user",value:interaction.user.tag}]) + require("./api/modules/events").onTicketOpen(interaction.user,ticketChannel,interaction.guild,new Date(),{name:ticketName,status:"open",ticketOptions:currentTicketOptions}) }) }else{ try { diff --git a/package.json b/package.json index 1d7e479..7d41951 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-ticket", - "version": "2.3.2", + "version": "2.4.0", "description": "This is an open-source discord ticket bot, you can configure it and it comes with cool features like a transcript.", "main": "index.js", "scripts": {