diff --git a/.github/SECURITY.md b/.github/SECURITY.md
index 25c253c..03ec5d0 100644
--- a/.github/SECURITY.md
+++ b/.github/SECURITY.md
@@ -10,7 +10,7 @@ Support for Open Ticket is only available for the versions specified below!
| Version | Supported |
| ------- | ------------------ |
-| 3.3.3 | :white_check_mark: |
+| 3.4.0 | :white_check_mark: |
| 3.3.0 | 🟧 |
| 3.2.2 | 🟧 |
| < 3.2.2 | :x: |
diff --git a/README.md b/README.md
index 9e4b73c..5e32bc8 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v3.3.3) []() [](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [](https://docs.openticket.dj-dj.be)
+[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v3.4.0) []() [](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [](https://docs.openticket.dj-dj.be)
### Open Ticket
Open Ticket is of the most customisable discord ticket bots of all time!
@@ -62,7 +62,7 @@ Translators
|Slovenian |n1kkec#5341 |
## links
-current version: _v3.3.3_
+current version: _v3.4.0_
changelog: [click here](https://docs.openticket.dj-dj.be/other/changelog)
documentation: [click here](https://docs.openticket.dj-dj.be/quick-start)
diff --git a/commands/add.js b/commands/add.js
index 0092579..f69e223 100644
--- a/commands/add.js
+++ b/commands/add.js
@@ -23,25 +23,21 @@ module.exports = () => {
return
}
- msg.channel.messages.fetchPinned().then(msglist => {
- 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").value
+ const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
+ if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.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,msg.author)]})
+ 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,msg.author)]})
- var loguser = msg.mentions.users.first()
- log("command","someone used the 'add' command",[{key:"user",value:msg.author.tag}])
- log("system","user added to ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"added_user",value:loguser.tag}])
+ var loguser = msg.mentions.users.first()
+ log("command","someone used the 'add' command",[{key:"user",value:msg.author.tag}])
+ log("system","user added to ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"added_user",value:loguser.tag}])
- const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
- APIEvents.onTicketAdd(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
+ const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
+ APIEvents.onTicketAdd(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
- APIEvents.onCommand("add",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
- })
-
+ APIEvents.onCommand("add",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
})
if (!DISABLE.commands.slash.add) client.on("interactionCreate",async (interaction) => {
@@ -57,25 +53,20 @@ module.exports = () => {
await interaction.deferReply()
- interaction.channel.messages.fetchPinned().then(msglist => {
- var firstmsg = msglist.last()
- if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
- const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
- const ticketId = hiddendata.data.find(d => d.key == "type").value
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- interaction.channel.permissionOverwrites.create(user.id, { ViewChannel:true, AddReactions:true,AttachFiles:true, EmbedLinks:true, SendMessages:true})
- interaction.editReply({embeds:[bot.embeds.commands.addEmbed(user,interaction.user)]})
+ interaction.channel.permissionOverwrites.create(user.id, { ViewChannel:true, AddReactions:true,AttachFiles:true, EmbedLinks:true, SendMessages:true})
+ interaction.editReply({embeds:[bot.embeds.commands.addEmbed(user,interaction.user)]})
- var loguser = user
- log("command","someone used the 'add' command",[{key:"user",value:interaction.user.tag}])
- log("system","user added to ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"added_user",value:loguser.tag}])
-
- const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
- APIEvents.onTicketAdd(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
- APIEvents.onCommand("add",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
-
- })
+ var loguser = user
+ log("command","someone used the 'add' command",[{key:"user",value:interaction.user.tag}])
+ log("system","user added to ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"added_user",value:loguser.tag}])
+ const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
+ APIEvents.onTicketAdd(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
+ APIEvents.onCommand("add",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
})
}
\ No newline at end of file
diff --git a/commands/change.js b/commands/change.js
index 2ce1f36..a4619e8 100644
--- a/commands/change.js
+++ b/commands/change.js
@@ -12,7 +12,7 @@ const DISABLE = require("../core/api/api.json").disable
module.exports = () => {
bot.errorLog.log("debug","COMMANDS: loaded change.js")
- if (!DISABLE.commands.text.change) client.on("messageCreate",msg => {
+ if (!DISABLE.commands.text.change) client.on("messageCreate", async msg => {
if (!msg.content.startsWith(config.prefix+"change")) return
if (!msg.guild) return
@@ -21,39 +21,36 @@ module.exports = () => {
return
}
- msg.channel.messages.fetchPinned().then(async msglist => {
- 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").value
+ const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
+ if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- const list = []
- config.options.forEach((o) => list.push(o.id))
+ const list = []
+ config.options.forEach((o) => list.push(o.id))
- var newtype = msg.content.split(config.prefix+"change")[1].substring(1)
- if (!newtype) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"change `")]})
+ var newtype = msg.content.split(config.prefix+"change")[1].substring(1)
+ if (!newtype) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"change `")]})
- const newTicket = require("../core/utils/configParser").getTicketById(newtype)
- if (!newTicket) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"change `")]})
+ const newTicket = require("../core/utils/configParser").getTicketById(newtype)
+ if (!newTicket) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"change `")]})
- /**@type {String} */
- var chName = msg.channel.name
- const splitted = chName.split("-")
- const prefix = splitted.shift()
- const name = (splitted.length > 0) ? splitted.join("-") : prefix
-
- if (newTicket.category){
- const parent = await msg.guild.channels.fetch(newTicket.category,{cache:true})
- if (parent && parent.type == discord.ChannelType.GuildCategory) msg.channel.setParent(parent)
- }
-
- msg.channel.setName(newTicket.channelprefix+name)
- msg.channel.send({embeds:[bot.embeds.commands.changeEmbed(msg.author,newtype)]})
+ /**@type {String} */
+ var chName = msg.channel.name
+ const splitted = chName.split("-")
+ const prefix = splitted.shift()
+ const name = (splitted.length > 0) ? splitted.join("-") : prefix
+
+ if (newTicket.category){
+ const parent = await msg.guild.channels.fetch(newTicket.category,{cache:true})
+ if (parent && parent.type == discord.ChannelType.GuildCategory) msg.channel.setParent(parent)
+ }
+
+ msg.channel.setName(newTicket.channelprefix+name)
+ msg.channel.send({embeds:[bot.embeds.commands.changeEmbed(msg.author,newtype)]})
- log("command","someone used the 'change' command",[{key:"user",value:msg.author.tag}])
- log("system","ticket type changed",[{key:"user",value:msg.author.tag},{key:"ticket",value:name},{key:"newtype",value:newtype}])
- APIEvents.onCommand("change",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
- })
+ log("command","someone used the 'change' command",[{key:"user",value:msg.author.tag}])
+ log("system","ticket type changed",[{key:"user",value:msg.author.tag},{key:"ticket",value:name},{key:"newtype",value:newtype}])
+ APIEvents.onCommand("change",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
})
if (!DISABLE.commands.slash.change) client.on("interactionCreate",async (interaction) => {
@@ -67,59 +64,55 @@ module.exports = () => {
}
await interaction.deferReply()
- interaction.channel.messages.fetchPinned().then(async (msglist) => {
- /**@type {discord.Message} */
- var firstmsg = msglist.last()
- if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
- const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
- const ticketId = hiddendata.data.find(d => d.key == "type").value
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- const list = []
- config.options.forEach((o) => list.push(o.id))
+ const list = []
+ config.options.forEach((o) => list.push(o.id))
- var newtype = interaction.options.getString("type",true)
- const newTicket = require("../core/utils/configParser").getTicketById(newtype,true)
-
- if (!newTicket) return interaction.editReply({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"change `")]})
+ var newtype = interaction.options.getString("type",true)
+ const newTicket = require("../core/utils/configParser").getTicketById(newtype,true)
+
+ if (!newTicket) return interaction.editReply({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"change `")]})
- /**@type {discord.PermissionOverwriteManager} */
- const prePermsManager = interaction.channel.permissionOverwrites
- const prePerms = prePermsManager.cache
-
- /**@type {String} */
- var chName = interaction.channel.name
- const splitted = chName.split("-")
- const prefix = splitted.shift()
- const name = (splitted.length > 0) ? splitted.join("-") : prefix
+ /**@type {discord.PermissionOverwriteManager} */
+ const prePermsManager = interaction.channel.permissionOverwrites
+ const prePerms = prePermsManager.cache
+
+ /**@type {String} */
+ var chName = interaction.channel.name
+ const splitted = chName.split("-")
+ const prefix = splitted.shift()
+ const name = (splitted.length > 0) ? splitted.join("-") : prefix
- if (newTicket.category){
- const parent = await interaction.guild.channels.fetch(newTicket.category,{cache:true})
- if (parent && parent.type == discord.ChannelType.GuildCategory) interaction.channel.setParent(parent)
+ if (newTicket.category){
+ const parent = await interaction.guild.channels.fetch(newTicket.category,{cache:true})
+ if (parent && parent.type == discord.ChannelType.GuildCategory) interaction.channel.setParent(parent)
+ }
+
+ await prePermsManager.set(prePerms)
+ interaction.channel.setName(newTicket.channelprefix+name)
+
+ var newHiddendata = hiddendata.data
+ newHiddendata.find((value,index) => {
+ if (value.key == "type"){
+ newHiddendata[index] = {key:"type",value:newtype}
}
-
- await prePermsManager.set(prePerms)
- interaction.channel.setName(newTicket.channelprefix+name)
-
- var newHiddendata = hiddendata.data
- newHiddendata.find((value,index) => {
- if (value.key == "type"){
- newHiddendata[index] = {key:"type",value:newtype}
- }
- })
-
- const prevDescription = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description).description
- const newData = bot.hiddenData.writeHiddenData("ticketdata",newHiddendata)
- const newDescription = prevDescription+newData
- const newEmbed = new discord.EmbedBuilder(firstmsg.embeds[0].data)
- .setDescription(newDescription)
-
- firstmsg.edit({embeds:[newEmbed]})
-
- interaction.editReply({embeds:[bot.embeds.commands.changeEmbed(interaction.user,newtype)]})
-
- log("command","someone used the 'change' command",[{key:"user",value:interaction.user.tag}])
- log("system","ticket type changed",[{key:"user",value:interaction.user.tag},{key:"ticket",value:name},{key:"newtype",value:newtype}])
- APIEvents.onCommand("change",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
})
+
+ const prevDescription = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description).description
+ const newData = bot.hiddenData.writeHiddenData("ticketdata",newHiddendata)
+ const newDescription = prevDescription+newData
+ const newEmbed = new discord.EmbedBuilder(firstmsg.embeds[0].data)
+ .setDescription(newDescription)
+
+ firstmsg.edit({embeds:[newEmbed]})
+
+ interaction.editReply({embeds:[bot.embeds.commands.changeEmbed(interaction.user,newtype)]})
+
+ log("command","someone used the 'change' command",[{key:"user",value:interaction.user.tag}])
+ log("system","ticket type changed",[{key:"user",value:interaction.user.tag},{key:"ticket",value:name},{key:"newtype",value:newtype}])
+ APIEvents.onCommand("change",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
})
}
\ No newline at end of file
diff --git a/commands/claim.js b/commands/claim.js
index 03fc1a3..f7984f8 100644
--- a/commands/claim.js
+++ b/commands/claim.js
@@ -26,36 +26,31 @@ module.exports = () => {
return
}
- msg.channel.messages.fetchPinned().then(msglist => {
- /**@type {discord.Message} */
- var firstmsg = msglist.last()
- if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
- const hdraw = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description)
- const hiddendata = hdraw.hiddenData
- const ticketId = hiddendata.data.find(d => d.key == "type").value
+ const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
+ if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- hiddendata.data.push({key:"claimedby",value:claimingUser.id})
- storage.set("claimData",msg.channel.id,claimingUser.id)
-
- const newEmbed = new embed(firstmsg.embeds[0].data)
- .setFooter({text:"claimed by: "+msg.author.tag,iconURL:msg.author.displayAvatarURL()})
- .setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
+ hiddendata.push({key:"claimedby",value:claimingUser.id})
+ bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
+ storage.set("claimData",msg.channel.id,claimingUser.id)
+
+ const newEmbed = new embed(firstmsg.embeds[0].data)
+ .setFooter({text:"claimed by: "+msg.author.tag,iconURL:msg.author.displayAvatarURL()})
- if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
- firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
- }else{
- firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim],embeds:[newEmbed]})
- }
+ if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
+ firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
+ }else{
+ firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim],embeds:[newEmbed]})
+ }
- msg.channel.send({embeds:[bot.embeds.commands.claimEmbed(claimingUser,msg.author)]})
+ msg.channel.send({embeds:[bot.embeds.commands.claimEmbed(claimingUser,msg.author)]})
- log("command","someone used the 'claim' command",[{key:"user",value:msg.author.tag}])
- log("system","user claimed to ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"claimed_user",value:claimingUser.tag}])
+ log("command","someone used the 'claim' command",[{key:"user",value:msg.author.tag}])
+ log("system","user claimed to ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"claimed_user",value:claimingUser.tag}])
- const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
- APIEvents.onTicketClaim(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
- APIEvents.onCommand("claim",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
- })
+ const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
+ APIEvents.onTicketClaim(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
+ APIEvents.onCommand("claim",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
})
if (!DISABLE.commands.slash.claim) client.on("interactionCreate",async (interaction) => {
@@ -71,35 +66,35 @@ module.exports = () => {
await interaction.deferReply()
- interaction.channel.messages.fetchPinned().then(msglist => {
- /**@type {discord.Message} */
- var firstmsg = msglist.last()
- if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
- const hdraw = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description)
- const hiddendata = hdraw.hiddenData
- const ticketId = hiddendata.data.find(d => d.key == "type").value
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- hiddendata.data.push({key:"claimedby",value:user.id})
- storage.set("claimData",interaction.channel.id,user.id)
+ hiddendata.push({key:"claimedby",value:user.id})
+ bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
+ storage.set("claimData",interaction.channel.id,user.id)
+
+ interaction.channel.messages.fetchPinned().then(msglist => {
+ var firstmsg = msglist.last()
+ if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
const newEmbed = new embed(firstmsg.embeds[0].data)
.setFooter({text:"claimed by: "+user.tag,iconURL:user.displayAvatarURL()})
- .setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
}else{
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim],embeds:[newEmbed]})
}
-
- interaction.editReply({embeds:[bot.embeds.commands.claimEmbed(user,interaction.user)]})
-
- log("command","someone used the 'claim' command",[{key:"user",value:interaction.user.tag}])
- log("system","user claimed to ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"claimed_user",value:user.tag}])
-
- const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
- APIEvents.onTicketClaim(interaction.user,user,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
- APIEvents.onCommand("claim",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
})
+
+ interaction.editReply({embeds:[bot.embeds.commands.claimEmbed(user,interaction.user)]})
+
+ log("command","someone used the 'claim' command",[{key:"user",value:interaction.user.tag}])
+ log("system","user claimed to ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"claimed_user",value:user.tag}])
+
+ const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
+ APIEvents.onTicketClaim(interaction.user,user,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
+ APIEvents.onCommand("claim",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
})
}
\ No newline at end of file
diff --git a/commands/close.js b/commands/close.js
index 5c8d43a..5c13fe3 100644
--- a/commands/close.js
+++ b/commands/close.js
@@ -24,33 +24,28 @@ module.exports = () => {
}
const reason = tempreason
- msg.channel.messages.fetchPinned().then(msglist => {
- 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").value
+ const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
+ if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- if (hiddendata.data.find(h => h.key == "pendingdelete")) return msg.channel.send({embeds:[bot.errorLog.warning("Warning!","You can't close a ticket while it's being deleted!")]})
+ if (hiddendata.find(h => h.key == "pendingdelete")) return msg.channel.send({embeds:[bot.errorLog.warning("Warning!","You can't close a ticket while it's being deleted!")]})
- const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false
- msg.channel.send({embeds:[bot.embeds.commands.closeEmbed(msg.author,descriptionReason)],components:[bot.buttons.close.closeCommandRow]})
+ const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false
+ msg.channel.send({embeds:[bot.embeds.commands.closeEmbed(msg.author,descriptionReason)],components:[bot.buttons.close.closeCommandRow]})
- var name = msg.channel.name
- var prefix = ""
- const tickets = config.options
- tickets.forEach((ticket) => {
- if (name.startsWith(ticket.channelprefix)){
- prefix = ticket.channelprefix
- }
- })
-
- require("../core/ticketActions/ticketCloser").closeManager(msg.member,msg.channel,prefix,"close",reason,true)
-
- log("command","someone used the 'close' command",[{key:"user",value:msg.author.tag}])
- APIEvents.onCommand("close",true,msg.author,msg.channel,msg.guild,new Date())
-
+ var name = msg.channel.name
+ var prefix = ""
+ const tickets = config.options
+ tickets.forEach((ticket) => {
+ if (name.startsWith(ticket.channelprefix)){
+ prefix = ticket.channelprefix
+ }
})
-
+
+ require("../core/ticketActions/ticketCloser").closeManager(msg.member,msg.channel,prefix,"close",reason,true)
+
+ log("command","someone used the 'close' command",[{key:"user",value:msg.author.tag}])
+ APIEvents.onCommand("close",true,msg.author,msg.channel,msg.guild,new Date())
})
@@ -64,31 +59,27 @@ module.exports = () => {
await interaction.deferReply()
- interaction.channel.messages.fetchPinned().then(msglist => {
- var firstmsg = msglist.last()
- if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
- const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
- const ticketId = hiddendata.data.find(d => d.key == "type").value
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- if (hiddendata.data.find(h => h.key == "pendingdelete")) return interaction.editReply({embeds:[bot.errorLog.warning("Warning!","You can't close a ticket while it's being deleted!")]})
+ if (hiddendata.find(h => h.key == "pendingdelete")) return interaction.editReply({embeds:[bot.errorLog.warning("Warning!","You can't close a ticket while it's being deleted!")]})
- const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false
- interaction.editReply({embeds:[bot.embeds.commands.closeEmbed(interaction.user,descriptionReason)],components:[bot.buttons.close.closeCommandRow]})
+ const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false
+ interaction.editReply({embeds:[bot.embeds.commands.closeEmbed(interaction.user,descriptionReason)],components:[bot.buttons.close.closeCommandRow]})
- var name = interaction.channel.name
- var prefix = ""
- const tickets = config.options
- tickets.forEach((ticket) => {
- if (name.startsWith(ticket.channelprefix)){
- prefix = ticket.channelprefix
- }
- })
-
- require("../core/ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"close",false,true)
-
- log("command","someone used the 'close' command",[{key:"user",value:interaction.user.tag}])
- APIEvents.onCommand("close",true,interaction.user,interaction.channel,interaction.guild,new Date())
-
+ var name = interaction.channel.name
+ var prefix = ""
+ const tickets = config.options
+ tickets.forEach((ticket) => {
+ if (name.startsWith(ticket.channelprefix)){
+ prefix = ticket.channelprefix
+ }
})
+
+ require("../core/ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"close",false,true)
+
+ log("command","someone used the 'close' command",[{key:"user",value:interaction.user.tag}])
+ APIEvents.onCommand("close",true,interaction.user,interaction.channel,interaction.guild,new Date())
})
}
\ No newline at end of file
diff --git a/commands/delete.js b/commands/delete.js
index 018b69a..00dbe8b 100644
--- a/commands/delete.js
+++ b/commands/delete.js
@@ -21,29 +21,25 @@ module.exports = () => {
return
}
- msg.channel.messages.fetchPinned().then(msglist => {
- 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").value
+ const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
+ if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- msg.channel.send({embeds:[bot.embeds.commands.deleteEmbed(msg.author)]})
+ msg.channel.send({embeds:[bot.embeds.commands.deleteEmbed(msg.author)]})
- var name = msg.channel.name
- var prefix = ""
- const tickets = config.options
- tickets.forEach((ticket) => {
- if (name.startsWith(ticket.channelprefix)){
- prefix = ticket.channelprefix
- }
- })
-
- require("../core/ticketActions/ticketCloser").closeManager(msg.member,msg.channel,prefix,"delete",false,true)
-
- log("command","someone used the 'delete' command",[{key:"user",value:msg.author.tag}])
- APIEvents.onCommand("delete",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
+ var name = msg.channel.name
+ var prefix = ""
+ const tickets = config.options
+ tickets.forEach((ticket) => {
+ if (name.startsWith(ticket.channelprefix)){
+ prefix = ticket.channelprefix
+ }
})
-
+
+ require("../core/ticketActions/ticketCloser").closeManager(msg.member,msg.channel,prefix,"delete",false,true)
+
+ log("command","someone used the 'delete' command",[{key:"user",value:msg.author.tag}])
+ APIEvents.onCommand("delete",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
})
@@ -59,28 +55,24 @@ module.exports = () => {
await interaction.deferReply()
- interaction.channel.messages.fetchPinned().then(msglist => {
- var firstmsg = msglist.last()
- if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
- const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
- const ticketId = hiddendata.data.find(d => d.key == "type").value
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- interaction.editReply({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
+ interaction.editReply({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
- var name = interaction.channel.name
- var prefix = ""
- const tickets = config.options
- tickets.forEach((ticket) => {
- if (name.startsWith(ticket.channelprefix)){
- prefix = ticket.channelprefix
- }
- })
-
- require("../core/ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"delete",false,true)
-
- log("command","someone used the 'delete' command",[{key:"user",value:interaction.user.tag}])
- APIEvents.onCommand("delete",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
-
+ var name = interaction.channel.name
+ var prefix = ""
+ const tickets = config.options
+ tickets.forEach((ticket) => {
+ if (name.startsWith(ticket.channelprefix)){
+ prefix = ticket.channelprefix
+ }
})
+
+ require("../core/ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"delete",false,true)
+
+ log("command","someone used the 'delete' command",[{key:"user",value:interaction.user.tag}])
+ APIEvents.onCommand("delete",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
})
}
\ No newline at end of file
diff --git a/commands/remove.js b/commands/remove.js
index 8ef5667..7fc6ef2 100644
--- a/commands/remove.js
+++ b/commands/remove.js
@@ -23,25 +23,21 @@ module.exports = () => {
return
}
- msg.channel.messages.fetchPinned().then(msglist => {
- 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").value
+ const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
+ if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- msg.channel.permissionOverwrites.delete(user.id)
- msg.channel.send({embeds:[bot.embeds.commands.removeEmbed(user,msg.author)]})
+ msg.channel.permissionOverwrites.delete(user.id)
+ msg.channel.send({embeds:[bot.embeds.commands.removeEmbed(user,msg.author)]})
- var loguser = msg.mentions.users.first()
-
- log("command","someone used the 'remove' command",[{key:"user",value:msg.author.tag}])
- log("system","user removed from ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"removed_user",value:loguser.tag}])
-
- const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
- APIEvents.onTicketRemove(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
- APIEvents.onCommand("remove",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
- })
+ var loguser = msg.mentions.users.first()
+ log("command","someone used the 'remove' command",[{key:"user",value:msg.author.tag}])
+ log("system","user removed from ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"removed_user",value:loguser.tag}])
+
+ const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
+ APIEvents.onTicketRemove(msg.author,loguser,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
+ APIEvents.onCommand("remove",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
})
if (!DISABLE.commands.slash.remove) client.on("interactionCreate",async (interaction) => {
@@ -57,23 +53,20 @@ module.exports = () => {
await interaction.deferReply()
- await interaction.channel.messages.fetchPinned().then(msglist => {
- var firstmsg = msglist.last()
- if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
- const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
- const ticketId = hiddendata.data.find(d => d.key == "type").value
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- interaction.channel.permissionOverwrites.delete(user.id)
- interaction.editReply({embeds:[bot.embeds.commands.removeEmbed(user,interaction.user)]})
+ interaction.channel.permissionOverwrites.delete(user.id)
+ interaction.editReply({embeds:[bot.embeds.commands.removeEmbed(user,interaction.user)]})
- var loguser = user
-
- log("command","someone used the 'remove' command",[{key:"user",value:interaction.user.tag}])
- log("system","user removed from ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"removed_user",value:loguser.tag}])
+ var loguser = user
+
+ log("command","someone used the 'remove' command",[{key:"user",value:interaction.user.tag}])
+ log("system","user removed from ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"removed_user",value:loguser.tag}])
- const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
- APIEvents.onTicketRemove(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
- APIEvents.onCommand("remove",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
- })
+ const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
+ APIEvents.onTicketRemove(interaction.user,loguser,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
+ APIEvents.onCommand("remove",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
})
}
\ No newline at end of file
diff --git a/commands/rename.js b/commands/rename.js
index 4d35f36..db14eb8 100644
--- a/commands/rename.js
+++ b/commands/rename.js
@@ -21,36 +21,31 @@ module.exports = () => {
return
}
- msg.channel.messages.fetchPinned().then(msglist => {
- 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").value
+ const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
+ if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- var newname = msg.content.split(config.prefix+"rename")[1].substring(1)
+ var newname = msg.content.split(config.prefix+"rename")[1].substring(1)
- if (!newname) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"rename `")]})
+ if (!newname) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"rename `")]})
- var name = msg.channel.name
- var prefix = ""
- const tickets = config.options
- tickets.forEach((ticket) => {
- if (name.startsWith(ticket.channelprefix)){
- prefix = ticket.channelprefix
- }
- })
-
- if (!prefix) prefix = "noprefix-"
-
- msg.channel.setName(prefix+newname)
- msg.channel.send({embeds:[bot.embeds.commands.renameEmbed(msg.author,prefix+newname)]})
-
- log("command","someone used the 'rename' command",[{key:"user",value:msg.author.tag}])
- log("system","ticket renamed",[{key:"user",value:msg.author.tag},{key:"ticket",value:name},{key:"newname",value:newname}])
- APIEvents.onCommand("rename",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
+ var name = msg.channel.name
+ var prefix = ""
+ const tickets = config.options
+ tickets.forEach((ticket) => {
+ if (name.startsWith(ticket.channelprefix)){
+ prefix = ticket.channelprefix
+ }
})
-
-
+
+ if (!prefix) prefix = "noprefix-"
+
+ msg.channel.setName(prefix+newname)
+ msg.channel.send({embeds:[bot.embeds.commands.renameEmbed(msg.author,prefix+newname)]})
+
+ log("command","someone used the 'rename' command",[{key:"user",value:msg.author.tag}])
+ log("system","ticket renamed",[{key:"user",value:msg.author.tag},{key:"ticket",value:name},{key:"newname",value:newname}])
+ APIEvents.onCommand("rename",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
})
if (!DISABLE.commands.slash.rename) client.on("interactionCreate",async (interaction) => {
@@ -65,31 +60,28 @@ module.exports = () => {
await interaction.deferReply()
- interaction.channel.messages.fetchPinned().then(msglist => {
- var firstmsg = msglist.last()
- if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
- const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
- const ticketId = hiddendata.data.find(d => d.key == "type").value
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- var newname = interaction.options.getString("name")
- var name = interaction.channel.name
- var prefix = ""
- const tickets = config.options
- tickets.forEach((ticket) => {
- if (name.startsWith(ticket.channelprefix)){
- prefix = ticket.channelprefix
- }
- })
-
- if (!prefix) prefix = "noprefix-"
-
- interaction.channel.setName(prefix+newname)
- interaction.editReply({embeds:[bot.embeds.commands.renameEmbed(interaction.user,prefix+newname)]})
-
- log("command","someone used the 'rename' command",[{key:"user",value:interaction.user.tag}])
- log("system","ticket renamed",[{key:"user",value:interaction.user.tag},{key:"ticket",value:name},{key:"newname",value:newname}])
-
- APIEvents.onCommand("rename",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
+ var newname = interaction.options.getString("name")
+ var name = interaction.channel.name
+ var prefix = ""
+ const tickets = config.options
+ tickets.forEach((ticket) => {
+ if (name.startsWith(ticket.channelprefix)){
+ prefix = ticket.channelprefix
+ }
})
+
+ if (!prefix) prefix = "noprefix-"
+
+ interaction.channel.setName(prefix+newname)
+ interaction.editReply({embeds:[bot.embeds.commands.renameEmbed(interaction.user,prefix+newname)]})
+
+ log("command","someone used the 'rename' command",[{key:"user",value:interaction.user.tag}])
+ log("system","ticket renamed",[{key:"user",value:interaction.user.tag},{key:"ticket",value:name},{key:"newname",value:newname}])
+
+ APIEvents.onCommand("rename",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
})
}
\ No newline at end of file
diff --git a/commands/reopen.js b/commands/reopen.js
index 52793fd..09d4678 100644
--- a/commands/reopen.js
+++ b/commands/reopen.js
@@ -15,22 +15,18 @@ module.exports = () => {
if (!DISABLE.commands.text.reopen) client.on("messageCreate",msg => {
if (!msg.content.startsWith(config.prefix+"reopen")) return
- msg.channel.messages.fetchPinned().then(msglist => {
- 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").value
+ const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
+ if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- if (hiddendata.data.find(h => h.key == "pendingdelete")) return msg.channel.send({embeds:[bot.errorLog.warning("Warning!","You can't re-open a ticket while it's being deleted!")]})
+ if (hiddendata.find(h => h.key == "pendingdelete")) return msg.channel.send({embeds:[bot.errorLog.warning("Warning!","You can't re-open a ticket while it's being deleted!")]})
- msg.channel.send({embeds:[bot.embeds.commands.reopenEmbed(msg.author)],components:[bot.buttons.close.openRowNormal]})
+ msg.channel.send({embeds:[bot.embeds.commands.reopenEmbed(msg.author)],components:[bot.buttons.close.openRowNormal]})
- require("../core/ticketActions/ticketReopener").reopenTicket(msg.guild,msg.channel,msg.author)
-
- log("command","someone used the 'reopen' command",[{key:"user",value:msg.author.tag}])
- APIEvents.onCommand("reopen",true,msg.author,msg.channel,msg.guild,new Date())
- })
+ require("../core/ticketActions/ticketReopener").reopenTicket(msg.guild,msg.channel,msg.author)
+ log("command","someone used the 'reopen' command",[{key:"user",value:msg.author.tag}])
+ APIEvents.onCommand("reopen",true,msg.author,msg.channel,msg.guild,new Date())
})
if (!DISABLE.commands.slash.reopen) client.on("interactionCreate",async (interaction) => {
@@ -39,22 +35,17 @@ module.exports = () => {
await interaction.deferReply()
- interaction.channel.messages.fetchPinned().then(async msglist => {
- var firstmsg = msglist.last()
- if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
- const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
- const ticketId = hiddendata.data.find(d => d.key == "type").value
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
- if (hiddendata.data.find(h => h.key == "pendingdelete")) return interaction.editReply({embeds:[bot.errorLog.warning("Warning!","You can't re-open a ticket while it's being deleted!")]})
+ if (hiddendata.data.find(h => h.key == "pendingdelete")) return interaction.editReply({embeds:[bot.errorLog.warning("Warning!","You can't re-open a ticket while it's being deleted!")]})
- await interaction.editReply({embeds:[bot.embeds.commands.reopenEmbed(interaction.user)],components:[bot.buttons.close.openRowNormal]})
+ await interaction.editReply({embeds:[bot.embeds.commands.reopenEmbed(interaction.user)],components:[bot.buttons.close.openRowNormal]})
- require("../core/ticketActions/ticketReopener").reopenTicket(interaction.guild,interaction.channel,interaction.user)
-
- log("command","someone used the 'reopen' command",[{key:"user",value:interaction.user.tag}])
- APIEvents.onCommand("reopen",true,interaction.user,interaction.channel,interaction.guild,new Date())
- })
-
-
+ require("../core/ticketActions/ticketReopener").reopenTicket(interaction.guild,interaction.channel,interaction.user)
+
+ log("command","someone used the 'reopen' command",[{key:"user",value:interaction.user.tag}])
+ APIEvents.onCommand("reopen",true,interaction.user,interaction.channel,interaction.guild,new Date())
})
}
\ No newline at end of file
diff --git a/commands/unclaim.js b/commands/unclaim.js
index 9c99c2f..f591b35 100644
--- a/commands/unclaim.js
+++ b/commands/unclaim.js
@@ -26,19 +26,20 @@ module.exports = () => {
const unclaimuser = storage.get("claimData",msg.channel.id)
if (!unclaimuser || unclaimuser == "false") return msg.channel.send({embeds:[bot.errorLog.serverError("This ticket isn't claimed yet!")]})
+ const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
+ if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
+
+ hiddendata.push({key:"claimedby",value:"false"})
+ bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
+ storage.set("claimData",msg.channel.id,"false")
+
msg.channel.messages.fetchPinned().then(msglist => {
/**@type {discord.Message} */
var firstmsg = msglist.last()
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
- const hdraw = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description)
- const hiddendata = hdraw.hiddenData
- const ticketId = hiddendata.data.find(d => d.key == "type").value
-
- hiddendata.data.push({key:"claimedby",value:"false"})
- storage.set("claimData",msg.channel.id,"false")
const newEmbed = new embed(firstmsg.embeds[0].data)
- .setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
if (ticketData && ticketData.autoclose.enable){
@@ -81,20 +82,20 @@ module.exports = () => {
const unclaimuser = storage.get("claimData",interaction.channel.id)
if (!unclaimuser || unclaimuser == "false") return interaction.editReply({embeds:[bot.errorLog.serverError("This ticket isn't claimed yet!")]})
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
+
+ hiddendata.push({key:"claimedby",value:"false"})
+ bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
+ storage.set("claimData",interaction.channel.id,"false")
interaction.channel.messages.fetchPinned().then(msglist => {
/**@type {discord.Message} */
var firstmsg = msglist.last()
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
- const hdraw = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description)
- const hiddendata = hdraw.hiddenData
- const ticketId = hiddendata.data.find(d => d.key == "type").value
- hiddendata.data.push({key:"claimedby",value:"false"})
- storage.set("claimData",interaction.channel.id,"false")
-
const newEmbed = new embed(firstmsg.embeds[0].data)
- .setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
if (ticketData && ticketData.autoclose.enable){
diff --git a/config.json b/config.json
index 463d6e8..9c9b707 100644
--- a/config.json
+++ b/config.json
@@ -102,7 +102,7 @@
"dropdown":false,
"enableFooter":false,
- "footer":"Open Ticket v3.3.3 - I'm a footer!",
+ "footer":"Open Ticket v3.4.0 - I'm a footer!",
"enableFooterImage":false,
"footerImage":"https://www.example.com/catmemes/cat.png",
diff --git a/core/interactionHandlers/handlers/accepted/claiming.js b/core/interactionHandlers/handlers/accepted/claiming.js
index ecd27f8..0f9bcb1 100644
--- a/core/interactionHandlers/handlers/accepted/claiming.js
+++ b/core/interactionHandlers/handlers/accepted/claiming.js
@@ -7,7 +7,6 @@ const log = bot.errorLog.log
const permissionChecker = require("../../../utils/permisssionChecker")
const storage = bot.storage
-const hiddendata = bot.hiddenData
const embed = discord.EmbedBuilder
const mc = config.color
const permsChecker = require("../../../utils/permisssionChecker")
@@ -32,20 +31,21 @@ module.exports = () => {
return
}
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
+
+ hiddendata.push({key:"claimedby",value:interaction.user.id})
+ bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
+ storage.set("claimData",interaction.channel.id,interaction.user.id)
+
interaction.channel.messages.fetchPinned().then(msglist => {
/**@type {discord.Message} */
var firstmsg = msglist.last()
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
- const hdraw = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description)
- const hiddendata = hdraw.hiddenData
- const ticketId = hiddendata.data.find(d => d.key == "type").value
-
- hiddendata.data.push({key:"claimedby",value:interaction.user.id})
- storage.set("claimData",interaction.channel.id,interaction.user.id)
const newEmbed = new embed(firstmsg.embeds[0].data)
.setFooter({text:"claimed by: "+interaction.user.tag,iconURL:interaction.user.displayAvatarURL()})
- .setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
diff --git a/core/ticketActions/ticketCloser.js b/core/ticketActions/ticketCloser.js
index f96213c..de4cbc0 100755
--- a/core/ticketActions/ticketCloser.js
+++ b/core/ticketActions/ticketCloser.js
@@ -73,26 +73,16 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
if (Number(storage.get("amountOfUserTickets",getuserID)) < 0) storage.set("amountOfUserTickets",getuserID,0)
//getID & send DM & send api event
- await channel.messages.fetchPinned().then(async 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").value.value
- const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
- require("../api/modules/events").onTicketDelete(user,channel,guild,new Date(),{name:channel.name,status:"deleted",ticketOptions:ticketData})
+ const hiddendata = bot.hiddenData.readHiddenData(channel.id)
+ if (hiddendata.length < 1) return channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
+ const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
- const id = hiddendata.data.find(d => d.key == "openerid").value
+ require("../api/modules/events").onTicketDelete(user,channel,guild,new Date(),{name:channel.name,status:"deleted",ticketOptions:ticketData})
- const sphd = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description)
- sphd.hiddenData.data.push({key:"pendingdelete",value:"true"})
- const newEmbed = new discord.EmbedBuilder(firstmsg.embeds[0].data)
- newEmbed.setDescription(sphd.description + bot.hiddenData.writeHiddenData(sphd.hiddenData.type,sphd.hiddenData.data))
- await firstmsg.edit({embeds:[newEmbed]})
-
- if (!id) return false
-
- })
+ hiddendata.push({key:"pendingdelete",value:"true"})
+ bot.hiddenData.writeHiddenData(channel.id,hiddendata)
}else if (mode == "close"){
//close
@@ -143,54 +133,39 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
const ticketInfoError = bot.errorLog.serverError("Unable to detect ticket information.\n*(First message that this bot sends)*\n\n__**Possible reasons:**__\n- you unpinned the first message\n- the first message is deleted\n- it has been unpinned & repinned after another message has been pinned.\n\n__**Possible solutions:**__\n- unpin all messages in this channel & repin the first message that this bot sent.\nIf this doesn't work, just delete the ticket manually!")
//add ticket adminroles
- await channel.messages.fetchPinned().then(msglist => {
- var firstmsg = msglist.last()
- if (firstmsg == undefined || firstmsg.author.id != client.user.id){
- var firstmsg = msglist.find((m => m.author.id == client.user.id))
- if (firstmsg == undefined || firstmsg.author.id != client.user.id){
- return channel.send({embeds:[ticketInfoError]})
- }
+
+ const hiddendata = bot.hiddenData.readHiddenData(channel.id)
+ if (hiddendata.length < 1) return channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
+ const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
+
+ if (!ticketData) return
+ if (ticketData.closedCategory.enable){
+ /**@type {discord.CategoryChannel} */
+ const category = guild.channels.cache.find(c => c.id == ticketData.closedCategory.id && c.type == discord.ChannelType.GuildCategory)
+ try {
+ channel.setParent(category)
+ }catch{
+ bot.errorLog.log("system","failed to move channel to new category!")
}
-
- if (firstmsg.embeds.length < 1 || !firstmsg.embeds[0].description.includes("OTDATA")) return channel.send({embeds:[ticketInfoError]})
+ }
- const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
- const ticketId = hiddendata.data.find(d => d.key == "type").value
- const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
-
- if (!ticketData) return
-
- if (ticketData.closedCategory.enable){
- /**@type {discord.CategoryChannel} */
- const category = guild.channels.cache.find(c => c.id == ticketData.closedCategory.id && c.type == discord.ChannelType.GuildCategory)
+ ticketData.adminroles.forEach((role,index) => {
+ if (!config.adminRoles.includes(role)){
try {
- channel.setParent(category)
+ const adminrole = guild.roles.cache.find(r => r.id == role)
+ if (!adminrole) return
+
+ permissionArray.push({
+ id:adminrole,
+ type:"role",
+ allow:[pfb.AddReactions,pfb.ViewChannel,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages],
+ deny:[]
+ })
}catch{
- bot.errorLog.log("system","failed to move channel to new category!")
+ log("system","invalid role! At 'config.json => options/ticket/...:"+index)
}
}
-
- /**
- * @type {String[]}
- */
- const ticketadmin = ticketData.adminroles
- ticketadmin.forEach((role,index) => {
- if (!config.adminRoles.includes(role)){
- try {
- const adminrole = guild.roles.cache.find(r => r.id == role)
- if (!adminrole) return
-
- permissionArray.push({
- id:adminrole,
- type:"role",
- allow:[pfb.AddReactions,pfb.ViewChannel,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages],
- deny:[]
- })
- }catch{
- log("system","invalid role! At 'config.json => options/ticket/...:"+index)
- }
- }
- })
})
channel.permissionOverwrites.set(permissionArray)
@@ -207,23 +182,8 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
log("system","closed a ticket",[{key:"user",value:user.tag},{key:"ticket",value:channel.name}])
- //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 hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
- const ticketId = hiddendata.data.find(d => d.key == "type").value
- const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
-
- require("../api/modules/events").onTicketClose(user,channel,guild,new Date(),{name:channel.name,status:"closed",ticketOptions:ticketData},newReason)
-
- const id = hiddendata.data.find(d => d.key == "openerid").value
-
- if (!id) return false
-
- })
-
-
+ //send api event
+ require("../api/modules/events").onTicketClose(user,channel,guild,new Date(),{name:channel.name,status:"closed",ticketOptions:ticketData},newReason)
}
/**
@@ -263,6 +223,9 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
const deleteHandler = async () => {
if (deleteRequired){
pendingDelete.shift()
+ //delete HIDDENDATA
+ storage.delete("HIDDENDATA",channel.id)
+
await channel.delete()
}
}
diff --git a/core/ticketActions/ticketOpener.js b/core/ticketActions/ticketOpener.js
index 8d17be8..984f275 100755
--- a/core/ticketActions/ticketOpener.js
+++ b/core/ticketActions/ticketOpener.js
@@ -132,25 +132,23 @@ module.exports = () => {
})
//add ticket adminroles
- /**
- * @type {String[]}
- */
- const readonlyTicketadmin = currentTicketOptions.readonlyAdminroles
- readonlyTicketadmin.forEach((role,index) => {
- if (!config.adminRoles.includes(role) && !currentTicketOptions.adminroles.includes(role)){
- try {
- const adminrole = guild.roles.cache.find(r => r.id == role)
- if (!adminrole) return
-
- permissionsArray.push({
- id:adminrole,
- type:"role",
- allow:[pfb.AddReactions,pfb.ViewChannel],
- deny:[pfb.SendMessages,pfb.AttachFiles,pfb.EmbedLinks]
- })
- }catch{}
- }
- })
+ if (currentTicketOptions.readonlyAdminroles){
+ currentTicketOptions.readonlyAdminroles.forEach((role,index) => {
+ if (!config.adminRoles.includes(role) && !currentTicketOptions.adminroles.includes(role)){
+ try {
+ const adminrole = guild.roles.cache.find(r => r.id == role)
+ if (!adminrole) return
+
+ permissionsArray.push({
+ id:adminrole,
+ type:"role",
+ allow:[pfb.AddReactions,pfb.ViewChannel],
+ deny:[pfb.SendMessages,pfb.AttachFiles,pfb.EmbedLinks]
+ })
+ }catch{}
+ }
+ })
+ }
//add member role
if (config.system.memberRole && ![" ","0","false","null","undefined"].includes(config.system.memberRole)){
@@ -178,7 +176,7 @@ module.exports = () => {
storage.set("userFromChannel",ticketChannel.id,interaction.member.id)
if (currentTicketOptions.autoclose.enable) storage.set("autocloseTickets",ticketChannel.id,currentTicketOptions.autoclose.inactiveHours)
- const hiddendata = bot.hiddenData.writeHiddenData("ticketdata",[{key:"type",value:currentTicketOptions.id},{key:"openerid",value:interaction.user.id},{key:"createdms",value:new Date().getTime()}])
+ bot.hiddenData.writeHiddenData(ticketChannel.id,[{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})
@@ -191,9 +189,7 @@ module.exports = () => {
}
if (currentTicketOptions.ticketmessage.length > 0){
- ticketEmbed.setDescription(currentTicketOptions.ticketmessage+hiddendata)
- }else{
- ticketEmbed.setDescription(hiddendata)
+ ticketEmbed.setDescription(currentTicketOptions.ticketmessage)
}
if (currentTicketOptions.thumbnail.enable) ticketEmbed.setThumbnail(currentTicketOptions.thumbnail.url)
diff --git a/core/transcriptSystem/communication/compileJson.js b/core/transcriptSystem/communication/compileJson.js
index a28a5f5..ed2145e 100644
--- a/core/transcriptSystem/communication/compileJson.js
+++ b/core/transcriptSystem/communication/compileJson.js
@@ -46,13 +46,9 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
})
msg.embeds.forEach((embed) => {
- if (embed.description){
- var desc = bot.hiddenData.removeHiddenData(embed.description).description
- }else{var desc = false}
-
embedArray.push({
title:embed.title || false,
- description:desc,
+ description:embed.description ? embed.description : false,
authorimg:((embed.author && embed.author.iconURL) ? embed.author.iconURL : false),
authortext:(embed.author ? embed.author.name : false),
footerimg:((embed.footer && embed.footer.iconURL) ? embed.footer.iconURL : false),
diff --git a/core/transcriptSystem/communication/template.json b/core/transcriptSystem/communication/template.json
index b8a3a0a..3c1ab69 100644
--- a/core/transcriptSystem/communication/template.json
+++ b/core/transcriptSystem/communication/template.json
@@ -1,6 +1,6 @@
{
"version":"1.0.0",
- "otversion":"3.3.3",
+ "otversion":"3.4.0",
"style":{
"enableCustomBackground":false,
"backgroundModus":"color OR image",
diff --git a/core/transcriptSystem/manager.js b/core/transcriptSystem/manager.js
index 15ee3da..7c447b7 100644
--- a/core/transcriptSystem/manager.js
+++ b/core/transcriptSystem/manager.js
@@ -36,16 +36,14 @@ module.exports = async (messages,guild,channel,user,reason) => {
const chName = channel.name
const chId = channel.id
- /**@param {discord.Collection>} msglist*/
- const asyncmanager = async (msglist) => {
- var firstmsg = msglist.last()
+ const asyncmanager = async () => {
+ const hiddendata = bot.hiddenData.readHiddenData(channel.id)
+ if (hiddendata.length < 1) return
+ const ticketId = hiddendata.find(d => d.key == "type").value
+ const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
- 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 = hiddendata.data.find(d => d.key == "openerid").value
- const opentime = new Date(Number(hiddendata.data.find(d => d.key == "createdms").value))
+ const id = hiddendata.find(d => d.key == "openerid").value
+ const opentime = new Date(Number(hiddendata.find(d => d.key == "createdms").value))
const ticketopener = client.users.cache.find(u => u.id == id)
@@ -148,5 +146,5 @@ module.exports = async (messages,guild,channel,user,reason) => {
}
}
}
- asyncmanager(msglist)
+ asyncmanager()
}
\ No newline at end of file
diff --git a/core/utils/hiddendata.js b/core/utils/hiddendata.js
index 2760edd..e5c3955 100644
--- a/core/utils/hiddendata.js
+++ b/core/utils/hiddendata.js
@@ -1,68 +1,49 @@
+const storage = require("../../index").storage
-/**@typedef {{type:String,data:[{key:String,value:String}],status:Boolean}} hiddenData */
+/**@typedef {[{key:String,value:String}]} hiddenData */
/**
*
- * @param {String} messageContent
+ * @param {String} channelid
* @returns {hiddenData}
*/
-exports.readHiddenData = (messageContent) => {
- //ticketdata//type:123|userid:456)
- if (!messageContent.includes("[ ](https://OTDATA|")) return {type:"",data:[],status:false}
- const rawhidden = messageContent.split("[ ](https://OTDATA|")[1]
- const rawhidden2 = rawhidden.split("//")
+exports.readHiddenData = (channelid) => {
+ const content = storage.get("HIDDENDATA",channelid)
+ if (!content) return {type:"",data:[],status:false}
- const datatype = rawhidden2[0]
- var rawhiddendata = rawhidden2[1]
- var rawhiddendataArray = rawhiddendata.split("")
- rawhiddendataArray.pop()
-
- rawhiddendata = rawhiddendataArray.join("")
-
- const splittedData = rawhiddendata.split("|")
-
- const resultData = []
- splittedData.forEach((data) => {
- // type:123
- const dataresult = data.split(":")
-
- resultData.push({key:dataresult[0],value:dataresult[1]})
- })
-
- return {type:datatype,data:resultData,status:true}
+ try {
+ return JSON.parse(content)
+ } catch {
+ return []
+ }
}
/**
*
- * @param {String} type
+ * @param {String} channelid
* @param {[{key:String,value:String}]} data
- * @returns {String}
+ * @returns {Boolean}
*/
-exports.writeHiddenData = (type,data) => {
- const dataValues = []
- data.forEach((d) => {
- dataValues.push(d.key+":"+d.value)
- })
-
- const datastring = dataValues.join("|")
-
- const result = "[ ](https://OTDATA|"+type+"//"+datastring+")"
-
- return result
+exports.writeHiddenData = (channelid,data) => {
+ try {
+ storage.set("HIDDENDATA",channelid,JSON.stringify(data))
+ return true
+ } catch {
+ return false
+ }
}
/**
*
- * @param {String} description
- * @returns {{description:String,hiddenData:hiddenData}}
+ * @param {String} channelid
+ * @returns {Boolean}
*/
-exports.removeHiddenData = (description) => {
- if (!description.includes("[ ](https://OTDATA|")) return {description:description,hiddenData:[]}
-
- const hiddenData = this.readHiddenData(description)
- const splitted = description.split("[ ](https://OTDATA")
- const original = splitted[0]
-
- return {description:original,hiddenData:hiddenData}
+exports.deleteHiddenData = (channelid) => {
+ try {
+ storage.delete("HIDDENDATA",channelid)
+ return true
+ } catch {
+ return false
+ }
}
\ No newline at end of file
diff --git a/index.js b/index.js
index ac2ffb1..fffbb54 100644
--- a/index.js
+++ b/index.js
@@ -28,7 +28,7 @@
INFORMATION:
============
- Open Ticket v3.3.3 - © DJdj Development
+ Open Ticket v3.4.0 - © DJdj Development
discord: https://discord.dj-dj.be
website: https://www.dj-dj.be
diff --git a/language/german.json b/language/german.json
index d8e1d12..82a06c7 100644
--- a/language/german.json
+++ b/language/german.json
@@ -36,7 +36,7 @@
"goToTicket":"Geh zu deinem Ticket",
"ticketWarning":"Die Einbettung befindet sich in der Nachricht unten!",
- "maxTicketWarning":"**Warnung:** _Sie können nur {0} ticket(s) erstellen zu einer Zeit!_"
+ "maxTicketWarning":"**Warnung:** _Es können maximal {0} Tickets zur gleichen Zeit geöffnet sein!_"
},
"helpMenu":{
"title":"Hilfe Menu:",
diff --git a/package.json b/package.json
index 9b42487..cad512f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "open-ticket",
- "version": "3.3.3",
+ "version": "3.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": {
@@ -15,8 +15,7 @@
"dependencies": {
"axios": "^0.27.2",
"chalk": "^5.0.1",
- "discord.js": "^14.8.0",
- "node": "^16.10.0"
+ "discord.js": "^14.9.0"
},
"repository": {
"type": "git",