diff --git a/.eggs/README.md b/.eggs/README.md
index 0342bc9..2982f9d 100644
--- a/.eggs/README.md
+++ b/.eggs/README.md
@@ -2,7 +2,7 @@
[](https://discord.com/invite/26vT9wt3n3)
-[](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.5)
+[](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.6)
[](https://github.com/sponsors/DJj123dj)
[](.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.6.json`**](openticket-egg-v4.0.6.json)
+- This egg will always use Open Ticket `v4.0.6`. Open Ticket updates will not have an effect on this egg.
+
[**`openticket-egg-v4.0.5.json`**](openticket-egg-v4.0.5.json)
- This egg will always use Open Ticket `v4.0.5`. Open Ticket updates will not have an effect on this egg.
diff --git a/.eggs/openticket-egg-v4.0.6.json b/.eggs/openticket-egg-v4.0.6.json
new file mode 100644
index 0000000..51d01cb
--- /dev/null
+++ b/.eggs/openticket-egg-v4.0.6.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.6)",
+ "author": "support@dj-dj.be",
+ "description": "This is the official Pterodactyl egg for Open Ticket v4.0.6, 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.6)\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.6\"\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 953ff77..211afa5 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,7 +1,7 @@
# Contributing Guidelines
-[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.5) [](https://github.com/sponsors/DJj123dj)
+[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.6) [](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 cda1f14..5dac9d6 100644
--- a/.github/SECURITY.md
+++ b/.github/SECURITY.md
@@ -20,14 +20,14 @@ This list will be updated on every release.
| Version | Supported | Notes |
|------------|-----------|------------------------------------------|
| 4.1.0 | 🟦 | |
+| 4.0.6 | ✅ | |
| 4.0.5 | ✅ | |
-| 4.0.4 | ✅ | |
-| 4.0.3 | ✅ | Transcripts v2.0 (Offline August 2025) |
-| 4.0.2 | 🚧 | Major discord.js bug |
-| 4.0.1 | 🚧 | |
-| 4.0.0 | 🚧 | Supported until June 2025 (LTS) |
-| 3.5.9 | 🟧 | Documentation Only |
-| < 3.5.9 | ❌ | |
+| 4.0.4 | ✅ | Supported until July 2025 (LTS) |
+| 4.0.3 | 🚧 | Transcripts v2.0 (Offline August 2025) |
+| 4.0.2 | 🟧 | Documentation Only (discord.js bug) |
+| 4.0.1 | 🟧 | Documentation Only |
+| 4.0.0 | 🟧 | Documentation Only |
+| < 4.0.0 | ❌ | |
### 🕷️ Reporting Vulnerabilities
You can report vulnerabilities, errors & bugs using one of the following methods:
diff --git a/README.md b/README.md
index 2ce9e70..f3e92ef 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
Powered By

-
+
@@ -20,7 +20,7 @@
Open Ticket is the most advanced & customisable discord ticket bot available! You are able to customise up to 300+ settings and aspects! This includes Html Transcripts, Advanced Plugins, Custom Embeds, Questions/Modals, Stats & more!
-The bot is translated in more than 27 Languages and has been battle tested in large Discord servers! If you need any help, feel free to join our discord server!
+The bot is translated in more than 28 Languages and has been battle tested in large Discord servers! If you need any help, feel free to join our discord server!
⭐️ Help us grow by giving a star! ⭐️
@@ -32,7 +32,7 @@ The bot is translated in more than 27 Languages and has been battle
- **📈 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 **27 languages** by our community!
+- **🇬🇧 translation** - Open Ticket has been translated in more than **28 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!
@@ -93,6 +93,13 @@ A big thanks to all our sponsors! Without them, it wouldn't be possible to creat
> - Fix these errors and restart the bot.
> 6. Enjoy using Open Ticket!
> ### [📔 Visit Documentation](https://otdocs.dj-dj.be)
+>
+> ### 🖥️ Recommended Hostings
+> - [⭐ **Peakhosting.nl**](https://peakhosting.nl/) - Official support for Open Ticket pterodactyl eggs.
+> - **Any Pterodactyl-Based Panel** - Easy installation & configuration.
+> - **A Virtual Private Server (VPS)** - Extra customisation & more stability. Recommended for large servers.
+>
+> *❤️ Want to display your hosting here? Contact us in our [Discord server](https://discord.dj-dj.be)!*
## 📸 Preview
@@ -147,6 +154,7 @@ Without our translators, it wouldn't be possible to translate Open Ticket in so
|🟢 |🇵🇱 Polish |danoglez |
|🟢 |🇳🇴 Norwegian |NoOneNook |
|🟢 |🇸🇪 Swedish |NoOneNook |
+|🟢 |🇮🇷 Persian |dysashop & zhavis |
|🤖 |🇪🇪 Estonian |iamnotmega |
|🤖 |🇫🇮 Finnish |iamnotmega |
|🤖 |🇷🇺 Russian |NoOneNook |
@@ -159,7 +167,6 @@ Without our translators, it wouldn't be possible to translate Open Ticket in so
|🔴 |🇸🇮 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.
diff --git a/config/general.json b/config/general.json
index 2d8fe37..0ef5399 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.5"
+ "version":"open-ticket-v4.0.6"
},
"token":"your bot token here! (or leave empty when using 'tokenFromENV')",
diff --git a/config/panels.json b/config/panels.json
index 3017154..04032b2 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.5 (or leave empty)",
+ "footer":"Open Ticket v4.0.6 (or leave empty)",
"fields":[
{"name":"field name","value":"field value","inline":false}
],
diff --git a/index.js b/index.js
index 8480e05..3da4c05 100644
--- a/index.js
+++ b/index.js
@@ -14,7 +14,7 @@ process.argv.push(...flags)
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║
╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝
- v4.0.5 - Made by DJj123dj & Contributors
+ v4.0.6 - 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 57b279b..3983fb2 100644
--- a/languages/arabic.json
+++ b/languages/arabic.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION": {
- "otversion": "v4.0.5",
+ "otversion": "v4.0.6",
"translators": ["palestinian"],
"lastedited": "06/12/2024",
"language": "Arabic",
diff --git a/languages/catalan.json b/languages/catalan.json
index f41e694..7ddfb07 100644
--- a/languages/catalan.json
+++ b/languages/catalan.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["guillee3"],
"lastedited":"21/08/2024",
"language":"Catalan",
diff --git a/languages/custom.json b/languages/custom.json
index dda25a6..a8d5948 100644
--- a/languages/custom.json
+++ b/languages/custom.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["DJj123dj"],
"lastedited":"21/08/2024",
"language":"Custom",
diff --git a/languages/czech.json b/languages/czech.json
index f71e5c9..31645e1 100644
--- a/languages/czech.json
+++ b/languages/czech.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["spyeye_"],
"lastedited":"21/08/2024",
"language":"Czech",
diff --git a/languages/danish.json b/languages/danish.json
index 557e8f6..d9d09d1 100644
--- a/languages/danish.json
+++ b/languages/danish.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["the_gamer"],
"lastedited":"26/09/2024",
"language":"Danish",
diff --git a/languages/dutch.json b/languages/dutch.json
index 5a24d34..ff24178 100644
--- a/languages/dutch.json
+++ b/languages/dutch.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["DJj123dj"],
"lastedited":"21/08/2024",
"language":"Dutch",
diff --git a/languages/english.json b/languages/english.json
index afb861e..9508ac9 100644
--- a/languages/english.json
+++ b/languages/english.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["DJj123dj"],
"lastedited":"21/08/2024",
"language":"English",
diff --git a/languages/estonian.json b/languages/estonian.json
index 7572e45..65fa34e 100644
--- a/languages/estonian.json
+++ b/languages/estonian.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["iamnotmega","ChatGPT"],
"lastedited":"21/10/2024",
"language":"Estonian",
diff --git a/languages/finnish.json b/languages/finnish.json
index 94f514d..d337f18 100644
--- a/languages/finnish.json
+++ b/languages/finnish.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["iamnotmega","ChatGPT"],
"lastedited":"21/10/2024",
"language":"Finnish",
diff --git a/languages/french.json b/languages/french.json
index 1c4452e..e7ec744 100644
--- a/languages/french.json
+++ b/languages/french.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["guillee3"],
"lastedited":"04/12/2024",
"language":"French",
diff --git a/languages/german.json b/languages/german.json
index 0242724..bfedcf0 100644
--- a/languages/german.json
+++ b/languages/german.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["benzorich"],
"lastedited":"06/10/2024",
"language":"German",
diff --git a/languages/hindi.json b/languages/hindi.json
index f6183d8..ebcdbb0 100644
--- a/languages/hindi.json
+++ b/languages/hindi.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["an_developer"],
"lastedited":"14/12/2024",
"language":"Hindi",
diff --git a/languages/hungarian.json b/languages/hungarian.json
index fd3e653..1005a93 100644
--- a/languages/hungarian.json
+++ b/languages/hungarian.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["Kornel0706"],
"lastedited":"22/08/2024",
"language":"Hungarian",
diff --git a/languages/indonesian.json b/languages/indonesian.json
index 938e53b..e68dbaa 100644
--- a/languages/indonesian.json
+++ b/languages/indonesian.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["erxg"],
"lastedited":"25/08/2024",
"language":"Indonesian",
diff --git a/languages/italian.json b/languages/italian.json
index 1a82891..e27f75c 100644
--- a/languages/italian.json
+++ b/languages/italian.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["fraden1mvp."],
"lastedited":"08/10/2024",
"language":"Italian",
diff --git a/languages/latvian.json b/languages/latvian.json
index dde15dc..6e1b6ee 100644
--- a/languages/latvian.json
+++ b/languages/latvian.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION": {
- "otversion": "v4.0.5",
+ "otversion": "v4.0.6",
"translators": ["NoOneNook"],
"lastedited": "25/03/2025",
"language": "Latvian",
diff --git a/languages/lithuanian.json b/languages/lithuanian.json
index c6b594d..8433162 100644
--- a/languages/lithuanian.json
+++ b/languages/lithuanian.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["TsgIndrius"],
"lastedited":"26/01/2025",
"language":"Lithuanian",
diff --git a/languages/norwegian.json b/languages/norwegian.json
index 09817d4..da570fa 100644
--- a/languages/norwegian.json
+++ b/languages/norwegian.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION": {
- "otversion": "v4.0.5",
+ "otversion": "v4.0.6",
"translators": ["NoOneNook"],
"lastedited": "25/03/2025",
"language": "Norwegian",
@@ -92,138 +92,138 @@
"dropdownOption": "Et panel med nedtrekksmeny aktivert kan kun inneholde alternativer av typen 'sak'!"
}
},
- "actions": {
- "buttons": {
- "create": "Opprett Sak",
- "close": "Lukk Sak",
- "delete": "Slett Sak",
- "reopen": "Gjenåpne Sak",
- "claim": "Ta Sak",
- "unclaim": "Frigi Sak",
- "pin": "Fest Sak",
- "unpin": "Løsne Sak",
- "clear": "Slett Saker",
- "helpSwitchSlash": "Vis Skråstrekskommandoer",
- "helpSwitchText": "Vis Tekstkommandoer",
- "helpPage": "Side {0}",
- "withReason": "Med Årsak",
- "withoutTranscript": "Uten Utskrift"
- },
- "titles": {
- "created": "Sak Opprettet",
- "close": "Sak Lukket",
- "delete": "Sak Slettet",
- "reopen": "Sak Gjenåpnet",
- "claim": "Sak Tatt",
- "unclaim": "Sak Frigitt",
- "pin": "Sak Festet",
- "unpin": "Sak Løsnet",
- "rename": "Sak Omdøpt",
- "move": "Sak Flyttet",
- "add": "Bruker Lagt Til Sak",
- "remove": "Bruker Fjernet Fra Sak",
-
- "help": "Tilgjengelige Kommandoer",
- "statsReset": "Tilbakestill Statistikk",
- "blacklistAdd": "Bruker Svartelistet",
- "blacklistRemove": "Bruker Fjernet Fra Svarteliste",
- "blacklistGet": "Svartelistet Bruker",
- "blacklistView": "Gjeldende Svarteliste",
- "blacklistAddDm": "Lagt Til Svarteliste",
- "blacklistRemoveDm": "Fjernet Fra Svarteliste",
- "clear": "Saker Slettet",
- "roles": "Roller Oppdatert",
-
- "autoclose": "Sak Autolukket",
- "autocloseEnabled": "Autolukking Aktivert",
- "autocloseDisabled": "Autolukking Deaktivert",
- "autodelete": "Sak Autoslettet",
- "autodeleteEnabled": "Autosletting Aktivert",
- "autodeleteDisabled": "Autosletting Deaktivert"
- },
- "descriptions": {
- "create": "Din sak er blitt opprettet. Klikk på knappen nedenfor for å få tilgang til den!",
- "close": "Saken er blitt lukket vellykket!",
- "delete": "Saken er blitt slettet vellykket!",
- "reopen": "Saken er blitt gjenåpnet vellykket!",
- "claim": "Saken er blitt tatt vellykket!",
- "unclaim": "Saken er blitt frigitt vellykket!",
- "pin": "Saken er blitt festet vellykket!",
- "unpin": "Saken er blitt løsnet vellykket!",
- "rename": "Saken er blitt omdøpt til {0} vellykket!",
- "move": "Saken er blitt flyttet til {0} vellykket!",
- "add": "{0} er blitt lagt til saken vellykket!",
- "remove": "{0} er blitt fjernet fra saken vellykket!",
-
- "helpExplanation": "`` => påkrevd parameter\n`[navn]` => valgfri parameter",
- "statsReset": "Botens statistikk er blitt tilbakestilt vellykket!",
- "statsError": "Kan ikke vise saksstatistikk!\n{0} er ikke en sak!",
- "blacklistAdd": "{0} er blitt svartelistet vellykket!",
- "blacklistRemove": "{0} er blitt fjernet fra svartelisten vellykket!",
- "blacklistGetSuccess": "{0} er for øyeblikket svartelistet!",
- "blacklistGetEmpty": "{0} er for øyeblikket ikke svartelistet!",
- "blacklistViewEmpty": "Ingen er svartelistet ennå!",
- "blacklistViewTip": "Bruk \"/blacklist add\" for å svarteliste en bruker!",
- "clearVerify": "Er du sikker på at du vil slette flere saker?\nDenne handlingen kan ikke angres!",
- "clearReady": "{0} saker er blitt slettet vellykket!",
- "rolesEmpty": "Ingen roller er blitt oppdatert!",
-
- "autocloseLeave": "Denne saken er blitt autolukket fordi oppretteren forlot serveren!",
- "autocloseTimeout": "Denne saken er blitt autolukket fordi den har vært inaktiv i mer enn `{0}t`!",
- "autodeleteLeave": "Denne saken er blitt autoslettet fordi oppretteren forlot serveren!",
- "autodeleteTimeout": "Denne saken er blitt autoslettet fordi den har vært inaktiv i mer enn `{0} dager`!",
- "autocloseEnabled": "Autolukking er blitt aktivert i denne saken!\nDen vil bli lukket når den er inaktiv i mer enn `{0}t`!",
- "autocloseDisabled": "Autolukking er blitt deaktivert i denne saken!\nDen vil ikke lenger bli lukket automatisk!",
- "autodeleteEnabled": "Autosletting er blitt aktivert i denne saken!\nDen vil bli slettet når den er inaktiv i mer enn `{0} dager`!",
- "autodeleteDisabled": "Autosletting er blitt deaktivert i denne saken!\nDen vil ikke lenger bli slettet automatisk!",
-
- "ticketMessageLimit": "Du kan kun opprette {0} sak(er) om gangen!",
- "ticketMessageAutoclose": "Denne saken vil bli autolukket når den er inaktiv i {0}t!",
- "ticketMessageAutodelete": "Denne saken vil bli autoslettet når den er inaktiv i {0} dager!",
- "panelReady": "Du finner panelet nedenfor!\nDenne meldingen kan nå slettes!"
- },
- "modal": {
- "closePlaceholder": "Hvorfor lukket du denne saken?",
- "deletePlaceholder": "Hvorfor slettet du denne saken?",
- "reopenPlaceholder": "Hvorfor gjenåpnet du denne saken?",
- "claimPlaceholder": "Hvorfor tok du denne saken?",
- "unclaimPlaceholder": "Hvorfor frigjorde du denne saken?",
- "pinPlaceholder": "Hvorfor festet du denne saken?",
- "unpinPlaceholder": "Hvorfor løsnet du denne saken?"
- },
- "logs": {
- "createLog": "En ny sak er blitt opprettet av {0}!",
- "closeLog": "Denne saken er blitt lukket av {0}!",
- "closeDm": "Din sak er blitt lukket på vår server!",
- "deleteLog": "Denne saken er blitt slettet av {0}!",
- "deleteDm": "Din sak er blitt slettet på vår server!",
- "reopenLog": "Denne saken er blitt gjenåpnet av {0}!",
- "reopenDm": "Din sak er blitt gjenåpnet på vår server!",
- "claimLog": "Denne saken er blitt tatt av {0}!",
- "claimDm": "Din sak er blitt tatt på vår server!",
- "unclaimLog": "Denne saken er blitt frigitt av {0}!",
- "unclaimDm": "Din sak er blitt frigitt på vår server!",
- "pinLog": "Denne saken er blitt festet av {0}!",
- "pinDm": "Din sak er blitt festet på vår server!",
- "unpinLog": "Denne saken er blitt løsnet av {0}!",
- "unpinDm": "Din sak er blitt løsnet på vår server!",
- "renameLog": "Denne saken er blitt omdøpt til {0} av {1}!",
- "renameDm": "Din sak er blitt omdøpt til {0} på vår server!",
- "moveLog": "Denne saken er blitt flyttet til {0} av {1}!",
- "moveDm": "Din sak er blitt flyttet til {0} på vår server!",
- "addLog": "{0} er blitt lagt til denne saken av {1}!",
- "addDm": "{0} er blitt lagt til din sak på vår server!",
- "removeLog": "{0} er blitt fjernet fra denne saken av {1}!",
- "removeDm": "{0} er blitt fjernet fra din sak på vår server!",
-
- "blacklistAddLog": "{0} er blitt svartelistet av {1}!",
- "blacklistRemoveLog": "{0} er blitt fjernet fra svartelisten av {1}!",
- "blacklistAddDm": "Du er blitt svartelistet på vår server!\nFra nå av kan du ikke opprette en sak!",
- "blacklistRemoveDm": "Du er blitt fjernet fra svartelisten på vår server!\nNå kan du opprette saker igjen!",
- "clearLog": "{0} saker er blitt slettet av {1}!"
+ "actions": {
+ "buttons": {
+ "create": "Opprett Sak",
+ "close": "Lukk Sak",
+ "delete": "Slett Sak",
+ "reopen": "Gjenåpne Sak",
+ "claim": "Ta Sak",
+ "unclaim": "Frigi Sak",
+ "pin": "Fest Sak",
+ "unpin": "Løsne Sak",
+ "clear": "Slett Saker",
+ "helpSwitchSlash": "Vis Skråstrekskommandoer",
+ "helpSwitchText": "Vis Tekstkommandoer",
+ "helpPage": "Side {0}",
+ "withReason": "Med Årsak",
+ "withoutTranscript": "Uten Utskrift"
+ },
+ "titles": {
+ "created": "Sak Opprettet",
+ "close": "Sak Lukket",
+ "delete": "Sak Slettet",
+ "reopen": "Sak Gjenåpnet",
+ "claim": "Sak Tatt",
+ "unclaim": "Sak Frigitt",
+ "pin": "Sak Festet",
+ "unpin": "Sak Løsnet",
+ "rename": "Sak Omdøpt",
+ "move": "Sak Flyttet",
+ "add": "Bruker Lagt Til Sak",
+ "remove": "Bruker Fjernet Fra Sak",
+
+ "help": "Tilgjengelige Kommandoer",
+ "statsReset": "Tilbakestill Statistikk",
+ "blacklistAdd": "Bruker Svartelistet",
+ "blacklistRemove": "Bruker Fjernet Fra Svarteliste",
+ "blacklistGet": "Svartelistet Bruker",
+ "blacklistView": "Gjeldende Svarteliste",
+ "blacklistAddDm": "Lagt Til Svarteliste",
+ "blacklistRemoveDm": "Fjernet Fra Svarteliste",
+ "clear": "Saker Slettet",
+ "roles": "Roller Oppdatert",
+
+ "autoclose": "Sak Autolukket",
+ "autocloseEnabled": "Autolukking Aktivert",
+ "autocloseDisabled": "Autolukking Deaktivert",
+ "autodelete": "Sak Autoslettet",
+ "autodeleteEnabled": "Autosletting Aktivert",
+ "autodeleteDisabled": "Autosletting Deaktivert"
+ },
+ "descriptions": {
+ "create": "Din sak er blitt opprettet. Klikk på knappen nedenfor for å få tilgang til den!",
+ "close": "Saken er blitt lukket vellykket!",
+ "delete": "Saken er blitt slettet vellykket!",
+ "reopen": "Saken er blitt gjenåpnet vellykket!",
+ "claim": "Saken er blitt tatt vellykket!",
+ "unclaim": "Saken er blitt frigitt vellykket!",
+ "pin": "Saken er blitt festet vellykket!",
+ "unpin": "Saken er blitt løsnet vellykket!",
+ "rename": "Saken er blitt omdøpt til {0} vellykket!",
+ "move": "Saken er blitt flyttet til {0} vellykket!",
+ "add": "{0} er blitt lagt til saken vellykket!",
+ "remove": "{0} er blitt fjernet fra saken vellykket!",
+
+ "helpExplanation": "`` => påkrevd parameter\n`[navn]` => valgfri parameter",
+ "statsReset": "Botens statistikk er blitt tilbakestilt vellykket!",
+ "statsError": "Kan ikke vise saksstatistikk!\n{0} er ikke en sak!",
+ "blacklistAdd": "{0} er blitt svartelistet vellykket!",
+ "blacklistRemove": "{0} er blitt fjernet fra svartelisten vellykket!",
+ "blacklistGetSuccess": "{0} er for øyeblikket svartelistet!",
+ "blacklistGetEmpty": "{0} er for øyeblikket ikke svartelistet!",
+ "blacklistViewEmpty": "Ingen er svartelistet ennå!",
+ "blacklistViewTip": "Bruk \"/blacklist add\" for å svarteliste en bruker!",
+ "clearVerify": "Er du sikker på at du vil slette flere saker?\nDenne handlingen kan ikke angres!",
+ "clearReady": "{0} saker er blitt slettet vellykket!",
+ "rolesEmpty": "Ingen roller er blitt oppdatert!",
+
+ "autocloseLeave": "Denne saken er blitt autolukket fordi oppretteren forlot serveren!",
+ "autocloseTimeout": "Denne saken er blitt autolukket fordi den har vært inaktiv i mer enn `{0}t`!",
+ "autodeleteLeave": "Denne saken er blitt autoslettet fordi oppretteren forlot serveren!",
+ "autodeleteTimeout": "Denne saken er blitt autoslettet fordi den har vært inaktiv i mer enn `{0} dager`!",
+ "autocloseEnabled": "Autolukking er blitt aktivert i denne saken!\nDen vil bli lukket når den er inaktiv i mer enn `{0}t`!",
+ "autocloseDisabled": "Autolukking er blitt deaktivert i denne saken!\nDen vil ikke lenger bli lukket automatisk!",
+ "autodeleteEnabled": "Autosletting er blitt aktivert i denne saken!\nDen vil bli slettet når den er inaktiv i mer enn `{0} dager`!",
+ "autodeleteDisabled": "Autosletting er blitt deaktivert i denne saken!\nDen vil ikke lenger bli slettet automatisk!",
+
+ "ticketMessageLimit": "Du kan kun opprette {0} sak(er) om gangen!",
+ "ticketMessageAutoclose": "Denne saken vil bli autolukket når den er inaktiv i {0}t!",
+ "ticketMessageAutodelete": "Denne saken vil bli autoslettet når den er inaktiv i {0} dager!",
+ "panelReady": "Du finner panelet nedenfor!\nDenne meldingen kan nå slettes!"
+ },
+ "modal": {
+ "closePlaceholder": "Hvorfor lukket du denne saken?",
+ "deletePlaceholder": "Hvorfor slettet du denne saken?",
+ "reopenPlaceholder": "Hvorfor gjenåpnet du denne saken?",
+ "claimPlaceholder": "Hvorfor tok du denne saken?",
+ "unclaimPlaceholder": "Hvorfor frigjorde du denne saken?",
+ "pinPlaceholder": "Hvorfor festet du denne saken?",
+ "unpinPlaceholder": "Hvorfor løsnet du denne saken?"
+ },
+ "logs": {
+ "createLog": "En ny sak er blitt opprettet av {0}!",
+ "closeLog": "Denne saken er blitt lukket av {0}!",
+ "closeDm": "Din sak er blitt lukket på vår server!",
+ "deleteLog": "Denne saken er blitt slettet av {0}!",
+ "deleteDm": "Din sak er blitt slettet på vår server!",
+ "reopenLog": "Denne saken er blitt gjenåpnet av {0}!",
+ "reopenDm": "Din sak er blitt gjenåpnet på vår server!",
+ "claimLog": "Denne saken er blitt tatt av {0}!",
+ "claimDm": "Din sak er blitt tatt på vår server!",
+ "unclaimLog": "Denne saken er blitt frigitt av {0}!",
+ "unclaimDm": "Din sak er blitt frigitt på vår server!",
+ "pinLog": "Denne saken er blitt festet av {0}!",
+ "pinDm": "Din sak er blitt festet på vår server!",
+ "unpinLog": "Denne saken er blitt løsnet av {0}!",
+ "unpinDm": "Din sak er blitt løsnet på vår server!",
+ "renameLog": "Denne saken er blitt omdøpt til {0} av {1}!",
+ "renameDm": "Din sak er blitt omdøpt til {0} på vår server!",
+ "moveLog": "Denne saken er blitt flyttet til {0} av {1}!",
+ "moveDm": "Din sak er blitt flyttet til {0} på vår server!",
+ "addLog": "{0} er blitt lagt til denne saken av {1}!",
+ "addDm": "{0} er blitt lagt til din sak på vår server!",
+ "removeLog": "{0} er blitt fjernet fra denne saken av {1}!",
+ "removeDm": "{0} er blitt fjernet fra din sak på vår server!",
+
+ "blacklistAddLog": "{0} er blitt svartelistet av {1}!",
+ "blacklistRemoveLog": "{0} er blitt fjernet fra svartelisten av {1}!",
+ "blacklistAddDm": "Du er blitt svartelistet på vår server!\nFra nå av kan du ikke opprette en sak!",
+ "blacklistRemoveDm": "Du er blitt fjernet fra svartelisten på vår server!\nNå kan du opprette saker igjen!",
+ "clearLog": "{0} saker er blitt slettet av {1}!"
}
- },
- "transcripts": {
+ },
+ "transcripts": {
"success": {
"visit": "Besøk Utskrift",
"ready": "Utskrift Opprettet",
diff --git a/languages/persian.json b/languages/persian.json
new file mode 100644
index 0000000..f402a04
--- /dev/null
+++ b/languages/persian.json
@@ -0,0 +1,478 @@
+{
+ "_TRANSLATION":{
+ "otversion":"v4.0.6",
+ "translators":["dysashop","zhavis"],
+ "lastedited":"28/05/2025",
+ "language":"Persian",
+ "automated":false
+ },
+ "checker":{
+ "system":{
+ "typeError":"[خطا]",
+ "headerOpenTicket":"بازکردن تیکت",
+ "typeWarning":"[اخطار]",
+ "typeInfo":"[اطلاعات]",
+ "headerConfigChecker":"جستجوگر پیکربندی",
+ "headerDescription":"برای خطاها فایل پیکربندی ( کانفیگ ) خود را چک کنید",
+ "footerError":"ربات تا تمام مدت شروع نمی شود {0}'s ثابت هستند!",
+ "footerWarning":"توصیه میشه همه رو تعمیر کنید {0}'s قبل از شروع کردن!",
+ "footerSupport":"پشتیبانی: {0} - اسناد: {1}",
+ "compactInformation":"استفاده کنید {0} برای اطلاعات بیشتر!",
+ "dataPath":"path",
+ "dataDocs":"docs",
+ "dataMessages":"message"
+ },
+ "messages":{
+ "stringTooShort":"این رشته نمیتواند کوتاه تر از این باشد {0} شخصیت ها!",
+ "stringTooLong":"این رشته نمیتواند طولانی تر از این باشد {0} شخصیت ها!",
+ "stringLengthInvalid":"این رشته باید باشد {0} شخصیت های طولانی!",
+ "stringStartsWith":"این رشته باید با آن شروع شود {0}!",
+ "stringEndsWith":"این رشته باید به پایان برسد {0}!",
+ "stringContains":"این رشته باید حاوی باشد {0}!",
+ "stringChoices":"این رشته فقط می تواند یکی از مقادیر زیر باشد: {0}!",
+ "stringRegex":"این رشته اشتباه است!",
+
+ "numberTooShort":"این عدد نمیتواند کوتاهتر از {0} کاراکتر باشد!",
+ "numberTooLong":"این عدد نمیتواند طولانیتر از {0} کاراکتر باشد!",
+ "numberLengthInvalid":"این عدد باید دقیقاً {0} کاراکتر طول داشته باشد!",
+ "numberTooSmall":"این عدد باید حداقل {0} باشد!",
+ "numberTooLarge":"این عدد باید حداکثر {0} باشد!",
+ "numberNotEqual":"این عدد باید برابر با {0} باشد!",
+ "numberStep": "این عدد باید مضربی از {0} باشد!",
+ "numberStepOffset": "این عدد باید مضربی از {0} باشد و با {1} شروع شود!",
+ "numberStartsWith": "این عدد باید با {0} شروع شود!",
+ "numberEndsWith": "این عدد باید با {0} پایان یابد!",
+ "numberContains": "این عدد باید شامل {0} باشد!",
+ "numberChoices": "این عدد فقط میتواند یکی از مقادیر زیر باشد: {0}!",
+ "numberFloat": "این عدد نمیتواند اعشاری باشد!",
+ "numberNegative": "این عدد نمیتواند منفی باشد!",
+ "numberPositive": "این عدد نمیتواند مثبت باشد!",
+ "numberZero": "این عدد نمیتواند صفر باشد!",
+
+ "booleanTrue": "این مقدار بولین نمیتواند درست (true) باشد!",
+ "booleanFalse": "این مقدار بولین نمیتواند نادرست (false) باشد!",
+
+ "arrayEmptyDisabled": "این آرایه نمیتواند خالی باشد!",
+ "arrayEmptyRequired": "این آرایه باید خالی باشد!",
+ "arrayTooShort": "طول این آرایه باید حداقل {0} باشد!",
+ "arrayTooLong": "طول این آرایه باید حداکثر {0} باشد!",
+ "arrayLengthInvalid": "طول این آرایه باید دقیقاً {0} باشد!",
+ "arrayInvalidTypes": "این آرایه فقط میتواند شامل انواع زیر باشد: {0}!",
+ "arrayDouble": "این آرایه نمیتواند مقادیر تکراری داشته باشد!",
+
+ "discordInvalidId": "این شناسه دیسکورد {0} نامعتبر است!",
+ "discordInvalidIdOptions": "این شناسه دیسکورد {0} نامعتبر است! میتوانید از یکی از این موارد استفاده کنید: {1}!",
+ "discordInvalidToken": "این توکن دیسکورد از نظر ساختاری نامعتبر است!",
+ "colorInvalid": "این کد رنگ هگزادسیمال نامعتبر است!",
+ "emojiTooShort": "این رشته باید حداقل {0} ایموجی داشته باشد!",
+ "emojiTooLong": "این رشته باید حداکثر {0} ایموجی داشته باشد!",
+ "emojiCustom": "این ایموجی نمیتواند یک ایموجی سفارشی دیسکورد باشد!",
+ "emojiInvalid": "این ایموجی نامعتبر است!",
+ "urlInvalid": "این آدرس URL نامعتبر است!",
+ "urlInvalidHttp": "این آدرس URL فقط میتواند از پروتکل https:// استفاده کند!",
+ "urlInvalidProtocol": "این آدرس URL فقط میتواند از پروتکلهای http:// و https:// استفاده کند!",
+ "urlInvalidHostname": "این آدرس URL دارای نام میزبان غیرمجازی است!",
+ "urlInvalidExtension": "این آدرس URL دارای پسوند نامعتبر است! یکی از موارد زیر را انتخاب کنید: {0}!",
+ "urlInvalidPath": "این آدرس URL دارای مسیر نامعتبر است!",
+ "idNotUnique": "این شناسه یکتا نیست، لطفاً از شناسه دیگری استفاده کنید!",
+ "idNonExistent": "شناسه {0} وجود ندارد!",
+
+ "invalidType": "این ویژگی باید از نوع {0} باشد!",
+ "propertyMissing": "ویژگی {0} در این شیء وجود ندارد!",
+ "propertyOptional": "ویژگی {0} در این شیء اختیاری است!",
+ "objectDisabled": "این شیء غیرفعال است، آن را با استفاده از {0} فعال کنید!",
+ "nullInvalid": "این ویژگی نمیتواند null باشد!",
+ "switchInvalidType": "این باید یکی از انواع زیر باشد: {0}!",
+ "objectSwitchInvalid": "این شیء باید یکی از انواع زیر باشد: {0}!",
+
+ "invalidLanguage": "این زبان نامعتبر است!",
+ "invalidButton": "این دکمه باید حداقل شامل یک {0} یا {1} باشد!",
+ "unusedOption": "گزینه {0} در هیچ جایی استفاده نشده است!",
+ "unusedQuestion": "سوال {0} در هیچ جایی استفاده نشده است!",
+ "dropdownOption": "پنلی که منوی کشویی آن فعال است، فقط میتواند شامل گزینههایی از نوع 'تیکت' باشد!"
+ }
+ },
+ "actions":{
+ "buttons":{
+ "create": "بازدید از تیکت",
+ "close": "بستن تیکت",
+ "delete": "حذف تیکت",
+ "reopen": "بازگشایی تیکت",
+ "claim": "اختصاص تیکت",
+ "unclaim": "لغو اختصاص تیکت",
+ "pin": "پین کردن تیکت",
+ "unpin": "لغو پین تیکت",
+ "clear": "حذف تیکتها",
+ "helpSwitchSlash": "مشاهده دستورات اسلش",
+ "helpSwitchText": "مشاهده دستورات متنی",
+ "helpPage": "صفحه {0}",
+ "withReason": "با دلیل",
+ "withoutTranscript": "بدون رونوشت"
+ },
+ "titles":{
+ "created": "تیکت ایجاد شد",
+ "close": "تیکت بسته شد",
+ "delete": "تیکت حذف شد",
+ "reopen": "تیکت بازگشایی شد",
+ "claim": "تیکت اختصاص یافت",
+ "unclaim": "اختصاص تیکت لغو شد",
+ "pin": "تیکت پین شد",
+ "unpin": "پین تیکت لغو شد",
+ "rename": "نام تیکت تغییر یافت",
+ "move": "تیکت منتقل شد",
+ "add": "کاربر به تیکت اضافه شد",
+ "remove": "کاربر از تیکت حذف شد",
+
+ "help": "دستورات موجود",
+ "statsReset": "بازنشانی آمار",
+ "blacklistAdd": "کاربر به لیست سیاه اضافه شد",
+ "blacklistRemove": "کاربر از لیست سیاه آزاد شد",
+ "blacklistGet": "کاربر لیست سیاه",
+ "blacklistView": "لیست سیاه کنونی",
+ "blacklistAddDm": "به لیست سیاه اضافه شد",
+ "blacklistRemoveDm": "از لیست سیاه حذف شد",
+ "clear": "تیکتها پاکسازی شدند",
+ "roles": "نقشها بهروزرسانی شدند",
+
+ "autoclose": "تیکت بهصورت خودکار بسته شد",
+ "autocloseEnabled": "بسته شدن خودکار فعال شد",
+ "autocloseDisabled": "بسته شدن خودکار غیرفعال شد",
+ "autodelete": "تیکت بهصورت خودکار حذف شد",
+ "autodeleteEnabled": "حذف خودکار فعال شد",
+ "autodeleteDisabled": "حذف خودکار غیرفعال شد"
+ },
+ "descriptions":{
+ "create": "تیکت شما با موفقیت ایجاد شد. برای دسترسی به آن، روی دکمه زیر کلیک کنید!",
+ "close": "تیکت با موفقیت بسته شد!",
+ "delete": "تیکت با موفقیت حذف شد!",
+ "reopen": "تیکت با موفقیت دوباره باز شد!",
+ "claim": "تیکت با موفقیت به شما اختصاص یافت!",
+ "unclaim": "تیکت با موفقیت از حالت اختصاصیافته خارج شد!",
+ "pin": "تیکت با موفقیت پین شد!",
+ "unpin": "تیکت با موفقیت از حالت پین خارج شد!",
+ "rename": "نام تیکت با موفقیت به {0} تغییر یافت!",
+ "move": "تیکت با موفقیت به {0} منتقل شد!",
+ "add": "کاربر {0} با موفقیت به تیکت اضافه شد!",
+ "remove": "کاربر {0} با موفقیت از تیکت حذف شد!",
+
+ "helpExplanation": "``: پارامتر اجباری\n`[name]`: پارامتر اختیاری",
+ "statsReset": "آمار ربات با موفقیت بازنشانی شد!",
+ "statsError": "امکان مشاهده آمار تیکت وجود ندارد!\n{0} یک تیکت معتبر نیست!",
+ "blacklistAdd": "کاربر {0} با موفقیت به لیست سیاه اضافه شد!",
+ "blacklistRemove": "کاربر {0} با موفقیت از لیست سیاه آزاد شد!",
+ "blacklistGetSuccess": "کاربر {0} در حال حاضر در لیست سیاه قرار دارد!",
+ "blacklistGetEmpty": "کاربر {0} در حال حاضر در لیست سیاه نیست!",
+ "blacklistViewEmpty": "هنوز هیچ کاربری به لیست سیاه اضافه نشده است!",
+ "blacklistViewTip": "برای افزودن کاربر به لیست سیاه از دستور `/blacklist add` استفاده کنید!",
+ "clearVerify": "آیا مطمئن هستید که میخواهید چندین تیکت را حذف کنید؟\nاین اقدام قابل بازگشت نیست!",
+ "clearReady": "{0} تیکت با موفقیت حذف شدند!",
+ "rolesEmpty": "هیچ نقشی بهروزرسانی نشد!",
+
+ "autocloseLeave": "این تیکت بهطور خودکار بسته شد زیرا ایجادکننده آن سرور را ترک کرده است!",
+ "autocloseTimeout": "این تیکت بهطور خودکار بسته شد زیرا بیش از {0} ساعت غیرفعال بوده است!",
+ "autodeleteLeave": "این تیکت بهطور خودکار حذف شد زیرا ایجادکننده آن سرور را ترک کرده است!",
+ "autodeleteTimeout": "این تیکت بهطور خودکار حذف شد زیرا بیش از {0} روز غیرفعال بوده است!",
+ "autocloseEnabled": "قابلیت بسته شدن خودکار برای این تیکت فعال شد!\nتیکت پس از {0} ساعت غیرفعال بودن بسته خواهد شد!",
+ "autocloseDisabled": "قابلیت بسته شدن خودکار برای این تیکت غیرفعال شد!\nتیکت دیگر بهصورت خودکار بسته نخواهد شد!",
+ "autodeleteEnabled": "قابلیت حذف خودکار برای این تیکت فعال شد!\nتیکت پس از {0} روز غیرفعال بودن حذف خواهد شد!",
+ "autodeleteDisabled": "قابلیت حذف خودکار برای این تیکت غیرفعال شد!\nتیکت دیگر بهصورت خودکار حذف نخواهد شد!",
+
+ "ticketMessageLimit": "شما تنها میتوانید همزمان {0} تیکت ایجاد کنید!",
+ "ticketMessageAutoclose": "این تیکت پس از {0} ساعت غیرفعال بودن بهصورت خودکار بسته خواهد شد!",
+ "ticketMessageAutodelete": "این تیکت پس از {0} روز غیرفعال بودن بهصورت خودکار حذف خواهد شد!",
+ "panelReady": "پنل در زیر قابل مشاهده است!\nاکنون میتوانید این پیام را حذف کنید!"
+ },
+ "modal":{
+ "closePlaceholder": "چرا این تیکت را بستید؟",
+ "deletePlaceholder": "چرا این تیکت را حذف کردید؟",
+ "reopenPlaceholder": "چرا این تیکت را دوباره باز کردید؟",
+ "claimPlaceholder": "چرا این تیکت را به خود اختصاص دادید؟",
+ "unclaimPlaceholder": "چرا اختصاص این تیکت را لغو کردید؟",
+ "pinPlaceholder": "چرا این تیکت را پین کردید؟",
+ "unpinPlaceholder": "چرا پین این تیکت را لغو کردید؟"
+ },
+ "logs":{
+ "createLog": "تیکت جدیدی توسط {0} ایجاد شد!",
+ "closeLog": "این تیکت توسط {0} بسته شد!",
+ "closeDm": "تیکت شما در سرور ما بسته شد!",
+ "deleteLog": "این تیکت توسط {0} حذف شد!",
+ "deleteDm": "تیکت شما در سرور ما حذف شد!",
+ "reopenLog": "این تیکت توسط {0} دوباره باز شد!",
+ "reopenDm": "تیکت شما در سرور ما دوباره باز شد!",
+ "claimLog": "این تیکت توسط {0} اختصاص یافت!",
+ "claimDm": "تیکت شما در سرور ما اختصاص یافت!",
+ "unclaimLog": "اختصاص این تیکت توسط {0} لغو شد!",
+ "unclaimDm": "اختصاص تیکت شما در سرور ما لغو شد!",
+ "pinLog": "این تیکت توسط {0} پین شد!",
+ "pinDm": "تیکت شما در سرور ما پین شد!",
+ "unpinLog": "پین این تیکت توسط {0} لغو شد!",
+ "unpinDm": "پین تیکت شما در سرور ما لغو شد!",
+ "renameLog": "این تیکت توسط {1} به {0} تغییر نام یافت!",
+ "renameDm": "تیکت شما در سرور ما به {0} تغییر نام یافت!",
+ "moveLog": "این تیکت توسط {1} به {0} منتقل شد!",
+ "moveDm": "تیکت شما در سرور ما به {0} منتقل شد!",
+ "addLog": "کاربر {0} توسط {1} به این تیکت اضافه شد!",
+ "addDm": "کاربر {0} به تیکت شما در سرور ما اضافه شد!",
+ "removeLog": "کاربر {0} توسط {1} از این تیکت حذف شد!",
+ "removeDm": "کاربر {0} از تیکت شما در سرور ما حذف شد!",
+
+ "blacklistAddLog": "کاربر {0} توسط {1} به لیست سیاه اضافه شد!",
+ "blacklistRemoveLog": "کاربر {0} توسط {1} از لیست سیاه حذف شد!",
+ "blacklistAddDm": "شما در سرور ما به لیست سیاه اضافه شدید!\nاز این پس نمیتوانید تیکت ایجاد کنید!",
+ "blacklistRemoveDm": "شما از لیست سیاه در سرور ما حذف شدید!\nاکنون میتوانید دوباره تیکت ایجاد کنید!",
+ "clearLog": "{0} تیکت توسط {1} حذف شدند!"
+ }
+ },
+ "transcripts":{
+ "success":{
+ "visit": "بازدید از رونوشت",
+ "ready": "رونوشت ایجاد شد",
+ "textFileDescription": "این فایل متنی، رونوشت یک تیکت حذفشده است!",
+ "htmlProgress": "لطفاً صبر کنید تا این رونوشت HTML پردازش شود...",
+
+ "createdChannel": "یک رونوشت {0} جدید در سرور ایجاد شد!",
+ "createdCreator": "یک رونوشت {0} جدید برای یکی از تیکتهای شما ایجاد شد!",
+ "createdParticipant": "یک رونوشت {0} جدید در یکی از تیکتهایی که در آن مشارکت داشتید ایجاد شد!",
+ "createdActiveAdmin": "یک رونوشت {0} جدید در یکی از تیکتهایی که بهعنوان مدیر در آن مشارکت داشتید ایجاد شد!",
+ "createdEveryAdmin": "یک رونوشت {0} جدید در یکی از تیکتهایی که شما مدیر آن بودید ایجاد شد!",
+ "createdOther": "یک رونوشت {0} جدید ایجاد شد!"
+ },
+ "errors":{
+ "retry": "دوباره تلاش کنید",
+ "continue": "حذف بدون رونوشت",
+ "backup": "ایجاد رونوشت پشتیبان",
+ "error": "مشکلی در هنگام ایجاد رونوشت رخ داد.\nمیخواهید چه کاری انجام دهید؟\n\nاین تیکت تا زمانی که یکی از این دکمهها را کلیک نکنید حذف نخواهد شد."
+ }
+ },
+ "errors":{
+ "titles":{
+ "internalError": "خطای داخلی",
+ "optionMissing": "گزینه دستور غایب است",
+ "optionInvalid": "گزینه دستور نامعتبر است",
+ "unknownCommand": "دستور ناشناخته",
+ "noPermissions": "بدون مجوز",
+ "unknownTicket": "تیکت ناشناخته",
+ "deprecatedTicket": "تیکت منسوخشده",
+ "unknownOption": "گزینه ناشناخته",
+ "unknownPanel": "پنل ناشناخته",
+ "notInGuild": "خارج از سرور",
+ "channelRename": "عدم امکان تغییر نام کانال",
+ "busy": "تیکت مشغول است"
+ },
+ "descriptions":{
+ "askForInfo": "برای اطلاعات بیشتر با صاحب این ربات تماس بگیرید!",
+ "askForInfoResolve": "اگر این مشکل پس از چند بار تلاش برطرف نشد، با صاحب این ربات تماس بگیرید.",
+ "internalError": "به دلیل خطای داخلی، امکان پاسخ به این {0} وجود نداشت!",
+ "optionMissing": "یک پارامتر ضروری در این دستور وجود ندارد!",
+ "optionInvalid": "یک پارامتر در این دستور نامعتبر است!",
+ "optionInvalidChoose": "یکی از موارد زیر را انتخاب کنید:",
+ "unknownCommand": "برای اطلاعات بیشتر، منوی راهنما را بررسی کنید!",
+ "noPermissions": "شما اجازه استفاده از این {0} را ندارید!",
+ "noPermissionsList": "مجوزهای مورد نیاز: (یکی از آنها)",
+ "noPermissionsCooldown": "به دلیل وجود محدودیت زمانی، اجازه استفاده از این {0} را ندارید!",
+ "noPermissionsBlacklist": "چون در لیست سیاه قرار دارید، اجازه استفاده از این {0} را ندارید!",
+ "noPermissionsLimitGlobal": "به دلیل رسیدن سرور به حداکثر تعداد تیکت، نمیتوانید تیکت ایجاد کنید!",
+ "noPermissionsLimitGlobalUser": "به دلیل رسیدن شما به حداکثر تعداد تیکت، نمیتوانید تیکت ایجاد کنید!",
+ "noPermissionsLimitOption": "به دلیل رسیدن سرور به حداکثر تعداد تیکت برای این گزینه، نمیتوانید تیکت ایجاد کنید!",
+ "noPermissionsLimitOptionUser": "به دلیل رسیدن شما به حداکثر تعداد تیکت برای این گزینه، نمیتوانید تیکت ایجاد کنید!",
+ "unknownTicket": "این دستور را دوباره در یک تیکت معتبر امتحان کنید!",
+ "deprecatedTicket": "کانال کنونی یک تیکت معتبر نیست! ممکن است این تیکت از نسخه قدیمی Open Ticket باشد!",
+ "notInGuild": "این {0} در پیامهای مستقیم (DM) کار نمیکند! لطفاً دوباره در یک سرور امتحان کنید!",
+ "channelRename": "به دلیل محدودیتهای نرخ دیسکورد، ربات در حال حاضر نمیتواند نام کانال را تغییر دهد. اگر ربات ریاستارت نشود، نام کانال ظرف 10 دقیقه بهطور خودکار تغییر خواهد کرد.",
+ "channelRenameSource": "منبع این خطا: {0}",
+ "busy": "امکان استفاده از این {0} وجود ندارد!\nتیکت در حال پردازش توسط ربات است.\n\nلطفاً چند ثانیه دیگر دوباره امتحان کنید!"
+ },
+ "optionInvalidReasons":{
+ "stringRegex": "مقدار با الگوی مورد نظر مطابقت ندارد!",
+ "stringMinLength": "مقدار باید حداقل {0} کاراکتر باشد!",
+ "stringMaxLength": "مقدار باید حداکثر {0} کاراکتر باشد!",
+ "numberInvalid": "عدد نامعتبر است!",
+ "numberMin": "عدد باید حداقل {0} باشد!",
+ "numberMax": "عدد باید حداکثر {0} باشد!",
+ "numberDecimal": "عدد نمیتواند اعشاری باشد!",
+ "numberNegative": "عدد نمیتواند منفی باشد!",
+ "numberPositive": "عدد نمیتواند مثبت باشد!",
+ "numberZero": "عدد نمیتواند صفر باشد!",
+ "channelNotFound": "کانال یافت نشد!",
+ "userNotFound": "کاربر یافت نشد!",
+ "roleNotFound": "نقش یافت نشد!",
+ "memberNotFound": "کاربر یافت نشد!",
+ "mentionableNotFound": "کاربر یا نقش یافت نشد!",
+ "channelType": "نوع کانال نامعتبر است!",
+ "notInGuild": "این گزینه نیازمند حضور شما در یک سرور است!"
+ },
+ "permissions":{
+ "developer": "شما باید توسعهدهنده این ربات باشید.",
+ "owner": "شما باید صاحب سرور باشید.",
+ "admin": "شما باید مدیر سرور باشید.",
+ "moderator": "شما باید ناظم (مدراتور) باشید.",
+ "support": "شما باید عضو تیم پشتیبانی باشید.",
+ "member": "شما باید عضو سرور باشید.",
+ "discord-administrator": "شما باید مجوز `ADMINISTRATOR` را داشته باشید."
+ },
+ "actionInvalid":{
+ "close": "تیکت قبلاً بسته شده است!",
+ "reopen": "تیکت هنوز بسته نشده است!",
+ "claim": "تیکت قبلاً اختصاص یافته است!",
+ "unclaim": "تیکت هنوز اختصاص نیافته است!",
+ "pin": "تیکت قبلاً پین شده است!",
+ "unpin": "تیکت هنوز پین نشده است!",
+ "add": "این کاربر قبلاً به تیکت دسترسی دارد!",
+ "remove": "امکان حذف این کاربر از تیکت وجود ندارد!"
+ }
+ },
+ "params":{
+ "uppercase":{
+ "ticket": "تیکت",
+ "tickets": "تیکتها",
+ "reason": "دلیل",
+ "creator": "ایجادکننده",
+ "remaining": "زمان باقیمانده",
+ "added": "اضافهشده",
+ "removed": "حذفشده",
+ "filter": "فیلتر",
+ "claimedBy": "اختصاصیافته به {0}",
+ "method": "روش",
+ "type": "نوع",
+ "blacklisted": "در لیست سیاه",
+ "panel": "پنل",
+ "command": "دستور",
+ "system": "سیستم",
+ "true": "درست",
+ "false": "نادرست",
+ "syntax": "نحوه نگارش",
+ "originalName": "نام اصلی",
+ "newName": "نام جدید",
+ "until": "تا",
+ "validOptions": "گزینههای معتبر",
+ "validPanels": "پنلهای معتبر",
+ "autoclose": "بسته شدن خودکار",
+ "autodelete": "حذف خودکار",
+ "startupDate": "تاریخ راهاندازی",
+ "version": "نسخه",
+ "name": "نام",
+ "role": "نقش",
+ "status": "وضعیت",
+ "claimed": "اختصاصیافته",
+ "pinned": "پینشده",
+ "creationDate": "تاریخ ایجاد"
+ },
+ "lowercase":{
+ "text": "متن",
+ "html": "اچتیامال",
+ "command": "دستور",
+ "modal": "پنجره بازشو",
+ "button": "دکمه",
+ "dropdown": "منوی کشویی",
+ "method": "روش"
+ }
+ },
+ "commands":{
+ "reason": "یک دلیل اختیاری مشخص کنید که در لاگها قابل مشاهده خواهد بود.",
+ "help": "لیستی از تمام دستورات موجود را دریافت کنید.",
+ "panel": "یک پیام با منوی کشویی یا دکمهها ایجاد کنید (برای ساخت تیکت).",
+ "panelId": "شناسه پنلی که میخواهید ایجاد کنید.",
+ "panelAutoUpdate": "آیا میخواهید این پنل هنگام ویرایش بهصورت خودکار بهروزرسانی شود؟",
+ "ticket": "فوراً یک تیکت ایجاد کنید.",
+ "ticketId": "شناسه تیکتی که میخواهید ایجاد کنید.",
+ "close": "یک تیکت را ببندید.",
+ "delete": "یک تیکت را حذف کنید.",
+ "deleteNoTranscript": "این تیکت را بدون ایجاد رونوشت حذف کنید.",
+ "reopen": "یک تیکت را دوباره باز کنید.",
+ "claim": "یک تیکت را به خود اختصاص دهید.",
+ "claimUser": "این تیکت را به جای خودتان به شخص دیگری اختصاص دهید.",
+ "unclaim": "اختصاص یک تیکت را لغو کنید.",
+ "pin": "یک تیکت را پین کنید.",
+ "unpin": "پین یک تیکت را لغو کنید.",
+ "move": "یک تیکت را منتقل کنید.",
+ "moveId": "شناسه گزینهای که میخواهید تیکت به آن منتقل شود.",
+ "rename": "نام یک تیکت را تغییر دهید.",
+ "renameName": "نام جدید برای این تیکت.",
+ "add": "یک کاربر را به تیکت اضافه کنید.",
+ "addUser": "کاربری که میخواهید اضافه کنید.",
+ "remove": "یک کاربر را از تیکت حذف کنید.",
+ "removeUser": "کاربری که میخواهید حذف کنید.",
+ "blacklist": "لیست سیاه تیکتها را مدیریت کنید.",
+ "blacklistView": "لیستی از لیست سیاه کنونی را مشاهده کنید.",
+ "blacklistAdd": "یک کاربر را به لیست سیاه اضافه کنید.",
+ "blacklistRemove": "یک کاربر را از لیست سیاه حذف کنید.",
+ "blacklistGet": "جزئیات یک کاربر در لیست سیاه را دریافت کنید.",
+ "blacklistGetUser": "کاربری که میخواهید جزئیاتش را دریافت کنید.",
+ "stats": "آمار ربات، یک عضو یا یک تیکت را مشاهده کنید.",
+ "statsReset": "تمام آمار ربات را بازنشانی کنید (و شمارش را از صفر شروع کنید).",
+ "statsGlobal": "آمار کلی را مشاهده کنید.",
+ "statsUser": "آمار یک کاربر در سرور را مشاهده کنید.",
+ "statsUserUser": "کاربری که میخواهید آمارش را مشاهده کنید.",
+ "statsTicket": "آمار یک تیکت در سرور را مشاهده کنید.",
+ "statsTicketTicket": "تیکتی که میخواهید آمارش را مشاهده کنید.",
+ "clear": "چندین تیکت را بهصورت همزمان حذف کنید.",
+ "clearFilter": "فیلتر برای حذف تیکتها.",
+ "clearFilters": {
+ "all": "همه",
+ "open": "باز",
+ "close": "بسته",
+ "claim": "اختصاصیافته",
+ "unclaim": "بدون اختصاص",
+ "pin": "پینشده",
+ "unpin": "بدون پین",
+ "autoclose": "بستهشده خودکار"
+ },
+ "autoclose": "مدیریت بسته شدن خودکار در یک تیکت.",
+ "autocloseDisable": "غیرفعال کردن بسته شدن خودکار در این تیکت.",
+ "autocloseEnable": "فعال کردن بسته شدن خودکار در این تیکت.",
+ "autocloseEnableTime": "تعداد ساعاتی که این تیکت باید غیرفعال باشد تا بسته شود.",
+ "autodelete": "مدیریت حذف خودکار در یک تیکت.",
+ "autodeleteDisable": "غیرفعال کردن حذف خودکار در این تیکت.",
+ "autodeleteEnable": "فعال کردن حذف خودکار در این تیکت.",
+ "autodeleteEnableTime": "تعداد روزهایی که این تیکت باید غیرفعال باشد تا حذف شود."
+ },
+ "helpMenu":{
+ "help": "لیستی از تمام دستورات موجود را دریافت کنید.",
+ "ticket": "فوراً یک تیکت ایجاد کنید.",
+ "close": "یک تیکت را ببندید، این کار نوشتن در این کانال را غیرفعال میکند.",
+ "delete": "یک تیکت را حذف کنید، این کار در صورت فعال بودن، یک رونوشت ایجاد میکند.",
+ "reopen": "یک تیکت را دوباره باز کنید، این کار نوشتن در این کانال را دوباره فعال میکند.",
+ "pin": "یک تیکت را پین کنید. این کار تیکت را به بالای لیست منتقل میکند و ایموجی '📌' به نام آن اضافه میشود.",
+ "unpin": "پین یک تیکت را لغو کنید. تیکت در جایگاه فعلی خود باقی میماند اما ایموجی '📌' از نام آن حذف میشود.",
+ "move": "یک تیکت را منتقل کنید. این کار نوع تیکت را تغییر میدهد.",
+ "rename": "نام یک تیکت را تغییر دهید. این کار نام کانال تیکت را تغییر میدهد.",
+ "claim": "یک تیکت را به خود اختصاص دهید. با این کار به تیم خود اطلاع میدهید که شما این تیکت را مدیریت میکنید.",
+ "unclaim": "اختصاص یک تیکت را لغو کنید. با این کار به تیم خود اطلاع میدهید که این تیکت دوباره آزاد است.",
+ "add": "یک کاربر را به تیکت اضافه کنید. این کار به کاربر امکان خواندن و نوشتن در تیکت را میدهد.",
+ "remove": "یک کاربر را از تیکت حذف کنید. این کار امکان خواندن و نوشتن کاربر در تیکت را حذف میکند.",
+ "panel": "یک پیام با منوی کشویی یا دکمهها ایجاد کنید (برای ساخت تیکت).",
+ "blacklistView": "لیستی از لیست سیاه کنونی را مشاهده کنید.",
+ "blacklistAdd": "یک کاربر را به لیست سیاه اضافه کنید.",
+ "blacklistRemove": "یک کاربر را از لیست سیاه حذف کنید.",
+ "blacklistGet": "جزئیات یک کاربر در لیست سیاه را دریافت کنید.",
+ "statsGlobal": "آمار کلی را مشاهده کنید.",
+ "statsTicket": "آمار یک تیکت در سرور را مشاهده کنید.",
+ "statsUser": "آمار یک کاربر در سرور را مشاهده کنید.",
+ "statsReset": "تمام آمار ربات را بازنشانی کنید (و شمارش را از صفر شروع کنید).",
+ "autocloseDisable": "بسته شدن خودکار را در این تیکت غیرفعال کنید.",
+ "autocloseEnable": "بسته شدن خودکار را در این تیکت فعال کنید.",
+ "autodeleteDisable": "حذف خودکار را در این تیکت غیرفعال کنید.",
+ "autodeleteEnable": "حذف خودکار را در این تیکت فعال کنید."
+ },
+ "stats":{
+ "scopes":{
+ "global": "آمار کلی",
+ "system": "آمار سیستم",
+ "user": "آمار کاربر",
+ "ticket": "آمار تیکت",
+ "participants": "مشارکتکنندگان"
+ },
+ "properties":{
+ "ticketsCreated": "تیکتهای ایجادشده",
+ "ticketsClosed": "تیکتهای بستهشده",
+ "ticketsDeleted": "تیکتهای حذفشده",
+ "ticketsReopened": "تیکتهای دوباره بازشده",
+ "ticketsAutoclosed": "تیکتهای بستهشده خودکار",
+ "ticketsClaimed": "تیکتهای اختصاص یافته",
+ "ticketsPinned": "تیکتهای پین شده",
+ "ticketsMoved": "تیکتهای منتقل شده",
+ "usersBlacklisted": "کاربران در لیست سیاه",
+ "transcriptsCreated": "رونوشتهای ایجادشده"
+ }
+ }
+}
\ No newline at end of file
diff --git a/languages/polish.json b/languages/polish.json
index fc28051..33d29d0 100644
--- a/languages/polish.json
+++ b/languages/polish.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["DanoGlez"],
"lastedited":"28/01/2025",
"language":"Polish",
diff --git a/languages/portuguese.json b/languages/portuguese.json
index ea8c74e..22ee662 100644
--- a/languages/portuguese.json
+++ b/languages/portuguese.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["quiradon"],
"lastedited":"20/08/2024",
"language":"Portuguese",
diff --git a/languages/romanian.json b/languages/romanian.json
index 509a8ec..f3b1380 100644
--- a/languages/romanian.json
+++ b/languages/romanian.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["SankeDev"],
"lastedited":"27/08/2024",
"language":"Romanian",
diff --git a/languages/russian.json b/languages/russian.json
index bc8d1c5..0a8694d 100644
--- a/languages/russian.json
+++ b/languages/russian.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION": {
- "otversion": "v4.0.5",
+ "otversion": "v4.0.6",
"translators": ["NoOneNook"],
"lastedited": "25/03/2025",
"language": "Russian",
diff --git a/languages/spanish.json b/languages/spanish.json
index 1eaf6cd..14b3eee 100644
--- a/languages/spanish.json
+++ b/languages/spanish.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["Redactado","Josuens"],
"lastedited":"22/08/2024",
"language":"Spanish",
diff --git a/languages/swedish.json b/languages/swedish.json
index e71c76c..73414d5 100644
--- a/languages/swedish.json
+++ b/languages/swedish.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION": {
- "otversion": "v4.0.5",
+ "otversion": "v4.0.6",
"translators": ["NoOneNook"],
"lastedited": "25/03/2025",
"language": "Svenska",
diff --git a/languages/thai.json b/languages/thai.json
index 41ebb65..94686e8 100644
--- a/languages/thai.json
+++ b/languages/thai.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["modshd"],
"lastedited":"13/11/2024",
"language":"Thai",
diff --git a/languages/turkish.json b/languages/turkish.json
index dcb7ce7..ca89e4b 100644
--- a/languages/turkish.json
+++ b/languages/turkish.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION": {
- "otversion": "v4.0.5",
+ "otversion": "v4.0.6",
"translators": ["palestinian"],
"lastedited": "26/11/2024",
"language": "Turkish",
diff --git a/languages/ukrainian.json b/languages/ukrainian.json
index 02b191b..9ffc3c5 100644
--- a/languages/ukrainian.json
+++ b/languages/ukrainian.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["Anderskiy"],
"lastedited":"31/08/2024",
"language":"Ukrainian",
diff --git a/languages/vietnamese.json b/languages/vietnamese.json
index 3881160..48b536b 100644
--- a/languages/vietnamese.json
+++ b/languages/vietnamese.json
@@ -1,6 +1,6 @@
{
"_TRANSLATION":{
- "otversion":"v4.0.5",
+ "otversion":"v4.0.6",
"translators":["ngocdiep2006"],
"lastedited":"07/04/2025",
"language":"Vietnamese",
diff --git a/package.json b/package.json
index 5b3b49b..b5def6e 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "open-ticket",
"author": "DJdj Development",
- "version": "4.0.5",
+ "version": "4.0.6",
"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",
@@ -28,7 +28,7 @@
"@types/node": "^22.5.0",
"@types/terminal-kit": "^2.5.7",
"ansis": "^2.3.0",
- "discord.js": "^14.19.1",
+ "discord.js": "^14.19.3",
"formatted-json-stringify": "^1.2.1",
"terminal-kit": "^3.1.2",
"typescript": "^5.5.4"
diff --git a/src/core/api/defaults/language.ts b/src/core/api/defaults/language.ts
index 183cc93..0ec7b7e 100644
--- a/src/core/api/defaults/language.ts
+++ b/src/core/api/defaults/language.ts
@@ -472,6 +472,7 @@ export interface ODLanguageManagerIds_Default {
"opendiscord:russian":ODLanguage,
"opendiscord:swedish":ODLanguage,
"opendiscord:vietnamese":ODLanguage,
+ "opendiscord:persian":ODLanguage,
//ADD NEW LANGUAGES HERE!!!
}
diff --git a/src/core/api/main.ts b/src/core/api/main.ts
index 65fbd57..9054456 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.5"))
+ this.versions.add(ODVersion.fromString("opendiscord:version","v4.0.6"))
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 37a0e55..f82482f 100644
--- a/src/core/api/modules/base.ts
+++ b/src/core/api/modules/base.ts
@@ -560,8 +560,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.5"})
- else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.5"}
+ if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.0.6"})
+ else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.6"}
this.config = newConfig
}
@@ -615,8 +615,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.5"})
- else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.5"}
+ if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.0.6"})
+ else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.6"}
this.config = newConfig
}
diff --git a/src/core/api/modules/client.ts b/src/core/api/modules/client.ts
index 94e8667..9d0ea07 100644
--- a/src/core/api/modules/client.ts
+++ b/src/core/api/modules/client.ts
@@ -578,8 +578,8 @@ export class ODSlashCommandComparator {
}
}
/**Convert a `ODSlashCommandBuilder` to a universal Open Ticket slash command object for comparison. */
- convertBuilder(builder:ODSlashCommandBuilder,guildId:string|null): ODSlashCommandUniversalCommand {
- if (builder.type != discord.ApplicationCommandType.ChatInput) throw new ODSystemError("ODSlashCommandComparator:convertBuilder() is not supported for other types than 'ChatInput'!")
+ convertBuilder(builder:ODSlashCommandBuilder,guildId:string|null): ODSlashCommandUniversalCommand|null {
+ if (builder.type != discord.ApplicationCommandType.ChatInput) return null //throw new ODSystemError("ODSlashCommandComparator:convertBuilder() is not supported for other types than 'ChatInput'!")
const nameLoc = builder.nameLocalizations ?? {}
const descLoc = builder.descriptionLocalizations ?? {}
return {
@@ -598,8 +598,8 @@ export class ODSlashCommandComparator {
}
}
/**Convert a `discord.ApplicationCommand` to a universal Open Ticket slash command object for comparison. */
- convertCommand(cmd:discord.ApplicationCommand): ODSlashCommandUniversalCommand {
- if (cmd.type != discord.ApplicationCommandType.ChatInput) throw new ODSystemError("ODSlashCommandComparator:convertCommand() is not supported for other types than 'ChatInput'!")
+ convertCommand(cmd:discord.ApplicationCommand): ODSlashCommandUniversalCommand|null {
+ if (cmd.type != discord.ApplicationCommandType.ChatInput) return null //throw new ODSystemError("ODSlashCommandComparator:convertCommand() is not supported for other types than 'ChatInput'!")
const nameLoc = cmd.nameLocalizations ?? {}
const descLoc = cmd.descriptionLocalizations ?? {}
return {
@@ -811,6 +811,10 @@ export class ODSlashCommandManager extends ODManager {
//command is registered (and may need to be updated)
const universalBuilder = this.comparator.convertBuilder(instance.builder,instance.guildId)
const universalCmd = this.comparator.convertCommand(cmd)
+
+ //command is not of the type 'chatinput'
+ if (!universalBuilder || !universalCmd) return
+
const didChange = !this.comparator.compare(universalBuilder,universalCmd)
const requiresUpdate = didChange || (instance.requiresUpdate ? instance.requiresUpdate(universalCmd) : false)
registered.push({instance,cmd:universalCmd,requiresUpdate})
@@ -820,8 +824,10 @@ export class ODSlashCommandManager extends ODManager {
})
cmds.forEach((cmd) => {
- //command does not exist in the manager
- unused.push({instance:null,cmd:this.comparator.convertCommand(cmd),requiresUpdate:false})
+ //command does not exist in the manager (only append to unused when type == 'chatinput')
+ const universalCmd = this.comparator.convertCommand(cmd)
+ if (!universalCmd) return
+ unused.push({instance:null,cmd:universalCmd,requiresUpdate:false})
})
return {registered,unregistered,unused}
diff --git a/src/core/startup/migration.ts b/src/core/startup/migration.ts
index 65a8852..80afc8a 100644
--- a/src/core/startup/migration.ts
+++ b/src/core/startup/migration.ts
@@ -25,5 +25,8 @@ export const migrations = [
new utilities.ODVersionMigration(api.ODVersion.fromString("opendiscord:version","v4.0.4"),async () => {},async () => {}),
//MIGRATE TO v4.0.5
- new utilities.ODVersionMigration(api.ODVersion.fromString("opendiscord:version","v4.0.5"),async () => {},async () => {})
+ new utilities.ODVersionMigration(api.ODVersion.fromString("opendiscord:version","v4.0.5"),async () => {},async () => {}),
+
+ //MIGRATE TO v4.0.6
+ new utilities.ODVersionMigration(api.ODVersion.fromString("opendiscord:version","v4.0.6"),async () => {},async () => {})
]
\ No newline at end of file
diff --git a/src/data/framework/languageLoader.ts b/src/data/framework/languageLoader.ts
index 868c534..42b5dd2 100644
--- a/src/data/framework/languageLoader.ts
+++ b/src/data/framework/languageLoader.ts
@@ -30,6 +30,7 @@ export const loadAllLanguages = async () => {
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"))
+ opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:persian","persian.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 a1fe50f..7f368f0 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -20,7 +20,7 @@
INFORMATION:
============
- Open Ticket v4.0.5 - © DJdj Development
+ Open Ticket v4.0.6 - © DJdj Development
support us: https://github.com/sponsors/DJj123dj
discord: https://discord.dj-dj.be