diff --git a/.eggs/README.md b/.eggs/README.md index dd56cc6..5a8a58b 100644 --- a/.eggs/README.md +++ b/.eggs/README.md @@ -2,7 +2,7 @@ Open Ticket Logo [![discord](https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) -[![version](https://img.shields.io/badge/version-4.0.1-brightgreen.svg?style=flat-square)](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.1) +[![version](https://img.shields.io/badge/version-4.0.2-brightgreen.svg?style=flat-square)](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.2) [![Sponsor DJj123dj](https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors)](https://github.com/sponsors/DJj123dj) [![Open Ticket supports Pterodactyl Eggs!](https://img.shields.io/badge/pterodactyl-supported-10539F?style=flat-square&logo=pterodactyl)](.eggs/README.md) @@ -20,6 +20,9 @@ It's recommended to provide at least `1GB` of **Memory/RAM** and `5GB` of **disk [**`openticket-egg-main.json` (Recommended)**](openticket-egg-main.json) - This egg will use the `main` branch of Open Ticket. +[**`openticket-egg-v4.0.2.json`**](openticket-egg-v4.0.2.json) +- This egg will always use Open Ticket `v4.0.2`. Open Ticket updates will not have an effect on this egg. + [**`openticket-egg-v4.0.1.json`**](openticket-egg-v4.0.1.json) - This egg will always use Open Ticket `v4.0.1`. Open Ticket updates will not have an effect on this egg. diff --git a/.eggs/openticket-egg-v4.0.2.json b/.eggs/openticket-egg-v4.0.2.json new file mode 100644 index 0000000..215d262 --- /dev/null +++ b/.eggs/openticket-egg-v4.0.2.json @@ -0,0 +1,62 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2025-03-16T18:10:18+01:00", + "name": "Open Ticket (v4.0.2)", + "author": "support@dj-dj.be", + "description": "This is the official Pterodactyl egg for Open Ticket v4.0.2, the most advanced & customisable discord ticket bot that you will ever find! You can customise up to 300+ variables! This includes Html Transcripts, Advanced Plugins, Custom Embeds, Questions\/Modals, Stats & more!", + "features": null, + "docker_images": { + "ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20" + }, + "file_denylist": [], + "startup": "if [[ ! -z ${NODE_PACKAGES} ]]; then npm install ${NODE_PACKAGES}; fi; if [[ ! -z ${UNNODE_PACKAGES} ]]; then npm uninstall ${UNNODE_PACKAGES}; fi; if [ -f \/home\/container\/package.json ]; then npm install; fi; node \"\/home\/container\/index.js\" ${NODE_FLAGS};", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": \"STARTUP INFO:\"\r\n}", + "logs": "{}", + "stop": "^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n# Open Ticket Installation Script (v4.0.2)\r\n# Inspired by: Node.js Installation Script\r\n# \u00a9 DJdj Development\r\n\r\necho -e \"[OT INSTALLER] installing dependencies. please wait...\"\r\napt update\r\napt install -y git curl\r\n\r\necho -e \"[OT INSTALLER] updating npm. please wait...\"\r\nnpm install npm@latest --location=global\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nBRANCH=\"v4.0.2\"\r\n\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"[OT INSTALLER] \/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \"[OT INSTALLER] .git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"[OT INSTALLER] loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"[OT INSTALLER] files found with no git config\"\r\n echo -e \"[OT INSTALLER] closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"https:\/\/github.com\/open-discord-bots\/open-ticket.git\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"[OT INSTALLER] \/mnt\/server is empty.\"\r\n echo -e \"[OT INSTALLER] cloning files into repo.\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"[OT INSTALLER] cloning default branch\"\r\n git clone https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n else\r\n echo -e \"[OT INSTALLER] cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n fi\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing Open Ticket node.js packages.\"\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n \/usr\/local\/bin\/npm install --omit=dev\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing custom node.js packages.\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n \/usr\/local\/bin\/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\necho -e \"[OT INSTALLER] install complete!\"\r\nexit 0", + "container": "node:latest", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Additional Npm Packages", + "description": "Specify additional npm packages used by Open Ticket plugins. Use spaces to separate.", + "env_variable": "NODE_PACKAGES", + "default_value": "", + "user_viewable": false, + "user_editable": true, + "rules": "string|nullable", + "field_type": "text" + }, + { + "name": "Startup Flags", + "description": "Start the bot with additional Open Ticket flags. Separate using spaces.\r\nA full reference list can be found in the documentation.", + "env_variable": "NODE_FLAGS", + "default_value": "", + "user_viewable": false, + "user_editable": true, + "rules": "string|nullable", + "field_type": "text" + }, + { + "name": "Uninstall Npm Packages", + "description": "A list of npm packages to uninstall. Separate by spaces.", + "env_variable": "UNNODE_PACKAGES", + "default_value": "", + "user_viewable": false, + "user_editable": true, + "rules": "string|nullable", + "field_type": "text" + } + ] +} \ No newline at end of file diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index bc5c4bc..d0fc458 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,7 +1,7 @@ # Contributing Guidelines Open Ticket Logo -[![discord](https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![version](https://img.shields.io/badge/version-4.0.1-brightgreen.svg?style=flat-square)](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.1) [![Sponsor DJj123dj](https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors)](https://github.com/sponsors/DJj123dj) +[![discord](https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![version](https://img.shields.io/badge/version-4.0.2-brightgreen.svg?style=flat-square)](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.2) [![Sponsor DJj123dj](https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors)](https://github.com/sponsors/DJj123dj) These are the Contributing Guidelines of Open Ticket!
Here you can find everything you need to know about contributing to Open Ticket.
diff --git a/.github/SECURITY.md b/.github/SECURITY.md index cadcacf..1392142 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -20,6 +20,7 @@ This list will be updated on every release. | Version | Supported | Notes | |------------|-----------|--------------------------------| | 4.1.0 | 🟦 | | +| 4.0.2 | ✅ | | | 4.0.1 | ✅ | | | 4.0.0 | ✅ | | | 3.5.9 | 🚧 | Supported until May 2025 (LTS) | diff --git a/README.md b/README.md index 8e12532..4b624f8 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
Powered By
Open Ticket
Discord Invite Link -Open Ticket Version +Open Ticket Version Open Ticket Documentation Open Ticket License Open Ticket Stars @@ -20,7 +20,7 @@

Open Ticket is the most advanced & customisable discord ticket bot that you will ever find! You can customise up to 300+ variables! This includes Html Transcripts, Advanced Plugins, Custom Embeds, Questions/Modals, Stats & more! -You're also able to customise every little aspect of the bot! From embeds to transcripts. Open Ticket is also translated in more than 26 Languages! If you need any help, feel free to join our discord server! +You're also able to customise every little aspect of the bot! From embeds to transcripts. Open Ticket is also translated in more than 27 Languages! If you need any help, feel free to join our discord server!

⭐️ Help us grow by giving a star! ⭐️

@@ -32,7 +32,7 @@ You're also able to customise every little aspect of the bot! From embeds to tra - **📈 scalable** - Open Ticket is made to handle huge servers! (Already tested in **servers with 100k members**) - **📄 HTML transcripts** - Make use of the most customisable, beautiful and easy-to-use HTML Transcripts! - **✅ ticket actions** - Close, Reopen, Delete, Claim, Pin, Rename & Move all your tickets! -- **🇬🇧 translation** - Open Ticket has been translated in more than **26 languages** by our community! +- **🇬🇧 translation** - Open Ticket has been translated in more than **27 languages** by our community! - **🎨 customisation** - Open Ticket has been created around customisation, everything can be customised! - **🖥️ interactions** - The bot has full support for Buttons, Dropdowns, Slash Commands and Modals! - **∞ unlimited** - Create an infinite amount of tickets & panels! @@ -58,9 +58,9 @@ You're also able to customise every little aspect of the bot! From embeds to tra - **😁 And so much more...** > ### 📦 Resources -> Resources might not be accurate yet! *(because v4 is still in beta)*
+> Not all resources are accurate yet! We are working on this.
> Open Ticket Tutorial -> Open Ticket Docs +> Open Ticket Docs > Open Ticket Plugins ### ❤️ Sponsors @@ -68,12 +68,10 @@ A big thanks to all our sponsors! Without them, it wouldn't be possible to creat - - + - - +
Profile PictureProfile PictureProfile Picture
roppl3rBENZORICHroppl3r
@@ -82,6 +80,7 @@ A big thanks to all our sponsors! Without them, it wouldn't be possible to creat SpyEye Mods HD DOSEV5 +BENZORICH ### ⏱️ Quick Setup @@ -96,10 +95,83 @@ A big thanks to all our sponsors! Without them, it wouldn't be possible to creat > ### [📔 Visit Documentation](https://otdocs.dj-dj.be) ## 📸 Preview -Ticket Message -Ticket Stats Message -Example Panel 1 -Example Panel 2 +An example of a panel. +An example of a ticket message. +Examples of built-in commands. + +## 🛠️ Contributors +### 🖥️ Team & Contributors +A list of people that contributed or provided the most support for Open Ticket. + + + + + + + + + + + + + + + +
Profile PictureProfile PictureProfile PictureProfile PictureProfile Picture
💻 DJj123dj💬 smetsliam💬 Frank Vissers💬 Sanke🧩 Roppl3r
+ +### 💬 Translators +Without our translators, it wouldn't be possible to translate Open Ticket in so many languages! +- 🟢 Available - 🤖 Made Using AI - 🔴 Unavailable/Outdated + +|🔍 |Language |Maintainer (Github/Discord) | +|---|---------------------|----------------------------| +|🟢 |🇬🇧 English |djj123dj | +|🟢 |🇳🇱 Dutch |djj123dj | +|🟢 |🇩🇪 German |benzorich | +|🟢 |🇪🇸 Spanish |redactado & josuens | +|🟢 |🇵🇹 Portuguese |quiradon | +|🟢 |❓ Catalan |guillee3 | +|🟢 |🇨🇿 Czech |spyeye_ | +|🟢 |🇭🇺 Hungarian |kornel0706 | +|🟢 |🇷🇴 Romanian |sankedev | +|🟢 |🇺🇦 Ukrainian |anderskiy | +|🟢 |🇮🇩 Indonesian |erxg | +|🟢 |🇮🇹 Italian |fraden1mvp. | +|🟢 |🇩🇰 Danish |the_gamer | +|🟢 |🇹🇭 Thai |modshd | +|🟢 |🇹🇷 Turkish |palestinian | +|🟢 |🇫🇷 French |guillee.3 | +|🟢 |🇦🇪 Arabic |palestinian | +|🟢 |🇮🇳 Hindi |an_developer | +|🟢 |🇱🇹 Lithuanian |tsgindrius | +|🟢 |🇵🇱 Polish |danoglez | +|🟢 |🇳🇴 Norwegian |NoOneNook | +|🟢 |🇸🇪 Swedish |NoOneNook | +|🤖 |🇪🇪 Estonian |iamnotmega | +|🤖 |🇫🇮 Finnish |iamnotmega | +|🤖 |🇷🇺 Russian |NoOneNook | +|🤖 |🇱🇻 Latvian |NoOneNook | +|🤖 |🇻🇳 Vietnamese |ngocdiep2006 | +|🔴 |🇯🇵 Japanese |[⭐ Contribute!](.github/CONTRIBUTING.md)| +|🔴 |🇰🇷 Korean |[⭐ Contribute!](.github/CONTRIBUTING.md)| +|🔴 |🇨🇳 Simplified Chinese |[⭐ Contribute!](.github/CONTRIBUTING.md)| +|🔴 |🇨🇳 Traditional Chinese|[⭐ Contribute!](.github/CONTRIBUTING.md)| +|🔴 |🇸🇮 Slovenian |[⭐ Contribute!](.github/CONTRIBUTING.md)| +|🔴 |🇬🇷 Greek |[⭐ Contribute!](.github/CONTRIBUTING.md)| +|🔴 |❓ Kurdish |[⭐ Contribute!](.github/CONTRIBUTING.md)| +|🔴 |❓ Persian |[⭐ Contribute!](.github/CONTRIBUTING.md)| + +## ⭐️ Star History +Please give this repository a star if you like it. +This will help us grow and reach even more people! + + + + + + Star History Chart + + ## 🧩 Plugins **Download all plugins in our [Official Plugin Repository](https://github.com/open-discord-bots/plugins)!**
@@ -153,76 +225,10 @@ A big thanks to all our sponsors! Without them, it wouldn't be possible to creat - **💼 Management** - These plugins add features that help you manage your server. - **🤖 Client** - These plugins add features affecting the discord client or bot itself. -## 🛠️ Contributors -### 🖥️ Team -This is the main team working on Open Ticket. Don't forget to check their profiles! - - - - - - - - - - - -
Profile PictureProfile PictureProfile Picture
💻 DJj123dj💬 Sanke💬 DevBack
- -### 💬 Translators -|Language |Maintainer (discord name) |Status | -|---------------------|--------------------------|-----------------------------| -|🇬🇧 English |djj123dj |🟢 Up To Date | -|🇳🇱 Dutch |djj123dj |🟢 Up To Date | -|🇩🇪 German |benzorich |🟢 Up To Date | -|🇪🇸 Spanish |redactado & josuens |🟢 Up To Date | -|🇵🇹 Portuguese |quiradon |🟢 Up To Date | -|❓ Catalan |guillee3 |🟢 Up To Date | -|🇨🇿 Czech |spyeye_ |🟢 Up To Date | -|🇭🇺 Hungarian |kornel0706 |🟢 Up To Date | -|🇷🇴 Romanian |sankedev |🟢 Up To Date | -|🇺🇦 Ukrainian |anderskiy |🟢 Up To Date | -|🇮🇩 Indonesian |erxg |🟢 Up To Date | -|🇮🇹 Italian |fraden1mvp. |🟢 Up To Date | -|🇩🇰 Danish |the_gamer |🟢 Up To Date | -|🇹🇭 Thai |modshd |🟢 Up To Date | -|🇹🇷 Turkish |palestinian |🟢 Up To Date | -|🇫🇷 French |guillee.3 |🟢 Up To Date | -|🇦🇪 Arabic |palestinian |🟢 Up To Date | -|🇮🇳 Hindi |an_developer |🟢 Up To Date | -|🇱🇹 Lithuanian |tsgindrius |🟢 Up To Date | -|🇵🇱 Polish |danoglez |🟢 Up To Date | -|🇳🇴 Norwegian |NoOneNook |🟢 Up To Date | -|🇸🇪 Swedish |NoOneNook |🟢 Up To Date | -|🇪🇪 Estonian |iamnotmega |🔵 Up To Date (AI) | -|🇫🇮 Finnish |iamnotmega |🔵 Up To Date (AI) | -|🇷🇺 Russian |NoOneNook |🔵 Up To Date (AI) | -|🇱🇻 Latvian |NoOneNook |🔵 Up To Date (AI) | -|🇯🇵 Japanese |/ |🔴 Missing | -|🇰🇷 Korean |/ |🔴 Missing | -|🇨🇳 Simplified Chinese |/ |🔴 Missing | -|🇨🇳 Traditional Chinese|/ |🔴 Missing | -|🇻🇳 Vietnamese |/ |🔴 Missing | -|🇸🇮 Slovenian |/ |🔴 Missing | -|🇬🇷 Greek |/ |🔴 Missing | -|❓ Kurdish |/ |🔴 Missing | -|❓ Persian |/ |🔴 Missing | - -## ⭐️ Star History -Please help us grow by giving a star! It would help us a lot! - - - - - - Star History Chart - - - --- Open Ticket Logo **README.md**
-[changelog](https://otgithub.dj-dj.be/releases) - [documentation](https://otdocs.dj-dj.be) - [tutorial](https://www.youtube.com/watch?v=2jK9kAf6ASU) - [website](https://openticket.dj-dj.be) - [discord](https://discord.dj-dj.be) - [license](./LICENSE.md)
+[changelog](https://otgithub.dj-dj.be/releases) - [documentation](https://otdocs.dj-dj.be) - [tutorial](https://www.youtube.com/watch?v=2jK9kAf6ASU) - [website](https://openticket.dj-dj.be) - [discord server](https://discord.dj-dj.be) - [license](./LICENSE.md)
© 2025 - [DJdj Development](https://www.dj-dj.be) - [Terms](https://www.dj-dj.be/terms) - [Privacy Policy](https://www.dj-dj.be/privacy) - [Support Us](https://github.com/sponsors/DJj123dj) diff --git a/config/general.json b/config/general.json index 99dd1e3..5b06c7f 100644 --- a/config/general.json +++ b/config/general.json @@ -2,7 +2,7 @@ "_INFO":{ "support":"https://otdocs.dj-dj.be", "discord":"https://discord.dj-dj.be", - "version":"open-ticket-v4.0.1" + "version":"open-ticket-v4.0.2" }, "token":"your bot token here! (or leave empty when using 'tokenFromENV')", diff --git a/config/panels.json b/config/panels.json index cc56a5a..91a2bfa 100644 --- a/config/panels.json +++ b/config/panels.json @@ -17,7 +17,7 @@ "image":"https://www.example.com/image.png (or leave empty)", "thumbnail":"https://www.example.com/image.png (or leave empty)", - "footer":"Open Ticket v4.0.1 (or leave empty)", + "footer":"Open Ticket v4.0.2 (or leave empty)", "fields":[ {"name":"field name","value":"field value","inline":false} ], diff --git a/index.js b/index.js index d450cef..4e8487b 100644 --- a/index.js +++ b/index.js @@ -14,7 +14,7 @@ process.argv.push(...flags) ██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║ ╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝ - v4.0.1 - Made by DJj123dj & Contributors + v4.0.2 - Made by DJj123dj & Contributors Discord: https://discord.dj-dj.be Docs: https://otdocs.dj-dj.be diff --git a/languages/arabic.json b/languages/arabic.json index 9f31d55..25c87ad 100644 --- a/languages/arabic.json +++ b/languages/arabic.json @@ -1,6 +1,6 @@ { "_TRANSLATION": { - "otversion": "v4.0.1", + "otversion": "v4.0.2", "translators": ["palestinian"], "lastedited": "06/12/2024", "language": "Arabic", diff --git a/languages/catalan.json b/languages/catalan.json index 6286b03..1142f9b 100644 --- a/languages/catalan.json +++ b/languages/catalan.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["guillee3"], "lastedited":"21/08/2024", "language":"Catalan", diff --git a/languages/custom.json b/languages/custom.json index 1bcc981..05e89fa 100644 --- a/languages/custom.json +++ b/languages/custom.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["DJj123dj"], "lastedited":"21/08/2024", "language":"Custom", diff --git a/languages/czech.json b/languages/czech.json index 07de76e..b5ad617 100644 --- a/languages/czech.json +++ b/languages/czech.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["spyeye_"], "lastedited":"21/08/2024", "language":"Czech", diff --git a/languages/danish.json b/languages/danish.json index d975a68..8348216 100644 --- a/languages/danish.json +++ b/languages/danish.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["the_gamer"], "lastedited":"26/09/2024", "language":"Danish", diff --git a/languages/dutch.json b/languages/dutch.json index 00da8b5..9a1de8c 100644 --- a/languages/dutch.json +++ b/languages/dutch.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["DJj123dj"], "lastedited":"21/08/2024", "language":"Dutch", diff --git a/languages/english.json b/languages/english.json index 95f8153..7009379 100644 --- a/languages/english.json +++ b/languages/english.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["DJj123dj"], "lastedited":"21/08/2024", "language":"English", diff --git a/languages/estonian.json b/languages/estonian.json index 7c45c02..0f15c49 100644 --- a/languages/estonian.json +++ b/languages/estonian.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["iamnotmega","ChatGPT"], "lastedited":"21/10/2024", "language":"Estonian", diff --git a/languages/finnish.json b/languages/finnish.json index 4840a6e..78b178f 100644 --- a/languages/finnish.json +++ b/languages/finnish.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["iamnotmega","ChatGPT"], "lastedited":"21/10/2024", "language":"Finnish", diff --git a/languages/french.json b/languages/french.json index bf37125..7d8c870 100644 --- a/languages/french.json +++ b/languages/french.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["guillee3"], "lastedited":"04/12/2024", "language":"French", diff --git a/languages/german.json b/languages/german.json index 41abc67..04726f8 100644 --- a/languages/german.json +++ b/languages/german.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["benzorich"], "lastedited":"06/10/2024", "language":"German", diff --git a/languages/hindi.json b/languages/hindi.json index 3567648..29d109a 100644 --- a/languages/hindi.json +++ b/languages/hindi.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["an_developer"], "lastedited":"14/12/2024", "language":"Hindi", diff --git a/languages/hungarian.json b/languages/hungarian.json index e568f4d..d8cd1a0 100644 --- a/languages/hungarian.json +++ b/languages/hungarian.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["Kornel0706"], "lastedited":"22/08/2024", "language":"Hungarian", diff --git a/languages/indonesian.json b/languages/indonesian.json index efaba29..4cd0c9f 100644 --- a/languages/indonesian.json +++ b/languages/indonesian.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["erxg"], "lastedited":"25/08/2024", "language":"Indonesian", diff --git a/languages/italian.json b/languages/italian.json index 2e493a9..7b978d5 100644 --- a/languages/italian.json +++ b/languages/italian.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["fraden1mvp."], "lastedited":"08/10/2024", "language":"Italian", diff --git a/languages/latvian.json b/languages/latvian.json index 70f586d..7cbb23d 100644 --- a/languages/latvian.json +++ b/languages/latvian.json @@ -1,6 +1,6 @@ { "_TRANSLATION": { - "otversion": "v4.0.1", + "otversion": "v4.0.2", "translators": ["NoOneNook"], "lastedited": "25/03/2025", "language": "Latvian", diff --git a/languages/lithuanian.json b/languages/lithuanian.json index d48efc5..9e21286 100644 --- a/languages/lithuanian.json +++ b/languages/lithuanian.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["TsgIndrius"], "lastedited":"26/01/2025", "language":"Lithuanian", diff --git a/languages/norwegian.json b/languages/norwegian.json index cc20095..d759c5c 100644 --- a/languages/norwegian.json +++ b/languages/norwegian.json @@ -1,6 +1,6 @@ { "_TRANSLATION": { - "otversion": "v4.0.1", + "otversion": "v4.0.2", "translators": ["NoOneNook"], "lastedited": "25/03/2025", "language": "Norwegian", diff --git a/languages/polish.json b/languages/polish.json index d1c3b6c..1963e3d 100644 --- a/languages/polish.json +++ b/languages/polish.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["DanoGlez"], "lastedited":"28/01/2025", "language":"Polish", diff --git a/languages/portuguese.json b/languages/portuguese.json index a10aef5..4b7d412 100644 --- a/languages/portuguese.json +++ b/languages/portuguese.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["quiradon"], "lastedited":"20/08/2024", "language":"Portuguese", diff --git a/languages/romanian.json b/languages/romanian.json index 15fbe50..bf467df 100644 --- a/languages/romanian.json +++ b/languages/romanian.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["SankeDev"], "lastedited":"27/08/2024", "language":"Romanian", diff --git a/languages/russian.json b/languages/russian.json index 92876f6..80b4bf3 100644 --- a/languages/russian.json +++ b/languages/russian.json @@ -1,6 +1,6 @@ { "_TRANSLATION": { - "otversion": "v4.0.1", + "otversion": "v4.0.2", "translators": ["NoOneNook"], "lastedited": "25/03/2025", "language": "Russian", diff --git a/languages/spanish.json b/languages/spanish.json index 2a669d8..c36113a 100644 --- a/languages/spanish.json +++ b/languages/spanish.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["Redactado","Josuens"], "lastedited":"22/08/2024", "language":"Spanish", diff --git a/languages/swedish.json b/languages/swedish.json index 9b1f09b..c4067b7 100644 --- a/languages/swedish.json +++ b/languages/swedish.json @@ -1,6 +1,6 @@ { "_TRANSLATION": { - "otversion": "v4.0.1", + "otversion": "v4.0.2", "translators": ["NoOneNook"], "lastedited": "25/03/2025", "language": "Svenska", diff --git a/languages/thai.json b/languages/thai.json index 5d68b50..ebc52e7 100644 --- a/languages/thai.json +++ b/languages/thai.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["modshd"], "lastedited":"13/11/2024", "language":"Thai", diff --git a/languages/turkish.json b/languages/turkish.json index 08df5c5..858baf2 100644 --- a/languages/turkish.json +++ b/languages/turkish.json @@ -1,6 +1,6 @@ { "_TRANSLATION": { - "otversion": "v4.0.1", + "otversion": "v4.0.2", "translators": ["palestinian"], "lastedited": "26/11/2024", "language": "Turkish", diff --git a/languages/ukrainian.json b/languages/ukrainian.json index c01e013..5262625 100644 --- a/languages/ukrainian.json +++ b/languages/ukrainian.json @@ -1,6 +1,6 @@ { "_TRANSLATION":{ - "otversion":"v4.0.1", + "otversion":"v4.0.2", "translators":["Anderskiy"], "lastedited":"31/08/2024", "language":"Ukrainian", diff --git a/languages/vietnamese.json b/languages/vietnamese.json new file mode 100644 index 0000000..8c14c44 --- /dev/null +++ b/languages/vietnamese.json @@ -0,0 +1,466 @@ +{ + "_TRANSLATION":{ + "otversion":"v4.0.2", + "translators":["ngocdiep2006"], + "lastedited":"07/04/2025", + "language":"Vietnamese", + "automated":true + }, + "checker":{ + "system":{ + "typeError":"[ERROR]", + "headerOpenTicket":"OPEN TICKET", + "typeWarning":"[WARNING]", + "typeInfo":"[INFO]", + "headerConfigChecker":"CONFIG CHECKER", + "headerDescription":"check for errors in your config files!", + "footerError":"the bot won't start until all {0}'s are fixed!", + "footerWarning":"it's recommended to fix all {0}'s before starting!", + "footerSupport":"SUPPORT: {0} - DOCS: {1}", + "compactInformation":"use {0} for more information!", + "dataPath":"path", + "dataDocs":"docs", + "dataMessages":"message" + }, + "messages": { + "stringTooShort": "Chuỗi này không thể ngắn hơn {0} ký tự!", + "stringTooLong": "Chuỗi này không thể dài hơn {0} ký tự!", + "stringLengthInvalid": "Chuỗi này cần dài {0} ký tự!", + "stringStartsWith": "Chuỗi này cần bắt đầu bằng {0}!", + "stringEndsWith": "Chuỗi này cần kết thúc bằng {0}!", + "stringContains": "Chuỗi này cần chứa {0}!", + "stringChoices": "Chuỗi này chỉ có thể là một trong các giá trị sau: {0}!", + "stringRegex": "Chuỗi này không hợp lệ!", + "numberTooShort": "Số này không thể ngắn hơn {0} ký tự!", + "numberTooLong": "Số này không thể dài hơn {0} ký tự!", + "numberLengthInvalid": "Số này cần dài {0} ký tự!", + "numberTooSmall": "Số này cần ít nhất là {0}!", + "numberTooLarge": "Số này cần nhiều nhất là {0}!", + "numberNotEqual": "Số này cần là {0}!", + "numberStep": "Số này cần là bội số của {0}!", + "numberStepOffset": "Số này cần là bội số của {0} bắt đầu từ {1}!", + "numberStartsWith": "Số này cần bắt đầu bằng {0}!", + "numberEndsWith": "Số này cần kết thúc bằng {0}!", + "numberContains": "Số này cần chứa {0}!", + "numberChoices": "Số này chỉ có thể là một trong các giá trị sau: {0}!", + "numberFloat": "Số này không thể là số thập phân!", + "numberNegative": "Số này không thể là số âm!", + "numberPositive": "Số này không thể là số dương!", + "numberZero": "Số này không thể là số không!", + "booleanTrue": "Boolean này không thể là true!", + "booleanFalse": "Boolean này không thể là false!", + "arrayEmptyDisabled": "Mảng này không được phép rỗng!", + "arrayEmptyRequired": "Mảng này bắt buộc phải rỗng!", + "arrayTooShort": "Mảng này cần có độ dài ít nhất là {0}!", + "arrayTooLong": "Mảng này cần có độ dài nhiều nhất là {0}!", + "arrayLengthInvalid": "Mảng này cần có độ dài là {0}!", + "arrayInvalidTypes": "Mảng này chỉ có thể chứa các kiểu sau: {0}!", + "arrayDouble": "Mảng này không cho phép giá trị trùng lặp!", + "discordInvalidId": "Đây là id discord {0} không hợp lệ!", + "discordInvalidIdOptions": "Đây là id discord {0} không hợp lệ! Bạn cũng có thể sử dụng một trong những id sau: {1}!", + "discordInvalidToken": "Đây là token discord không hợp lệ (về mặt cú pháp)!", + "colorInvalid": "Đây là màu hex không hợp lệ!", + "emojiTooShort": "Chuỗi này cần có ít nhất {0} emoji!", + "emojiTooLong": "Chuỗi này cần có nhiều nhất {0} emoji!", + "emojiCustom": "Emoji này không thể là emoji discord tùy chỉnh!", + "emojiInvalid": "Đây là emoji không hợp lệ!", + "urlInvalid": "URL này không hợp lệ!", + "urlInvalidHttp": "URL này chỉ có thể sử dụng giao thức https://!", + "urlInvalidProtocol": "URL này chỉ có thể sử dụng giao thức http:// & https://!", + "urlInvalidHostname": "URL này có tên máy chủ bị cấm!", + "urlInvalidExtension": "URL này có phần mở rộng không hợp lệ! Chọn trong số: {0}!", + "urlInvalidPath": "URL này có đường dẫn không hợp lệ!", + "idNotUnique": "ID này không duy nhất, hãy sử dụng ID khác!", + "idNonExistent": "ID {0} không tồn tại!", + "invalidType": "Thuộc tính này cần có kiểu: {0}!", + "propertyMissing": "Thuộc tính {0} bị thiếu trong đối tượng này!", + "propertyOptional": "Thuộc tính {0} là tùy chọn trong đối tượng này!", + "objectDisabled": "Đối tượng này bị tắt, hãy bật nó bằng cách sử dụng {0}!", + "nullInvalid": "Thuộc tính này không thể là null!", + "switchInvalidType": "Điều này cần là một trong các kiểu sau: {0}!", + "objectSwitchInvalid": "Đối tượng này cần là một trong các kiểu sau: {0}!", + "invalidLanguage": "Đây là ngôn ngữ không hợp lệ!", + "invalidButton": "Nút này cần có ít nhất một {0} hoặc {1}!", + "unusedOption": "Tùy chọn {0} không được sử dụng ở bất kỳ đâu!", + "unusedQuestion": "Câu hỏi {0} không được sử dụng ở bất kỳ đâu!", + "dropdownOption": "Bảng điều khiển có bật dropdown chỉ có thể chứa các tùy chọn thuộc loại 'ticket'!" + } + }, + "actions": { + "buttons": { + "create": "Truy cập Ticket", + "close": "Đóng Ticket", + "delete": "Xóa Ticket", + "reopen": "Mở lại Ticket", + "claim": "Nhận Ticket", + "unclaim": "Bỏ nhận Ticket", + "pin": "Ghim Ticket", + "unpin": "Bỏ ghim Ticket", + "clear": "Xóa Tickets", + "helpSwitchSlash": "Xem Lệnh Slash", + "helpSwitchText": "Xem Lệnh Văn Bản", + "helpPage": "Trang {0}", + "withReason": "Có Lý Do", + "withoutTranscript": "Không Có Bản Ghi" + }, + "titles": { + "created": "Ticket Đã Tạo", + "close": "Ticket Đã Đóng", + "delete": "Ticket Đã Xóa", + "reopen": "Ticket Đã Mở Lại", + "claim": "Ticket Đã Nhận", + "unclaim": "Ticket Đã Bỏ Nhận", + "pin": "Ticket Đã Ghim", + "unpin": "Ticket Đã Bỏ Ghim", + "rename": "Ticket Đã Đổi Tên", + "move": "Ticket Đã Di Chuyển", + "add": "Người Dùng Đã Thêm Vào Ticket", + "remove": "Người Dùng Đã Xóa Khỏi Ticket", + "help": "Lệnh Có Sẵn", + "statsReset": "Đặt Lại Thống Kê", + "blacklistAdd": "Người Dùng Đã Bị Cấm", + "blacklistRemove": "Người Dùng Đã Được Gỡ Cấm", + "blacklistGet": "Người Dùng Bị Cấm", + "blacklistView": "Danh Sách Cấm Hiện Tại", + "blacklistAddDm": "Đã Thêm Vào Danh Sách Cấm", + "blacklistRemoveDm": "Đã Xóa Khỏi Danh Sách Cấm", + "clear": "Tickets Đã Xóa", + "roles": "Vai Trò Đã Cập Nhật", + "autoclose": "Ticket Tự Động Đóng", + "autocloseEnabled": "Tự Động Đóng Đã Bật", + "autocloseDisabled": "Tự Động Đóng Đã Tắt", + "autodelete": "Ticket Tự Động Xóa", + "autodeleteEnabled": "Tự Động Xóa Đã Bật", + "autodeleteDisabled": "Tự Động Xóa Đã Tắt" + }, + "descriptions": { + "create": "Ticket của bạn đã được tạo. Nhấp vào nút bên dưới để truy cập!", + "close": "Ticket đã được đóng thành công!", + "delete": "Ticket đã được xóa thành công!", + "reopen": "Ticket đã được mở lại thành công!", + "claim": "Ticket đã được nhận thành công!", + "unclaim": "Ticket đã được bỏ nhận thành công!", + "pin": "Ticket đã được ghim thành công!", + "unpin": "Ticket đã được bỏ ghim thành công!", + "rename": "Ticket đã được đổi tên thành {0} thành công!", + "move": "Ticket đã được di chuyển đến {0} thành công!", + "add": "{0} đã được thêm vào ticket thành công!", + "remove": "{0} đã được xóa khỏi ticket thành công!", + "helpExplanation": "`` => tham số bắt buộc\n`[name]` => tham số tùy chọn", + "statsReset": "Thống kê bot đã được đặt lại thành công!", + "statsError": "Không thể xem thống kê ticket!\n{0} không phải là ticket!", + "blacklistAdd": "{0} đã bị cấm thành công!", + "blacklistRemove": "{0} đã được gỡ cấm thành công!", + "blacklistGetSuccess": "{0} hiện đang bị cấm!", + "blacklistGetEmpty": "{0} hiện không bị cấm!", + "blacklistViewEmpty": "Chưa có ai bị cấm!", + "blacklistViewTip": "Sử dụng \"/blacklist add\" để cấm người dùng!", + "clearVerify": "Bạn có chắc chắn muốn xóa nhiều ticket không?\nHành động này không thể hoàn tác!", + "clearReady": "{0} tickets đã được xóa thành công!", + "rolesEmpty": "Không có vai trò nào được cập nhật!", + "autocloseLeave": "Ticket này đã được tự động đóng vì người tạo đã rời khỏi máy chủ!", + "autocloseTimeout": "Ticket này đã được tự động đóng vì không hoạt động quá `{0}h`!", + "autodeleteLeave": "Ticket này đã được tự động xóa vì người tạo đã rời khỏi máy chủ!", + "autodeleteTimeout": "Ticket này đã được tự động xóa vì không hoạt động quá `{0} ngày`!", + "autocloseEnabled": "Tự động đóng đã được bật trong ticket này!\nNó sẽ được đóng khi không hoạt động quá `{0}h`!", + "autocloseDisabled": "Tự động đóng đã được tắt trong ticket này!\nNó sẽ không tự động đóng nữa!", + "autodeleteEnabled": "Tự động xóa đã được bật trong ticket này!\nNó sẽ được xóa khi không hoạt động quá `{0} ngày`!", + "autodeleteDisabled": "Tự động xóa đã được tắt trong ticket này!\nNó sẽ không tự động xóa nữa!", + "ticketMessageLimit": "Bạn chỉ có thể tạo {0} ticket cùng lúc!", + "ticketMessageAutoclose": "Ticket này sẽ được tự động đóng khi không hoạt động trong {0}h!", + "ticketMessageAutodelete": "Ticket này sẽ được tự động xóa khi không hoạt động trong {0} ngày!", + "panelReady": "Bạn có thể tìm thấy bảng điều khiển bên dưới!\nThông báo này có thể được xóa ngay bây giờ!" + } +, + "modal": { + "closePlaceholder": "Tại sao bạn đóng ticket này?", + "deletePlaceholder": "Tại sao bạn xóa ticket này?", + "reopenPlaceholder": "Tại sao bạn mở lại ticket này?", + "claimPlaceholder": "Tại sao bạn nhận ticket này?", + "unclaimPlaceholder": "Tại sao bạn bỏ nhận ticket này?", + "pinPlaceholder": "Tại sao bạn ghim ticket này?", + "unpinPlaceholder": "Tại sao bạn bỏ ghim ticket này?" + }, + "logs": { + "createLog": "Một ticket mới đã được tạo bởi {0}!", + "closeLog": "Ticket này đã được đóng bởi {0}!", + "closeDm": "Ticket của bạn đã được đóng trong máy chủ của chúng tôi!", + "deleteLog": "Ticket này đã được xóa bởi {0}!", + "deleteDm": "Ticket của bạn đã được xóa trong máy chủ của chúng tôi!", + "reopenLog": "Ticket này đã được mở lại bởi {0}!", + "reopenDm": "Ticket của bạn đã được mở lại trong máy chủ của chúng tôi!", + "claimLog": "Ticket này đã được nhận bởi {0}!", + "claimDm": "Ticket của bạn đã được nhận trong máy chủ của chúng tôi!", + "unclaimLog": "Ticket này đã được bỏ nhận bởi {0}!", + "unclaimDm": "Ticket của bạn đã được bỏ nhận trong máy chủ của chúng tôi!", + "pinLog": "Ticket này đã được ghim bởi {0}!", + "pinDm": "Ticket của bạn đã được ghim trong máy chủ của chúng tôi!", + "unpinLog": "Ticket này đã được bỏ ghim bởi {0}!", + "unpinDm": "Ticket của bạn đã được bỏ ghim trong máy chủ của chúng tôi!", + "renameLog": "Ticket này đã được đổi tên thành {0} bởi {1}!", + "renameDm": "Ticket của bạn đã được đổi tên thành {0} trong máy chủ của chúng tôi!", + "moveLog": "Ticket này đã được di chuyển đến {0} bởi {1}!", + "moveDm": "Ticket của bạn đã được di chuyển đến {0} trong máy chủ của chúng tôi!", + "addLog": "{0} đã được thêm vào ticket này bởi {1}!", + "addDm": "{0} đã được thêm vào ticket của bạn trong máy chủ của chúng tôi!", + "removeLog": "{0} đã được xóa khỏi ticket này bởi {1}!", + "removeDm": "{0} đã được xóa khỏi ticket của bạn trong máy chủ của chúng tôi!", + "blacklistAddLog": "{0} đã bị cấm bởi {1}!", + "blacklistRemoveLog": "{0} đã được gỡ khỏi danh sách cấm bởi {1}!", + "blacklistAddDm": "Bạn đã bị cấm trong máy chủ của chúng tôi!\nTừ bây giờ, bạn không thể tạo ticket!", + "blacklistRemoveDm": "Bạn đã được gỡ khỏi danh sách cấm trong máy chủ của chúng tôi!\nBây giờ bạn có thể tạo lại ticket!", + "clearLog": "{0} tickets đã được xóa bởi {1}!" + } + }, + "transcripts": { + "success": { + "visit": "Truy Cập Bản Ghi", + "ready": "Bản Ghi Đã Tạo", + "textFileDescription": "Đây là bản ghi văn bản của một ticket đã xóa!", + "htmlProgress": "Vui lòng đợi trong khi bản ghi html này đang được xử lý...", + "createdChannel": "Một bản ghi {0} mới đã được tạo trong máy chủ!", + "createdCreator": "Một bản ghi {0} mới đã được tạo cho một trong các ticket của bạn!", + "createdParticipant": "Một bản ghi {0} mới đã được tạo trong một trong các ticket bạn tham gia!", + "createdActiveAdmin": "Một bản ghi {0} mới đã được tạo trong một trong các ticket bạn tham gia với tư cách quản trị viên!", + "createdEveryAdmin": "Một bản ghi {0} mới đã được tạo trong một trong các ticket bạn là quản trị viên!", + "createdOther": "Một bản ghi {0} mới đã được tạo!" + }, + "errors": { + "retry": "Thử Lại", + "continue": "Xóa Không Có Bản Ghi", + "backup": "Tạo Bản Ghi Dự Phòng", + "error": "Đã xảy ra lỗi khi cố gắng tạo bản ghi.\nBạn muốn làm gì?\n\nTicket này sẽ không bị xóa cho đến khi bạn nhấp vào một trong các nút này." + } + }, + "errors": { + "titles": { + "internalError": "Lỗi Nội Bộ", + "optionMissing": "Thiếu Tùy Chọn Lệnh", + "optionInvalid": "Tùy Chọn Lệnh Không Hợp Lệ", + "unknownCommand": "Lệnh Không Xác Định", + "noPermissions": "Không Có Quyền", + "unknownTicket": "Ticket Không Xác Định", + "deprecatedTicket": "Ticket Đã Lỗi Thời", + "unknownOption": "Tùy Chọn Không Xác Định", + "unknownPanel": "Bảng Điều Khiển Không Xác Định", + "notInGuild": "Không Ở Trong Máy Chủ", + "channelRename": "Không Thể Đổi Tên Kênh", + "busy": "Ticket Đang Bận" + }, + "descriptions": { + "askForInfo": "Liên hệ với chủ sở hữu của bot này để biết thêm thông tin!", + "askForInfoResolve": "Liên hệ với chủ sở hữu bot này nếu vấn đề này không được giải quyết sau vài lần thử.", + "internalError": "Không thể phản hồi {0} này do lỗi nội bộ!", + "optionMissing": "Thiếu tham số bắt buộc trong lệnh này!", + "optionInvalid": "Tham số trong lệnh này không hợp lệ!", + "optionInvalidChoose": "Chọn trong số", + "unknownCommand": "Hãy thử truy cập menu trợ giúp để biết thêm thông tin!", + "noPermissions": "Bạn không được phép sử dụng {0} này!", + "noPermissionsList": "Quyền Bắt Buộc: (một trong số chúng)", + "noPermissionsCooldown": "Bạn không được phép sử dụng {0} này vì bạn đang trong thời gian chờ!", + "noPermissionsBlacklist": "Bạn không được phép sử dụng {0} này vì bạn đã bị cấm!", + "noPermissionsLimitGlobal": "Bạn không được phép tạo ticket vì máy chủ đã đạt đến giới hạn ticket tối đa!", + "noPermissionsLimitGlobalUser": "Bạn không được phép tạo ticket vì bạn đã đạt đến giới hạn ticket tối đa!", + "noPermissionsLimitOption": "Bạn không được phép tạo ticket vì máy chủ đã đạt đến giới hạn ticket tối đa cho tùy chọn này!", + "noPermissionsLimitOptionUser": "Bạn không được phép tạo ticket vì bạn đã đạt đến giới hạn ticket tối đa cho tùy chọn này!", + "unknownTicket": "Hãy thử lại lệnh này trong một ticket hợp lệ!", + "deprecatedTicket": "Kênh hiện tại không phải là ticket hợp lệ! Nó có thể là một ticket từ phiên bản Open Ticket cũ!", + "notInGuild": "{0} này không hoạt động trong DM! Vui lòng thử lại trong máy chủ!", + "channelRename": "Do giới hạn tốc độ của discord, hiện tại bot không thể đổi tên kênh. Kênh sẽ tự động được đổi tên trong 10 phút nếu bot không được khởi động lại.", + "channelRenameSource": "Nguồn gốc của lỗi này là: {0}", + "busy": "Không thể sử dụng {0} này!\nTicket hiện đang được bot xử lý.\n\nVui lòng thử lại sau vài giây!" + }, + "optionInvalidReasons": { + "stringRegex": "Giá trị không khớp với mẫu!", + "stringMinLength": "Giá trị cần có ít nhất {0} ký tự!", + "stringMaxLength": "Giá trị cần có nhiều nhất {0} ký tự!", + "numberInvalid": "Số không hợp lệ!", + "numberMin": "Số cần ít nhất là {0}!", + "numberMax": "Số cần nhiều nhất là {0}!", + "numberDecimal": "Số không được phép là số thập phân!", + "numberNegative": "Số không được phép là số âm!", + "numberPositive": "Số không được phép là số dương!", + "numberZero": "Số không được phép là số không!", + "channelNotFound": "Không thể tìm thấy kênh!", + "userNotFound": "Không thể tìm thấy người dùng!", + "roleNotFound": "Không thể tìm thấy vai trò!", + "memberNotFound": "Không thể tìm thấy người dùng!", + "mentionableNotFound": "Không thể tìm thấy người dùng hoặc vai trò!", + "channelType": "Loại kênh không hợp lệ!", + "notInGuild": "Tùy chọn này yêu cầu bạn phải ở trong máy chủ!" + }, + "permissions": { + "developer": "Bạn cần là nhà phát triển của bot.", + "owner": "Bạn cần là chủ sở hữu máy chủ.", + "admin": "Bạn cần là quản trị viên máy chủ.", + "moderator": "Bạn cần là người điều hành.", + "support": "Bạn cần ở trong nhóm hỗ trợ.", + "member": "Bạn cần là thành viên.", + "discord-administrator": "Bạn cần có quyền `ADMINISTRATOR`." + }, + "actionInvalid": { + "close": "Ticket đã đóng!", + "reopen": "Ticket chưa đóng!", + "claim": "Ticket đã được nhận!", + "unclaim": "Ticket chưa được nhận!", + "pin": "Ticket đã được ghim!", + "unpin": "Ticket chưa được ghim!", + "add": "Người dùng này đã có thể truy cập ticket!", + "remove": "Không thể xóa người dùng này khỏi ticket!" + } + }, + "params": { + "uppercase": { + "ticket": "Ticket", + "tickets": "Tickets", + "reason": "Lý Do", + "creator": "Người Tạo", + "remaining": "Thời Gian Còn Lại", + "added": "Đã Thêm", + "removed": "Đã Xóa", + "filter": "Bộ Lọc", + "claimedBy": "Được Nhận Bởi {0}", + "method": "Phương Pháp", + "type": "Loại", + "blacklisted": "Bị Cấm", + "panel": "Bảng Điều Khiển", + "command": "Lệnh", + "system": "Hệ Thống", + "true": "Đúng", + "false": "Sai", + "syntax": "Cú Pháp", + "originalName": "Tên Gốc", + "newName": "Tên Mới", + "until": "Đến", + "validOptions": "Tùy Chọn Hợp Lệ", + "validPanels": "Bảng Điều Khiển Hợp Lệ", + "autoclose": "Tự Động Đóng", + "autodelete": "Tự Động Xóa", + "startupDate": "Ngày Khởi Động", + "version": "Phiên Bản", + "name": "Tên", + "role": "Vai Trò", + "status": "Trạng Thái", + "claimed": "Đã Nhận", + "pinned": "Đã Ghim", + "creationDate": "Ngày Tạo" + }, + "lowercase": { + "text": "văn bản", + "html": "html", + "command": "lệnh", + "modal": "modal", + "button": "nút", + "dropdown": "dropdown", + "method": "phương pháp" + } + }, + "commands": { + "reason": "Chỉ định lý do tùy chọn sẽ hiển thị trong nhật ký.", + "help": "Nhận danh sách tất cả các lệnh có sẵn.", + "panel": "Tạo thông báo có dropdown hoặc nút (để tạo ticket).", + "panelId": "Mã định danh của bảng điều khiển bạn muốn tạo.", + "panelAutoUpdate": "Bạn có muốn bảng điều khiển này tự động cập nhật khi được chỉnh sửa không?", + "ticket": "Tạo ticket ngay lập tức.", + "ticketId": "Mã định danh của ticket bạn muốn tạo.", + "close": "Đóng ticket.", + "delete": "Xóa ticket.", + "deleteNoTranscript": "Xóa ticket này mà không tạo bản ghi.", + "reopen": "Mở lại ticket.", + "claim": "Nhận ticket.", + "claimUser": "Nhận ticket này cho người khác thay vì chính bạn.", + "unclaim": "Bỏ nhận ticket.", + "pin": "Ghim ticket.", + "unpin": "Bỏ ghim ticket.", + "move": "Di chuyển ticket.", + "moveId": "Mã định danh của tùy chọn bạn muốn di chuyển đến.", + "rename": "Đổi tên ticket.", + "renameName": "Tên mới cho ticket này.", + "add": "Thêm người dùng vào ticket.", + "addUser": "Người dùng cần thêm.", + "remove": "Xóa người dùng khỏi ticket.", + "removeUser": "Người dùng cần xóa.", + "blacklist": "Quản lý danh sách cấm ticket.", + "blacklistView": "Xem danh sách cấm hiện tại.", + "blacklistAdd": "Thêm người dùng vào danh sách cấm.", + "blacklistRemove": "Xóa người dùng khỏi danh sách cấm.", + "blacklistGet": "Nhận thông tin chi tiết từ người dùng bị cấm.", + "blacklistGetUser": "Người dùng cần nhận thông tin chi tiết.", + "stats": "Xem thống kê từ bot, thành viên hoặc ticket.", + "statsReset": "Đặt lại tất cả thống kê của bot (và bắt đầu đếm từ không).", + "statsGlobal": "Xem thống kê toàn cầu.", + "statsUser": "Xem thống kê từ người dùng trong máy chủ.", + "statsUserUser": "Người dùng cần xem.", + "statsTicket": "Xem thống kê của ticket trong máy chủ.", + "statsTicketTicket": "Ticket cần xem.", + "clear": "Xóa nhiều ticket cùng lúc.", + "clearFilter": "Bộ lọc để xóa ticket.", + "clearFilters": { + "all": "Tất Cả", + "open": "Mở", + "close": "Đã Đóng", + "claim": "Đã Nhận", + "unclaim": "Chưa Nhận", + "pin": "Đã Ghim", + "unpin": "Chưa Ghim", + "autoclose": "Tự Động Đóng" + }, + "autoclose": "Quản lý tự động đóng trong ticket.", + "autocloseDisable": "Tắt tự động đóng trong ticket này.", + "autocloseEnable": "Bật tự động đóng trong ticket này.", + "autocloseEnableTime": "Số giờ ticket này cần không hoạt động để đóng.", + "autodelete": "Quản lý tự động xóa trong ticket.", + "autodeleteDisable": "Tắt tự động xóa trong ticket này.", + "autodeleteEnable": "Bật tự động xóa trong ticket này.", + "autodeleteEnableTime": "Số ngày ticket này cần không hoạt động để xóa." + }, + "helpMenu": { + "help": "Nhận danh sách tất cả các lệnh có sẵn.", + "ticket": "Tạo ticket ngay lập tức.", + "close": "Đóng ticket, điều này vô hiệu hóa việc viết trong kênh này.", + "delete": "Xóa ticket, điều này tạo bản ghi khi được bật.", + "reopen": "Mở lại ticket, điều này cho phép viết lại trong kênh này.", + "pin": "Ghim ticket. Điều này sẽ di chuyển ticket lên đầu và thêm biểu tượng cảm xúc '📌' vào tên.", + "unpin": "Bỏ ghim ticket. Ticket sẽ giữ nguyên vị trí nhưng sẽ mất biểu tượng cảm xúc '📌'.", + "move": "Di chuyển ticket. Điều này sẽ thay đổi loại ticket này.", + "rename": "Đổi tên ticket. Điều này sẽ thay đổi tên kênh của ticket này.", + "claim": "Nhận ticket. Với điều này, bạn có thể cho nhóm của mình biết bạn đang xử lý ticket này.", + "unclaim": "Bỏ nhận ticket. Với điều này, bạn có thể cho nhóm của mình biết rằng ticket này lại rảnh.", + "add": "Thêm người dùng vào ticket. Điều này sẽ cho phép người dùng đọc và viết trong ticket này.", + "remove": "Xóa người dùng khỏi ticket. Điều này sẽ xóa khả năng đọc và viết của người dùng trong ticket này.", + "panel": "Tạo thông báo có dropdown hoặc nút (để tạo ticket).", + "blacklistView": "Xem danh sách cấm hiện tại.", + "blacklistAdd": "Thêm người dùng vào danh sách cấm.", + "blacklistRemove": "Xóa người dùng khỏi danh sách cấm.", + "blacklistGet": "Nhận thông tin chi tiết từ người dùng bị cấm.", + "statsGlobal": "Xem thống kê toàn cầu.", + "statsTicket": "Xem thống kê của ticket trong máy chủ.", + "statsUser": "Xem thống kê từ người dùng trong máy chủ.", + "statsReset": "Đặt lại tất cả thống kê của bot (và bắt đầu đếm từ không).", + "autocloseDisable": "Tắt tự động đóng trong ticket này.", + "autocloseEnable": "Bật tự động đóng trong ticket này.", + "autodeleteDisable": "Tắt tự động xóa trong ticket này.", + "autodeleteEnable": "Bật tự động xóa trong ticket này." + }, + "stats": { + "scopes": { + "global": "Thống Kê Toàn Cầu", + "system": "Thống Kê Hệ Thống", + "user": "Thống Kê Người Dùng", + "ticket": "Thống Kê Ticket", + "participants": "Người Tham Gia" + }, + "properties": { + "ticketsCreated": "Tickets Đã Tạo", + "ticketsClosed": "Tickets Đã Đóng", + "ticketsDeleted": "Tickets Đã Xóa", + "ticketsReopened": "Tickets Đã Mở Lại", + "ticketsAutoclosed": "Tickets Tự Động Đóng", + "ticketsClaimed": "Tickets Đã Nhận", + "ticketsPinned": "Tickets Đã Ghim", + "ticketsMoved": "Tickets Đã Di Chuyển", + "usersBlacklisted": "Người Dùng Bị Cấm", + "transcriptsCreated": "Bản Ghi Đã Tạo" + } + } +} diff --git a/package.json b/package.json index ccb39b9..eb3610f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "open-ticket", "author": "DJdj Development", - "version": "4.0.1", + "version": "4.0.2", "description": "The most advanced open-source discord ticket bot with HTML transcripts, plugins, questions, claiming, pinning & more! Using discord.js v14 & JSON database! ", "keywords": [ "ticket-bot", diff --git a/src/actions/claimTicket.ts b/src/actions/claimTicket.ts index cb82ed4..6729254 100644 --- a/src/actions/claimTicket.ts +++ b/src/actions/claimTicket.ts @@ -26,7 +26,7 @@ export const registerActions = async () => { await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-claimed",user.id,1,"increase") //update category - if (params.allowCategoryChange){ + if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){ const rawClaimCategory = ticket.option.get("opendiscord:channel-categories-claimed").value.find((c) => c.user == user.id) const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null if (claimCategory){ diff --git a/src/actions/closeTicket.ts b/src/actions/closeTicket.ts index c442b86..a37bb7d 100644 --- a/src/actions/closeTicket.ts +++ b/src/actions/closeTicket.ts @@ -28,7 +28,7 @@ export const registerActions = async () => { await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-closed",user.id,1,"increase") //update category - if (params.allowCategoryChange){ + if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){ const closeCategory = ticket.option.get("opendiscord:channel-category-closed").value if (closeCategory !== ""){ try { diff --git a/src/actions/reopenTicket.ts b/src/actions/reopenTicket.ts index d80878c..84e01fb 100644 --- a/src/actions/reopenTicket.ts +++ b/src/actions/reopenTicket.ts @@ -28,7 +28,7 @@ export const registerActions = async () => { await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-reopened",user.id,1,"increase") //update category - if (params.allowCategoryChange){ + if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){ const channelCategory = ticket.option.get("opendiscord:channel-category").value const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value if (channelCategory !== ""){ diff --git a/src/actions/unclaimTicket.ts b/src/actions/unclaimTicket.ts index d9b391c..0d8d8d8 100644 --- a/src/actions/unclaimTicket.ts +++ b/src/actions/unclaimTicket.ts @@ -22,7 +22,7 @@ export const registerActions = async () => { ticket.get("opendiscord:busy").value = true //update category - if (params.allowCategoryChange){ + if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){ const channelCategory = ticket.option.get("opendiscord:channel-category").value const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value if (channelCategory !== ""){ diff --git a/src/builders/embeds.ts b/src/builders/embeds.ts index 3b9dd1f..f06dde2 100644 --- a/src/builders/embeds.ts +++ b/src/builders/embeds.ts @@ -604,8 +604,8 @@ const ticketEmbeds = () => { instance.setFields(embedOptions.fields) } - if (ticket.get("opendiscord:closed").value && ticket.get("opendiscord:autodelete-enabled").value) instance.setFooter("⏱️ "+lang.getTranslationWithParams("actions.descriptions.ticketMessageAutodelete",[ticket.option.get("opendiscord:autodelete-days").value.toString()])) - else if (!ticket.get("opendiscord:closed").value && ticket.get("opendiscord:autoclose-enabled").value) instance.setFooter("⏱️ "+lang.getTranslationWithParams("actions.descriptions.ticketMessageAutoclose",[ticket.option.get("opendiscord:autoclose-hours").value.toString()])) + if (ticket.get("opendiscord:closed").value && ticket.get("opendiscord:autodelete-enabled").value) instance.setFooter("⏱️ "+lang.getTranslationWithParams("actions.descriptions.ticketMessageAutodelete",[ticket.get("opendiscord:autodelete-days").value.toString()])) + else if (!ticket.get("opendiscord:closed").value && ticket.get("opendiscord:autoclose-enabled").value) instance.setFooter("⏱️ "+lang.getTranslationWithParams("actions.descriptions.ticketMessageAutoclose",[ticket.get("opendiscord:autoclose-hours").value.toString()])) if (ticket.get("opendiscord:claimed").value){ const claimUser = await opendiscord.tickets.getTicketUser(ticket,"claimer") diff --git a/src/core/api/defaults/language.ts b/src/core/api/defaults/language.ts index 57c3be7..183cc93 100644 --- a/src/core/api/defaults/language.ts +++ b/src/core/api/defaults/language.ts @@ -471,6 +471,7 @@ export interface ODLanguageManagerIds_Default { "opendiscord:norwegian":ODLanguage, "opendiscord:russian":ODLanguage, "opendiscord:swedish":ODLanguage, + "opendiscord:vietnamese":ODLanguage, //ADD NEW LANGUAGES HERE!!! } diff --git a/src/core/api/main.ts b/src/core/api/main.ts index 39685b1..6ba49b3 100644 --- a/src/core/api/main.ts +++ b/src/core/api/main.ts @@ -130,7 +130,7 @@ export class ODMain { constructor(){ this.versions = new ODVersionManager_Default() - this.versions.add(ODVersion.fromString("opendiscord:version","v4.0.1")) + this.versions.add(ODVersion.fromString("opendiscord:version","v4.0.2")) this.versions.add(ODVersion.fromString("opendiscord:api","v1.0.0")) this.versions.add(ODVersion.fromString("opendiscord:transcripts","v2.0.0")) this.versions.add(ODVersion.fromString("opendiscord:livestatus","v2.0.0")) diff --git a/src/core/api/modules/base.ts b/src/core/api/modules/base.ts index 8daa3ae..4567b74 100644 --- a/src/core/api/modules/base.ts +++ b/src/core/api/modules/base.ts @@ -648,8 +648,8 @@ export class ODHTTPGetRequest { this.throwOnError = throwOnError const newConfig = config ?? {} newConfig.method = "GET" - if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.0.1"}) - else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.1"} + if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.0.2"}) + else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.2"} this.config = newConfig } @@ -703,8 +703,8 @@ export class ODHTTPPostRequest { this.throwOnError = throwOnError const newConfig = config ?? {} newConfig.method = "POST" - if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.0.1"}) - else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.1"} + if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.0.2"}) + else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.2"} this.config = newConfig } diff --git a/src/data/framework/checkerLoader.ts b/src/data/framework/checkerLoader.ts index 8955ae9..4a8024c 100644 --- a/src/data/framework/checkerLoader.ts +++ b/src/data/framework/checkerLoader.ts @@ -301,7 +301,7 @@ export const defaultOptionsStructure = new api.ODCheckerArrayStructure("opendisc //TICKET {name:"ticket",priority:0,properties:[{key:"type",value:"ticket"}],checker:new api.ODCheckerObjectStructure("opendiscord:ticket",{children:[ {key:"id",optional:false,priority:0,checker:new api.ODCheckerCustomStructure_UniqueId("opendiscord:ticket-id","openticket","option-ids",{regex:/^[A-Za-z0-9-éèçàêâôûî]+$/,minLength:3,maxLength:40})}, - {key:"name",optional:false,priority:0,checker:new api.ODCheckerStringStructure("opendiscord:ticket-name",{minLength:2,maxLength:50})}, + {key:"name",optional:false,priority:0,checker:new api.ODCheckerStringStructure("opendiscord:ticket-name",{minLength:2,maxLength:45})}, {key:"description",optional:false,priority:0,checker:new api.ODCheckerStringStructure("opendiscord:ticket-description",{maxLength:256})}, //TICKET BUTTON @@ -385,7 +385,7 @@ export const defaultOptionsStructure = new api.ODCheckerArrayStructure("opendisc //WEBSITE {name:"website",priority:0,properties:[{key:"type",value:"website"}],checker:new api.ODCheckerObjectStructure("opendiscord:options-website",{children:[ {key:"id",optional:false,priority:0,checker:new api.ODCheckerCustomStructure_UniqueId("opendiscord:website-id","openticket","option-ids",{regex:/^[A-Za-z0-9-éèçàêâôûî]+$/,minLength:3,maxLength:40})}, - {key:"name",optional:false,priority:0,checker:new api.ODCheckerStringStructure("opendiscord:website-name",{minLength:2,maxLength:50})}, + {key:"name",optional:false,priority:0,checker:new api.ODCheckerStringStructure("opendiscord:website-name",{minLength:2,maxLength:45})}, {key:"description",optional:false,priority:0,checker:new api.ODCheckerStringStructure("opendiscord:website-description",{maxLength:256})}, //WEBSITE BUTTON @@ -410,7 +410,7 @@ export const defaultOptionsStructure = new api.ODCheckerArrayStructure("opendisc //REACTION ROLES {name:"role",priority:0,properties:[{key:"type",value:"role"}],checker:new api.ODCheckerObjectStructure("opendiscord:options-role",{children:[ {key:"id",optional:false,priority:0,checker:new api.ODCheckerCustomStructure_UniqueId("opendiscord:role-id","openticket","option-ids",{regex:/^[A-Za-z0-9-éèçàêâôûî]+$/,minLength:3,maxLength:40})}, - {key:"name",optional:false,priority:0,checker:new api.ODCheckerStringStructure("opendiscord:role-name",{minLength:2,maxLength:50})}, + {key:"name",optional:false,priority:0,checker:new api.ODCheckerStringStructure("opendiscord:role-name",{minLength:2,maxLength:45})}, {key:"description",optional:false,priority:0,checker:new api.ODCheckerStringStructure("opendiscord:role-description",{maxLength:256})}, //ROLE BUTTON diff --git a/src/data/framework/languageLoader.ts b/src/data/framework/languageLoader.ts index 73d012f..868c534 100644 --- a/src/data/framework/languageLoader.ts +++ b/src/data/framework/languageLoader.ts @@ -29,6 +29,7 @@ export const loadAllLanguages = async () => { opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:norwegian","norwegian.json")) opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:russian","russian.json")) opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:swedish","swedish.json")) + opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:vietnamese","vietnamese.json")) /** How to add more languages? * - Register the language to the manager (see above) diff --git a/src/index.ts b/src/index.ts index 92c80f2..9c7cb04 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,7 +20,7 @@ INFORMATION: ============ - Open Ticket v4.0.1 - © DJdj Development + Open Ticket v4.0.2 - © DJdj Development support us: https://github.com/sponsors/DJj123dj discord: https://discord.dj-dj.be