Open Ticket 3.4.0!
Open Ticket 3.4.0!
This commit is contained in:
+1
-1
@@ -10,7 +10,7 @@ Support for Open Ticket is only available for the versions specified below!
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 3.3.3 | :white_check_mark: |
|
||||
| 3.4.0 | :white_check_mark: |
|
||||
| 3.3.0 | 🟧 |
|
||||
| 3.2.2 | 🟧 |
|
||||
| < 3.2.2 | :x: |
|
||||
|
||||
@@ -4,7 +4,7 @@ In open ticket **v3.3.3 & below**, there is a bug causing weird looking embeds,
|
||||
|
||||
<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.3) []() [](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [](https://docs.openticket.dj-dj.be)
|
||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v3.4.0) []() [](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [](https://docs.openticket.dj-dj.be)
|
||||
|
||||
### Open Ticket
|
||||
Open Ticket is of the most customisable discord ticket bots of all time!
|
||||
@@ -15,9 +15,9 @@ 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 18 different languages
|
||||
- 📄 very advanced customisation
|
||||
- 🆗 buttons or 🔽 dropdowns!
|
||||
- 🆒 plugins
|
||||
@@ -64,9 +64,12 @@ Translators
|
||||
|Turkish |Hydrâelčhâvø#1575 |
|
||||
|Polish |MKevas#8311 |
|
||||
|Slovenian |n1kkec#5341 |
|
||||
|Thai |Mods HD#0661 |
|
||||
|Norwegian |NoOneNook#0266 |
|
||||
|Greek |ꙅoᴎɒᎸɘƚꙅ#3744 |
|
||||
|
||||
## links
|
||||
current version: _v3.3.3_
|
||||
current version: _v3.4.0_
|
||||
</br>changelog: [click here](https://docs.openticket.dj-dj.be/other/changelog)
|
||||
</br>documentation: [click here](https://docs.openticket.dj-dj.be/quick-start)
|
||||
|
||||
|
||||
+6
-15
@@ -23,11 +23,9 @@ 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)]})
|
||||
@@ -42,8 +40,6 @@ module.exports = () => {
|
||||
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) => {
|
||||
if (!interaction.isChatInputCommand()) return
|
||||
if (interaction.commandName != "add") return
|
||||
@@ -57,11 +53,9 @@ 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)]})
|
||||
@@ -75,7 +69,4 @@ module.exports = () => {
|
||||
APIEvents.onCommand("add",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
}
|
||||
+7
-14
@@ -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,11 +21,9 @@ 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))
|
||||
@@ -54,7 +52,6 @@ module.exports = () => {
|
||||
log("system","ticket type changed",[{key:"user",value:msg.author.tag},{key:"ticket",value:name},{key:"newtype",value:newtype}])
|
||||
APIEvents.onCommand("change",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||
})
|
||||
})
|
||||
|
||||
if (!DISABLE.commands.slash.change) client.on("interactionCreate",async (interaction) => {
|
||||
if (!interaction.isChatInputCommand()) return
|
||||
@@ -67,12 +64,9 @@ 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))
|
||||
@@ -121,5 +115,4 @@ module.exports = () => {
|
||||
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())
|
||||
})
|
||||
})
|
||||
}
|
||||
+15
-20
@@ -26,20 +26,16 @@ 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})
|
||||
hiddendata.push({key:"claimedby",value:claimingUser.id})
|
||||
bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
|
||||
storage.set("claimData",msg.channel.id,claimingUser.id)
|
||||
|
||||
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||
.setFooter({text:"claimed by: "+msg.author.tag,iconURL:msg.author.displayAvatarURL()})
|
||||
.setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
|
||||
|
||||
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
||||
@@ -56,7 +52,6 @@ module.exports = () => {
|
||||
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) => {
|
||||
if (!interaction.isChatInputCommand()) return
|
||||
@@ -71,26 +66,27 @@ 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})
|
||||
hiddendata.push({key:"claimedby",value:user.id})
|
||||
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
||||
storage.set("claimData",interaction.channel.id,user.id)
|
||||
|
||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
||||
var firstmsg = msglist.last()
|
||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||
|
||||
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||
.setFooter({text:"claimed by: "+user.tag,iconURL:user.displayAvatarURL()})
|
||||
.setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
|
||||
|
||||
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
||||
}else{
|
||||
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim],embeds:[newEmbed]})
|
||||
}
|
||||
})
|
||||
|
||||
interaction.editReply({embeds:[bot.embeds.commands.claimEmbed(user,interaction.user)]})
|
||||
|
||||
@@ -101,5 +97,4 @@ module.exports = () => {
|
||||
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())
|
||||
})
|
||||
})
|
||||
}
|
||||
+8
-17
@@ -24,13 +24,11 @@ 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]})
|
||||
@@ -51,9 +49,6 @@ module.exports = () => {
|
||||
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
|
||||
if (!DISABLE.commands.slash.close) client.on("interactionCreate",async(interaction) => {
|
||||
if (!interaction.isChatInputCommand()) return
|
||||
if (interaction.commandName != "close") return
|
||||
@@ -64,13 +59,11 @@ 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]})
|
||||
@@ -88,7 +81,5 @@ module.exports = () => {
|
||||
|
||||
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())
|
||||
|
||||
})
|
||||
})
|
||||
}
|
||||
+6
-14
@@ -21,11 +21,9 @@ 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)]})
|
||||
|
||||
@@ -42,8 +40,6 @@ module.exports = () => {
|
||||
|
||||
log("command","someone used the 'delete' command",[{key:"user",value:msg.author.tag}])
|
||||
APIEvents.onCommand("delete",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
|
||||
@@ -59,11 +55,9 @@ 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)]})
|
||||
|
||||
@@ -80,7 +74,5 @@ module.exports = () => {
|
||||
|
||||
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())
|
||||
|
||||
})
|
||||
})
|
||||
}
|
||||
+6
-13
@@ -23,11 +23,9 @@ 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)]})
|
||||
@@ -42,8 +40,6 @@ module.exports = () => {
|
||||
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) => {
|
||||
if (!interaction.isChatInputCommand()) return
|
||||
if (interaction.commandName != "remove") return
|
||||
@@ -57,11 +53,9 @@ 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)]})
|
||||
@@ -75,5 +69,4 @@ module.exports = () => {
|
||||
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())
|
||||
})
|
||||
})
|
||||
}
|
||||
+6
-14
@@ -21,11 +21,9 @@ 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)
|
||||
|
||||
@@ -50,9 +48,6 @@ module.exports = () => {
|
||||
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) => {
|
||||
if (!interaction.isChatInputCommand()) return
|
||||
if (interaction.commandName != "rename") return
|
||||
@@ -65,11 +60,9 @@ 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
|
||||
@@ -91,5 +84,4 @@ module.exports = () => {
|
||||
|
||||
APIEvents.onCommand("rename",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
})
|
||||
})
|
||||
}
|
||||
+7
-16
@@ -15,13 +15,11 @@ 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]})
|
||||
|
||||
@@ -31,19 +29,15 @@ module.exports = () => {
|
||||
APIEvents.onCommand("reopen",true,msg.author,msg.channel,msg.guild,new Date())
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
if (!DISABLE.commands.slash.reopen) client.on("interactionCreate",async (interaction) => {
|
||||
if (!interaction.isChatInputCommand()) return
|
||||
if (interaction.commandName != "reopen") return
|
||||
|
||||
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!")]})
|
||||
|
||||
@@ -54,7 +48,4 @@ module.exports = () => {
|
||||
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())
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
}
|
||||
+15
-14
@@ -26,19 +26,20 @@ module.exports = () => {
|
||||
const unclaimuser = storage.get("claimData",msg.channel.id)
|
||||
if (!unclaimuser || unclaimuser == "false") return msg.channel.send({embeds:[bot.errorLog.serverError("This ticket isn't claimed yet!")]})
|
||||
|
||||
const hiddendata = bot.hiddenData.readHiddenData(msg.channel.id)
|
||||
if (hiddendata.length < 1) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||
|
||||
hiddendata.push({key:"claimedby",value:"false"})
|
||||
bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
|
||||
storage.set("claimData",msg.channel.id,"false")
|
||||
|
||||
msg.channel.messages.fetchPinned().then(msglist => {
|
||||
/**@type {discord.Message} */
|
||||
var firstmsg = msglist.last()
|
||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||
const hdraw = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description)
|
||||
const hiddendata = hdraw.hiddenData
|
||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
||||
|
||||
hiddendata.data.push({key:"claimedby",value:"false"})
|
||||
storage.set("claimData",msg.channel.id,"false")
|
||||
|
||||
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||
.setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
|
||||
|
||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||
if (ticketData && ticketData.autoclose.enable){
|
||||
@@ -81,20 +82,20 @@ module.exports = () => {
|
||||
const unclaimuser = storage.get("claimData",interaction.channel.id)
|
||||
if (!unclaimuser || unclaimuser == "false") return interaction.editReply({embeds:[bot.errorLog.serverError("This ticket isn't claimed yet!")]})
|
||||
|
||||
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||
|
||||
hiddendata.push({key:"claimedby",value:"false"})
|
||||
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
||||
storage.set("claimData",interaction.channel.id,"false")
|
||||
|
||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
||||
/**@type {discord.Message} */
|
||||
var firstmsg = msglist.last()
|
||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||
const hdraw = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description)
|
||||
const hiddendata = hdraw.hiddenData
|
||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
||||
|
||||
hiddendata.data.push({key:"claimedby",value:"false"})
|
||||
storage.set("claimData",interaction.channel.id,"false")
|
||||
|
||||
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||
.setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
|
||||
|
||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||
if (ticketData && ticketData.autoclose.enable){
|
||||
|
||||
+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.3 - I'm a footer!",
|
||||
"footer":"Open Ticket v3.4.0 - I'm a footer!",
|
||||
|
||||
"enableFooterImage":false,
|
||||
"footerImage":"https://www.example.com/catmemes/cat.png",
|
||||
|
||||
+1
-1
@@ -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")){
|
||||
createError("'languagefile' | invalid language, more info in the wiki")
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ const log = bot.errorLog.log
|
||||
|
||||
const permissionChecker = require("../../../utils/permisssionChecker")
|
||||
const storage = bot.storage
|
||||
const hiddendata = bot.hiddenData
|
||||
const embed = discord.EmbedBuilder
|
||||
const mc = config.color
|
||||
const permsChecker = require("../../../utils/permisssionChecker")
|
||||
@@ -32,20 +31,21 @@ module.exports = () => {
|
||||
return
|
||||
}
|
||||
|
||||
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
|
||||
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||
|
||||
hiddendata.push({key:"claimedby",value:interaction.user.id})
|
||||
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
|
||||
storage.set("claimData",interaction.channel.id,interaction.user.id)
|
||||
|
||||
interaction.channel.messages.fetchPinned().then(msglist => {
|
||||
/**@type {discord.Message} */
|
||||
var firstmsg = msglist.last()
|
||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.editReply({embeds:[bot.errorLog.notInATicket]})
|
||||
const hdraw = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description)
|
||||
const hiddendata = hdraw.hiddenData
|
||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
||||
|
||||
hiddendata.data.push({key:"claimedby",value:interaction.user.id})
|
||||
storage.set("claimData",interaction.channel.id,interaction.user.id)
|
||||
|
||||
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||
.setFooter({text:"claimed by: "+interaction.user.tag,iconURL:interaction.user.displayAvatarURL()})
|
||||
.setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
|
||||
|
||||
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
|
||||
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
|
||||
|
||||
@@ -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 hiddendata = bot.hiddenData.readHiddenData(channel.id)
|
||||
if (hiddendata.length < 1) return channel.send({embeds:[bot.errorLog.notInATicket]})
|
||||
const ticketId = hiddendata.find(d => d.key == "type").value
|
||||
const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
|
||||
|
||||
require("../api/modules/events").onTicketDelete(user,channel,guild,new Date(),{name:channel.name,status:"deleted",ticketOptions:ticketData})
|
||||
|
||||
const id = hiddendata.data.find(d => d.key == "openerid").value
|
||||
|
||||
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,23 +133,13 @@ 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]})
|
||||
}
|
||||
}
|
||||
|
||||
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 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)
|
||||
@@ -170,11 +150,7 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {String[]}
|
||||
*/
|
||||
const ticketadmin = ticketData.adminroles
|
||||
ticketadmin.forEach((role,index) => {
|
||||
ticketData.adminroles.forEach((role,index) => {
|
||||
if (!config.adminRoles.includes(role)){
|
||||
try {
|
||||
const adminrole = guild.roles.cache.find(r => r.id == role)
|
||||
@@ -191,7 +167,6 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
channel.permissionOverwrites.set(permissionArray)
|
||||
|
||||
@@ -207,23 +182,8 @@ exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
|
||||
log("system","closed a ticket",[{key:"user",value:user.tag},{key:"ticket",value:channel.name}])
|
||||
|
||||
|
||||
//getID & send DM & send api event
|
||||
await channel.messages.fetchPinned().then(msglist => {
|
||||
var firstmsg = msglist.last()
|
||||
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false
|
||||
const hiddendata = bot.hiddenData.readHiddenData(firstmsg.embeds[0].description)
|
||||
const ticketId = hiddendata.data.find(d => d.key == "type").value
|
||||
const ticketData = require("../utils/configParser").getTicketById(ticketId,true)
|
||||
|
||||
//send api event
|
||||
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
|
||||
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,12 +132,8 @@ module.exports = () => {
|
||||
})
|
||||
|
||||
//add ticket adminroles
|
||||
/**
|
||||
* @type {String[]}
|
||||
*/
|
||||
const readonlyTicketadmin = currentTicketOptions.readonlyAdminroles
|
||||
if (readonlyTicketadmin){
|
||||
readonlyTicketadmin.forEach((role,index) => {
|
||||
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)
|
||||
@@ -180,7 +176,7 @@ module.exports = () => {
|
||||
storage.set("userFromChannel",ticketChannel.id,interaction.member.id)
|
||||
if (currentTicketOptions.autoclose.enable) storage.set("autocloseTickets",ticketChannel.id,currentTicketOptions.autoclose.inactiveHours)
|
||||
|
||||
const hiddendata = bot.hiddenData.writeHiddenData("ticketdata",[{key:"type",value:currentTicketOptions.id},{key:"openerid",value:interaction.user.id},{key:"createdms",value:new Date().getTime()}])
|
||||
bot.hiddenData.writeHiddenData(ticketChannel.id,[{key:"type",value:currentTicketOptions.id},{key:"openerid",value:interaction.user.id},{key:"createdms",value:new Date().getTime()}])
|
||||
|
||||
var ticketEmbed = new discord.EmbedBuilder()
|
||||
//.setAuthor({name:interaction.user.id})
|
||||
@@ -193,16 +189,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]
|
||||
|
||||
|
||||
+9
-5
@@ -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),
|
||||
@@ -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.tag,
|
||||
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.tag,
|
||||
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.3",
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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")
|
||||
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
|
||||
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,
|
||||
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()
|
||||
}
|
||||
@@ -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("[ ](https://OTDATA|")) return {type:"",data:[],status:false}
|
||||
const rawhidden = messageContent.split("[ ](https://OTDATA|")[1]
|
||||
const rawhidden2 = rawhidden.split("//")
|
||||
exports.readHiddenData = (channelid) => {
|
||||
const content = storage.get("HIDDENDATA",channelid)
|
||||
if (!content) return {type:"",data:[],status:false}
|
||||
|
||||
const datatype = rawhidden2[0]
|
||||
var rawhiddendata = rawhidden2[1]
|
||||
var rawhiddendataArray = rawhiddendata.split("")
|
||||
rawhiddendataArray.pop()
|
||||
|
||||
rawhiddendata = rawhiddendataArray.join("")
|
||||
|
||||
const splittedData = rawhiddendata.split("|")
|
||||
|
||||
const resultData = []
|
||||
splittedData.forEach((data) => {
|
||||
// type:123
|
||||
const dataresult = data.split(":")
|
||||
|
||||
resultData.push({key:dataresult[0],value:dataresult[1]})
|
||||
})
|
||||
|
||||
return {type:datatype,data:resultData,status:true}
|
||||
try {
|
||||
return JSON.parse(content)
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {String} type
|
||||
* @param {String} channelid
|
||||
* @param {[{key:String,value:String}]} data
|
||||
* @returns {String}
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
exports.writeHiddenData = (type,data) => {
|
||||
const dataValues = []
|
||||
data.forEach((d) => {
|
||||
dataValues.push(d.key+":"+d.value)
|
||||
})
|
||||
|
||||
const datastring = dataValues.join("|")
|
||||
|
||||
const result = "[ ](https://OTDATA|"+type+"//"+datastring+")"
|
||||
|
||||
return result
|
||||
exports.writeHiddenData = (channelid,data) => {
|
||||
try {
|
||||
storage.set("HIDDENDATA",channelid,JSON.stringify(data))
|
||||
return true
|
||||
} catch {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {String} description
|
||||
* @returns {{description:String,hiddenData:hiddenData}}
|
||||
* @param {String} channelid
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
exports.removeHiddenData = (description) => {
|
||||
if (!description.includes("[ ](https://OTDATA|")) return {description:description,hiddenData:[]}
|
||||
|
||||
const hiddenData = this.readHiddenData(description)
|
||||
const splitted = description.split("[ ](https://OTDATA")
|
||||
const original = splitted[0]
|
||||
|
||||
return {description:original,hiddenData:hiddenData}
|
||||
exports.deleteHiddenData = (channelid) => {
|
||||
try {
|
||||
storage.delete("HIDDENDATA",channelid)
|
||||
return true
|
||||
} catch {
|
||||
return false
|
||||
}
|
||||
}
|
||||
@@ -188,7 +188,7 @@ exports.liveStatusUploadManager = async (err) => {
|
||||
system:config.system
|
||||
},
|
||||
language:config.languageFile,
|
||||
version:require("../../package.json").version,
|
||||
version:"3.4.0",
|
||||
slashcmds:slashMode,
|
||||
transcripts:transcriptMode,
|
||||
plugins:fs.readdirSync("./plugins"),
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
INFORMATION:
|
||||
============
|
||||
Open Ticket v3.3.3 - © DJdj Development
|
||||
Open Ticket v3.4.0 - © DJdj Development
|
||||
|
||||
discord: https://discord.dj-dj.be
|
||||
website: https://www.dj-dj.be
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"ChilledBroke#9986 & M4#5882",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
||||
|
||||
"errors": {
|
||||
"missingArgsTitle": "قيمة غير صالحة!",
|
||||
"missingArgsDescription": "قيمة مفقودة",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"DJdj Development",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Neplatny Argument!",
|
||||
"missingArgsDescription":"Chybí Argument",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"the_gamer#5095",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
||||
|
||||
"errors": {
|
||||
"missingArgsTitle": "Ugyldigt Argument!",
|
||||
"missingArgsDescription": "Manglende Argument",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"DJj123dj#1706",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Argumente Invalide",
|
||||
"missingArgsDescription":"Argument Lipsa",
|
||||
|
||||
+16
-13
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"_CREDITS":"Apexo#0723",
|
||||
"_INFO":"This file is a translation for open ticket 3.4.0",
|
||||
|
||||
"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,7 +93,7 @@
|
||||
},
|
||||
"transcripts":{
|
||||
"title":"Транскрипт",
|
||||
"processed":"This transcript is being processed",
|
||||
"processed":"Этот транскрипт находится в процессе обработки",
|
||||
"wait":"Пожайлуста подождите!",
|
||||
"estimated":"Оценочное время",
|
||||
"available":"Транскрипт здесь доступен"
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"es-ES":"spanish",
|
||||
"it":"italian",
|
||||
"ru":"russian",
|
||||
"tr": "Türkçe",
|
||||
|
||||
"MISSING":"arabic,portuguese",
|
||||
"NOTAVAILABLE":"arabic,portuguese,czech"
|
||||
@@ -25,7 +26,8 @@
|
||||
"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.",
|
||||
@@ -37,7 +39,8 @@
|
||||
"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.",
|
||||
@@ -49,7 +52,8 @@
|
||||
"fr":"Fermer un ticket.",
|
||||
"es-ES":"Cierra un ticket.",
|
||||
"it":"Chiudi un ticket.",
|
||||
"ru":"Закрыть тикет"
|
||||
"ru":"Закрыть тикет",
|
||||
"tr": "Bileti kapat."
|
||||
},
|
||||
"delete":{
|
||||
"en-GB":"Delete a ticket.",
|
||||
@@ -61,7 +65,8 @@
|
||||
"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.",
|
||||
@@ -73,7 +78,8 @@
|
||||
"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.",
|
||||
@@ -85,7 +91,8 @@
|
||||
"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.",
|
||||
@@ -97,7 +104,8 @@
|
||||
"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",
|
||||
@@ -109,7 +117,8 @@
|
||||
"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.",
|
||||
@@ -121,7 +130,8 @@
|
||||
"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.",
|
||||
@@ -133,7 +143,8 @@
|
||||
"fr":" ",
|
||||
"es-ES":" ",
|
||||
"it":" ",
|
||||
"ru":"Взять тикет"
|
||||
"ru":"Взять тикет",
|
||||
"tr":"Bilet talep et."
|
||||
},
|
||||
"unclaim":{
|
||||
"en-GB":"Un-claim a ticket.",
|
||||
@@ -145,7 +156,8 @@
|
||||
"fr":" ",
|
||||
"es-ES":" ",
|
||||
"it":" ",
|
||||
"ru":"Снять тикет"
|
||||
"ru":"Снять тикет",
|
||||
"tr":"Bileti iptal et."
|
||||
},
|
||||
"category":{
|
||||
"en-GB":"Change ticket type.",
|
||||
@@ -157,7 +169,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.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"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.0",
|
||||
|
||||
"errors":{
|
||||
"missingArgsTitle":"Geçersiz argümanlar!",
|
||||
"missingArgsDescription":"Eksik argüman!",
|
||||
|
||||
+2
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "open-ticket",
|
||||
"version": "3.3.3",
|
||||
"version": "3.4.0",
|
||||
"description": "This is an open-source discord ticket bot, you can configure it and it comes with cool features like a transcript.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
@@ -15,8 +15,7 @@
|
||||
"dependencies": {
|
||||
"axios": "^0.27.2",
|
||||
"chalk": "^5.0.1",
|
||||
"discord.js": "^14.8.0",
|
||||
"node": "^16.10.0"
|
||||
"discord.js": "^14.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