diff --git a/.github/SECURITY.md b/.github/SECURITY.md
index 16e2882..9b71661 100644
--- a/.github/SECURITY.md
+++ b/.github/SECURITY.md
@@ -10,10 +10,11 @@ Support for Open Ticket is only available for the versions specified below!
| Version | Supported |
|-----------|-------------------|
+| 3.5.0 | ✅ |
| 3.4.4 | ✅ |
-| 3.4.2 | ✅ |
-| 3.4.1 | 🟧 |
-| < 3.4.1 | ❌ |
+| 3.4.3 | ✅ |
+| 3.4.2 | 🟧 |
+| < 3.4.2 | ❌ |
## Reporting a Vulnerability
diff --git a/README.md b/README.md
index 4531714..25c8489 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ It is expected to have a public beta release somewhere around 30 September!
-[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v3.4.4) []() [](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.5.0) []() [](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [](https://docs.openticket.dj-dj.be)
### Open Ticket
Open Ticket is the most customisable discord ticket bot that you will ever find! There are more than 150 options to customise in the config! This includes html transcripts, unlimited amount of tickets, custom embeds & more! Did you know that even the html transcripts are highly customisable? Don't wait and check it out! If you're having trouble setting the bot up, feel free to join our support server and we will help you further!
@@ -71,7 +71,7 @@ Translators
|Ukrainian |anderskiy |
## links
-current version: _v3.4.4_
+current version: _v3.5.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 643ccb3..3ca6c5c 100644
--- a/commands/add.js
+++ b/commands/add.js
@@ -18,14 +18,15 @@ module.exports = () => {
if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"add `")]})
if (!msg.guild) return
- if (!permsChecker.command(msg.author.id,msg.guild.id)){
- permsChecker.sendUserNoPerms(msg.author)
- return
- }
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 (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
+ permsChecker.sendUserNoPerms(msg.author)
+ return
+ }
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)]})
@@ -37,7 +38,7 @@ module.exports = () => {
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.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
})
if (!DISABLE.commands.slash.add) client.on("interactionCreate",async (interaction) => {
@@ -46,17 +47,18 @@ module.exports = () => {
const user = interaction.options.getUser("user")
if (!interaction.guild) return
- if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
+
+ 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 (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
permsChecker.sendUserNoPerms(interaction.user)
return
}
await interaction.deferReply()
- 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)]})
@@ -66,7 +68,7 @@ module.exports = () => {
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())
+ APIEvents.onCommand("add",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),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 b3e1b94..5232e70 100644
--- a/commands/change.js
+++ b/commands/change.js
@@ -17,14 +17,15 @@ module.exports = () => {
if (!msg.channel.isTextBased()) return
if (!msg.guild) return
- if (!permsChecker.command(msg.author.id,msg.guild.id)){
- permsChecker.sendUserNoPerms(msg.author)
- return
- }
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 (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
+ permsChecker.sendUserNoPerms(msg.author)
+ return
+ }
const list = []
config.options.forEach((o) => {
@@ -67,7 +68,7 @@ module.exports = () => {
log("command","someone used the 'change' command",[{key:"user",value:msg.author.username}])
log("system","ticket type changed",[{key:"user",value:msg.author.username},{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())
+ APIEvents.onCommand("change",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
})
if (!DISABLE.commands.slash.change) client.on("interactionCreate",async (interaction) => {
@@ -76,15 +77,17 @@ module.exports = () => {
if (!interaction.channel.isTextBased()) return
if (!interaction.guild) return
- if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
+
+ 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 (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
permsChecker.sendUserNoPerms(interaction.user)
return
}
await interaction.deferReply()
- 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) => {
@@ -126,6 +129,6 @@ module.exports = () => {
log("command","someone used the 'change' command",[{key:"user",value:interaction.user.username}])
log("system","ticket type changed",[{key:"user",value:interaction.user.username},{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())
+ APIEvents.onCommand("change",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),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 82dee24..bbc82a6 100644
--- a/commands/claim.js
+++ b/commands/claim.js
@@ -21,15 +21,16 @@ module.exports = () => {
const claimingUser = user ? user : msg.author
if (!msg.guild) return
- if (!permsChecker.command(msg.author.id,msg.guild.id)){
- permsChecker.sendUserNoPerms(msg.author)
- return
- }
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 (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
+ permsChecker.sendUserNoPerms(msg.author)
+ return
+ }
+
hiddendata.push({key:"claimedby",value:claimingUser.id})
bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
storage.set("claimData",msg.channel.id,claimingUser.id)
@@ -55,7 +56,7 @@ module.exports = () => {
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())
+ APIEvents.onCommand("claim",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
})
if (!DISABLE.commands.slash.claim) client.on("interactionCreate",async (interaction) => {
@@ -64,17 +65,18 @@ module.exports = () => {
const user = interaction.options.getUser("user",false) ? interaction.options.getUser("user",true) : interaction.user
if (!interaction.guild) return
- if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
+
+ 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 (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
permsChecker.sendUserNoPerms(interaction.user)
return interaction.reply({content:":x: "+l.errors.noPermsTitle,ephemeral:true})
}
await interaction.deferReply()
- 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:user.id})
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
storage.set("claimData",interaction.channel.id,user.id)
@@ -100,6 +102,6 @@ module.exports = () => {
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())
+ APIEvents.onCommand("claim",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),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 6606317..0ea6f21 100644
--- a/commands/delete.js
+++ b/commands/delete.js
@@ -16,15 +16,16 @@ module.exports = () => {
if (!msg.content.startsWith(config.prefix+"delete")) return
if (!msg.guild) return
- if (!permsChecker.command(msg.author.id,msg.guild.id)){
- permsChecker.sendUserNoPerms(msg.author)
- return
- }
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 (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
+ permsChecker.sendUserNoPerms(msg.author)
+ return
+ }
+
msg.channel.send({embeds:[bot.embeds.commands.deleteEmbed(msg.author)]})
var name = msg.channel.name
@@ -39,7 +40,7 @@ module.exports = () => {
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.username}])
- APIEvents.onCommand("delete",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
+ APIEvents.onCommand("delete",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
})
@@ -48,17 +49,18 @@ module.exports = () => {
if (interaction.commandName != "delete") return
if (!interaction.guild) return
- if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
+
+ 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 (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
permsChecker.sendUserNoPerms(interaction.user)
return interaction.reply({embeds:[bot.errorLog.noPermsDelete(interaction.user)]})
}
await interaction.deferReply()
- 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)]})
var name = interaction.channel.name
@@ -73,6 +75,6 @@ module.exports = () => {
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.username}])
- APIEvents.onCommand("delete",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
+ APIEvents.onCommand("delete",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),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 357ea25..b7b1fa3 100644
--- a/commands/remove.js
+++ b/commands/remove.js
@@ -18,15 +18,16 @@ module.exports = () => {
if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"remove `")]})
if (!msg.guild) return
- if (!permsChecker.command(msg.author.id,msg.guild.id)){
- permsChecker.sendUserNoPerms(msg.author)
- return
- }
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 (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
+ permsChecker.sendUserNoPerms(msg.author)
+ return
+ }
+
msg.channel.permissionOverwrites.delete(user.id)
msg.channel.send({embeds:[bot.embeds.commands.removeEmbed(user,msg.author)]})
@@ -37,7 +38,7 @@ module.exports = () => {
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())
+ APIEvents.onCommand("remove",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
})
if (!DISABLE.commands.slash.remove) client.on("interactionCreate",async (interaction) => {
@@ -46,17 +47,18 @@ module.exports = () => {
const user = interaction.options.getUser("user")
if (!interaction.guild) return
- if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
+
+ 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 (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
permsChecker.sendUserNoPerms(interaction.user)
return
}
await interaction.deferReply()
- 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)]})
@@ -67,6 +69,6 @@ module.exports = () => {
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())
+ APIEvents.onCommand("remove",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),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 516644b..ee3362b 100644
--- a/commands/rename.js
+++ b/commands/rename.js
@@ -16,14 +16,15 @@ module.exports = () => {
if (!msg.content.startsWith(config.prefix+"rename")) return
if (!msg.guild) return
- if (!permsChecker.command(msg.author.id,msg.guild.id)){
- permsChecker.sendUserNoPerms(msg.author)
- return
- }
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 (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
+ permsChecker.sendUserNoPerms(msg.author)
+ return
+ }
var newname = msg.content.split(config.prefix+"rename")[1].substring(1)
@@ -44,7 +45,7 @@ module.exports = () => {
log("command","someone used the 'rename' command",[{key:"user",value:msg.author.username}])
log("system","ticket renamed",[{key:"user",value:msg.author.username},{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())
+ APIEvents.onCommand("rename",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
})
if (!DISABLE.commands.slash.rename) client.on("interactionCreate",async (interaction) => {
@@ -52,16 +53,17 @@ module.exports = () => {
if (interaction.commandName != "rename") return
if (!interaction.guild) return
- if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
+
+ 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 (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
permsChecker.sendUserNoPerms(interaction.user)
return
}
await interaction.deferReply()
-
- 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
@@ -81,6 +83,6 @@ module.exports = () => {
log("command","someone used the 'rename' command",[{key:"user",value:interaction.user.username}])
log("system","ticket renamed",[{key:"user",value:interaction.user.username},{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())
+ APIEvents.onCommand("rename",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),interaction.user,interaction.channel,interaction.guild,new Date())
})
}
\ No newline at end of file
diff --git a/commands/ticket.js b/commands/ticket.js
index 2809c4c..5e3eab0 100644
--- a/commands/ticket.js
+++ b/commands/ticket.js
@@ -23,7 +23,7 @@ module.exports = () => {
if (msg.content.startsWith(config.prefix+"msg"||config.prefix+"message")){
if (!msg.guild) return
- if (!permsChecker.command(msg.author.id,msg.guild.id)){
+ if (!permsChecker.global(msg.author.id,msg.guild.id)){
permsChecker.sendUserNoPerms(msg.author)
return
}
@@ -39,7 +39,7 @@ module.exports = () => {
msg.channel.send({embeds:[embed],components:componentRows})
log("command","someone used the 'message' command",[{key:"user",value:msg.author.username},{key:"id",value:id}])
- APIEvents.onCommand("message",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
+ APIEvents.onCommand("message",permsChecker.global(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
}
})
@@ -48,7 +48,7 @@ module.exports = () => {
if (interaction.commandName != "message") return
if (!interaction.guild) return
- if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
+ if (!permsChecker.global(interaction.user.id,interaction.guild.id)){
permsChecker.sendUserNoPerms(interaction.user)
return
}
@@ -64,7 +64,7 @@ module.exports = () => {
log("command","someone used the 'message' command",[{key:"user",value:interaction.user.username},{key:"id",value:id}])
- APIEvents.onCommand("message",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
+ APIEvents.onCommand("message",permsChecker.global(interaction.user.id,interaction.guild.id),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 c254238..7082803 100644
--- a/commands/unclaim.js
+++ b/commands/unclaim.js
@@ -18,7 +18,12 @@ module.exports = () => {
if (!msg.content.startsWith(config.prefix+"unclaim")) return
if (!msg.guild) return
- if (!permsChecker.command(msg.author.id,msg.guild.id)){
+
+ 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 (!permsChecker.ticket(msg.author.id,msg.guild.id,ticketId)){
permsChecker.sendUserNoPerms(msg.author)
return
}
@@ -26,10 +31,6 @@ 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")
@@ -62,7 +63,7 @@ module.exports = () => {
APIEvents.onTicketUnclaim(msg.author,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
- APIEvents.onCommand("unclaim",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
+ APIEvents.onCommand("unclaim",permsChecker.ticket(msg.author.id,msg.guild.id,ticketId),msg.author,msg.channel,msg.guild,new Date())
})
})
@@ -71,7 +72,12 @@ module.exports = () => {
if (interaction.commandName != "unclaim") return
if (!interaction.guild) return
- if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
+
+ 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 (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
permsChecker.sendUserNoPerms(interaction.user)
interaction.reply({content:":x: "+l.errors.noPermsTitle,ephemeral:true})
return
@@ -82,10 +88,6 @@ 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")
@@ -117,7 +119,7 @@ module.exports = () => {
log("system","user unclaimed from ticket",[{key:"user",value:interaction.user.username},{key:"ticket",value:interaction.channel.name},{key:"unclaimed_user",value:unclaimuser}])
APIEvents.onTicketUnclaim(interaction.user,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
- APIEvents.onCommand("unclaim",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
+ APIEvents.onCommand("unclaim",permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId),interaction.user,interaction.channel,interaction.guild,new Date())
})
})
}
\ No newline at end of file
diff --git a/config.json b/config.json
index b374492..56791f4 100644
--- a/config.json
+++ b/config.json
@@ -111,7 +111,7 @@
"dropdown":false,
"enableFooter":false,
- "footer":"Open Ticket v3.4.4 - I'm a footer!",
+ "footer":"Open Ticket v3.5.0 - I'm a footer!",
"enableFooterImage":false,
"footerImage":"https://www.example.com/catmemes/cat.png",
diff --git a/core/checker.js b/core/checker.js
index 38516f0..4559152 100644
--- a/core/checker.js
+++ b/core/checker.js
@@ -434,7 +434,7 @@ exports.checker = async () => {
//status:
checkType(config.status.enabled,"boolean","status/enabled")
if (config.status.enabled){
- if (config.status.type != "PLAYING" && config.status.type != "LISTENING" && config.status.type != "WATCHING"){
+ if (config.status.type != "PLAYING" && config.status.type != "LISTENING" && config.status.type != "WATCHING" && config.status.type != "CUSTOM"){
createError("'status/type' | not a valid status type! (LISTENING,WATCHING,PLAYING)")
}
if (config.status.text.length < 1){
diff --git a/core/dynamicdatabase/dynamicfiles/database.js b/core/dynamicdatabase/databases/main.js
similarity index 100%
rename from core/dynamicdatabase/dynamicfiles/database.js
rename to core/dynamicdatabase/databases/main.js
diff --git a/core/dynamicdatabase/databases/stats.js b/core/dynamicdatabase/databases/stats.js
new file mode 100644
index 0000000..388b9eb
--- /dev/null
+++ b/core/dynamicdatabase/databases/stats.js
@@ -0,0 +1,82 @@
+const fs = require("fs")
+const location = "./storage/stats.json"
+
+
+/**@returns {[{category:String, key:String, value:String}]}*/
+function getData(){
+ if (fs.existsSync(location)){
+ return JSON.parse(fs.readFileSync(location).toString())
+ }else{
+ fs.writeFileSync(location,"[]")
+ return []
+ }
+}
+/**@param {[{category:String, key:String, value:String}]} data*/
+function setData(data){
+ fs.writeFileSync(location,JSON.stringify(data,null,"\t"))
+}
+
+exports.set = (category,key,value) => {
+ const currentData = getData()
+ const exists = currentData.find((d) => (d.category == category) && (d.key == key)) ? true : false
+ var newData = []
+ if (exists){
+ currentData.forEach((d,i) => {
+ if (d.category == category && d.key == key){
+ newData.push({category,key,value})
+ }else{
+ newData.push(d)
+ }
+ })
+ }else{
+ currentData.push({category,key,value})
+ newData = currentData
+ }
+
+ setData(newData)
+ return exists
+}
+/**
+ * @param {String} category
+ * @param {String} key
+ * @returns {String|false}
+ */
+exports.get = (category,key) => {
+ const currentData = getData()
+ const tempresult = currentData.find((d) => (d.category == category) && (d.key == key))
+ const result = tempresult ? tempresult.value : false
+ return result
+}
+
+/**
+ * @param {String} category
+ * @returns {[{key:String,value:String}]|false}
+ */
+exports.getCategory = (category) => {
+ const currentData = getData()
+ const result = currentData.filter((v) => v.category == category)
+ return result
+}
+
+/**
+ * @param {String} category
+ * @param {String} key
+ * @param {String} value
+ */
+exports.delete = (category,key) => {
+ const currentData = getData()
+ const exists = currentData.find((d) => (d.category == category) && (d.key == key)) ? true : false
+ var newData = []
+ if (exists){
+ currentData.forEach((d,i) => {
+ if (!(d.category == category && d.key == key)){
+ newData.push(d)
+ }
+ })
+ }else{
+ newData = currentData
+ }
+
+ setData(newData)
+ return exists
+}
\ No newline at end of file
diff --git a/core/dynamicdatabase/dynamicfiles/local.js b/core/dynamicdatabase/dynamicfiles/local.js
deleted file mode 100644
index 4ee9d79..0000000
--- a/core/dynamicdatabase/dynamicfiles/local.js
+++ /dev/null
@@ -1,43 +0,0 @@
-const localstorage = require("node-localstorage")
-
-const ls = new localstorage.LocalStorage("./storage/dynamicDB")
-
-/**
- *
- * @param {String} category
- * @param {String} id
- * @param {String} value
- * @returns {Boolean}
- */
-exports.set = (category,id,value) => {
- ls.setItem(category+"--"+id,value.toString())
- return true
-}
-
-/**
- *
- * @param {String} category
- * @param {String} id
- * @returns {String|false}
- */
-exports.get = (category,id) => {
- const result = ls.getItem(category+"--"+id)
- if (!result) return false
-
- return result
-}
-
-/**
- *
- * @param {String} category
- * @param {String} id
- * @returns {Boolean}
- */
-exports.delete = (category,id) => {
- ls.removeItem(category+"--"+id)
- return true
-}
-
-this.set("category","key","value")
-this.get("category","key",)
-this.delete("category","key")
\ No newline at end of file
diff --git a/core/dynamicdatabase/storage.js b/core/dynamicdatabase/storage.js
index 9d150be..b32f4de 100644
--- a/core/dynamicdatabase/storage.js
+++ b/core/dynamicdatabase/storage.js
@@ -9,11 +9,15 @@ ALL DATABASE FILES NEED TO EXPORT THE FOLLOWING FUNCTIONS:
*/
try {
- var db = require("./dynamicfiles/database")
+ var main = require("./databases/main")
+ var stats = require("./databases/stats")
}catch(err){
console.log(err)
- console.log("I couldn't find the database file! (location: ./core/dynamicdatabase/storage.js:2)")
+ console.log("Unable to find the database handlers!")
process.exit(1)
}
-module.exports = db
\ No newline at end of file
+module.exports = {
+ main,
+ stats
+}
\ No newline at end of file
diff --git a/core/errorLogSystem.js b/core/errorLogSystem.js
index 20593b8..3da2340 100644
--- a/core/errorLogSystem.js
+++ b/core/errorLogSystem.js
@@ -14,7 +14,7 @@ const c = discord.Colors
exports.noPermsMessage = (user) => {
return new embed()
.setColor(c.Red)
- .setTitle(":x: "+l.errors.noPermsTitle)
+ .setTitle("❌ "+l.errors.noPermsTitle)
.setDescription(l.errors.noPermsDescription)
.setFooter({iconURL:user.displayAvatarURL(),text:user.username})
}
@@ -23,7 +23,7 @@ exports.noPermsMessage = (user) => {
exports.noPermsDelete = (user) => {
return new embed()
.setColor(c.Red)
- .setTitle(":x: "+l.errors.noPermsTitle)
+ .setTitle("❌ "+l.errors.noPermsTitle)
.setDescription(l.errors.noPermsDelete)
.setFooter({iconURL:user.displayAvatarURL(),text:user.username})
}
@@ -32,7 +32,7 @@ exports.noPermsDelete = (user) => {
exports.invalidArgsMessage = (message) => {
var x = new embed()
.setColor(c.Red)
- .setTitle(":x: "+l.errors.missingArgsTitle)
+ .setTitle("❌ "+l.errors.missingArgsTitle)
.setDescription(message)
return x
@@ -42,7 +42,7 @@ exports.invalidArgsMessage = (message) => {
exports.serverError = (message) => {
var x = new embed()
.setColor(c.Orange)
- .setTitle(":warning: "+l.errors.boterror)
+ .setTitle("⚠️ "+l.errors.boterror)
.setDescription(message)
return x
@@ -53,19 +53,19 @@ exports.invalidIdChooseFromList = (list,message) => {
const beforemsg = message ? message+"\n\n" : ""
var x = new embed()
.setColor(c.Red)
- .setTitle(":x: "+l.errors.chooseFromListTitle)
+ .setTitle("❌ "+l.errors.chooseFromListTitle)
.setDescription(beforemsg+l.errors.chooseFromListDescription+"\n`"+list.join("`\n`")+"`")
return x
}
exports.failedRenameChannel = new embed()
.setColor(c.Red)
- .setTitle(":x: Failed to rename channel")
+ .setTitle("❌ Failed to rename channel")
.setDescription("Discord channels can only be renamed twice every 10 minutes! Open Ticket can't do anything about this error!")
exports.notInATicket = new embed()
.setColor(c.Red)
- .setTitle(":x: "+l.errors.notInTicketTitle)
+ .setTitle("❌ "+l.errors.notInTicketTitle)
.setDescription(l.errors.notInTicketDescription)
@@ -73,7 +73,7 @@ exports.notInATicket = new embed()
exports.success = (title,message) => {
var x = new embed()
.setColor(config.color)
- .setTitle(":white_check_mark: "+title)
+ .setTitle("✅ "+title)
.setDescription(message)
return x
@@ -83,7 +83,7 @@ exports.success = (title,message) => {
exports.warning = (title,message) => {
var x = new embed()
.setColor(c.Orange)
- .setTitle(":warning: "+title)
+ .setTitle("⚠️ "+title)
.setDescription(message)
return x
diff --git a/core/interactionHandlers/handlers/accepted/claiming.js b/core/interactionHandlers/handlers/accepted/claiming.js
index e8fe982..a9a40f9 100644
--- a/core/interactionHandlers/handlers/accepted/claiming.js
+++ b/core/interactionHandlers/handlers/accepted/claiming.js
@@ -26,15 +26,16 @@ module.exports = () => {
}catch{}
if (!interaction.guild) return
- if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
- permsChecker.sendUserNoPerms(interaction.user)
- 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
+ if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
+ permsChecker.sendUserNoPerms(interaction.user)
+ return
+ }
+
hiddendata.push({key:"claimedby",value:interaction.user.id})
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
storage.set("claimData",interaction.channel.id,interaction.user.id)
diff --git a/core/interactionHandlers/handlers/accepted/closing.js b/core/interactionHandlers/handlers/accepted/closing.js
index 1ce19b8..7f2eb40 100644
--- a/core/interactionHandlers/handlers/accepted/closing.js
+++ b/core/interactionHandlers/handlers/accepted/closing.js
@@ -31,8 +31,12 @@ module.exports = () => {
const firstcomponents = interaction.message.components
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
+
if (config.system.closeMode == "adminonly"){
- if (!permissionChecker.command(interaction.user.id,interaction.guild.id)){
+ if (!permissionChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
if (!permissionChecker.sendUserNoPerms(interaction.user)){
permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user)
}
diff --git a/core/interactionHandlers/handlers/accepted/closingReason.js b/core/interactionHandlers/handlers/accepted/closingReason.js
index 5aa3bdd..7e23d9c 100644
--- a/core/interactionHandlers/handlers/accepted/closingReason.js
+++ b/core/interactionHandlers/handlers/accepted/closingReason.js
@@ -56,8 +56,12 @@ module.exports = () => {
const firstcomponents = interaction.message.components
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
+
if (config.system.closeMode == "adminonly"){
- if (!permissionChecker.command(interaction.user.id,interaction.guild.id)){
+ if (!permissionChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
if (!permissionChecker.sendUserNoPerms(interaction.user)){
permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user)
}
diff --git a/core/interactionHandlers/handlers/accepted/deleting.js b/core/interactionHandlers/handlers/accepted/deleting.js
index ca51707..3b57f8a 100644
--- a/core/interactionHandlers/handlers/accepted/deleting.js
+++ b/core/interactionHandlers/handlers/accepted/deleting.js
@@ -29,7 +29,11 @@ module.exports = () => {
const firstcomponents = bot.buttons.close.openRowNormal
- if (!permissionChecker.command(interaction.user.id,interaction.guild.id)){
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
+
+ if (!permissionChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
if (!permissionChecker.sendUserNoDelete(interaction.user)){
permissionChecker.sendChannelNoDelete(interaction.channel,interaction.user)
}
@@ -69,7 +73,11 @@ module.exports = () => {
const firstcomponents = bot.buttons.close.closeCommandRow
- if (!permissionChecker.command(interaction.user.id,interaction.guild.id)){
+ const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
+ if (hiddendata.length < 1) return interaction.channel.send({embeds:[bot.errorLog.notInATicket]})
+ const ticketId = hiddendata.find(d => d.key == "type").value
+
+ if (!permissionChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
if (!permissionChecker.sendUserNoDelete(interaction.user)){
permissionChecker.sendChannelNoDelete(interaction.channel,interaction.user)
}
diff --git a/core/ticketActions/ticketCloser.js b/core/ticketActions/ticketCloser.js
index 8780c7b..999e15e 100755
--- a/core/ticketActions/ticketCloser.js
+++ b/core/ticketActions/ticketCloser.js
@@ -51,9 +51,14 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
if (mode == "delete" || mode == "deletenotranscript"){
//delete
+ 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)
+
//check perms
if (!guild) return
- if (!permsChecker.command(user.id,guild.id)){
+ if (!permsChecker.ticket(user.id,guild.id,ticketId)){
permsChecker.sendUserNoPerms(user)
return
}
@@ -72,13 +77,6 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
storage.delete("autocloseTickets",channel.id)
if (Number(storage.get("amountOfUserTickets",getuserID)) < 0) storage.set("amountOfUserTickets",getuserID,0)
- //getID & send DM & send api event
-
- 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)
-
require("../api/modules/events").onTicketDelete(user,channel,guild,new Date(),{name:channel.name,status:"deleted",ticketOptions:ticketData})
hiddendata.push({key:"pendingdelete",value:"true"})
@@ -86,10 +84,15 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
}else if (mode == "close"){
//close
+ 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)
+
//check perms
if (config.system.closeMode == "adminonly"){
if (!guild) return
- if (!permsChecker.command(user.id,guild.id)){
+ if (!permsChecker.ticket(user.id,guild.id,ticketId)){
permsChecker.sendUserNoPerms(user)
return
}
@@ -129,16 +132,6 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
}
})
- //ticketinfo error
- 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
-
- 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} */
diff --git a/core/utils/liveStatus.js b/core/utils/liveStatus.js
index 7453264..b7d73a3 100644
--- a/core/utils/liveStatus.js
+++ b/core/utils/liveStatus.js
@@ -189,7 +189,7 @@ exports.liveStatusUploadManager = async (err) => {
//system:config.system
},
language:config.languageFile,
- version:"3.4.4",
+ version:"3.5.0",
slashcmds:slashMode,
transcripts:transcriptMode,
plugins:fs.readdirSync("./plugins"),
diff --git a/core/utils/permisssionChecker.js b/core/utils/permisssionChecker.js
index ab318fc..9653dfc 100644
--- a/core/utils/permisssionChecker.js
+++ b/core/utils/permisssionChecker.js
@@ -12,12 +12,12 @@ const storage = bot.storage
* @param {String} guildid
* @returns {Boolean} has permissions?
*/
-exports.command = (memberid,guildid) => {
+exports.global = (memberid,guildid) => {
bot.actionRecorder.push({
category:"ot.managers.permissionChecker",
file:"./core/permissionChecker.js",
time:new Date().getTime(),
- type:"command"
+ type:"global"
})
const permsmember = client.guilds.cache.find(g => g.id == guildid).members.cache.find(m => m.id == memberid)
if (config.adminRoles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("ManageGuild")){
@@ -25,6 +25,33 @@ exports.command = (memberid,guildid) => {
}else {return true}
}
+/**
+ *
+ * @param {String} memberid
+ * @param {String} guildid
+ * @param {String} optionid
+ * @returns {Boolean} has permissions?
+ */
+exports.ticket = (memberid,guildid,optionid) => {
+ bot.actionRecorder.push({
+ category:"ot.managers.permissionChecker",
+ file:"./core/permissionChecker.js",
+ time:new Date().getTime(),
+ type:"ticket"
+ })
+
+ const option = config.options.find((opt) => opt.id == optionid)
+ const ticketadmins = option && option.adminroles ? option.adminroles : []
+ const permsmember = client.guilds.cache.find(g => g.id == guildid).members.cache.find(m => m.id == memberid)
+
+ const isGlobalAdmin = config.adminRoles.some((item)=>{return permsmember.roles.cache.has(item)})
+ const isTicketAdmin = ticketadmins.some((item)=>{return permsmember.roles.cache.has(item)})
+ const hasAdministrator = permsmember.permissions.has("Administrator")
+ const hasManageGuild = permsmember.permissions.has("ManageGuild")
+
+ return isGlobalAdmin || isTicketAdmin || hasAdministrator || hasManageGuild
+}
+
/**
*
* @param {discord.User} user
diff --git a/index.js b/index.js
index d358648..41edf04 100644
--- a/index.js
+++ b/index.js
@@ -28,7 +28,7 @@
INFORMATION:
============
- Open Ticket v3.4.4 - © DJdj Development
+ Open Ticket v3.5.0 - © DJdj Development
discord: https://discord.dj-dj.be
website: https://www.dj-dj.be
@@ -87,9 +87,12 @@ exports.language = language
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded language")
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded config")
-exports.storage = require('./core/dynamicdatabase/storage')
+exports.storage = require('./core/dynamicdatabase/storage').main
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded storage")
+exports.statsStorage = require('./core/dynamicdatabase/storage').stats
+if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded stats storage")
+
exports.errorLog = require("./core/errorLogSystem")
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","LOADED LOGGING SYSTEM")
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","switching to new logs")
@@ -118,17 +121,19 @@ client.on('ready',async () => {
time:new Date().getTime(),
type:"client.loggedin.success"
})
- var statusSet = false
const setStatus = (type,text) => {
- if (statusSet == true) return
- const getTypeEnum = (text) => {
- if (text.toLowerCase() == "playing") return discord.ActivityType.Playing
- else if (text.toLowerCase() == "listening") return discord.ActivityType.Listening
- else if (text.toLowerCase() == "watching") return discord.ActivityType.Watching
+ const getTypeEnum = (type) => {
+ if (type.toLowerCase() == "playing") return discord.ActivityType.Playing
+ else if (type.toLowerCase() == "listening") return discord.ActivityType.Listening
+ else if (type.toLowerCase() == "watching") return discord.ActivityType.Watching
+ else if (type.toLowerCase() == "custom") return discord.ActivityType.Custom
else return discord.ActivityType.Listening
}
- client.user.setActivity(text,{type:getTypeEnum(type)})
- statusSet = true
+ client.user.setActivity({
+ type:getTypeEnum(type),
+ state:(text.toLowerCase() == "custom") ? text : undefined,
+ name:text
+ })
}
this.errorLog.log("debug","bot status loaded")
this.actionRecorder.push({
@@ -153,6 +158,7 @@ client.on('ready',async () => {
this.errorLog.log("debug","loaded console interface")
if (config.status.enabled){
+ console.log("TEST STATUS (delete me)")
setStatus(config.status.type,config.status.text)
}
diff --git a/language/arabic.json b/language/arabic.json
index 06b9e08..6a9f3b3 100644
--- a/language/arabic.json
+++ b/language/arabic.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"ChilledBroke#9986 & M4#5882",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors": {
"missingArgsTitle": "قيمة غير صالحة!",
diff --git a/language/custom.json b/language/custom.json
index 81dd42a..2808e28 100644
--- a/language/custom.json
+++ b/language/custom.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"DJdj Development",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Invalid Arguments!",
diff --git a/language/czech.json b/language/czech.json
index 28189e6..2f0e24a 100644
--- a/language/czech.json
+++ b/language/czech.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"spyeye_",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Neplatný Argument!",
diff --git a/language/danish.json b/language/danish.json
index 7e24d15..8c0c8a9 100644
--- a/language/danish.json
+++ b/language/danish.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"the_gamer#5095",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors": {
"missingArgsTitle": "Ugyldigt Argument!",
diff --git a/language/dutch.json b/language/dutch.json
index bf5dc7e..1351f71 100644
--- a/language/dutch.json
+++ b/language/dutch.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"DJj123dj#1706",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Onjuiste parameters!",
diff --git a/language/english.json b/language/english.json
index bf31edc..cea1d1c 100644
--- a/language/english.json
+++ b/language/english.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"DJdj Development",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Invalid Arguments!",
diff --git a/language/french.json b/language/french.json
index f91916f..afb523e 100644
--- a/language/french.json
+++ b/language/french.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"Sanke#6086",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Arguments invalides!",
diff --git a/language/german.json b/language/german.json
index 8d5a3a5..28d0996 100644
--- a/language/german.json
+++ b/language/german.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"david.#8276 ",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Ungültiges Argument!",
diff --git a/language/greek.json b/language/greek.json
index a3f5cba..ef1e609 100644
--- a/language/greek.json
+++ b/language/greek.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"ꙅoᴎɒᎸɘƚꙅ#3744",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Invalid Arguments!",
diff --git a/language/hungarian.json b/language/hungarian.json
index 67f8ea3..2952fb4 100644
--- a/language/hungarian.json
+++ b/language/hungarian.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"Snowy",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Hibás paraméterek!",
diff --git a/language/indonesian.json b/language/indonesian.json
index 56c2cac..996386c 100644
--- a/language/indonesian.json
+++ b/language/indonesian.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"erxg",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Argumen tidak valid!",
diff --git a/language/italian.json b/language/italian.json
index db49818..e6a3a76 100644
--- a/language/italian.json
+++ b/language/italian.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"Maurizio#0268",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Argomenti non validi!",
diff --git a/language/norwegian.json b/language/norwegian.json
index 1f70540..1289372 100644
--- a/language/norwegian.json
+++ b/language/norwegian.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"NoOneNook#0266",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Ugyldige argumenter!",
diff --git a/language/polish.json b/language/polish.json
index fbe9e68..de4f0ac 100644
--- a/language/polish.json
+++ b/language/polish.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"MKevas#8311",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Nieprawidłowe argumenty!",
diff --git a/language/portuguese.json b/language/portuguese.json
index 7130487..2d3157c 100644
--- a/language/portuguese.json
+++ b/language/portuguese.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"QuirAddon#9778",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Argumentos inválidos!",
diff --git a/language/romanian.json b/language/romanian.json
index 7561ec9..46630ad 100644
--- a/language/romanian.json
+++ b/language/romanian.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"Sanke#6086",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Argumente Invalide",
diff --git a/language/russian.json b/language/russian.json
index 68e794a..9d08664 100644
--- a/language/russian.json
+++ b/language/russian.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"Apexo#0723",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Неверные аргументы!",
diff --git a/language/slovenian.json b/language/slovenian.json
index 3d38c41..c5584d5 100644
--- a/language/slovenian.json
+++ b/language/slovenian.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"n1kkec#5341",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Napačen argument!",
diff --git a/language/spanish.json b/language/spanish.json
index 6c4f9c1..bf344bb 100644
--- a/language/spanish.json
+++ b/language/spanish.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"Redactado#1673 & josuens14#5267",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"¡Argumentos inválidos!",
diff --git a/language/thai.json b/language/thai.json
index 5e2de95..cb7eb27 100644
--- a/language/thai.json
+++ b/language/thai.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"Mods HD#0661",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"อาร์กิวเมนต์ไม่ถูกต้อง!",
diff --git a/language/turkish.json b/language/turkish.json
index d0a6360..378655c 100644
--- a/language/turkish.json
+++ b/language/turkish.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"Hydrâelčhâvø#1575",
- "_INFO":"This file is a translation for open ticket 3.4.4",
+ "_INFO":"This file is a translation for open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Geçersiz argümanlar!",
diff --git a/language/ukrainian.json b/language/ukrainian.json
index e705f97..2ed30ae 100644
--- a/language/ukrainian.json
+++ b/language/ukrainian.json
@@ -1,6 +1,6 @@
{
"_CREDITS":"Anderskiy#4093",
- "_INFO":"Цей файл є перекладом для open ticket 3.4.4",
+ "_INFO":"Цей файл є перекладом для open ticket 3.5.0",
"errors":{
"missingArgsTitle":"Невірні аргументи!",
diff --git a/package.json b/package.json
index 2f1de81..4ad4f14 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "open-ticket",
- "version": "3.4.4",
+ "version": "3.5.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,7 +15,7 @@
"dependencies": {
"axios": "^0.27.2",
"chalk": "^5.0.1",
- "discord.js": "^14.11.0"
+ "discord.js": "^14.14.1"
},
"repository": {
"type": "git",