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 665d165..29b9200 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 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 27 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 28 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 **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!
@@ -68,10 +68,10 @@ A big thanks to all our sponsors! Without them, it wouldn't be possible to creat
@@ -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 da72052..02978d2 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 a33ee7f..7a8bc3d 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",
@@ -25,7 +25,7 @@
"@discordjs/rest": "^2.4.2",
"@types/node": "^22.5.0",
"ansis": "^2.3.0",
- "discord.js": "^14.19.1",
+ "discord.js": "^14.19.3",
"formatted-json-stringify": "^1.1.0",
"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 5c73c59..b237192 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.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
}
@@ -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.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 d2e2868..60b0c44 100644
--- a/src/core/api/modules/client.ts
+++ b/src/core/api/modules/client.ts
@@ -579,8 +579,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 {
@@ -599,8 +599,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 {
@@ -812,6 +812,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})
@@ -821,8 +825,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 3aca6c5..6512a4e 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