Compare commits

...
11 Commits
Author SHA1 Message Date
Jasper 71074e1afe Open Ticket v3.5.4
Open Ticket v3.5.4
2024-04-04 15:38:22 +02:00
DJj123dj e80ce1a64a v3.5.4 push 2 2024-04-04 14:06:48 +02:00
DJj123dj 5dfbce1856 v3.5.4 push 1 2024-03-27 14:22:35 +01:00
Jasper 407e56a806 Open Ticket v3.5.3
Open Ticket v3.5.3
2024-02-05 21:34:56 +01:00
DJj123dj e0f42834e5 v3.5.3 push 2 2024-02-05 21:32:02 +01:00
DJj123dj d03abd9eeb v3.5.3 push 1 2024-01-27 20:32:27 +01:00
Jasper 466a4aea81 Open Ticket v3.5.2
Open Ticket v3.5.2
2024-01-10 17:12:37 +01:00
DJj123dj 9d96d11cd3 v3.5.2 2024-01-10 17:11:46 +01:00
Jasper e3b99e656e Open Ticket v3.5.1!
Open Ticket v3.5.1!
2023-12-25 19:01:13 +01:00
DJj123dj 07e2a68d06 v3.5.1 push 2 (fix button color bug) 2023-12-25 18:56:28 +01:00
DJj123dj 795ca4f981 v3.5.1 push 1 (translation update) 2023-12-23 14:19:36 +01:00
55 changed files with 949 additions and 662 deletions
+10 -12
View File
@@ -1,20 +1,18 @@
# Security Policy # Security Policy
## Supported Versions ## Supported Versions
Below, you can find a list with the status of every open ticket version. This list will change every update!
We only support Open Ticket versions listed below! With support, we mean bugs, errors & helping you further! - ✅ Supported **(bugs, errors, discord support, documentation, html transcripts)**
- 🟧 Deprecated / Partially Supported **(discord support, documentation, html transcripts)**
- ❌ Fully Deprecated / Not Supported **(sometimes documentation)**
✅ Supported | Version | Supported | Until |
🟧 Partially Supported |-----------|-----------|-----------------------------|
❌ Not Supported | 3.5.4 | ✅ | |
| 3.5.3 | ✅ | May 2024 |
| Version | Supported | | 3.5.2 | 🟧 | Next Update |
|-----------|-------------------| | < 3.5.2 | ❌ | |
| 3.5.0 | ✅ |
| 3.4.4 | ✅ |
| 3.4.3 | 🟧 |
| 3.4.2 | 🟧 |
| < 3.4.2 | ❌ |
## Reporting a Vulnerability ## Reporting a Vulnerability
+37 -41
View File
@@ -5,36 +5,28 @@ There will be massive improvements for more stability & features! But the best p
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket" width="600px"> <img src="https://apis.dj-dj.be/cdn/openticket/logo.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.5.0-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v3.5.0) [![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.5.4-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v3.5.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://otdocs.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 tickets, custom embeds & more! Did you know that even the html transcripts are highly customisable? Don't wait and check it out! If you're having trouble setting the bot up, feel free to join our support server and we will help you further!
Take a look at all the features and discover the possibilities! Take a look at all the features and discover the possibilities!
### [Visit the Documentation!](https://docs.openticket.dj-dj.be/quick-start) ### [Visit the Documentation!](https://otdocs.dj-dj.be/quick-start)
## Features ## Features
- **🎉 advanced html transcripts!** - **🎉 advanced html transcripts!**
- 🔒 close, ❌ delete & ✅ re-open tickets - 🔒 close, ❌ delete & ✅ re-open tickets
- 🇬🇧 translation in 19 different languages - 🇬🇧 translation in 22 different languages
- 📄 very advanced customisation - 📄 very advanced customisation
- 🆗 buttons or 🔽 dropdowns! - 🆗 buttons or 🔽 dropdowns!
- 🆒 plugins - 🆒 custom plugins
- ∞ unlimited tickets & unlimited messages - ∞ unlimited tickets & embeds
- ➕➖ add/remove users from a ticket - ➕➖ add/remove users from a ticket
- 📊 ticket, user & global staticstics - 📊 ticket, user & global staticstics
- /slash & text commands - /slash & text commands
- 📥 reaction roles & url buttons
<details> - 🖥️ discord.js v14 & axios
<summary><b>But wait, there are even more features! Click here to discover!</b></summary> - 🎛️ latest discord integration
- fully customisable embeds & buttons
- close tickets with reason
- reaction roles (or verification system)
- discord interaction buttons
- discord.js v14
</details>
## preview ## preview
<img src="https://apis.dj-dj.be/cdn/openticket/message_buttons.png" alt="Message with buttons" width="350px"> <img src="https://apis.dj-dj.be/cdn/openticket/message_buttons.png" alt="Message with buttons" width="350px">
@@ -54,31 +46,35 @@ Take a look at all the features and discover the possibilities!
|Designer |vuur_draak | |Designer |vuur_draak |
### Translators ### Translators
|Language |Maintainer (discord name) |Status | |Language |Maintainer (discord name) |Status |
|-------------------|--------------------------|--------------------------------| |-------------------|--------------------------|---------------|
|English |djj123dj |🟢 Up To Date | |English |djj123dj |🟢 Up To Date |
|Dutch |djj123dj |🟢 Up To Date | |Dutch |djj123dj |🟢 Up To Date |
|French |sankedev |🟠 Will be updated next version | |French |sankedev & tostam |🟢 Up To Date |
|Romanian |sankedev |🟢 Up To Date | |Romanian |sankedev |🟢 Up To Date |
|Spanish |redactado & josuens |🟠 Will be updated next version | |Spanish |redactado & josuens |🟢 Up To Date |
|German |david.3 |🟢 Up To Date | |German |david.3 |🟢 Up To Date |
|Italian |maurizio26 |🟠 Will be updated next version | |Italian |maurizio26 |🟢 Up To Date |
|Czech |spyeye_ |🟢 Up To Date | |Czech |spyeye_ |🟢 Up To Date |
|Arabic |Sarcastic#9318 |🔴 Outdated | |Arabic |deqressing |🟢 Up To Date |
|Danish |.the_gamer |🟢 Up To Date | |Danish |.the_gamer |🟢 Up To Date |
|Portuguese |quiradon |🟠 Will be updated next version | |Portuguese |quiradon |🔴 Outdated |
|Russian |apexo & ander |🟢 Up To Date | |Russian |apexo & ander |🟢 Up To Date |
|Ukrainian |ander |🟢 Up To Date | |Ukrainian |ander |🟢 Up To Date |
|Turkish |Hydra#0009 |🔴 Outdated | |Turkish |Hydra#0009 |🔴 Outdated |
|Polish |mkevas |🟠 Will be updated next version | |Polish |mkevas |🟢 Up To Date |
|Slovenian |n1kkec |🔴 Outdated | |Slovenian |n1kkec |🔴 Outdated |
|Thai |modshd |🟢 Up To Date | |Thai |modshd |🟢 Up To Date |
|Norwegian |noonenook |🟠 Will be updated next version | |Norwegian |noonenook |🟢 Up To Date |
|Greek |stefanos__. |🔴 Outdated | |Greek |stefanos__. |🔴 Outdated |
|Indonesian |erxg |🟢 Up To Date |
|Kurdish |raze.hama |🟢 Up To Date |
|Hungarian |Snowy |🔴 Outdated |
|Persian |sasanwm |🟢 Up To Date |
## links ## links
current version: _v3.5.0_ current version: _v3.5.4_
</br>changelog: [click here](https://otgithub.dj-dj.be/releases) </br>changelog: [click here](https://otgithub.dj-dj.be/releases)
</br>documentation: [click here](https://docs.openticket.dj-dj.be/quick-start) </br>documentation: [click here](https://otdocs.dj-dj.be/quick-start)
© 2023 - DJdj Development | [website](https://www.dj-dj.be) | [discord](https://discord.dj-dj.be) | [terms of service](https://www.dj-dj.be/terms) © 2024 - DJdj Development | [website](https://www.dj-dj.be) | [discord](https://discord.dj-dj.be) | [terms of service](https://www.dj-dj.be/terms)
+1 -1
View File
@@ -49,7 +49,7 @@ module.exports = () => {
if (!interaction.guild) return if (!interaction.guild) return
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id) const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]}) if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const ticketId = hiddendata.find(d => d.key == "type").value const ticketId = hiddendata.find(d => d.key == "type").value
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){ if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
+1 -1
View File
@@ -79,7 +79,7 @@ module.exports = () => {
if (!interaction.guild) return if (!interaction.guild) return
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id) const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]}) if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const ticketId = hiddendata.find(d => d.key == "type").value const ticketId = hiddendata.find(d => d.key == "type").value
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){ if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
+1 -1
View File
@@ -67,7 +67,7 @@ module.exports = () => {
if (!interaction.guild) return if (!interaction.guild) return
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id) const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]}) if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const ticketId = hiddendata.find(d => d.key == "type").value const ticketId = hiddendata.find(d => d.key == "type").value
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){ if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
+4 -4
View File
@@ -57,13 +57,13 @@ module.exports = () => {
const reason = interaction.options.getString("reason") ? interaction.options.getString("reason") : false const reason = interaction.options.getString("reason") ? interaction.options.getString("reason") : false
await interaction.deferReply()
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id) const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]}) if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const ticketId = hiddendata.find(d => d.key == "type").value const ticketId = hiddendata.find(d => d.key == "type").value
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!")]}) if (hiddendata.find(h => h.key == "pendingdelete")) return interaction.reply({embeds:[bot.errorLog.warning("Warning!","You can't close a ticket while it's being deleted!")]})
await interaction.deferReply()
const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false const descriptionReason = reason ? "**"+l.messages.reason+":** "+reason : false
interaction.editReply({embeds:[bot.embeds.commands.closeEmbed(interaction.user,descriptionReason)],components:[bot.buttons.close.closeCommandRow]}) interaction.editReply({embeds:[bot.embeds.commands.closeEmbed(interaction.user,descriptionReason)],components:[bot.buttons.close.closeCommandRow]})
+1 -1
View File
@@ -51,7 +51,7 @@ module.exports = () => {
if (!interaction.guild) return if (!interaction.guild) return
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id) const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]}) if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const ticketId = hiddendata.find(d => d.key == "type").value const ticketId = hiddendata.find(d => d.key == "type").value
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){ if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
+1 -1
View File
@@ -49,7 +49,7 @@ module.exports = () => {
if (!interaction.guild) return if (!interaction.guild) return
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id) const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]}) if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const ticketId = hiddendata.find(d => d.key == "type").value const ticketId = hiddendata.find(d => d.key == "type").value
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){ if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
+1 -1
View File
@@ -55,7 +55,7 @@ module.exports = () => {
if (!interaction.guild) return if (!interaction.guild) return
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id) const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]}) if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const ticketId = hiddendata.find(d => d.key == "type").value const ticketId = hiddendata.find(d => d.key == "type").value
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){ if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
+6 -6
View File
@@ -23,7 +23,7 @@ module.exports = () => {
msg.channel.send({embeds:[bot.embeds.commands.reopenEmbed(msg.author)],components:[bot.buttons.close.openRowNormal]}) msg.channel.send({embeds:[bot.embeds.commands.reopenEmbed(msg.author)],components:[bot.buttons.close.openRowNormal]})
require("../core/ticketActions/ticketReopener").reopenTicket(msg.guild,msg.channel,msg.author) require("../core/ticketActions/ticketReopener").reopenTicket(msg.guild,msg.channel,msg.author,ticketId)
log("command","someone used the 'reopen' command",[{key:"user",value:msg.author.username}]) log("command","someone used the 'reopen' command",[{key:"user",value:msg.author.username}])
APIEvents.onCommand("reopen",true,msg.author,msg.channel,msg.guild,new Date()) APIEvents.onCommand("reopen",true,msg.author,msg.channel,msg.guild,new Date())
@@ -33,17 +33,17 @@ module.exports = () => {
if (!interaction.isChatInputCommand()) return if (!interaction.isChatInputCommand()) return
if (interaction.commandName != "reopen") return if (interaction.commandName != "reopen") return
await interaction.deferReply()
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id) const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]}) if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const ticketId = hiddendata.find(d => d.key == "type").value const ticketId = hiddendata.find(d => d.key == "type").value
if (hiddendata.find(h => h.key == "pendingdelete")) return interaction.editReply({embeds:[bot.errorLog.warning("Warning!","You can't re-open a ticket while it's being deleted!")]}) if (hiddendata.find(h => h.key == "pendingdelete")) return interaction.reply({embeds:[bot.errorLog.warning("Warning!","You can't re-open a ticket while it's being deleted!")]})
await interaction.deferReply()
await interaction.editReply({embeds:[bot.embeds.commands.reopenEmbed(interaction.user)],components:[bot.buttons.close.openRowNormal]}) await interaction.editReply({embeds:[bot.embeds.commands.reopenEmbed(interaction.user)],components:[bot.buttons.close.openRowNormal]})
require("../core/ticketActions/ticketReopener").reopenTicket(interaction.guild,interaction.channel,interaction.user) require("../core/ticketActions/ticketReopener").reopenTicket(interaction.guild,interaction.channel,interaction.user,ticketId)
log("command","someone used the 'reopen' command",[{key:"user",value:interaction.user.username}]) log("command","someone used the 'reopen' command",[{key:"user",value:interaction.user.username}])
APIEvents.onCommand("reopen",true,interaction.user,interaction.channel,interaction.guild,new Date()) APIEvents.onCommand("reopen",true,interaction.user,interaction.channel,interaction.guild,new Date())
+1 -1
View File
@@ -74,7 +74,7 @@ module.exports = () => {
if (!interaction.guild) return if (!interaction.guild) return
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id) const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
if (hiddendata.length < 1) return interaction.editReply({embeds:[bot.errorLog.notInATicket]}) if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const ticketId = hiddendata.find(d => d.key == "type").value const ticketId = hiddendata.find(d => d.key == "type").value
if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){ if (!permsChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
+15 -16
View File
@@ -1,4 +1,7 @@
{ {
"_DOCUMENTATION":"https://otdocs.dj-dj.be",
"_SUPPORT":"https://discord.dj-dj.be",
"color":"#ffffff", "color":"#ffffff",
"serverId":"server id (for slash cmds)", "serverId":"server id (for slash cmds)",
"token":{ "token":{
@@ -28,10 +31,9 @@
"answerInEphemeralOnOpen":true "answerInEphemeralOnOpen":true
}, },
"SUPPORT":"Take look at our wiki: https://docs.openticket.dj-dj.be or join our discord server: https://discord.dj-dj.be if you need support!",
"options":[ "options":[
{ {
"id":"general", "id":"example-ticket",
"name":"Question", "name":"Question",
"description":"Create this ticket if you have a question.", "description":"Create this ticket if you have a question.",
"icon":"🎫", "icon":"🎫",
@@ -53,7 +55,7 @@
}, },
"image":{ "image":{
"enable":false, "enable":false,
"url":"https://www.dj-dj.be/wp-content/uploads/2022/09/pfp-cropped.png" "url":"https://www.example.com/catmemes/cat.png"
}, },
"closedCategory":{ "closedCategory":{
@@ -74,10 +76,9 @@
"roleId":"012345678910" "roleId":"012345678910"
} }
} }
}, },
{ {
"id":"website", "id":"example-website",
"name":"Website", "name":"Website",
"description":"Go to our website.", "description":"Go to our website.",
"icon":"✅", "icon":"✅",
@@ -85,33 +86,31 @@
"type":"website", "type":"website",
"url":"https://www.dj-dj.be" "url":"https://www.dj-dj.be"
}, },
{ {
"id":"role", "id":"example-role",
"name":"Verify", "name":"Update Ping",
"description":"Click here to get the verify role.", "description":"Click here to get pinged for updates!",
"icon":"👮🏼", "icon":"📢",
"label":"get a role", "label":"Update Ping",
"type":"role", "type":"role",
"color":"red", "color":"red",
"roles":["discord role id"], "roles":["discord role id"],
"mode":"add&remove|remove|add", "mode":"add&remove|remove|add",
"enableDmOnOpen":true "enableDmOnOpen":true
} }
], ],
"messages":[ "messages":[
{ {
"id":"1", "id":"example-embed",
"name":"Choose Your Ticket", "name":"Choose Your Ticket",
"description":"You can click one of the buttons below!", "description":"You can click one of the buttons below!",
"dropdown":false, "dropdown":false,
"enableFooter":false, "enableFooter":false,
"footer":"Open Ticket v3.5.0 - I'm a footer!", "footer":"Open Ticket v3.5.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",
@@ -125,7 +124,7 @@
"enableCustomColor":false, "enableCustomColor":false,
"color":"#ffffff", "color":"#ffffff",
"options":["general","apply"], "options":["example-ticket","example-website","example-role"],
"other":{ "other":{
"enableTicketExplaination":true, "enableTicketExplaination":true,
@@ -146,4 +145,4 @@
} }
} }
] ]
} }
+1 -1
View File
@@ -4,7 +4,7 @@ const bot = require("../../index")
exports.client = bot.client exports.client = bot.client
exports.config = bot.config exports.config = bot.config
exports.utils = { exports.utils = {
log:bot.errorLog.log(), log:bot.errorLog.log,
storage:bot.storage storage:bot.storage
} }
+72 -46
View File
@@ -29,23 +29,23 @@ exports.checker = async () => {
/**@param {"userid"|"roleid"|"channelid"|"serverid"|"categoryid"} mode @param {String} value @param {String} path */ /**@param {"userid"|"roleid"|"channelid"|"serverid"|"categoryid"} mode @param {String} value @param {String} path */
const checkDiscord = (mode,value,path) => { const checkDiscord = (mode,value,path) => {
if (mode == "userid"){ if (mode == "userid"){
if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){ if (value.length < 16 || value.length > 40 || !/^\d+$/.test(value)){
createError("'"+path+"' | this user id is invalid") createError("'"+path+"' | this user id is invalid")
} }
}else if (mode == "channelid"){ }else if (mode == "channelid"){
if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){ if (value.length < 16 || value.length > 40 || !/^\d+$/.test(value)){
createError("'"+path+"' | this channel id is invalid") createError("'"+path+"' | this channel id is invalid")
} }
}else if (mode == "roleid"){ }else if (mode == "roleid"){
if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){ if (value.length < 16 || value.length > 40 || !/^\d+$/.test(value)){
createError("'"+path+"' | this role id is invalid") createError("'"+path+"' | this role id is invalid")
} }
}else if (mode == "serverid"){ }else if (mode == "serverid"){
if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){ if (value.length < 16 || value.length > 40 || !/^\d+$/.test(value)){
createError("'"+path+"' | this server id is invalid") createError("'"+path+"' | this server id is invalid")
} }
}else if (mode == "categoryid"){ }else if (mode == "categoryid"){
if (value.length < 16 || value.length > 20 || !/^\d+$/.test(value)){ if (value.length < 16 || value.length > 40 || !/^\d+$/.test(value)){
createError("'"+path+"' | this category id is invalid") createError("'"+path+"' | this category id is invalid")
} }
} }
@@ -402,11 +402,11 @@ exports.checker = async () => {
} }
} }
//--------------------------| //////////////////////////////////////////
//--------------------------| //////////////////////////////////////////
//checker => START HERE | /////////!!! CHECKER.JS START !!!/////////
//--------------------------| //////////////////////////////////////////
//--------------------------| //////////////////////////////////////////
var configArray = ["color","serverId","token","adminRoles","prefix","languageFile","status","system","options","messages"] var configArray = ["color","serverId","token","adminRoles","prefix","languageFile","status","system","options","messages"]
configArray.forEach((item) => { configArray.forEach((item) => {
@@ -416,19 +416,44 @@ exports.checker = async () => {
}) })
checkHexColor(config.color,"main_color") checkHexColor(config.color,"main_color")
checkDiscord("serverid",config.serverId,"server_id") checkDiscord("serverid",config.serverId,"serverId")
if (!require("./api/api.json").disable.checkerjs.token && !config.token.fromENV) checkToken(config.token.value) if (!require("./api/api.json").disable.checkerjs.token && !config.token.fromENV) checkToken(config.token.value)
checkType(config.adminRoles,"array","/main_adminroles") checkType(config.adminRoles,"array","/adminRoles")
checkDiscordArray("roleid",config.adminRoles,"main_adminroles") checkDiscordArray("roleid",config.adminRoles,"adminRoles")
checkString(config.prefix,1,15,"prefix","prefix") checkString(config.prefix,1,15,"prefix","prefix")
//languagefile
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") && !lf.startsWith("thai") && !lf.startsWith("norwegian") && !lf.startsWith("greek") && !lf.startsWith("ukrainian") && !lf.startsWith("hungarian") && !lf.startsWith("indonesian")){ //languagefile
createError("'languagefile' | invalid language, more info in the wiki") checkType(config.languageFile,"string","languageFile")
const languageList = [
"custom",
"english",
"dutch",
"romanian",
"german",
"arabic",
"spanish",
"portuguese",
"french",
"italian",
"czech",
"danish",
"russian",
"turkish",
"polish",
"slovenian",
"thai",
"norwegian",
"greek",
"ukrainian",
"hungarian",
"indonesian",
"kurdish",
"persian"
]
if (!languageList.some((l) => config.languageFile.startsWith(l))){
createError("'languageFile' | invalid language, more info in the wiki")
} }
//status: //status:
@@ -483,34 +508,35 @@ exports.checker = async () => {
//the end //the end
if (errorList.length > 0 || warnList.length > 0){ if (errorList.length > 0 || warnList.length > 0){
console.log("REPORT:\n===========================") console.log("REPORT:\n===========================")
} warnList.forEach((w) => {
warnList.forEach((w) => { const splitw = w.split("'")
const splitw = w.split("'") if (splitw.length > 1){
if (splitw.length > 1){ var splitstring = chalk.yellow(splitw[0])+chalk.blue("'"+splitw[1]+"'")+chalk.yellow(splitw[2])
var splitstring = chalk.yellow(splitw[0])+chalk.blue("'"+splitw[1]+"'")+chalk.yellow(splitw[2]) if (splitw[3]){splitstring = splitstring+chalk.yellow(splitw[3])}
if (splitw[3]){splitstring = splitstring+chalk.yellow(splitw[3])} if (splitw[4]){splitstring = splitstring+chalk.yellow(splitw[4])}
if (splitw[4]){splitstring = splitstring+chalk.yellow(splitw[4])} if (splitw[5]){splitstring = splitstring+chalk.yellow(splitw[5])}
if (splitw[5]){splitstring = splitstring+chalk.yellow(splitw[5])} }else {var splitstring = chalk.yellow(splitw[0])}
}else {var splitstring = chalk.yellow(splitw[0])} console.log(splitstring)
console.log(splitstring) })
}) errorList.forEach((e) => {
errorList.forEach((e) => { const splite = e.split("'")
const splite = e.split("'") if (splite.length > 1){
if (splite.length > 1){ var splitstring = chalk.red(splite[0])+chalk.blue("'"+splite[1]+"'")+chalk.red(splite[2])
var splitstring = chalk.red(splite[0])+chalk.blue("'"+splite[1]+"'")+chalk.red(splite[2]) }else {var splitstring = chalk.red(splite[0])}
}else {var splitstring = chalk.red(splite[0])} console.log(splitstring)
console.log(splitstring) })
}) if (isError){
if (isError){ console.log("===========================")
console.log("===========================") console.log("=> "+chalk.bgRed("your bot doesn't work if you don't fix the above errors!"))
console.log("=> "+chalk.bgRed("your bot doesn't work if you don't fix the above errors!")) if (isWarn){
if (isWarn){ console.log("\n=> "+chalk.bgYellow("if you ignore warns, some things may work differently than expected!"))
console.log("\n=> "+chalk.bgYellow("if you ignore warns, some things may work differently than expected!")) }
console.log(chalk.bold.green("\nDOCUMENTATION => https://otdocs.dj-dj.be\nSUPPORT => https://discord.dj-dj.be\n"))
process.exit(0)
}else if (isWarn){
console.log("===========================")
console.log("=> "+chalk.bgYellow("if you ignore warns, some things may work differently than expected!"))
console.log(chalk.bold.green("\nDOCUMENTATION => https://otdocs.dj-dj.be\nSUPPORT => https://discord.dj-dj.be\n"))
} }
process.exit(0)
}else if (isWarn == true && isError == false){
console.log("===========================")
console.log("=> "+chalk.bgYellow("if you ignore warns, some things may work differently than expected!"))
} }
} }
-53
View File
@@ -1,53 +0,0 @@
const fs = require('fs')
const readline = require("readline")
const rl = readline.createInterface({
input:process.stdin,
output:process.stdout,
terminal:true
})
const ask = async () => {
const chalk = await (await import("chalk")).default
rl.question(chalk.yellow("WARNING: are you sure that there are",chalk.red("no tickets open"),"at the moment? ")+chalk.green("(yes/no)")+"\n",(answer) => {
if (answer != "1" && !answer.toLowerCase().startsWith("yes")){
console.log(chalk.red("invalid answer"))
ask()
return
}
console.log(chalk.green("clearing data..."))
runClear()
rl.close()
})
}
ask()
const runClear = async () => {
const chalk = await (await import("chalk")).default
//console.log(chalk.blue("You can get a node.js warning below, just ignore that, it's not important!"))
const dataPaths = ["./storage/dynamicDB"]
var index = 0
dataPaths.forEach((path) => {
try {
fs.rmSync(path,{recursive:true,force:true})
}catch{
//console.log(path,"doesn't exist")
}
setTimeout(() => {
try{
fs.mkdirSync(path)
}catch{
//console.log(path,"already exists")
}
index++
},500)
})
setInterval(() => {
if (index >= 1){
console.log(chalk.bgGreen("All local data is cleared!"))
process.exit(1)
}
},500)
}
@@ -40,7 +40,7 @@ module.exports = () => {
if (!permissionChecker.sendUserNoPerms(interaction.user)){ if (!permissionChecker.sendUserNoPerms(interaction.user)){
permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user) permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user)
} }
interaction.message.edit({components:[firstcomponents]}) interaction.message.edit({components:firstcomponents})
closeTicketButtonChecker = false closeTicketButtonChecker = false
return return
} }
@@ -65,7 +65,7 @@ module.exports = () => {
if (!permissionChecker.sendUserNoPerms(interaction.user)){ if (!permissionChecker.sendUserNoPerms(interaction.user)){
permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user) permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user)
} }
interaction.message.edit({components:[firstcomponents]}) interaction.message.edit({components:firstcomponents})
closeTicketButtonChecker = false closeTicketButtonChecker = false
return interaction.deferUpdate() return interaction.deferUpdate()
} }
@@ -21,8 +21,21 @@ module.exports = () => {
if (!interaction.isButton()) return if (!interaction.isButton()) return
if (interaction.customId != "OTreopenTicket") return if (interaction.customId != "OTreopenTicket") return
const hiddendata = bot.hiddenData.readHiddenData(interaction.channel.id)
if (hiddendata.length < 1) return interaction.reply({embeds:[bot.errorLog.notInATicket]})
const ticketId = hiddendata.find(d => d.key == "type").value
if (config.system.closeMode == "adminonly"){
if (!permissionChecker.ticket(interaction.user.id,interaction.guild.id,ticketId)){
if (!permissionChecker.sendUserNoPerms(interaction.user)){
permissionChecker.sendChannelNoPerms(interaction.channel,interaction.user)
}
return interaction.deferUpdate()
}
}
await interaction.deferUpdate() await interaction.deferUpdate()
interaction.message.edit({embeds:[bot.embeds.commands.reopenEmbed(interaction.user)],components:[bot.buttons.close.openRowNormal]}) interaction.message.edit({embeds:[bot.embeds.commands.reopenEmbed(interaction.user)],components:[bot.buttons.close.openRowNormal]})
require("../../../ticketActions/ticketReopener").reopenTicket(interaction.guild,interaction.channel,interaction.user) require("../../../ticketActions/ticketReopener").reopenTicket(interaction.guild,interaction.channel,interaction.user,ticketId)
}) })
} }
+3 -3
View File
@@ -220,7 +220,7 @@ const getTicketStats = async (guild,channelid) => {
/**@type {TextChannel|undefined} */ /**@type {TextChannel|undefined} */
const channel = guild.channels.cache.find((c) => c.id == channelid) const channel = guild.channels.cache.find((c) => c.id == channelid)
const messageAmount = (channel) ? (await getmessages(channel,5000)).length : 0 const messageAmount = (channel) ? (await getmessages(channel,5000)).length : 0
const participants = (channel) ? channel.members.map((m) => m.user.username) : [] const participants = (channel) ? channel.members.map((m) => "<@"+m.user.id+">") : []
//saved data //saved data
const createdAt = getStats("ticket","CREATED_AT",channelid) const createdAt = getStats("ticket","CREATED_AT",channelid)
@@ -228,7 +228,7 @@ const getTicketStats = async (guild,channelid) => {
const TEMPcreatedBy = getStats("ticket","CREATED_BY",channelid) const TEMPcreatedBy = getStats("ticket","CREATED_BY",channelid)
const TEMPcreatedByUser = (TEMPcreatedBy) ? guild.members.cache.find((m) => m.id == TEMPcreatedBy) : undefined const TEMPcreatedByUser = (TEMPcreatedBy) ? guild.members.cache.find((m) => m.id == TEMPcreatedBy) : undefined
const createdBy = (TEMPcreatedByUser) ? TEMPcreatedByUser.user.username : "an unknown person 😄" const createdBy = (TEMPcreatedByUser) ? "<@"+TEMPcreatedByUser.user.id+">" : "an unknown person 😄"
return { return {
createdAt: (typeof createdAt == "undefined") ? new Date().getTime() : createdAt, createdAt: (typeof createdAt == "undefined") ? new Date().getTime() : createdAt,
@@ -316,7 +316,7 @@ const createTicketStatsEmbed = async (guild,channelid) => {
const sentences = [ const sentences = [
`${l.stats.ticketCreatedOn}: <t:${Math.round(stats.createdAt/1000)}:f>`, `${l.stats.ticketCreatedOn}: <t:${Math.round(stats.createdAt/1000)}:f>`,
`${l.stats.ticketCreatedBy}: \`${stats.createdBy}\``, `${l.stats.ticketCreatedBy}: ${stats.createdBy}`,
`${l.stats.messagesSent}: \`${stats.messageAmount}\``, `${l.stats.messagesSent}: \`${stats.messageAmount}\``,
`${l.stats.status}: ${newStatus}` `${l.stats.status}: ${newStatus}`
] ]
+2 -1
View File
@@ -63,7 +63,7 @@ module.exports = () => {
} catch{} } catch{}
} }
if (storage.get("amountOfUserTickets",interaction.member.id) == null || storage.get("amountOfUserTickets",interaction.member.id) == "false"|| Number(storage.get("amountOfUserTickets",interaction.member.id)) < config.system.maxAmountOfTickets){ if (storage.get("amountOfUserTickets",interaction.member.id) == null || storage.get("amountOfUserTickets",interaction.member.id) == "false"|| Number(storage.get("amountOfUserTickets",interaction.member.id)) <= config.system.maxAmountOfTickets){
//update storage //update storage
storage.set("amountOfUserTickets",interaction.member.id,Number(storage.get("amountOfUserTickets",interaction.member.id))+1) storage.set("amountOfUserTickets",interaction.member.id,Number(storage.get("amountOfUserTickets",interaction.member.id))+1)
@@ -258,6 +258,7 @@ module.exports = () => {
}) })
}else{ }else{
interaction.editReply({embeds:[bot.errorLog.warning(l.errors.maxAmountTitle,l.errors.maxAmountDescription)]})
try { try {
if (config.system.dmMessages){ if (config.system.dmMessages){
interaction.member.send({embeds:[bot.errorLog.warning(l.errors.maxAmountTitle,l.errors.maxAmountDescription)]}) interaction.member.send({embeds:[bot.errorLog.warning(l.errors.maxAmountTitle,l.errors.maxAmountDescription)]})
+12 -1
View File
@@ -6,15 +6,26 @@ const log = bot.errorLog.log
const l = bot.language const l = bot.language
const storage = bot.storage const storage = bot.storage
const pfb = discord.PermissionFlagsBits const pfb = discord.PermissionFlagsBits
const permsChecker = require("../utils/permisssionChecker")
/** /**
* *
* @param {discord.Guild} guild * @param {discord.Guild} guild
* @param {discord.TextBasedChannel} channel * @param {discord.TextBasedChannel} channel
* @param {discord.User} user * @param {discord.User} user
* @param {String} ticketId option id
* @returns * @returns
*/ */
const reopenTicket = (guild,channel,user) => { const reopenTicket = (guild,channel,user,ticketId) => {
//check perms
if (config.system.closeMode == "adminonly"){
if (!guild) return
if (!permsChecker.ticket(user.id,guild.id,ticketId)){
permsChecker.sendUserNoPerms(user)
return
}
}
log("system","re-opened a ticket",[{key:"ticket",value:channel.name},{key:"user",value:user.username}]) log("system","re-opened a ticket",[{key:"ticket",value:channel.name},{key:"user",value:user.username}])
var permissionsArray = [] var permissionsArray = []
@@ -215,7 +215,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
interactionName:msg.interaction.commandName interactionName:msg.interaction.commandName
}, },
user:{ user:{
name:msg.interaction.user.username, name:msg.interaction.user.displayName,
id:msg.interaction.user.id, id:msg.interaction.user.id,
color:replycolor, color:replycolor,
pfp:msg.interaction.user.displayAvatarURL(), pfp:msg.interaction.user.displayAvatarURL(),
@@ -227,15 +227,15 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
}else if (replytype == "reply"){ }else if (replytype == "reply"){
var replycontentRAW = messages.find((msg2) => msg2.id == msg.reference.messageId) 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" var replycontent = (replycontentRAW && replycontentRAW.content) ? replycontentRAW.content.slice(0,(60-replycontentRAW.author.displayName.length)) : "deleted this message"
const replycolorRAW = (replycontentRAW) ? msg.guild.members.cache.find((m) => m.id == replycontentRAW.author.id) : false const replycolorRAW = (replycontentRAW) ? msg.guild.members.cache.find((m) => m.id == replycontentRAW.author.id) : false
const replycolor = (replycolorRAW) ? replycolorRAW.displayHexColor.replace("#000000","#ffffff") : "#ffffff" const replycolor = (replycolorRAW) ? replycolorRAW.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
var user = (replycontentRAW && replycontentRAW.content) ? { var user = (replycontentRAW && replycontentRAW.content) ? {
name:(replycontentRAW) ? replycontentRAW.author.username : "undefined", name:(replycontentRAW) ? replycontentRAW.author.displayName : "undefined",
id:(replycontentRAW) ? replycontentRAW.author.id : "undefined", id:(replycontentRAW) ? replycontentRAW.author.id : "undefined",
color:replycolor, color:replycolor,
pfp:(replycontentRAW) ? replycontentRAW.author.username : "", pfp:(replycontentRAW) ? replycontentRAW.author.displayName : "",
bot:(replycontentRAW) ? replycontentRAW.author.bot : false, bot:(replycontentRAW) ? replycontentRAW.author.bot : false,
system:(replycontentRAW) ? replycontentRAW.author.system : false, system:(replycontentRAW) ? replycontentRAW.author.system : false,
verifiedBot:(replycontentRAW) ? replycontentRAW.author.flags.has(discord.UserFlags.VerifiedBot) : false, verifiedBot:(replycontentRAW) ? replycontentRAW.author.flags.has(discord.UserFlags.VerifiedBot) : false,
@@ -264,7 +264,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
const authorColor = msg.member ? msg.member.displayHexColor.replace("#000000","#ffffff") : "#ffffff" const authorColor = msg.member ? msg.member.displayHexColor.replace("#000000","#ffffff") : "#ffffff"
messagesArray.push({ messagesArray.push({
author:{ author:{
name:msg.author.username, name:msg.author.displayName,
id:msg.author.id, id:msg.author.id,
color:authorColor, color:authorColor,
pfp:msg.author.displayAvatarURL(), pfp:msg.author.displayAvatarURL(),
@@ -332,7 +332,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => {
creatorid:data.ticket.creatorid, creatorid:data.ticket.creatorid,
creatorpfp:data.ticket.creatorpfp, creatorpfp:data.ticket.creatorpfp,
closedbyname:user.username, closedbyname:user.displayName,
closedbyid:user.id, closedbyid:user.id,
closedbypfp:user.displayAvatarURL(), closedbypfp:user.displayAvatarURL(),
+1 -1
View File
@@ -22,7 +22,7 @@ exports.upload = async (json) => {
resolve(res.data) resolve(res.data)
}catch(err){ }catch(err){
console.log("failed transcript upload!",err.response) console.log("Failed HTML transcript upload! Reached Ratelimit 429!")
resolve(false) resolve(false)
} }
}) })
+8 -6
View File
@@ -34,17 +34,19 @@ exports.beingprocessed = (name,id,rawprocesstime,user) => {
/** /**
* *
* @param {String} name * @param {String} name channel name
* @param {String} id * @param {String} url transcript url
* @param {String} url * @param {discord.User} user transcript closer
* @param {discord.User} user * @param {discord.User} creator transcript creator
*/ */
exports.tsready = (name,id,url,user) => { exports.tsready = (name,url,user,creator) => {
const embed = new discord.EmbedBuilder() const embed = new discord.EmbedBuilder()
.setTitle("🧾 "+l.transcripts.title) .setTitle("🧾 "+l.transcripts.title)
.setColor(config.color) .setColor(config.color)
.setAuthor({name:user.username,iconURL:user.displayAvatarURL()}) .setAuthor({name:user.username,iconURL:user.displayAvatarURL()})
.setFooter({text:name}) .setFooter({text:name})
if (creator) embed.setFields([{name:"Ticket Creator", value:"<@"+creator.id+">"}])
if (url){ if (url){
embed.setURL(url) embed.setURL(url)
@@ -72,7 +74,7 @@ exports.tserror = (name,id,user,err) => {
const errDesc = (typeof err == "string") ? "\n"+err : "" const errDesc = (typeof err == "string") ? "\n"+err : ""
embed.setDescription("Something went wrong while creating the HTML transcript.\n\n[possible reasons](https://docs.openticket.dj-dj.be/the-system/transcripts/transcript-errors)"+errDesc) embed.setDescription("Something went wrong while creating the HTML transcript.\n\n[possible reasons](https://otdocs.dj-dj.be/docs/current/docs/system/transcripts)"+errDesc)
return embed return embed
} }
+42 -6
View File
@@ -88,13 +88,13 @@ module.exports = async (messages,guild,channel,user,reason) => {
}, },
bot:{ bot:{
name:client.user.username, name:client.user.displayName,
id:client.user.id, id:client.user.id,
pfp:client.user.displayAvatarURL(), pfp:client.user.displayAvatarURL(),
}, },
ticket:{ ticket:{
creatorid:ticketopener.id, creatorid:ticketopener.id,
creatorname:ticketopener.username, creatorname:ticketopener.displayName,
creatorpfp:ticketopener.displayAvatarURL(), creatorpfp:ticketopener.displayAvatarURL(),
openedtime:opentime.getTime(), openedtime:opentime.getTime(),
@@ -113,11 +113,35 @@ module.exports = async (messages,guild,channel,user,reason) => {
if (!tc) return if (!tc) return
tc.send({embeds:[errembed],files:[attachment]}) tc.send({embeds:[errembed],files:[attachment]})
} }
if (tsconfig.sendTranscripts.enableDM && user){
const embed = tsembeds.tsready(chName,null,user,ticketopener)
try {
ticketopener.send({embeds:[embed],files:[attachment]})
}catch{}
}
return return
} }
const TSdata = await require("./communication/index").upload(JSONDATA) const TSdata = await require("./communication/index").upload(JSONDATA)
if (!TSdata) return false if (!TSdata){
const attachment = await require("./oldTranscript").createTranscript(messages,channel)
const errembed = tsembeds.tserror(chName,chId,user,"`HTML Transcript API: reached ratelimit`")
if (tsconfig.sendTranscripts.enableChannel){
/**@type {discord.TextChannel|undefined} */
const tc = guild.channels.cache.find((c) => c.id == tsconfig.sendTranscripts.channel)
if (!tc) return
tc.send({embeds:[errembed],files:[attachment]})
}
if (tsconfig.sendTranscripts.enableDM && user){
const embed = tsembeds.tsready(chName,null,user,ticketopener)
try {
ticketopener.send({embeds:[embed],files:[attachment]})
}catch{}
}
return false
}
if (TSdata.status == "success"){ if (TSdata.status == "success"){
//MAKE THIS COMPATIBLE WITH PREMIUM "customTranscriptUrl" IN FUTURE VERSIONS!! //MAKE THIS COMPATIBLE WITH PREMIUM "customTranscriptUrl" IN FUTURE VERSIONS!!
@@ -145,12 +169,12 @@ module.exports = async (messages,guild,channel,user,reason) => {
//ready //ready
setTimeout(() => { setTimeout(() => {
if (msg){ if (msg){
msg.edit({embeds:[tsembeds.tsready(chName,chId,url,user)]}) msg.edit({embeds:[tsembeds.tsready(chName,url,user,ticketopener)]})
} }
if (tsconfig.sendTranscripts.enableDM){ if (tsconfig.sendTranscripts.enableDM){
if (!user) return if (!user) return
const embed = tsembeds.tsready(chName,chId,url,user) const embed = tsembeds.tsready(chName,url,user,ticketopener)
try { try {
ticketopener.send({embeds:[embed]}) ticketopener.send({embeds:[embed]})
}catch{} }catch{}
@@ -167,10 +191,16 @@ module.exports = async (messages,guild,channel,user,reason) => {
if (!tc) return if (!tc) return
tc.send({embeds:[errembed],files:[attachment]}) tc.send({embeds:[errembed],files:[attachment]})
} }
if (tsconfig.sendTranscripts.enableDM && user){
const embed = tsembeds.tsready(chName,null,user,ticketopener)
try {
ticketopener.send({embeds:[embed],files:[attachment]})
}catch{}
}
} }
}else{ }else{
const attachment = await require("./oldTranscript").createTranscript(messages,channel) const attachment = await require("./oldTranscript").createTranscript(messages,channel)
const embed = tsembeds.tsready(chName,chId,false,user) const embed = tsembeds.tsready(chName,null,user,ticketopener)
if (tsconfig.sendTranscripts.enableChannel){ if (tsconfig.sendTranscripts.enableChannel){
/**@type {discord.TextChannel|undefined} */ /**@type {discord.TextChannel|undefined} */
@@ -179,6 +209,12 @@ module.exports = async (messages,guild,channel,user,reason) => {
if (!tc) return if (!tc) return
tc.send({embeds:[embed],files:[attachment]}) tc.send({embeds:[embed],files:[attachment]})
} }
if (tsconfig.sendTranscripts.enableDM && user){
const embed = tsembeds.tsready(chName,null,user,ticketopener)
try {
ticketopener.send({embeds:[embed],files:[attachment]})
}catch{}
}
} }
} }
asyncmanager() asyncmanager()
+18 -14
View File
@@ -2,22 +2,26 @@ const discord = require("discord.js")
const bot = require("../../index") const bot = require("../../index")
const config = bot.config const config = bot.config
const l = bot.language const l = bot.language
const b = discord.ButtonStyle
/**@returns {"DANGER"|"SUCCESS"|"PRIMARY"|"SECONDARY"} */ /**
* @param {String} color
* @returns {"DANGER"|"SUCCESS"|"PRIMARY"|"SECONDARY"} */
const getColor = (color) => { const getColor = (color) => {
const b = discord.ButtonStyle if (color){
if (color.toLowerCase() == "red"){ if (color.toLowerCase() == "red"){
return b.Danger return b.Danger
}else if (color.toLowerCase() == "green"){ }else if (color.toLowerCase() == "green"){
return b.Success return b.Success
}else if (color.toLowerCase() == "blue" || color.toLowerCase() == "blurple"){ }else if (color.toLowerCase() == "blue" || color.toLowerCase() == "blurple"){
return b.Primary return b.Primary
}else if (color.toLowerCase() == "black" || color.toLowerCase() == "gray" || color.toLowerCase() == "grey"){ }else if (color.toLowerCase() == "black" || color.toLowerCase() == "gray" || color.toLowerCase() == "grey"){
return b.Secondary return b.Secondary
}else if (color == "DANGER" || color == "SECONDARY" || color == "SUCCESS" || color == "PRIMARY"){ }else if (color.toUpperCase() == "DANGER" || color.toUpperCase() == "SECONDARY" || color.toUpperCase() == "SUCCESS" || color.toUpperCase() == "PRIMARY"){
return color return color
}else if (color.toLowerCase() == "none" || color.toLowerCase() == "false" || color.toLowerCase() == ""){ }else if (color.toLowerCase() == "none" || color.toLowerCase() == "false" || color.toLowerCase() == ""){
return b.Secondary return b.Secondary
}else return b.Secondary
}else return b.Secondary }else return b.Secondary
} }
+1 -1
View File
@@ -43,7 +43,7 @@ exports.getDropdown = (ids,placeholder) => {
}else{ }else{
if (option.label) selectComponent.setLabel(option.label) if (option.label) selectComponent.setLabel(option.label)
if (option.icon) selectComponent.setEmoji(option.icon) if (option.icon) selectComponent.setEmoji(option.icon)
if (option.description) selectComponent.setDescription(option.description) if (option.description && option.description.length < 100) selectComponent.setDescription(option.description)
} }
dropdown.addOptions(selectComponent) dropdown.addOptions(selectComponent)
-76
View File
@@ -134,80 +134,4 @@ exports.run = async (pluginData) => {
}) })
console.log(final.join("\n\n")) console.log(final.join("\n\n"))
}
var waitTime = new Date().getTime()
var waitTimeEnabled = false
/**@param {OTLiveStatusError} options @returns {Promise<Boolean>} */
const uploadLiveStatus = (options) => {
return new Promise((resolve,reject) => {
if (process.argv.some((v) => v == "--noerrorupload")) return resolve(true)
try {
var data = encodeURIComponent(JSON.stringify(options))
axios.get("https://livestatus.dj-dj.be/openticket?auth=openticketLIVESTATUS1234&data="+data).then((res) => {
if (res.status == 200) resolve(true)
else resolve(false)
})
}catch{
resolve(false)
}
})
}
/**@param {String} err @returns {Promise<Boolean>}*/
exports.liveStatusUploadManager = async (err) => {
return new Promise(async (resolve) => {
if (process.argv.some((v) => v == "--noerrorupload")) return resolve(true)
else{
var tsenabled = (bot.tsconfig.sendTranscripts.enableChannel || bot.tsconfig.sendTranscripts.enableDM)
var tsmode = bot.tsconfig.sendTranscripts.useHTMLtranscripts ? "html" : "text"
const transcriptMode = tsenabled ? tsmode : false
const slashMode = getSlashEnabled()
try {
if (waitTimeEnabled){
if (new Date().getTime() < waitTime){
waitTimeEnabled = false
return resolve(false)
}
}
const result = await uploadLiveStatus({
bot:{
id:client.user.id,
name:client.user.username,
pfp:client.user.displayAvatarURL()
},
error:err,
openticket:{
config:{
//TEMPORARY SOLUTION => AXIOS 414 ERROR!
//messages:config.messages,
//options:config.options,
//transcripts:bot.tsconfig,
//system:config.system
},
language:config.languageFile,
version:"3.5.0",
slashcmds:slashMode,
transcripts:transcriptMode,
plugins:fs.readdirSync("./plugins"),
pluginload:globalPluginData
},
details:{
errortime:new Date().getTime()
//TEMPORARY SOLUTION => AXIOS 414 ERROR!
//actions:this.actionRecorder,
//database:fs.readFileSync("./storage/database.json").toString()
}
})
if (!result){
waitTime = new Date().getTime()+30000
waitTimeEnabled = true
}
resolve(result)
}catch{resolve(false)}
}
})
} }
+57 -10
View File
@@ -25,7 +25,7 @@
INFORMATION: INFORMATION:
============ ============
Open Ticket v3.5.0 - © DJdj Development Open Ticket v3.5.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
@@ -38,7 +38,7 @@
Send ./openticketdebug.txt when there are errors! Send ./openticketdebug.txt when there are errors!
*/ */
/** discord :)*/
const discord = require("discord.js") const discord = require("discord.js")
const fs = require('fs') const fs = require('fs')
const {GatewayIntentBits,Partials} = discord const {GatewayIntentBits,Partials} = discord
@@ -54,7 +54,7 @@ const client = new discord.Client({
partials:[Partials.Channel,Partials.Message] partials:[Partials.Channel,Partials.Message]
}) })
exports.client = client exports.client = client
client.setMaxListeners(50) client.setMaxListeners(120)
if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","created client") if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","created client")
//LOAD CONFIG //LOAD CONFIG
@@ -161,6 +161,10 @@ client.on('ready',async () => {
if (config.status.enabled){ if (config.status.enabled){
setStatus(config.status.type,config.status.text) setStatus(config.status.type,config.status.text)
//refresh status every 10 minutes
setInterval(() => {
setStatus(config.status.type,config.status.text)
},(60*10*1000))
} }
this.actionRecorder.push({ this.actionRecorder.push({
@@ -382,11 +386,6 @@ process.on("uncaughtException",async (error,origin) => {
errorLog(error.name+": "+error.message+" | origin: "+origin,error.stack) errorLog(error.name+": "+error.message+" | origin: "+origin,error.stack)
APIEvents.onError(error.name+": "+error.message,new Date()) APIEvents.onError(error.name+": "+error.message,new Date())
//TEMPORARY INTEGRATION FOR LIVESTATUS ERROR UPLOADER:
try {
await require("./core/utils/liveStatus").liveStatusUploadManager(error.name+": "+error.message+" | origin: "+origin+"\n"+error.stack)
} catch {this.errorLog.log("info","FAILED TO AUTO-REPORT ERROR! (you can ignore this error)")}
}) })
this.actionRecorder.push({ this.actionRecorder.push({
@@ -396,7 +395,55 @@ this.actionRecorder.push({
type:"debugsystem.success" type:"debugsystem.success"
}) })
//PARSE .env FILE FROM DOTENV LIB
//npm i dotenv
//https://github.com/motdotla/dotenv
/**@param {Buffer} src */
const loadFromDotEnv = (src) => {
const LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg
const obj = {}
// Convert buffer to string
let lines = src.toString()
// Convert line breaks to same format
lines = lines.replace(/\r\n?/mg, '\n')
let match
while ((match = LINE.exec(lines)) != null) {
const key = match[1]
// Default undefined or null to empty string
let value = (match[2] || '')
// Remove whitespace
value = value.trim()
// Check if double quoted
const maybeQuote = value[0]
// Remove surrounding quotes
value = value.replace(/^(['"`])([\s\S]*)\1$/mg, '$2')
// Expand newlines if double quoted
if (maybeQuote === '"') {
value = value.replace(/\\n/g, '\n')
value = value.replace(/\\r/g, '\r')
}
// Add to object
obj[key] = value
}
process.env.TOKEN = obj.TOKEN
}
//LOGIN SYSTEM //LOGIN SYSTEM
const token = config.token.fromENV ? process.env.TOKEN : config.token.value if (config.token.fromENV){
client.login(token) loadFromDotEnv(fs.readFileSync(".env"))
client.login(process.env.TOKEN)
}else{
client.login(config.token.value)
}
this.errorLog.log("debug","login with token") this.errorLog.log("debug","login with token")
+79 -79
View File
@@ -1,43 +1,43 @@
{ {
"_CREDITS":"ChilledBroke#9986 & M4#5882", "_CREDITS":"deqressing",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors": { "errors": {
"missingArgsTitle": "قيمة غير صالحة!", "missingArgsTitle": "قيمة غير صالحة!",
"missingArgsDescription": "قيمة مفقودة", "missingArgsDescription": "قيمة مفقودة",
"noPermsTitle": "ليس لديك برمشنات !", "noPermsTitle": "ليس لديك برمشنات !",
"noPermsDescription": "أنت بحاجة الى برمشن `ADMINISTRATOR` او أن تكون في قائمة المسموح بهم!", "noPermsDescription": "أنت بحاجة الى برمشن `ADMINISTRATOR` او أن تكون في قائمة المسموح بهم!",
"noPermsDelete": "فقط الإداريين يمكنهم حذف التكت!", "noPermsDelete": "فقط الإداريين يمكنهم حذف التيكت!",
"chooseFromListTitle": "Invalid ID", "chooseFromListTitle": "الايدي غير صحيح!",
"chooseFromListDescription": "قم بأختيار أحد من الأيديات من الأسفل:", "chooseFromListDescription": "قم بأختيار أحد من الأيديات من الأسفل:",
"boterror": "خلل في البوت !", "boterror": "خلل في البوت !",
"notInTicketTitle": "انت لست في تكت!", "notInTicketTitle": "انت لست في تكت!",
"notInTicketDescription": "هذا الأمر لا يعمل خارج التكت!", "notInTicketDescription": "هذا الأمر لا يعمل خارج التيكت!",
"ticketDoesntExist": "هذا التكت لم يعد فعال!", "ticketDoesntExist": "هذا التيكت لم يعد فعال!",
"roleDoesntExist": "خطاً ,لم تعد الرتبة موجوده!", "roleDoesntExist": "خطاً ,لم تعد الرتبة موجوده!",
"anotherOption": "هذا الخيار ليس التكت و لكنه شيء أخر!", "anotherOption": "هذا الخيار ليس التيكت و لكنه شيء أخر!",
"maxAmountTitle": "خطأ , تم الوصول الى الحد الأقصى!", "maxAmountTitle": "خطأ , تم الوصول الى الحد الأقصى!",
"maxAmountDescription": "لقد وصلت الى الحد الأقصى لعدد التكتات المسموحة بها!\nSo لا يمكنك فتح واحدة أخرى!", "maxAmountDescription": "لقد وصلت الى الحد الأقصى لعدد التيكتات المسموحة بها!\nSo لا يمكنك فتح واحدة أخرى!",
"somethingWentWrong": "**هناك خطاً!**\nأعد المحاولة لاحقاً!" "somethingWentWrong": "**هناك خطاً!**\nأعد المحاولة لاحقاً!"
}, },
"commands": { "commands": {
"userAddedTitle": "تم أضافة {0} من المستخدمين في التكت!", "userAddedTitle": "تم أضافة {0} من المستخدمين في التيكت!",
"userRemovedTitle": "تم أزالة {0} من المستخدمين من التكت!", "userRemovedTitle": "تم أزالة {0} من المستخدمين من التيكت!",
"renameTitle": "تم تغيير أسم التكت الى {0}!", "renameTitle": "تم تغيير أسم التيكت الى {0}!",
"closeTitle": "تم أغلاق التكت!", "closeTitle": "تم أغلاق التيكت!",
"deleteTitle": " جاري حذف التكت...", "deleteTitle": " جاري حذف التيكت...",
"reopenTitle": "إعادة فتح التكت!", "reopenTitle": "إعادة فتح التيكت!",
"claimTitle":"This ticket is now claimed to {0}", "claimTitle":"تم تعيين التيكت الى {0}",
"unclaimTitle":"This ticket isn't claimed anymore!", "unclaimTitle":"هذا التيكت لم يتم تعيينه لاحد",
"changeTitle":"Changed ticket type to {0}!", "changeTitle":"!تم تغيير نوع التيكت الى {0}",
"statsTitle":"Here are the stats for {0}!", "statsTitle":"ها هي احصائيات {0}",
"autocloseTitle":"This ticket will be closed automatically after {0}!", "autocloseTitle":"سيتم اغلاق التيكت تلقائيا في {0}",
"autocloseRejectTitle":"This ticket will no longer be closed automatically!", "autocloseRejectTitle":"تم الغاء اغلاق التيكت تلقائيا",
"autocloseWarn":"This only affects inactive tickets!", "autocloseWarn":"هذا يؤثر فقط على التذاكر الغير نشطة",
"goToTicket":"go to ticket", "goToTicket":"الذهاب الى التيكت",
"ticketWarning": "هذا الأمبد موجود بالفعل في الرسالة بالأسفل!", "ticketWarning": "هذا الأمبد موجود بالفعل في الرسالة بالأسفل!",
"maxTicketWarning": "**تحذير:** _يمكنك فقط فتح {0} تكت في الوقت!_" "maxTicketWarning": "**تحذير:** _يمكنك فقط فتح {0} تكت في الوقت!_"
}, },
@@ -47,89 +47,89 @@
"header2": "**قم بكتابة أمر `/new` او `/ticket` لفتح تكت!**\n\n", "header2": "**قم بكتابة أمر `/new` او `/ticket` لفتح تكت!**\n\n",
"msgCmd": "أنشاء أيمبد مع الأزرار. (الأداريين فقط)", "msgCmd": "أنشاء أيمبد مع الأزرار. (الأداريين فقط)",
"renameCmd": "إعادة تسمية التكت. (بدون مسافات)", "renameCmd": "إعادة تسمية التيكت. (بدون مسافات)",
"closeCmd": "أغلاق التكت.", "closeCmd": "أغلاق التيكت.",
"deleteCmd": "حذف التكت.", "deleteCmd": "حذف التيكت.",
"addCmd": "إضافة مستخدم الى التكت.", "addCmd": "إضافة مستخدم الى التيكت.",
"removeCmd": "إزالة مستخدم من التكت.", "removeCmd": "إزالة مستخدم من التيكت.",
"reopenCmd": "إعادة فتح تكت بعد إغلاقة.", "reopenCmd": "إعادة فتح تكت بعد إغلاقة.",
"changeCmd":"Change ticket type.", "changeCmd":"تغيير نوع التيكت.",
"claimCmd":"Claim a ticket.", "claimCmd":"تعيينك لتيكت معين.",
"unclaimCmd":"Unclaim a ticket.", "unclaimCmd":"الغاء التغيين لتيكت معين",
"statsCmd":"View ticket stats.", "statsCmd":"اضهار احصائيات التيكت",
"autocloseCmd":"Set timer to automatically close ticket" "autocloseCmd":"قم بضبط مؤقت لاغلاق التيكت تلقائياً"
}, },
"buttons": { "buttons": {
"close": "إغلاق التكت", "close": "إغلاق التيكت",
"delete": "حذف التكت", "delete": "حذف التيكت",
"reopen": "إعادة فتح التكت", "reopen": "إعادة فتح التيكت",
"closeWithReason":"close with reason" "closeWithReason":"اغلاق مع سبب"
}, },
"messages": { "messages": {
"closedDescription": "فقط الأداريين يمكنهم التحدث في هذا التكت الأن!\n\n*أضغط على الزر بالأسفل لحذف التكت او إعادة فتحة مجدداً!*", "closedDescription": "فقط الأداريين يمكنهم التحدث في هذا التيكت الأن!\n\n*أضغط على الزر بالأسفل لحذف التيكت او إعادة فتحة مجدداً!*",
"createdTitle": "تم إنشاء تكت!", "createdTitle": "تم إنشاء تكت!",
"createdDescription": "تم أنشاء تكت , قم بأنتظار الدعم في الطريق!", "createdDescription": "تم أنشاء تكت , قم بأنتظار الدعم في الطريق!",
"newTicketDmTitle": "تكت جديد!", "newTicketDmTitle": "تكت جديد!",
"closedTicketDmTitle": "تم إغلاق التكت!", "closedTicketDmTitle": "تم إغلاق التيكت!",
"deletedTicketDmTitle": "تم حذف التكت!", "deletedTicketDmTitle": "تم حذف التيكت!",
"closedTicketDmDescription": "تم أغلاق تذكرتك من قبل إداري", "closedTicketDmDescription": "تم أغلاق تذكرتك من قبل إداري",
"deletedTicketDmDescription": "تم حذف تذكرتك من قبل إداري!", "deletedTicketDmDescription": "تم حذف تذكرتك من قبل إداري!",
"reopenTicketDmTitle": "تم إعادة فتح تذكرتك!", "reopenTicketDmTitle": "تم إعادة فتح تذكرتك!",
"reopenTicketDmDescription": "تم إعادة فتح التكت!", "reopenTicketDmDescription": "تم إعادة فتح التيكت!",
"chooseCategory": "أختر الكتقاجوري:", "chooseCategory": "أختر الكتقاجوري:",
"gettingdeleted": "يتم حذف التكت...", "gettingdeleted": "يتم حذف التيكت...",
"none": "لا يوجد", "none": "لا يوجد",
"reason": "سبب", "reason": "سبب",
"createdat":"created at", "createdat":"تم الانشاء في",
"openedby":"opened by", "openedby":"تم الانشاء من قبل",
"deletedby":"deleted by", "deletedby":"تم الحذف من قبل",
"closedby":"closed by", "closedby":"تم الاغلاق من قبل",
"modalreason":"What is the reason for closing this ticket?", "modalreason":"ماهو سببك لاغلاق التيكت؟",
"chooseATicket": "Choose a ticket" "chooseATicket": "اختار تيكت معين"
}, },
"transcripts":{ "transcripts":{
"title":"Transcript", "title":"سجل",
"processed":"This transcript is being processed", "processed":"يتم معالجة هذا السجل...",
"wait":"Please wait!", "wait":"فضلا انتظر",
"estimated":"Estimated time", "estimated":"الوقت المتوقع",
"available":"The transcript is available here" "available":"تم انشاء السجل وهو متاح هنا"
}, },
"stats":{ "stats":{
"globalTitle":"Global Stats", "globalTitle":"احصائيات العامه",
"ticketTitle":"Ticket Stats for {0}", "ticketTitle":"احصائيات التيكت ل {0}",
"userTitle":"User Stats for {0}", "userTitle":"احصائيات المستخدم {0}",
"systemTitle":"System Stats", "systemTitle":"احصائيات السيستم",
"versionTitle":"Bot Version", "versionTitle":"نسخة البوت",
"ticketsCreated":"Tickets Created", "ticketsCreated":"التيكتس التي تمت انشاؤه",
"ticketsClosed":"Tickets Closed", "ticketsClosed":"التيكتس التي تمت اغلاقه",
"ticketsDeleted":"Tickets Deleted", "ticketsDeleted":"التيكتس التي تمت حذفه",
"ticketsReopened":"Tickets Reopened", "ticketsReopened":"التيكتس التي تمت العادة فتحه",
"ticketsAutoclosed":"Tickets Autoclosed", "ticketsAutoclosed":"التيكتس التي تمت اغلاقه تلقائيا",
"transcriptsCreated":"Transcripts Created", "transcriptsCreated":"السجلات التي تمت انشاؤه",
"startupDate":"Startup Date", "startupDate":"تم تشغيل البوت في",
"latestUpdate":"Latest Update", "latestUpdate":"اخر التحديثات",
"ticketCreatedOn":"Ticket Created On", "ticketCreatedOn":"تم انشاءالتيكت في",
"ticketCreatedBy":"Ticket Created By", "ticketCreatedBy":"تم انشاء التيكت من قبل",
"messagesSent":"Messages Sent", "messagesSent":"جميع الرسائل",
"status":"Status", "status":"الحالة",
"participants":"Participants", "participants":"المشاركون",
"role":"Role", "role":"الرانك",
"switches":{ "switches":{
"globalAdmin":"Global Admin", "globalAdmin":"ادمن عام",
"ticketAdmin":"Ticket Admin", "ticketAdmin":"ادمن تيكت",
"member":"Member", "member":"عضو",
"open":"Open", "open":"مفتوح",
"reopened":"Reopened", "reopened":"اعادة فتحه",
"closed":"Closed", "closed":"مغلق",
"autoclosed":"Autoclosed" "autoclosed":"مغلق تلقائياً"
}, },
"errorUserNotFound":"This user can't be found in the stats database!" "errorUserNotFound":"هذا المستخدم لم يتم العثور عليه في قاعدة بياناتنا!"
} }
} }
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"DJdj Development", "_CREDITS":"DJdj Development",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Invalid Arguments!", "missingArgsTitle":"Invalid Arguments!",
+21 -21
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"spyeye_", "_CREDITS":"spyeye_",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Neplatný Argument!", "missingArgsTitle":"Neplatný Argument!",
@@ -99,37 +99,37 @@
"available":"Záloha je uložena zde!" "available":"Záloha je uložena zde!"
}, },
"stats":{ "stats":{
"globalTitle":"Globalní statistiky", "globalTitle":"Globální statistiky",
"ticketTitle":"Statistiky ticketů pro {0}", "ticketTitle":"Ticket statistiky pro {0}",
"userTitle":"Statistiky uživatele {0}", "userTitle":"Uživatelské statistiky pro {0}",
"systemTitle":"Systémové statistiky", "systemTitle":"Sytstémov= statistiky",
"versionTitle":"Verze bota", "versionTitle":"Verze bota",
"ticketsCreated":"Ticket založen", "ticketsCreated":"Ticketů vytvořeno:",
"ticketsClosed":"Ticket uzavřen", "ticketsClosed":"Tickety zavřeno:",
"ticketsDeleted":"Ticket vymazán", "ticketsDeleted":"Ticketu smazáno:",
"ticketsReopened":"Ticket znovu otevřen", "ticketsReopened":"Ticketů znovuotevřených:",
"ticketsAutoclosed":"Ticket byl automaticky uzavřen", "ticketsAutoclosed":"Ticketů automaticky zavřeno:",
"transcriptsCreated":"Transcripty vytvořeny", "transcriptsCreated":"Záloh ticketů vytvořeno:",
"startupDate":"Datum spuštění", "startupDate":"Datum zapnutí",
"latestUpdate":"Poslední aktualizace", "latestUpdate":"Poslední aktualizace",
"ticketCreatedOn":"Ticket vytvořen dne", "ticketCreatedOn":"Ticket založen na",
"ticketCreatedBy":"Ticket vytvořil", "ticketCreatedBy":"Ticket vytvořil",
"messagesSent":"Zpráva odeslána", "messagesSent":"Zpráva poslána",
"status":"Status", "status":"Status",
"participants":"Účastníci", "participants":"Účastníci",
"role":"Role", "role":"Role",
"switches":{ "switches":{
"globalAdmin":"Global Admin", "globalAdmin":"Globální Admin",
"ticketAdmin":"Ticket Admin", "ticketAdmin":"Ticket Admin",
"member":"Uživatel", "member":"Člen",
"open":"Otevřít", "open":"Otevřený",
"reopened":"Znovu Otevřít", "reopened":"Znovuotevřený",
"closed":"Uzavřít", "closed":"Zavřený",
"autoclosed":"Automaticky uzavřen" "autoclosed":"Automaticky zavřený"
}, },
"errorUserNotFound":"Tento uživatel není v databázi statistik k nalezení!" "errorUserNotFound":"Tento uživatel nebyl nalezen v databázi statistik!"
} }
} }
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"the_gamer#5095", "_CREDITS":".the_gamer",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors": { "errors": {
"missingArgsTitle": "Ugyldigt Argument!", "missingArgsTitle": "Ugyldigt Argument!",
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"DJj123dj#1706", "_CREDITS":"djj123dj",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.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.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Invalid Arguments!", "missingArgsTitle":"Invalid Arguments!",
+88 -88
View File
@@ -1,135 +1,135 @@
{ {
"_CREDITS":"Sanke#6086", "_CREDITS":"tostam",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"Ce fichier est une traduction pour OpenTicket 3.5.0",
"errors":{ "errors":{
"missingArgsTitle":"Arguments invalides!", "missingArgsTitle":"Arguments invalides !",
"missingArgsDescription":"Argument manquant", "missingArgsDescription":"Argument manquant !",
"noPermsTitle":"Pas de permissions!", "noPermsTitle":"Tu n'as pas les permissions requises !",
"noPermsDescription":"Vous avez besoin de la permission `ADMINISTRATOR` ou être dans la liste des rôles autorisés!", "noPermsDescription":"Vous avez besoin de la permission `ADMINISTRATOR` ou être dans la liste des rôles autorisés !",
"noPermsDelete":"Seuls les administrateurs peuvent supprimer un ticket!", "noPermsDelete":"Seuls les staffs peuvent supprimer un ticket !",
"chooseFromListTitle":"Invalid ID", "chooseFromListTitle":"ID invalide !",
"chooseFromListDescription":"Choisissez l'un des identifiants ci-dessous:", "chooseFromListDescription":"Choisissez l'un des identifiants ci-dessous:",
"boterror":"Bot Error!", "boterror":"Erreur du bot !",
"notInTicketTitle":"Vous n'êtes pas dans un ticket!", "notInTicketTitle":"Vous n'êtes pas dans un ticket !",
"notInTicketDescription":"Cette commande ne fonctionne pas en dehors des tickets!", "notInTicketDescription":"Cette commande ne fonctionne pas en dehors des tickets !",
"ticketDoesntExist":"Ce ticket n'existe plus!", "ticketDoesntExist":"Ce ticket n'existe pas !",
"roleDoesntExist":"Ce rôle n'existe plus!", "roleDoesntExist":"Ce rôle n'existe pas !",
"anotherOption":"Cette option n'est pas un ticket mais un autre type!", "anotherOption":"Cette option n'est pas un ticket mais un autre type !",
"maxAmountTitle":"Montant maximum atteint!", "maxAmountTitle":"Montant maximum de ticket atteint !",
"maxAmountDescription":"Vous avez atteint le nombre maximum de tickets autorisés!\nVous ne pouvez donc pas en créer un nouveau!", "maxAmountDescription":"Vous avez atteint le nombre maximum de tickets autorisés !\nVous ne pouvez donc pas en créer un nouveau !",
"somethingWentWrong":"**Quelque chose s'est mal passé!**\nVeuillez réessayer une autre fois!" "somethingWentWrong":"**Quelque chose s'est mal passé !**\nVeuillez réessayer une autre fois !"
}, },
"commands":{ "commands":{
"userAddedTitle":"{0} a été ajouté à ce ticket!", "userAddedTitle":"{0} a été ajouté à ce ticket !",
"userRemovedTitle":"Supprimé {0} de ce ticket!", "userRemovedTitle":"{0} a été supprimé de ce ticket !",
"renameTitle":"Changement du nom en {0}!", "renameTitle":"Changement de nom du ticket en {0} !",
"closeTitle":"Fermé ce ticket!", "closeTitle":"Ticket fermé",
"deleteTitle":"Suppression de ce ticket...", "deleteTitle":"Suppression de ce ticket...",
"reopenTitle":"A rouvert ce ticket!", "reopenTitle":"Ticket réouvert",
"claimTitle":"Ce ticket est maintenant réclamé à {0}", "claimTitle":"Ce ticket est maintenant réclamé par {0}",
"unclaimTitle":"Ce ticket n'est pas réclamé!", "unclaimTitle":"Ce ticket n'est plus réclamé !",
"changeTitle":"Modification du type de ticket en {0}!", "changeTitle":"Modification du type de ticket en {0} !",
"statsTitle":"Voici les statistiques pour {0}!", "statsTitle":"Voici les statistiques pour {0} !",
"autocloseTitle":"Ce ticket sera automatiquement clôturé après {0}!", "autocloseTitle":"Ce ticket sera automatiquement clôturé après {0} !",
"autocloseRejectTitle":"Ce ticket ne sera plus clôturé automatiquement!", "autocloseRejectTitle":"Ce ticket ne sera plus clôturé automatiquement !",
"autocloseWarn":"Cela n'affecte que les tickets inactifs!", "autocloseWarn":"Cela n'affecte que les tickets inactifs !",
"goToTicket":"Aller au ticket", "goToTicket":"Aller au ticket",
"ticketWarning":"L'intégration est dans le message ci-dessous!", "ticketWarning":"L'intégration est dans le message ci-dessous !",
"maxTicketWarning":"**Attention :** _Vous ne pouvez créer que {0} ticket(s) à la fois !_" "maxTicketWarning":"**Attention :** _Vous ne pouvez créer seulement {0} ticket(s) à la fois !_"
}, },
"helpMenu":{ "helpMenu":{
"title":"Commandes disponibles :", "title":"Commandes disponibles :",
"header1":"**Allez à {0} pour créer un ticket !**\n\n", "header1":"**Allez à {0} pour créer un ticket !**\n\n",
"header2":"**Exécutez la commande `/new` ou `/ticket` pour créer un ticket !**\n\n", "header2":"**Exécutez la commande `/new` ou `/ticket` pour créer un ticket !**\n\n",
"msgCmd":"Faire apparaître une intégration avec des boutons. (administrateurs uniquement)", "msgCmd":"Faire apparaître une intégration avec des boutons (administrateurs uniquement)",
"renameCmd":"Renommer un ticket. (sans espaces)", "renameCmd":"Renommer un ticket (sans espaces)",
"closeCmd":"Fermer un ticket.", "closeCmd":"Fermer un ticket",
"deleteCmd":"Supprimer un billet.", "deleteCmd":"Supprimer un ticket",
"addCmd":"Ajouter un utilisateur au ticket.", "addCmd":"Ajouter un utilisateur au ticket",
"removeCmd":"Supprimer un utilisateur du ticket.", "removeCmd":"Supprimer un utilisateur du ticket",
"reopenCmd":"Rouvrir un ticket après sa clôture.", "reopenCmd":"Réouvrir un ticket après sa clôture",
"changeCmd":"Changer le type de ticket.", "changeCmd":"Changer le type de ticket",
"claimCmd":"Réclamer un billet", "claimCmd":"Réclamer un ticket",
"unclaimCmd":"Annuler la réclamation d'un ticket.", "unclaimCmd":"Annuler la réclamation d'un ticket",
"statsCmd":"Afficher les statistiques des tickets.", "statsCmd":"Afficher les statistiques des tickets",
"autocloseCmd":"Définir une minuterie pour fermer automatiquement le ticket" "autocloseCmd":"Définir une minuterie pour fermer automatiquement le ticket"
}, },
"buttons":{ "buttons":{
"close":"Fermer le ticket", "close":"Fermer le ticket",
"delete":"Supprimer le billet", "delete":"Supprimer le ticket",
"reopen":"Billet de réouverture", "reopen":"Réouvrir le ticket",
"closeWithReason":"fermer avec une raison" "closeWithReason":"Fermer avec une raison"
}, },
"messages":{ "messages":{
"closedDescription":"Seuls les administrateurs peuvent parler dans ce ticket maintenant !\n\n*Cliquez sur le bouton ci-dessous pour supprimer ou rouvrir ce ticket !*", "closedDescription":"Seuls les administrateurs peuvent parler dans ce ticket maintenant !\n\n*Cliquez sur le bouton ci-dessous pour supprimer ou réouvrir ce ticket !*",
"createdTitle":"Ticket créé !", "createdTitle":"Ticket créé !",
"createdDescription":"Votre ticket est créé, vous pouvez le détecter par un ping !", "createdDescription":"Votre ticket est créé, vous pouvez le détecter par un ping !",
"newTicketDmTitle":"Nouveau billet!", "newTicketDmTitle":"Nouveau ticket !",
"closedTicketDmTitle":"Billet fermé!", "closedTicketDmTitle":"Ticket fermé !",
"deletedTicketDmTitle":"Billet supprimé !", "deletedTicketDmTitle":"Ticket supprimé !",
"closedTicketDmDescription":"Votre billet est fermé !", "closedTicketDmDescription":"Votre ticket est fermé !",
"deletedTicketDmDescription":"Votre billet est supprimé !", "deletedTicketDmDescription":"Votre ticket est supprimé !",
"reopenTicketDmTitle":"Billet rouvert!", "reopenTicketDmTitle":"Ticket réouvert !",
"reopenTicketDmDescription":"Votre billet est rouvert !", "reopenTicketDmDescription":"Votre ticket est réouvert !",
"chooseCategory":"choisissez une catégorie:", "chooseCategory":"Choisissez une catégorie:",
"gettingdeleted":"Le ticket est en cours de suppression...", "gettingdeleted":"Le ticket est en cours de suppression...",
"none":"rien", "none":"Rien",
"reason":"raison", "reason":"Raison",
"createdat":"Créé à", "createdat":"Créé à",
"openedby":"Ouvert par", "openedby":"Ouvert par",
"deletedby":"supprimé par", "deletedby":"Supprimé par",
"closedby":"fermé par", "closedby":"Fermé par",
"modalreason":"Qu’elle est la raison pour fermer ce ticket?", "modalreason":"Qu'elle est la raison pour fermer ce ticket ?",
"chooseATicket": "Choisir un ticket" "chooseATicket": "Choisir un ticket"
}, },
"transcripts":{ "transcripts":{
"title":"Transcript", "title":"Transcript",
"processed":"Cette transcript est en cours de traitement", "processed":"Cette transcript est en cours de traitement",
"wait":"S'il vous plait, attendez...", "wait":"S'il vous plait, attendez...",
"estimated":"Temps estime:", "estimated":"Temps estimé:",
"available":"La transcript est disponible ici" "available":"La transcript est disponible ici"
}, },
"stats":{ "stats":{
"globalTitle":"Global Stats", "globalTitle":"Statistiques du serveur",
"ticketTitle":"Ticket Stats for {0}", "ticketTitle":"Statistiques des tickets pour {0}",
"userTitle":"User Stats for {0}", "userTitle":"Statistiques des utilisateurs pour {0}",
"systemTitle":"System Stats", "systemTitle":"Statistiques du système",
"versionTitle":"Bot Version", "versionTitle":"Version du bot",
"ticketsCreated":"Tickets Created", "ticketsCreated":"Tickets créés",
"ticketsClosed":"Tickets Closed", "ticketsClosed":"Tickets fermés",
"ticketsDeleted":"Tickets Deleted", "ticketsDeleted":"Tickets supprimés",
"ticketsReopened":"Tickets Reopened", "ticketsReopened":"Tickets réouverts",
"ticketsAutoclosed":"Tickets Autoclosed", "ticketsAutoclosed":"Tickets fermés automatiquement",
"transcriptsCreated":"Transcripts Created", "transcriptsCreated":"Transcriptions créées",
"startupDate":"Startup Date", "startupDate":"Date de démarrage du bot",
"latestUpdate":"Latest Update", "latestUpdate":"Dernière mise à jour",
"ticketCreatedOn":"Ticket Created On", "ticketCreatedOn":"Ticket créé le",
"ticketCreatedBy":"Ticket Created By", "ticketCreatedBy":"Ticket créé par",
"messagesSent":"Messages Sent", "messagesSent":"Messages envoyés",
"status":"Status", "status":"Status",
"participants":"Participants", "participants":"Participants",
"role":"Role", "role":"Role",
"switches":{ "switches":{
"globalAdmin":"Global Admin", "globalAdmin":"Administrateur global",
"ticketAdmin":"Ticket Admin", "ticketAdmin":"Administrateur des tickets",
"member":"Member", "member":"Membre",
"open":"Open", "open":"Ouvrir",
"reopened":"Reopened", "reopened":"Réouvert",
"closed":"Closed", "closed":"Fermé",
"autoclosed":"Autoclosed" "autoclosed":"Fermé automatiquement"
}, },
"errorUserNotFound":"This user can't be found in the stats database!" "errorUserNotFound":"Cet utilisateur est introuvable dans la base de données de statistiques !"
} }
} }
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"david.#8276 ", "_CREDITS":"david.3",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.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.5.0", "_INFO":"This file is a translation for open ticket 3.5.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.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Hibás paraméterek!", "missingArgsTitle":"Hibás paraméterek!",
+26 -26
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"erxg", "_CREDITS":"erxg",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Argumen tidak valid!", "missingArgsTitle":"Argumen tidak valid!",
@@ -99,37 +99,37 @@
"available":"Transkrip tersedia di sini" "available":"Transkrip tersedia di sini"
}, },
"stats":{ "stats":{
"globalTitle":"Global Stats", "globalTitle":"Statistik Global",
"ticketTitle":"Ticket Stats for {0}", "ticketTitle":"Status Tiket Untuk {0}",
"userTitle":"User Stats for {0}", "userTitle":"Status Pengguna Untuk {0}",
"systemTitle":"System Stats", "systemTitle":"Status Sistem",
"versionTitle":"Bot Version", "versionTitle":"Versi Robot",
"ticketsCreated":"Tickets Created", "ticketsCreated":"Tiket Dibuat",
"ticketsClosed":"Tickets Closed", "ticketsClosed":"Tiket Ditutup",
"ticketsDeleted":"Tickets Deleted", "ticketsDeleted":"Tiket Dihapus",
"ticketsReopened":"Tickets Reopened", "ticketsReopened":"Tiket Dibuka Kembali",
"ticketsAutoclosed":"Tickets Autoclosed", "ticketsAutoclosed":"Tiket Ditutup Otomatis",
"transcriptsCreated":"Transcripts Created", "transcriptsCreated":"Transkrip Dibuat",
"startupDate":"Startup Date", "startupDate":"Tanggal Mulai",
"latestUpdate":"Latest Update", "latestUpdate":"Pembaruan Terbaru",
"ticketCreatedOn":"Ticket Created On", "ticketCreatedOn":"Tiket Dibuat Pada",
"ticketCreatedBy":"Ticket Created By", "ticketCreatedBy":"Tiket Dibuat Oleh",
"messagesSent":"Messages Sent", "messagesSent":"Pesan Terkirim",
"status":"Status", "status":"Status",
"participants":"Participants", "participants":"Partisipan",
"role":"Role", "role":"Peran",
"switches":{ "switches":{
"globalAdmin":"Global Admin", "globalAdmin":"Admin Global",
"ticketAdmin":"Ticket Admin", "ticketAdmin":"Ticket Admin",
"member":"Member", "member":"Anggota",
"open":"Open", "open":"Buka",
"reopened":"Reopened", "reopened":"Dibuka kembali",
"closed":"Closed", "closed":"Ditutup",
"autoclosed":"Autoclosed" "autoclosed":"Ditutup Otomatis"
}, },
"errorUserNotFound":"This user can't be found in the stats database!" "errorUserNotFound":"Pengguna ini tidak dapat ditemukan dalam basis data statistik!"
} }
} }
+31 -31
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Maurizio#0268", "_CREDITS":"maurizio26",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Argomenti non validi!", "missingArgsTitle":"Argomenti non validi!",
@@ -98,38 +98,38 @@
"estimated":"Tempo estimato", "estimated":"Tempo estimato",
"available":"La trascrizione è disponibile qui" "available":"La trascrizione è disponibile qui"
}, },
"stats":{ "stats": {
"globalTitle":"Global Stats", "globalTitle": "Statistiche Globali",
"ticketTitle":"Ticket Stats for {0}", "ticketTitle": "Statistiche Ticket per {0}",
"userTitle":"User Stats for {0}", "userTitle": "Statistiche Utenti per {0}",
"systemTitle":"System Stats", "systemTitle": "Sistema Statistiche",
"versionTitle":"Bot Version", "versionTitle": "Versione Bot",
"ticketsCreated":"Tickets Created", "ticketsCreated": "Tickets Creato",
"ticketsClosed":"Tickets Closed", "ticketsClosed": "Tickets Chiuso",
"ticketsDeleted":"Tickets Deleted", "ticketsDeleted": "Tickets Eliminato",
"ticketsReopened":"Tickets Reopened", "ticketsReopened": "Tickets Riaperto",
"ticketsAutoclosed":"Tickets Autoclosed", "ticketsAutoclosed": "Tickets Chiuso Automaticamente",
"transcriptsCreated":"Transcripts Created", "transcriptsCreated": "Transcrizione Creata",
"startupDate":"Startup Date", "startupDate": "Data Inizio",
"latestUpdate":"Latest Update", "latestUpdate": "Ultimo Update",
"ticketCreatedOn":"Ticket Created On", "ticketCreatedOn": "Ticket Creato Su",
"ticketCreatedBy":"Ticket Created By", "ticketCreatedBy": "Ticket Creato Da",
"messagesSent":"Messages Sent", "messagesSent": "Messaggi Inviati",
"status":"Status", "status": "Stato",
"participants":"Participants", "participants": "Partecipanti",
"role":"Role", "role": "Ruolo",
"switches":{ "switches": {
"globalAdmin":"Global Admin", "globalAdmin": "Amministratore Globale",
"ticketAdmin":"Ticket Admin", "ticketAdmin": "Amministratore Ticket",
"member":"Member", "member": "Membro",
"open":"Open", "open": "Aperto",
"reopened":"Reopened", "reopened": "Riaperto",
"closed":"Closed", "closed": "Chiuso",
"autoclosed":"Autoclosed" "autoclosed": "Chiuso Automaticamente"
}, },
"errorUserNotFound":"This user can't be found in the stats database!" "errorUserNotFound": "Questo utente non può essere trovato nel database delle statistiche!"
} }
} }
+135
View File
@@ -0,0 +1,135 @@
{
"_CREDITS":"raze.hama",
"_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{
"missingArgsTitle":"ئه‌وه‌ی هه‌ڵتبژاردوه‌ نادروسته‌",
"missingArgsDescription":"ئه‌وه‌ی هه‌ڵتبژاردوه‌ ناردوسته‌",
"noPermsTitle":"هیچ مۆڵەتێک نییە!",
"noPermsDescription":"پێویستت بە مۆڵەتی ئه‌دمین ستره‌یته‌ر هەیە یان ده‌بێت لە لیستی ڕۆڵە ڕێگەپێدراوەکاندا بیت!",
"noPermsDelete":"تەنها ئەدمینەکان دەتوانن بلیت بسڕنەوە!",
"chooseFromListTitle":"ناسنامەی نادروست",
"chooseFromListDescription":"یەکێک لەم ناسنامانه‌ی خوارەوە هەڵبژێرە:",
"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":"**Go to {0} to create a ticket!**\n\n",
"header2":"**فەرمانەکە جێبەجێ بکە `/new` or `/ticket` بۆ دروستکردنی بلیت!**\n\n",
"msgCmd":"(تەنها ئەدمینەکان)",
"renameCmd":"ناوی بلیته‌كه‌ بگۆره‌",
"closeCmd":"بلیتێک دابخە.",
"deleteCmd":"بلیتێک بسڕەوە.",
"addCmd":"بەکارهێنەرێک زیاد بکە بۆ بلیتەکە.",
"removeCmd":"بەکارهێنەرێک لە بلیتەکە دەربهێنە.",
"reopenCmd":"دووبارە بلیتێک بکەرەوە دوای داخستنی.",
"changeCmd":"گۆڕینی جۆری بلیت.",
"claimCmd":"داوای بلیتێک بکە.",
"unclaimCmd":"داوای بلیتێک وەربگرە.",
"statsCmd":"بینینی ئاماری بلیتەکان.",
"autocloseCmd":"تایمەر دابنێ بۆ ئەوەی بلیتەکە بە شێوەیەکی ئۆتۆماتیکی دابخات"
},
"buttons":{
"close":"داخستنی بلیت",
"delete":"سڕینەوەی بلیت",
"reopen":"دوباره‌ بلیته‌كه‌ بكه‌ره‌وه‌",
"closeWithReason":"هۆكارێك بنوسه‌ بۆ داخستنی بلیته‌كه‌"
},
"messages":{
"closedDescription":"ئێستا تەنها ئەدمینەکان دەتوانن لەم بلیتەدا قسە بکەن!\n\n*بۆ سڕینەوە یان دووبارە کردنەوەی ئەم بلیتە کلیک لەسەر دوگمەی خوارەوە بکە!*",
"createdTitle":"بلیت دروستکراوە!",
"createdDescription":"بلیتەکەت دروست کراوە، دەتوانیت بە پینگێک دەستنیشان بکەیت!",
"newTicketDmTitle":"بلیتی نوێ!",
"closedTicketDmTitle":"بلیت داخراوە!",
"deletedTicketDmTitle":"بلیت سڕاوەتەوە!",
"closedTicketDmDescription":"بلیتەکەت داخراوە!",
"deletedTicketDmDescription":"بلیتەکەت سڕاوەتەوە!",
"reopenTicketDmTitle":"بلیت دووبارە کرایەوە!",
"reopenTicketDmDescription":"بلیتەکەت دەکرێتەوە!",
"chooseCategory":"پۆلێک هەڵبژێرە:",
"gettingdeleted":"بلیتەکە خەریکە دەسڕدرێتەوە...",
"none":"هیچ",
"reason":"هۆكار",
"createdat":"دروستکراوە لە",
"openedby":"لەلایەن...",
"deletedby":"سڕاوەتەوە لەلایەن",
"closedby":"داخراوە لەلایەن",
"modalreason":"هۆکاری داخستنی ئەم بلیتە چییە؟",
"chooseATicket": "بلیتێک هەڵبژێرە"
},
"transcripts":{
"title":"گواستنه‌وه‌",
"processed":"ئەم گواستنه‌وه‌یه‌ خەریکە پرۆسێس دەکرێت",
"wait":"تكایه‌ چاوه‌ڕێبه‌!",
"estimated":"کاتی مەزەندەکراو",
"available":" گواستنه‌وه‌كه‌ لێرەدا بەردەستە"
},
"stats":{
"globalTitle":"ئاماری جیهانی",
"ticketTitle":"ئاماری بلیت بۆ {0}",
"userTitle":"ئاماری بەکارهێنەر بۆ {0}",
"systemTitle":"ئاماری سیستەم",
"versionTitle":"وەشانی بۆت",
"ticketsCreated":"بلیتەکان دروستکراون",
"ticketsClosed":"بلیتەکان داخراون",
"ticketsDeleted":"بلیتەکان سڕاونەتەوە",
"ticketsReopened":"بلیتەکان کرایەوە",
"ticketsAutoclosed":"بلیتەکان بە شێوەیەکی ئۆتۆماتیکی داخراون",
"transcriptsCreated":"گواستنه‌وه‌ دروستکراون",
"startupDate":"بەرواری دەستپێکردن",
"latestUpdate":"نوێترین نوێکردنەوە",
"ticketCreatedOn":"بلیت دروستکراوە لەسەر",
"ticketCreatedBy":"بلیت دروستکراوە لەلایەن...",
"messagesSent":"پەیامەکان نێردراوە",
"status":"دۆخ",
"participants":"بەشداربووان",
"role":"ئەرک",
"switches":{
"globalAdmin":"بەڕێوەبەری جیهانی",
"ticketAdmin":"ئەدمینی بلیتەکان",
"member":"ئەندام",
"open":"کردنەوە",
"reopened":"دووبارە کرایەوە",
"closed":"داخراوە",
"autoclosed":"ئۆتۆماتیکی داخراوە"
},
"errorUserNotFound":"ئەم بەکارهێنەرە لە بنکەدراوەی ئامارەکاندا نادۆزرێتەوە!"
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"NoOneNook#0266", "_CREDITS":"noonenook",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Ugyldige argumenter!", "missingArgsTitle":"Ugyldige argumenter!",
+135
View File
@@ -0,0 +1,135 @@
{
"_CREDITS":"sasanwm",
"_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{
"missingArgsTitle":"آرگومان‌های گم شده!",
"missingArgsDescription":"آرگومان گم شده",
"noPermsTitle":"شما دسترسی نداری!",
"noPermsDescription":"شما نیاز به دسترسی `ADMINISTRATOR` دارید یا باید در لیست رول‌های مجاز باشید!",
"noPermsDelete":"فقط ادمین ها میتونند یک تیکت رو حذف کنند!",
"chooseFromListTitle":"ایدی نامعتبر",
"chooseFromListDescription":"یکی از ایدی‌های زیر رو انتخاب کن:",
"boterror":"خطای ربات!",
"notInTicketTitle":"شما در یک تیکت نیستید!",
"notInTicketDescription":"این کامند خارج از تیکت‌ها کار نمیکند!",
"ticketDoesntExist":"این تیکت دیگه وجود نداره!",
"roleDoesntExist":"این رول دیگه وجود نداره!",
"anotherOption":"این گزینه یک تیکت نیست بلکه نوع دیگه ای هست!",
"maxAmountTitle":"حداکثر مقدار رسیده هست!",
"maxAmountDescription":"شما به حداکثر تعداد تیکت‌های مجاز رسیدید!\nبنابراین نمیتونید یکی دیگه ایجاد کنید!",
"somethingWentWrong":"**مشکلی پیش اومد!**\nدوباره تلاش کن!"
},
"commands":{
"userAddedTitle":"{0} به این تیکت اضافه شد!",
"userRemovedTitle":"{0} از این تیکت حذف شد!",
"renameTitle":"اسم به {0} تغییر یافت!",
"closeTitle":"این تیکت بسته شد!",
"deleteTitle":"حذف این تیکت...",
"reopenTitle":"این تیکت دوباره باز شد!",
"claimTitle":"این تیکت به {0} اختصاص یافته است",
"unclaimTitle":"این تیکت دیگه به اختصاص یک یوزر نمیباشد!",
"changeTitle":"نوع تیکت به {0} تغییر یافت!",
"statsTitle":"آمار اینجا {0} هست!",
"autocloseTitle":"این تیکت به طور خودکار بعد از {0} بسته خواهد شد!",
"autocloseRejectTitle":"این تیکت دیگه به طور خودکار بسته نخواهد شد!",
"autocloseWarn":"این فقط بر روی تیکت‌های غیرفعال تأثیر میزاره!",
"goToTicket":"رفتن به تیکت",
"ticketWarning":"امبد در پیام زیر هست!",
"maxTicketWarning":"**هشدار:** _شما فقط میتوانید {0} تیکت رو در همان زمان ایجاد کنید!_"
},
"helpMenu":{
"title":"کامند های موجود:",
"header1":"**به {0} براید تا یک تیکت ایجاد کنید!**\n\n",
"header2":"**کامند `/new` یا `/ticket` رو اجرو کن تا یک تیکت ایجاد کنید!**\n\n",
"msgCmd":"فرستادن یک امبد با دکمه ها (فقط ادمین ها)",
"renameCmd":"اسم یک تیکت رو تغییر دهید. (بدون فاصله)",
"closeCmd":"بستن یک تیکت.",
"deleteCmd":"حذف یک تیکت.",
"addCmd":"اضافه کردن یک یوزر به تیکت.",
"removeCmd":"حذف کردن یک یوزر از تیکت.",
"reopenCmd":"باز کردن یک تیکت پس از بسته شدن.",
"changeCmd":"تغییر دادن نوع تیکت.",
"claimCmd":"به اختیار گرفتن یک تیکت.",
"unclaimCmd":"خارج کردن یک تیکت از اختیار خود.",
"statsCmd":"مشاهده کردن امار یک تیکت.",
"autocloseCmd":"تنظیم زمان بندی برای بسته شدن خودکار تیکت. "
},
"buttons":{
"close":"بستن تیکت",
"delete":"حذف تیکت",
"reopen":"بازکردن مجدد تیکت",
"closeWithReason":"بستن با دلیل"
},
"messages":{
"closedDescription":"فقط ادمین‌ها میتواننند در این تیکت صحبت کنند!\n\n*برای حذف یا بازکردن این تیکت، روی دکمه زیر کلیک کن!*",
"createdTitle":"تیکت ایجاد شد!",
"createdDescription":"تیکت شما ایجاد شده، توی تیکت منشن شدی!",
"newTicketDmTitle":"تیکت جدید!",
"closedTicketDmTitle":"تیکت بسته شد!",
"deletedTicketDmTitle":"تیکت حذف شد!",
"closedTicketDmDescription":"تیکت شما بسته شده هست!",
"deletedTicketDmDescription":"تیکت شما حذف شده هست!",
"reopenTicketDmTitle":"تیکت دوباره باز شد!",
"reopenTicketDmDescription":"تیکت شما دوباره باز شده هست!",
"chooseCategory":"یک دسته بندی رو انتخاب کن:",
"gettingdeleted":"تیکت در حال حذف شدن هست...",
"none":"هیچ",
"reason":"دلیل",
"createdat":"ایجاد شده در",
"openedby":"باز شده توسط",
"deletedby":"حذف شده توسط",
"closedby":"بسته شده توسط",
"modalreason":"دلیل بستن این تیکت چیه؟",
"chooseATicket": "یک تیکت رو انتخاب کن"
},
"transcripts":{
"title":"گزارش",
"processed":"این گزارش در حال پردازش هست",
"wait":"لطفاً صبر کن!",
"estimated":"زمان تقریبی",
"available":"گزارش در دسترس هست در اینجا"
},
"stats":{
"globalTitle":"آمار گلوبال",
"ticketTitle":"آمار تیکت برای {0}",
"userTitle":"آمار یوزر برای {0}",
"systemTitle":"آمار سیستم",
"versionTitle":"ورژن ربات",
"ticketsCreated":"تیکت‌های ایجاد شده",
"ticketsClosed":"تیکت‌های بسته شده",
"ticketsDeleted":"تیکت‌های حذف شده",
"ticketsReopened":"تیکت‌های دوباره باز شده",
"ticketsAutoclosed":"تیکت‌های به طور خودکار بسته شده",
"transcriptsCreated":"گزارش‌های ایجاد شده",
"startupDate":"تاریخ راه‌اندازی‌",
"latestUpdate":"آخرین بروزرسانی",
"ticketCreatedOn":"تیکت ایجاد شده در",
"ticketCreatedBy":"تیکت ایجاد شده توسط",
"messagesSent":"پیام‌های ارسال شده",
"status":"وضعیت",
"participants":"مشارکت‌کنندگان",
"role":"رول",
"switches":{
"globalAdmin":"ادمین گلوبال",
"ticketAdmin":"ادمین تیکت",
"member":"ممبر",
"open":"باز",
"reopened":"دوباره باز شده",
"closed":"بسته شده",
"autoclosed":"بسته شده به طور خودکار"
},
"errorUserNotFound":"این یوزر در دیتابیس آمار پیدا نمیشه!"
}
}
+28 -28
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"MKevas#8311", "_CREDITS":"mkevas",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Nieprawidłowe argumenty!", "missingArgsTitle":"Nieprawidłowe argumenty!",
@@ -99,37 +99,37 @@
"available":"Transkrypcja jest dostępna tutaj" "available":"Transkrypcja jest dostępna tutaj"
}, },
"stats":{ "stats":{
"globalTitle":"Global Stats", "globalTitle":"Globalne Statystyki",
"ticketTitle":"Ticket Stats for {0}", "ticketTitle":"Statystyki biletów dla {0}",
"userTitle":"User Stats for {0}", "userTitle":"Statystyki użytkowników dla {0}",
"systemTitle":"System Stats", "systemTitle":"Statystyki systemu",
"versionTitle":"Bot Version", "versionTitle":"Wersja bota",
"ticketsCreated":"Tickets Created", "ticketsCreated":"Bilety stworzone",
"ticketsClosed":"Tickets Closed", "ticketsClosed":"Bilety zamknięte",
"ticketsDeleted":"Tickets Deleted", "ticketsDeleted":"Bilety skasowane",
"ticketsReopened":"Tickets Reopened", "ticketsReopened":"Bilety otwarte ponownie",
"ticketsAutoclosed":"Tickets Autoclosed", "ticketsAutoclosed":"Bilety automatycznie zamknięte",
"transcriptsCreated":"Transcripts Created", "transcriptsCreated":"Utworzono transkrypcje",
"startupDate":"Startup Date", "startupDate":"Data uruchomienia",
"latestUpdate":"Latest Update", "latestUpdate":"Najnowsza aktualizacja",
"ticketCreatedOn":"Ticket Created On", "ticketCreatedOn":"Bilet został utworzony dnia",
"ticketCreatedBy":"Ticket Created By", "ticketCreatedBy":"Bilet stworzony przez",
"messagesSent":"Messages Sent", "messagesSent":"Wiadomość wysłana",
"status":"Status", "status":"Status",
"participants":"Participants", "participants":"Uczestnicy",
"role":"Role", "role":"Rola",
"switches":{ "switches":{
"globalAdmin":"Global Admin", "globalAdmin":"Globalny administrator",
"ticketAdmin":"Ticket Admin", "ticketAdmin":"Admin biletowy",
"member":"Member", "member":"Użytkownik",
"open":"Open", "open":"Otwarte",
"reopened":"Reopened", "reopened":"Otwarte ponownie",
"closed":"Closed", "closed":"Zamknięte",
"autoclosed":"Autoclosed" "autoclosed":"Automatycznie zamknięte"
}, },
"errorUserNotFound":"This user can't be found in the stats database!" "errorUserNotFound":"Tego użytkownika nie można znaleźć w bazie statystyk!"
} }
} }
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"QuirAddon#9778", "_CREDITS":"quiradon",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.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.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Argumente Invalide", "missingArgsTitle":"Argumente Invalide",
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Apexo#0723", "_CREDITS":"apexo & ander",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Неверные аргументы!", "missingArgsTitle":"Неверные аргументы!",
+27 -14
View File
@@ -12,9 +12,10 @@
"it":"italian", "it":"italian",
"ru":"russian", "ru":"russian",
"tr": "Türkçe", "tr": "Türkçe",
"ar": "Arabic",
"MISSING":"arabic,portuguese", "MISSING":"portuguese",
"NOTAVAILABLE":"arabic,portuguese,czech" "NOTAVAILABLE":"portuguese,czech"
}, },
"data":{ "data":{
"help":{ "help":{
@@ -29,7 +30,8 @@
"es-ES":"Una lista de los comandos disponibles.", "es-ES":"Una lista de los comandos disponibles.",
"it":"Una lista di tutti i comandi disponibili.", "it":"Una lista di tutti i comandi disponibili.",
"ru":"Список доступных команд", "ru":"Список доступных команд",
"tr": "Kullanılabilir komutların listesi." "tr": "Kullanılabilir komutların listesi.",
"ar": "قائمة للكوماندات المتاحة"
}, },
"message":{ "message":{
"en-GB":"Spawn an embed with buttons.", "en-GB":"Spawn an embed with buttons.",
@@ -43,7 +45,8 @@
"es-ES":"Genera un embed con botones.", "es-ES":"Genera un embed con botones.",
"it":"Genera un embed con un pulsante.", "it":"Genera un embed con un pulsante.",
"ru":"Создать embed с кнопками", "ru":"Создать embed с кнопками",
"tr": "Butonlar ile bir yerleştirme oluşturun." "tr": "Butonlar ile bir yerleştirme oluşturun.",
"ar": "أنشاء أيمبد مع الأزرار."
}, },
"close":{ "close":{
"en-GB":"Close a ticket.", "en-GB":"Close a ticket.",
@@ -57,7 +60,8 @@
"es-ES":"Cierra un ticket.", "es-ES":"Cierra un ticket.",
"it":"Chiudi un ticket.", "it":"Chiudi un ticket.",
"ru":"Закрыть тикет", "ru":"Закрыть тикет",
"tr": "Bileti kapat." "tr": "Bileti kapat.",
"ar": "اغلاق تيكت."
}, },
"delete":{ "delete":{
"en-GB":"Delete a ticket.", "en-GB":"Delete a ticket.",
@@ -71,7 +75,8 @@
"es-ES":"Elimina un ticket.", "es-ES":"Elimina un ticket.",
"it":"Elimina un ticket.", "it":"Elimina un ticket.",
"ru":"Удалить тикет", "ru":"Удалить тикет",
"tr": "Bileti sil." "tr": "Bileti sil.",
"ar": "حذف تيكت."
}, },
"reopen":{ "reopen":{
"en-GB":"Re-Open a ticket.", "en-GB":"Re-Open a ticket.",
@@ -85,7 +90,8 @@
"es-ES":"Re-abre un ticket.", "es-ES":"Re-abre un ticket.",
"it":"Ri-Apri un ticket.", "it":"Ri-Apri un ticket.",
"ru":"Открыть заново тикет", "ru":"Открыть заново тикет",
"tr": "Bileti yeniden aç." "tr": "Bileti yeniden aç.",
"ar": "اعادة فتح تيكت."
}, },
"add":{ "add":{
"en-GB":"Add another user to a ticket.", "en-GB":"Add another user to a ticket.",
@@ -99,7 +105,8 @@
"es-ES":"Agrega otro usuario al ticket.", "es-ES":"Agrega otro usuario al ticket.",
"it":"Aggiungi un membro al ticket", "it":"Aggiungi un membro al ticket",
"ru":"Добавить другого пользователя в тикет", "ru":"Добавить другого пользователя в тикет",
"tr": "Bilete başka bir kullanıcı ekle." "tr": "Bilete başka bir kullanıcı ekle.",
"ar": "اضافة مستخدم اخر الى تيكت معين."
}, },
"remove":{ "remove":{
"en-GB":"Remove a user from a ticket.", "en-GB":"Remove a user from a ticket.",
@@ -113,7 +120,8 @@
"es-ES":"Elimina otro usuario del ticket.", "es-ES":"Elimina otro usuario del ticket.",
"it":"Rimuovi un membro dal ticket", "it":"Rimuovi un membro dal ticket",
"ru":"Удалить пользователя из тикета", "ru":"Удалить пользователя из тикета",
"tr": "Kullanıcıyı bir biletten kaldır." "tr": "Kullanıcıyı bir biletten kaldır.",
"ar": "ازالة مستخدم من تيكت معين."
}, },
"newticket":{ "newticket":{
"en-GB":"Create a ticket", "en-GB":"Create a ticket",
@@ -127,7 +135,8 @@
"es-ES":"Crear un ticket.", "es-ES":"Crear un ticket.",
"it":"Crea un ticket", "it":"Crea un ticket",
"ru":"Создать тикет", "ru":"Создать тикет",
"tr": "Bilet oluştur" "tr": "Bilet oluştur",
"ar": "انشاء تيكت."
}, },
"rename":{ "rename":{
"en-GB":"Rename a ticket channel.", "en-GB":"Rename a ticket channel.",
@@ -141,7 +150,8 @@
"es-ES":"Renombrar un canal de ticket.", "es-ES":"Renombrar un canal de ticket.",
"it":"Rinomina il canale di un ticket.", "it":"Rinomina il canale di un ticket.",
"ru":"Переименовать канал тикета", "ru":"Переименовать канал тикета",
"tr": "Bilet kanalını yeniden adlandır." "tr": "Bilet kanalını yeniden adlandır.",
"ar": "اعادة تسمية التيكت."
}, },
"claim":{ "claim":{
"en-GB":"Claim a ticket.", "en-GB":"Claim a ticket.",
@@ -155,7 +165,8 @@
"es-ES":" ", "es-ES":" ",
"it":" ", "it":" ",
"ru":"Взять тикет", "ru":"Взять тикет",
"tr":"Bilet talep et." "tr":"Bilet talep et.",
"ar": "تعيين التيكت"
}, },
"unclaim":{ "unclaim":{
"en-GB":"Un-claim a ticket.", "en-GB":"Un-claim a ticket.",
@@ -169,7 +180,8 @@
"es-ES":" ", "es-ES":" ",
"it":" ", "it":" ",
"ru":"Снять тикет", "ru":"Снять тикет",
"tr":"Bileti iptal et." "tr":"Bileti iptal et.",
"ar": "ازالة التعيين من شخص الى التيكت"
}, },
"category":{ "category":{
"en-GB":"Change ticket type.", "en-GB":"Change ticket type.",
@@ -183,7 +195,8 @@
"es-ES":" ", "es-ES":" ",
"it":" ", "it":" ",
"ru":"Изменить тип тикета", "ru":"Изменить тип тикета",
"tr":"Bilet türünü değiştir." "tr":"Bilet türünü değiştir.",
"ar": "تغيير نوع التيكت"
} }
} }
} }
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"n1kkec#5341", "_CREDITS":"n1kkec",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Napačen argument!", "missingArgsTitle":"Napačen argument!",
+29 -29
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Redactado#1673 & josuens14#5267", "_CREDITS":"redactado & josuens",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"¡Argumentos inválidos!", "missingArgsTitle":"¡Argumentos inválidos!",
@@ -99,37 +99,37 @@
"available":"La transcripción estará disponible aquí" "available":"La transcripción estará disponible aquí"
}, },
"stats":{ "stats":{
"globalTitle":"Global Stats", "globalTitle":"Estadísticas Globales",
"ticketTitle":"Ticket Stats for {0}", "ticketTitle":"Estadísitcas para el ticket {0}",
"userTitle":"User Stats for {0}", "userTitle":"Estadísticas para el usuario {0}",
"systemTitle":"System Stats", "systemTitle":"Estadísticas del sistema",
"versionTitle":"Bot Version", "versionTitle":"Versión del bot",
"ticketsCreated":"Tickets Created", "ticketsCreated":"Tickets Creados",
"ticketsClosed":"Tickets Closed", "ticketsClosed":"Tickets Cerrados",
"ticketsDeleted":"Tickets Deleted", "ticketsDeleted":"Tickets Eliminados",
"ticketsReopened":"Tickets Reopened", "ticketsReopened":"Tickets Reabiertos",
"ticketsAutoclosed":"Tickets Autoclosed", "ticketsAutoclosed":"Tickets Cerrados automáticamente",
"transcriptsCreated":"Transcripts Created", "transcriptsCreated":"Transcripciones Creadas",
"startupDate":"Startup Date", "startupDate":"Fecha de Inicio",
"latestUpdate":"Latest Update", "latestUpdate":"Última Actualización",
"ticketCreatedOn":"Ticket Created On", "ticketCreatedOn":"Ticket creado el",
"ticketCreatedBy":"Ticket Created By", "ticketCreatedBy":"Ticket creado por",
"messagesSent":"Messages Sent", "messagesSent":"Mensajes enviados",
"status":"Status", "status":"Estado",
"participants":"Participants", "participants":"Participantes",
"role":"Role", "role":"Rol",
"switches":{ "switches":{
"globalAdmin":"Global Admin", "globalAdmin":"Admin Global",
"ticketAdmin":"Ticket Admin", "ticketAdmin":"Admin del Ticket",
"member":"Member", "member":"Miembro",
"open":"Open", "open":"Abierto",
"reopened":"Reopened", "reopened":"Reabierto",
"closed":"Closed", "closed":"Cerrado",
"autoclosed":"Autoclosed" "autoclosed":"Cerrado automáticamente"
}, },
"errorUserNotFound":"This user can't be found in the stats database!" "errorUserNotFound":"¡Este usuario no pudo ser encontrado en la base de datos de estadísitcas!"
} }
} }
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Mods HD#0661", "_CREDITS":"modshd",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"อาร์กิวเมนต์ไม่ถูกต้อง!", "missingArgsTitle":"อาร์กิวเมนต์ไม่ถูกต้อง!",
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Hydrâelčhâvø#1575", "_CREDITS":"Hydra#0009",
"_INFO":"This file is a translation for open ticket 3.5.0", "_INFO":"This file is a translation for open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Geçersiz argümanlar!", "missingArgsTitle":"Geçersiz argümanlar!",
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"_CREDITS":"Anderskiy#4093", "_CREDITS":"ander",
"_INFO":"Цей файл є перекладом для open ticket 3.5.0", "_INFO":"Цей файл є перекладом для open ticket 3.5.4",
"errors":{ "errors":{
"missingArgsTitle":"Невірні аргументи!", "missingArgsTitle":"Невірні аргументи!",
+7 -7
View File
@@ -1,16 +1,15 @@
{ {
"name": "open-ticket", "name": "open-ticket",
"version": "3.5.0", "author": "DJdj Development",
"description": "This is an open-source discord ticket bot, you can configure it and it comes with cool features like a transcript.", "version": "3.5.4",
"description": "The most advanced open-source discord ticket bot with HTML transcripts and plugins! It uses discord.js v14 & no database required!",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"start": "node index.js", "start": "node index.js",
"test": "node index.js --devconfig --noerrorupload", "test": "node index.js --devconfig --noerrorupload",
"slashEnable": "node index.js slash enable", "slashEnable": "node index.js slash enable",
"slashDisable": "node index.js slash disable", "slashDisable": "node index.js slash disable"
"cleardata": "node ./core/dynamicdatabase/cleardata.js"
}, },
"author": "DJdj Development",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"axios": "^1.6.2", "axios": "^1.6.2",
@@ -22,7 +21,8 @@
"url": "git+https://github.com/DJj123dj/open-ticket.git" "url": "git+https://github.com/DJj123dj/open-ticket.git"
}, },
"bugs": { "bugs": {
"url": "https://github.com/DJj123dj/open-ticket/issues" "url": "https://github.com/DJj123dj/open-ticket/issues",
"email": "support@dj-dj.be"
}, },
"homepage": "https://github.com/DJj123dj/open-ticket#readme" "homepage": "https://openticket.dj-dj.be"
} }