Compare commits

...
4 Commits
Author SHA1 Message Date
Jasper 3b7674f1a5 Open Ticket v3.4.4
v3.4.4
2023-11-09 20:37:10 +01:00
DJj123dj 7de9339da3 v3.4.4 2023-11-09 20:36:21 +01:00
Jasper e2e1e19bc8 Open Ticket v3.4.3
Open Ticket v3.4.3
2023-08-30 17:23:21 +02:00
DJj123dj 5f19adf561 v3.4.3 2023-08-30 17:22:26 +02:00
34 changed files with 245 additions and 114 deletions
+4 -4
View File
@@ -10,10 +10,10 @@ Support for Open Ticket is only available for the versions specified below!
| Version | Supported | | Version | Supported |
|-----------|-------------------| |-----------|-------------------|
| 3.4.4 | ✅ |
| 3.4.2 | ✅ | | 3.4.2 | ✅ |
| 3.4.0 | ✅ | | 3.4.1 | 🟧 |
| 3.3.3 | 🟧 | | < 3.4.1 | ❌ |
| < 3.3.3 | ❌ |
## Reporting a Vulnerability ## Reporting a Vulnerability
@@ -33,7 +33,7 @@ Don't just report the error and never reply again! It can be possible that we ne
Visit [Contributing.md](/.github/CONTRIBUTING.md) for rules about translating & adding features! Visit [Contributing.md](/.github/CONTRIBUTING.md) for rules about translating & adding features!
<br> <br>
SECURITY POLICY - Last updated: 23/3/2023<br> SECURITY POLICY - Last updated: 9/11/2023<br>
© DJdj Development<br><br> © DJdj Development<br><br>
Website: https://www.dj-dj.be <br> Website: https://www.dj-dj.be <br>
Discord: https://discord.dj-dj.be <br> Discord: https://discord.dj-dj.be <br>
+9 -2
View File
@@ -1,6 +1,13 @@
# Coming Soon: OPEN TICKET v4.0 🎉
Open Ticket v4 is open ticket, but writting from the ground up! For the first time ever!
There will be a massive improvement with the API that allows for plugins 30 times more advanced than the current ones! It will also be more stable and faster!
It is expected to have a public beta release somewhere around 30 September!
<hr>
<img src="https://www.dj-dj.be/wp-content/uploads/2023/02/open-ticket-cropped.png" alt="Open Ticket" width="600px"> <img src="https://www.dj-dj.be/wp-content/uploads/2023/02/open-ticket-cropped.png" alt="Open Ticket" width="600px">
[![discord](https://img.shields.io/badge/discord-join%20our%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![version](https://img.shields.io/badge/version-3.4.2-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v3.4.2) [![discord.js](https://img.shields.io/badge/discord.js-v14-CB3837.svg?style=flat-square&logo=npm)]() [![license](https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [![stars](https://img.shields.io/github/stars/djj123dj/open-ticket?color=yellow&label=stars&logo=github&style=flat-square)](https://docs.openticket.dj-dj.be) [![discord](https://img.shields.io/badge/discord-join%20our%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![version](https://img.shields.io/badge/version-3.4.4-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v3.4.4) [![discord.js](https://img.shields.io/badge/discord.js-v14-CB3837.svg?style=flat-square&logo=npm)]() [![license](https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) [![stars](https://img.shields.io/github/stars/djj123dj/open-ticket?color=yellow&label=stars&logo=github&style=flat-square)](https://docs.openticket.dj-dj.be)
### Open Ticket ### Open Ticket
Open Ticket is the most customisable discord ticket bot that you will ever find! There are more than 150 options to customise in the config! This includes html transcripts, unlimited amount of tickets, custom embeds & more! Did you know that even the html transcripts are highly customisable? Don't wait and check it out! If you're having trouble setting the bot up, feel free to join our support server and we will help you further! Open Ticket is the most customisable discord ticket bot that you will ever find! There are more than 150 options to customise in the config! This includes html transcripts, unlimited amount of tickets, custom embeds & more! Did you know that even the html transcripts are highly customisable? Don't wait and check it out! If you're having trouble setting the bot up, feel free to join our support server and we will help you further!
@@ -64,7 +71,7 @@ Translators
|Ukrainian |anderskiy | |Ukrainian |anderskiy |
## links ## links
current version: _v3.4.2_ current version: _v3.4.4_
</br>changelog: [click here](https://docs.openticket.dj-dj.be/other/changelog) </br>changelog: [click here](https://docs.openticket.dj-dj.be/other/changelog)
</br>documentation: [click here](https://docs.openticket.dj-dj.be/quick-start) </br>documentation: [click here](https://docs.openticket.dj-dj.be/quick-start)
+32 -19
View File
@@ -14,6 +14,7 @@ module.exports = () => {
if (!DISABLE.commands.text.change) client.on("messageCreate", async msg => { if (!DISABLE.commands.text.change) client.on("messageCreate", async msg => {
if (!msg.content.startsWith(config.prefix+"change")) return if (!msg.content.startsWith(config.prefix+"change")) return
if (!msg.channel.isTextBased()) return
if (!msg.guild) return if (!msg.guild) return
if (!permsChecker.command(msg.author.id,msg.guild.id)){ if (!permsChecker.command(msg.author.id,msg.guild.id)){
@@ -26,26 +27,42 @@ module.exports = () => {
const ticketId = hiddendata.find(d => d.key == "type").value const ticketId = hiddendata.find(d => d.key == "type").value
const list = [] const list = []
config.options.forEach((o) => list.push(o.id)) config.options.forEach((o) => {
if (o.type == "ticket") list.push(o.id)
})
var newtype = msg.content.split(config.prefix+"change")[1].substring(1) var newtype = msg.content.split(config.prefix+"change")[1].substring(1)
if (!newtype) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]}) if (!newtype) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
const newTicket = require("../core/utils/configParser").getTicketById(newtype) const newTicket = require("../core/utils/configParser").getTicketById(newtype,true)
if (!newTicket) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]}) if (!newTicket) return msg.channel.send({embeds:[bot.errorLog.invalidIdChooseFromList(list,l.errors.missingArgsDescription+" `<type>`:\n`"+config.prefix+"change <type>`")]})
/**@type {discord.PermissionOverwriteManager} */
const prePermsManager = msg.channel.permissionOverwrites
const prePerms = prePermsManager.cache
/**@type {String} */ /**@type {String} */
var chName = msg.channel.name var chName = msg.channel.name
const splitted = chName.split("-") const splitted = chName.split("-")
const prefix = splitted.shift() const prefix = splitted.shift()
const name = (splitted.length > 0) ? splitted.join("-") : prefix const name = (splitted.length > 0) ? splitted.join("-") : prefix
if (newTicket.category){ if (newTicket.category){
const parent = await msg.guild.channels.fetch(newTicket.category,{cache:true}) const parent = await msg.guild.channels.fetch(newTicket.category,{cache:true})
if (parent && parent.type == discord.ChannelType.GuildCategory) msg.channel.setParent(parent) if (parent && parent.type == discord.ChannelType.GuildCategory) msg.channel.setParent(parent)
} }
msg.channel.setName(newTicket.channelprefix+name) prePermsManager.set(prePerms)
msg.channel.setName(newTicket.channelprefix+name).catch(() => {
msg.channel.send({embeds:[bot.errorLog.failedRenameChannel]})
})
hiddendata.find((value,index) => {
if (value.key == "type"){
hiddendata[index] = {key:"type",value:newtype}
}
})
msg.channel.send({embeds:[bot.embeds.commands.changeEmbed(msg.author,newtype)]}) msg.channel.send({embeds:[bot.embeds.commands.changeEmbed(msg.author,newtype)]})
log("command","someone used the 'change' command",[{key:"user",value:msg.author.username}]) log("command","someone used the 'change' command",[{key:"user",value:msg.author.username}])
@@ -56,6 +73,7 @@ module.exports = () => {
if (!DISABLE.commands.slash.change) client.on("interactionCreate",async (interaction) => { if (!DISABLE.commands.slash.change) client.on("interactionCreate",async (interaction) => {
if (!interaction.isChatInputCommand()) return if (!interaction.isChatInputCommand()) return
if (interaction.commandName != "change") return if (interaction.commandName != "change") return
if (!interaction.channel.isTextBased()) return
if (!interaction.guild) return if (!interaction.guild) return
if (!permsChecker.command(interaction.user.id,interaction.guild.id)){ if (!permsChecker.command(interaction.user.id,interaction.guild.id)){
@@ -69,7 +87,9 @@ module.exports = () => {
const ticketId = hiddendata.find(d => d.key == "type").value const ticketId = hiddendata.find(d => d.key == "type").value
const list = [] const list = []
config.options.forEach((o) => list.push(o.id)) config.options.forEach((o) => {
if (o.type == "ticket") list.push(o.id)
})
var newtype = interaction.options.getString("type",true) var newtype = interaction.options.getString("type",true)
const newTicket = require("../core/utils/configParser").getTicketById(newtype,true) const newTicket = require("../core/utils/configParser").getTicketById(newtype,true)
@@ -91,24 +111,17 @@ module.exports = () => {
if (parent && parent.type == discord.ChannelType.GuildCategory) interaction.channel.setParent(parent) if (parent && parent.type == discord.ChannelType.GuildCategory) interaction.channel.setParent(parent)
} }
await prePermsManager.set(prePerms) prePermsManager.set(prePerms)
interaction.channel.setName(newTicket.channelprefix+name) interaction.channel.setName(newTicket.channelprefix+name).catch(() => {
interaction.channel.send({embeds:[bot.errorLog.failedRenameChannel]})
})
var newHiddendata = hiddendata.data hiddendata.find((value,index) => {
newHiddendata.find((value,index) => {
if (value.key == "type"){ if (value.key == "type"){
newHiddendata[index] = {key:"type",value:newtype} hiddendata[index] = {key:"type",value:newtype}
} }
}) })
const prevDescription = bot.hiddenData.removeHiddenData(firstmsg.embeds[0].description).description
const newData = bot.hiddenData.writeHiddenData("ticketdata",newHiddendata)
const newDescription = prevDescription+newData
const newEmbed = new discord.EmbedBuilder(firstmsg.embeds[0].data)
.setDescription(newDescription)
firstmsg.edit({embeds:[newEmbed]})
interaction.editReply({embeds:[bot.embeds.commands.changeEmbed(interaction.user,newtype)]}) interaction.editReply({embeds:[bot.embeds.commands.changeEmbed(interaction.user,newtype)]})
log("command","someone used the 'change' command",[{key:"user",value:interaction.user.username}]) log("command","someone used the 'change' command",[{key:"user",value:interaction.user.username}])
+14 -9
View File
@@ -14,7 +14,7 @@ const DISABLE = require("../core/api/api.json").disable
module.exports = () => { module.exports = () => {
bot.errorLog.log("debug","COMMANDS: loaded claim.js") bot.errorLog.log("debug","COMMANDS: loaded claim.js")
if (!DISABLE.commands.text.claim) client.on("messageCreate",msg => { if (!DISABLE.commands.text.claim) client.on("messageCreate", async msg => {
if (!msg.content.startsWith(config.prefix+"claim")) return if (!msg.content.startsWith(config.prefix+"claim")) return
var user = msg.mentions.users.first() var user = msg.mentions.users.first()
@@ -34,14 +34,19 @@ module.exports = () => {
bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata) bot.hiddenData.writeHiddenData(msg.channel.id,hiddendata)
storage.set("claimData",msg.channel.id,claimingUser.id) storage.set("claimData",msg.channel.id,claimingUser.id)
const newEmbed = new embed(firstmsg.embeds[0].data) await msg.channel.messages.fetchPinned().then(msglist => {
.setFooter({text:"claimed by: "+msg.author.username,iconURL:msg.author.displayAvatarURL()}) 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: "+msg.author.username,iconURL:msg.author.displayAvatarURL()})
if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){ if (firstmsg.components[0].components[1] && firstmsg.components[0].components[1].disabled){
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]}) firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim],embeds:[newEmbed]})
}else{ }else{
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim],embeds:[newEmbed]}) firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim],embeds:[newEmbed]})
} }
})
msg.channel.send({embeds:[bot.embeds.commands.claimEmbed(claimingUser,msg.author)]}) msg.channel.send({embeds:[bot.embeds.commands.claimEmbed(claimingUser,msg.author)]})
@@ -74,7 +79,7 @@ module.exports = () => {
bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata) bot.hiddenData.writeHiddenData(interaction.channel.id,hiddendata)
storage.set("claimData",interaction.channel.id,user.id) storage.set("claimData",interaction.channel.id,user.id)
interaction.channel.messages.fetchPinned().then(msglist => { await interaction.channel.messages.fetchPinned().then(msglist => {
var firstmsg = msglist.last() var firstmsg = msglist.last()
if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]})
+1 -1
View File
@@ -38,7 +38,7 @@ module.exports = () => {
} }
if (args[1]){ if (args[1]){
if (!args[1].startsWith("close") && !args[1].startsWith("delete") && !args[1].startsWith("remove") && !args[1].startsWith("add") && !args[1].startsWith("msg") && !args[1].startsWith("remove") && !args[1].startsWith("rename") && !args[1].startsWith("reopen")){ if (!args[1].startsWith("close") && !args[1].startsWith("delete") && !args[1].startsWith("remove") && !args[1].startsWith("add") && !args[1].startsWith("msg") && !args[1].startsWith("remove") && !args[1].startsWith("rename") && !args[1].startsWith("reopen") && !args[1].startsWith("change") && !args[1].startsWith("claim") && !args[1].startsWith("unclaim")){
msg.channel.send({embeds:[helpEmbed]}) msg.channel.send({embeds:[helpEmbed]})
log("command","someone used the 'help' command",[{key:"user",value:msg.author.username}]) log("command","someone used the 'help' command",[{key:"user",value:msg.author.username}])
APIEvents.onCommand("help",true,msg.author,msg.channel,msg.guild,new Date()) APIEvents.onCommand("help",true,msg.author,msg.channel,msg.guild,new Date())
+1 -1
View File
@@ -111,7 +111,7 @@
"dropdown":false, "dropdown":false,
"enableFooter":false, "enableFooter":false,
"footer":"Open Ticket v3.4.2 - I'm a footer!", "footer":"Open Ticket v3.4.4 - I'm a footer!",
"enableFooterImage":false, "enableFooterImage":false,
"footerImage":"https://www.example.com/catmemes/cat.png", "footerImage":"https://www.example.com/catmemes/cat.png",
+1 -1
View File
@@ -427,7 +427,7 @@ exports.checker = async () => {
checkType(config.languageFile,"string","languagefile") checkType(config.languageFile,"string","languagefile")
const lf = config.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") && !lf.startsWith("thai") && !lf.startsWith("norwegian") && !lf.startsWith("greek") && !lf.startsWith("ukrainian") && !lf.startsWith("hungarian")){ if (!lf.startsWith("custom") && !lf.startsWith("english") && !lf.startsWith("dutch") && !lf.startsWith("romanian") && !lf.startsWith("german") && !lf.startsWith("arabic") && !lf.startsWith("spanish") && !lf.startsWith("portuguese") && !lf.startsWith("french") && !lf.startsWith("italian") && !lf.startsWith("czech") && !lf.startsWith("danish") && !lf.startsWith("russian") && !lf.startsWith("turkish") && !lf.startsWith("polish") && !lf.startsWith("slovenian") && !lf.startsWith("thai") && !lf.startsWith("norwegian") && !lf.startsWith("greek") && !lf.startsWith("ukrainian") && !lf.startsWith("hungarian") && !lf.startsWith("indonesian")){
createError("'languagefile' | invalid language, more info in the wiki") createError("'languagefile' | invalid language, more info in the wiki")
} }
+5
View File
@@ -58,6 +58,11 @@ exports.invalidIdChooseFromList = (list,message) => {
return x return x
} }
exports.failedRenameChannel = new embed()
.setColor(c.Red)
.setTitle(":x: Failed to rename channel")
.setDescription("Discord channels can only be renamed twice every 10 minutes! Open Ticket can't do anything about this error!")
exports.notInATicket = new embed() exports.notInATicket = new embed()
.setColor(c.Red) .setColor(c.Red)
.setTitle(":x: "+l.errors.notInTicketTitle) .setTitle(":x: "+l.errors.notInTicketTitle)
+1 -1
View File
@@ -10,7 +10,7 @@ const storage = require("../../index").storage
exports.readHiddenData = (channelid) => { exports.readHiddenData = (channelid) => {
const content = storage.get("HIDDENDATA",channelid) const content = storage.get("HIDDENDATA",channelid)
if (!content) return {type:"",data:[],status:false} if (!content) return []
try { try {
return JSON.parse(content) return JSON.parse(content)
+1 -1
View File
@@ -189,7 +189,7 @@ exports.liveStatusUploadManager = async (err) => {
//system:config.system //system:config.system
}, },
language:config.languageFile, language:config.languageFile,
version:"3.4.2", version:"3.4.4",
slashcmds:slashMode, slashcmds:slashMode,
transcripts:transcriptMode, transcripts:transcriptMode,
plugins:fs.readdirSync("./plugins"), plugins:fs.readdirSync("./plugins"),
+1 -1
View File
@@ -28,7 +28,7 @@
INFORMATION: INFORMATION:
============ ============
Open Ticket v3.4.2 - © DJdj Development Open Ticket v3.4.4 - © DJdj Development
discord: https://discord.dj-dj.be discord: https://discord.dj-dj.be
website: https://www.dj-dj.be website: https://www.dj-dj.be
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"ChilledBroke#9986 & M4#5882", "_CREDITS":"ChilledBroke#9986 & M4#5882",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors": { "errors": {
"missingArgsTitle": "قيمة غير صالحة!", "missingArgsTitle": "قيمة غير صالحة!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"DJdj Development", "_CREDITS":"DJdj Development",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Invalid Arguments!", "missingArgsTitle":"Invalid Arguments!",
+53 -53
View File
@@ -1,58 +1,58 @@
{ {
"_CREDITS":"t0miiis#3022", "_CREDITS":"spyeye_",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Neplatny Argument!", "missingArgsTitle":"Neplatný Argument!",
"missingArgsDescription":"Chybí Argument", "missingArgsDescription":"Chybí Argument",
"noPermsTitle":"Nemáš práva!", "noPermsTitle":"K tomuto nemáš práva!",
"noPermsDescription":"Potřebujes `ADMINISTRATOR`roli nebo byt v listině povolenych roli!", "noPermsDescription":"Potřebuješ `ADMINISTRATOR`roli nebo být na seznamu povolených rolí!",
"noPermsDelete":"Pouze Admini muůřou mazat ticket!", "noPermsDelete":"Pouze Admin může vymazat ticket!",
"chooseFromListTitle":"Neplatný ID", "chooseFromListTitle":"Neplatné ID",
"chooseFromListDescription":"Vyber si jedno z ID níže:", "chooseFromListDescription":"Vyber si jedno z ID níže:",
"boterror":"Bot Chyba!", "boterror":"Chyba Bota!",
"notInTicketTitle":"Nejsi v ticketu!", "notInTicketTitle":"Nejsi v ticketu!",
"notInTicketDescription":"Tenhle příkaz nefunguje mimo ticket!", "notInTicketDescription":"Tento příkaz nefunguje mimo ticket!",
"ticketDoesntExist":"Tenhle ticket už neexistuje !", "ticketDoesntExist":"Tento ticket už neexistuje!",
"roleDoesntExist":"Tenhle role už neexistuje!", "roleDoesntExist":"Tato role už neexistuje!",
"anotherOption":"This option is not a ticket but another type!", "anotherOption":"Tato možnost není ticket, ale jiná!",
"maxAmountTitle":"Max počet byl dosáhnut!", "maxAmountTitle":"Byl dosáhnut maximální počet",
"maxAmountDescription":"Dosáhl jsi max počet povolených ticketu!\nSo nemůžeš si vytvořit nový!", "maxAmountDescription":"Dosáhl jsi maximální počet povolených ticketů!\nTaže si nemůžeš vytvořit nový.",
"somethingWentWrong":"**Něco se pokazilo!**\nProsím zkus to jindy!" "somethingWentWrong":"**Něco se pokazilo!**\nProsíme zkuste to později!"
}, },
"commands":{ "commands":{
"userAddedTitle":"Přidat {0} do tohohle ticketu!", "userAddedTitle":"Přidat {0} do tohoto ticketu.",
"userRemovedTitle":"Odstranit {0} z tohohle ticketu!", "userRemovedTitle":"Odstranit {0} z tohoto ticketu.",
"renameTitle":"Změnit jmeno na {0}!", "renameTitle":"Změnit jméno na {0}!",
"closeTitle":"Zavři tenhle ticket!", "closeTitle":"Uzavřít tento ticket!",
"deleteTitle":"Mažu ticket...", "deleteTitle":"Probíhá vymazání ticketu...",
"reopenTitle":"Znovu otevíram ticket", "reopenTitle":"Ticket byl znovu otevřen",
"claimTitle":"Ticket nyní převzal {0}", "claimTitle":"Ticket nyní převzal {0}",
"unclaimTitle":"Ticket už není převzaný", "unclaimTitle":"Ticket není nadále převzaný",
"changeTitle":"Změněn typ ticketu {0}!", "changeTitle":"Typ ticketu byl změněn {0}!",
"statsTitle":"Tady je info o ticketu {0}!", "statsTitle":"Zde jsou informace o ticketu {0}!",
"autocloseTitle":"Tento ticketu bude automaticky uzavřen za {0}!", "autocloseTitle":"Tento ticketu bude automaticky uzavřen za {0}!",
"autocloseRejectTitle":"Tento ticketu už nebude automaticky uzavřen!", "autocloseRejectTitle":"Tento ticket již nebude automaticky uzavřen!",
"autocloseWarn":"Toto zavře pouze neaktivní tickety!", "autocloseWarn":"Tato možnost uzavře pouze neaktivní tickety!",
"goToTicket":"běž do ticketu", "goToTicket":"Jít do ticketu",
"ticketWarning":"The embed is in the message below!", "ticketWarning":"Embed se náchází pod touto zprávou.",
"maxTicketWarning":"**Warning:** _Můžeš vytvořit pouze {0} v tuhle chvíli!_" "maxTicketWarning":"**Warning:** _V tuto chvíli můžeš vytvořit pouze {0} ticketů_"
}, },
"helpMenu":{ "helpMenu":{
"title":"Dostupné příkazy:", "title":"Zde jsou všechny dostupné příkazy:",
"header1":"**Běž do {0} pro vytvoření ticketi!**\n\n", "header1":"**Pro vytvoření ticketu bež do {0} **\n\n",
"header2":"**Použíj příkaz `/nový` nebo `/ticket` pro vytvoření ticketu**\n\n", "header2":"**Použíj příkaz `/nový` nebo `/ticket` pro vytvoření nového ticketu**\n\n",
"msgCmd":"Vytvoř embed s tlačíky. (admins only)", "msgCmd":"Vytvoř embed s tlačíky. (Pouze Admin)",
"renameCmd":"Přejmenovat ticket. (no spaces)", "renameCmd":"Přejmenovat ticket. (Bez mezer)",
"closeCmd":"Zavřít ticket.", "closeCmd":"Zavřít ticket.",
"deleteCmd":"Odstranit ticket.", "deleteCmd":"Odstranit ticket.",
"addCmd":"Pridat uživatele do ticketu.", "addCmd":"Pridat uživatele do ticketu.",
"removeCmd":"Odebrat uživatele z ticketu.", "removeCmd":"Odebrat uživatele z ticketu.",
"reopenCmd":"Re-Open a ticket after it was closed.", "reopenCmd":"Znovu otevře ticket, který byl uzavřen.",
"changeCmd":"Změnit typ ticketu.", "changeCmd":"Změnit typ ticketu.",
"claimCmd":"Převzi ticket.", "claimCmd":"Převzi ticket.",
"unclaimCmd":"Uvolnit ticket.", "unclaimCmd":"Uvolnit ticket.",
@@ -60,40 +60,40 @@
"autocloseCmd":"Nastavit automatické uzavření ticketu" "autocloseCmd":"Nastavit automatické uzavření ticketu"
}, },
"buttons":{ "buttons":{
"close":"Zavřit ticket", "close":"Uzavřít ticket",
"delete":"Vymazat ticket", "delete":"Vymazat ticket",
"reopen":"Znovu otevřít ticket", "reopen":"Znovu otevřít ticket",
"closeWithReason":"zavřít s důvodem" "closeWithReason":"Zzavřít s důvodem"
}, },
"messages":{ "messages":{
"closedDescription":"Pouze admini muzou zde psát ted!\n\n*Klikni na tlačítko níže pro smazání nebo pro znovu otevření tohohle ticketu!*", "closedDescription":"Zde mohou psát pouze Admin uživatelé\n\n*Klikni na tlačítko níže pro smazání nebo pro znovu otevření tohoto ticketu!*",
"createdTitle":"Ticket otevřen!", "createdTitle":"Ticket otevřen!",
"createdDescription":"Tvůj ticket je vytvořem, můžeš si ho všimnout pomocí pingu!", "createdDescription":"Tvůj ticket je vytvořem, můžeš si ho všimnout pomocí pingu!",
"newTicketDmTitle":"Nový ticket!", "newTicketDmTitle":"Nový ticket!",
"closedTicketDmTitle":"Ticket Zavřený!", "closedTicketDmTitle":"Ticket byl Uzavřen!",
"deletedTicketDmTitle":"Ticket Odstranen!", "deletedTicketDmTitle":"Ticket byl Odstraněn!",
"closedTicketDmDescription":"Tvuj ticket je uzavřen!", "closedTicketDmDescription":"Tvůj ticket je uzavřen!",
"deletedTicketDmDescription":"Tvuj ticket byl smazan!", "deletedTicketDmDescription":"Tvůj ticket byl vymazán!",
"reopenTicketDmTitle":"Ticket je znovu otevřený!", "reopenTicketDmTitle":"Ticket je znovu otevřený!",
"reopenTicketDmDescription":"Tvuj ticket byl znovu ovetřený!", "reopenTicketDmDescription":"Tvuj ticket byl znovu ovetřený!",
"chooseCategory":"Vyber si kategorii:", "chooseCategory":"Vyber si kategorii:",
"gettingdeleted":"Ticket bude vymazan...", "gettingdeleted":"Ticket bude vymazán...",
"none":"žádný", "none":"Žádný",
"reason":"důvod", "reason":"Důvod",
"createdat":"otevřeno v", "createdat":"Otevřeno v",
"openedby":"otevřel", "openedby":"Otevřel",
"deletedby":"smazano uzivatelem", "deletedby":"Vymázáno uživatelem",
"closedby":"zavreno uzivatelem", "closedby":"Uzavřeno uživatelem",
"modalreason":"Jakž byl důvod k zavření toho ticketu?", "modalreason":"Zde napiš důvod uzavření tohoto ticketu.",
"chooseATicket": "Vyber ticket" "chooseATicket": "Vyber si ticket"
}, },
"transcripts":{ "transcripts":{
"title":"Přepis", "title":"Záznam",
"processed":"Tento přepis se zpracoval", "processed":"Tento záznam byl zpracován",
"wait":"Prosím počkej!", "wait":"Prosím počkej!",
"estimated":"Odhadovaný čas", "estimated":"Odhadovaný čas",
"available":"Záloha je uložena zde!" "available":"Záloha je uložena zde!"
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"the_gamer#5095", "_CREDITS":"the_gamer#5095",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors": { "errors": {
"missingArgsTitle": "Ugyldigt Argument!", "missingArgsTitle": "Ugyldigt Argument!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"DJj123dj#1706", "_CREDITS":"DJj123dj#1706",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Onjuiste parameters!", "missingArgsTitle":"Onjuiste parameters!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"DJdj Development", "_CREDITS":"DJdj Development",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Invalid Arguments!", "missingArgsTitle":"Invalid Arguments!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Sanke#6086", "_CREDITS":"Sanke#6086",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Arguments invalides!", "missingArgsTitle":"Arguments invalides!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"david.#8276 ", "_CREDITS":"david.#8276 ",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Ungültiges Argument!", "missingArgsTitle":"Ungültiges Argument!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"ꙅoᴎɒᎸɘƚꙅ#3744", "_CREDITS":"ꙅoᴎɒᎸɘƚꙅ#3744",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Invalid Arguments!", "missingArgsTitle":"Invalid Arguments!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Snowy", "_CREDITS":"Snowy",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Hibás paraméterek!", "missingArgsTitle":"Hibás paraméterek!",
+101
View File
@@ -0,0 +1,101 @@
{
"_CREDITS":"erxg",
"_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{
"missingArgsTitle":"Argumen tidak valid!",
"missingArgsDescription":"Argumen hilang",
"noPermsTitle":"Tidak ada akses!",
"noPermsDescription":"Anda memerlukan akses `ADMINISTRATOR` atau berada di dalam peran yang diizinkan!",
"noPermsDelete":"Hanya admin yang dapat menghapus tiket!",
"chooseFromListTitle":"ID Tidak Valid",
"chooseFromListDescription":"Silahkan pilih salah satu id di bawah:",
"boterror":"Bot Error!",
"notInTicketTitle":"Anda tidak berada di dalam sebuah tiket!",
"notInTicketDescription":"Perintah ini tidak bekerja di luar tiket!",
"ticketDoesntExist":"Tiket ini sudah tidak ada lagi!",
"roleDoesntExist":"Peran ini sudah tidak ada lagi!",
"anotherOption":"Opsi ini bukan tiket, melainkan tipe lain!",
"maxAmountTitle":"Batas maksimum tercapai!",
"maxAmountDescription":"Kamu telah meraih batas maksimum tiket yang diperbolehkan!\nJadi kamu tidak bisa membuat tiket baru!",
"somethingWentWrong":"Ada yang salah! Silakan coba lagi nanti!"
},
"commands":{
"userAddedTitle":"Menambah {0} ke tiket ini!",
"userRemovedTitle":"Mengeluarkan {0} dari tiket ini!",
"renameTitle":"Mengganti nama menjadi {0}!",
"closeTitle":"Menutup tiket ini!",
"deleteTitle":"Menghapus tiket ini...",
"reopenTitle":"Membuka ulang tiket ini!",
"claimTitle":"Tiket ini diklaim oleh {0}",
"unclaimTitle":"Tiket ini tidak diklaim lagi!",
"changeTitle":"Mengganti tipe tiket menjadi {0}!",
"statsTitle":"Ini adalah status untuk {0}!",
"autocloseTitle":"Tiket ini akan tutup otomatis setelah {0}!",
"autocloseRejectTitle":"Tiket ini tidak akan tertutup secara otomatis lagi!",
"autocloseWarn":"Ini hanya mempengaruhi tiket yang tidak aktif!",
"goToTicket":"Pergi ke tiket",
"ticketWarning":"Sematan tersebut tersedia dalam pesan di bawah ini!",
"maxTicketWarning":"**Peringatan:** _Anda hanya bisa membuat {0} tiket dalam satu waktu!_"
},
"helpMenu":{
"title":"Perintah yang tersedia:",
"header1":"**Pergi ke {0} untuk membuat tiket!**\n\n",
"header2":"**Jalankan perintah `/new` atau `/ticket` untuk membuat tiket!**\n\n",
"msgCmd":"Munculkan sematan dengan tombol. (hanya admin)",
"renameCmd":"Ganti nama tiket. (tanpa spasi)",
"closeCmd":"Tutup tiket.",
"deleteCmd":"Hapus tiket.",
"addCmd":"Tambahkan pengguna ke dalam tiket.",
"removeCmd":"Keluarkan pengguna dari tiket.",
"reopenCmd":"Buka ulang tiket setelah ditutup.",
"changeCmd":"Ganti tipe tiket.",
"claimCmd":"Klaim tiket.",
"unclaimCmd":"Batalkan klaim tiket.",
"statsCmd":"Lihat status tiket.",
"autocloseCmd":"Atur timer untuk menutup tiket secara otomatis"
},
"buttons":{
"close":"Tutup tiket",
"delete":"Hapus tiket",
"reopen":"Buka ulang tiket",
"closeWithReason":"Tutup dengan alasan"
},
"messages":{
"closedDescription":"Hanya admin yang dapat berbincang di tiket ini sekarang!\n\n*Tekan tombol di bawah untuk menghapus atau membuka ulang tiket ini!*",
"createdTitle":"Tiket dibuat!",
"createdDescription":"Tiket anda dibuat, anda dapat mengetahui dengan ping!",
"newTicketDmTitle":"Tiket baru!",
"closedTicketDmTitle":"Tiket ditutup!",
"deletedTicketDmTitle":"TIket dihapus!",
"closedTicketDmDescription":"Tiket anda ditutup!",
"deletedTicketDmDescription":"Tiket anda dihapus!",
"reopenTicketDmTitle":"Tiket dibuka kembali!",
"reopenTicketDmDescription":"Tiket anda dibuka kembali!",
"chooseCategory":"Pilih kategori:",
"gettingdeleted":"Tiket sedang dihapus...",
"none":"tidak ada",
"reason":"Alasan",
"createdat":"dibuat di",
"openedby":"dibuka oleh",
"deletedby":"dihapus oleh",
"closedby":"ditutup oleh",
"modalreason":"Apa alasan penutupan tiket ini?",
"chooseATicket": "Pilih tiket"
},
"transcripts":{
"title":"Transcript",
"processed":"Transkrip sedang diproses",
"wait":"Mohon tunggu!",
"estimated":"Estimasi waktu",
"available":"Transkrip tersedia di sini"
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Maurizio#0268", "_CREDITS":"Maurizio#0268",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Argomenti non validi!", "missingArgsTitle":"Argomenti non validi!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"NoOneNook#0266", "_CREDITS":"NoOneNook#0266",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Ugyldige argumenter!", "missingArgsTitle":"Ugyldige argumenter!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"MKevas#8311", "_CREDITS":"MKevas#8311",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Nieprawidłowe argumenty!", "missingArgsTitle":"Nieprawidłowe argumenty!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"QuirAddon#9778", "_CREDITS":"QuirAddon#9778",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Argumentos inválidos!", "missingArgsTitle":"Argumentos inválidos!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Sanke#6086", "_CREDITS":"Sanke#6086",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Argumente Invalide", "missingArgsTitle":"Argumente Invalide",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Apexo#0723", "_CREDITS":"Apexo#0723",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Неверные аргументы!", "missingArgsTitle":"Неверные аргументы!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"n1kkec#5341", "_CREDITS":"n1kkec#5341",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Napačen argument!", "missingArgsTitle":"Napačen argument!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Redactado#1673 & josuens14#5267", "_CREDITS":"Redactado#1673 & josuens14#5267",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"¡Argumentos inválidos!", "missingArgsTitle":"¡Argumentos inválidos!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Mods HD#0661", "_CREDITS":"Mods HD#0661",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"อาร์กิวเมนต์ไม่ถูกต้อง!", "missingArgsTitle":"อาร์กิวเมนต์ไม่ถูกต้อง!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Hydrâelčhâvø#1575", "_CREDITS":"Hydrâelčhâvø#1575",
"_INFO":"This file is a translation for open ticket 3.4.2", "_INFO":"This file is a translation for open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Geçersiz argümanlar!", "missingArgsTitle":"Geçersiz argümanlar!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Anderskiy#4093", "_CREDITS":"Anderskiy#4093",
"_INFO":"Цей файл є перекладом для open ticket 3.4.2", "_INFO":"Цей файл є перекладом для open ticket 3.4.4",
"errors":{ "errors":{
"missingArgsTitle":"Невірні аргументи!", "missingArgsTitle":"Невірні аргументи!",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "open-ticket", "name": "open-ticket",
"version": "3.4.2", "version": "3.4.4",
"description": "This is an open-source discord ticket bot, you can configure it and it comes with cool features like a transcript.", "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", "main": "index.js",
"scripts": { "scripts": {