diff --git a/commands/add.js b/commands/add.js index e59c82e..337670a 100644 --- a/commands/add.js +++ b/commands/add.js @@ -24,7 +24,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value msg.channel.permissionOverwrites.create(user.id, { ViewChannel:true, AddReactions:true,AttachFiles:true, EmbedLinks:true, SendMessages:true}) msg.channel.send({embeds:[bot.embeds.commands.addEmbed(user)]}) @@ -56,7 +56,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value interaction.channel.permissionOverwrites.create(user.id, { ViewChannel:true, AddReactions:true,AttachFiles:true, EmbedLinks:true, SendMessages:true}) interaction.reply({embeds:[bot.embeds.commands.addEmbed(user)]}) diff --git a/commands/close.js b/commands/close.js index c117980..2c05d85 100644 --- a/commands/close.js +++ b/commands/close.js @@ -17,7 +17,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value msg.channel.send({embeds:[bot.embeds.commands.closeEmbed(msg.author)],components:[bot.buttons.close.closeCommandRow]}) @@ -50,7 +50,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value interaction.reply({embeds:[bot.embeds.commands.closeEmbed(interaction.user)],components:[bot.buttons.close.closeCommandRow]}) diff --git a/commands/delete.js b/commands/delete.js index 92a0571..49adc26 100644 --- a/commands/delete.js +++ b/commands/delete.js @@ -22,7 +22,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value msg.channel.send({embeds:[bot.embeds.commands.deleteEmbed(msg.author)]}) @@ -60,7 +60,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value interaction.reply({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]}) diff --git a/commands/remove.js b/commands/remove.js index acba3c3..cc6e6c0 100644 --- a/commands/remove.js +++ b/commands/remove.js @@ -24,7 +24,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value msg.channel.permissionOverwrites.delete(user.id) msg.channel.send({embeds:[bot.embeds.commands.removeEmbed(user)]}) @@ -56,7 +56,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value interaction.channel.permissionOverwrites.delete(user.id) interaction.reply({embeds:[bot.embeds.commands.removeEmbed(user)]}) diff --git a/commands/rename.js b/commands/rename.js index b9da6d1..1f8a032 100644 --- a/commands/rename.js +++ b/commands/rename.js @@ -22,7 +22,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value var newname = msg.content.split(config.prefix+"rename")[1].substring(1) @@ -66,7 +66,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value var newname = interaction.options.getString("name") var name = interaction.channel.name diff --git a/commands/reopen.js b/commands/reopen.js index 2e7ee04..c12b991 100644 --- a/commands/reopen.js +++ b/commands/reopen.js @@ -16,7 +16,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value msg.channel.send({embeds:[bot.embeds.commands.reopenEmbed(msg.author)],components:[bot.buttons.close.openRowNormal]}) @@ -38,7 +38,7 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]}) const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) - const ticketId = hiddendata.data.find(d => d.key == "type") + const ticketId = hiddendata.data.find(d => d.key == "type").value await interaction.reply({embeds:[bot.embeds.commands.reopenEmbed(interaction.user)],components:[bot.buttons.close.openRowNormal]}) diff --git a/core/interactionHandlers/embeds/commands.js b/core/interactionHandlers/embeds/commands.js index 425b093..c7bab3e 100644 --- a/core/interactionHandlers/embeds/commands.js +++ b/core/interactionHandlers/embeds/commands.js @@ -81,4 +81,27 @@ exports.renameEmbed = (renamer,newname) => { .setTitle("🔓 "+l.commands.reopenTitle) .setColor(mc) .setFooter({text:reopener.tag,iconURL:reopener.displayAvatarURL()}) +} + +/** + * + * @param {Boolean} done + * @param {discord.TextChannel} channel + * @param {discord.User} author + * @returns {discord.EmbedBuilder} + */ + exports.sendTranscriptEmbed = (done,channel,author) => { + if (done){ + return new embed() + .setTitle("📄 "+l.messages.hereIsTheTranscript) + .setColor(mc) + .setDescription("Ticket: "+channel.name) + .setFooter({text:author.tag,iconURL:author.displayAvatarURL()}) + }else{ + return new embed() + .setTitle("📄 "+l.messages.hereIsTheTranscript) + .setColor(mc) + .setDescription("Loading...") + .setFooter({text:author.tag,iconURL:author.displayAvatarURL()}) + } } \ No newline at end of file diff --git a/core/interactionHandlers/handlers/accepted/deleting.js b/core/interactionHandlers/handlers/accepted/deleting.js new file mode 100644 index 0000000..a2b39a4 --- /dev/null +++ b/core/interactionHandlers/handlers/accepted/deleting.js @@ -0,0 +1,95 @@ +const discord = require('discord.js') +const bot = require('../../../../index') +const client = bot.client +const config = bot.config +const l = bot.language +const log = bot.errorLog.log + +const getconfigoptions = require("../../../getoptions") +const permissionChecker = require("../../../utils/permisssionChecker") +const storage = bot.storage +const hiddendata = bot.hiddenData +const embed = discord.EmbedBuilder +const mc = config.main_color + +const button = discord.ButtonBuilder +const arb = discord.ActionRowBuilder +const bs = discord.ButtonStyle + +module.exports = () => { + //DELETE + var deleteTicketButtonChecker = false + client.on("interactionCreate",async interaction => { + if (!interaction.isButton()) return + if (interaction.customId != "OTdeleteTicketTrue") return + + interaction.deferUpdate() + + if (deleteTicketButtonChecker == true) return + deleteTicketButtonChecker = true + + const firstcomponents = bot.buttons.close.openRowNormal + + if (!permissionChecker.command(interaction.user.id,interaction.guild.id)){ + if (!permissionChecker.sendUserNoDelete(interaction.user)){ + permissionChecker.sendChannelNoDelete(interaction.channel) + } + interaction.message.edit({components:firstcomponents}) + } + + /** + * @type {String} + */ + const name = interaction.channel.name + var prefix = "" + const tickets = config.options + tickets.forEach((ticket) => { + if (name.startsWith(ticket.channelprefix)){ + prefix = ticket.channelprefix + } + }) + + interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]}) + await interaction.message.edit({components:[bot.buttons.close.openRowDisabled]}) + console.log("hi") + await require("../../../ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"delete",false,true) + deleteTicketButtonChecker = false + }) + + //DELETE NO TRANSCRIPT + var deleteTicketButtonChecker = false + client.on("interactionCreate",async interaction => { + if (!interaction.isButton()) return + if (interaction.customId != "OTdeleteTicketTrue1") return + + interaction.deferUpdate() + + if (deleteTicketButtonChecker == true) return + deleteTicketButtonChecker = true + + const firstcomponents = bot.buttons.close.openRowNormal + + if (!permissionChecker.command(interaction.user.id,interaction.guild.id)){ + if (!permissionChecker.sendUserNoDelete(interaction.user)){ + permissionChecker.sendChannelNoDelete(interaction.channel) + } + interaction.message.edit({components:firstcomponents}) + } + + /** + * @type {String} + */ + const name = interaction.channel.name + var prefix = "" + const tickets = config.options + tickets.forEach((ticket) => { + if (name.startsWith(ticket.channelprefix)){ + prefix = ticket.channelprefix + } + }) + + interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]}) + await require("../../../ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"deletenotranscript",false,true) + deleteTicketButtonChecker = false + }) +} \ No newline at end of file diff --git a/core/interactionHandlers/handlers/handlers.js b/core/interactionHandlers/handlers/handlers.js index b3d1ac7..6685c5d 100644 --- a/core/interactionHandlers/handlers/handlers.js +++ b/core/interactionHandlers/handlers/handlers.js @@ -6,4 +6,5 @@ module.exports = () => { //accepted require("./accepted/closing")() require("./accepted/reopening")() + require("./accepted/deleting")() } \ No newline at end of file diff --git a/core/interactionHandlers/handlers/sendTranscript.js b/core/interactionHandlers/handlers/sendTranscript.js index 6321979..9d2c2ba 100644 --- a/core/interactionHandlers/handlers/sendTranscript.js +++ b/core/interactionHandlers/handlers/sendTranscript.js @@ -22,6 +22,7 @@ module.exports = () => { if (interaction.customId != "OTsendTranscript") return interaction.deferUpdate() + const tsmsg = await interaction.channel.send({embeds:[bot.embeds.commands.sendTranscriptEmbed(false,interaction.channel,interaction.user)]}) const channelmessages = await interaction.channel.messages.fetch() @@ -33,10 +34,10 @@ module.exports = () => { if (fileattachment == false){ log("system","internal error: transcript is not created!") - interaction.channel.send({embeds:[bot.errorLog.serverError(l.errors.somethingWentWrongTranscript)]}) + tsmsg.edit({embeds:[bot.errorLog.serverError(l.errors.somethingWentWrongTranscript)]}) return } - interaction.channel.send({content:"**"+l.messages.hereIsTheTranscript+"**",files:[fileattachment]}) + tsmsg.edit({embeds:[bot.embeds.commands.sendTranscriptEmbed(true,interaction.channel,interaction.user)],files:[fileattachment]}) }) } \ No newline at end of file diff --git a/core/interactionHandlers/handlers/verifyBars.js b/core/interactionHandlers/handlers/verifyBars.js index 941a3cd..a85f388 100644 --- a/core/interactionHandlers/handlers/verifyBars.js +++ b/core/interactionHandlers/handlers/verifyBars.js @@ -32,4 +32,38 @@ module.exports = () => { interaction.deferUpdate() interaction.message.edit({components:[bot.buttons.close.openRowNormal]}) }) + + //DELETE + client.on("interactionCreate",interaction => { + if (!interaction.isButton()) return + if (interaction.customId != "OTdeleteTicket") return + + interaction.deferUpdate() + interaction.message.edit({components:[bot.buttons.verifybars.deleteVerifyBar]}) + + }) + client.on("interactionCreate",interaction => { + if (!interaction.isButton()) return + if (interaction.customId != "OTdeleteTicketFalse") return + + interaction.deferUpdate() + interaction.message.edit({components:[bot.buttons.close.openRowNormal]}) + }) + + //DELETE NO TRANSCRIPT + client.on("interactionCreate",interaction => { + if (!interaction.isButton()) return + if (interaction.customId != "OTdeleteTicket1") return + + interaction.deferUpdate() + interaction.message.edit({components:[bot.buttons.verifybars.deleteVerifyBar]}) + + }) + client.on("interactionCreate",interaction => { + if (!interaction.isButton()) return + if (interaction.customId != "OTdeleteTicketFalse1") return + + interaction.deferUpdate() + interaction.message.edit({components:[bot.buttons.close.openRowNormal]}) + }) } \ No newline at end of file diff --git a/core/ticketCloser.js b/core/ticketCloser.js index 8ac3292..4697bc2 100755 --- a/core/ticketCloser.js +++ b/core/ticketCloser.js @@ -94,16 +94,14 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) => //getID & send DM & send api event await 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 hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) + const ticketId = hiddendata.data.find(d => d.key == "type").value.value const ticketData = require("./getoptions").getOptionsById("OTnewT"+ticketId) require("./api/modules/events").onTicketDelete(user,channel,guild,new Date(),{name:channel.name,status:"deleted",ticketOptions:ticketData}) - if (!firstmsg.embeds[0].author) return false - const id = firstmsg.embeds[0].author.name + const id = hiddendata.data.find(d => d.key == "openerid").value if (!id) return false @@ -162,9 +160,9 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) => //add ticket adminroles await 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 hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) + const ticketId = hiddendata.data.find(d => d.key == "type").value const ticketData = require("./getoptions").getOptionsById("OTnewT"+ticketId) if (!ticketData) return @@ -235,14 +233,14 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) => //getID & send DM & send api event await 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 hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) + const ticketId = hiddendata.data.find(d => d.key == "type").value const ticketData = require("./getoptions").getOptionsById("OTnewT"+ticketId) require("./api/modules/events").onTicketClose(user,channel,guild,new Date(),{name:channel.name,status:"closed",ticketOptions:ticketData},newReason) - const id = firstmsg.embeds[0].author.name + const id = hiddendata.data.find(d => d.key == "openerid").value if (!id) return false @@ -277,15 +275,14 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) => //getID & send DM & send api event await 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 hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) + const ticketId = hiddendata.data.find(d => d.key == "type").value const ticketData = require("./getoptions").getOptionsById("OTnewT"+ticketId) require("./api/modules/events").onTicketDelete(user,channel,guild,new Date(),{name:channel.name,status:"deleted",ticketOptions:ticketData}) - const id = firstmsg.embeds[0].author.name + const id = hiddendata.data.find(d => d.key == "openerid").value if (!id) return false diff --git a/core/ticketOpener.js b/core/ticketOpener.js index d17f973..17a1d19 100755 --- a/core/ticketOpener.js +++ b/core/ticketOpener.js @@ -161,10 +161,10 @@ module.exports = () => { const hiddendata = bot.hiddenData.writeHiddenData("ticketdata",[{key:"type",value:currentTicketOptions.id},{key:"openerid",value:interaction.user.id},{key:"createdms",value:new Date().getTime()}]) var ticketEmbed = new discord.EmbedBuilder() - .setAuthor({name:interaction.user.id}) + //.setAuthor({name:interaction.user.id}) .setColor(config.main_color) .setTitle(currentTicketOptions.name) - .setFooter({text:"Ticket Type: "+currentTicketOptions.id}) + //.setFooter({text:"Ticket Type: "+currentTicketOptions.id}) if (currentTicketOptions.ticketmessage.length > 0){ ticketEmbed.setDescription(currentTicketOptions.ticketmessage+hiddendata) }else{ diff --git a/core/transcript.js b/core/transcript.js index 4140271..fcbd111 100755 --- a/core/transcript.js +++ b/core/transcript.js @@ -18,10 +18,11 @@ const getUserInfo = (channel) => { } channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() - if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false + const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description) + const ticketId = hiddendata.data.find(d => d.key == "type") - const id = firstmsg.embeds[0].author.name ? firstmsg.embeds[0].author.name : false + const id = hiddendata.data.find(d => d.key == "openerid").value result.ticketopener.id = id diff --git a/core/utils/permisssionChecker.js b/core/utils/permisssionChecker.js index 7ae2d02..c1a0192 100644 --- a/core/utils/permisssionChecker.js +++ b/core/utils/permisssionChecker.js @@ -47,6 +47,20 @@ exports.sendUserNoPerms = (user) => { } } +/** + * + * @param {discord.User} user + * @returns {Boolean} + */ + exports.sendUserNoDelete = (user) => { + try { + user.send({embeds:[bot.errorLog.noPermsDelete]}) + return true + }catch{ + return false + } +} + /** * * @param {discord.TextChannel} channel @@ -74,3 +88,17 @@ exports.sendUserNoPerms = (user) => { return false } } + +/** + * + * @param {discord.TextChannel} channel + * @returns {Boolean} + */ + exports.sendChannelNoDelete = (channel) => { + try { + channel.send({embeds:[bot.errorLog.noPermsDelete]}) + return true + }catch{ + return false + } +} diff --git a/language/english.json b/language/english.json index 47b495b..9496227 100644 --- a/language/english.json +++ b/language/english.json @@ -67,6 +67,9 @@ "hereIsTheTranscript":"Here is the transcript:", "chooseCategory":"choose a category:", - "gettingdeleted":"Ticket is getting deleted..." + "gettingdeleted":"Ticket is getting deleted...", + + "none":"none", + "reason":"reason" } } \ No newline at end of file