Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9414b96221 | ||
|
|
0befd2860e | ||
|
|
74d4ac24f2 | ||
|
|
364bf4f702 | ||
|
|
dd5b76f3d8 | ||
|
|
a02ba56e9a | ||
|
|
6d5bdc5dd4 | ||
|
|
51bfb1a367 | ||
|
|
d85d842046 | ||
|
|
53136e0e6c | ||
|
|
2031a82523 | ||
|
|
453c48fab5 | ||
|
|
fd3bc0e7b9 | ||
|
|
f316ae83e7 | ||
|
|
d2c5cf0fc1 | ||
|
|
45dfc18c1d | ||
|
|
d81b1e7be3 | ||
|
|
2a82bdebae | ||
|
|
c9e13b2471 | ||
|
|
cbeac2fda2 | ||
|
|
8b1dd7d27a | ||
|
|
9e7cd28c6a | ||
|
|
fabe11bfd1 | ||
|
|
79187b9995 | ||
|
|
a1251cf11c | ||
|
|
1bc8b2b401 | ||
|
|
ce727e52b0 | ||
|
|
30233df7b0 | ||
|
|
48d3296868 | ||
|
|
6b8ef26b4c | ||
|
|
9c992c3dbd | ||
|
|
6feb56c25c | ||
|
|
e29b6afd87 | ||
|
|
d35b7fca99 |
+8
-1
@@ -1,7 +1,11 @@
|
|||||||
# Pterodactyl Eggs
|
# Pterodactyl Eggs
|
||||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
||||||
|
|
||||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.0) [](https://github.com/sponsors/DJj123dj)
|
[](https://discord.com/invite/26vT9wt3n3)
|
||||||
|
[](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.1)
|
||||||
|
[](https://github.com/sponsors/DJj123dj)
|
||||||
|
[](.eggs/README.md)
|
||||||
|
|
||||||
|
|
||||||
Hi there! Open Ticket provides **official eggs** for the Pterodactyl & Pelican panels!<br>
|
Hi there! Open Ticket provides **official eggs** for the Pterodactyl & Pelican panels!<br>
|
||||||
There are different eggs for different versions of Open Ticket.
|
There are different eggs for different versions of Open Ticket.
|
||||||
@@ -16,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)
|
[**`openticket-egg-main.json` (Recommended)**](openticket-egg-main.json)
|
||||||
- This egg will use the `main` branch of Open Ticket.
|
- This egg will use the `main` branch of Open Ticket.
|
||||||
|
|
||||||
|
[**`openticket-egg-v4.0.1.json`**](openticket-egg-v4.0.1.json)
|
||||||
|
- This egg will always use Open Ticket `v4.0.1`. Open Ticket updates will not have an effect on this egg.
|
||||||
|
|
||||||
[**`openticket-egg-v4.0.0.json`**](openticket-egg-v4.0.0.json)
|
[**`openticket-egg-v4.0.0.json`**](openticket-egg-v4.0.0.json)
|
||||||
- This egg will always use Open Ticket `v4.0.0`. Open Ticket updates will not have an effect on this egg.
|
- This egg will always use Open Ticket `v4.0.0`. Open Ticket updates will not have an effect on this egg.
|
||||||
|
|
||||||
|
|||||||
@@ -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.1)",
|
||||||
|
"author": "support@dj-dj.be",
|
||||||
|
"description": "This is the official Pterodactyl egg for Open Ticket v4.0.1, 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.1)\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.1\"\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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -6,14 +6,12 @@ You can choose which type of tutorial you want to make. You can create a quick s
|
|||||||
You are not required to talk in the video, but make sure it has some kind of subtitles instead.
|
You are not required to talk in the video, but make sure it has some kind of subtitles instead.
|
||||||
|
|
||||||
### 📄 Requirements
|
### 📄 Requirements
|
||||||
- 📌 At least 2k subscribers!
|
- 📌 Video length of at least 2 minutes.
|
||||||
- 📌 A little bit of channel activity! *(minimum 2 uploads/month)*
|
- 📌 Provide a link to the Open Ticket repository in the description of the video.
|
||||||
- 📌 Video length of at least 3 minutes!
|
- 📌 Please use the latest version of Open Ticket available at the time of making the video.
|
||||||
- 📌 Provide a clear link to the Open Ticket repository!
|
- 📌 **(Optional)** Recommended language is English.
|
||||||
- 📌 Recommended language is English!
|
- 📌 **(Optional)** Recommended platform is YouTube!
|
||||||
- 📌 Recommended platform is YouTube!
|
- 📌 **(Optional)** Speech in the video *(AI is allowed)*
|
||||||
- 📌 Must be for the latest version of Open Ticket!
|
|
||||||
- 📌 **(OPTIONAL)** Speech in the video *(AI is allowed)*
|
|
||||||
|
|
||||||
|
|
||||||
### 🎁 Rewards
|
### 🎁 Rewards
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Contributing Guidelines
|
# Contributing Guidelines
|
||||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
||||||
|
|
||||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.0) [](https://github.com/sponsors/DJj123dj)
|
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.1) [](https://github.com/sponsors/DJj123dj)
|
||||||
|
|
||||||
These are the Contributing Guidelines of Open Ticket!<br>
|
These are the Contributing Guidelines of Open Ticket!<br>
|
||||||
Here you can find everything you need to know about contributing to Open Ticket.<br>
|
Here you can find everything you need to know about contributing to Open Ticket.<br>
|
||||||
|
|||||||
+8
-8
@@ -1,7 +1,7 @@
|
|||||||
# Security Policy
|
# Security Policy
|
||||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
||||||
|
|
||||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.0) [](https://github.com/sponsors/DJj123dj)
|
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.1) [](https://github.com/sponsors/DJj123dj)
|
||||||
|
|
||||||
This is the Security Policy of Open Ticket!<br>
|
This is the Security Policy of Open Ticket!<br>
|
||||||
Here you can find a list of all supported & deprecated versions of the bot.<br>
|
Here you can find a list of all supported & deprecated versions of the bot.<br>
|
||||||
@@ -11,7 +11,7 @@ You will also find some guidelines about how to report vulnerabilities, bugs & e
|
|||||||
Below, you can find a list with the status of every Open Ticket version.<br>
|
Below, you can find a list with the status of every Open Ticket version.<br>
|
||||||
This list will be updated on every release.
|
This list will be updated on every release.
|
||||||
|
|
||||||
- 🟦 Early Access **(ideas, bugs, support, html transcripts)**
|
- 🟦 In Development **(ideas, bugs, support, html transcripts)**
|
||||||
- ✅ Supported **(features, bugs, support, docs, html transcripts)**
|
- ✅ Supported **(features, bugs, support, docs, html transcripts)**
|
||||||
- 🚧 Maintenance **(support, docs, html transcripts)**
|
- 🚧 Maintenance **(support, docs, html transcripts)**
|
||||||
- 🟧 Deprecated **(docs)**
|
- 🟧 Deprecated **(docs)**
|
||||||
@@ -19,12 +19,12 @@ This list will be updated on every release.
|
|||||||
|
|
||||||
| Version | Supported | Notes |
|
| Version | Supported | Notes |
|
||||||
|------------|-----------|--------------------------------|
|
|------------|-----------|--------------------------------|
|
||||||
| 4.0.0-beta | 🟦 | For v4.0.0 Full Release |
|
| 4.1.0 | 🟦 | |
|
||||||
| 3.5.8 | ✅ | Supported until October 2024 |
|
| 4.0.1 | ✅ | |
|
||||||
| 3.5.7 | ✅ | Supported until September 2024 |
|
| 4.0.0 | ✅ | |
|
||||||
| 3.5.6 | 🟧 | Documentation Only |
|
| 3.5.9 | 🚧 | Supported until May 2025 (LTS) |
|
||||||
| < 3.5.6 | 🟧 | Documentation Only |
|
| 3.5.8 | 🟧 | Documentation Only |
|
||||||
| < 3.5.0 | ❌ | |
|
| < 3.5.8 | ❌ | |
|
||||||
|
|
||||||
### 🕷️ Reporting Vulnerabilities
|
### 🕷️ Reporting Vulnerabilities
|
||||||
You can report vulnerabilities, errors & bugs using one of the following methods:
|
You can report vulnerabilities, errors & bugs using one of the following methods:
|
||||||
|
|||||||
@@ -8,16 +8,19 @@
|
|||||||
<br>Powered By<br>
|
<br>Powered By<br>
|
||||||
<img src="https://apis.dj-dj.be/cdn/opendiscord/logo.png" alt="Open Ticket" width="170px"><br>
|
<img src="https://apis.dj-dj.be/cdn/opendiscord/logo.png" alt="Open Ticket" width="170px"><br>
|
||||||
<a href="https://discord.com/invite/26vT9wt3n3"><img alt="Discord Invite Link" src="https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord"></img></a>
|
<a href="https://discord.com/invite/26vT9wt3n3"><img alt="Discord Invite Link" src="https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord"></img></a>
|
||||||
<a href="https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.0"><img alt="Open Ticket Version" src="https://img.shields.io/badge/version-4.0.0-brightgreen.svg?style=flat-square"></img></a>
|
<a href="https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.1"><img alt="Open Ticket Version" src="https://img.shields.io/badge/version-4.0.1-brightgreen.svg?style=flat-square"></img></a>
|
||||||
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Documentation" src="https://img.shields.io/badge/discord.js-v14-CB3837.svg?style=flat-square&logo=npm"></img></a>
|
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Documentation" src="https://img.shields.io/badge/discord.js-v14-CB3837.svg?style=flat-square&logo=npm"></img></a>
|
||||||
<a href="https://github.com/open-discord-bots/open-ticket/blob/main/LICENSE"><img alt="Open Ticket License" src="https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square"></img></a>
|
<a href="https://github.com/open-discord-bots/open-ticket/blob/main/LICENSE"><img alt="Open Ticket License" src="https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square"></img></a>
|
||||||
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Stars" src="https://img.shields.io/github/stars/djj123dj/open-ticket?color=yellow&label=stars&logo=github&style=flat-square"></img></a>
|
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Stars" src="https://img.shields.io/github/stars/djj123dj/open-ticket?color=yellow&label=stars&logo=github&style=flat-square"></img></a>
|
||||||
|
<br>
|
||||||
<a href="https://github.com/sponsors/DJj123dj"><img alt="Sponsor DJj123dj" src="https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors"></img></a>
|
<a href="https://github.com/sponsors/DJj123dj"><img alt="Sponsor DJj123dj" src="https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors"></img></a>
|
||||||
|
<a href="https://hub.docker.com/repository/docker/djj123dj/open-ticket"><img alt="Open Ticket supports Docker!" src="https://img.shields.io/badge/docker-supported-2496ED?style=flat-square&logo=docker"></img></a>
|
||||||
|
<a href=".eggs/README.md"><img alt="Open Ticket supports Pterodactyl Eggs!" src="https://img.shields.io/badge/pterodactyl-supported-10539F?style=flat-square&logo=pterodactyl"></img></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
Open Ticket is the most advanced & customisable discord ticket bot that you will ever find! You can customise up to 300+ variables! This includes <code>Html Transcripts</code>, <code>Advanced Plugins</code>, <code>Custom Embeds</code>, <code>Questions/Modals</code>, <code>Stats</code> & more!
|
Open Ticket is the most advanced & customisable discord ticket bot that you will ever find! You can customise up to 300+ variables! This includes <code>Html Transcripts</code>, <code>Advanced Plugins</code>, <code>Custom Embeds</code>, <code>Questions/Modals</code>, <code>Stats</code> & 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 <code>22 Languages</code>! If you need any help, feel free to join our <a href="https://discord.dj-dj.be">discord server</a>!
|
You're also able to customise every little aspect of the bot! From embeds to transcripts. Open Ticket is also translated in more than <code>26 Languages</code>! If you need any help, feel free to join our <a href="https://discord.dj-dj.be">discord server</a>!
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center"><b>⭐️ Help us grow by giving a star! ⭐️</b></p>
|
<p align="center"><b>⭐️ Help us grow by giving a star! ⭐️</b></p>
|
||||||
@@ -25,11 +28,11 @@ You're also able to customise every little aspect of the bot! From embeds to tra
|
|||||||
### 📌 Features
|
### 📌 Features
|
||||||
- **🦇 pterodactyl support** - Open Ticket works perfect on Pterodactyl based panels! [(Download official eggs)](.eggs/README.md)
|
- **🦇 pterodactyl support** - Open Ticket works perfect on Pterodactyl based panels! [(Download official eggs)](.eggs/README.md)
|
||||||
- **💩 no bloat** - Your Open Ticket bot doesn't contain any form of bloat or credits!
|
- **💩 no bloat** - Your Open Ticket bot doesn't contain any form of bloat or credits!
|
||||||
- **🔒 tested & secure** - Open Ticket has been tested by thousands of servers and is very secure!
|
- **🔒 tested & secure** - Open Ticket has been battletested by thousands of servers and is very secure!
|
||||||
- **📈 scalable** - Open Ticket is made to handle huge servers! (Already tested in **servers with 100k members**)
|
- **📈 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!
|
- **📄 HTML transcripts** - Make use of the most customisable, beautiful and easy-to-use HTML Transcripts!
|
||||||
- **✅ ticket actions** - Close, Reopen, Delete, Rename & Move all your tickets!
|
- **✅ ticket actions** - Close, Reopen, Delete, Claim, Pin, Rename & Move all your tickets!
|
||||||
- **🇬🇧 translation** - Open Ticket has been translated in more than **22 languages** by our community!
|
- **🇬🇧 translation** - Open Ticket has been translated in more than **26 languages** by our community!
|
||||||
- **🎨 customisation** - Open Ticket has been created around customisation, everything can be customised!
|
- **🎨 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!
|
- **🖥️ interactions** - The bot has full support for Buttons, Dropdowns, Slash Commands and Modals!
|
||||||
- **∞ unlimited** - Create an infinite amount of tickets & panels!
|
- **∞ unlimited** - Create an infinite amount of tickets & panels!
|
||||||
@@ -57,7 +60,7 @@ You're also able to customise every little aspect of the bot! From embeds to tra
|
|||||||
> ### 📦 Resources
|
> ### 📦 Resources
|
||||||
> Resources might not be accurate yet! *(because v4 is still in beta)*<br>
|
> Resources might not be accurate yet! *(because v4 is still in beta)*<br>
|
||||||
> <a href="https://www.youtube.com/watch?v=2jK9kAf6ASU"><img src="https://apis.dj-dj.be/cdn/openticket/open-ticket-tutorial.png" alt="Open Ticket Tutorial" width="180px"></a>
|
> <a href="https://www.youtube.com/watch?v=2jK9kAf6ASU"><img src="https://apis.dj-dj.be/cdn/openticket/open-ticket-tutorial.png" alt="Open Ticket Tutorial" width="180px"></a>
|
||||||
> <a href="https:/otdocs.dj-dj.be"><img src="https://apis.dj-dj.be/cdn/openticket/open-ticket-docs.png" alt="Open Ticket Docs" width="180px"></a>
|
> <a href="https://otdocs.dj-dj.be"><img src="https://apis.dj-dj.be/cdn/openticket/open-ticket-docs.png" alt="Open Ticket Docs" width="180px"></a>
|
||||||
> <a href="https://github.com/open-discord-bots/plugins"><img src="https://apis.dj-dj.be/cdn/openticket/open-ticket-plugins.png" alt="Open Ticket Plugins" width="180px"></a>
|
> <a href="https://github.com/open-discord-bots/plugins"><img src="https://apis.dj-dj.be/cdn/openticket/open-ticket-plugins.png" alt="Open Ticket Plugins" width="180px"></a>
|
||||||
|
|
||||||
### ❤️ Sponsors
|
### ❤️ Sponsors
|
||||||
@@ -114,17 +117,17 @@ A big thanks to all our sponsors! Without them, it wouldn't be possible to creat
|
|||||||
|[`example-command`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/example-command/) |📄 Example |Sample custom command using the Open Discord system. |
|
|[`example-command`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/example-command/) |📄 Example |Sample custom command using the Open Discord system. |
|
||||||
|[`ot-jump-to-top`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-jump-to-top/) |📢 Command |Add a simple command to jump to the top of the ticket. |
|
|[`ot-jump-to-top`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-jump-to-top/) |📢 Command |Add a simple command to jump to the top of the ticket. |
|
||||||
|[`ot-kill-switch`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-kill-switch/) |📢 Command |Temporarily disable the ticket system using a kill switch. |
|
|[`ot-kill-switch`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-kill-switch/) |📢 Command |Temporarily disable the ticket system using a kill switch. |
|
||||||
|[`ot-hosting-status`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-hosting-status/) |📢 Command |A simple command to send hosting status updates to a channel. |
|
|[`od-hosting-status`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/od-hosting-status/) |📢 Command |A simple command to send hosting status updates to a channel. |
|
||||||
|[`ot-shutdown`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-shutdown/) |📢 Command |A simple command to turn off the bot from a slash command (server & bot owner only). |
|
|[`od-shutdown`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/od-shutdown/) |📢 Command |A simple command to turn off the bot from a slash command (server & bot owner only). |
|
||||||
|[`ot-sqlite-database`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-sqlite-database/) |⚙️ Utility |With this plugin, the database will be an SQLite file. It's a must-have for large servers! |
|
|[`ot-sqlite-database`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-sqlite-database/) |⚙️ Utility |With this plugin, the database will be an SQLite file. It's a must-have for large servers! |
|
||||||
|[`ot-no-slash-clear`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-no-slash-clear/) |⚙️ Utility |Disable the automatic removal of slash commands that aren't used by Open Ticket. |
|
|[`od-no-slash-clear`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/od-no-slash-clear/) |⚙️ Utility |Disable the automatic removal of slash commands that aren't used by Open Ticket. |
|
||||||
|[`ot-migrate-v3`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-migrate-v3/) |⚙️ Utility |Use this plugin to migrate all tickets from Open Ticket v3 to v4. |
|
|[`ot-migrate-v3`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-migrate-v3/) |⚙️ Utility |Use this plugin to migrate all tickets from Open Ticket v3 to v4. |
|
||||||
|[`ot-ticket-message-extras`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-ticket-message-extras/) |🎨 Customisation |A plugin which adds a few little features to the ticket message. |
|
|[`ot-ticket-message-extras`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-ticket-message-extras/) |🎨 Customisation |A plugin which adds a few little features to the ticket message. |
|
||||||
|[`ot-rename-keep-prefix`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-rename-keep-prefix/) |🎨 Customisation |Simple plugin to keep the channel prefix when using the /rename command. |
|
|[`ot-rename-keep-prefix`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-rename-keep-prefix/) |🎨 Customisation |Simple plugin to keep the channel prefix when using the /rename command. |
|
||||||
|[`ot-customise-buttons`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-customise-buttons/) |🎨 Customisation |Customise almost all built-in buttons. This includes the claim, reopen, close & delete buttons. |
|
|[`ot-customise-buttons`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-customise-buttons/) |🎨 Customisation |Customise almost all built-in buttons. This includes the claim, reopen, close & delete buttons. |
|
||||||
|[`ot-ephemeral-messages`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-ephemeral-messages/) |🎨 Customisation |Customise for every messages if it needs to be ephemeral or not. |
|
|[`ot-ephemeral-messages`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-ephemeral-messages/) |🎨 Customisation |Customise for every messages if it needs to be ephemeral or not. |
|
||||||
|[`ot-footers`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-footers/) |🎨 Customisation |A simple plugin to add footers in all Open Ticket embeds. |
|
|[`ot-footers`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-footers/) |🎨 Customisation |A simple plugin to add footers in all Open Ticket embeds. |
|
||||||
|[`ot-alt-detector`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-alt-detector/) |💼 Management |Use the discord-alt-detector npm package by DJdj Development in your ticket bot. |
|
|[`od-alt-detector`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/od-alt-detector/) |💼 Management |Use the discord-alt-detector npm package by DJdj Development in your ticket bot. |
|
||||||
|[`ot-embeds`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-embeds/) |💼 Management |Create custom premade embeds in the config or use the command to create one from scratch. |
|
|[`ot-embeds`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-embeds/) |💼 Management |Create custom premade embeds in the config or use the command to create one from scratch. |
|
||||||
|[`ot-move-actions`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-move-actions/) |💼 Management |Automatically unclaim/unpin a ticket when it's moved using `/move`. |
|
|[`ot-move-actions`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-move-actions/) |💼 Management |Automatically unclaim/unpin a ticket when it's moved using `/move`. |
|
||||||
|[`ot-reviews`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-reviews/) |💼 Management |Review system for Open Ticket! It is very customisable and has lots of features. |
|
|[`ot-reviews`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-reviews/) |💼 Management |Review system for Open Ticket! It is very customisable and has lots of features. |
|
||||||
@@ -189,16 +192,16 @@ This is the main team working on Open Ticket. Don't forget to check their profil
|
|||||||
|🇮🇳 Hindi |an_developer |🟢 Up To Date |
|
|🇮🇳 Hindi |an_developer |🟢 Up To Date |
|
||||||
|🇱🇹 Lithuanian |tsgindrius |🟢 Up To Date |
|
|🇱🇹 Lithuanian |tsgindrius |🟢 Up To Date |
|
||||||
|🇵🇱 Polish |danoglez |🟢 Up To Date |
|
|🇵🇱 Polish |danoglez |🟢 Up To Date |
|
||||||
|🇪🇪 Estonian |iamnotmega |🔵 Up To Date (ChatGPT) |
|
|🇳🇴 Norwegian |NoOneNook |🟢 Up To Date |
|
||||||
|🇫🇮 Finnish |iamnotmega |🔵 Up To Date (ChatGPT) |
|
|🇸🇪 Swedish |NoOneNook |🟢 Up To Date |
|
||||||
|🇷🇺 Russian |/ |🔴 Missing |
|
|🇪🇪 Estonian |iamnotmega |🔵 Up To Date (AI) |
|
||||||
|🇳🇴 Norwegian |/ |🔴 Missing |
|
|🇫🇮 Finnish |iamnotmega |🔵 Up To Date (AI) |
|
||||||
|🇱🇻 Latvian |/ |🔴 Missing |
|
|🇷🇺 Russian |NoOneNook |🔵 Up To Date (AI) |
|
||||||
|
|🇱🇻 Latvian |NoOneNook |🔵 Up To Date (AI) |
|
||||||
|🇯🇵 Japanese |/ |🔴 Missing |
|
|🇯🇵 Japanese |/ |🔴 Missing |
|
||||||
|🇰🇷 Korean |/ |🔴 Missing |
|
|🇰🇷 Korean |/ |🔴 Missing |
|
||||||
|🇨🇳 Simplified Chinese |/ |🔴 Missing |
|
|🇨🇳 Simplified Chinese |/ |🔴 Missing |
|
||||||
|🇨🇳 Traditional Chinese|/ |🔴 Missing |
|
|🇨🇳 Traditional Chinese|/ |🔴 Missing |
|
||||||
|🇸🇪 Swedish |/ |🔴 Missing |
|
|
||||||
|🇻🇳 Vietnamese |/ |🔴 Missing |
|
|🇻🇳 Vietnamese |/ |🔴 Missing |
|
||||||
|🇸🇮 Slovenian |/ |🔴 Missing |
|
|🇸🇮 Slovenian |/ |🔴 Missing |
|
||||||
|🇬🇷 Greek |/ |🔴 Missing |
|
|🇬🇷 Greek |/ |🔴 Missing |
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
"_INFO":{
|
"_INFO":{
|
||||||
"support":"https://otdocs.dj-dj.be",
|
"support":"https://otdocs.dj-dj.be",
|
||||||
"discord":"https://discord.dj-dj.be",
|
"discord":"https://discord.dj-dj.be",
|
||||||
"version":"open-ticket-v4.0.0"
|
"version":"open-ticket-v4.0.1"
|
||||||
},
|
},
|
||||||
|
|
||||||
"token":"your bot token here! (or leave empty when using 'tokenFromENV')",
|
"token":"your bot token here! (or leave empty when using 'tokenFromENV')",
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@
|
|||||||
"image":"https://www.example.com/image.png (or leave empty)",
|
"image":"https://www.example.com/image.png (or leave empty)",
|
||||||
"thumbnail":"https://www.example.com/image.png (or leave empty)",
|
"thumbnail":"https://www.example.com/image.png (or leave empty)",
|
||||||
|
|
||||||
"footer":"Open Ticket v4.0.0 (or leave empty)",
|
"footer":"Open Ticket v4.0.1 (or leave empty)",
|
||||||
"fields":[
|
"fields":[
|
||||||
{"name":"field name","value":"field value","inline":false}
|
{"name":"field name","value":"field value","inline":false}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ process.argv.push(...flags)
|
|||||||
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║
|
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║
|
||||||
╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║
|
╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║
|
||||||
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝
|
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝
|
||||||
v4.0.0 - Made by DJj123dj & Contributors
|
v4.0.1 - Made by DJj123dj & Contributors
|
||||||
|
|
||||||
Discord: https://discord.dj-dj.be
|
Discord: https://discord.dj-dj.be
|
||||||
Docs: https://otdocs.dj-dj.be
|
Docs: https://otdocs.dj-dj.be
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION": {
|
"_TRANSLATION": {
|
||||||
"otversion": "v4.0.0",
|
"otversion": "v4.0.1",
|
||||||
"translators": ["palestinian"],
|
"translators": ["palestinian"],
|
||||||
"lastedited": "06/12/2024",
|
"lastedited": "06/12/2024",
|
||||||
"language": "Arabic",
|
"language": "Arabic",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["guillee3"],
|
"translators":["guillee3"],
|
||||||
"lastedited":"21/08/2024",
|
"lastedited":"21/08/2024",
|
||||||
"language":"Catalan",
|
"language":"Catalan",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["DJj123dj"],
|
"translators":["DJj123dj"],
|
||||||
"lastedited":"21/08/2024",
|
"lastedited":"21/08/2024",
|
||||||
"language":"Custom",
|
"language":"Custom",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["spyeye_"],
|
"translators":["spyeye_"],
|
||||||
"lastedited":"21/08/2024",
|
"lastedited":"21/08/2024",
|
||||||
"language":"Czech",
|
"language":"Czech",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["the_gamer"],
|
"translators":["the_gamer"],
|
||||||
"lastedited":"26/09/2024",
|
"lastedited":"26/09/2024",
|
||||||
"language":"Danish",
|
"language":"Danish",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["DJj123dj"],
|
"translators":["DJj123dj"],
|
||||||
"lastedited":"21/08/2024",
|
"lastedited":"21/08/2024",
|
||||||
"language":"Dutch",
|
"language":"Dutch",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["DJj123dj"],
|
"translators":["DJj123dj"],
|
||||||
"lastedited":"21/08/2024",
|
"lastedited":"21/08/2024",
|
||||||
"language":"English",
|
"language":"English",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["iamnotmega","ChatGPT"],
|
"translators":["iamnotmega","ChatGPT"],
|
||||||
"lastedited":"21/10/2024",
|
"lastedited":"21/10/2024",
|
||||||
"language":"Estonian",
|
"language":"Estonian",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["iamnotmega","ChatGPT"],
|
"translators":["iamnotmega","ChatGPT"],
|
||||||
"lastedited":"21/10/2024",
|
"lastedited":"21/10/2024",
|
||||||
"language":"Finnish",
|
"language":"Finnish",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["guillee3"],
|
"translators":["guillee3"],
|
||||||
"lastedited":"04/12/2024",
|
"lastedited":"04/12/2024",
|
||||||
"language":"French",
|
"language":"French",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["benzorich"],
|
"translators":["benzorich"],
|
||||||
"lastedited":"06/10/2024",
|
"lastedited":"06/10/2024",
|
||||||
"language":"German",
|
"language":"German",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["an_developer"],
|
"translators":["an_developer"],
|
||||||
"lastedited":"14/12/2024",
|
"lastedited":"14/12/2024",
|
||||||
"language":"Hindi",
|
"language":"Hindi",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["Kornel0706"],
|
"translators":["Kornel0706"],
|
||||||
"lastedited":"22/08/2024",
|
"lastedited":"22/08/2024",
|
||||||
"language":"Hungarian",
|
"language":"Hungarian",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["erxg"],
|
"translators":["erxg"],
|
||||||
"lastedited":"25/08/2024",
|
"lastedited":"25/08/2024",
|
||||||
"language":"Indonesian",
|
"language":"Indonesian",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["fraden1mvp."],
|
"translators":["fraden1mvp."],
|
||||||
"lastedited":"08/10/2024",
|
"lastedited":"08/10/2024",
|
||||||
"language":"Italian",
|
"language":"Italian",
|
||||||
|
|||||||
@@ -0,0 +1,478 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION": {
|
||||||
|
"otversion": "v4.0.1",
|
||||||
|
"translators": ["NoOneNook"],
|
||||||
|
"lastedited": "25/03/2025",
|
||||||
|
"language": "Latvian",
|
||||||
|
"automated": false
|
||||||
|
},
|
||||||
|
"checker": {
|
||||||
|
"system": {
|
||||||
|
"typeError": "[KĻŪDA]",
|
||||||
|
"headerOpenTicket": "ATVĒRT BIĻETI",
|
||||||
|
"typeWarning": "[BRĪDINĀJUMS]",
|
||||||
|
"typeInfo": "[INFORMĀCIJA]",
|
||||||
|
"headerConfigChecker": "KONFIGURĀCIJAS PĀRBAUDĪTĀJS",
|
||||||
|
"headerDescription": "pārbaudiet kļūdas savos konfigurācijas failos!",
|
||||||
|
"footerError": "bots netiks startēts, kamēr visas {0} nebūs izlabotas!",
|
||||||
|
"footerWarning": "ieteicams izlabot visas {0} pirms startēšanas!",
|
||||||
|
"footerSupport": "ATBALSTS: {0} - DOKUMENTI: {1}",
|
||||||
|
"compactInformation": "izmantojiet {0}, lai iegūtu vairāk informācijas!",
|
||||||
|
"dataPath": "ceļš",
|
||||||
|
"dataDocs": "dokumenti",
|
||||||
|
"dataMessages": "ziņojums"
|
||||||
|
},
|
||||||
|
"messages": {
|
||||||
|
"stringTooShort": "Šis teksts nedrīkst būt īsāks par {0} rakstzīmēm!",
|
||||||
|
"stringTooLong": "Šis teksts nedrīkst būt garāks par {0} rakstzīmēm!",
|
||||||
|
"stringLengthInvalid": "Šim tekstam jābūt {0} rakstzīmju garam!",
|
||||||
|
"stringStartsWith": "Šim tekstam jāsākas ar {0}!",
|
||||||
|
"stringEndsWith": "Šim tekstam jābeidzas ar {0}!",
|
||||||
|
"stringContains": "Šim tekstam jāsatur {0}!",
|
||||||
|
"stringChoices": "Šis teksts var būt tikai viena no šīm vērtībām: {0}!",
|
||||||
|
"stringRegex": "Šis teksts ir nederīgs!",
|
||||||
|
|
||||||
|
"numberTooShort": "Šis skaitlis nedrīkst būt īsāks par {0} rakstzīmēm!",
|
||||||
|
"numberTooLong": "Šis skaitlis nedrīkst būt garāks par {0} rakstzīmēm!",
|
||||||
|
"numberLengthInvalid": "Šim skaitlim jābūt {0} rakstzīmju garam!",
|
||||||
|
"numberTooSmall": "Šim skaitlim jābūt vismaz {0}!",
|
||||||
|
"numberTooLarge": "Šim skaitlim jābūt ne vairāk kā {0}!",
|
||||||
|
"numberNotEqual": "Šim skaitlim jābūt {0}!",
|
||||||
|
"numberStep": "Šim skaitlim jābūt {0} reizinājumam!",
|
||||||
|
"numberStepOffset": "Šim skaitlim jābūt {0} reizinājumam, sākot ar {1}!",
|
||||||
|
"numberStartsWith": "Šim skaitlim jāsākas ar {0}!",
|
||||||
|
"numberEndsWith": "Šim skaitlim jābeidzas ar {0}!",
|
||||||
|
"numberContains": "Šim skaitlim jāsatur {0}!",
|
||||||
|
"numberChoices": "Šis skaitlis var būt tikai viena no šīm vērtībām: {0}!",
|
||||||
|
"numberFloat": "Šis skaitlis nedrīkst būt decimāldaļa!",
|
||||||
|
"numberNegative": "Šis skaitlis nedrīkst būt negatīvs!",
|
||||||
|
"numberPositive": "Šis skaitlis nedrīkst būt pozitīvs!",
|
||||||
|
"numberZero": "Šis skaitlis nedrīkst būt nulle!",
|
||||||
|
|
||||||
|
"booleanTrue": "Šis loģiskais mainīgais nedrīkst būt patiess!",
|
||||||
|
"booleanFalse": "Šis loģiskais mainīgais nedrīkst būt nepatiess!",
|
||||||
|
|
||||||
|
"arrayEmptyDisabled": "Šis masīvs nedrīkst būt tukšs!",
|
||||||
|
"arrayEmptyRequired": "Šim masīvam jābūt tukšam!",
|
||||||
|
"arrayTooShort": "Šim masīvam jābūt vismaz {0} garam!",
|
||||||
|
"arrayTooLong": "Šim masīvam jābūt ne garākam par {0}!",
|
||||||
|
"arrayLengthInvalid": "Šim masīvam jābūt {0} garam!",
|
||||||
|
"arrayInvalidTypes": "Šis masīvs var saturēt tikai šādus tipus: {0}!",
|
||||||
|
"arrayDouble": "Šis masīvs neatļauj vienādas vērtības divreiz!",
|
||||||
|
|
||||||
|
"discordInvalidId": "Šis ir nederīgs Discord {0} ID!",
|
||||||
|
"discordInvalidIdOptions": "Šis ir nederīgs Discord {0} ID! Jūs varat izmantot arī kādu no šiem: {1}!",
|
||||||
|
"discordInvalidToken": "Šis ir nederīgs Discord tokens (sintaktiski)!",
|
||||||
|
"colorInvalid": "Šī ir nederīga heksadecimālā krāsa!",
|
||||||
|
"emojiTooShort": "Šim tekstam jābūt vismaz {0} emocijzīmēm!",
|
||||||
|
"emojiTooLong": "Šim tekstam jābūt ne vairāk kā {0} emocijzīmēm!",
|
||||||
|
"emojiCustom": "Šī emocijzīme nedrīkst būt pielāgota Discord emocijzīme!",
|
||||||
|
"emojiInvalid": "Šī ir nederīga emocijzīme!",
|
||||||
|
"urlInvalid": "Šī URL ir nederīga!",
|
||||||
|
"urlInvalidHttp": "Šī URL var izmantot tikai https:// protokolu!",
|
||||||
|
"urlInvalidProtocol": "Šī URL var izmantot tikai http:// un https:// protokolus!",
|
||||||
|
"urlInvalidHostname": "Šai URL ir neatļauts resursdatora nosaukums!",
|
||||||
|
"urlInvalidExtension": "Šai URL ir nederīgs paplašinājums! Izvēlieties starp: {0}!",
|
||||||
|
"urlInvalidPath": "Šai URL ir nederīgs ceļš!",
|
||||||
|
"idNotUnique": "Šis ID nav unikāls, izmantojiet citu ID!",
|
||||||
|
"idNonExistent": "ID {0} neeksistē!",
|
||||||
|
|
||||||
|
"invalidType": "Šai īpašībai jābūt tipam: {0}!",
|
||||||
|
"propertyMissing": "Īpašība {0} trūkst šajā objektā!",
|
||||||
|
"propertyOptional": "Īpašība {0} šajā objektā ir izvēles!",
|
||||||
|
"objectDisabled": "Šis objekts ir atspējots, aktivizējiet to, izmantojot {0}!",
|
||||||
|
"nullInvalid": "Šī īpašība nedrīkst būt null!",
|
||||||
|
"switchInvalidType": "Tam jābūt vienam no šiem tipiem: {0}!",
|
||||||
|
"objectSwitchInvalid": "Šim objektam jābūt vienam no šiem tipiem: {0}!",
|
||||||
|
|
||||||
|
"invalidLanguage": "Šī ir nederīga valoda!",
|
||||||
|
"invalidButton": "Šai pogai jābūt vismaz {0} vai {1}!",
|
||||||
|
"unusedOption": "Opcija {0} nekur netiek izmantota!",
|
||||||
|
"unusedQuestion": "Jautājums {0} nekur netiek izmantots!",
|
||||||
|
"dropdownOption": "Panelim ar iespējotu izvēlni var būt tikai 'ticket' tipa opcijas!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"buttons": {
|
||||||
|
"create": "Apmeklēt biļeti",
|
||||||
|
"close": "Aizvērt biļeti",
|
||||||
|
"delete": "Dzēst biļeti",
|
||||||
|
"reopen": "Atvērt biļeti no jauna",
|
||||||
|
"claim": "Pieprasīt biļeti",
|
||||||
|
"unclaim": "Atcelt biļetes pieprasījumu",
|
||||||
|
"pin": "Piespraust biļeti",
|
||||||
|
"unpin": "Atspraust biļeti",
|
||||||
|
"clear": "Dzēst biļetes",
|
||||||
|
"helpSwitchSlash": "Skatīt slīpsvītras komandas",
|
||||||
|
"helpSwitchText": "Skatīt teksta komandas",
|
||||||
|
"helpPage": "Lapa {0}",
|
||||||
|
"withReason": "Ar iemeslu",
|
||||||
|
"withoutTranscript": "Bez transkripta"
|
||||||
|
},
|
||||||
|
"titles": {
|
||||||
|
"created": "Biļete izveidota",
|
||||||
|
"close": "Biļete aizvērta",
|
||||||
|
"delete": "Biļete dzēsta",
|
||||||
|
"reopen": "Biļete atkal atvērta",
|
||||||
|
"claim": "Biļete pieprasīta",
|
||||||
|
"unclaim": "Biļetes pieprasījums atcelts",
|
||||||
|
"pin": "Biļete piesprausta",
|
||||||
|
"unpin": "Biļete atsprausta",
|
||||||
|
"rename": "Biļete pārdēvēta",
|
||||||
|
"move": "Biļete pārvietota",
|
||||||
|
"add": "Lietotājs pievienots biļetei",
|
||||||
|
"remove": "Lietotājs noņemts no biļetes",
|
||||||
|
|
||||||
|
"help": "Pieejamās komandas",
|
||||||
|
"statsReset": "Atiestatīt statistiku",
|
||||||
|
"blacklistAdd": "Lietotājs pievienots melnajam sarakstam",
|
||||||
|
"blacklistRemove": "Lietotājs atbrīvots",
|
||||||
|
"blacklistGet": "Melnajā sarakstā esošs lietotājs",
|
||||||
|
"blacklistView": "Pašreizējais melnais saraksts",
|
||||||
|
"blacklistAddDm": "Pievienots melnajam sarakstam",
|
||||||
|
"blacklistRemoveDm": "Noņemts no melnā saraksta",
|
||||||
|
"clear": "Biļetes izdzēstas",
|
||||||
|
"roles": "Lomas atjauninātas",
|
||||||
|
|
||||||
|
"autoclose": "Biļete automātiski aizvērta",
|
||||||
|
"autocloseEnabled": "Automātiskā aizvēršana ieslēgta",
|
||||||
|
"autocloseDisabled": "Automātiskā aizvēršana izslēgta",
|
||||||
|
"autodelete": "Biļete automātiski dzēsta",
|
||||||
|
"autodeleteEnabled": "Automātiskā dzēšana ieslēgta",
|
||||||
|
"autodeleteDisabled": "Automātiskā dzēšana izslēgta"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"create": "Jūsu biļete ir izveidota. Noklikšķiniet uz pogas zemāk, lai tai piekļūtu!",
|
||||||
|
"close": "Biļete ir veiksmīgi aizvērta!",
|
||||||
|
"delete": "Biļete ir veiksmīgi dzēsta!",
|
||||||
|
"reopen": "Biļete ir veiksmīgi atkal atvērta!",
|
||||||
|
"claim": "Biļete ir veiksmīgi pieprasīta!",
|
||||||
|
"unclaim": "Biļetes pieprasījums ir veiksmīgi atcelts!",
|
||||||
|
"pin": "Biļete ir veiksmīgi piesprausta!",
|
||||||
|
"unpin": "Biļete ir veiksmīgi atsprausta!",
|
||||||
|
"rename": "Biļete ir veiksmīgi pārdēvēta par {0}!",
|
||||||
|
"move": "Biļete ir veiksmīgi pārvietota uz {0}!",
|
||||||
|
"add": "{0} ir veiksmīgi pievienots biļetei!",
|
||||||
|
"remove": "{0} ir veiksmīgi noņemts no biļetes!",
|
||||||
|
|
||||||
|
"helpExplanation": "`<nosaukums>` => obligāts parametrs\n`[nosaukums]` => izvēles parametrs",
|
||||||
|
"statsReset": "Bota statistika ir veiksmīgi atiestatīta!",
|
||||||
|
"statsError": "Nevar skatīt biļešu statistiku!\n{0} nav biļete!",
|
||||||
|
"blacklistAdd": "{0} ir veiksmīgi pievienots melnajam sarakstam!",
|
||||||
|
"blacklistRemove": "{0} ir veiksmīgi atbrīvots!",
|
||||||
|
"blacklistGetSuccess": "{0} pašlaik ir melnajā sarakstā!",
|
||||||
|
"blacklistGetEmpty": "{0} pašlaik nav melnajā sarakstā!",
|
||||||
|
"blacklistViewEmpty": "Vēl neviens nav melnajā sarakstā!",
|
||||||
|
"blacklistViewTip": "Izmantojiet \"/blacklist add\", lai pievienotu lietotāju melnajam sarakstam!",
|
||||||
|
"clearVerify": "Vai esat pārliecināts, ka vēlaties dzēst vairākas biļetes?\nŠo darbību nevar atsaukt!",
|
||||||
|
"clearReady": "{0} biļetes ir veiksmīgi dzēstas!",
|
||||||
|
"rolesEmpty": "Neviena loma nav atjaunināta!",
|
||||||
|
|
||||||
|
"autocloseLeave": "Šī biļete tika automātiski aizvērta, jo izveidotājs pameta serveri!",
|
||||||
|
"autocloseTimeout": "Šī biļete tika automātiski aizvērta, jo tā bija neaktīva ilgāk par `{0}h`!",
|
||||||
|
"autodeleteLeave": "Šī biļete tika automātiski dzēsta, jo izveidotājs pameta serveri!",
|
||||||
|
"autodeleteTimeout": "Šī biļete tika automātiski dzēsta, jo tā bija neaktīva ilgāk par `{0} dienām`!",
|
||||||
|
"autocloseEnabled": "Automātiskā aizvēršana ir ieslēgta šai biļetei!\nTā tiks aizvērta, ja būs neaktīva ilgāk par `{0}h`!",
|
||||||
|
"autocloseDisabled": "Automātiskā aizvēršana ir izslēgta šai biļetei!\nTā vairs netiks automātiski aizvērta!",
|
||||||
|
"autodeleteEnabled": "Automātiskā dzēšana ir ieslēgta šai biļetei!\nTā tiks dzēsta, ja būs neaktīva ilgāk par `{0} dienām`!",
|
||||||
|
"autodeleteDisabled": "Automātiskā dzēšana ir izslēgta šai biļetei!\nTā vairs netiks automātiski dzēsta!",
|
||||||
|
|
||||||
|
"ticketMessageLimit": "Jūs varat izveidot tikai {0} biļeti(-es) vienlaikus!",
|
||||||
|
"ticketMessageAutoclose": "Šī biļete tiks automātiski aizvērta, ja būs neaktīva {0}h!",
|
||||||
|
"ticketMessageAutodelete": "Šī biļete tiks automātiski dzēsta, ja būs neaktīva {0} dienas!",
|
||||||
|
"panelReady": "Paneli var atrast zemāk!\nŠo ziņojumu tagad var dzēst!"
|
||||||
|
},
|
||||||
|
"modal": {
|
||||||
|
"closePlaceholder": "Kāpēc jūs aizvērāt šo biļeti?",
|
||||||
|
"deletePlaceholder": "Kāpēc jūs dzēsāt šo biļeti?",
|
||||||
|
"reopenPlaceholder": "Kāpēc jūs atkal atvērāt šo biļeti?",
|
||||||
|
"claimPlaceholder": "Kāpēc jūs pieprasījāt šo biļeti?",
|
||||||
|
"unclaimPlaceholder": "Kāpēc jūs atcēlāt šīs biļetes pieprasījumu?",
|
||||||
|
"pinPlaceholder": "Kāpēc jūs piespraudāt šo biļeti?",
|
||||||
|
"unpinPlaceholder": "Kāpēc jūs atspraudāt šo biļeti?"
|
||||||
|
},
|
||||||
|
"logs": {
|
||||||
|
"createLog": "Jauna biļete tika izveidota no {0}!",
|
||||||
|
"closeLog": "Šī biļete tika aizvērta no {0}!",
|
||||||
|
"closeDm": "Jūsu biļete tika aizvērta mūsu serverī!",
|
||||||
|
"deleteLog": "Šī biļete tika dzēsta no {0}!",
|
||||||
|
"deleteDm": "Jūsu biļete tika dzēsta mūsu serverī!",
|
||||||
|
"reopenLog": "Šī biļete tika atkal atvērta no {0}!",
|
||||||
|
"reopenDm": "Jūsu biļete tika atkal atvērta mūsu serverī!",
|
||||||
|
"claimLog": "Šī biļete tika pieprasīta no {0}!",
|
||||||
|
"claimDm": "Jūsu biļete tika pieprasīta mūsu serverī!",
|
||||||
|
"unclaimLog": "Šīs biļetes pieprasījums tika atcelts no {0}!",
|
||||||
|
"unclaimDm": "Jūsu biļetes pieprasījums tika atcelts mūsu serverī!",
|
||||||
|
"pinLog": "Šī biļete tika piesprausta no {0}!",
|
||||||
|
"pinDm": "Jūsu biļete tika piesprausta mūsu serverī!",
|
||||||
|
"unpinLog": "Šī biļete tika atsprausta no {0}!",
|
||||||
|
"unpinDm": "Jūsu biļete tika atsprausta mūsu serverī!",
|
||||||
|
"renameLog": "Šī biļete tika pārdēvēta par {0} no {1}!",
|
||||||
|
"renameDm": "Jūsu biļete tika pārdēvēta par {0} mūsu serverī!",
|
||||||
|
"moveLog": "Šī biļete tika pārvietota uz {0} no {1}!",
|
||||||
|
"moveDm": "Jūsu biļete tika pārvietota uz {0} mūsu serverī!",
|
||||||
|
"addLog": "{0} tika pievienots šai biļetei no {1}!",
|
||||||
|
"addDm": "{0} tika pievienots jūsu biļetei mūsu serverī!",
|
||||||
|
"removeLog": "{0} tika noņemts no šīs biļetes no {1}!",
|
||||||
|
"removeDm": "{0} tika noņemts no jūsu biļetes mūsu serverī!",
|
||||||
|
|
||||||
|
"blacklistAddLog": "{0} tika pievienots melnajam sarakstam no {1}!",
|
||||||
|
"blacklistRemoveLog": "{0} tika noņemts no melnā saraksta no {1}!",
|
||||||
|
"blacklistAddDm": "Jūs esat pievienots melnajam sarakstam mūsu serverī!\nNo šī brīža jūs nevarat izveidot biļeti!",
|
||||||
|
"blacklistRemoveDm": "Jūs esat noņemts no melnā saraksta mūsu serverī!\nTagad jūs atkal varat izveidot biļetes!",
|
||||||
|
"clearLog": "{0} biļetes tika dzēstas no {1}!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transcripts": {
|
||||||
|
"success": {
|
||||||
|
"visit": "Apmeklēt transkriptu",
|
||||||
|
"ready": "Transkripts izveidots",
|
||||||
|
"textFileDescription": "Šis ir dzēstas biļetes teksta transkripts!",
|
||||||
|
"htmlProgress": "Lūdzu, uzgaidiet, kamēr šis HTML transkripts tiek apstrādāts...",
|
||||||
|
|
||||||
|
"createdChannel": "Jauns {0} transkripts tika izveidots serverī!",
|
||||||
|
"createdCreator": "Jauns {0} transkripts tika izveidots vienai no jūsu biļetēm!",
|
||||||
|
"createdParticipant": "Jauns {0} transkripts tika izveidots vienā no biļetēm, kurā jūs piedalījāties!",
|
||||||
|
"createdActiveAdmin": "Jauns {0} transkripts tika izveidots vienā no biļetēm, kurā jūs piedalījāties kā administrators!",
|
||||||
|
"createdEveryAdmin": "Jauns {0} transkripts tika izveidots vienā no biļetēm, kurā jūs bijāt administrators!",
|
||||||
|
"createdOther": "Jauns {0} transkripts tika izveidots!"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"retry": "Mēģināt vēlreiz",
|
||||||
|
"continue": "Dzēst bez transkripta",
|
||||||
|
"backup": "Izveidot rezerves transkriptu",
|
||||||
|
"error": "Kaut kas nogāja greizi, mēģinot izveidot transkriptu.\nKo jūs vēlaties darīt?\n\nŠī biļete netiks dzēsta, kamēr jūs nenoklikšķināsiet uz vienas no šīm pogām."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"titles": {
|
||||||
|
"internalError": "Iekšēja kļūda",
|
||||||
|
"optionMissing": "Trūkst komandas opcijas",
|
||||||
|
"optionInvalid": "Nederīga komandas opcija",
|
||||||
|
"unknownCommand": "Nezināma komanda",
|
||||||
|
"noPermissions": "Nav atļauju",
|
||||||
|
"unknownTicket": "Nezināma biļete",
|
||||||
|
"deprecatedTicket": "Novecojusi biļete",
|
||||||
|
"unknownOption": "Nezināma opcija",
|
||||||
|
"unknownPanel": "Nezināms panelis",
|
||||||
|
"notInGuild": "Nav serverī",
|
||||||
|
"channelRename": "Nevar pārdēvēt kanālu",
|
||||||
|
"busy": "Biļete ir aizņemta"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"askForInfo": "Sazinieties ar šī bota īpašnieku, lai iegūtu plašāku informāciju!",
|
||||||
|
"askForInfoResolve": "Sazinieties ar bota īpašnieku, ja šī problēma neatrisinās pēc dažiem mēģinājumiem.",
|
||||||
|
"internalError": "Neizdevās atbildēt uz šo {0} iekšējas kļūdas dēļ!",
|
||||||
|
"optionMissing": "Šai komandai trūkst obligāta parametra!",
|
||||||
|
"optionInvalid": "Šīs komandas parametrs ir nederīgs!",
|
||||||
|
"optionInvalidChoose": "Izvēlieties starp",
|
||||||
|
"unknownCommand": "Mēģiniet apmeklēt palīdzības izvēlni, lai iegūtu vairāk informācijas!",
|
||||||
|
"noPermissions": "Jums nav atļauts izmantot šo {0}!",
|
||||||
|
"noPermissionsList": "Nepieciešamās atļaujas: (viena no tām)",
|
||||||
|
"noPermissionsCooldown": "Jums nav atļauts izmantot šo {0}, jo jums ir atpūtas periods!",
|
||||||
|
"noPermissionsBlacklist": "Jums nav atļauts izmantot šo {0}, jo esat melnajā sarakstā!",
|
||||||
|
"noPermissionsLimitGlobal": "Jūs nevarat izveidot biļeti, jo serveris ir sasniedzis maksimālo biļešu skaitu!",
|
||||||
|
"noPermissionsLimitGlobalUser": "Jūs nevarat izveidot biļeti, jo esat sasniedzis maksimālo biļešu skaitu!",
|
||||||
|
"noPermissionsLimitOption": "Jūs nevarat izveidot biļeti, jo serveris ir sasniedzis maksimālo biļešu skaitu šai opcijai!",
|
||||||
|
"noPermissionsLimitOptionUser": "Jūs nevarat izveidot biļeti, jo esat sasniedzis maksimālo biļešu skaitu šai opcijai!",
|
||||||
|
"unknownTicket": "Mēģiniet vēlreiz izmantot šo komandu derīgā biļetē!",
|
||||||
|
"deprecatedTicket": "Pašreizējais kanāls nav derīga biļete! Tas varētu būt biļete no vecas Open Ticket versijas!",
|
||||||
|
"notInGuild": "Šis {0} nedarbojas DM! Lūdzu, mēģiniet vēlreiz serverī!",
|
||||||
|
"channelRename": "Discord ierobežojumu dēļ bots pašlaik nevar pārdēvēt kanālu. Kanāls tiks automātiski pārdēvēts 10 minūšu laikā, ja bots netiks restartēts.",
|
||||||
|
"channelRenameSource": "Šīs kļūdas avots ir: {0}",
|
||||||
|
"busy": "Nevar izmantot šo {0}!\nBiļete pašlaik tiek apstrādāta ar botu.\n\nLūdzu, mēģiniet vēlreiz pēc dažām sekundēm!"
|
||||||
|
},
|
||||||
|
"optionInvalidReasons": {
|
||||||
|
"stringRegex": "Vērtība neatbilst šablonam!",
|
||||||
|
"stringMinLength": "Vērtībai jābūt vismaz {0} rakstzīmēm!",
|
||||||
|
"stringMaxLength": "Vērtībai jābūt ne vairāk kā {0} rakstzīmēm!",
|
||||||
|
"numberInvalid": "Nederīgs skaitlis!",
|
||||||
|
"numberMin": "Skaitlim jābūt vismaz {0}!",
|
||||||
|
"numberMax": "Skaitlim jābūt ne vairāk kā {0}!",
|
||||||
|
"numberDecimal": "Skaitlis nedrīkst būt decimāldaļa!",
|
||||||
|
"numberNegative": "Skaitlis nedrīkst būt negatīvs!",
|
||||||
|
"numberPositive": "Skaitlis nedrīkst būt pozitīvs!",
|
||||||
|
"numberZero": "Skaitlis nedrīkst būt nulle!",
|
||||||
|
"channelNotFound": "Nevar atrast kanālu!",
|
||||||
|
"userNotFound": "Nevar atrast lietotāju!",
|
||||||
|
"roleNotFound": "Nevar atrast lomu!",
|
||||||
|
"memberNotFound": "Nevar atrast lietotāju!",
|
||||||
|
"mentionableNotFound": "Nevar atrast lietotāju vai lomu!",
|
||||||
|
"channelType": "Nederīgs kanāla tips!",
|
||||||
|
"notInGuild": "Šai opcijai jābūt serverī!"
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"developer": "Jums jābūt bota izstrādātājam.",
|
||||||
|
"owner": "Jums jābūt servera īpašniekam.",
|
||||||
|
"admin": "Jums jābūt servera administratoram.",
|
||||||
|
"moderator": "Jums jābūt moderatoram.",
|
||||||
|
"support": "Jums jābūt atbalsta komandā.",
|
||||||
|
"member": "Jums jābūt dalībniekam.",
|
||||||
|
"discord-administrator": "Jums jābūt `ADMINISTRATOR` atļaujai."
|
||||||
|
},
|
||||||
|
"actionInvalid": {
|
||||||
|
"close": "Biļete jau ir aizvērta!",
|
||||||
|
"reopen": "Biļete vēl nav aizvērta!",
|
||||||
|
"claim": "Biļete jau ir pieprasīta!",
|
||||||
|
"unclaim": "Biļete vēl nav pieprasīta!",
|
||||||
|
"pin": "Biļete jau ir piesprausta!",
|
||||||
|
"unpin": "Biļete nav piesprausta!",
|
||||||
|
"add": "Šis lietotājs jau var piekļūt biļetei!",
|
||||||
|
"remove": "Nevar noņemt šo lietotāju no biļetes!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"params": {
|
||||||
|
"uppercase": {
|
||||||
|
"ticket": "Biļete",
|
||||||
|
"tickets": "Biļetes",
|
||||||
|
"reason": "Iemesls",
|
||||||
|
"creator": "Izveidotājs",
|
||||||
|
"remaining": "Atlikušais laiks",
|
||||||
|
"added": "Pievienots",
|
||||||
|
"removed": "Noņemts",
|
||||||
|
"filter": "Filtrs",
|
||||||
|
"claimedBy": "Pieprasījis {0}",
|
||||||
|
"method": "Metode",
|
||||||
|
"type": "Tips",
|
||||||
|
"blacklisted": "Melnajā sarakstā",
|
||||||
|
"panel": "Panelis",
|
||||||
|
"command": "Komanda",
|
||||||
|
"system": "Sistēma",
|
||||||
|
"true": "Patiess",
|
||||||
|
"false": "Nepatiess",
|
||||||
|
"syntax": "Sintakse",
|
||||||
|
"originalName": "Sākotnējais nosaukums",
|
||||||
|
"newName": "Jaunais nosaukums",
|
||||||
|
"until": "Līdz",
|
||||||
|
"validOptions": "Derīgas opcijas",
|
||||||
|
"validPanels": "Derīgi paneļi",
|
||||||
|
"autoclose": "Automātiskā aizvēršana",
|
||||||
|
"autodelete": "Automātiskā dzēšana",
|
||||||
|
"startupDate": "Startēšanas datums",
|
||||||
|
"version": "Versija",
|
||||||
|
"name": "Nosaukums",
|
||||||
|
"role": "Loma",
|
||||||
|
"status": "Statuss",
|
||||||
|
"claimed": "Pieprasīts",
|
||||||
|
"pinned": "Piesprausts",
|
||||||
|
"creationDate": "Izveidošanas datums"
|
||||||
|
},
|
||||||
|
"lowercase": {
|
||||||
|
"text": "teksts",
|
||||||
|
"html": "html",
|
||||||
|
"command": "komanda",
|
||||||
|
"modal": "modāls",
|
||||||
|
"button": "poga",
|
||||||
|
"dropdown": "izvēlne",
|
||||||
|
"method": "metode"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commands": {
|
||||||
|
"reason": "Norādiet izvēles iemeslu, kas būs redzams žurnālos.",
|
||||||
|
"help": "Iegūstiet visu pieejamo komandu sarakstu.",
|
||||||
|
"panel": "Izveidojiet ziņojumu ar izvēlni vai pogām (biļešu izveidei).",
|
||||||
|
"panelId": "Paneļa identifikators, kuru vēlaties izveidot.",
|
||||||
|
"panelAutoUpdate": "Vai vēlaties, lai šis panelis automātiski atjauninātos, kad tas tiek rediģēts?",
|
||||||
|
"ticket": "Nekavējoties izveidojiet biļeti.",
|
||||||
|
"ticketId": "Biļetes identifikators, kuru vēlaties izveidot.",
|
||||||
|
"close": "Aizveriet biļeti.",
|
||||||
|
"delete": "Dzēsiet biļeti.",
|
||||||
|
"deleteNoTranscript": "Dzēsiet šo biļeti, neizveidojot transkriptu.",
|
||||||
|
"reopen": "Atveriet biļeti no jauna.",
|
||||||
|
"claim": "Pieprasiet biļeti.",
|
||||||
|
"claimUser": "Pieprasiet šo biļeti kādam citam, nevis sev.",
|
||||||
|
"unclaim": "Atceliet biļetes pieprasījumu.",
|
||||||
|
"pin": "Piespraudiet biļeti.",
|
||||||
|
"unpin": "Atspraudiet biļeti.",
|
||||||
|
"move": "Pārvietojiet biļeti.",
|
||||||
|
"moveId": "Opcijas identifikators, uz kuru vēlaties pārvietot.",
|
||||||
|
"rename": "Pārdēvējiet biļeti.",
|
||||||
|
"renameName": "Jaunais nosaukums šai biļetei.",
|
||||||
|
"add": "Pievienojiet lietotāju biļetei.",
|
||||||
|
"addUser": "Lietotājs, kuru pievienot.",
|
||||||
|
"remove": "Noņemiet lietotāju no biļetes.",
|
||||||
|
"removeUser": "Lietotājs, kuru noņemt.",
|
||||||
|
"blacklist": "Pārvaldiet biļešu melno sarakstu.",
|
||||||
|
"blacklistView": "Skatiet pašreizējā melnā saraksta sarakstu.",
|
||||||
|
"blacklistAdd": "Pievienojiet lietotāju melnajam sarakstam.",
|
||||||
|
"blacklistRemove": "Noņemiet lietotāju no melnā saraksta.",
|
||||||
|
"blacklistGet": "Iegūstiet informāciju par melnajā sarakstā esošu lietotāju.",
|
||||||
|
"blacklistGetUser": "Lietotājs, par kuru iegūt informāciju.",
|
||||||
|
"stats": "Skatiet statistiku no bota, dalībnieka vai biļetes.",
|
||||||
|
"statsReset": "Atiestatiet visu bota statistiku (un sāciet skaitīt no nulles).",
|
||||||
|
"statsGlobal": "Skatiet globālo statistiku.",
|
||||||
|
"statsUser": "Skatiet lietotāja statistiku serverī.",
|
||||||
|
"statsUserUser": "Lietotājs, kuru skatīt.",
|
||||||
|
"statsTicket": "Skatiet biļetes statistiku serverī.",
|
||||||
|
"statsTicketTicket": "Biļete, kuru skatīt.",
|
||||||
|
"clear": "Dzēsiet vairākas biļetes vienlaikus.",
|
||||||
|
"clearFilter": "Filtrs biļešu dzēšanai.",
|
||||||
|
"clearFilters": {
|
||||||
|
"all": "Visas",
|
||||||
|
"open": "Atvērtas",
|
||||||
|
"close": "Aizvērtas",
|
||||||
|
"claim": "Pieprasītas",
|
||||||
|
"unclaim": "Nepieprasītas",
|
||||||
|
"pin": "Piespraustas",
|
||||||
|
"unpin": "Atspraustas",
|
||||||
|
"autoclose": "Automātiski aizvērtas"
|
||||||
|
},
|
||||||
|
"autoclose": "Pārvaldiet automātisko aizvēršanu biļetē.",
|
||||||
|
"autocloseDisable": "Atspējojiet automātisko aizvēršanu šai biļetei.",
|
||||||
|
"autocloseEnable": "Ieslēdziet automātisko aizvēršanu šai biļetei.",
|
||||||
|
"autocloseEnableTime": "Stundu skaits, cik ilgi biļetei jābūt neaktīvai, lai to aizvērtu.",
|
||||||
|
"autodelete": "Pārvaldiet automātisko dzēšanu biļetē.",
|
||||||
|
"autodeleteDisable": "Atspējojiet automātisko dzēšanu šai biļetei.",
|
||||||
|
"autodeleteEnable": "Ieslēdziet automātisko dzēšanu šai biļetei.",
|
||||||
|
"autodeleteEnableTime": "Dienu skaits, cik ilgi biļetei jābūt neaktīvai, lai to dzēstu."
|
||||||
|
},
|
||||||
|
"helpMenu": {
|
||||||
|
"help": "Iegūstiet visu pieejamo komandu sarakstu.",
|
||||||
|
"ticket": "Nekavējoties izveidojiet biļeti.",
|
||||||
|
"close": "Aizveriet biļeti, tas atspējo rakstīšanu šajā kanālā.",
|
||||||
|
"delete": "Dzēsiet biļeti, tas izveido transkriptu, ja ir iespējots.",
|
||||||
|
"reopen": "Atveriet biļeti no jauna, tas atkal iespējo rakstīšanu šajā kanālā.",
|
||||||
|
"pin": "Piespraudiet biļeti. Tas pārvietos biļeti uz augšu un pievienos '📌' emocijzīmi nosaukumam.",
|
||||||
|
"unpin": "Atspraudiet biļeti. Biļete paliks savā pozīcijā, bet zaudēs '📌' emocijzīmi.",
|
||||||
|
"move": "Pārvietojiet biļeti. Tas mainīs šīs biļetes tipu.",
|
||||||
|
"rename": "Pārdēvējiet biļeti. Tas mainīs šīs biļetes kanāla nosaukumu.",
|
||||||
|
"claim": "Pieprasiet biļeti. Ar to jūs varat informēt savu komandu, ka jūs apstrādājat šo biļeti.",
|
||||||
|
"unclaim": "Atceliet biļetes pieprasījumu. Ar to jūs varat informēt savu komandu, ka šī biļete atkal ir brīva.",
|
||||||
|
"add": "Pievienojiet lietotāju biļetei. Tas ļaus lietotājam lasīt un rakstīt šajā biļetē.",
|
||||||
|
"remove": "Noņemiet lietotāju no biļetes. Tas atņems lietotājam iespēju lasīt un rakstīt šajā biļetē.",
|
||||||
|
"panel": "Izveidojiet ziņojumu ar izvēlni vai pogām (biļešu izveidei).",
|
||||||
|
"blacklistView": "Skatiet pašreizējā melnā saraksta sarakstu.",
|
||||||
|
"blacklistAdd": "Pievienojiet lietotāju melnajam sarakstam.",
|
||||||
|
"blacklistRemove": "Noņemiet lietotāju no melnā saraksta.",
|
||||||
|
"blacklistGet": "Iegūstiet informāciju par melnajā sarakstā esošu lietotāju.",
|
||||||
|
"statsGlobal": "Skatiet globālo statistiku.",
|
||||||
|
"statsTicket": "Skatiet biļetes statistiku serverī.",
|
||||||
|
"statsUser": "Skatiet lietotāja statistiku serverī.",
|
||||||
|
"statsReset": "Atiestatiet visu bota statistiku (un sāciet skaitīt no nulles).",
|
||||||
|
"autocloseDisable": "Atspējojiet automātisko aizvēršanu šai biļetei.",
|
||||||
|
"autocloseEnable": "Ieslēdziet automātisko aizvēršanu šai biļetei.",
|
||||||
|
"autodeleteDisable": "Atspējojiet automātisko dzēšanu šai biļetei.",
|
||||||
|
"autodeleteEnable": "Ieslēdziet automātisko dzēšanu šai biļetei."
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"scopes": {
|
||||||
|
"global": "Globālā statistika",
|
||||||
|
"system": "Sistēmas statistika",
|
||||||
|
"user": "Lietotāja statistika",
|
||||||
|
"ticket": "Biļešu statistika",
|
||||||
|
"participants": "Dalībnieki"
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"ticketsCreated": "Izveidotās biļetes",
|
||||||
|
"ticketsClosed": "Aizvērtās biļetes",
|
||||||
|
"ticketsDeleted": "Dzēstās biļetes",
|
||||||
|
"ticketsReopened": "Atkal atvērtās biļetes",
|
||||||
|
"ticketsAutoclosed": "Automātiski aizvērtās biļetes",
|
||||||
|
"ticketsClaimed": "Pieprasītās biļetes",
|
||||||
|
"ticketsPinned": "Piespraustās biļetes",
|
||||||
|
"ticketsMoved": "Pārvietotās biļetes",
|
||||||
|
"usersBlacklisted": "Melnajā sarakstā esošie lietotāji",
|
||||||
|
"transcriptsCreated": "Izveidotie transkripti"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["TsgIndrius"],
|
"translators":["TsgIndrius"],
|
||||||
"lastedited":"26/01/2025",
|
"lastedited":"26/01/2025",
|
||||||
"language":"Lithuanian",
|
"language":"Lithuanian",
|
||||||
|
|||||||
@@ -0,0 +1,478 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION": {
|
||||||
|
"otversion": "v4.0.1",
|
||||||
|
"translators": ["NoOneNook"],
|
||||||
|
"lastedited": "25/03/2025",
|
||||||
|
"language": "Norwegian",
|
||||||
|
"automated": false
|
||||||
|
},
|
||||||
|
"checker": {
|
||||||
|
"system": {
|
||||||
|
"typeError": "[FEIL]",
|
||||||
|
"headerOpenTicket": "ÅPNE SAK",
|
||||||
|
"typeWarning": "[ADVARSEL]",
|
||||||
|
"typeInfo": "[INFO]",
|
||||||
|
"headerConfigChecker": "KONFIGURASJONSSJEKKER",
|
||||||
|
"headerDescription": "sjekk etter feil i konfigurasjonen din!",
|
||||||
|
"footerError": "boten starter ikke før alle {0} er fikset!",
|
||||||
|
"footerWarning": "det anbefales å fikse alle {0} før oppstart!",
|
||||||
|
"footerSupport": "STØTTE: {0} - DOKUMENTASJON: {1}",
|
||||||
|
"compactInformation": "bruk {0} for mer informasjon!",
|
||||||
|
"dataPath": "sti",
|
||||||
|
"dataDocs": "dokumentasjon",
|
||||||
|
"dataMessages": "melding"
|
||||||
|
},
|
||||||
|
"messages": {
|
||||||
|
"stringTooShort": "Denne strengen kan ikke være kortere enn {0} tegn!",
|
||||||
|
"stringTooLong": "Denne strengen kan ikke være lengre enn {0} tegn!",
|
||||||
|
"stringLengthInvalid": "Denne strengen skal være {0} tegn lang!",
|
||||||
|
"stringStartsWith": "Denne strengen skal starte med {0}!",
|
||||||
|
"stringEndsWith": "Denne strengen skal slutte med {0}!",
|
||||||
|
"stringContains": "Denne strengen skal inneholde {0}!",
|
||||||
|
"stringChoices": "Denne strengen kan kun være en av følgende verdier: {0}!",
|
||||||
|
"stringRegex": "Denne strengen er ugyldig!",
|
||||||
|
|
||||||
|
"numberTooShort": "Dette tallet kan ikke være kortere enn {0} tegn!",
|
||||||
|
"numberTooLong": "Dette tallet kan ikke være lengre enn {0} tegn!",
|
||||||
|
"numberLengthInvalid": "Dette tallet skal være {0} tegn langt!",
|
||||||
|
"numberTooSmall": "Dette tallet skal være minst {0}!",
|
||||||
|
"numberTooLarge": "Dette tallet skal være høyst {0}!",
|
||||||
|
"numberNotEqual": "Dette tallet skal være {0}!",
|
||||||
|
"numberStep": "Dette tallet skal være et multiplum av {0}!",
|
||||||
|
"numberStepOffset": "Dette tallet skal være et multiplum av {0}, startende med {1}!",
|
||||||
|
"numberStartsWith": "Dette tallet skal starte med {0}!",
|
||||||
|
"numberEndsWith": "Dette tallet skal slutte med {0}!",
|
||||||
|
"numberContains": "Dette tallet skal inneholde {0}!",
|
||||||
|
"numberChoices": "Dette tallet kan kun være en av følgende verdier: {0}!",
|
||||||
|
"numberFloat": "Dette tallet kan ikke være et desimaltall!",
|
||||||
|
"numberNegative": "Dette tallet kan ikke være negativt!",
|
||||||
|
"numberPositive": "Dette tallet kan ikke være positivt!",
|
||||||
|
"numberZero": "Dette tallet kan ikke være null!",
|
||||||
|
|
||||||
|
"booleanTrue": "Denne boolske verdien kan ikke være sann!",
|
||||||
|
"booleanFalse": "Denne boolske verdien kan ikke være usann!",
|
||||||
|
|
||||||
|
"arrayEmptyDisabled": "Denne listen kan ikke være tom!",
|
||||||
|
"arrayEmptyRequired": "Denne listen skal være tom!",
|
||||||
|
"arrayTooShort": "Denne listen skal ha en lengde på minst {0}!",
|
||||||
|
"arrayTooLong": "Denne listen skal ha en lengde på høyst {0}!",
|
||||||
|
"arrayLengthInvalid": "Denne listen skal ha en lengde på {0}!",
|
||||||
|
"arrayInvalidTypes": "Denne listen kan kun inneholde følgende typer: {0}!",
|
||||||
|
"arrayDouble": "Denne listen tillater ikke samme verdi to ganger!",
|
||||||
|
|
||||||
|
"discordInvalidId": "Dette er en ugyldig Discord {0} ID!",
|
||||||
|
"discordInvalidIdOptions": "Dette er en ugyldig Discord {0} ID! Du kan også bruke en av disse: {1}!",
|
||||||
|
"discordInvalidToken": "Dette er et ugyldig Discord-token (syntaktisk)!",
|
||||||
|
"colorInvalid": "Dette er en ugyldig heksadesimal farge!",
|
||||||
|
"emojiTooShort": "Denne strengen skal ha minst {0} emojier!",
|
||||||
|
"emojiTooLong": "Denne strengen skal ha høyst {0} emojier!",
|
||||||
|
"emojiCustom": "Denne emojien kan ikke være en tilpasset Discord-emoji!",
|
||||||
|
"emojiInvalid": "Dette er en ugyldig emoji!",
|
||||||
|
"urlInvalid": "Denne URL-en er ugyldig!",
|
||||||
|
"urlInvalidHttp": "Denne URL-en kan kun bruke https://-protokollen!",
|
||||||
|
"urlInvalidProtocol": "Denne URL-en kan kun bruke http://- og https://-protokollene!",
|
||||||
|
"urlInvalidHostname": "Denne URL-en har et ikke-tillatt vertsnavn!",
|
||||||
|
"urlInvalidExtension": "Denne URL-en har en ugyldig filtype! Velg mellom: {0}!",
|
||||||
|
"urlInvalidPath": "Denne URL-en har en ugyldig sti!",
|
||||||
|
"idNotUnique": "Denne ID-en er ikke unik, bruk en annen ID i stedet!",
|
||||||
|
"idNonExistent": "ID-en {0} finnes ikke!",
|
||||||
|
|
||||||
|
"invalidType": "Denne egenskapen skal være av typen: {0}!",
|
||||||
|
"propertyMissing": "Egenskapen {0} mangler i dette objektet!",
|
||||||
|
"propertyOptional": "Egenskapen {0} er valgfri i dette objektet!",
|
||||||
|
"objectDisabled": "Dette objektet er deaktivert, aktiver det ved å bruke {0}!",
|
||||||
|
"nullInvalid": "Denne egenskapen kan ikke være null!",
|
||||||
|
"switchInvalidType": "Dette skal være en av følgende typer: {0}!",
|
||||||
|
"objectSwitchInvalid": "Dette objektet skal være en av følgende typer: {0}!",
|
||||||
|
|
||||||
|
"invalidLanguage": "Dette er et ugyldig språk!",
|
||||||
|
"invalidButton": "Denne knappen skal ha minst en {0} eller {1}!",
|
||||||
|
"unusedOption": "Alternativet {0} brukes ikke noe sted!",
|
||||||
|
"unusedQuestion": "Spørsmålet {0} brukes ikke noe sted!",
|
||||||
|
"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": "`<navn>` => 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": {
|
||||||
|
"success": {
|
||||||
|
"visit": "Besøk Utskrift",
|
||||||
|
"ready": "Utskrift Opprettet",
|
||||||
|
"textFileDescription": "Dette er tekstutskriften av en slettet sak!",
|
||||||
|
"htmlProgress": "Vennligst vent mens denne HTML-utskriften blir behandlet...",
|
||||||
|
|
||||||
|
"createdChannel": "En ny {0} utskrift er blitt opprettet på serveren!",
|
||||||
|
"createdCreator": "En ny {0} utskrift er blitt opprettet for en av dine saker!",
|
||||||
|
"createdParticipant": "En ny {0} utskrift er blitt opprettet i en av sakene du deltok i!",
|
||||||
|
"createdActiveAdmin": "En ny {0} utskrift er blitt opprettet i en av sakene du deltok i som admin!",
|
||||||
|
"createdEveryAdmin": "En ny {0} utskrift er blitt opprettet i en av sakene du var admin i!",
|
||||||
|
"createdOther": "En ny {0} utskrift er blitt opprettet!"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"retry": "Prøv Igjen",
|
||||||
|
"continue": "Slett Uten Utskrift",
|
||||||
|
"backup": "Opprett Sikkerhetskopiutskrift",
|
||||||
|
"error": "Noe gikk galt under forsøket på å opprette utskriften.\nHva vil du gjøre?\n\nDenne saken vil ikke bli slettet før du klikker på en av disse knappene."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"titles": {
|
||||||
|
"internalError": "Intern Feil",
|
||||||
|
"optionMissing": "Kommandoalternativ Mangler",
|
||||||
|
"optionInvalid": "Ugyldig Kommandoalternativ",
|
||||||
|
"unknownCommand": "Ukjent Kommando",
|
||||||
|
"noPermissions": "Ingen Tillatelser",
|
||||||
|
"unknownTicket": "Ukjent Sak",
|
||||||
|
"deprecatedTicket": "Utdatert Sak",
|
||||||
|
"unknownOption": "Ukjent Alternativ",
|
||||||
|
"unknownPanel": "Ukjent Panel",
|
||||||
|
"notInGuild": "Ikke På Server",
|
||||||
|
"channelRename": "Kan Ikke Omdøpe Kanal",
|
||||||
|
"busy": "Saken Er Opptatt"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"askForInfo": "Kontakt eieren av denne boten for mer informasjon!",
|
||||||
|
"askForInfoResolve": "Kontakt eieren av denne boten hvis problemet ikke løser seg etter noen forsøk!",
|
||||||
|
"internalError": "Kunne ikke svare på denne {0} på grunn av en intern feil!",
|
||||||
|
"optionMissing": "En påkrevd parameter mangler i denne kommandoen!",
|
||||||
|
"optionInvalid": "En parameter i denne kommandoen er ugyldig!",
|
||||||
|
"optionInvalidChoose": "Velg mellom",
|
||||||
|
"unknownCommand": "Prøv å besøke hjelpmenyen for mer informasjon!",
|
||||||
|
"noPermissions": "Du har ikke tillatelse til å bruke denne {0}!",
|
||||||
|
"noPermissionsList": "Påkrevde tillatelser: (en av dem)",
|
||||||
|
"noPermissionsCooldown": "Du har ikke tillatelse til å bruke denne {0} fordi du har en nedkjølingsperiode!",
|
||||||
|
"noPermissionsBlacklist": "Du har ikke tillatelse til å bruke denne {0} fordi du er svartelistet!",
|
||||||
|
"noPermissionsLimitGlobal": "Du har ikke tillatelse til å opprette en sak fordi serveren har nådd maksgrensen for saker!",
|
||||||
|
"noPermissionsLimitGlobalUser": "Du har ikke tillatelse til å opprette en sak fordi du har nådd maksgrensen for saker!",
|
||||||
|
"noPermissionsLimitOption": "Du har ikke tillatelse til å opprette en sak fordi serveren har nådd maksgrensen for dette alternativet!",
|
||||||
|
"noPermissionsLimitOptionUser": "Du har ikke tillatelse til å opprette en sak fordi du har nådd maksgrensen for dette alternativet!",
|
||||||
|
"unknownTicket": "Prøv denne kommandoen igjen i en gyldig sak!",
|
||||||
|
"deprecatedTicket": "Den nåværende kanalen er ikke en gyldig sak! Den kan ha vært en sak fra en eldre versjon av Open Ticket!",
|
||||||
|
"notInGuild": "Denne {0} fungerer ikke i DM! Prøv igjen på en server!",
|
||||||
|
"channelRename": "På grunn av Discords hastighetsbegrensninger er det for øyeblikket umulig for boten å omdøpe kanalen. Kanalen vil automatisk bli omdøpt innen 10 minutter hvis boten ikke startes på nytt.",
|
||||||
|
"channelRenameSource": "Kilden til denne feilen er: {0}",
|
||||||
|
"busy": "Kan ikke bruke denne {0}!\nSaken behandles for øyeblikket av boten.\n\nPrøv igjen om noen sekunder!"
|
||||||
|
},
|
||||||
|
"optionInvalidReasons": {
|
||||||
|
"stringRegex": "Verdien samsvarer ikke med mønsteret!",
|
||||||
|
"stringMinLength": "Verdien skal være minst {0} tegn!",
|
||||||
|
"stringMaxLength": "Verdien skal være høyst {0} tegn!",
|
||||||
|
"numberInvalid": "Ugyldig tall!",
|
||||||
|
"numberMin": "Tallet skal være minst {0}!",
|
||||||
|
"numberMax": "Tallet skal være høyst {0}!",
|
||||||
|
"numberDecimal": "Tallet kan ikke være et desimaltall!",
|
||||||
|
"numberNegative": "Tallet kan ikke være negativt!",
|
||||||
|
"numberPositive": "Tallet kan ikke være positivt!",
|
||||||
|
"numberZero": "Tallet kan ikke være null!",
|
||||||
|
"channelNotFound": "Kan ikke finne kanalen!",
|
||||||
|
"userNotFound": "Kan ikke finne brukeren!",
|
||||||
|
"roleNotFound": "Kan ikke finne rollen!",
|
||||||
|
"memberNotFound": "Kan ikke finne brukeren!",
|
||||||
|
"mentionableNotFound": "Kan ikke finne brukeren eller rollen!",
|
||||||
|
"channelType": "Ugyldig kanaltype!",
|
||||||
|
"notInGuild": "Dette alternativet krever at du er på en server!"
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"developer": "Du må være utvikleren av boten.",
|
||||||
|
"owner": "Du må være servereieren.",
|
||||||
|
"admin": "Du må være serveradministrator.",
|
||||||
|
"moderator": "Du må være moderator.",
|
||||||
|
"support": "Du må være en del av støtteteamet.",
|
||||||
|
"member": "Du må være medlem.",
|
||||||
|
"discord-administrator": "Du må ha `ADMINISTRATOR`-tillatelsen."
|
||||||
|
},
|
||||||
|
"actionInvalid": {
|
||||||
|
"close": "Saken er allerede lukket!",
|
||||||
|
"reopen": "Saken er ikke lukket ennå!",
|
||||||
|
"claim": "Saken er allerede tatt!",
|
||||||
|
"unclaim": "Saken er ikke tatt ennå!",
|
||||||
|
"pin": "Saken er allerede festet!",
|
||||||
|
"unpin": "Saken er ikke festet ennå!",
|
||||||
|
"add": "Denne brukeren har allerede tilgang til saken!",
|
||||||
|
"remove": "Kan ikke fjerne denne brukeren fra saken!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"params": {
|
||||||
|
"uppercase": {
|
||||||
|
"ticket": "Sak",
|
||||||
|
"tickets": "Saker",
|
||||||
|
"reason": "Årsak",
|
||||||
|
"creator": "Oppretter",
|
||||||
|
"remaining": "Tid Igjen",
|
||||||
|
"added": "Lagt Til",
|
||||||
|
"removed": "Fjernet",
|
||||||
|
"filter": "Filter",
|
||||||
|
"claimedBy": "Tatt Av {0}",
|
||||||
|
"method": "Metode",
|
||||||
|
"type": "Type",
|
||||||
|
"blacklisted": "Svartelistet",
|
||||||
|
"panel": "Panel",
|
||||||
|
"command": "Kommando",
|
||||||
|
"system": "System",
|
||||||
|
"true": "Sann",
|
||||||
|
"false": "Usann",
|
||||||
|
"syntax": "Syntaks",
|
||||||
|
"originalName": "Opprinnelig Navn",
|
||||||
|
"newName": "Nytt Navn",
|
||||||
|
"until": "Til",
|
||||||
|
"validOptions": "Gyldige Alternativer",
|
||||||
|
"validPanels": "Gyldige Paneler",
|
||||||
|
"autoclose": "Autolukking",
|
||||||
|
"autodelete": "Autosletting",
|
||||||
|
"startupDate": "Oppstartsdato",
|
||||||
|
"version": "Versjon",
|
||||||
|
"name": "Navn",
|
||||||
|
"role": "Rolle",
|
||||||
|
"status": "Status",
|
||||||
|
"claimed": "Tatt",
|
||||||
|
"pinned": "Festet",
|
||||||
|
"creationDate": "Opprettelsesdato"
|
||||||
|
},
|
||||||
|
"lowercase": {
|
||||||
|
"text": "tekst",
|
||||||
|
"html": "html",
|
||||||
|
"command": "kommando",
|
||||||
|
"modal": "modal",
|
||||||
|
"button": "knapp",
|
||||||
|
"dropdown": "nedtrekksmeny",
|
||||||
|
"method": "metode"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commands": {
|
||||||
|
"reason": "Angi en valgfri årsak som vil være synlig i loggene.",
|
||||||
|
"help": "Få en liste over alle tilgjengelige kommandoer.",
|
||||||
|
"panel": "Opprett en melding med en nedtrekksmeny eller knapper (for sakopprettelse).",
|
||||||
|
"panelId": "Identifikatoren for panelet du vil opprette.",
|
||||||
|
"panelAutoUpdate": "Ønsker du at dette panelet skal oppdatere seg automatisk når det redigeres?",
|
||||||
|
"ticket": "Opprett en sak med det samme.",
|
||||||
|
"ticketId": "Identifikatoren for saken du vil opprette.",
|
||||||
|
"close": "Lukk en sak.",
|
||||||
|
"delete": "Slett en sak.",
|
||||||
|
"deleteNoTranscript": "Slett denne saken uten å opprette en utskrift.",
|
||||||
|
"reopen": "Gjenåpne en sak.",
|
||||||
|
"claim": "Ta en sak.",
|
||||||
|
"claimUser": "Ta denne saken for en annen bruker i stedet for deg selv.",
|
||||||
|
"unclaim": "Frigi en sak.",
|
||||||
|
"pin": "Fest en sak.",
|
||||||
|
"unpin": "Løsne en sak.",
|
||||||
|
"move": "Flytt en sak.",
|
||||||
|
"moveId": "Identifikatoren for alternativet du vil flytte til.",
|
||||||
|
"rename": "Omdøp en sak.",
|
||||||
|
"renameName": "Det nye navnet på denne saken.",
|
||||||
|
"add": "Legg til en bruker i en sak.",
|
||||||
|
"addUser": "Brukeren som skal legges til.",
|
||||||
|
"remove": "Fjern en bruker fra en sak.",
|
||||||
|
"removeUser": "Brukeren som skal fjernes.",
|
||||||
|
"blacklist": "Administrer svartelisten for saker.",
|
||||||
|
"blacklistView": "Vis en liste over gjeldende svarteliste.",
|
||||||
|
"blacklistAdd": "Legg til en bruker på svartelisten.",
|
||||||
|
"blacklistRemove": "Fjern en bruker fra svartelisten.",
|
||||||
|
"blacklistGet": "Hent detaljer om en svartelistet bruker.",
|
||||||
|
"blacklistGetUser": "Brukeren å hente detaljer fra.",
|
||||||
|
"stats": "Vis statistikk fra boten, en bruker eller en sak.",
|
||||||
|
"statsReset": "Tilbakestill all statistikk for boten (og start tellingen fra null).",
|
||||||
|
"statsGlobal": "Vis global statistikk.",
|
||||||
|
"statsUser": "Vis statistikk fra en bruker på serveren.",
|
||||||
|
"statsUserUser": "Brukeren som skal vises.",
|
||||||
|
"statsTicket": "Vis statistikk for en sak på serveren.",
|
||||||
|
"statsTicketTicket": "Saken som skal vises.",
|
||||||
|
"clear": "Slett flere saker samtidig.",
|
||||||
|
"clearFilter": "Filteret for å slette saker.",
|
||||||
|
"clearFilters": {
|
||||||
|
"all": "Alle",
|
||||||
|
"open": "Åpne",
|
||||||
|
"close": "Lukkede",
|
||||||
|
"claim": "Tatte",
|
||||||
|
"unclaim": "Frigitte",
|
||||||
|
"pin": "Festede",
|
||||||
|
"unpin": "Løsnede",
|
||||||
|
"autoclose": "Autolukkede"
|
||||||
|
},
|
||||||
|
"autoclose": "Administrer autolukking i en sak.",
|
||||||
|
"autocloseDisable": "Deaktiver autolukking i denne saken.",
|
||||||
|
"autocloseEnable": "Aktiver autolukking i denne saken.",
|
||||||
|
"autocloseEnableTime": "Antall timer denne saken må være inaktiv før den lukkes.",
|
||||||
|
"autodelete": "Administrer autosletting i en sak.",
|
||||||
|
"autodeleteDisable": "Deaktiver autosletting i denne saken.",
|
||||||
|
"autodeleteEnable": "Aktiver autosletting i denne saken.",
|
||||||
|
"autodeleteEnableTime": "Antall dager denne saken må være inaktiv før den slettes."
|
||||||
|
},
|
||||||
|
"helpMenu": {
|
||||||
|
"help": "Få en liste over alle tilgjengelige kommandoer.",
|
||||||
|
"ticket": "Opprett en sak med det samme.",
|
||||||
|
"close": "Lukk en sak, dette deaktiverer skriving i kanalen.",
|
||||||
|
"delete": "Slett en sak, dette oppretter en utskrift når det er aktivert.",
|
||||||
|
"reopen": "Gjenåpne en sak, dette aktiverer skriving i kanalen igjen.",
|
||||||
|
"pin": "Fest en sak. Dette flytter saken til toppen og legger til en '📌' emoji i navnet.",
|
||||||
|
"unpin": "Løsne en sak. Saken blir værende på plass, men mister '📌' emojien.",
|
||||||
|
"move": "Flytt en sak. Dette endrer typen på saken.",
|
||||||
|
"rename": "Omdøp en sak. Dette endrer kanalnavnet på saken.",
|
||||||
|
"claim": "Ta en sak. Dette lar teamet ditt vite at du håndterer saken.",
|
||||||
|
"unclaim": "Frigi en sak. Dette lar teamet ditt vite at saken er ledig igjen.",
|
||||||
|
"add": "Legg til en bruker i en sak. Dette gir brukeren tilgang til å lese og skrive i saken.",
|
||||||
|
"remove": "Fjern en bruker fra en sak. Dette fjerner brukerens tilgang til å lese og skrive i saken.",
|
||||||
|
"panel": "Opprett en melding med en nedtrekksmeny eller knapper (for sakopprettelse).",
|
||||||
|
"blacklistView": "Vis en liste over gjeldende svarteliste.",
|
||||||
|
"blacklistAdd": "Legg til en bruker på svartelisten.",
|
||||||
|
"blacklistRemove": "Fjern en bruker fra svartelisten.",
|
||||||
|
"blacklistGet": "Hent detaljer om en svartelistet bruker.",
|
||||||
|
"statsGlobal": "Vis global statistikk.",
|
||||||
|
"statsTicket": "Vis statistikk for en sak på serveren.",
|
||||||
|
"statsUser": "Vis statistikk fra en bruker på serveren.",
|
||||||
|
"statsReset": "Tilbakestill all statistikk for boten (og start tellingen fra null).",
|
||||||
|
"autocloseDisable": "Deaktiver autolukking i denne saken.",
|
||||||
|
"autocloseEnable": "Aktiver autolukking i denne saken.",
|
||||||
|
"autodeleteDisable": "Deaktiver autosletting i denne saken.",
|
||||||
|
"autodeleteEnable": "Aktiver autosletting i denne saken."
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"scopes": {
|
||||||
|
"global": "Global Statistikk",
|
||||||
|
"system": "Systemstatistikk",
|
||||||
|
"user": "Brukerstatistikk",
|
||||||
|
"ticket": "Saksstatistikk",
|
||||||
|
"participants": "Deltakere"
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"ticketsCreated": "Saker Opprettet",
|
||||||
|
"ticketsClosed": "Saker Lukket",
|
||||||
|
"ticketsDeleted": "Saker Slettet",
|
||||||
|
"ticketsReopened": "Saker Gjenåpnet",
|
||||||
|
"ticketsAutoclosed": "Saker Autolukket",
|
||||||
|
"ticketsClaimed": "Saker Tatt",
|
||||||
|
"ticketsPinned": "Saker Festet",
|
||||||
|
"ticketsMoved": "Saker Flyttet",
|
||||||
|
"usersBlacklisted": "Brukere Svartelistet",
|
||||||
|
"transcriptsCreated": "Utskrifter Opprettet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["DanoGlez"],
|
"translators":["DanoGlez"],
|
||||||
"lastedited":"28/01/2025",
|
"lastedited":"28/01/2025",
|
||||||
"language":"Polish",
|
"language":"Polish",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["quiradon"],
|
"translators":["quiradon"],
|
||||||
"lastedited":"20/08/2024",
|
"lastedited":"20/08/2024",
|
||||||
"language":"Portuguese",
|
"language":"Portuguese",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["SankeDev"],
|
"translators":["SankeDev"],
|
||||||
"lastedited":"27/08/2024",
|
"lastedited":"27/08/2024",
|
||||||
"language":"Romanian",
|
"language":"Romanian",
|
||||||
|
|||||||
@@ -0,0 +1,465 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION": {
|
||||||
|
"otversion": "v4.0.1",
|
||||||
|
"translators": ["NoOneNook"],
|
||||||
|
"lastedited": "25/03/2025",
|
||||||
|
"language": "Russian",
|
||||||
|
"automated": true
|
||||||
|
},
|
||||||
|
"checker": {
|
||||||
|
"system": {
|
||||||
|
"typeError": "[ОШИБКА]",
|
||||||
|
"headerOpenTicket": "ОТКРЫТЬ ТИКЕТ",
|
||||||
|
"typeWarning": "[ПРЕДУПРЕЖДЕНИЕ]",
|
||||||
|
"typeInfo": "[ИНФОРМАЦИЯ]",
|
||||||
|
"headerConfigChecker": "ПРОВЕРКА КОНФИГУРАЦИИ",
|
||||||
|
"headerDescription": "проверьте наличие ошибок в ваших конфигурационных файлах!",
|
||||||
|
"footerError": "бот не запустится, пока все {0} не будут исправлены!",
|
||||||
|
"footerWarning": "рекомендуется исправить все {0} перед запуском!",
|
||||||
|
"footerSupport": "ПОДДЕРЖКА: {0} - ДОКУМЕНТАЦИЯ: {1}",
|
||||||
|
"compactInformation": "используйте {0} для получения дополнительной информации!",
|
||||||
|
"dataPath": "путь",
|
||||||
|
"dataDocs": "документация",
|
||||||
|
"dataMessages": "сообщение"
|
||||||
|
},
|
||||||
|
"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": "Это булево значение не может быть истинным!",
|
||||||
|
"booleanFalse": "Это булево значение не может быть ложным!",
|
||||||
|
"arrayEmptyDisabled": "Этот массив не может быть пустым!",
|
||||||
|
"arrayEmptyRequired": "Этот массив должен быть пустым!",
|
||||||
|
"arrayTooShort": "Этот массив должен иметь длину не менее {0}!",
|
||||||
|
"arrayTooLong": "Этот массив должен иметь длину не более {0}!",
|
||||||
|
"arrayLengthInvalid": "Этот массив должен иметь длину {0}!",
|
||||||
|
"arrayInvalidTypes": "Этот массив может содержать только следующие типы: {0}!",
|
||||||
|
"arrayDouble": "Этот массив не допускает повторяющихся значений!",
|
||||||
|
"discordInvalidId": "Это недействительный идентификатор {0} в Discord!",
|
||||||
|
"discordInvalidIdOptions": "Это недействительный идентификатор {0} в Discord! Вы также можете использовать один из следующих: {1}!",
|
||||||
|
"discordInvalidToken": "Это недействительный токен Discord (синтаксически)!",
|
||||||
|
"colorInvalid": "Это недействительный шестнадцатеричный цвет!",
|
||||||
|
"emojiTooShort": "Эта строка должна содержать не менее {0} эмодзи!",
|
||||||
|
"emojiTooLong": "Эта строка должна содержать не более {0} эмодзи!",
|
||||||
|
"emojiCustom": "Этот эмодзи не может быть пользовательским эмодзи Discord!",
|
||||||
|
"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": "Панель с включенным выпадающим списком может содержать только опции типа 'ticket'!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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": "`<name>` => обязательный параметр\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": "Этот тикет был переименован в {0} пользователем {1}!",
|
||||||
|
"renameDm": "Ваш тикет был переименован в {0} на нашем сервере!",
|
||||||
|
"moveLog": "Этот тикет был перемещен в {0} пользователем {1}!",
|
||||||
|
"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} не работает в ЛС! Пожалуйста, попробуйте еще раз на сервере!",
|
||||||
|
"channelRename": "Из-за ограничений Discord на частоту запросов, боту сейчас невозможно переименовать канал. Канал будет автоматически переименован через 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": "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": "Стенограммы созданы"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["Redactado","Josuens"],
|
"translators":["Redactado","Josuens"],
|
||||||
"lastedited":"22/08/2024",
|
"lastedited":"22/08/2024",
|
||||||
"language":"Spanish",
|
"language":"Spanish",
|
||||||
|
|||||||
@@ -0,0 +1,478 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION": {
|
||||||
|
"otversion": "v4.0.1",
|
||||||
|
"translators": ["NoOneNook"],
|
||||||
|
"lastedited": "25/03/2025",
|
||||||
|
"language": "Svenska",
|
||||||
|
"automated": false
|
||||||
|
},
|
||||||
|
"checker": {
|
||||||
|
"system": {
|
||||||
|
"typeError": "[FEL]",
|
||||||
|
"headerOpenTicket":"OPEN TICKET",
|
||||||
|
"typeWarning": "[VARNING]",
|
||||||
|
"typeInfo": "[INFO]",
|
||||||
|
"headerConfigChecker": "KONFIGURATIONSKONTROLL",
|
||||||
|
"headerDescription": "kontrollera efter fel i din konfiguration!",
|
||||||
|
"footerError": "botten startar inte förrän alla {0} är fixade!",
|
||||||
|
"footerWarning": "det rekommenderas att fixa alla {0} före start!",
|
||||||
|
"footerSupport": "SUPPORT: {0} - DOKUMENTATION: {1}",
|
||||||
|
"compactInformation": "använd {0} för mer information!",
|
||||||
|
"dataPath": "sökväg",
|
||||||
|
"dataDocs": "dokumentation",
|
||||||
|
"dataMessages": "meddelande"
|
||||||
|
},
|
||||||
|
"messages": {
|
||||||
|
"stringTooShort": "Denna sträng kan inte vara kortare än {0} tecken!",
|
||||||
|
"stringTooLong": "Denna sträng kan inte vara längre än {0} tecken!",
|
||||||
|
"stringLengthInvalid": "Denna sträng ska vara {0} tecken lång!",
|
||||||
|
"stringStartsWith": "Denna sträng ska börja med {0}!",
|
||||||
|
"stringEndsWith": "Denna sträng ska sluta med {0}!",
|
||||||
|
"stringContains": "Denna sträng ska innehålla {0}!",
|
||||||
|
"stringChoices": "Denna sträng kan endast vara en av följande värden: {0}!",
|
||||||
|
"stringRegex": "Denna sträng är ogiltig!",
|
||||||
|
|
||||||
|
"numberTooShort": "Detta tal kan inte vara kortare än {0} tecken!",
|
||||||
|
"numberTooLong": "Detta tal kan inte vara längre än {0} tecken!",
|
||||||
|
"numberLengthInvalid": "Detta tal ska vara {0} tecken långt!",
|
||||||
|
"numberTooSmall": "Detta tal ska vara minst {0}!",
|
||||||
|
"numberTooLarge": "Detta tal ska vara högst {0}!",
|
||||||
|
"numberNotEqual": "Detta tal ska vara {0}!",
|
||||||
|
"numberStep": "Detta tal ska vara en multipel av {0}!",
|
||||||
|
"numberStepOffset": "Detta tal ska vara en multipel av {0}, med start från {1}!",
|
||||||
|
"numberStartsWith": "Detta tal ska börja med {0}!",
|
||||||
|
"numberEndsWith": "Detta tal ska sluta med {0}!",
|
||||||
|
"numberContains": "Detta tal ska innehålla {0}!",
|
||||||
|
"numberChoices": "Detta tal kan endast vara en av följande värden: {0}!",
|
||||||
|
"numberFloat": "Detta tal kan inte vara ett decimaltal!",
|
||||||
|
"numberNegative": "Detta tal kan inte vara negativt!",
|
||||||
|
"numberPositive": "Detta tal kan inte vara positivt!",
|
||||||
|
"numberZero": "Detta tal kan inte vara noll!",
|
||||||
|
|
||||||
|
"booleanTrue": "Detta booleska värde kan inte vara sant!",
|
||||||
|
"booleanFalse": "Detta booleska värde kan inte vara falskt!",
|
||||||
|
|
||||||
|
"arrayEmptyDisabled": "Denna lista kan inte vara tom!",
|
||||||
|
"arrayEmptyRequired": "Denna lista ska vara tom!",
|
||||||
|
"arrayTooShort": "Denna lista ska ha en längd på minst {0}!",
|
||||||
|
"arrayTooLong": "Denna lista ska ha en längd på högst {0}!",
|
||||||
|
"arrayLengthInvalid": "Denna lista ska ha en längd på {0}!",
|
||||||
|
"arrayInvalidTypes": "Denna lista kan endast innehålla följande typer: {0}!",
|
||||||
|
"arrayDouble": "Denna lista tillåter inte samma värde två gånger!",
|
||||||
|
|
||||||
|
"discordInvalidId": "Detta är en ogiltig Discord {0} ID!",
|
||||||
|
"discordInvalidIdOptions": "Detta är en ogiltig Discord {0} ID! Du kan också använda en av dessa: {1}!",
|
||||||
|
"discordInvalidToken": "Detta är en ogiltig Discord-token (syntaktiskt)!",
|
||||||
|
"colorInvalid": "Detta är en ogiltig hexadecimal färg!",
|
||||||
|
"emojiTooShort": "Denna sträng ska ha minst {0} emojis!",
|
||||||
|
"emojiTooLong": "Denna sträng ska ha högst {0} emojis!",
|
||||||
|
"emojiCustom": "Denna emoji kan inte vara en anpassad Discord-emoji!",
|
||||||
|
"emojiInvalid": "Detta är en ogiltig emoji!",
|
||||||
|
"urlInvalid": "Denna URL är ogiltig!",
|
||||||
|
"urlInvalidHttp": "Denna URL kan endast använda https://-protokollet!",
|
||||||
|
"urlInvalidProtocol": "Denna URL kan endast använda http://- och https://-protokollen!",
|
||||||
|
"urlInvalidHostname": "Denna URL har ett otillåtet värdnamn!",
|
||||||
|
"urlInvalidExtension": "Denna URL har en ogiltig filtyp! Välj mellan: {0}!",
|
||||||
|
"urlInvalidPath": "Denna URL har en ogiltig sökväg!",
|
||||||
|
"idNotUnique": "Detta ID är inte unikt, använd ett annat ID istället!",
|
||||||
|
"idNonExistent": "ID {0} existerar inte!",
|
||||||
|
|
||||||
|
"invalidType": "Denna egenskap ska vara av typen: {0}!",
|
||||||
|
"propertyMissing": "Egenskapen {0} saknas i detta objekt!",
|
||||||
|
"propertyOptional": "Egenskapen {0} är valfri i detta objekt!",
|
||||||
|
"objectDisabled": "Detta objekt är inaktiverat, aktivera det genom att använda {0}!",
|
||||||
|
"nullInvalid": "Denna egenskap kan inte vara null!",
|
||||||
|
"switchInvalidType": "Detta ska vara en av följande typer: {0}!",
|
||||||
|
"objectSwitchInvalid": "Detta objekt ska vara en av följande typer: {0}!",
|
||||||
|
|
||||||
|
"invalidLanguage": "Detta är ett ogiltigt språk!",
|
||||||
|
"invalidButton": "Denna knapp ska ha minst en {0} eller {1}!",
|
||||||
|
"unusedOption": "Alternativet {0} används inte någonstans!",
|
||||||
|
"unusedQuestion": "Frågan {0} används inte någonstans!",
|
||||||
|
"dropdownOption": "Ett panel med dropdown aktiverad kan endast innehålla alternativ av typen 'ärende'!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"buttons": {
|
||||||
|
"create": "Skapa Ärende",
|
||||||
|
"close": "Stäng Ärende",
|
||||||
|
"delete": "Radera Ärende",
|
||||||
|
"reopen": "Återöppna Ärende",
|
||||||
|
"claim": "Ta Ärende",
|
||||||
|
"unclaim": "Frigör Ärende",
|
||||||
|
"pin": "Fäst Ärende",
|
||||||
|
"unpin": "Lossa Ärende",
|
||||||
|
"clear": "Radera Ärenden",
|
||||||
|
"helpSwitchSlash": "Visa Slash-kommandon",
|
||||||
|
"helpSwitchText": "Visa Textkommandon",
|
||||||
|
"helpPage": "Sida {0}",
|
||||||
|
"withReason": "Med Orsak",
|
||||||
|
"withoutTranscript": "Utan Utskrift"
|
||||||
|
},
|
||||||
|
"titles": {
|
||||||
|
"created": "Ärende Skapat",
|
||||||
|
"close": "Ärende Stängt",
|
||||||
|
"delete": "Ärende Raderat",
|
||||||
|
"reopen": "Ärende Återöppnat",
|
||||||
|
"claim": "Ärende Taget",
|
||||||
|
"unclaim": "Ärende Frigjort",
|
||||||
|
"pin": "Ärende Fäst",
|
||||||
|
"unpin": "Ärende Lossat",
|
||||||
|
"rename": "Ärende Omdöpt",
|
||||||
|
"move": "Ärende Flyttat",
|
||||||
|
"add": "Användare Tillagd i Ärende",
|
||||||
|
"remove": "Användare Borttagen Från Ärende",
|
||||||
|
|
||||||
|
"help": "Tillgängliga Kommandon",
|
||||||
|
"statsReset": "Återställ Statistik",
|
||||||
|
"blacklistAdd": "Användare Svartlistad",
|
||||||
|
"blacklistRemove": "Användare Borttagen Från Svartlista",
|
||||||
|
"blacklistGet": "Svartlistad Användare",
|
||||||
|
"blacklistView": "Nuvarande Svartlista",
|
||||||
|
"blacklistAddDm": "Tillagd i Svartlista",
|
||||||
|
"blacklistRemoveDm": "Borttagen Från Svartlista",
|
||||||
|
"clear": "Ärenden Raderade",
|
||||||
|
"roles": "Roller Uppdaterade",
|
||||||
|
|
||||||
|
"autoclose": "Ärende Autostängt",
|
||||||
|
"autocloseEnabled": "Autostängning Aktiverad",
|
||||||
|
"autocloseDisabled": "Autostängning Inaktiverad",
|
||||||
|
"autodelete": "Ärende Autoraderat",
|
||||||
|
"autodeleteEnabled": "Autoradering Aktiverad",
|
||||||
|
"autodeleteDisabled": "Autoradering Inaktiverad"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"create": "Ditt ärende har skapats. Klicka på knappen nedan för att få tillgång till det!",
|
||||||
|
"close": "Ärendet har stängts framgångsrikt!",
|
||||||
|
"delete": "Ärendet har raderats framgångsrikt!",
|
||||||
|
"reopen": "Ärendet har återöppnats framgångsrikt!",
|
||||||
|
"claim": "Ärendet har tagits framgångsrikt!",
|
||||||
|
"unclaim": "Ärendet har frigjorts framgångsrikt!",
|
||||||
|
"pin": "Ärendet har fästs framgångsrikt!",
|
||||||
|
"unpin": "Ärendet har lossats framgångsrikt!",
|
||||||
|
"rename": "Ärendet har döpts om till {0} framgångsrikt!",
|
||||||
|
"move": "Ärendet har flyttats till {0} framgångsrikt!",
|
||||||
|
"add": "{0} har lagts till i ärendet framgångsrikt!",
|
||||||
|
"remove": "{0} har tagits bort från ärendet framgångsrikt!",
|
||||||
|
|
||||||
|
"helpExplanation": "`<namn>` => obligatorisk parameter\n`[namn]` => valfri parameter",
|
||||||
|
"statsReset": "Bottens statistik har återställts framgångsrikt!",
|
||||||
|
"statsError": "Kan inte visa ärendestatistik!\n{0} är inte ett ärende!",
|
||||||
|
"blacklistAdd": "{0} har svartlistats framgångsrikt!",
|
||||||
|
"blacklistRemove": "{0} har tagits bort från svartlistan framgångsrikt!",
|
||||||
|
"blacklistGetSuccess": "{0} är för närvarande svartlistad!",
|
||||||
|
"blacklistGetEmpty": "{0} är för närvarande inte svartlistad!",
|
||||||
|
"blacklistViewEmpty": "Ingen är svartlistad ännu!",
|
||||||
|
"blacklistViewTip": "Använd \"/blacklist add\" för att svartlista en användare!",
|
||||||
|
"clearVerify": "Är du säker på att du vill radera flera ärenden?\nDenna åtgärd kan inte ångras!",
|
||||||
|
"clearReady": "{0} ärenden har raderats framgångsrikt!",
|
||||||
|
"rolesEmpty": "Inga roller har uppdaterats!",
|
||||||
|
|
||||||
|
"autocloseLeave": "Detta ärende har autostängts eftersom skaparen lämnade servern!",
|
||||||
|
"autocloseTimeout": "Detta ärende har autostängts eftersom det har varit inaktivt i mer än `{0}t`!",
|
||||||
|
"autodeleteLeave": "Detta ärende har autoraderats eftersom skaparen lämnade servern!",
|
||||||
|
"autodeleteTimeout": "Detta ärende har autoraderats eftersom det har varit inaktivt i mer än `{0} dagar`!",
|
||||||
|
"autocloseEnabled": "Autostängning har aktiverats i detta ärende!\nDet kommer att stängas när det är inaktivt i mer än `{0}t`!",
|
||||||
|
"autocloseDisabled": "Autostängning har inaktiverats i detta ärende!\nDet kommer inte längre att stängas automatiskt!",
|
||||||
|
"autodeleteEnabled": "Autoradering har aktiverats i detta ärende!\nDet kommer att raderas när det är inaktivt i mer än `{0} dagar`!",
|
||||||
|
"autodeleteDisabled": "Autoradering har inaktiverats i detta ärende!\nDet kommer inte längre att raderas automatiskt!",
|
||||||
|
|
||||||
|
"ticketMessageLimit": "Du kan endast skapa {0} ärende(n) åt gången!",
|
||||||
|
"ticketMessageAutoclose": "Detta ärende kommer att autostängas när det är inaktivt i {0}t!",
|
||||||
|
"ticketMessageAutodelete": "Detta ärende kommer att autoraderas när det är inaktivt i {0} dagar!",
|
||||||
|
"panelReady": "Du hittar panelen nedan!\nDetta meddelande kan nu raderas!"
|
||||||
|
},
|
||||||
|
"modal": {
|
||||||
|
"closePlaceholder": "Varför stängde du detta ärende?",
|
||||||
|
"deletePlaceholder": "Varför raderade du detta ärende?",
|
||||||
|
"reopenPlaceholder": "Varför återöppnade du detta ärende?",
|
||||||
|
"claimPlaceholder": "Varför tog du detta ärende?",
|
||||||
|
"unclaimPlaceholder": "Varför frigjorde du detta ärende?",
|
||||||
|
"pinPlaceholder": "Varför fäste du detta ärende?",
|
||||||
|
"unpinPlaceholder": "Varför lossade du detta ärende?"
|
||||||
|
},
|
||||||
|
"logs": {
|
||||||
|
"createLog": "Ett nytt ärende har skapats av {0}!",
|
||||||
|
"closeLog": "Detta ärende har stängts av {0}!",
|
||||||
|
"closeDm": "Ditt ärende har stängts på vår server!",
|
||||||
|
"deleteLog": "Detta ärende har raderats av {0}!",
|
||||||
|
"deleteDm": "Ditt ärende har raderats på vår server!",
|
||||||
|
"reopenLog": "Detta ärende har återöppnats av {0}!",
|
||||||
|
"reopenDm": "Ditt ärende har återöppnats på vår server!",
|
||||||
|
"claimLog": "Detta ärende har tagits av {0}!",
|
||||||
|
"claimDm": "Ditt ärende har tagits på vår server!",
|
||||||
|
"unclaimLog": "Detta ärende har frigjorts av {0}!",
|
||||||
|
"unclaimDm": "Ditt ärende har frigjorts på vår server!",
|
||||||
|
"pinLog": "Detta ärende har fästs av {0}!",
|
||||||
|
"pinDm": "Ditt ärende har fästs på vår server!",
|
||||||
|
"unpinLog": "Detta ärende har lossats av {0}!",
|
||||||
|
"unpinDm": "Ditt ärende har lossats på vår server!",
|
||||||
|
"renameLog": "Detta ärende har döpts om till {0} av {1}!",
|
||||||
|
"renameDm": "Ditt ärende har döpts om till {0} på vår server!",
|
||||||
|
"moveLog": "Detta ärende har flyttats till {0} av {1}!",
|
||||||
|
"moveDm": "Ditt ärende har flyttats till {0} på vår server!",
|
||||||
|
"addLog": "{0} har lagts till i detta ärende av {1}!",
|
||||||
|
"addDm": "{0} har lagts till i ditt ärende på vår server!",
|
||||||
|
"removeLog": "{0} har tagits bort från detta ärende av {1}!",
|
||||||
|
"removeDm": "{0} har tagits bort från ditt ärende på vår server!",
|
||||||
|
|
||||||
|
"blacklistAddLog": "{0} har svartlistats av {1}!",
|
||||||
|
"blacklistRemoveLog": "{0} har tagits bort från svartlistan av {1}!",
|
||||||
|
"blacklistAddDm": "Du har svartlistats på vår server!\nFrån och med nu kan du inte skapa ett ärende!",
|
||||||
|
"blacklistRemoveDm": "Du har tagits bort från svartlistan på vår server!\nNu kan du skapa ärenden igen!",
|
||||||
|
"clearLog": "{0} ärenden har raderats av {1}!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transcripts": {
|
||||||
|
"success": {
|
||||||
|
"visit": "Besök Utskrift",
|
||||||
|
"ready": "Utskrift Skapad",
|
||||||
|
"textFileDescription": "Detta är textutskriften av ett raderat ärende!",
|
||||||
|
"htmlProgress": "Vänligen vänta medan denna HTML-utskrift bearbetas...",
|
||||||
|
|
||||||
|
"createdChannel": "En ny {0} utskrift har skapats på servern!",
|
||||||
|
"createdCreator": "En ny {0} utskrift har skapats för ett av dina ärenden!",
|
||||||
|
"createdParticipant": "En ny {0} utskrift har skapats i ett av ärendena du deltog i!",
|
||||||
|
"createdActiveAdmin": "En ny {0} utskrift har skapats i ett av ärendena du deltog i som admin!",
|
||||||
|
"createdEveryAdmin": "En ny {0} utskrift har skapats i ett av ärendena du var admin i!",
|
||||||
|
"createdOther": "En ny {0} utskrift har skapats!"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"retry": "Försök Igen",
|
||||||
|
"continue": "Radera Utan Utskrift",
|
||||||
|
"backup": "Skapa Säkerhetskopieringsutskrift",
|
||||||
|
"error": "Något gick fel vid försöket att skapa utskriften.\nVad vill du göra?\n\nDetta ärende kommer inte att raderas förrän du klickar på en av dessa knappar."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"titles": {
|
||||||
|
"internalError": "Internt Fel",
|
||||||
|
"optionMissing": "Kommandoalternativ Saknas",
|
||||||
|
"optionInvalid": "Ogiltigt Kommandoalternativ",
|
||||||
|
"unknownCommand": "Okänt Kommando",
|
||||||
|
"noPermissions": "Inga Behörigheter",
|
||||||
|
"unknownTicket": "Okänt Ärende",
|
||||||
|
"deprecatedTicket": "Utgånget Ärende",
|
||||||
|
"unknownOption": "Okänt Alternativ",
|
||||||
|
"unknownPanel": "Okänt Panel",
|
||||||
|
"notInGuild": "Inte På Server",
|
||||||
|
"channelRename": "Kan Inte Döpa Om Kanal",
|
||||||
|
"busy": "Ärendet Är Upptaget"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"askForInfo": "Kontakta ägaren av denna bot för mer information!",
|
||||||
|
"askForInfoResolve": "Kontakta ägaren av denna bot om problemet inte löser sig efter några försök!",
|
||||||
|
"internalError": "Kunde inte svara på denna {0} på grund av ett internt fel!",
|
||||||
|
"optionMissing": "En obligatorisk parameter saknas i detta kommando!",
|
||||||
|
"optionInvalid": "En parameter i detta kommando är ogiltig!",
|
||||||
|
"optionInvalidChoose": "Välj mellan",
|
||||||
|
"unknownCommand": "Försök besöka hjälpmenyn för mer information!",
|
||||||
|
"noPermissions": "Du har inte behörighet att använda denna {0}!",
|
||||||
|
"noPermissionsList": "Nödvändiga behörigheter: (en av dem)",
|
||||||
|
"noPermissionsCooldown": "Du har inte behörighet att använda denna {0} eftersom du har en nedkylningsperiod!",
|
||||||
|
"noPermissionsBlacklist": "Du har inte behörighet att använda denna {0} eftersom du är svartlistad!",
|
||||||
|
"noPermissionsLimitGlobal": "Du har inte behörighet att skapa ett ärende eftersom servern har nått maxgränsen för ärenden!",
|
||||||
|
"noPermissionsLimitGlobalUser": "Du har inte behörighet att skapa ett ärende eftersom du har nått maxgränsen för ärenden!",
|
||||||
|
"noPermissionsLimitOption": "Du har inte behörighet att skapa ett ärende eftersom servern har nått maxgränsen för detta alternativ!",
|
||||||
|
"noPermissionsLimitOptionUser": "Du har inte behörighet att skapa ett ärende eftersom du har nått maxgränsen för detta alternativ!",
|
||||||
|
"unknownTicket": "Försök med detta kommando igen i ett giltigt ärende!",
|
||||||
|
"deprecatedTicket": "Den nuvarande kanalen är inte ett giltigt ärende! Det kan ha varit ett ärende från en äldre version av Open Ticket!",
|
||||||
|
"notInGuild": "Denna {0} fungerar inte i DM! Försök igen på en server!",
|
||||||
|
"channelRename": "På grund av Discords hastighetsbegränsningar är det för närvarande omöjligt för botten att döpa om kanalen. Kanalen kommer automatiskt att döpas om inom 10 minuter om botten inte startas om.",
|
||||||
|
"channelRenameSource": "Källan till detta fel är: {0}",
|
||||||
|
"busy": "Kan inte använda denna {0}!\nÄrendet behandlas för närvarande av botten.\n\nFörsök igen om några sekunder!"
|
||||||
|
},
|
||||||
|
"optionInvalidReasons": {
|
||||||
|
"stringRegex": "Värdet matchar inte mönstret!",
|
||||||
|
"stringMinLength": "Värdet ska vara minst {0} tecken!",
|
||||||
|
"stringMaxLength": "Värdet ska vara högst {0} tecken!",
|
||||||
|
"numberInvalid": "Ogiltigt tal!",
|
||||||
|
"numberMin": "Talet ska vara minst {0}!",
|
||||||
|
"numberMax": "Talet ska vara högst {0}!",
|
||||||
|
"numberDecimal": "Talet kan inte vara ett decimaltal!",
|
||||||
|
"numberNegative": "Talet kan inte vara negativt!",
|
||||||
|
"numberPositive": "Talet kan inte vara positivt!",
|
||||||
|
"numberZero": "Talet kan inte vara noll!",
|
||||||
|
"channelNotFound": "Kan inte hitta kanalen!",
|
||||||
|
"userNotFound": "Kan inte hitta användaren!",
|
||||||
|
"roleNotFound": "Kan inte hitta rollen!",
|
||||||
|
"memberNotFound": "Kan inte hitta användaren!",
|
||||||
|
"mentionableNotFound": "Kan inte hitta användaren eller rollen!",
|
||||||
|
"channelType": "Ogiltig kanaltyp!",
|
||||||
|
"notInGuild": "Detta alternativ kräver att du är på en server!"
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"developer": "Du måste vara utvecklaren av botten.",
|
||||||
|
"owner": "Du måste vara serverägaren.",
|
||||||
|
"admin": "Du måste vara serveradministratör.",
|
||||||
|
"moderator": "Du måste vara moderator.",
|
||||||
|
"support": "Du måste vara en del av supportteamet.",
|
||||||
|
"member": "Du måste vara medlem.",
|
||||||
|
"discord-administrator": "Du måste ha `ADMINISTRATOR`-behörigheten."
|
||||||
|
},
|
||||||
|
"actionInvalid": {
|
||||||
|
"close": "Ärendet är redan stängt!",
|
||||||
|
"reopen": "Ärendet är inte stängt ännu!",
|
||||||
|
"claim": "Ärendet är redan taget!",
|
||||||
|
"unclaim": "Ärendet är inte taget ännu!",
|
||||||
|
"pin": "Ärendet är redan fäst!",
|
||||||
|
"unpin": "Ärendet är inte fäst ännu!",
|
||||||
|
"add": "Denna användare har redan tillgång till ärendet!",
|
||||||
|
"remove": "Kan inte ta bort denna användare från ärendet!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"params": {
|
||||||
|
"uppercase": {
|
||||||
|
"ticket": "Ärende",
|
||||||
|
"tickets": "Ärenden",
|
||||||
|
"reason": "Orsak",
|
||||||
|
"creator": "Skapare",
|
||||||
|
"remaining": "Tid Kvar",
|
||||||
|
"added": "Tillagd",
|
||||||
|
"removed": "Borttagen",
|
||||||
|
"filter": "Filter",
|
||||||
|
"claimedBy": "Taget Av {0}",
|
||||||
|
"method": "Metod",
|
||||||
|
"type": "Typ",
|
||||||
|
"blacklisted": "Svartlistad",
|
||||||
|
"panel": "Panel",
|
||||||
|
"command": "Kommando",
|
||||||
|
"system": "System",
|
||||||
|
"true": "Sant",
|
||||||
|
"false": "Falskt",
|
||||||
|
"syntax": "Syntax",
|
||||||
|
"originalName": "Ursprungligt Namn",
|
||||||
|
"newName": "Nytt Namn",
|
||||||
|
"until": "Till",
|
||||||
|
"validOptions": "Giltiga Alternativ",
|
||||||
|
"validPanels": "Giltiga Paneler",
|
||||||
|
"autoclose": "Autostängning",
|
||||||
|
"autodelete": "Autoradering",
|
||||||
|
"startupDate": "Startdatum",
|
||||||
|
"version": "Version",
|
||||||
|
"name": "Namn",
|
||||||
|
"role": "Roll",
|
||||||
|
"status": "Status",
|
||||||
|
"claimed": "Taget",
|
||||||
|
"pinned": "Fäst",
|
||||||
|
"creationDate": "Skapelsedatum"
|
||||||
|
},
|
||||||
|
"lowercase": {
|
||||||
|
"text": "text",
|
||||||
|
"html": "html",
|
||||||
|
"command": "kommando",
|
||||||
|
"modal": "modal",
|
||||||
|
"button": "knapp",
|
||||||
|
"dropdown": "rullgardinsmeny",
|
||||||
|
"method": "metod"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commands": {
|
||||||
|
"reason": "Ange en valfri orsak som kommer att vara synlig i loggarna.",
|
||||||
|
"help": "Få en lista över alla tillgängliga kommandon.",
|
||||||
|
"panel": "Skapa ett meddelande med en rullgardinsmeny eller knappar (för ärendeskapande).",
|
||||||
|
"panelId": "Identifieraren för panelen du vill skapa.",
|
||||||
|
"panelAutoUpdate": "Vill du att denna panel ska uppdateras automatiskt när den redigeras?",
|
||||||
|
"ticket": "Skapa ett ärende direkt.",
|
||||||
|
"ticketId": "Identifieraren för ärendet du vill skapa.",
|
||||||
|
"close": "Stäng ett ärende.",
|
||||||
|
"delete": "Radera ett ärende.",
|
||||||
|
"deleteNoTranscript": "Radera detta ärende utan att skapa en utskrift.",
|
||||||
|
"reopen": "Återöppna ett ärende.",
|
||||||
|
"claim": "Ta ett ärende.",
|
||||||
|
"claimUser": "Ta detta ärende för en annan användare istället för dig själv.",
|
||||||
|
"unclaim": "Frigör ett ärende.",
|
||||||
|
"pin": "Fäst ett ärende.",
|
||||||
|
"unpin": "Lossa ett ärende.",
|
||||||
|
"move": "Flytta ett ärende.",
|
||||||
|
"moveId": "Identifieraren för alternativet du vill flytta till.",
|
||||||
|
"rename": "Döp om ett ärende.",
|
||||||
|
"renameName": "Det nya namnet på detta ärende.",
|
||||||
|
"add": "Lägg till en användare i ett ärende.",
|
||||||
|
"addUser": "Användaren som ska läggas till.",
|
||||||
|
"remove": "Ta bort en användare från ett ärende.",
|
||||||
|
"removeUser": "Användaren som ska tas bort.",
|
||||||
|
"blacklist": "Hantera svartlistan för ärenden.",
|
||||||
|
"blacklistView": "Visa en lista över nuvarande svartlista.",
|
||||||
|
"blacklistAdd": "Lägg till en användare på svartlistan.",
|
||||||
|
"blacklistRemove": "Ta bort en användare från svartlistan.",
|
||||||
|
"blacklistGet": "Hämta detaljer om en svartlistad användare.",
|
||||||
|
"blacklistGetUser": "Användaren att hämta detaljer från.",
|
||||||
|
"stats": "Visa statistik från botten, en användare eller ett ärende.",
|
||||||
|
"statsReset": "Återställ all statistik för botten (och börja räkna från noll).",
|
||||||
|
"statsGlobal": "Visa global statistik.",
|
||||||
|
"statsUser": "Visa statistik från en användare på servern.",
|
||||||
|
"statsUserUser": "Användaren som ska visas.",
|
||||||
|
"statsTicket": "Visa statistik för ett ärende på servern.",
|
||||||
|
"statsTicketTicket": "Ärendet som ska visas.",
|
||||||
|
"clear": "Radera flera ärenden samtidigt.",
|
||||||
|
"clearFilter": "Filtret för att radera ärenden.",
|
||||||
|
"clearFilters": {
|
||||||
|
"all": "Alla",
|
||||||
|
"open": "Öppna",
|
||||||
|
"close": "Stängda",
|
||||||
|
"claim": "Tagna",
|
||||||
|
"unclaim": "Frigjorda",
|
||||||
|
"pin": "Fästa",
|
||||||
|
"unpin": "Lossade",
|
||||||
|
"autoclose": "Autostängda"
|
||||||
|
},
|
||||||
|
"autoclose": "Hantera autostängning i ett ärende.",
|
||||||
|
"autocloseDisable": "Inaktivera autostängning i detta ärende.",
|
||||||
|
"autocloseEnable": "Aktivera autostängning i detta ärende.",
|
||||||
|
"autocloseEnableTime": "Antal timmar detta ärende måste vara inaktivt innan det stängs.",
|
||||||
|
"autodelete": "Hantera autoradering i ett ärende.",
|
||||||
|
"autodeleteDisable": "Inaktivera autoradering i detta ärende.",
|
||||||
|
"autodeleteEnable": "Aktivera autoradering i detta ärende.",
|
||||||
|
"autodeleteEnableTime": "Antal dagar detta ärende måste vara inaktivt innan det raderas."
|
||||||
|
},
|
||||||
|
"helpMenu": {
|
||||||
|
"help": "Få en lista över alla tillgängliga kommandon.",
|
||||||
|
"ticket": "Skapa ett ärende direkt.",
|
||||||
|
"close": "Stäng ett ärende, detta inaktiverar skrivning i kanalen.",
|
||||||
|
"delete": "Radera ett ärende, detta skapar en utskrift när det är aktiverat.",
|
||||||
|
"reopen": "Återöppna ett ärende, detta aktiverar skrivning i kanalen igen.",
|
||||||
|
"pin": "Fäst ett ärende. Detta flyttar ärendet till toppen och lägger till en '📌' emoji i namnet.",
|
||||||
|
"unpin": "Lossa ett ärende. Ärendet blir kvar på plats, men förlorar '📌' emojin.",
|
||||||
|
"move": "Flytta ett ärende. Detta ändrar typen på ärendet.",
|
||||||
|
"rename": "Döp om ett ärende. Detta ändrar kanalnamnet på ärendet.",
|
||||||
|
"claim": "Ta ett ärende. Detta låter ditt team veta att du hanterar ärendet.",
|
||||||
|
"unclaim": "Frigör ett ärende. Detta låter ditt team veta att ärendet är ledigt igen.",
|
||||||
|
"add": "Lägg till en användare i ett ärende. Detta ger användaren tillgång att läsa och skriva i ärendet.",
|
||||||
|
"remove": "Ta bort en användare från ett ärende. Detta tar bort användarens tillgång att läsa och skriva i ärendet.",
|
||||||
|
"panel": "Skapa ett meddelande med en rullgardinsmeny eller knappar (för ärendeskapande).",
|
||||||
|
"blacklistView": "Visa en lista över nuvarande svartlista.",
|
||||||
|
"blacklistAdd": "Lägg till en användare på svartlistan.",
|
||||||
|
"blacklistRemove": "Ta bort en användare från svartlistan.",
|
||||||
|
"blacklistGet": "Hämta detaljer om en svartlistad användare.",
|
||||||
|
"statsGlobal": "Visa global statistik.",
|
||||||
|
"statsTicket": "Visa statistik för ett ärende på servern.",
|
||||||
|
"statsUser": "Visa statistik från en användare på servern.",
|
||||||
|
"statsReset": "Återställ all statistik för botten (och börja räkna från noll).",
|
||||||
|
"autocloseDisable": "Inaktivera autostängning i detta ärende.",
|
||||||
|
"autocloseEnable": "Aktivera autostängning i detta ärende.",
|
||||||
|
"autodeleteDisable": "Inaktivera autoradering i detta ärende.",
|
||||||
|
"autodeleteEnable": "Aktivera autoradering i detta ärende."
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"scopes": {
|
||||||
|
"global": "Global Statistik",
|
||||||
|
"system": "Systemstatistik",
|
||||||
|
"user": "Användarstatistik",
|
||||||
|
"ticket": "Ärendestatistik",
|
||||||
|
"participants": "Deltagare"
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"ticketsCreated": "Ärenden Skapade",
|
||||||
|
"ticketsClosed": "Ärenden Stängda",
|
||||||
|
"ticketsDeleted": "Ärenden Raderade",
|
||||||
|
"ticketsReopened": "Ärenden Återöppnade",
|
||||||
|
"ticketsAutoclosed": "Ärenden Autostängda",
|
||||||
|
"ticketsClaimed": "Ärenden Tagna",
|
||||||
|
"ticketsPinned": "Ärenden Fästa",
|
||||||
|
"ticketsMoved": "Ärenden Flyttade",
|
||||||
|
"usersBlacklisted": "Användare Svartlistade",
|
||||||
|
"transcriptsCreated": "Utskrifter Skapade"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["modshd"],
|
"translators":["modshd"],
|
||||||
"lastedited":"13/11/2024",
|
"lastedited":"13/11/2024",
|
||||||
"language":"Thai",
|
"language":"Thai",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION": {
|
"_TRANSLATION": {
|
||||||
"otversion": "v4.0.0",
|
"otversion": "v4.0.1",
|
||||||
"translators": ["palestinian"],
|
"translators": ["palestinian"],
|
||||||
"lastedited": "26/11/2024",
|
"lastedited": "26/11/2024",
|
||||||
"language": "Turkish",
|
"language": "Turkish",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.0.1",
|
||||||
"translators":["Anderskiy"],
|
"translators":["Anderskiy"],
|
||||||
"lastedited":"31/08/2024",
|
"lastedited":"31/08/2024",
|
||||||
"language":"Ukrainian",
|
"language":"Ukrainian",
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "open-ticket",
|
"name": "open-ticket",
|
||||||
"author": "DJdj Development",
|
"author": "DJdj Development",
|
||||||
"version": "4.0.0",
|
"version": "4.0.1",
|
||||||
"description": "The most advanced open-source discord ticket bot with HTML transcripts, plugins, questions, claiming, pinning & more! Using discord.js v14 & JSON database! ",
|
"description": "The most advanced open-source discord ticket bot with HTML transcripts, plugins, questions, claiming, pinning & more! Using discord.js v14 & JSON database! ",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"ticket-bot",
|
"ticket-bot",
|
||||||
|
|||||||
+16
-14
@@ -26,20 +26,22 @@ export const registerActions = async () => {
|
|||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-claimed",user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-claimed",user.id,1,"increase")
|
||||||
|
|
||||||
//update category
|
//update category
|
||||||
const rawClaimCategory = ticket.option.get("opendiscord:channel-categories-claimed").value.find((c) => c.user == user.id)
|
if (params.allowCategoryChange){
|
||||||
const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null
|
const rawClaimCategory = ticket.option.get("opendiscord:channel-categories-claimed").value.find((c) => c.user == user.id)
|
||||||
if (claimCategory){
|
const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null
|
||||||
try {
|
if (claimCategory){
|
||||||
channel.setParent(claimCategory,{lockPermissions:false})
|
try {
|
||||||
ticket.get("opendiscord:category-mode").value = "claimed"
|
channel.setParent(claimCategory,{lockPermissions:false})
|
||||||
ticket.get("opendiscord:category").value = claimCategory
|
ticket.get("opendiscord:category-mode").value = "claimed"
|
||||||
}catch(e){
|
ticket.get("opendiscord:category").value = claimCategory
|
||||||
opendiscord.log("Unable to move ticket to 'claimed category'!","error",[
|
}catch(e){
|
||||||
{key:"channel",value:"#"+channel.name},
|
opendiscord.log("Unable to move ticket to 'claimed category'!","error",[
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"categoryid",value:claimCategory}
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
])
|
{key:"categoryid",value:claimCategory}
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
])
|
||||||
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+15
-13
@@ -28,19 +28,21 @@ export const registerActions = async () => {
|
|||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-closed",user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-closed",user.id,1,"increase")
|
||||||
|
|
||||||
//update category
|
//update category
|
||||||
const closeCategory = ticket.option.get("opendiscord:channel-category-closed").value
|
if (params.allowCategoryChange){
|
||||||
if (closeCategory !== ""){
|
const closeCategory = ticket.option.get("opendiscord:channel-category-closed").value
|
||||||
try {
|
if (closeCategory !== ""){
|
||||||
channel.setParent(closeCategory,{lockPermissions:false})
|
try {
|
||||||
ticket.get("opendiscord:category-mode").value = "closed"
|
channel.setParent(closeCategory,{lockPermissions:false})
|
||||||
ticket.get("opendiscord:category").value = closeCategory
|
ticket.get("opendiscord:category-mode").value = "closed"
|
||||||
}catch(e){
|
ticket.get("opendiscord:category").value = closeCategory
|
||||||
opendiscord.log("Unable to move ticket to 'closed category'!","error",[
|
}catch(e){
|
||||||
{key:"channel",value:"#"+channel.name},
|
opendiscord.log("Unable to move ticket to 'closed category'!","error",[
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"categoryid",value:closeCategory}
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
])
|
{key:"categoryid",value:closeCategory}
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
])
|
||||||
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+45
-43
@@ -28,53 +28,55 @@ export const registerActions = async () => {
|
|||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-reopened",user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-reopened",user.id,1,"increase")
|
||||||
|
|
||||||
//update category
|
//update category
|
||||||
const channelCategory = ticket.option.get("opendiscord:channel-category").value
|
if (params.allowCategoryChange){
|
||||||
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
|
const channelCategory = ticket.option.get("opendiscord:channel-category").value
|
||||||
if (channelCategory !== ""){
|
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
|
||||||
//category enabled
|
if (channelCategory !== ""){
|
||||||
try {
|
//category enabled
|
||||||
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
try {
|
||||||
if (!normalCategory){
|
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
||||||
//default category was not found
|
if (!normalCategory){
|
||||||
opendiscord.log("Ticket Reopening Error: Unable to find category! #1","error",[
|
//default category was not found
|
||||||
{key:"categoryid",value:channelCategory},
|
opendiscord.log("Ticket Reopening Error: Unable to find category! #1","error",[
|
||||||
{key:"backup",value:"false"}
|
{key:"categoryid",value:channelCategory},
|
||||||
])
|
{key:"backup",value:"false"}
|
||||||
}else{
|
])
|
||||||
//default category was found
|
|
||||||
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
|
|
||||||
//use backup category
|
|
||||||
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
|
||||||
if (!backupCategory){
|
|
||||||
//default category was not found
|
|
||||||
opendiscord.log("Ticket Reopening Error: Unable to find category! #2","error",[
|
|
||||||
{key:"categoryid",value:channelBackupCategory},
|
|
||||||
{key:"backup",value:"true"}
|
|
||||||
])
|
|
||||||
}else{
|
|
||||||
//use backup category
|
|
||||||
channel.setParent(backupCategory,{lockPermissions:false})
|
|
||||||
ticket.get("opendiscord:category-mode").value = "backup"
|
|
||||||
ticket.get("opendiscord:category").value = backupCategory.id
|
|
||||||
}
|
|
||||||
}else{
|
}else{
|
||||||
//use default category
|
//default category was found
|
||||||
channel.setParent(normalCategory,{lockPermissions:false})
|
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
|
||||||
ticket.get("opendiscord:category-mode").value = "normal"
|
//use backup category
|
||||||
ticket.get("opendiscord:category").value = normalCategory.id
|
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
||||||
|
if (!backupCategory){
|
||||||
|
//default category was not found
|
||||||
|
opendiscord.log("Ticket Reopening Error: Unable to find category! #2","error",[
|
||||||
|
{key:"categoryid",value:channelBackupCategory},
|
||||||
|
{key:"backup",value:"true"}
|
||||||
|
])
|
||||||
|
}else{
|
||||||
|
//use backup category
|
||||||
|
channel.setParent(backupCategory,{lockPermissions:false})
|
||||||
|
ticket.get("opendiscord:category-mode").value = "backup"
|
||||||
|
ticket.get("opendiscord:category").value = backupCategory.id
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
//use default category
|
||||||
|
channel.setParent(normalCategory,{lockPermissions:false})
|
||||||
|
ticket.get("opendiscord:category-mode").value = "normal"
|
||||||
|
ticket.get("opendiscord:category").value = normalCategory.id
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}catch(e){
|
||||||
|
opendiscord.log("Unable to move ticket to 'reopened category'!","error",[
|
||||||
|
{key:"channel",value:"#"+channel.name},
|
||||||
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
|
])
|
||||||
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}catch(e){
|
}else{
|
||||||
opendiscord.log("Unable to move ticket to 'reopened category'!","error",[
|
channel.setParent(null,{lockPermissions:false})
|
||||||
{key:"channel",value:"#"+channel.name},
|
ticket.get("opendiscord:category-mode").value = null
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
ticket.get("opendiscord:category").value = null
|
||||||
])
|
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
}
|
||||||
}else{
|
|
||||||
channel.setParent(null,{lockPermissions:false})
|
|
||||||
ticket.get("opendiscord:category-mode").value = null
|
|
||||||
ticket.get("opendiscord:category").value = null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//update permissions
|
//update permissions
|
||||||
|
|||||||
@@ -22,54 +22,56 @@ export const registerActions = async () => {
|
|||||||
ticket.get("opendiscord:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update category
|
//update category
|
||||||
const channelCategory = ticket.option.get("opendiscord:channel-category").value
|
if (params.allowCategoryChange){
|
||||||
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
|
const channelCategory = ticket.option.get("opendiscord:channel-category").value
|
||||||
if (channelCategory !== ""){
|
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
|
||||||
//category enabled
|
if (channelCategory !== ""){
|
||||||
try {
|
//category enabled
|
||||||
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
try {
|
||||||
if (!normalCategory){
|
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
||||||
//default category was not found
|
if (!normalCategory){
|
||||||
opendiscord.log("Ticket Unclaiming Error: Unable to find category! #1","error",[
|
//default category was not found
|
||||||
{key:"categoryid",value:channelCategory},
|
opendiscord.log("Ticket Unclaiming Error: Unable to find category! #1","error",[
|
||||||
{key:"backup",value:"false"}
|
{key:"categoryid",value:channelCategory},
|
||||||
])
|
{key:"backup",value:"false"}
|
||||||
}else{
|
])
|
||||||
//default category was found
|
|
||||||
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
|
|
||||||
//use backup category
|
|
||||||
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
|
||||||
if (!backupCategory){
|
|
||||||
//default category was not found
|
|
||||||
opendiscord.log("Ticket Unclaiming Error: Unable to find category! #2","error",[
|
|
||||||
{key:"categoryid",value:channelBackupCategory},
|
|
||||||
{key:"backup",value:"true"}
|
|
||||||
])
|
|
||||||
}else{
|
|
||||||
//use backup category
|
|
||||||
channel.setParent(backupCategory,{lockPermissions:false})
|
|
||||||
ticket.get("opendiscord:category-mode").value = "backup"
|
|
||||||
ticket.get("opendiscord:category").value = backupCategory.id
|
|
||||||
}
|
|
||||||
}else{
|
}else{
|
||||||
//use default category
|
//default category was found
|
||||||
channel.setParent(normalCategory,{lockPermissions:false})
|
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
|
||||||
ticket.get("opendiscord:category-mode").value = "normal"
|
//use backup category
|
||||||
ticket.get("opendiscord:category").value = normalCategory.id
|
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
||||||
|
if (!backupCategory){
|
||||||
|
//default category was not found
|
||||||
|
opendiscord.log("Ticket Unclaiming Error: Unable to find category! #2","error",[
|
||||||
|
{key:"categoryid",value:channelBackupCategory},
|
||||||
|
{key:"backup",value:"true"}
|
||||||
|
])
|
||||||
|
}else{
|
||||||
|
//use backup category
|
||||||
|
channel.setParent(backupCategory,{lockPermissions:false})
|
||||||
|
ticket.get("opendiscord:category-mode").value = "backup"
|
||||||
|
ticket.get("opendiscord:category").value = backupCategory.id
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
//use default category
|
||||||
|
channel.setParent(normalCategory,{lockPermissions:false})
|
||||||
|
ticket.get("opendiscord:category-mode").value = "normal"
|
||||||
|
ticket.get("opendiscord:category").value = normalCategory.id
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}catch(e){
|
||||||
|
opendiscord.log("Unable to move ticket to 'unclaimed category'!","error",[
|
||||||
|
{key:"channel",value:"#"+channel.name},
|
||||||
|
{key:"channelid",value:channel.id,hidden:true}
|
||||||
|
])
|
||||||
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
}catch(e){
|
channel.setParent(null,{lockPermissions:false})
|
||||||
opendiscord.log("Unable to move ticket to 'unclaimed category'!","error",[
|
ticket.get("opendiscord:category-mode").value = null
|
||||||
{key:"channel",value:"#"+channel.name},
|
ticket.get("opendiscord:category").value = null
|
||||||
{key:"channelid",value:channel.id,hidden:true}
|
|
||||||
])
|
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
}
|
||||||
}else{
|
|
||||||
channel.setParent(null,{lockPermissions:false})
|
|
||||||
ticket.get("opendiscord:category-mode").value = null
|
|
||||||
ticket.get("opendiscord:category").value = null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
|
|||||||
@@ -64,9 +64,12 @@ export const registerCommandResponders = async () => {
|
|||||||
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:panel-ready").build(source,{guild,channel,user,panel}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:panel-ready").build(source,{guild,channel,user,panel}))
|
||||||
const panelMessage = await instance.channel.send((await opendiscord.builders.messages.getSafe("opendiscord:panel").build(source,{guild,channel,user,panel})).message)
|
const panelMessage = await instance.channel.send((await opendiscord.builders.messages.getSafe("opendiscord:panel").build(source,{guild,channel,user,panel})).message)
|
||||||
|
|
||||||
//add panel to database on auto-update
|
//add panel to database (this way, the bot knows where all panels are located)
|
||||||
|
const globalDatabase = opendiscord.databases.get("opendiscord:global")
|
||||||
|
await globalDatabase.set("opendiscord:panel-message",panelMessage.channel.id+"_"+panelMessage.id,panel.id.value)
|
||||||
|
|
||||||
|
//add panel to database for auto-update
|
||||||
if (instance.options.getBoolean("auto-update",false)){
|
if (instance.options.getBoolean("auto-update",false)){
|
||||||
const globalDatabase = opendiscord.databases.get("opendiscord:global")
|
|
||||||
await globalDatabase.set("opendiscord:panel-update",panelMessage.channel.id+"_"+panelMessage.id,panel.id.value)
|
await globalDatabase.set("opendiscord:panel-update",panelMessage.channel.id+"_"+panelMessage.id,panel.id.value)
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -205,6 +205,14 @@ export const registerDropdownResponders = async () => {
|
|||||||
}
|
}
|
||||||
if (generalConfig.data.system.replyOnTicketCreation) await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:ticket-created").build("panel-dropdown",{guild,channel:res.channel,user,ticket:res.ticket}))
|
if (generalConfig.data.system.replyOnTicketCreation) await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:ticket-created").build("panel-dropdown",{guild,channel:res.channel,user,ticket:res.ticket}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//update panel after dropdown usage (reset panel choice)
|
||||||
|
const globalDatabase = opendiscord.databases.get("opendiscord:global")
|
||||||
|
const rawPanelId = await globalDatabase.get("opendiscord:panel-message",instance.message.channel.id+"_"+instance.message.id)
|
||||||
|
if (rawPanelId){
|
||||||
|
const panel = opendiscord.panels.get(rawPanelId)
|
||||||
|
if (panel) await instance.message.edit((await opendiscord.builders.messages.getSafe("opendiscord:panel").build("auto-update",{guild,channel,user,panel})).message)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ export interface ODActionManagerIds_Default {
|
|||||||
},
|
},
|
||||||
"opendiscord:close-ticket":{
|
"opendiscord:close-ticket":{
|
||||||
source:"slash"|"text"|"ticket-message"|"reopen-message"|"autoclose"|"other",
|
source:"slash"|"text"|"ticket-message"|"reopen-message"|"autoclose"|"other",
|
||||||
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean},
|
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean,allowCategoryChange?:boolean},
|
||||||
result:{},
|
result:{},
|
||||||
workers:"opendiscord:close-ticket"|"opendiscord:discord-logs"|"opendiscord:logs"
|
workers:"opendiscord:close-ticket"|"opendiscord:discord-logs"|"opendiscord:logs"
|
||||||
},
|
},
|
||||||
@@ -48,19 +48,19 @@ export interface ODActionManagerIds_Default {
|
|||||||
},
|
},
|
||||||
"opendiscord:reopen-ticket":{
|
"opendiscord:reopen-ticket":{
|
||||||
source:"slash"|"text"|"ticket-message"|"close-message"|"autoclose-message"|"other",
|
source:"slash"|"text"|"ticket-message"|"close-message"|"autoclose-message"|"other",
|
||||||
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean},
|
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean,allowCategoryChange?:boolean},
|
||||||
result:{},
|
result:{},
|
||||||
workers:"opendiscord:reopen-ticket"|"opendiscord:discord-logs"|"opendiscord:logs"
|
workers:"opendiscord:reopen-ticket"|"opendiscord:discord-logs"|"opendiscord:logs"
|
||||||
},
|
},
|
||||||
"opendiscord:claim-ticket":{
|
"opendiscord:claim-ticket":{
|
||||||
source:"slash"|"text"|"ticket-message"|"unclaim-message"|"other",
|
source:"slash"|"text"|"ticket-message"|"unclaim-message"|"other",
|
||||||
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean},
|
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean,allowCategoryChange?:boolean},
|
||||||
result:{},
|
result:{},
|
||||||
workers:"opendiscord:claim-ticket"|"opendiscord:discord-logs"|"opendiscord:logs"
|
workers:"opendiscord:claim-ticket"|"opendiscord:discord-logs"|"opendiscord:logs"
|
||||||
},
|
},
|
||||||
"opendiscord:unclaim-ticket":{
|
"opendiscord:unclaim-ticket":{
|
||||||
source:"slash"|"text"|"ticket-message"|"claim-message"|"other",
|
source:"slash"|"text"|"ticket-message"|"claim-message"|"other",
|
||||||
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean},
|
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean,allowCategoryChange?:boolean},
|
||||||
result:{},
|
result:{},
|
||||||
workers:"opendiscord:unclaim-ticket"|"opendiscord:discord-logs"|"opendiscord:logs"
|
workers:"opendiscord:unclaim-ticket"|"opendiscord:discord-logs"|"opendiscord:logs"
|
||||||
},
|
},
|
||||||
|
|||||||
+141
-122
@@ -325,6 +325,31 @@ export interface ODJsonConfig_DefaultOptionPingSettingsType {
|
|||||||
custom:string[]
|
custom:string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**## ODJsonConfig_DefaultOptionTicketChannelType `interface`
|
||||||
|
* All settings related to the ticket channel itself in a ticket option.
|
||||||
|
*/
|
||||||
|
export interface ODJsonConfig_DefaultOptionTicketChannelType {
|
||||||
|
/**The prefix used in the name of this ticket channel. */
|
||||||
|
prefix:string,
|
||||||
|
/**The type of suffix used in the name of this ticket channel. */
|
||||||
|
suffix:"user-name"|"user-id"|"random-number"|"random-hex"|"counter-dynamic"|"counter-fixed",
|
||||||
|
/**An optional discord category id to create this ticket in. */
|
||||||
|
category:string,
|
||||||
|
/**An optional discord category id to move this ticket to when closed. */
|
||||||
|
closedCategory:string,
|
||||||
|
/**An optional discord category id to create this ticket in when the primary one is full (max. 50 tickets). */
|
||||||
|
backupCategory:string,
|
||||||
|
/**A list of discord category ids to move this ticket to when claimed by a specific user. */
|
||||||
|
claimedCategory:{
|
||||||
|
/**The user which claimed the ticket. */
|
||||||
|
user:string,
|
||||||
|
/**The category to move the ticket to when claimed by this user. */
|
||||||
|
category:string
|
||||||
|
}[],
|
||||||
|
/**The channel description/topic shown at the top of the channel in discord. */
|
||||||
|
description:string
|
||||||
|
}
|
||||||
|
|
||||||
/**## ODJsonConfig_DefaultOptionTicketType `interface`
|
/**## ODJsonConfig_DefaultOptionTicketType `interface`
|
||||||
* This interface is an object which has all ticket properties for options in the `options.json` config!
|
* This interface is an object which has all ticket properties for options in the `options.json` config!
|
||||||
*/
|
*/
|
||||||
@@ -340,27 +365,7 @@ export interface ODJsonConfig_DefaultOptionTicketType extends ODJsonConfig_Defau
|
|||||||
/**A list of valid question ids from the `questions.json` config. */
|
/**A list of valid question ids from the `questions.json` config. */
|
||||||
questions:string[],
|
questions:string[],
|
||||||
/**All settings related to the ticket channel itself. */
|
/**All settings related to the ticket channel itself. */
|
||||||
channel:{
|
channel:ODJsonConfig_DefaultOptionTicketChannelType,
|
||||||
/**The prefix used in the name of this ticket channel. */
|
|
||||||
prefix:string,
|
|
||||||
/**The type of suffix used in the name of this ticket channel. */
|
|
||||||
suffix:"user-name"|"user-id"|"random-number"|"random-hex"|"counter-dynamic"|"counter-fixed",
|
|
||||||
/**An optional discord category id to create this ticket in. */
|
|
||||||
category:string,
|
|
||||||
/**An optional discord category id to move this ticket to when closed. */
|
|
||||||
closedCategory:string,
|
|
||||||
/**An optional discord category id to create this ticket in when the primary one is full (max. 50 tickets). */
|
|
||||||
backupCategory:string,
|
|
||||||
/**A list of discord category ids to move this ticket to when claimed by a specific user. */
|
|
||||||
claimedCategory:{
|
|
||||||
/**The user which claimed the ticket. */
|
|
||||||
user:string,
|
|
||||||
/**The category to move the ticket to when claimed by this user. */
|
|
||||||
category:string
|
|
||||||
}[],
|
|
||||||
/**The channel description/topic shown at the top of the channel in discord. */
|
|
||||||
description:string
|
|
||||||
},
|
|
||||||
/**All settings related to the message sent in DM to the creator when the ticket is created. */
|
/**All settings related to the message sent in DM to the creator when the ticket is created. */
|
||||||
dmMessage:{
|
dmMessage:{
|
||||||
/**Enable this message. */
|
/**Enable this message. */
|
||||||
@@ -495,6 +500,30 @@ export interface ODJsonConfig_DefaultPanelEmbedSettingsType {
|
|||||||
timestamp:boolean
|
timestamp:boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**## ODJsonConfig_DefaultPanelSettingsType `interface`
|
||||||
|
* This interface is a collection of additional settings for extra customisation in a panel.
|
||||||
|
*/
|
||||||
|
export interface ODJsonConfig_DefaultPanelSettingsType {
|
||||||
|
/**The placeholder used in the dropdown when enabled. */
|
||||||
|
dropdownPlaceholder:string,
|
||||||
|
|
||||||
|
/**Enable a max tickets warning in the text contents. */
|
||||||
|
enableMaxTicketsWarningInText:boolean,
|
||||||
|
/**Enable a max tickets warning in the embed. */
|
||||||
|
enableMaxTicketsWarningInEmbed:boolean,
|
||||||
|
|
||||||
|
/**The layout/complexity of the describe options feature. */
|
||||||
|
describeOptionsLayout:"simple"|"normal"|"detailed",
|
||||||
|
/**A custom title for the describe options feature. */
|
||||||
|
describeOptionsCustomTitle:string,
|
||||||
|
/**Describe the options in the text contents. */
|
||||||
|
describeOptionsInText:boolean,
|
||||||
|
/**Describe the options in the embed fields. */
|
||||||
|
describeOptionsInEmbedFields:boolean,
|
||||||
|
/**Describe the options in the embed description. */
|
||||||
|
describeOptionsInEmbedDescription:boolean
|
||||||
|
}
|
||||||
|
|
||||||
/**## ODJsonConfig_DefaultPanelType `interface`
|
/**## ODJsonConfig_DefaultPanelType `interface`
|
||||||
* This interface is an object which has all properties for panels in the `panels.json` config!
|
* This interface is an object which has all properties for panels in the `panels.json` config!
|
||||||
*/
|
*/
|
||||||
@@ -512,26 +541,8 @@ export interface ODJsonConfig_DefaultPanelType {
|
|||||||
text:string,
|
text:string,
|
||||||
/**The embed of this panel. */
|
/**The embed of this panel. */
|
||||||
embed:ODJsonConfig_DefaultPanelEmbedSettingsType,
|
embed:ODJsonConfig_DefaultPanelEmbedSettingsType,
|
||||||
settings:{
|
/**A collection of additional settings for extra customisation in a panel. */
|
||||||
/**The placeholder used in the dropdown when enabled. */
|
settings:ODJsonConfig_DefaultPanelSettingsType
|
||||||
dropdownPlaceholder:string,
|
|
||||||
|
|
||||||
/**Enable a max tickets warning in the text contents. */
|
|
||||||
enableMaxTicketsWarningInText:boolean,
|
|
||||||
/**Enable a max tickets warning in the embed. */
|
|
||||||
enableMaxTicketsWarningInEmbed:boolean,
|
|
||||||
|
|
||||||
/**The layout/complexity of the describe options feature. */
|
|
||||||
describeOptionsLayout:"simple"|"normal"|"detailed",
|
|
||||||
/**A custom title for the describe options feature. */
|
|
||||||
describeOptionsCustomTitle:string,
|
|
||||||
/**Describe the options in the text contents. */
|
|
||||||
describeOptionsInText:boolean,
|
|
||||||
/**Describe the options in the embed fields. */
|
|
||||||
describeOptionsInEmbedFields:boolean,
|
|
||||||
/**Describe the options in the embed description. */
|
|
||||||
describeOptionsInEmbedDescription:boolean
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**## ODJsonConfig_DefaultPanels `default_class`
|
/**## ODJsonConfig_DefaultPanels `default_class`
|
||||||
@@ -544,6 +555,18 @@ export class ODJsonConfig_DefaultPanels extends ODJsonConfig {
|
|||||||
declare data: ODJsonConfig_DefaultPanelType[]
|
declare data: ODJsonConfig_DefaultPanelType[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**## ODJSonConfig_DefaultQuestionLengthSettings `interface`
|
||||||
|
* This interface is a collection of settings related to length validation in a question.
|
||||||
|
*/
|
||||||
|
export interface ODJSonConfig_DefaultQuestionLengthSettings {
|
||||||
|
/**Enable text length verification. */
|
||||||
|
enabled:boolean,
|
||||||
|
/**The minimum text input length. */
|
||||||
|
min:number,
|
||||||
|
/**The maximum text input length. */
|
||||||
|
max:number
|
||||||
|
}
|
||||||
|
|
||||||
/**## ODJsonConfig_DefaultShortQuestionType `interface`
|
/**## ODJsonConfig_DefaultShortQuestionType `interface`
|
||||||
* This interface is an object which has all properties for short questions in the `questions.json` config!
|
* This interface is an object which has all properties for short questions in the `questions.json` config!
|
||||||
*/
|
*/
|
||||||
@@ -559,15 +582,8 @@ export interface ODJsonConfig_DefaultShortQuestionType {
|
|||||||
required:boolean,
|
required:boolean,
|
||||||
/**A placeholder for the question. */
|
/**A placeholder for the question. */
|
||||||
placeholder:string,
|
placeholder:string,
|
||||||
/**Settings related to the length of the input. */
|
/**A collection of settings related to length validation in a question. */
|
||||||
length:{
|
length:ODJSonConfig_DefaultQuestionLengthSettings
|
||||||
/**Enable text length verification. */
|
|
||||||
enabled:boolean,
|
|
||||||
/**The minimum text input length. */
|
|
||||||
min:number,
|
|
||||||
/**The maximum text input length. */
|
|
||||||
max:number
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**## ODJsonConfig_DefaultParagraphQuestionType `interface`
|
/**## ODJsonConfig_DefaultParagraphQuestionType `interface`
|
||||||
@@ -585,15 +601,8 @@ export interface ODJsonConfig_DefaultParagraphQuestionType {
|
|||||||
required:boolean,
|
required:boolean,
|
||||||
/**A placeholder for the question. */
|
/**A placeholder for the question. */
|
||||||
placeholder:string,
|
placeholder:string,
|
||||||
/**Settings related to the length of the input. */
|
/**A collection of settings related to length validation in a question. */
|
||||||
length:{
|
length:ODJSonConfig_DefaultQuestionLengthSettings
|
||||||
/**Enable text length verification. */
|
|
||||||
enabled:boolean,
|
|
||||||
/**The minimum text input length. */
|
|
||||||
min:number,
|
|
||||||
/**The maximum text input length. */
|
|
||||||
max:number
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**## ODJsonConfig_DefaultQuestions `default_class`
|
/**## ODJsonConfig_DefaultQuestions `default_class`
|
||||||
@@ -609,6 +618,77 @@ export class ODJsonConfig_DefaultQuestions extends ODJsonConfig {
|
|||||||
)[]
|
)[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**## ODJsonConfig_DefaultTranscriptsTextLayout `interface`
|
||||||
|
* This interface contains the layout of the text transcripts.
|
||||||
|
*/
|
||||||
|
export interface ODJsonConfig_DefaultTranscriptsTextLayout {
|
||||||
|
/**The layout/complexity of the text transcripts. */
|
||||||
|
layout:"simple"|"normal"|"detailed",
|
||||||
|
/**Include stats in the transcript. */
|
||||||
|
includeStats:boolean,
|
||||||
|
/**Include user & message ids in the transcript. */
|
||||||
|
includeIds:boolean,
|
||||||
|
/**Include embeds in the transcript. */
|
||||||
|
includeEmbeds:boolean,
|
||||||
|
/**Include files in the transcript. */
|
||||||
|
includeFiles:boolean,
|
||||||
|
/**Include bot messages in the transcript. */
|
||||||
|
includeBotMessages:boolean,
|
||||||
|
|
||||||
|
/**How to name the transcript file? */
|
||||||
|
fileMode:"custom"|"channel-name"|"channel-id"|"user-name"|"user-id",
|
||||||
|
/**A custom name for the transcript file (when using `"custom"`) */
|
||||||
|
customFileName:string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**## ODJsonConfig_DefaultTranscriptsHtmlLayout `interface`
|
||||||
|
* This interface contains the layout of the HTML transcripts.
|
||||||
|
*/
|
||||||
|
export interface ODJsonConfig_DefaultTranscriptsHtmlLayout {
|
||||||
|
/**Settings related to the background. */
|
||||||
|
background:{
|
||||||
|
/**Enable a custom background. */
|
||||||
|
enableCustomBackground:boolean,
|
||||||
|
/**The background (hex) color. */
|
||||||
|
backgroundColor:string,
|
||||||
|
/**The background image url. */
|
||||||
|
backgroundImage:string
|
||||||
|
},
|
||||||
|
/**Settings related to the header. */
|
||||||
|
header:{
|
||||||
|
/**Enable a custom header. */
|
||||||
|
enableCustomHeader:boolean,
|
||||||
|
/**The background (hex) color of the header. */
|
||||||
|
backgroundColor:string,
|
||||||
|
/**The deco color (horizontal line) of the header. */
|
||||||
|
decoColor:string,
|
||||||
|
/**The text color of the header. */
|
||||||
|
textColor:string
|
||||||
|
},
|
||||||
|
/**Settings related to the stats section. */
|
||||||
|
stats:{
|
||||||
|
/**Enable a custom stats section. */
|
||||||
|
enableCustomStats:false,
|
||||||
|
/**The background color of the stats section. */
|
||||||
|
backgroundColor:string,
|
||||||
|
/**The key text color of the stats section. */
|
||||||
|
keyTextColor:string,
|
||||||
|
/**The value text color of the stats section. */
|
||||||
|
valueTextColor:string,
|
||||||
|
/**The background color of the hide button in the stats section. */
|
||||||
|
hideBackgroundColor:string,
|
||||||
|
/**The text color of the hide button in the stats section. */
|
||||||
|
hideTextColor:string
|
||||||
|
},
|
||||||
|
/**Settings related to the favicon. */
|
||||||
|
favicon:{
|
||||||
|
/**Enable a custom background. */
|
||||||
|
enableCustomFavicon:boolean,
|
||||||
|
/**A link to the custom favicon. */
|
||||||
|
imageUrl:string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**## ODJsonConfig_DefaultTranscripts `default_class`
|
/**## ODJsonConfig_DefaultTranscripts `default_class`
|
||||||
* This is a special class that adds type definitions & typescript to the ODJsonConfig class.
|
* This is a special class that adds type definitions & typescript to the ODJsonConfig class.
|
||||||
* It doesn't add any extra features!
|
* It doesn't add any extra features!
|
||||||
@@ -648,69 +728,8 @@ export class ODJsonConfig_DefaultTranscripts extends ODJsonConfig {
|
|||||||
includeTicketStats:boolean
|
includeTicketStats:boolean
|
||||||
},
|
},
|
||||||
/**The layout of the text transcripts. */
|
/**The layout of the text transcripts. */
|
||||||
textTranscriptStyle:{
|
textTranscriptStyle:ODJsonConfig_DefaultTranscriptsTextLayout,
|
||||||
/**The layout/complexity of the text transcripts. */
|
|
||||||
layout:"simple"|"normal"|"detailed",
|
|
||||||
/**Include stats in the transcript. */
|
|
||||||
includeStats:boolean,
|
|
||||||
/**Include user & message ids in the transcript. */
|
|
||||||
includeIds:boolean,
|
|
||||||
/**Include embeds in the transcript. */
|
|
||||||
includeEmbeds:boolean,
|
|
||||||
/**Include files in the transcript. */
|
|
||||||
includeFiles:boolean,
|
|
||||||
/**Include bot messages in the transcript. */
|
|
||||||
includeBotMessages:boolean,
|
|
||||||
|
|
||||||
/**How to name the transcript file? */
|
|
||||||
fileMode:"custom"|"channel-name"|"channel-id"|"user-name"|"user-id",
|
|
||||||
/**A custom name for the transcript file (when using `"custom"`) */
|
|
||||||
customFileName:string
|
|
||||||
},
|
|
||||||
/**The layout of the HTML transcripts. */
|
/**The layout of the HTML transcripts. */
|
||||||
htmlTranscriptStyle:{
|
htmlTranscriptStyle:ODJsonConfig_DefaultTranscriptsHtmlLayout
|
||||||
/**Settings related to the background. */
|
|
||||||
background:{
|
|
||||||
/**Enable a custom background. */
|
|
||||||
enableCustomBackground:boolean,
|
|
||||||
/**The background (hex) color. */
|
|
||||||
backgroundColor:string,
|
|
||||||
/**The background image url. */
|
|
||||||
backgroundImage:string
|
|
||||||
},
|
|
||||||
/**Settings related to the header. */
|
|
||||||
header:{
|
|
||||||
/**Enable a custom header. */
|
|
||||||
enableCustomHeader:boolean,
|
|
||||||
/**The background (hex) color of the header. */
|
|
||||||
backgroundColor:string,
|
|
||||||
/**The deco color (horizontal line) of the header. */
|
|
||||||
decoColor:string,
|
|
||||||
/**The text color of the header. */
|
|
||||||
textColor:string
|
|
||||||
},
|
|
||||||
/**Settings related to the stats section. */
|
|
||||||
stats:{
|
|
||||||
/**Enable a custom stats section. */
|
|
||||||
enableCustomStats:false,
|
|
||||||
/**The background color of the stats section. */
|
|
||||||
backgroundColor:string,
|
|
||||||
/**The key text color of the stats section. */
|
|
||||||
keyTextColor:string,
|
|
||||||
/**The value text color of the stats section. */
|
|
||||||
valueTextColor:string,
|
|
||||||
/**The background color of the hide button in the stats section. */
|
|
||||||
hideBackgroundColor:string,
|
|
||||||
/**The text color of the hide button in the stats section. */
|
|
||||||
hideTextColor:string
|
|
||||||
},
|
|
||||||
/**Settings related to the favicon. */
|
|
||||||
favicon:{
|
|
||||||
/**Enable a custom background. */
|
|
||||||
enableCustomFavicon:boolean,
|
|
||||||
/**A link to the custom favicon. */
|
|
||||||
imageUrl:string
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -52,6 +52,7 @@ export class ODDatabaseManager_Default extends ODDatabaseManager {
|
|||||||
* It's used to generate typescript declarations for this class.
|
* It's used to generate typescript declarations for this class.
|
||||||
*/
|
*/
|
||||||
export interface ODFormattedJsonDatabaseIds_DefaultGlobal {
|
export interface ODFormattedJsonDatabaseIds_DefaultGlobal {
|
||||||
|
"opendiscord:panel-message":string,
|
||||||
"opendiscord:panel-update":string,
|
"opendiscord:panel-update":string,
|
||||||
"opendiscord:option-suffix-counter":number,
|
"opendiscord:option-suffix-counter":number,
|
||||||
"opendiscord:option-suffix-history":string[],
|
"opendiscord:option-suffix-history":string[],
|
||||||
|
|||||||
@@ -467,6 +467,10 @@ export interface ODLanguageManagerIds_Default {
|
|||||||
"opendiscord:hindi":ODLanguage,
|
"opendiscord:hindi":ODLanguage,
|
||||||
"opendiscord:lithuanian":ODLanguage,
|
"opendiscord:lithuanian":ODLanguage,
|
||||||
"opendiscord:polish":ODLanguage,
|
"opendiscord:polish":ODLanguage,
|
||||||
|
"opendiscord:latvian":ODLanguage,
|
||||||
|
"opendiscord:norwegian":ODLanguage,
|
||||||
|
"opendiscord:russian":ODLanguage,
|
||||||
|
"opendiscord:swedish":ODLanguage,
|
||||||
//ADD NEW LANGUAGES HERE!!!
|
//ADD NEW LANGUAGES HERE!!!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ export class ODMain {
|
|||||||
|
|
||||||
constructor(){
|
constructor(){
|
||||||
this.versions = new ODVersionManager_Default()
|
this.versions = new ODVersionManager_Default()
|
||||||
this.versions.add(ODVersion.fromString("opendiscord:version","v4.0.0"))
|
this.versions.add(ODVersion.fromString("opendiscord:version","v4.0.1"))
|
||||||
this.versions.add(ODVersion.fromString("opendiscord:api","v1.0.0"))
|
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:transcripts","v2.0.0"))
|
||||||
this.versions.add(ODVersion.fromString("opendiscord:livestatus","v2.0.0"))
|
this.versions.add(ODVersion.fromString("opendiscord:livestatus","v2.0.0"))
|
||||||
|
|||||||
+176
-90
@@ -54,11 +54,27 @@ export type ODDiscordIdType = "role"|"server"|"channel"|"category"|"user"|"membe
|
|||||||
*/
|
*/
|
||||||
export class ODId {
|
export class ODId {
|
||||||
/**The full value of this `ODId` as a `string`. */
|
/**The full value of this `ODId` as a `string`. */
|
||||||
value: string
|
#value: string
|
||||||
/**The source of the id (text before `:`). (e.g. `openticket` for all built-in ids) */
|
/**The full value of this `ODId` as a `string`. */
|
||||||
|
set value(id:string){
|
||||||
|
this._change(this.#value,id)
|
||||||
|
this.#value = id
|
||||||
|
}
|
||||||
|
get value(){
|
||||||
|
return this.#value
|
||||||
|
}
|
||||||
|
/**The source of the id (text before `:`). (e.g. `openticket` for all built-in ids)
|
||||||
|
*
|
||||||
|
* @deprecated Replaced with `getNamespace()` and will be removed in `v4.1.0`.
|
||||||
|
*/
|
||||||
source: string
|
source: string
|
||||||
/**The identifier of the id (text after `:`). */
|
/**The identifier of the id (text after `:`).
|
||||||
|
*
|
||||||
|
* @deprecated Replaced with `getIdentifier()` and will be removed in `v4.1.0`.
|
||||||
|
*/
|
||||||
identifier: string
|
identifier: string
|
||||||
|
/**The change listener for the parent `ODManager` of this `ODId`. */
|
||||||
|
#change: ((oldId:string,newId:string) => void)|null = null
|
||||||
|
|
||||||
constructor(id:ODValidId){
|
constructor(id:ODValidId){
|
||||||
if (typeof id != "string" && !(id instanceof ODId)) throw new ODSystemError("Invalid constructor parameter => id:ODValidId")
|
if (typeof id != "string" && !(id instanceof ODId)) throw new ODSystemError("Invalid constructor parameter => id:ODValidId")
|
||||||
@@ -74,10 +90,10 @@ export class ODId {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
if (result.length > 0) this.value = result.join("")
|
if (result.length > 0) this.#value = result.join("")
|
||||||
else throw new ODSystemError("invalid ID at 'new ODID(id: "+id+")'")
|
else throw new ODSystemError("invalid ID at 'new ODID(id: "+id+")'")
|
||||||
|
|
||||||
const splitted = this.value.split(":")
|
const splitted = this.#value.split(":")
|
||||||
if (splitted.length > 1){
|
if (splitted.length > 1){
|
||||||
this.source = splitted[0]
|
this.source = splitted[0]
|
||||||
splitted.shift()
|
splitted.shift()
|
||||||
@@ -88,7 +104,7 @@ export class ODId {
|
|||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
//id is ODId
|
//id is ODId
|
||||||
this.value = id.value
|
this.#value = id.#value
|
||||||
this.source = id.source
|
this.source = id.source
|
||||||
this.identifier = id.identifier
|
this.identifier = id.identifier
|
||||||
}
|
}
|
||||||
@@ -96,7 +112,36 @@ export class ODId {
|
|||||||
|
|
||||||
/**Returns a string representation of this id. (same as `this.value`) */
|
/**Returns a string representation of this id. (same as `this.value`) */
|
||||||
toString(){
|
toString(){
|
||||||
return this.value
|
return this.#value
|
||||||
|
}
|
||||||
|
/**The namespace of the id before `:`. (e.g. `openticket` for `openticket:autoclose-enabled`) */
|
||||||
|
getNamespace(){
|
||||||
|
const splitted = this.#value.split(":")
|
||||||
|
if (splitted.length > 1) return splitted[0]
|
||||||
|
else return ""
|
||||||
|
}
|
||||||
|
/**The identifier of the id after `:`. (e.g. `autoclose-enabled` for `openticket:autoclose-enabled`) */
|
||||||
|
getIdentifier(){
|
||||||
|
const splitted = this.#value.split(":")
|
||||||
|
if (splitted.length > 1){
|
||||||
|
splitted.shift()
|
||||||
|
return splitted.join(":")
|
||||||
|
}else return this.#value
|
||||||
|
}
|
||||||
|
/**Trigger an `onChange()` event in the parent `ODManager` of this class. */
|
||||||
|
protected _change(oldId:string,newId:string){
|
||||||
|
if (this.#change){
|
||||||
|
try{
|
||||||
|
this.#change(oldId,newId)
|
||||||
|
}catch(err){
|
||||||
|
process.emit("uncaughtException",err)
|
||||||
|
throw new ODSystemError("Failed to execute _change() callback!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/****(❌ SYSTEM ONLY!!)** Set the callback executed when a value inside this class changes. */
|
||||||
|
changed(callback:((oldId:string,newId:string) => void)|null){
|
||||||
|
this.#change = callback
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,6 +172,8 @@ export class ODManagerChangeHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**## ODManagerRedirectHelper `class`
|
/**## ODManagerRedirectHelper `class`
|
||||||
|
* @deprecated ### Will be removed in Open Ticket `v4.1.0`!
|
||||||
|
*
|
||||||
* This is Open Ticket ticket manager redirect helper.
|
* This is Open Ticket ticket manager redirect helper.
|
||||||
*
|
*
|
||||||
* It is used to redirect a source to another source when the id isn't found.
|
* It is used to redirect a source to another source when the id isn't found.
|
||||||
@@ -206,8 +253,8 @@ export class ODManager<DataType extends ODManagerData> extends ODManagerChangeHe
|
|||||||
#debug?: ODDebugger
|
#debug?: ODDebugger
|
||||||
/**The message to send when debugging this manager. */
|
/**The message to send when debugging this manager. */
|
||||||
#debugname?: string
|
#debugname?: string
|
||||||
/**An array storing all data classes ❌ **(don't edit unless really needed!)***/
|
/**The map storing all data classes in this manager. */
|
||||||
#data: DataType[] = []
|
#data: Map<string,DataType> = new Map()
|
||||||
/**An array storing all listeners when data is added. */
|
/**An array storing all listeners when data is added. */
|
||||||
#addListeners: ODManagerAddCallback<DataType>[] = []
|
#addListeners: ODManagerAddCallback<DataType>[] = []
|
||||||
/**An array storing all listeners when data has changed. */
|
/**An array storing all listeners when data has changed. */
|
||||||
@@ -223,7 +270,7 @@ export class ODManager<DataType extends ODManagerData> extends ODManagerChangeHe
|
|||||||
this.#debugname = debugname
|
this.#debugname = debugname
|
||||||
}
|
}
|
||||||
|
|
||||||
/**Add data to the manager. The id will be fetched from the data class! You can optionally select to overwrite existing data!*/
|
/**Add data to the manager. The `ODId` in the data class will be used as identifier! You can optionally select to overwrite existing data!*/
|
||||||
add(data:DataType|DataType[], overwrite?:boolean): boolean {
|
add(data:DataType|DataType[], overwrite?:boolean): boolean {
|
||||||
//repeat same command when data is an array
|
//repeat same command when data is an array
|
||||||
if (Array.isArray(data)){
|
if (Array.isArray(data)){
|
||||||
@@ -233,106 +280,94 @@ export class ODManager<DataType extends ODManagerData> extends ODManagerChangeHe
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//add listener for data id change => transfer data within manager
|
||||||
|
data.id.changed((oldId,newId) => {
|
||||||
|
this.#data.delete(oldId)
|
||||||
|
this.#data.set(newId,data)
|
||||||
|
})
|
||||||
|
|
||||||
//add data
|
//add data
|
||||||
const existIndex = this.#data.findIndex((d) => d.id.value === data.id.value)
|
let didOverwrite: boolean
|
||||||
if (existIndex < 0){
|
if (this.#data.has(data.id.value)){
|
||||||
this.#data.push(data)
|
|
||||||
if (this.#debug) this.#debug.debug("Added new "+this.#debugname+" to manager",[{key:"id",value:data.id.value},{key:"overwrite",value:"false"}])
|
|
||||||
|
|
||||||
//change listeners
|
|
||||||
data.changed(() => {
|
|
||||||
//notify change in upper-manager (because data in this manager changed)
|
|
||||||
this._change()
|
|
||||||
this.#changeListeners.forEach((cb) => {
|
|
||||||
try{
|
|
||||||
cb(data)
|
|
||||||
}catch(err){
|
|
||||||
throw new ODSystemError("Failed to run manager onChange() listener.\n"+err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
//add listeners
|
|
||||||
this.#addListeners.forEach((cb) => {
|
|
||||||
try{
|
|
||||||
cb(data,false)
|
|
||||||
}catch(err){
|
|
||||||
throw new ODSystemError("Failed to run manager onAdd() listener.\n"+err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
//notify change in upper-manager (because data added)
|
|
||||||
this._change()
|
|
||||||
|
|
||||||
return false
|
|
||||||
}else{
|
|
||||||
if (!overwrite) throw new ODSystemError("Id '"+data.id.value+"' already exists in "+this.#debugname+" manager. Use 'overwrite:true' to allow overwriting!")
|
if (!overwrite) throw new ODSystemError("Id '"+data.id.value+"' already exists in "+this.#debugname+" manager. Use 'overwrite:true' to allow overwriting!")
|
||||||
this.#data[existIndex] = data
|
this.#data.set(data.id.value,data)
|
||||||
|
didOverwrite = true
|
||||||
if (this.#debug) this.#debug.debug("Added new "+this.#debugname+" to manager",[{key:"id",value:data.id.value},{key:"overwrite",value:"true"}])
|
if (this.#debug) this.#debug.debug("Added new "+this.#debugname+" to manager",[{key:"id",value:data.id.value},{key:"overwrite",value:"true"}])
|
||||||
|
|
||||||
//change listeners
|
}else{
|
||||||
data.changed(() => {
|
this.#data.set(data.id.value,data)
|
||||||
//notify change in upper-manager (because data in this manager changed)
|
didOverwrite = false
|
||||||
this._change()
|
if (this.#debug) this.#debug.debug("Added new "+this.#debugname+" to manager",[{key:"id",value:data.id.value},{key:"overwrite",value:"false"}])
|
||||||
this.#changeListeners.forEach((cb) => {
|
|
||||||
try{
|
}
|
||||||
cb(data)
|
|
||||||
}catch(err){
|
|
||||||
throw new ODSystemError("Failed to run manager onChange() listener.\n"+err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
//add listeners
|
//emit change listeners
|
||||||
this.#addListeners.forEach((cb) => {
|
data.changed(() => {
|
||||||
|
//notify change in upper-manager (because data in this manager changed)
|
||||||
|
this._change()
|
||||||
|
this.#changeListeners.forEach((cb) => {
|
||||||
try{
|
try{
|
||||||
cb(data,true)
|
cb(data)
|
||||||
}catch(err){
|
}catch(err){
|
||||||
throw new ODSystemError("Failed to run manager onAdd() listener.\n"+err)
|
throw new ODSystemError("Failed to run manager onChange() listener.\n"+err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
})
|
||||||
|
|
||||||
//notify change in upper-manager (because data added)
|
//emit add listeners
|
||||||
this._change()
|
this.#addListeners.forEach((cb) => {
|
||||||
|
try{
|
||||||
return true
|
cb(data,didOverwrite)
|
||||||
}
|
}catch(err){
|
||||||
|
throw new ODSystemError("Failed to run manager onAdd() listener.\n"+err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
//notify change in upper-manager (because data added)
|
||||||
|
this._change()
|
||||||
|
|
||||||
|
return didOverwrite
|
||||||
}
|
}
|
||||||
/**Get data that matches the `ODId`. Returns the found data.*/
|
/**Get data that matches the `ODId`. Returns the found data.*/
|
||||||
get(id:ODValidId): DataType|null {
|
get(id:ODValidId): DataType|null {
|
||||||
const newId = new ODId(id)
|
const newId = new ODId(id)
|
||||||
const d = this.#data.find((a) => a.id.value == newId.value)
|
const data = this.#data.get(newId.value)
|
||||||
if (d) return d
|
if (data) return data
|
||||||
else{
|
else{
|
||||||
const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.source)
|
//DEPRECATED!!!
|
||||||
|
const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.getNamespace())
|
||||||
if (!redirect) return null
|
if (!redirect) return null
|
||||||
else{
|
else{
|
||||||
const redirectId = new ODId(redirect.toSource+":"+newId.identifier)
|
const redirectId = new ODId(redirect.toSource+":"+newId.getIdentifier())
|
||||||
return this.get(redirectId)
|
return this.get(redirectId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**Remove data that matches the `ODId`. Returns the removed data.*/
|
/**Remove data that matches the `ODId`. Returns the removed data. */
|
||||||
remove(id:ODValidId): DataType|null {
|
remove(id:ODValidId): DataType|null {
|
||||||
const newId = new ODId(id)
|
const newId = new ODId(id)
|
||||||
const index = this.#data.findIndex((a) => a.id.value == newId.value)
|
const data = this.#data.get(newId.value)
|
||||||
if (index < 0){
|
|
||||||
const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.source)
|
if (!data){
|
||||||
|
//DEPRECATED!!!
|
||||||
|
const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.getNamespace())
|
||||||
if (!redirect){
|
if (!redirect){
|
||||||
if (this.#debug) this.#debug.debug("Removed "+this.#debugname+" from manager",[{key:"id",value:newId.value},{key:"found",value:"false"}])
|
if (this.#debug) this.#debug.debug("Removed "+this.#debugname+" from manager",[{key:"id",value:newId.value},{key:"found",value:"false"}])
|
||||||
return null
|
return null
|
||||||
}else{
|
}else{
|
||||||
const redirectId = new ODId(redirect.toSource+":"+newId.identifier)
|
const redirectId = new ODId(redirect.toSource+":"+newId.getIdentifier())
|
||||||
return this.remove(redirectId)
|
return this.remove(redirectId)
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
this.#data.delete(newId.value)
|
||||||
|
if (this.#debug) this.#debug.debug("Removed "+this.#debugname+" from manager",[{key:"id",value:newId.value},{key:"found",value:"true"}])
|
||||||
}
|
}
|
||||||
if (this.#debug) this.#debug.debug("Removed "+this.#debugname+" from manager",[{key:"id",value:newId.value},{key:"found",value:"true"}])
|
|
||||||
const data = this.#data.splice(index,1)[0]
|
//remove all listeners
|
||||||
|
data.id.changed(null)
|
||||||
//change listeners
|
|
||||||
data.changed(null)
|
data.changed(null)
|
||||||
|
|
||||||
//remove listeners
|
//emit remove listeners
|
||||||
this.#removeListeners.forEach((cb) => {
|
this.#removeListeners.forEach((cb) => {
|
||||||
try{
|
try{
|
||||||
cb(data)
|
cb(data)
|
||||||
@@ -346,39 +381,40 @@ export class ODManager<DataType extends ODManagerData> extends ODManagerChangeHe
|
|||||||
|
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
/**Check if data that matches the `ODId` exists. Returns a boolean.*/
|
/**Check if data that matches the `ODId` exists. Returns a boolean. */
|
||||||
exists(id:ODValidId): boolean {
|
exists(id:ODValidId): boolean {
|
||||||
const newId = new ODId(id)
|
const newId = new ODId(id)
|
||||||
const d = this.#data.find((a) => a.id.value == newId.value)
|
if (this.#data.has(newId.value)) return true
|
||||||
if (d) return true
|
|
||||||
else{
|
else{
|
||||||
const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.source)
|
//DEPRECATED!!!
|
||||||
|
const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.getNamespace())
|
||||||
if (!redirect) return false
|
if (!redirect) return false
|
||||||
else{
|
else{
|
||||||
const redirectId = new ODId(redirect.toSource+":"+newId.identifier)
|
const redirectId = new ODId(redirect.toSource+":"+newId.getIdentifier())
|
||||||
return this.exists(redirectId)
|
return this.exists(redirectId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**Get all data inside this manager*/
|
/**Get all data inside this manager*/
|
||||||
getAll(): DataType[] {
|
getAll(): DataType[] {
|
||||||
return [...this.#data]
|
return Array.from(this.#data.values())
|
||||||
}
|
}
|
||||||
/**Get all data that matches inside the filter function*/
|
/**Get all data that matches inside the filter function*/
|
||||||
getFiltered(predicate:(value:DataType, index:number, array:DataType[]) => unknown): DataType[] {
|
getFiltered(predicate:(value:DataType, index:number, array:DataType[]) => unknown): DataType[] {
|
||||||
return this.#data.filter(predicate)
|
return Array.from(this.#data.values()).filter(predicate)
|
||||||
}
|
}
|
||||||
/**Get all data that matches the regex*/
|
/**Get all data where the `ODId` matches the provided RegExp. */
|
||||||
getRegex(regex:RegExp): DataType[] {
|
getRegex(regex:RegExp): DataType[] {
|
||||||
return this.#data.filter((data) => regex.test(data.id.value))
|
return Array.from(this.#data.values()).filter((data) => regex.test(data.id.value))
|
||||||
}
|
}
|
||||||
/**Get the length of the data inside this manager*/
|
/**Get the length/size/amount of the data inside this manager. */
|
||||||
getLength(){
|
getLength(){
|
||||||
return this.#data.length
|
return this.#data.size
|
||||||
}
|
}
|
||||||
/**Get a list of all the ids inside this manager*/
|
/**Get a list of all the ids inside this manager*/
|
||||||
getIds(): ODId[] {
|
getIds(): ODId[] {
|
||||||
return this.#data.map((d) => d.id)
|
const ids = Array.from(this.#data.keys())
|
||||||
|
return ids.map((id) => new ODId(id))
|
||||||
}
|
}
|
||||||
/**Run an iterator over all data in this manager. This method also supports async-await behaviour!*/
|
/**Run an iterator over all data in this manager. This method also supports async-await behaviour!*/
|
||||||
async loopAll(cb:(data:DataType,id:ODId) => ODPromiseVoid): Promise<void> {
|
async loopAll(cb:(data:DataType,id:ODId) => ODPromiseVoid): Promise<void> {
|
||||||
@@ -535,6 +571,52 @@ export class ODVersion extends ODManagerData {
|
|||||||
return (v.toString() === this.toString())
|
return (v.toString() === this.toString())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
/**Check if this version is higher or equal to the provided `requirement`. */
|
||||||
|
min(requirement:string|ODVersion){
|
||||||
|
if (typeof requirement == "string") requirement = ODVersion.fromString("temp",requirement)
|
||||||
|
|
||||||
|
//skip when primary version is higher or lower than current one.
|
||||||
|
if (this.primary < requirement.primary) return false
|
||||||
|
else if (this.primary > requirement.primary) return true
|
||||||
|
|
||||||
|
//skip when secondary version is higher or lower than current one.
|
||||||
|
if (this.secondary < requirement.secondary) return false
|
||||||
|
else if (this.secondary > requirement.secondary) return true
|
||||||
|
|
||||||
|
//skip when tertiary version is higher or lower than current one.
|
||||||
|
if (this.tertiary < requirement.tertiary) return false
|
||||||
|
else if (this.tertiary > requirement.tertiary) return true
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
/**Check if this version is lower or equal to the provided `requirement`. */
|
||||||
|
max(requirement:string|ODVersion){
|
||||||
|
if (typeof requirement == "string") requirement = ODVersion.fromString("temp",requirement)
|
||||||
|
|
||||||
|
//skip when primary version is higher or lower than current one.
|
||||||
|
if (this.primary < requirement.primary) return true
|
||||||
|
else if (this.primary > requirement.primary) return false
|
||||||
|
|
||||||
|
//skip when secondary version is higher or lower than current one.
|
||||||
|
if (this.secondary < requirement.secondary) return true
|
||||||
|
else if (this.secondary > requirement.secondary) return false
|
||||||
|
|
||||||
|
//skip when tertiary version is higher or lower than current one.
|
||||||
|
if (this.tertiary < requirement.tertiary) return true
|
||||||
|
else if (this.tertiary > requirement.tertiary) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
/**Check if this version is matches the major version (`vX.X`) of the provided `requirement`. */
|
||||||
|
major(requirement:string|ODVersion){
|
||||||
|
if (typeof requirement == "string") requirement = ODVersion.fromString("temp",requirement)
|
||||||
|
return (this.primary == requirement.primary && this.secondary == requirement.secondary)
|
||||||
|
}
|
||||||
|
/**Check if this version is matches the minor version (`vX.X.X`) of the provided `requirement`. */
|
||||||
|
minor(requirement:string|ODVersion){
|
||||||
|
if (typeof requirement == "string") requirement = ODVersion.fromString("temp",requirement)
|
||||||
|
return (this.primary == requirement.primary && this.secondary == requirement.secondary && this.tertiary == requirement.tertiary)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**## ODHTTPGetRequest `class`
|
/**## ODHTTPGetRequest `class`
|
||||||
@@ -566,6 +648,8 @@ export class ODHTTPGetRequest {
|
|||||||
this.throwOnError = throwOnError
|
this.throwOnError = throwOnError
|
||||||
const newConfig = config ?? {}
|
const newConfig = config ?? {}
|
||||||
newConfig.method = "GET"
|
newConfig.method = "GET"
|
||||||
|
if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.0.1"})
|
||||||
|
else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.1"}
|
||||||
this.config = newConfig
|
this.config = newConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -619,6 +703,8 @@ export class ODHTTPPostRequest {
|
|||||||
this.throwOnError = throwOnError
|
this.throwOnError = throwOnError
|
||||||
const newConfig = config ?? {}
|
const newConfig = config ?? {}
|
||||||
newConfig.method = "POST"
|
newConfig.method = "POST"
|
||||||
|
if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.0.1"})
|
||||||
|
else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.1"}
|
||||||
this.config = newConfig
|
this.config = newConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ export class ODButtonInstance {
|
|||||||
*/
|
*/
|
||||||
export class ODButton<Source extends string,Params> extends ODBuilderImplementation<ODButtonInstance,Source,Params,ODComponentBuildResult> {
|
export class ODButton<Source extends string,Params> extends ODBuilderImplementation<ODButtonInstance,Source,Params,ODComponentBuildResult> {
|
||||||
/**Build this button & compile it for discord.js */
|
/**Build this button & compile it for discord.js */
|
||||||
async build(source:Source, params:Params){
|
async build(source:Source, params:Params): Promise<ODComponentBuildResult> {
|
||||||
if (this.didCache && this.cache && this.allowCache) return this.cache
|
if (this.didCache && this.cache && this.allowCache) return this.cache
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -245,6 +245,59 @@ export class ODButton<Source extends string,Params> extends ODBuilderImplementat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**## ODQuickButton `class`
|
||||||
|
* This is an Open Ticket quick button builder.
|
||||||
|
*
|
||||||
|
* With this class, you can quickly create a button to use in a message.
|
||||||
|
* This quick button can be used by Open Ticket plugins instead of the normal builders to speed up the process!
|
||||||
|
*
|
||||||
|
* Because of the quick functionality, these buttons are less customisable by other plugins.
|
||||||
|
*/
|
||||||
|
export class ODQuickButton {
|
||||||
|
/**The id of this button. */
|
||||||
|
id: ODId
|
||||||
|
/**The current data of this button */
|
||||||
|
data: ODButtonData = {
|
||||||
|
customId:"",
|
||||||
|
mode:"button",
|
||||||
|
url:null,
|
||||||
|
color:null,
|
||||||
|
label:null,
|
||||||
|
emoji:null,
|
||||||
|
disabled:false
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(id:ODValidId,data:ODButtonData){
|
||||||
|
this.id = new ODId(id)
|
||||||
|
this.data = data
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Build this button & compile it for discord.js */
|
||||||
|
async build(): Promise<ODComponentBuildResult> {
|
||||||
|
try {
|
||||||
|
//create the discord.js button
|
||||||
|
const button = new discord.ButtonBuilder()
|
||||||
|
if (this.data.mode == "button") button.setCustomId(this.data.customId)
|
||||||
|
if (this.data.mode == "url") button.setStyle(discord.ButtonStyle.Link)
|
||||||
|
else if (this.data.color == "gray") button.setStyle(discord.ButtonStyle.Secondary)
|
||||||
|
else if (this.data.color == "blue") button.setStyle(discord.ButtonStyle.Primary)
|
||||||
|
else if (this.data.color == "green") button.setStyle(discord.ButtonStyle.Success)
|
||||||
|
else if (this.data.color == "red") button.setStyle(discord.ButtonStyle.Danger)
|
||||||
|
if (this.data.url) button.setURL(this.data.url)
|
||||||
|
if (this.data.label) button.setLabel(this.data.label)
|
||||||
|
if (this.data.emoji) button.setEmoji(this.data.emoji)
|
||||||
|
if (this.data.disabled) button.setDisabled(this.data.disabled)
|
||||||
|
if (!this.data.emoji && !this.data.label) button.setLabel(this.data.customId)
|
||||||
|
|
||||||
|
return {id:this.id,component:button}
|
||||||
|
}catch(err){
|
||||||
|
process.emit("uncaughtException",new ODSystemError("ODQuickButton:build(\""+this.id.value+"\") => Major Error (see next error)"))
|
||||||
|
process.emit("uncaughtException",err)
|
||||||
|
return {id:this.id,component:null}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**## ODDropdownManager `class`
|
/**## ODDropdownManager `class`
|
||||||
* This is an Open Ticket dropdown manager.
|
* This is an Open Ticket dropdown manager.
|
||||||
*
|
*
|
||||||
@@ -403,7 +456,7 @@ export class ODDropdownInstance {
|
|||||||
*/
|
*/
|
||||||
export class ODDropdown<Source extends string,Params> extends ODBuilderImplementation<ODDropdownInstance,Source,Params,ODComponentBuildResult> {
|
export class ODDropdown<Source extends string,Params> extends ODBuilderImplementation<ODDropdownInstance,Source,Params,ODComponentBuildResult> {
|
||||||
/**Build this dropdown & compile it for discord.js */
|
/**Build this dropdown & compile it for discord.js */
|
||||||
async build(source:Source, params:Params){
|
async build(source:Source, params:Params): Promise<ODComponentBuildResult> {
|
||||||
if (this.didCache && this.cache && this.allowCache) return this.cache
|
if (this.didCache && this.cache && this.allowCache) return this.cache
|
||||||
|
|
||||||
try{
|
try{
|
||||||
@@ -499,6 +552,118 @@ export class ODDropdown<Source extends string,Params> extends ODBuilderImplement
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**## ODQuickDropdown `class`
|
||||||
|
* This is an Open Ticket quick dropdown builder.
|
||||||
|
*
|
||||||
|
* With this class, you can quickly create a dropdown to use in a message.
|
||||||
|
* This quick dropdown can be used by Open Ticket plugins instead of the normal builders to speed up the process!
|
||||||
|
*
|
||||||
|
* Because of the quick functionality, these dropdowns are less customisable by other plugins.
|
||||||
|
*/
|
||||||
|
export class ODQuickDropdown {
|
||||||
|
/**The id of this dropdown. */
|
||||||
|
id: ODId
|
||||||
|
/**The current data of this dropdown */
|
||||||
|
data: ODDropdownData = {
|
||||||
|
customId:"",
|
||||||
|
type:"string",
|
||||||
|
placeholder:null,
|
||||||
|
minValues:null,
|
||||||
|
maxValues:null,
|
||||||
|
disabled:false,
|
||||||
|
channelTypes:[],
|
||||||
|
|
||||||
|
options:[],
|
||||||
|
users:[],
|
||||||
|
roles:[],
|
||||||
|
channels:[],
|
||||||
|
mentionables:[]
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(id:ODValidId,data:ODDropdownData){
|
||||||
|
this.id = new ODId(id)
|
||||||
|
this.data = data
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Build this dropdown & compile it for discord.js */
|
||||||
|
async build(): Promise<ODComponentBuildResult> {
|
||||||
|
try{
|
||||||
|
//create the discord.js dropdown
|
||||||
|
if (this.data.type == "string"){
|
||||||
|
const dropdown = new discord.StringSelectMenuBuilder()
|
||||||
|
dropdown.setCustomId(this.data.customId)
|
||||||
|
dropdown.setOptions(...this.data.options)
|
||||||
|
if (this.data.placeholder) dropdown.setPlaceholder(this.data.placeholder)
|
||||||
|
if (this.data.minValues) dropdown.setMinValues(this.data.minValues)
|
||||||
|
if (this.data.maxValues) dropdown.setMaxValues(this.data.maxValues)
|
||||||
|
if (this.data.disabled) dropdown.setDisabled(this.data.disabled)
|
||||||
|
|
||||||
|
return {id:this.id,component:dropdown}
|
||||||
|
|
||||||
|
}else if (this.data.type == "user"){
|
||||||
|
const dropdown = new discord.UserSelectMenuBuilder()
|
||||||
|
dropdown.setCustomId(this.data.customId)
|
||||||
|
if (this.data.users.length > 0) dropdown.setDefaultUsers(...this.data.users.map((u) => u.id))
|
||||||
|
if (this.data.placeholder) dropdown.setPlaceholder(this.data.placeholder)
|
||||||
|
if (this.data.minValues) dropdown.setMinValues(this.data.minValues)
|
||||||
|
if (this.data.maxValues) dropdown.setMaxValues(this.data.maxValues)
|
||||||
|
if (this.data.disabled) dropdown.setDisabled(this.data.disabled)
|
||||||
|
|
||||||
|
return {id:this.id,component:dropdown}
|
||||||
|
|
||||||
|
}else if (this.data.type == "role"){
|
||||||
|
const dropdown = new discord.RoleSelectMenuBuilder()
|
||||||
|
dropdown.setCustomId(this.data.customId)
|
||||||
|
if (this.data.roles.length > 0) dropdown.setDefaultRoles(...this.data.roles.map((r) => r.id))
|
||||||
|
if (this.data.placeholder) dropdown.setPlaceholder(this.data.placeholder)
|
||||||
|
if (this.data.minValues) dropdown.setMinValues(this.data.minValues)
|
||||||
|
if (this.data.maxValues) dropdown.setMaxValues(this.data.maxValues)
|
||||||
|
if (this.data.disabled) dropdown.setDisabled(this.data.disabled)
|
||||||
|
|
||||||
|
return {id:this.id,component:dropdown}
|
||||||
|
|
||||||
|
}else if (this.data.type == "channel"){
|
||||||
|
const dropdown = new discord.ChannelSelectMenuBuilder()
|
||||||
|
dropdown.setCustomId(this.data.customId)
|
||||||
|
if (this.data.channels.length > 0) dropdown.setDefaultChannels(...this.data.channels.map((c) => c.id))
|
||||||
|
if (this.data.placeholder) dropdown.setPlaceholder(this.data.placeholder)
|
||||||
|
if (this.data.minValues) dropdown.setMinValues(this.data.minValues)
|
||||||
|
if (this.data.maxValues) dropdown.setMaxValues(this.data.maxValues)
|
||||||
|
if (this.data.disabled) dropdown.setDisabled(this.data.disabled)
|
||||||
|
|
||||||
|
return {id:this.id,component:dropdown}
|
||||||
|
|
||||||
|
}else if (this.data.type == "mentionable"){
|
||||||
|
const dropdown = new discord.MentionableSelectMenuBuilder()
|
||||||
|
|
||||||
|
const values: ({type:discord.SelectMenuDefaultValueType.User,id:string}|{type:discord.SelectMenuDefaultValueType.Role,id:string})[] = []
|
||||||
|
this.data.mentionables.forEach((m) => {
|
||||||
|
if (m instanceof discord.User){
|
||||||
|
values.push({type:discord.SelectMenuDefaultValueType.User,id:m.id})
|
||||||
|
}else{
|
||||||
|
values.push({type:discord.SelectMenuDefaultValueType.Role,id:m.id})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
dropdown.setCustomId(this.data.customId)
|
||||||
|
if (this.data.mentionables.length > 0) dropdown.setDefaultValues(...values)
|
||||||
|
if (this.data.placeholder) dropdown.setPlaceholder(this.data.placeholder)
|
||||||
|
if (this.data.minValues) dropdown.setMinValues(this.data.minValues)
|
||||||
|
if (this.data.maxValues) dropdown.setMaxValues(this.data.maxValues)
|
||||||
|
if (this.data.disabled) dropdown.setDisabled(this.data.disabled)
|
||||||
|
|
||||||
|
return {id:this.id,component:dropdown}
|
||||||
|
}else{
|
||||||
|
throw new Error("Tried to build an ODQuickDropdown with unknown type!")
|
||||||
|
}
|
||||||
|
}catch(err){
|
||||||
|
process.emit("uncaughtException",new ODSystemError("ODQuickDropdown:build(\""+this.id.value+"\") => Major Error (see next error)"))
|
||||||
|
process.emit("uncaughtException",err)
|
||||||
|
return {id:this.id,component:null}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**## ODFileManager `class`
|
/**## ODFileManager `class`
|
||||||
* This is an Open Ticket file manager.
|
* This is an Open Ticket file manager.
|
||||||
*
|
*
|
||||||
@@ -594,7 +759,7 @@ export class ODFileInstance {
|
|||||||
*/
|
*/
|
||||||
export class ODFile<Source extends string,Params> extends ODBuilderImplementation<ODFileInstance,Source,Params,ODFileBuildResult> {
|
export class ODFile<Source extends string,Params> extends ODBuilderImplementation<ODFileInstance,Source,Params,ODFileBuildResult> {
|
||||||
/**Build this attachment & compile it for discord.js */
|
/**Build this attachment & compile it for discord.js */
|
||||||
async build(source:Source, params:Params){
|
async build(source:Source, params:Params): Promise<ODFileBuildResult> {
|
||||||
if (this.didCache && this.cache && this.allowCache) return this.cache
|
if (this.didCache && this.cache && this.allowCache) return this.cache
|
||||||
|
|
||||||
try{
|
try{
|
||||||
@@ -622,6 +787,48 @@ export class ODFile<Source extends string,Params> extends ODBuilderImplementatio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**## ODQuickFile `class`
|
||||||
|
* This is an Open Ticket quick file builder.
|
||||||
|
*
|
||||||
|
* With this class, you can quickly create a file to use in a message.
|
||||||
|
* This quick file can be used by Open Ticket plugins instead of the normal builders to speed up the process!
|
||||||
|
*
|
||||||
|
* Because of the quick functionality, these files are less customisable by other plugins.
|
||||||
|
*/
|
||||||
|
export class ODQuickFile {
|
||||||
|
/**The id of this file. */
|
||||||
|
id: ODId
|
||||||
|
/**The current data of this file */
|
||||||
|
data: ODFileData = {
|
||||||
|
file:"",
|
||||||
|
name:"file.txt",
|
||||||
|
description:null,
|
||||||
|
spoiler:false
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(id:ODValidId,data:ODFileData){
|
||||||
|
this.id = new ODId(id)
|
||||||
|
this.data = data
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Build this attachment & compile it for discord.js */
|
||||||
|
async build(): Promise<ODFileBuildResult> {
|
||||||
|
try{
|
||||||
|
//create the discord.js attachment
|
||||||
|
const file = new discord.AttachmentBuilder(this.data.file)
|
||||||
|
file.setName(this.data.name ? this.data.name : "file.txt")
|
||||||
|
if (this.data.description) file.setDescription(this.data.description)
|
||||||
|
if (this.data.spoiler) file.setSpoiler(this.data.spoiler)
|
||||||
|
|
||||||
|
return {id:this.id,file}
|
||||||
|
}catch(err){
|
||||||
|
process.emit("uncaughtException",new ODSystemError("ODQuickFile:build(\""+this.id.value+"\") => Major Error (see next error)"))
|
||||||
|
process.emit("uncaughtException",err)
|
||||||
|
return {id:this.id,file:null}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**## ODEmbedManager `class`
|
/**## ODEmbedManager `class`
|
||||||
* This is an Open Ticket embed manager.
|
* This is an Open Ticket embed manager.
|
||||||
*
|
*
|
||||||
@@ -795,7 +1002,7 @@ export class ODEmbedInstance {
|
|||||||
*/
|
*/
|
||||||
export class ODEmbed<Source extends string,Params> extends ODBuilderImplementation<ODEmbedInstance,Source,Params,ODEmbedBuildResult> {
|
export class ODEmbed<Source extends string,Params> extends ODBuilderImplementation<ODEmbedInstance,Source,Params,ODEmbedBuildResult> {
|
||||||
/**Build this embed & compile it for discord.js */
|
/**Build this embed & compile it for discord.js */
|
||||||
async build(source:Source, params:Params){
|
async build(source:Source, params:Params): Promise<ODEmbedBuildResult> {
|
||||||
if (this.didCache && this.cache && this.allowCache) return this.cache
|
if (this.didCache && this.cache && this.allowCache) return this.cache
|
||||||
|
|
||||||
try{
|
try{
|
||||||
@@ -836,6 +1043,71 @@ export class ODEmbed<Source extends string,Params> extends ODBuilderImplementati
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**## ODQuickEmbed `class`
|
||||||
|
* This is an Open Ticket quick embed builder.
|
||||||
|
*
|
||||||
|
* With this class, you can quickly create a embed to use in a message.
|
||||||
|
* This quick embed can be used by Open Ticket plugins instead of the normal builders to speed up the process!
|
||||||
|
*
|
||||||
|
* Because of the quick functionality, these embeds are less customisable by other plugins.
|
||||||
|
*/
|
||||||
|
export class ODQuickEmbed {
|
||||||
|
/**The id of this embed. */
|
||||||
|
id: ODId
|
||||||
|
/**The current data of this embed */
|
||||||
|
data: ODEmbedData = {
|
||||||
|
title:null,
|
||||||
|
color:null,
|
||||||
|
url:null,
|
||||||
|
description:null,
|
||||||
|
authorText:null,
|
||||||
|
authorImage:null,
|
||||||
|
authorUrl:null,
|
||||||
|
footerText:null,
|
||||||
|
footerImage:null,
|
||||||
|
image:null,
|
||||||
|
thumbnail:null,
|
||||||
|
fields:[],
|
||||||
|
timestamp:null
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(id:ODValidId,data:ODEmbedData){
|
||||||
|
this.id = new ODId(id)
|
||||||
|
this.data = data
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Build this embed & compile it for discord.js */
|
||||||
|
async build(): Promise<ODEmbedBuildResult> {
|
||||||
|
try{
|
||||||
|
//create the discord.js embed
|
||||||
|
const embed = new discord.EmbedBuilder()
|
||||||
|
if (this.data.title) embed.setTitle(this.data.title)
|
||||||
|
if (this.data.color) embed.setColor(this.data.color)
|
||||||
|
if (this.data.url) embed.setURL(this.data.url)
|
||||||
|
if (this.data.description) embed.setDescription(this.data.description)
|
||||||
|
if (this.data.authorText) embed.setAuthor({
|
||||||
|
name:this.data.authorText,
|
||||||
|
iconURL:this.data.authorImage ?? undefined,
|
||||||
|
url:this.data.authorUrl ?? undefined
|
||||||
|
})
|
||||||
|
if (this.data.footerText) embed.setFooter({
|
||||||
|
text:this.data.footerText,
|
||||||
|
iconURL:this.data.footerImage ?? undefined,
|
||||||
|
})
|
||||||
|
if (this.data.image) embed.setImage(this.data.image)
|
||||||
|
if (this.data.thumbnail) embed.setThumbnail(this.data.thumbnail)
|
||||||
|
if (this.data.timestamp) embed.setTimestamp(this.data.timestamp)
|
||||||
|
if (this.data.fields.length > 0) embed.setFields(this.data.fields)
|
||||||
|
|
||||||
|
return {id:this.id,embed}
|
||||||
|
}catch(err){
|
||||||
|
process.emit("uncaughtException",new ODSystemError("ODQuickEmbed:build(\""+this.id.value+"\") => Major Error (see next error)"))
|
||||||
|
process.emit("uncaughtException",err)
|
||||||
|
return {id:this.id,embed:null}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**## ODMessageManager `class`
|
/**## ODMessageManager `class`
|
||||||
* This is an Open Ticket message manager.
|
* This is an Open Ticket message manager.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ export class ODVersionMigration {
|
|||||||
|
|
||||||
export const utilities: ODUtilities = {
|
export const utilities: ODUtilities = {
|
||||||
project:"openticket",
|
project:"openticket",
|
||||||
isBeta:true,
|
isBeta:false,
|
||||||
moduleInstalled:(id:string) => {
|
moduleInstalled:(id:string) => {
|
||||||
return moduleInstalled(id,false)
|
return moduleInstalled(id,false)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ export const loadVersionMigrationSystem = async () => {
|
|||||||
await preloadMigrationContext()
|
await preloadMigrationContext()
|
||||||
|
|
||||||
const lastVersion = await isMigrationRequired()
|
const lastVersion = await isMigrationRequired()
|
||||||
|
|
||||||
|
//save last version to database (OR set to current version if no migration is required)
|
||||||
opendiscord.versions.add(lastVersion ? lastVersion : api.ODVersion.fromString("opendiscord:last-version",opendiscord.versions.get("opendiscord:version").toString()))
|
opendiscord.versions.add(lastVersion ? lastVersion : api.ODVersion.fromString("opendiscord:last-version",opendiscord.versions.get("opendiscord:version").toString()))
|
||||||
|
|
||||||
if (lastVersion && !opendiscord.flags.get("opendiscord:no-migration").value){
|
if (lastVersion && !opendiscord.flags.get("opendiscord:no-migration").value){
|
||||||
//MIGRATION IS REQUIRED
|
//MIGRATION IS REQUIRED
|
||||||
opendiscord.log("Detected old data!","info")
|
opendiscord.log("Detected old data!","info")
|
||||||
|
|||||||
@@ -2,13 +2,16 @@ import {opendiscord, api, utilities} from "../../index"
|
|||||||
|
|
||||||
export const migrations = [
|
export const migrations = [
|
||||||
//MIGRATE TO v4.0.0
|
//MIGRATE TO v4.0.0
|
||||||
new utilities.ODVersionMigration(api.ODVersion.fromString("opendiscord:version","v4.0.0"),async () => {
|
new utilities.ODVersionMigration(api.ODVersion.fromString("opendiscord:version","v4.0.0"),async () => {},async () => {}),
|
||||||
//MIGRATE BEFORE STARTUP
|
|
||||||
|
//MIGRATE TO v4.0.1
|
||||||
|
new utilities.ODVersionMigration(api.ODVersion.fromString("opendiscord:version","v4.0.1"),async () => {},async () => {
|
||||||
|
//AFTER INIT MIGRATION
|
||||||
|
|
||||||
//nothing needs to be transferred :)
|
//add opendiscord:panel-message properties for all existing panels.
|
||||||
},() => {
|
const globalDatabase = opendiscord.databases.get("opendiscord:global")
|
||||||
//MIGRATE AFTER INITIAL STARTUP (plugins, flags, config, database, language, ... => loaded)
|
for (const panel of (await globalDatabase.getCategory("opendiscord:panel-update") ?? [])){
|
||||||
|
globalDatabase.set("opendiscord:panel-message",panel.key,panel.value)
|
||||||
//nothing needs to be transferred :)
|
}
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
@@ -14,8 +14,9 @@ export const loadAllPlugins = async () => {
|
|||||||
const plugins = fs.readdirSync("./plugins")
|
const plugins = fs.readdirSync("./plugins")
|
||||||
|
|
||||||
//check & validate
|
//check & validate
|
||||||
plugins.forEach(async (p) => {
|
plugins.forEach((p) => {
|
||||||
//prechecks
|
//prechecks
|
||||||
|
if (p === ".DS_Store") return //ignore MacOS DS_Store file
|
||||||
if (!fs.statSync("./plugins/"+p).isDirectory()) return opendiscord.log("Plugin is not a directory, canceling plugin execution...","plugin",[
|
if (!fs.statSync("./plugins/"+p).isDirectory()) return opendiscord.log("Plugin is not a directory, canceling plugin execution...","plugin",[
|
||||||
{key:"plugin",value:"./plugins/"+p}
|
{key:"plugin",value:"./plugins/"+p}
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ export const loadDatabaseCleanersCode = async () => {
|
|||||||
const validPanels: string[] = []
|
const validPanels: string[] = []
|
||||||
|
|
||||||
//check global database for valid panel embeds
|
//check global database for valid panel embeds
|
||||||
for (const panel of (await globalDatabase.getCategory("opendiscord:panel-update") ?? [])){
|
for (const panel of (await globalDatabase.getCategory("opendiscord:panel-message") ?? [])){
|
||||||
if (!validPanels.includes(panel.key)){
|
if (!validPanels.includes(panel.key)){
|
||||||
try{
|
try{
|
||||||
const splittedId = panel.key.split("_")
|
const splittedId = panel.key.split("_")
|
||||||
@@ -84,15 +84,17 @@ export const loadDatabaseCleanersCode = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//remove all unused panels
|
//remove all unused panels
|
||||||
for (const panel of (await globalDatabase.getCategory("opendiscord:panel-update") ?? [])){
|
for (const panel of (await globalDatabase.getCategory("opendiscord:panel-message") ?? [])){
|
||||||
if (!validPanels.includes(panel.key)){
|
if (!validPanels.includes(panel.key)){
|
||||||
|
await globalDatabase.delete("opendiscord:panel-message",panel.key)
|
||||||
await globalDatabase.delete("opendiscord:panel-update",panel.key)
|
await globalDatabase.delete("opendiscord:panel-update",panel.key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//delete panel from database on delete
|
//delete panel from database on delete
|
||||||
opendiscord.client.client.on("messageDelete",async (msg) => {
|
opendiscord.client.client.on("messageDelete",async (msg) => {
|
||||||
if (await globalDatabase.exists("opendiscord:panel-update",msg.channel.id+"_"+msg.id)){
|
if (await globalDatabase.exists("opendiscord:panel-message",msg.channel.id+"_"+msg.id)){
|
||||||
|
await globalDatabase.delete("opendiscord:panel-message",msg.channel.id+"_"+msg.id)
|
||||||
await globalDatabase.delete("opendiscord:panel-update",msg.channel.id+"_"+msg.id)
|
await globalDatabase.delete("opendiscord:panel-update",msg.channel.id+"_"+msg.id)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -484,7 +486,7 @@ const loadAutoCode = () => {
|
|||||||
})
|
})
|
||||||
}))
|
}))
|
||||||
|
|
||||||
//TICKET ANTI BUSY
|
//TICKET ANTI BUSY (+ sync version of tickets with latest OT version in database)
|
||||||
opendiscord.code.add(new api.ODCode("opendiscord:ticket-anti-busy",-1,() => {
|
opendiscord.code.add(new api.ODCode("opendiscord:ticket-anti-busy",-1,() => {
|
||||||
for (const ticket of opendiscord.tickets.getAll()){
|
for (const ticket of opendiscord.tickets.getAll()){
|
||||||
//free tickets from corruption due to opendiscord:busy variable
|
//free tickets from corruption due to opendiscord:busy variable
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ export const loadAllLanguages = async () => {
|
|||||||
opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:hindi","hindi.json"))
|
opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:hindi","hindi.json"))
|
||||||
opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:lithuanian","lithuanian.json"))
|
opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:lithuanian","lithuanian.json"))
|
||||||
opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:polish","polish.json"))
|
opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:polish","polish.json"))
|
||||||
|
opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:latvian","latvian.json"))
|
||||||
|
opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:norwegian","norwegian.json"))
|
||||||
|
opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:russian","russian.json"))
|
||||||
|
opendiscord.languages.add(new api.ODJsonLanguage("opendiscord:swedish","swedish.json"))
|
||||||
|
|
||||||
/** How to add more languages?
|
/** How to add more languages?
|
||||||
* - Register the language to the manager (see above)
|
* - Register the language to the manager (see above)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export const loadTicket = async (ticket:api.ODTicketJson) => {
|
|||||||
//check if option is of type "ticket"
|
//check if option is of type "ticket"
|
||||||
if (configOption && !(configOption instanceof api.ODTicketOption)) throw new api.ODSystemError("Unable to load ticket because option is not of 'ticket' type!")
|
if (configOption && !(configOption instanceof api.ODTicketOption)) throw new api.ODSystemError("Unable to load ticket because option is not of 'ticket' type!")
|
||||||
|
|
||||||
//manage backup option
|
//manage backup option (+ sync version of options with latest OT version in database)
|
||||||
if (configOption) await optionDatabase.set("opendiscord:used-option",configOption.id.value,configOption.toJson(opendiscord.versions.get("opendiscord:version")))
|
if (configOption) await optionDatabase.set("opendiscord:used-option",configOption.id.value,configOption.toJson(opendiscord.versions.get("opendiscord:version")))
|
||||||
else if (backupOption) opendiscord.options.add(backupOption)
|
else if (backupOption) opendiscord.options.add(backupOption)
|
||||||
else throw new api.ODSystemError("Unable to use backup option! Normal option not found in config!")
|
else throw new api.ODSystemError("Unable to use backup option! Normal option not found in config!")
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
INFORMATION:
|
INFORMATION:
|
||||||
============
|
============
|
||||||
Open Ticket v4.0.0 - © DJdj Development
|
Open Ticket v4.0.1 - © DJdj Development
|
||||||
|
|
||||||
support us: https://github.com/sponsors/DJj123dj
|
support us: https://github.com/sponsors/DJj123dj
|
||||||
discord: https://discord.dj-dj.be
|
discord: https://discord.dj-dj.be
|
||||||
|
|||||||
+5
-5
@@ -1,13 +1,13 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"message":{
|
"message":{
|
||||||
"title":"Open Ticket Beta",
|
"title":"Open Ticket v4.0",
|
||||||
"titleColor":"red",
|
"titleColor":"red",
|
||||||
"description":"Hi there! You're using a beta version of the bot! Please report all bugs and errors to our discord server!",
|
"description":"Open Ticket v4.0 has officially been released! Please give our project a star to help us grow!",
|
||||||
"descriptionColor":"normal"
|
"descriptionColor":"normal"
|
||||||
},
|
},
|
||||||
"active":{
|
"active":{
|
||||||
"versions":["4.0.0"],
|
"versions":["4.0.0","4.0.1","4.0.2","4.0.3","4.0.4"],
|
||||||
"languages":[],
|
"languages":[],
|
||||||
"allLanguages":true,
|
"allLanguages":true,
|
||||||
"usingPlugins":true,
|
"usingPlugins":true,
|
||||||
@@ -23,11 +23,11 @@
|
|||||||
"message":{
|
"message":{
|
||||||
"title":"Documentation",
|
"title":"Documentation",
|
||||||
"titleColor":"blue",
|
"titleColor":"blue",
|
||||||
"description":"There is currently no documentation available yet for OT v4 beta!",
|
"description":"The official documentation for Open Ticket v4 is available at https://otdocs.dj-dj.be!",
|
||||||
"descriptionColor":"normal"
|
"descriptionColor":"normal"
|
||||||
},
|
},
|
||||||
"active":{
|
"active":{
|
||||||
"versions":["4.0.0"],
|
"versions":["4.0.0","4.0.1","4.0.2","4.0.3","4.0.4"],
|
||||||
"languages":[],
|
"languages":[],
|
||||||
"allLanguages":true,
|
"allLanguages":true,
|
||||||
"usingPlugins":true,
|
"usingPlugins":true,
|
||||||
|
|||||||
Reference in New Issue
Block a user