Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
447fddea56 | ||
|
|
bf7a003799 | ||
|
|
6115ab1cc8 | ||
|
|
c2307fd1ed | ||
|
|
2a3850c3cc | ||
|
|
688c40ce7b | ||
|
|
dee2a21be9 | ||
|
|
d7ae040d60 | ||
|
|
7b6202985a | ||
|
|
a2f2c601a5 | ||
|
|
b27016df2e | ||
|
|
6341f2f71b | ||
|
|
56a5b9c7d0 | ||
|
|
f608cb71ce | ||
|
|
7c7c325307 | ||
|
|
832021d72a | ||
|
|
030554a7f5 | ||
|
|
ada5ea0c5d | ||
|
|
fb6b891835 | ||
|
|
739ad81f3f | ||
|
|
a6f67a9452 |
+6
-6
@@ -8,12 +8,12 @@ Support for Open Ticket is only available for the versions specified below!
|
||||
🟧 Partially Supported
|
||||
❌ Not Supported
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 3.3.2 | :white_check_mark: |
|
||||
| 3.3.0 | 🟧 |
|
||||
| 3.2.2 | 🟧 |
|
||||
| < 3.2.2 | :x: |
|
||||
| Version | Supported |
|
||||
|-----------|-------------------|
|
||||
| 3.4.1 | ✅ |
|
||||
| 3.4.0 | ✅ |
|
||||
| 3.3.3 | 🟧 |
|
||||
| < 3.3.3 | ❌ |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
|
||||
@@ -1,19 +1,17 @@
|
||||
<img src="https://www.dj-dj.be/wp-content/uploads/2023/02/open-ticket-cropped.png" alt="Open Ticket" width="600px">
|
||||
|
||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v3.3.2) []() [](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.1) []() [](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!
|
||||
You have more than +100 options to customise in the config! This includes html transcripts, unlimited tickets, custom embeds & more!
|
||||
We also have a great support service, we can solve every question you have about open ticket! We even provide free 24/7 hosting if you want!
|
||||
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!
|
||||
|
||||
Take a look at all the features and discover the possibilities!
|
||||
### [Documentation](https://docs.openticket.dj-dj.be/quick-start)
|
||||
|
||||
## Features
|
||||
- **🎉 NEW! html transcripts!**
|
||||
- **🎉 NEW! html transcripts V2!**
|
||||
- 🔒 close, ❌ delete & ✅ re-open tickets
|
||||
- 🇬🇧 translation in 14 different languages
|
||||
- 🇬🇧 translation in 19 different languages
|
||||
- 📄 very advanced customisation
|
||||
- 🆗 buttons or 🔽 dropdowns!
|
||||
- 🆒 plugins
|
||||
@@ -39,30 +37,34 @@ You can already see some images at our [documentation!](https://docs.openticket.
|
||||
|
||||
## credits
|
||||
DJdj Development Team
|
||||
|Main Developer|Developer|Support Team|Designer|
|
||||
|--------------|---------|-----------|---------|
|
||||
|DJj123dj |Sanke |DJ-Lite |vuur_draak|
|
||||
|Main Developer|Developer |Support Team|Designer|
|
||||
|--------------|------------|-----------|---------|
|
||||
|djj123dj |sankedev |DJ-Lite |vuur_draak|
|
||||
|
||||
Translators
|
||||
|Language |Translator |
|
||||
|--------------|-------------------------|
|
||||
|Dutch |DJj123dj#1706 |
|
||||
|Romanian |Sanke#6086 |
|
||||
|French |Sanke#6086 |
|
||||
|Spanish |Redactado#1673 & josuens14#5267|
|
||||
|German |david.#8276 |
|
||||
|Italian |Maurizio#0268 |
|
||||
|Dutch |djj123dj |
|
||||
|Romanian |sankedev |
|
||||
|French |sankedev |
|
||||
|Spanish |redactado & josuens |
|
||||
|German |david.3 |
|
||||
|Italian |maurizio26 |
|
||||
|Czech |t0miiis#3022 |
|
||||
|Arabic |ChilledBroke#9986 & M4#5882|
|
||||
|Danish |the_gamer#5095 |
|
||||
|Portuguese |QuirAddon#9778 |
|
||||
|Russian |Apexo#0723 |
|
||||
|Turkish |Hydrâelčhâvø#1575 |
|
||||
|Polish |MKevas#8311 |
|
||||
|Slovenian |n1kkec#5341 |
|
||||
|Arabic |Sarcastic#9318 |
|
||||
|Danish |.the_gamer |
|
||||
|Portuguese |quiradon |
|
||||
|Russian |apexo |
|
||||
|Turkish |Hydra#0009 |
|
||||
|Polish |mkevas |
|
||||
|Slovenian |n1kkec |
|
||||
|Thai |modshd |
|
||||
|Norwegian |noonenook |
|
||||
|Greek |stefanos#5739 |
|
||||
|Ukrainian |anderskiy |
|
||||
|
||||
## links
|
||||
current version: _v3.3.2_
|
||||
current version: _v3.4.1_
|
||||
</br>changelog: [click here](https://docs.openticket.dj-dj.be/other/changelog)
|
||||
</br>documentation: [click here](https://docs.openticket.dj-dj.be/quick-start)
|
||||
|
||||
|
||||
+22
-31
@@ -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.username}])
|
||||
log("system","user added to ticket",[{key:"user",value:msg.author.username},{key:"ticket",value:msg.channel.name},{key:"added_user",value:loguser.username}])
|
||||
|
||||
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.username}])
|
||||
log("system","user added to ticket",[{key:"user",value:interaction.user.username},{key:"ticket",value:interaction.channel.name},{key:"added_user",value:loguser.username}])
|
||||
|
||||
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())
|
||||
|
||||
})
|
||||
}
|
||||
+70
-77
@@ -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+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
||||
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+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
||||
|
||||
const newTicket = require("../core/utils/configParser").getTicketById(newtype)
|
||||
if (!newTicket) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
||||
const newTicket = require("../core/utils/configParser").getTicketById(newtype)
|
||||
if (!newTicket) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
||||
|
||||
/**@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.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())
|
||||
})
|
||||
|
||||
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+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
||||
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+" `<type>`:\n`"+config.prefix+"change <type>`")]})
|
||||
|
||||
/**@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.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())
|
||||
})
|
||||
}
|
||||
+40
-45
@@ -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.username,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.username}])
|
||||
log("system","user claimed to ticket",[{key:"user",value:msg.author.username},{key:"ticket",value:msg.channel.name},{key:"claimed_user",value:claimingUser.username}])
|
||||
|
||||
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))
|
||||
.setFooter({text:"claimed by: "+user.username,iconURL:user.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]})
|
||||
}
|
||||
|
||||
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.username}])
|
||||
log("system","user claimed to ticket",[{key:"user",value:interaction.user.username},{key:"ticket",value:interaction.channel.name},{key:"claimed_user",value:user.username}])
|
||||
|
||||
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())
|
||||
})
|
||||
}
|
||||
+36
-45
@@ -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.username}])
|
||||
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.username}])
|
||||
APIEvents.onCommand("close",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
})
|
||||
}
|
||||
+32
-40
@@ -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.username}])
|
||||
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.username}])
|
||||
APIEvents.onCommand("delete",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
})
|
||||
}
|
||||
+3
-3
@@ -32,7 +32,7 @@ module.exports = () => {
|
||||
|
||||
if (msg.content == config.prefix || msg.content == config.prefix+" " || msg.content == otherprefix){
|
||||
msg.channel.send({embeds:[helpEmbed]})
|
||||
log("command","someone used the 'help' command",[{key:"user",value:msg.author.tag}])
|
||||
log("command","someone used the 'help' command",[{key:"user",value:msg.author.username}])
|
||||
APIEvents.onCommand("help",true,msg.author,msg.channel,msg.guild,new Date())
|
||||
return
|
||||
}
|
||||
@@ -40,7 +40,7 @@ module.exports = () => {
|
||||
if (args[1]){
|
||||
if (!args[1].startsWith("close") && !args[1].startsWith("delete") && !args[1].startsWith("remove") && !args[1].startsWith("add") && !args[1].startsWith("msg") && !args[1].startsWith("remove") && !args[1].startsWith("rename") && !args[1].startsWith("reopen")){
|
||||
msg.channel.send({embeds:[helpEmbed]})
|
||||
log("command","someone used the 'help' command",[{key:"user",value:msg.author.tag}])
|
||||
log("command","someone used the 'help' command",[{key:"user",value:msg.author.username}])
|
||||
APIEvents.onCommand("help",true,msg.author,msg.channel,msg.guild,new Date())
|
||||
}
|
||||
}
|
||||
@@ -51,7 +51,7 @@ module.exports = () => {
|
||||
if (interaction.commandName != "help") return
|
||||
|
||||
interaction.reply({embeds:[helpEmbed]})
|
||||
log("command","someone used the 'help' command",[{key:"user",value:interaction.user.tag}])
|
||||
log("command","someone used the 'help' command",[{key:"user",value:interaction.user.username}])
|
||||
APIEvents.onCommand("help",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
})
|
||||
}
|
||||
+24
-31
@@ -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.username}])
|
||||
log("system","user removed from ticket",[{key:"user",value:msg.author.username},{key:"ticket",value:msg.channel.name},{key:"removed_user",value:loguser.username}])
|
||||
|
||||
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.username}])
|
||||
log("system","user removed from ticket",[{key:"user",value:interaction.user.username},{key:"ticket",value:interaction.channel.name},{key:"removed_user",value:loguser.username}])
|
||||
|
||||
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())
|
||||
})
|
||||
}
|
||||
+41
-50
@@ -21,36 +21,30 @@ 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+" `<name>`:\n`"+config.prefix+"rename <name>`")]})
|
||||
if (!newname) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" `<name>`:\n`"+config.prefix+"rename <name>`")]})
|
||||
|
||||
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.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())
|
||||
})
|
||||
|
||||
if (!DISABLE.commands.slash.rename) client.on("interactionCreate",async (interaction) => {
|
||||
@@ -65,31 +59,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.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())
|
||||
})
|
||||
}
|
||||
+18
-27
@@ -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.username}])
|
||||
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.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.username}])
|
||||
APIEvents.onCommand("reopen",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -38,7 +38,7 @@ module.exports = () => {
|
||||
|
||||
msg.channel.send({embeds:[embed],components:componentRows})
|
||||
|
||||
log("command","someone used the 'message' command",[{key:"user",value:msg.author.tag},{key:"id",value:id}])
|
||||
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())
|
||||
}
|
||||
})
|
||||
@@ -62,7 +62,7 @@ module.exports = () => {
|
||||
interaction.reply({content:l.commands.ticketWarning})
|
||||
interaction.channel.send({embeds:[embed],components:componentRows})
|
||||
|
||||
log("command","someone used the 'message' command",[{key:"user",value:interaction.user.tag},{key:"id",value:id}])
|
||||
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())
|
||||
|
||||
|
||||
+19
-18
@@ -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){
|
||||
@@ -56,8 +57,8 @@ module.exports = () => {
|
||||
|
||||
msg.channel.send({embeds:[bot.embeds.commands.unclaimEmbed(msg.author)]})
|
||||
|
||||
log("command","someone used the 'unclaim' command",[{key:"user",value:msg.author.tag}])
|
||||
log("system","user unclaimed from ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"unclaimed_user",value:unclaimuser}])
|
||||
log("command","someone used the 'unclaim' command",[{key:"user",value:msg.author.username}])
|
||||
log("system","user unclaimed from ticket",[{key:"user",value:msg.author.username},{key:"ticket",value:msg.channel.name},{key:"unclaimed_user",value:unclaimuser}])
|
||||
|
||||
|
||||
APIEvents.onTicketUnclaim(msg.author,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
|
||||
@@ -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){
|
||||
@@ -112,8 +113,8 @@ module.exports = () => {
|
||||
|
||||
interaction.editReply({embeds:[bot.embeds.commands.unclaimEmbed(interaction.user)]})
|
||||
|
||||
log("command","someone used the 'unclaim' command",[{key:"user",value:interaction.user.tag}])
|
||||
log("system","user unclaimed from ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"unclaimed_user",value:unclaimuser}])
|
||||
log("command","someone used the 'unclaim' command",[{key:"user",value:interaction.user.username}])
|
||||
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())
|
||||
|
||||
+10
-1
@@ -64,6 +64,15 @@
|
||||
"autoclose":{
|
||||
"enable":false,
|
||||
"inactiveHours":24
|
||||
},
|
||||
|
||||
"ping":{
|
||||
"@here":true,
|
||||
"@everyone":false,
|
||||
"custom":{
|
||||
"enable":false,
|
||||
"roleId":"012345678910"
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
@@ -102,7 +111,7 @@
|
||||
"dropdown":false,
|
||||
|
||||
"enableFooter":false,
|
||||
"footer":"Open Ticket v3.3.2 - I'm a footer!",
|
||||
"footer":"Open Ticket v3.4.1 - I'm a footer!",
|
||||
|
||||
"enableFooterImage":false,
|
||||
"footerImage":"https://www.example.com/catmemes/cat.png",
|
||||
|
||||
+2
-2
@@ -179,7 +179,7 @@ exports.checker = async () => {
|
||||
checkType(option.description,"string",path+"/description")
|
||||
|
||||
//icon
|
||||
const emojiRegex = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/gi;
|
||||
const emojiRegex = /(?:\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])|(?:<a?:[^:]*:[0-9]+>)/gi
|
||||
if (option.icon.length > 0){
|
||||
|
||||
const isEmoji = emojiRegex.test(option.icon)
|
||||
@@ -427,7 +427,7 @@ exports.checker = async () => {
|
||||
checkType(config.languageFile,"string","languagefile")
|
||||
const lf = config.languageFile
|
||||
|
||||
if (!lf.startsWith("custom") && !lf.startsWith("english") && !lf.startsWith("dutch") && !lf.startsWith("romanian") && !lf.startsWith("german") && !lf.startsWith("arabic") && !lf.startsWith("spanish") && !lf.startsWith("portuguese") && !lf.startsWith("french") && !lf.startsWith("italian") && !lf.startsWith("czech") && !lf.startsWith("danish") && !lf.startsWith("russian") && !lf.startsWith("turkish") && !lf.startsWith("polish") && !lf.startsWith("slovenian")){
|
||||
if (!lf.startsWith("custom") && !lf.startsWith("english") && !lf.startsWith("dutch") && !lf.startsWith("romanian") && !lf.startsWith("german") && !lf.startsWith("arabic") && !lf.startsWith("spanish") && !lf.startsWith("portuguese") && !lf.startsWith("french") && !lf.startsWith("italian") && !lf.startsWith("czech") && !lf.startsWith("danish") && !lf.startsWith("russian") && !lf.startsWith("turkish") && !lf.startsWith("polish") && !lf.startsWith("slovenian") && !lf.startsWith("thai") && !lf.startsWith("norwegian") && !lf.startsWith("greek") && !lf.startsWith("ukrainian")){
|
||||
createError("'languagefile' | invalid language, more info in the wiki")
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ exports.noPermsMessage = (user) => {
|
||||
.setColor(c.Red)
|
||||
.setTitle(":x: "+l.errors.noPermsTitle)
|
||||
.setDescription(l.errors.noPermsDescription)
|
||||
.setFooter({iconURL:user.displayAvatarURL(),text:user.tag})
|
||||
.setFooter({iconURL:user.displayAvatarURL(),text:user.username})
|
||||
}
|
||||
|
||||
/**@param {discord.User} user*/
|
||||
@@ -25,7 +25,7 @@ exports.noPermsDelete = (user) => {
|
||||
.setColor(c.Red)
|
||||
.setTitle(":x: "+l.errors.noPermsTitle)
|
||||
.setDescription(l.errors.noPermsDelete)
|
||||
.setFooter({iconURL:user.displayAvatarURL(),text:user.tag})
|
||||
.setFooter({iconURL:user.displayAvatarURL(),text:user.username})
|
||||
}
|
||||
|
||||
/**@param {String} message */
|
||||
|
||||
@@ -19,7 +19,7 @@ exports.addEmbed = (addedUser,adder) => {
|
||||
return new embed()
|
||||
.setTitle("⬆️ "+l.commands.userAddedTitle.replace("{0}",addedUser.username))
|
||||
.setColor(mc)
|
||||
.setFooter({text:adder.tag,iconURL:adder.displayAvatarURL()})
|
||||
.setFooter({text:adder.username,iconURL:adder.displayAvatarURL()})
|
||||
.setThumbnail(addedUser.displayAvatarURL({extension:"png"}))
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ exports.removeEmbed = (removedUser,remover) => {
|
||||
return new embed()
|
||||
.setTitle("⬇️ "+l.commands.userRemovedTitle.replace("{0}",removedUser.username))
|
||||
.setColor(mc)
|
||||
.setFooter({text:remover.tag,iconURL:remover.displayAvatarURL()})
|
||||
.setFooter({text:remover.username,iconURL:remover.displayAvatarURL()})
|
||||
.setThumbnail(removedUser.displayAvatarURL({extension:"png"}))
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ exports.closeEmbed = (closer,description) => {
|
||||
const embd = new embed()
|
||||
.setTitle("🔒 "+l.commands.closeTitle)
|
||||
.setColor(mc)
|
||||
.setFooter({text:closer.tag,iconURL:closer.displayAvatarURL()})
|
||||
.setFooter({text:closer.username,iconURL:closer.displayAvatarURL()})
|
||||
|
||||
if (description) embd.setDescription(description)
|
||||
return embd
|
||||
@@ -63,7 +63,7 @@ exports.autocloseSignalEmbed = (closer,time) => {
|
||||
const embd = new embed()
|
||||
.setTitle("⏰ This ticket got closed by Autoclose!")
|
||||
.setColor(mc)
|
||||
.setFooter({text:closer.tag,iconURL:closer.displayAvatarURL()})
|
||||
.setFooter({text:closer.username,iconURL:closer.displayAvatarURL()})
|
||||
.setDescription("This ticket has been inactive for `"+time+"h`!")
|
||||
return embd
|
||||
}
|
||||
@@ -77,7 +77,7 @@ exports.deleteEmbed = (deleter) => {
|
||||
return new embed()
|
||||
.setTitle("❌ "+l.commands.deleteTitle)
|
||||
.setColor(mc)
|
||||
.setFooter({text:deleter.tag,iconURL:deleter.displayAvatarURL()})
|
||||
.setFooter({text:deleter.username,iconURL:deleter.displayAvatarURL()})
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -90,7 +90,7 @@ exports.renameEmbed = (renamer,newname) => {
|
||||
return new embed()
|
||||
.setTitle("🔄 "+l.commands.renameTitle.replace("{0}",newname))
|
||||
.setColor(mc)
|
||||
.setFooter({text:renamer.tag,iconURL:renamer.displayAvatarURL()})
|
||||
.setFooter({text:renamer.username,iconURL:renamer.displayAvatarURL()})
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -102,7 +102,7 @@ exports.renameEmbed = (renamer,newname) => {
|
||||
return new embed()
|
||||
.setTitle("🔓 "+l.commands.reopenTitle)
|
||||
.setColor(mc)
|
||||
.setFooter({text:reopener.tag,iconURL:reopener.displayAvatarURL()})
|
||||
.setFooter({text:reopener.username,iconURL:reopener.displayAvatarURL()})
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -115,7 +115,7 @@ exports.renameEmbed = (renamer,newname) => {
|
||||
return new embed()
|
||||
.setTitle("📌 "+l.commands.claimTitle.replace("{0}",claimer.username))
|
||||
.setColor(mc)
|
||||
.setFooter({text:user.tag,iconURL:user.displayAvatarURL()})
|
||||
.setFooter({text:user.username,iconURL:user.displayAvatarURL()})
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -127,7 +127,7 @@ exports.renameEmbed = (renamer,newname) => {
|
||||
return new embed()
|
||||
.setTitle("🆓 "+l.commands.unclaimTitle)
|
||||
.setColor(mc)
|
||||
.setFooter({text:unclaimer.tag,iconURL:unclaimer.displayAvatarURL()})
|
||||
.setFooter({text:unclaimer.username,iconURL:unclaimer.displayAvatarURL()})
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -140,5 +140,5 @@ exports.changeEmbed = (changer,newtype) => {
|
||||
return new embed()
|
||||
.setTitle("🔄 "+l.commands.changeTitle.replace("{0}",newtype))
|
||||
.setColor(mc)
|
||||
.setFooter({text:changer.tag,iconURL:changer.displayAvatarURL()})
|
||||
.setFooter({text:changer.username,iconURL:changer.displayAvatarURL()})
|
||||
}
|
||||
@@ -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))
|
||||
.setFooter({text:"claimed by: "+interaction.user.username,iconURL:interaction.user.displayAvatarURL()})
|
||||
|
||||
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
||||
|
||||
@@ -53,7 +53,7 @@ module.exports = async () => {
|
||||
option.roles.forEach((role) => {
|
||||
interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role)
|
||||
|
||||
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
|
||||
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.username},{key:"role",value:role}])
|
||||
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
||||
APIEvents.onReactionRole("add","add",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
})
|
||||
@@ -68,7 +68,7 @@ module.exports = async () => {
|
||||
option.roles.forEach((role) => {
|
||||
interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role)
|
||||
|
||||
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
|
||||
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.username},{key:"role",value:role}])
|
||||
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
||||
APIEvents.onReactionRole("remove","remove",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
})
|
||||
@@ -84,13 +84,13 @@ module.exports = async () => {
|
||||
if (!interaction.guild.members.cache.find(u => u.id == user.id).roles.cache.has(role)){
|
||||
interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role)
|
||||
|
||||
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
|
||||
log("system","added role (reaction roles)",[{key:"user",value:interaction.user.username},{key:"role",value:role}])
|
||||
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
||||
APIEvents.onReactionRole("add","add&remove",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
}else {
|
||||
interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role)
|
||||
|
||||
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}])
|
||||
log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.username},{key:"role",value:role}])
|
||||
const apirole = interaction.guild.roles.cache.find(r => r.id == role)
|
||||
APIEvents.onReactionRole("remove","add&remove",apirole,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ module.exports = async (invisible) => {
|
||||
//process.stdout.write("[status] there are "+chalk.blue("0 out of 10")+" commands ready! (this can take up to 40 seconds)")
|
||||
if (!invisible){
|
||||
setInterval(() => {
|
||||
process.stdout.cursorTo(0)
|
||||
if (process.stdout && process.stdout.cursorTo) process.stdout.cursorTo(0)
|
||||
process.stdout.write("[status] there are "+chalk.blue(readystats+" out of 13")+" commands ready! (this can take up to 40 seconds)")
|
||||
if (readystats >= 13){
|
||||
console.log(chalk.green("\nready!"))
|
||||
|
||||
@@ -63,7 +63,7 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
|
||||
if (!nomessage){
|
||||
await channel.send({content:"**"+l.messages.gettingdeleted+"**"})
|
||||
}
|
||||
log("system","deleted a ticket",[{key:"user",value:user.tag},{key:"ticket",value:channel.name}])
|
||||
log("system","deleted a ticket",[{key:"user",value:user.username},{key:"ticket",value:channel.name}])
|
||||
pendingDelete.push(channel.id)
|
||||
|
||||
if (!isDatabaseError) storage.set("amountOfUserTickets",getuserID,Number(storage.get("amountOfUserTickets",getuserID)) - 1)
|
||||
@@ -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)
|
||||
@@ -204,26 +179,11 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
|
||||
channel.send({embeds:[embed],components:[bot.buttons.close.closeCommandRow]})
|
||||
}
|
||||
|
||||
log("system","closed a ticket",[{key:"user",value:user.tag},{key:"ticket",value:channel.name}])
|
||||
log("system","closed a ticket",[{key:"user",value:user.username},{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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,15 +47,16 @@ module.exports = () => {
|
||||
|
||||
//ticketoptions from config
|
||||
const currentTicketOptions = configParser.getTicketById(customId)
|
||||
|
||||
if (currentTicketOptions == false) return interaction.reply({embeds:[bot.errorLog.serverError(l.errors.anotherOption)]})
|
||||
|
||||
if (interaction.isButton()){
|
||||
try {
|
||||
await interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpe})
|
||||
await interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpen})
|
||||
} catch{}
|
||||
}else if (interaction.isChatInputCommand()){
|
||||
await interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpen})
|
||||
try {
|
||||
await interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpen})
|
||||
} catch{}
|
||||
}else if (interaction.isStringSelectMenu()){
|
||||
try {
|
||||
await interaction.deferUpdate()
|
||||
@@ -133,25 +134,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)){
|
||||
@@ -179,7 +178,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})
|
||||
@@ -192,16 +191,19 @@ 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)
|
||||
if (currentTicketOptions.image.enable) ticketEmbed.setImage(currentTicketOptions.image.url)
|
||||
|
||||
const herePing = currentTicketOptions.ping['@here'] ? " @here" : ""
|
||||
const everyonePing = currentTicketOptions.ping['@everyone'] ? " @everyone" : ""
|
||||
const customPing = currentTicketOptions.ping.custom.enable ? " <@&"+currentTicketOptions.ping.custom.roleId+">" : ""
|
||||
|
||||
|
||||
ticketChannel.send({
|
||||
content:"<@"+interaction.member.id+"> @here",
|
||||
content:"<@"+interaction.member.id+">"+herePing+everyonePing+customPing,
|
||||
embeds:[ticketEmbed],
|
||||
components:[closeButton]
|
||||
|
||||
@@ -209,7 +211,7 @@ module.exports = () => {
|
||||
firstmsg.pin()
|
||||
})
|
||||
|
||||
log("system","created new ticket",[{key:"ticket",value:ticketName},{key:"user",value:interaction.user.tag}])
|
||||
log("system","created new ticket",[{key:"ticket",value:ticketName},{key:"user",value:interaction.user.username}])
|
||||
require("../api/modules/events").onTicketOpen(interaction.user,ticketChannel,interaction.guild,new Date(),{name:ticketName,status:"open",ticketOptions:currentTicketOptions})
|
||||
|
||||
const channelbutton = new discord.ActionRowBuilder()
|
||||
@@ -227,7 +229,13 @@ module.exports = () => {
|
||||
}
|
||||
catch{log("system","failed to send DM")}
|
||||
|
||||
if ((interaction.isButton() && config.system.answerInEphemeralOnOpen) || interaction.isChatInputCommand()) interaction.editReply({embeds:[bot.errorLog.success(l.messages.createdTitle,l.messages.createdDescription)],components:[channelbutton]})
|
||||
if ((interaction.isButton() && config.system.answerInEphemeralOnOpen) || interaction.isChatInputCommand()){
|
||||
if (interaction.deferred){
|
||||
interaction.editReply({embeds:[bot.errorLog.success(l.messages.createdTitle,l.messages.createdDescription)],components:[channelbutton]})
|
||||
}else{
|
||||
interaction.reply({embeds:[bot.errorLog.success(l.messages.createdTitle,l.messages.createdDescription)],components:[channelbutton]})
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}else{
|
||||
@@ -242,4 +250,4 @@ module.exports = () => {
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ const pfb = discord.PermissionFlagsBits
|
||||
* @returns
|
||||
*/
|
||||
const reopenTicket = (guild,channel,user) => {
|
||||
log("system","re-opened a ticket",[{key:"ticket",value:channel.name},{key:"user",value:user.tag}])
|
||||
log("system","re-opened a ticket",[{key:"ticket",value:channel.name},{key:"user",value:user.username}])
|
||||
|
||||
var permissionsArray = []
|
||||
|
||||
|
||||
+11
-7
@@ -11,6 +11,14 @@ const version = require("../info.json").version
|
||||
/**@typedef {{style:{enableCustomBackground:Boolean, backgroundModus:"color"|"image", backgroundData:String, titleColor:String}, bot:{name:String, id:Number, pfp:String}, ticket:{creatorname:String, creatorid:Number, closedtime:Number, openedtime:Number}}} OThtsDataOption */
|
||||
|
||||
|
||||
/**==========================================================
|
||||
=============================================================
|
||||
================THIS FILE ISN'T USED ANYMORE!!===============
|
||||
This file is for html transcripts V1!
|
||||
Visit compileJsonV2.js for the current version!
|
||||
=============================================================
|
||||
===========================================================*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {discord.Guild} guild
|
||||
@@ -46,13 +54,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),
|
||||
@@ -67,7 +71,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
||||
const memberColor = msg.member ? msg.member.displayHexColor : "#ffffff"
|
||||
messagesArray.push({
|
||||
author:{
|
||||
name:msg.author.tag,
|
||||
name:msg.author.username,
|
||||
id:Number(msg.author.id),
|
||||
color:memberColor,
|
||||
pfp:msg.author.displayAvatarURL()
|
||||
@@ -102,7 +106,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
|
||||
|
||||
creatorname:data.ticket.creatorname,
|
||||
creatorid:Number(data.ticket.creatorid),
|
||||
closedbyname:user.tag,
|
||||
closedbyname:user.username,
|
||||
closedbyid:Number(user.id),
|
||||
|
||||
closedtime:data.ticket.closedtime,
|
||||
@@ -0,0 +1,394 @@
|
||||
const discord = require('discord.js')
|
||||
|
||||
const bot = require("../../../index")
|
||||
const tsconfig = bot.tsconfig
|
||||
const tsembeds = require("../embeds")
|
||||
const tsdb = require("../tsdb")
|
||||
|
||||
const otversion = require("../../../package.json").version
|
||||
const version = require("../info.json").version
|
||||
|
||||
const mentions = require("./mentions").replacementions
|
||||
|
||||
/**@typedef {{background:{enableCustomBackground:Boolean, backgroundModus:"color"|"image", backgroundData:String}, header:{enableCustomHeader:Boolean, decoColor:String, backgroundColor:String, textColor:String}, stats:{enableCustomStats:Boolean, backgroundColor:String, keyTextColor:String, valueTextColor:String, hideBackgroundColor:String, hideTextColor:String}} OTTranscriptStyle} */
|
||||
/**@typedef {{name:String, id:String, pfp:String}} OTTranscriptBot */
|
||||
/**@typedef {{name:String, id:String, guildname:String, guildid:String, guildinvite:String|false, creatorname:String, creatorid:String, closedbyname:String, closedbyid:String, claimedname:String, claimedid:String, creatorpfp:String, closedbypfp:String, claimedpfp:String, closedtime:Number, openedtime:Number, components:{messages:1, files:1, embeds:1, reactions:1, interactions:{dropdowns:1, buttons:1, total:1}, attachments:{invites:1, images:1, gifs:1, stickers:1}}, roleColors:[{id:String,color:String}] }} OTTranscriptTicket */
|
||||
/**@typedef {{author:{name:String, id:String, color:String, pfp:String, bot:Boolean, verifiedBot:Boolean, system:Boolean}, content:String|false, timestamp:Number, type:"normal", important:Boolean, edited:Boolean, embeds:[{title:String|false, description:String|false, authorimg:String|false, authortext:String|false, footerimg:String|false, footertext:String|false, color:String, image:String|false, thumbnail:String|false, url:String|false, fields:[{name:String,value:String,inline:Boolean}]}], attachments:[{type:"FILE", name:String, fileType:String, size:String, url:String}, {type:"FILE:image", name:String, fileType:String, size:String, url:String}, {type:"URL:invite", guildId:String, guildName:String, guildSize:Number, guildOnline:Number, image:String, url:String}, {type:"URL:gif", url:String}, {type:"BUILDIN:sticker", name:String, url:String}], components:[{type:"buttons", buttons:[{type:"interaction"|"url", label:String|false, icon:String|false, color:"gray"|"green"|"red"|"blue", id:String|false, url:String|false, disabled:Boolean}]}, {type:"dropdown", placeholder:String|false, options:[{label:String|false, icon:String|false, description:String|false, id:String|false}]}, {type:"reactions", reactions:[{amount:1, emoji:String, type:"svg"|"image"|"gif"}]}], reply:{type:"reply"|"command"|false, user:{name:String, id:String, color:String, pfp:String, bot:Boolean, verifiedBot:Boolean, system:Boolean}, replyOptions:{content:String, messageId:String, channelId:String, guildId:String}, commandOptions:{interactionName:String, interactionId:String}}}} OTTranscriptMessage */
|
||||
/**@typedef {{enabled:Boolean,premiumToken:String, customCredits:{enable:Boolean, replaceText:String, replaceURL:String, enableReportBug:Boolean},customHeaderUrl:{enabled:Boolean, url:String, text:String}, customTranscriptUrl:{enabled:Boolean, name:String}, customFavicon:{enabled:Boolean, image:String},additionalFlags:String[]}} OTTranscriptPremium */
|
||||
|
||||
/**@typedef {{version:"2", otversion:String, language:String, style:OTTranscriptStyle, bot:OTTranscriptBot, ticket:OTTranscriptTicket, messages:OTTranscriptMessage[], premium:OTTranscriptPremium}} OTTranscriptCompileInput */
|
||||
|
||||
/**@typedef {{style:OTTranscriptStyle,bot:OTTranscriptBot,ticket:OTTranscriptTicket,premium:OTTranscriptPremium}} OTHTMLDataOption */
|
||||
|
||||
|
||||
/**@param {discord.ButtonStyle} buttonstyle */
|
||||
const buttonStyleToColor = (buttonstyle) => {
|
||||
if (buttonstyle == discord.ButtonStyle.Primary){
|
||||
return "blue"
|
||||
}else if (buttonstyle == discord.ButtonStyle.Secondary){
|
||||
return "gray"
|
||||
}else if (buttonstyle == discord.ButtonStyle.Danger){
|
||||
return "red"
|
||||
}else if (buttonstyle == discord.ButtonStyle.Success){
|
||||
return "green"
|
||||
}else{
|
||||
return "gray"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {discord.Guild} guild
|
||||
* @param {discord.Channel} channel
|
||||
* @param {discord.User} user
|
||||
* @param {discord.Message[]} messagesInv
|
||||
* @param {OTHTMLDataOption} data
|
||||
*/
|
||||
exports.compile = (guild,channel,user,messagesInv,data) => {
|
||||
const messages = messagesInv.reverse()
|
||||
var invisibleMessages = 0
|
||||
|
||||
//MESSAGE STATS COUNTS
|
||||
var messageAmount = messages.length
|
||||
var fileAmount = 0
|
||||
var embedAmount = 0
|
||||
var reactionsAmount = 0
|
||||
var interactionAmount = 0
|
||||
messages.forEach((msg) => {
|
||||
fileAmount = fileAmount + Array.from(msg.attachments).length
|
||||
embedAmount = embedAmount + msg.embeds.length
|
||||
|
||||
msg.reactions.cache.forEach(reaction => {
|
||||
reactionsAmount = reactionsAmount + reaction.count
|
||||
})
|
||||
if (msg.components && msg.components.length > 0){
|
||||
msg.components.forEach((component) => {
|
||||
if (component.components.length > 0){
|
||||
interactionAmount = interactionAmount + component.components.length
|
||||
}else{
|
||||
interactionAmount = interactionAmount+1
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
/**@type {OTTranscriptMessage[]} */
|
||||
const messagesArray = []
|
||||
messages.forEach((msg) => {
|
||||
if (msg.content || msg.embeds.length > 0 || msg.attachments.toJSON().length > 0 || msg.components.length > 0 || msg.reactions.cache.size > 0){
|
||||
|
||||
const embedArray = []
|
||||
const attachmentArray = []
|
||||
const componentsArray = []
|
||||
|
||||
msg.attachments.forEach((file) => {
|
||||
attachmentArray.push({
|
||||
type:"FILE",
|
||||
name:file.name,
|
||||
fileType:file.contentType,
|
||||
size:Math.round(file.size/1000)+" kb",
|
||||
url:file.url
|
||||
})
|
||||
})
|
||||
|
||||
msg.embeds.forEach((embed) => {
|
||||
embedArray.push({
|
||||
title:embed.title || false,
|
||||
description:embed.description ? mentions(embed.description,guild) : 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),
|
||||
footertext:(embed.footer ? embed.footer.text : false),
|
||||
color:embed.hexColor,
|
||||
image:((embed.image && embed.image.url) ? embed.image.url : false),
|
||||
thumbnail:((embed.thumbnail && embed.thumbnail.url) ? embed.thumbnail.url : false),
|
||||
url:(embed.url ? embed.url : false),
|
||||
fields:embed.fields
|
||||
})
|
||||
})
|
||||
|
||||
const tempreactions = []
|
||||
msg.reactions.cache.forEach((reaction) => {
|
||||
const count = reaction.count
|
||||
const emoji = reaction.emoji
|
||||
|
||||
if (emoji instanceof discord.GuildEmoji){
|
||||
//custom emoji
|
||||
tempreactions.push({
|
||||
amount:count,
|
||||
emoji:(emoji.url) ? emoji.url : "",
|
||||
type:(emoji.animated) ? "gif" : "image"
|
||||
})
|
||||
}else if (emoji instanceof discord.ReactionEmoji){
|
||||
//build-in emoji
|
||||
tempreactions.push({
|
||||
amount:count,
|
||||
emoji:emoji.name,
|
||||
type:"svg"
|
||||
})
|
||||
}
|
||||
})
|
||||
componentsArray.push({
|
||||
type: "reactions",
|
||||
reactions:tempreactions
|
||||
})
|
||||
|
||||
msg.components.forEach((actionrow) => {
|
||||
var isdropdown = false
|
||||
var actioncomponents = []
|
||||
actionrow.components.forEach((comp) => {
|
||||
if (comp.type == discord.ComponentType.ActionRow || comp.type == discord.ComponentType.TextInput) return
|
||||
|
||||
/**
|
||||
* type: "buttons";
|
||||
buttons: [{
|
||||
type: "interaction" | "url";
|
||||
label: string | false;
|
||||
icon: string | false;
|
||||
color: "gray" | "green" | "red" | "blue";
|
||||
id: string | false;
|
||||
url: string | false;
|
||||
disabled: boolean;
|
||||
}];
|
||||
}, {
|
||||
type: "dropdown";
|
||||
placeholder: string | false;
|
||||
options: [{
|
||||
label: string | false;
|
||||
icon: string | false;
|
||||
description: string | false;
|
||||
id: string | false;
|
||||
}];
|
||||
},
|
||||
*/
|
||||
if (comp.type == discord.ComponentType.Button){
|
||||
actioncomponents.push({
|
||||
type: (comp.style == discord.ButtonStyle.Link) ? "url" : "interaction",
|
||||
label: (comp.label) ? comp.label : false,
|
||||
icon: (comp.emoji) ? comp.emoji.name : false,
|
||||
color: buttonStyleToColor(comp.style),
|
||||
id: comp.customId ? comp.customId : false,
|
||||
url: (comp.url) ? comp.url : false,
|
||||
disabled: false
|
||||
})
|
||||
}else{
|
||||
isdropdown = true
|
||||
var drpdwnoptions = []
|
||||
/**@type {discord.APISelectMenuOption[]} */
|
||||
const dropdownoptions = comp.options
|
||||
dropdownoptions.forEach((opt) => {
|
||||
drpdwnoptions.push({
|
||||
label: opt.label,
|
||||
icon: (opt.emoji) ? opt.emoji : false,
|
||||
description: (opt.description) ? opt.description : false,
|
||||
id: "hello world :)"
|
||||
})
|
||||
})
|
||||
|
||||
componentsArray.push({
|
||||
type:"dropdown",
|
||||
placeholder:false,
|
||||
options:drpdwnoptions
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
if (!isdropdown){
|
||||
componentsArray.push({
|
||||
type:"buttons",
|
||||
buttons:actioncomponents
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
const important = msg.guild ? (msg.content.includes("<@"+msg.guild.id+">") || msg.content.includes("<@everyone") || msg.content.includes("@here")): false
|
||||
|
||||
const replytype = (msg.interaction) ? "command" : ((msg.reference) ? "reply" : false)
|
||||
if (replytype == "command"){
|
||||
const replycolorRAW = msg.guild.members.cache.find((m) => m.id == msg.interaction.user.id)
|
||||
const replycolor = (replycolorRAW) ? replycolorRAW.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
|
||||
var reply = {
|
||||
type:replytype,
|
||||
commandOptions:{
|
||||
interactionId:msg.interaction.id,
|
||||
interactionName:msg.interaction.commandName
|
||||
},
|
||||
user:{
|
||||
name:msg.interaction.user.username,
|
||||
id:msg.interaction.user.id,
|
||||
color:replycolor,
|
||||
pfp:msg.interaction.user.displayAvatarURL(),
|
||||
bot:msg.interaction.user.bot,
|
||||
system:msg.interaction.user.system,
|
||||
verifiedBot:msg.interaction.user.flags.has(discord.UserFlags.VerifiedBot)
|
||||
}
|
||||
}
|
||||
}else if (replytype == "reply"){
|
||||
|
||||
var replycontentRAW = messages.find((msg2) => msg2.id == msg.reference.messageId)
|
||||
var replycontent = (replycontentRAW && replycontentRAW.content) ? replycontentRAW.content.slice(0,(60-replycontentRAW.author.username.length)) : "deleted this message"
|
||||
const replycolorRAW = (replycontentRAW) ? msg.guild.members.cache.find((m) => m.id == replycontentRAW.author.id) : false
|
||||
const replycolor = (replycolorRAW) ? replycolorRAW.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
|
||||
|
||||
var user = (replycontentRAW && replycontentRAW.content) ? {
|
||||
name:(replycontentRAW) ? replycontentRAW.author.username : "undefined",
|
||||
id:(replycontentRAW) ? replycontentRAW.author.id : "undefined",
|
||||
color:replycolor,
|
||||
pfp:(replycontentRAW) ? replycontentRAW.author.username : "",
|
||||
bot:(replycontentRAW) ? replycontentRAW.author.bot : false,
|
||||
system:(replycontentRAW) ? replycontentRAW.author.system : false,
|
||||
verifiedBot:(replycontentRAW) ? replycontentRAW.author.flags.has(discord.UserFlags.VerifiedBot) : false,
|
||||
} : {
|
||||
name:"someone",
|
||||
id:"undefined",
|
||||
color:"#ffffff",
|
||||
pfp:"https://raw.githubusercontent.com/twitter/twemoji/master/assets/72x72/1f5d1.png",
|
||||
bot:false,
|
||||
system:false,
|
||||
verifiedBot:false,
|
||||
}
|
||||
|
||||
var reply = {
|
||||
type:replytype,
|
||||
replyOptions:{
|
||||
content:replycontent,
|
||||
messageId: msg.reference.messageId,
|
||||
channelId: msg.reference.channelId,
|
||||
guildId: msg.reference.guildId
|
||||
},
|
||||
user:user
|
||||
}
|
||||
}else{var reply = {type:replytype}}
|
||||
|
||||
const authorColor = msg.member ? msg.member.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
|
||||
messagesArray.push({
|
||||
author:{
|
||||
name:msg.author.username,
|
||||
id:msg.author.id,
|
||||
color:authorColor,
|
||||
pfp:msg.author.displayAvatarURL(),
|
||||
bot:msg.author.bot,
|
||||
system:msg.author.system,
|
||||
verifiedBot:msg.author.flags.has(discord.UserFlags.VerifiedBot)
|
||||
},
|
||||
content:mentions(msg.content,guild) || "",
|
||||
timestamp:msg.createdTimestamp,
|
||||
embeds:embedArray,
|
||||
attachments:attachmentArray,
|
||||
edited: (typeof msg.editedTimestamp == "number"),
|
||||
type:"normal",
|
||||
important:important,
|
||||
reply:reply,
|
||||
components:componentsArray
|
||||
})
|
||||
}else {invisibleMessages++}
|
||||
})
|
||||
|
||||
const dsb = data.style.background
|
||||
const dsh = data.style.header
|
||||
const dss = data.style.stats
|
||||
|
||||
/**@type {OTTranscriptCompileInput} */
|
||||
const result = {
|
||||
version,otversion,
|
||||
language:bot.config.languageFile,
|
||||
style:{
|
||||
background:{
|
||||
backgroundData:dsb.backgroundData || "",
|
||||
backgroundModus:dsb.backgroundModus || "",
|
||||
enableCustomBackground:dsb.enableCustomBackground || false,
|
||||
},
|
||||
header:{
|
||||
backgroundColor:dsh.backgroundColor || "#202225",
|
||||
decoColor:dsh.decoColor || "#F8BA00",
|
||||
textColor:dsh.textColor || "#ffffff",
|
||||
enableCustomHeader:dsh.enableCustomHeader || false
|
||||
},
|
||||
stats:{
|
||||
backgroundColor:dss.backgroundColor || "#202225",
|
||||
keyTextColor:dss.keyTextColor || "#737373",
|
||||
valueTextColor:dss.valueTextColor || "#ffffff",
|
||||
hideBackgroundColor:dss.hideBackgroundColor || "#40444a",
|
||||
hideTextColor:dss.hideTextColor || "#ffffff",
|
||||
enableCustomStats:dss.enableCustomStats || false
|
||||
}
|
||||
},
|
||||
bot:{
|
||||
name:data.bot.name || "Open Ticket",
|
||||
id:data.bot.id || 0,
|
||||
pfp:data.bot.pfp || "dj-dj.be/wp-content/uploads/2022/07/profielfoto-blauw-wit.png?size=128"
|
||||
},
|
||||
ticket:{
|
||||
name:channel.name,
|
||||
id:channel.id,
|
||||
|
||||
guildname:guild.name,
|
||||
guildid:guild.id,
|
||||
guildinvite:"",
|
||||
|
||||
creatorname:data.ticket.creatorname,
|
||||
creatorid:data.ticket.creatorid,
|
||||
creatorpfp:data.ticket.creatorpfp,
|
||||
|
||||
closedbyname:user.username,
|
||||
closedbyid:user.id,
|
||||
closedbypfp:user.displayAvatarURL(),
|
||||
|
||||
claimedid:"",
|
||||
claimedname:"",
|
||||
claimedpfp:"",
|
||||
|
||||
closedtime:data.ticket.closedtime,
|
||||
openedtime:data.ticket.openedtime,
|
||||
|
||||
roleColors:[],
|
||||
components:{
|
||||
messages:messageAmount,
|
||||
embeds:embedAmount,
|
||||
files:fileAmount,
|
||||
interactions:{
|
||||
buttons:0,
|
||||
dropdowns:0,
|
||||
total:interactionAmount
|
||||
},
|
||||
reactions:reactionsAmount,
|
||||
attachments:{
|
||||
gifs:0,
|
||||
images:0,
|
||||
stickers:0,
|
||||
invites:0
|
||||
}
|
||||
}
|
||||
},
|
||||
messages:messagesArray,
|
||||
premium:{
|
||||
enabled:false,
|
||||
premiumToken:"",
|
||||
|
||||
customCredits:{
|
||||
enable:false,
|
||||
replaceText:"Powered By Open Ticket!",
|
||||
replaceURL:"https://openticket.dj-dj.be",
|
||||
enableReportBug:true
|
||||
},
|
||||
customHeaderUrl:{
|
||||
enabled:false,
|
||||
url:"https://openticket.dj-dj.be",
|
||||
text:"Hello!"
|
||||
},
|
||||
customTranscriptUrl:{
|
||||
enabled:false,
|
||||
name:"test-server"
|
||||
},
|
||||
customFavicon:{
|
||||
enabled:false,
|
||||
image:"https://openticket.dj-dj.be"
|
||||
},
|
||||
additionalFlags:[]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result
|
||||
}
|
||||
@@ -6,7 +6,7 @@ const tsconfig = bot.tsconfig
|
||||
const tsembeds = require("../embeds")
|
||||
const tsdb = require("../tsdb")
|
||||
|
||||
/**@typedef {{status:"success"|"error", id:String, time:Number, estimated:{lastdump: Number, processtime:Number}, transcriptstatus:{value:2, data:{fetchedmsgs:true, uploaded:true, inqueue:true, processed:false, waiting:false, available:false}}}} OTuploadResponse */
|
||||
/**@typedef {{status:"success"|"error", id:String, time:Number, estimated:{lastdump: Number, processtime:Number,waittime:Number}, transcriptstatus:{value:2, data:{fetchedmsgs:true, uploaded:true, inqueue:true, processed:false, waiting:false, available:false}}}} OTuploadResponse */
|
||||
|
||||
/**
|
||||
* @param {Object} json
|
||||
@@ -17,12 +17,12 @@ exports.upload = async (json) => {
|
||||
const data = encodeURIComponent(JSON.stringify(json))
|
||||
|
||||
try {
|
||||
const res = await axios.get("https://api.transcripts.dj-dj.be/upload?auth=openticketTRANSCRIPT1234&version=1.0.0&data="+data)
|
||||
const res = await axios.post("https://transcripts.dj-dj.be/api/upload?auth=openticketTRANSCRIPT1234&version=2",JSON.stringify(json))
|
||||
if (res.status != 200) resolve(false)
|
||||
|
||||
|
||||
resolve(res.data)
|
||||
}catch{
|
||||
console.log("failed transcript upload!")
|
||||
}catch(err){
|
||||
console.log("failed transcript upload!",err.response)
|
||||
resolve(false)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
const discord = require('discord.js')
|
||||
|
||||
const bot = require("../../../index")
|
||||
const tsconfig = bot.tsconfig
|
||||
const tsembeds = require("../embeds")
|
||||
const tsdb = require("../tsdb")
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {String} text
|
||||
* @param {discord.Guild} guild
|
||||
*/
|
||||
exports.replacementions = (text,guild) => {
|
||||
const userregex = /<@([0-9]+)>(\s)?/g
|
||||
const usertext = text.replace(userregex,(x) => {
|
||||
var res = userregex.exec(x)
|
||||
userregex.lastIndex = 0
|
||||
|
||||
var member = guild.members.cache.find((m) => m.id == res[1])
|
||||
var text = member ? member.user.username.replace(/\s/g," ") : res[1]
|
||||
return "<@"+text+"> "
|
||||
})
|
||||
|
||||
const channelregex = /<#([0-9]+)>(\s)?/g
|
||||
const channeltext = usertext.replace(channelregex,(x) => {
|
||||
var res = channelregex.exec(x)
|
||||
channelregex.lastIndex = 0
|
||||
|
||||
var channel = guild.channels.cache.find((c) => c.id == res[1])
|
||||
var text = channel ? channel.name.replace(/\s/g," ") : res[1]
|
||||
return "<#"+text+"> "
|
||||
})
|
||||
|
||||
const roleregex = /<@&([0-9]+)>(\s)?/g
|
||||
const roletext = channeltext.replace(roleregex,(x) => {
|
||||
var res = roleregex.exec(x)
|
||||
roleregex.lastIndex = 0
|
||||
|
||||
var role = guild.roles.cache.find((r) => r.id == res[1])
|
||||
var text = role ? role.name.replace(/\s/g," ") : res[1]
|
||||
|
||||
var color = role ? ((role.hexColor == "#000000") ? "regular" : role.hexColor) : "regular"
|
||||
|
||||
return "<@&"+text+"::"+color+"> "
|
||||
})
|
||||
|
||||
const defaultroleregex = /@(everyone|here)(\s)?/g
|
||||
const defaultroletext = roletext.replace(defaultroleregex,(x) => {
|
||||
var res = defaultroleregex.exec(x)
|
||||
defaultroleregex.lastIndex = 0
|
||||
|
||||
var text = res[1]
|
||||
return "<@&"+text+"::regular> "
|
||||
})
|
||||
|
||||
return defaultroletext
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
{
|
||||
"version":"1.0.0",
|
||||
"otversion":"3.3.2",
|
||||
"style":{
|
||||
"enableCustomBackground":false,
|
||||
"backgroundModus":"color OR image",
|
||||
"backgroundData":"#ffffff OR https://www.example.com/image.png",
|
||||
"titleColor":"#ffffff"
|
||||
},
|
||||
"bot":{
|
||||
"name":"DJdj Support Bot",
|
||||
"id":12345678910,
|
||||
"pfp":"https://www.example.com/image.png"
|
||||
},
|
||||
"ticket":{
|
||||
"name":"support-DJj123dj",
|
||||
"id":12345678910,
|
||||
|
||||
"guildname":"DJdj Development",
|
||||
"guildid":12345678910,
|
||||
|
||||
"creatorname":"DJj123dj#1706",
|
||||
"creatorid":12345678910,
|
||||
"closedbyname":"DJj123dj#1706",
|
||||
"closedbyid":12345678910,
|
||||
|
||||
"closedtime":12345678910,
|
||||
"openedtime":12345678910,
|
||||
|
||||
"messages":1,
|
||||
"files":1
|
||||
},
|
||||
"messages":[
|
||||
{
|
||||
"author":{
|
||||
"name":"DJj123dj#1706",
|
||||
"id":12345678910,
|
||||
"color":"#ffffff",
|
||||
"pfp":"https://www.example.com/image.png"
|
||||
},
|
||||
"content":"string or FALSE",
|
||||
"timestamp":12345678910,
|
||||
"embeds":[
|
||||
{
|
||||
"title":"string or FALSE",
|
||||
"description":"string or FALSE",
|
||||
"authorimg":"https://www.example.com/image.png or FALSE",
|
||||
"authortext":"string or FALSE",
|
||||
"footerimg":"https://www.example.com/image.png or FALSE",
|
||||
"footertext":"string or FALSE",
|
||||
"color":"#ffffff",
|
||||
"image":"https://www.example.com/image.png or FALSE",
|
||||
"thumbnail":"https://www.example.com/image.png or FALSE",
|
||||
"url":"https://www.example.com/image.png or FALSE"
|
||||
}
|
||||
],
|
||||
"files":[
|
||||
{
|
||||
"name":"image.png",
|
||||
"type":"PNG",
|
||||
"size":"1MB",
|
||||
"url":"https://www.example.com/image.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -23,7 +23,7 @@ exports.beingprocessed = (name,id,rawprocesstime,user) => {
|
||||
const embed = new discord.EmbedBuilder()
|
||||
.setTitle("🧾 "+l.transcripts.title)
|
||||
.setColor(config.color)
|
||||
.setAuthor({name:user.tag,iconURL:user.displayAvatarURL()})
|
||||
.setAuthor({name:user.username,iconURL:user.displayAvatarURL()})
|
||||
.setFooter({text:name})
|
||||
|
||||
.setDescription("`"+l.transcripts.processed+"...`\n"+l.transcripts.wait+"\n\n"+l.transcripts.estimated+": "+processtime)
|
||||
@@ -43,7 +43,7 @@ exports.tsready = (name,id,url,user) => {
|
||||
const embed = new discord.EmbedBuilder()
|
||||
.setTitle("🧾 "+l.transcripts.title)
|
||||
.setColor(config.color)
|
||||
.setAuthor({name:user.tag,iconURL:user.displayAvatarURL()})
|
||||
.setAuthor({name:user.username,iconURL:user.displayAvatarURL()})
|
||||
.setFooter({text:name})
|
||||
|
||||
if (url){
|
||||
@@ -67,7 +67,7 @@ exports.tserror = (name,id,user,err) => {
|
||||
const embed = new discord.EmbedBuilder()
|
||||
.setTitle("❌ "+l.transcripts.title)
|
||||
.setColor(discord.Colors.Red)
|
||||
.setAuthor({name:user.tag,iconURL:user.displayAvatarURL()})
|
||||
.setAuthor({name:user.username,iconURL:user.displayAvatarURL()})
|
||||
.setFooter({text:name})
|
||||
|
||||
const errDesc = (typeof err == "string") ? "\n"+err : ""
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"version":"1.0.0"
|
||||
"version":"2"
|
||||
}
|
||||
@@ -14,11 +14,15 @@ const tsdb = require("./tsdb")
|
||||
const checkAvailability = async () => {
|
||||
if (process.argv.some((v) => v == "--tsoffline")) return true
|
||||
const axios = require("axios").default
|
||||
const res = await axios.get("https://transcripts.dj-dj.be/status.txt")
|
||||
if (!res || !(res.status == 200) || !res.data) return false
|
||||
try{
|
||||
const res = await axios.get("https://transcripts.dj-dj.be/api/status.json")
|
||||
if (!res || !(res.status == 200) || !res.data) return false
|
||||
|
||||
if ((res.data == "online") || (res.data == "1") || (res.data == "true")) return true
|
||||
else return false
|
||||
if (res.data && res.data["v2"] == "online") return true
|
||||
else return false
|
||||
}catch{
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -36,35 +40,54 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
||||
const chName = channel.name
|
||||
const chId = channel.id
|
||||
|
||||
/**@param {discord.Collection<string, discord.Message<true>>} 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)
|
||||
|
||||
if (tsconfig.sendTranscripts.useHTMLtranscripts){
|
||||
const JSONDATA = require("./communication/compileJson").compile(guild,channel,user,messages,{
|
||||
const tsb = tsconfig.style.background
|
||||
const tsh = tsconfig.style.header
|
||||
const tss = tsconfig.style.stats
|
||||
const JSONDATA = require("./communication/compileJsonV2").compile(guild,channel,user,messages,{
|
||||
style:{
|
||||
titleColor:tsconfig.style.titleColor,
|
||||
enableCustomBackground:tsconfig.style.background.enableCustomBackground,
|
||||
backgroundModus:tsconfig.style.background.backgroundModus,
|
||||
backgroundData:tsconfig.style.background.backgroundData
|
||||
background:{
|
||||
enableCustomBackground:tsb.enableCustomBackground,
|
||||
backgroundModus:tsb.backgroundModus,
|
||||
backgroundData:tsb.backgroundData
|
||||
},
|
||||
header:{
|
||||
enableCustomHeader:tsh.enableCustomHeader,
|
||||
backgroundColor:tsh.backgroundColor,
|
||||
decoColor:tsh.decoColor,
|
||||
textColor:tsh.textColor
|
||||
},
|
||||
stats:{
|
||||
enableCustomStats:tss.enableCustomStats,
|
||||
backgroundColor:tss.backgroundColor,
|
||||
keyTextColor:tss.keyTextColor,
|
||||
valueTextColor:tss.valueTextColor,
|
||||
hideBackgroundColor:tss.hideBackgroundColor,
|
||||
hideTextColor:tss.hideTextColor
|
||||
}
|
||||
|
||||
},
|
||||
bot:{
|
||||
name:client.user.username,
|
||||
id:client.user.id,
|
||||
pfp:client.user.displayAvatarURL()
|
||||
pfp:client.user.displayAvatarURL(),
|
||||
},
|
||||
ticket:{
|
||||
creatorid:ticketopener.id,
|
||||
creatorname:ticketopener.tag,
|
||||
creatorname:ticketopener.username,
|
||||
creatorpfp:ticketopener.displayAvatarURL(),
|
||||
|
||||
openedtime:opentime.getTime(),
|
||||
closedtime:new Date().getTime()
|
||||
}
|
||||
@@ -88,16 +111,17 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
||||
if (!TSdata) return false
|
||||
|
||||
if (TSdata.status == "success"){
|
||||
const url = "https://transcripts.dj-dj.be/t/"+TSdata.time+"_"+TSdata.id+".html"
|
||||
//MAKE THIS COMPATIBLE WITH PREMIUM "customTranscriptUrl" IN FUTURE VERSIONS!!
|
||||
const url = "https://transcripts.dj-dj.be/v2/"+TSdata.time+"_"+TSdata.id+".html"
|
||||
|
||||
//calculate estimated time
|
||||
const lastDumpTime = (new Date(TSdata.estimated.lastdump).getTime())
|
||||
const dumpLoopTime = 15000
|
||||
const nextDump = new Date(lastDumpTime+dumpLoopTime)
|
||||
const processtime = TSdata.estimated.processtime+6000 //6sec extra time for overflow
|
||||
//const lastDumpTime = (new Date(TSdata.estimated.lastdump).getTime())
|
||||
//const dumpLoopTime = 15000
|
||||
//const nextDump = new Date(lastDumpTime+dumpLoopTime)
|
||||
//const processtime = TSdata.estimated.processtime+6000 //6sec extra time for overflow
|
||||
|
||||
const finaltime = new Date(nextDump.getTime()+processtime)
|
||||
const duration = finaltime.getTime()-new Date().getTime()
|
||||
const duration = TSdata.estimated.waittime
|
||||
const finaltime = new Date(new Date().getTime()+duration)
|
||||
|
||||
//waiting
|
||||
if (tsconfig.sendTranscripts.enableChannel){
|
||||
@@ -148,5 +172,5 @@ module.exports = async (messages,guild,channel,user,reason) => {
|
||||
}
|
||||
}
|
||||
}
|
||||
asyncmanager(msglist)
|
||||
asyncmanager()
|
||||
}
|
||||
@@ -47,7 +47,7 @@ exports.createTranscript = async (messagecollection,channel,backup) => {
|
||||
})
|
||||
const filestring = fileurls.length > 0 ? fileurls.join("\n")+"\n" : ""
|
||||
const msgstats = "files: "+msg.attachments.size+", embeds: "+msg.embeds.length
|
||||
filearray.push("["+timestamp.getDate()+"/"+timestamp.getMonth()+"/"+timestamp.getFullYear()+", "+timestamp.getHours()+":"+timestamp.getMinutes()+":"+timestamp.getSeconds()+"|"+msg.author.tag+"] ["+msgstats+"]\n"+content+"\n"+filestring)
|
||||
filearray.push("["+timestamp.getDate()+"/"+timestamp.getMonth()+"/"+timestamp.getFullYear()+", "+timestamp.getHours()+":"+timestamp.getMinutes()+":"+timestamp.getSeconds()+"|"+msg.author.username+"] ["+msgstats+"]\n"+content+"\n"+filestring)
|
||||
})
|
||||
|
||||
if (filearray.length < 2) filearray.push("transcript is empty")
|
||||
|
||||
@@ -6,7 +6,7 @@ const l = bot.language
|
||||
//==================
|
||||
|
||||
//OTTicketOptions
|
||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color: "red"|"green"|"blue"|"gray",adminroles: String[], readonlyAdminroles: String[], channelprefix: String,category: String,message: String,enableDmOnOpen: Boolean,ticketmessage: String, thumbnail:{enable:Boolean,url:String}, image:{enable:Boolean,url:String}, closedCategory:{enable:Boolean,id:String}, autoclose:{enable:Boolean,inactiveHours:Number} }} OTTicketOptions */
|
||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color: "red"|"green"|"blue"|"gray",adminroles: String[], readonlyAdminroles: String[], channelprefix: String,category: String,message: String,enableDmOnOpen: Boolean,ticketmessage: String, thumbnail:{enable:Boolean,url:String}, image:{enable:Boolean,url:String}, closedCategory:{enable:Boolean,id:String}, autoclose:{enable:Boolean,inactiveHours:Number}, ping:{"@here":Boolean, "@everyone":Boolean, custom:{enable:Boolean, roleId:String}} }} OTTicketOptions */
|
||||
|
||||
//OTRoleOptions
|
||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color:"red"|"green"|"blue"|"gray"|"none",roles:String[],mode:"add&remove"|"remove"|"add",enableDmOnOpen:Boolean}} OTRoleOptions */
|
||||
@@ -22,7 +22,7 @@ const l = bot.language
|
||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color:"red"|"green"|"blue"|"gray"|"none",roles:String[],mode:"add&remove"|"remove"|"add",adminroles: String[],channelprefix: String,category: String,message: String,enableDmOnOpen: Boolean,ticketmessage: String, thumbnail:{enable:Boolean,url:String}, image:{enable:Boolean,url:String}, url:String, closedCategory:{enable:Boolean,id:String}, autoclose:{enable:Boolean,inactiveHours:Number}, readonlyAdminroles: String[]}} OTAllOptions */
|
||||
|
||||
//StringOptions
|
||||
/**@typedef {"id"|"name"|"description"|"icon"|"label"|"type"|"color"|"adminroles"|"channelprefix"|"category"|"message"|"enableDmOnOpen"|"ticketmessage"|"thumbnail"|"image"|"closedCategory"|"adminroles"|"autoclose"} OTTicketStringOptions */
|
||||
/**@typedef {"id"|"name"|"description"|"icon"|"label"|"type"|"color"|"adminroles"|"channelprefix"|"category"|"message"|"enableDmOnOpen"|"ticketmessage"|"thumbnail"|"image"|"closedCategory"|"adminroles"|"autoclose"|"ping"} OTTicketStringOptions */
|
||||
/**@typedef {"id"|"name"|"description"|"icon"|"label"|"type"|"color"|"roles"|"mode"|"enableDmOnOpen"} OTRoleStringOptions */
|
||||
/**@typedef {"id"|"name"|"description"|"icon"|"label"|"type"|"url"} OTWebsiteStringOptions */
|
||||
|
||||
|
||||
+29
-48
@@ -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("[ ](OTDATA|")) return {type:"",data:[],status:false}
|
||||
const rawhidden = messageContent.split("[ ](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 = "[ ](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("[ ](OTDATA|")) return {description:description,hiddenData:[]}
|
||||
|
||||
const hiddenData = this.readHiddenData(description)
|
||||
const splitted = description.split("[ ](OTDATA")
|
||||
const original = splitted[0]
|
||||
|
||||
return {description:original,hiddenData:hiddenData}
|
||||
exports.deleteHiddenData = (channelid) => {
|
||||
try {
|
||||
storage.delete("HIDDENDATA",channelid)
|
||||
return true
|
||||
} catch {
|
||||
return false
|
||||
}
|
||||
}
|
||||
@@ -176,28 +176,30 @@ exports.liveStatusUploadManager = async (err) => {
|
||||
const result = await uploadLiveStatus({
|
||||
bot:{
|
||||
id:client.user.id,
|
||||
name:client.user.tag,
|
||||
name:client.user.username,
|
||||
pfp:client.user.displayAvatarURL()
|
||||
},
|
||||
error:err,
|
||||
openticket:{
|
||||
config:{
|
||||
messages:config.messages,
|
||||
options:config.options,
|
||||
transcripts:bot.tsconfig,
|
||||
system:config.system
|
||||
//TEMPORARY SOLUTION => AXIOS 414 ERROR!
|
||||
//messages:config.messages,
|
||||
//options:config.options,
|
||||
//transcripts:bot.tsconfig,
|
||||
//system:config.system
|
||||
},
|
||||
language:config.languageFile,
|
||||
version:require("../../package.json").version,
|
||||
version:"3.4.1",
|
||||
slashcmds:slashMode,
|
||||
transcripts:transcriptMode,
|
||||
plugins:fs.readdirSync("./plugins"),
|
||||
pluginload:globalPluginData
|
||||
},
|
||||
details:{
|
||||
errortime:new Date().getTime(),
|
||||
actions:this.actionRecorder,
|
||||
database:fs.readFileSync("./storage/database.json").toString()
|
||||
errortime:new Date().getTime()
|
||||
//TEMPORARY SOLUTION => AXIOS 414 ERROR!
|
||||
//actions:this.actionRecorder,
|
||||
//database:fs.readFileSync("./storage/database.json").toString()
|
||||
}
|
||||
})
|
||||
if (!result){
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
INFORMATION:
|
||||
============
|
||||
Open Ticket v3.3.2 - © DJdj Development
|
||||
Open Ticket v3.4.1 - © DJdj Development
|
||||
|
||||
discord: https://discord.dj-dj.be
|
||||
website: https://www.dj-dj.be
|
||||
@@ -370,7 +370,9 @@ process.on("uncaughtException",async (error,origin) => {
|
||||
APIEvents.onError(error.name+": "+error.message,new Date())
|
||||
|
||||
//TEMPORARY INTEGRATION FOR LIVESTATUS ERROR UPLOADER:
|
||||
await require("./core/utils/liveStatus").liveStatusUploadManager(error.name+": "+error.message+" | origin: "+origin+"\n"+error.stack)
|
||||
try {
|
||||
await require("./core/utils/liveStatus").liveStatusUploadManager(error.name+": "+error.message+" | origin: "+origin+"\n"+error.stack)
|
||||
} catch {this.errorLog.log("info","FAILED TO AUTO-REPORT ERROR! (you can ignore this error)")}
|
||||
})
|
||||
|
||||
this.actionRecorder.push({
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"ChilledBroke#9986 & M4#5882",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors": {
|
||||
"missingArgsTitle": "قيمة غير صالحة!",
|
||||
"missingArgsDescription": "قيمة مفقودة",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"DJdj Development",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Invalid Arguments!",
|
||||
"missingArgsDescription":"Missing Argument",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"t0miiis#3022",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Neplatny Argument!",
|
||||
"missingArgsDescription":"Chybí Argument",
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
{
|
||||
"errors": {
|
||||
"_CREDITS":"the_gamer#5095",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors": {
|
||||
"missingArgsTitle": "Ugyldigt Argument!",
|
||||
"missingArgsDescription": "Manglende Argument",
|
||||
"noPermsTitle": "Ikke tilladelse!",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"DJj123dj#1706",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Onjuiste parameters!",
|
||||
"missingArgsDescription":"Er missen parameters",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"DJdj Development",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Invalid Arguments!",
|
||||
"missingArgsDescription":"Missing Argument",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"Sanke#6086",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Arguments invalides!",
|
||||
"missingArgsDescription":"Argument manquant",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"david.#8276 ",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Ungültiges Argument!",
|
||||
"missingArgsDescription":"Fehlendes Argument!",
|
||||
@@ -36,7 +39,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:",
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
{
|
||||
"_CREDITS":"ꙅoᴎɒᎸɘƚꙅ#3744",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Invalid Arguments!",
|
||||
"missingArgsDescription":"Missing Argument",
|
||||
"noPermsTitle":"Δεν έχεις άδεια για να τρέξεις αυτή την εντολή!",
|
||||
"noPermsDescription":"Χρειάζεσε άδεια διαχειριστή για να τρέξεις αυτή την εντολή.",
|
||||
"noPermsDelete":"Μόνο οι διαχειριστές μπορούν να διαγράψουν τα εισιτήρια!",
|
||||
"chooseFromListTitle":"Μη έγκυρο id.",
|
||||
"chooseFromListDescription":"Διάλεξε ενα απο τα παρακάτω id:",
|
||||
"boterror":"Υπάρχει κάποιο πρόβλημα!",
|
||||
"notInTicketTitle":"Δεν είσε στο κανάλι του εισιτηρίου!",
|
||||
"notInTicketDescription":"Δεν μπορείς να τρέξεις αυτή την εντολή εκτός του εισιτηρίου",
|
||||
"ticketDoesntExist":"Αυτο το εισιτήριο δεν υπάρχει!",
|
||||
"roleDoesntExist":"Αυτός ο ρόλος δεν υπάρχει!",
|
||||
"anotherOption":"Διάλεξε άλλο λόγο για εισιτήριο!",
|
||||
"maxAmountTitle":"Έχεις ανοίξει πολλά εισιτήρια για την ώρα.",
|
||||
"maxAmountDescription":"Έχεις υπερβεί το όριο των εισιτηρίον!\nΔεν μπορείς να ανοίξεις καινούργιο.!",
|
||||
"somethingWentWrong":"**Κάτι πήγε λάθος!**\nΔοκίμασε ξανά αργότερα!"
|
||||
},
|
||||
"commands":{
|
||||
"userAddedTitle":"Ο {0} προσθέθηκε στο εισιτήριο",
|
||||
"userRemovedTitle":"Ο {0} αφαιρέθηκε απο το εισιτήριο!",
|
||||
"renameTitle":"Το όνομα άλλαξε σε {0}!",
|
||||
"closeTitle":"Το εισιτήριο έκλεισε!",
|
||||
"deleteTitle":"Διαγράφω το εισιτήριο...",
|
||||
"reopenTitle":"Το εισιτήριο ξανά άνοιξε!",
|
||||
|
||||
"claimTitle":"Το εισιτήριο διεκδικήθεικε απο τον {0}",
|
||||
"unclaimTitle":"Το εισιτήριο δεν είναι πλέον διεκδικημένο!",
|
||||
"changeTitle":"Ο τύπος του εισιτηρίου άλλαξε σε {0}!",
|
||||
|
||||
"statsTitle":"Εδώ είναι τα στατιστικά για το {0}!",
|
||||
"autocloseTitle":"Αυτό το εισιτήριο θα κλείσε σε {0}!",
|
||||
"autocloseRejectTitle":"Αυτό το εισιτήριο δεν θα κλέισε αυτόματα!",
|
||||
"autocloseWarn":"Αυτό ισχύει μονο για μή ενεργά εισιτήρια!",
|
||||
|
||||
"goToTicket":"Μεταφορά στο εισιτήριο.",
|
||||
"ticketWarning":"Το εισιτήριο είναι στο παρακάτω μήνυμα!",
|
||||
"maxTicketWarning":"**Προειδοποίηση:** _Μπορείς να φτιάξεις μόνο {0} εισιτήριο/εισιτήρια για την ώρα!_"
|
||||
},
|
||||
"helpMenu":{
|
||||
"title":"Διαθέσιμες εντολές:",
|
||||
"header1":"**Πηγαινε στο {0} για να φτιάξεις ενα νέο εισιτήριο!**\n\n",
|
||||
"header2":"**Τρέχα την εντολή `/new` ή `/ticket` για να φτιάξεις ένα εισιτήριο!**\n\n",
|
||||
|
||||
"msgCmd":"Εμφάνισε ένα embed με κουμπιά. (admins only)",
|
||||
"renameCmd":"Μετονόμασε το εισιτήριο. (όχι κενά)",
|
||||
"closeCmd":"Κλέισε το εισιτήριο.",
|
||||
"deleteCmd":"Διέγραψε το εισιτήριο.",
|
||||
"addCmd":"Πρόσθεσε κάποιον στο εισιτήριο.",
|
||||
"removeCmd":"Αφαίρεσε κάποιον απο το εισιτήριο.",
|
||||
"reopenCmd":"Ξανά άνοιξε το εισιτήριο.",
|
||||
"changeCmd":"Άλλαξε τον τύπο του εισιτηρίου.",
|
||||
"claimCmd":"Διεκδίκησε το εισιτήριο.",
|
||||
"unclaimCmd":"Unclaim a ticket.",
|
||||
"statsCmd":"Δές τα στατιστικά του εισιτηρίου.",
|
||||
"autocloseCmd":"Βάλε χρονόμετρο για να κλείσει το εισιτήριο"
|
||||
},
|
||||
"buttons":{
|
||||
"close":"κλείσε το εισιτήριο",
|
||||
"delete":"Διέγραψε το εισιτήριο",
|
||||
"reopen":"Ξανά άνοιξε το εισιτήριο",
|
||||
"closeWithReason":"Κλείσε με αιτιολόγιση"
|
||||
},
|
||||
"messages":{
|
||||
"closedDescription":"Μονο οι διαχειριστές μπορουν να διαγράψουν τα εισιτήρια!\n\n*Πάτα το παρακάτω κουμπί για να ξανά ανοίξεις το εισιτήριο!*",
|
||||
"createdTitle":"Το εισιτήριο δημιουργήθηκε!",
|
||||
"createdDescription":"Το εισιτήριο σου δημιουργήθηκε μπορείς να το βρείς με την αναφορά που έγινε στο κανάλι του εισιτηρίου!",
|
||||
|
||||
"newTicketDmTitle":"Νέο εισιτήριο!",
|
||||
"closedTicketDmTitle":"Το εισιτήριο έκλεισε!",
|
||||
"deletedTicketDmTitle":"Tο εισιτήριο διεγράφη!",
|
||||
"closedTicketDmDescription":"Το εισιτήριο σου είναι κλειστό!",
|
||||
"deletedTicketDmDescription":"Το εισιτήριο σου διεγράφη!",
|
||||
"reopenTicketDmTitle":"Tο εισιτήριο ξανά άνοιξε!",
|
||||
"reopenTicketDmDescription":"Το εισιτήριο σου ξανά άνοιξε!",
|
||||
|
||||
"chooseCategory":"Διάλεξε μία κατηγορία:",
|
||||
"gettingdeleted":"Το εισιτήριο διαγράφεται...",
|
||||
|
||||
"none":"Κανένας",
|
||||
"reason":"Λόγος",
|
||||
"createdat":"Δημιουργήθηκε",
|
||||
"openedby":"Ανοίχτηκε από",
|
||||
"deletedby":"Διεγράφη απο",
|
||||
"closedby":"Έκλεισε από",
|
||||
|
||||
"modalreason":"Γιατι να κλείσει το εισιτήριο?",
|
||||
"chooseATicket": "Δίαλεξε ενα εισιτήριο"
|
||||
},
|
||||
"transcripts":{
|
||||
"title":"Αντίγραφο",
|
||||
"processed":"Το αντίγραφο ετοιμάζεται!",
|
||||
"wait":"Παρακαλώ περιμένετε!",
|
||||
"estimated":"Ώρα αναμονής",
|
||||
"available":"Το αντίγραφο είναι ανοιχτώ εδώ!"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"Maurizio#0268",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Argomenti non validi!",
|
||||
"missingArgsDescription":"Argomenti mancanti",
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
{
|
||||
"_CREDITS":"NoOneNook#0266",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Ugyldige argumenter!",
|
||||
"missingArgsDescription":"Manglende argument",
|
||||
"noPermsTitle":"Ingen rettigheter",
|
||||
"noPermsDescription":"Du trenger administrator eller moderator rettigheter",
|
||||
"noPermsDelete":"Bare staff kan slette en ticket!",
|
||||
"chooseFromListTitle":"Ugyldig ID",
|
||||
"chooseFromListDescription":"Velg en av ID-ene nedenfor:",
|
||||
"boterror":"Bot Error!",
|
||||
"notInTicketTitle":"Du er ikke i en ticket!",
|
||||
"notInTicketDescription":"Du kan ikke bruke denne command utenfor en ticket.",
|
||||
"ticketDoesntExist":"Ticket finnes ikke lenger!",
|
||||
"roleDoesntExist":"Rollen eksisterer ikke lenger!",
|
||||
"anotherOption":"Dette alternativet er ikke en ticket!",
|
||||
"maxAmountTitle":"Maks antall er nådd!",
|
||||
"maxAmountDescription":"Du har nådd maksimalt antall tillatte ticket's\nSå du kan ikke lage en ny før de andre er lukket!",
|
||||
"somethingWentWrong":"**Noe gikk galt!**\nVennligst prøv igjen senere!"
|
||||
},
|
||||
"commands":{
|
||||
"userAddedTitle":"{0} har blitt lagt til i ticket!",
|
||||
"userRemovedTitle":"Fjernet {0} fra ticket!",
|
||||
"renameTitle":"Endret navn til {0}!",
|
||||
"closeTitle":"Ticket er blitt lukket!",
|
||||
"deleteTitle":"Sletter ticket...",
|
||||
"reopenTitle":"Ticket er gjenåpnet",
|
||||
|
||||
"claimTitle":"{0} har tatt over denne saken!",
|
||||
"unclaimTitle":"Denne ticket er blitt ledig igjen!",
|
||||
"changeTitle":"Endret ticket-type til {0}!",
|
||||
|
||||
"statsTitle":"Her er statistikken for {0}!",
|
||||
"autocloseTitle":"Denne ticket stenges automatisk etter kl {0}!",
|
||||
"autocloseRejectTitle":"Denne ticket vil ikke lenger stenges automatisk!",
|
||||
"autocloseWarn":"Dette påvirker kun inaktive tickets!",
|
||||
|
||||
"goToTicket":"DIN TICKET",
|
||||
"ticketWarning":"Embed er i meldingen nedenfor!",
|
||||
"maxTicketWarning":"**Advarsel:** _Du kan bare opprette {0}ticket(s) om gangen!_"
|
||||
},
|
||||
"helpMenu":{
|
||||
"title":"Tilgjengelige Commands:",
|
||||
"header1":"**Gå til {0} for å opprette en ticket!**\n\n",
|
||||
"header2":"**Skriv kommandoen `/new` eller `/ticket` for å lage en ticket!**\n\n",
|
||||
|
||||
"msgCmd":"Lag en embed med knapper. (admins only)",
|
||||
"renameCmd":"Gi nytt navn til en ticket. (ingen mellomrom)",
|
||||
"closeCmd":"Lukk en ticket.",
|
||||
"deleteCmd":"Slett en ticket.",
|
||||
"addCmd":"Legg til en bruker i ticket.",
|
||||
"removeCmd":"Fjern en bruker fra ticket.",
|
||||
"reopenCmd":"Åpne en ticket på nytt etter at den ble avsluttet.",
|
||||
"changeCmd":"Endre ticket kategori",
|
||||
"claimCmd":"Ta over ticket.",
|
||||
"unclaimCmd":"Frigjør den fra ticket.",
|
||||
"statsCmd":"Se ticket stats.",
|
||||
"autocloseCmd":"Still inn når ticket lukkes automatisk etter den ble åpnet"
|
||||
},
|
||||
"buttons":{
|
||||
"close":"Lukk Ticket",
|
||||
"delete":"Slett Ticket",
|
||||
"reopen":"Gjenåpne Ticket",
|
||||
"closeWithReason":"Legg til årsak"
|
||||
},
|
||||
"messages":{
|
||||
"closedDescription":"Bare staff medlemmer kan snakke i denne ticket nå!\n\n*Klikk på knappen nedenfor for å slette eller åpne ticket på nytt!*",
|
||||
"createdTitle":"Ticket er laget!",
|
||||
"createdDescription":"__Du finner den ved å trykke på knappen under__",
|
||||
|
||||
"newTicketDmTitle":"New Ticket!",
|
||||
"closedTicketDmTitle":"Ticket Åpnet!",
|
||||
"deletedTicketDmTitle":"Ticket Slettet!",
|
||||
"closedTicketDmDescription":"Din ticket er lukket!",
|
||||
"deletedTicketDmDescription":"Din ticket er slettet!",
|
||||
"reopenTicketDmTitle":"Ticket gjenåpnet!",
|
||||
"reopenTicketDmDescription":"Din icket er gjenåpnet!",
|
||||
|
||||
"chooseCategory":"Velg en kategori:",
|
||||
"gettingdeleted":"Ticket slettes....",
|
||||
|
||||
"none":"Ingen",
|
||||
"reason":"Grunnlag",
|
||||
"createdat":"Laget",
|
||||
"openedby":"Laget av",
|
||||
"deletedby":"Slettet av",
|
||||
"closedby":"Lukket av",
|
||||
|
||||
"modalreason":"Grunnlag for lukking!",
|
||||
"chooseATicket": "Velg en ticket"
|
||||
},
|
||||
"transcripts":{
|
||||
"title":"Ticket logg",
|
||||
"processed":"Logg fil lages, snart klar!",
|
||||
"wait":"Vennligst vent!",
|
||||
"estimated":"Beregnet tid",
|
||||
"available":"Loggfil er tilgjengelig over denne meldingen!"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"MKevas#8311",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Nieprawidłowe argumenty!",
|
||||
"missingArgsDescription":"Brakujący argument",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"QuirAddon#9778",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Argumentos inválidos!",
|
||||
"missingArgsDescription":"Argumento ausente",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"Sanke#6086",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Argumente Invalide",
|
||||
"missingArgsDescription":"Argument Lipsa",
|
||||
|
||||
+17
-14
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"Apexo#0723",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Неверные аргументы!",
|
||||
"missingArgsDescription":"Отсутствует аргумент",
|
||||
@@ -29,12 +32,12 @@
|
||||
"unclaimTitle":"Этот тикет никем не взят!",
|
||||
"changeTitle":"Изменён тип тикета на {0}!",
|
||||
|
||||
"statsTitle":"Here are the stats for {0}!",
|
||||
"autocloseTitle":"This ticket will be closed automatically after {0}!",
|
||||
"autocloseRejectTitle":"This ticket will no longer be closed automatically!",
|
||||
"autocloseWarn":"This only affects inactive tickets!",
|
||||
"statsTitle":"Здесь статистика для {0}!",
|
||||
"autocloseTitle":"Этот тикет будет закрыт автоматически после {0}!",
|
||||
"autocloseRejectTitle":"Этот тикет больше не будет закрыт автоматически!",
|
||||
"autocloseWarn":"Это касается только неактивных тикетов!",
|
||||
|
||||
"goToTicket":"go to ticket",
|
||||
"goToTicket":"перейти в тикет",
|
||||
"ticketWarning":"embed ниже сообщения!",
|
||||
"maxTicketWarning":"**Предупреждение:** _Вы можете создать только {0} тикет(а/ов) в этот раз!_"
|
||||
},
|
||||
@@ -50,11 +53,11 @@
|
||||
"addCmd":"Добавить пользователя в тикет.",
|
||||
"removeCmd":"Удалить пользователя из тикета.",
|
||||
"reopenCmd":"Открыть заново тикет после того, как он был закрыт.",
|
||||
"changeCmd":"Change ticket type.",
|
||||
"claimCmd":"Claim a ticket.",
|
||||
"unclaimCmd":"Unclaim a ticket.",
|
||||
"statsCmd":"View ticket stats.",
|
||||
"autocloseCmd":"Set timer to automatically close ticket"
|
||||
"changeCmd":"Поменять тип тикета.",
|
||||
"claimCmd":"Взять тикет.",
|
||||
"unclaimCmd":"Снять тикет.",
|
||||
"statsCmd":"Посмотреть статистику тикета.",
|
||||
"autocloseCmd":"Установить таймер, чтобы автоматически закрыть тикет"
|
||||
},
|
||||
"buttons":{
|
||||
"close":"Закрыть тикет",
|
||||
@@ -80,8 +83,8 @@
|
||||
|
||||
"none":"отсутствует",
|
||||
"reason":"причина",
|
||||
"createdat":"created at",
|
||||
"openedby":"opened by",
|
||||
"createdat":"создан",
|
||||
"openedby":"открыт",
|
||||
"deletedby":"удалён",
|
||||
"closedby":"закрыт",
|
||||
|
||||
@@ -90,9 +93,9 @@
|
||||
},
|
||||
"transcripts":{
|
||||
"title":"Транскрипт",
|
||||
"processed":"This transcript is being processed",
|
||||
"processed":"Этот транскрипт находится в процессе обработки",
|
||||
"wait":"Пожайлуста подождите!",
|
||||
"estimated":"Оценочное время",
|
||||
"available":"Транскрипт здесь доступен"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
"examples":{
|
||||
"en-GB":"english",
|
||||
"en-US":"english",
|
||||
"no": "Norwegian",
|
||||
"nl":"dutch",
|
||||
"ro":"romanian",
|
||||
"de":"german",
|
||||
@@ -10,6 +11,7 @@
|
||||
"es-ES":"spanish",
|
||||
"it":"italian",
|
||||
"ru":"russian",
|
||||
"tr": "Türkçe",
|
||||
|
||||
"MISSING":"arabic,portuguese",
|
||||
"NOTAVAILABLE":"arabic,portuguese,czech"
|
||||
@@ -18,6 +20,7 @@
|
||||
"help":{
|
||||
"en-GB":"A list of the available commands.",
|
||||
"en-US":"A list of the available commands.",
|
||||
"no":"En liste over commands.",
|
||||
"nl":"Een lijst met de beschikbare commands.",
|
||||
"ro":"O lista a comenzilor disponibile.",
|
||||
"de":"Eine Liste der verfügbaren Befehle.",
|
||||
@@ -25,11 +28,13 @@
|
||||
"fr":"Une liste des commandes.",
|
||||
"es-ES":"Una lista de los comandos disponibles.",
|
||||
"it":"Una lista di tutti i comandi disponibili.",
|
||||
"ru":"Список доступных команд"
|
||||
"ru":"Список доступных команд",
|
||||
"tr": "Kullanılabilir komutların listesi."
|
||||
},
|
||||
"message":{
|
||||
"en-GB":"Spawn an embed with buttons.",
|
||||
"en-US":"Spawn an embed with buttons.",
|
||||
"no":"Legg inn en melding i denne kanalen",
|
||||
"nl":"Spawn een embed met knoppen.",
|
||||
"ro":"Deschide un embed cu butoane.",
|
||||
"de":"Sendet ein Embed mit Knöpfen.",
|
||||
@@ -37,11 +42,13 @@
|
||||
"fr":"Créer un embed avec des boutons.",
|
||||
"es-ES":"Genera un embed con botones.",
|
||||
"it":"Genera un embed con un pulsante.",
|
||||
"ru":"Создать embed с кнопками"
|
||||
"ru":"Создать embed с кнопками",
|
||||
"tr": "Butonlar ile bir yerleştirme oluşturun."
|
||||
},
|
||||
"close":{
|
||||
"en-GB":"Close a ticket.",
|
||||
"en-US":"Close a ticket.",
|
||||
"no":"Lukk ticket.",
|
||||
"nl":"Sluit een ticket",
|
||||
"ro":"Inchide un ticket.",
|
||||
"de":"Schließe ein Ticket.",
|
||||
@@ -49,11 +56,13 @@
|
||||
"fr":"Fermer un ticket.",
|
||||
"es-ES":"Cierra un ticket.",
|
||||
"it":"Chiudi un ticket.",
|
||||
"ru":"Закрыть тикет"
|
||||
"ru":"Закрыть тикет",
|
||||
"tr": "Bileti kapat."
|
||||
},
|
||||
"delete":{
|
||||
"en-GB":"Delete a ticket.",
|
||||
"en-US":"Delete a ticket.",
|
||||
"no":"Slett ticket.",
|
||||
"nl":"Verwijder een ticket",
|
||||
"ro":"Sterge un ticket.",
|
||||
"de":"Lösche ein Ticket.",
|
||||
@@ -61,11 +70,13 @@
|
||||
"fr":"Supprimer un ticket.",
|
||||
"es-ES":"Elimina un ticket.",
|
||||
"it":"Elimina un ticket.",
|
||||
"ru":"Удалить тикет"
|
||||
"ru":"Удалить тикет",
|
||||
"tr": "Bileti sil."
|
||||
},
|
||||
"reopen":{
|
||||
"en-GB":"Re-Open a ticket.",
|
||||
"en-US":"Re-Open a ticket.",
|
||||
"no":"Gjenåpne ticket.",
|
||||
"nl":"Heropen een ticket.",
|
||||
"ro":"Re-deschide un ticket.",
|
||||
"de":"Wiedereröffnung eines Tickets.",
|
||||
@@ -73,11 +84,13 @@
|
||||
"fr":"Re-ouvrir un ticket.",
|
||||
"es-ES":"Re-abre un ticket.",
|
||||
"it":"Ri-Apri un ticket.",
|
||||
"ru":"Открыть заново тикет"
|
||||
"ru":"Открыть заново тикет",
|
||||
"tr": "Bileti yeniden aç."
|
||||
},
|
||||
"add":{
|
||||
"en-GB":"Add another user to a ticket.",
|
||||
"en-US":"Add another user to a ticket.",
|
||||
"no":"Legg til en annen bruker til ticket.",
|
||||
"nl":"Voeg een andere user toe aan een ticket.",
|
||||
"ro":"Adauga un utilizator la acest ticket.",
|
||||
"de":"Füge einen anderen Nutzer zum Ticket hinzu.",
|
||||
@@ -85,11 +98,13 @@
|
||||
"fr":"Ajouter un utilisateur au ticket.",
|
||||
"es-ES":"Agrega otro usuario al ticket.",
|
||||
"it":"Aggiungi un membro al ticket",
|
||||
"ru":"Добавить другого пользователя в тикет"
|
||||
"ru":"Добавить другого пользователя в тикет",
|
||||
"tr": "Bilete başka bir kullanıcı ekle."
|
||||
},
|
||||
"remove":{
|
||||
"en-GB":"Remove a user from a ticket.",
|
||||
"en-US":"Remove a user from a ticket.",
|
||||
"no":"Fjern en bruker fra ticket.",
|
||||
"nl":"Verwijder een user van een ticket.",
|
||||
"ro":"Sterge un utilizator dintr-un ticket.",
|
||||
"de":"Entferne einen Nutzer von dem Ticket.",
|
||||
@@ -97,11 +112,13 @@
|
||||
"fr":"Enlever quelqu’un du ticket.",
|
||||
"es-ES":"Elimina otro usuario del ticket.",
|
||||
"it":"Rimuovi un membro dal ticket",
|
||||
"ru":"Удалить пользователя из тикета"
|
||||
"ru":"Удалить пользователя из тикета",
|
||||
"tr": "Kullanıcıyı bir biletten kaldır."
|
||||
},
|
||||
"newticket":{
|
||||
"en-GB":"Create a ticket",
|
||||
"en-US":"Create a ticket",
|
||||
"no":"Lag en ny ticket",
|
||||
"nl":"Maak een ticket aan",
|
||||
"ro":"Creeaza un ticket.",
|
||||
"de":"Erstelle ein Ticket.",
|
||||
@@ -109,11 +126,13 @@
|
||||
"fr":"Créer un ticket",
|
||||
"es-ES":"Crear un ticket.",
|
||||
"it":"Crea un ticket",
|
||||
"ru":"Создать тикет"
|
||||
"ru":"Создать тикет",
|
||||
"tr": "Bilet oluştur"
|
||||
},
|
||||
"rename":{
|
||||
"en-GB":"Rename a ticket channel.",
|
||||
"en-US":"Rename a ticket channel.",
|
||||
"no":"Gi nytt navn til ticket kanalen.",
|
||||
"nl":"Hernoem een ticket channel.",
|
||||
"ro":"Redenumeste un ticket.",
|
||||
"de":"Benenne einen Ticket Channel.",
|
||||
@@ -121,11 +140,13 @@
|
||||
"fr":"Renommer un ticket.",
|
||||
"es-ES":"Renombrar un canal de ticket.",
|
||||
"it":"Rinomina il canale di un ticket.",
|
||||
"ru":"Переименовать канал тикета"
|
||||
"ru":"Переименовать канал тикета",
|
||||
"tr": "Bilet kanalını yeniden adlandır."
|
||||
},
|
||||
"claim":{
|
||||
"en-GB":"Claim a ticket.",
|
||||
"en-US":"Claim a ticket.",
|
||||
"no":"Overta ticket.",
|
||||
"nl":"Claim een ticket.",
|
||||
"ro":" ",
|
||||
"de":" ",
|
||||
@@ -133,11 +154,13 @@
|
||||
"fr":" ",
|
||||
"es-ES":" ",
|
||||
"it":" ",
|
||||
"ru":"Взять тикет"
|
||||
"ru":"Взять тикет",
|
||||
"tr":"Bilet talep et."
|
||||
},
|
||||
"unclaim":{
|
||||
"en-GB":"Un-claim a ticket.",
|
||||
"en-US":"Un-claim a ticket.",
|
||||
"no":"Frigjør ticket.",
|
||||
"nl":"Ontclaim een ticket.",
|
||||
"ro":" ",
|
||||
"de":" ",
|
||||
@@ -145,11 +168,13 @@
|
||||
"fr":" ",
|
||||
"es-ES":" ",
|
||||
"it":" ",
|
||||
"ru":"Снять тикет"
|
||||
"ru":"Снять тикет",
|
||||
"tr":"Bileti iptal et."
|
||||
},
|
||||
"category":{
|
||||
"en-GB":"Change ticket type.",
|
||||
"en-US":"Change ticket type.",
|
||||
"no":"Endre ticket type.",
|
||||
"nl":"Verander ticket type.",
|
||||
"ro":" ",
|
||||
"de":" ",
|
||||
@@ -157,7 +182,8 @@
|
||||
"fr":" ",
|
||||
"es-ES":" ",
|
||||
"it":" ",
|
||||
"ru":"Изменить тип тикета"
|
||||
"ru":"Изменить тип тикета",
|
||||
"tr":"Bilet türünü değiştir."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"n1kkec#5341",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Napačen argument!",
|
||||
"missingArgsDescription":"Argument manka",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"Redactado#1673 & josuens14#5267",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"¡Argumentos inválidos!",
|
||||
"missingArgsDescription":"Argumento faltante.",
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
{
|
||||
"_CREDITS":"Mods HD#0661",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"อาร์กิวเมนต์ไม่ถูกต้อง!",
|
||||
"missingArgsDescription":"ขาดอาร์กิวเมนต์",
|
||||
"noPermsTitle":"ไม่มีสิทธิ์!",
|
||||
"noPermsDescription":"คุณต้องมีสิทธิ์ `ADMINISTRATOR` หรืออยู่ในรายการบทบาทที่ได้รับอนุญาต!",
|
||||
"noPermsDelete":"เฉพาะผู้ดูแลระบบเท่านั้นที่สามารถลบตั๋วได้!",
|
||||
"chooseFromListTitle":"ID ไม่ถูกต้อง",
|
||||
"chooseFromListDescription":"เลือกหนึ่งใน ID ด้านล่าง:",
|
||||
"boterror":"ข้อผิดพลาดของบอท!",
|
||||
"notInTicketTitle":"คุณไม่ได้อยู่ในตั๋ว!",
|
||||
"notInTicketDescription":"คำสั่งนี้ไม่ทำงานนอกตั๋ว!",
|
||||
"ticketDoesntExist":"ตั๋วนี้ไม่มีอีกแล้ว!",
|
||||
"roleDoesntExist":"บทบาทนี้ไม่มีอีกแล้ว!",
|
||||
"anotherOption":"ตัวเลือกนี้ไม่ใช่ตั๋ว แต่เป็นประเภทอื่น!",
|
||||
"maxAmountTitle":"ถึงจำนวนสูงสุดแล้ว!",
|
||||
"maxAmountDescription":"คุณได้ถึงจำนวนสูงสุดของตั๋วที่อนุญาต!\nดังนั้นคุณไม่สามารถสร้างใหม่ได้!",
|
||||
"somethingWentWrong":"**มีบางอย่างผิดพลาด!**\nกรุณาลองอีกครั้งในภายหลัง!"
|
||||
},
|
||||
"commands":{
|
||||
"userAddedTitle":"เพิ่ม {0} ในตั๋วนี้!",
|
||||
"userRemovedTitle":"ลบ {0} ออกจากตั๋วนี้!",
|
||||
"renameTitle":"เปลี่ยนชื่อเป็น {0}!",
|
||||
"closeTitle":"ปิดตั๋วนี้!",
|
||||
"deleteTitle":"กำลังลบตั๋วนี้...",
|
||||
"reopenTitle":"เปิดตั๋วนี้อีกครั้ง!",
|
||||
|
||||
"claimTitle":"ตั๋วนี้ถูกเรียกขึ้นโดย {0}",
|
||||
"unclaimTitle":"ตั๋วนี้ไม่ได้ถูกเรียกขึ้นแล้ว!",
|
||||
"changeTitle":"เปลี่ยนประเภทตั๋วเป็น {0}!",
|
||||
|
||||
"statsTitle":"นี่คือสถิติสำหรับ {0}!",
|
||||
"autocloseTitle":"ตั๋วนี้จะถูกปิดอัตโนมัติหลังจาก {0}!",
|
||||
"autocloseRejectTitle":"ตั๋วนี้จะไม่ถูกปิดอัตโนมัติอีกต่อไป!",
|
||||
"autocloseWarn":"ส่วนนี้มีผลกับตั๋วที่ไม่ได้ใช้งาน!",
|
||||
|
||||
"goToTicket":"ไปที่ตั๋ว",
|
||||
"ticketWarning":"Embed อยู่ในข้อความด้านล่าง!",
|
||||
"maxTicketWarning":"**คำเตือน:** _คุณสามารถสร้างได้ {0} ตั๋วในครั้งเดียว!_"
|
||||
},
|
||||
"helpMenu":{
|
||||
"title":"คำสั่งที่ใช้ได้:",
|
||||
"header1":"**ไปที่ {0} เพื่อสร้างตั๋ว!**\n\n",
|
||||
"header2":"**ใช้คำสั่ง `/new` หรือ `/ticket` เพื่อสร้างตั๋ว!**\n\n",
|
||||
|
||||
"msgCmd":"สร้าง embed พร้อมปุ่ม (เฉพาะผู้ดูแลระบบ)",
|
||||
"renameCmd":"เปลี่ยนชื่อตั๋ว (ไม่มีช่องว่าง)",
|
||||
"closeCmd":"ปิดตั๋ว",
|
||||
"deleteCmd":"ลบตั๋ว",
|
||||
"addCmd":"เพิ่มผู้ใช้ในตั๋ว",
|
||||
"removeCmd":"ลบผู้ใช้ออกจากตั๋ว",
|
||||
"reopenCmd":"เปิดตั๋วอีกครั้งหลังจากถูกปิด",
|
||||
"changeCmd":"เปลี่ยนประเภทตั๋ว",
|
||||
"claimCmd":"เรียกขึ้นตั๋ว",
|
||||
"unclaimCmd":"ยกเลิกการเรียกขึ้นตั๋ว",
|
||||
"statsCmd":"ดูสถิติตั๋ว",
|
||||
"autocloseCmd":"ตั้งค่าการปิดตั๋วอัตโนมัติ"
|
||||
},
|
||||
"buttons":{
|
||||
"close":"ปิดตั๋ว",
|
||||
"delete":"ลบตั๋ว",
|
||||
"reopen":"เปิดตั๋วอีกครั้ง",
|
||||
"closeWithReason":"ปิดด้วยเหตุผล"
|
||||
},
|
||||
"messages":{
|
||||
"closedDescription":"เฉพาะผู้ดูแลระบบเท่านั้นที่สามารถพูดคุยในตั๋วนี้ได้!\n\n*คลิกที่ปุ่มด้านล่างเพื่อลบหรือเปิดตั๋วนี้อีกครั้ง!*",
|
||||
"createdTitle":"สร้างตั๋วแล้ว!",
|
||||
"createdDescription":"ตั๋วของคุณถูกสร้างแล้ว คุณสามารถตรวจสอบได้จากการแจ้งเตือน!",
|
||||
|
||||
"newTicketDmTitle":"ตั๋วใหม่!",
|
||||
"closedTicketDmTitle":"ปิดตั๋ว!",
|
||||
"deletedTicketDmTitle":"ลบตั๋ว!",
|
||||
"closedTicketDmDescription":"ตั๋วของคุณถูกปิด!",
|
||||
"deletedTicketDmDescription":"ตั๋วของคุณถูกลบ!",
|
||||
"reopenTicketDmTitle":"เปิดตั๋วอีกครั้ง!",
|
||||
"reopenTicketDmDescription":"ตั๋วของคุณถูกเปิดอีกครั้ง!",
|
||||
|
||||
"chooseCategory":"เลือกหมวดหมู่:",
|
||||
"gettingdeleted":"กำลังลบตั๋ว...",
|
||||
|
||||
"none":"ไม่มี",
|
||||
"reason":"เหตุผล",
|
||||
"createdat":"สร้างเมื่อ",
|
||||
"openedby":"เปิดโดย",
|
||||
"deletedby":"ถูกลบโดย",
|
||||
"closedby":"ถูกปิดโดย",
|
||||
|
||||
"modalreason":"เหตุผลในการปิดตั๋วนี้คืออะไร?",
|
||||
"chooseATicket": "เลือกตั๋ว"
|
||||
},
|
||||
"transcripts":{
|
||||
"title":"บันทึกการสนทนา",
|
||||
"processed":"บันทึกการสนทนากำลังดำเนินการ",
|
||||
"wait":"กรุณารอ!",
|
||||
"estimated":"เวลาโดยประมาณ",
|
||||
"available":"บันทึกการสนทนาสามารถใช้งานได้ที่นี่"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"Hydrâelčhâvø#1575",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Geçersiz argümanlar!",
|
||||
"missingArgsDescription":"Eksik argüman!",
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
{
|
||||
"_CREDITS":"Anderskiy#4093",
|
||||
"_INFO":"Цей файл є перекладом для open ticket 3.4.1",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Невірні аргументи!",
|
||||
"missingArgsDescription":"Відсутні аргументи!",
|
||||
"noPermsTitle":"Відсутні права!",
|
||||
"noPermsDescription":"Вам потрібно право `ADMINISTRATOR` або бути в списку дозволених ролей!",
|
||||
"noPermsDelete":"Тільки адміни можуть видаляти тікети!",
|
||||
"chooseFromListTitle":"Недійсний ID",
|
||||
"chooseFromListDescription":"Виберіть один із наведених нижче id:",
|
||||
"boterror":"Помилка боту!",
|
||||
"notInTicketTitle":"Вас немає в тікеті!",
|
||||
"notInTicketDescription":"Ця команда не працює поза тікетами!",
|
||||
"ticketDoesntExist":"Цей тікет більше не існує!",
|
||||
"roleDoesntExist":"Ця роль більше не існує!",
|
||||
"anotherOption":"Це не є тікетом, а є іншим типом!",
|
||||
"maxAmountTitle":"Досягнуто максимальної кількості!",
|
||||
"maxAmountDescription":"Ви досягли максимально дозволеної кількості тікетів!\nТож ви не можете створити новий!",
|
||||
"somethingWentWrong":"**Щось пішло не так!**\nБудь ласка, спробуйте ще раз!"
|
||||
},
|
||||
"commands":{
|
||||
"userAddedTitle":"Додано {0} до цього тікету!",
|
||||
"userRemovedTitle":"Видалено {0} з цього тікету!",
|
||||
"renameTitle":"Змінено ім'я на {0}!",
|
||||
"closeTitle":"Тікет закритий!",
|
||||
"deleteTitle":"Видаляємо тікет",
|
||||
"reopenTitle":"Знову відкриваємо тікет!",
|
||||
|
||||
"claimTitle":"Цей тікет узяв {0}",
|
||||
"unclaimTitle":"Цей тікет ніким не зайнятий!",
|
||||
"changeTitle":"Тип тікету змінено на {0}!",
|
||||
|
||||
"statsTitle":"Ось статистика для {0}!",
|
||||
"autocloseTitle":"Цей тікет буде автоматично закрито після {0}!",
|
||||
"autocloseRejectTitle":"Цей тікет більше не закриватиметься автоматично!",
|
||||
"autocloseWarn":"Це стосується лише неактивних тікетів!",
|
||||
|
||||
"goToTicket":"перейти до тікету",
|
||||
"ticketWarning":"Ембед знаходиться в повідомленні нижче!",
|
||||
"maxTicketWarning":"**Попередження:** _Ви можете створити лише стільки квитків за раз: {0}!_"
|
||||
},
|
||||
"helpMenu":{
|
||||
"title":"Доступні команди:",
|
||||
"header1":"**Перейдіть до {0}, щоб створити тікет!**\n\n",
|
||||
"header2":"**Виконайте команду `/new` або `/ticket`, щоб створити тікет!**\n\n",
|
||||
|
||||
"msgCmd":"Створити ембед з кнопками. (тільки адміністратори)",
|
||||
"renameCmd":"Перейменувати тікет. (без пробілів)",
|
||||
"closeCmd":"Закрити тікет.",
|
||||
"deleteCmd":"Видалити тікет.",
|
||||
"addCmd":"Додати користувача до тікету.",
|
||||
"removeCmd":"Видалити користувача з тікету.",
|
||||
"reopenCmd":"Повторне відкриття тікету після його закриття.",
|
||||
"changeCmd":"Змінити тіп тикету.",
|
||||
"claimCmd":"Узяти тікет.",
|
||||
"unclaimCmd":"Відмовитися від тікету.",
|
||||
"statsCmd":"Переглянути статистику тікету.",
|
||||
"autocloseCmd":"Встановіть таймер для автоматичного закриття квитка"
|
||||
},
|
||||
"buttons":{
|
||||
"close":"Закрити тікет",
|
||||
"delete":"Видалити тікет",
|
||||
"reopen":"Відкрити тікет",
|
||||
"closeWithReason":"Закрити з причиною"
|
||||
},
|
||||
"messages":{
|
||||
"closedDescription":"Зараз лише адміністратори можуть говорити в цьому тікеті!\n\n*Натисніть кнопку нижче, щоб видалити або повторно відкрити цей тікет!*",
|
||||
"createdTitle":"Тікет створено!",
|
||||
"createdDescription":"Ваш тікет створено, ви можете визначити його за допомогою пінгу!",
|
||||
|
||||
"newTicketDmTitle":"Новий тікет!",
|
||||
"closedTicketDmTitle":"Тікет закрито!",
|
||||
"deletedTicketDmTitle":"Тікет видалено!",
|
||||
"closedTicketDmDescription":"Твій тікет закрито!",
|
||||
"deletedTicketDmDescription":"Твій тікет видалено!",
|
||||
"reopenTicketDmTitle":"Тікет відкритий!",
|
||||
"reopenTicketDmDescription":"Твій тікет відкритий!",
|
||||
|
||||
"chooseCategory":"виберіть категорію:",
|
||||
"gettingdeleted":"Тікет видаляється...",
|
||||
|
||||
"none":"пусто",
|
||||
"reason":"причина",
|
||||
"createdat":"створений",
|
||||
"openedby":"відкритий",
|
||||
"deletedby":"видалений",
|
||||
"closedby":"закритий",
|
||||
|
||||
"modalreason":"Яка причина закриття цього тікету?",
|
||||
"chooseATicket": "Виберіть тікет"
|
||||
},
|
||||
"transcripts":{
|
||||
"title":"Транскрипція",
|
||||
"processed":"Ця транскрипція обробляється",
|
||||
"wait":"Будь-ласка почекайте!",
|
||||
"estimated":"Розрахунковий час",
|
||||
"available":"Транскрипція доступна тут"
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 65 KiB |
+2
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "open-ticket",
|
||||
"version": "3.3.2",
|
||||
"version": "3.4.1",
|
||||
"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.11.0"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
+17
-3
@@ -7,12 +7,26 @@
|
||||
"useHTMLtranscripts":true
|
||||
},
|
||||
"style":{
|
||||
"titleColor":"#F8BA00",
|
||||
"background":{
|
||||
"enableCustomBackground":false,
|
||||
"backgroundModus":"color OR image",
|
||||
"backgroundData":"#abc123 OR https://www.example.com/image.png"
|
||||
"backgroundModus":"image OR color",
|
||||
"backgroundData":"image url OR hex color (#ffffff)"
|
||||
|
||||
},
|
||||
"header":{
|
||||
"enableCustomHeader":false,
|
||||
"backgroundColor":"#202225",
|
||||
"decoColor":"#F8BA00",
|
||||
"textColor":"#ffffff"
|
||||
|
||||
},
|
||||
"stats":{
|
||||
"enableCustomStats":false,
|
||||
"backgroundColor":"#202225",
|
||||
"keyTextColor":"#737373",
|
||||
"valueTextColor":"#ffffff",
|
||||
"hideBackgroundColor":"#40444a",
|
||||
"hideTextColor":"#ffffff"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user