Compare commits

...
461 Commits
Author SHA1 Message Date
DJj123dj 126fada990 Merge branch 'dev' 2025-03-25 18:44:56 +01:00
DJj123dj bd4929f11b Updated all URLs for repository transfer 2025-03-25 17:49:42 +01:00
DJj123dj d28fcf40d7 Fixed broken flag alias using --dev-database 2025-03-22 11:08:09 +01:00
DJj123dj bed4e2a56a Improved CONTRIBUTING.md & SECURITY.md markdown 2025-03-16 18:35:25 +01:00
DJj123dj ba3a35a343 Added official Open Ticket Pterodactyl eggs! 2025-03-16 18:34:43 +01:00
DJj123dj 1e159c9bab Improved dockerfile & compose 2025-03-12 22:13:00 +01:00
DJj123dj e7ad3dd50b Fixed startup crash codes (for Docker) 2025-03-12 22:12:51 +01:00
DJj123dj 177dee7468 Type simplifications (for documentation) 2025-02-27 20:51:59 +01:00
DJj123dj 0d40c23aa8 Fixed HTML Transcripts "member not found" error. 2025-02-19 15:48:37 +01:00
DJj123dj 15eef95fdd Decreased /clear speed to reduce ratelimit chances 2025-02-19 15:43:43 +01:00
DJj123dj c89e93d33d Fixed crash resulting of non-returning statements 2025-02-19 15:29:16 +01:00
DJj123dj e6c413cdf5 Fixed typos in comments 2025-02-18 18:18:10 +01:00
DJj123dj b12556120c Made database migration compatible with plugins 2025-02-17 19:44:18 +01:00
DJj123dj 58674452d8 Added quick setup to README.md 2025-02-15 19:01:53 +01:00
DJj123dj a2f9593d55 Fixed #134 : text transcripts incorrect newlines 2025-02-15 18:22:23 +01:00
DJj123dj 9702c4d97d Fixed stats resetting due to breaking change 2025-02-12 16:27:34 +01:00
DJj123dj f13777e5f3 Update README.md 2025-02-09 11:34:37 +01:00
DJj123dj 9395e9af75 Added 13 new utility events for plugins 2025-02-09 11:19:03 +01:00
DJj123dj b2a5e65fe2 Update README.md 2025-02-09 11:18:24 +01:00
DJj123dj 071c8f953c Update createDocs.js 2025-02-05 17:04:10 +01:00
DJj123dj 9a4e5e2175 Merge branch 'dev' of https://github.com/DJj123dj/open-ticket into dev 2025-02-04 17:42:37 +01:00
DJj123dj 4e709f2a0b Update createDocs.js 2025-02-04 17:42:24 +01:00
Jasper 27e3e78439 Fixed dateString() utility
Fixed dateString() utility
2025-02-03 21:28:51 +01:00
DJj123dj 06e7919162 Fixed panel dropdown bug with empty option label 2025-02-03 21:01:36 +01:00
Roppl3r bf952e3ef7 Fixed month parsing in dateString() utility causing incorrect dates in text transcripts. 2025-02-02 20:23:32 +01:00
DJj123dj a397b66c9e Update createDocs.js 2025-02-01 11:52:02 +01:00
DJj123dj 27f6e3a81f Compiler will now only hash JS & TS files 2025-02-01 11:23:17 +01:00
DJj123dj f2cefae37c database will auto-update for the breaking change 2025-02-01 11:22:49 +01:00
DJj123dj 6acbf74846 BREAKING: changed all ids to "opendiscord:" 2025-02-01 10:29:35 +01:00
DJj123dj 29f8e1452c BREAKING: changed openticket to opendiscord in API 2025-02-01 10:22:27 +01:00
DJj123dj ce242741cd Update README.md 2025-02-01 10:05:26 +01:00
DJj123dj ac587568d3 Update createDocs.js 2025-01-31 17:14:56 +01:00
DJj123dj f5e78949d7 Added typedoc for OT Docs API Reference 2025-01-31 16:03:02 +01:00
DJj123dj 8e7fe4e502 Update README.md 2025-01-29 21:36:26 +01:00
DJj123dj e51cc54090 Fixed polish translation 2025-01-29 19:50:31 +01:00
Jasper dc3515da10 Added Polish Translation
Added Polish Translation
2025-01-29 19:47:25 +01:00
Jasper c57f3397a4 Update checker.ts 2025-01-29 19:46:04 +01:00
Jasper 686b45b0bd Added Polish Translation
Added Polish Language 🇵🇱
2025-01-29 19:43:53 +01:00
DJj123dj 96d6758b4a Update README.md 2025-01-29 19:35:10 +01:00
DanoGlez 52b49ec564 Added Custom Emojis
feat: allow custom emojis by modifying checker
2025-01-28 23:23:18 +00:00
DanoGlez deebd2b758 Added Polish 2025-01-28 23:14:55 +00:00
DJj123dj ed9afffd70 Finished API comments 2025-01-28 18:16:14 +01:00
Jasper 91cad963e5 Added new API comments (part 9-12)
Added new API comments (part 9-12)
2025-01-28 17:50:23 +01:00
JasperAtSchool baa4e35878 Added new API comments (part 12) 2025-01-28 14:33:10 +01:00
JasperAtSchool f6c70fa62a Added new API comments (part 11) 2025-01-28 14:22:26 +01:00
JasperAtSchool 58fb7b7512 Added new API comments (part 10) 2025-01-28 14:16:43 +01:00
JasperAtSchool 5e1cfe7942 Added new API comments (part 9) 2025-01-28 11:21:49 +01:00
DJj123dj 507d254556 Added new API comments (part 8) 2025-01-27 23:37:49 +01:00
DJj123dj 43356fef05 Added Lithuanian translation (by tsgindrius) 2025-01-27 23:15:58 +01:00
DJj123dj bbae139c6b Updated README.md 2025-01-25 23:10:45 +01:00
DJj123dj 6516857866 Fixed deprecation of HTML Transcripts interactions 2025-01-25 22:54:50 +01:00
DJj123dj 213ec32225 Fixed small bugs 2025-01-25 14:06:41 +01:00
DJj123dj 04789d5426 Fixed #121 : Ticket busy will now reset on reboot 2025-01-25 11:47:50 +01:00
DJj123dj 0437af1507 Fixed #120 : Temporarily removed bot status state
Will be added back in a future update, but customisable instead of double text :)
2025-01-25 11:43:13 +01:00
DJj123dj 73d188c5dc Fixed #129 : Improved invalid token error 2025-01-25 11:28:32 +01:00
DJj123dj 057a5fc6ae Fixed #124 : DMs are now sent to ticket creator 2025-01-25 11:18:10 +01:00
DJj123dj d35eb8f8bf Updated issue templates 2025-01-25 10:56:18 +01:00
DJj123dj 19e5902320 Fixed: checker not working correctly using .env
Fixed the config checker not working correctly when parsing the token from the .env file.
2025-01-24 17:34:05 +01:00
DJj123dj 66b0377a2b Update index.ts 2025-01-22 17:11:01 +01:00
DJj123dj 3bd308007c Updated sponsors 2025-01-22 16:58:24 +01:00
DJj123dj 40bd873a33 Added new API comments (part 7) 2025-01-22 15:13:13 +01:00
Jasper 09d9b2d265 Added new API comments (part 6)
Added new API comments (part 6)
2025-01-21 18:51:06 +01:00
JasperAtSchool 7fb169789b Added new API comments (part 6) 2025-01-21 12:05:36 +01:00
DJj123dj 1ab207b4eb Found more missing translations 2025-01-20 20:42:23 +01:00
DJj123dj 5e5ac3e409 Implemented progress bars when loading slash cmds 2025-01-19 15:16:04 +01:00
DJj123dj 7809ffc5c6 Fixed typo's in comments 2025-01-19 15:15:29 +01:00
DJj123dj 9da823aa4b Added new progress bars API & classes 2025-01-19 00:17:39 +01:00
DJj123dj ff23b0e89e Added comment to dump command 2025-01-18 21:53:53 +01:00
DJj123dj c3474fb017 Made built-in cmds compatible with slash update 2025-01-18 20:41:12 +01:00
DJj123dj 03982f644e MAJOR: Full rewrite of slash cmd loading system
The system of detecting, comparing & registering slash cmds has been rewritten and updated for future compatibility. This will break all current plugins (so please wait until they are updated)

=> Increased speed
=> All cmd params are now used when comparing
=> Future compability & removed deprecated functions
=> New universal utility interfaces for slash commands
=> And more!
2025-01-18 20:40:52 +01:00
DJj123dj 3a30152cb2 Improved startup time (5 sec) due to config bug 2025-01-18 20:36:08 +01:00
DJj123dj 334c9dde21 Moved sponsors more to top of README.md 2025-01-14 18:14:23 +01:00
DJj123dj b6985f9d28 Updated LICENSE 2025-01-14 17:56:27 +01:00
DJj123dj 7d30bf24d9 The bot will now only re-compile when changed
The bot will now only re-compile when the plugins or source code changes. (computed using a hash)

This reduces the average startup time by 50%.
2025-01-14 17:53:11 +01:00
DJj123dj 138378ac31 Added new API comments (part 5) 2025-01-14 17:18:47 +01:00
DJj123dj 9a73ee0d01 Fixed bug with option description being empty
Fixed a bug which caused the /panel command to crash when using an option without any description in combination with the "describeOptionsInEmbedFields" mode enabled.
2025-01-14 16:46:22 +01:00
Jasper f26e6f5e99 Added new API comments (part 4)
Added new API comments (part 4)
2025-01-14 16:40:17 +01:00
JasperAtSchool 209041c1e5 Merge branch 'DJj123dj:dev' into dev 2025-01-14 16:38:39 +01:00
JasperAtSchool 499901fbf1 Added new API comments (part 4) 2025-01-14 16:37:43 +01:00
DJj123dj 1a1a3f3b02 Update README.md 2025-01-11 22:27:52 +01:00
DJj123dj dd5374f84c Update plugin.json 2025-01-10 23:01:03 +01:00
DJj123dj 02e8b7d0a1 Added new API comments (part 3) 2025-01-09 19:42:11 +01:00
DJj123dj ce0af7e1e9 Added new API comments (part 2) 2025-01-09 18:34:29 +01:00
Jasper e1fab310a4 Added new API comments (part 1)
Added new API comments (part 1)
2025-01-09 18:03:28 +01:00
JasperAtSchool 0615235780 Added new API comments (part 1) 2025-01-09 17:48:50 +01:00
DJj123dj abd672dd3b Small bug fixes (plugin system) 2025-01-07 19:36:29 +01:00
Jasper f05d2d7d1b Update README.md
Updated v4.0 beta announcement
2025-01-07 18:54:24 +01:00
DJj123dj e65a092bc0 Small bug fixes 2025-01-06 22:29:09 +01:00
DJj123dj 17e1902681 Updated discord.js to v14.17.2 2025-01-06 21:14:41 +01:00
DJj123dj 91657f7519 Fixed ot-sqlite-database plugin stats not working 2025-01-06 20:51:36 +01:00
DJj123dj cfa692b356 Updated README.md year to 2025 😄 2025-01-06 20:51:11 +01:00
Jasper 0604e334ed Open Ticket v3.5.9
**Improved:**
- Updated discord.js to `v14.17.2`

**Fixed:**
- discord.js PermissionOverwrites => `Supplied parameter is not a User nor a Role`
- message `"ephemeral"` is deprecated warning
- A few config checker typos
2025-01-04 09:52:57 +01:00
DJj123dj e9d20c0a14 Improvements + Updated discord.js to v14.17.2 2025-01-04 09:50:17 +01:00
DJj123dj 67465bfdf4 Bugfix: ephemeral in message reply is deprecated 2025-01-04 09:49:52 +01:00
DJj123dj a66d3aad2d Updated to v3.5.9 2025-01-04 09:36:42 +01:00
DJj123dj f2de7fc408 Bugfix: discord.js PermissionOverwrites id invalid 2025-01-04 09:35:48 +01:00
DJj123dj 0cbf991090 Update transcripts.json 2024-12-25 21:05:01 +01:00
DJj123dj 72f7cbce26 Improved default config message descriptions. 2024-12-25 18:21:37 +01:00
DJj123dj 05b4080ac5 Plugins can now use import path shortcuts
Plugins are now able to use import path shortcuts to import all API classes, utilities and the openticket globals. You can now import everything from "#opendiscord" instead of "../../src/index"
2024-12-25 18:20:58 +01:00
DJj123dj 7646b3fc35 Increased HTML Transcript log level 2024-12-15 20:11:39 +01:00
DJj123dj bf13e15d56 Disabled autoclose & delete by default 2024-12-15 19:47:20 +01:00
DJj123dj f0183c319a Added Hindi Translation (by an_developer) 2024-12-15 19:46:40 +01:00
DJj123dj c6e836455c Updated README.md Contributors 2024-12-15 19:46:10 +01:00
DJj123dj 8a6a8e527f Added 6 new plugins to README.md 2024-12-08 18:29:00 +01:00
DJj123dj 4e7d45ea07 Increased button label length to 80 characters 2024-12-08 18:28:49 +01:00
DJj123dj b7f5c7191d Fixed responder TS typo 2024-12-08 18:28:22 +01:00
DJj123dj 106cb0f718 Fixed dropdown not supporting empty emojis
Fixed a bug that caused the bot to crash when spawning a dropdown panel which includes an option without emoji.
2024-12-07 21:46:49 +01:00
DJj123dj 0c2b688862 Fixed English translation typo's 2024-12-07 13:27:24 +01:00
DJj123dj a037d76060 Fixed database ghosted unused-options bug
Fixed a problem where unused ticket options would stay in the options database in certain circumstances. Even when there is no ticket that uses the option anymore.
2024-12-07 00:34:49 +01:00
DJj123dj 1e2321313f Implemented "removeParticipantsOnClose"
Implemented the option "removeParticipantsOnClose" in the config/general.json. It wasn't implemented in the code by accident.
2024-12-06 15:59:08 +01:00
DJj123dj 91ea12a6cc Added Arabic translation 2024-12-06 15:44:58 +01:00
DJj123dj 5d86269743 Fixed stats not displaying with SQLite plugin
Lot's of stats were hidden in the embed when using the ot-sqlite-database plugin. This was caused by a recent API breaking-change that made everything async.

The problem wasn't related to the plugin itself, but the Open Ticket api. Updating the plugin is not required.
2024-12-05 22:10:02 +01:00
DJj123dj 42ff447a94 Added French & Turkish translations 2024-12-05 21:47:17 +01:00
Jasper 7627c07b71 Added French Translation (+ Catalan fixes)
Translations Updates
2024-12-05 21:42:33 +01:00
Guillem Parera Jové 147ebc90da - Fixed Catalan Translation.
- Added French Translation.
2024-12-05 21:03:14 +01:00
DJj123dj e8319cccea Updated README.md 2024-11-25 20:06:11 +01:00
DJj123dj 66ab30bf06 Livestatus source moved to github 2024-11-25 19:46:56 +01:00
DJj123dj d0ef2a9873 Language loading => async + moved livestatus file 2024-11-25 19:43:58 +01:00
DJj123dj 3e928ed06e Bug fixes for new database system 2024-11-25 19:24:48 +01:00
DJj123dj b22f7b2de7 major bug fixes & breaking change in database code
Major bug fixes and improvements have been made. There's also a breaking change for plugins using the database system. All database related functions are now async based.
2024-11-24 23:26:14 +01:00
DJj123dj 6b36b1caf6 Update plugin.json 2024-11-21 23:43:39 +01:00
DJj123dj f8da68607d Update client.ts 2024-11-18 20:50:02 +01:00
DJj123dj a31588f025 Small changes to the plugin loading system 2024-11-18 20:19:25 +01:00
DJj123dj 5a4b45aa3f Added Thai Translation (by ModsHD) 2024-11-14 17:50:06 +01:00
DJj123dj 92aa42fc7c ticket creator bug fix + added danish translation 2024-11-11 21:27:53 +01:00
DJj123dj 4022ae49c2 Major bug fixes + updated contributing guidelines 2024-11-06 20:59:00 +01:00
DJj123dj 319bbe318d Added previews + plugins to README.md 2024-10-28 13:52:14 +01:00
DJj123dj 970807d144 Added 2 new languages + small ODMain improvements 2024-10-28 12:29:33 +01:00
Jasper 929f57721b Added Estonian and Finnish translations (by iamnotmega) 2024-10-28 12:23:05 +01:00
NotMega 3469e61065 Update finnish.json 2024-10-26 19:45:34 +03:00
NotMega 3ddb03a569 Update estonian.json 2024-10-26 19:45:17 +03:00
NotMega 3fa72e07d8 Create finnish.json 2024-10-26 19:42:01 +03:00
NotMega 6423ed4b41 Create estonian.json 2024-10-26 19:41:36 +03:00
Jasper fc8a252e67 Translation Credits
Gives some credit to AI that notmega used while doing his translations
2024-10-21 18:29:12 +02:00
Ronalds ca9fe0aa77 add some credit to ai 2024-10-20 18:16:26 +03:00
DJj123dj 798ab8fab1 Update README.md 2024-10-16 14:22:17 +02:00
DJj123dj 848c968483 Fixed all currently known bugs :) 2024-10-14 20:30:45 +02:00
DJj123dj 330ea47ab9 Updated german & fixed async forEach errors 2024-10-07 22:24:02 +02:00
DJj123dj 4e10cba203 Added docker compatibility 2024-10-06 21:17:32 +02:00
DJj123dj 56e1fb3939 Fixed loopAll() async errors 2024-10-03 20:46:01 +02:00
DJj123dj 7c76be8473 Fixed suffix register error on config reload 2024-10-03 20:16:42 +02:00
DJj123dj 7fa5dca7b3 Updated Italian 2024-10-02 23:28:00 +02:00
DJj123dj 6d3f210612 Added Italian by fraden1mvp 2024-10-02 23:21:20 +02:00
DJj123dj 118161698e Fixed blacklist bug 2024-10-02 22:41:12 +02:00
DJj123dj 6a8a8dd34d languages/config improvements & bug fixes 2024-10-02 17:36:08 +02:00
DJj123dj 28f0d974e5 Fixes "successfully" typo. 2024-09-24 19:32:35 +02:00
DJj123dj 77c486e2b7 Update createTranscript.ts 2024-09-15 17:55:42 +02:00
DJj123dj 20bf25aa98 Small bug fixes + auto cycles are now debug only! 2024-09-12 21:14:26 +02:00
DJj123dj 70048fa399 Added in-code flags support for pterodactyl 2024-09-11 21:08:05 +02:00
DJj123dj 8eae88b1c6 Added 2 new plugins to README.md 2024-09-05 23:27:40 +02:00
DJj123dj 35b02e0a8f Added first plugins 2024-09-05 21:01:36 +02:00
DJj123dj 2a8e41005f Update init.ts 2024-09-05 20:58:57 +02:00
DJj123dj 85026793a4 Added Indonesian by erxg 2024-09-04 20:39:20 +02:00
DJj123dj 55bcff8030 fix ticket cmd perms, updated djs & added dump cmd 2024-09-04 20:13:13 +02:00
DJj123dj 39099a0dfe Fixed small translation mistakes 2024-09-02 16:10:02 +02:00
DJj123dj 504889a83d Fixed config checker emoji count 2024-09-01 21:30:56 +02:00
DJj123dj c1c80fc04d Small improvements 2024-09-01 20:55:50 +02:00
DJj123dj 4e030bf95b Fixed config checker bugs & added new flags 2024-09-01 18:38:08 +02:00
DJj123dj adae64bab9 Romanian & Ukrainian languages are now available! 2024-09-01 17:53:29 +02:00
DJj123dj bfa05297b2 Fixed plugins not loading on windows 2024-09-01 17:30:25 +02:00
DJj123dj 509e961446 Typescript will now be compiled without CLI 2024-09-01 16:27:25 +02:00
DJj123dj 147eae05b3 Testing pterodactyl compile support! 2024-09-01 11:58:16 +02:00
DJj123dj e410ceaa64 Added Ukrainian & Romanian languages 2024-08-31 21:55:52 +02:00
Jasper 51e1ca6fa3 Added Ukrainian by Anderskiy
upload a new language
2024-08-31 21:44:02 +02:00
Anderskiy e67c505e32 Add files via upload 2024-08-31 15:08:14 +03:00
DJj123dj 12885f63d6 Fixed spanish max string length issues 2024-08-23 23:24:59 +02:00
Jasper c49f577f7f Added Spanish by Josuens & Reddishye
Added Spanish Language
2024-08-23 23:21:09 +02:00
DJj123dj d5295a9480 Fixed bugs & added/updated languages! 2024-08-23 23:19:44 +02:00
DJj123dj 177ab95dba Fixed permission error & preparing for win build 2024-08-22 21:22:19 +02:00
DJj123dj 5e2e0417dc Update index.js 2024-08-22 16:17:22 +02:00
DJj123dj b3cd37bb4b Update index.js 2024-08-22 16:13:27 +02:00
DJj123dj 5512bc1134 Pterodactyl panel support part 2 2024-08-22 16:09:29 +02:00
DJj123dj 7dd9bf1ac0 OTv4 is now pterodactyl panel compatible! 2024-08-22 15:45:38 +02:00
Hugo Torres cd7fb7533f Add Spanish Language 2024-08-22 11:39:07 +02:00
DJj123dj 8e730fdfae Tried to fix typescript not working on pterodactyl 2024-08-22 10:28:24 +02:00
DJj123dj 1dd8c0246a Fixed some translation errors & added Catalan! 2024-08-21 22:46:54 +02:00
DJj123dj 0a69efdfe5 Added german translation by benzorich 2024-08-21 14:52:33 +02:00
Jasper 9028eaa16a Update README.md 2024-08-21 14:24:55 +02:00
DJj123dj 0c2aca7039 Open Ticket v4 Beta 2024-08-21 13:24:56 +02:00
DJj123dj 9326d0fae8 v4.0.0 preparations 2024-08-21 11:56:47 +02:00
Jasper e1f4936ae6 Open Ticket v3.5.8
**fixed:**
- updated hungarian translation (by kornel0706)
- updated turkish translation (by 0x15d3)
- updated portuguese translation (by quiradon)
- updated czech translation (by spyeye_)
- fixed "unknown interaction" on ticket creation (in certain situations)
2024-08-02 14:51:17 +02:00
DJj123dj fd3ae39150 v3.5.8 2024-08-02 14:46:53 +02:00
Jasper 1b0da061ba Update czech.json 2024-07-31 11:52:35 +02:00
Jasper 07eb8f34e9 Update turkish by 0x15d3
Update turkish.json
2024-07-31 11:44:27 +02:00
artren 64fef62bf5 Update turkish.json 2024-07-27 23:18:34 +03:00
Jasper b2be76f5b6 Update Portuguese by Quiradon
Update portuguese.json
2024-07-23 20:22:29 +02:00
QuiraDon 856ccc10b9 Update portuguese.json 2024-07-23 14:27:08 -03:00
Jasper 8c6681f025 Open Ticket v3.5.7
Open Ticket v3.5.7
2024-07-02 19:40:06 +02:00
DJj123dj cc21e28470 Open Ticket v3.5.7 (Part 2) 2024-07-02 19:36:42 +02:00
DJj123dj 7815400472 Open Ticket v3.5.7 (Part 1) 2024-07-01 09:46:16 +02:00
Jasper fda8a397d6 Added 8 languages from iamnotmega (Part 2)
Added 8 new languages
2024-07-01 09:39:17 +02:00
mega ae306332bb Update README.md 2024-07-01 10:30:30 +03:00
mega bc46d4ab46 Update checker.js 2024-07-01 10:17:06 +03:00
mega b0b4e21aff Create vietnamese.json 2024-07-01 07:18:19 +03:00
mega fb3764eefb Create finnish.json 2024-07-01 07:17:43 +03:00
mega d5efe06fe5 Delete language/i.json 2024-07-01 07:15:32 +03:00
mega cdb2673217 Create i.json 2024-07-01 07:14:13 +03:00
mega 6018a183fb Create swedish.json 2024-07-01 07:12:06 +03:00
Jasper 73f9f4037f Added 5 languages from iamnotmega (Part 1)
Added 5 new languages
2024-06-30 19:59:59 +02:00
mega b5b537e85e Create japanese.json 2024-06-30 20:19:50 +03:00
mega 6ebeb7a93c Create korean.json 2024-06-30 20:19:06 +03:00
mega 7584c25e93 Create traditionalchinese.json 2024-06-30 20:12:40 +03:00
mega 94b3788cfb Create simplifiedchinese.json 2024-06-30 20:10:59 +03:00
mega e7d9ad374e Update estonian.json 2024-06-30 20:09:00 +03:00
mega 0e597232f0 Create estonian.json 2024-06-30 20:01:53 +03:00
Jasper acc89990c2 Open Ticket v3.5.6
Open Ticket v3.5.6
2024-05-31 16:42:41 +02:00
DJj123dj ee9f8eaca1 v3.5.6 bug fix update 2024-05-31 16:36:08 +02:00
Jasper ae8a8d1b14 v3.5.5 hotfix (instant push)
v3.5.5 hotfix (instant push)
2024-05-12 11:14:40 +02:00
DJj123dj 38afb9c2a6 v3.5.5 hotfix (instant push) 2024-05-12 11:14:02 +02:00
Jasper 5bdb7941b6 Open Ticket v3.5.5
Open Ticket v3.5.5
2024-05-10 14:08:11 +02:00
DJj123dj 01c1f3150e v3.5.5 push 2 2024-05-04 14:36:36 +02:00
DJj123dj e524cccd19 v3.5.5 push 1 2024-05-04 14:22:41 +02:00
Jasper ede102bddf Add Latvian Translation (Part 4) 2024-04-27 11:22:05 +02:00
Jasper ab5d5c06be Latvian Translation (Part 3) 2024-04-27 11:17:31 +02:00
Jasper 355f078ee5 Add Latvian translation (Part 2) 2024-04-27 11:14:30 +02:00
Jasper c207560743 Add Latvian translation (Part 1)
Still requires checker.js validation & testing
2024-04-27 11:12:46 +02:00
Ronalds b29dfaeaae Create latvian.json 2024-04-27 12:06:57 +03:00
Jasper 1710111fcb Open Ticket Sponsoring!
Open Ticket Sponsoring!
2024-04-22 21:25:43 +02:00
Jasper 805c6b8e55 Open Ticket Sponsoring!
Lets goo! Open Ticket has sponsorships!
2024-04-22 21:24:55 +02:00
Jasper d0ab311da4 Fixed readme
Fixed readme
2024-04-08 23:30:21 +02:00
Jasper 92a3671768 Fixed README documentation links 2024-04-08 23:28:53 +02:00
Jasper 71074e1afe Open Ticket v3.5.4
Open Ticket v3.5.4
2024-04-04 15:38:22 +02:00
DJj123dj e80ce1a64a v3.5.4 push 2 2024-04-04 14:06:48 +02:00
DJj123dj 5dfbce1856 v3.5.4 push 1 2024-03-27 14:22:35 +01:00
Jasper 407e56a806 Open Ticket v3.5.3
Open Ticket v3.5.3
2024-02-05 21:34:56 +01:00
DJj123dj e0f42834e5 v3.5.3 push 2 2024-02-05 21:32:02 +01:00
DJj123dj d03abd9eeb v3.5.3 push 1 2024-01-27 20:32:27 +01:00
Jasper 466a4aea81 Open Ticket v3.5.2
Open Ticket v3.5.2
2024-01-10 17:12:37 +01:00
DJj123dj 9d96d11cd3 v3.5.2 2024-01-10 17:11:46 +01:00
Jasper e3b99e656e Open Ticket v3.5.1!
Open Ticket v3.5.1!
2023-12-25 19:01:13 +01:00
DJj123dj 07e2a68d06 v3.5.1 push 2 (fix button color bug) 2023-12-25 18:56:28 +01:00
DJj123dj 795ca4f981 v3.5.1 push 1 (translation update) 2023-12-23 14:19:36 +01:00
Jasper 5231129278 Open Ticket v3.5.0
Open Ticket v3.5.0
2023-12-17 14:13:30 +01:00
DJj123dj f62bc7adf9 v3.5.0 last push 2023-12-17 14:12:22 +01:00
DJj123dj 5de6b1e906 v3.5.0 translation push 2 + improved thai 2023-12-16 18:00:54 +01:00
DJj123dj 62413505d6 v3.5.0 translation push 1 + bug fix 2023-12-16 17:46:34 +01:00
DJj123dj 20b617f6eb v3.5.0 push 5 2023-12-14 21:37:29 +01:00
DJj123dj 94510bbfb0 v3.5.0 push 4 2023-12-13 21:39:18 +01:00
DJj123dj d51511fdb5 v3.5.0 push 3 2023-12-13 12:27:01 +01:00
DJj123dj 3447a37603 v3.5.0 push 2 2023-12-12 21:32:15 +01:00
DJj123dj 4b17aa640f v3.5.0 push 1 2023-11-29 19:29:27 +01:00
Jasper 3b7674f1a5 Open Ticket v3.4.4
v3.4.4
2023-11-09 20:37:10 +01:00
DJj123dj 7de9339da3 v3.4.4 2023-11-09 20:36:21 +01:00
Jasper e2e1e19bc8 Open Ticket v3.4.3
Open Ticket v3.4.3
2023-08-30 17:23:21 +02:00
DJj123dj 5f19adf561 v3.4.3 2023-08-30 17:22:26 +02:00
Jasper 1bb70745ea Open Ticket v3.4.2
Open Ticket v3.4.2
2023-08-11 11:23:50 +02:00
DJj123dj 589bbe5cd5 v3.4.2 2023-08-11 11:22:25 +02:00
Jasper 447fddea56 Open Ticket v3.4.1
Open Ticket v3.4.1
2023-06-17 12:20:40 +02:00
DJj123dj bf7a003799 Update slash.json 2023-06-17 12:18:41 +02:00
DJj123dj 6115ab1cc8 Merge branch 'dev' of https://github.com/DJj123dj/open-ticket into dev 2023-06-17 12:16:26 +02:00
DJj123dj c2307fd1ed bug fix update v3.4.1 2023-06-17 12:16:23 +02:00
Jasper 2a3850c3cc Merge pull request #71 from NoOneNook/dev
Norwegian in slash.json | Dev- branch
2023-06-07 13:01:35 +02:00
NoOneNook 688c40ce7b Update slash.json
Translated slash.json into Norwegian
2023-06-07 03:16:44 +02:00
Jasper dee2a21be9 Update reopen.js 2023-05-19 16:23:12 +02:00
Jasper d7ae040d60 Removed readme warning
Update README.md
2023-05-19 15:03:22 +02:00
Jasper 7b6202985a Update README.md 2023-05-19 15:02:43 +02:00
Jasper a2f2c601a5 Open Ticket 3.4.0!
Open Ticket 3.4.0!
2023-05-19 15:02:09 +02:00
Jasper b27016df2e Merge branch 'main' into dev 2023-05-19 15:00:47 +02:00
DJj123dj 6341f2f71b v3.4.0 last push 2023-05-19 14:55:29 +02:00
DJj123dj 56a5b9c7d0 Merge branch 'dev' of https://github.com/DJj123dj/open-ticket into dev 2023-05-17 21:43:59 +02:00
DJj123dj f608cb71ce v3.4.0 push 2 (html transcripts v2) 2023-05-17 21:43:57 +02:00
Jasper 7c7c325307 temp fix for bugs 2023-05-01 13:11:34 +02:00
Jasper 832021d72a Update russian.json
Update russian.json
2023-04-30 12:23:11 +02:00
Apexo 030554a7f5 Update russian.json 2023-04-30 13:17:08 +03:00
Jasper ada5ea0c5d temp fix for "forEach" bug
This is a temporary fix for the "Cannot read properties of undefined (reading 'forEach')" bug. This will be fixed in a better way in v3.4.0
2023-04-30 12:11:31 +02:00
DJj123dj fb6b891835 v3.4.0 push 1: fixed all currently known bugs 2023-04-29 09:15:56 +02:00
Jasper 739ad81f3f v3.3.3 MAJOR FIX!
v3.3.3 MAJOR FIX!
2023-04-22 16:53:32 +02:00
DJj123dj a6f67a9452 v3.3.3 MAJOR FIX! 2023-04-22 16:52:43 +02:00
Jasper 56a6540663 v3.3.2 extra
v3.3.2 extra
2023-04-19 18:45:55 +02:00
DJj123dj 5f8812d261 v3.3.2 push 2 2023-04-19 18:45:12 +02:00
Jasper 7a3dcf4c42 Open Ticket v3.3.2
Open Ticket v3.3.2
2023-04-19 18:43:38 +02:00
DJj123dj 7cebd4dd6a Merge branch 'dev' of https://github.com/DJj123dj/open-ticket into dev 2023-04-19 18:39:23 +02:00
DJj123dj 27912a0c37 v3.3.2 2023-04-19 18:39:21 +02:00
Jasper 67871d885a Update dev
update dev branch
2023-03-23 14:22:29 +01:00
Jasper 1bd0d013ed Update config.json 2023-03-23 14:21:39 +01:00
Jasper a074a17519 Update issue templates 2023-03-23 14:15:25 +01:00
Jasper 67af96ef5c Update SECURITY.md 2023-03-23 14:10:38 +01:00
Jasper a041f28cf7 Update CONTRIBUTING.md 2023-03-23 14:10:03 +01:00
Jasper a8c9c2ea8d Create SECURITY.md 2023-03-23 13:35:08 +01:00
Jasper 8748301b04 Open Ticket v3.3.1
Open Ticket v3.3.1
2023-03-23 12:51:58 +01:00
DJj123dj 2d7a7b5728 v3.3.1 push 4 2023-03-23 12:46:53 +01:00
DJj123dj 0807ca884c Update ticketAutoclose.js 2023-03-21 20:10:06 +01:00
DJj123dj 0ead037fa8 v3.3.1 push 3 (autoclose spam fix) 2023-03-21 19:49:12 +01:00
DJj123dj 4287c11bf1 v3.3.1 push 2 (fixed dropdown crash) 2023-03-21 17:38:15 +01:00
DJj123dj 69fdc7ccf0 v3.3.1 BUG FIXES! (+ added Slovenian) 2023-03-20 20:01:09 +01:00
Jasper 6c213306b6 Add Slovenian language
add slovenian language
2023-03-19 12:51:12 +01:00
n1kkec 4096e8196d feat(language): add slovenian language 2023-03-19 12:47:24 +01:00
Jasper 94ee890848 Open Ticket v3.3!
Open Ticket v3.3!
2023-03-19 12:34:23 +01:00
DJj123dj 4dced819a3 v3.3 push 7 (added autoclose) 2023-03-19 12:29:24 +01:00
DJj123dj 1159af9fa9 v3.3 push 6 (added ticket claiming) 2023-03-18 11:48:01 +01:00
DJj123dj 67d429c52b v3.3 push 5 2023-03-16 20:58:08 +01:00
DJj123dj f67af805c1 v3.3 push 4 (1 entire afternoon of work)
My TODO list is too big :)
2023-03-15 20:57:14 +01:00
DJj123dj 944032f690 v3.3 push 3 (lots of small changes 😄) 2023-03-13 20:22:23 +01:00
DJj123dj ee248e86bc Merge branch 'dev' of https://github.com/DJj123dj/open-ticket into dev 2023-03-12 11:22:55 +01:00
DJj123dj b171bce62b v3.3 push 2 (added Polish) 2023-03-12 11:22:53 +01:00
Jasper df0bce0189 Delete test.txt 2023-03-01 14:31:36 +01:00
Jasper 2630aa899f Create test.txt 2023-03-01 14:03:50 +01:00
DJj123dj dba370d66e v3.3 push 1 & added turkish language 2023-02-25 21:02:31 +01:00
Jasper d0bcf26b93 Open Ticket v3.2.2
new update :)
2023-02-24 21:58:40 +01:00
DJj123dj 65f82171d3 v3.2.2 push 4 2023-02-24 21:48:59 +01:00
DJj123dj 6e730f058d github files moved to new directory 2023-02-24 15:13:33 +01:00
DJj123dj 4702c633ec v3.2.2 push 2 2023-02-24 15:02:53 +01:00
DJj123dj dc14a39c4e v3.2.2 push 1 2023-02-24 14:49:36 +01:00
Jasper 05c97909d4 Merge pull request #49 from DJj123dj/translation
Translation
2023-02-13 21:18:59 +01:00
Jasper b3c4c2f6e8 Merge pull request #47 from Apexo01/main
Added russian language
2023-02-13 21:01:19 +01:00
Jasper e0e678bee0 Merge pull request #48 from DJj123dj/main
test
2023-02-13 20:59:04 +01:00
Jasper 1b01b1703f Merge branch 'dev' into main 2023-02-13 20:57:43 +01:00
Jasper 26539360c6 Merge pull request #46 from quiradon/patch-2
Update portuguese.json
2023-02-13 20:54:30 +01:00
Apexo 627c461f64 Update README.md 2023-02-13 22:30:18 +03:00
Apexo 2e40dc0468 Added russian language 2023-02-13 22:18:07 +03:00
Jasper fa57b9a93f Update checker.js 2023-02-12 15:09:27 +01:00
QuiraDon 930452155b Update portuguese.json
some fixes on what was missing.
2023-02-09 02:20:09 -03:00
DJj123dj e70f22162d Merge branch 'dev' of https://github.com/DJj123dj/open-ticket into dev 2023-02-08 14:27:40 +01:00
DJj123dj d5b0a0f3c6 /change bugfix 2023-02-08 14:27:39 +01:00
Jasper c43081e05d Merge pull request #45 from quiradon/patch-1 2023-02-08 07:09:44 +01:00
QuiraDon 8c4bf735f1 Update Portugueses Lang
I completed the translation into Portuguese that was missing a few things.
2023-02-07 23:33:26 -03:00
Jasper 3a20c4707b open ticket v3.2.1
Update dev branch
2023-02-07 17:03:22 +01:00
Jasper 9a7e563c57 Update dev branch 2023-02-07 17:02:02 +01:00
Jasper 72b4f43a25 Open Ticket v3.2.1
Bug fix update
2023-02-07 17:01:14 +01:00
DJj123dj 5fec028cc9 Merge branch 'dev' of https://github.com/DJj123dj/open-ticket into dev 2023-02-07 16:59:26 +01:00
DJj123dj 81300303e5 Update danish.json 2023-02-07 16:59:19 +01:00
Jasper 8a1ea1c856 Update README.md 2023-02-06 22:08:11 +01:00
Jasper 8a9d63bf8b Merge pull request #41 from Sank34/patch-2
French Translation New
2023-02-06 22:07:18 +01:00
DJj123dj 208b365276 Update czech.json 2023-02-06 21:49:42 +01:00
Andrei abb64a0575 French Translation New 2023-02-05 23:32:42 +02:00
DJj123dj c930140540 Update german.json 2023-02-05 22:17:19 +01:00
DJj123dj 294c4d3f2b Merge branch 'dev' of https://github.com/DJj123dj/open-ticket into dev 2023-02-05 16:22:47 +01:00
DJj123dj 28e7d48e7e v3.2.1 push 3 2023-02-05 16:22:44 +01:00
Jasper bad278e681 Merge pull request #40 from DJj123dj/readme-edit
Edited readme
2023-02-02 18:16:52 +01:00
Jasper 2e2542d064 added documentation below 2023-02-02 18:15:42 +01:00
Jasper 2c48da45ae readme-update step 1 2023-02-02 18:11:46 +01:00
Jasper e1232a559e Added translation from Sank34/patch-1
Romanian for v3.2.1
2023-01-28 12:18:17 +01:00
Andrei 3d58475461 Update to the new Version 2023-01-28 13:16:17 +02:00
DJj123dj f702b199da v3.2.1 TRANSLATION! 2023-01-28 11:51:10 +01:00
DJj123dj ea1604a805 v3.2.1 push 1 (fixed /change bugs) 2023-01-25 16:28:19 +01:00
DJj123dj f8bc3d9e12 bug fix: tickets couldn't close in some situations 2023-01-19 17:42:44 +01:00
Jasper af35f83291 Open Ticket v3.2.0
Open Ticket v3.2.0
2023-01-18 21:48:13 +01:00
DJj123dj 39fec94ead changed readme.md 2023-01-18 21:47:32 +01:00
DJj123dj 1b8468330e v3.2 last push 2023-01-18 21:44:56 +01:00
DJj123dj b698c89a89 v3.2 push 2 2023-01-17 22:25:20 +01:00
DJj123dj 7ed2d7bcc7 v3.2 push 1 NOT WORKING YET!!! 2023-01-17 17:34:51 +01:00
Jasper f2ddaa5fd4 Merge pull request #36 from DJj123dj/dev
Open Ticket v3.1.0
2022-12-31 11:47:35 +01:00
DJj123dj fc50a8e83f v3.1 last push 2022-12-31 11:42:33 +01:00
DJj123dj 5bece3357d v3.1.0 push 3 2022-12-27 17:41:54 +01:00
Jasper 97d1489558 Delete .DS_Store 2022-12-27 17:37:23 +01:00
Jasper a211cef1f6 Delete database.json 2022-12-27 17:36:52 +01:00
DJj123dj ae002e168b v3.1.0 push 2 2022-12-27 17:35:01 +01:00
DJj123dj 86a5a1a2ca v3.1.0 push 1 2022-12-27 11:38:32 +01:00
Jasper 23ebc14b8b Merge pull request #35 from DJj123dj/dev
Open Ticket v3.0.1
2022-12-10 13:38:08 +01:00
DJj123dj 3a5768a1b1 added new README image 2022-12-10 13:37:02 +01:00
DJj123dj 33c3803ca8 openticket v3.0.1 2022-12-10 12:59:44 +01:00
DJj123dj f3613fb674 update to discord.js 14.7 2022-12-05 19:32:11 +01:00
DJj123dj f1dc8cbcf5 changed some stuff 2022-11-24 21:51:13 +01:00
Jasper a365c4b69f Update issue templates 2022-10-10 20:01:10 +02:00
Jasper 687372481a Update issue templates 2022-10-10 19:54:28 +02:00
Jasper 1bc8bde922 Update issue templates 2022-10-10 19:49:16 +02:00
Jasper 4b8074c520 Merge pull request #29 from DJj123dj/dev
Open ticket 3.0!
2022-10-07 16:36:20 +02:00
Jasper 1d5830975f Merge branch 'main' into dev 2022-10-07 16:35:58 +02:00
DJj123dj 95bc1f4fbf 3.0 update! 2022-10-07 16:32:29 +02:00
DJj123dj bfc02611c7 Create slash.json 2022-10-05 20:38:06 +02:00
DJj123dj e4c1e2559e 3.0 public beta 4 2022-10-05 20:25:35 +02:00
DJj123dj 69b669956e 3.0 public beta 3 2022-10-01 12:08:42 +02:00
DJj123dj 893a7c5b1f 3.0 public beta 2 2022-10-01 11:14:37 +02:00
DJj123dj ed9c98e2f0 3.0 update first beta 2022-09-24 08:56:34 +02:00
Jasper 62d950b1a6 Update checker.js 2022-09-14 20:49:20 +02:00
DJj123dj 69de612d1e added close with reason 2022-09-03 13:20:00 +02:00
Jasper 5494e112c0 Create CONTRIBUTING.md 2022-08-30 15:55:08 +02:00
Jasper cd2c08303e Merge pull request #28 from DJj123dj/add-code-of-conduct
Create CODE_OF_CONDUCT.md
2022-08-30 15:50:58 +02:00
Jasper a8619e448a Create CODE_OF_CONDUCT.md 2022-08-30 15:49:57 +02:00
DJj123dj c990257c02 v2.5.1 2022-08-16 13:00:17 +02:00
Jasper e7f05b4ed5 Merge pull request #26 from DJj123dj/dev
Update 2.5!
2022-08-15 15:03:37 +02:00
DJj123dj 697594b311 added french & czech translation 2022-08-15 14:55:34 +02:00
DJj123dj 6823b96114 fixed the last bugs & added czech translation 2022-08-14 22:13:51 +02:00
DJj123dj 0845390569 v2.5 (added translation for 2 new languages) 2022-08-14 21:23:04 +02:00
DJj123dj 568b2c9bee v2.5.0 push 2 2022-08-12 11:20:42 +02:00
DJj123dj 034247ea99 v2.5.0 first push 2022-08-10 19:35:10 +02:00
Jasper ad10a98f33 Merge pull request #24 from DJj123dj/dev
v2.4.0 pre release
2022-08-02 14:15:24 +02:00
DJj123dj 8aee358081 last push 2022-08-01 18:23:01 +02:00
DJj123dj e2f237e7b6 api events ready, now only the actions 2022-08-01 18:00:54 +02:00
DJj123dj 210923d29e v2.4.0 push 5 (almost the last one) 2022-07-29 19:41:25 +02:00
DJj123dj a69f2ee5a1 v2.4.0 push 4 2022-07-29 18:17:26 +02:00
DJj123dj ffa075d177 v2.4.0 push 3 2022-07-26 16:33:56 +02:00
DJj123dj e7a331b969 v2.4.0 push 2 (first working api) 2022-07-26 14:51:51 +02:00
DJj123dj 6b32fc9d5d v2.4.0 push 1 2022-07-26 12:25:33 +02:00
Jasper 7603dbcc47 Merge pull request #23 from DJj123dj/dev
fixed ANOTHER bug
2022-07-25 21:01:58 +02:00
DJj123dj 512e564c60 fixed ANOTHER bug 2022-07-25 21:01:36 +02:00
Jasper 5a731e6336 Merge pull request #22 from DJj123dj/dev
small bug fix
2022-07-25 20:54:50 +02:00
DJj123dj d02bf2b826 small bug fix 2022-07-25 20:54:21 +02:00
Jasper 2603a7bdd0 Merge pull request #21 from DJj123dj/dev
v2.3.3
2022-07-25 20:10:15 +02:00
DJj123dj c1ba677b82 v2.3.3 2022-07-25 20:09:52 +02:00
Jasper 7e6ac6a4b9 Merge pull request #20 from DJj123dj/dev
v2.3.2
2022-07-23 14:41:27 +02:00
DJj123dj 0ee9a312eb v2.3.2 2022-07-23 14:39:55 +02:00
Jasper d282a516e6 Merge pull request #19 from DJj123dj/dev
v2.3.1
2022-07-21 11:57:04 +02:00
DJj123dj 9638179d45 v2.3.1 push 1 2022-07-21 10:32:36 +02:00
Jasper 30d45ddc39 Merge pull request #18 from DJj123dj/dev
little change i forgot
2022-07-19 16:44:23 +02:00
DJj123dj 2c08ca7245 little change i forgot 2022-07-19 16:43:44 +02:00
Jasper 3d5b1f6e8d Merge pull request #17 from DJj123dj/dev
Update 2.3.0
2022-07-19 16:41:42 +02:00
DJj123dj edc8d4bc44 almost ready for discord.js 14! 2022-07-19 16:40:18 +02:00
DJj123dj c57507cea9 open ticket v2.3 push 1 (doesn't work yet) 2022-07-19 11:57:14 +02:00
Jasper ace46deb52 Merge pull request #16 from DJj123dj/dev
2.2.0 update
2022-07-18 09:37:22 +02:00
DJj123dj fc09858f92 2.2.0 update
bug fixes & 2 new languages
2022-07-18 09:14:25 +02:00
Jasper 1b7767641e Merge pull request #14 from DJj123dj/dev
important bug fix update v2.1.2
2022-07-01 08:20:20 +02:00
DJj123dj 76d491d27c important bug fix update v2.1.2 2022-07-01 08:19:35 +02:00
Jasper 06b57f18f1 Merge pull request #13 from DJj123dj/dev
Dev
2022-06-28 11:53:25 +02:00
DJj123dj 5f5699f160 v2.1.1 last push 2022-06-28 11:52:55 +02:00
DJj123dj 702f225983 fixed the "startsWith" bug 2022-06-28 08:43:14 +02:00
DJj123dj aab5a9c241 removed the "hoi" bug 2022-06-27 14:19:54 +02:00
Jasper 59e756210e Merge pull request #12 from DJj123dj/dev
Open Ticket v2.1.0 Pull Request
2022-06-27 09:32:27 +02:00
DJj123dj a8bb210eca added large text for the fun! 2022-06-27 09:23:16 +02:00
DJj123dj e3ee51d9fb last push 2022-06-26 20:42:21 +02:00
DJj123dj a6e107c12a almost the last push for v2.1.0 2022-06-26 20:25:33 +02:00
DJj123dj a49b53e2d6 added something sneaky 😉 2022-06-24 11:55:46 +02:00
DJj123dj 0bbde2018c every file now supports translation & the languages "custom & dutch" are added
v2.1.0 push 9
2022-06-23 19:59:35 +02:00
DJj123dj 15825d0da6 most of the files now support translation
v2.1.0 push 8
2022-06-23 16:07:49 +02:00
DJj123dj 9d19c7053b v2.1.0 push 7
Added LanguageManager.js (yep this is for language stuff in the future)
2022-06-21 12:11:09 +02:00
DJj123dj 09f9944cf7 v2.1.0 push 6
Added english.json
2022-06-15 18:29:50 +02:00
DJj123dj 6cd6799712 Update .DS_Store 2022-06-13 22:21:16 +02:00
DJj123dj 44515fc6b4 Update index.js 2022-06-13 21:06:53 +02:00
DJj123dj 4c947b138f v2.1.0 push 5 2022-06-09 21:36:33 +02:00
DJj123dj 428f4a9e92 Update ticketReopener.js 2022-06-09 20:45:08 +02:00
DJj123dj a274576589 v2.1.0 push 4
Added re-open mechanics
2022-06-09 20:43:41 +02:00
DJj123dj 2410743a46 Update .gitignore 2022-06-09 20:24:29 +02:00
DJj123dj 89a44f3f2f v2.1.0 push 3 2022-06-09 20:23:34 +02:00
DJj123dj 1728c3653a v2.1.0 push 2 2022-06-08 18:07:42 +02:00
DJj123dj 62a1f0f8c1 v2.1.0 push 1
changed some things
2022-06-08 17:13:53 +02:00
Jasper 8875c9ff01 Merge pull request #8 from DJj123dj/dev
Update README.md
2022-05-07 17:00:47 +02:00
DJj123dj 9b378caff5 Update README.md 2022-05-07 17:00:26 +02:00
Jasper 821a49cb0b Merge pull request #7 from DJj123dj/dev
Update README.md
2022-05-07 16:59:54 +02:00
DJj123dj ebacb92b99 Update README.md 2022-05-07 16:58:58 +02:00
Jasper e1eb3f252b Merge pull request #6 from DJj123dj/dev
Dev to Main (version 2.0)
2022-05-07 14:31:13 +02:00
Jasper 49405b848e Merge branch 'main' into dev 2022-05-07 14:30:53 +02:00
DJj123dj 5dcd36d290 the final push 2022-05-07 14:25:01 +02:00
DJj123dj d00a26a1e0 added reactionRoles & changed links to wiki
The reaction roles work now!
2022-05-06 17:27:04 +02:00
DJj123dj 8c9eddd4a1 added dynamic database & everything is now v2.0.0
Changed everything from v1.4.0 to v2.0.0 & added the dynamic database system
2022-05-05 17:52:42 +02:00
DJj123dj 046cef0088 updated the button system for new types of buttons
You can now also create "website" & "role" tickets. more on these types in the following updates
2022-05-04 20:02:51 +02:00
DJj123dj 0f143c7ebb deleted the old commands 2022-05-04 19:02:59 +02:00
Jasper 4cc12eb727 Delete .DS_Store 2022-05-04 19:02:20 +02:00
DJj123dj e3e5c04096 added the "add" & "remove" commands 2022-05-04 18:42:33 +02:00
DJj123dj eddbcf9acd Update TEMPDOCS.md 2022-05-04 18:11:11 +02:00
DJj123dj 3c2f39df9c Update README.md 2022-05-04 18:08:09 +02:00
Jasper ca4532931b Update README.md 2022-05-04 18:07:23 +02:00
DJj123dj 14ad1f48f3 test discord webhook 2022-05-04 18:03:35 +02:00
DJj123dj fa8741aef8 test discord webhook 2022-05-04 18:00:40 +02:00
DJj123dj 130fd98d0c bug fix
fixed not starting up because of a temporary config file
2022-05-04 15:26:40 +02:00
DJj123dj a9770ec66c Update slashEnable.js 2022-05-02 15:02:27 +02:00
DJj123dj f163769de4 updated cleardatabase with chalk 2022-05-02 14:54:52 +02:00
DJj123dj 07de112f32 added some new commands
- rename
- close
- delete
2022-05-02 12:41:15 +02:00
DJj123dj 8e7a98b810 created cleardatabase system 2022-05-02 11:35:41 +02:00
DJj123dj 92c1e8fce0 Update .gitignore 2022-05-02 11:21:45 +02:00
DJj123dj 4e73626072 created devConfig.json 2022-05-02 11:20:04 +02:00
DJj123dj 943e7b6fef removed token :) 2022-05-02 11:13:18 +02:00
DJj123dj af8d6351af 1.4.0 beta 2022-05-02 11:07:56 +02:00
DJj123dj 5fc3ba3279 Update checker.js 2022-04-02 17:03:13 +02:00
DJj123dj 6df23d84bc v1.3.2
This is the first stable version of open-ticket 1.3
2022-04-02 16:38:00 +02:00
DJj123dj 8cab4cc686 v1.3.1
Bug fixes
2022-03-31 18:38:49 +02:00
DJj123dj 21e3a88b87 v1.3.0
Changes in changelog
2022-03-30 17:09:55 +02:00
DJj123dj 1451769ebf Update README.md 2022-03-24 11:40:28 +01:00
DJj123dj da3017ff95 Update README.md 2022-03-24 11:40:01 +01:00
DJj123dj 43186c8a0e Update README.md 2022-03-24 11:37:44 +01:00
DJj123dj 63632e3a66 added new stuff to readme file 2022-03-23 20:45:33 +01:00
DJj123dj 8981c9e60e v1.2.2
some bugs fixed!
2022-03-04 10:20:47 +01:00
206 changed files with 45744 additions and 675 deletions
Vendored
BIN
View File
Binary file not shown.
+328
View File
@@ -0,0 +1,328 @@
//@ts-check
const fs = require("fs")
/*////// OT DOCS GENERATOR ////////
What does this file do?:
Well, this file will parse the result returned from typedoc (the documentation generator).
The resulting file will then be used in the OT Docs markdown generator to generate the Open Ticket API Reference.
In short:
This file generates the documentation for Open Ticket :)
Contributing:
If you want to contribute to the Open Ticket Docs, please run the following command:
> npm run docs
This will give you a "result.json" file which can then be used in the OT Docs.
Further instructions can be found there.
/////////////////////////////////*/
if (!fs.existsSync(".docs/typedoc-result.json")){
console.log("Unable to generate documentation! Run typedoc first!")
process.exit(1)
}
const result = JSON.parse(fs.readFileSync(".docs/typedoc-result.json").toString())
const availableElements = []
const skipElementNames = [
"#opendiscord-types"
]
const handleFunction = (memberType) => {
if (!memberType || !memberType.signatures || !Array.isArray(memberType.signatures)) return {type:"unknown"}
//try to get signature
let signature = memberType.signatures.find((s) => !s.typeParameters)
if (!signature) signature = memberType.signatures[0]
if (!signature) return {type:"unknown"}
//try to get comment
let comment = signature.comment
if (!comment) comment = memberType.signatures.find((s) => s.comment)?.comment
if (!comment) comment = null
const signatureInherited = signature.flags.isInherited ? true : false
const signatureComment = comment ? comment.summary?.map((c) => c.text).join("") : null
const signatureParameters = signature.parameters?.map((p) => {
return {name:p.name,details:handleType(p.type)}
}) ?? []
const signatureReturns = handleType(signature.type)
return {type:"function",inherited:signatureInherited,comment:signatureComment,parameters:signatureParameters,returns:signatureReturns}
}
const handleObject = (memberType) => {
if (!memberType || !memberType.children || !Array.isArray(memberType.children)) return {type:"unknown"}
const propertyIds = memberType.groups?.find((g) => g.title == "Properties")?.children ?? []
const methodIds = memberType.groups?.find((g) => g.title == "Methods")?.children ?? []
const objectChildren = []
for (const member of (memberType.children ?? [])){
const memberName = member.name
const memberType = propertyIds.includes(member.id) ? "property" : methodIds.includes(member.id) ? "method" : "other"
let memberComment = member.comment?.summary?.map((c) => c.text).join("") ?? null
const rawMemberSource = member.sources ? (member.sources[0] ?? null) : null
let memberSource = rawMemberSource ? rawMemberSource.fileName+":"+rawMemberSource.line+":"+rawMemberSource.character : null
let memberDetails = null
if (memberType == "property"){
//INTERFACE => PROPERTY
memberDetails = handleType(member.type)
}else if (memberType == "method"){
//INTERFACE => METHOD
memberDetails = handleFunction(member)
memberComment = memberDetails.comment
}
objectChildren.push({
type:memberType,
name:memberName,
comment:memberComment,
source:memberSource,
details:memberDetails
})
}
return {type:"object",children:objectChildren}
}
const handleType = (memberType) => {
if (!memberType || !memberType.type) return {type:"unknown"}
else if (memberType.type == "intrinsic") return {type:"primitive",name:memberType.name}
else if (memberType.type == "array") return {type:"array",child:handleType(memberType.elementType)}
else if (memberType.type == "union") return {type:"union",children:memberType.types.map((t) => handleType(t))}
else if (memberType.type == "intersection") return {type:"intersection",children:memberType.types.map((t) => handleType(t))}
else if (memberType.type == "reference"){
const referenceTypeArguments = (memberType.typeArguments) ? memberType.typeArguments.map((ta) => handleType(ta)) : null
let referenceType = availableElements.find((el) => el.name == memberType.name)?.type ?? null
if (referenceType){
//member is known type (from Open Ticket)
return {type:"reference",name:memberType.name,target:referenceType,typeArguments:referenceTypeArguments}
}else if (memberType.package){
//member is type from node.js or another package
if (memberType.package == "typescript") return {type:"internal",name:memberType.name,typeArguments:referenceTypeArguments}
if (memberType.package == "open-ticket" && memberType.refersToTypeParameter) return {type:"typeParam",name:memberType.name,typeArguments:referenceTypeArguments}
else return {type:"external",package:memberType.package,name:memberType.name,typeArguments:referenceTypeArguments}
}else return {type:"unknown"}
}
else if (memberType.type == "literal") return {type:"literal",name:(typeof memberType.value == "string") ? JSON.stringify(memberType.value) : String(memberType.value)}
else if (memberType.type == "typeOperator"){
if (memberType.operator == "keyof") return {type:"keyof",child:handleType(memberType.target)}
else if (memberType.operator == "readonly") return {type:"readonly",child:handleType(memberType.target)}
else if (memberType.operator == "unique") return {type:"unique",child:handleType(memberType.target)}
}
else if (memberType.type == "conditional") return {type:"conditional",checker:handleType(memberType.checkType),extends:handleType(memberType.extendsType),trueValue:handleType(memberType.trueType),falseValue:handleType(memberType.falseType)}
else if (memberType.type == "indexedAccess") return {type:"index",index:handleType(memberType.indexType),object:handleType(memberType.objectType)}
else if (memberType.type == "mapped") return {type:"mapped",parameterName:memberType.parameter,parameter:handleType(memberType.parameterType),template:handleType(memberType.templateType)}
else if (memberType.type == "optional") return {type:"optional",child:handleType(memberType.elementType)}
else if (memberType.type == "predicate") return {type:"predicate",name:memberType.name,target:handleType(memberType.targetType)}
else if (memberType.type == "query") return {type:"query",target:handleType(memberType.queryType)}
else if (memberType.type == "rest") return {type:"rest",child:handleType(memberType.elementType)}
else if (memberType.type == "tuple") return {type:"tuple",children:memberType.elements.map((t) => handleType(t))}
else if (memberType.type == "templateLiteral") return {type:"template",head:memberType.head,tails:memberType.tail.map((t) => {
return {element:handleType(t[0]),text:t[1]}
})}
else if (memberType.type == "reflection" && memberType.declaration && memberType.declaration.signatures && memberType.declaration.signatures[0]){
return handleFunction(memberType.declaration)
}
else if (memberType.type == "reflection"){
return handleObject(memberType.declaration)
}
else return {type:"unknown"}
}
for (const file of result.children){
const classIds = file.groups?.find((g) => g.title == "Classes")?.children ?? []
const interfaceIds = file.groups?.find((g) => g.title == "Interfaces")?.children ?? []
const typeIds = file.groups?.find((g) => g.title == "Type Aliases")?.children ?? []
const enumIds = file.groups?.find((g) => g.title == "Enumerations")?.children ?? []
const varIds = file.groups?.find((g) => g.title == "Variables")?.children ?? []
const funcIds = file.groups?.find((g) => g.title == "Functions")?.children ?? []
for (const declaration of file.children){
const declarationName = declaration.name
const declarationType = classIds.includes(declaration.id) ? "class" : interfaceIds.includes(declaration.id) ? "interface" : typeIds.includes(declaration.id) ? "type" : enumIds.includes(declaration.id) ? "enum" : varIds.includes(declaration.id) ? "variable" : funcIds.includes(declaration.id) ? "function" : "other"
availableElements.push({name:declarationName,type:declarationType})
}
}
const exported = []
for (const file of result.children){
const classIds = file.groups?.find((g) => g.title == "Classes")?.children ?? []
const interfaceIds = file.groups?.find((g) => g.title == "Interfaces")?.children ?? []
const typeIds = file.groups?.find((g) => g.title == "Type Aliases")?.children ?? []
const enumIds = file.groups?.find((g) => g.title == "Enumerations")?.children ?? []
const varIds = file.groups?.find((g) => g.title == "Variables")?.children ?? []
const funcIds = file.groups?.find((g) => g.title == "Functions")?.children ?? []
for (const declaration of (file.children ?? [])){
const declarationName = declaration.name
if (skipElementNames.includes(declarationName)) continue
const declarationType = classIds.includes(declaration.id) ? "class" : interfaceIds.includes(declaration.id) ? "interface" : typeIds.includes(declaration.id) ? "type" : enumIds.includes(declaration.id) ? "enum" : varIds.includes(declaration.id) ? "variable" : funcIds.includes(declaration.id) ? "function" : "other"
const declarationTypeParams = (declaration.typeParameters) ? declaration.typeParameters.map((tp) => {
return {name:tp.name,type:handleType(tp.type)}
}) : null
const declarationComment = declaration.comment?.summary?.map((c) => c.text).join("") ?? null
const declarationConstant = declaration.flags.isConst ? true : false
const rawDeclarationSource = declaration.sources ? (declaration.sources[0] ?? null) : null
const declarationSource = rawDeclarationSource ? rawDeclarationSource.fileName+":"+rawDeclarationSource.line+":"+rawDeclarationSource.character : null
const declarationChildren = []
if (declarationType == "class"){
//CLASS
const constructorIds = declaration.groups?.find((g) => g.title == "Constructors")?.children ?? []
const propertyIds = declaration.groups?.find((g) => g.title == "Properties")?.children ?? []
const methodIds = declaration.groups?.find((g) => g.title == "Methods")?.children ?? []
for (const member of (declaration.children ?? [])){
const memberName = member.name
const memberType = constructorIds.includes(member.id) ? "constructor" : propertyIds.includes(member.id) ? "property" : methodIds.includes(member.id) ? "method" : "other"
let memberComment = member.comment?.summary?.map((c) => c.text).join("") ?? null
const rawMemberSource = member.sources ? (member.sources[0] ?? null) : null
let memberSource = rawMemberSource ? rawMemberSource.fileName+":"+rawMemberSource.line+":"+rawMemberSource.character : null
const memberInherited = member.flags.isInherited ? true : false
const memberStatic = member.flags.isStatic ? true : false
const memberProtected = member.flags.isProtected ? true : false
const memberOptional = member.flags.isOptional ? true : false
const memberReadonly = member.flags.isReadonly ? true : false
let memberDetails = null
if (memberType == "property"){
//CLASS => PROPERTY
memberDetails = handleType(member.type)
}else if (memberType == "method"){
//CLASS => METHOD
memberDetails = handleFunction(member)
memberComment = memberDetails.comment
}else if (memberType == "constructor"){
//CLASS => CONSTRUCTOR
memberDetails = handleFunction(member)
memberComment = memberDetails.comment
}
declarationChildren.push({
type:memberType,
name:memberName,
comment:memberComment,
source:memberSource,
details:memberDetails,
inherited:memberInherited,
static:memberStatic,
protected:memberProtected,
optional:memberOptional,
readonly:memberReadonly
})
}
}else if (declarationType == "interface"){
//INTERFACE
const propertyIds = declaration.groups?.find((g) => g.title == "Properties")?.children ?? []
const methodIds = declaration.groups?.find((g) => g.title == "Methods")?.children ?? []
for (const member of (declaration.children ?? [])){
const memberName = member.name
const memberType = propertyIds.includes(member.id) ? "property" : methodIds.includes(member.id) ? "method" : "other"
let memberComment = member.comment?.summary?.map((c) => c.text).join("") ?? null
const rawMemberSource = member.sources ? (member.sources[0] ?? null) : null
let memberSource = rawMemberSource ? rawMemberSource.fileName+":"+rawMemberSource.line+":"+rawMemberSource.character : null
const memberInherited = member.flags.isInherited ? true : false
const memberStatic = member.flags.isStatic ? true : false
const memberProtected = member.flags.isProtected ? true : false
const memberOptional = member.flags.isOptional ? true : false
const memberReadonly = member.flags.isReadonly ? true : false
let memberDetails = null
if (memberType == "property"){
//INTERFACE => PROPERTY
memberDetails = handleType(member.type)
}else if (memberType == "method"){
//INTERFACE => METHOD
memberDetails = handleFunction(member)
memberComment = memberDetails.comment
}
declarationChildren.push({
type:memberType,
name:memberName,
comment:memberComment,
source:memberSource,
details:memberDetails,
inherited:memberInherited,
static:memberStatic,
protected:memberProtected,
optional:memberOptional,
readonly:memberReadonly
})
}
}else if (declarationType == "type"){
//TYPE
declarationChildren.push(handleType(declaration.type))
}else if (declarationType == "enum"){
//ENUM
const enumerableIds = declaration.groups?.find((g) => g.title == "Enumeration Members")?.children ?? []
for (const member of (declaration.children ?? [])){
const memberName = member.name
const memberType = enumerableIds.includes(member.id) ? "enumerable" : "other"
const memberComment = member.comment?.summary?.map((c) => c.text).join("") ?? null
const rawMemberSource = member.sources ? (member.sources[0] ?? null) : null
let memberSource = rawMemberSource ? rawMemberSource.fileName+":"+rawMemberSource.line+":"+rawMemberSource.character : null
let memberDetails = null
if (memberType == "enumerable"){
//ENUM => ENUMERABLE
memberDetails = handleType(member.type)
}
const memberInherited = member.flags.isInherited ? true : false
const memberStatic = member.flags.isStatic ? true : false
const memberProtected = member.flags.isProtected ? true : false
const memberOptional = member.flags.isOptional ? true : false
const memberReadonly = member.flags.isReadonly ? true : false
declarationChildren.push({
type:memberType,
name:memberName,
comment:memberComment,
source:memberSource,
details:memberDetails,
inherited:memberInherited,
static:memberStatic,
protected:memberProtected,
optional:memberOptional,
readonly:memberReadonly
})
}
}else if (declarationType == "variable"){
//VARIABLE
declarationChildren.push(handleType(declaration.type))
}else if (declarationType == "function"){
//FUNCTION
declarationChildren.push(handleFunction(declaration))
}
exported.push({
type:declarationType,
name:declarationName,
comment:declarationComment,
constant:declarationConstant,
source:declarationSource,
children:declarationChildren,
typeParams:declarationTypeParams
})
}
}
fs.writeFileSync(".docs/result.json",JSON.stringify(exported,null,"\t"))
fs.rmSync(".docs/typedoc-result.json")
+13
View File
@@ -0,0 +1,13 @@
{
"$schema": "https://typedoc.org/schema.json",
"entryPoints": [
"../src/core/api/modules/",
"../src/core/api/defaults/",
"../src/core/api/openticket/",
"../src/core/api/main.ts",
"../src/core/startup/init.ts",
],
"entryPointStrategy": "expand",
"json": "./typedoc-result.json",
"basePath": "../"
}
+34
View File
@@ -0,0 +1,34 @@
# Pterodactyl Eggs
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
[![discord](https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![version](https://img.shields.io/badge/version-4.0.0-brightgreen.svg?style=flat-square)](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.0) [![Sponsor DJj123dj](https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors)](https://github.com/sponsors/DJj123dj)
Hi there! Open Ticket provides **official eggs** for the Pterodactyl & Pelican panels!<br>
There are different eggs for different versions of Open Ticket.
Please choose the one that fits your needs the most.
If you encounter any issues while installing these eggs, please head to our [**discord server**](https://discord.dj-dj.be) for further assistance!
### Requirements
It's recommended to provide at least `1GB` of **Memory/RAM** and `5GB` of **disk space** for Open Ticket to work correctly.
### Egg Variants
[**`openticket-egg-main.json` (Recommended)**](openticket-egg-main.json)
- This egg will use the `main` branch of Open Ticket.
[**`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.
[**`openticket-egg-v3.5.9.json`**](openticket-egg-v3.5.9.json)
- This egg will always use Open Ticket `v3.5.9`. Open Ticket updates will not have an effect on this egg.
[**`openticket-egg-dev.json` (Not Recommended)**](openticket-egg-dev.json)
- This egg will use the `dev` branch of Open Ticket.
---
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="170px">
**Pterodactyl Eggs**<br>
[changelog](https://otgithub.dj-dj.be/releases) - [documentation](https://otdocs.dj-dj.be) - [tutorial](https://www.youtube.com/watch?v=2jK9kAf6ASU) - [website](https://openticket.dj-dj.be) - [discord](https://discord.dj-dj.be)<br>
© 2025 - [DJdj Development](https://www.dj-dj.be) - [Terms](https://www.dj-dj.be/terms#terms) - [Privacy Policy](https://www.dj-dj.be/terms#privacy)
+62
View File
@@ -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:21+01:00",
"name": "Open Ticket (Experimental)",
"author": "support@dj-dj.be",
"description": "This is the experimental Pterodactyl egg for Open Ticket, the most advanced & customisable discord ticket bot that you will ever find! DO NOT USE IN PRODUCTION!",
"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 (dev)\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=\"dev\"\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"
}
]
}
+62
View File
@@ -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:20+01:00",
"name": "Open Ticket (Latest)",
"author": "support@dj-dj.be",
"description": "This is the official Pterodactyl egg for Open Ticket, 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 (main)\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=\"main\"\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"
}
]
}
+62
View File
@@ -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:19+01:00",
"name": "Open Ticket (v3.5.9)",
"author": "support@dj-dj.be",
"description": "This is the official Pterodactyl egg for Open Ticket v3.5.9, 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 (v3.5.9)\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=\"v3.5.9\"\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"
}
]
}
+62
View File
@@ -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.0)",
"author": "support@dj-dj.be",
"description": "This is the official Pterodactyl egg for Open Ticket v4.0.0, 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.0)\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.0\"\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"
}
]
}
+128
View File
@@ -0,0 +1,128 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
support@dj-dj.be.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.
+41
View File
@@ -0,0 +1,41 @@
# 🎥 Content Creators
Hi there! We're searching for content creators to create tutorials & setup guides for Open Ticket.
You can get many great rewards from helping us!
You can choose which type of tutorial you want to make. You can create a quick setup, full setup, plugin tutorial or something else!
You are not required to talk in the video, but make sure it has some kind of subtitles instead.
### 📄 Requirements
- 📌 At least 2k subscribers!
- 📌 A little bit of channel activity! *(minimum 2 uploads/month)*
- 📌 Video length of at least 3 minutes!
- 📌 Provide a clear link to the Open Ticket repository!
- 📌 Recommended language is English!
- 📌 Recommended platform is YouTube!
- 📌 Must be for the latest version of Open Ticket!
- 📌 **(OPTIONAL)** Speech in the video *(AI is allowed)*
### 🎁 Rewards
We won't give out any compensation in money, but we will give you some advantages!
- ✅ Advertisement of tutorial in the [README.md](../README.md)!
- ✅ Advertisement of channel in our [discord server](https://discord.dj-dj.be)!
- ✅ `Content Creator` role in our [discord server](https://discord.dj-dj.be)!
- ✅ Advertisement of tutorial & channel in documentation!
- ✅ Lot's of of views generated from GitHub traffic!
- ✅ A completely free 24/7 hosted Open Ticket bot!
- ✅ We will advertise the video to all our socials!
### 💤 Outdated Content
When a tutorial or setup guide is outdated or no longer applicable,
we will remove it from the `README.md` & documentation.
Your channel will still stay in the list of contributors, so don't worry about that!
You will be noticed at least a month before removal.
This way you can take time to create an updated tutorial if you want.
### 💬 Contact Us
If you've read all these guidelines, requirements & rewards,
you can create a ticket in our [discord server](https://discord.dj-dj.be) to start working on it!
We will try to help you as fast as possible!
+92
View File
@@ -0,0 +1,92 @@
# Contributing Guidelines
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
[![discord](https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![version](https://img.shields.io/badge/version-4.0.0-brightgreen.svg?style=flat-square)](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.0) [![Sponsor DJj123dj](https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors)](https://github.com/sponsors/DJj123dj)
These are the Contributing Guidelines of Open Ticket!<br>
Here you can find everything you need to know about contributing to Open Ticket.<br>
This includes new features, translations & bug fixes.
### 💬 Translations
#### Step 1: View & Check
1. Check the [`./languages/`](./languages/) folder for existing translations.
2. When it doesn't exist yet, visit **[step 2](#step-2-translation)**.
3. When it does exist, check if it is outdated, incorrect or incomplete.
4. If you match one of these requirements, you can also visit **[step 2](#step-2-translating)**.
#### Step 2: Translation
1. If your language doesn't exist yet, copy the [`english.json`](./../languages/english.json) file and rename it to your language.
2. **(❌ Not Recommended)** You are allowed to use `Google Translate` or `DeepL`, but only when you say it in the pull request and enable the `"automated"` boolean.
3. Only translate existing values in the json file. Don't add or remove any values from the file.
4. You're **NOT REQUIRED** to translate everything! If you only want to translate a part of it, it's okay!
5. If you are unable to translate something, leave it in `English`.
#### Step 3: Metadata
Metadata can be found in the `_TRANSLATION` variable.
|Value |Notes |
|--------------|-------------------------------------------------------------------------------------------------|
|`otversion` |The Open Ticket version of this translation. **❌ DON'T EDIT!** |
|`translators` |The discord usernames from the translators. Add your name to the list when you've contributed. |
|`lastedited` |The last edited date in the `DD/MM/YYYY` format. |
|`language` |The full name of the language with capital letter. |
|`automated` |Enable this boolean when this translation has been made using ChatGPT, Google Translate, ... |
> #### ✅ You are also allowed to add your username to the [`README.md`](./../README.md) translator list!
#### Step 4: Uploading
1. When adding a new language, please mention @DJj123dj. He will add the code required for the language to work.
2. There are currently 3 ways of uploading translations:
- Create a pull request to the [__`dev` branch!__](https://github.com/open-discord-bots/open-ticket/tree/dev)
- Create a ticket in our [discord server](https://discord.dj-dj.be)!
- Send a DM to @DJj123dj on discord!
3. Now you'll need to wait until the next Open Ticket version for it to be added.
#### Step 5: Rewards
Translators get some rewards for translating Open Ticket!
- ✅ Credits in the [`README.md`](./../README.md) translator list!
- ✅ Credits in the changelog!
- ✅ Credits in the documentation!
- ✅ Credits in the translation JSON file!
- ✅ A special role in our [Discord server](https://discord.dj-dj.be)!
### 🧩 Plugins
#### Step 1: Creating Plugins
The documentation for creating plugins will be ready soon!<br>
In the meantime, you can already look at existing plugins or try it at your own!
#### Step 2: Uploading Plugins
Create a pull request in the [**`open-discord-plugins`**](https://odplugins.dj-dj.be/) repository or contact DJj123dj in our [Discord server](https://discord.dj-dj.be)!
### 📦 Features
Feature requests are required to be made in one of the following ways:
- ✅ In our [Discord server](https://discord.dj-dj.be)
- ✅ Create an issue on GitHub
- ✅ Message DJj123dj in DM on Discord
- ✅ Email to support@dj-dj.be
> **We won't accept pull requests for features. Only for bugs, small fixes, translation and plugins!**
### 🕷️ Bug Fixes
You are able to report bugs in one of the following ways:
- ✅ In our [Discord server](https://discord.dj-dj.be)
- ✅ Create an issue on GitHub
- ✅ Message DJj123dj in DM on Discord
- ✅ Email to support@dj-dj.be
📌 **If you want, you can also create a pull request to fix the bug yourself :)**
#### 🔴 Security Vulnerabilities
If you've found a bug which could affect the **SECURITY OF THE BOT** or may be potentially dangerous to the users of the bot,
you are **REQUIRED to send the bug privately via one of the following methods:**
- 🔴 Message DJj123dj in DM on Discord
- 🔴 Email to support@dj-dj.be
> ### Please try to always include the `otdebug.txt` file!
---
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="170px">
**Contributing Guidelines**<br>
[changelog](https://otgithub.dj-dj.be/releases) - [documentation](https://otdocs.dj-dj.be) - [tutorial](https://www.youtube.com/watch?v=2jK9kAf6ASU) - [website](https://openticket.dj-dj.be) - [discord](https://discord.dj-dj.be)<br>
© 2025 - [DJdj Development](https://www.dj-dj.be) - [Terms](https://www.dj-dj.be/terms#terms) - [Privacy Policy](https://www.dj-dj.be/terms#privacy)
+1
View File
@@ -0,0 +1 @@
github: DJj123dj
+30
View File
@@ -0,0 +1,30 @@
---
name: Bug Report
about: Report bugs to help us improve Open Ticket!
title: "Your Bug Name"
---
### Bug Description:
A clear and concise description of what the bug is.
### Steps To Reproduce:
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
> Leave empty when you are unable to reproduce the bug!
### Expected Behaviour:
A clear and concise description of what you expected to happen.
### Screenshots:
If applicable, add screenshots to help explain your problem.
### Files:
Please include the `otdebug.txt` file in your report! With this file, we can take a deep-dive in to the error that happend.
> This file doesn't contain any credentials or sensitive information!
### Additional Notes:
Add any other context about the problem here.
+27
View File
@@ -0,0 +1,27 @@
---
name: Documentation
about: Do you know anything to be improved in the Open Ticket documentation?
title: "Documentation Improvement Name"
labels: "Documentation"
---
### Related Docs/Systems:
Choose related systems/docs for this improvement/change:
- [ ] Guides
- [ ] Developer Guides
- [ ] API Reference
- [ ] Blog
- [ ] System (Docusaurus & Javascript)
- [ ] Assets (images)
- [ ] Other
### Improvement Description:
A clear and concise description of the improvement.
> Please explain it as detailed as possible!
### Screenshots:
If applicable, add screenshots to help explain your request.
### Additional Notes:
Add any other context about the request here.
+27
View File
@@ -0,0 +1,27 @@
---
name: Feature Request
about: Do you have a great idea for Open Ticket? Let us know using this issue!
title: "Your Feature Name"
labels: "Concept"
---
### Feature Description:
A clear and concise description of what the feature is.
### Affected Systems
Systems which are affected, improved or modified:
- (example) Slash command registration...
- (example) API embed builders...
- Scroll down to '....'
- See error
> Leave empty when you don't know which parts this feature affects!
### Advantages & Use Cases:
What advantages & use cases do you think this feature would result in?
### Screenshots:
If applicable, add screenshots to help explain your feature request.
### Additional Notes:
Add any other context about the request here.
@@ -0,0 +1,20 @@
---
name: HTML Transcripts
about: Found a bug related to the HTML Transcripts? Or do you have a feature request?
title: "Your Bug/Improvement Name"
labels: "HTML Transcripts"
---
### Feature/Bug Description:
A clear and concise description of what the feature/bug report is.
### Screenshots:
If applicable, add screenshots to help explain your feature request or bug report.
### Files:
Please include the `otdebug.txt` file in your report! With this file, we can take a deep-dive in to the error that happend.
> #### Include this file for bug reports!
> This file doesn't contain any credentials or sensitive information!
### Additional Notes:
Add any other context about the problem here.
+30
View File
@@ -0,0 +1,30 @@
---
name: New Language
about: Do you want to add a new language to Open Ticket?
title: "Language Name"
labels: "New Translation"
---
### Language Name
The name of the new language.
### Language Description/Details:
A clear and concise description of the translation/language.
### Checklist
Before the language is fully implemented, the following checklist must be met:
- [ ] **📌 Created a language file in the `./languages/` directory.**
- [ ] **📌 The translation file uses the `<lowercase-language-name>.json` format.**
- [ ] **📌 The `"_TRANSLATION"` metadata in the language file is correctly configured.**
- [ ] The `"otversion"` is correct.
- [ ] The `"translators"` list is up to date has the discord/github usernames from all translators.
- [ ] The `"lastedited"` variable is the last edited date in the following format: `DD/MM/YYYY`.
- [ ] The `"language"` variable is the name of the language in English.
- [ ] `"automated"` is enabled when `Google Translate`, `DeepL`, `ChatGPT` or any other kind of translation tools were used.
- [ ] **📌 The language has been added to the `README.md` list.**
- [ ] **📌 The language counters have been updated in the `README.md`.**
- [ ] **📌 The language has been added to the list in the `ODLanguageManagerIds_Default` interface in (`./src/core/api/defaults/language.ts`).**
- [ ] **📌 The language has been added to the list in `./src/data/languageLoader.ts`.**
### Additional Notes:
Add any other context about the problem here.
+20
View File
@@ -0,0 +1,20 @@
---
name: Plugin Request
about: Do you have an idea for an Open Ticket plugin?
title: "Your Plugin Name"
labels: "Plugin"
---
### Plugin Description:
A clear and concise description of what the plugin is & does.
> Please explain the plugin as detailed as possible!
### Advantages & Use Cases:
What advantages & use cases do you think this plugin would result in?
### Screenshots:
If applicable, add screenshots to help explain your plugin request.
### Additional Notes:
Add any other context about the request here.
+28
View File
@@ -0,0 +1,28 @@
---
name: Question
about: Do you have a question about Open Ticket?
title: "My Question"
labels: "Question"
---
### Question:
A clear and concise description of the question.
> Please explain the question as detailed as possible!
### Screenshots:
If applicable, add screenshots to help explain your plugin request.
### Checklist:
Before creating this question, the following checklist must be met:
- [ ] **📌 I've read the docs (https://otdocs.dj-dj.be) and I didn't found the solution.**
- [ ] **📌 I've asked other people & they didn't know the solution.**
- [ ] **📌 The question is not related to the following subjects: (If so, ask it in our discord server: https://discord.dj-dj.be)**
- Configuring the bot
- Hosting the bot (24/7)
- Updating the bot
- [ ] **📌 I know that this issue is publicly visible for everyone and I haven't shared any private info.**
### Additional Notes:
Add any other context about the request here.
@@ -0,0 +1,24 @@
---
name: Updated Language
about: Do you want to update/improve an existing language in Open Ticket?
title: "Language Name"
labels: "Updated Translation"
---
### Language Name
The name of the existing language.
### Language Description/Details:
A clear and concise description of the translation/language changes.
### Checklist
Before the language is updated, the following checklist must be met:
- [ ] **📌 The `"_TRANSLATION"` metadata in the language file is correctly configured.**
- [ ] The `"otversion"` is correct.
- [ ] The `"translators"` list is up to date has the discord/github usernames from all translators.
- [ ] The `"lastedited"` variable is the last edited date in the following format: `DD/MM/YYYY`.
- [ ] The `"language"` variable is the name of the language in English.
- [ ] `"automated"` is enabled when `Google Translate`, `DeepL`, `ChatGPT` or any other kind of translation tools were used.
### Additional Notes:
Add any other context about the problem here.
+49
View File
@@ -0,0 +1,49 @@
# Security Policy
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
[![discord](https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![version](https://img.shields.io/badge/version-4.0.0-brightgreen.svg?style=flat-square)](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.0) [![Sponsor DJj123dj](https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors)](https://github.com/sponsors/DJj123dj)
This is the Security Policy of Open Ticket!<br>
Here you can find a list of all supported & deprecated versions of the bot.<br>
You will also find some guidelines about how to report vulnerabilities, bugs & errors.
### 📦 Supported Versions
Below, you can find a list with the status of every Open Ticket version.<br>
This list will be updated on every release.
- 🟦 Early Access **(ideas, bugs, support, html transcripts)**
- ✅ Supported **(features, bugs, support, docs, html transcripts)**
- 🚧 Maintenance **(support, docs, html transcripts)**
- 🟧 Deprecated **(docs)**
- ❌ Fully Deprecated
| Version | Supported | Notes |
|------------|-----------|--------------------------------|
| 4.0.0-beta | 🟦 | For v4.0.0 Full Release |
| 3.5.8 | ✅ | Supported until October 2024 |
| 3.5.7 | ✅ | Supported until September 2024 |
| 3.5.6 | 🟧 | Documentation Only |
| < 3.5.6 | 🟧 | Documentation Only |
| < 3.5.0 | ❌ | |
### 🕷️ Reporting Vulnerabilities
You can report vulnerabilities, errors & bugs using one of the following methods:
- Create an issue on GitHub!
- Create a ticket in our [discord server](https://discord.dj-dj.be)!
- Message @DJj123dj in DM on discord!
- Send an E-mail to [support@dj-dj.be](mailto:support@dj-dj.be)!
When you report a problem, please **give a small description** about what & how it happend.<br>
Try to explain the issue in as much detail as possible.
If possible, try to provide screenshots!
### Please upload the `otdebug.txt` file together with your bug report!
---
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="170px">
**Security Policy**<br>
[changelog](https://otgithub.dj-dj.be/releases) - [documentation](https://otdocs.dj-dj.be) - [tutorial](https://www.youtube.com/watch?v=2jK9kAf6ASU) - [website](https://openticket.dj-dj.be) - [discord](https://discord.dj-dj.be)<br>
© 2025 - [DJdj Development](https://www.dj-dj.be) - [Terms](https://www.dj-dj.be/terms#terms) - [Privacy Policy](https://www.dj-dj.be/terms#privacy)
+20
View File
@@ -1,2 +1,22 @@
node_modules/
package-lock.json
.vscode/
devconfig/
devdatabase/
plugins/*
!plugins/example-plugin/
database/openticket.sqlite
dist/
otdebug.txt
.DS_Store
*/.DS_Store
*/*/.DS_Store
*/*/*/.DS_Store
**/.DS_Store
.docs/*
!.docs/createDocs.js
!.docs/typedoc-config.json
+17 -1
View File
@@ -1,3 +1,7 @@
# Open Ticket (License)
© 2025 - DJj123dj & Contributors
```
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
@@ -70,7 +74,7 @@ modification follow.
TERMS AND CONDITIONS
0. Definitions.
1. Definitions.
"This License" refers to version 3 of the GNU General Public License.
@@ -672,3 +676,15 @@ may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
```
### Additional Terms for Open Ticket
The following additional terms apply to the use of this software:
1. This software may not be used as part of a public Discord bot service that is monetized (e.g., generating revenue through subscriptions, donations, or other forms of payment) without the prior written permission of the original author.
2. This software may not be used as part of a public Discord bot service on multiple Discord servers without attribution to the original author.
3. You are allowed to use this bot in a Discord server that makes money or is for-profit, provided that the income is not generated directly from the ticket bot or its functionality.
These additional terms are an extension to the GNU GPL v3 and must be followed alongside the original license terms. In case of any conflict between these additional terms and the GNU GPL v3, the additional terms shall take precedence.
+204 -64
View File
@@ -1,85 +1,225 @@
# open-ticket
This is an open-source discord ticket bot, you can configure it and it comes with cool features like transcripts & custom options!
> ### 🎥 Content Creators 🎥
> Hey there! We're searching for content creators that would want to create a tutorial or setup guide for Open Ticket!<br>
> [📌 More Information](.github/CONTENT_CREATORS.md)
---
<img src="logo.png" alt="Open Ticket logo" style="height: 300px; width:300px;"/>
<p align="center">
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket" width="650px">
<br>Powered By<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://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://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://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://github.com/sponsors/DJj123dj"><img alt="Sponsor DJj123dj" src="https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors"></img></a>
</p>
## features
- discord interaction buttons
- transcripts
- add/remove users from ticket
- custom colors & name
- has tickets for questions, partners & job applications
- uses discord.js 13
- configure your own ticket options
- remove credits if you want
<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!
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>!
</p>
<p align="center"><b>⭐️ Help us grow by giving a star! ⭐️</b></p>
## installation
You need `node.js 16` to run this project, if you don't want to install `node.js 16` then there is a npm package that can help you.
### 📌 Features
- **🦇 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!
- **🔒 tested & secure** - Open Ticket has been tested by thousands of servers and is very secure!
- **📈 scalable** - Open Ticket is made to handle huge servers! (Already tested in **servers with 100k members**)
- **📄 HTML transcripts** - Make use of the most customisable, beautiful and easy-to-use HTML Transcripts!
- **✅ ticket actions** - Close, Reopen, Delete, Rename & Move all your tickets!
- **🇬🇧 translation** - Open Ticket has been translated in more than **22 languages** by our community!
- **🎨 customisation** - Open Ticket has been created around customisation, everything can be customised!
- **🖥️ interactions** - The bot has full support for Buttons, Dropdowns, Slash Commands and Modals!
- **∞ unlimited** - Create an infinite amount of tickets & panels!
- **📝 advanced plugins** - Create advanced plugins or use pre-made ones by our community!
- **👥 user management** - Add & Remove users from all tickets!
- **📊 detailed stats** - Open Ticket has ticket, user & global staticstics available for everyone!
- **🚫 blacklist** - Blacklist users to prevent them from creating a ticket!
- **❓ questions** - Let users answer questions in a modal before the ticket is created!
- **📦 slash & text** - Open Ticket supports both slash & text commands!
- **📥 extra buttons** - The bot also supports Reaction Roles & Url Buttons, because why not ¯\\_(ツ)_/¯
- **✨ commands** - The bot contains more than 25 commands!
You can clone this project for download.
#### And more using plugins!
- **💬 reviews** - Create & customise your own review system!
- **📢 feedback** - Collect feedback & create forms for people to answer!
- **🏷️ tags** - Create tags & answer questions automatically using keywords!
- **📝 forms** - Create advanced forms and ask people for additional details!
- **🔄 rotating status** - Create a rotating bot status & use dynamic variables from the bot!
- **💾 sqlite database** - Use an `sqlite` database for increased performances!
- **🎉 custom embeds** - Create your own embeds and use them in your server!
- **⏰ reminders** - Create & manage customisable reminders in your server!
- **🎨 customisation** - Yep, you heard it right! Even more customisation!
- **😁 And so much more...**
### packages
- canvas => version `^2.8.0`
- discord.js => version `^13.2.0`
- express => version `^4.17.1`
- node-localstorage => version `^2.2.1`
> ### 📦 Resources
> 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:/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>
The packages are also in package.json!
### ❤️ Sponsors
A big thanks to all our sponsors! Without them, it wouldn't be possible to create this project!
### node.js 16 package
if you don't want to install `node.js 16`, you can install this package too
- node => version ^16.10.0
<table>
<tr>
<td><img src="https://github.com/roppl3r.png" alt="Profile Picture" width="80px"></td>
<td><img src="https://github.com/BENZORICH.png" alt="Profile Picture" width="80px"></td>
</tr>
<tr>
<th><a href="https://github.com/roppl3r">roppl3r</a></th>
<th><a href="https://github.com/BENZORICH">BENZORICH</a></th>
</tr>
</table>
_npm install node@16_
**Past Sponsors:**<br>
<a href="https://github.com/sponsors/DJj123dj">
<img src="https://github.com/SpyEye2.png" alt="SpyEye" width="40px">
<img src="https://github.com/mods-hd.png" alt="Mods HD" width="40px">
<img src="https://github.com/DOSEV5.png" alt="DOSEV5" width="40px">
</a>
## running
you can run `node index.js` but i would recommend you to use `npm start`
### ⏱️ Quick Setup
> 1. Download the latest version of Open Ticket on [Github](https://github.com/open-discord-bots/open-ticket).
> 2. Make sure node.js & npm are installed using `node -v` (minimum `v18`).
> 3. Install any required dependencies using `npm install`.
> 4. Configure the bot in the `./config/` directory.
> 5. Start the bot using `npm start` or `node index.js`
> - The bot will let you know any existing config errors.
> - Fix these errors and restart the bot.
> 6. Enjoy using Open Ticket!
> ### [📔 Visit Documentation](https://otdocs.dj-dj.be)
if there are any errors, you can open an **issue on github** or **contact me in the discord server**.
## 📸 Preview
<img alt="Ticket Message" width="350px" src="https://apis.dj-dj.be/cdn/openticket/preview-v4/ticket.png">
<img alt="Ticket Stats Message" width="350px" src="https://apis.dj-dj.be/cdn/openticket/preview-v4/stats.png">
<img alt="Example Panel 1" width="350px" src="https://apis.dj-dj.be/cdn/openticket/preview-v4/panel-1.png">
<img alt="Example Panel 2" width="350px" src="https://apis.dj-dj.be/cdn/openticket/preview-v4/panel-2.png">
### config (required)
=> main config
- `server_name` => the name from your server.
- `server_logo`=> the logo from your server.
- `bot_name`=> the bot's name.
- `main_color`=> the color used in all embeds.
- `auth_token`=> the bot's token (Discord Developer Portal)
- `botperms_role`=> the id from a role that can run admin commands with the bot.
- `prefix`=> the bot's prefix.
## 🧩 Plugins
**Download all plugins in our [Official Plugin Repository](https://github.com/open-discord-bots/plugins)!**<br>
> #### ⭐ Featured Plugins (Top 5 Most Used)
> **[`ot-sqlite-database`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-sqlite-database/),
> [`ot-migrate-v3`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-migrate-v3/),
> [`ot-reviews`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-reviews/),
> [`ot-feedback`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-feedback/),
> [`ot-tags`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-tags/)**
- `credits_please-do-not-remove` => remove the credits or not
### 📦 Official *(made by DJdj Development)*
|Name |Category |Description |
|----------------------------------------------------------------------|----------------------------|-------------------------|
|[`example-plugin`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/example-plugin/) |📄 Example |This is just an example plugin for people that want to create their own plugin. |
|[`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-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. |
|[`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). |
|[`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. |
|[`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-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-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-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. |
|[`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-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-tags`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-tags/) |💼 Management |Use tags to quickly reply with a pre-existing text. |
|[`ot-better-status`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-better-status/) |🤖 Client |An advanced status plugin to rotate between states. It also allows for the use of variables. |
=> status config
- `status/type` => PLAYING | STREAMING | LISTENING | WATCHING | CUSTOM | COMPETING
- `status/text` => the status text
### ✅ Verified *(made by community)*
|Name |Author |Category |Description |
|---------------------------------------------------------------------|----------------------------|----------------------------|-------------------------|
|[`ot-config-reload`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-config-reload/) |guillee.3 |⚙️ Utility |This plugin adds a new command that allows reloading the Open Ticket config files without the need for a restart. |
|[`ot-ticket-forms`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-ticket-forms/) |guillee.3 |💼 Management |An advanced forms plugin for Open Ticket. |
|[`ot-feedback`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-feedback/) |an_developer |💼 Management |A plugin to gather feedback of your support service. |
|[`ot-assign-role`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-assign-role/) |rapid.fast |💼 Management |This plugin assigns a predefined role to a user upon creating a ticket. |
|[`ot-volume-warning`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-volume-warning/) |guillee.3 |💼 Management |Alerts ticket creators when too many tickets are open, indicating possible response delays. |
|[`od-reminders`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/od-reminders/) |guillee.3 |💼 Management |Set reminders that will be sent to a channel every specified time. |
|[`ot-translate-cmds`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-translate-cmds/) |guillee.3 |🤖 Client |Translate all built-in command names, descriptions & options. |
=> ticket system config
- `system/ticket_channel` => the channel where you are going to put the !ticket msg.
- `system/ticket_category` => the category for tickets.
- `system/member_role` => this role doesn't have access to tickets
(WARNING: @everyone does have access to tickets, so make sure all members have a member role!).
- `system/transcript_channel` => the channel for transcripts.
- `system/enable_transcripts` => enable transcripts.
- `system/enable_category` => enable tickets in category.
### 📢 Categories
- **📄 Example** - These plugins serve as an example or starting template.
- **📢 Command** - These plugins add new commands to the bot.
- **⚙️ Utility** - These plugins help with backend & systems. You won't notice it in discord itself.
- **🎨 Customisation** - These plugins help you customise the bot even further.
- **💼 Management** - These plugins add features that help you manage your server.
- **🤖 Client** - These plugins add features affecting the discord client or bot itself.
=> ticket options config
- `options/ticket.../enabled` => set this option TRUE or FALSE.
- `options/ticket.../icon` => set an emoji for this ticket option.
- `options/ticket.../description` => set a description for this ticket option.
- `options/ticket.../name` => set a name for this ticket option.
- `options/ticket.../channel_prefix` => this will be the prefix for channel names (empty is disabled!)
## 🛠️ Contributors
### 🖥️ Team
This is the main team working on Open Ticket. Don't forget to check their profiles!
<table>
<tr>
<td><img src="https://github.com/DJj123dj.png" alt="Profile Picture" width="80px"></td>
<td><img src="https://github.com/Sank34.png" alt="Profile Picture" width="80px"></td>
<td><img src="https://github.com/smetsliam.png" alt="Profile Picture" width="80px"></td>
</tr>
<tr>
<th><a href="https://github.com/DJj123dj">💻 DJj123dj</a></th>
<th><a href="https://github.com/Sank34">💬 Sanke</a></th>
<th><a href="https://github.com/smetsliam">💬 DevBack</a></th>
</tr>
</table>
### intents & permissions
In the discord developer portal in the "bot" panel you will find 3 switches under the title "Gateaway Intents". The following switches should always be turned on
- `SERVER MEMBERS INTENT`
- `MESSAGE CONTENT INTENT`
### 💬 Translators
|Language |Maintainer (discord name) |Status |
|---------------------|--------------------------|-----------------------------|
|🇬🇧 English |djj123dj |🟢 Up To Date |
|🇳🇱 Dutch |djj123dj |🟢 Up To Date |
|🇩🇪 German |benzorich |🟢 Up To Date |
|🇪🇸 Spanish |redactado & josuens |🟢 Up To Date |
|🇵🇹 Portuguese |quiradon |🟢 Up To Date |
|❓ Catalan |guillee3 |🟢 Up To Date |
|🇨🇿 Czech |spyeye_ |🟢 Up To Date |
|🇭🇺 Hungarian |kornel0706 |🟢 Up To Date |
|🇷🇴 Romanian |sankedev |🟢 Up To Date |
|🇺🇦 Ukrainian |anderskiy |🟢 Up To Date |
|🇮🇩 Indonesian |erxg |🟢 Up To Date |
|🇮🇹 Italian |fraden1mvp. |🟢 Up To Date |
|🇩🇰 Danish |the_gamer |🟢 Up To Date |
|🇹🇭 Thai |modshd |🟢 Up To Date |
|🇹🇷 Turkish |palestinian |🟢 Up To Date |
|🇫🇷 French |guillee.3 |🟢 Up To Date |
|🇦🇪 Arabic |palestinian |🟢 Up To Date |
|🇮🇳 Hindi |an_developer |🟢 Up To Date |
|🇱🇹 Lithuanian |tsgindrius |🟢 Up To Date |
|🇵🇱 Polish |danoglez |🟢 Up To Date |
|🇪🇪 Estonian |iamnotmega |🔵 Up To Date (ChatGPT) |
|🇫🇮 Finnish |iamnotmega |🔵 Up To Date (ChatGPT) |
|🇷🇺 Russian |/ |🔴 Missing |
|🇳🇴 Norwegian |/ |🔴 Missing |
|🇱🇻 Latvian |/ |🔴 Missing |
|🇯🇵 Japanese |/ |🔴 Missing |
|🇰🇷 Korean |/ |🔴 Missing |
|🇨🇳 Simplified Chinese |/ |🔴 Missing |
|🇨🇳 Traditional Chinese|/ |🔴 Missing |
|🇸🇪 Swedish |/ |🔴 Missing |
|🇻🇳 Vietnamese |/ |🔴 Missing |
|🇸🇮 Slovenian |/ |🔴 Missing |
|🇬🇷 Greek |/ |🔴 Missing |
|❓ Kurdish |/ |🔴 Missing |
|❓ Persian |/ |🔴 Missing |
The bot needs `ADMINISTRATOR` permissions to work the best.
## ⭐️ Star History
Please help us grow by giving a star! It would help us a lot!
## credits
Please don't remove the credits from the bot 😊.
<a href="https://star-history.com/#open-discord-bots/open-ticket&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=open-discord-bots/open-ticket&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=open-discord-bots/open-ticket&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=open-discord-bots/open-ticket&type=Date" />
</picture>
</a>
_v1.2.1_
---
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="170px">
© 2021 - DJdj Development | [website](https://www.dj-dj.be) | [discord](https://discord.com/invite/26vT9wt3n3)
**README.md**<br>
[changelog](https://otgithub.dj-dj.be/releases) - [documentation](https://otdocs.dj-dj.be) - [tutorial](https://www.youtube.com/watch?v=2jK9kAf6ASU) - [website](https://openticket.dj-dj.be) - [discord](https://discord.dj-dj.be) - [license](./LICENSE.md)<br>
© 2025 - [DJdj Development](https://www.dj-dj.be) - [Terms](https://www.dj-dj.be/terms) - [Privacy Policy](https://www.dj-dj.be/privacy) - [Support Us](https://github.com/sponsors/DJj123dj)
-22
View File
@@ -1,22 +0,0 @@
const discord = require('discord.js')
const bot = require('../index')
const client = bot.client
const config = require("../config.json")
module.exports = () => {
client.on("message",(msg) => {
var args = msg.content.split(" ")
if (args[0] == config.prefix+"resetdatabase"){
if (msg.author.id == client.application.owner.id){
const databaseEmbed = new discord.MessageEmbed()
.setColor(config.main_color)
.setTitle("How to reset the database:")
.setDescription("1: Go to the folder `./storage` in your bot's directory.\n\n2: If posible remove the folders\n`./tickets`, `./transcripts` & `./userTickets`\nfrom the folder `./storage`\n\n3: Restart the bot")
.setFooter("if it doesn't work, create an issue on github or DM me on discord!")
msg.channel.send({embeds:[databaseEmbed]})
}
}
})
}
-81
View File
@@ -1,81 +0,0 @@
const discord = require('discord.js')
const bot = require('../index')
const client = bot.client
const config = require("../config.json")
module.exports = () => {
client.on("messageCreate", msg => {
if (msg.content == config.prefix+"ticket msg"){
if (msg.member.roles.cache.has(config.botperms_role) == false && msg.author.id != "779742674932072469"){
msg.channel.send({content:"You don't have permissons for this command!"})
return
}
var ticketButton = new discord.MessageActionRow()
if (config.options.ticket1.enabled){
ticketButton.addComponents(
new discord.MessageButton()
.setCustomId("newTicket1")
.setDisabled(false)
.setStyle("SECONDARY")
.setEmoji(config.options.ticket1.icon)
)
}
if (config.options.ticket2.enabled){
ticketButton.addComponents(
new discord.MessageButton()
.setCustomId("newTicket2")
.setDisabled(false)
.setStyle("SECONDARY")
.setEmoji(config.options.ticket2.icon)
)
}
if (config.options.ticket3.enabled){
ticketButton.addComponents(
new discord.MessageButton()
.setCustomId("newTicket3")
.setDisabled(false)
.setStyle("SECONDARY")
.setEmoji(config.options.ticket3.icon)
)
}
if (config.options.ticket4.enabled){
ticketButton.addComponents(
new discord.MessageButton()
.setCustomId("newTicket4")
.setDisabled(false)
.setStyle("SECONDARY")
.setEmoji(config.options.ticket4.icon)
)
}
var categorylist = ""
if (config.options.ticket1.enabled){categorylist = "\n\n"+categorylist+config.options.ticket1.icon+": **"+config.options.ticket1.name+"**\n"+config.options.ticket1.description}
if (config.options.ticket2.enabled){categorylist = "\n\n"+categorylist+config.options.ticket2.icon+": **"+config.options.ticket2.name+"**\n"+config.options.ticket2.description}
if (config.options.ticket3.enabled){categorylist = "\n\n"+categorylist+config.options.ticket3.icon+": **"+config.options.ticket3.name+"**\n"+config.options.ticket3.description}
if (config.options.ticket4.enabled){categorylist = "\n\n"+categorylist+config.options.ticket4.icon+": **"+config.options.ticket4.name+"**\n"+config.options.ticket4.description}
var ticketEmbed = new discord.MessageEmbed()
.setColor(config.main_color)
.setDescription("**Create a ticket:**\nClick one of the buttons below to create a ticket.\n\n__choose a category:__"+categorylist+"\n\n**watch out:**_You can only create 1 ticket at a time!_")
msg.channel.send({embeds:[ticketEmbed],components:[ticketButton]})
}
})
}
-139
View File
@@ -1,139 +0,0 @@
const discord = require('discord.js')
const bot = require('../index')
const client = bot.client
const config = require("../config.json")
module.exports = () => {
client.on("messageCreate",msg => {
var args = msg.content.split(" ")
if (args[0] == config.prefix+"ticket" && (args[1] == undefined ||args[1] == "" ||args[1] == null)){
var TicketHelpMsg = new discord.MessageEmbed()
.setColor(config.main_color)
.setTitle("Ticket commands")
const prefix = config.prefix
TicketHelpMsg.setDescription("**Go to <#"+config.system.ticket_channel+"> to create a ticket!**\n\n`"+prefix+"ticket msg` ➜ _Admin command._\n`"+prefix+"ticket rename` ➜ _Rename a ticket (no spaces)._\n`"+prefix+"ticket close` ➜ _Close a ticket._\n`"+prefix+"ticket add <user>` ➜ _Add a user to the ticket._\n`"+prefix+"ticket remove <user>` ➜ _Remove a user from the ticket._\n`"+prefix+"resetdatabase` ➜ _Steps to reset the database._")
if (config['credits_please-do-not-remove']){
TicketHelpMsg.setFooter("OpenTicket by DJdj Development | view on github for source code")
}
msg.channel.send({embeds:[TicketHelpMsg]})
}
})
client.on("messageCreate",msg => {
var args = msg.content.split(" ")
if (args[0] == config.prefix+"ticket" && args[1] == "close"){
msg.channel.messages.fetchPinned().then(msglist => {
var firstmsg = msglist.last()
if (firstmsg == undefined){
msg.channel.send({content:"I didn't find the close button!"})
}
if (firstmsg.author.id != client.user.id){
msg.channel.send({content:"You aren't in a ticket!"})
return
}
var CloseMsg = new discord.MessageEmbed()
.setColor(config.main_color)
.setDescription("Click [here]("+firstmsg.url+") to close this ticket.")
.setTitle("Close this ticket:")
msg.channel.send({embeds:[CloseMsg]})
})
}
})
client.on("messageCreate",msg => {
var args = msg.content.split(" ")
if (args[0] == config.prefix+"ticket" && args[1] == "rename"){
if (msg.member.roles.cache.has(config.botperms_role) == false && msg.author.id != "779742674932072469"){
msg.channel.send({content:"You don't have permissions for this command!"})
return
}
if (args[2] == null || args[2] == undefined || args[2] == "" || args[2] == false){
msg.channel.send({content:"Not enough parameters!"})
return
}
var name = args[2]
msg.channel.messages.fetchPinned().then(msglist => {
if (msglist.last().author.id == client.user.id){
msg.channel.send({content:"De naam is veranderd!"}).then(rmsg => {
rmsg.channel.setName(name)
})
}else{
msg.channel.send({content:"You aren't in a ticket!"})
}
})
}
})
client.on("messageCreate",msg => {
var args = msg.content.split(" ")
if (args[0] == config.prefix+"ticket" && args[1] == "add"){
if (msg.member.roles.cache.has(config.botperms_role) == false && msg.author.id != "779742674932072469"){
msg.channel.send({content:"You don't have permissions for this command!"})
return
}
msg.channel.messages.fetch().then(msglist => {
if (msglist.last().author.id != client.user.id){
msg.channel.send({content:"You aren't in a ticket!"})
return
}
if (args[2] == null || args[2] == undefined || args[2] == "" || args[2] == false){
msg.channel.send({content:"Not enough parameters!"})
return
}
var user = msg.mentions.users.first()
if (!user){
return
}
msg.channel.permissionOverwrites.create(user.id, { VIEW_CHANNEL:true, ADD_REACTIONS:true,ATTACH_FILES:true, EMBED_LINKS:true, SEND_MESSAGES:true})
})
}
})
client.on("messageCreate",msg => {
var args = msg.content.split(" ")
if (args[0] == config.prefix+"ticket" && args[1] == "remove"){
if (msg.member.roles.cache.has(config.botperms_role) == false && msg.author.id != "779742674932072469"){
msg.channel.send({content:"You don't have permissions for this command!"})
return
}
msg.channel.messages.fetchPinned().then(msglist => {
if (msglist.last().author.id != client.user.id){
msg.channel.send({content:"You aren't in a ticket!"})
return
}
if (args[2] == null || args[2] == undefined || args[2] == "" || args[2] == false){
msg.channel.send({content:"Not enough parameters!"})
return
}
var user = msg.mentions.users.first()
if (!user){
return
}
msg.channel.permissionOverwrites.delete(user.id)
})
}
})
}
-245
View File
@@ -1,245 +0,0 @@
const discord = require('discord.js')
const bot = require('../index')
const client = bot.client
const config = require("../config.json")
const ticketStorage = bot.TicketStorage
const userTicketStorage = bot.userTicketStorage
const transcriptStorage = bot.transcriptStorage
module.exports = () => {
var closeButton = new discord.MessageActionRow()
.addComponents(
new discord.MessageButton()
.setCustomId("closeTicket")
.setDisabled(false)
.setStyle("SECONDARY")
.setLabel("Close Ticket")
.setEmoji("❌")
)
client.on("interactionCreate",interaction => {
if (interaction.isButton() == false){
return
}
if (interaction.customId == "newTicket1"||interaction.customId == "newTicket2"||interaction.customId == "newTicket3"||interaction.customId == "newTicket4"){
interaction.deferUpdate()
if (ticketStorage.getItem(interaction.member.id) == null ||ticketStorage.getItem(interaction.member.id) == "false"){
try{
interaction.member.send("**You created a ticket in our server!**")
}
catch{console.log("can't send DM to member || member doesn't allow dm's")}
ticketStorage.setItem(interaction.member.id,"true")
var ticketNumber = interaction.member.user.username
if (interaction.customId == "newTicket1"){
var ticketName = config.options.ticket1.channel_prefix+ticketNumber
}else if (interaction.customId == "newTicket2"){
var ticketName = config.options.ticket2.channel_prefix+ticketNumber
}else if (interaction.customId == "newTicket3"){
var ticketName = config.options.ticket3.channel_prefix+ticketNumber
}else if (interaction.customId == "newTicket4"){
var ticketName = config.options.ticket4.channel_prefix+ticketNumber
}
if (config.system.enable_category){
var Category = config.system.ticket_category
}else{var Category = null}
interaction.guild.channels.create(ticketName,{
type:"GUILD_TEXT",
parent:Category,
permissionOverwrites:[
{
id:interaction.member.id,
type:"member",
allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
},
{
id:config.botperms_role,
type:"role",
allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"]
},
{
id:config.system.member_role,
type:"role",
deny:["VIEW_CHANNEL"]
}
]
}).then(tChannel => {
userTicketStorage.setItem(tChannel.id,interaction.member.id)
var ticketEmbed = new discord.MessageEmbed()
.setColor(config.main_color)
ticketEmbed.setDescription("You created a ticket!\n\n_Click on the close button below to close this ticket_")
tChannel.send({content:"<@"+interaction.member.id+"> <@&"+config.botperms_role+">",embeds:[ticketEmbed],components:[closeButton]}).then(firstmsg => {
firstmsg.pin()
})
})
}else{
try {
interaction.member.send("**You have already created a ticket!**")
}
catch{console.log("can't send DM to member || member doesn't allow dm's")}
}
}
})
var closeBar = new discord.MessageActionRow()
.addComponents(
new discord.MessageButton()
.setCustomId("closeTicketTrue")
.setDisabled(false)
.setStyle("SECONDARY")
.setEmoji("✅")
)
.addComponents(
new discord.MessageButton()
.setCustomId("closeTicketFalse")
.setDisabled(false)
.setStyle("SECONDARY")
.setEmoji("❌")
)
client.on("interactionCreate",interaction => {
if (interaction.isButton() == false){
return
}
if (interaction.customId == "closeTicket"){
interaction.deferUpdate()
interaction.message.edit({components:[closeBar]})
}
})
client.on("interactionCreate",interaction => {
if (interaction.isButton() == false){
return
}
if (interaction.customId == "closeTicketFalse"){
interaction.deferUpdate()
interaction.message.edit({components:[closeButton]})
}
})
client.on("interactionCreate",interaction => {
if (interaction.isButton() == false){
return
}
if (interaction.customId == "closeTicketTrue"){
interaction.deferUpdate()
interaction.channel.messages.fetch().then(messages => {
var transcriptArray = []
messages.forEach(msg => {
if (msg.author.id != client.user.id){
transcriptArray.push("["+msg.author.username+"]: "+msg.content)
}
})
var getuserID = userTicketStorage.getItem(interaction.channel.id)
var getusernameStep1 = client.users.cache.find(u => u.id === getuserID)
if (getusernameStep1 == null || getusernameStep1 == undefined || getusernameStep1 == false || getusernameStep1 == ""){
var getuserNAME = ":usernotfound:"
}else {
var getuserNAME = getusernameStep1.username
}
if (config.system.enable_transcript){
var transcript = transcriptArray.reverse().join("\n")
transcriptStorage.setItem(interaction.channel.id,transcript)
var splittedTranscript = [transcript.slice(0,2000)]
if (transcript.length > 4000){
splittedTranscript.push(transcript.slice(2000,4000))
splittedTranscript.push(transcript.slice(4000))
}else if (transcript.length > 2000){
splittedTranscript.push(transcript.slice(2000))
}
var transcriptEmbed = new discord.MessageEmbed()
.setColor(config.main_color)
.setAuthor(interaction.channel.name + " - ticket created by "+getuserNAME)
.setTitle("There is a new transcript!")
.setDescription(splittedTranscript[0])
.setFooter("ticket closed by "+interaction.member.user.username)
if (transcript.length > 4000){
var transcriptEmbed2 = new discord.MessageEmbed()
.setColor(config.main_color)
.setAuthor(interaction.channel.name + " - ticket created by "+getuserNAME)
.setTitle("transcript #2")
.setDescription(splittedTranscript[1])
.setFooter("ticket closed by "+interaction.member.user.username)
var transcriptEmbed3 = new discord.MessageEmbed()
.setColor(config.main_color)
.setAuthor(interaction.channel.name + " - ticket created by "+getuserNAME)
.setTitle("transcript #3")
.setDescription(splittedTranscript[1])
.setFooter("ticket closed by "+interaction.member.user.username)
client.channels.cache.find(ch => ch.id == config.system.transcript_channel).send({embeds:[transcriptEmbed,transcriptEmbed2,transcriptEmbed3]})
}else if (transcript.length > 2000){
var transcriptEmbed2 = new discord.MessageEmbed()
.setColor(config.main_color)
.setAuthor(interaction.channel.name + " - ticket created by "+getuserNAME)
.setTitle("transcript #2")
.setDescription(splittedTranscript[1])
.setFooter("ticket closed by "+interaction.member.user.username)
client.channels.cache.find(ch => ch.id == config.system.transcript_channel).send({embeds:[transcriptEmbed,transcriptEmbed2]})
}else{
client.channels.cache.find(ch => ch.id == config.system.transcript_channel).send({embeds:[transcriptEmbed]})
}
}
interaction.channel.delete()
ticketStorage.setItem(getuserID,"false")
try {
interaction.member.send("**your ticket is closed by "+interaction.member.user.username+"!**")
}
catch{console.log("can't send DM to member || member doesn't allow dm's")}
})
}
})
process.on('unhandledRejection',error => {
console.log("ERROR: "+error)
})
}
-59
View File
@@ -1,59 +0,0 @@
{
"server_name":"Ticket Bot Land",
"server_logo":"https://www.example.com/another-example/yourlogo.png",
"bot_name":"Wumpus",
"main_color":"#fffff",
"auth_token":"the bot's auth token",
"botperms_role":"the id from a role that can do anything with the bot",
"prefix":"!",
"credits_please-do-not-remove":true,
"status":{
"type":"PLAYING | STREAMING | LISTENING | WATCHING | CUSTOM | COMPETING",
"text":"!ticket"
},
"system":{
"ticket_channel":"id of the channel with the !ticket msg",
"enable_category":false,
"ticket_category":"the id of a category for the tickets",
"member_role":"this role doesn't have access to tickets (WARNING: @everyone does have access to tickets, so make sure all members have a member role!)",
"enable_transcript":false,
"transcript_channel":"the channel for transcripts"
},
"options":{
"ticket1":{
"enabled":true,
"icon":"🎫",
"description":"Create a general ticket.",
"name":"Ticket",
"channel_prefix":"ticket-"
},
"ticket2":{
"enabled":false,
"icon":"💼",
"description":"Do you want to apply? Then click here!",
"name":"Apply",
"channel_prefix":"apply-"
},
"ticket3":{
"enabled":false,
"icon":"❓",
"description":"Click here if you have a question about the server.",
"name":"Question",
"channel_prefix":"question-"
},
"ticket4":{
"enabled":false,
"icon":"🛒",
"description":"Buy something in our shop.",
"name":"Shop",
"channel_prefix":"shop-"
}
}
}
+95
View File
@@ -0,0 +1,95 @@
{
"_INFO":{
"support":"https://otdocs.dj-dj.be",
"discord":"https://discord.dj-dj.be",
"version":"open-ticket-v4.0.0"
},
"token":"your bot token here! (or leave empty when using 'tokenFromENV')",
"tokenFromENV":false,
"mainColor":"#f8ba00",
"language":"english",
"prefix":"!ticket ",
"serverId":"discord server id",
"globalAdmins":["discord role id"],
"slashCommands":true,
"textCommands":true,
"status":{
"enabled":true,
"type":"listening OR watching OR playing OR custom",
"text":"/help",
"status":"online OR invisible OR idle OR dnd"
},
"system":{
"removeParticipantsOnClose":false,
"replyOnTicketCreation":true,
"replyOnReactionRole":true,
"useTranslatedConfigChecker":true,
"preferSlashOverText":true,
"sendErrorOnUnknownCommand":true,
"questionFieldsInCodeBlock":true,
"disableVerifyBars":false,
"useRedErrorEmbeds":true,
"emojiStyle":"before (OR after OR double OR disabled)",
"enableTicketClaimButtons":true,
"enableTicketCloseButtons":true,
"enableTicketPinButtons":true,
"enableTicketDeleteButtons":true,
"enableTicketActionWithReason":true,
"enableDeleteWithoutTranscript":true,
"logs":{
"enabled":false,
"channel":"discord channel id"
},
"limits":{
"enabled":true,
"globalMaximum":50,
"userMaximum":3
},
"permissions":{
"help":"everyone (OR admin OR none OR role id)",
"panel":"admin (OR everyone OR none OR role id)",
"ticket":"none (OR admin OR everyone OR role id)",
"close":"everyone (OR admin OR none OR role id)",
"delete":"admin (OR everyone OR none OR role id)",
"reopen":"everyone (OR admin OR none OR role id)",
"claim":"admin (OR everyone OR none OR role id)",
"unclaim":"admin (OR everyone OR none OR role id)",
"pin":"admin (OR everyone OR none OR role id)",
"unpin":"admin (OR everyone OR none OR role id)",
"move":"admin (OR everyone OR none OR role id)",
"rename":"admin (OR everyone OR none OR role id)",
"add":"admin (OR everyone OR none OR role id)",
"remove":"admin (OR everyone OR none OR role id)",
"blacklist":"admin (OR everyone OR none OR role id)",
"stats":"everyone (OR admin OR none OR role id)",
"clear":"admin (OR everyone OR none OR role id)",
"autoclose":"admin (OR everyone OR none OR role id)",
"autodelete":"admin (OR everyone OR none OR role id)"
},
"messages":{
"creation":{"dm":false, "logs":true},
"closing":{"dm":false, "logs":true},
"deleting":{"dm":false, "logs":true},
"reopening":{"dm":false, "logs":true},
"claiming":{"dm":false, "logs":true},
"pinning":{"dm":false, "logs":true},
"adding":{"dm":false, "logs":true},
"removing":{"dm":false, "logs":true},
"renaming":{"dm":false, "logs":true},
"moving":{"dm":false, "logs":true},
"blacklisting":{"dm":false, "logs":true},
"roleAdding":{"dm":false, "logs":true},
"roleRemoving":{"dm":false, "logs":true}
}
}
}
+122
View File
@@ -0,0 +1,122 @@
[
{
"id":"example-ticket",
"name":"Question",
"description":"Create this ticket if you have a question! (or leave empty)",
"type":"ticket",
"button":{
"emoji":"🎫 (or leave empty)",
"label":"question (or leave empty)",
"color":"gray OR red OR green OR blue"
},
"ticketAdmins":["discord role id"],
"readonlyAdmins":["discord role id"],
"allowCreationByBlacklistedUsers":false,
"questions":["example-question-1","example-question-2"],
"channel":{
"prefix":"question-",
"suffix":"user-name OR user-id OR random-number OR random-hex OR counter-dynamic OR counter-fixed",
"category":"category id (or leave empty)",
"closedCategory":"category id (or leave empty)",
"backupCategory":"category id (or leave empty)",
"claimedCategory":[
{"user":"user id","category":"category id"}
],
"description":"This is a question ticket (or leave empty)"
},
"dmMessage":{
"enabled":false,
"text":"Thank you for creating a ticket in our server! (or leave empty)",
"embed":{
"enabled":false,
"title":"Embed Title! (or leave empty)",
"description":"Description (or leave empty)",
"customColor":"#f8ab00 (or leave empty)",
"image":"https://www.example.com/image.png (or leave empty)",
"thumbnail":"https://www.example.com/image.png (or leave empty)",
"fields":[
{"name":"field name","value":"field value","inline":false}
],
"timestamp":false
}
},
"ticketMessage":{
"enabled":true,
"text":"",
"embed":{
"enabled":true,
"title":"Question Ticket",
"description":"Thank you for creating a 'Question' ticket in our server!\nOur support team will help you as soon as possible!",
"customColor":"#f8ab00 (or leave empty)",
"image":"https://www.example.com/image.png (or leave empty)",
"thumbnail":"https://www.example.com/image.png (or leave empty)",
"fields":[
{"name":"field name","value":"field value","inline":false}
],
"timestamp":false
},
"ping":{
"@here":true,
"@everyone":false,
"custom":["discord role id"]
}
},
"autoclose":{
"enableInactiveHours":false,
"inactiveHours":24,
"enableUserLeave":false,
"disableOnClaim":false
},
"autodelete":{
"enableInactiveDays":false,
"inactiveDays":7,
"enableUserLeave":false,
"disableOnClaim":false
},
"cooldown":{
"enabled":false,
"cooldownMinutes":10
},
"limits":{
"enabled":false,
"globalMaximum":20,
"userMaximum":3
}
},
{
"id":"example-website",
"name":"Website",
"description":"Go to our website.",
"type":"website",
"button":{
"emoji":"😃",
"label":"Visit our website"
},
"url":"https://www.dj-dj.be"
},
{
"id":"example-role",
"name":"Update Ping",
"description":"Click here to get notified on updates!",
"type":"role",
"button":{
"emoji":"📢",
"label":"Update Ping",
"color":"gray OR red OR green OR blue"
},
"roles":["discord role id"],
"mode":"add&remove OR remove OR add",
"removeRolesOnAdd":["discord role id"],
"addOnMemberJoin":false
}
]
+39
View File
@@ -0,0 +1,39 @@
[
{
"id":"example-embed",
"name":"Example Embed",
"dropdown":false,
"options":["example-ticket","example-website","example-role"],
"text":"",
"embed":{
"enabled":true,
"title":"Tickets:",
"description":"Create a ticket by clicking one of the buttons below!",
"customColor":"#f8ab00 (or leave empty)",
"url":"https://openticket.dj-dj.be (or leave empty)",
"image":"https://www.example.com/image.png (or leave empty)",
"thumbnail":"https://www.example.com/image.png (or leave empty)",
"footer":"Open Ticket v4.0.0 (or leave empty)",
"fields":[
{"name":"field name","value":"field value","inline":false}
],
"timestamp":false
},
"settings":{
"dropdownPlaceholder":"Create a ticket!",
"enableMaxTicketsWarningInText":false,
"enableMaxTicketsWarningInEmbed":true,
"describeOptionsLayout":"simple OR normal OR detailed",
"describeOptionsCustomTitle":"",
"describeOptionsInText":false,
"describeOptionsInEmbedFields":true,
"describeOptionsInEmbedDescription":false
}
}
]
+28
View File
@@ -0,0 +1,28 @@
[
{
"id":"example-question-1",
"name":"Example Question 1",
"type":"short",
"required":true,
"placeholder":"Insert your short answer here!",
"length":{
"enabled":false,
"min":0,
"max":1000
}
},
{
"id":"example-question-2",
"name":"Example Question 2",
"type":"paragraph",
"required":false,
"placeholder":"Insert your long answer here!",
"length":{
"enabled":false,
"min":0,
"max":1000
}
}
]
+55
View File
@@ -0,0 +1,55 @@
{
"general":{
"enabled":false,
"enableChannel":false,
"enableCreatorDM":false,
"enableParticipantDM":false,
"enableActiveAdminDM":false,
"enableEveryAdminDM":false,
"channel":"transcript channel id (or leave empty)",
"mode":"html OR text"
},
"embedSettings":{
"customColor":"#f8ab00 (or leave empty)",
"listAllParticipants":false,
"includeTicketStats":false
},
"textTranscriptStyle":{
"layout":"simple OR normal OR detailed",
"includeStats":true,
"includeIds":false,
"includeEmbeds":true,
"includeFiles":true,
"includeBotMessages":true,
"fileMode":"custom OR channel-name OR channel-id OR user-name OR user-id",
"customFileName":"this-is-a-transcript (or leave empty)"
},
"htmlTranscriptStyle":{
"background":{
"enableCustomBackground":false,
"backgroundColor":"#f8ba00 (or leave empty)",
"backgroundImage":"https://www.example.com/image.png (or leave empty)"
},
"header":{
"enableCustomHeader":false,
"backgroundColor":"#202225",
"decoColor":"#f8ba00",
"textColor":"#ffffff"
},
"stats":{
"enableCustomStats":false,
"backgroundColor":"#202225",
"keyTextColor":"#737373",
"valueTextColor":"#ffffff",
"hideBackgroundColor":"#40444a",
"hideTextColor":"#ffffff"
},
"favicon":{
"enableCustomFavicon":false,
"imageUrl":"https://transcripts.dj-dj.be/favicon.png"
}
}
}
+1
View File
@@ -0,0 +1 @@
[]
+1
View File
@@ -0,0 +1 @@
[]
+1
View File
@@ -0,0 +1 @@
[]
+1
View File
@@ -0,0 +1 @@
[]
+1
View File
@@ -0,0 +1 @@
[]
+11
View File
@@ -0,0 +1,11 @@
# Docker Compose for Open Ticket v4
version: '3'
services:
openticket:
build: .
volumes:
- openticket:/home/container
restart: no
container_name: open-ticket
volumes:
openticket:
+18
View File
@@ -0,0 +1,18 @@
# Docker File for Open Ticket v4
# Use the official Node.js 20 image from Docker Hub
FROM node:20-alpine
# Set pterodactyl working directory inside the container
WORKDIR /home/container
# Copy package.json and package-lock.json into the container
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy the rest of your app's source code into the container
COPY . .
# Run the bot from index.js
CMD ["node", "index.js"]
+129 -23
View File
@@ -1,31 +1,137 @@
const discord = require('discord.js')
const config = require('./config.json')
const intents = discord.Intents
const client = new discord.Client({intents:[intents.FLAGS.GUILDS,intents.FLAGS.GUILD_MESSAGES,intents.FLAGS.GUILD_MEMBERS]})
exports.client = client
/////////////// STARTUP FLAGS ///////////////
const flags = [
// Edit flags here when being unable to use the flags in the command prompt.
//PTERODACTYL PANEL
//add startup flags here (e.g. "--no-compile") when running via the panel
]
process.argv.push(...flags)
/////////////// STARTUP FLAGS ///////////////
client.on('ready',() => {
console.log('ready')
client.user.setActivity(config.status.text,{type:config.status.type})
})
/*
██████╗ ██████╗ ███████╗███╗ ██╗ ████████╗██╗ ██████╗██╗ ██╗███████╗████████╗
██╔═══██╗██╔══██╗██╔════╝████╗ ██║ ╚══██╔══╝██║██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝
██║ ██║██████╔╝█████╗ ██╔██╗ ██║ ██║ ██║██║ █████╔╝ █████╗ ██║
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║
╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝
v4.0.0 - Made by DJj123dj & Contributors
var storage = require('./storage/storage')
exports.TicketStorage = storage.ticketStorage
exports.userTicketStorage = storage.userTicketStorage
exports.transcriptStorage = storage.transcriptStorage
exports.ticketNumberStorage = storage.ticketNumberStorage
Discord: https://discord.dj-dj.be
Docs: https://otdocs.dj-dj.be
Support Us: https://github.com/sponsors/DJj123dj/
var ticket = require('./commands/ticket')
ticket()
*/
///////////////////////////////////////////
////////// COMPILATION + STARTUP //////////
///////////////////////////////////////////
const fs = require("fs")
const ts = require("typescript")
const {createHash,Hash} = require("crypto")
const nodepath = require('path')
var ticketSystem = require('./commands/ticketSystem')
ticketSystem()
/** ## What is this?
* This is a function which compares `./src/` with a hash stored in `./dist/hash.txt`.
* The hash is based on the modified date & file metadata of all files in `./src/`.
*
* If the hash is different, the bot will automatically re-compile.
* This will help you save CPU resources because the bot shouldn't re-compile when nothing has been changed :)
*
* @param {string} dir
* @param {Hash|null} upperHash
*/
function computeSourceHash(dir,upperHash){
const hash = upperHash ? upperHash : createHash("sha256")
const info = fs.readdirSync(dir,{withFileTypes:true})
var ticketExtra = require("./commands/ticketExtra")
ticketExtra()
for (const file of info) {
const fullPath = nodepath.join(dir,file.name)
if (file.isFile() && [".js",".ts",".jsx",".tsx"].some((ext) => file.name.endsWith(ext))){
const statInfo = fs.statSync(fullPath)
//compute hash using file metadata
const fileInfo = `${fullPath}:${statInfo.size}:${statInfo.mtimeMs}`
hash.update(fileInfo)
var database = require('./commands/database')
database()
}else if (file.isDirectory()){
//recursively compute all folders
computeSourceHash(fullPath,hash)
}
}
//return when not being called recursively
if (!upperHash) {
return hash.digest("hex")
}
}
function requiresCompilation(){
//check hashes when not using "--compile-only" flag
if (process.argv.includes("--compile-only")) return true
console.log("OT: Comparing prebuilds with source...")
const sourceHash = computeSourceHash("./src/")
const pluginHash = computeSourceHash("./plugins/")
const hash = sourceHash+":"+pluginHash
client.login(config.auth_token)
if (fs.existsSync("./dist/hash.txt")){
const distHash = fs.readFileSync("./dist/hash.txt").toString()
if (distHash === hash) return false
else return true
}else return true
}
function saveNewCompilationHash(){
const sourceHash = computeSourceHash("./src/")
const pluginHash = computeSourceHash("./plugins/")
const hash = sourceHash+":"+pluginHash
fs.writeFileSync("./dist/hash.txt",hash)
}
if (!process.argv.includes("--no-compile")){
if (requiresCompilation()){
console.log("OT: Compilation Required...")
//REMOVE EXISTING BUILDS
console.log("OT: Removing Prebuilds...")
fs.rmSync("./dist",{recursive:true,force:true})
//COMPILE TYPESCRIPT
console.log("OT: Compiling Typescript...")
const configPath = nodepath.resolve('./tsconfig.json')
const configFile = ts.readConfigFile(configPath,ts.sys.readFile)
//check for tsconfig errors
if (configFile.error){
const message = ts.formatDiagnosticsWithColorAndContext([configFile.error],ts.createCompilerHost({}))
console.error(message)
process.exit(1)
}
//parse tsconfig file
const parsedConfig = ts.parseJsonConfigFileContent(configFile.config,ts.sys,nodepath.dirname(configPath))
//create program/compiler
const program = ts.createProgram({
rootNames:parsedConfig.fileNames,
options:parsedConfig.options
})
//emit all compiled files
const emitResult = program.emit()
//print emit errors/warnings (type errors)
const allDiagnostics = ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics)
const formattedDiagnostics = ts.formatDiagnosticsWithColorAndContext(allDiagnostics, ts.createCompilerHost(parsedConfig.options))
console.log(formattedDiagnostics)
if (emitResult.emitSkipped || allDiagnostics.find((d) => d.category == ts.DiagnosticCategory.Error || d.category == ts.DiagnosticCategory.Warning)){
console.log("OT: Compilation Failed!")
process.exit(1)
}
}else console.log("OT: No Compilation Required...")
//save new compilation hash
saveNewCompilationHash()
}
//START BOT
console.log("OT: Compilation Succeeded!")
if (process.argv.includes("--compile-only")) process.exit(0) //exit when only compile is required!
console.log("OT: Starting Bot!")
require("./dist/src/index.js")
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION": {
"otversion": "v4.0.0",
"translators": ["palestinian"],
"lastedited": "06/12/2024",
"language": "Arabic",
"automated": false
},
"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} غير صالح!",
"discordInvalidIdOptions": "هذا هو معرف {0} غير صالح! يمكنك أيضًا استخدام واحد من هؤلاء: {1}!",
"discordInvalidToken": "هذا هو رمز ديسكورد غير صالح (من الناحية التركيبية)!",
"colorInvalid": "هذا هو لون سداسي غير صالح!",
"emojiTooShort": "يجب أن تحتوي هذه السلسلة على ما لا يقل عن {0} رموز تعبيرية!",
"emojiTooLong": "يجب أن تحتوي هذه السلسلة على ما لا يزيد عن {0} رموز تعبيرية!",
"emojiCustom": "لا يمكن أن تكون هذه الرموز التعبيرية رمزًا مخصصًا لديسكورد!",
"emojiInvalid": "هذه الرموز التعبيرية غير صالحة!",
"urlInvalid": "هذا الرابط غير صالح!",
"urlInvalidHttp": "يمكن أن يستخدم هذا الرابط بروتوكول https:// فقط!",
"urlInvalidProtocol": "يمكن أن يستخدم هذا الرابط بروتوكولات http:// و https:// فقط!",
"urlInvalidHostname": "هذا الرابط يحتوي على اسم مضيف غير مسموح به!",
"urlInvalidExtension": "هذا الرابط يحتوي على امتداد غير صالح! اختر بين: {0}!",
"urlInvalidPath": "هذا الرابط يحتوي على مسار غير صالح!",
"idNotUnique": "هذا المعرف ليس فريدًا، استخدم معرفًا آخر بدلاً من ذلك!",
"idNonExistent": "المعرف {0} غير موجود!",
"invalidType": "تحتاج هذه الخاصية إلى أن تكون من النوع: {0}!",
"propertyMissing": "الخاصية {0} مفقودة من هذا الكائن!",
"propertyOptional": "الخاصية {0} اختيارية في هذا الكائن!",
"objectDisabled": "هذا الكائن معطل، قم بتمكينه باستخدام {0}!",
"nullInvalid": "لا يمكن أن تكون هذه الخاصية فارغة!",
"switchInvalidType": "يجب أن تكون واحدة من الأنواع التالية: {0}!",
"objectSwitchInvalid": "يجب أن يكون هذا الكائن واحدًا من الأنواع التالية: {0}!",
"invalidLanguage": "هذه لغة غير صالحة!",
"invalidButton": "يجب أن تحتوي هذه الزر على {0} أو {1} على الأقل!",
"unusedOption": "الخيار {0} غير مستخدم في أي مكان!",
"unusedQuestion": "السؤال {0} غير مستخدم في أي مكان!",
"dropdownOption": "يمكن أن تحتوي لوحة مع تمكين القائمة المنسدلة على خيارات من نوع 'تذكرة' فقط!"
}
},
"actions": {
"buttons": {
"create": "زيارة التذكرة",
"close": "إغلاق التذكرة",
"delete": "حذف التذكرة",
"reopen": "إعادة فتح التذكرة",
"claim": "مطالبة بالتذكرة",
"unclaim": "إلغاء المطالبة بالتذكرة",
"pin": "تثبيت التذكرة",
"unpin": "إلغاء تثبيت التذكرة",
"clear": "حذف التذاكر",
"helpSwitchSlash": "عرض أوامر الشريحة",
"helpSwitchText": "عرض أوامر النص",
"helpPage": "صفحة {0}",
"withReason": "مع سبب",
"withoutTranscript": "بدون نص"
},
"titles": {
"created": "تم إنشاء التذكرة",
"close": "تم إغلاق التذكرة",
"delete": "تم حذف التذكرة",
"reopen": "تم إعادة فتح التذكرة",
"claim": "تم المطالبة بالتذكرة",
"unclaim": "تم إلغاء المطالبة بالتذكرة",
"pin": "تم تثبيت التذكرة",
"unpin": "تم إلغاء تثبيت التذكرة",
"rename": "تم إعادة تسمية التذكرة",
"move": "تم نقل التذكرة",
"add": "تم إضافة مستخدم إلى التذكرة",
"remove": "تم إزالة مستخدم من التذكرة",
"help": "الأوامر المتاحة",
"statsReset": "إعادة تعيين الإحصائيات",
"blacklistAdd": "تم حظر المستخدم",
"blacklistRemove": "تم الإفراج عن المستخدم",
"blacklistGet": "المستخدم المحظور",
"blacklistView": "القائمة السوداء الحالية",
"blacklistAddDm": "تمت إضافتك إلى القائمة السوداء",
"blacklistRemoveDm": "تمت إزالتك من القائمة السوداء",
"clear": "تم مسح التذاكر",
"roles": "تم تحديث الأدوار",
"autoclose": "تم إغلاق التذكرة تلقائيًا",
"autocloseEnabled": "تم تمكين الإغلاق التلقائي",
"autocloseDisabled": "تم تعطيل الإغلاق التلقائي",
"autodelete": "تم حذف التذكرة تلقائيًا",
"autodeleteEnabled": "تم تمكين الحذف التلقائي",
"autodeleteDisabled": "تم تعطيل الحذف التلقائي"
},
"descriptions": {
"create": "تم إنشاء تذكرتك. انقر على الزر أدناه للوصول إليها!",
"close": "تم إغلاق التذكرة بنجاح!",
"delete": "تم حذف التذكرة بنجاح!",
"reopen": "تم إعادة فتح التذكرة بنجاح!",
"claim": "تم المطالبة بالتذكرة بنجاح!",
"unclaim": "تم إلغاء المطالبة بالتذكرة بنجاح!",
"pin": "تم تثبيت التذكرة بنجاح!",
"unpin": "تم إلغاء تثبيت التذكرة بنجاح!",
"rename": "تم إعادة تسمية التذكرة إلى {0} بنجاح!",
"move": "تم نقل التذكرة إلى {0} بنجاح!",
"add": "{0} تم إضافته إلى التذكرة بنجاح!",
"remove": "{0} تم إزالته من التذكرة بنجاح!",
"helpExplanation": "`<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} لا يعمل في DM! يرجى المحاولة مرة أخرى في خادم!",
"channelRename": "بسبب حدود معدل ديسكورد، من المستحيل حاليًا على البوت إعادة تسمية القناة. سيتم إعادة تسمية القناة تلقائيًا بعد 10 دقائق إذا لم يتم إعادة تشغيل البوت.",
"channelRenameSource": "مصدر هذا الخطأ هو: {0}",
"busy": "غير قادر على استخدام هذا {0}!\nالتذكرة قيد المعالجة حاليًا بواسطة البوت.\n\nيرجى المحاولة مرة أخرى بعد بضع ثوانٍ!"
},
"optionInvalidReasons": {
"stringRegex": "القيمة لا تتطابق مع النمط!",
"stringMinLength": "تحتاج القيمة إلى أن تكون على الأقل {0} حرفًا!",
"stringMaxLength": "تحتاج القيمة إلى أن تكون على الأكثر {0} حرفًا!",
"numberInvalid": "رقم غير صالح!",
"numberMin": "يحتاج الرقم إلى أن يكون على الأقل {0}!",
"numberMax": "يحتاج الرقم إلى أن يكون على الأكثر {0}!",
"numberDecimal": "الرقم غير مسموح به كعدد عشري!",
"numberNegative": "الرقم غير مسموح به كعدد سالب!",
"numberPositive": "الرقم غير مسموح به كعدد موجب!",
"numberZero": "الرقم غير مسموح به كعدد صفر!",
"channelNotFound": "غير قادر على العثور على القناة!",
"userNotFound": "غير قادر على العثور على المستخدم!",
"roleNotFound": "غير قادر على العثور على الدور!",
"memberNotFound": "غير قادر على العثور على المستخدم!",
"mentionableNotFound": "غير قادر على العثور على مستخدم أو دور!",
"channelType": "نوع القناة غير صالح!",
"notInGuild": "يتطلب هذا الخيار أن تكون في خادم!"
},
"permissions": {
"developer": "تحتاج إلى أن تكون مطور البوت.",
"owner": "تحتاج إلى أن تكون مالك الخادم.",
"admin": "تحتاج إلى أن تكون مشرف الخادم.",
"moderator": "تحتاج إلى أن تكون مشرفًا.",
"support": "تحتاج إلى أن تكون في فريق الدعم.",
"member": "تحتاج إلى أن تكون عضوًا.",
"discord-administrator": "تحتاج إلى الحصول على إذن `ADMINISTRATOR`."
},
"actionInvalid": {
"close": "التذكرة مغلقة بالفعل!",
"reopen": "التذكرة لم تُغلق بعد!",
"claim": "التذكرة مُطالبة بالفعل!",
"unclaim": "التذكرة لم تُطالب بعد!",
"pin": "التذكرة مثبتة بالفعل!",
"unpin": "التذكرة لم تُثبت بعد!",
"add": "هذا المستخدم لديه بالفعل إمكانية الوصول إلى التذكرة!",
"remove": "غير قادر على إزالة هذا المستخدم من التذكرة!"
}
},
"params": {
"uppercase": {
"ticket": "تذكرة",
"tickets": "تذاكر",
"reason": "سبب",
"creator": "المنشئ",
"remaining": "الوقت المتبقي",
"added": "تمت الإضافة",
"removed": "تمت الإزالة",
"filter": "تصفية",
"claimedBy": "مطالب بها من قبل {0}",
"method": "طريقة",
"type": "نوع",
"blacklisted": "محظور",
"panel": "لوحة",
"command": "أمر",
"system": "نظام",
"true": "صحيح",
"false": "خطأ",
"syntax": "بناء الجملة",
"originalName": "الاسم الأصلي",
"newName": "الاسم الجديد",
"until": "حتى",
"validOptions": "خيارات صالحة",
"validPanels": "لوحات صالحة",
"autoclose": "إغلاق تلقائي",
"autodelete": "حذف تلقائي",
"startupDate": "تاريخ بدء التشغيل",
"version": "إصدار",
"name": "اسم",
"role": "دور",
"status": "حالة",
"claimed": "مطالب بها",
"pinned": "مثبتة",
"creationDate": "تاريخ الإنشاء"
},
"lowercase": {
"text": "نص",
"html": "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 ": "عرض إحصائيات مستخدم في الخادم.",
"statsUser User": "المستخدم الذي تريد عرض إحصائياته.",
"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": "النصوص التي تم إنشاؤها"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["guillee3"],
"lastedited":"21/08/2024",
"language":"Catalan",
"automated":false
},
"checker":{
"system":{
"typeError":"[ERROR]",
"headerOpenTicket":"OPEN TICKET",
"typeWarning":"[AVÍS]",
"typeInfo":"[INFO]",
"headerConfigChecker":"VERIFICADOR DE CONFIGURACIÓ",
"headerDescription":"comprova si existeixen errors als teus fitxers de configuració!",
"footerError":"el bot no s'iniciarà fins que tots els {0} es solucionin!",
"footerWarning":"es recomana solucionar tots els {0} abans de començar!",
"footerSupport":"SUPORT: {0} - DOCUMENTACIÓ: {1}",
"compactInformation":"utilitza {0} per obtenir més informació!",
"dataPath":"ruta",
"dataDocs":"documents",
"dataMessages":"missatge"
},
"messages":{
"stringTooShort":"Aquesta cadena no pot tenir menys de {0} caràcters!",
"stringTooLong":"Aquesta cadena no pot tenir més de {0} caràcters!",
"stringLengthInvalid":"Aquesta cadena ha de tenir {0} caràcters!",
"stringStartsWith":"Aquesta cadena ha de començar amb {0}!",
"stringEndsWith":"Aquesta cadena ha d'acabar amb {0}!",
"stringContains":"Aquesta cadena ha de contenir {0}!",
"stringChoices":"Aquesta cadena només pot ser un dels valors següents: {0}!",
"stringRegex":"Aquesta cadena és invàlida!",
"numberTooShort":"Aquest nombre no pot tenir menys de {0} caràcters!",
"numberTooLong":"Aquest nombre no pot tenir més de {0} caràcters!",
"numberLengthInvalid":"Aquest nombre ha de tenir {0} caràcters!",
"numberTooSmall":"Aquest nombre ha de ser almenys {0}!",
"numberTooLarge":"Aquest nombre ha de ser com a màxim {0}!",
"numberNotEqual":"Aquest nombre ha de ser {0}!",
"numberStep":"Aquest nombre ha de ser un múltiple de {0}!",
"numberStepOffset":"Aquest nombre ha de ser un múltiple de {0} començant amb {1}!",
"numberStartsWith":"Aquest nombre ha de començar amb {0}!",
"numberEndsWith":"Aquest nombre ha d'acabar amb {0}!",
"numberContains":"Aquest nombre ha de contenir {0}!",
"numberChoices":"Aquest nombre només pot ser un dels valors següents: {0}!",
"numberFloat":"Aquest nombre no pot ser un decimal!",
"numberNegative":"Aquest nombre no pot ser negatiu!",
"numberPositive":"Aquest nombre no pot ser positiu!",
"numberZero":"Aquest nombre no pot ser zero!",
"booleanTrue":"Aquest booleà no pot ser veritable!",
"booleanFalse":"Aquest booleà no pot ser fals!",
"arrayEmptyDisabled":"Aquest array no pot estar buit!",
"arrayEmptyRequired":"Aquest array ha d'estar buit!",
"arrayTooShort":"Aquest array ha de tenir una longitud d'almenys {0}!",
"arrayTooLong":"Aquest array ha de tenir una longitud màxima de {0}!",
"arrayLengthInvalid":"Aquest array ha de tenir una longitud de {0}!",
"arrayInvalidTypes":"Aquest array només pot contenir els tipus següents: {0}!",
"arrayDouble":"Aquest array no permet el mateix valor dues vegades!",
"discordInvalidId":"Aquest és un id de {0} de discord invàlid!",
"discordInvalidIdOptions":"Aquest és un id de {0} de discord invàlid! També en pots utilitzar un d'aquests: {1}!",
"discordInvalidToken":"Aquest és un token de discord invàlid (sintàcticament)!",
"colorInvalid":"Aquest és un color hex invàlid!",
"emojiTooShort":"Aquesta cadena ha de tenir almenys {0} emojis!",
"emojiTooLong":"Aquesta cadena ha de tenir com a màxim {0} emojis!",
"emojiCustom":"Aquest emoji no pot ser un emoji personalitzat de discord!",
"emojiInvalid":"Aquest és un emoji invàlid!",
"urlInvalid":"Aquesta url és invàlida!",
"urlInvalidHttp":"Aquesta url només pot utilitzar el protocol https://!",
"urlInvalidProtocol":"Aquesta url només pot utilitzar els protocols http:// i https://!",
"urlInvalidHostname":"Aquesta url té un nom de domini no permès!",
"urlInvalidExtension":"Aquesta url té una extensió invàlida! Tria entre: {0}!",
"urlInvalidPath":"Aquesta url té un camí invàlid!",
"idNotUnique":"Aquest id no és únic, utilitza un altre id!",
"idNonExistent":"L'id {0} no existeix!",
"invalidType":"Aquesta propietat ha de ser del tipus: {0}!",
"propertyMissing":"La propietat {0} falta en aquest objecte!",
"propertyOptional":"La propietat {0} és opcional en aquest objecte!",
"objectDisabled":"Aquest objecte està desactivat, activa'l utilitzant {0}!",
"nullInvalid":"Aquesta propietat no pot ser nul·la!",
"switchInvalidType":"Això ha de ser d'un dels tipus següents: {0}!",
"objectSwitchInvalid":"Aquest objecte ha de ser d'un dels tipus següents: {0}!",
"invalidLanguage":"Aquest és un idioma invàlid!",
"invalidButton":"Aquest botó ha de tenir almenys un {0} o {1}!",
"unusedOption":"L'opció {0} no s'utilitza enlloc!",
"unusedQuestion":"La pregunta {0} no s'utilitza enlloc!",
"dropdownOption":"Un panell amb desplegable activat només pot contenir opcions del tipus 'ticket'!"
}
},
"actions":{
"buttons":{
"create":"Veure Ticket",
"close":"Tancar Ticket",
"delete":"Eliminar Ticket",
"reopen":"Reobrir Ticket",
"claim":"Reclamar Ticket",
"unclaim":"Alliberar Ticket",
"pin":"Fixar Ticket",
"unpin":"Desfixar Ticket",
"clear":"Eliminar Tickets",
"helpSwitchSlash":"Veure Comandes Slash",
"helpSwitchText":"Veure Comandes de Text",
"helpPage":"Pàgina {0}",
"withReason":"Amb Motiu",
"withoutTranscript":"Sense Transcripció"
},
"titles":{
"created":"Ticket Creat",
"close":"Ticket Tancat",
"delete":"Ticket Eliminat",
"reopen":"Ticket Reobert",
"claim":"Ticket Reclamat",
"unclaim":"Ticket Alliberat",
"pin":"Ticket Fixat",
"unpin":"Ticket Desfixat",
"rename":"Ticket Renomenat",
"move":"Ticket Mogut",
"add":"Usuari Afegit al Ticket",
"remove":"Usuari Eliminat del Ticket",
"help":"Comandes Disponibles",
"statsReset":"Restablir Estadístiques",
"blacklistAdd":"Usuari a la Llista Negra",
"blacklistRemove":"Usuari Alliberat",
"blacklistGet":"Usuari a la Llista Negra",
"blacklistView":"Llista Negra Actual",
"blacklistAddDm":"Afegit a la Llista Negra",
"blacklistRemoveDm":"Eliminat de la Llista Negra",
"clear":"Tickets Netejats",
"roles":"Rols Actualitzats",
"autoclose":"Ticket Tancat Automàticament",
"autocloseEnabled":"Tancament Automàtic Activat",
"autocloseDisabled":"Tancament Automàtic Desactivat",
"autodelete":"Ticket Eliminat Automàticament",
"autodeleteEnabled":"Eliminació Automàtica Activada",
"autodeleteDisabled":"Eliminació Automàtica Desactivada"
},
"descriptions":{
"create":"El teu ticket ha estat creat. Fes clic al botó a continuació per accedir-hi!",
"close":"El ticket ha estat tancat amb èxit!",
"delete":"El ticket ha estat eliminat amb èxit!",
"reopen":"El ticket ha estat reobert amb èxit!",
"claim":"El ticket ha estat reclamat amb èxit!",
"unclaim":"El ticket ha estat alliberat amb èxit!",
"pin":"El ticket ha estat fixat amb èxit!",
"unpin":"El ticket ha estat desfixat amb èxit!",
"rename":"El ticket ha estat renomenat a {0} amb èxit!",
"move":"El ticket ha estat mogut a {0} amb èxit!",
"add":"{0} ha estat afegit al ticket amb èxit!",
"remove":"{0} ha estat eliminat del ticket amb èxit!",
"helpExplanation":"`<nom>` => paràmetre requerit\n`[nom]` => paràmetre opcional",
"statsReset":"Les estadístiques del bot s'han restablert correctament!",
"statsError":"No es poden veure les estadístiques del ticket!\n{0} no és un ticket!",
"blacklistAdd":"{0} ha estat afegit a la llista negra amb èxit!",
"blacklistRemove":"{0} ha estat alliberat amb èxit!",
"blacklistGetSuccess":"{0} està actualment a la llista negra!",
"blacklistGetEmpty":"{0} actualment no està a la llista negra!",
"blacklistViewEmpty":"Encara no hi ha ningú a la llista negra!",
"blacklistViewTip":"Utilitza \"/blacklist add\" per afegir un usuari a la llista negra!",
"clearVerify":"Estàs segur que vols eliminar múltiples tickets?\nAquesta acció no es pot desfer!",
"clearReady":"{0} tickets han estat eliminats amb èxit!",
"rolesEmpty":"No s'han actualitzat rols!",
"autocloseLeave":"Aquest ticket ha estat tancat automàticament perquè el creador ha abandonat el servidor!",
"autocloseTimeout":"Aquest ticket ha estat tancat automàticament perquè ha estat inactiu durant més de `{0}h`!",
"autodeleteLeave":"Aquest ticket ha estat eliminat automàticament perquè el creador ha abandonat el servidor!",
"autodeleteTimeout":"Aquest ticket ha estat eliminat automàticament perquè ha estat inactiu durant més de `{0} dies`!",
"autocloseEnabled":"El tancament automàtic ha estat activat en aquest ticket!\nEs tancarà quan estigui inactiu durant més de `{0}h`!",
"autocloseDisabled":"El tancament automàtic ha estat desactivat en aquest ticket!\nJa no es tancarà automàticament!",
"autodeleteEnabled":"L'eliminació automàtica ha estat activada en aquest ticket!\nS'eliminarà quan estigui inactiu durant més de `{0} dies`!",
"autodeleteDisabled":"L'eliminació automàtica ha estat desactivada en aquest ticket!\nJa no s'eliminarà automàticament!",
"ticketMessageLimit":"Només pots crear {0} ticket(s) al mateix temps!",
"ticketMessageAutoclose":"Aquest ticket es tancarà automàticament quan estigui inactiu durant {0}h!",
"ticketMessageAutodelete":"Aquest ticket es eliminarà automàticament quan estigui inactiu durant {0} dies!",
"panelReady":"Pots trobar el panell a continuació!\nAquest missatge ara es pot eliminar!"
},
"modal":{
"closePlaceholder":"Per què has tancat aquest ticket?",
"deletePlaceholder":"Per què has eliminat aquest ticket?",
"reopenPlaceholder":"Per què has reobert aquest ticket?",
"claimPlaceholder":"Per què has reclamat aquest ticket?",
"unclaimPlaceholder":"Per què has alliberat aquest ticket?",
"pinPlaceholder":"Per què has fixat aquest ticket?",
"unpinPlaceholder":"Per què has desfixat aquest ticket?"
},
"logs":{
"createLog":"Un nou ticket ha estat creat per {0}!",
"closeLog":"Aquest ticket ha estat tancat per {0}!",
"closeDm":"El teu ticket ha estat tancat al nostre servidor!",
"deleteLog":"Aquest ticket ha estat eliminat per {0}!",
"deleteDm":"El teu ticket ha estat eliminat al nostre servidor!",
"reopenLog":"Aquest ticket ha estat reobert per {0}!",
"reopenDm":"El teu ticket ha estat reobert al nostre servidor!",
"claimLog":"Aquest ticket ha estat reclamat per {0}!",
"claimDm":"El teu ticket ha estat reclamat al nostre servidor!",
"unclaimLog":"Aquest ticket ha estat alliberat per {0}!",
"unclaimDm":"El teu ticket ha estat alliberat al nostre servidor!",
"pinLog":"Aquest ticket ha estat fixat per {0}!",
"pinDm":"El teu ticket ha estat fixat al nostre servidor!",
"unpinLog":"Aquest ticket ha estat desfixat per {0}!",
"unpinDm":"El teu ticket ha estat desfixat al nostre servidor!",
"renameLog":"Aquest ticket ha estat renombrat a {0} per {1}!",
"renameDm":"El teu ticket ha estat renombrat a {0} al nostre servidor!",
"moveLog":"Aquest ticket ha estat mogut a {0} per {1}!",
"moveDm":"El teu ticket ha estat mogut a {0} al nostre servidor!",
"addLog":"{0} ha estat afegit a aquest ticket per {1}!",
"addDm":"{0} ha estat afegit al teu ticket al nostre servidor!",
"removeLog":"{0} ha estat eliminat d'aquest ticket per {1}!",
"removeDm":"{0} ha estat eliminat del teu ticket al nostre servidor!",
"blacklistAddLog":"{0} ha estat afegit a la llista negra per {1}!",
"blacklistRemoveLog":"{0} ha estat eliminat de la llista negra per {1}!",
"blacklistAddDm":"Has estat afegit a la llista negra al nostre servidor!\nA partir d'ara, no pots crear cap ticket!",
"blacklistRemoveDm":"Has estat eliminat de la llista negra al nostre servidor!\nAra pots crear tickets de nou!",
"clearLog":"{0} tickets han estat eliminats per {1}!"
}
},
"transcripts":{
"success":{
"visit":"Veure Transcripció",
"ready":"Transcripció Creada",
"textFileDescription":"Aquesta és la transcripció de text d'un ticket eliminat!",
"htmlProgress":"Si us plau, espera mentre aquesta transcripció html es processa...",
"createdChannel":"S'ha creat una nova transcripció tipus {0} al servidor!",
"createdCreator":"S'ha creat una nova transcripció tipus {0} per un dels teus tickets!",
"createdParticipant":"S'ha creat una nova transcripció tipus {0} en un dels tickets on has participat!",
"createdActiveAdmin":"S'ha creat una nova transcripció tipus {0} en un dels tickets on has participat com a administrador!",
"createdEveryAdmin":"S'ha creat una nova transcripció tipus {0} en un dels tickets on eres administrador!",
"createdOther":"S'ha creat una nova transcripció tipus {0}!"
},
"errors":{
"retry":"Torna-ho a intentar",
"continue":"Elimina Sense Transcripció",
"backup":"Crea Transcripció de Backup",
"error":"Alguna cosa ha anat malament mentre intentàvem crear la transcripció.\nQuè t'agradaria fer?\n\nAquest ticket no s'eliminarà fins que facis clic en un d'aquests botons."
}
},
"errors":{
"titles":{
"internalError":"Error Intern",
"optionMissing":"Opció de Comanda Absent",
"optionInvalid":"Opció de Comanda Invàlida",
"unknownCommand":"Comanda Desconeguda",
"noPermissions":"No Tens Permisos",
"unknownTicket":"Ticket Desconegut",
"deprecatedTicket":"Ticket Obsolet",
"unknownOption":"Opció Desconeguda",
"unknownPanel":"Panell Desconegut",
"notInGuild":"No Ets Al Servidor",
"channelRename":"No Es Pot Canviar El Nom Del Canal",
"busy":"El Ticket Està Ocupat"
},
"descriptions":{
"askForInfo":"Contacta amb el propietari d'aquest bot per obtenir més informació!",
"askForInfoResolve":"Contacta amb el propietari del bot si aquest problema no es resol després de diversos intents.",
"internalError":"No s'ha pogut respondre a aquest {0} a causa d'un error intern!",
"optionMissing":"Falta un paràmetre requerit en aquesta comanda!",
"optionInvalid":"Un paràmetre d'aquesta comanda és invàlid!",
"optionInvalidChoose":"Tria entre",
"unknownCommand":"Prova de visitar el menú d'ajuda per obtenir més informació!",
"noPermissions":"No tens permís per utilitzar aquest {0}!",
"noPermissionsList":"Permisos Requerits: (un d'ells)",
"noPermissionsCooldown":"No tens permís per utilitzar aquest {0} perquè tens un temps de refredament!",
"noPermissionsBlacklist":"No tens permís per utilitzar aquest {0} perquè estàs a la llista negra!",
"noPermissionsLimitGlobal":"No tens permís per crear un ticket perquè el servidor ha arribat al límit màxim de tickets!",
"noPermissionsLimitGlobalUser":"No tens permís per crear un ticket perquè has arribat al límit màxim de tickets!",
"noPermissionsLimitOption":"No tens permís per crear un ticket perquè el servidor ha arribat al límit màxim de tickets per aquesta opció!",
"noPermissionsLimitOptionUser":"No tens permís per crear un ticket perquè has arribat al límit màxim de tickets per aquesta opció!",
"unknownTicket":"Torna a intentar aquesta comanda en un ticket vàlid!",
"deprecatedTicket":"El canal actual no és un ticket vàlid! Pot ser que fos un ticket d'una versió antiga de Open Ticket!",
"notInGuild":"Aquest {0} no funciona en DM! Si us plau, torna a intentar-ho en un servidor!",
"channelRename":"Degut a les limitacions de discord, actualment és impossible per al bot canviar el nom del canal. El canal es canviarà automàticament en 10 minuts si el bot no es reinicia.",
"channelRenameSource":"La font d'aquest error és: {0}",
"busy":"No es pot utilitzar aquest {0}!\nEl ticket està sent processat pel bot.\n\nSi us plau, torna a intentar-ho en uns segons!"
},
"optionInvalidReasons":{
"stringRegex":"El valor no coincideix amb el patró!",
"stringMinLength":"El valor ha de tenir almenys {0} caràcters!",
"stringMaxLength":"El valor ha de tenir com a màxim {0} caràcters!",
"numberInvalid":"Nombre invàlid!",
"numberMin":"El nombre ha de ser almenys {0}!",
"numberMax":"El nombre ha de ser com a màxim {0}!",
"numberDecimal":"El nombre no pot ser decimal!",
"numberNegative":"El nombre no pot ser negatiu!",
"numberPositive":"El nombre no pot ser positiu!",
"numberZero":"El nombre no pot ser zero!",
"channelNotFound":"No es pot trobar el canal!",
"userNotFound":"No es pot trobar l'usuari!",
"roleNotFound":"No es pot trobar el rol!",
"memberNotFound":"No es pot trobar l'usuari!",
"mentionableNotFound":"No es pot trobar l'usuari o el rol!",
"channelType":"Tipus de canal invàlid!",
"notInGuild":"Aquesta opció requereix que siguis en un servidor!"
},
"permissions":{
"developer":"Has de ser el desenvolupador del bot.",
"owner":"Has de ser el propietari del servidor.",
"admin":"Has de ser un administrador del servidor.",
"moderator":"Has de ser un moderador.",
"support":"Has de formar part de l'equip de suport.",
"member":"Has de ser un membre.",
"discord-administrator":"Has de tenir el permís `ADMINISTRADOR`."
},
"actionInvalid":{
"close":"El ticket ja està tancat!",
"reopen":"El ticket encara no està tancat!",
"claim":"El ticket ja està reclamat!",
"unclaim":"El ticket encara no està reclamat!",
"pin":"El ticket ja està fixat!",
"unpin":"El ticket encara no està fixat!",
"add":"Aquest usuari ja té accés al ticket!",
"remove":"No es pot eliminar aquest usuari del ticket!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickets",
"reason":"Motiu",
"creator":"Creador",
"remaining":"Temps Restant",
"added":"Afegit",
"removed":"Eliminat",
"filter":"Filtre",
"claimedBy":"Reclamat Per {0}",
"method":"Mètode",
"type":"Tipus",
"blacklisted":"Llista Negra",
"panel":"Panell",
"command":"Comanda",
"system":"Sistema",
"true":"Cert",
"false":"Fals",
"syntax":"Sintaxi",
"originalName":"Nom Original",
"newName":"Nom Nou",
"until":"Fins a",
"validOptions":"Opcions Vàlides",
"validPanels":"Panells Vàlids",
"autoclose":"Tancament Automàtic",
"autodelete":"Eliminació Automàtica",
"startupDate":"Data d'Inici",
"version":"Versió",
"name":"Nom",
"role":"Rol",
"status":"Estat",
"claimed":"Reclamat",
"pinned":"Fixat",
"creationDate":"Data de Creació"
},
"lowercase":{
"text":"text",
"html":"html",
"command":"comanda",
"modal":"modal",
"button":"botó",
"dropdown":"desplegable",
"method":"mètode"
}
},
"commands":{
"reason":"Especifica una raó opcional que serà visible als registres.",
"help":"Obtingues una llista de totes les comandes disponibles.",
"panel":"Genera un missatge amb un desplegable o botons (per a la creació de tickets).",
"panelId":"L'identificador del panell que vols generar.",
"panelAutoUpdate":"Vols que aquest panell s'actualitzi automàticament quan s'edita?",
"ticket":"Crea instantàniament un ticket.",
"ticketId":"L'identificador del ticket que vols crear.",
"close":"Tanca un ticket.",
"delete":"Elimina un ticket.",
"deleteNoTranscript":"Elimina aquest ticket sense crear una transcripció.",
"reopen":"Reobre un ticket.",
"claim":"Reclama un ticket.",
"claimUser":"Reclama aquest ticket per a una altra persona en lloc de tu mateix.",
"unclaim":"Allibera un ticket.",
"pin":"Fixa un ticket.",
"unpin":"Desfixa un ticket.",
"move":"Mou un ticket.",
"moveId":"L'identificador de l'opció a la qual vols moure't.",
"rename":"Renomena un ticket.",
"renameName":"El nou nom per aquest ticket.",
"add":"Afegeix un usuari a un ticket.",
"addUser":"L'usuari a afegir.",
"remove":"Elimina un usuari d'un ticket.",
"removeUser":"L'usuari a eliminar.",
"blacklist":"Gestiona la llista negra de tickets.",
"blacklistView":"Veure una llista de l'actual llista negra.",
"blacklistAdd":"Afegeix un usuari a la llista negra.",
"blacklistRemove":"Elimina un usuari de la llista negra.",
"blacklistGet":"Obtingues els detalls d'un usuari a la llista negra.",
"blacklistGetUser":"L'usuari dels qual vols obtenir detalls.",
"stats":"Veure estadístiques del bot, d'un membre o d'un ticket.",
"statsReset":"Restablir totes les estadístiques del bot (i començar a comptar des de zero).",
"statsGlobal":"Veure les estadístiques globals.",
"statsUser":"Veure les estadístiques d'un usuari al servidor.",
"statsUserUser":"L'usuari del qual vols veure les estadístiques.",
"statsTicket":"Veure les estadístiques d'un ticket al servidor.",
"statsTicketTicket":"El ticket que vols veure.",
"clear":"Elimina múltiples tickets al mateix temps.",
"clearFilter":"El filtre per a la neteja de tickets.",
"clearFilters":{
"all":"Tots",
"open":"Oberts",
"close":"Tancats",
"claim":"Reclamats",
"unclaim":"Alliberats",
"pin":"Fixats",
"unpin":"Desfixats",
"autoclose":"Tancat Automàticaments"
},
"autoclose":"Gestiona el tancament automàtic en un ticket.",
"autocloseDisable":"Desactiva el tancament automàtic en aquest ticket.",
"autocloseEnable":"Activa el tancament automàtic en aquest ticket.",
"autocloseEnableTime":"La quantitat d'hores que aquest ticket ha d'estar inactiu per tancar-lo.",
"autodelete":"Gestiona l'eliminació automàtica en un ticket.",
"autodeleteDisable":"Desactiva l'eliminació automàtica en aquest ticket.",
"autodeleteEnable":"Activa l'eliminació automàtica en aquest ticket.",
"autodeleteEnableTime":"La quantitat de dies que aquest ticket ha d'estar inactiu per eliminar-lo."
},
"helpMenu":{
"help":"Obtingues una llista de totes les comandes disponibles.",
"ticket":"Crea instantàniament un ticket.",
"close":"Tanca un ticket, això desactiva l'escriptura en aquest canal.",
"delete":"Elimina un ticket, això crea una transcripció quan està activat.",
"reopen":"Reobre un ticket, això permet escriure de nou en aquest canal.",
"pin":"Fixar un ticket. Això mou el ticket a la part superior i afegeix un emoji '📌' al nom.",
"unpin":"Desfixar un ticket. El ticket romandrà a la seva posició però perdrà l'emoji '📌'.",
"move":"Mou un ticket. Això canvia el tipus d'aquest ticket.",
"rename":"Renomena un ticket. Això canvia el nom del canal d'aquest ticket.",
"claim":"Reclama un ticket. Amb això, pots fer saber al teu equip que estàs gestionant aquest ticket.",
"unclaim":"Allibera un ticket. Amb això, pots fer saber al teu equip que aquest ticket està lliure de nou.",
"add":"Afegeix un usuari a un ticket. Això permetrà a l'usuari llegir i escriure en aquest ticket.",
"remove":"Elimina un usuari d'un ticket. Això eliminarà la capacitat de llegir i escriure per a un usuari en aquest ticket.",
"panel":"Genera un missatge amb un desplegable o botons (per a la creació de tickets).",
"blacklistView":"Veure una la llista negra actual.",
"blacklistAdd":"Afegeix un usuari a la llista negra.",
"blacklistRemove":"Elimina un usuari de la llista negra.",
"blacklistGet":"Obtingues els detalls d'un usuari de la llista negra.",
"statsGlobal":"Veure les estadístiques globals.",
"statsTicket":"Veure les estadístiques d'un ticket al servidor.",
"statsUser":"Veure les estadístiques d'un usuari al servidor.",
"statsReset":"Restablir totes les estadístiques del bot (i començar a comptar des de zero).",
"autocloseDisable":"Desactiva el tancament automàtic en aquest ticket.",
"autocloseEnable":"Activa el tancament automàtic en aquest ticket.",
"autodeleteDisable":"Desactiva l'eliminació automàtica en aquest ticket.",
"autodeleteEnable":"Activa l'eliminació automàtica en aquest ticket."
},
"stats":{
"scopes":{
"global":"Estadístiques Globals",
"system":"Estadístiques del Sistema",
"user":"Estadístiques d'Usuari",
"ticket":"Estadístiques de Ticket",
"participants":"Participants"
},
"properties":{
"ticketsCreated":"Tickets Creats",
"ticketsClosed":"Tickets Tancats",
"ticketsDeleted":"Tickets Eliminats",
"ticketsReopened":"Tickets Reoberts",
"ticketsAutoclosed":"Tickets Tancats Automàticament",
"ticketsClaimed":"Tickets Reclamats",
"ticketsPinned":"Tickets Fixats",
"ticketsMoved":"Tickets Moguts",
"usersBlacklisted":"Usuaris a la Llista Negra",
"transcriptsCreated":"Transcripcions Creades"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["DJj123dj"],
"lastedited":"21/08/2024",
"language":"Custom",
"automated":false
},
"checker":{
"system":{
"typeError":"[ERROR]",
"headerOpenTicket":"OPEN TICKET",
"typeWarning":"[WARNING]",
"typeInfo":"[INFO]",
"headerConfigChecker":"CONFIG CHECKER",
"headerDescription":"check for errors in your config files!",
"footerError":"the bot won't start until all {0}'s are fixed!",
"footerWarning":"it's recommended to fix all {0}'s before starting!",
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
"compactInformation":"use {0} for more information!",
"dataPath":"path",
"dataDocs":"docs",
"dataMessages":"message"
},
"messages":{
"stringTooShort":"This string can't be shorter than {0} characters!",
"stringTooLong":"This string can't be longer than {0} characters!",
"stringLengthInvalid":"This string needs to be {0} characters long!",
"stringStartsWith":"This string needs to start with {0}!",
"stringEndsWith":"This string needs to end with {0}!",
"stringContains":"This string needs to contain {0}!",
"stringChoices":"This string can only be one of the following values: {0}!",
"stringRegex":"This string is invalid!",
"numberTooShort":"This number can't be shorter than {0} characters!",
"numberTooLong":"This number can't be longer than {0} characters!",
"numberLengthInvalid":"This number needs to be {0} characters long!",
"numberTooSmall":"This number needs to be at least {0}!",
"numberTooLarge":"This number needs to be at most {0}!",
"numberNotEqual":"This number needs to be {0}!",
"numberStep":"This number needs to be a multiple of {0}!",
"numberStepOffset":"This number needs to be a multiple of {0} starting with {1}!",
"numberStartsWith":"This number needs to start with {0}!",
"numberEndsWith":"This number needs to end with {0}!",
"numberContains":"This number needs to contain {0}!",
"numberChoices":"This number can only be one of the following values: {0}!",
"numberFloat":"This number can't be a decimal!",
"numberNegative":"This number can't be negative!",
"numberPositive":"This number can't be positive!",
"numberZero":"This number can't be zero!",
"booleanTrue":"This boolean can't be true!",
"booleanFalse":"This boolean can't be false!",
"arrayEmptyDisabled":"This array isn't allowed to be empty!",
"arrayEmptyRequired":"This array is required to be empty!",
"arrayTooShort":"This array needs to have a length of at least {0}!",
"arrayTooLong":"This array needs to have a length of at most {0}!",
"arrayLengthInvalid":"This array needs to have a length of {0}!",
"arrayInvalidTypes":"This array can only contain the following types: {0}!",
"arrayDouble":"This array doesn't allow the same value twice!",
"discordInvalidId":"This is an invalid discord {0} id!",
"discordInvalidIdOptions":"This is an invalid discord {0} id! You can also use one of these: {1}!",
"discordInvalidToken":"This is an invalid discord token (syntactically)!",
"colorInvalid":"This is an invalid hex color!",
"emojiTooShort":"This string needs to have at least {0} emoji's!",
"emojiTooLong":"This string needs to have at most {0} emoji's!",
"emojiCustom":"This emoji can't be a custom discord emoji!",
"emojiInvalid":"This is an invalid emoji!",
"urlInvalid":"This url is invalid!",
"urlInvalidHttp":"This url can only use the https:// protocol!",
"urlInvalidProtocol":"This url can only use the http:// & https:// protocols!",
"urlInvalidHostname":"This url has a disallowed hostname!",
"urlInvalidExtension":"This url has an invalid extension! Choose between: {0}!",
"urlInvalidPath":"This url has an invalid path!",
"idNotUnique":"This id isn't unique, use another id instead!",
"idNonExistent":"The id {0} doesn't exist!",
"invalidType":"This property needs to be the type: {0}!",
"propertyMissing":"The property {0} is missing from this object!",
"propertyOptional":"The property {0} is optional in this object!",
"objectDisabled":"This object is disabled, enable it using {0}!",
"nullInvalid":"This property can't be null!",
"switchInvalidType":"This needs to be one of the following types: {0}!",
"objectSwitchInvalid":"This object needs to be one of the following types: {0}!",
"invalidLanguage":"This is an invalid language!",
"invalidButton":"This button needs to have at least an {0} or {1}!",
"unusedOption":"The option {0} isn't used anywhere!",
"unusedQuestion":"The question {0} isn't used anywhere!",
"dropdownOption":"A panel with dropdown enabled can only contain options of the 'ticket' type!"
}
},
"actions":{
"buttons":{
"create":"Visit Ticket",
"close":"Close Ticket",
"delete":"Delete Ticket",
"reopen":"Reopen Ticket",
"claim":"Claim Ticket",
"unclaim":"Unclaim Ticket",
"pin":"Pin Ticket",
"unpin":"Unpin Ticket",
"clear":"Delete Tickets",
"helpSwitchSlash":"View Slash Commands",
"helpSwitchText":"View Text Commands",
"helpPage":"Page {0}",
"withReason":"With Reason",
"withoutTranscript":"Without Transcript"
},
"titles":{
"created":"Ticket Created",
"close":"Ticket Closed",
"delete":"Ticket Deleted",
"reopen":"Ticket Reopened",
"claim":"Ticket Claimed",
"unclaim":"Ticket Unclaimed",
"pin":"Ticket Pinned",
"unpin":"Ticket Unpinned",
"rename":"Ticket Renamed",
"move":"Ticket Moved",
"add":"Ticket User Added",
"remove":"Ticket User Removed",
"help":"Available Commands",
"statsReset":"Reset Stats",
"blacklistAdd":"User Blacklisted",
"blacklistRemove":"User Released",
"blacklistGet":"Blacklisted User",
"blacklistView":"Current Blacklist",
"blacklistAddDm":"Added To Blacklist",
"blacklistRemoveDm":"Removed From Blacklist",
"clear":"Tickets Cleared",
"roles":"Roles Updated",
"autoclose":"Ticket Autoclosed",
"autocloseEnabled":"Autoclose Enabled",
"autocloseDisabled":"Autoclose Disabled",
"autodelete":"Ticket Autodeleted",
"autodeleteEnabled":"Autodelete Enabled",
"autodeleteDisabled":"Autodelete Disabled"
},
"descriptions":{
"create":"Your ticket has been created. Click the button below to access it!",
"close":"The ticket has been closed successfully!",
"delete":"The ticket has been deleted successfully!",
"reopen":"The ticket has been reopened successfully!",
"claim":"The ticket has been claimed successfully!",
"unclaim":"The ticket has been unclaimed successfully!",
"pin":"The ticket has been pinned successfully!",
"unpin":"The ticket has been unpinned successfully!",
"rename":"The ticket has been renamed to {0} successfully!",
"move":"The ticket has been moved to {0} successfully!",
"add":"{0} has been added to the ticket successfully!",
"remove":"{0} has been removed from the ticket successfully!",
"helpExplanation":"`<name>` => required parameter\n`[name]` => optional parameter",
"statsReset":"The bot stats have been reset successfully!",
"statsError":"Unable to view ticket stats!\n{0} is not a ticket!",
"blacklistAdd":"{0} has been blacklisted successfully!",
"blacklistRemove":"{0} has been released successfully!",
"blacklistGetSuccess":"{0} is currently blacklisted!",
"blacklistGetEmpty":"{0} is currently not blacklisted!",
"blacklistViewEmpty":"No-one has been blacklisted yet!",
"blacklistViewTip":"Use \"/blacklist add\" to blacklist a user!",
"clearVerify":"Are you sure you want to delete multiple tickets?\nThis action can't be undone!",
"clearReady":"{0} tickets have been deleted successfully!",
"rolesEmpty":"No roles have been updated!",
"autocloseLeave":"This ticket has been autoclosed because the creator left the server!",
"autocloseTimeout":"This ticket has been autoclosed because it has been inactive for more than `{0}h`!",
"autodeleteLeave":"This ticket has been autodeleted because the creator left the server!",
"autodeleteTimeout":"This ticket has been autodeleted because it has been inactive for more than `{0} days`!",
"autocloseEnabled":"Autoclose has been enabled in this ticket!\nIt will be closed when it is inactive for more than `{0}h`!",
"autocloseDisabled":"Autoclose has been disabled in this ticket!\nIt won't be closed automatically anymore!",
"autodeleteEnabled":"Autodelete has been enabled in this ticket!\nIt will be deleted when it is inactive for more than `{0} days`!",
"autodeleteDisabled":"Autodelete has been disabled in this ticket!\nIt won't be deleted automatically anymore!",
"ticketMessageLimit":"You can only create {0} ticket(s) at the same time!",
"ticketMessageAutoclose":"This ticket will be autoclosed when inactive for {0}h!",
"ticketMessageAutodelete":"This ticket will be autodeleted when inactive for {0} days!",
"panelReady":"You can find the panel below!\nThis message can now be deleted!"
},
"modal":{
"closePlaceholder":"Why did you close this ticket?",
"deletePlaceholder":"Why did you delete this ticket?",
"reopenPlaceholder":"Why did you reopen this ticket?",
"claimPlaceholder":"Why did you claim this ticket?",
"unclaimPlaceholder":"Why did you unclaim this ticket?",
"pinPlaceholder":"Why did you pin this ticket?",
"unpinPlaceholder":"Why did you unpin this ticket?"
},
"logs":{
"createLog":"A new ticket got created by {0}!",
"closeLog":"This ticket has been closed by {0}!",
"closeDm":"Your ticket has been closed in our server!",
"deleteLog":"This ticket has been deleted by {0}!",
"deleteDm":"Your ticket has been deleted in our server!",
"reopenLog":"This ticket has been reopened by {0}!",
"reopenDm":"Your ticket has been reopened in our server!",
"claimLog":"This ticket has been claimed by {0}!",
"claimDm":"Your ticket has been claimed in our server!",
"unclaimLog":"This ticket has been unclaimed by {0}!",
"unclaimDm":"Your ticket has been unclaimed in our server!",
"pinLog":"This ticket has been pinned by {0}!",
"pinDm":"Your ticket has been pinned in our server!",
"unpinLog":"This ticket has been unpinned by {0}!",
"unpinDm":"Your ticket has been unpinned in our server!",
"renameLog":"This ticket has been renamed to {0} by {1}!",
"renameDm":"Your ticket has been renamed to {0} in our server!",
"moveLog":"This ticket has been moved to {0} by {1}!",
"moveDm":"Your ticket has been moved to {0} in our server!",
"addLog":"{0} has been added to this ticket by {1}!",
"addDm":"{0} has been added to your ticket in our server!",
"removeLog":"{0} has been removed from this ticket by {1}!",
"removeDm":"{0} has been removed from your ticket in our server!",
"blacklistAddLog":"{0} was blacklisted by {1}!",
"blacklistRemoveLog":"{0} was removed from the blacklist by {1}!",
"blacklistAddDm":"You have been blacklisted in our server!\nFrom now on, you are unable to create a ticket!",
"blacklistRemoveDm":"You have been removed from the blacklist in our server!\nNow you can create tickets again!",
"clearLog":"{0} tickets have been deleted by {1}!"
}
},
"transcripts":{
"success":{
"visit":"Visit Transcript",
"ready":"Transcript Created",
"textFileDescription":"This is the text transcript of a deleted ticket!",
"htmlProgress":"Please wait while this html transcript is getting processed...",
"createdChannel":"A new {0} transcript has been created in the server!",
"createdCreator":"A new {0} transcript has been created for one of your tickets!",
"createdParticipant":"A new {0} transcript has been created in one of the tickets you participated in!",
"createdActiveAdmin":"A new {0} transcript has been created in one of the tickets you participated as admin!",
"createdEveryAdmin":"A new {0} transcript has been created in one of the tickets you were admin in!",
"createdOther":"A new {0} transcript has been created!"
},
"errors":{
"retry":"Retry",
"continue":"Delete Without Transcript",
"backup":"Create Backup Transcript",
"error":"Something went wrong while trying to create the transcript.\nWhat would you like to do?\n\nThis ticket won't be deleted until you click one of these buttons."
}
},
"errors":{
"titles":{
"internalError":"Internal Error",
"optionMissing":"Command Option Missing",
"optionInvalid":"Command Option Invalid",
"unknownCommand":"Unknown Command",
"noPermissions":"No Permissions",
"unknownTicket":"Unknown Ticket",
"deprecatedTicket":"Deprecated Ticket",
"unknownOption":"Unknown Option",
"unknownPanel":"Unknown Panel",
"notInGuild":"Not In Server",
"channelRename":"Unable To Rename Channel",
"busy":"Ticket Is Busy"
},
"descriptions":{
"askForInfo":"Contact the owner of this bot for more info!",
"askForInfoResolve":"Contact the bot owner of this bot if this issue doesn't resolve after a few tries.",
"internalError":"Failed to respond to this {0} due to an internal error!",
"optionMissing":"A required parameter is missing in this command!",
"optionInvalid":"A parameter in this command is invalid!",
"optionInvalidChoose":"Choose between",
"unknownCommand":"Try visiting the help menu for more info!",
"noPermissions":"You are not allowed to use this {0}!",
"noPermissionsList":"Required Permissions: (one of them)",
"noPermissionsCooldown":"You are not allowed to use this {0} because you have a cooldown!",
"noPermissionsBlacklist":"You are not allowed to use this {0} because you have been blacklisted!",
"noPermissionsLimitGlobal":"You are not allowed to create a ticket because the server reached the max tickets limit!",
"noPermissionsLimitGlobalUser":"You are not allowed to create a ticket because you reached the max tickets limit!",
"noPermissionsLimitOption":"You are not allowed to create a ticket because the server reached the max tickets limit for this option!",
"noPermissionsLimitOptionUser":"You are not allowed to create a ticket because you reached the max tickets limit for this option!",
"unknownTicket":"Try this command again in a valid ticket!",
"deprecatedTicket":"The current channel is not a valid ticket! It might have been a ticket from an old Open Ticket version!",
"notInGuild":"This {0} doesn't work in DM! Please try it again in a server!",
"channelRename":"Due to discord ratelimits, it's currently impossible for the bot to rename the channel. The channel will automatically be renamed over 10 minutes if the bot isn't rebooted.",
"channelRenameSource":"The source of this error is: {0}",
"busy":"Unable to use this {0}!\nThe ticket is currently being processed by the bot.\n\nPlease try again in a few seconds!"
},
"optionInvalidReasons":{
"stringRegex":"Value doesn't match pattern!",
"stringMinLength":"Value needs to be at least {0} characters!",
"stringMaxLength":"Value needs to be at most {0} characters!",
"numberInvalid":"Invalid number!",
"numberMin":"Number needs to be at least {0}!",
"numberMax":"Number needs to be at most {0}!",
"numberDecimal":"Number is not allowed to be a decimal!",
"numberNegative":"Number is not allowed to be negative!",
"numberPositive":"Number is not allowed to be positive!",
"numberZero":"Number is not allowed to be zero!",
"channelNotFound":"Unable to find channel!",
"userNotFound":"Unable to find user!",
"roleNotFound":"Unable to find role!",
"memberNotFound":"Unable to find user!",
"mentionableNotFound":"Unable to find user or role!",
"channelType":"Invalid channel type!",
"notInGuild":"This option requires you to be in a server!"
},
"permissions":{
"developer":"You need to be the developer of the bot.",
"owner":"You need to be the server owner.",
"admin":"You need to be a server admin.",
"moderator":"You need to be a moderator.",
"support":"You need to be in the support team.",
"member":"You need to be a member.",
"discord-administrator":"You need to have the `ADMINISTRATOR` permission."
},
"actionInvalid":{
"close":"Ticket is already closed!",
"reopen":"Ticket is not closed yet!",
"claim":"Ticket is already claimed!",
"unclaim":"Ticket is not claimed yet!",
"pin":"Ticket is already pinned!",
"unpin":"Ticket is not pinned yet!",
"add":"This user is already able to access the ticket!",
"remove":"Unable to remove this user from the ticket!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickets",
"reason":"Reason",
"creator":"Creator",
"remaining":"Time Remaining",
"added":"Added",
"removed":"Removed",
"filter":"Filter",
"claimedBy":"Claimed By {0}",
"method":"Method",
"type":"Type",
"blacklisted":"Blacklisted",
"panel":"Panel",
"command":"Command",
"system":"System",
"true":"True",
"false":"False",
"syntax":"Syntax",
"originalName":"Original Name",
"newName":"New Name",
"until":"Until",
"validOptions":"Valid Options",
"validPanels":"Valid Panels",
"autoclose":"Autoclose",
"autodelete":"Autodelete",
"startupDate":"Startup Date",
"version":"Version",
"name":"Name",
"role":"Role",
"status":"Status",
"claimed":"Claimed",
"pinned":"Pinned",
"creationDate":"Creation Date"
},
"lowercase":{
"text":"text",
"html":"html",
"command":"command",
"modal":"modal",
"button":"button",
"dropdown":"dropdown",
"method":"method"
}
},
"commands":{
"reason":"Specify an optional reason that will be visible in logs.",
"help":"Get a list of all the available commands.",
"panel":"Spawn a message with a dropdown or buttons (for ticket creation).",
"panelId":"The identifier of the panel that you want to spawn.",
"panelAutoUpdate":"Do you want this panel to automatically update when edited?",
"ticket":"Instantly create a ticket.",
"ticketId":"The identifier of the ticket that you want to create.",
"close":"Close a ticket.",
"delete":"Delete a ticket.",
"deleteNoTranscript":"Delete this ticket without creating a transcript.",
"reopen":"Reopen a ticket.",
"claim":"Claim a ticket.",
"claimUser":"Claim this ticket to someone else instead of yourself.",
"unclaim":"Unclaim a ticket.",
"pin":"Pin a ticket.",
"unpin":"Unpin a ticket.",
"move":"Move a ticket.",
"moveId":"The identifier of the option that you want to move to.",
"rename":"Rename a ticket.",
"renameName":"The new name for this ticket.",
"add":"Add a user to a ticket.",
"addUser":"The user to add.",
"remove":"Remove a user from a ticket.",
"removeUser":"The user to remove.",
"blacklist":"Manage the ticket blacklist.",
"blacklistView":"View a list of the current blacklist.",
"blacklistAdd":"Add a user to the blacklist.",
"blacklistRemove":"Remove a user from the blacklist.",
"blacklistGet":"Get the details from a blacklisted user.",
"blacklistGetUser":"The user to get details from.",
"stats":"View statistics from the bot, a member or a ticket.",
"statsReset":"Reset all the stats of the bot (and start counting from zero).",
"statsGlobal":"View the global stats.",
"statsUser":"View the stats from a user in the server.",
"statsUserUser":"The user to view.",
"statsTicket":"View the stats of a ticket in the server.",
"statsTicketTicket":"The ticket to view.",
"clear":"Delete multiple tickets at the same time.",
"clearFilter":"The filter for clearing tickets.",
"clearFilters":{
"all":"All",
"open":"Open",
"close":"Closed",
"claim":"Claimed",
"unclaim":"Unclaimed",
"pin":"Pinned",
"unpin":"Unpinned",
"autoclose":"Autoclosed"
},
"autoclose":"Manage autoclose in a ticket.",
"autocloseDisable":"Disable autoclose in this ticket.",
"autocloseEnable":"Enable autoclose in this ticket.",
"autocloseEnableTime":"The amount of hours this ticket needs to be inactive to close it.",
"autodelete":"Manage autodelete in a ticket.",
"autodeleteDisable":"Disable autodelete in this ticket.",
"autodeleteEnable":"Enable autodelete in this ticket.",
"autodeleteEnableTime":"The amount of days this ticket needs to be inactive to delete it."
},
"helpMenu":{
"help":"Get a list of all the available commands.",
"ticket":"Instantly create a ticket.",
"close":"Close a ticket, this disables writing in this channel.",
"delete":"Delete a ticket, this creates a transcript when enabled.",
"reopen":"Reopen a ticket, this enables writing in this channel again.",
"pin":"Pin a ticket. This will move the ticket to the top and will add a '📌' emoij to the name.",
"unpin":"Unpin a ticket. The ticket will stay on it's position but will lose the '📌' emoij.",
"move":"Move a ticket. This will change the type of this ticket.",
"rename":"Rename a ticket. This will change the channel name of this ticket.",
"claim":"Claim a ticket. With this, you can let your team know you are handling this ticket.",
"unclaim":"Unclaim a ticket. With this, you can let your team know that this ticket is free again.",
"add":"Add a user to a ticket. This will allow the user to read & write in this ticket.",
"remove":"Remove a user from a ticket. This will remove the ability to read & write for a user in this ticket.",
"panel":"Spawn a message with a dropdown or buttons (for ticket creation).",
"blacklistView":"View a list of the current blacklist.",
"blacklistAdd":"Add a user to the blacklist.",
"blacklistRemove":"Remove a user from the blacklist.",
"blacklistGet":"Get the details from a blacklisted user.",
"statsGlobal":"View the global stats.",
"statsTicket":"View the stats of a ticket in the server.",
"statsUser":"View the stats from a user in the server.",
"statsReset":"Reset all the stats of the bot (and start counting from zero).",
"autocloseDisable":"Disable autoclose in this ticket.",
"autocloseEnable":"Enable autoclose in this ticket.",
"autodeleteDisable":"Disable autodelete in this ticket.",
"autodeleteEnable":"Enable autodelete in this ticket."
},
"stats":{
"scopes":{
"global":"Global Stats",
"system":"System Stats",
"user":"User Stats",
"ticket":"Ticket Stats",
"participants":"Participants"
},
"properties":{
"ticketsCreated":"Tickets Created",
"ticketsClosed":"Tickets Closed",
"ticketsDeleted":"Tickets Deleted",
"ticketsReopened":"Tickets Reopened",
"ticketsAutoclosed":"Tickets Autoclosed",
"ticketsClaimed":"Tickets Claimed",
"ticketsPinned":"Tickets Pinned",
"ticketsMoved":"Tickets Moved",
"usersBlacklisted":"Users Blacklisted",
"transcriptsCreated":"Transcripts Created"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["spyeye_"],
"lastedited":"21/08/2024",
"language":"Czech",
"automated":false
},
"checker":{
"system":{
"typeError":"[ERROR]",
"headerOpenTicket":"OPEN TICKET",
"typeWarning":"[WARNING]",
"typeInfo":"[INFO]",
"headerConfigChecker":"CONFIG CHECKER",
"headerDescription":"kontrola chyb v konfiguračních souborech!",
"footerError":"Bot se nespustí, dokud všechny {0} nebudou opraveny!",
"footerWarning":"Doporučejeme opravit všechny {0} před spuštěním!",
"footerSupport":"PODPORA: {0} - DOKUMENTACE: {1}",
"compactInformation":"Použij {0} pro více informací!",
"dataPath":"path",
"dataDocs":"docs",
"dataMessages":"message"
},
"messages":{
"stringTooShort":"Tento string nesmí být kratší než {0} znaků!",
"stringTooLong":"Tento string nesmí být delší než {0} znaků!",
"stringLengthInvalid":"Tento string musí mít délku {0} znaků!",
"stringStartsWith":"Tento string musí začínat {0}!",
"stringEndsWith":"Tento string musí končit {0}!",
"stringContains":"Tento string musí obsahovat {0}!",
"stringChoices":"Tento string může být pouze jednou z následujících možností: {0}!",
"stringRegex":"Tento string je neplatný!",
"numberTooShort":"Toto číslo nesmí být kratší než {0} znaků!",
"numberTooLong":"Toto číslo nesmí být delší než {0} znaků.!",
"numberLengthInvalid":"Toto číslo musí mít délku {0} znaků.!",
"numberTooSmall":"Toto číslo musí být alespoň {0}.!",
"numberTooLarge":"Toto číslo musí být nejvýše {0}!",
"numberNotEqual":"Toto číslo musí být {0}!",
"numberStep":"Toto číslo musí být násobkem {0}.!",
"numberStepOffset":"Toto číslo musí být násobkem {0} žačínající {1}.!",
"numberStartsWith":"Toto číslo musí začínat {0}!",
"numberEndsWith":"Toto číslo musí končit {0}!",
"numberContains":"Toto číslo musí obsahovat {0}!",
"numberChoices":"Toto číslo může být pouze jedno z následujících hodnot: {0}!",
"numberFloat":"Toto číslo nemůže být desetinné!",
"numberNegative":"Toto číslo nemůže být záporné!",
"numberPositive":"Toto číslo nemůže být kladné!",
"numberZero":"Toto číslo nemůže být nula!",
"booleanTrue":"Tento boolean nemůže být true!",
"booleanFalse":"Tento boolean nemůže být false!",
"arrayEmptyDisabled":"Toto pole nesmí být prázdné.!",
"arrayEmptyRequired":"Toto pole musí být prázdné!",
"arrayTooShort":"Toto pole musí mít délku alespoň {0}!",
"arrayTooLong":"Toto pole musí mít délku maximálně {0}!",
"arrayLengthInvalid":"Toto pole musí mít délku {0}!",
"arrayInvalidTypes":"Toto pole může obsahovat pouze následující typy: {0}!",
"arrayDouble":"Toto pole neumožňuje zadat stejnou hodnotu dvakrát.!",
"discordInvalidId":"Toto je neplatné discord {0} id!",
"discordInvalidIdOptions":"Toto je neplatné Discord ID {0}! Můžete také použít jeden z těchto: {1}!",
"discordInvalidToken":"Toto je neplatný discord token (syntakticky)!",
"colorInvalid":"Toto je neplatná hex barva!",
"emojiTooShort":"Tento string musí obsahovat alespoň {0} emotikonů.!",
"emojiTooLong":"Tento string musí obsahovat nejvýše {0} emotikonů.!",
"emojiCustom":"Tento emotikon nemůže být custom emotikon!",
"emojiInvalid":"Toto je neplatný emotikon!",
"urlInvalid":"Tato url adresa je neplatná!",
"urlInvalidHttp":"Tato url může používat pouze protokol https://!",
"urlInvalidProtocol":"Tato url může používat pouze protokoly http:// a https://!",
"urlInvalidHostname":"Tato url má zakázané hostitelské jméno!",
"urlInvalidExtension":"Tato url má neplatnou příponu! Vyberte si mezi: {0}!",
"urlInvalidPath":"Tato url má neplatnou cestu!",
"idNotUnique":"Toto id není jedinečné, místo něj použijte jiné id!",
"idNonExistent":"Id {0} neexistuje!",
"invalidType":"Toto nastavení musí být typu: {0}!",
"propertyMissing":"U tohoto objektu chybí vlastnost {0}!",
"propertyOptional":"Vlastnost {0} je v tomto objektu nepovinná!",
"objectDisabled":"Tento objekt je zakázán, povolte jej pomocí {0}!",
"nullInvalid":"Tato vlastnost nemůže být nulová!",
"switchInvalidType":"Musí se jednat o jeden z následujících typů: {0}!",
"objectSwitchInvalid":"Tento objekt musí být jednoho z následujících typů: {0}!",
"invalidLanguage":"Jedná se o neplatný jazyk!",
"invalidButton":"Toto tlačítko musí mít alespoň {0} nebo {1}!",
"unusedOption":"Možnost {0} se nikde nepoužívá!",
"unusedQuestion":"Otázka {0} není nikde použita!",
"dropdownOption":"Panel s povoleným rozevíracím seznamem může obsahovat pouze možnosti typu „ticketu“!"
}
},
"actions":{
"buttons":{
"create":"Zobrazit ticket",
"close":"Uzavřít ticket",
"delete":"Vymazat ticket",
"reopen":"Znovu otevřít ticket",
"claim":"Převzít ticket",
"unclaim":"Zrušit převzetí ticketu",
"pin":"Připnout ticket",
"unpin":"Odepnout ticket",
"clear":"Vymazat tickety",
"helpSwitchSlash":"Zobrazit slash příkazy",
"helpSwitchText":"Zobrazit textové příkazy",
"helpPage":"Strana {0}",
"withReason":"S důvodem",
"withoutTranscript":"Bez důvodu"
},
"titles":{
"created":"Ticket vytvořen",
"close":"Ticket uzavřen",
"delete":"Ticket vymazán",
"reopen":"Ticket znovu otevřen",
"claim":"Ticket převzat",
"unclaim":"Ticket již není převezmut",
"pin":"Ticket připnut",
"unpin":"Ticket odepnut",
"rename":"Ticket přejmenován",
"move":"Ticket přesunut",
"add":"Uživatel přidán",
"remove":"Uživatel odebrán",
"help":"Dostupné příkazy:",
"statsReset":"Resetovat statistiky",
"blacklistAdd":"Uživatel blacklistován",
"blacklistRemove":"Uživatel odebrán z blacklistu",
"blacklistGet":"Uživatel na blacklistu",
"blacklistView":"Aktuální blacklist",
"blacklistAddDm":"Přidán na blacklistu",
"blacklistRemoveDm":"Odebrán z blacklistu",
"clear":"Tickety vyčištěny",
"roles":"Role aktualizovány",
"autoclose":"Ticket automaticky uzavřen",
"autocloseEnabled":"Automatické uzavření povoleno",
"autocloseDisabled":"Automatické uzavření zakázáno",
"autodelete":"Ticket automaticky vymazán",
"autodeleteEnabled":"Automatické mazání povoleno",
"autodeleteDisabled":"Automatické mazání zakázáno"
},
"descriptions":{
"create":"Tvůj ticket byl vytvořen. Klikni na tlačítko pod zprávou pro zobrazení!",
"close":"Ticket byl úspěšně uzavřen!",
"delete":"Ticket byl úspěšně vymazán!",
"reopen":"Ticket byl úspěšně znovu otevřen!",
"claim":"Ticket byl úspěšně převzat!",
"unclaim":"Ticket již není převezmut!",
"pin":"Ticket byl úspěšně připnut!",
"unpin":"Ticket byl úspěšně odepnut!",
"rename":"Ticket byl úspěšně přejmenován na {0}!",
"move":"Ticket byl úspěšně přesunut do {0}!",
"add":"{0} byl úspěšně přidán do ticketu!",
"remove":"{0} byl úspěšně odstraněn z ticketu!",
"helpExplanation":"`<name>` => povinný parametr\n`[name]` => nepovinný parametr",
"statsReset":"Statistiky bota byly úspěšně resetovány!",
"statsError":"Nelze zobrazit statistiky ticketu!\n{0} není ticket!",
"blacklistAdd":"{0} byl přídán na blacklist!",
"blacklistRemove":"{0} byl odebrán z blacklistu!",
"blacklistGetSuccess":"{0} je nyní na blacklistu!",
"blacklistGetEmpty":"{0} nyní není na blacklistu!",
"blacklistViewEmpty":"Na blacklistu ještě nikdo není",
"blacklistViewTip":"Použij \"/blacklist add\" pro přidání uživatele na blacklist!",
"clearVerify":"Opravdu chcete smazat více ticketů?\nTuto akci nelze vrátit zpět!",
"clearReady":"{0} ticketů bylo úspěšně smazány!",
"rolesEmpty":"Žádné role nebyly aktualizovány!",
"autocloseLeave":"Tento ticket byl automaticky uzavřen, protože jeho autor opustil server.!",
"autocloseTimeout":"Tento ticket byl automaticky uzavřen, protože byl neaktivní déle než `{0}h`!",
"autodeleteLeave":"Tento ticket byl automaticky smazán, protože jeho autor opustil server!",
"autodeleteTimeout":"Tento ticket byl automaticky smazán, protože je neaktivní déle než `{0} dní`!",
"autocloseEnabled":"U tohoto ticketu bylo povoleno automatické uzavření!\nTicket bude uzavřen, pokud bude neaktivní déle než `{0}h`!",
"autocloseDisabled":"U tohoto ticketu bylo vypnuto automatické zavírání!\nUž se nebude automaticky zavírat!",
"autodeleteEnabled":"U tohoto ticketu bylo povoleno automatické mazání!\nBude smazán, pokud je neaktivní déle než `{0} dní`!",
"autodeleteDisabled":"Automatické mazání bylo v tomto zakázáno!\nUž se nebude automaticky mazat!",
"ticketMessageLimit":"Současně lze vytvořit pouze {0} ticketu!",
"ticketMessageAutoclose":"Tento ticket se automaticky uzavře, pokud je neaktivní po dobu {0}h!",
"ticketMessageAutodelete":"Tento ticket bude automaticky smazán, pokud bude neaktivní po dobu {0} dnů!",
"panelReady":"Panel najdete níže!\nTuto zprávu lze nyní smazat!"
},
"modal":{
"closePlaceholder":"Proč jste tento ticket uzavřel?",
"deletePlaceholder":"Proč jste tento ticket smazali?",
"reopenPlaceholder":"Proč jste tento ticket znovu otevřeli?",
"claimPlaceholder":"Proč jste si vyžádal tento ticket?",
"unclaimPlaceholder":"Proč jste zrušili převzetí tohoto ticketu?",
"pinPlaceholder":"Proč jste připnuli tento ticket?",
"unpinPlaceholder":"Proč jste odepnuli tento ticket?"
},
"logs":{
"createLog":"Nový ticket byl vytvořen uživatelem {0}!",
"closeLog":"Tento ticket byl uzavřen uživatelem {0}!",
"closeDm":"Tvůj ticket byl uzavřen na našem serveru!",
"deleteLog":"Tento ticket byl smazán uživatelem {0}!",
"deleteDm":"Tvůj ticket byl smazán na našem serveru!",
"reopenLog":"Tento ticket byl znovu otevřen uživatelem {0}!",
"reopenDm":"Tvůj ticket byl znovu otevřen na našem serveru!",
"claimLog":"Tento ticket byl přidělen uživatelem {0}!",
"claimDm":"Tvůj ticket byl přidělen na našem serveru!",
"unclaimLog":"Tento ticket byl odhlášen uživatelem {0}!",
"unclaimDm":"Tvůj ticket byl odhlášen na našem serveru!",
"pinLog":"Tento ticket byl připnut uživatelem {0}!",
"pinDm":"Tvůj ticket byl připnut na našem serveru!",
"unpinLog":"Tento ticket byl odepnut uživatelem {0}!",
"unpinDm":"Tvůj ticket byl odepnut na našem serveru!",
"renameLog":"Tento ticket byl přejmenován na {0} uživatelem {1}!",
"renameDm":"Tvůj ticket byl přejmenován na {0} na našem serveru!",
"moveLog":"Tento ticket byl přesunut do {0} uživatelem {1}!",
"moveDm":"Tvůj ticket byl přesunut do {0} na našem serveru!",
"addLog":"{0} byl přidán do tohoto ticketu uživatelem {1}!",
"addDm":"{0} byl přidán do tvého ticketu na našem serveru!",
"removeLog":"{0} byl odstraněn z tohoto ticketu uživatelem {1}!",
"removeDm":"{0} byl odstraněn z tvého ticketu na našem serveru!",
"blacklistAddLog":"{0} byl přidán na blacklist uživatelem {1}!",
"blacklistRemoveLog":"{0} byl odstraněn z blacklistu uživatelem {1}!",
"blacklistAddDm":"Byl jsi přidán na blacklist na našem serveru!\nOd teď nemůžeš vytvářet tickety!",
"blacklistRemoveDm":"Byl jsi odstraněn z blacklistu na našem serveru!\nNyní můžeš opět vytvářet tickety!",
"clearLog":"{0} ticketů bylo smazáno uživatelem {1}!"
}
},
"transcripts":{
"success":{
"visit":"Zobrazit přepis",
"ready":"Přepis vytvořen",
"textFileDescription":"Toto je textový přepis smazaného ticketu!",
"htmlProgress":"Prosím, počkejte, zatímco se zpracovává HTML přepis...",
"createdChannel":"Na serveru byl vytvořen nový přepis {0}!",
"createdCreator":"Byl vytvořen nový přepis {0} pro jeden z tvých ticketů!",
"createdParticipant":"Byl vytvořen nový přepis {0} v jednom z ticketů, kterých ses účastnil!",
"createdActiveAdmin":"Byl vytvořen nový přepis {0} v jednom z ticketů, kterých ses účastnil jako admin!",
"createdEveryAdmin":"Byl vytvořen nový přepis {0} v jednom z ticketů, kde jsi byl adminem!",
"createdOther":"Byl vytvořen nový přepis {0}!"
},
"errors":{
"retry":"Zkusit Znovu",
"continue":"Vymazat bez přepisu",
"backup":"Vytvořit záložní přepis",
"error":"Při pokusu o vytvoření přepisu se něco pokazilo.\nCo chcete udělat?\n\nTento ticket nebude smazán, dokud nekliknete na jedno z těchto tlačítek."
}
},
"errors":{
"titles":{
"internalError":"Interní chyba",
"optionMissing":"Chybějící možnost příkazu",
"optionInvalid":"Neplatná možnost příkazu",
"unknownCommand":"Neznámý příkaz",
"noPermissions":"Nemáš oprávnění",
"unknownTicket":"Neznámý ticket",
"deprecatedTicket":"Zastaralý ticket",
"unknownOption":"Neznámá možnost",
"unknownPanel":"Neznámý panel",
"notInGuild":"Nejsi na serveru",
"channelRename":"Nepodařilo se přejmenovat kanál",
"busy":"Ticket je zaneprázdněn"
},
"descriptions":{
"askForInfo":"Pro více informací kontaktuj vlastníka tohoto bota!",
"askForInfoResolve":"Kontaktuj vlastníka tohoto bota, pokud se tento problém nevyřeší po několika pokusech.",
"internalError":"Nepodařilo se odpovědět na tento {0} kvůli interní chybě!",
"optionMissing":"V tomto příkazu chybí požadovaný parametr!",
"optionInvalid":"V tomto příkazu je neplatný parametr!",
"optionInvalidChoose":"Vyber z",
"unknownCommand":"Zkus navštívit nabídku nápovědy pro více informací!",
"noPermissions":"Nemáš oprávnění k použití tohoto {0}!",
"noPermissionsList":"Požadovaná oprávnění: (jedno z nich)",
"noPermissionsCooldown":"Nemáš oprávnění k použití tohoto {0}, protože máš cooldown!",
"noPermissionsBlacklist":"Nemáš oprávnění k použití tohoto {0}, protože jsi byl přidán na blacklist!",
"noPermissionsLimitGlobal":"Nemáš oprávnění vytvořit ticket, protože server dosáhl maximálního limitu ticketů!",
"noPermissionsLimitGlobalUser":"Nemáš oprávnění vytvořit ticket, protože jsi dosáhl maximálního limitu ticketů!",
"noPermissionsLimitOption":"Nemáš oprávnění vytvořit ticket, protože server dosáhl maximálního limitu ticketů pro tuto možnost!",
"noPermissionsLimitOptionUser":"Nemáš oprávnění vytvořit ticket, protože jsi dosáhl maximálního limitu ticketů pro tuto možnost!",
"unknownTicket":"Zkus tento příkaz znovu v platném ticketu!",
"deprecatedTicket":"Aktuální kanál není platný ticket! Může se jednat o ticket ze starší verze Open Ticketu!",
"notInGuild":"Tento {0} nefunguje v DM! Zkus to znovu na serveru!",
"channelRename":"Kvůli ratelimitům Discordu není momentálně možné, aby bot přejmenoval kanál. Kanál bude automaticky přejmenován do 10 minut, pokud nedojde k restartu bota.",
"channelRenameSource":"Zdroj této chyby je: {0}",
"busy":"Nelze použít tento {0}!\nTicket je momentálně zpracováván botem.\n\nZkus to prosím znovu za několik sekund!"
},
"optionInvalidReasons":{
"stringRegex":"Hodnota neodpovídá vzoru!",
"stringMinLength":"Hodnota musí mít alespoň {0} znaků!",
"stringMaxLength":"Hodnota může mít maximálně {0} znaků!",
"numberInvalid":"Neplatné číslo!",
"numberMin":"Číslo musí být alespoň {0}!",
"numberMax":"Číslo může být maximálně {0}!",
"numberDecimal":"Číslo nesmí být desetinné!",
"numberNegative":"Číslo nesmí být záporné!",
"numberPositive":"Číslo nesmí být kladné!",
"numberZero":"Číslo nesmí být nula!",
"channelNotFound":"Nelze najít kanál!",
"userNotFound":"Nelze najít uživatele!",
"roleNotFound":"Nelze najít roli!",
"memberNotFound":"Nelze najít uživatele!",
"mentionableNotFound":"Nelze najít uživatele nebo roli!",
"channelType":"Neplatný typ kanálu!",
"notInGuild":"Tato možnost vyžaduje, abys byl na serveru!"
},
"permissions":{
"developer":"Musíš být vývojářem tohoto bota.",
"owner":"Musíš být vlastníkem serveru.",
"admin":"Musíš být adminem serveru.",
"moderator":"Musíš být moderátorem.",
"support":"Musíš být členem týmu podpory.",
"member":"Musíš být členem.",
"discord-administrator":"Musíš mít oprávnění `ADMINISTRATOR`."
},
"actionInvalid":{
"close":"Ticket je již uzavřený!",
"reopen":"Ticket ještě není uzavřený!",
"claim":"Ticket je již přidělený!",
"unclaim":"Ticket ještě není přidělený!",
"pin":"Ticket je již připnutý!",
"unpin":"Ticket ještě není připnutý!",
"add":"Tento uživatel už má k ticketu přístup!",
"remove":"Tohoto uživatele nelze z ticketu odstranit!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickety",
"reason":"Důvod",
"creator":"Tvůrce",
"remaining":"Zbývající čas",
"added":"Přidáno",
"removed":"Odstraněno",
"filter":"Filtr",
"claimedBy":"Přiděleno uživatelem {0}",
"method":"Metoda",
"type":"Typ",
"blacklisted":"Na blacklistu",
"panel":"Panel",
"command":"Příkaz",
"system":"Systém",
"true":"true",
"false":"false",
"syntax":"Syntaxe",
"originalName":"Původní jméno",
"newName":"Nové jméno",
"until":"Do",
"validOptions":"Platné možnosti",
"validPanels":"Platné panely",
"autoclose":"Automatické uzavření",
"autodelete":"Automatické smazání",
"startupDate":"Datum spuštění",
"version":"Verze",
"name":"Jméno",
"role":"Role",
"status":"Stav",
"claimed":"Přiděleno",
"pinned":"Připnuto",
"creationDate":"Datum vytvoření"
},
"lowercase":{
"text":"text",
"html":"html",
"command":"příkaz",
"modal":"modal",
"button":"tlačítko",
"dropdown":"roletka",
"method":"metoda"
}
},
"commands":{
"reason":"Zadej nepovinný důvod, který bude viditelný v logu.",
"help":"Získej seznam všech dostupných příkazů.",
"panel":"Vytvoř zprávu s roletkou nebo tlačítky (pro vytvoření ticketu).",
"panelId":"Identifikátor panelu, který chceš vytvořit.",
"panelAutoUpdate":"Chceš, aby se tento panel automaticky aktualizoval při úpravách?",
"ticket":"Okamžitě vytvoř ticket.",
"ticketId":"Identifikátor ticketu, který chceš vytvořit.",
"close":"Uzavři ticket.",
"delete":"Smaž ticket.",
"deleteNoTranscript":"Smaž tento ticket bez vytvoření přepisu.",
"reopen":"Znovu otevři ticket.",
"claim":"Přiděl ticket.",
"claimUser":"Přiděl tento ticket někomu jinému místo sebe.",
"unclaim":"Odeber přidělení ticketu.",
"pin":"Připni ticket.",
"unpin":"Odepni ticket.",
"move":"Přesuň ticket.",
"moveId":"Identifikátor možnost, na který chceš přesunout.",
"rename":"Přejmenuj ticket.",
"renameName":"Nový název pro tento ticket.",
"add":"Přidej uživatele k ticketu.",
"addUser":"Uživatel k přidání.",
"remove":"Odstraň uživatele z ticketu.",
"removeUser":"Uživatel k odstranění.",
"blacklist":"Spravuj blacklist ticketů.",
"blacklistView":"Zobraz seznam aktuálního blacklistu.",
"blacklistAdd":"Přidej uživatele na blacklist.",
"blacklistRemove":"Odstraň uživatele z blacklistu.",
"blacklistGet":"Získej detaily o uživateli na blacklistu.",
"blacklistGetUser":"Uživatel, o kterém chceš získat detaily.",
"stats":"Zobraz statistiky bota, člena nebo ticketu.",
"statsReset":"Resetuj všechny statistiky bota (a začni počítat od nuly).",
"statsGlobal":"Zobraz globální statistiky.",
"statsUser":"Zobraz statistiky uživatele na serveru.",
"statsUserUser":"Uživatel, jehož statistiky chceš zobrazit.",
"statsTicket":"Zobraz statistiky ticketu na serveru.",
"statsTicketTicket":"Ticket, jehož statistiky chceš zobrazit.",
"clear":"Smaž více ticketů najednou. Lze zadat volitelný filtr.",
"clearFilter":"Filtr pro vymazání tiketů.",
"clearFilters":{
"all":"Vše",
"open":"Otevřené",
"close":"Uzavřené",
"claim":"Přidělené",
"unclaim":"Nepřidělené",
"pin":"Připnuté",
"unpin":"Nepřipnuté",
"autoclose":"Automaticky uzavřené"
},
"autoclose":"Spravuj automatické uzavření ticketu.",
"autocloseDisable":"Deaktivuj automatické uzavření v tomto ticketu.",
"autocloseEnable":"Aktivuj automatické uzavření v tomto ticketu.",
"autocloseEnableTime":"Počet hodin neaktivity, po kterých se ticket uzavře.",
"autodelete":"Spravuj automatické smazání ticketu.",
"autodeleteDisable":"Deaktivuj automatické smazání v tomto ticketu.",
"autodeleteEnable":"Aktivuj automatické smazání v tomto ticketu.",
"autodeleteEnableTime":"Počet dnů neaktivity, po kterých se ticket smaže."
},
"helpMenu":{
"help":"Získej seznam všech dostupných příkazů.",
"ticket":"Okamžitě vytvoř ticket.",
"close":"Uzavři ticket, čímž se zakáže psaní v tomto kanálu.",
"delete":"Smaž ticket, čímž se vytvoří přepis, pokud je to povoleno.",
"reopen":"Znovu otevři ticket, což opět umožní psaní v tomto kanálu.",
"pin":"Připni ticket. Tento ticket se přesune na začátek a bude mít ve jménu emoji '📌'.",
"unpin":"Odepni ticket. Ticket zůstane na svém místě, ale ztratí emoji '📌'.",
"move":"Přesuň ticket. Tím se změní typ tohoto ticketu.",
"rename":"Přejmenuj ticket. Tím se změní název kanálu tohoto ticketu.",
"claim":"Přiděl ticket. Tím dáš svému týmu najevo, že tento ticket řešíš.",
"unclaim":"Odeber přidělení ticketu. Tím dáš svému týmu najevo, že je tento ticket znovu volný.",
"add":"Přidej uživatele k ticketu. Tímto uživateli umožníš číst a psát v tomto ticketu.",
"remove":"Odstraň uživatele z ticketu. Tímto uživateli odebereš možnost číst a psát v tomto ticketu.",
"panel":"Vytvoř zprávu s roletkou nebo tlačítky (pro vytvoření ticketu).",
"blacklistView":"Zobraz seznam aktuálního blacklistu.",
"blacklistAdd":"Přidej uživatele na blacklist.",
"blacklistRemove":"Odstraň uživatele z blacklistu.",
"blacklistGet":"Získej detaily o uživateli na blacklistu.",
"statsGlobal":"Zobraz globální statistiky.",
"statsTicket":"Zobraz statistiky ticketu na serveru.",
"statsUser":"Zobraz statistiky uživatele na serveru.",
"statsReset":"Resetuj všechny statistiky bota (a začni počítat od nuly).",
"autocloseDisable":"Deaktivuj automatické uzavření v tomto ticketu.",
"autocloseEnable":"Aktivuj automatické uzavření v tomto ticketu.",
"autodeleteDisable":"Deaktivuj automatické smazání v tomto ticketu.",
"autodeleteEnable":"Aktivuj automatické smazání v tomto ticketu."
},
"stats":{
"scopes":{
"global":"Globální statistiky",
"system":"Statistiky systému",
"user":"Statistiky uživatele",
"ticket":"Statistiky ticketu",
"participants":"Účastníci"
},
"properties":{
"ticketsCreated":"Vytvořené tickety",
"ticketsClosed":"Uzavřené tickety",
"ticketsDeleted":"Smazané tickety",
"ticketsReopened":"Znovu otevřené tickety",
"ticketsAutoclosed":"Automaticky uzavřené tickety",
"ticketsClaimed":"Přidělené tickety",
"ticketsPinned":"Připnuté tickety",
"ticketsMoved":"Přesunuté tickety",
"usersBlacklisted":"Uživatelé na blacklistu",
"transcriptsCreated":"Vytvořené přepisy"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["the_gamer"],
"lastedited":"26/09/2024",
"language":"Danish",
"automated":false
},
"checker": {
"system": {
"typeError": "[FEJL]",
"headerOpenTicket": "ÅBEN TICKET",
"typeWarning": "[ADVARSEL]",
"typeInfo": "[INFO]",
"headerConfigChecker": "CONFIG CHECKER",
"headerDescription": "tjek efter fejl i din config!",
"footerError": "botten vil ikke fikse før alle {0}'s are fixed!",
"footerWarning": "it's recommended to fix all {0}'s before starting!",
"footerSupport": "SUPPORT: {0} - DOCS: {1}",
"compactInformation": "brug {0} for mere information!",
"dataPath": "path",
"dataDocs": "docs",
"dataMessages": "besked"
},
"messages": {
"stringTooShort": "Denne linje kan ikke være kortere end {0} karaktere!",
"stringTooLong": "Denne linke kan ikke være længere end {0} karaktere!",
"stringLengthInvalid": "Denne linje skal være {0} karaktere lang!",
"stringStartsWith": "Denne linje skal starte med {0}!",
"stringEndsWith": "Denne linje skal ende med {0}!",
"stringContains": "Denne tekst skal indeholde {0}!",
"stringChoices": "Denne tekst kan kun være en af følgende værdier: {0}!",
"stringRegex": "Denne tekst er ugyldig!",
"numberTooShort": "Dette nummer kan ikke være kortere end {0} tegn!",
"numberTooLong": "Dette nummer kan ikke være længere end {0} tegn!",
"numberLengthInvalid": "Dette nummer skal være {0} tegn langt!",
"numberTooSmall": "Dette nummer skal være mindst {0}!",
"numberTooLarge": "Dette nummer skal være højst {0}!",
"numberNotEqual": "Dette nummer skal være {0}!",
"numberStep": "Dette nummer skal være et multiplum af {0}!",
"numberStepOffset": "Dette nummer skal være et multiplum af {0}, startende med {1}!",
"numberStartsWith": "Dette nummer skal starte med {0}!",
"numberEndsWith": "Dette nummer skal ende med {0}!",
"numberContains": "Dette nummer skal indeholde {0}!",
"numberChoices": "Dette nummer kan kun være en af følgende værdier: {0}!",
"numberFloat": "Dette nummer kan ikke være et decimaltal!",
"numberNegative": "Dette nummer kan ikke være negativt!",
"numberPositive": "Dette nummer kan ikke være positivt!",
"numberZero": "Dette nummer kan ikke være nul!",
"booleanTrue": "Denne boolean kan ikke være sand!",
"booleanFalse": "Denne boolean kan ikke være falsk!",
"arrayEmptyDisabled": "Dette array må ikke være tomt!",
"arrayEmptyRequired": "Dette array skal være tomt!",
"arrayTooShort": "Dette array skal have en længde på mindst {0}!",
"arrayTooLong": "Dette array skal have en længde på højst {0}!",
"arrayLengthInvalid": "Dette array skal have en længde på {0}!",
"arrayInvalidTypes": "Dette array kan kun indeholde følgende typer: {0}!",
"arrayDouble": "Dette array tillader ikke den samme værdi to gange!",
"discordInvalidId": "Dette er et ugyldigt Discord {0} id!",
"discordInvalidIdOptions": "Dette er et ugyldigt Discord {0} id! Du kan også bruge en af disse: {1}!",
"discordInvalidToken": "Dette er et ugyldigt Discord token (syntaktisk)!",
"colorInvalid": "Dette er en ugyldig hex-farve!",
"emojiTooShort": "Denne tekst skal have mindst {0} emojis!",
"emojiTooLong": "Denne tekst skal have højst {0} emojis!",
"emojiCustom": "Denne emoji kan ikke være en brugerdefineret Discord-emoji!",
"emojiInvalid": "Dette er en ugyldig emoji!",
"urlInvalid": "Denne URL er ugyldig!",
"urlInvalidHttp": "Denne URL kan kun bruge https:// protokollen!",
"urlInvalidProtocol": "Denne URL kan kun bruge http:// & https:// protokoller!",
"urlInvalidHostname": "Denne URL har et ikke-tilladt hostname!",
"urlInvalidExtension": "Denne URL har en ugyldig filendelse! Vælg mellem: {0}!",
"urlInvalidPath": "Denne URL har en ugyldig sti!",
"idNotUnique": "Dette id er ikke unikt, brug et andet id i stedet!",
"idNonExistent": "Id'et {0} eksisterer ikke!",
"invalidType": "Denne egenskab skal være typen: {0}!",
"propertyMissing": "Egenskaben {0} mangler i dette objekt!",
"propertyOptional": "Egenskaben {0} er valgfri i dette objekt!",
"objectDisabled": "Dette objekt er deaktiveret, aktiver det ved at bruge {0}!",
"nullInvalid": "Denne egenskab kan ikke være null!",
"switchInvalidType": "Dette skal være en af følgende typer: {0}!",
"objectSwitchInvalid": "Dette objekt skal være en af følgende typer: {0}!",
"invalidLanguage": "Dette er et ugyldigt sprog!",
"invalidButton": "Denne knap skal have mindst en {0} eller {1}!",
"unusedOption": "Muligheden {0} bruges ikke nogen steder!",
"unusedQuestion": "Spørgsmålet {0} bruges ikke nogen steder!",
"dropdownOption": "Et panel med dropdown aktiveret kan kun indeholde muligheder af typen 'ticket'!"
}
},
"actions": {
"buttons": {
"create": "Opret Ticket",
"close": "Luk Ticket",
"delete": "Slet Ticket",
"reopen": "Genåbn Ticket",
"claim": "Tag Ticket",
"unclaim": "Fraskriv Ticket",
"pin": "Fastgør Ticket",
"unpin": "Fjern Fastgørelse af Ticket",
"clear": "Slet Tickets",
"helpSwitchSlash": "Vis Slash Kommandoer",
"helpSwitchText": "Vis Tekst Kommandoer",
"helpPage": "Side {0}",
"withReason": "Med Årsag",
"withoutTranscript": "Uden Transkript"
},
"titles": {
"created": "Ticket Oprettet",
"close": "Ticket Lukket",
"delete": "Ticket Slettet",
"reopen": "Ticket Genåbnet",
"claim": "Ticket Taget",
"unclaim": "Ticket Fraskrevet",
"pin": "Ticket Fastgjort",
"unpin": "Ticket Fjernet fra Fastgørelse",
"rename": "Ticket Omdøbt",
"move": "Ticket Flyttet",
"add": "Bruger Tilføjet til Ticket",
"remove": "Bruger Fjernet fra Ticket",
"help": "Tilgængelige Kommandoer",
"statsReset": "Nulstil Statistik",
"blacklistAdd": "Bruger Blacklistet",
"blacklistRemove": "Bruger Fjernet fra Blacklist",
"blacklistGet": "Blacklistet Bruger",
"blacklistView": "Nuværende Blacklist",
"blacklistAddDm": "Tilføjet til Blacklist",
"blacklistRemoveDm": "Fjernet fra Blacklist",
"clear": "Tickets Renset",
"roles": "Roller Opdateret",
"autoclose": "Ticket Autolukket",
"autocloseEnabled": "Autolukning Aktiveret",
"autocloseDisabled": "Autolukning Deaktiveret",
"autodelete": "Ticket Autoslettet",
"autodeleteEnabled": "Autosletning Aktiveret",
"autodeleteDisabled": "Autosletning Deaktiveret"
},
"descriptions": {
"create": "Din ticket er blevet oprettet. Klik på knappen nedenfor for at få adgang til den!",
"close": "ticket er blevet lukket succesfuldt!",
"delete": "ticket er blevet slettet succesfuldt!",
"reopen": "ticket er blevet genåbnet succesfuldt!",
"claim": "ticket er blevet taget succesfuldt!",
"unclaim": "ticket er blevet fraskrevet succesfuldt!",
"pin": "ticket er blevet fastgjort succesfuldt!",
"unpin": "ticket er blevet fjernet fra fastgørelse succesfuldt!",
"rename": "ticket er blevet omdøbt til {0} succesfuldt!",
"move": "ticket er blevet flyttet til {0} succesfuldt!",
"add": "{0} er blevet tilføjet til ticketten succesfuldt!",
"remove": "{0} er blevet fjernet fra ticketten succesfuldt!",
"helpExplanation": "`<name>` => påkrævet parameter\n`[name]` => valgfri parameter",
"statsReset": "Bot-statistikken er blevet nulstillet succesfuldt!",
"statsError": "Kan ikke vise ticketstatistik!\n{0} er ikke en ticket!",
"blacklistAdd": "{0} er blevet blacklistet succesfuldt!",
"blacklistRemove": "{0} er blevet frigivet succesfuldt!",
"blacklistGetSuccess": "{0} er i øjeblikket blacklistet!",
"blacklistGetEmpty": "{0} er i øjeblikket ikke blacklistet!",
"blacklistViewEmpty": "Ingen har endnu været blacklistet!",
"blacklistViewTip": "Brug \"/blacklist add\" for at blacklist en bruger!",
"clearVerify": "Er du sikker på, at du vil slette flere tickets?\nDenne handling kan ikke fortrydes!",
"clearReady": "{0} tickets er blevet slettet succesfuldt!",
"rolesEmpty": "Ingen roller er blevet opdateret!",
"autocloseLeave": "Denne ticket er blevet autolukket, fordi skaberen forlod serveren!",
"autocloseTimeout": "Denne ticket er blevet autolukket, fordi den har været inaktiv i mere end `{0}h`!",
"autodeleteLeave": "Denne ticket er blevet autoslettet, fordi skaberen forlod serveren!",
"autodeleteTimeout": "Denne ticket er blevet autoslettet, fordi den har været inaktiv i mere end `{0} dage`!",
"autocloseEnabled": "Autolukning er blevet aktiveret i denne ticket!\nDen vil blive lukket, når den er inaktiv i mere end `{0}h`!",
"autocloseDisabled": "Autolukning er blevet deaktiveret i denne ticket!\nDen vil ikke blive lukket automatisk længere!",
"autodeleteEnabled": "Autosletning er blevet aktiveret i denne ticket!\nDen vil blive slettet, når den er inaktiv i mere end `{0} dage`!",
"autodeleteDisabled": "Autosletning er blevet deaktiveret i denne ticket!\nDen vil ikke blive slettet automatisk længere!",
"ticketMessageLimit": "Du kan kun oprette {0} ticket(ter) ad gangen!",
"ticketMessageAutoclose": "Denne ticket vil blive autolukket, når den er inaktiv i {0}h!",
"ticketMessageAutodelete": "Denne ticket vil blive autoslettet, når den er inaktiv i {0} dage!",
"panelReady": "Du kan finde panelet nedenfor!\nDenne besked kan nu slettes!"
},
"modal": {
"closePlaceholder": "Hvorfor lukkede du denne ticket?",
"deletePlaceholder": "Hvorfor slettede du denne ticket?",
"reopenPlaceholder": "Hvorfor genåbnede du denne ticket?",
"claimPlaceholder": "Hvorfor tog du denne ticket?",
"unclaimPlaceholder": "Hvorfor fraskrev du denne ticket?",
"pinPlaceholder": "Hvorfor fastgjorde du denne ticket?",
"unpinPlaceholder": "Hvorfor fjernede du fastgørelsen af denne ticket?"
},
"logs": {
"createLog": "En ny ticket er blevet oprettet af {0}!",
"closeLog": "Denne ticket er blevet lukket af {0}!",
"closeDm": "Din ticket er blevet lukket på vores server!",
"deleteLog": "Denne ticket er blevet slettet af {0}!",
"deleteDm": "Din ticket er blevet slettet på vores server!",
"reopenLog": "Denne ticket er blevet genåbnet af {0}!",
"reopenDm": "Din ticket er blevet genåbnet på vores server!",
"claimLog": "Denne ticket er blevet taget af {0}!",
"claimDm": "Din ticket er blevet taget på vores server!",
"unclaimLog": "Denne ticket er blevet fraskrevet af {0}!",
"unclaimDm": "Din ticket er blevet fraskrevet på vores server!",
"pinLog": "Denne ticket er blevet fastgjort af {0}!",
"pinDm": "Din ticket er blevet fastgjort på vores server!",
"unpinLog": "Denne ticket er blevet fjernet fra fastgørelse af {0}!",
"unpinDm": "Din ticket er blevet fjernet fra fastgørelse på vores server!",
"renameLog": "Denne ticket er blevet omdøbt til {0} af {1}!",
"renameDm": "Din ticket er blevet omdøbt til {0} på vores server!",
"moveLog": "Denne ticket er blevet flyttet til {0} af {1}!",
"moveDm": "Din ticket er blevet flyttet til {0} på vores server!",
"addLog": "{0} er blevet tilføjet til denne ticket af {1}!",
"addDm": "{0} er blevet tilføjet til din ticket på vores server!",
"removeLog": "{0} er blevet fjernet fra denne ticket af {1}!",
"removeDm": "{0} er blevet fjernet fra din ticket på vores server!",
"blacklistAddLog": "{0} er blevet blacklistet af {1}!",
"blacklistRemoveLog": "{0} er blevet fjernet fra blacklisten af {1}!",
"blacklistAddDm": "Du er blevet blacklistet på vores server!\nFra nu af kan du ikke oprette en ticket!",
"blacklistRemoveDm": "Du er blevet fjernet fra blacklisten på vores server!\nNu kan du igen oprette ticketter!",
"clearLog": "{0} ticketter er blevet slettet af {1}!"
}
},
"transcripts": {
"success": {
"visit": "Besøg Transkript",
"ready": "Transkript Oprettet",
"textFileDescription": "Dette er teksttranskriptet af en slettet billet!",
"htmlProgress": "Vent venligst mens dette HTML-transkript bliver behandlet...",
"createdChannel": "Et nyt {0} transkript er blevet oprettet på serveren!",
"createdCreator": "Et nyt {0} transkript er blevet oprettet for en af dine billetter!",
"createdParticipant": "Et nyt {0} transkript er blevet oprettet i en af de billetter, du deltog i!",
"createdActiveAdmin": "Et nyt {0} transkript er blevet oprettet i en af de billetter, hvor du deltog som administrator!",
"createdEveryAdmin": "Et nyt {0} transkript er blevet oprettet i en af de billetter, hvor du var administrator!",
"createdOther": "Et nyt {0} transkript er blevet oprettet!"
},
"errors": {
"retry": "Prøv igen",
"continue": "Slet uden transkript",
"backup": "Opret backup-transkript",
"error": "Noget gik galt, da vi forsøgte at oprette transkriptet.\nHvad vil du gerne gøre?\n\nDenne ticket bliver ikke slettet, før du klikker på en af disse knapper."
}
},
"errors": {
"titles": {
"internalError": "Intern fejl",
"optionMissing": "Kommandoindstilling mangler",
"optionInvalid": "Ugyldig kommandoindstilling",
"unknownCommand": "Ukendt kommando",
"noPermissions": "Ingen tilladelser",
"unknownTicket": "Ukendt ticket",
"deprecatedTicket": "Forældet ticket",
"unknownOption": "Ukendt indstilling",
"unknownPanel": "Ukendt panel",
"notInGuild": "Ikke på server",
"channelRename": "Kan ikke omdøbe kanalen",
"busy": "Ticket er optaget"
},
"descriptions": {
"askForInfo": "Kontakt ejeren af denne bot for mere info!",
"askForInfoResolve": "Kontakt ejeren af denne bot, hvis problemet ikke løses efter et par forsøg.",
"internalError": "Kunne ikke svare på denne {0} på grund af en intern fejl!",
"optionMissing": "Der mangler en påkrævet parameter i denne kommando!",
"optionInvalid": "En parameter i denne kommando er ugyldig!",
"optionInvalidChoose": "Vælg mellem",
"unknownCommand": "Prøv at besøge hjælpe-menuen for mere info!",
"noPermissions": "Du har ikke tilladelse til at bruge denne {0}!",
"noPermissionsList": "Påkrævede tilladelser: (en af dem)",
"noPermissionsCooldown": "Du har ikke tilladelse til at bruge denne {0}, fordi du har en nedkølingsperiode!",
"noPermissionsBlacklist": "Du har ikke tilladelse til at bruge denne {0}, fordi du er blevet sortlistet!",
"noPermissionsLimitGlobal": "Du har ikke tilladelse til at oprette en ticket, fordi serveren har nået det maksimale antal tickets!",
"noPermissionsLimitGlobalUser": "Du har ikke tilladelse til at oprette en ticket, fordi du har nået det maksimale antal tickets!",
"noPermissionsLimitOption": "Du har ikke tilladelse til at oprette en ticket, fordi serveren har nået det maksimale antal tickets for denne indstilling!",
"noPermissionsLimitOptionUser": "Du har ikke tilladelse til at oprette en ticket, fordi du har nået det maksimale antal tickets for denne indstilling!",
"unknownTicket": "Prøv denne kommando igen i en gyldig ticket!",
"deprecatedTicket": "Den aktuelle kanal er ikke en gyldig ticket! Det kan være en ticket fra en ældre version af Open Ticket!",
"notInGuild": "Denne {0} virker ikke i DM! Prøv igen på en server!",
"channelRename": "På grund af Discord-ratelimits er det i øjeblikket umuligt for botten at omdøbe kanalen. Kanalen vil automatisk blive omdøbt inden for 10 minutter, hvis botten ikke genstartes.",
"channelRenameSource": "Kilden til denne fejl er: {0}",
"busy": "Kan ikke bruge denne {0}!\nTicketen bliver i øjeblikket behandlet af botten.\n\nPrøv igen om et par sekunder!"
},
"optionInvalidReasons": {
"stringRegex": "Værdien matcher ikke mønsteret!",
"stringMinLength": "Værdien skal være mindst {0} tegn!",
"stringMaxLength": "Værdien skal være højst {0} tegn!",
"numberInvalid": "Ugyldigt tal!",
"numberMin": "Tallet skal være mindst {0}!",
"numberMax": "Tallet skal være højst {0}!",
"numberDecimal": "Tallet må ikke være et decimaltal!",
"numberNegative": "Tallet må ikke være negativt!",
"numberPositive": "Tallet må ikke være positivt!",
"numberZero": "Tallet må ikke være nul!",
"channelNotFound": "Kan ikke finde kanalen!",
"userNotFound": "Kan ikke finde brugeren!",
"roleNotFound": "Kan ikke finde rollen!",
"memberNotFound": "Kan ikke finde brugeren!",
"mentionableNotFound": "Kan ikke finde brugeren eller rollen!",
"channelType": "Ugyldig kanaltype!",
"notInGuild": "Denne mulighed kræver, at du er på en server!"
},
"permissions": {
"developer": "Du skal være udvikler af botten.",
"owner": "Du skal være serverejer.",
"admin": "Du skal være serveradministrator.",
"moderator": "Du skal være moderator.",
"support": "Du skal være en del af supportteamet.",
"member": "Du skal være medlem.",
"discord-administrator": "Du skal have `ADMINISTRATOR` tilladelsen."
},
"actionInvalid": {
"close": "Ticket er allerede lukket!",
"reopen": "Ticket er ikke lukket endnu!",
"claim": "Ticket er allerede gjort krav på!",
"unclaim": "Ticket er ikke gjort krav på endnu!",
"pin": "Ticket er allerede fastgjort!",
"unpin": "Ticket er ikke fastgjort endnu!",
"add": "Denne bruger har allerede adgang til ticketen!",
"remove": "Kan ikke fjerne denne bruger fra ticketen!"
}
},
"params": {
"uppercase": {
"ticket": "Ticket",
"tickets": "Tickets",
"reason": "Årsag",
"creator": "Skaber",
"remaining": "Tid tilbage",
"added": "Tilføjet",
"removed": "Fjernet",
"filter": "Filter",
"claimedBy": "Gjort krav på af {0}",
"method": "Metode",
"type": "Type",
"blacklisted": "Sortlistet",
"panel": "Panel",
"command": "Kommando",
"system": "System",
"true": "Sand",
"false": "Falsk",
"syntax": "Syntaks",
"originalName": "Originalt navn",
"newName": "Nyt navn",
"until": "Indtil",
"validOptions": "Gyldige indstillinger",
"validPanels": "Gyldige paneler",
"autoclose": "Auto-lukning",
"autodelete": "Auto-sletning",
"startupDate": "Startdato",
"version": "Version",
"name": "Navn",
"role": "Rolle",
"status": "Status",
"claimed": "Gjort krav på",
"pinned": "Fastgjort",
"creationDate": "Oprettelsesdato"
},
"lowercase": {
"text": "tekst",
"html": "html",
"command": "kommando",
"modal": "modal",
"button": "knap",
"dropdown": "dropdown",
"method": "metode"
}
},
"commands": {
"reason": "Angiv en valgfri årsag, der vil være synlig i loggene.",
"help": "Få en liste over alle tilgængelige kommandoer.",
"panel": "Opret en besked med en dropdown eller knapper (til ticket-oprettelse).",
"panelId": "Identifikatoren for panelet, som du vil oprette.",
"panelAutoUpdate": "Vil du have, at dette panel automatisk opdateres, når det redigeres?",
"ticket": "Opret en ticket med det samme.",
"ticketId": "Identifikatoren for ticketen, som du vil oprette.",
"close": "Luk en ticket.",
"delete": "Slet en ticket.",
"deleteNoTranscript": "Slet denne ticket uden at oprette et transkript.",
"reopen": "Genåbn en ticket.",
"claim": "Gør krav på en ticket.",
"claimUser": "Gør krav på denne ticket til en anden bruger i stedet for dig selv.",
"unclaim": "Afstå fra krav på en ticket.",
"pin": "Fastgør en ticket.",
"unpin": "Frigør en fastgjort ticket.",
"move": "Flyt en ticket.",
"moveId": "Identifikatoren for den indstilling, du vil flytte til.",
"rename": "Omdøb en ticket.",
"renameName": "Det nye navn for denne ticket.",
"add": "Tilføj en bruger til en ticket.",
"addUser": "Brugeren, der skal tilføjes.",
"remove": "Fjern en bruger fra en ticket.",
"removeUser": "Brugeren, der skal fjernes.",
"blacklist": "Administrer ticket-blacklisten.",
"blacklistView": "Se en liste over den nuværende blacklist.",
"blacklistAdd": "Tilføj en bruger til blacklisten.",
"blacklistRemove": "Fjern en bruger fra blacklisten.",
"blacklistGet": "Få detaljer fra en sortlistet bruger.",
"blacklistGetUser": "Brugeren at få detaljer fra.",
"stats": "Se statistik fra botten, en bruger eller en ticket.",
"statsReset": "Nulstil al statistik for botten (og start tælling fra nul).",
"statsGlobal": "Se de globale statistikker.",
"statsUser": "Se statistik fra en bruger på serveren.",
"statsUserUser": "Brugeren, der skal vises.",
"statsTicket": "Se statistik for en ticket på serveren.",
"statsTicketTicket": "Ticketen, der skal vises.",
"clear": "Slet flere tickets på samme tid.",
"clearFilter": "Filteret til at rydde tickets.",
"clearFilters": {
"all": "Alle",
"open": "Åbne",
"close": "Lukkede",
"claim": "Gjort krav på",
"unclaim": "Ikke gjort krav på",
"pin": "Fastgjort",
"unpin": "Ikke fastgjort",
"autoclose": "Auto-lukket"
},
"autoclose": "Administrer auto-lukning i en ticket.",
"autocloseDisable": "Deaktiver auto-lukning i denne ticket.",
"autocloseEnable": "Aktiver auto-lukning i denne ticket.",
"autocloseEnableTime": "Antal timer, denne ticket skal være inaktiv for at lukke den.",
"autodelete": "Administrer auto-sletning i en ticket.",
"autodeleteDisable": "Deaktiver auto-sletning i denne ticket.",
"autodeleteEnable": "Aktiver auto-sletning i denne ticket.",
"autodeleteEnableTime": "Antal dage, denne ticket skal være inaktiv for at slette den."
},
"helpMenu": {
"help": "Få en liste over alle de tilgængelige kommandoer.",
"ticket": "Opret en ticket med det samme.",
"close": "Luk en ticket, dette deaktiverer skrivning i denne kanal.",
"delete": "Slet en ticket, dette opretter et transkript, når det er aktiveret.",
"reopen": "Genåbn en ticket, dette aktiverer skrivning i denne kanal igen.",
"pin": "Fastgør en ticket. Dette vil flytte ticketen til toppen og tilføje en '📌' emoji til navnet.",
"unpin": "Frigør en ticket. Ticketen forbliver på sin position, men mister '📌' emoji.",
"move": "Flyt en ticket. Dette vil ændre typen af denne ticket.",
"rename": "Omdøb en ticket. Dette vil ændre kanalnavnet på denne ticket.",
"claim": "Gør krav på en ticket. Med dette kan du lade dit team vide, at du håndterer denne ticket.",
"unclaim": "Afstå fra krav på en ticket. Med dette kan du lade dit team vide, at denne ticket er fri igen.",
"add": "Tilføj en bruger til en ticket. Dette vil give brugeren mulighed for at læse og skrive i denne ticket.",
"remove": "Fjern en bruger fra en ticket. Dette vil fjerne muligheden for at læse og skrive for en bruger i denne ticket.",
"panel": "Opret en besked med en dropdown eller knapper (til ticket-oprettelse).",
"blacklistView": "Se en liste over den nuværende blacklist.",
"blacklistAdd": "Tilføj en bruger til blacklisten.",
"blacklistRemove": "Fjern en bruger fra blacklisten.",
"blacklistGet": "Få detaljerne fra en sortlistet bruger.",
"statsGlobal": "Se de globale statistikker.",
"statsTicket": "Se statistikken for en ticket på serveren.",
"statsUser": "Se statistikken fra en bruger på serveren.",
"statsReset": "Nulstil al statistik for botten (og start tælling fra nul).",
"autocloseDisable": "Deaktiver auto-lukning i denne ticket.",
"autocloseEnable": "Aktiver auto-lukning i denne ticket.",
"autodeleteDisable": "Deaktiver auto-sletning i denne ticket.",
"autodeleteEnable": "Aktiver auto-sletning i denne ticket."
},
"stats": {
"scopes": {
"global": "Globale Statistikker",
"system": "Systemstatistikker",
"user": "Brugerstatistikker",
"ticket": "Ticketstatistikker",
"participants": "Deltagere"
},
"properties": {
"ticketsCreated": "Oprettede Tickets",
"ticketsClosed": "Lukkede Tickets",
"ticketsDeleted": "Slettede Tickets",
"ticketsReopened": "Genåbnede Tickets",
"ticketsAutoclosed": "Auto-lukkede Tickets",
"ticketsClaimed": "Gjorte krav på Tickets",
"ticketsPinned": "Fastgjorte Tickets",
"ticketsMoved": "Flyttede Tickets",
"usersBlacklisted": "Sortlistede Brugere",
"transcriptsCreated": "Oprettede Transkripter"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["DJj123dj"],
"lastedited":"21/08/2024",
"language":"Dutch",
"automated":false
},
"checker":{
"system":{
"typeError":"[ERROR]",
"headerOpenTicket":"OPEN TICKET",
"typeWarning":"[WAARSCHUWING]",
"typeInfo":"[INFO]",
"headerConfigChecker":"CONFIG CHECKER",
"headerDescription":"check voor errors in je config bestanden!",
"footerError":"de bot start niet tot alle {0}'s opgelost zijn!",
"footerWarning":"het is aangeraden om alle {0}'en op te lossen voor het starten!",
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
"compactInformation":"gebruik {0} voor meer informatie!",
"dataPath":"pad",
"dataDocs":"docs",
"dataMessages":"bericht"
},
"messages":{
"stringTooShort":"Deze tekst kan niet korter dan {0} karakters zijn!",
"stringTooLong":"Deze tekst kan niet langer dan {0} karakters zijn!",
"stringLengthInvalid":"Deze tekst moet {0} karakters lang zijn!",
"stringStartsWith":"Deze tekst moet starten met {0}!",
"stringEndsWith":"Deze tekst moet eindigen met {0}!",
"stringContains":"Deze tekst moet {0} bevatten!",
"stringChoices":"Deze tekst kan alleen de volgende waardes bevatten: {0}!",
"stringRegex":"Deze tekst is ongeldig!",
"numberTooShort":"Dit nummer kan niet korter dan {0} karakters zijn!",
"numberTooLong":"Dit nummer kan niet langer dan {0} karakters zijn!",
"numberLengthInvalid":"Dit nummer moet {0} karakters lang zijn!",
"numberTooSmall":"Dit nummer moet minimum {0} zijn!",
"numberTooLarge":"Dit nummer kan maximum {0} zijn!",
"numberNotEqual":"Dit nummer moet gelijk zijn aan {0}!",
"numberStep":"Dit nummer moet een meervoud zijn van {0}!",
"numberStepOffset":"Dit nummer moet een meervoud zijn van {0} startend bij {1}!",
"numberStartsWith":"Dit nummer moet starten met {0}!",
"numberEndsWith":"Dit nummer moet eindigen met {0}!",
"numberContains":"Dit nummer moet {0} bevatten!",
"numberChoices":"Dit nummer kan alleen een van de volgende waardes bevatten: {0}!",
"numberFloat":"Dit nummer kan geen kommagetal zijn!",
"numberNegative":"Dit nummer kan niet negatief zijn!",
"numberPositive":"Dit nummer kan niet positief zijn!",
"numberZero":"Dit nummer kan niet nul zijn!",
"booleanTrue":"Deze boolean kan niet true zijn!",
"booleanFalse":"Deze boolean kan niet false zijn!",
"arrayEmptyDisabled":"Deze array mag niet leeg zijn!",
"arrayEmptyRequired":"Deze array moet leeg zijn!",
"arrayTooShort":"Deze array moet een minimum lengte hebben van {0}!",
"arrayTooLong":"Deze array mag niet langer zijn dan {0}!",
"arrayLengthInvalid":"Deze array moet een lengte hebben van {0}!",
"arrayInvalidTypes":"Deze array kan alleen de volgende waardes bevatten: {0}!",
"arrayDouble":"Deze array staat dubbele waardes niet toe!",
"discordInvalidId":"Dit is een ongeldig discord {0} id!",
"discordInvalidIdOptions":"Dit is an ongeldig discord {0} id! Je kan ook een van deze gebruiken: {1}!",
"discordInvalidToken":"Dit is een ongeldig discord token (syntactisch)!",
"colorInvalid":"Dit is een ongeldig hex kleur!",
"emojiTooShort":"Deze tekst moet minimum {0} emoji's hebben!",
"emojiTooLong":"Deze tekst mag maximum {0} emoji's hebben!",
"emojiCustom":"Deze emoji kan geen custom discord emoji zijn!",
"emojiInvalid":"Dit is een ongeldige emoji!",
"urlInvalid":"Deze url is ongeldig!",
"urlInvalidHttp":"Deze url kan alleen het https:// protocol gebruiken!",
"urlInvalidProtocol":"Deze url kan alleen de http:// & https:// protocolen gebruiken!",
"urlInvalidHostname":"Deze url heeft een verboden hostnaam (domein)!",
"urlInvalidExtension":"Deze url heeft een ongeldige extensie! Kies tussen: {0}!",
"urlInvalidPath":"Deze url heeft een ongeldig pad!",
"idNotUnique":"Dit id is niet uniek, gebruik een andere in de plaats!",
"idNonExistent":"Het id {0} bestaat niet!",
"invalidType":"Het type van deze property moet gelijk zijn aan: {0}!",
"propertyMissing":"De property {0} mist in dit object!",
"propertyOptional":"De property {0} is optioneel in dit object!",
"objectDisabled":"Dit object is uitgeschakeld, gebruik het met behulp van {0}!",
"nullInvalid":"Deze property kan niet null zijn!",
"switchInvalidType":"Dit moet een van de volgende types zijn: {0}!",
"objectSwitchInvalid":"Dit object moet een van de volgende types zijn: {0}!",
"invalidLanguage":"Dit is een ongeldige taal!",
"invalidButton":"Deze knop moet een {0} of {1} hebben!",
"unusedOption":"De optie {0} wordt nergens gebruikt!",
"unusedQuestion":"The vraag {0} wordt nergens gebruikt!",
"dropdownOption":"Een paneel met dropdown mag alleen opties bevaten van het 'ticket' type!"
}
},
"actions":{
"buttons":{
"create":"Bekijk Ticket",
"close":"Sluit Ticket",
"delete":"Verwijder Ticket",
"reopen":"Heropen Ticket",
"claim":"Claim Ticket",
"unclaim":"Ontclaim Ticket",
"pin":"Pin Ticket",
"unpin":"Maak Ticket Los",
"clear":"Verwijder Tickets",
"helpSwitchSlash":"Bekijk Slash Commands",
"helpSwitchText":"Bekijk Text Commands",
"helpPage":"Pagina {0}",
"withReason":"Met Reden",
"withoutTranscript":"Zonder Transcript"
},
"titles":{
"created":"Ticket Gecreëerd",
"close":"Ticket Gesloten",
"delete":"Ticket Verwijderd",
"reopen":"Ticket Heropend",
"claim":"Ticket Geclaimd",
"unclaim":"Ticket Ontclaimd",
"pin":"Ticket Gepind",
"unpin":"Ticket Losgemaakt",
"rename":"Ticket Hernoemd",
"move":"Ticket Verplaatst",
"add":"Ticket Gebruiker Toegevoegd",
"remove":"Ticket Gebruiker Verwijderd",
"help":"Beschikbare Commands",
"statsReset":"Reset Stats",
"blacklistAdd":"Gebruiker Geblacklisted",
"blacklistRemove":"Gebruiker Vrijgelaten",
"blacklistGet":"Geblackliste Gebruiker",
"blacklistView":"Huidige Blacklist",
"blacklistAddDm":"Toegevoegd Aan Blacklist",
"blacklistRemoveDm":"Verwijderd Van Blacklist",
"clear":"Tickets Opgeruimd",
"roles":"Rollen Bijgewerkt",
"autoclose":"Ticket Automatisch Gesloten",
"autocloseEnabled":"Autoclose Ingeschakeld",
"autocloseDisabled":"Autoclose Uitgeschakeld",
"autodelete":"Ticket Automatisch Verwijderd",
"autodeleteEnabled":"Autodelete Ingeschakeld",
"autodeleteDisabled":"Autodelete Uitgeschakeld"
},
"descriptions":{
"create":"Je ticket is aangemaakt. Klik op de knop hier onder om er naar toe te gaan!",
"close":"Het ticket is succesvol gesloten!",
"delete":"Het ticket is succesvol verwijderd!",
"reopen":"Het ticket is succesvol heropend!",
"claim":"Het ticket is succesvol geclaimd!",
"unclaim":"Het ticket is succesvol ontclaimd!",
"pin":"Het ticket is succesvol gepind!",
"unpin":"Het ticket is succesvol losgemaakt!",
"rename":"Het ticket is succesvol hernoemd naar {0}!",
"move":"Het ticket is succesvol verplaatst naar {0}!",
"add":"{0} is succesvol toegevoegd aan het ticket!",
"remove":"{0} is succesvol verwijderd van het ticket!",
"helpExplanation":"`<naam>` => verplichte parameter\n`[naam]` => optionele parameter",
"statsReset":"De bot stats zijn succesvol gereset!",
"statsError":"Kan ticket stats niet bekijken!\n{0} is geen ticket!",
"blacklistAdd":"{0} is succesvol geblacklist!",
"blacklistRemove":"{0} is succesvol vrijgelaten!",
"blacklistGetSuccess":"{0} is op dit moment geblacklist!",
"blacklistGetEmpty":"{0} is op dit moment niet geblacklist!",
"blacklistViewEmpty":"Nog niemand is geblacklist!",
"blacklistViewTip":"Gebruik \"/blacklist add\" om een gebruiker te blacklisten!",
"clearVerify":"Weet je zeker dat je meerdere tickets wilt verwijderen? Deze actie kan niet teruggedraaid worden!",
"clearReady":"{0} tickets zijn succesvol verwijderd!",
"rolesEmpty":"Geen enkele rollen zijn bijgewerkt!",
"autocloseLeave":"Dit ticket is automatisch gesloten omdat de maker de server verlaten is!",
"autocloseTimeout":"Dit ticket is automatisch gesloten omdat het inactief was voor meer dan `{0} uur`!",
"autodeleteLeave":"Dit ticket is automatisch verwijderd omdat de maker de server verlaten is!",
"autodeleteTimeout":"Dit ticket is automatisch verwijderd omdat het inactief was voor meer dan `{0} dagen`!",
"autocloseEnabled":"Autoclose is ingeschakeld in dit ticket!\nHet wordt gesloten wanneer het inactief is voor meer dan `{0} uur`!",
"autocloseDisabled":"Autoclose is uitgeschakeld in dit ticket!\nHet wordt niet meer automatisch gesloten!",
"autodeleteEnabled":"Autodelete is ingeschakeld in dit ticket!\nHet wordt verwijderd wanneer het inactief is voor meer dan `{0} dagen`!",
"autodeleteDisabled":"Autodelete is uitgeschakeld in dit ticket!\nHet wordt niet meer automatisch verwijderd!",
"ticketMessageLimit":"Je kan maar {0} ticket(s) op het zelfde moment aanmaken!",
"ticketMessageAutoclose":"Dit ticket wordt automatisch gesloten wanneer het inactief is voor {0} uur!",
"ticketMessageAutodelete":"Dit ticket wordt automatisch verwijderd wanneer het inactief is voor {0} dagen!",
"panelReady":"Je kan het paneel hier onder vinden!\nDit bericht kan nu verwijderd worden!"
},
"modal":{
"closePlaceholder":"Waarom heb je dit ticket gesloten?",
"deletePlaceholder":"Waarom heb je dit ticket verwijderd?",
"reopenPlaceholder":"Waarom heb je dit ticket heropend?",
"claimPlaceholder":"Waarom heb je dit ticket geclaimd?",
"unclaimPlaceholder":"Waarom heb je dit ticket ontclaimd?",
"pinPlaceholder":"Waarom heb je dit ticket gepind?",
"unpinPlaceholder":"Waarom heb je dit ticket losgemaakt?"
},
"logs":{
"createLog":"Een nieuw ticket is aangemaakt door {0}!",
"closeLog":"Dit ticket is gesloten door {0}!",
"closeDm":"Jouw ticket is gesloten in onze server!",
"deleteLog":"Dit ticket is verwijderd door {0}!",
"deleteDm":"Jouw ticket is verwijderd in onze server!",
"reopenLog":"Dit ticket is heropend door {0}!",
"reopenDm":"Jouw ticket is heropend in onze server!",
"claimLog":"Dit ticket is geclaimd door {0}!",
"claimDm":"Jouw ticket is geclaimd in onze server!",
"unclaimLog":"Dit ticket is ontclaimd door {0}!",
"unclaimDm":"Jouw ticket is ontclaimd in onze server!",
"pinLog":"Dit ticket is gepind door {0}!",
"pinDm":"Jouw ticket is gepind in onze server!",
"unpinLog":"Dit ticket is losgemaakt door {0}!",
"unpinDm":"Jouw ticket is losgemaakt in onze server!",
"renameLog":"Dit ticket is hernoemd naar {0} door {1}!",
"renameDm":"Jouw ticket is hernoemd naar {0} in onze server!",
"moveLog":"Dit ticket is verplaatst naar {0} door {1}!",
"moveDm":"Jouw ticket is verplaatst naar {0} in onze server!",
"addLog":"{0} is toegevoegd aan dit ticket door {1}!",
"addDm":"{0} is toegevoegd aan jouw ticket in onze server!",
"removeLog":"{0} is verwijderd van dit ticket door {1}!",
"removeDm":"{0} is verwijderd van jouw ticket in onze server!",
"blacklistAddLog":"{0} is geblacklist door {1}!",
"blacklistRemoveLog":"{0} is verwijderd van de blacklist door {1}!",
"blacklistAddDm":"Je bent geblacklist in onze server!\nVanaf nu kan je geen tickets meer aanmaken!",
"blacklistRemoveDm":"Je bent verwijderd van de blacklist in onze server!\nNormaal zou je nu terug tickets kunnen aanmaken!",
"clearLog":"{0} tickets zijn verwijderd door by {1}!"
}
},
"transcripts":{
"success":{
"visit":"Bekijk Transcript",
"ready":"Transcript Aangemaakt",
"textFileDescription":"Dit is een tekst transcript van een verwijderd ticket!",
"htmlProgress":"Gelieve te wachten terwijl dit html transcript verwerkt wordt...",
"createdChannel":"Een nieuw {0} transcript is aangemaakt in de server!",
"createdCreator":"Een nieuw {0} transcript is aangemaakt voor een van jouw tickets!",
"createdParticipant":"Een nieuw {0} transcript is aangemaakt in een van de tickets waar jij lid van was!",
"createdActiveAdmin":"Een nieuw {0} transcript is aangemaakt in een van de tickets waar jij een actieve admin was!",
"createdEveryAdmin":"Een nieuw {0} transcript is aangemaakt in een van de tickets waar jij admin was!",
"createdOther":"Een nieuw {0} transcript is aangemaakt!"
},
"errors":{
"retry":"Herprobeer",
"continue":"Verwijder Zonder Transcript",
"backup":"Maak Backup Transcript",
"error":"Er is iets misgegaan bij het maken van het transcript.\nWat wil je doen?\n\nDit ticket wordt niet meer verwijderd to je een van de onderstaande knoppen gebruikt."
}
},
"errors":{
"titles":{
"internalError":"Interne Error",
"optionMissing":"Missende Command Optie",
"optionInvalid":"Onjuiste Command Optie",
"unknownCommand":"Onbekende Command",
"noPermissions":"Geen Permissies",
"unknownTicket":"Onbekend Ticket",
"deprecatedTicket":"Verouderd Ticket",
"unknownOption":"Onbekende Optie",
"unknownPanel":"Onbekend Paneel",
"notInGuild":"Niet In Server",
"channelRename":"Kan Kanaal Niet Hernoemen",
"busy":"Ticket Is Bezig"
},
"descriptions":{
"askForInfo":"Contacteer the eigenaar van deze bot voor meer info!",
"askForInfoResolve":"Contacteer de eigenaar van deze bot als het probleem niet opgelost wordt na enkele keren.",
"internalError":"Gefaald om te reageren op deze {0} door een interne error!",
"optionMissing":"Een verplichte parameter mist in deze command!",
"optionInvalid":"Een parameter in deze command is ongeldig!",
"optionInvalidChoose":"Kies tussen",
"unknownCommand":"Probeer het help menu te bekijken voor meer info!",
"noPermissions":"Je bent niet toegestaan om deze {0} te gebruiken!",
"noPermissionsList":"Benodigde Permissies: (één van deze)",
"noPermissionsCooldown":"Je bent niet toegestaan om deze {0} te gebruiken omdat je een cooldown hebt!",
"noPermissionsBlacklist":"Je bent niet toegestaan om deze {0} te gebruiken omdat je geblacklist bent!",
"noPermissionsLimitGlobal":"Je bent niet toegestaan om een ticket aan te maken omdat de server het maximum tickets limiet heeft bereikt!",
"noPermissionsLimitGlobalUser":"Je bent niet toegestaan om een ticket aan te maken omdat je het maximum tickets limiet hebt bereikt!",
"noPermissionsLimitOption":"Je bent niet toegestaan om een ticket aan te maken omdat de server het maximum tickets limiet van deze optie heeft bereikt!",
"noPermissionsLimitOptionUser":"Je bent niet toegestaan om een ticket aan te maken omdat je het maximum tickets limiet van deze optie hebt bereikt!",
"unknownTicket":"Probeer deze command opnieuw in een geldig ticket!",
"deprecatedTicket":"Het huidige kanaal is geen geldig ticket! Het is misschien een ticket van een oudere Open Ticket versie!",
"notInGuild":"Deze {0} werkt niet in DM! Probeer het opnieuw in een server!",
"channelRename":"Door discord ratelimits is het op dit moment onmogelijk voor de bot om het kanaal te hernoemen. Het kanaal zal automatisch hernoemd worden over 10 min als de bot niet herstart wordt.",
"channelRenameSource":"De bron van deze error is: {0}",
"busy":"Kan deze {0} niet gebruiken!\nHet ticket wordt op dit moment verwerkt door de bot.\n\nProbeer het opnieuw binnen een paar seconden!"
},
"optionInvalidReasons":{
"stringRegex":"Waarde is niet gelijk aan het patroon!",
"stringMinLength":"Waarde moet minstens {0} karakters hebben!",
"stringMaxLength":"Waarde moet maximum {0} karakters hebben!",
"numberInvalid":"Ongeldig nummer!",
"numberMin":"Nummer moet minstens {0} zijn!",
"numberMax":"Nummer moet maximum {0} zijn!",
"numberDecimal":"Nummer kan geen kommagetal zijn!",
"numberNegative":"Nummer mag niet negatief zijn!",
"numberPositive":"Nummer mag niet positief zijn!",
"numberZero":"Nummer mag niet nul zijn!",
"channelNotFound":"Kan kanaal niet vinden!",
"userNotFound":"Kan gebruiker niet vinden!",
"roleNotFound":"Kan rol niet vinden!",
"memberNotFound":"Kan gebruiker niet vinden!",
"mentionableNotFound":"Kan gebruiker of rol niet vinden!",
"channelType":"Ongeldig kanaal type!",
"notInGuild":"Voor deze optie moet je in een server zitten!"
},
"permissions":{
"developer":"Je moet de ontwikkelaar van de bot zijn.",
"owner":"Je moet de server eigenaar zijn.",
"admin":"Je moet een server admin zijn.",
"moderator":"Je moet een server moderator zijn.",
"support":"Je moet in het support team zitten.",
"member":"Je moet een member van de server zijn.",
"discord-administrator":"Je hebt de `ADMINISTRATOR` permissie nodig."
},
"actionInvalid":{
"close":"Ticket is al gesloten!",
"reopen":"Ticket is nog niet gesloten!",
"claim":"Ticket is al geclaimd!",
"unclaim":"Ticket nog niet geclaimd!",
"pin":"Ticket is al gepind!",
"unpin":"Ticket nog niet gepind!",
"add":"Deze gebruiker heeft al toegang tot dit ticket!",
"remove":"Deze gebruiker kan niet verwijderd worden van dit ticket!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickets",
"reason":"Reden",
"creator":"Maker",
"remaining":"Resterende Tijd",
"added":"Toegevoegd",
"removed":"Verwijderd",
"filter":"Filter",
"claimedBy":"Geclaimd Door {0}",
"method":"Methode",
"type":"Type",
"blacklisted":"Geblacklist",
"panel":"Paneel",
"command":"Command",
"system":"Systeem",
"true":"Waar",
"false":"Onwaar",
"syntax":"Syntax",
"originalName":"Originele Naam",
"newName":"Nieuwe Naam",
"until":"Tot",
"validOptions":"Geldige Opties",
"validPanels":"Geldige Panelen",
"autoclose":"Autoclose",
"autodelete":"Autodelete",
"startupDate":"Opstart Datum",
"version":"Versie",
"name":"Naam",
"role":"Rol",
"status":"Status",
"claimed":"Geclaimd",
"pinned":"Gepind",
"creationDate":"Aanmaakdatum"
},
"lowercase":{
"text":"tekst",
"html":"html",
"command":"command",
"modal":"form",
"button":"knop",
"dropdown":"dropdown",
"method":"methode"
}
},
"commands":{
"reason":"Specifieer een optionele reden die zichtbaar is in de logs.",
"help":"Verkrijg een lijst met alle beschikbare commands.",
"panel":"Spawn een bericht met een dropdown of knoppen (voor ticket creatie).",
"panelId":"Het id van het paneel dat je wilt spawnen.",
"panelAutoUpdate":"Wil je dat dit paneel automatisch bijwerkt wanneer het aangepast wordt?",
"ticket":"Maak een instant ticket.",
"ticketId":"Het id van het ticket dat je wilt aanmaken.",
"close":"Sluit een ticket, dit schakelt schrijven in het kanaal uit.",
"delete":"Verwijder een ticket, dit maakt een transcript waneer ingeschakeld.",
"deleteNoTranscript":"Verwijder dit ticket zonder een transcript aan te maken.",
"reopen":"Heropen een ticket, dit schakelt schrijven in het kanaal terug aan.",
"claim":"Claim een ticket.",
"claimUser":"Claim dit ticket voor iemand anders.",
"unclaim":"Ontclaim dit ticket.",
"pin":"Pin dit ticket.",
"unpin":"Maak dit ticket los.",
"move":"Verplaats een ticket.",
"moveId":"Het id van de optie waarnaar je wilt verplaatsen.",
"rename":"Hernoem een ticket.",
"renameName":"De nieuwe naam voor dit ticket.",
"add":"Voeg een gebruiker toe aan dit ticket.",
"addUser":"De gebruiker om toe te voegen.",
"remove":"Verwijder een user van dit ticket.",
"removeUser":"De gebruiker om te verwijderen.",
"blacklist":"Beheer de ticket blacklist.",
"blacklistView":"Bekijk de huidige blacklist.",
"blacklistAdd":"Voeg een gebruiker toe aan de blacklist.",
"blacklistRemove":"Verwijder een gebruiker van de blacklist.",
"blacklistGet":"Verkrijg de details van een geblackliste gebruiker.",
"blacklistGetUser":"De gebruiker om details van te verkrijgen.",
"stats":"Bekijk statistieken van de bot, een gebruiker of ticket.",
"statsReset":"Reset alle stats van de bot (en begin terug bij nul).",
"statsGlobal":"Bekijk de globale stats.",
"statsUser":"Bekijk de stats van een gebruiker in de server.",
"statsUserUser":"De gebruiker om te bekijken.",
"statsTicket":"Bekijk de stats van een ticket in de server.",
"statsTicketTicket":"Het ticket om te bekijken.",
"clear":"Verwijder meerdere tickets tegelijkertijd.",
"clearFilter":"De filter om tickets op te ruimen.",
"clearFilters":{
"all":"Allemaal",
"open":"Open (niet gesloten)",
"close":"Gesloten",
"claim":"Geclaimd",
"unclaim":"Ontclaimd (niet geclaimd)",
"pin":"Gepind",
"unpin":"Losgemaakt (niet gepind)",
"autoclose":"Automatisch Gesloten"
},
"autoclose":"Beheer autoclose in een ticket.",
"autocloseDisable":"Schakel autoclose in dit ticket uit.",
"autocloseEnable":"Schakel autoclose in dit ticket in.",
"autocloseEnableTime":"De hoeveelheid uren dat dit ticket inactief moet zijn voor het te sluiten.",
"autodelete":"Beheer autodelete in een ticket.",
"autodeleteDisable":"Schakel autodelete in dit ticket aan.",
"autodeleteEnable":"Schakel autodelete in dit ticket aan.",
"autodeleteEnableTime":"De hoeveelheid dagen dat dit ticket inactief moet zijn voor het te verwijderen."
},
"helpMenu":{
"help":"Krijg een lijst van alle beschikbare commands.",
"ticket":"Maak een instant ticket.",
"close":"Sluit een ticket, dit schakelt schrijven in het kanaal uit.",
"delete":"Verwijder een ticket, dit maakt een transcript wanneer ingeschakeld.",
"reopen":"Heropen een ticket, dit schakeld schrijven in het kanaal terug aan.",
"pin":"Pin een ticket. Dit verplaatst het ticket naar boven & voegt een '📌' emoij toe.",
"unpin":"Maak een ticket los. Het ticket zal blijven staan, maar de '📌' emoij verliezen.",
"move":"Verplaats een ticket. Dit verandert het soort van dit ticket.",
"rename":"Hernoem een ticket. Dit zal de kanaalnaam veranderen.",
"claim":"Claim een ticket. Hiermee kan je laten weten dat je bezig bent met dit ticket.",
"unclaim":"Ontclaim een ticket. Hiermee kan je laten weten dat het ticket terug vrij is.",
"add":"Voeg een user toe aan een ticket.",
"remove":"Verwijder een user van een ticket.",
"panel":"Spawn een bericht met dropdown of knoppen.",
"blacklistView":"Bekijk een lijst van de huidige blacklist.",
"blacklistAdd":"Voeg een user toe aan de blacklist.",
"blacklistRemove":"Verwijder een user van de blacklist.",
"blacklistGet":"Verkrijg de details van een geblacklisted user.",
"statsGlobal":"Bekijk de globale stats.",
"statsTicket":"Bekijk de stats van een ticket in de server.",
"statsUser":"Bekijk de stats van een user in de server.",
"statsReset":"Reset alle stats van de bot (en begin terug vanaf 0).",
"autocloseDisable":"Zet autoclose uit in dit ticket.",
"autocloseEnable":"Zet autoclose in aan dit ticket.",
"autodeleteDisable":"Zet autodelete uit in dit ticket.",
"autodeleteEnable":"Zet autodelete aan in dit ticket."
},
"stats":{
"scopes":{
"global":"Globale Stats",
"system":"Systeem Stats",
"user":"User Stats",
"ticket":"Ticket Stats",
"participants":"Deelnemers"
},
"properties":{
"ticketsCreated":"Tickets Aangemaakt",
"ticketsClosed":"Tickets Gesloten",
"ticketsDeleted":"Tickets Verwijderd",
"ticketsReopened":"Tickets Heropend",
"ticketsAutoclosed":"Tickets Autoclosed",
"ticketsClaimed":"Tickets Geclaimd",
"ticketsPinned":"Tickets Gepind",
"ticketsMoved":"Tickets Verplaatst",
"usersBlacklisted":"Users Geblacklist",
"transcriptsCreated":"Transcripts Aangemaakt"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["DJj123dj"],
"lastedited":"21/08/2024",
"language":"English",
"automated":false
},
"checker":{
"system":{
"typeError":"[ERROR]",
"headerOpenTicket":"OPEN TICKET",
"typeWarning":"[WARNING]",
"typeInfo":"[INFO]",
"headerConfigChecker":"CONFIG CHECKER",
"headerDescription":"check for errors in your config files!",
"footerError":"the bot won't start until all {0}'s are fixed!",
"footerWarning":"it's recommended to fix all {0}'s before starting!",
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
"compactInformation":"use {0} for more information!",
"dataPath":"path",
"dataDocs":"docs",
"dataMessages":"message"
},
"messages":{
"stringTooShort":"This string can't be shorter than {0} characters!",
"stringTooLong":"This string can't be longer than {0} characters!",
"stringLengthInvalid":"This string needs to be {0} characters long!",
"stringStartsWith":"This string needs to start with {0}!",
"stringEndsWith":"This string needs to end with {0}!",
"stringContains":"This string needs to contain {0}!",
"stringChoices":"This string can only be one of the following values: {0}!",
"stringRegex":"This string is invalid!",
"numberTooShort":"This number can't be shorter than {0} characters!",
"numberTooLong":"This number can't be longer than {0} characters!",
"numberLengthInvalid":"This number needs to be {0} characters long!",
"numberTooSmall":"This number needs to be at least {0}!",
"numberTooLarge":"This number needs to be at most {0}!",
"numberNotEqual":"This number needs to be {0}!",
"numberStep":"This number needs to be a multiple of {0}!",
"numberStepOffset":"This number needs to be a multiple of {0} starting with {1}!",
"numberStartsWith":"This number needs to start with {0}!",
"numberEndsWith":"This number needs to end with {0}!",
"numberContains":"This number needs to contain {0}!",
"numberChoices":"This number can only be one of the following values: {0}!",
"numberFloat":"This number can't be a decimal!",
"numberNegative":"This number can't be negative!",
"numberPositive":"This number can't be positive!",
"numberZero":"This number can't be zero!",
"booleanTrue":"This boolean can't be true!",
"booleanFalse":"This boolean can't be false!",
"arrayEmptyDisabled":"This array isn't allowed to be empty!",
"arrayEmptyRequired":"This array is required to be empty!",
"arrayTooShort":"This array needs to have a length of at least {0}!",
"arrayTooLong":"This array needs to have a length of at most {0}!",
"arrayLengthInvalid":"This array needs to have a length of {0}!",
"arrayInvalidTypes":"This array can only contain the following types: {0}!",
"arrayDouble":"This array doesn't allow the same value twice!",
"discordInvalidId":"This is an invalid discord {0} id!",
"discordInvalidIdOptions":"This is an invalid discord {0} id! You can also use one of these: {1}!",
"discordInvalidToken":"This is an invalid discord token (syntactically)!",
"colorInvalid":"This is an invalid hex color!",
"emojiTooShort":"This string needs to have at least {0} emoji's!",
"emojiTooLong":"This string needs to have at most {0} emoji's!",
"emojiCustom":"This emoji can't be a custom discord emoji!",
"emojiInvalid":"This is an invalid emoji!",
"urlInvalid":"This url is invalid!",
"urlInvalidHttp":"This url can only use the https:// protocol!",
"urlInvalidProtocol":"This url can only use the http:// & https:// protocols!",
"urlInvalidHostname":"This url has a disallowed hostname!",
"urlInvalidExtension":"This url has an invalid extension! Choose between: {0}!",
"urlInvalidPath":"This url has an invalid path!",
"idNotUnique":"This id isn't unique, use another id instead!",
"idNonExistent":"The id {0} doesn't exist!",
"invalidType":"This property needs to be the type: {0}!",
"propertyMissing":"The property {0} is missing from this object!",
"propertyOptional":"The property {0} is optional in this object!",
"objectDisabled":"This object is disabled, enable it using {0}!",
"nullInvalid":"This property can't be null!",
"switchInvalidType":"This needs to be one of the following types: {0}!",
"objectSwitchInvalid":"This object needs to be one of the following types: {0}!",
"invalidLanguage":"This is an invalid language!",
"invalidButton":"This button needs to have at least an {0} or {1}!",
"unusedOption":"The option {0} isn't used anywhere!",
"unusedQuestion":"The question {0} isn't used anywhere!",
"dropdownOption":"A panel with dropdown enabled can only contain options of the 'ticket' type!"
}
},
"actions":{
"buttons":{
"create":"Visit Ticket",
"close":"Close Ticket",
"delete":"Delete Ticket",
"reopen":"Reopen Ticket",
"claim":"Claim Ticket",
"unclaim":"Unclaim Ticket",
"pin":"Pin Ticket",
"unpin":"Unpin Ticket",
"clear":"Delete Tickets",
"helpSwitchSlash":"View Slash Commands",
"helpSwitchText":"View Text Commands",
"helpPage":"Page {0}",
"withReason":"With Reason",
"withoutTranscript":"Without Transcript"
},
"titles":{
"created":"Ticket Created",
"close":"Ticket Closed",
"delete":"Ticket Deleted",
"reopen":"Ticket Reopened",
"claim":"Ticket Claimed",
"unclaim":"Ticket Unclaimed",
"pin":"Ticket Pinned",
"unpin":"Ticket Unpinned",
"rename":"Ticket Renamed",
"move":"Ticket Moved",
"add":"Ticket User Added",
"remove":"Ticket User Removed",
"help":"Available Commands",
"statsReset":"Reset Stats",
"blacklistAdd":"User Blacklisted",
"blacklistRemove":"User Released",
"blacklistGet":"Blacklisted User",
"blacklistView":"Current Blacklist",
"blacklistAddDm":"Added To Blacklist",
"blacklistRemoveDm":"Removed From Blacklist",
"clear":"Tickets Cleared",
"roles":"Roles Updated",
"autoclose":"Ticket Autoclosed",
"autocloseEnabled":"Autoclose Enabled",
"autocloseDisabled":"Autoclose Disabled",
"autodelete":"Ticket Autodeleted",
"autodeleteEnabled":"Autodelete Enabled",
"autodeleteDisabled":"Autodelete Disabled"
},
"descriptions":{
"create":"Your ticket has been created. Click the button below to access it!",
"close":"The ticket has been closed successfully!",
"delete":"The ticket has been deleted successfully!",
"reopen":"The ticket has been reopened successfully!",
"claim":"The ticket has been claimed successfully!",
"unclaim":"The ticket has been unclaimed successfully!",
"pin":"The ticket has been pinned successfully!",
"unpin":"The ticket has been unpinned successfully!",
"rename":"The ticket has been renamed to {0} successfully!",
"move":"The ticket has been moved to {0} successfully!",
"add":"{0} has been added to the ticket successfully!",
"remove":"{0} has been removed from the ticket successfully!",
"helpExplanation":"`<name>` => required parameter\n`[name]` => optional parameter",
"statsReset":"The bot stats have been reset successfully!",
"statsError":"Unable to view ticket stats!\n{0} is not a ticket!",
"blacklistAdd":"{0} has been blacklisted successfully!",
"blacklistRemove":"{0} has been released successfully!",
"blacklistGetSuccess":"{0} is currently blacklisted!",
"blacklistGetEmpty":"{0} is currently not blacklisted!",
"blacklistViewEmpty":"No-one has been blacklisted yet!",
"blacklistViewTip":"Use \"/blacklist add\" to blacklist a user!",
"clearVerify":"Are you sure you want to delete multiple tickets?\nThis action can't be undone!",
"clearReady":"{0} tickets have been deleted successfully!",
"rolesEmpty":"No roles have been updated!",
"autocloseLeave":"This ticket has been autoclosed because the creator left the server!",
"autocloseTimeout":"This ticket has been autoclosed because it has been inactive for more than `{0}h`!",
"autodeleteLeave":"This ticket has been autodeleted because the creator left the server!",
"autodeleteTimeout":"This ticket has been autodeleted because it has been inactive for more than `{0} days`!",
"autocloseEnabled":"Autoclose has been enabled in this ticket!\nIt will be closed when it is inactive for more than `{0}h`!",
"autocloseDisabled":"Autoclose has been disabled in this ticket!\nIt won't be closed automatically anymore!",
"autodeleteEnabled":"Autodelete has been enabled in this ticket!\nIt will be deleted when it is inactive for more than `{0} days`!",
"autodeleteDisabled":"Autodelete has been disabled in this ticket!\nIt won't be deleted automatically anymore!",
"ticketMessageLimit":"You can only create {0} ticket(s) at the same time!",
"ticketMessageAutoclose":"This ticket will be autoclosed when inactive for {0}h!",
"ticketMessageAutodelete":"This ticket will be autodeleted when inactive for {0} days!",
"panelReady":"You can find the panel below!\nThis message can now be deleted!"
},
"modal":{
"closePlaceholder":"Why did you close this ticket?",
"deletePlaceholder":"Why did you delete this ticket?",
"reopenPlaceholder":"Why did you reopen this ticket?",
"claimPlaceholder":"Why did you claim this ticket?",
"unclaimPlaceholder":"Why did you unclaim this ticket?",
"pinPlaceholder":"Why did you pin this ticket?",
"unpinPlaceholder":"Why did you unpin this ticket?"
},
"logs":{
"createLog":"A new ticket got created by {0}!",
"closeLog":"This ticket has been closed by {0}!",
"closeDm":"Your ticket has been closed in our server!",
"deleteLog":"This ticket has been deleted by {0}!",
"deleteDm":"Your ticket has been deleted in our server!",
"reopenLog":"This ticket has been reopened by {0}!",
"reopenDm":"Your ticket has been reopened in our server!",
"claimLog":"This ticket has been claimed by {0}!",
"claimDm":"Your ticket has been claimed in our server!",
"unclaimLog":"This ticket has been unclaimed by {0}!",
"unclaimDm":"Your ticket has been unclaimed in our server!",
"pinLog":"This ticket has been pinned by {0}!",
"pinDm":"Your ticket has been pinned in our server!",
"unpinLog":"This ticket has been unpinned by {0}!",
"unpinDm":"Your ticket has been unpinned in our server!",
"renameLog":"This ticket has been renamed to {0} by {1}!",
"renameDm":"Your ticket has been renamed to {0} in our server!",
"moveLog":"This ticket has been moved to {0} by {1}!",
"moveDm":"Your ticket has been moved to {0} in our server!",
"addLog":"{0} has been added to this ticket by {1}!",
"addDm":"{0} has been added to your ticket in our server!",
"removeLog":"{0} has been removed from this ticket by {1}!",
"removeDm":"{0} has been removed from your ticket in our server!",
"blacklistAddLog":"{0} was blacklisted by {1}!",
"blacklistRemoveLog":"{0} was removed from the blacklist by {1}!",
"blacklistAddDm":"You have been blacklisted in our server!\nFrom now on, you are unable to create a ticket!",
"blacklistRemoveDm":"You have been removed from the blacklist in our server!\nNow you can create tickets again!",
"clearLog":"{0} tickets have been deleted by {1}!"
}
},
"transcripts":{
"success":{
"visit":"Visit Transcript",
"ready":"Transcript Created",
"textFileDescription":"This is the text transcript of a deleted ticket!",
"htmlProgress":"Please wait while this html transcript is getting processed...",
"createdChannel":"A new {0} transcript has been created in the server!",
"createdCreator":"A new {0} transcript has been created for one of your tickets!",
"createdParticipant":"A new {0} transcript has been created in one of the tickets you participated in!",
"createdActiveAdmin":"A new {0} transcript has been created in one of the tickets you participated as admin!",
"createdEveryAdmin":"A new {0} transcript has been created in one of the tickets you were admin in!",
"createdOther":"A new {0} transcript has been created!"
},
"errors":{
"retry":"Retry",
"continue":"Delete Without Transcript",
"backup":"Create Backup Transcript",
"error":"Something went wrong while trying to create the transcript.\nWhat would you like to do?\n\nThis ticket won't be deleted until you click one of these buttons."
}
},
"errors":{
"titles":{
"internalError":"Internal Error",
"optionMissing":"Command Option Missing",
"optionInvalid":"Command Option Invalid",
"unknownCommand":"Unknown Command",
"noPermissions":"No Permissions",
"unknownTicket":"Unknown Ticket",
"deprecatedTicket":"Deprecated Ticket",
"unknownOption":"Unknown Option",
"unknownPanel":"Unknown Panel",
"notInGuild":"Not In Server",
"channelRename":"Unable To Rename Channel",
"busy":"Ticket Is Busy"
},
"descriptions":{
"askForInfo":"Contact the owner of this bot for more info!",
"askForInfoResolve":"Contact the bot owner of this bot if this issue doesn't resolve after a few tries.",
"internalError":"Failed to respond to this {0} due to an internal error!",
"optionMissing":"A required parameter is missing in this command!",
"optionInvalid":"A parameter in this command is invalid!",
"optionInvalidChoose":"Choose between",
"unknownCommand":"Try visiting the help menu for more info!",
"noPermissions":"You are not allowed to use this {0}!",
"noPermissionsList":"Required Permissions: (one of them)",
"noPermissionsCooldown":"You are not allowed to use this {0} because you have a cooldown!",
"noPermissionsBlacklist":"You are not allowed to use this {0} because you have been blacklisted!",
"noPermissionsLimitGlobal":"You are not allowed to create a ticket because the server reached the max tickets limit!",
"noPermissionsLimitGlobalUser":"You are not allowed to create a ticket because you reached the max tickets limit!",
"noPermissionsLimitOption":"You are not allowed to create a ticket because the server reached the max tickets limit for this option!",
"noPermissionsLimitOptionUser":"You are not allowed to create a ticket because you reached the max tickets limit for this option!",
"unknownTicket":"Try this command again in a valid ticket!",
"deprecatedTicket":"The current channel is not a valid ticket! It might have been a ticket from an old Open Ticket version!",
"notInGuild":"This {0} doesn't work in DM! Please try it again in a server!",
"channelRename":"Due to discord ratelimits, it's currently impossible for the bot to rename the channel. The channel will automatically be renamed over 10 minutes if the bot isn't rebooted.",
"channelRenameSource":"The source of this error is: {0}",
"busy":"Unable to use this {0}!\nThe ticket is currently being processed by the bot.\n\nPlease try again in a few seconds!"
},
"optionInvalidReasons":{
"stringRegex":"Value doesn't match pattern!",
"stringMinLength":"Value needs to be at least {0} characters!",
"stringMaxLength":"Value needs to be at most {0} characters!",
"numberInvalid":"Invalid number!",
"numberMin":"Number needs to be at least {0}!",
"numberMax":"Number needs to be at most {0}!",
"numberDecimal":"Number is not allowed to be a decimal!",
"numberNegative":"Number is not allowed to be negative!",
"numberPositive":"Number is not allowed to be positive!",
"numberZero":"Number is not allowed to be zero!",
"channelNotFound":"Unable to find channel!",
"userNotFound":"Unable to find user!",
"roleNotFound":"Unable to find role!",
"memberNotFound":"Unable to find user!",
"mentionableNotFound":"Unable to find user or role!",
"channelType":"Invalid channel type!",
"notInGuild":"This option requires you to be in a server!"
},
"permissions":{
"developer":"You need to be the developer of the bot.",
"owner":"You need to be the server owner.",
"admin":"You need to be a server admin.",
"moderator":"You need to be a moderator.",
"support":"You need to be in the support team.",
"member":"You need to be a member.",
"discord-administrator":"You need to have the `ADMINISTRATOR` permission."
},
"actionInvalid":{
"close":"Ticket is already closed!",
"reopen":"Ticket is not closed yet!",
"claim":"Ticket is already claimed!",
"unclaim":"Ticket is not claimed yet!",
"pin":"Ticket is already pinned!",
"unpin":"Ticket is not pinned yet!",
"add":"This user is already able to access the ticket!",
"remove":"Unable to remove this user from the ticket!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickets",
"reason":"Reason",
"creator":"Creator",
"remaining":"Time Remaining",
"added":"Added",
"removed":"Removed",
"filter":"Filter",
"claimedBy":"Claimed By {0}",
"method":"Method",
"type":"Type",
"blacklisted":"Blacklisted",
"panel":"Panel",
"command":"Command",
"system":"System",
"true":"True",
"false":"False",
"syntax":"Syntax",
"originalName":"Original Name",
"newName":"New Name",
"until":"Until",
"validOptions":"Valid Options",
"validPanels":"Valid Panels",
"autoclose":"Autoclose",
"autodelete":"Autodelete",
"startupDate":"Startup Date",
"version":"Version",
"name":"Name",
"role":"Role",
"status":"Status",
"claimed":"Claimed",
"pinned":"Pinned",
"creationDate":"Creation Date"
},
"lowercase":{
"text":"text",
"html":"html",
"command":"command",
"modal":"modal",
"button":"button",
"dropdown":"dropdown",
"method":"method"
}
},
"commands":{
"reason":"Specify an optional reason that will be visible in logs.",
"help":"Get a list of all the available commands.",
"panel":"Spawn a message with a dropdown or buttons (for ticket creation).",
"panelId":"The identifier of the panel that you want to spawn.",
"panelAutoUpdate":"Do you want this panel to automatically update when edited?",
"ticket":"Instantly create a ticket.",
"ticketId":"The identifier of the ticket that you want to create.",
"close":"Close a ticket.",
"delete":"Delete a ticket.",
"deleteNoTranscript":"Delete this ticket without creating a transcript.",
"reopen":"Reopen a ticket.",
"claim":"Claim a ticket.",
"claimUser":"Claim this ticket to someone else instead of yourself.",
"unclaim":"Unclaim a ticket.",
"pin":"Pin a ticket.",
"unpin":"Unpin a ticket.",
"move":"Move a ticket.",
"moveId":"The identifier of the option that you want to move to.",
"rename":"Rename a ticket.",
"renameName":"The new name for this ticket.",
"add":"Add a user to a ticket.",
"addUser":"The user to add.",
"remove":"Remove a user from a ticket.",
"removeUser":"The user to remove.",
"blacklist":"Manage the ticket blacklist.",
"blacklistView":"View a list of the current blacklist.",
"blacklistAdd":"Add a user to the blacklist.",
"blacklistRemove":"Remove a user from the blacklist.",
"blacklistGet":"Get the details from a blacklisted user.",
"blacklistGetUser":"The user to get details from.",
"stats":"View statistics from the bot, a member or a ticket.",
"statsReset":"Reset all the stats of the bot (and start counting from zero).",
"statsGlobal":"View the global stats.",
"statsUser":"View the stats from a user in the server.",
"statsUserUser":"The user to view.",
"statsTicket":"View the stats of a ticket in the server.",
"statsTicketTicket":"The ticket to view.",
"clear":"Delete multiple tickets at the same time.",
"clearFilter":"The filter for clearing tickets.",
"clearFilters":{
"all":"All",
"open":"Open",
"close":"Closed",
"claim":"Claimed",
"unclaim":"Unclaimed",
"pin":"Pinned",
"unpin":"Unpinned",
"autoclose":"Autoclosed"
},
"autoclose":"Manage autoclose in a ticket.",
"autocloseDisable":"Disable autoclose in this ticket.",
"autocloseEnable":"Enable autoclose in this ticket.",
"autocloseEnableTime":"The amount of hours this ticket needs to be inactive to close it.",
"autodelete":"Manage autodelete in a ticket.",
"autodeleteDisable":"Disable autodelete in this ticket.",
"autodeleteEnable":"Enable autodelete in this ticket.",
"autodeleteEnableTime":"The amount of days this ticket needs to be inactive to delete it."
},
"helpMenu":{
"help":"Get a list of all the available commands.",
"ticket":"Instantly create a ticket.",
"close":"Close a ticket, this disables writing in this channel.",
"delete":"Delete a ticket, this creates a transcript when enabled.",
"reopen":"Reopen a ticket, this enables writing in this channel again.",
"pin":"Pin a ticket. This will move the ticket to the top and will add a '📌' emoij to the name.",
"unpin":"Unpin a ticket. The ticket will stay on it's position but will lose the '📌' emoij.",
"move":"Move a ticket. This will change the type of this ticket.",
"rename":"Rename a ticket. This will change the channel name of this ticket.",
"claim":"Claim a ticket. With this, you can let your team know you are handling this ticket.",
"unclaim":"Unclaim a ticket. With this, you can let your team know that this ticket is free again.",
"add":"Add a user to a ticket. This will allow the user to read & write in this ticket.",
"remove":"Remove a user from a ticket. This will remove the ability to read & write for a user in this ticket.",
"panel":"Spawn a message with a dropdown or buttons (for ticket creation).",
"blacklistView":"View a list of the current blacklist.",
"blacklistAdd":"Add a user to the blacklist.",
"blacklistRemove":"Remove a user from the blacklist.",
"blacklistGet":"Get the details from a blacklisted user.",
"statsGlobal":"View the global stats.",
"statsTicket":"View the stats of a ticket in the server.",
"statsUser":"View the stats from a user in the server.",
"statsReset":"Reset all the stats of the bot (and start counting from zero).",
"autocloseDisable":"Disable autoclose in this ticket.",
"autocloseEnable":"Enable autoclose in this ticket.",
"autodeleteDisable":"Disable autodelete in this ticket.",
"autodeleteEnable":"Enable autodelete in this ticket."
},
"stats":{
"scopes":{
"global":"Global Stats",
"system":"System Stats",
"user":"User Stats",
"ticket":"Ticket Stats",
"participants":"Participants"
},
"properties":{
"ticketsCreated":"Tickets Created",
"ticketsClosed":"Tickets Closed",
"ticketsDeleted":"Tickets Deleted",
"ticketsReopened":"Tickets Reopened",
"ticketsAutoclosed":"Tickets Autoclosed",
"ticketsClaimed":"Tickets Claimed",
"ticketsPinned":"Tickets Pinned",
"ticketsMoved":"Tickets Moved",
"usersBlacklisted":"Users Blacklisted",
"transcriptsCreated":"Transcripts Created"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["iamnotmega","ChatGPT"],
"lastedited":"21/10/2024",
"language":"Estonian",
"automated":true
},
"checker":{
"system":{
"typeError":"[VIGA]",
"headerOpenTicket":"AVATUD PILET",
"typeWarning":"[HOIATUS]",
"typeInfo":"[INFO]",
"headerConfigChecker":"KONFIGURATSIOONI KONTROLLIJA",
"headerDescription":"kontrollige konfiguratsioonifailides vigu!",
"footerError":"robot ei käivitu enne, kui kõik {0} on parandatud!",
"footerWarning":"enne alustamist on soovitatav kõik {0} parandada!",
"footerSupport":"TUGI: {0} – DOKUMENTATSIOON: {1}",
"compactInformation":"lisateabe saamiseks kasutage {0}!",
"dataPath":"tee",
"dataDocs":"dokumentatsioon",
"dataMessages":"message"
},
"messages":{
"stringTooShort":"See string ei tohi olla lühem kui {0} tähemärki!",
"stringTooLong":"See string ei tohi olla pikem kui {0} tähemärki!",
"stringLengthInvalid":"See string peab olema {0} tähemärki pikk!",
"stringStartsWith":"See string peab algama tähega {0}!",
"stringEndsWith":"See string peab lõppema tähega {0}!",
"stringContains":"See string peab sisaldama {0}!",
"stringChoices":"See string võib olla ainult üks järgmistest väärtustest: {0}!",
"stringRegex":"See string on kehtetu!",
"numberTooShort":"See number ei tohi olla lühem kui {0} tähemärki!",
"numberTooLong":"See number ei tohi olla pikem kui {0} tähemärki!",
"numberLengthInvalid":"See number peab olema {0} tähemärki pikk!",
"numberTooSmall":"See number peab olema vähemalt {0}!",
"numberTooLarge":"See arv peab olema kuni {0}!",
"numberNotEqual":"See number peab olema {0}!",
"numberStep":"See arv peab olema arvu {0} kordne!",
"numberStepOffset":"See arv peab olema arvu {0} kordne, mis algab numbriga {1}!",
"numberStartsWith":"See number peab algama tähega {0}!",
"numberEndsWith":"See number peab lõppema numbriga {0}!",
"numberContains":"See number peab sisaldama {0}!",
"numberChoices":"See arv võib olla ainult üks järgmistest väärtustest: {0}!",
"numberFloat":"See arv ei tohi olla kümnendkoht!",
"numberNegative":"See arv ei saa olla negatiivne!",
"numberPositive":"See arv ei saa olla positiivne!",
"numberZero":"See arv ei saa olla null!",
"booleanTrue":"See tõeväärtus ei saa olla tõsi!",
"booleanFalse":"See tõeväärtus ei saa olla vale!",
"arrayEmptyDisabled":"See massiiv ei tohi olla tühi!",
"arrayEmptyRequired":"See massiiv peab olema tühi!",
"arrayTooShort":"Selle massiivi pikkus peab olema vähemalt {0}!",
"arrayTooLong":"Selle massiivi pikkus peab olema maksimaalselt {0}!",
"arrayLengthInvalid":"Selle massiivi pikkus peab olema {0}!",
"arrayInvalidTypes":"See massiiv võib sisaldada ainult järgmisi tüüpe: {0}!",
"arrayDouble":"See massiiv ei luba sama väärtust kaks korda kasutada!",
"discordInvalidId":"See on kehtetu Discordi {0} ID!",
"discordInvalidIdOptions":"See on kehtetu Discordi {0} ID! Võite kasutada ka ühte järgmistest: {1}!",
"discordInvalidToken":"See on kehtetu Discordi tooken (süntaktiliselt)!",
"colorInvalid":"See on sobimatu kuusnurkne värv!",
"emojiTooShort":"Sellel stringil peab olema vähemalt {0} emotikonit!",
"emojiTooLong":"Selles stringis peab olema kuni {0} emotikonit!",
"emojiCustom":"See emotikon ei saa olla kohandatud emotikon!",
"emojiInvalid":"See on sobimatu emotikon!",
"urlInvalid":"See URL on kehtetu!",
"urlInvalidHttp":"See URL saab kasutada ainult https:// protokolli!",
"urlInvalidProtocol":"See URL saab kasutada ainult http:// ja https:// protokolle!",
"urlInvalidHostname":"Sellel URL-il on keelatud hostinimi!",
"urlInvalidExtension":"Sellel URL-il on sobimatu laiend! Valige järgmiste hulgast: {0}!",
"urlInvalidPath":"Sellel URL-il on vale tee!",
"idNotUnique":"See ID ei ole kordumatu, kasutage selle asemel teist ID-d!",
"idNonExistent":"ID-d {0} pole olemas!",
"invalidType":"Selle atribuudi tüüp peab olema: {0}!",
"propertyMissing":"Sellel objektil puudub atribuut {0}!",
"propertyOptional":"Atribuut {0} on selles objektis valikuline!",
"objectDisabled":"See objekt on keelatud, lubage see, kasutades {0}!",
"nullInvalid":"See vara ei saa olla tühi!",
"switchInvalidType":"See peab olema üks järgmistest tüüpidest: {0}!",
"objectSwitchInvalid":"See objekt peab olema ühte järgmistest tüüpidest: {0}!",
"invalidLanguage":"See on sobimatu keel!",
"invalidButton":"Sellel nupul peab olema vähemalt {0} või {1}!",
"unusedOption":"Valik {0} ei ole kusagil kasutusel!",
"unusedQuestion":"Küsimust {0} ei kasutata kuskil!",
"dropdownOption":"Lubatud rippmenüüga paneel võib sisaldada ainult \"pileti\" tüüpi valikuid!"
}
},
"actions":{
"buttons":{
"create":"Külastage Piletit",
"close":"Sulge pilet",
"delete":"Kustuta pilet",
"reopen":"Ava pilet uuesti",
"claim":"Nõudke pilet",
"unclaim":"Tühista pilet",
"pin":"Kinnita pilet",
"unpin":"Vabastage pilet",
"clear":"Kustuta piletid",
"helpSwitchSlash":"Vaadake kaldkriipsu käske",
"helpSwitchText":"Vaadake tekstikäske",
"helpPage":"Leht {0}",
"withReason":"Põhjusega",
"withoutTranscript":"Ilma ärakirjata"
},
"titles":{
"created":"Pilet loodud",
"close":"Pilet suletud",
"delete":"Pilet kustutatud",
"reopen":"Pilet taasavatud",
"claim":"Pilet nõutud",
"unclaim":"Pilet tühistatud",
"pin":"Pilet kinnitatud",
"unpin":"Pilet vabastatud",
"rename":"Pilet nimetati ümber",
"move":"Pilet teisaldatud",
"add":"Pileti kasutaja lisatud",
"remove":"Pileti kasutaja eemaldatud",
"help":"Saadaolevad käsud",
"statsReset":"Lähtestage statistika",
"blacklistAdd":"Kasutaja on mustas nimekirjas",
"blacklistRemove":"Kasutaja vabastatud",
"blacklistGet":"Musta nimekirja kantud kasutaja",
"blacklistView":"Praegune must nimekiri",
"blacklistAddDm":"Lisatud musta nimekirja",
"blacklistRemoveDm":"Eemaldatud mustast nimekirjast",
"clear":"Piletid kustutatud",
"roles":"Rollid uuendatud",
"autoclose":"Pilet automaatselt suletud",
"autocloseEnabled":"Automaatne sulgemine lubatud",
"autocloseDisabled":"Automaatne sulgemine keelatud",
"autodelete":"Pilet on automaatselt kustutatud",
"autodeleteEnabled":"Automaatne kustutamine lubatud",
"autodeleteDisabled":"Automaatne kustutamine keelatud"
},
"descriptions":{
"create":"Teie pilet on loodud. Sellele juurdepääsuks klõpsake alloleval nupul!",
"close":"Pilet on edukalt suletud!",
"delete":"Pilet on edukalt kustutatud!",
"reopen":"Pilet on edukalt taasavatud!",
"claim":"Pilet on edukalt vastu võetud!",
"unclaim":"Pilet on edukalt tühistatud!",
"pin":"Pilet on edukalt kinnitatud!",
"unpin":"Pilet on edukalt vabastatud!",
"rename":"Pilet on edukalt ümber nimetatud nimeks {0}!",
"move":"Pilet teisaldati asukohta {0} edukalt!",
"add":"{0} lisati piletile edukalt!",
"remove":"{0} eemaldati piletist edukalt!",
"helpExplanation":"`<nimi>` => nõutav parameeter\n`[nimi]` => valikuline parameeter",
"statsReset":"Boti statistika on edukalt lähtestatud!",
"statsError":"Piletistatistikat ei saa vaadata!\n{0} ei ole pilet!",
"blacklistAdd":"{0} on edukalt musta nimekirja kantud!",
"blacklistRemove":"{0} vabastati edukalt!",
"blacklistGetSuccess":"{0} on praegu mustas nimekirjas!",
"blacklistGetEmpty":"{0} ei ole praegu mustas nimekirjas!",
"blacklistViewEmpty":"Keegi pole veel musta nimekirja kantud!",
"blacklistViewTip":"Kasutage \"/blacklist add\" kasutaja musta nimekirja lisamiseks!",
"clearVerify":"Kas soovite kindlasti mitu piletit kustutada?\nSeda toimingut ei saa tagasi võtta!",
"clearReady":"{0} piletit on edukalt kustutatud!",
"rolesEmpty":"Ühtegi rolli pole värskendatud!",
"autocloseLeave":"See pilet on automaatselt suletud, kuna looja lahkus serverist!",
"autocloseTimeout":"See pilet on automaatselt suletud, kuna see on olnud passiivne rohkem kui `{0}h`!",
"autodeleteLeave":"See pilet on automaatselt kustutatud, kuna looja lahkus serverist!",
"autodeleteTimeout":"See pilet on automaatselt kustutatud, kuna see on olnud passiivne rohkem kui `{0} päeva`!",
"autocloseEnabled":"Sellel piletil on automaatne sulgemine lubatud!\nSee suletakse, kui see on passiivne rohkem kui `{0}h`!",
"autocloseDisabled":"Automaatne sulgemine on sellel piletil keelatud!\nSeda ei suleta enam automaatselt!",
"autodeleteEnabled":"Sellel piletil on automaatne kustutamine lubatud!\nSee kustutatakse, kui see on passiivne rohkem kui `{0} päeva`!",
"autodeleteDisabled":"Automaatne kustutamine on sellel piletil keelatud!\nSeda ei kustutata enam automaatselt!",
"ticketMessageLimit":"Saate korraga luua ainult {0} piletit!",
"ticketMessageAutoclose":"See pilet suletakse automaatselt, kui see on {0} tundi passiivne!",
"ticketMessageAutodelete":"See pilet kustutatakse automaatselt, kui see on {0} päeva passiivne!",
"panelReady":"Paneeli leiate altpoolt!\nSelle sõnumi saab nüüd kustutada!"
},
"modal":{
"closePlaceholder":"Miks sa selle pileti kinni panid?",
"deletePlaceholder":"Miks sa selle pileti kustutasid?",
"reopenPlaceholder":"Miks te selle pileti uuesti avasite?",
"claimPlaceholder":"Miks sa selle pileti välja nõudsid?",
"unclaimPlaceholder":"Miks te selle pileti tühistasite?",
"pinPlaceholder":"Miks sa selle pileti kinni panid?",
"unpinPlaceholder":"Miks sa selle pileti lahti kinnitasid?"
},
"logs":{
"createLog":"{0} lõi uue pileti!",
"closeLog":"Selle pileti sulges {0}!",
"closeDm":"Teie pilet on meie serveris suletud!",
"deleteLog":"{0} on selle pileti kustutanud!",
"deleteDm":"Teie pilet on meie serverist kustutatud!",
"reopenLog":"{0} on selle pileti uuesti avanud!",
"reopenDm":"Teie pilet on meie serveris uuesti avatud!",
"claimLog":"Selle pileti on nõudnud {0}!",
"claimDm":"Teie pilet on meie serveris välja nõutud!",
"unclaimLog":"{0} on selle pileti tagasi võtnud!",
"unclaimDm":"Teie pilet on meie serveris välja võtmata!",
"pinLog":"Selle pileti on kinnitanud {0}!",
"pinDm":"Teie pilet on kinnitatud meie serverisse!",
"unpinLog":"{0} on selle pileti vabastanud!",
"unpinDm":"Teie pilet on meie serveris vabastatud!",
"renameLog":"{1} on selle pileti ümber nimetanud piletiks {0}!",
"renameDm":"Teie pilet on meie serveris ümber nimetatud {0}-ks!",
"moveLog":"{1} on selle pileti teisaldanud asukohta {0}!",
"moveDm":"Teie pilet on teisaldatud meie serverisse {0}!",
"addLog":"{1} on sellele piletile lisanud {0}!",
"addDm":"{0} lisati teie piletile meie serveris!",
"removeLog":"Kasutaja {1} eemaldas sellelt piletilt {0}!",
"removeDm":"{0} on teie piletist meie serveris eemaldatud!",
"blacklistAddLog":"{1} lisas kasutaja {0} musta nimekirja!",
"blacklistRemoveLog":"Kasutaja {1} eemaldas kasutaja {0} mustast nimekirjast!",
"blacklistAddDm":"Olete meie serveris mustas nimekirjas!\nNüüdsest ei saa te piletit luua!",
"blacklistRemoveDm":"Teid on meie serveri mustast nimekirjast eemaldatud!\nNüüd saate uuesti pileteid luua!",
"clearLog":"{1} on kustutanud {0} piletit!"
}
},
"transcripts":{
"success":{
"visit":"Külastage Transkriptsiooni",
"ready":"Transkriptsioon loodud",
"textFileDescription":"See on kustutatud pileti teksti ärakiri!",
"htmlProgress":"Palun oodake, kuni seda html-i ärakirja töödeldakse...",
"createdChannel":"Serveris on loodud uus {0} ärakiri!",
"createdCreator":"Ühe teie pileti jaoks on loodud uus {0} ärakiri!",
"createdParticipant":"Ühes teie osalenud piletis on loodud uus {0} ärakiri!",
"createdActiveAdmin":"Ühes piletis, milles osalesite administraatorina, on loodud uus {0} ärakiri!",
"createdEveryAdmin":"Ühes piletis, mille administraator olite, on loodud uus {0} ärakiri!",
"createdOther":"Uus {0} ärakiri on loodud!"
},
"errors":{
"retry":"Proovi uuesti",
"continue":"Kustuta ilma ärakirjata",
"backup":"Loo varukoopia ärakirjast",
"error":"Midagi läks ärakirja loomisel valesti.\nMida sa teha tahaksid?\n\nSeda piletit ei kustutata enne, kui klõpsate ühel neist nuppudest."
}
},
"errors":{
"titles":{
"internalError":"Sisemine viga",
"optionMissing":"Käsuvalik puudub",
"optionInvalid":"Käsuvalik on kehtetu",
"unknownCommand":"Tundmatu käsk",
"noPermissions":"Lubasid pole",
"unknownTicket":"Tundmatu pilet",
"deprecatedTicket":"Aegunud pilet",
"unknownOption":"Tundmatu valik",
"unknownPanel":"Tundmatu paneel",
"notInGuild":"Pole serveris",
"channelRename":"Kanalit ei saa ümber nimetada",
"busy":"Pilet on kinni"
},
"descriptions":{
"askForInfo":"Lisateabe saamiseks võtke ühendust selle roboti omanikuga!",
"askForInfoResolve":"Kui probleem mõne katsega ei lahene, võtke ühendust selle roboti omanikuga.",
"internalError":"Sellele {0}-le vastamine ebaõnnestus sisemise vea tõttu!",
"optionMissing":"Selles käsus puudub nõutav parameeter!",
"optionInvalid":"Selle käsu parameeter on kehtetu!",
"optionInvalidChoose":"Valige vahel",
"unknownCommand":"Lisateabe saamiseks külastage abimenüüd!",
"noPermissions":"Teil ei ole lubatud seda {0} kasutada!",
"noPermissionsList":"Nõutavad load: (üks neist)",
"noPermissionsCooldown":"Teil ei ole lubatud seda {0} kasutada, kuna teil on jahtumine!",
"noPermissionsBlacklist":"Teil ei ole lubatud seda {0} kasutada, kuna olete lisatud musta nimekirja!",
"noPermissionsLimitGlobal":"Teil ei ole lubatud piletit luua, kuna server saavutas maksimaalse piletite limiidi!",
"noPermissionsLimitGlobalUser":"Teil ei ole lubatud piletit luua, kuna olete täis piletite maksimumlimiiti!",
"noPermissionsLimitOption":"Teil ei ole lubatud piletit luua, kuna server saavutas selle valiku maksimaalse piletite limiidi!",
"noPermissionsLimitOptionUser":"Teil ei ole lubatud piletit luua, kuna olete saavutanud selle valiku maksimaalse piletite limiidi!",
"unknownTicket":"Proovige seda käsku kehtiva piletiga uuesti!",
"deprecatedTicket":"Praegune kanal ei ole kehtiv pilet! See võis olla pilet vanast Open Ticketi versioonist!",
"notInGuild":"See {0} ei tööta DM-is! Palun proovi uuesti serveris!",
"channelRename":"Ebakõlaliste kiiruspiirangute tõttu on robotil praegu võimatu kanalit ümber nimetada. Kui robotit ei taaskäivitata, nimetatakse kanal 10 minuti jooksul automaatselt ümber.",
"channelRenameSource":"Selle vea allikas on: {0}",
"busy":"Seda {0} ei saa kasutada!\nPiletit töötleb praegu bot.\n\nPalun proovige mõne sekundi pärast uuesti!"
},
"optionInvalidReasons":{
"stringRegex":"Väärtus ei vasta mustrile!",
"stringMinLength":"Väärtus peab olema vähemalt {0} tähemärki!",
"stringMaxLength":"Väärtus võib olla kuni {0} tähemärki!",
"numberInvalid":"Vale number!",
"numberMin":"Number peab olema vähemalt {0}!",
"numberMax":"Arv võib olla kuni {0}!",
"numberDecimal":"Arv ei tohi olla kümnendkoht!",
"numberNegative":"Arv ei tohi olla negatiivne!",
"numberPositive":"Arv ei tohi olla positiivne!",
"numberZero":"Arv ei tohi olla null!",
"channelNotFound":"Kanalit ei leitud!",
"userNotFound":"Kasutajat ei leitud!",
"roleNotFound":"Rolli ei leitud!",
"memberNotFound":"Kasutajat ei leitud!",
"mentionableNotFound":"Kasutajat või rolli ei leitud!",
"channelType":"Sobimatu kanali tüüp!",
"notInGuild":"See valik nõuab serveris viibimist!"
},
"permissions":{
"developer":"Peate olema roboti arendaja.",
"owner":"Peate olema serveri omanik.",
"admin":"Peate olema serveri administraator.",
"moderator":"Peate olema moderaator.",
"support":"Peate olema tugimeeskonnas.",
"member":"You need to be a member.",
"discord-administrator":"Teil peab olema ADMINISTRATORI luba."
},
"actionInvalid":{
"close":"Pilet on juba suletud!",
"reopen":"Pilet pole veel suletud!",
"claim":"Pilet on juba ostetud!",
"unclaim":"Piletit pole veel ostetud!",
"pin":"Pilet on juba kinni pandud!",
"unpin":"Pilet pole veel kinnitatud!",
"add":"Sellel kasutajal on juba juurdepääs piletile!",
"remove":"Seda kasutajat ei saa piletist eemaldada!"
}
},
"params":{
"uppercase":{
"ticket":"Pilet",
"tickets":"Piletid",
"reason":"Põhjus",
"creator":"Looja",
"remaining":"Järelejäänud aeg",
"added":"Lisatud",
"removed":"Eemaldatud",
"filter":"Filter",
"claimedBy":"Nõude esitas {0}",
"method":"Meetod",
"type":"Tüüp",
"blacklisted":"Mustas nimekirjas",
"panel":"Paneel",
"command":"Käsk",
"system":"Süsteem",
"true":"Tõsi",
"false":"Vale",
"syntax":"Süntaks",
"originalName":"Algne nimi",
"newName":"Uus nimi",
"until":"Kuni",
"validOptions":"Kehtivad valikud",
"validPanels":"Kehtivad paneelid",
"autoclose":"Automaatne sulgemine",
"autodelete":"Automaatne kustutamine",
"startupDate":"Käivitamise kuupäev",
"version":"Versioon",
"name":"Nimi",
"role":"Roll",
"status":"Olek",
"claimed":"Nõutud",
"pinned":"Kinnitatud",
"creationDate":"Loomise kuupäev"
},
"lowercase":{
"text":"tekst",
"html":"html",
"command":"käsk",
"modal":"modaalne",
"button":"nuppu",
"dropdown":"rippmenüüst",
"method":"meetod"
}
},
"commands":{
"reason":"Määrake valikuline põhjus, mis on logides nähtav.",
"help":"Hankige kõigi saadaolevate käskude loend.",
"panel":"Looge sõnum rippmenüü või nuppudega (pileti loomiseks).",
"panelId":"Selle paneeli identifikaator, mille soovite luua.",
"panelAutoUpdate":"Kas soovite seda paneeli redigeerimisel automaatselt värskendada?",
"ticket":"Looge pilet koheselt.",
"ticketId":"Pileti identifikaator, mille soovite luua.",
"close":"Sulgege pilet.",
"delete":"Kustuta pilet.",
"deleteNoTranscript":"Kustutage see pilet ilma ärakirja loomata.",
"reopen":"Avage pilet uuesti.",
"claim":"Nõudke pilet.",
"claimUser":"Hankige see pilet enda asemel kellelegi teisele.",
"unclaim":"Tühista pilet.",
"pin":"Kinnitage pilet.",
"unpin":"Vabastage pilet.",
"move":"Liigutage pilet.",
"moveId":"Selle valiku identifikaator, millele soovite liikuda.",
"rename":"Nimetage pilet ümber.",
"renameName":"Selle pileti uus nimi.",
"add":"Lisage piletile kasutaja.",
"addUser":"Lisatav kasutaja.",
"remove":"Kasutaja eemaldamine piletist.",
"removeUser":"Eemaldatav kasutaja.",
"blacklist":"Hallake piletite musta nimekirja.",
"blacklistView":"Vaadake praeguse musta nimekirja loendit.",
"blacklistAdd":"Lisage kasutaja musta nimekirja.",
"blacklistRemove":"Eemaldage kasutaja mustast nimekirjast.",
"blacklistGet":"Hankige üksikasjad musta nimekirja kantud kasutajalt.",
"blacklistGetUser":"Kasutaja, kellelt üksikasju saada.",
"stats":"Vaadake boti, liikme või pileti statistikat.",
"statsReset":"Lähtestage kogu roboti statistika (ja alustage loendamist nullist).",
"statsGlobal":"Vaadake globaalset statistikat.",
"statsUser":"Vaadake serveris oleva kasutaja statistikat.",
"statsUserUser":"Kasutaja vaatamiseks.",
"statsTicket":"Vaadake serveris pileti statistikat.",
"statsTicketTicket":"Pilet vaatamiseks.",
"clear":"Kustutage mitu piletit korraga.",
"clearFilter":"Piletite puhastamise filter.",
"clearFilters":{
"all":"Kõik",
"open":"Avatud",
"close":"Suletud",
"claim":"Nõutud",
"unclaim":"Nõudmata",
"pin":"Kinnitatud",
"unpin":"Vabastatud",
"autoclose":"Automaatselt suletud"
},
"autoclose":"Hallake piletis automaatset sulgemist.",
"autocloseDisable":"Keela sellel piletil automaatne sulgemine.",
"autocloseEnable":"Luba sellel piletil automaatne sulgemine.",
"autocloseEnableTime":"Selle pileti sulgemiseks peab olema passiivne tundide arv.",
"autodelete":"Automaatse kustutamise haldamine piletis.",
"autodeleteDisable":"Keela sellel piletil automaatne kustutamine.",
"autodeleteEnable":"Luba sellel piletil automaatne kustutamine.",
"autodeleteEnableTime":"Päevade arv, mille jooksul see pilet peab olema selle kustutamiseks passiivne."
},
"helpMenu":{
"help":"Hankige kõigi saadaolevate käskude loend.",
"ticket":"Looge pilet koheselt.",
"close":"Sulgege pilet, see keelab sellele kanalile kirjutamise.",
"delete":"Kustutage pilet, kui see on lubatud, loob see ärakirja.",
"reopen":"Avage pilet uuesti, see võimaldab sellele kanalile uuesti kirjutada.",
"pin":"Kinnitage pilet. See liigutab pileti ülaossa ja lisab nimele emoij '📌'",
"unpin":"\nVabastage pilet. Pilet jääb oma positsioonile, kuid kaotab emoij '📌'",
"move":"Liigutage pilet. See muudab selle pileti tüüpi.",
"rename":"Nimetage pilet ümber. See muudab selle pileti kanali nime.",
"claim":"Nõudke pilet. Sellega saate oma meeskonnale teada anda, et tegelete selle piletiga.",
"unclaim":"Tühista pilet. Sellega saate oma meeskonnale teada anda, et see pilet on taas tasuta.",
"add":"Lisage piletile kasutaja. See võimaldab kasutajal sellel piletil lugeda ja kirjutada.",
"remove":"Kasutaja eemaldamine piletist. See eemaldab selle pileti kasutajalt lugemis- ja kirjutamisvõimaluse.",
"panel":"Looge sõnum rippmenüü või nuppudega (pileti loomiseks).",
"blacklistView":"Vaadake praeguse musta nimekirja loendit.",
"blacklistAdd":"Lisage kasutaja musta nimekirja.",
"blacklistRemove":"Eemaldage kasutaja mustast nimekirjast.",
"blacklistGet":"Hankige üksikasjad musta nimekirja kantud kasutajalt.",
"statsGlobal":"Vaadake globaalset statistikat.",
"statsTicket":"Vaadake serveris pileti statistikat.",
"statsUser":"Vaadake serveris oleva kasutaja statistikat.",
"statsReset":"Lähtestage kogu roboti statistika (ja alustage loendamist nullist).",
"autocloseDisable":"Keela sellel piletil automaatne sulgemine.",
"autocloseEnable":"Luba sellel piletil automaatne sulgemine.",
"autodeleteDisable":"Keela sellel piletil automaatne kustutamine.",
"autodeleteEnable":"Luba sellel piletil automaatne kustutamine."
},
"stats":{
"scopes":{
"global":"Globaalne statistika",
"system":"Süsteemi statistika",
"user":"Kasutaja statistika",
"ticket":"Piletistatistika",
"participants":"Osalejad"
},
"properties":{
"ticketsCreated":"Pileteid loodud",
"ticketsClosed":"Pileteid suletud",
"ticketsDeleted":"Pileteid kustutatud",
"ticketsReopened":"Pileteid taasavatud",
"ticketsAutoclosed":"Pileteid suletud",
"ticketsClaimed":"Pileteid välja nõutud",
"ticketsPinned":"Pileteid kinnitatud",
"ticketsMoved":"Pileteid teisaldatud",
"usersBlacklisted":"Kasutajaid mustas nimekirjas",
"transcriptsCreated":"Loodud ärakirjad"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["iamnotmega","ChatGPT"],
"lastedited":"21/10/2024",
"language":"Finnish",
"automated":true
},
"checker":{
"system":{
"typeError":"[VIRHE]",
"headerOpenTicket":"AVAA LIPPU",
"typeWarning":"[VAROITUS]",
"typeInfo":"[TIEDOT]",
"headerConfigChecker":"ASETUKSEN TARKISTAJA",
"headerDescription":"tarkista asetustiedostoissasi virheitä!",
"footerError":"botti ei käynnisty ennen kuin kaikki {0} on korjattu!",
"footerWarning":"on suositeltavaa korjata kaikki {0} ennen aloittamista!",
"footerSupport":"TUKI: {0} - DOCS: {1}",
"compactInformation":"käytä {0} saadaksesi lisätietoja!",
"dataPath":"polku",
"dataDocs":"asiakirjoja",
"dataMessages":"viesti"
},
"messages":{
"stringTooShort":"Tämä merkkijono ei voi olla lyhyempi kuin {0} merkkiä!",
"stringTooLong":"Tämä merkkijono ei voi olla pidempi kuin {0} merkkiä!",
"stringLengthInvalid":"Tämän merkkijonon on oltava {0} merkkiä pitkä!",
"stringStartsWith":"Tämän merkkijonon on alettava kirjaimella {0}!",
"stringEndsWith":"Tämän merkkijonon tulee päättyä {0}!",
"stringContains":"Tämän merkkijonon täytyy sisältää {0}!",
"stringChoices":"Tämä merkkijono voi olla vain yksi seuraavista arvoista: {0}!",
"stringRegex":"Tämä merkkijono on virheellinen!",
"numberTooShort":"Tämä numero ei voi olla lyhyempi kuin {0} merkkiä!",
"numberTooLong":"Tämä numero ei voi olla pidempi kuin {0} merkkiä!",
"numberLengthInvalid":"Tämän numeron on oltava {0} merkkiä pitkä!",
"numberTooSmall":"Tämän numeron on oltava vähintään {0}!",
"numberTooLarge":"Tämän numeron on oltava enintään {0}!",
"numberNotEqual":"Tämän numeron on oltava {0}!",
"numberStep":"Tämän luvun on oltava luvun {0} kerrannainen!",
"numberStepOffset":"Tämän luvun on oltava luvun {0} jaollinen, joka alkaa numerolla {1}!",
"numberStartsWith":"Tämän numeron täytyy alkaa numerolla {0}!",
"numberEndsWith":"Tämän numeron lopussa on oltava {0}!",
"numberContains":"Tämän numeron on sisällettävä {0}!",
"numberChoices":"Tämä numero voi olla vain yksi seuraavista arvoista: {0}!",
"numberFloat":"Tämä luku ei voi olla desimaali!",
"numberNegative":"Tämä luku ei voi olla negatiivinen!",
"numberPositive":"Tämä luku ei voi olla positiivinen!",
"numberZero":"Tämä luku ei voi olla nolla!",
"booleanTrue":"Tämä boolean ei voi olla totta!",
"booleanFalse":"Tämä boolean ei voi olla väärä!",
"arrayEmptyDisabled":"Tämä taulukko ei saa olla tyhjä!",
"arrayEmptyRequired":"Tämän taulukon on oltava tyhjä!",
"arrayTooShort":"Tämän taulukon pituuden on oltava vähintään {0}!",
"arrayTooLong":"Tämän taulukon pituus saa olla enintään {0}!",
"arrayLengthInvalid":"Tämän taulukon pituuden on oltava {0}!",
"arrayInvalidTypes":"Tämä matriisi voi sisältää vain seuraavat tyypit: {0}!",
"arrayDouble":"Tämä matriisi ei salli samaa arvoa kahdesti!",
"discordInvalidId":"Tämä on virheellinen discord {0} -tunnus!",
"discordInvalidIdOptions":"Tämä on virheellinen discord {0} -tunnus! Voit myös käyttää jotakin seuraavista: {1}!",
"discordInvalidToken":"Tämä on virheellinen discord tunnus (syntaktisesti)!",
"colorInvalid":"Tämä on virheellinen kuusioväri!",
"emojiTooShort":"Tässä merkkijonossa on oltava vähintään {0} emojia!",
"emojiTooLong":"Tässä merkkijonossa saa olla enintään {0} emojia!",
"emojiCustom":"Tämä emoji ei voi olla mukautettu emoji!",
"emojiInvalid":"Tämä on virheellinen emoji!",
"urlInvalid":"Tämä URL-osoite on virheellinen!",
"urlInvalidHttp":"Tämä URL-osoite voi käyttää vain https://-protokollaa!",
"urlInvalidProtocol":"Tämä URL-osoite voi käyttää vain http://- ja https://-protokollia!",
"urlInvalidHostname":"Tällä URL-osoitteella on kielletty isäntänimi!",
"urlInvalidExtension":"Tässä URL-osoitteessa on virheellinen laajennus! Valitse seuraavista: {0}!",
"urlInvalidPath":"Tällä URL-osoitteella on virheellinen polku!",
"idNotUnique":"Tämä tunnus ei ole ainutlaatuinen, käytä sen sijaan toista tunnusta!",
"idNonExistent":"Tunnusta {0} ei ole olemassa!",
"invalidType":"Tämän ominaisuuden on oltava tyyppiä: {0}!",
"propertyMissing":"Ominaisuus {0} puuttuu tästä objektista!",
"propertyOptional":"Ominaisuus {0} on valinnainen tässä objektissa!",
"objectDisabled":"Tämä objekti on poistettu käytöstä, ota se käyttöön käyttämällä {0}!",
"nullInvalid":"Tämä omaisuus ei voi olla tyhjä!",
"switchInvalidType":"Tämän on oltava jokin seuraavista: {0}!",
"objectSwitchInvalid":"Tämän objektin on oltava jokin seuraavista tyypeistä: {0}!",
"invalidLanguage":"Tämä on virheellinen kieli!",
"invalidButton":"Tässä painikkeessa on oltava vähintään {0} tai {1}!",
"unusedOption":"Vaihtoehtoa {0} ei käytetä missään!",
"unusedQuestion":"Kysymystä {0} ei käytetä missään!",
"dropdownOption":"Paneeli, jossa pudotusvalikko on käytössä, voi sisältää vain \"lippu\"-tyyppisiä vaihtoehtoja!"
}
},
"actions":{
"buttons":{
"create":"Vieraile Ticketissä",
"close":"Sulje lippu",
"delete":"Poista lippu",
"reopen":"Avaa lippu uudelleen",
"claim":"Lunasta lippu",
"unclaim":"Peruuta lippu",
"pin":"Pin Lippu",
"unpin":"Irrota lippu",
"clear":"Poista liput",
"helpSwitchSlash":"Näytä Slash-komennot",
"helpSwitchText":"Näytä tekstikomennot",
"helpPage":"Sivu {0}",
"withReason":"Syyllä",
"withoutTranscript":"Ilman transkriptiota"
},
"titles":{
"created":"Lippu luotu",
"close":"Lippu suljettu",
"delete":"Lippu poistettu",
"reopen":"Lippu avattu uudelleen",
"claim":"Lippu lunastettu",
"unclaim":"Lippu lunastamaton",
"pin":"Lippu kiinnitetty",
"unpin":"Lippu irrotettu",
"rename":"Lippu nimetty uudelleen",
"move":"Lippu siirretty",
"add":"Lipun käyttäjä lisätty",
"remove":"Lipun käyttäjä poistettu",
"help":"Käytettävissä olevat komennot",
"statsReset":"Nollaa tilastot",
"blacklistAdd":"Käyttäjä mustalla listalla",
"blacklistRemove":"Käyttäjä vapautettu",
"blacklistGet":"Mustalla listalla oleva käyttäjä",
"blacklistView":"Nykyinen musta lista",
"blacklistAddDm":"Lisätty mustalle listalle",
"blacklistRemoveDm":"Poistettu mustalta listalta",
"clear":"Liput tyhjennetty",
"roles":"Roolit päivitetty",
"autoclose":"Lippu suljettu automaattisesti",
"autocloseEnabled":"Automaattinen sulkeminen käytössä",
"autocloseDisabled":"Automaattinen sulkeminen pois käytöstä",
"autodelete":"Lippu poistettu automaattisesti",
"autodeleteEnabled":"Automaattinen poisto käytössä",
"autodeleteDisabled":"Automaattinen poisto poissa käytöstä"
},
"descriptions":{
"create":"Lippusi on luotu. Napsauta alla olevaa painiketta päästäksesi siihen!",
"close":"Lippu on suljettu onnistuneesti!",
"delete":"Lippu on poistettu onnistuneesti!",
"reopen":"Lippu on avattu uudelleen onnistuneesti!",
"claim":"Lippu on lunastettu onnistuneesti!",
"unclaim":"Lippu on lunastettu onnistuneesti!",
"pin":"Lippu on kiinnitetty onnistuneesti!",
"unpin":"Lippu on irrotettu onnistuneesti!",
"rename":"Lippu on nimetty uudelleen muotoon {0}!",
"move":"Lippu on siirretty kohteeseen {0} onnistuneesti!",
"add":"{0} on lisätty lippuun onnistuneesti!",
"remove":"{0} on poistettu lipusta onnistuneesti!",
"helpExplanation":"`<nimi>` => pakollinen parametri\n`[nimi]` => valinnainen parametri",
"statsReset":"Bottitilastot on nollattu onnistuneesti!",
"statsError":"Lipputilastoja ei voi tarkastella!\n{0} ei ole lippu!",
"blacklistAdd":"{0} on lisätty mustalle listalle onnistuneesti!",
"blacklistRemove":"{0} on julkaistu onnistuneesti!",
"blacklistGetSuccess":"{0} on tällä hetkellä mustalla listalla!",
"blacklistGetEmpty":"{0} ei ole tällä hetkellä mustalla listalla!",
"blacklistViewEmpty":"Ketään ei ole vielä mustalla listalla!",
"blacklistViewTip":"Käytä \"/blacklist add\" lisätäksesi käyttäjän mustalle listalle!",
"clearVerify":"Haluatko varmasti poistaa useita lippuja? Tätä toimintoa ei voi kumota!",
"clearReady":"{0} lippua on poistettu onnistuneesti!",
"rolesEmpty":"Rooleja ei ole päivitetty!",
"autocloseLeave":"Tämä lippu on suljettu automaattisesti, koska luoja poistui palvelimelta!",
"autocloseTimeout":"Tämä lippu on suljettu automaattisesti, koska se on ollut passiivinen yli `{0}h`!",
"autodeleteLeave":"Tämä lippu on poistettu automaattisesti, koska sisällöntuottaja poistui palvelimelta!",
"autodeleteTimeout":"Tämä lippu on poistettu automaattisesti, koska se on ollut passiivinen yli `{0} päivää`!",
"autocloseEnabled":"Automaattinen sulkeminen on otettu käyttöön tässä lipussa! Se suljetaan, kun se on epäaktiivinen yli `{0}h'!",
"autocloseDisabled":"Automaattinen sulkeminen on poistettu käytöstä tässä lipussa! Se ei enää sulkeudu automaattisesti!",
"autodeleteEnabled":"Automaattinen poisto on otettu käyttöön tässä lipussa! Se poistetaan, kun se on passiivinen yli `{0} päivään`!",
"autodeleteDisabled":"Automaattinen poisto on poistettu käytöstä tässä lipussa! Sitä ei enää poisteta automaattisesti!",
"ticketMessageLimit":"Voit luoda vain {0} lippua samanaikaisesti!",
"ticketMessageAutoclose":"Tämä lippu suljetaan automaattisesti, kun se ei ole aktiivinen {0} tuntia!",
"ticketMessageAutodelete":"Tämä lippu poistetaan automaattisesti, kun se ei ole aktiivinen {0} päivään!",
"panelReady":"Löydät paneelin alta! Tämä viesti voidaan nyt poistaa!"
},
"modal":{
"closePlaceholder":"Miksi suljit tämän lipun?",
"deletePlaceholder":"Miksi poistit tämän lipun?",
"reopenPlaceholder":"Miksi avasit tämän lipun uudelleen?",
"claimPlaceholder":"Miksi lunasit tämän lipun?",
"unclaimPlaceholder":"Miksi peruutit tämän lipun?",
"pinPlaceholder":"Miksi kiinnitit tämän lipun?",
"unpinPlaceholder":"Miksi irrotit tämän lipun?"
},
"logs":{
"createLog":"{0} loi uuden lipun!",
"closeLog":"Tämän lipun on sulkenut {0}!",
"closeDm":"Lippusi on suljettu palvelimellamme!",
"deleteLog":"{0} on poistanut tämän lipun!",
"deleteDm":"Lippusi on poistettu palvelimeltamme!",
"reopenLog":"{0} on avannut tämän lipun uudelleen!",
"reopenDm":"Lippusi on avattu uudelleen palvelimellamme!",
"claimLog":"{0} on lunastanut tämän lipun!",
"claimDm":"Lippusi on lunastettu palvelimellamme!",
"unclaimLog":"{0} ei ole lunastanut tätä lippua!",
"unclaimDm":"Lippuasi on lunastettu palvelimellamme!",
"pinLog":"{0} on kiinnittänyt tämän lipun!",
"pinDm":"Lippusi on kiinnitetty palvelimellemme!",
"unpinLog":"{0} on irrottanut tämän lipun!",
"unpinDm":"Lippusi on irrotettu palvelimeltamme!",
"renameLog":"{1} on nimennyt tämän lipun uudelleen nimellä {0}!",
"renameDm":"Lippusi nimeksi on muutettu palvelimellamme {0}!",
"moveLog":"{1} on siirtänyt tämän lipun paikkaan {0}!",
"moveDm":"Lippusi on siirretty palvelimellamme osoitteeseen {0}!",
"addLog":"{1} on lisännyt {0} tähän lippuun!",
"addDm":"{0} on lisätty lippuusi palvelimellamme!",
"removeLog":"{1} on poistanut {0} tästä lipusta!",
"removeDm":"{0} on poistettu lipustasi palvelimellamme!",
"blacklistAddLog":"{1} lisäsi käyttäjän {0} mustalle listalle!",
"blacklistRemoveLog":"{1} poisti käyttäjän {0} mustalta listalta!",
"blacklistAddDm":"Sinut on mustalla listalla palvelimellamme! Tästä eteenpäin et voi luoda lippua!",
"blacklistRemoveDm":"Sinut on poistettu palvelimemme mustalta listalta! Nyt voit luoda lippuja uudelleen!",
"clearLog":"{1} on poistanut {0} lippua!"
}
},
"transcripts":{
"success":{
"visit":"Vieraile Transcriptissä",
"ready":"Transkriptio luotu",
"textFileDescription":"Tämä on poistetun lipun tekstikopio!",
"htmlProgress":"Odota, kun tätä html-transkriptiota käsitellään...",
"createdChannel":"Uusi {0}-transkriptio on luotu palvelimelle!",
"createdCreator":"Yhdelle lipullesi on luotu uusi transkriptio {0}!",
"createdParticipant":"Uusi {0}-transkriptio on luotu yhteen lipuista, joihin osallistuit!",
"createdActiveAdmin":"Yhdessä lipussa, johon osallistuit järjestelmänvalvojana, on luotu uusi transkriptio {0}!",
"createdEveryAdmin":"Uusi {0}-transkriptio on luotu yhteen lipuista, joissa olit järjestelmänvalvoja!",
"createdOther":"Uusi transkriptio {0} on luotu!"
},
"errors":{
"retry":"Yritä uudelleen",
"continue":"Poista ilman transkriptiota",
"backup":"Luo varmuuskopio",
"error":"Jotain meni pieleen, kun yritettiin luoda transkriptiota. Mitä haluaisit tehdä? Tätä lippua ei poisteta, ennen kuin napsautat jotakin näistä painikkeista. "
}
},
"errors":{
"titles":{
"internalError":"Sisäinen virhe",
"optionMissing":"Komentovaihtoehto puuttuu",
"optionInvalid":"Komentovaihtoehto ei kelpaa",
"unknownCommand":"Tuntematon komento",
"noPermissions":"Ei käyttöoikeuksia",
"unknownTicket":"Tuntematon lippu",
"deprecatedTicket":"Käytöstä poistettu lippu",
"unknownOption":"Tuntematon vaihtoehto",
"unknownPanel":"Tuntematon paneeli",
"notInGuild":"Ei Palvelimessa",
"channelRename":"Kanavaa ei voi nimetä uudelleen",
"busy":"Lippu on varattu"
},
"descriptions":{
"askForInfo":"Ota yhteyttä tämän botin omistajaan saadaksesi lisätietoja!",
"askForInfoResolve":"Ota yhteyttä tämän botin omistajaan, jos ongelma ei ratkea muutaman yrityksen jälkeen.",
"internalError":"Tähän viestiin {0} ei voi vastata sisäisen virheen vuoksi!",
"optionMissing":"Tästä komennosta puuttuu pakollinen parametri!",
"optionInvalid":"Tämän komennon parametri on virheellinen!",
"optionInvalidChoose":"Valitse väliltä",
"unknownCommand":"Kokeile lisätietoja ohjevalikosta!",
"noPermissions":"Sinulla ei ole lupaa käyttää tätä {0}!",
"noPermissionsList":"Vaaditut luvat: (yksi niistä)",
"noPermissionsCooldown":"Sinulla ei ole oikeutta käyttää tätä {0}-palvelua, koska sinulla on jäähdytys!",
"noPermissionsBlacklist":"Sinulla ei ole oikeutta käyttää tätä {0}, koska sinut on mustalla listalla!",
"noPermissionsLimitGlobal":"Et voi luoda lippua, koska palvelin saavutti lippujen enimmäisrajan!",
"noPermissionsLimitGlobalUser":"Et voi luoda lippua, koska saavutit lippujen enimmäisrajan!",
"noPermissionsLimitOption":"Et voi luoda lippua, koska palvelin saavutti tämän vaihtoehdon lippujen enimmäisrajan!",
"noPermissionsLimitOptionUser":"Et voi luoda lippua, koska saavutit tämän vaihtoehdon lippujen enimmäisrajan!",
"unknownTicket":"Kokeile tätä komentoa uudelleen voimassa olevalla lipulla!",
"deprecatedTicket":"Nykyinen kanava ei ole kelvollinen lippu! Se saattoi olla lippu vanhasta Open Ticket -versiosta!",
"notInGuild":"Tämä {0} ei toimi DM:ssä! Ole hyvä ja yritä uudelleen palvelimella!",
"channelRename":"Discordin nopeusrajoitusten vuoksi botin on tällä hetkellä mahdotonta nimetä kanavaa uudelleen. Kanava nimetään automaattisesti uudelleen 10 minuutin kuluttua, jos bottia ei käynnistetä uudelleen.",
"channelRenameSource":"Tämän virheen lähde on: {0}",
"busy":"Tätä {0} ei voi käyttää! Botti käsittelee lippua parhaillaan. Yritä uudelleen muutaman sekunnin kuluttua!"
},
"optionInvalidReasons":{
"stringRegex":"Arvo ei vastaa mallia!",
"stringMinLength":"Arvon on oltava vähintään {0} merkkiä!",
"stringMaxLength":"Arvo saa olla enintään {0} merkkiä!",
"numberInvalid":"Virheellinen numero!",
"numberMin":"Numeron on oltava vähintään {0}!",
"numberMax":"Numeron on oltava enintään {0}!",
"numberDecimal":"Numero ei saa olla desimaali!",
"numberNegative":"Numero ei saa olla negatiivinen!",
"numberPositive":"Numero ei saa olla positiivinen!",
"numberZero":"Numero ei saa olla nolla!",
"channelNotFound":"Kanavaa ei löydy!",
"userNotFound":"Käyttäjää ei löydy!",
"roleNotFound":"Roolia ei löydy!",
"memberNotFound":"Käyttäjää ei löydy!",
"mentionableNotFound":"Käyttäjää tai roolia ei löydy!",
"channelType":"Virheellinen kanavatyyppi!",
"notInGuild":"Tämä vaihtoehto edellyttää, että olet palvelimella!"
},
"permissions":{
"developer":"Sinun on oltava botin kehittäjä.",
"owner":"Sinun on oltava palvelimen omistaja.",
"admin":"Sinun tulee olla palvelimen järjestelmänvalvoja.",
"moderator":"Sinun täytyy olla moderaattori.",
"support":"Sinun on kuuluttava tukitiimiin.",
"member":"Sinun täytyy olla jäsen.",
"discord-administrator":"Sinulla on oltava ADMINISTRATOR-käyttöoikeus."
},
"actionInvalid":{
"close":"Lippu on jo suljettu!",
"reopen":"Lippu ei ole vielä suljettu!",
"claim":"Lippu on jo lunastettu!",
"unclaim":"Lippua ei ole vielä lunastettu!",
"pin":"Lippu on jo kiinnitetty!",
"unpin":"Lippua ei ole vielä kiinnitetty!",
"add":"Tämä käyttäjä voi jo käyttää lippua!",
"remove":"Tätä käyttäjää ei voi poistaa lipusta!"
}
},
"params":{
"uppercase":{
"ticket":"Lippu",
"tickets":"Liput",
"reason":"Syy",
"creator":"Luoja",
"remaining":"Aikaa jäljellä",
"added":"Lisätty",
"removed":"Poistettu",
"filter":"Suodattaa",
"claimedBy":"Vaatimuksen tekijä: {0}",
"method":"Menetelmä",
"type":"Tyyppi",
"blacklisted":"Mustalla listalla",
"panel":"Paneeli",
"command":"Komento",
"system":"Järjestelmä",
"true":"Totta",
"false":"Väärä",
"syntax":"Syntaksi",
"originalName":"Alkuperäinen Nimi",
"newName":"Alkuperäinen Nimi",
"until":"Kunnes",
"validOptions":"Kelvolliset vaihtoehdot",
"validPanels":"Kelvolliset paneelit",
"autoclose":"Automaattinen sulkeminen",
"autodelete":"Automaattinen poisto",
"startupDate":"Aloituspäivämäärä",
"version":"Versio",
"name":"Nimi",
"role":"Rooli",
"status":"Status",
"claimed":"Väitetty",
"pinned":"Kiinnitetty",
"creationDate":"Luontipäivämäärä"
},
"lowercase":{
"text":"teksti",
"html":"html",
"command":"komento",
"modal":"modaalinen",
"button":"-painiketta",
"dropdown":"pudotusvalikosta",
"method":"menetelmä"
}
},
"commands":{
"reason":"Määritä valinnainen syy, joka näkyy lokeissa.",
"help":"Hanki luettelo kaikista käytettävissä olevista komennoista.",
"panel":"Luo viesti avattavalla valikosta tai painikkeilla (lippujen luomista varten).",
"panelId":"Sen paneelin tunniste, jonka haluat luoda.",
"panelAutoUpdate":"Haluatko tämän paneelin päivittyvän automaattisesti, kun sitä muokataan?",
"ticket":"Luo lippu välittömästi.",
"ticketId":"Sen lipun tunniste, jonka haluat luoda.",
"close":"Sulje lippu.",
"delete":"Poista lippu.",
"deleteNoTranscript":"Poista tämä lippu luomatta transkriptiota.",
"reopen":"Avaa lippu uudelleen.",
"claim":"Lunasta lippu.",
"claimUser":"Lunasta tämä lippu jollekin muulle itsesi sijaan.",
"unclaim":"Peruuta lippu.",
"pin":"Kiinnitä lippu.",
"unpin":"Irrota lippu.",
"move":"Siirrä lippu.",
"moveId":"Sen vaihtoehdon tunniste, johon haluat siirtyä.",
"rename":"Nimeä lippu uudelleen.",
"renameName":"Tämän lipun uusi nimi.",
"add":"Lisää käyttäjä lippuun.",
"addUser":"Lisättävä käyttäjä.",
"remove":"Poista käyttäjä lipusta.",
"removeUser":"Poistettava käyttäjä.",
"blacklist":"Hallitse lippujen mustaa listaa.",
"blacklistView":"Näytä luettelo nykyisestä mustasta listasta.",
"blacklistAdd":"Lisää käyttäjä mustalle listalle.",
"blacklistRemove":"Poista käyttäjä mustalta listalta.",
"blacklistGet":"Hanki tiedot mustalla listalla olevalta käyttäjältä.",
"blacklistGetUser":"Käyttäjä, jolta saa tietoja.",
"stats":"Tarkastele botin, jäsenen tai lipun tilastoja.",
"statsReset":"Nollaa kaikki botin tilastot (ja aloita laskeminen nollasta).",
"statsGlobal":"Katso globaalit tilastot.",
"statsUser":"Tarkastele palvelimella olevan käyttäjän tilastoja.",
"statsUserUser":"Käyttäjä katsella.",
"statsTicket":"Tarkastele lipun tilastoja palvelimella.",
"statsTicketTicket":"Lippu katsottavaksi.",
"clear":"Poista useita lippuja samanaikaisesti.",
"clearFilter":"Lippujen tyhjennyssuodatin.",
"clearFilters":{
"all":"Kaikki",
"open":"Avata",
"close":"Suljettu",
"claim":"Väitetty",
"unclaim":"Lunastamaton",
"pin":"Kiinnitetty",
"unpin":"Irrotettu",
"autoclose":"Automaattisuljettu"
},
"autoclose":"Hallitse automaattista sulkemista lipussa.",
"autocloseDisable":"Poista automaattinen sulkeminen käytöstä tässä lipussa.",
"autocloseEnable":"Ota automaattinen sulkeminen käyttöön tässä lipussa.",
"autocloseEnableTime":"Tämän lipun on oltava passiivinen, jotta se voidaan sulkea.",
"autodelete":"Hallitse automaattista poistoa lipussa.",
"autodeleteDisable":"Poista automaattinen poisto käytöstä tässä lipussa.",
"autodeleteEnable":"Ota automaattinen poisto käyttöön tässä lipussa.",
"autodeleteEnableTime":"Kuinka monta päivää tämän lipun on oltava passiivinen, jotta se voidaan poistaa."
},
"helpMenu":{
"help":"Hanki luettelo kaikista käytettävissä olevista komennoista.",
"ticket":"Luo lippu välittömästi.",
"close":"Sulje lippu, tämä estää kirjoittamisen tälle kanavalle.",
"delete":"Poista lippu. Tämä luo transkription, kun se on käytössä.",
"reopen":"Avaa lippu uudelleen, tämä mahdollistaa kirjoittamisen uudelleen tälle kanavalle.",
"pin":"Kiinnitä lippu. Tämä siirtää lipun yläreunaan ja lisää nimeen emoijin '📌'.",
"unpin":"\nIrrota lippu. Lippu pysyy paikallaan, mutta menettää '📌' emoijin.",
"move":"Siirrä lippu. Tämä muuttaa tämän lipun tyyppiä.",
"rename":"Nimeä lippu uudelleen. Tämä muuttaa tämän lipun kanavan nimen.",
"claim":"Lunasta lippu. Tämän avulla voit ilmoittaa tiimillesi, että käsittelet tätä lippua.",
"unclaim":"Peruuta lippu. Tällä voit ilmoittaa joukkueellesi, että tämä lippu on jälleen ilmainen.",
"add":"Lisää käyttäjä lippuun. Tämä antaa käyttäjälle mahdollisuuden lukea ja kirjoittaa tähän lippuun.",
"remove":"Poista käyttäjä lipusta. Tämä poistaa tämän lipun käyttäjältä mahdollisuuden lukea ja kirjoittaa.",
"panel":"Luo viesti avattavalla valikosta tai painikkeilla (lippujen luomista varten).",
"blacklistView":"Näytä luettelo nykyisestä mustasta listasta.",
"blacklistAdd":"Lisää käyttäjä mustalle listalle.",
"blacklistRemove":"Poista käyttäjä mustalta listalta.",
"blacklistGet":"Hanki tiedot mustalla listalla olevalta käyttäjältä.",
"statsGlobal":"Katso globaalit tilastot.",
"statsTicket":"Tarkastele lipun tilastoja palvelimella.",
"statsUser":"Tarkastele palvelimella olevan käyttäjän tilastoja.",
"statsReset":"Nollaa kaikki botin tilastot (ja aloita laskeminen nollasta).",
"autocloseDisable":"Poista automaattinen sulkeminen käytöstä tässä lipussa.",
"autocloseEnable":"Ota automaattinen sulkeminen käyttöön tässä lipussa.",
"autodeleteDisable":"Poista automaattinen poisto käytöstä tässä lipussa.",
"autodeleteEnable":"Ota automaattinen poisto käyttöön tässä lipussa."
},
"stats":{
"scopes":{
"global":"Globaalit tilastot",
"system":"Järjestelmätilastot",
"user":"Käyttäjätilastot",
"ticket":"Lipputilastot",
"participants":"Osallistujat"
},
"properties":{
"ticketsCreated":"Liput luotu",
"ticketsClosed":"Liput suljettu",
"ticketsDeleted":"Liput poistettu",
"ticketsReopened":"Liput avattu uudelleen",
"ticketsAutoclosed":"Liput automaattisesti suljettu",
"ticketsClaimed":"Liput lunastettu",
"ticketsPinned":"Liput kiinni",
"ticketsMoved":"Liput siirretty",
"usersBlacklisted":"Käyttäjät mustalla listalla",
"transcriptsCreated":"Transkriptiot luotu"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["guillee3"],
"lastedited":"04/12/2024",
"language":"French",
"automated":false
},
"checker":{
"system":{
"typeError":"[ERREUR]",
"headerOpenTicket":"OUVRIR TICKET",
"typeWarning":"[ALERTE]",
"typeInfo":"[INFO]",
"headerConfigChecker":"VÉRIFICATEUR DE CONFIGURATION",
"headerDescription":"vérifiez les erreurs dans vos fichiers de config!",
"footerError":"le bot ne démarrera pas tant que tous les {0} ne sont pas corrigés!",
"footerWarning":"il est recommandé de corriger tous les {0} avant de commencer!",
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
"compactInformation":"utilisez {0} pour plus d'informations!",
"dataPath":"chemin",
"dataDocs":"docs",
"dataMessages":"message"
},
"messages":{
"stringTooShort":"Cette chaîne ne peut pas être plus courte que {0} caractères!",
"stringTooLong":"Cette chaîne ne peut pas être plus longue que {0} caractères!",
"stringLengthInvalid":"Cette chaîne doit comporter {0} caractères!",
"stringStartsWith":"Cette chaîne doit commencer par {0}!",
"stringEndsWith":"Cette chaîne doit se terminer par {0}!",
"stringContains":"Cette chaîne doit contenir {0}!",
"stringChoices":"Cette chaîne ne peut être que l'une des valeurs suivantes : {0}!",
"stringRegex":"Cette chaîne est invalide!",
"numberTooShort":"Ce nombre ne peut pas être plus court que {0} caractères!",
"numberTooLong":"Ce nombre ne peut pas être plus long que {0} caractères!",
"numberLengthInvalid":"Ce nombre doit comporter {0} caractères!",
"numberTooSmall":"Ce nombre doit être au moins {0}!",
"numberTooLarge":"Ce nombre doit être au maximum {0}!",
"numberNotEqual":"Ce nombre doit être {0}!",
"numberStep":"Ce nombre doit être un multiple de {0}!",
"numberStepOffset":"Ce nombre doit être un multiple de {0} en commençant par {1}!",
"numberStartsWith":"Ce nombre doit commencer par {0}!",
"numberEndsWith":"Ce nombre doit se terminer par {0}!",
"numberContains":"Ce nombre doit contenir {0}!",
"numberChoices":"Ce nombre ne peut être que l'une des valeurs suivantes : {0}!",
"numberFloat":"Ce nombre ne peut pas être un décimal!",
"numberNegative":"Ce nombre ne peut pas être négatif!",
"numberPositive":"Ce nombre ne peut pas être positif!",
"numberZero":"Ce nombre ne peut pas être zéro!",
"booleanTrue":"Ce booléen ne peut pas être vrai!",
"booleanFalse":"Ce booléen ne peut pas être faux!",
"arrayEmptyDisabled":"Ce tableau ne peut pas être vide!",
"arrayEmptyRequired":"Ce tableau doit être vide!",
"arrayTooShort":"Ce tableau doit avoir une longueur d'au moins {0}!",
"arrayTooLong":"Ce tableau doit avoir une longueur d'au plus {0}!",
"arrayLengthInvalid":"Ce tableau doit avoir une longueur de {0}!",
"arrayInvalidTypes":"Ce tableau ne peut contenir que les types suivants : {0}!",
"arrayDouble":"Ce tableau n'autorise pas la même valeur deux fois!",
"discordInvalidId":"Ceci est un identifiant de {0} Discord invalide!",
"discordInvalidIdOptions":"Ceci est un identifiant de {0} Discord invalide! Vous pouvez également utiliser l'un de ceux-ci: {1}!",
"discordInvalidToken":"Ceci est un token Discord invalide (syntactiquement)!",
"colorInvalid":"Ceci est une couleur hex invalide!",
"emojiTooShort":"Cette chaîne doit contenir au moins {0} émojis!",
"emojiTooLong":"Cette chaîne doit contenir au plus {0} émojis!",
"emojiCustom":"Cet émoji ne peut pas être un émoji Discord personnalisé!",
"emojiInvalid":"Ceci est un émoji invalide!",
"urlInvalid":"Cette URL est invalide!",
"urlInvalidHttp":"Cette URL ne peut utiliser que le protocole https://!",
"urlInvalidProtocol":"Cette URL ne peut utiliser que les protocoles http:// et https://!",
"urlInvalidHostname":"Cette URL a un nom d'hôte non autorisé!",
"urlInvalidExtension":"Cette URL a une extension invalide! Choisissez parmi : {0}!",
"urlInvalidPath":"Cette URL a un chemin invalide!",
"idNotUnique":"Cet identifiant n'est pas unique, utilisez un autre identifiant à la place!",
"idNonExistent":"L'identifiant {0} n'existe pas!",
"invalidType":"Cette propriété doit être du type: {0}!",
"propertyMissing":"La propriété {0} est manquante dans cet objet!",
"propertyOptional":"La propriété {0} est optionnelle dans cet objet!",
"objectDisabled":"Cet objet est désactivé, activez-le en utilisant {0}!",
"nullInvalid":"Cette propriété ne peut pas être nulle!",
"switchInvalidType":"Cela doit être l'un des types suivants: {0}!",
"objectSwitchInvalid":"Cet objet doit être l'un des types suivants : {0}!",
"invalidLanguage":"Ceci est une langue invalide!",
"invalidButton":"Ce bouton doit avoir au moins un {0} ou {1}!",
"unusedOption":"L'option {0} n'est utilisée nulle part!",
"unusedQuestion":"La question {0} n'est utilisée nulle part!",
"dropdownOption":"Un panneau avec un menu déroulant activé ne peut contenir que des options du type 'ticket'!"
}
},
"actions":{
"buttons":{
"create":"Visiter le Ticket",
"close":"Fermer le Ticket",
"delete":"Supprimer le Ticket",
"reopen":"Rouvrir le Ticket",
"claim":"Réclamer le ticket",
"unclaim":"Libérer le Ticket",
"pin":"Épingler le Ticket",
"unpin":"Désépingler le Ticket",
"clear":"Supprimer les Tickets",
"helpSwitchSlash":"Voir les Commandes Slash",
"helpSwitchText":"Voir les Commandes Textuelles",
"helpPage":"Page {0}",
"withReason":"Avec Raison",
"withoutTranscript":"Sans Transcription"
},
"titles":{
"created":"Ticket Créé",
"close":"Ticket Fermé",
"delete":"Ticket Supprimé",
"reopen":"Ticket Rouvert",
"claim":"Ticket Pris en Charge",
"unclaim":"Ticket libéré",
"pin":"Ticket Épinglé",
"unpin":"Ticket Désépinglé",
"rename":"Ticket Renommé",
"move":"Ticket Déplacé",
"add":"Utilisateur Ajouté au Ticket",
"remove":"Utilisateur Retiré du Ticket",
"help":"Commandes Disponibles",
"statsReset":"Réinitialiser les Statistiques",
"blacklistAdd":"Utilisateur Ajouté à la Liste Noire",
"blacklistRemove":"Utilisateur Retiré de la Liste Noire",
"blacklistGet":"Utilisateur en Liste Noire",
"blacklistView":"Liste Noire Actuelle",
"blacklistAddDm":"Ajouté à la Liste Noire",
"blacklistRemoveDm":"Retiré de la Liste Noire",
"clear":"Tickets Supprimés",
"roles":"Rôles Mis à Jour",
"autoclose":"Ticket Fermé Automatiquement",
"autocloseEnabled":"Fermeture Automatique Activée",
"autocloseDisabled":"Fermeture Automatique Désactivée",
"autodelete":"Ticket Supprimé Automatiquement",
"autodeleteEnabled":"Suppression Automatique Activée",
"autodeleteDisabled":"Suppression Automatique Désactivée"
},
"descriptions":{
"create":"Votre ticket a été créé. Cliquez sur le bouton ci-dessous pour y accéder!",
"close":"Le ticket a été fermé avec succès!",
"delete":"Le ticket a été supprimé avec succès!",
"reopen":"Le ticket a été rouvert avec succès!",
"claim":"Le ticket a été pris en charge avec succès!",
"unclaim":"Le ticket a été libéré avec succès!",
"pin":"Le ticket a été épinglé avec succès!",
"unpin":"Le ticket a été désépinglé avec succès!",
"rename":"Le ticket a été renommé en {0} avec succès!",
"move":"Le ticket a été déplacé vers {0} avec succès!",
"add":"{0} a été ajouté au ticket avec succès!",
"remove":"{0} a été retiré du ticket avec succès!",
"helpExplanation":"`<nom>` => paramètre requis\n`[nom]` => paramètre optionnel",
"statsReset":"Les statistiques du bot ont été réinitialisées avec succès!",
"statsError":"Impossible de visualiser les statistiques du ticket!\n{0} n'est pas un ticket!",
"blacklistAdd":"{0} a été ajouté à la liste noire avec succès!",
"blacklistRemove":"{0} a été retiré de la liste noire avec succès!",
"blacklistGetSuccess":"{0} est actuellement sur la liste noire!",
"blacklistGetEmpty":"{0} n'est actuellement pas sur la liste noire!",
"blacklistViewEmpty":"Personne n'a encore été ajouté à la liste noire!",
"blacklistViewTip":"Utilisez \"/blacklist add\" pour ajouter un utilisateur à la liste noire!",
"clearVerify":"Êtes-vous sûr de vouloir supprimer plusieurs tickets?\nCette action est irréversible!",
"clearReady":"{0} tickets ont été supprimés avec succès!",
"rolesEmpty":"Aucun rôle n'a été mis à jour!",
"autocloseLeave":"Ce ticket a été fermé automatiquement parce que le créateur a quitté le serveur!",
"autocloseTimeout":"Ce ticket a été fermé automatiquement car il est resté inactif pendant plus de `{0}h`!",
"autodeleteLeave":"Ce ticket a été supprimé automatiquement parce que le créateur a quitté le serveur!",
"autodeleteTimeout":"Ce ticket a été supprimé automatiquement car il est resté inactif pendant plus de `{0} jours`!",
"autocloseEnabled":"La fermeture automatique a été activée dans ce ticket!\nIl sera fermé lorsqu'il restera inactif pendant plus de `{0}h`!",
"autocloseDisabled":"La fermeture automatique a été désactivée dans ce ticket!\nIl ne sera plus fermé automatiquement!",
"autodeleteEnabled":"La suppression automatique a été activée dans ce ticket!\nIl sera supprimé lorsqu'il restera inactif pendant plus de `{0} jours`!",
"autodeleteDisabled":"La suppression automatique a été désactivée dans ce ticket!\nIl ne sera plus supprimé automatiquement!",
"ticketMessageLimit":"Vous ne pouvez créer que {0} ticket(s) en même temps!",
"ticketMessageAutoclose":"Ce ticket sera fermé automatiquement après {0}h d'inactivité!",
"ticketMessageAutodelete":"Ce ticket sera supprimé automatiquement après {0} jours d'inactivité!",
"panelReady":"Vous pouvez trouver le panneau ci-dessous!\nCe message peut maintenant être supprimé!"
},
"modal":{
"closePlaceholder":"Pourquoi avez-vous fermé ce ticket?",
"deletePlaceholder":"Pourquoi avez-vous supprimé ce ticket?",
"reopenPlaceholder":"Pourquoi avez-vous rouvert ce ticket?",
"claimPlaceholder":"Pourquoi avez-vous pris en charge ce ticket?",
"unclaimPlaceholder":"Pourquoi avez-vous libéré ce ticket?",
"pinPlaceholder":"Pourquoi avez-vous épinglé ce ticket?",
"unpinPlaceholder":"Pourquoi avez-vous désépinglé ce ticket?"
},
"logs":{
"createLog":"Un nouveau ticket a été créé par {0}!",
"closeLog":"Ce ticket a été fermé par {0}!",
"closeDm":"Votre ticket a été fermé sur notre serveur!",
"deleteLog":"Ce ticket a été supprimé par {0}!",
"deleteDm":"Votre ticket a été supprimé sur notre serveur!",
"reopenLog":"Ce ticket a été rouvert par {0}!",
"reopenDm":"Votre ticket a été rouvert sur notre serveur!",
"claimLog":"Ce ticket a été pris en charge par {0}!",
"claimDm":"Votre ticket a été pris en charge sur notre serveur!",
"unclaimLog":"Ce ticket a été libéré par {0}!",
"unclaimDm":"Votre ticket a été libéré sur notre serveur!",
"pinLog":"Ce ticket a été épinglé par {0}!",
"pinDm":"Votre ticket a été épinglé sur notre serveur!",
"unpinLog":"Ce ticket a été désépinglé par {0}!",
"unpinDm":"Votre ticket a été désépinglé sur notre serveur!",
"renameLog":"Ce ticket a été renommé en {0} par {1}!",
"renameDm":"Votre ticket a été renommé en {0} sur notre serveur!",
"moveLog":"Ce ticket a été déplacé vers {0} par {1}!",
"moveDm":"Votre ticket a été déplacé vers {0} sur notre serveur!",
"addLog":"{0} a été ajouté à ce ticket par {1}!",
"addDm":"{0} a été ajouté à votre ticket sur notre serveur!",
"removeLog":"{0} a été retiré de ce ticket par {1}!",
"removeDm":"{0} a été retiré de votre ticket sur notre serveur!",
"blacklistAddLog":"{0} a été ajouté à la liste noire par {1}!",
"blacklistRemoveLog":"{0} a été retiré de la liste noire par {1}!",
"blacklistAddDm":"Vous avez été ajouté à la liste noire sur notre serveur!\nDésormais, vous ne pouvez pas créer de ticket!",
"blacklistRemoveDm":"Vous avez été retiré de la liste noire sur notre serveur!\nVous pouvez désormais créer des tickets à nouveau!",
"clearLog":"{0} tickets ont été supprimés par {1}!"
}
},
"transcripts":{
"success":{
"visit":"Visiter la Transcription",
"ready":"Transcription Créée",
"textFileDescription":"Ceci est la transcription textuelle d'un ticket supprimé!",
"htmlProgress":"Veuillez patienter pendant que cette transcription HTML est en cours de traitement...",
"createdChannel":"Une nouvelle transcription {0} a été créée sur le serveur!",
"createdCreator":"Une nouvelle transcription {0} a été créée pour l'un de vos tickets!",
"createdParticipant":"Une nouvelle transcription {0} a été créée dans l'un des tickets auxquels vous avez participé!",
"createdActiveAdmin":"Une nouvelle transcription {0} a été créée dans l'un des tickets auxquels vous avez participé en tant qu'admin!",
"createdEveryAdmin":"Une nouvelle transcription {0} a été créée dans l'un des tickets où vous étiez admin!",
"createdOther":"Une nouvelle transcription {0} a été créée!"
},
"errors":{
"retry":"Réessayer",
"continue":"Supprimer Sans Transcription",
"backup":"Créer une Transcription de Sauvegarde",
"error":"Une erreur s'est produite lors de la création de la transcription.\nQue souhaitez-vous faire?\n\nCe ticket ne sera pas supprimé tant que vous n'aurez pas cliqué sur l'un de ces boutons."
}
},
"errors":{
"titles":{
"internalError":"Erreur Interne",
"optionMissing":"Option de Commande Manquante",
"optionInvalid":"Option de Commande Invalide",
"unknownCommand":"Commande Inconnue",
"noPermissions":"Pas de Permissions",
"unknownTicket":"Ticket Inconnu",
"deprecatedTicket":"Ticket Déprécié",
"unknownOption":"Option Inconnue",
"unknownPanel":"Panneau Inconnu",
"notInGuild":"Pas Dans le Serveur",
"channelRename":"Impossible de Renommer le Canal",
"busy":"Ticket Occupé"
},
"descriptions":{
"askForInfo":"Contactez le propriétaire de ce bot pour plus d'informations!",
"askForInfoResolve":"Contactez le propriétaire du bot si ce problème ne se résout pas après quelques essais.",
"internalError":"Échec de la réponse à ce {0} en raison d'une erreur interne!",
"optionMissing":"Un paramètre requis est manquant dans cette commande!",
"optionInvalid":"Un paramètre dans cette commande est invalide!",
"optionInvalidChoose":"Choisissez entre",
"unknownCommand":"Essayez de visiter le menu d'aide pour plus d'informations!",
"noPermissions":"Vous n'êtes pas autorisé à utiliser ce {0}!",
"noPermissionsList":"Permissions Requises : (une d'entre elles)",
"noPermissionsCooldown":"Vous n'êtes pas autorisé à utiliser ce {0} car vous êtes en cooldown!",
"noPermissionsBlacklist":"Vous n'êtes pas autorisé à utiliser ce {0} car vous avez été mis sur la liste noire!",
"noPermissionsLimitGlobal":"Vous n'êtes pas autorisé à créer un ticket car le serveur a atteint la limite maximale de tickets!",
"noPermissionsLimitGlobalUser":"Vous n'êtes pas autorisé à créer un ticket car vous avez atteint la limite maximale de tickets!",
"noPermissionsLimitOption":"Vous n'êtes pas autorisé à créer un ticket car le serveur a atteint la limite maximale de tickets pour cette option!",
"noPermissionsLimitOptionUser":"Vous n'êtes pas autorisé à créer un ticket car vous avez atteint la limite maximale de tickets pour cette option!",
"unknownTicket":"Essayez cette commande à nouveau dans un ticket valide!",
"deprecatedTicket":"Le canal actuel n'est pas un ticket valide! Il pourrait s'agir d'un ticket provenant d'une ancienne version d'Open Ticket!",
"notInGuild":"Ce {0} ne fonctionne pas en DM! Veuillez réessayer dans un serveur!",
"channelRename":"En raison des limitations de taux de Discord, il est actuellement impossible pour le bot de renommer le canal. Le canal sera automatiquement renommé après 10 minutes si le bot n'est pas redémarré.",
"channelRenameSource":"La source de cette erreur est : {0}",
"busy":"Impossible d'utiliser ce {0}!\nLe ticket est actuellement en cours de traitement par le bot.\n\nVeuillez réessayer dans quelques secondes!"
},
"optionInvalidReasons":{
"stringRegex":"La valeur ne correspond pas au modèle!",
"stringMinLength":"La valeur doit comporter au moins {0} caractères!",
"stringMaxLength":"La valeur doit comporter au maximum {0} caractères!",
"numberInvalid":"Nombre invalide!",
"numberMin":"Le nombre doit être au moins {0}!",
"numberMax":"Le nombre doit être au maximum {0}!",
"numberDecimal":"Le nombre ne peut pas être un décimal!",
"numberNegative":"Le nombre ne peut pas être négatif!",
"numberPositive":"Le nombre ne peut pas être positif!",
"numberZero":"Le nombre ne peut pas être zéro!",
"channelNotFound":"Impossible de trouver le canal!",
"userNotFound":"Impossible de trouver l'utilisateur!",
"roleNotFound":"Impossible de trouver le rôle!",
"memberNotFound":"Impossible de trouver l'utilisateur!",
"mentionableNotFound":"Impossible de trouver l'utilisateur ou le rôle!",
"channelType":"Type de canal invalide!",
"notInGuild":"Cette option nécessite que vous soyez dans un serveur!"
},
"permissions":{
"developer":"Vous devez être le développeur du bot.",
"owner":"Vous devez être le propriétaire du serveur.",
"admin":"Vous devez être un administrateur du serveur.",
"moderator":"Vous devez être un modérateur.",
"support":"Vous devez faire partie de l'équipe de support.",
"member":"Vous devez être membre.",
"discord-administrator":"Vous devez avoir la permission `ADMINISTRATOR`."
},
"actionInvalid":{
"close":"Le ticket est déjà fermé!",
"reopen":"Le ticket n'est pas encore fermé!",
"claim":"Le ticket est déjà pris en charge!",
"unclaim":"Le ticket n'est pas encore pris en charge!",
"pin":"Le ticket est déjà épinglé!",
"unpin":"Le ticket n'est pas encore épinglé!",
"add":"Cet utilisateur a déjà accès au ticket!",
"remove":"Impossible de retirer cet utilisateur du ticket!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickets",
"reason":"Raison",
"creator":"Créateur",
"remaining":"Temps Restant",
"added":"Ajouté",
"removed":"Retiré",
"filter":"Filtre",
"claimedBy":"Pris en charge par {0}",
"method":"Méthode",
"type":"Type",
"blacklisted":"Liste Noire",
"panel":"Panneau",
"command":"Commande",
"system":"Système",
"true":"Vrai",
"false":"Faux",
"syntax":"Syntaxe",
"originalName":"Nom Original",
"newName":"Nouveau Nom",
"until":"Jusqu'à",
"validOptions":"Options Valides",
"validPanels":"Panneaux Valides",
"autoclose":"Fermeture Automatique",
"autodelete":"Suppression Automatique",
"startupDate":"Date de Démarrage",
"version":"Version",
"name":"Nom",
"role":"Rôle",
"status":"Statut",
"claimed":"Pris en Charge",
"pinned":"Épinglé",
"creationDate":"Date de Création"
},
"lowercase":{
"text":"texte",
"html":"html",
"command":"commande",
"modal":"modal",
"button":"bouton",
"dropdown":"menu déroulant",
"method":"méthode"
}
},
"commands":{
"reason":"Spécifiez une raison optionnelle qui sera visible dans les journaux.",
"help":"Obtenez une liste de toutes les commandes disponibles.",
"panel":"Générez un message avec un menu déroulant ou des boutons (pour la création de tickets).",
"panelId":"L'identifiant du panneau que vous souhaitez générer.",
"panelAutoUpdate":"Voulez-vous que ce panneau se mette à jour automatiquement lorsqu'il est modifié?",
"ticket":"Créez instantanément un ticket.",
"ticketId":"L'identifiant du ticket que vous souhaitez créer.",
"close":"Fermez un ticket.",
"delete":"Supprimez un ticket.",
"deleteNoTranscript":"Supprimez ce ticket sans créer de transcription.",
"reopen":"Rouvrez un ticket.",
"claim":"Prendre en charge un ticket.",
"claimUser":"Prendre en charge ce ticket pour quelqu'un d'autre au lieu de vous-même.",
"unclaim":"Libérer un ticket.",
"pin":"Épinglez un ticket.",
"unpin":"Désépingler un ticket.",
"move":"Déplacez un ticket.",
"moveId":"L'identifiant de l'option vers laquelle vous souhaitez déplacer.",
"rename":"Renommez un ticket.",
"renameName":"Le nouveau nom pour ce ticket.",
"add":"Ajoutez un utilisateur à un ticket.",
"addUser":"L'utilisateur à ajouter.",
"remove":"Retirez un utilisateur d'un ticket.",
"removeUser":"L'utilisateur à retirer.",
"blacklist":"Gérez la liste noire des tickets.",
"blacklistView":"Voir la liste noire actuelle.",
"blacklistAdd":"Ajoutez un utilisateur à la liste noire.",
"blacklistRemove":"Retirez un utilisateur de la liste noire.",
"blacklistGet":"Obtenez les détails d'un utilisateur mis sur la liste noire.",
"blacklistGetUser":"L'utilisateur dont vous souhaitez obtenir les détails.",
"stats":"Voir les statistiques du bot, d'un membre ou d'un ticket.",
"statsReset":"Réinitialisez toutes les statistiques du bot (et commencez à compter à partir de zéro).",
"statsGlobal":"Voir les statistiques globales.",
"statsUser":"Voir les statistiques d'un utilisateur dans le serveur.",
"statsUserUser":"L'utilisateur à afficher.",
"statsTicket":"Voir les statistiques d'un ticket dans le serveur.",
"statsTicketTicket":"Le ticket à afficher.",
"clear":"Supprimez plusieurs tickets en même temps.",
"clearFilter":"Le filtre pour supprimer les tickets.",
"clearFilters":{
"all":"Tous",
"open":"Ouverts",
"close":"Fermés",
"claim":"Pris en charge",
"unclaim":"Non pris en charge",
"pin":"Épinglés",
"unpin":"Désépinglés",
"autoclose":"Fermés automatiquement"
},
"autoclose":"Gérez la fermeture automatique dans un ticket.",
"autocloseDisable":"Désactivez la fermeture automatique dans ce ticket.",
"autocloseEnable":"Activez la fermeture automatique dans ce ticket.",
"autocloseEnableTime":"Le nombre d'heures d'inactivité nécessaire pour fermer ce ticket.",
"autodelete":"Gérez la suppression automatique dans un ticket.",
"autodeleteDisable":"Désactivez la suppression automatique dans ce ticket.",
"autodeleteEnable":"Activez la suppression automatique dans ce ticket.",
"autodeleteEnableTime":"Le nombre de jours d'inactivité nécessaire pour supprimer ce ticket."
},
"helpMenu":{
"help":"Obtenez une liste de toutes les commandes disponibles.",
"ticket":"Créez instantanément un ticket.",
"close":"Fermez un ticket, cela désactive l'écriture dans ce canal.",
"delete":"Supprimez un ticket, cela crée une transcription lorsqu'elle est activée.",
"reopen":"Rouvrez un ticket, cela active à nouveau l'écriture dans ce canal.",
"pin":"Épinglez un ticket. Cela déplacera le ticket en haut et ajoutera un émoji '📌' au nom.",
"unpin":"Désépingler un ticket. Le ticket restera à sa position mais perdra l'émoji '📌'.",
"move":"Déplacez un ticket. Cela changera le type de ce ticket.",
"rename":"Renommez un ticket. Cela changera le nom du canal de ce ticket.",
"claim":"Prendre en charge un ticket. Ainsi, vous pouvez informer votre équipe que vous gérez ce ticket.",
"unclaim":"Libérer un ticket. Ainsi, vous pouvez informer votre équipe que ce ticket est à nouveau libre.",
"add":"Ajoutez un utilisateur à un ticket. Cela permettra à l'utilisateur de lire et d'écrire dans ce ticket.",
"remove":"Retirez un utilisateur d'un ticket. Cela supprimera la capacité de lire et d'écrire pour un utilisateur dans ce ticket.",
"panel":"Générez un message avec un menu déroulant ou des boutons (pour la création de tickets).",
"blacklistView":"Voir la liste noire actuelle.",
"blacklistAdd":"Ajoutez un utilisateur à la liste noire.",
"blacklistRemove":"Retirez un utilisateur de la liste noire.",
"blacklistGet":"Obtenez les détails d'un utilisateur mis sur la liste noire.",
"statsGlobal":"Voir les statistiques globales.",
"statsTicket":"Voir les statistiques d'un ticket dans le serveur.",
"statsUser":"Voir les statistiques d'un utilisateur dans le serveur.",
"statsReset":"Réinitialisez toutes les statistiques du bot (et commencez à compter à partir de zéro).",
"autocloseDisable":"Désactivez la fermeture automatique dans ce ticket.",
"autocloseEnable":"Activez la fermeture automatique dans ce ticket.",
"autodeleteDisable":"Désactivez la suppression automatique dans ce ticket.",
"autodeleteEnable":"Activez la suppression automatique dans ce ticket."
},
"stats":{
"scopes":{
"global":"Statistiques Globales",
"system":"Statistiques Système",
"user":"Statistiques Utilisateur",
"ticket":"Statistiques Ticket",
"participants":"Participants"
},
"properties":{
"ticketsCreated":"Tickets Créés",
"ticketsClosed":"Tickets Fermés",
"ticketsDeleted":"Tickets Supprimés",
"ticketsReopened":"Tickets Rouverts",
"ticketsAutoclosed":"Tickets Fermés Automatiquement",
"ticketsClaimed":"Tickets pris en charge",
"ticketsPinned":"Tickets Épinglés",
"ticketsMoved":"Tickets Déplacés",
"usersBlacklisted":"Utilisateurs en Liste Noire",
"transcriptsCreated":"Transcriptions Créées"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["benzorich"],
"lastedited":"06/10/2024",
"language":"German",
"automated":false
},
"checker":{
"system":{
"typeError":"[ERROR]",
"headerOpenTicket":"OPEN TICKET",
"typeWarning":"[WARNUNG]",
"typeInfo":"[INFO]",
"headerConfigChecker":"CONFIG CHECKER",
"headerDescription":"Prüfen Sie auf Fehler in Ihrer Konfigurationsdateien!",
"footerError":"Der Bot wird nicht starten, bis alle {0}'s repariert sind!",
"footerWarning":"Es wird empfohlen, vor dem Start alle {0}'s zu korrigieren!",
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
"compactInformation":"Verwenden Sie {0} für weitere Informationen!",
"dataPath":"Pfad",
"dataDocs":"docs",
"dataMessages":"Nachricht"
},
"messages":{
"stringTooShort":"Diese Zeichenfolge kann nicht kürzer als {0} Zeichen sein!",
"stringTooLong":"Diese Zeichenfolge darf nicht länger als {0} Zeichen sein!",
"stringLengthInvalid":"Diese Zeichenfolge muss {0} Zeichen lang sein!",
"stringStartsWith":"Diese Zeichenfolge muss mit {0} beginnen!",
"stringEndsWith":"Diese Zeichenfolge muss mit {0} enden!",
"stringContains":"Diese Zeichenfolge muss {0} enthalten!",
"stringChoices":"Diese Zeichenfolge kann nur einen der folgenden Werte annehmen: {0}!",
"stringRegex":"Diese Zeichenfolge ist ungültig!",
"numberTooShort":"Diese Zahl kann nicht kürzer als {0} Zeichen sein!",
"numberTooLong":"Diese Nummer darf nicht länger als {0} Zeichen sein!",
"numberLengthInvalid":"Diese Nummer muss {0} Zeichen lang sein!",
"numberTooSmall":"Diese Zahl muss mindestens {0} sein!",
"numberTooLarge":"Diese Zahl muss höchstens {0} sein!",
"numberNotEqual":"Diese Zahl muss {0} sein!",
"numberStep":"Diese Zahl muss ein Vielfaches von {0} sein!",
"numberStepOffset":"Diese Zahl muss ein Vielfaches von {0} sein und mit {1} beginnen!",
"numberStartsWith":"Diese Zahl muss mit {0} beginnen!",
"numberEndsWith":"Diese Zahl muss mit {0} enden!",
"numberContains":"Diese Zahl muss {0} enthalten!",
"numberChoices":"Diese Zahl kann nur einen der folgenden Werte annehmen: {0}!",
"numberFloat":"Diese Zahl kann keine Dezimalzahl sein!",
"numberNegative":"Diese Zahl kann nicht negativ sein!",
"numberPositive":"Diese Zahl kann nicht positiv sein!",
"numberZero":"Diese Zahl kann nicht Null sein!",
"booleanTrue":"Dieser boolean Wert kann nicht wahr sein!",
"booleanFalse":"Dieser boolean Wert kann nicht falsch sein!",
"arrayEmptyDisabled":"Dieses Array darf nicht leer sein!",
"arrayEmptyRequired":"Dieses Array muss leer sein!",
"arrayTooShort":"Dieses Array muss eine Länge von mindestens {0} haben!",
"arrayTooLong":"Dieses Array darf höchstens eine Länge von {0} haben!",
"arrayLengthInvalid":"Dieses Array muss eine Länge von {0} haben!",
"arrayInvalidTypes":"Dieses Array kann nur die folgenden Typen enthalten: {0}!",
"arrayDouble":"In diesem Array darf derselbe Wert nicht zweimal vorkommen!",
"discordInvalidId":"Dies ist eine ungültige Discord {0} id!",
"discordInvalidIdOptions":"Dies ist eine ungültige Discord {0} id! Du kannst auch eine der folgenden verwenden: {1}!",
"discordInvalidToken":"Das ist ein ungültiger Discord-Token (syntaktisch)!",
"colorInvalid":"Dies ist eine ungültige Hex-Farbe!",
"emojiTooShort":"Diese Zeichenfolge muss mindestens {0} Emojis enthalten!",
"emojiTooLong":"Diese Zeichenfolge darf höchstens {0} Emojis enthalten!",
"emojiCustom":"Dieses Emoji kann kein benutzerdefiniertes Discord-Emoji sein!",
"emojiInvalid":"Dies ist ein ungültiges Emoji!",
"urlInvalid":"Diese Url ist ungültig!",
"urlInvalidHttp":"Diese Url kann nur das https:// Protokoll verwenden!",
"urlInvalidProtocol":"Diese Url kann nur die Protokolle http:// & https:// verwenden!",
"urlInvalidHostname":"Diese Url hat einen unzulässigen Hostnamen!",
"urlInvalidExtension":"Diese Url hat eine ungültige Erweiterung! Wählen Sie zwischen: {0}!",
"urlInvalidPath":"Diese Url hat einen ungültigen Pfad!",
"idNotUnique":"Diese ID ist nicht eindeutig, verwenden Sie stattdessen eine andere ID!",
"idNonExistent":"Die ID {0} existiert nicht!",
"invalidType":"Diese Eigenschaft muss vom Typ sein: {0}!",
"propertyMissing":"Die Eigenschaft {0} fehlt in diesem Objekt!",
"propertyOptional":"Die Eigenschaft {0} ist in diesem Objekt optional!",
"objectDisabled":"Dieses Objekt ist deaktiviert, aktivieren Sie es mit {0}!",
"nullInvalid":"Diese Eigenschaft kann nicht null sein!",
"switchInvalidType":"Dies muss einer der folgenden Typen sein: {0}!",
"objectSwitchInvalid":"Dieses Objekt muss einer der folgenden Typen sein: {0}!",
"invalidLanguage":"Dies ist eine ungültige Sprache!",
"invalidButton":"Dieser Button muss mindestens eine {0} oder {1} enthalten!",
"unusedOption":"Die Option {0} wird nirgends verwendet!",
"unusedQuestion":"Die Frage {0} wird nirgends verwendet!",
"dropdownOption":"Ein Panel mit aktiviertem Dropdown kann nur Optionen vom Typ 'Ticket' enthalten!"
}
},
"actions":{
"buttons":{
"create":"Ticket besuchen",
"close":"Ticket schließen",
"delete":"Ticket löschen",
"reopen":"Ticket wieder öffnen",
"claim":"Ticket beanspruchen",
"unclaim":"Ticket nicht mehr beanspruchen",
"pin":"Ticket anpinnen",
"unpin":"Ticket abpinnen",
"clear":"Tickets löschen",
"helpSwitchSlash":"Slash-Befehle anzeigen",
"helpSwitchText":"Textbefehle anzeigen",
"helpPage":"Seite {0}",
"withReason":"Mit Grund",
"withoutTranscript":"Ohne Transkription"
},
"titles":{
"created":"Ticket erstellt",
"close":"Ticket geschlossen",
"delete":"Ticket Gelöscht",
"reopen":"Ticket wiedereröffnet",
"claim":"Ticket beansprucht",
"unclaim":"Ticket nicht mehr beanspruchen",
"pin":"Ticket angepinnt",
"unpin":"Ticket entpinnt",
"rename":"Ticket umbenannt",
"move":"Ticket verschoben",
"add":"Ticket-Benutzer hinzugefügt",
"remove":"Ticket-Benutzer entfernt",
"help":"Verfügbare Befehle",
"statsReset":"Statistiken zurücksetzen",
"blacklistAdd":"Benutzer auf der Blacklist",
"blacklistRemove":"Benutzer Freigegeben",
"blacklistGet":"Benutzer auf der Blacklist",
"blacklistView":"Aktuelle Blacklist",
"blacklistAddDm":"Zur Blacklist hinzugefügt",
"blacklistRemoveDm":"Von der Blacklist entfernen",
"clear":"Freigegebene Tickets",
"roles":"Aktualisierte Rollen",
"autoclose":"Ticket automatisch geschlossen",
"autocloseEnabled":"Automatisches schließen Aktiviert",
"autocloseDisabled":"Automatisches schließen Deaktiviert",
"autodelete":"Ticket automatisch gelöscht",
"autodeleteEnabled":"Automatisches Löschen Aktiviert",
"autodeleteDisabled":"Automatisches Löschen Deaktiviert"
},
"descriptions":{
"create":"Ihr Ticket wurde bereits erstellt. Klicken Sie auf die Button unten, um es zu öffnen!",
"close":"Das Ticket wurde erfolgreich geschlossen!",
"delete":"Das Ticket wurde erfolgreich gelöscht!",
"reopen":"Das Ticket wurde erfolgreich wiedereröffnet!",
"claim":"Das Ticket wurde erfolgreich beansprucht!",
"unclaim":"Das Ticket wurde erfolgreich freigegeben!",
"pin":"Das Ticket ist erfolgreich angepinnt worden!",
"unpin":"Das Ticket wurde erfolgreich entpinnt!",
"rename":"Das Ticket wurde erfolgreich in {0} umbenannt!",
"move":"Das Ticket wurde erfolgreich nach {0} verschoben!",
"add":"{0} wurde erfolgreich zum Ticket hinzugefügt!",
"remove":"{0} wurde erfolgreich aus dem Ticket entfernt!",
"helpExplanation":"`<name>` => erforderlicher Parameter\n`[name]` => optionaler Parameter",
"statsReset":"Die Bot-Statistiken wurden erfolgreich zurückgesetzt!",
"statsError":"Ticketstatistiken können nicht angezeigt werden!\n{0} ist kein Ticket!",
"blacklistAdd":"{0} wurde erfolgreich auf die Blacklist gesetzt!",
"blacklistRemove":"{0} wurde erfolgreich freigegeben!",
"blacklistGetSuccess":"{0} steht derzeit auf der Blacklist!",
"blacklistGetEmpty":"{0} steht derzeit nicht auf der Blacklist!",
"blacklistViewEmpty":"Es wurde noch niemand auf die Blacklist gesetzt!",
"blacklistViewTip":"Verwenden Sie \"/blacklist add\", um einen Benutzer auf die Blacklist zu setzen!",
"clearVerify":"Sind Sie sicher, dass Sie mehrere Tickets löschen möchten?\nDiese Aktion kann nicht rückgängig gemacht werden!",
"clearReady":"{0} Tickets wurden erfolgreich gelöscht!",
"rolesEmpty":"Es wurden keine Rollen aktualisiert!",
"autocloseLeave":"Dieses Ticket wurde automatisch geschlossen, weil der Ersteller den Server verlassen hat!",
"autocloseTimeout":"Dieses Ticket wurde automatisch geschlossen, da es seit mehr als `{0}h` inaktiv ist!",
"autodeleteLeave":"Dieses Ticket wurde automatisch gelöscht, weil der Ersteller den Server verlassen hat!",
"autodeleteTimeout":"Dieses Ticket wurde automatisch gelöscht, da es seit mehr als `{0} Tagen` inaktiv ist!",
"autocloseEnabled":"Autoclose wurde für dieses Ticket aktiviert! Es wird geschlossen, wenn es länger als `{0}h` inaktiv ist!",
"autocloseDisabled":"Autoclose wurde für dieses Ticket deaktiviert! Es wird nicht mehr automatisch geschlossen!",
"autodeleteEnabled":"Automatisches Löschen wurde für dieses Ticket aktiviert! Es wird gelöscht, wenn es länger als `{0} Tage` inaktiv ist!",
"autodeleteDisabled":"Automatisches Löschen wurde bei diesem Ticket deaktiviert! Es wird nicht mehr automatisch gelöscht!",
"ticketMessageLimit":"Sie können nur {0} Tickets gleichzeitig erstellen!",
"ticketMessageAutoclose":"Dieses Ticket wird automatisch geschlossen, wenn es {0}h lang inaktiv war!",
"ticketMessageAutodelete":"Dieses Ticket wird automatisch gelöscht, wenn es {0} Tage lang inaktiv war!",
"panelReady":"Sie finden das Panel unten!\nDiese Nachricht kann jetzt gelöscht werden!"
},
"modal":{
"closePlaceholder":"Warum haben Sie dieses Ticket geschlossen?",
"deletePlaceholder":"Warum haben Sie dieses Ticket gelöscht?",
"reopenPlaceholder":"Warum haben Sie dieses Ticket erneut geöffnet?",
"claimPlaceholder":"Warum haben Sie dieses Ticket beansprucht?",
"unclaimPlaceholder":"Warum haben Sie dieses Ticket nicht beansprucht?",
"pinPlaceholder":"Warum haben Sie dieses Ticket angepinnt?",
"unpinPlaceholder":"Warum haben Sie dieses Ticket entpinnt?"
},
"logs":{
"createLog":"Ein neues Ticket wurde von {0} erstellt!",
"closeLog":"Dieses Ticket wurde von {0} geschlossen!",
"closeDm":"Ihr Ticket wurde von unserem Server geschlossen!",
"deleteLog":"Dieses Ticket wurde von {0} gelöscht!",
"deleteDm":"Ihr Ticket wurde auf unserem Server gelöscht!",
"reopenLog":"Dieses Ticket wurde von {0} wiedereröffnet!",
"reopenDm":"Ihr Ticket wurde auf unserem Server wieder geöffnet!",
"claimLog":"Dieses Ticket wurde von {0} beansprucht!",
"claimDm":"Ihr Ticket wurde auf unserem Server beansprucht!",
"unclaimLog":"Dieses Ticket wurde von {0} nicht in Anspruch genommen!",
"unclaimDm":"Ihr Ticket wurde von unserem Server nicht beansprucht!",
"pinLog":"Dieses Ticket wurde von {0} angepinnt!",
"pinDm":"Ihr Ticket wurde an unseren Server angepinnt!",
"unpinLog":"Dieses Ticket wurde von {0} entpinnt!",
"unpinDm":"Ihr Ticket wurde auf unserem Server entpinnt!",
"renameLog":"Dieses Ticket wurde von {1} in {0} umbenannt!",
"renameDm":"Ihr Ticket wurde auf unserem Server in {0} umbenannt!",
"moveLog":"Dieses Ticket wurde von {1} nach {0} verschoben!",
"moveDm":"Ihr Ticket wurde auf {0} in unserem Server verschoben!",
"addLog":"{0} wurde von {1} zu diesem Ticket hinzugefügt!",
"addDm":"{0} wurde zu Ihrem Ticket auf unserem Server hinzugefügt!",
"removeLog":"{0} wurde von {1} aus diesem Ticket entfernt!",
"removeDm":"{0} wurde von Ihrem Ticket auf unserem Server entfernt!",
"blacklistAddLog":"{0} wurde von {1} auf die Blacklist gesetzt!",
"blacklistRemoveLog":"{0} wurde von {1} von der Blacklist entfernt!",
"blacklistAddDm":"Sie wurden in unserem Server auf die Blacklist gesetzt!\nAb sofort können Sie kein Ticket mehr erstellen!",
"blacklistRemoveDm":"Sie wurden von der Blacklist unseres Servers entfernt!\n Jetzt können Sie wieder Tickets erstellen!",
"clearLog":"{0} Tickets wurden von {1} gelöscht!"
}
},
"transcripts":{
"success":{
"visit":"Transkript anschauen",
"ready":"Transkript erstellt",
"textFileDescription":"Dies ist die Textabschrift eines gelöschten Tickets!",
"htmlProgress":"Bitte warten Sie, während dieses html-Transkript verarbeitet wird...",
"createdChannel":"Ein neues {0} Transkript wurde auf dem Server erstellt!",
"createdCreator":"Es wurde ein neues {0} Transkript für eines Ihrer Tickets erstellt!",
"createdParticipant":"In einem der Tickets, an denen Sie teilgenommen haben, wurde ein neues {0} Transkript erstellt!",
"createdActiveAdmin":"In einem der Tickets, an dem Sie als Administrator teilgenommen haben, wurde ein neues {0} Transkript erstellt!",
"createdEveryAdmin":"Ein neues {0} Transkript wurde in einem der Tickets erstellt, in dem Sie Administrator waren!",
"createdOther":"Es wurde ein neues {0} Transkript erstellt!"
},
"errors":{
"retry":"Erneut versuchen",
"continue":"Löschen ohne Transkript",
"backup":"Sicherungstranskript erstellen",
"error":"Beim Versuch, das Transkript zu erstellen, ist etwas schief gelaufen.\nWas möchten Sie tun?\n\nDieses Ticket wird erst gelöscht, wenn Sie auf eine der folgenden Buttons klicken."
}
},
"errors":{
"titles":{
"internalError":"Interner Fehler",
"optionMissing":"Befehlsoption fehlt",
"optionInvalid":"Befehlsoption ungültig",
"unknownCommand":"Unbekannter Befehl",
"noPermissions":"Keine Berechtigung",
"unknownTicket":"Unbekanntes Ticket",
"deprecatedTicket":"Veraltetes Ticket",
"unknownOption":"Unbekannte Option",
"unknownPanel":"Unbekanntes Panel",
"notInGuild":"Nicht auf dem Server",
"channelRename":"Kanal kann nicht umbenannt werden",
"busy":"Ticket ist besetzt"
},
"descriptions":{
"askForInfo":"Kontaktieren Sie den Besitzer dieses Bots für weitere Informationen!",
"askForInfoResolve":"Wenden Sie sich an den Besitzer dieses Bots, wenn sich das Problem nach einigen Versuchen nicht beheben lässt.",
"internalError":"Aufgrund eines internen Fehlers konnte auf diese {0} nicht geantwortet werden!",
"optionMissing":"Ein erforderlicher Parameter fehlt in diesem Befehl!",
"optionInvalid":"Ein Parameter in diesem Befehl ist ungültig!",
"optionInvalidChoose":"Wählen Sie zwischen",
"unknownCommand":"Besuchen Sie das Hilfemenü für weitere Informationen!",
"noPermissions":"Sie sind nicht berechtigt, {0} zu verwenden!",
"noPermissionsList":"Erforderliche Berechtigungen: (eine von diesen)",
"noPermissionsCooldown":"Du bist nicht berechtigt, {0} zu benutzen, weil du eine Abklingzeit hast!",
"noPermissionsBlacklist":"Sie sind nicht berechtigt, den {0} zu benutzen, da Sie auf der Blacklist stehen!",
"noPermissionsLimitGlobal":"Sie können kein Ticket erstellen, da der Server die maximale Ticketanzahl erreicht hat!",
"noPermissionsLimitGlobalUser":"Sie können kein Ticket erstellen, weil Sie die maximale Anzahl an Tickets erreicht haben!",
"noPermissionsLimitOption":"Sie können kein Ticket erstellen, da der Server die maximale Ticketanzahl für diese Option erreicht hat!",
"noPermissionsLimitOptionUser":"Sie können kein Ticket erstellen, da Sie die maximale Anzahl an Tickets für diese Option erreicht haben!",
"unknownTicket":"Versuchen Sie diesen Befehl noch einmal mit einem gültigen Ticket!",
"deprecatedTicket":"Der aktuelle Kanal ist kein gültiges Ticket! Es könnte sich um ein Ticket aus einer alten Open Ticket Version handeln!",
"notInGuild":"{0} funktioniert nicht in DM! Bitte versuchen Sie es erneut auf einem Server!",
"channelRename":"Aufgrund von Discord-Ratelimits ist es dem Bot derzeit nicht möglich, den Channel umzubenennen. Der Channel wird nach 10 Minuten automatisch umbenannt, wenn der Bot nicht neu gestartet wird.",
"channelRenameSource":"Die Quelle dieses Fehlers ist: {0}",
"busy":"{0} kann nicht verwendet werden!\nDas Ticket wird derzeit vom Bot bearbeitet.\n\nBitte versuchen Sie es in ein paar Sekunden erneut!"
},
"optionInvalidReasons":{
"stringRegex":"Wert stimmt nicht mit Muster überein!",
"stringMinLength":"Der Wert muss mindestens {0} Zeichen lang sein!",
"stringMaxLength":"Der Wert darf höchstens {0} Zeichen lang sein!",
"numberInvalid":"Ungültige Nummer!",
"numberMin":"Die Zahl muss mindestens {0} sein!",
"numberMax":"Die Zahl muss höchstens {0} sein!",
"numberDecimal":"Die Zahl darf keine Dezimalzahl sein!",
"numberNegative":"Die Zahl darf nicht negativ sein!",
"numberPositive":"Die Zahl darf nicht positiv sein!",
"numberZero":"Die Zahl darf nicht Null sein!",
"channelNotFound":"Kanal kann nicht gefunden werden!",
"userNotFound":"Benutzer kann nicht gefunden werden!",
"roleNotFound":"Rolle kann nicht gefunden werden!",
"memberNotFound":"Benutzer kann nicht gefunden werden!",
"mentionableNotFound":"Benutzer oder Rolle kann nicht gefunden werden!",
"channelType":"Ungültiger Kanaltyp!",
"notInGuild":"Diese Option setzt voraus, dass Sie sich auf einem Server befinden!"
},
"permissions":{
"developer":"Sie müssen der Entwickler des Bots sein.",
"owner":"Sie müssen der Eigentümer des Servers sein.",
"admin":"Sie müssen ein Server-Administrator sein.",
"moderator":"Sie müssen ein Moderator sein.",
"support":"Sie müssen dem Support-Team angehören.",
"member":"Sie müssen Mitglied sein.",
"discord-administrator":"Sie benötigen die Berechtigung `ADMINISTRATOR`."
},
"actionInvalid":{
"close":"Das Ticket ist bereits geschlossen!",
"reopen":"Das Ticket ist noch nicht geschlossen!",
"claim":"Das Ticket wurde bereits beansprucht!",
"unclaim":"Das Ticket wurde noch nicht beansprucht!",
"pin":"Das Ticket ist bereits angepinnt!",
"unpin":"Das Ticket ist noch nicht angepinnt!",
"add":"Dieser Benutzer kann bereits auf das Ticket zugreifen!",
"remove":"Dieser Benutzer kann nicht aus dem Ticket entfernt werden!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickets",
"reason":"Grund",
"creator":"Ersteller",
"remaining":"Verbleibende Zeit",
"added":"Hinzugefügt",
"removed":"Entfernt",
"filter":"Filter",
"claimedBy":"Beansprucht von {0}",
"method":"Methode",
"type":"Typ",
"blacklisted":"Gesperrt",
"panel":"Panel",
"command":"Command",
"system":"System",
"true":"True",
"false":"False",
"syntax":"Syntax",
"originalName":"Ursprünglicher Name",
"newName":"Neuer Name",
"until":"Bis",
"validOptions":"Gültige Optionen",
"validPanels":"Gültige Panels",
"autoclose":"Autoclose",
"autodelete":"Autolöschung",
"startupDate":"Startdatum",
"version":"Version",
"name":"Name",
"role":"Rolle",
"status":"Status",
"claimed":"Beansprucht",
"pinned":"Angepinnt",
"creationDate":"Erstellungsdatum"
},
"lowercase":{
"text":"text",
"html":"html",
"command":"command",
"modal":"modal",
"button":"button",
"dropdown":"dropdown",
"method":"methode"
}
},
"commands":{
"reason":"Geben Sie einen optionalen Grund an, der in den Protokollen sichtbar sein wird.",
"help":"Abrufen einer Liste aller verfügbaren Befehle.",
"panel":"Erzeugen Sie eine Nachricht mit einer Dropdown-Liste oder Buttons (für die Erstellung von Tickets).",
"panelId":"Der Kennung des Panels, das Sie erzeugen wollen.",
"panelAutoUpdate":"Möchten Sie, dass dieses Feld bei der Bearbeitung automatisch aktualisiert wird?",
"ticket":"Erstellen Sie sofort ein Ticket.",
"ticketId":"Der Kennung des Panels, das Sie erzeugen wollen.",
"close":"Schließen Sie ein Ticket.",
"delete":"Ein Ticket löschen.",
"deleteNoTranscript":"Löschen Sie dieses Ticket, ohne ein Transkript zu erstellen.",
"reopen":"Öffnen Sie ein Ticket erneut.",
"claim":"Ein Ticket beanspruchen.",
"claimUser":"Beanspruchen Sie dieses Ticket für jemand anderen statt für sich selbst.",
"unclaim":"Beanspruchen Sie ein Ticket zurück.",
"pin":"Pinne ein Ticket an.",
"unpin":"Pinne ein Ticket ab.",
"move":"Verschieben Sie ein Ticket.",
"moveId":"Die Kennung der Option.",
"rename":"Ein Ticket umbenennen.",
"renameName":"Der neue Name für dieses Ticket.",
"add":"Fügen Sie einen Benutzer zu einem Ticket hinzu.",
"addUser":"Der hinzuzufügende Benutzer.",
"remove":"Entfernen Sie einen Benutzer aus einem Ticket.",
"removeUser":"Der zu entfernende Benutzer.",
"blacklist":"Verwalten Sie die Blacklist für Tickets.",
"blacklistView":"Zeigen Sie eine Liste der aktuellen Blacklist an.",
"blacklistAdd":"Hinzufügen eines Benutzers zur Blacklist.",
"blacklistRemove":"Entfernen Sie einen Benutzer von der Blacklist.",
"blacklistGet":"Abrufen der Details eines auf der Blacklist stehenden Benutzers.",
"blacklistGetUser":"Der Benutzer, von dem Details abgerufen werden sollen.",
"stats":"Statistiken des Bots, eines Mitglieds oder eines Tickets anzeigen.",
"statsReset":"Setzt alle Statistiken des Bots zurück (und beginnt die Zählung bei Null).",
"statsGlobal":"Sehen Sie sich die Gesamtstatistiken an.",
"statsUser":"Zeigt die Statistiken eines Benutzers auf dem Server an.",
"statsUserUser":"Der zu betrachtende Benutzer.",
"statsTicket":"Anzeigen der Statistiken eines Tickets auf dem Server.",
"statsTicketTicket":"Das Ticket zur Betrachtung.",
"clear":"Mehrere Tickets gleichzeitig löschen. Optional kann ein Filter angegeben werden.",
"clearFilter":"Der Filter zum Löschen von Tickets.",
"clearFilters":{
"all":"Alle",
"open":"Offen",
"close":"Geschlossen",
"claim":"Beansprucht",
"unclaim":"Nicht beanspruchte",
"pin":"Angepinnte",
"unpin":"nicht Angepinnte",
"autoclose":"Autoclosed"
},
"autoclose":"Verwalten Sie die automatische Schließung in einem Ticket.",
"autocloseDisable":"Deaktivieren Sie das automatische Schließen in diesem Ticket.",
"autocloseEnable":"Aktivieren Sie das automatische Schließen in diesem Ticket.",
"autocloseEnableTime":"Die Anzahl der Stunden, die das Ticket inaktiv sein muss, um es zu schließen.",
"autodelete":"Verwalten Sie die automatische Löschung in einem Ticket.",
"autodeleteDisable":"Deaktivieren Sie das automatische Löschen in diesem Ticket.",
"autodeleteEnable":"Aktivieren Sie das automatische Löschen in diesem Ticket.",
"autodeleteEnableTime":"Die Anzahl der Tage, die das Ticket inaktiv sein muss, um es zu löschen."
},
"helpMenu":{
"help":"Erhalten Sie eine Liste mit allen verfügbaren Befehlen.",
"ticket":"Erstellen Sie sofort ein Ticket.",
"close":"Schließen Sie ein Ticket, um das Schreiben in diesem Kanal zu deaktivieren.",
"delete":"Löscht ein Ticket; wenn aktiviert, wird eine Transcript erstellt.",
"reopen":"Öffnen Sie ein Ticket erneut, damit Sie wieder in diesem Kanal schreiben können.",
"pin":"Ein Ticket anheften. Es wird nach oben verschoben und ein 📌 zum Namen hinzugefügt.",
"unpin":"Entpinnen Sie ein Ticket. Es bleibt an seiner Position, verliert aber das 📌-Emoji.",
"move":"Verschieben Sie ein Ticket. Dadurch wird der Typ dieses Tickets geändert.",
"rename":"Ein Ticket umbenennen. Dadurch wird der Kanalname dieses Tickets geändert.",
"claim":"Ein Ticket beanspruchen. Damit können Sie Ihrem Team mitteilen, dass Sie dieses Ticket bearbeiten.",
"unclaim":"Ticket zurück beanspruchen, um Ihrem Team zu zeigen, dass es wieder verfügbar ist.",
"add":"Benutzer zu einem Ticket hinzufügen, um ihm Lese- und Schreibrechte zu geben.",
"remove":"Benutzer aus einem Ticket entfernen, um seine Lese- und Schreibrechte zu entziehen.",
"panel":"Erzeugen Sie eine Nachricht mit einer Dropdown-Liste oder Buttons (für die Erstellung von Tickets).",
"blacklistView":"Zeigen Sie eine Liste der aktuellen Blacklist an.",
"blacklistAdd":"Hinzufügen eines Benutzers zur Blacklist.",
"blacklistRemove":"Entfernen Sie einen Benutzer von der Blacklist.",
"blacklistGet":"Abrufen der Details eines auf der Blacklist stehenden Benutzers.",
"statsGlobal":"Sehen Sie sich die Gesamtstatistiken an.",
"statsTicket":"Anzeigen der Statistiken eines Tickets auf dem Server.",
"statsUser":"Zeigt die Statistiken eines Benutzers auf dem Server an.",
"statsReset":"Setzt alle Statistiken des Bots zurück (und beginnt die Zählung bei Null).",
"autocloseDisable":"Deaktivieren Sie das automatische Schließen in diesem Ticket.",
"autocloseEnable":"Aktivieren Sie das automatische Schließen in diesem Ticket.",
"autodeleteDisable":"Deaktivieren Sie das automatische Löschen in diesem Ticket.",
"autodeleteEnable":"Aktivieren Sie das automatische Löschen in diesem Ticket."
},
"stats":{
"scopes":{
"global":"Globale-Statistiken",
"system":"System-Statistiken",
"user":"Benutzer-Statistiken",
"ticket":"Ticket-Statistiken",
"participants":"Teilnehmer"
},
"properties":{
"ticketsCreated":"Tickets erstellt",
"ticketsClosed":"Tickets geschlossen",
"ticketsDeleted":"Tickets gelöscht",
"ticketsReopened":"Tickets wiedereröffnet",
"ticketsAutoclosed":"Tickets Autoclosed",
"ticketsClaimed":"Tickets beansprucht",
"ticketsPinned":"Tickets angepinnt",
"ticketsMoved":"Tickets verschoben",
"usersBlacklisted":"Nutzer auf der Blacklist",
"transcriptsCreated":"Transcripts erstellt"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["an_developer"],
"lastedited":"14/12/2024",
"language":"Hindi",
"automated":false
},
"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":"यह संख्या {1} से शुरू होकर {0} का गुणज होनी चाहिए!",
"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} आईडी है!",
"discordInvalidIdOptions":"यह एक अमान्य कलह {0} आईडी है! ",
"discordInvalidToken":"यह एक अमान्य कलह टोकन है (वाक्यविन्यास की दृष्टि से)!",
"colorInvalid":"यह अमान्य हेक्स रंग है!",
"emojiTooShort":"इस स्ट्रिंग में कम से कम {0} इमोजी होना आवश्यक है!",
"emojiTooLong":"इस स्ट्रिंग में अधिकतम {0} इमोजी होना आवश्यक है!",
"emojiCustom":"यह इमोजी कस्टम डिसॉर्डर इमोजी नहीं हो सकता!",
"emojiInvalid":"यह एक अमान्य इमोजी है!",
"urlInvalid":"यह यूआरएल अमान्य है!",
"urlInvalidHttp":"यह यूआरएल केवल https:// प्रोटोकॉल का उपयोग कर सकता है!",
"urlInvalidProtocol":"यह यूआरएल केवल http:// और https:// प्रोटोकॉल का उपयोग कर सकता है!",
"urlInvalidHostname":"इस यूआरएल में एक अस्वीकृत होस्टनाम है!",
"urlInvalidExtension":"इस यूआरएल में एक अमान्य एक्सटेंशन है! ",
"urlInvalidPath":"इस यूआरएल में एक अमान्य पथ है!",
"idNotUnique":"यह आईडी अद्वितीय नहीं है, इसके बजाय किसी अन्य आईडी का उपयोग करें!",
"idNonExistent":"आईडी {0} मौजूद नहीं है!",
"invalidType":"यह संपत्ति इस प्रकार की होनी चाहिए: {0}!",
"propertyMissing":"इस ऑब्जेक्ट में संपत्ति {0} गायब है!",
"propertyOptional":"इस ऑब्जेक्ट में संपत्ति {0} वैकल्पिक है!",
"objectDisabled":"यह ऑब्जेक्ट अक्षम है, इसे {0} का उपयोग करके सक्षम करें!",
"nullInvalid":"यह संपत्ति शून्य नहीं हो सकती!",
"switchInvalidType":"इसे निम्न प्रकारों में से एक होना आवश्यक है: {0}!",
"objectSwitchInvalid":"यह ऑब्जेक्ट निम्न प्रकारों में से एक होना चाहिए: {0}!",
"invalidLanguage":"यह एक अमान्य भाषा है!",
"invalidButton":"इस बटन पर कम से कम {0} या {1} होना आवश्यक है!",
"unusedOption":"विकल्प {0} का उपयोग कहीं भी नहीं किया जाता है!",
"unusedQuestion":"प्रश्न {0} का प्रयोग कहीं भी नहीं किया गया है!",
"dropdownOption":"ड्रॉपडाउन सक्षम पैनल में केवल 'टिकट' प्रकार के विकल्प हो सकते हैं!"
}
},
"actions":{
"buttons":{
"create":"विजिट टिकट",
"close":"टिकट बंद करें",
"delete":"टिकट हटाएँ",
"reopen":"टिकट पुनः खोलें",
"claim":"टिकट का दावा करें",
"unclaim":"लावारिस टिकट",
"pin":"टिकट पिन करें",
"unpin":"टिकट अनपिन करें",
"clear":"टिकट हटाएँ",
"helpSwitchSlash":"स्लैश कमांड देखें",
"helpSwitchText":"टेक्स्ट कमांड देखें",
"helpPage":"पेज {0}",
"withReason":"कारण के साथ",
"withoutTranscript":"प्रतिलेख के बिना"
},
"titles":{
"created":"टिकट बनाया गया",
"close":"टिकट बंद",
"delete":"टिकट हटा दिया गया",
"reopen":"टिकट पुनः खोला गया",
"claim":"टिकट का दावा किया गया",
"unclaim":"टिकट लावारिस",
"pin":"टिकट पिन किया गया",
"unpin":"टिकट अनपिन किया गया",
"rename":"टिकट का नाम बदला गया",
"move":"टिकट स्थानांतरित",
"add":"टिकट उपयोगकर्ता जोड़ा गया",
"remove":"टिकट उपयोगकर्ता हटा दिया गया",
"help":"उपलब्ध आदेश",
"statsReset":"आँकड़े रीसेट करें",
"blacklistAdd":"उपयोगकर्ता को ब्लैकलिस्ट किया गया",
"blacklistRemove":"उपयोगकर्ता जारी किया गया",
"blacklistGet":"ब्लैकलिस्टेड उपयोगकर्ता",
"blacklistView":"वर्तमान ब्लैकलिस्ट",
"blacklistAddDm":"ब्लैकलिस्ट में जोड़ा गया",
"blacklistRemoveDm":"काली सूची से हटाया गया",
"clear":"टिकट साफ़ हो गए",
"roles":"भूमिकाएँ अद्यतन की गईं",
"autoclose":"टिकट स्वतः बंद",
"autocloseEnabled":"स्वत: बंद सक्षम",
"autocloseDisabled":"स्वत: बंद अक्षम",
"autodelete":"टिकट स्वतः हटा दिया गया",
"autodeleteEnabled":"स्वतः हटाना सक्षम",
"autodeleteDisabled":"स्वतः हटाना अक्षम"
},
"descriptions":{
"create":"आपका टिकट बन गया है. ",
"close":"टिकट सफलतापूर्वक बंद कर दिया गया है!",
"delete":"टिकट सफलतापूर्वक हटा दिया गया है!",
"reopen":"टिकट सफलतापूर्वक पुनः खोल दिया गया है!",
"claim":"टिकट का सफलतापूर्वक दावा किया गया है!",
"unclaim":"टिकट सफलतापूर्वक लावारिस हो गया है!",
"pin":"टिकट सफलतापूर्वक पिन कर दिया गया है!",
"unpin":"टिकट सफलतापूर्वक अनपिन कर दिया गया है!",
"rename":"टिकट का नाम बदलकर सफलतापूर्वक {0} कर दिया गया है!",
"move":"टिकट को सफलतापूर्वक {0} पर ले जाया गया है!",
"add":"{0} को टिकट में सफलतापूर्वक जोड़ दिया गया है!",
"remove":"{0} को टिकट से सफलतापूर्वक हटा दिया गया है!",
"helpExplanation":"`<name>` => आवश्यक पैरामीटर\n",
"statsReset":"बॉट आँकड़े सफलतापूर्वक रीसेट कर दिए गए हैं!",
"statsError":"टिकट आँकड़े देखने में असमर्थ!\n",
"blacklistAdd":"{0} को सफलतापूर्वक काली सूची में डाल दिया गया है!",
"blacklistRemove":"{0} सफलतापूर्वक जारी कर दिया गया है!",
"blacklistGetSuccess":"{0} वर्तमान में ब्लैकलिस्टेड है!",
"blacklistGetEmpty":"{0} वर्तमान में काली सूची में नहीं डाला गया है!",
"blacklistViewEmpty":"अभी तक किसी को भी काली सूची में नहीं डाला गया है!",
"blacklistViewTip":"किसी उपयोगकर्ता को ब्लैकलिस्ट करने के लिए \"/ब्लैकलिस्ट ऐड\" का उपयोग करें!",
"clearVerify":"क्या आप वाकई एकाधिक टिकट हटाना चाहते हैं?\n",
"clearReady":"{0} टिकट सफलतापूर्वक हटा दिए गए हैं!",
"rolesEmpty":"कोई भूमिका अद्यतन नहीं की गई है!",
"autocloseLeave":"यह टिकट स्वतः बंद हो गया है क्योंकि निर्माता ने सर्वर छोड़ दिया है!",
"autocloseTimeout":"यह टिकट स्वतः बंद कर दिया गया है क्योंकि यह `{0}h` से अधिक समय से निष्क्रिय है!",
"autodeleteLeave":"यह टिकट स्वतः हटा दिया गया है क्योंकि निर्माता ने सर्वर छोड़ दिया है!",
"autodeleteTimeout":"यह टिकट स्वतः हटा दिया गया है क्योंकि यह `{0} दिनों` से अधिक समय से निष्क्रिय है!",
"autocloseEnabled":"इस टिकट में ऑटोक्लोज़ सक्षम कर दिया गया है!\n",
"autocloseDisabled":"इस टिकट में ऑटोक्लोज़ अक्षम कर दिया गया है!\n",
"autodeleteEnabled":"इस टिकट में ऑटोडिलीट सक्षम कर दिया गया है!\n",
"autodeleteDisabled":"इस टिकट में ऑटोडिलीट अक्षम कर दिया गया है!\n",
"ticketMessageLimit":"आप एक ही समय में केवल {0} टिकट बना सकते हैं!",
"ticketMessageAutoclose":"{0}घंटे तक निष्क्रिय रहने पर यह टिकट स्वतः बंद हो जाएगा!",
"ticketMessageAutodelete":"{0} दिनों तक निष्क्रिय रहने पर यह टिकट स्वतः हटा दिया जाएगा!",
"panelReady":"आप नीचे पैनल पा सकते हैं!\n"
},
"modal":{
"closePlaceholder":"आपने यह टिकट क्यों बंद कर दिया?",
"deletePlaceholder":"आपने यह टिकट क्यों हटा दिया?",
"reopenPlaceholder":"आपने यह टिकट दोबारा क्यों खोला?",
"claimPlaceholder":"आपने इस टिकट के लिए दावा क्यों किया?",
"unclaimPlaceholder":"आपने इस टिकट पर दावा क्यों रद्द कर दिया?",
"pinPlaceholder":"आपने यह टिकट पिन क्यों किया?",
"unpinPlaceholder":"आपने इस टिकट को अनपिन क्यों किया?"
},
"logs":{
"createLog":"{0} द्वारा एक नया टिकट बनाया गया!",
"closeLog":"यह टिकट {0} द्वारा बंद कर दिया गया है!",
"closeDm":"आपका टिकट हमारे सर्वर में बंद कर दिया गया है!",
"deleteLog":"यह टिकट {0} द्वारा हटा दिया गया है!",
"deleteDm":"आपका टिकट हमारे सर्वर से हटा दिया गया है!",
"reopenLog":"यह टिकट {0} द्वारा पुनः खोल दिया गया है!",
"reopenDm":"आपका टिकट हमारे सर्वर में फिर से खोल दिया गया है!",
"claimLog":"इस टिकट पर {0} द्वारा दावा किया गया है!",
"claimDm":"आपके टिकट का दावा हमारे सर्वर में कर दिया गया है!",
"unclaimLog":"यह टिकट {0} द्वारा लावारिस कर दिया गया है!",
"unclaimDm":"आपका टिकट हमारे सर्वर में लावारिस हो गया है!",
"pinLog":"यह टिकट {0} द्वारा पिन किया गया है!",
"pinDm":"आपका टिकट हमारे सर्वर में पिन कर दिया गया है!",
"unpinLog":"यह टिकट {0} द्वारा अनपिन कर दिया गया है!",
"unpinDm":"आपका टिकट हमारे सर्वर पर अनपिन कर दिया गया है!",
"renameLog":"इस टिकट का नाम बदलकर {1} द्वारा {0} कर दिया गया है!",
"renameDm":"हमारे सर्वर में आपके टिकट का नाम बदलकर {0} कर दिया गया है!",
"moveLog":"इस टिकट को {1} द्वारा {0} में स्थानांतरित कर दिया गया है!",
"moveDm":"आपका टिकट हमारे सर्वर में {0} पर स्थानांतरित कर दिया गया है!",
"addLog":"इस टिकट में {1} द्वारा {0} जोड़ा गया है!",
"addDm":"हमारे सर्वर में आपके टिकट में {0} जोड़ दिया गया है!",
"removeLog":"{1} द्वारा इस टिकट से {0} हटा दिया गया है!",
"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"
}
},
"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":"वर्तमान चैनल वैध टिकट नहीं है! ",
"notInGuild":"यह {0} डीएम में काम नहीं करता! ",
"channelRename":"विवाद की दर सीमा के कारण, वर्तमान में बॉट के लिए चैनल का नाम बदलना असंभव है। ",
"channelRenameSource":"इस त्रुटि का स्रोत है: {0}",
"busy":"इस {0} का उपयोग करने में असमर्थ!\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":"आपके पास `प्रशासक` की अनुमति होनी चाहिए।"
},
"actionInvalid":{
"close":"टिकट पहले ही बंद हो चुका है!",
"reopen":"टिकट अभी बंद नहीं हुआ है!",
"claim":"टिकट का दावा पहले ही हो चुका है!",
"unclaim":"अभी तक टिकट का दावा नहीं किया गया है!",
"pin":"टिकट पहले ही पिन हो चुका है!",
"unpin":"टिकट अभी तक पिन नहीं किया गया है!",
"add":"यह उपयोगकर्ता पहले से ही टिकट तक पहुंचने में सक्षम है!",
"remove":"इस उपयोगकर्ता को टिकट से हटाने में असमर्थ!"
}
},
"params":{
"uppercase":{
"ticket":"टिकट",
"tickets":"टिकट",
"reason":"कारण",
"creator":"निर्माता",
"remaining":"शेष समय",
"added":"जोड़ा",
"removed":"निकाला गया",
"filter":"फ़िल्टर",
"claimedBy":"{0} द्वारा दावा किया गया",
"method":"तरीका",
"type":"प्रकार",
"blacklisted":"ब्लैक लिस्ट किया",
"panel":"पैनल",
"command":"आज्ञा",
"system":"प्रणाली",
"true":"सत्य",
"false":"असत्य",
"syntax":"सिंटेक्स",
"originalName":"मूल नाम",
"newName":"नया नाम",
"until":"जब तक",
"validOptions":"वैध विकल्प",
"validPanels":"वैध पैनल",
"autoclose":"स्वतः",
"autodelete":"स्वतः हटाएं",
"startupDate":"अद्यतनीकरण शुरू करें",
"version":"संस्करण",
"name":"नाम",
"role":"भूमिका",
"status":"स्थिति",
"claimed":"दावा किया",
"pinned":"पिन की गई",
"creationDate":"निर्माण तिथि"
},
"lowercase":{
"text":"मूलपाठ",
"html":"एचटीएमएल",
"command":"आज्ञा",
"modal":"मॉडल",
"button":"बटन",
"dropdown":"ड्रॉप डाउन",
"method":"तरीका"
}
},
"commands":{
"reason":"एक वैकल्पिक कारण निर्दिष्ट करें जो लॉग में दिखाई देगा।",
"help":"सभी उपलब्ध आदेशों की सूची प्राप्त करें.",
"panel":"ड्रॉपडाउन या बटन (टिकट निर्माण के लिए) के साथ एक संदेश भेजें।",
"panelId":"उस पैनल का पहचानकर्ता जिसे आप स्पॉन करना चाहते हैं.",
"panelAutoUpdate":"क्या आप चाहते हैं कि संपादित होने पर यह पैनल स्वचालित रूप से अपडेट हो जाए?",
"ticket":"तुरंत टिकट बनाएं.",
"ticketId":"उस टिकट का पहचानकर्ता जिसे आप बनाना चाहते हैं.",
"close":"एक टिकट बंद करें.",
"delete":"एक टिकट हटाएँ.",
"deleteNoTranscript":"प्रतिलेख बनाए बिना इस टिकट को हटा दें।",
"reopen":"टिकट दोबारा खोलें.",
"claim":"टिकट का दावा करें.",
"claimUser":"इस टिकट का दावा अपने बजाय किसी और के लिए करें।",
"unclaim":"टिकट का दावा रद्द करें.",
"pin":"टिकट पिन करें.",
"unpin":"टिकट अनपिन करें.",
"move":"एक टिकट ले जाएँ.",
"moveId":"उस विकल्प का पहचानकर्ता जिस पर आप जाना चाहते हैं.",
"rename":"टिकट का नाम बदलें.",
"renameName":"इस टिकट का नया नाम.",
"add":"किसी उपयोगकर्ता को टिकट में जोड़ें.",
"addUser":"उपयोगकर्ता को जोड़ना है.",
"remove":"किसी उपयोगकर्ता को टिकट से हटाएँ.",
"removeUser":"उपयोगकर्ता को हटाना है.",
"blacklist":"टिकट ब्लैकलिस्ट प्रबंधित करें.",
"blacklistView":"वर्तमान ब्लैकलिस्ट की सूची देखें.",
"blacklistAdd":"किसी उपयोगकर्ता को काली सूची में जोड़ें.",
"blacklistRemove":"किसी उपयोगकर्ता को काली सूची से हटाएँ.",
"blacklistGet":"ब्लैकलिस्टेड उपयोगकर्ता से विवरण प्राप्त करें।",
"blacklistGetUser":"जिस उपयोगकर्ता से विवरण प्राप्त करना है.",
"stats":"बॉट, सदस्य या टिकट से आँकड़े देखें।",
"statsReset":"बॉट के सभी आँकड़े रीसेट करें (और शून्य से गिनती शुरू करें)।",
"statsGlobal":"वैश्विक आँकड़े देखें.",
"statsUser":"सर्वर में किसी उपयोगकर्ता के आँकड़े देखें।",
"statsUserUser":"देखने के लिए उपयोगकर्ता.",
"statsTicket":"सर्वर में टिकट के आँकड़े देखें।",
"statsTicketTicket":"देखने के लिए टिकट.",
"clear":"एक ही समय में एकाधिक टिकट हटाएँ।",
"clearFilter":"टिकट साफ़ करने के लिए फ़िल्टर.",
"clearFilters":{
"all":"सभी",
"open":"खुला",
"close":"बंद किया हुआ",
"claim":"दावा किया",
"unclaim":"लावारिस",
"pin":"पिन की गई",
"unpin":"अनपिन किया गया",
"autoclose":"स्वतः बंद"
},
"autoclose":"किसी टिकट में ऑटोक्लोज़ प्रबंधित करें.",
"autocloseDisable":"इस टिकट में ऑटोक्लोज़ अक्षम करें.",
"autocloseEnable":"इस टिकट में ऑटोक्लोज़ सक्षम करें।",
"autocloseEnableTime":"इस टिकट को बंद करने के लिए कितने घंटे निष्क्रिय रहने की आवश्यकता है।",
"autodelete":"किसी टिकट में स्वत: हटाना प्रबंधित करें.",
"autodeleteDisable":"इस टिकट में ऑटोडिलीट अक्षम करें।",
"autodeleteEnable":"इस टिकट में ऑटोडिलीट सक्षम करें।",
"autodeleteEnableTime":"इस टिकट को हटाने के लिए उतने दिनों की संख्या निष्क्रिय होनी चाहिए।"
},
"helpMenu":{
"help":"सभी उपलब्ध आदेशों की सूची प्राप्त करें.",
"ticket":"तुरंत टिकट बनाएं.",
"close":"टिकट बंद करें, इससे इस चैनल में लिखना अक्षम हो जाएगा।",
"delete":"टिकट हटाएं, सक्षम होने पर यह एक प्रतिलेख बनाता है।",
"reopen":"टिकट दोबारा खोलें, इससे इस चैनल में फिर से लिखना संभव हो जाएगा।",
"pin":"टिकट पिन करें. ",
"unpin":"टिकट अनपिन करें. ",
"move":"एक टिकट ले जाएँ. ",
"rename":"टिकट का नाम बदलें. ",
"claim":"टिकट का दावा करें. ",
"unclaim":"टिकट का दावा रद्द करें. ",
"add":"किसी उपयोगकर्ता को टिकट में जोड़ें. ",
"remove":"किसी उपयोगकर्ता को टिकट से हटाएँ. ",
"panel":"ड्रॉपडाउन या बटन (टिकट निर्माण के लिए) के साथ एक संदेश भेजें।",
"blacklistView":"वर्तमान ब्लैकलिस्ट की सूची देखें.",
"blacklistAdd":"किसी उपयोगकर्ता को काली सूची में जोड़ें.",
"blacklistRemove":"किसी उपयोगकर्ता को काली सूची से हटाएँ.",
"blacklistGet":"ब्लैकलिस्टेड उपयोगकर्ता से विवरण प्राप्त करें।",
"statsGlobal":"वैश्विक आँकड़े देखें.",
"statsTicket":"सर्वर में टिकट के आँकड़े देखें।",
"statsUser":"सर्वर में किसी उपयोगकर्ता के आँकड़े देखें।",
"statsReset":"बॉट के सभी आँकड़े रीसेट करें (और शून्य से गिनती शुरू करें)।",
"autocloseDisable":"इस टिकट में ऑटोक्लोज़ अक्षम करें.",
"autocloseEnable":"इस टिकट में ऑटोक्लोज़ सक्षम करें।",
"autodeleteDisable":"इस टिकट में ऑटोडिलीट अक्षम करें।",
"autodeleteEnable":"इस टिकट में ऑटोडिलीट सक्षम करें।"
},
"stats":{
"scopes":{
"global":"वैश्विक आँकड़े",
"system":"सिस्टम आँकड़े",
"user":"उपयोगकर्ता आँकड़े",
"ticket":"टिकट आँकड़े",
"participants":"प्रतिभागियों"
},
"properties":{
"ticketsCreated":"टिकट बनाये गये",
"ticketsClosed":"टिकट बंद",
"ticketsDeleted":"टिकटें हटा दी गईं",
"ticketsReopened":"टिकट पुनः खोले गए",
"ticketsAutoclosed":"टिकट स्वतः बंद",
"ticketsClaimed":"टिकट का दावा किया गया",
"ticketsPinned":"टिकट पिन किये गये",
"ticketsMoved":"टिकट ले जाया गया",
"usersBlacklisted":"उपयोगकर्ता ब्लैकलिस्टेड",
"transcriptsCreated":"प्रतिलिपियाँ बनाई गईं"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["Kornel0706"],
"lastedited":"22/08/2024",
"language":"Hungarian",
"automated":false
},
"checker":{
"system":{
"typeError":"[HIBA]",
"headerOpenTicket":"NYITOTT JEGY",
"typeWarning":"[FIGYELMEZTETÉS]",
"typeInfo":"[INFORMÁCIÓ]",
"headerConfigChecker":"KONFIGURÁCIÓ ELLENŐRZÉS",
"headerDescription":"hibaellenőrzés a konfigurációdban!",
"footerError":"a bot nem indul el, amíg a következőket nem javítod ki: {0}!",
"footerWarning":"ajánlott javítani a következőket az indítás előtt: {0}!",
"footerSupport":"SUPPORT: {0} - DOKUMENTÁCIÓ: {1}",
"compactInformation":"használd a következőt: {0} további információkért!",
"dataPath":"útvonal",
"dataDocs":"dokumentáció",
"dataMessages":"üzenet"
},
"messages":{
"stringTooShort":"Ez a karakterlánc nem lehet rövidebb, mint {0} karakter!",
"stringTooLong":"Ez a karakterlánc nem lehet hosszabb, mint {0} karakter!",
"stringLengthInvalid":"Ez a karakterlánc {0} karakter hosszúnak kell lennie!",
"stringStartsWith":"Ennek a karakterláncnak {0}-al kell kezdődnie!",
"stringEndsWith":"Ennek a karakterláncnak {0}-al kell végződnie!",
"stringContains":"Ennek a karakterláncnak tartalmaznia kell {0}-t!",
"stringChoices":"Ez a karakterlánc csak a következő értékek egyike lehet: {0}!",
"stringRegex":"Ez a karakterlánc érvénytelen!",
"numberTooShort":"Ez a szám nem lehet rövidebb, mint {0} karakter!",
"numberTooLong":"Ez a szám nem lehet hosszabb, mint {0} karakter!",
"numberLengthInvalid":"Ez a szám {0} karakter hosszúnak kell lennie!",
"numberTooSmall":"Ennek a számnak legalább {0}-nak kell lennie!",
"numberTooLarge":"Ennek a számnak legfeljebb {0}-nak kell lennie!",
"numberNotEqual":"Ennek a számnak pontosan {0}-nak kell lennie!",
"numberStep":"Ennek a számnak a következő többszörösének kell lennie: {0}!",
"numberStepOffset":"Ennek a számnak a következő többszörösének kell lennie: {0}, kezdve {1}-el!",
"numberStartsWith":"Ennek a számnak {0}-al kell kezdődnie!",
"numberEndsWith":"Ennek a számnak {0}-al kell végződnie!",
"numberContains":"Ennek a számnak tartalmaznia kell {0}-t!",
"numberChoices":"Ez a szám csak a következő értékek egyike lehet: {0}!",
"numberFloat":"Ez a szám nem lehet tizedes!",
"numberNegative":"Ez a szám nem lehet negatív!",
"numberPositive":"Ez a szám nem lehet pozitív!",
"numberZero":"Ez a szám nem lehet nulla!",
"booleanTrue":"Ez a logikai érték nem lehet igaz!",
"booleanFalse":"Ez a logikai érték nem lehet hamis!",
"arrayEmptyDisabled":"Ez a tömb nem lehet üres!",
"arrayEmptyRequired":"Ez a tömb üresnek kell lennie!",
"arrayTooShort":"Ennek a tömbnek legalább {0} hosszúnak kell lennie!",
"arrayTooLong":"Ennek a tömbnek legfeljebb {0} hosszúnak kell lennie!",
"arrayLengthInvalid":"Ennek a tömbnek pontosan {0} hosszúnak kell lennie!",
"arrayInvalidTypes":"Ez a tömb csak a következő típusokat tartalmazhatja: {0}!",
"arrayDouble":"Ez a tömb nem engedélyezi ugyanazt az értéket kétszer!",
"discordInvalidId":"Ez egy érvénytelen discord {0} azonosító!",
"discordInvalidIdOptions":"Ez egy érvénytelen discord {0} azonosító! Használhatja a következő lehetőségek egyikét is: {1}!",
"discordInvalidToken":"Ez egy érvénytelen discord token (szintaktikailag)!",
"colorInvalid":"Ez egy érvénytelen hex szín!",
"emojiTooShort":"Ennek a karakterláncnak legalább {0} emoji-t kell tartalmaznia!",
"emojiTooLong":"Ennek a karakterláncnak legfeljebb {0} emoji-t kell tartalmaznia!",
"emojiCustom":"Ez az emoji nem lehet egy egyéni discord emoji!",
"emojiInvalid":"Ez egy érvénytelen emoji!",
"urlInvalid":"Ez egy érvénytelen URL!",
"urlInvalidHttp":"Ez az URL csak a https:// protokollt használhatja!",
"urlInvalidProtocol":"Ez az URL csak a http:// & https:// protokollokat használhatja!",
"urlInvalidHostname":"Ez az URL egy nem engedélyezett hosztnevet tartalmaz!",
"urlInvalidExtension":"Ez az URL egy érvénytelen kiterjesztést tartalmaz! Válasszon a következők közül: {0}!",
"urlInvalidPath":"Ez az URL érvénytelen elérési utat tartalmaz!",
"idNotUnique":"Ez az azonosító nem egyedi, használjon egy másikat!",
"idNonExistent":"Az azonosító {0} nem létezik!",
"invalidType":"Ennek a tulajdonságnak a következő típusúnak kell lennie: {0}!",
"propertyMissing":"A {0} tulajdonság hiányzik ebből az objektumból!",
"propertyOptional":"A {0} tulajdonság opcionális ebben az objektumban!",
"objectDisabled":"Ez az objektum le van tiltva, engedélyezze a következő használatával: {0}!",
"nullInvalid":"Ez a tulajdonság nem lehet null!",
"switchInvalidType":"Ennek a következő típusok egyikének kell lennie: {0}!",
"objectSwitchInvalid":"Ennek az objektumnak a következő típusok egyikének kell lennie: {0}!",
"invalidLanguage":"Ez egy érvénytelen nyelv!",
"invalidButton":"Ennek a gombnak legalább egy {0} vagy {1} kell, hogy tartalmazzon!",
"unusedOption":"Az opció {0} nincs használatban sehol!",
"unusedQuestion":"A kérdés {0} nincs használatban sehol!",
"dropdownOption":"Egy legördülő menüvel rendelkező panel csak a 'jegy' típusú opciókat tartalmazhat!"
}
},
"actions":{
"buttons":{
"create":"Jegy megnyitása",
"close":"Jegy bezárása",
"delete":"Jegy törlése",
"reopen":"Jegy újranyitása",
"claim":"Jegy igénylése",
"unclaim":"Jegy feloldása",
"pin":"Jegy rögzítése",
"unpin":"Jegy rögzítésének feloldása",
"clear":"Jegyek törlése",
"helpSwitchSlash":"Parancsok megtekintése",
"helpSwitchText":"Szöveges parancsok megtekintése",
"helpPage":"Oldal {0}",
"withReason":"Indoklással",
"withoutTranscript":"Átirat nélkül"
},
"titles":{
"created":"Jegy létrehozva",
"close":"Jegy bezárva",
"delete":"Jegy törölve",
"reopen":"Jegy újranyitva",
"claim":"Jegy igényelve",
"unclaim":"Jegy feloldva",
"pin":"Jegy rögzítve",
"unpin":"Jegy rögzítésének feloldva",
"rename":"Jegy átnevezve {0}-ra",
"move":"Jegy áthelyezve {0}-ra",
"add":"Felhasználó hozzáadva a jegyhez",
"remove":"Felhasználó eltávolítva a jegyből",
"help":"Elérhető parancsok",
"statsReset":"Statisztikák visszaállítása",
"blacklistAdd":"Felhasználó tiltólistára helyezve",
"blacklistRemove":"Felhasználó tiltólistáról eltávolítva",
"blacklistGet":"Tiltólistás felhasználó",
"blacklistView":"Jelenlegi tiltólista",
"blacklistAddDm":"Felvéve a tiltólistára",
"blacklistRemoveDm":"Eltávolítva a tiltólistáról",
"clear":"Jegyek törölve",
"roles":"Szerepek frissítve",
"autoclose":"Jegy automatikusan bezárva",
"autocloseEnabled":"Automatikus bezárás engedélyezve",
"autocloseDisabled":"Automatikus bezárás letiltva",
"autodelete":"Jegy automatikusan törölve",
"autodeleteEnabled":"Automatikus törlés engedélyezve",
"autodeleteDisabled":"Automatikus törlés letiltva"
},
"descriptions":{
"create":"A jegyed létrejött. Kattints az alábbi gombra, hogy hozzáférj!",
"close":"A jegyet sikeresen lezártuk!",
"delete":"A jegyet sikeresen töröltük!",
"reopen":"A jegyet sikeresen újranyitottuk!",
"claim":"A jegyet sikeresen igényeltük!",
"unclaim":"A jegyet sikeresen feloldottuk!",
"pin":"A jegyet sikeresen rögzítettük!",
"unpin":"A jegy rögzítését sikeresen feloldottuk!",
"rename":"A jegyet sikeresen átneveztük {0}-ra!",
"move":"A jegyet sikeresen áthelyeztük {0}-ra!",
"add":"{0} sikeresen hozzáadva a jegyhez!",
"remove":"{0} sikeresen eltávolítva a jegyből!",
"helpExplanation":"`<név>` => kötelező paraméter\n`[név]` => opcionális paraméter",
"statsReset":"A bot statisztikái sikeresen visszaállítva!",
"statsError":"A jegy statisztikáit nem sikerült megtekinteni!\n{0} nem egy jegy!",
"blacklistAdd":"{0} sikeresen felvéve a tiltólistára!",
"blacklistRemove":"{0} sikeresen eltávolítva a tiltólistáról!",
"blacklistGetSuccess":"{0} jelenleg tiltólistán van!",
"blacklistGetEmpty":"{0} jelenleg nincs tiltólistán!",
"blacklistViewEmpty":"Még senki nincs tiltólistán!",
"blacklistViewTip":"Használd a \"/blacklist add\" parancsot, hogy felvegyél valakit a tiltólistára!",
"clearVerify":"Biztos vagy benne, hogy törölni szeretnéd több jegyet? Ez a művelet nem vonható vissza!",
"clearReady":"{0} jegyek sikeresen törölve!",
"rolesEmpty":"Nincsenek frissítve szerepek!",
"autocloseLeave":"Ez a jegy automatikusan bezáródott, mert a készítő elhagyta a szervert!",
"autocloseTimeout":"Ez a jegy automatikusan bezáródott, mert több mint `{0}h` ideje inaktív volt!",
"autodeleteLeave":"Ez a jegy automatikusan törlődött, mert a készítő elhagyta a szervert!",
"autodeleteTimeout":"Ez a jegy automatikusan törlődött, mert több mint `{0} nap` ideje inaktív volt!",
"autocloseEnabled":"Az automatikus bezárás engedélyezve van ebben a jegyben!\nEz bezáródik, ha több mint `{0}h` ideig inaktív!",
"autocloseDisabled":"Az automatikus bezárás le van tiltva ebben a jegyben!\nNem záródik be automatikusan többé!",
"autodeleteEnabled":"Az automatikus törlés engedélyezve van ebben a jegyben!\nEz törlődik, ha több mint `{0} nap` ideig inaktív!",
"autodeleteDisabled":"Az automatikus törlés le van tiltva ebben a jegyben!\nNem törlődik automatikusan többé!",
"ticketMessageLimit":"Egyszerre csak {0} jegyet hozhatsz létre!",
"ticketMessageAutoclose":"Ez a jegy automatikusan bezáródik, ha inaktív marad {0}h ideig!",
"ticketMessageAutodelete":"Ez a jegy automatikusan törlődik, ha inaktív marad {0} nap ideig!",
"panelReady":"Az alábbi panelben megtalálod!\nEz az üzenet most törölhető!"
},
"modal":{
"closePlaceholder":"Miért zártad be ezt a jegyet?",
"deletePlaceholder":"Miért törölted ezt a jegyet?",
"reopenPlaceholder":"Miért nyitottad újra ezt a jegyet?",
"claimPlaceholder":"Miért igényelted ezt a jegyet?",
"unclaimPlaceholder":"Miért oldottad fel ezt a jegyet?",
"pinPlaceholder":"Miért rögzítetted ezt a jegyet?",
"unpinPlaceholder":"Miért oldottad fel ennek a jegynek a rögzítését?"
},
"logs":{
"createLog":"Egy új jegy létrejött {0} által!",
"closeLog":"Ezt a jegyet lezárta {0}!",
"closeDm":"A jegyed lezárásra került a szerverünkön!",
"deleteLog":"Ezt a jegyet törölte {0}!",
"deleteDm":"A jegyed törlésre került a szerverünkön!",
"reopenLog":"Ezt a jegyet újranyitotta {0}!",
"reopenDm":"A jegyed újranyitásra került a szerverünkön!",
"claimLog":"Ezt a jegyet igényelte {0}!",
"claimDm":"A jegyed igénylésre került a szerverünkön!",
"unclaimLog":"Ezt a jegyet feloldotta {0}!",
"unclaimDm":"A jegyed feloldásra került a szerverünkön!",
"pinLog":"Ezt a jegyet rögzítette {0}!",
"pinDm":"A jegyed rögzítésre került a szerverünkön!",
"unpinLog":"Ezt a jegyet feloldotta {0}!",
"unpinDm":"A jegyed rögzítésének feloldásra került a szerverünkön!",
"renameLog":"Ezt a jegyet átnevezték {0}-ra {1} által!",
"renameDm":"A jegyed átnevezésre került {0}-ra a szerverünkön!",
"moveLog":"Ezt a jegyet áthelyezték {0}-ra {1} által!",
"moveDm":"A jegyed áthelyezésre került {0}-ra a szerverünkön!",
"addLog":"{0} hozzáadásra került ehhez a jegyhez {1} által!",
"addDm":"{0} hozzáadásra került a jegyedhez a szerverünkön!",
"removeLog":"{0} eltávolításra került ebből a jegyből {1} által!",
"removeDm":"{0} eltávolításra került a jegyedből a szerverünkön!",
"blacklistAddLog":"{0} tiltólistára helyezte {1}!",
"blacklistRemoveLog":"{0} eltávolította a tiltólistáról {1}!",
"blacklistAddDm":"Tiltólistára kerültél a szerverünkön!\nEzentúl nem hozhatsz létre jegyet!",
"blacklistRemoveDm":"Eltávolításra kerültél a szerverünk tiltólistájáról!\nMost újra létrehozhatsz jegyeket!",
"clearLog":"{0} jegyek törlésre kerültek {1} által!"
}
},
"transcripts":{
"success":{
"visit":"Átirat megtekintése",
"ready":"Átirat létrehozva",
"textFileDescription":"Ez egy törölt jegy szöveges átirata!",
"htmlProgress":"Kérjük, várj, amíg ez a HTML átirat feldolgozásra kerül...",
"createdChannel":"Egy új {0} átirat létrejött a szerveren!",
"createdCreator":"Egy új {0} átirat létrejött egy jegyed számára!",
"createdParticipant":"Egy új {0} átirat létrejött egy jegyben, amiben részt vettél!",
"createdActiveAdmin":"Egy új {0} átirat létrejött egy jegyben, amiben adminisztrátorként vettél részt!",
"createdEveryAdmin":"Egy új {0} átirat létrejött egy jegyben, amiben adminisztrátorként voltál jelen!",
"createdOther":"Egy új {0} átirat létrejött!"
},
"errors":{
"retry":"Újra",
"continue":"Törlés átirat nélkül",
"backup":"Biztonsági átirat létrehozása",
"error":"Valami hiba történt az átirat létrehozása közben.\nMit szeretnél tenni?\n\nEz a jegy nem kerül törlésre, amíg nem kattintasz az egyik gombra."
}
},
"errors":{
"titles":{
"internalError":"Belső Hiba",
"optionMissing":"Parancs Opció Hiányzik",
"optionInvalid":"Parancs Opció Érvénytelen",
"unknownCommand":"Ismeretlen Parancs",
"noPermissions":"Nincs Jogosultság",
"unknownTicket":"Ismeretlen Jegy",
"deprecatedTicket":"Elavult Jegy",
"unknownOption":"Ismeretlen Opció",
"unknownPanel":"Ismeretlen Panel",
"notInGuild":"Nem a Szerveren",
"channelRename":"Nem sikerült átnevezni a csatornát",
"busy":"A Jegy Elfoglalt"
},
"descriptions":{
"askForInfo":"Lépj kapcsolatba a bot tulajdonosával további információkért!",
"askForInfoResolve":"Lépj kapcsolatba a bot tulajdonosával, ha ez a probléma nem oldódik meg néhány próbálkozás után.",
"internalError":"Nem sikerült válaszolni erre a {0}-ra egy belső hiba miatt!",
"optionMissing":"Hiányzik egy szükséges paraméter ebben a parancsban!",
"optionInvalid":"Egy paraméter érvénytelen ebben a parancsban!",
"optionInvalidChoose":"Válassz a következők közül",
"unknownCommand":"Próbáld meg a súgó menü megnyitását további információkért!",
"noPermissions":"Nem vagy jogosult használni ezt a {0}-t!",
"noPermissionsList":"Szükséges Jogosultságok: (egyik)",
"noPermissionsCooldown":"Nem vagy jogosult használni ezt a {0}-t, mert cooldown alatt állsz!",
"noPermissionsBlacklist":"Nem vagy jogosult használni ezt a {0}-t, mert tiltólistára kerültél!",
"noPermissionsLimitGlobal":"Nem hozhatsz létre jegyet, mert a szerver elérte a maximális jegy limitet!",
"noPermissionsLimitGlobalUser":"Nem hozhatsz létre jegyet, mert elérted a maximális jegy limitet!",
"noPermissionsLimitOption":"Nem hozhatsz létre jegyet, mert a szerver elérte a maximális jegy limitet ezzel az opcióval!",
"noPermissionsLimitOptionUser":"Nem hozhatsz létre jegyet, mert elérted a maximális jegy limitet ezzel az opcióval!",
"unknownTicket":"Próbáld újra ezt a parancsot egy érvényes jegyben!",
"deprecatedTicket":"Az aktuális csatorna nem egy érvényes jegy! Lehet, hogy ez egy régi Open Ticket verzióból származó jegy volt!",
"notInGuild":"Ez a {0} nem működik DM-ben! Próbáld újra egy szerveren!",
"channelRename":"A discord korlátai miatt jelenleg nem lehet átnevezni a csatornát. A csatorna automatikusan átnevezésre kerül 10 perc múlva, ha a bot nincs újraindítva.",
"channelRenameSource":"A hiba forrása: {0}",
"busy":"Nem lehet használni ezt a {0}-t!\nA jegy jelenleg a bot által van feldolgozás alatt.\n\nPróbáld meg néhány másodperc múlva!"
},
"optionInvalidReasons":{
"stringRegex":"Az érték nem felel meg a mintának!",
"stringMinLength":"Az értéknek legalább {0} karakter hosszúnak kell lennie!",
"stringMaxLength":"Az értéknek legfeljebb {0} karakter hosszúnak kell lennie!",
"numberInvalid":"Érvénytelen szám!",
"numberMin":"A számnak legalább {0}-nak kell lennie!",
"numberMax":"A számnak legfeljebb {0}-nak kell lennie!",
"numberDecimal":"A szám nem lehet tizedes!",
"numberNegative":"A szám nem lehet negatív!",
"numberPositive":"A szám nem lehet pozitív!",
"numberZero":"A szám nem lehet nulla!",
"channelNotFound":"Nem található csatorna!",
"userNotFound":"Nem található felhasználó!",
"roleNotFound":"Nem található szerep!",
"memberNotFound":"Nem található felhasználó!",
"mentionableNotFound":"Nem található felhasználó vagy szerep!",
"channelType":"Érvénytelen csatornatípus!",
"notInGuild":"Ez az opció megköveteli, hogy szerveren legyél!"
},
"permissions":{
"developer":"A bot fejlesztőjének kell lenned.",
"owner":"A szerver tulajdonosának kell lenned.",
"admin":"Szerver adminnak kell lenned.",
"moderator":"Moderátornak kell lenned.",
"support":"A támogatási csapat tagjának kell lenned.",
"member":"Tagként kell lenned.",
"discord-administrator":"Az `ADMINISZTRÁTOR` jogosultsággal kell rendelkezned."
},
"actionInvalid":{
"close":"A jegy már le van zárva!",
"reopen":"A jegy még nincs lezárva!",
"claim":"A jegy már igényelve van!",
"unclaim":"A jegy még nincs feloldva!",
"pin":"A jegy már rögzítve van!",
"unpin":"A jegy még nincs feloldva!",
"add":"Ez a felhasználó már hozzáfér a jegyhez!",
"remove":"Nem lehet eltávolítani ezt a felhasználót a jegyből!"
}
},
"params":{
"uppercase":{
"ticket":"Jegy",
"tickets":"Jegyek",
"reason":"Indok",
"creator":"Készítő",
"remaining":"Hátralévő idő",
"added":"Hozzáadva",
"removed":"Eltávolítva",
"filter":"Szűrő",
"claimedBy":"Igényelte {0}",
"method":"Módszer",
"type":"Típus",
"blacklisted":"Tiltólistás",
"panel":"Panel",
"command":"Parancs",
"system":"Rendszer",
"true":"Igaz",
"false":"Hamis",
"syntax":"Szintaxis",
"originalName":"Eredeti Név",
"newName":"Új Név",
"until":"Amíg",
"validOptions":"Érvényes Opciók",
"validPanels":"Érvényes Panelek",
"autoclose":"Automatikus Bezárás",
"autodelete":"Automatikus Törlés",
"startupDate":"Indulás Dátuma",
"version":"Verzió",
"name":"Név",
"role":"Szerep",
"status":"Státusz",
"claimed":"Igényelt",
"pinned":"Rögzített",
"creationDate":"Létrehozás Dátuma"
},
"lowercase":{
"text":"szöveg",
"html":"html",
"command":"parancs",
"modal":"modális ablak",
"button":"gomb",
"dropdown":"legördülő menü",
"method":"módszer"
}
},
"commands":{
"reason":"Adja meg az opcionális indokot, amely látható lesz a naplókban.",
"help":"Parancsok listájának megtekintése.",
"panel":"Üzenet létrehozása legördülő menüvel vagy gombokkal (jegy létrehozásához).",
"panelId":"A panel azonosítója, amelyet létre szeretnél hozni.",
"panelAutoUpdate":"Szeretnéd, hogy ez a panel automatikusan frissüljön szerkesztéskor?",
"ticket":"Azonnal hozz létre egy jegyet.",
"ticketId":"Az azonosítója annak a jegynek, amelyet létre szeretnél hozni.",
"close":"Zárjon be egy jegyet.",
"delete":"Jegy törlése.",
"deleteNoTranscript":"Töröld ezt a jegyet átirat nélkül.",
"reopen":"Nyissa meg újra a jegyet.",
"claim":"Jegy igénylése.",
"claimUser":"Jegy igénylése valaki másnak helyetted.",
"unclaim":"Jegy feloldása.",
"pin":"Jegy rögzítése.",
"unpin":"Jegy rögzítésének feloldása.",
"move":"Jegy áthelyezése.",
"moveId":"Annak a opció az azonosítója, amelyet áthelyezni szeretnél.",
"rename":"Jegy átnevezése.",
"renameName":"Az új név a jegyhez.",
"add":"Felhasználó hozzáadása a jegyhez.",
"addUser":"A felhasználó, akit hozzá szeretnél adni.",
"remove":"Felhasználó eltávolítása a jegyből.",
"removeUser":"A felhasználó, akit el szeretnél távolítani.",
"blacklist":"Jegy tiltólista kezelése.",
"blacklistView":"A jelenlegi tiltólista megtekintése.",
"blacklistAdd":"Felhasználó hozzáadása a tiltólistához.",
"blacklistRemove":"Felhasználó eltávolítása a tiltólistáról.",
"blacklistGet":"Tiltólistás felhasználó adatainak megtekintése.",
"blacklistGetUser":"A felhasználó, akinek az adatait meg szeretnéd tekinteni.",
"stats":"Bot, tag vagy jegy statisztikáinak megtekintése.",
"statsReset":"A bot összes statisztikájának visszaállítása (és újra számolás megkezdése nulláról).",
"statsGlobal":"Globális statisztikák megtekintése.",
"statsUser":"Felhasználó statisztikáinak megtekintése a szerveren.",
"statsUserUser":"A felhasználó, akinek a statisztikáit meg szeretnéd tekinteni.",
"statsTicket":"Jegy statisztikáinak megtekintése a szerveren.",
"statsTicketTicket":"A jegy, amelynek a statisztikáit meg szeretnéd tekinteni.",
"clear":"Több jegy egyidejű törlése. Opcionális szűrő adható meg.",
"clearFilter":"A szűrő a jegyek törléséhez.",
"clearFilters":{
"all":"Összes",
"open":"Nyitott",
"close":"Lezárt",
"claim":"Igényelt",
"unclaim":"Feloldott",
"pin":"Rögzített",
"unpin":"Feloldott",
"autoclose":"Automatikusan Bezárt"
},
"autoclose":"Automatikus bezárás kezelése egy jegyben.",
"autocloseDisable":"Automatikus bezárás letiltása ebben a jegyben.",
"autocloseEnable":"Automatikus bezárás engedélyezése ebben a jegyben.",
"autocloseEnableTime":"Az óra száma, amely inaktívvá kell, hogy váljon ez a jegy a bezáráshoz.",
"autodelete":"Automatikus törlés kezelése egy jegyben.",
"autodeleteDisable":"Automatikus törlés letiltása ebben a jegyben.",
"autodeleteEnable":"Automatikus törlés engedélyezése ebben a jegyben.",
"autodeleteEnableTime":"A napok száma, amely inaktívvá kell, hogy váljon ez a jegy a törléshez."
},
"helpMenu":{
"help":"Parancsok listájának megtekintése.",
"ticket":"Jegy azonnali létrehozása.",
"close":"Jegy bezárása, ezzel letiltod az írást ebben a csatornában.",
"delete":"Jegy törlése, ez átiratot hoz létre, ha engedélyezett.",
"reopen":"Jegy újranyitása, ezzel újra engedélyezed az írást ebben a csatornában.",
"pin":"Jegy rögzítése. Ez a jegyet a lista tetejére helyezi és hozzáad egy '📌' emojit a nevéhez.",
"unpin":"Jegy rögzítésének feloldása. A jegy a helyén marad, de elveszíti a '📌' emojit.",
"move":"Jegy áthelyezése. Ez megváltoztatja a jegy típusát.",
"rename":"Jegy átnevezése. Ez megváltoztatja a jegy csatorna nevét.",
"claim":"Jegy igénylése. Ezzel tudathatod a csapatoddal, hogy ezt a jegyet te kezeled.",
"unclaim":"Jegy feloldása. Ezzel tudathatod a csapatoddal, hogy ez a jegy újra elérhető.",
"add":"Felhasználó hozzáadása a jegyhez. Ez lehetővé teszi a felhasználónak az olvasást és írást ebben a jegyben.",
"remove":"Felhasználó eltávolítása a jegyből. Ez eltávolítja az olvasási és írási jogosultságokat egy felhasználótól ebben a jegyben.",
"panel":"Üzenet létrehozása legördülő menüvel vagy gombokkal (jegy létrehozásához).",
"blacklistView":"A jelenlegi tiltólista megtekintése.",
"blacklistAdd":"Felhasználó hozzáadása a tiltólistához.",
"blacklistRemove":"Felhasználó eltávolítása a tiltólistáról.",
"blacklistGet":"Tiltólistás felhasználó adatainak megtekintése.",
"statsGlobal":"Globális statisztikák megtekintése.",
"statsTicket":"Jegy statisztikáinak megtekintése a szerveren.",
"statsUser":"Felhasználó statisztikáinak megtekintése a szerveren.",
"statsReset":"A bot összes statisztikájának visszaállítása (és újra számolás megkezdése nulláról).",
"autocloseDisable":"Automatikus bezárás letiltása ebben a jegyben.",
"autocloseEnable":"Automatikus bezárás engedélyezése ebben a jegyben.",
"autodeleteDisable":"Automatikus törlés letiltása ebben a jegyben.",
"autodeleteEnable":"Automatikus törlés engedélyezése ebben a jegyben."
},
"stats":{
"scopes":{
"global":"Globális Statisztikák",
"system":"Rendszer Statisztikák",
"user":"Felhasználói Statisztikák",
"ticket":"Jegy Statisztikák",
"participants":"Résztvevők"
},
"properties":{
"ticketsCreated":"Létrehozott Jegyek",
"ticketsClosed":"Lezárt Jegyek",
"ticketsDeleted":"Törölt Jegyek",
"ticketsReopened":"Újranyitott Jegyek",
"ticketsAutoclosed":"Automatikusan Bezárt Jegyek",
"ticketsClaimed":"Igényelt Jegyek",
"ticketsPinned":"Rögzített Jegyek",
"ticketsMoved":"Áthelyezett Jegyek",
"usersBlacklisted":"Tiltólistás Felhasználók",
"transcriptsCreated":"Létrehozott Átiratok"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["erxg"],
"lastedited":"25/08/2024",
"language":"Indonesian",
"automated":false
},
"checker":{
"system":{
"typeError":"[GALAT]",
"headerOpenTicket":"OPEN TICKET",
"typeWarning":"[PERINGATAN]",
"typeInfo":"[INFO]",
"headerConfigChecker":"PEMERIKSA KONFIGURASI",
"headerDescription":"Memeriksa kesalahan dalam file konfigurasi Anda!",
"footerError":"Bot tidak akan mulai sampai semua {0} diperbaiki!",
"footerWarning":"Disarankan untuk memperbaiki semua {0} sebelum memulai!",
"footerSupport":"BANTUAN: {0} - DOKUMENTASI: {1}",
"compactInformation":"Gunakan {0} untuk informasi lebih lanjut!",
"dataPath":"jalur",
"dataDocs":"dokumentasi",
"dataMessages":"pesan"
},
"messages":{
"stringTooShort":"String ini tidak boleh lebih pendek dari {0} karakter!",
"stringTooLong":"String ini tidak boleh lebih panjang dari {0} karakter!",
"stringLengthInvalid":"String ini harus {0} karakter!",
"stringStartsWith":"String ini harus dimulai dari {0}!",
"stringEndsWith":"String ini harus berakhir dengan {0}!",
"stringContains":"String ini harus mengandung {0}!",
"stringChoices":"String ini hanya dapat berupa salah satu dari nilai berikut ini: {0}!",
"stringRegex":"String ini tidak valid!",
"numberTooShort":"Nomor ini tidak boleh lebih pendek dari {0} karakter!",
"numberTooLong":"Nomor ini tidak boleh lebih panjang dari {0} karakter!",
"numberLengthInvalid":"Nomor ini harus setidaknya {0} karakter!",
"numberTooSmall":"Nomor ini setidaknya harus {0}!",
"numberTooLarge":"Nilai Nomor ini nomor ini {0}!",
"numberNotEqual":"Nomor ini harus {0}!",
"numberStep":"Nomor ini harus merupakan kelipatan {0}!",
"numberStepOffset":"Nomor ini harus merupakan kelipatan {0} dimulai dengan {1}!",
"numberStartsWith":"Nomor ini harus dimulai dengan {0}!",
"numberEndsWith":"Nomor ini harus berakhir dengan {0}!",
"numberContains":"Nomor ini harus mengandung {0}!",
"numberChoices":"Nomor ini hanya dapat berupa salah satu dari nomor berikut: {0}!",
"numberFloat":"Nomor ini tidak boleh desimal!",
"numberNegative":"Nomor ini tidak boleh negatif!",
"numberPositive":"Nomor ini tidak boleh positif!",
"numberZero":"Nomor ini tidak boleh nol!",
"booleanTrue":"Boolean ini tidak boleh benar!",
"booleanFalse":"Boolean ini tidak boleh salah!",
"arrayEmptyDisabled":"Array ini tidak boleh kosong!",
"arrayEmptyRequired":"Array ini harus kosong!",
"arrayTooShort":"Array ini harus memiliki panjang setidaknya {0}!",
"arrayTooLong":"Array ini harus memiliki panjang paling banyak {0}!",
"arrayLengthInvalid":"Array ini hanya dapat berisi tipe berikut ini: {0}!",
"arrayInvalidTypes":"Array ini hanya dapat berisi tipe berikut: {0}!",
"arrayDouble":"Array ini tidak mengizinkan nilai yang sama dua kali!",
"discordInvalidId":"Ini adalah id Discord {0} yang tidak valid!",
"discordInvalidIdOptions":"Ini adalah id Discord {0} yang tidak valid! Anda juga dapat menggunakan salah satu dari ini: {1}!",
"discordInvalidToken":"Ini adalah token Discord yang tidak valid (secara sintaksis)!",
"colorInvalid":"Ini adalah warna hex yang tidak valid!",
"emojiTooShort":"String ini harus memiliki setidaknya {0} emoji!",
"emojiTooLong":"String ini harus memiliki paling banyak {0} emoji!",
"emojiCustom":"Emoji tidak dapat berupa emoji Discord khusus!",
"emojiInvalid":"Emoji ini tidak valid!",
"urlInvalid":"URL ini tidak valid!",
"urlInvalidHttp":"Url ini hanya dapat menggunakan protokol https://!",
"urlInvalidProtocol":"Url ini hanya dapat menggunakan protokol http:// & https://!",
"urlInvalidHostname":"Url ini memiliki nama host yang dilarang!",
"urlInvalidExtension":"URL ini memiliki ekstensi yang tidak valid! Pilih salah satu: {0}!",
"urlInvalidPath":"URL ini memiliki jalur yang tidak valid!",
"idNotUnique":"Id ini tidak unik, gunakan id lain sebagai gantinya!",
"idNonExistent":"Id {0} tidak ada!",
"invalidType":"Properti ini harus sesuai dengan jenisnya: {0}!",
"propertyMissing":"Properti {0} tidak ada pada objek ini!",
"propertyOptional":"Properti {0} bersifat opsional dalam objek ini!",
"objectDisabled":"Objek ini dinonaktifkan, aktifkan dengan menggunakan {0}!",
"nullInvalid":"Properti ini tidak boleh bernilai nol!",
"switchInvalidType":"Ini harus salah satu dari jenis berikut ini: {0}!",
"objectSwitchInvalid":"Objek ini harus merupakan salah satu dari jenis berikut: {0}!",
"invalidLanguage":"Ini adalah bahasa yang tidak valid!",
"invalidButton":"Tombol ini harus memiliki setidaknya {0} atau {1}!",
"unusedOption":"Opsi {0} tidak digunakan di mana pun!",
"unusedQuestion":"Pertanyaan {0} tidak digunakan di mana pun!",
"dropdownOption":"Panel dengan menu tarik-ulur yang diaktifkan hanya dapat berisi opsi dengan tipe 'tiket'!"
}
},
"actions":{
"buttons":{
"create":"Kunjugi Tiket",
"close":"Tutup Tiket",
"delete":"Hapus Tiket",
"reopen":"Buka Kembali Tiket",
"claim":"Klaim Tiket",
"unclaim":"Batalkan Klaim Tiket",
"pin":"Sematkan Tiket",
"unpin":"Batal Menyematkan Tiket",
"clear":"Hapus Tiket",
"helpSwitchSlash":"Melihat Perintah Garis miring",
"helpSwitchText":"Lihat Perintah Teks",
"helpPage":"Halaman {0}",
"withReason":"Dengan Alasan",
"withoutTranscript":"Tanpa Transkrip"
},
"titles":{
"created":"Tiket Dibuat",
"close":"Tiket Ditutup",
"delete":"Tiket Dihapus",
"reopen":"Tiket Dibuka Kembali",
"claim":"Tiket Diklaim",
"unclaim":"Tiket Tidak Diklaim",
"pin":"Tiket Disematkan",
"unpin":"Tiket Tidak Lagi Disematkan",
"rename":"Tiket Berganti Nama",
"move":"Tiket Dipindahkan",
"add":"Pengguna Tiket Ditambahkan",
"remove":"Pengguna Tiket Dikeluarkan",
"help":"Perintah Yang Tersedia",
"statsReset":"Atur Ulang Statistik",
"blacklistAdd":"Pengguna Dimasukkan ke Daftar Hitam",
"blacklistRemove":"Pengguna Dibebaskan",
"blacklistGet":"Pengguna dalam Daftar Hitam",
"blacklistView":"Daftar Hitam saat ini",
"blacklistAddDm":"Ditambahkan ke Daftar Hitam",
"blacklistRemoveDm":"Dihapus dari Daftar Hitam",
"clear":"Tiket dibersihkan.",
"roles":"Peran Diperbarui",
"autoclose":"Tiket Ditutup Otomatis",
"autocloseEnabled":"Tutup Otomatis Diaktifkan",
"autocloseDisabled":"Tutup Otomatis Dimatikan",
"autodelete":"Tiket Dihapus Otomatis",
"autodeleteEnabled":"Hapus Otomatis Diaktifkan",
"autodeleteDisabled":"Hapus Otomatis Dinonaktifkan"
},
"descriptions":{
"create":"Tiket kamu telah dibuat. Klik tombol di bawah ini untuk mengaksesnya!",
"close":"Tiket telah berhasil ditutup!",
"delete":"Tiket telah berhasil dihapus!",
"reopen":"Tiket telah berhasil dibuka kembali!",
"claim":"Tiket telah berhasil diklaim!",
"unclaim":"Tiket tidak berhasil diklaim!",
"pin":"Tiket telah berhasil disematkan!",
"unpin":"Penyematan tiket telah berhasil dicabut!",
"rename":"Nama tiket telah berhasil diganti menjadi {0}!",
"move":"Tiket telah berhasil dipindahkan ke {0}!",
"add":"{0} telah berhasil ditambahkan ke tiket!",
"remove":"{0} telah berhasil dihapus dari tiket!",
"helpExplanation":"`<name>` => parameter wajib\n`[name]` => parameter opsional",
"statsReset":"Statistik bot telah berhasil disetel ulang!",
"statsError":"Tidak dapat melihat statistik tiket!\n{0} bukan tiket!",
"blacklistAdd":"{0} telah berhasil dimasukkan ke dalam daftar hitam!",
"blacklistRemove":"{0} telah berhasil dilepaskan dari daftar hitam!",
"blacklistGetSuccess":"{0} saat ini masuk daftar hitam!",
"blacklistGetEmpty":"{0} saat ini tidak berada dalam daftar hitam!",
"blacklistViewEmpty":"Belum ada yang masuk daftar hitam!",
"blacklistViewTip":"Gunakan \"/blacklist add\" untuk memasukkan pengguna ke dalam daftar hitam!",
"clearVerify":"Apakah Anda yakin ingin menghapus beberapa tiket?\nTindakan ini tidak dapat dibatalkan!",
"clearReady":"Tiket {0} telah berhasil dihapus!",
"rolesEmpty":"Tidak ada peran yang telah diperbarui!",
"autocloseLeave":"tiket ini telah ditutup secara otomatis karena pembuatnya meninggalkan server!",
"autocloseTimeout":"tiket ini telah ditutup otomatis karena tidak aktif selama lebih dari `{0} jam`!",
"autodeleteLeave":"tiket ini telah dihapus secara otomatis karena pembuatnya meninggalkan server!",
"autodeleteTimeout":"tiket ini telah dihapus secara otomatis karena tidak aktif selama lebih dari `{0} hari`!",
"autocloseEnabled":"Penutupan otomatis telah diaktifkan untuk tiket ini!\nTiket ini akan ditutup ketika tidak aktif selama lebih dari `{0} jam`!",
"autocloseDisabled":"Penutupan otomatis telah dinonaktifkan untuk tiket ini!\nIt won't be closed automatically anymore!",
"autodeleteEnabled":"Penghapsan otomatis telah diaktifkan untuk tiket ini!\nIni akan dihapus jika tidak aktif selama lebih dari `{0} hari`!",
"autodeleteDisabled":"Penghapusan otomatis telah dinonaktifkan untuk tiket ini!\nTiket ini tidak akan dihapus secara otomatis lagi!",
"ticketMessageLimit":"Anda hanya dapat membuat {0} tiket pada saat yang bersamaan!",
"ticketMessageAutoclose":"Tiket ini akan ditutup secara otomatis ketika tidak aktif selama {0} jam!",
"ticketMessageAutodelete":"Tiket ini akan dihapus secara otomatis ketika tidak aktif selama {0} hari!",
"panelReady":"Anda dapat menemukan panel di bawah ini!\nPesan ini sekarang dapat dihapus!"
},
"modal":{
"closePlaceholder":"Mengapa kamu menutup tiket ini?",
"deletePlaceholder":"Mengapa kamu menghapus tiket ini?",
"reopenPlaceholder":"Mengapa kamu membuka kembali tiket ini?",
"claimPlaceholder":"Mengapa kamu mengklaim tiket ini?",
"unclaimPlaceholder":"Mengapa kamu membatalkan klaim tiket ini?",
"pinPlaceholder":"Mengapa kamu menyematkan tiket ini?",
"unpinPlaceholder":"Mengapa kamu membatalkan sematan tiket ini?"
},
"logs":{
"createLog":"Tiket baru dibuat oleh {0}!",
"closeLog":"Tiket ini ditutup oleh {0}!",
"closeDm":"Tiket kamu telah ditutup di server kami!",
"deleteLog":"Tiket ini dihapus oleh {0}!",
"deleteDm":"Tiket kamu telah dihapus di server kami!",
"reopenLog":"Tiket ini dibuka kembali oleh {0}!",
"reopenDm":"Tiket kamu telah dibuka kembali di server kami!",
"claimLog":"Tiket ini diklaim oleh {0}!",
"claimDm":"Tiket kamu telah diklaim di server kami!",
"unclaimLog":"Tiket ini tidak lagi diklaim oleh {0}!",
"unclaimDm":"Tiket kamu tidak diklaim di server kami!",
"pinLog":"Tiket ini disematkan oleh {0}!",
"pinDm":"Tiket kamu telah disematkan di server kami!",
"unpinLog":"Tiket ini tidak lagi disematkan oleh {0}!",
"unpinDm":"Tiket kamu tidak lagi disematkan di server kami!",
"renameLog":"Tiket ini telah diubah namanya menjadi {0} oleh {1}!",
"renameDm":"Tiket kamu telah diubah namanya menjadi {0} di server kami!",
"moveLog":"Tiket ini telah dipindahkan ke {0} oleh {1}!",
"moveDm":"Tiket kamu telah dipindahkan ke {0} di server kami!",
"addLog":"{0} telah ditambahkan ke tiket ini oleh {1}!",
"addDm":"{0} telah ditambahkan ke tiket kamu di server kami!",
"removeLog":"{0} telah dihapus dari tiket ini oleh {1}!",
"removeDm":"{0} telah dihapus dari tiket kamu di server kami!",
"blacklistAddLog":"{0} dimasukkan ke dalam daftar hitam oleh {1}!",
"blacklistRemoveLog":"{0} dihapus dari daftar hitam oleh {1}!",
"blacklistAddDm":"Anda telah masuk ke dalam daftar hitam di server kami!\nMulai sekarang, Anda tidak dapat membuat tiket!",
"blacklistRemoveDm":"Kamu telah dihapus dari daftar hitam di server kami!\nSekarang Anda dapat membuat tiket lagi!",
"clearLog":"Tiket {0} telah dihapus oleh {1}!"
}
},
"transcripts":{
"success":{
"visit":"Kunjungi Transkrip",
"ready":"Transkrip Dibuat",
"textFileDescription":"Ini adalah transkrip teks dari tiket yang dihapus!",
"htmlProgress":"Mohon tunggu sementara transkrip html diproses...",
"createdChannel":"Transkrip {0} baru telah dibuat di server!",
"createdCreator":"Transkrip {0} baru telah dibuat salah satu tiket kamu!",
"createdParticipant":"Transkrip {0} baru telah dibuat di salah satu tiket yang kamu ikuti!",
"createdActiveAdmin":"Transkrip {0} baru telah dibuat di salah satu tiket yang kamu ikuti sebagai admin!",
"createdEveryAdmin":"Transkrip {0} baru telah dibuat in salah satu tiket tempat kamu menjadi admin!",
"createdOther":"Transkrip {0} baru telah dibuat!"
},
"errors":{
"retry":"Coba Ulang",
"continue":"Hapus Tanpa Transkrip",
"backup":"Membuat Transkrip Cadangan",
"error":"Terjadi kesalahan saat mencoba membuat transkrip.\nApa yang ingin Anda lakukan?\n\nTiket ini tidak akan dihapus hingga Anda mengeklik salah satu tombol ini."
}
},
"errors":{
"titles":{
"internalError":"Galat Internal",
"optionMissing":"Opsi Perintah Tidak Ada",
"optionInvalid":"Opsi Perintah Invalid",
"unknownCommand":"Perintah Tidak Diketahui",
"noPermissions":"Tidak Memiliki Izin",
"unknownTicket":"Tiket Tidak Diketahui",
"deprecatedTicket":"Tiket sudah tidak berlaku",
"unknownOption":"Opsi Tidak Diketahui",
"unknownPanel":"Panel Tidak Diketahui",
"notInGuild":"Tidak Berada Di Dalam Server",
"channelRename":"Tidak Dapat Mengganti Nama Saluran",
"busy":"Tidak Sedang Sibuk"
},
"descriptions":{
"askForInfo":"Hubungi pemilik bot ini untuk info lebih lanjut!",
"askForInfoResolve":"Hubungi pemilik bot dari bot ini jika masalah ini tidak teratasi setelah beberapa kali mencoba.",
"internalError":"Gagal merespons {0} karena kesalahan internal!",
"optionMissing":"Parameter yang diperlukan tidak ada dalam perintah ini!",
"optionInvalid":"Parameter dalam perintah ini tidak valid!",
"optionInvalidChoose":"Pilih antara",
"unknownCommand":"Coba kunjungi menu bantuan untuk info lebih lanjut!",
"noPermissions":"Anda tidak diperbolehkan menggunakan {0}.!",
"noPermissionsList":"Izin yang Diperlukan: (salah satunya)",
"noPermissionsCooldown":"Anda tidak diperbolehkan menggunakan {0} karena kamu sedang dalam cooldown!",
"noPermissionsBlacklist":"Anda tidak diperbolehkan menggunakan {0} karena Anda telah masuk dalam daftar hitam!",
"noPermissionsLimitGlobal":"Anda tidak diizinkan untuk membuat tiket karena server telah mencapai batas maksimal tiket!",
"noPermissionsLimitGlobalPengguna":"Anda tidak dapat membuat tiket karena Anda telah mencapai batas maksimal tiket!",
"noPermissionsLimitOption":"Anda tidak diizinkan untuk membuat tiket karena server telah mencapai batas maksimal tiket untuk opsi ini!",
"noPermissionsLimitOptionPengguna":"Anda tidak dapat membuat tiket karena Anda telah mencapai batas maksimal tiket untuk opsi ini!",
"unknownTicket":"Gunakan perintah ini lagi dalam tiket yang valid!",
"deprecatedTicket":"Saluran saat ini bukanlah tiket yang valid! Ini mungkin merupakan tiket dari versi Open Tiket yang lama!",
"notInGuild":"Ini {0} tidak berfungsi di DM! Silakan coba lagi di server!",
"channelRename":"Karena batasan rasio Discord, saat ini bot tidak mungkin mengganti nama saluran. Saluran akan secara otomatis diganti namanya dalam waktu 10 menit jika bot tidak di-boot ulang.",
"channelRenameSource":"Sumber dari masalah: {0}",
"busy":"Dapat dapat menggunakan {0}!\nTiket sedang diproses oleh bot.\n\nMohon coba beberapa saat lagi!"
},
"optionInvalidReasons":{
"stringRegex":"Nilai tidak sesuai pola!",
"stringMinLength":"Nilai minimal {0} karakter!",
"stringMaxLength":"Nilai maksimal {0} karakter!",
"numberInvalid":"Angka tidak valid!",
"numberMin":"Angka minimal {0}!",
"numberMax":"Angka maksimal {0}!",
"numberDecimal":"Nomor tidak diperbolehkan sebuah angka desimal!",
"numberNegative":"Nomor tidak diperbolehkan sebuah angka negatif!",
"numberPositive":"Nomor tidak diperbolehkan sebuah angka positif!",
"numberZero":"Nomor tidak diperbolehkan sebuah angka nol!",
"channelNotFound":"Tidak dapat menemukan saluran!",
"userNotFound":"Tidak dapat menemukan pengguna!",
"roleNotFound":"Tidak dapat menemukan peran!",
"memberNotFound":"Tidak dapat menemukan anggota!",
"mentionableNotFound":"Tidak dapat menemukan pengguna atau peran!",
"channelType":"Tipe saluran invalid!",
"notInGuild":"Opsi ini memerlukan kamu untuk berada di dalam server!"
},
"permissions":{
"developer":"Kamu harus menjadi bagian pengembang dari bot.",
"owner":"Kamu harus menjadi pemilik server.",
"admin":"Kamu harus menjadi admin server.",
"moderator":"Kamu harus menjadi moderator.",
"support":"Kamu harus menjadi bagian dari anggota pendukung.",
"member":"Kamu harus menjadi anggota.",
"discord-administrator":"Kamu harus memiliki akses `ADMINISTRATOR`."
},
"actionInvalid":{
"close":"Tiket ini sudah ditutup!",
"reopen":"Tiket ini belum ditutup!",
"claim":"Tiket ini sudah diklaim!",
"unclaim":"Tiket ini belum diklaim!",
"pin":"Tiket ini sudah disematkan!",
"unpin":"Tiket ini belum disematkan!",
"add":"Pengguna ini sudah dapat mengakses tiket!",
"remove":"Tiket bisa mengeluarkan pengguna dari tiket!"
}
},
"params":{
"uppercase":{
"ticket":"Tiket",
"tickets":"Tiket",
"reason":"Alasan",
"creator":"Pembuat",
"remaining":"Waktu Tersisa",
"added":"Ditambahkan",
"removed":"Dikeluarkan",
"filter":"Penyaring",
"claimedBy":"Diklaim oleh {0}",
"method":"Metode",
"type":"Tipe",
"blacklisted":"Daftar hitam",
"panel":"Panel",
"command":"Perintah",
"system":"Sistem",
"true":"Benar",
"false":"Salah",
"syntax":"Sintaks",
"originalName":"Nama asli",
"newName":"Nama Yang Baru",
"until":"Hingga",
"validOptions":"Opsi Yang Valid",
"validPanels":"Panel Yang Valid",
"autoclose":"Tutup otomatis",
"autodelete":"Hapus otomatis",
"startupDate":"Waktu Mulai",
"version":"Versi",
"name":"Nama",
"role":"Peran",
"status":"Status",
"claimed":"Diklaim",
"pinned":"Disematkan",
"creationDate":"Tanggal Pembuatan"
},
"lowercase":{
"text":"teks",
"html":"html",
"command":"perintah",
"modal":"modal",
"button":"tombol",
"dropdown":"daftar",
"method":"Metode"
}
},
"commands":{
"reason":"Tentukan alasan opsional yang akan ditampilkan dalam log.",
"help":"Dapatkan daftar perintah yang tersedia.",
"panel":"Munculkan pesan dengan menu atau tombol (Untuk pembuatan tiket).",
"panelId":"Tanda pengenal panel yang ingin Anda munculkan.",
"panelAutoUpdate":"Apa Anda ingin panel ini diperbarui secara otomatis ketika diubah?",
"ticket":"Buat tiket secara instan.",
"ticketId":"Penanda tiket yang ingin anda buat.",
"close":"Tutup tiket.",
"delete":"Hapus tiket.",
"deleteNoTranscript":"Hapus tiket tanpa membuat transkrip.",
"reopen":"Buka ulang tiket.",
"claim":"Klaim tiket.",
"claimUser":"Klaim tiket untuk orang lain.",
"unclaim":"Batalkan klaim tiket.",
"pin":"Sematkan sebuah tiket.",
"unpin":"Batalkan penyematan tiket.",
"move":"Pindahkan tiket.",
"moveId":"Penanda opsi yang ingin anda pindahkan.",
"rename":"Ganti nama tiket.",
"renameName":"Nama yang baru untuk tiket.",
"add":"Tambahkan pengguna ke tiket.",
"addUser":"Pengguna yang akan ditambahkan.",
"remove":"Keluarkan seseorang dari tiket.",
"removeUser":"Pengguna yang akan dikeluarkan.",
"blacklist":"Kelola the Tiket blacklist.",
"blacklistView":"Lihat daftar yang masuk ke dalam daftar hitam.",
"blacklistAdd":"Tambahkan seseorang ke dalam daftar hitam.",
"blacklistRemove":"Keluarkan seseorang dari daftar hitam.",
"blacklistGet":"Dapatkan detail dari seseorang yang masuk ke daftar hitam.",
"blacklistGetUser":"Pengguna yang yang ingin dicari tahu detailnya.",
"stats":"View statistics from the bot, a member or a Tiket.",
"statsReset":"Atur ulang semua statistik bot (dan mulai menghitung dari nol).",
"statsGlobal":"Lihat statistik global.",
"statsUser":"Lihat status seseorang di server.",
"statsUserUser":"Pengguna yang akan dilihat.",
"statsTicket":"Lihat status dari sebuah tiket di server.",
"statsTicketTicket":"Tiket yang akan dilihat.",
"clear":"Hapus banyak tiket sekaligus.",
"clearFilter":"Filter untuk menghapus tiket.",
"clearFilters":{
"all":"Semua",
"open":"Buka",
"close":"Ditutup",
"claim":"Diklaim",
"unclaim":"Belum diklaim",
"pin":"Disematkan",
"unpin":"Pembatalan penyematan",
"autoclose":"Ditutup otomatis"
},
"autoclose":"Kelola penutupan otomatis tiket.",
"autocloseDisable":"Non-aktifkan penutupan otomatis.",
"autocloseEnable":"Aktifkan penutupan otomatis.",
"autocloseEnableTime":"Lama waktu saluran tidak aktif sebelum dinon-aktifkan.",
"autodelete":"Kelola penghapusan otomatis tiket.",
"autodeleteDisable":"Non-aktifkan penghapusan otomatis.",
"autodeleteEnable":"Aktifkan penghapusan otomatis.",
"autodeleteEnableTime":"Lama waktu saluran tidak aktif sebelum dihapus."
},
"helpMenu":{
"help":"Dapatkan daftar perintah yang tersedia.",
"ticket":"Buat tiket secara instan.",
"close":"Tutup tiket, ini akan membuat saluran tiket tidak bisa tidak bisa digunakan.",
"delete":"Hapus tiket, ini akan membuat sebuah transkrip ketika diaktifkan.",
"reopen":"Buka ulang tiket, ini memungkinkan untuk menulis lagi di tiket ini.",
"pin":"Sematkan sebuah tiket. Ini akan memindahkan tiket ke bagian atas dan akan menambahkan emoji '📌' pada namanya.",
"unpin":"Batalkan penyematan tiket. Tiket akan tetap berada di posisinya namun akan kehilangan emoji '📌'.",
"move":"Pindahkan tiket. Ini akan mengubah tipe/jenis tiket",
"rename":"Ganti nama tiket. Ini akan mengubah nama saluran tiket",
"claim":"Klaim tiket. Dengan ini tim anda tahu bahwa anda menangani tiket ini.",
"unclaim":"Batalkan klaim tiket. Dengan ini tim anda tahu bahwa anda bahwa tiket ini tersedia.",
"add":"Tambahkan seseorang ke tiket. Ini akan memberikan akses untuk membaca dan menulis tiket.",
"remove":"Keluarkan seseorang dari tiket. Ini akan menghapus akses untuk membaca dan menulis di tiket.",
"panel":"Munculkan pesan dengan menu atau tombol (Untuk pembuatan tiket).",
"blacklistView":"Lihat daftar yang masuk ke dalam daftar hitam.",
"blacklistAdd":"Tambahkan seseorang ke dalam daftar hitam.",
"blacklistRemove":"Keluarkan seseorang dari daftar hitam.",
"blacklistGet":"Dapatkan detail dari seseorang yang masuk ke daftar hitam.",
"statsGlobal":"Lihat statistik global.",
"statsTicket":"Lihat status sebuah tiket di server.",
"statsUser":"Lihat status seseorang di server.",
"statsReset":"Atur ulang semua statistik bot (Dan mulai menghitung dari nol).",
"autocloseDisable":"Nonaktifkan penutupan otomatis.",
"autocloseEnable":"Aktifkan penutupan otomatis.",
"autodeleteDisable":"Non-aktifkan penghapusan otomatis.",
"autodeleteEnable":"Aktifkan penghapusan otomatis."
},
"stats":{
"scopes":{
"global":"Statistik Global",
"system":"Status Sistem",
"user":"Status Pengguna",
"ticket":"Status Tiket",
"participants":"Partisipan"
},
"properties":{
"ticketsCreated":"Tiket Dibuat",
"ticketsClosed":"Tiket Ditutup",
"ticketsDeleted":"Tiket Dihapus",
"ticketsReopened":"Tiket Dibuka Kembali",
"ticketsAutoclosed":"Tiket Ditutup Otomatis",
"ticketsClaimed":"Tiket Diklaim",
"ticketsPinned":"Tiket Disematkan",
"ticketsMoved":"Tickets Dipindahkan",
"usersBlacklisted":"Pengguna Masuk Ke Dalam Daftar Hitam",
"transcriptsCreated":"Transkrip Dibuat"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["fraden1mvp."],
"lastedited":"08/10/2024",
"language":"Italian",
"automated":false
},
"checker":{
"system":{
"typeError":"[ERRORE]",
"headerOpenTicket":"TICKET APERTO",
"typeWarning":"[AVVISO]",
"typeInfo":"[INFO]",
"headerConfigChecker":"CONTROLLO CONFIGURAZIONE",
"headerDescription":"controlla gli errori nei tuoi file di configurazione!",
"footerError":"il bot non si avvierà finché tutti i {0} non sono risolti!",
"footerWarning":"è consigliabile risolvere tutti i {0} prima di avviare!",
"footerSupport":"ASSISTENZA: {0} - DOCUMENTAZIONE: {1}",
"compactInformation":"usa {0} per maggiori informazioni!",
"dataPath":"percorso",
"dataDocs":"documenti",
"dataMessages":"messaggio"
},
"messages":{
"stringTooShort":"Questa stringa non può essere più corta di {0} caratteri!",
"stringTooLong":"Questa stringa non può essere più lunga di {0} caratteri!",
"stringLengthInvalid":"Questa stringa deve essere lunga {0} caratteri!",
"stringStartsWith":"Questa stringa deve iniziare con {0}!",
"stringEndsWith":"Questa stringa deve finire con {0}!",
"stringContains":"Questa stringa deve contenere {0}!",
"stringChoices":"Questa stringa può essere solo uno dei seguenti valori: {0}!",
"stringRegex":"Questa stringa non è valida!",
"numberTooShort":"Questo numero non può essere più corto di {0} caratteri!",
"numberTooLong":"Questo numero non può essere più lungo di {0} caratteri!",
"numberLengthInvalid":"Questo numero deve essere lungo {0} caratteri!",
"numberTooSmall":"Questo numero deve essere almeno {0}!",
"numberTooLarge":"Questo numero deve essere al massimo {0}!",
"numberNotEqual":"Questo numero deve essere {0}!",
"numberStep":"Questo numero deve essere un multiplo di {0}!",
"numberStepOffset":"Questo numero deve essere un multiplo di {0} partendo da {1}!",
"numberStartsWith":"Questo numero deve iniziare con {0}!",
"numberEndsWith":"Questo numero deve finire con {0}!",
"numberContains":"Questo numero deve contenere {0}!",
"numberChoices":"Questo numero può essere solo uno dei seguenti valori: {0}!",
"numberFloat":"Questo numero non può essere decimale!",
"numberNegative":"Questo numero non può essere negativo!",
"numberPositive":"Questo numero non può essere positivo!",
"numberZero":"Questo numero non può essere zero!",
"booleanTrue":"Questo booleano non può essere vero!",
"booleanFalse":"Questo booleano non può essere falso!",
"arrayEmptyDisabled":"Questo array non può essere vuoto!",
"arrayEmptyRequired":"Questo array deve essere vuoto!",
"arrayTooShort":"Questo array deve avere una lunghezza di almeno {0}!",
"arrayTooLong":"Questo array deve avere una lunghezza di al massimo {0}!",
"arrayLengthInvalid":"Questo array deve avere una lunghezza di {0}!",
"arrayInvalidTypes":"Questo array può contenere solo i seguenti tipi: {0}!",
"arrayDouble":"Questo array non consente lo stesso valore due volte!",
"discordInvalidId":"Questo è un id discord {0} non valido!",
"discordInvalidIdOptions":"Questo è un id discord {0} non valido! Puoi anche usare uno di questi: {1}!",
"discordInvalidToken":"Questo è un token discord non valido (sintatticamente)!",
"colorInvalid":"Questo è un colore esadecimale non valido!",
"emojiTooShort":"Questa stringa deve contenere almeno {0} emoji!",
"emojiTooLong":"Questa stringa deve contenere al massimo {0} emoji!",
"emojiCustom":"Questa emoji non può essere un'emoji discord personalizzata!",
"emojiInvalid":"Questa è un'emoji non valida!",
"urlInvalid":"Questo url non è valido!",
"urlInvalidHttp":"Questo url può usare solo il protocollo https://!",
"urlInvalidProtocol":"Questo url può usare solo i protocolli http:// e https://!",
"urlInvalidHostname":"Questo url ha un hostname non consentito!",
"urlInvalidExtension":"Questo url ha un'estensione non valida! Scegli tra: {0}!",
"urlInvalidPath":"Questo url ha un percorso non valido!",
"idNotUnique":"Questo id non è unico, usa un altro id!",
"idNonExistent":"L'id {0} non esiste!",
"invalidType":"Questa proprietà deve essere del tipo: {0}!",
"propertyMissing":"La proprietà {0} manca da questo oggetto!",
"propertyOptional":"La proprietà {0} è facoltativa in questo oggetto!",
"objectDisabled":"Questo oggetto è disabilitato, abilitalo usando {0}!",
"nullInvalid":"Questa proprietà non può essere nulla!",
"switchInvalidType":"Questo deve essere uno dei seguenti tipi: {0}!",
"objectSwitchInvalid":"Questo oggetto deve essere uno dei seguenti tipi: {0}!",
"invalidLanguage":"Questa è una lingua non valida!",
"invalidButton":"Questo pulsante deve avere almeno un {0} o {1}!",
"unusedOption":"L'opzione {0} non è utilizzata da nessuna parte!",
"unusedQuestion":"La domanda {0} non è utilizzata da nessuna parte!",
"dropdownOption":"Un pannello con il dropdown attivato può contenere solo opzioni di tipo 'ticket'!"
}
},
"actions":{
"buttons":{
"create":"Visita Ticket",
"close":"Chiudi Ticket",
"delete":"Elimina Ticket",
"reopen":"Riapri Ticket",
"claim":"Claima Ticket",
"unclaim":"Annulla Claim Ticket",
"pin":"Fissa Ticket",
"unpin":"Sblocca Ticket",
"clear":"Elimina Tickets",
"helpSwitchSlash":"Visualizza Comandi Slash",
"helpSwitchText":"Visualizza Comandi Testo",
"helpPage":"Pagina {0}",
"withReason":"Con Motivo",
"withoutTranscript":"Senza Trascrizione"
},
"titles":{
"created":"Ticket Creato",
"close":"Ticket Chiuso",
"delete":"Ticket Eliminato",
"reopen":"Ticket Riaperto",
"claim":"Ticket Claimato",
"unclaim":"Ticket Claim Annullato",
"pin":"Ticket Fissato",
"unpin":"Ticket Sbloccato",
"rename":"Ticket Rinominato",
"move":"Ticket Spostato",
"add":"Utente Aggiunto al Ticket",
"remove":"Utente Rimosso dal Ticket",
"help":"Comandi Disponibili",
"statsReset":"Ripristina Statistiche",
"blacklistAdd":"Utente Aggiunto alla Blacklist",
"blacklistRemove":"Utente Rimosso dalla Blacklist",
"blacklistGet":"Utente in Blacklist",
"blacklistView":"Blacklist Corrente",
"blacklistAddDm":"Aggiunto alla Blacklist",
"blacklistRemoveDm":"Rimosso dalla Blacklist",
"clear":"Tickets Cancellati",
"roles":"Ruoli Aggiornati",
"autoclose":"Ticket Autochiuso",
"autocloseEnabled":"Autochiusura Abilitata",
"autocloseDisabled":"Autochiusura Disabilitata",
"autodelete":"Ticket Autocancellato",
"autodeleteEnabled":"Autocancellazione Abilitata",
"autodeleteDisabled":"Autocancellazione Disabilitata"
},
"descriptions":{
"create":"Il tuo ticket è stato creato. Clicca il pulsante qui sotto per accedervi!",
"close":"Il ticket è stato chiuso con successo!",
"delete":"Il ticket è stato eliminato con successo!",
"reopen":"Il ticket è stato riaperto con successo!",
"claim":"Il ticket è stato claimato con successo!",
"unclaim":"Il ticket è stato annullato con successo!",
"pin":"Il ticket è stato fissato con successo!",
"unpin":"Il ticket è stato sbloccato con successo!",
"rename":"Il ticket è stato rinominato in {0} con successo!",
"move":"Il ticket è stato spostato in {0} con successo!",
"add":"{0} è stato aggiunto al ticket con successo!",
"remove":"{0} è stato rimosso dal ticket con successo!",
"helpExplanation":"`<name>` => parametro obbligatorio\n`[name]` => parametro facoltativo",
"statsReset":"Le statistiche del bot sono state ripristinate con successo!",
"statsError":"Impossibile visualizzare le statistiche del ticket!\n{0} non è un ticket!",
"blacklistAdd":"{0} è stato aggiunto alla blacklist con successo!",
"blacklistRemove":"{0} è stato rimosso con successo dalla blacklist!",
"blacklistGetSuccess":"{0} è attualmente nella blacklist!",
"blacklistGetEmpty":"{0} non è attualmente nella blacklist!",
"blacklistViewEmpty":"Nessuno è stato aggiunto alla blacklist finora!",
"blacklistViewTip":"Usa \"/blacklist add\" per aggiungere un utente alla blacklist!",
"clearVerify":"Sei sicuro di voler eliminare più ticket?\nQuesta azione non può essere annullata!",
"clearReady":"{0} tickets sono stati eliminati con successo!",
"rolesEmpty":"Nessun ruolo è stato aggiornato!",
"autocloseLeave":"Questo ticket è stato autochiuso perché il creatore ha lasciato il server!",
"autocloseTimeout":"Questo ticket è stato autochiuso perché è stato inattivo per più di `{0}h`!",
"autodeleteLeave":"Questo ticket è stato autocancellato perché il creatore ha lasciato il server!",
"autodeleteTimeout":"Questo ticket è stato autocancellato perché è stato inattivo per più di `{0} giorni`!",
"autocloseEnabled":"L'autochiusura è stata abilitata in questo ticket!\nSarà chiuso quando sarà inattivo per più di `{0}h`!",
"autocloseDisabled":"L'autochiusura è stata disabilitata in questo ticket!\nNon sarà più chiuso automaticamente!",
"autodeleteEnabled":"L'autocancellazione è stata abilitata in questo ticket!\nSarà cancellato quando sarà inattivo per più di `{0} giorni`!",
"autodeleteDisabled":"L'autocancellazione è stata disabilitata in questo ticket!\nNon sarà più cancellato automaticamente!",
"ticketMessageLimit":"Puoi creare solo {0} ticket contemporaneamente!",
"ticketMessageAutoclose":"Questo ticket sarà autochiuso quando sarà inattivo per {0}h!",
"ticketMessageAutodelete":"Questo ticket sarà autocancellato quando sarà inattivo per {0} giorni!",
"panelReady":"Puoi trovare il pannello qui sotto!\nQuesto messaggio può ora essere eliminato!"
},
"modal":{
"closePlaceholder":"Perché hai chiuso questo ticket?",
"deletePlaceholder":"Perché hai eliminato questo ticket?",
"reopenPlaceholder":"Perché hai riaperto questo ticket?",
"claimPlaceholder":"Perché hai claimato questo ticket?",
"unclaimPlaceholder":"Perché hai annullato il Claim di questo ticket?",
"pinPlaceholder":"Perché hai fissato questo ticket?",
"unpinPlaceholder":"Perché hai sbloccato questo ticket?"
},
"logs":{
"createLog":"Un nuovo ticket è stato creato da {0}!",
"closeLog":"Questo ticket è stato chiuso da {0}!",
"closeDm":"Il tuo ticket è stato chiuso nel nostro server!",
"deleteLog":"Questo ticket è stato eliminato da {0}!",
"deleteDm":"Il tuo ticket è stato eliminato nel nostro server!",
"reopenLog":"Questo ticket è stato riaperto da {0}!",
"reopenDm":"Il tuo ticket è stato riaperto nel nostro server!",
"claimLog":"Questo ticket è stato claimato da {0}!",
"claimDm":"Il tuo ticket è stato claimato nel nostro server!",
"unclaimLog":"Questo ticket è stato annullato da {0}!",
"unclaimDm":"Il tuo ticket è stato annullato nel nostro server!",
"pinLog":"Questo ticket è stato fissato da {0}!",
"pinDm":"Il tuo ticket è stato fissato nel nostro server!",
"unpinLog":"Questo ticket è stato sbloccato da {0}!",
"unpinDm":"Il tuo ticket è stato sbloccato nel nostro server!",
"renameLog":"Questo ticket è stato rinominato in {0} da {1}!",
"renameDm":"Il tuo ticket è stato rinominato in {0} nel nostro server!",
"moveLog":"Questo ticket è stato spostato in {0} da {1}!",
"moveDm":"Il tuo ticket è stato spostato in {0} nel nostro server!",
"addLog":"{0} è stato aggiunto a questo ticket da {1}!",
"addDm":"{0} è stato aggiunto al tuo ticket nel nostro server!",
"removeLog":"{0} è stato rimosso da questo ticket da {1}!",
"removeDm":"{0} è stato rimosso dal tuo ticket nel nostro server!",
"blacklistAddLog":"{0} è stato aggiunto alla blacklist da {1}!",
"blacklistRemoveLog":"{0} è stato rimosso dalla blacklist da {1}!",
"blacklistAddDm":"Sei stato aggiunto alla blacklist nel nostro server!\nD'ora in poi, non puoi creare ticket!",
"blacklistRemoveDm":"Sei stato rimosso dalla blacklist nel nostro server!\nOra puoi creare ticket di nuovo!",
"clearLog":"{0} tickets sono stati eliminati da {1}!"
}
},
"transcripts":{
"success":{
"visit":"Visita Trascrizione",
"ready":"Trascrizione Creata",
"textFileDescription":"Questa è la trascrizione testuale di un ticket eliminato!",
"htmlProgress":"Attendere mentre questa trascrizione html viene elaborata...",
"createdChannel":"Una nuova trascrizione di {0} è stata creata nel server!",
"createdCreator":"Una nuova trascrizione di {0} è stata creata per uno dei tuoi ticket!",
"createdParticipant":"Una nuova trascrizione di {0} è stata creata in uno dei ticket a cui hai partecipato!",
"createdActiveAdmin":"Una nuova trascrizione di {0} è stata creata in uno dei ticket in cui hai partecipato come admin!",
"createdEveryAdmin":"Una nuova trascrizione di {0} è stata creata in uno dei ticket in cui eri admin!",
"createdOther":"Una nuova trascrizione di {0} è stata creata!"
},
"errors":{
"retry":"Riprova",
"continue":"Elimina Senza Trascrizione",
"backup":"Crea Trascrizione di Backup",
"error":"Qualcosa è andato storto durante la creazione della trascrizione.\nCosa vuoi fare?\n\nQuesto ticket non sarà eliminato finché non clicchi su uno di questi pulsanti."
}
},
"errors":{
"titles":{
"internalError":"Errore Interno",
"optionMissing":"Opzione Comando Mancante",
"optionInvalid":"Opzione Comando Non Valida",
"unknownCommand":"Comando Sconosciuto",
"noPermissions":"Nessuna Autorizzazione",
"unknownTicket":"Ticket Sconosciuto",
"deprecatedTicket":"Ticket Obsoleto",
"unknownOption":"Opzione Sconosciuta",
"unknownPanel":"Pannello Sconosciuto",
"notInGuild":"Non nel Server",
"channelRename":"Impossibile Rinominare il Canale",
"busy":"Ticket Occupato"
},
"descriptions":{
"askForInfo":"Contatta il proprietario di questo bot per ulteriori informazioni!",
"askForInfoResolve":"Contatta il proprietario di questo bot se il problema non si risolve dopo alcuni tentativi.",
"internalError":"Impossibile rispondere a questo {0} a causa di un errore interno!",
"optionMissing":"Un parametro obbligatorio è mancante in questo comando!",
"optionInvalid":"Un parametro in questo comando non è valido!",
"optionInvalidChoose":"Scegli tra",
"unknownCommand":"Prova a visitare il menu di aiuto per ulteriori informazioni!",
"noPermissions":"Non hai il permesso di utilizzare questo {0}!",
"noPermissionsList":"Permessi Richiesti: (uno di essi)",
"noPermissionsCooldown":"Non hai il permesso di utilizzare questo {0} perché hai un cooldown!",
"noPermissionsBlacklist":"Non hai il permesso di utilizzare questo {0} perché sei stato blacklistato!",
"noPermissionsLimitGlobal":"Non puoi creare un ticket perché il server ha raggiunto il limite massimo di ticket!",
"noPermissionsLimitGlobalUser":"Non puoi creare un ticket perché hai raggiunto il limite massimo di ticket!",
"noPermissionsLimitOption":"Non puoi creare un ticket perché il server ha raggiunto il limite massimo di ticket per questa opzione!",
"noPermissionsLimitOptionUser":"Non puoi creare un ticket perché hai raggiunto il limite massimo di ticket per questa opzione!",
"unknownTicket":"Prova questo comando di nuovo in un ticket valido!",
"deprecatedTicket":"Il canale attuale non è un ticket valido! Potrebbe essere un ticket di una vecchia versione di Open Ticket!",
"notInGuild":"Questo {0} non funziona in DM! Riprova in un server!",
"channelRename":"A causa dei limiti di Discord, al momento non è possibile rinominare il canale. Il canale verrà automaticamente rinominato in oltre 10 minuti se il bot non viene riavviato.",
"channelRenameSource":"La fonte di questo errore è: {0}",
"busy":"Impossibile utilizzare questo {0}!\nIl ticket è attualmente in fase di elaborazione dal bot.\n\nPer favore riprova tra pochi secondi!"
},
"optionInvalidReasons":{
"stringRegex":"Il valore non corrisponde al modello!",
"stringMinLength":"Il valore deve essere di almeno {0} caratteri!",
"stringMaxLength":"Il valore deve essere di al massimo {0} caratteri!",
"numberInvalid":"Numero non valido!",
"numberMin":"Il numero deve essere almeno {0}!",
"numberMax":"Il numero deve essere al massimo {0}!",
"numberDecimal":"Il numero non è consentito come decimale!",
"numberNegative":"Il numero non è consentito come negativo!",
"numberPositive":"Il numero non è consentito come positivo!",
"numberZero":"Il numero non è consentito come zero!",
"channelNotFound":"Impossibile trovare il canale!",
"userNotFound":"Impossibile trovare l'utente!",
"roleNotFound":"Impossibile trovare il ruolo!",
"memberNotFound":"Impossibile trovare l'utente!",
"mentionableNotFound":"Impossibile trovare l'utente o il ruolo!",
"channelType":"Tipo di canale non valido!",
"notInGuild":"Questa opzione richiede che tu sia in un server!"
},
"permissions":{
"developer":"Devi essere lo sviluppatore del bot.",
"owner":"Devi essere il proprietario del server.",
"admin":"Devi essere un admin del server.",
"moderator":"Devi essere un moderatore.",
"support":"Devi essere nel team di supporto.",
"member":"Devi essere un membro.",
"discord-administrator":"Devi avere il permesso `ADMINISTRATOR`."
},
"actionInvalid":{
"close":"Il ticket è già chiuso!",
"reopen":"Il ticket non è ancora chiuso!",
"claim":"Il ticket è già stato rivendicato!",
"unclaim":"Il ticket non è ancora stato rivendicato!",
"pin":"Il ticket è già stato fissato!",
"unpin":"Il ticket non è ancora stato sbloccato!",
"add":"Questo utente può già accedere al ticket!",
"remove":"Impossibile rimuovere questo utente dal ticket!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickets",
"reason":"Motivo",
"creator":"Creatore",
"remaining":"Tempo Rimanente",
"added":"Aggiunto",
"removed":"Rimosso",
"filter":"Filtro",
"claimedBy":"Rivendicato Da {0}",
"method":"Metodo",
"type":"Tipo",
"blacklisted":"Blacklistato",
"panel":"Pannello",
"command":"Comando",
"system":"Sistema",
"true":"Vero",
"false":"Falso",
"syntax":"Sintassi",
"originalName":"Nome Originale",
"newName":"Nuovo Nome",
"until":"Fino a",
"validOptions":"Opzioni Valide",
"validPanels":"Pannelli Validi",
"autoclose":"Chiusura Automatica",
"autodelete":"Cancellazione Automatica",
"startupDate":"Data di Avvio",
"version":"Versione",
"name":"Nome",
"role":"Ruolo",
"status":"Stato",
"claimed":"Rivendicato",
"pinned":"Fissato",
"creationDate":"Data di Creazione"
},
"lowercase":{
"text":"testo",
"html":"html",
"command":"comando",
"modal":"modale",
"button":"pulsante",
"dropdown":"dropdown",
"method":"metodo"
}
},
"commands":{
"reason":"Specifica un motivo facoltativo che sarà visibile nei log.",
"help":"Ottieni un elenco di tutti i comandi disponibili.",
"panel":"Genera un messaggio con un dropdown o pulsanti (per la creazione del ticket).",
"panelId":"L'identificatore del pannello che vuoi generare.",
"panelAutoUpdate":"Vuoi che questo pannello si aggiorni automaticamente quando viene modificato?",
"ticket":"Crea istantaneamente un ticket.",
"ticketId":"L'identificatore del ticket che vuoi creare.",
"close":"Chiudi un ticket.",
"delete":"Elimina un ticket.",
"deleteNoTranscript":"Elimina questo ticket senza creare una trascrizione.",
"reopen":"Riapri un ticket.",
"claim":"Rivendica un ticket.",
"claimUser":"Rivendica questo ticket a qualcun altro invece di te stesso.",
"unclaim":"Rimuovi la rivendicazione di un ticket.",
"pin":"Fissa un ticket.",
"unpin":"Sblocca un ticket.",
"move":"Sposta un ticket.",
"moveId":"L'identificatore dell'opzione a cui vuoi spostare.",
"rename":"Rinomina un ticket.",
"renameName":"Il nuovo nome per questo ticket.",
"add":"Aggiungi un utente a un ticket.",
"addUser":"L'utente da aggiungere.",
"remove":"Rimuovi un utente da un ticket.",
"removeUser":"L'utente da rimuovere.",
"blacklist":"Gestisci la blacklist del ticket.",
"blacklistView":"Visualizza un elenco della blacklist attuale.",
"blacklistAdd":"Aggiungi un utente alla blacklist.",
"blacklistRemove":"Rimuovi un utente dalla blacklist.",
"blacklistGet":"Ottieni i dettagli di un utente blacklistato.",
"blacklistGetUser":"L'utente di cui ottenere i dettagli.",
"stats":"Visualizza le statistiche del bot, di un membro o di un ticket.",
"statsReset":"Reimposta tutte le statistiche del bot (e inizia a contare da zero).",
"statsGlobal":"Visualizza le statistiche globali.",
"statsUser":"Visualizza le statistiche di un utente nel server.",
"statsUserUser":"L'utente di cui visualizzare le statistiche.",
"statsTicket":"Visualizza le statistiche di un ticket nel server.",
"statsTicketTicket":"Il ticket da visualizzare.",
"clear":"Elimina più ticket contemporaneamente.",
"clearFilter":"Il filtro per eliminare ticket.",
"clearFilters":{
"all":"Tutti",
"open":"Aperti",
"close":"Chiusi",
"claim":"Rivendicati",
"unclaim":"Non Rivendicati",
"pin":"Fissati",
"unpin":"Non Fissati",
"autoclose":"Chiusura Automatica"
},
"autoclose":"Gestisci la chiusura automatica in un ticket.",
"autocloseDisable":"Disabilita la chiusura automatica in questo ticket.",
"autocloseEnable":"Abilita la chiusura automatica in questo ticket.",
"autocloseEnableTime":"Il numero di ore in cui questo ticket deve essere inattivo per chiuderlo.",
"autodelete":"Gestisci la cancellazione automatica in un ticket.",
"autodeleteDisable":"Disabilita la cancellazione automatica in questo ticket.",
"autodeleteEnable":"Abilita la cancellazione automatica in questo ticket.",
"autodeleteEnableTime":"Il numero di giorni in cui questo ticket deve essere inattivo per eliminarlo."
},
"helpMenu":{
"help":"Ottieni un elenco di tutti i comandi disponibili.",
"ticket":"Crea istantaneamente un ticket.",
"close":"Chiudi un ticket, disabilita la scrittura in questo canale.",
"delete":"Elimina un ticket, crea una trascrizione quando abilitato.",
"reopen":"Riapri un ticket, abilita nuovamente la scrittura in questo canale.",
"pin":"Fissa un ticket. Questo lo sposterà in cima e aggiungerà un'emoji '📌' al nome.",
"unpin":"Sblocca un ticket. Il ticket rimarrà nella sua posizione ma perderà l'emoji '📌'.",
"move":"Sposta un ticket. Questo cambierà il tipo di questo ticket.",
"rename":"Rinomina un ticket. Questo cambierà il nome del canale di questo ticket.",
"claim":"Rivendica un ticket. In questo modo, il tuo team saprà che stai gestendo questo ticket.",
"unclaim":"Rimuovi la rivendicazione di un ticket. In questo modo, il tuo team saprà che questo ticket è di nuovo libero.",
"add":"Aggiungi un utente a un ticket. Questo permetterà all'utente di leggere e scrivere in questo ticket.",
"remove":"Rimuovi un utente da un ticket. Questo rimuoverà la possibilità di leggere e scrivere per un utente in questo ticket.",
"panel":"Genera un messaggio con un dropdown o pulsanti (per la creazione del ticket).",
"blacklistView":"Visualizza un elenco della blacklist attuale.",
"blacklistAdd":"Aggiungi un utente alla blacklist.",
"blacklistRemove":"Rimuovi un utente dalla blacklist.",
"blacklistGet":"Ottieni i dettagli di un utente blacklistato.",
"statsGlobal":"Visualizza le statistiche globali.",
"statsTicket":"Visualizza le statistiche di un ticket nel server.",
"statsUser":"Visualizza le statistiche di un utente nel server.",
"statsReset":"Reimposta tutte le statistiche del bot (e inizia a contare da zero).",
"autocloseDisable":"Disabilita la chiusura automatica in questo ticket.",
"autocloseEnable":"Abilita la chiusura automatica in questo ticket.",
"autodeleteDisable":"Disabilita la cancellazione automatica in questo ticket.",
"autodeleteEnable":"Abilita la cancellazione automatica in questo ticket."
},
"stats":{
"scopes":{
"global":"Statistiche Globali",
"system":"Statistiche di Sistema",
"user":"Statistiche Utente",
"ticket":"Statistiche Ticket",
"participants":"Partecipanti"
},
"properties":{
"ticketsCreated":"Ticket Creati",
"ticketsClosed":"Ticket Chiusi",
"ticketsDeleted":"Ticket Eliminati",
"ticketsReopened":"Ticket Riaperti",
"ticketsAutoclosed":"Ticket Chiusi Automaticamente",
"ticketsClaimed":"Ticket Rivendicati",
"ticketsPinned":"Ticket Fissati",
"ticketsMoved":"Ticket Spostati",
"usersBlacklisted":"Utenti Blacklistati",
"transcriptsCreated":"Trascrizioni Create"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["TsgIndrius"],
"lastedited":"26/01/2025",
"language":"Lithuanian",
"automated":false
},
"checker":{
"system":{
"typeError":"[KLAIDA]",
"headerOpenTicket":"Atidaryti Bilietą",
"typeWarning":"[Įspėjimas]",
"typeInfo":"[INFORMACIJA]",
"headerConfigChecker":"KONFIGŪROS PATIKRINIMAS",
"headerDescription":"pažiūrėk klaidą savo konfigūracijos faile!",
"footerError":"Bot'as negali pastartuoti kol visi {0}' nebus sutvarkyti!",
"footerWarning":"Rekomenduojama sutvarkyti visus {0}' prieš paleidžiant bot'a!",
"footerSupport":"PAGALBA: {0} - DOCS: {1}",
"compactInformation":"NAUDOK {0} DĖL IŠSAMESNĖS INFORMACIJOS!",
"dataPath":"path",
"dataDocs":"docs",
"dataMessages":"pranešimas"
},
"messages":{
"stringTooShort":"Ši eilutė negali būti trumpesnė nei {0} raidžių!",
"stringTooLong":"Ši eilutė negali būti ilgesnė nei {0} raidžių!",
"stringLengthInvalid":"Šita eilutė turi būti ilgesnė negu {0} raidžių ilgio!",
"stringStartsWith":"Šita eilutė turi prasidėti su {0}!",
"stringEndsWith":"Ši eilutė turi baigtis su {0}!",
"stringContains":"Šita eilutė turi turėti {0}!",
"stringChoices":"Ši eilutė gali būti tik viena iš šių pasirinkimų: {0}!",
"stringRegex":"Šita eilutė nėra teisinga!",
"numberTooShort":"Šis skaičius negali būti trumpesnis nei {0} raidžių!",
"numberTooLong":"Šis skaičius negali būti ilgesnis nei {0} raidžių!",
"numberLengthInvalid":"Šis skaičius turi būti {0} raidžių ilgio!",
"numberTooSmall":"Šis skaičius turi būti bent {0}!",
"numberTooLarge":"Šis skaičius turi būti ne daugiau negu {0}!",
"numberNotEqual":"Šis skaičius turi būti {0}!",
"numberStep":"Šis skaičius turi būti kartotinis {0}!",
"numberStepOffset":"Šis skaičius turi būti kartotinis {0} pradedant nuo {1}!",
"numberStartsWith":"Šitas skaičius turi pradėti nuo {0}!",
"numberEndsWith":"Šitas numeris turi baigtis su {0}!",
"numberContains":"Šitas skaičius turi turėti {0}!",
"numberChoices":"Šitas skaičius gali būti tik vienas iš šių pasirinkimų: {0}!",
"numberFloat":"Šis skaičius negali būti dešimtainis!",
"numberNegative":"Šitas numeris negali būti neigiamas!",
"numberPositive":"Šitas numeris negali būti teigiamas!",
"numberZero":"Šitas numeris negali būti nulinis!",
"booleanTrue":"Šis boolean negali būti tiesa!",
"booleanFalse":"Šis boolean negali būti neteisingas!",
"arrayEmptyDisabled":"Šis array negali būti tuščias!",
"arrayEmptyRequired":"Šis array turi būti tuščias!",
"arrayTooShort":"Šis array turi būti bent ilgesnis negu {0}!",
"arrayTooLong":"Šitas array turi būti trumpesnis negu {0}!",
"arrayLengthInvalid":"Šio array ilgis turi būti {0}!",
"arrayInvalidTypes":"Šiame array gali būti tik šie tipai: {0}!",
"arrayDouble":"Šis array neleidžia tureti tos pačios reikšmės du kartus!",
"discordInvalidId":"Šitas neteisingas discord'o {0} ID!",
"discordInvalidIdOptions":"Tai neteisingas discord {0} ID! Taip pat galite naudoti vieną iš šių: {1}!",
"discordInvalidToken":"Šitas Token yra neteisingas prašyčiau idėti teisinga Token!",
"colorInvalid":"Tai netinkama šešioliktainė spalva!",
"emojiTooShort":"Ši eilutė turi turėti bent {0} jaustukų!",
"emojiTooLong":"Šią eilutę reikia turėti maziau negu {0} jaustukų!",
"emojiCustom":"Šitas jaustukas negali būti nuosavas!",
"emojiInvalid":"Šitas jaustukas netinkamas!",
"urlInvalid":"Šitas linkas neveikiantis!",
"urlInvalidHttp":"Šitas linkas turi naudoti https:// protocol!",
"urlInvalidProtocol":"Šitas linkas turi naudoti http:// & https:// protocols!",
"urlInvalidHostname":"Šio linko serverio pavadinimas neleidžiamas!",
"urlInvalidExtension":"Šiame URL yra netinkamas plėtinys! Pasirinkite tarp: {0}!",
"urlInvalidPath":"Šiame URL yra netinkamas kelias!",
"idNotUnique":"Šis ID nėra unikalus, naudokite kitą ID!",
"idNonExistent":"Šitas ID {0} neegzistuoja!",
"invalidType":"Šios valdos turi būti tipas: {0}!",
"propertyMissing":"Ši valda {0} šio objekto trūksta!",
"propertyOptional":"Ši valda {0} yra neprivalomas šiame objekte!",
"objectDisabled":"Šis objektas išjungtas, ijunkite jį naudodami {0}!",
"nullInvalid":"Ši valda negali būti niekinė!",
"switchInvalidType":"Tai turi būti vienas iš toliau nurodytų tipų: {0}!",
"objectSwitchInvalid":"Šis objektas turi būti vieno iš šių tipų: {0}!",
"invalidLanguage":"Neiteisinga Kalba!",
"invalidButton":"Šis mygtukas turi turėti bent {0} arba {1}!",
"unusedOption":"Šis pasirinkimas {0} nėra naudojamas!",
"unusedQuestion":"Klausimas {0} nėra naudojamas niekur!",
"dropdownOption":"Pasirinkimas su įjungtu išskleidžiamuoju meniu gali būti tik „bilieto“ tipo parinktys!"
}
},
"actions":{
"buttons":{
"create":"Aplankykite Bilietą",
"close":"Uždarykite Bilieta",
"delete":"Ištrinti Bilieta",
"reopen":"Atnaujinti Bilieta",
"claim":"Claim Bilieta",
"unclaim":"Unclaim Bilieta",
"pin":"Prisegti Bilieta",
"unpin":"Atsegti Bilieta",
"clear":"Ištrinti Bilieta",
"helpSwitchSlash":"Pamatyti Slash Komandas",
"helpSwitchText":"Peržiūrėti Teksto Komandas ",
"helpPage":"Puslapis {0}",
"withReason":"Su Priežastimi",
"withoutTranscript":"Be Išrašo"
},
"titles":{
"created":"Bilietas Sukurtas",
"close":"Bilietas Uždarytas",
"delete":"Bilietas Ištrintas",
"reopen":"Bilietas Atnaujintas",
"claim":"Bilietas Claimed",
"unclaim":"Bilietas Unclaimed",
"pin":"Bilietas Prisegtas",
"unpin":"Bilietas Atsegtas",
"rename":"Bilietas Pervadytas",
"move":"Bilietas Perkeltas",
"add":"Bilieto Naudotojas Pridėtas",
"remove":"Bilieto Naudotojas Pašalintas",
"help":"Galimi Komandos",
"statsReset":"Atkurti Statusa",
"blacklistAdd":"Naudotojas Užblokuotas",
"blacklistRemove":"Naudotojas Atblokuotas",
"blacklistGet":"Naudotojas Užblokuotas",
"blacklistView":"Dabartinis Užblokavimai",
"blacklistAddDm":"Žmogus buvo užblokuotas",
"blacklistRemoveDm":"Pašalino užblokavima",
"clear":"Bilietai išvalyti",
"roles":"Roles Atnaujinti",
"autoclose":"Bilietas automatiškai uždarytas",
"autocloseEnabled":"Automatinis uždarymas įjungtas",
"autocloseDisabled":"Automatinis uždarymas išjungtas",
"autodelete":"Bilietas automatiškai ištrintas",
"autodeleteEnabled":"Bilieto automatinis ištrynimas įjungtas",
"autodeleteDisabled":"Bilieto automatinis ištrynimas išjungtas"
},
"descriptions":{
"create":"Jūsų bilietas sukurtas. Spustelėkite toliau esantį mygtuką, kad jį pasiektumėte!",
"close":"Bilietas buvo sėkmingai uždarytas!",
"delete":"Bilietas buvo sėkmingai ištrintas!",
"reopen":"Bilietas buvo sėkmingai atidarytas!",
"claim":"Bilietas buvo sėkmingai claimed!",
"unclaim":"Bilietas buvo sėkmingai unclaimed!",
"pin":"Bilietas buvo sėkmingai prisegtas!",
"unpin":"Bilietas buvo sėkmingai atsegtas",
"rename":"Bilietas buvo pervadytas į {0} sėkmingai!",
"move":"Bilietas buvo perkeltas į {0} sėkmingai!",
"add":"{0} buvo pridėtas į bilieta sekmingai!",
"remove":"{0} buvo pašalintas iš bilieto sėkmingai!",
"helpExplanation":"`<pavadinimas>` => reikalingas parametras\n`[pavadinimas]` => pasirenkamas parametras",
"statsReset":"Boto statistika buvo sekmingai nustatyti iš naujo!",
"statsError":"Negaliu matyti bilieto statistikos!\n{0} nėra bilietas!",
"blacklistAdd":"{0} buvo sėkmingai užblokuotas!",
"blacklistRemove":"{0} buvo sėkmingai užblokuotas!",
"blacklistGetSuccess":"{0} yra užblokuotas!",
"blacklistGetEmpty":"{0} nėra užblokuotas!",
"blacklistViewEmpty":"Dar niekas nebuvo užblokuotas!",
"blacklistViewTip":"Norėdami užblokuoti naudotoja, naudokite \"/blacklist add\".!",
"clearVerify":"Ar tikrai norite ištrinti kelis bilietus?\nŠio veiksmo anuliuoti negalima!",
"clearReady":"{0} bilietai buvo sėkmingai pašalinti!",
"rolesEmpty":"Jokie roles nebuvo atnaujinti!",
"autocloseLeave":"Šis bilietas buvo automatiškai uždarytas, nes kūrėjas paliko serverį!",
"autocloseTimeout":"Šis bilietas buvo automatiškai uždarytas, nes buvo neaktyvus daugiau nei `{0}h`!",
"autodeleteLeave":"Šis bilietas buvo automatiškai ištrintas, nes kūrėjas paliko serverį!",
"autodeleteTimeout":"Šis bilietas buvo automatiškai ištrintas, nes buvo neaktyvus daugiau nei `{0} dienas`!",
"autocloseEnabled":"Šiame biliete įjungtas automatinis uždarymas!\nJis bus uždarytas, kai bus neaktyvus ilgiau nei `{0}h`!",
"autocloseDisabled":"Šiame biliete automatinis uždarymas išjungtas!\nJis nebebus automatiškai uždarytas!",
"autodeleteEnabled":"Šiame biliete įgalintas automatinis ištrynimas!\nJis bus ištrintas, kai bus neaktyvus ilgiau nei `{0} dienas`!",
"autodeleteDisabled":"Automatinis ištrynimas šiame biliete išjungtas!\nJis nebebus automatiškai ištrintas!",
"ticketMessageLimit":"Tu gali sukurti tik {0} bilietus tuo pačiu metu!",
"ticketMessageAutoclose":"Šis bilietas bus automatiškai uždarytas, kai bus neaktyvus {0}h!",
"ticketMessageAutodelete":"Šis bilietas bus automatiškai ištrintas, kai neaktyvus {0} dienas!",
"panelReady":"Žemiau rasite skydelį!\nŠį pranešimą dabar galima ištrinti!"
},
"modal":{
"closePlaceholder":"Kodėl tu uždarei šį bilieta?",
"deletePlaceholder":"Kodėl tu ištrinei šita bilieta?",
"reopenPlaceholder":"Kam tu atidarei bilieta?",
"claimPlaceholder":"Kam tu claimed šita bilieta?",
"unclaimPlaceholder":"Kam tu Unclaimed šita bilieta?",
"pinPlaceholder":"Kam tu prisegei šita bilieta?",
"unpinPlaceholder":"Kam tu atsegei šita bilieta?"
},
"logs":{
"createLog":"Naujas bilietas buvo sukurtas {0}!",
"closeLog":"šitas bilietas bus uždarytas už {0}!",
"closeDm":"Tavo bilietas buvo uždarytas!",
"deleteLog":"Šitas bilietas buvo ištrintas nuo {0}!",
"deleteDm":"Jūsų bilietas buvo ištrintas!",
"reopenLog":"Šitas bilietas buvo atidarytas nuo {0}!",
"reopenDm":"Tavo bilietas buvo atidarytas!",
"claimLog":"Šitas bilietas buvo claimed nuo {0}!",
"claimDm":"Tavo bilietas buvo claimed!",
"unclaimLog":"Bilietas buvo unclaimed nuo {0}!",
"unclaimDm":"Tavo bilietas buvo unclaimed!",
"pinLog":"This ticket has been pinned by {0}!",
"pinDm":"Bilietas buvo prisegtas!",
"unpinLog":"Bilietas buvo atsegtas nuo {0}!",
"unpinDm":"Tavo bilietas buvo atsegtas!",
"renameLog":"Šitas bilietas buvo pervadintas į {0} nuo {1}!",
"renameDm":"Tavo bilietas buvo pervadytas į {0}!",
"moveLog":"Šitas bilietas buvo perkeltas į {0} nuo {1}!",
"moveDm":"Tavo bilietas buvo perkeltas į {0}!",
"addLog":"{0} buvo pridėtas į bilieta nuo {1}!",
"addDm":"{0} Buvo pridėtas į tavo bilieta!",
"removeLog":"{0} buvo pašalintas iš šito bilieto nuo {1}!",
"removeDm":"{0} buvo pasalintas iš tavo bilieto!",
"blacklistAddLog":"{0} buvo užblokuotas nuo {1}!",
"blacklistRemoveLog":"{0} buvo atblokuotas nuo {1}!",
"blacklistAddDm":"Jūs buvote užblokuotas!\nNuo šiol negalite sukurti bilieto!",
"blacklistRemoveDm":"Jūs buvote pašalinti iš juodojo sąrašo mūsų serveryje!\nDabar vėl galite kurti bilietus!",
"clearLog":"{0} bilietai buvo pašalinti nuo {1}!"
}
},
"transcripts":{
"success":{
"visit":"Peržiūrėti Išrašus",
"ready":"Išrašai sukurti",
"textFileDescription":"!",
"htmlProgress":"Palaukite, kol šis html išrašas bus apdorojamas...",
"createdChannel":"Naujas {0} išrašas buvo sukurtas!",
"createdCreator":"Naujas {0} vieno iš jūsų bilietų išrašas sukurtas!",
"createdParticipant":"Naujas {0} išrašas buvo sukurta viename iš bilietų, kuriuose dalyvavote!",
"createdActiveAdmin":"Naujas {0} išrašas buvo sukurta viename iš bilietų, kuriuose dalyvavote kaip administratorius!",
"createdEveryAdmin":"Naujas {0} išrašas buvo sukurta viename iš bilietų, kuriuose buvote administratorius!",
"createdOther":"Naujas {0} išrašas buvo sukurtas!"
},
"errors":{
"retry":"Bandyk Iš naujo",
"continue":"Ištrinti be išrašo",
"backup":"Sukurti Atsarginį išraša",
"error":"Kažkas nepavyko bandant sukurti išraša.\nKą norėtumėte daryti?\n\nŠis bilietas nebus ištrintas, kol spustelėsite vieną iš šių mygtukų."
}
},
"errors":{
"titles":{
"internalError":"Vidinė klaida",
"optionMissing":"Trūksta komandos parinkties",
"optionInvalid":"Netinkama komandos parinktis",
"unknownCommand":"Nepažystama komanda",
"noPermissions":"Jokių leidimų",
"unknownTicket":"Nepažystamas bilietas",
"deprecatedTicket":"Nebenaudojamas bilietas",
"unknownOption":"Nepažystamas pasirinkimas",
"unknownPanel":"Nepažystama skydelis",
"notInGuild":"Nera serveryje",
"channelRename":"Negaliu pervadyti kanalo",
"busy":"Bilietas yra užimtas"
},
"descriptions":{
"askForInfo":"Susisiek su savininku šito bilieto del daigiau informacijos!",
"askForInfoResolve":"Susisiekite su šio bot'o savininku, jei ši problema neišsprendžiama po kelių bandymų.",
"internalError":"Nepavyko atsakyti į šį {0} dėl vidinės klaidos!",
"optionMissing":"Šioje komandoje trūksta būtino parametro!",
"optionInvalid":"Šios komandos parametras neteisingas!",
"optionInvalidChoose":"Pasirink tarp",
"unknownCommand":"Norėdami gauti daugiau informacijos, pabandykite apsilankyti pagalbos meniu!",
"noPermissions":"Jums neleidžiama to naudoti {0}!",
"noPermissionsList":"Reikalingas Leidimas: (vienas iš jų)",
"noPermissionsCooldown":"Jums neleidžiama naudoti šio {0}, nes reikia atvėsti!",
"noPermissionsBlacklist":"Jums neleidžiama naudoti šio {0}, nes buvote užblokuotas!",
"noPermissionsLimitGlobal":"Jums neleidžiama kurti bilieto, nes serveris pasiekė maksimalų bilietų limitą!",
"noPermissionsLimitGlobalUser":"Jums neleidžiama kurti bilieto, nes pasiekėte maksimalų bilietų limitą!",
"noPermissionsLimitOption":"Jums neleidžiama kurti bilieto, nes serveris pasiekė maksimalų šios parinkties bilietų limitą!",
"noPermissionsLimitOptionUser":"Jums neleidžiama kurti bilieto, nes pasiekėte maksimalų šios parinkties bilietų limitą!",
"unknownTicket":"Išbandykite šią komandą dar kartą naudodami galiojantį bilietą!",
"deprecatedTicket":"Dabartinis kanalas negalioja! Tai galėjo būti bilietas iš senos Open Ticket versijos!",
"notInGuild":"Šis {0} neveikia DM! Bandykite dar kartą serveryje!",
"channelRename":"Dėl discord'o greičio apribojimų, šiuo metu robotas negali pervardyti kanalo. Kanalas bus automatiškai pervardytas per 10 minučių, jei robotas nebus paleistas iš naujo.",
"channelRenameSource":"Šios klaidos šaltinis yra: {0}",
"busy":"Neįmanoma naudoti šio {0}!\nBilietą šiuo metu apdoroja botas.\n\nBandykite dar kartą po kelių sekundžių!"
},
"optionInvalidReasons":{
"stringRegex":"Vertė neatitinka šablono!",
"stringMinLength":"Reikšmė turi būti bent {0} simbolių!",
"stringMaxLength":"Reikšmę turi sudaryti daugiausia {0} simboliai!",
"numberInvalid":"Neteisingas numeris!",
"numberMin":"Skaičius turi būti bent {0}!",
"numberMax":"Skaičius turi būti didžiausias {0}!",
"numberDecimal":"Skaičius negali būti dešimtainis!",
"numberNegative":"Skaičius negali būti neigiamas!",
"numberPositive":"Skaičius negali būti teigiamas!",
"numberZero":"Skaičius negali būti nulis!",
"channelNotFound":"Negaliu surasti kanalo!",
"userNotFound":"Negaliu surasti naudotojo!",
"roleNotFound":"Negaliu surasti rolės!",
"memberNotFound":"negaliu surasti naudotojo!",
"mentionableNotFound":"negaliu surasti naudotojo arba rolės!",
"channelType":"Neteisingas kanalo tipas!",
"notInGuild":"Ši parinktis reikalauja, kad būtumėte serveryje!"
},
"permissions":{
"developer":"Tu turi būti developeris šito boto.",
"owner":"Tu turi būti serverio savininkas.",
"admin":"Tu turi būti serverio administratorius.",
"moderator":"Tu turi būt serverio moderatorius.",
"support":"Tu turi būti prižiūrėtojas.",
"member":"Tu turi būti narys.",
"discord-administrator":"Tu turi turėti `ADMINISTRATOR` leidima."
},
"actionInvalid":{
"close":"Bilietas yra jau uždarytas!",
"reopen":"Bilietas nėra uždarytas!",
"claim":"Bilietas jau yra claimed!",
"unclaim":"Bilietas nera claimed!",
"pin":"Bilietas jau yra prisegtas!",
"unpin":"Bilietas nėra prisegtas!",
"add":"Šitas naudotojas jau gali matyti šita bilieta!",
"remove":"Negaliu pašalinti naudotojo iš bilieto!"
}
},
"params":{
"uppercase":{
"ticket":"Bilietas",
"tickets":"Bilietao",
"reason":"Priežastis",
"creator":"Kūrėjas",
"remaining":"Liko laiko",
"added":"Pridėta",
"removed":"Pašalinta",
"filter":"Filteris",
"claimedBy":"Claimed nuo {0}",
"method":"Metodas",
"type":"Tipas",
"blacklisted":"Užblokuotas",
"panel":"Skydelis",
"command":"Komanda",
"system":"Sistema",
"true":"Teisingai",
"false":"Klaidingai",
"syntax":"Sintaksė",
"originalName":"Orginalus Pavadinimas",
"newName":"Naujas pavadinimas",
"until":"Iki",
"validOptions":"Galiojančios parinktys",
"validPanels":"Galiojančios Skydeliai",
"autoclose":"Automatinis uždarymas",
"autodelete":"Automatinis Ištrinimas",
"startupDate":"Paleidimo data",
"version":"Versija",
"name":"Pavadinimas",
"role":"Role",
"status":"Statusas",
"claimed":"Claimed",
"pinned":"Prisegta",
"creationDate":"Sukūrimo data"
},
"lowercase":{
"text":"tekstas",
"html":"html",
"command":"komanda",
"modal":"modal",
"button":"mygtukas",
"dropdown":"išskleidžiamas meniu",
"method":"metodas"
}
},
"commands":{
"reason":"Nurodykite pasirenkamą priežastį, kuri bus matoma veiksmo žurnaluose.",
"help":"Gaukite visų galimų komandų sąrašą.",
"panel":"Pateikite pranešimą išskleidžiamuoju meniu arba mygtukais (bilietui sukurti).",
"panelId":"Skydelio, kurį norite sukurti, identifikatorius.",
"panelAutoUpdate":"Ar norite, kad šis skydelis būtų automatiškai atnaujintas redaguojant?",
"ticket":"Iškart sukurkite bilietą.",
"ticketId":"Bilieto, kurį norite sukurti, identifikatorius.",
"close":"Uždaryti bilieta.",
"delete":"Ištrinti bilieta.",
"deleteNoTranscript":"Ištrinti šita bilieta nesukuriant išrašo.",
"reopen":"Atidaryti bilieta.",
"claim":"Claim bileta.",
"claimUser":"Claim bilieta kažka kita negu save.",
"unclaim":"Unclaim bilieta.",
"pin":"Prisegti bilieta.",
"unpin":"Atsegti bilieta.",
"move":"Perkelti bilieta.",
"moveId":"Parinkties, į kurią norite pereiti, identifikatorius.",
"rename":"Pervadinti bilieta.",
"renameName":"Naujas pavadinimas šitam bilietui.",
"add":"Pridėk naudotoja prie bilieto.",
"addUser":"Asmuo kurį norite pridėti.",
"remove":"Pašalinti naudotoja iš bilieto.",
"removeUser":"Pašalinti asmuo iš bilieto.",
"blacklist":"Tvarkykite bilietų užblokavimo sąrašą.",
"blacklistView":"Peržiūrėkite dabartinio užblokavimo sąrašą.",
"blacklistAdd":"Pridėk asmenį i užblokuoti saraša.",
"blacklistRemove":"Pašalinti asmenį iš užblokuotų sarašo.",
"blacklistGet":"Gaukite išsamią informaciją iš naudotojo kuris buvo užblokuotas.",
"blacklistGetUser":"Asmuo kurio nori gauti informacija.",
"stats":"Peržiūrėkite boto, nario ar bilieto statistiką.",
"statsReset":"Iš naujo nustatykite visą roboto statistiką (ir pradėkite skaičiuoti nuo nulio).",
"statsGlobal":"Peržiūrėkite pasaulinę statistiką.",
"statsUser":"Peržiūrėkite serverio vartotojo statistiką.",
"statsUserUser":"Asmuo kuri norite peržiūrėti.",
"statsTicket":"Peržiūrėkite bilieto statistiką serveryje.",
"statsTicketTicket":"Pamatyti Bilieta.",
"clear":"Ištrinkite kelis bilietus vienu metu.",
"clearFilter":"Bilietų išvalymo filtras.",
"clearFilters":{
"all":"Visus",
"open":"Atidarytus",
"close":"Uždarytus",
"claim":"Claimed",
"unclaim":"Unclaimed",
"pin":"Prisegtus",
"unpin":"Atsegtus",
"autoclose":"Automatinius uždarymus"
},
"autoclose":"Tvarkykite automatinį uždarymą biliete.",
"autocloseDisable":"Išjungti automatinį uždarymą šiame biliete.",
"autocloseEnable":"Įgalinti automatinį uždarymą šiame biliete.",
"autocloseEnableTime":"Norint jį uždaryti, šis bilietas turi būti neaktyvus.",
"autodelete":"Tvarkykite automatinį ištrynimą biliete.",
"autodeleteDisable":"Išjungti automatinį ištrynimą šiame biliete.",
"autodeleteEnable":"Įgalinti automatinį ištrynimą šiame biliete.",
"autodeleteEnableTime":"Kiek dienų šis bilietas turi būti neaktyvus, kad jį būtų galima ištrinti."
},
"helpMenu":{
"help":"Gauk saraša galimų komandų.",
"ticket":"Iškart atidaryk bilieta.",
"close":"Uždarykite bilietą, tai išjungs rašymą šiame kanale.",
"delete":"Ištrinkite bilietą. Kai įjungta, sukuriamas nuorašas.",
"reopen":"Iš naujo atidarykite bilietą, todėl vėl galėsite rašyti šiame kanale.",
"pin":"Prisekite bilietą. Taip bilietas bus perkeltas į viršų ir prie pavadinimo bus pridėta emocija „📌“..",
"unpin":"Atsegti bilietą. Bilietas liks savo pozicijoje, bet praras emociją „📌“..",
"move":"Perkelkite bilietą. Tai pakeis šio bilieto tipą.",
"rename":"Pervardykite bilietą. Tai pakeis šio bilieto kanalo pavadinimą.",
"claim":"CLaim bilieto. Taip galite pranešti savo komandai, kad tvarkote šį bilietą.",
"unclaim":"Unclaim bilietą. Taip galite pranešti savo komandai, kad šis bilietas vėl netvarkomas.",
"add":"Pridėkite vartotoją prie bilieto. Tai leis vartotojui skaityti ir rašyti šiame biliete.",
"remove":"Pašalinkite vartotoją iš bilieto. Tai pašalins vartotojo galimybę skaityti ir rašyti šiame biliete.",
"panel":"Pateikite pranešimą išskleidžiamuoju meniu arba mygtukais (bilietui sukurti).",
"blacklistView":"Peržiūrėkite dabartinio užblokuotų žmonių sąrašą.",
"blacklistAdd":"Užblokuok žmogų nuo kurimosi bikieto.",
"blacklistRemove":"Pašalinkite vartotoją iš juodojo sąrašo.",
"blacklistGet":"Gaukite išsamią informaciją iš naudotojo, įtraukto į juodąjį sąrašą.",
"statsGlobal":"Peržiūrėkite pasaulinę statistiką.",
"statsTicket":"Peržiūrėkite bilieto statistiką serveryje.",
"statsUser":"Peržiūrėkite serverio vartotojo statistiką.",
"statsReset":"Iš naujo nustatykite visą roboto statistiką (ir pradėkite skaičiuoti nuo nulio).",
"autocloseDisable":"Išjungti automatinį uždarymą šiame biliete.",
"autocloseEnable":"Įgalinti automatinį uždarymą šiame biliete.",
"autodeleteDisable":"Išjungti automatinį ištrynimą šiame biliete.",
"autodeleteEnable":"Įgalinti automatinį ištrynimą šiame biliete."
},
"stats":{
"scopes":{
"global":"Globalinė statistika",
"system":"Sisteminė statistika",
"user":"Naudotojo statistika",
"ticket":"Bilieto statistika",
"participants":"Dalyviai"
},
"properties":{
"ticketsCreated":"Bilietai Sukurti",
"ticketsClosed":"BILIETAI Uždaryti",
"ticketsDeleted":"Bilietai Ištrinti",
"ticketsReopened":"Bilietai Atnaujinti",
"ticketsAutoclosed":"Bilietai uždaryti automatiškai",
"ticketsClaimed":"Bilietai Claim",
"ticketsPinned":"Bilietai Prisegti",
"ticketsMoved":"Bilietai Perkelti",
"usersBlacklisted":"Naudojas Užblokuotas",
"transcriptsCreated":"Išrašai sukurti"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["DanoGlez"],
"lastedited":"28/01/2025",
"language":"Polish",
"automated":false
},
"checker":{
"system":{
"typeError":"[BŁĄD]",
"headerOpenTicket":"OTWÓRZ TICKET",
"typeWarning":"[OSTRZEŻENIE]",
"typeInfo":"[INFO]",
"headerConfigChecker":"SPRAWDZANIE KONFIGURACJI",
"headerDescription":"sprawdź błędy w swoich plikach konfiguracyjnych!",
"footerError":"bot nie uruchomi się, dopóki wszystkie {0} nie zostaną naprawione!",
"footerWarning":"zaleca się naprawienie wszystkich {0} przed uruchomieniem!",
"footerSupport":"WSPARCIE: {0} - DOKUMENTACJA: {1}",
"compactInformation":"użyj {0}, aby uzyskać więcej informacji!",
"dataPath":"ścieżka",
"dataDocs":"dokumentacja",
"dataMessages":"wiadomość"
},
"messages":{
"stringTooShort":"Ten tekst nie może być krótszy niż {0} znaków!",
"stringTooLong":"Ten tekst nie może być dłuższy niż {0} znaków!",
"stringLengthInvalid":"Ten tekst musi mieć {0} znaków!",
"stringStartsWith":"Ten tekst musi zaczynać się od {0}!",
"stringEndsWith":"Ten tekst musi kończyć się na {0}!",
"stringContains":"Ten tekst musi zawierać {0}!",
"stringChoices":"Ten tekst może być tylko jednym z następujących wartości: {0}!",
"stringRegex":"Ten tekst jest nieprawidłowy!",
"numberTooShort":"Ta liczba nie może być krótsza niż {0} znaków!",
"numberTooLong":"Ta liczba nie może być dłuższa niż {0} znaków!",
"numberLengthInvalid":"Ta liczba musi mieć {0} znaków!",
"numberTooSmall":"Ta liczba musi wynosić co najmniej {0}!",
"numberTooLarge":"Ta liczba może wynosić maksymalnie {0}!",
"numberNotEqual":"Ta liczba musi wynosić {0}!",
"numberStep":"Ta liczba musi być wielokrotnością {0}!",
"numberStepOffset":"Ta liczba musi być wielokrotnością {0}, zaczynając od {1}!",
"numberStartsWith":"Ta liczba musi zaczynać się od {0}!",
"numberEndsWith":"Ta liczba musi kończyć się na {0}!",
"numberContains":"Ta liczba musi zawierać {0}!",
"numberChoices":"Ta liczba może być tylko jedną z następujących wartości: {0}!",
"numberFloat":"Ta liczba nie może być dziesiętna!",
"numberNegative":"Ta liczba nie może być ujemna!",
"numberPositive":"Ta liczba nie może być dodatnia!",
"numberZero":"Ta liczba nie może wynosić zero!",
"booleanTrue":"Ta wartość logiczna nie może być prawdziwa!",
"booleanFalse":"Ta wartość logiczna nie może być fałszywa!",
"arrayEmptyDisabled":"Ta tablica nie może być pusta!",
"arrayEmptyRequired":"Ta tablica musi być pusta!",
"arrayTooShort":"Ta tablica musi mieć co najmniej {0} elementów!",
"arrayTooLong":"Ta tablica może mieć maksymalnie {0} elementów!",
"arrayLengthInvalid":"Ta tablica musi mieć {0} elementów!",
"arrayInvalidTypes":"Ta tablica może zawierać tylko następujące typy: {0}!",
"arrayDouble":"Ta tablica nie może zawierać tych samych wartości dwukrotnie!",
"discordInvalidId":"To jest nieprawidłowe ID Discorda {0}!",
"discordInvalidIdOptions":"To jest nieprawidłowe ID Discorda {0}! Możesz również użyć jednego z tych: {1}!",
"discordInvalidToken":"To jest nieprawidłowy token Discorda (składniowo)!",
"colorInvalid":"To jest nieprawidłowy kolor w formacie hex!",
"emojiTooShort":"Ten tekst musi zawierać co najmniej {0} emoji!",
"emojiTooLong":"Ten tekst może zawierać maksymalnie {0} emoji!",
"emojiCustom":"To emoji nie może być niestandardowym emoji Discorda!",
"emojiInvalid":"To jest nieprawidłowe emoji!",
"urlInvalid":"Ten URL jest nieprawidłowy!",
"urlInvalidHttp":"Ten URL może korzystać tylko z protokołu https://!",
"urlInvalidProtocol":"Ten URL może korzystać tylko z protokołów http:// i https://!",
"urlInvalidHostname":"Ten URL ma niedozwoloną nazwę hosta!",
"urlInvalidExtension":"Ten URL ma nieprawidłowe rozszerzenie! Wybierz spośród: {0}!",
"urlInvalidPath":"Ten URL ma nieprawidłową ścieżkę!",
"idNotUnique":"To ID nie jest unikalne, użyj innego ID!",
"idNonExistent":"ID {0} nie istnieje!",
"invalidType":"Ta właściwość musi być typu: {0}!",
"propertyMissing":"Właściwość {0} jest wymagana w tym obiekcie!",
"propertyOptional":"Właściwość {0} jest opcjonalna w tym obiekcie!",
"objectDisabled":"Ten obiekt jest wyłączony, włącz go za pomocą {0}!",
"nullInvalid":"Ta właściwość nie może być null!",
"switchInvalidType":"To musi być jeden z następujących typów: {0}!",
"objectSwitchInvalid":"Ten obiekt musi być jednym z następujących typów: {0}!",
"invalidLanguage":"To jest nieprawidłowy język!",
"invalidButton":"Ten przycisk musi zawierać co najmniej {0} lub {1}!",
"unusedOption":"Opcja {0} nie jest nigdzie używana!",
"unusedQuestion":"Pytanie {0} nie jest nigdzie używane!",
"dropdownOption":"Panel z włączonym rozwijanym menu może zawierać tylko opcje typu 'ticket'!"
}
},
"actions":{
"buttons":{
"create":"Otwórz Ticket",
"close":"Zamknij Ticket",
"delete":"Usuń Ticket",
"reopen":"Otwórz ponownie Ticket",
"claim":"Przejmij Ticket",
"unclaim":"Porzuć Ticket",
"pin":"Przypnij Ticket",
"unpin":"Odepnij Ticket",
"clear":"Usuń Tickety",
"helpSwitchSlash":"Pokaż Komendy Slash",
"helpSwitchText":"Pokaż Komendy Tekstowe",
"helpPage":"Strona {0}",
"withReason":"Z Powodem",
"withoutTranscript":"Bez Transkrypcji"
},
"titles":{
"created":"Ticket Utworzony",
"close":"Ticket Zamknięty",
"delete":"Ticket Usunięty",
"reopen":"Ticket Ponownie Otwarty",
"claim":"Ticket Przejety",
"unclaim":"Ticket Porzucony",
"pin":"Ticket Przypięty",
"unpin":"Ticket Odpięty",
"rename":"Ticket Przemianowany",
"move":"Ticket Przeniesiony",
"add":"Użytkownik Dodany do Ticketa",
"remove":"Użytkownik Usunięty z Ticketa",
"help":"Dostępne Komendy",
"statsReset":"Statystyki Zresetowane",
"blacklistAdd":"Użytkownik Zablokowany",
"blacklistRemove":"Użytkownik Odblokowany",
"blacklistGet":"Zablokowany Użytkownik",
"blacklistView":"Aktualna Lista Zablokowanych",
"blacklistAddDm":"Dodano do Listy Zablokowanych",
"blacklistRemoveDm":"Usunięto z Listy Zablokowanych",
"clear":"Tickety Usunięte",
"roles":"Role Zaktualizowane",
"autoclose":"Ticket Automatycznie Zamknięty",
"autocloseEnabled":"Automatyczne Zamknięcie Włączone",
"autocloseDisabled":"Automatyczne Zamknięcie Wyłączone",
"autodelete":"Ticket Automatycznie Usunięty",
"autodeleteEnabled":"Automatyczne Usuwanie Włączone",
"autodeleteDisabled":"Automatyczne Usuwanie Wyłączone"
},
"descriptions":{
"create":"Twój ticket został utworzony. Kliknij poniższy przycisk, aby go otworzyć!",
"close":"Ticket został pomyślnie zamknięty!",
"delete":"Ticket został pomyślnie usunięty!",
"reopen":"Ticket został pomyślnie ponownie otwarty!",
"claim":"Ticket został pomyślnie przypisany!",
"unclaim":"Ticket został pomyślnie odpisany!",
"pin":"Ticket został pomyślnie przypięty!",
"unpin":"Ticket został pomyślnie odpięty!",
"rename":"Ticket został pomyślnie przemianowany na {0}!",
"move":"Ticket został pomyślnie przeniesiony do {0}!",
"add":"{0} został pomyślnie dodany do ticketa!",
"remove":"{0} został pomyślnie usunięty z ticketa!",
"helpExplanation":"`<name>` => wymagany parametr\n`[name]` => opcjonalny parametr",
"statsReset":"Statystyki bota zostały pomyślnie zresetowane!",
"statsError":"Nie można wyświetlić statystyk ticketa!\n{0} nie jest ticketem!",
"blacklistAdd":"{0} został pomyślnie dodany do czarnej listy!",
"blacklistRemove":"{0} został pomyślnie usunięty z czarnej listy!",
"blacklistGetSuccess":"{0} jest obecnie na czarnej liście!",
"blacklistGetEmpty":"{0} nie znajduje się obecnie na czarnej liście!",
"blacklistViewEmpty":"Nikt nie został jeszcze dodany do czarnej listy!",
"blacklistViewTip":"Użyj \"/blacklist add\", aby dodać użytkownika do czarnej listy!",
"clearVerify":"Czy na pewno chcesz usunąć wiele ticketów?\nTej operacji nie można cofnąć!",
"clearReady":"{0} ticketów zostało pomyślnie usuniętych!",
"rolesEmpty":"Nie zaktualizowano żadnych ról!",
"autocloseLeave":"Ten ticket został automatycznie zamknięty, ponieważ jego twórca opuścił serwer!",
"autocloseTimeout":"Ten ticket został automatycznie zamknięty z powodu braku aktywności przez więcej niż `{0}h`!",
"autodeleteLeave":"Ten ticket został automatycznie usunięty, ponieważ jego twórca opuścił serwer!",
"autodeleteTimeout":"Ten ticket został automatycznie usunięty z powodu braku aktywności przez więcej niż `{0} dni`!",
"autocloseEnabled":"Autoczynność została włączona w tym tickecie!\nZostanie on zamknięty, jeśli będzie nieaktywny przez więcej niż `{0}h`!",
"autocloseDisabled":"Autoczynność została wyłączona w tym tickecie!\nNie będzie on już zamykany automatycznie!",
"autodeleteEnabled":"Autousuwanie zostało włączone w tym tickecie!\nZostanie on usunięty, jeśli będzie nieaktywny przez więcej niż `{0} dni`!",
"autodeleteDisabled":"Autousuwanie zostało wyłączone w tym tickecie!\nNie będzie on już usuwany automatycznie!",
"ticketMessageLimit":"Możesz utworzyć maksymalnie {0} ticket(y) jednocześnie!",
"ticketMessageAutoclose":"Ten ticket zostanie automatycznie zamknięty, jeśli będzie nieaktywny przez {0}h!",
"ticketMessageAutodelete":"Ten ticket zostanie automatycznie usunięty, jeśli będzie nieaktywny przez {0} dni!",
"panelReady":"Panel znajduje się poniżej!\nTeraz możesz usunąć tę wiadomość!"
},
"modal":{
"closePlaceholder":"Dlaczego zamknąłeś ten ticket?",
"deletePlaceholder":"Dlaczego usunąłeś ten ticket?",
"reopenPlaceholder":"Dlaczego ponownie otworzyłeś ten ticket?",
"claimPlaceholder":"Dlaczego przypisałeś ten ticket?",
"unclaimPlaceholder":"Dlaczego odpisano ten ticket?",
"pinPlaceholder":"Dlaczego przypiąłeś ten ticket?",
"unpinPlaceholder":"Dlaczego odpiąłeś ten ticket?"
},
"logs":{
"createLog":"Nowy ticket został utworzony przez {0}!",
"closeLog":"Ten ticket został zamknięty przez {0}!",
"closeDm":"Twój ticket został zamknięty na naszym serwerze!",
"deleteLog":"Ten ticket został usunięty przez {0}!",
"deleteDm":"Twój ticket został usunięty na naszym serwerze!",
"reopenLog":"Ten ticket został ponownie otwarty przez {0}!",
"reopenDm":"Twój ticket został ponownie otwarty na naszym serwerze!",
"claimLog":"Ten ticket został przypisany przez {0}!",
"claimDm":"Twój ticket został przypisany na naszym serwerze!",
"unclaimLog":"Ten ticket został odpisany przez {0}!",
"unclaimDm":"Twój ticket został odpisany na naszym serwerze!",
"pinLog":"Ten ticket został przypięty przez {0}!",
"pinDm":"Twój ticket został przypięty na naszym serwerze!",
"unpinLog":"Ten ticket został odpięty przez {0}!",
"unpinDm":"Twój ticket został odpięty na naszym serwerze!",
"renameLog":"Ten ticket został przemianowany na {0} przez {1}!",
"renameDm":"Twój ticket został przemianowany na {0} na naszym serwerze!",
"moveLog":"Ten ticket został przeniesiony do {0} przez {1}!",
"moveDm":"Twój ticket został przeniesiony do {0} na naszym serwerze!",
"addLog":"{0} został dodany do tego ticketa przez {1}!",
"addDm":"{0} został dodany do twojego ticketa na naszym serwerze!",
"removeLog":"{0} został usunięty z tego ticketa przez {1}!",
"removeDm":"{0} został usunięty z twojego ticketa na naszym serwerze!",
"blacklistAddLog":"{0} został dodany do czarnej listy przez {1}!",
"blacklistRemoveLog":"{0} został usunięty z czarnej listy przez {1}!",
"blacklistAddDm":"Zostałeś dodany do czarnej listy na naszym serwerze!\nOd teraz nie możesz tworzyć ticketów!",
"blacklistRemoveDm":"Zostałeś usunięty z czarnej listy na naszym serwerze!\nTeraz możesz ponownie tworzyć tickety!",
"clearLog":"{0} ticketów zostało usuniętych przez {1}!"
}
},
"transcripts":{
"success":{
"visit":"Otwórz transkrypt",
"ready":"Transkrypt został utworzony",
"textFileDescription":"To jest tekstowy transkrypt usuniętego ticketa!",
"htmlProgress":"Proszę czekać, trwa przetwarzanie tego transkryptu w formacie HTML...",
"createdChannel":"Nowy transkrypt {0} został utworzony na serwerze!",
"createdCreator":"Nowy transkrypt {0} został utworzony dla jednego z twoich ticketów!",
"createdParticipant":"Nowy transkrypt {0} został utworzony w jednym z ticketów, w których brałeś udział!",
"createdActiveAdmin":"Nowy transkrypt {0} został utworzony w jednym z ticketów, w których brałeś udział jako administrator!",
"createdEveryAdmin":"Nowy transkrypt {0} został utworzony w jednym z ticketów, w których byłeś administratorem!",
"createdOther":"Nowy transkrypt {0} został utworzony!"
},
"errors":{
"retry":"Spróbuj ponownie",
"continue":"Usuń bez transkryptu",
"backup":"Utwórz kopię zapasową transkryptu",
"error":"Coś poszło nie tak podczas próby utworzenia transkryptu.\nCo chciałbyś zrobić?\n\nTen ticket nie zostanie usunięty, dopóki nie klikniesz jednego z tych przycisków."
}
},
"errors":{
"titles":{
"internalError":"Błąd wewnętrzny",
"optionMissing":"Brakująca opcja polecenia",
"optionInvalid":"Nieprawidłowa opcja polecenia",
"unknownCommand":"Nieznane polecenie",
"noPermissions":"Brak uprawnień",
"unknownTicket":"Nieznany ticket",
"deprecatedTicket":"Przestarzały ticket",
"unknownOption":"Nieznana opcja",
"unknownPanel":"Nieznany panel",
"notInGuild":"Nie na serwerze",
"channelRename":"Nie można zmienić nazwy kanału",
"busy":"Ticket jest zajęty"
},
"descriptions":{
"askForInfo":"Skontaktuj się z właścicielem tego bota, aby uzyskać więcej informacji!",
"askForInfoResolve":"Skontaktuj się z właścicielem bota, jeśli problem nie rozwiąże się po kilku próbach.",
"internalError":"Nie udało się odpowiedzieć na to {0} z powodu błędu wewnętrznego!",
"optionMissing":"Brak wymaganego parametru w tym poleceniu!",
"optionInvalid":"Parametr w tym poleceniu jest nieprawidłowy!",
"optionInvalidChoose":"Wybierz spośród",
"unknownCommand":"Spróbuj odwiedzić menu pomocy, aby uzyskać więcej informacji!",
"noPermissions":"Nie masz uprawnień do użycia tego {0}!",
"noPermissionsList":"Wymagane uprawnienia: (jedno z nich)",
"noPermissionsCooldown":"Nie możesz użyć tego {0}, ponieważ masz nałożone ograniczenie czasowe!",
"noPermissionsBlacklist":"Nie możesz użyć tego {0}, ponieważ jesteś na czarnej liście!",
"noPermissionsLimitGlobal":"Nie możesz utworzyć ticketa, ponieważ serwer osiągnął maksymalny limit ticketów!",
"noPermissionsLimitGlobalUser":"Nie możesz utworzyć ticketa, ponieważ osiągnąłeś maksymalny limit ticketów!",
"noPermissionsLimitOption":"Nie możesz utworzyć ticketa, ponieważ serwer osiągnął maksymalny limit ticketów dla tej opcji!",
"noPermissionsLimitOptionUser":"Nie możesz utworzyć ticketa, ponieważ osiągnąłeś maksymalny limit ticketów dla tej opcji!",
"unknownTicket":"Spróbuj ponownie użyć tego polecenia w prawidłowym tickecie!",
"deprecatedTicket":"Obecny kanał nie jest prawidłowym ticketem! Może to być ticket z starej wersji Open Ticket!",
"notInGuild":"To {0} nie działa w DM! Spróbuj ponownie na serwerze!",
"channelRename":"Z powodu ograniczeń Discorda obecnie niemożliwe jest, aby bot zmienił nazwę kanału. Kanał zostanie automatycznie przemianowany w ciągu 10 minut, jeśli bot nie zostanie zrestartowany.",
"channelRenameSource":"Źródło tego błędu: {0}",
"busy":"Nie można użyć tego {0}!\nTicket jest obecnie przetwarzany przez bota.\n\nSpróbuj ponownie za kilka sekund!"
},
"optionInvalidReasons":{
"stringRegex":"Wartość nie pasuje do wzorca!",
"stringMinLength":"Wartość musi mieć co najmniej {0} znaków!",
"stringMaxLength":"Wartość może mieć maksymalnie {0} znaków!",
"numberInvalid":"Nieprawidłowa liczba!",
"numberMin":"Liczba musi wynosić co najmniej {0}!",
"numberMax":"Liczba może wynosić maksymalnie {0}!",
"numberDecimal":"Liczba nie może być dziesiętna!",
"numberNegative":"Liczba nie może być ujemna!",
"numberPositive":"Liczba nie może być dodatnia!",
"numberZero":"Liczba nie może wynosić zero!",
"channelNotFound":"Nie można znaleźć kanału!",
"userNotFound":"Nie można znaleźć użytkownika!",
"roleNotFound":"Nie można znaleźć roli!",
"memberNotFound":"Nie można znaleźć użytkownika!",
"mentionableNotFound":"Nie można znaleźć użytkownika ani roli!",
"channelType":"Nieprawidłowy typ kanału!",
"notInGuild":"Ta opcja wymaga, abyś był na serwerze!"
},
"permissions":{
"developer":"Musisz być deweloperem bota.",
"owner":"Musisz być właścicielem serwera.",
"admin":"Musisz być administratorem serwera.",
"moderator":"Musisz być moderatorem.",
"support":"Musisz należeć do zespołu wsparcia.",
"member":"Musisz być członkiem.",
"discord-administrator":"Musisz mieć uprawnienie `ADMINISTRATOR`."
},
"actionInvalid":{
"close":"Ticket jest już zamknięty!",
"reopen":"Ticket nie jest jeszcze zamknięty!",
"claim":"Ticket jest już przypisany!",
"unclaim":"Ticket nie jest jeszcze przypisany!",
"pin":"Ticket jest już przypięty!",
"unpin":"Ticket nie jest przypięty!",
"add":"Ten użytkownik już ma dostęp do ticketa!",
"remove":"Nie można usunąć tego użytkownika z ticketa!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickety",
"reason":"Powód",
"creator":"Twórca",
"remaining":"Pozostały czas",
"added":"Dodano",
"removed":"Usunięto",
"filter":"Filtr",
"claimedBy":"Przypisane przez {0}",
"method":"Metoda",
"type":"Typ",
"blacklisted":"Na czarnej liście",
"panel":"Panel",
"command":"Polecenie",
"system":"System",
"true":"Prawda",
"false":"Fałsz",
"syntax":"Składnia",
"originalName":"Oryginalna nazwa",
"newName":"Nowa nazwa",
"until":"Do",
"validOptions":"Prawidłowe opcje",
"validPanels":"Prawidłowe panele",
"autoclose":"Automatyczne zamknięcie",
"autodelete":"Automatyczne usunięcie",
"startupDate":"Data uruchomienia",
"version":"Wersja",
"name":"Nazwa",
"role":"Rola",
"status":"Status",
"claimed":"Przypisane",
"pinned":"Przypięte",
"creationDate":"Data utworzenia"
},
"lowercase":{
"text":"tekst",
"html":"html",
"command":"polecenie",
"modal":"modal",
"button":"przycisk",
"dropdown":"rozwijane menu",
"method":"metoda"
}
},
"commands":{
"reason":"Określ opcjonalny powód, który będzie widoczny w logach.",
"help":"Uzyskaj listę wszystkich dostępnych poleceń.",
"panel":"Wyślij wiadomość z rozwijanym menu lub przyciskami (do tworzenia ticketów).",
"panelId":"Identyfikator panelu, który chcesz wyświetlić.",
"panelAutoUpdate":"Czy chcesz, aby ten panel automatycznie aktualizował się po edycji?",
"ticket":"Natychmiast utwórz ticket.",
"ticketId":"Identyfikator ticketa, który chcesz utworzyć.",
"close":"Zamknij ticket.",
"delete":"Usuń ticket.",
"deleteNoTranscript":"Usuń ten ticket bez tworzenia transkryptu.",
"reopen":"Ponownie otwórz ticket.",
"claim":"Przypisz ticket.",
"claimUser":"Przypisz ten ticket innej osobie zamiast sobie.",
"unclaim":"Odpowiedz ticket.",
"pin":"Przypnij ticket.",
"unpin":"Odepnij ticket.",
"move":"Przenieś ticket.",
"moveId":"Identyfikator opcji, do której chcesz przenieść ticket.",
"rename":"Zmień nazwę ticketa.",
"renameName":"Nowa nazwa dla tego ticketa.",
"add":"Dodaj użytkownika do ticketa.",
"addUser":"Użytkownik do dodania.",
"remove":"Usuń użytkownika z ticketa.",
"removeUser":"Użytkownik do usunięcia.",
"blacklist":"Zarządzaj czarną listą ticketów.",
"blacklistView":"Wyświetl listę obecnej czarnej listy.",
"blacklistAdd":"Dodaj użytkownika do czarnej listy.",
"blacklistRemove":"Usuń użytkownika z czarnej listy.",
"blacklistGet":"Uzyskaj szczegóły użytkownika na czarnej liście.",
"blacklistGetUser":"Użytkownik do uzyskania szczegółów.",
"stats":"Wyświetl statystyki bota, użytkownika lub ticketa.",
"statsReset":"Zresetuj wszystkie statystyki bota (i zacznij liczyć od zera).",
"statsGlobal":"Wyświetl globalne statystyki.",
"statsUser":"Wyświetl statystyki użytkownika na serwerze.",
"statsUserUser":"Użytkownik do wyświetlenia.",
"statsTicket":"Wyświetl statystyki ticketa na serwerze.",
"statsTicketTicket":"Ticket do wyświetlenia.",
"clear":"Usuń wiele ticketów jednocześnie.",
"clearFilter":"Filtr do usuwania ticketów.",
"clearFilters":{
"all":"Wszystkie",
"open":"Otwarte",
"close":"Zamknięte",
"claim":"Przypisane",
"unclaim":"Nieprzypisane",
"pin":"Przypięte",
"unpin":"Nieprzypięte",
"autoclose":"Automatycznie zamknięte"
},
"autoclose":"Zarządzaj automatycznym zamknięciem ticketa.",
"autocloseDisable":"Wyłącz automatyczne zamknięcie w tym tickecie.",
"autocloseEnable":"Włącz automatyczne zamknięcie w tym tickecie.",
"autocloseEnableTime":"Liczba godzin braku aktywności potrzebna do zamknięcia ticketa.",
"autodelete":"Zarządzaj automatycznym usunięciem ticketa.",
"autodeleteDisable":"Wyłącz automatyczne usunięcie w tym tickecie.",
"autodeleteEnable":"Włącz automatyczne usunięcie w tym tickecie.",
"autodeleteEnableTime":"Liczba dni braku aktywności potrzebna do usunięcia ticketa."
},
"helpMenu":{
"help":"Uzyskaj listę wszystkich dostępnych poleceń.",
"ticket":"Natychmiast utwórz ticket.",
"close":"Zamknij ticket, wyłączając możliwość pisania na tym kanale.",
"delete":"Usuń ticket, tworząc transkrypt, jeśli jest włączony.",
"reopen":"Ponownie otwórz ticket, włączając możliwość pisania na tym kanale.",
"pin":"Przypnij ticket. To przeniesie ticket na górę i doda emoji '📌' do nazwy.",
"unpin":"Odepnij ticket. Ticket pozostanie na swojej pozycji, ale straci emoji '📌'.",
"move":"Przenieś ticket. To zmieni typ tego ticketa.",
"rename":"Zmień nazwę ticketa. To zmieni nazwę kanału tego ticketa.",
"claim":"Przypisz ticket. Dzięki temu możesz poinformować zespół, że zajmujesz się tym ticketem.",
"unclaim":"Odpowiedz ticket. Dzięki temu możesz poinformować zespół, że ticket jest ponownie dostępny.",
"add":"Dodaj użytkownika do ticketa. Pozwoli to użytkownikowi na odczyt i pisanie w tym tickecie.",
"remove":"Usuń użytkownika z ticketa. To odbierze użytkownikowi możliwość odczytu i pisania w tym tickecie.",
"panel":"Wyślij wiadomość z rozwijanym menu lub przyciskami (do tworzenia ticketów).",
"blacklistView":"Wyświetl listę obecnej czarnej listy.",
"blacklistAdd":"Dodaj użytkownika do czarnej listy.",
"blacklistRemove":"Usuń użytkownika z czarnej listy.",
"blacklistGet":"Uzyskaj szczegóły użytkownika na czarnej liście.",
"statsGlobal":"Wyświetl globalne statystyki.",
"statsTicket":"Wyświetl statystyki ticketa na serwerze.",
"statsUser":"Wyświetl statystyki użytkownika na serwerze.",
"statsReset":"Zresetuj wszystkie statystyki bota (i zacznij liczyć od zera).",
"autocloseDisable":"Wyłącz automatyczne zamknięcie w tym tickecie.",
"autocloseEnable":"Włącz automatyczne zamknięcie w tym tickecie.",
"autodeleteDisable":"Wyłącz automatyczne usunięcie w tym tickecie.",
"autodeleteEnable":"Włącz automatyczne usunięcie w tym tickecie."
},
"stats":{
"scopes":{
"global":"Globalne statystyki",
"system":"Statystyki systemu",
"user":"Statystyki użytkownika",
"ticket":"Statystyki ticketa",
"participants":"Uczestnicy"
},
"properties":{
"ticketsCreated":"Tickety utworzone",
"ticketsClosed":"Tickety zamknięte",
"ticketsDeleted":"Tickety usunięte",
"ticketsReopened":"Tickety ponownie otwarte",
"ticketsAutoclosed":"Tickety automatycznie zamknięte",
"ticketsClaimed":"Tickety przypisane",
"ticketsPinned":"Tickety przypięte",
"ticketsMoved":"Tickety przeniesione",
"usersBlacklisted":"Użytkownicy na czarnej liście",
"transcriptsCreated":"Transkrypty utworzone"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["quiradon"],
"lastedited":"20/08/2024",
"language":"Portuguese",
"automated":false
},
"checker":{
"system":{
"typeError": "[ERRO]",
"headerOpenTicket": "ABRIR TICKET",
"typeWarning": "[AVISO]",
"typeInfo": "[INFORMAÇÃO]",
"headerConfigChecker": "Verificador de Configuração",
"headerDescription": "verifique erros nos seus arquivos de configuração!",
"footerError": "o bot não iniciará até que todos os {0} sejam corrigidos!",
"footerWarning": "é recomendado corrigir todos os {0} antes de iniciar!",
"footerSupport": "SUPORTE: {0} - DOCS: {1}",
"compactInformation": "use {0} para mais informações!",
"dataPath": "caminho",
"dataDocs": "documentos",
"dataMessages": "mensagem"
},
"messages":{
"stringTooShort": "Esta string não pode ter menos de {0} caracteres!",
"stringTooLong": "Esta string não pode ter mais de {0} caracteres!",
"stringLengthInvalid": "Esta string precisa ter {0} caracteres!",
"stringStartsWith": "Esta string precisa começar com {0}!",
"stringEndsWith": "Esta string precisa terminar com {0}!",
"stringContains": "Esta string precisa conter {0}!",
"stringChoices": "Esta string só pode ser um dos seguintes valores: {0}!",
"stringRegex": "Esta string é inválida!",
"numberTooShort": "Este número não pode ter menos de {0} caracteres!",
"numberTooLong": "Este número não pode ter mais de {0} caracteres!",
"numberLengthInvalid": "Este número precisa ter {0} caracteres!",
"numberTooSmall": "Este número precisa ser pelo menos {0}!",
"numberTooLarge": "Este número precisa ser no máximo {0}!",
"numberNotEqual": "Este número precisa ser {0}!",
"numberStep": "Este número precisa ser um múltiplo de {0}!",
"numberStepOffset": "Este número precisa ser um múltiplo de {0} começando com {1}!",
"numberStartsWith": "Este número precisa começar com {0}!",
"numberEndsWith": "Este número precisa terminar com {0}!",
"numberContains": "Este número precisa conter {0}!",
"numberChoices": "Este número só pode ser um dos seguintes valores: {0}!",
"numberFloat": "Este número não pode ser decimal!",
"numberNegative": "Este número não pode ser negativo!",
"numberPositive": "Este número não pode ser positivo!",
"numberZero": "Este número não pode ser zero!",
"booleanTrue": "Este booleano não pode ser verdadeiro!",
"booleanFalse": "Este booleano não pode ser falso!",
"arrayEmptyDisabled": "Este array não pode estar vazio!",
"arrayEmptyRequired": "Este array deve estar vazio!",
"arrayTooShort": "Este array precisa ter um comprimento de pelo menos {0}!",
"arrayTooLong": "Este array precisa ter um comprimento de no máximo {0}!",
"arrayLengthInvalid": "Este array precisa ter um comprimento de {0}!",
"arrayInvalidTypes": "Este array só pode conter os seguintes tipos: {0}!",
"arrayDouble": "Este array não permite o mesmo valor duas vezes!",
"discordInvalidId": "Este é um ID do Discord inválido {0}!",
"discordInvalidIdOptions": "Este é um ID do Discord inválido {0}! Você também pode usar um destes: {1}!",
"discordInvalidToken": "Este é um token do Discord inválido (sintaticamente)!",
"colorInvalid": "Esta é uma cor hexadecimal inválida!",
"emojiTooShort": "Esta string precisa ter pelo menos {0} emojis!",
"emojiTooLong": "Esta string precisa ter no máximo {0} emojis!",
"emojiCustom": "Este emoji não pode ser um emoji personalizado do Discord!",
"emojiInvalid": "Este é um emoji inválido!",
"urlInvalid": "Esta URL é inválida!",
"urlInvalidHttp": "Esta URL só pode usar o protocolo https://!",
"urlInvalidProtocol": "Esta URL só pode usar os protocolos http:// e https://!",
"urlInvalidHostname": "Esta URL tem um hostname não permitido!",
"urlInvalidExtension": "Esta URL tem uma extensão inválida! Escolha entre: {0}!",
"urlInvalidPath": "Esta URL tem um caminho inválido!",
"idNotUnique": "Este ID não é único, use outro ID!",
"idNonExistent": "O ID {0} não existe!",
"invalidType": "Esta propriedade precisa ser do tipo: {0}!",
"propertyMissing": "A propriedade {0} está faltando neste objeto!",
"propertyOptional": "A propriedade {0} é opcional neste objeto!",
"objectDisabled": "Este objeto está desabilitado, habilite-o usando {0}!",
"nullInvalid": "Esta propriedade não pode ser nula!",
"switchInvalidType": "Isso precisa ser um dos seguintes tipos: {0}!",
"objectSwitchInvalid": "Este objeto precisa ser um dos seguintes tipos: {0}!",
"invalidLanguage": "Este é um idioma inválido!",
"invalidButton": "Este botão precisa ter pelo menos um {0} ou {1}!",
"unusedOption": "A opção {0} não é usada em nenhum lugar!",
"unusedQuestion": "A pergunta {0} não é usada em nenhum lugar!",
"dropdownOption": "Um painel com dropdown habilitado só pode conter opções do tipo 'ticket'!"
}
},
"actions":{
"buttons":{
"create": "Visitar Ticket",
"close": "Fechar Ticket",
"delete": "Excluir Ticket",
"reopen": "Reabrir Ticket",
"claim": "Reivindicar Ticket",
"unclaim": "Desreivindicar Ticket",
"pin": "Fixar Ticket",
"unpin": "Desfixar Ticket",
"clear": "Excluir Tickets",
"helpSwitchSlash": "Ver Comandos Slash",
"helpSwitchText": "Ver Comandos de Texto",
"helpPage": "Página {0}",
"withReason": "Com Motivo",
"withoutTranscript": "Sem Transcrição"
},
"titles":{
"created":"Ticket Criado",
"close":"Ticket Fechado",
"delete":"Ticket Deletado",
"reopen":"Ticket Re-abeto",
"claim":"Ticket Resgatado",
"unclaim":"Ticket Não Resgatado",
"pin":"Ticket Fixado",
"unpin":"Ticket Desfixado",
"rename":"Ticket Renomeado",
"move":"Ticket Movido",
"add":"Ticket Usuário Adicionado",
"remove":"Ticket Usuário Removido",
"help":"Comandos disponíveis",
"statsReset":"Redefinir Status",
"blacklistAdd":"User Blacklisted",
"blacklistRemove":"User Released",
"blacklistGet":"Usuário na Blacklisted",
"blacklistView":"Atualmente na Blacklist",
"blacklistAddDm":"Adicionado a Blacklist",
"blacklistRemoveDm":"Removido da Blacklist",
"clear":"Tickets Limpos",
"roles":"Cargos Atualizados",
"autoclose": "Ticket Fechado Automaticamente",
"autocloseEnabled": "Fechamento Automático Habilitado",
"autocloseDisabled": "Fechamento Automático Desabilitado",
"autodelete": "Ticket Excluído Automaticamente",
"autodeleteEnabled": "Exclusão Automática Habilitada",
"autodeleteDisabled": "Exclusão Automática Desabilitada"
},
"descriptions":{
"create": "Seu ticket foi criado. Clique no botão abaixo para acessá-lo!",
"close": "O ticket foi fechado com sucesso!",
"delete": "O ticket foi excluído com sucesso!",
"reopen": "O ticket foi reaberto com sucesso!",
"claim": "O ticket foi reivindicado com sucesso!",
"unclaim": "O ticket foi desreivindicado com sucesso!",
"pin": "O ticket foi fixado com sucesso!",
"unpin": "O ticket foi desfixado com sucesso!",
"rename": "O ticket foi renomeado para {0} com sucesso!",
"move": "O ticket foi movido para {0} com sucesso!",
"add": "{0} foi adicionado ao ticket com sucesso!",
"remove": "{0} foi removido do ticket com sucesso!",
"helpExplanation":"`<nome>` => parâmetro obrigatório\n`[nome]` => parâmetro opcional",
"statsReset":"As estatísticas do bot foram redefinidas com sucesso!",
"statsError":"Não foi possível visualizar as estatísticas do ticket!\n{0} não é um ticket!",
"blacklistAdd":"{0} foi adicionado à lista negra com sucesso!",
"blacklistRemove":"{0} foi removido da lista negra com sucesso!",
"blacklistGetSuccess":"{0} está atualmente na lista negra!",
"blacklistGetEmpty":"{0} não está atualmente na lista negra!",
"blacklistViewEmpty":"Ninguém foi adicionado à lista negra ainda!",
"blacklistViewTip":"Use \"/blacklist add\" para adicionar um usuário à lista negra!",
"clearVerify":"Você tem certeza de que deseja excluir vários tickets?\nEsta ação não pode ser desfeita!",
"clearReady":"{0} tickets foram excluídos com sucesso!",
"rolesEmpty":"Nenhum cargo foi atualizado!",
"autocloseLeave": "Este ticket foi fechado automaticamente porque o criador saiu do servidor!",
"autocloseTimeout": "Este ticket foi fechado automaticamente porque ficou inativo por mais de `{0}h`!",
"autodeleteLeave": "Este ticket foi excluído automaticamente porque o criador saiu do servidor!",
"autodeleteTimeout": "Este ticket foi excluído automaticamente porque ficou inativo por mais de `{0} dias`!",
"autocloseEnabled": "O fechamento automático foi habilitado neste ticket!\nEle será fechado quando ficar inativo por mais de `{0}h`!",
"autocloseDisabled": "O fechamento automático foi desabilitado neste ticket!\nEle não será mais fechado automaticamente!",
"autodeleteEnabled": "A exclusão automática foi habilitada neste ticket!\nEle será excluído quando ficar inativo por mais de `{0} dias`!",
"autodeleteDisabled": "A exclusão automática foi desabilitada neste ticket!\nEle não será mais excluído automaticamente!",
"ticketMessageLimit": "Você só pode criar {0} ticket(s) ao mesmo tempo!",
"ticketMessageAutoclose": "Este ticket será fechado automaticamente quando inativo por {0}h!",
"ticketMessageAutodelete": "Este ticket será excluído automaticamente quando inativo por {0} dias!",
"panelReady": "Você pode encontrar o painel abaixo!\nEsta mensagem agora pode ser excluída!"
},
"modal":{
"closePlaceholder": "Por que você fechou este ticket?",
"deletePlaceholder": "Por que você excluiu este ticket?",
"reopenPlaceholder": "Por que você reabriu este ticket?",
"claimPlaceholder": "Por que você reivindicou este ticket?",
"unclaimPlaceholder": "Por que você desreivindicou este ticket?",
"pinPlaceholder": "Por que você fixou este ticket?",
"unpinPlaceholder": "Por que você desfixou este ticket?"
},
"logs":{
"createLog": "Um novo ticket foi criado por {0}!",
"closeLog": "Este ticket foi fechado por {0}!",
"closeDm": "Seu ticket foi fechado em nosso servidor!",
"deleteLog": "Este ticket foi excluído por {0}!",
"deleteDm": "Seu ticket foi excluído em nosso servidor!",
"reopenLog": "Este ticket foi reaberto por {0}!",
"reopenDm": "Seu ticket foi reaberto em nosso servidor!",
"claimLog": "Este ticket foi reivindicado por {0}!",
"claimDm": "Seu ticket foi reivindicado em nosso servidor!",
"unclaimLog": "Este ticket foi desreivindicado por {0}!",
"unclaimDm": "Seu ticket foi desreivindicado em nosso servidor!",
"pinLog": "Este ticket foi fixado por {0}!",
"pinDm": "Seu ticket foi fixado em nosso servidor!",
"unpinLog": "Este ticket foi desfixado por {0}!",
"unpinDm": "Seu ticket foi desfixado em nosso servidor!",
"renameLog": "Este ticket foi renomeado para {0} por {1}!",
"renameDm": "Seu ticket foi renomeado para {0} em nosso servidor!",
"moveLog": "Este ticket foi movido para {0} por {1}!",
"moveDm": "Seu ticket foi movido para {0} em nosso servidor!",
"addLog": "{0} foi adicionado a este ticket por {1}!",
"addDm": "{0} foi adicionado ao seu ticket em nosso servidor!",
"removeLog": "{0} foi removido deste ticket por {1}!",
"removeDm": "{0} foi removido do seu ticket em nosso servidor!",
"blacklistAddLog": "{0} foi adicionado à lista negra por {1}!",
"blacklistRemoveLog": "{0} foi removido da lista negra por {1}!",
"blacklistAddDm": "Você foi adicionado à lista negra em nosso servidor!\nA partir de agora, você não pode criar um ticket!",
"blacklistRemoveDm": "Você foi removido da lista negra em nosso servidor!\nAgora você pode criar tickets novamente!",
"clearLog": "{0} tickets foram excluídos por {1}!"
}
},
"transcripts":{
"success":{
"visit": "Visitar Transcrição",
"ready": "Transcrição Criada",
"textFileDescription": "Esta é a transcrição em texto de um ticket excluído!",
"htmlProgress": "Por favor, aguarde enquanto esta transcrição em HTML está sendo processada...",
"createdChannel": "Uma nova transcrição de {0} foi criada no servidor!",
"createdCreator": "Uma nova transcrição de {0} foi criada para um dos seus tickets!",
"createdParticipant": "Uma nova transcrição de {0} foi criada em um dos tickets em que você participou!",
"createdActiveAdmin": "Uma nova transcrição de {0} foi criada em um dos tickets em que você participou como administrador!",
"createdEveryAdmin": "Uma nova transcrição de {0} foi criada em um dos tickets em que você era administrador!",
"createdOther": "Uma nova transcrição de {0} foi criada!"
},
"errors":{
"retry": "Tentar Novamente",
"continue": "Excluir Sem Transcrição",
"backup": "Criar Transcrição de Backup",
"error": "Algo deu errado ao tentar criar a transcrição.\nO que você gostaria de fazer?\n\nEste ticket não será excluído até que você clique em um desses botões."
}
},
"errors":{
"titles":{
"internalError": "Erro Interno",
"optionMissing": "Opção de Comando Ausente",
"optionInvalid": "Opção de Comando Inválida",
"unknownCommand": "Comando Desconhecido",
"noPermissions": "Sem Permissões",
"unknownTicket": "Ticket Desconhecido",
"deprecatedTicket": "Ticket Obsoleto",
"unknownOption": "Opção Desconhecida",
"unknownPanel": "Painel Desconhecido",
"notInGuild": "Não Está no Servidor",
"channelRename": "Incapaz de Renomear Canal",
"busy": "Ticket Está Ocupado"
},
"descriptions":{
"askForInfo": "Entre em contato com o proprietário deste bot para mais informações!",
"askForInfoResolve": "Entre em contato com o proprietário deste bot se este problema não for resolvido após algumas tentativas.",
"internalError": "Falha ao responder a este {0} devido a um erro interno!",
"optionMissing": "Um parâmetro obrigatório está faltando neste comando!",
"optionInvalid": "Um parâmetro neste comando é inválido!",
"optionInvalidChoose": "Escolha entre",
"unknownCommand": "Tente visitar o menu de ajuda para mais informações!",
"noPermissions": "Você não tem permissão para usar este {0}!",
"noPermissionsList": "Permissões Necessárias: (uma delas)",
"noPermissionsCooldown": "Você não tem permissão para usar este {0} porque você está em período de cooldown!",
"noPermissionsBlacklist": "Você não tem permissão para usar este {0} porque você foi colocado na lista negra!",
"noPermissionsLimitGlobal": "Você não tem permissão para criar um ticket porque o servidor atingiu o limite máximo de tickets!",
"noPermissionsLimitGlobalUser": "Você não tem permissão para criar um ticket porque você atingiu o limite máximo de tickets!",
"noPermissionsLimitOption": "Você não tem permissão para criar um ticket porque o servidor atingiu o limite máximo de tickets para esta opção!",
"noPermissionsLimitOptionUser": "Você não tem permissão para criar um ticket porque você atingiu o limite máximo de tickets para esta opção!",
"unknownTicket": "Tente este comando novamente em um ticket válido!",
"deprecatedTicket": "O canal atual não é um ticket válido! Pode ter sido um ticket de uma versão antiga do Open Ticket!",
"notInGuild": "Este {0} não funciona em DM! Por favor, tente novamente em um servidor!",
"channelRename": "Devido aos limites de taxa do Discord, atualmente é impossível para o bot renomear o canal. O canal será renomeado automaticamente em 10 minutos se o bot não for reiniciado.",
"channelRenameSource": "A fonte deste erro é: {0}",
"busy": "Não é possível usar este {0}!\nO ticket está sendo processado pelo bot no momento.\n\nPor favor, tente novamente em alguns segundos!"
},
"optionInvalidReasons":{
"stringRegex": "O valor não corresponde ao padrão!",
"stringMinLength": "O valor precisa ter pelo menos {0} caracteres!",
"stringMaxLength": "O valor precisa ter no máximo {0} caracteres!",
"numberInvalid": "Número inválido!",
"numberMin": "O número precisa ser pelo menos {0}!",
"numberMax": "O número precisa ser no máximo {0}!",
"numberDecimal": "Não é permitido que o número seja decimal!",
"numberNegative": "Não é permitido que o número seja negativo!",
"numberPositive": "Não é permitido que o número seja positivo!",
"numberZero": "Não é permitido que o número seja zero!",
"channelNotFound": "Não foi possível encontrar o canal!",
"userNotFound": "Não foi possível encontrar o usuário!",
"roleNotFound": "Não foi possível encontrar o cargo!",
"memberNotFound": "Não foi possível encontrar o usuário!",
"mentionableNotFound": "Não foi possível encontrar o usuário ou cargo!",
"channelType": "Tipo de canal inválido!",
"notInGuild": "Esta opção requer que você esteja em um servidor!"
},
"permissions": {
"developer": "Você precisa ser o desenvolvedor do bot.",
"owner": "Você precisa ser o dono do servidor.",
"admin": "Você precisa ser um administrador do servidor.",
"moderator": "Você precisa ser um moderador.",
"support": "Você precisa estar na equipe de suporte.",
"member": "Você precisa ser um membro.",
"discord-administrator": "Você precisa ter a permissão `ADMINISTRATOR`."
},
"actionInvalid":{
"close": "O ticket já está fechado!",
"reopen": "O ticket ainda não está fechado!",
"claim": "O ticket já está reivindicado!",
"unclaim": "O ticket ainda não está reivindicado!",
"pin": "O ticket já está fixado!",
"unpin": "O ticket ainda não está fixado!",
"add": "Este usuário já pode acessar o ticket!",
"remove": "Não foi possível remover este usuário do ticket!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickets",
"reason":"Motivo",
"creator":"Criador",
"remaining":"Tempo Restante",
"added":"Adicionado",
"removed":"Removido",
"filter":"Filtro",
"claimedBy":"Reivindicado por {0}",
"method":"Método",
"type":"Tipo",
"blacklisted":"Na Lista Negra",
"panel":"Painel",
"command":"Comando",
"system":"Sistema",
"true":"Verdadeiro",
"false":"Falso",
"syntax":"Sintaxe",
"originalName":"Nome Original",
"newName":"Novo Nome",
"until":"Até",
"validOptions":"Opções Válidas",
"validPanels":"Painéis Válidos",
"autoclose":"Auto-fechar",
"autodelete":"Auto-deletar",
"startupDate":"Data de Início",
"version":"Versão",
"name":"Nome",
"role":"Cargo",
"status":"Status",
"claimed":"Reivindicado",
"pinned":"Fixado",
"creationDate":"Data de Criação"
},
"lowercase":{
"text":"texto",
"html":"html",
"command":"comando",
"modal":"modal",
"button":"botão",
"dropdown":"dropdown",
"method":"método"
}
},
"commands":{
"reason": "Especifique um motivo opcional que será visível nos logs.",
"help": "Obtenha uma lista de todos os comandos disponíveis.",
"panel": "Gerar uma mensagem com um dropdown ou botões (para criação de tickets).",
"panelId": "O identificador do painel que você deseja gerar.",
"panelAutoUpdate": "Você quer que este painel atualize automaticamente quando editado?",
"ticket": "Crie um ticket instantaneamente.",
"ticketId": "O identificador do ticket que você deseja criar.",
"close": "Feche um ticket.",
"delete": "Exclua um ticket.",
"deleteNoTranscript": "Exclua este ticket sem criar uma transcrição.",
"reopen": "Reabra um ticket.",
"claim": "Assuma um ticket.",
"claimUser": "Assuma este ticket para outra pessoa em vez de você mesmo.",
"unclaim": "Desassuma um ticket.",
"pin": "Fixe um ticket.",
"unpin": "Desfixe um ticket.",
"move": "Mova um ticket.",
"moveId": "O identificador do opção para o qual você deseja mover.",
"rename": "Renomeie um ticket.",
"renameName": "O novo nome para este ticket.",
"add": "Adicione um usuário a um ticket.",
"addUser": "O usuário a ser adicionado.",
"remove": "Remover um usuário de um ticket.",
"removeUser": "O usuário a ser removido.",
"blacklist": "Gerenciar a lista negra de tickets.",
"blacklistView": "Ver uma lista da blacklist atual.",
"blacklistAdd": "Adicionar um usuário à blacklist.",
"blacklistRemove": "Remover um usuário da blacklist.",
"blacklistGet": "Obter os detalhes de um usuário na blacklist.",
"blacklistGetUser": "O usuário para obter detalhes.",
"stats": "Ver estatísticas do bot, de um membro ou de um ticket.",
"statsReset": "Redefinir todas as estatísticas do bot (e começar a contar do zero).",
"statsGlobal": "Ver as estatísticas globais.",
"statsUser": "Ver as estatísticas de um usuário no servidor.",
"statsUserUser": "O usuário para visualizar.",
"statsTicket": "Ver as estatísticas de um ticket no servidor.",
"statsTicketTicket": "O ticket para visualizar.",
"clear": "Excluir vários tickets ao mesmo tempo. Um filtro opcional pode ser especificado.",
"clearFilter": "O filtro para limpar tickets.",
"clearFilters": {
"all": "Todos",
"open": "Aberto",
"close": "Fechado",
"claim": "Reivindicado",
"unclaim": "Não Reivindicado",
"pin": "Fixado",
"unpin": "Desfixado",
"autoclose": "Fechado Automaticamente"
},
"autoclose": "Gerenciar fechamento automático em um ticket.",
"autocloseDisable": "Desabilitar fechamento automático neste ticket.",
"autocloseEnable": "Habilitar fechamento automático neste ticket.",
"autocloseEnableTime": "A quantidade de horas que este ticket precisa estar inativo para ser fechado.",
"autodelete": "Gerenciar exclusão automática em um ticket.",
"autodeleteDisable": "Desabilitar exclusão automática neste ticket.",
"autodeleteEnable": "Habilitar exclusão automática neste ticket.",
"autodeleteEnableTime": "A quantidade de dias que este ticket precisa estar inativo para ser excluído."
},
"helpMenu": {
"help": "Obtenha uma lista de todos os comandos disponíveis.",
"ticket": "Crie um ticket instantaneamente.",
"close": "Feche um ticket, isso desabilita a escrita neste canal.",
"delete": "Exclua um ticket, isso cria uma transcrição quando habilitado.",
"reopen": "Reabra um ticket, isso habilita a escrita neste canal novamente.",
"pin": "Fixe um ticket. Isso moverá o ticket para o topo e adicionará um emoji '📌' ao nome.",
"unpin": "Desfixe um ticket. O ticket permanecerá na sua posição, mas perderá o emoji '📌'.",
"move": "Mova um ticket. Isso mudará o tipo deste ticket.",
"rename": "Renomeie um ticket. Isso mudará o nome do canal deste ticket.",
"claim": "Assuma um ticket. Com isso, você pode informar à sua equipe que está lidando com este ticket.",
"unclaim": "Desassuma um ticket. Com isso, você pode informar à sua equipe que este ticket está livre novamente.",
"add": "Adicione um usuário a um ticket. Isso permitirá que o usuário leia e escreva neste ticket.",
"remove": "Remova um usuário de um ticket. Isso removerá a capacidade de ler e escrever para um usuário neste ticket.",
"panel": "Gere uma mensagem com um dropdown ou botões (para criação de tickets).",
"blacklistView": "Veja uma lista da blacklist atual.",
"blacklistAdd": "Adicione um usuário à blacklist.",
"blacklistRemove": "Remova um usuário da blacklist.",
"blacklistGet": "Obtenha os detalhes de um usuário na blacklist.",
"statsGlobal": "Veja as estatísticas globais.",
"statsTicket": "Veja as estatísticas de um ticket no servidor.",
"statsUser": "Veja as estatísticas de um usuário no servidor.",
"statsReset": "Redefina todas as estatísticas do bot (e comece a contar do zero).",
"autocloseDisable": "Desabilite o fechamento automático neste ticket.",
"autocloseEnable": "Habilite o fechamento automático neste ticket.",
"autodeleteDisable": "Desabilite a exclusão automática neste ticket.",
"autodeleteEnable": "Habilite a exclusão automática neste ticket."
},
"stats":{
"scopes": {
"global": "Status Global",
"system": "Status do Sistema",
"user": "Status do Usuário",
"ticket": "Status do Ticket",
"participants": "Participantes"
},
"properties":{
"ticketsCreated":"Tickets Criados",
"ticketsClosed":"Tickets Fechados",
"ticketsDeleted":"Tickets Deletados",
"ticketsReopened":"Tickets Re-Abertos",
"ticketsAutoclosed":"Tickets Auto Fechados",
"ticketsClaimed":"Tickets Claimados",
"ticketsPinned":"Tickets Fixados",
"ticketsMoved":"Tickets Movidos",
"usersBlacklisted":"Usuários na Blacklist",
"transcriptsCreated":"Transcrição Criada"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["SankeDev"],
"lastedited":"27/08/2024",
"language":"Romanian",
"automated":false
},
"checker":{
"system":{
"typeError":"[EROARE]",
"headerOpenTicket":"OPEN TICKET",
"typeWarning":"[AVERTISMENT]",
"typeInfo":"[INFO]",
"headerConfigChecker":"VALIDATOR CONFIGURATIE",
"headerDescription":"verifica daca sunt erori in configuratia botului!",
"footerError":"botul nu va porni pana cand toate cele {0} erori sunt reparate!",
"footerWarning":"este recomandat sa repari toate {0}'s inainte de pornire!",
"footerSupport":"SUPORT: {0} - DOCS: {1}",
"compactInformation":"foloseste {0} pentru mai multe informatii!",
"dataPath":"locatie",
"dataDocs":"docs",
"dataMessages":"mesaj"
},
"messages":{
"stringTooShort":"Acest string nu poate sa fie mai scurt de {0} caractere!",
"stringTooLong":"Acest string nu poate sa fie mai lung de {0} caractere!",
"stringLengthInvalid":"Acest string trebuie sa aiba minim {0} caractere!",
"stringStartsWith":"Acest string trebuie sa inceapa cu {0}!",
"stringEndsWith":"Acest string trebuie sa se termine cu {0}!",
"stringContains":"Acest string trebuie sa contina {0}!",
"stringChoices":"Acest string poate fi doar una dintre urmatoarele optiuni: {0}!",
"stringRegex":"String invalid!",
"numberTooShort":"Acest numar nu poate fi mai scurt de {0} caractere!",
"numberTooLong":"Acest numar nu poate fi mai lung de {0} caractere!",
"numberLengthInvalid":"Acest numar trebuie sa aiba minim {0} caractere!",
"numberTooSmall":"Acest numar trebuie sa fie minim {0}!",
"numberTooLarge":"Acest numar trebuie sa fie maxim {0}!",
"numberNotEqual":"Acest numar trebuie sa fie {0}!",
"numberStep":"Acest numar trebuie sa fie un multiplu de {0}!",
"numberStepOffset":"Acest numar trebuie sa fie un multiplu de {0} si sa inceapa de la {1}!",
"numberStartsWith":"Acest numar trebuie sa inceapa cu {0}!",
"numberEndsWith":"Acest numar trebuie sa se termine cu {0}!",
"numberContains":"Acest numar trebuie sa contina {0}!",
"numberChoices":"This number can only be one of the following values: {0}!",
"numberFloat":"Acest numar nu poate fi zecimal!",
"numberNegative":"Acest numar nu poate fi negativ!",
"numberPositive":"Acest numar nu poate fi pozitiv!",
"numberZero":"Acest numar nu poate sa fie 0!",
"booleanTrue":"Aceasta valoare boolean nu poate sa fie adevarata!",
"booleanFalse":"Aceasta valoare boolean nu poate sa fie falsa!",
"arrayEmptyDisabled":"Acest array nu poate sa fie gol!",
"arrayEmptyRequired":"Acest array trebuie sa fie gol!",
"arrayTooShort":"Acest array trebuie sa aiba lungimea minima de {0}!",
"arrayTooLong":"Acest array trebuie sa aiba lungimea maxima de {0}!",
"arrayLengthInvalid":"Acest array trebuie sa aiba o lungime de {0}!",
"arrayInvalidTypes":"Acest array poate sa contina doar urmatoarele tipuri: {0}!",
"arrayDouble":"Acest array nu admite valori duplicate!",
"discordInvalidId":"Acesta este un id {0} invalid !",
"discordInvalidIdOptions":"Acesta este un id {0} invalid! Poti sa folosesti doar dintre urmatoarele: {1}!",
"discordInvalidToken":"Acesta este un discord bot token invalid (din punct de vedere al sintaxei)!",
"colorInvalid":"Culoare Hex invalida!",
"emojiTooShort":"Acest string trebuie sa aiba cel putin {0} emojiuri!",
"emojiTooLong":"Acest string trebuie sa aiba cel mult {0} emojiuri!!",
"emojiCustom":"Acest emoji nu poate sa fie unul customizat!",
"emojiInvalid":"Acesta este un emoji invalid!",
"urlInvalid":"Acest URL este invalid!",
"urlInvalidHttp":"Acest url poate folosi doar protocolul https:// !",
"urlInvalidProtocol":"Acest url poate folosi doar protocoalele http:// & https:// !",
"urlInvalidHostname":"Acest url are un hostname nepermis!",
"urlInvalidExtension":"Acest URL are o extensive invalida! Alege intre : {0}!",
"urlInvalidPath":"Acest url are o locatie invalida!",
"idNotUnique":"Acest id nu este unic, foloseste altul!",
"idNonExistent":"Id-ul {0} nu exista!",
"invalidType":"Aceasta propietate trebuie sa fie de tipul: {0}!",
"propertyMissing":"Propietatea {0} lipseste din acest obiect!",
"propertyOptional":"Propietatea {0} este optionala in acest obiect!",
"objectDisabled":"Acest obiect este dezactivat, activeaza-l folosind {0}!",
"nullInvalid":"Aceasta propietate nu poate sa fie nula!",
"switchInvalidType":"Folosete un tip dintre acestea: {0}!",
"objectSwitchInvalid":"Acest obiect trebuie sa fie un tip dintre acestea: {0}!",
"invalidLanguage":"Aceasta este o limba invalida!",
"invalidButton":"Acest buton trebuie sa aiba cel putin un {0} sau {1}!",
"unusedOption":"Optiunea {0} nu este folosita nicaieri!",
"unusedQuestion":"Intrebarea {0} nu este folosita nicaieri!",
"dropdownOption":"Un meniul cu dropdown activat poate contine doar valori din categoria 'ticket'!"
}
},
"actions":{
"buttons":{
"create":"Vezi Ticket",
"close":"Inchide Ticket",
"delete":"Sterge Ticket",
"reopen":"Redeschide Ticket",
"claim":"Claim Ticket",
"unclaim":"Unclaim Ticket",
"pin":"Fixeaza Ticket",
"unpin":"Defixeaza Ticket",
"clear":"Sterge Tickets",
"helpSwitchSlash":"Vezi Slash Commands",
"helpSwitchText":"Vezi Text Commands",
"helpPage":"Pagina {0}",
"withReason":"Cu motiv",
"withoutTranscript":"Fara Transcript"
},
"titles":{
"created":"Ticket Creat",
"close":"Ticket Inchis",
"delete":"Ticket Sters",
"reopen":"Ticket Redeschis",
"claim":"Ticket Claimed",
"unclaim":"Ticket Unclaimed",
"pin":"Ticket Fixat",
"unpin":"Ticket Defixat",
"rename":"Ticket Redenumit",
"move":"Ticket Mutat",
"add":"Ticket User Adaugat",
"remove":"Ticket User Sters",
"help":"Comenzi disponibile",
"statsReset":"Reseteaza Stats",
"blacklistAdd":"Utilizator Blacklisted",
"blacklistRemove":"Utilizator Released",
"blacklistGet":"Blacklisted User",
"blacklistView":"Blacklist Curent",
"blacklistAddDm":"Adaugat la Blacklist",
"blacklistRemoveDm":"Sters din Blacklist",
"clear":"Tickets Curatate",
"roles":"Roluri Actualizate",
"autoclose":"Ticket Inchis Automat",
"autocloseEnabled":"Inchidere Automata Activata",
"autocloseDisabled":"Inchidere Automata Dezactivata",
"autodelete":"Ticket Sters Automat",
"autodeleteEnabled":"Stergere Automata Activata",
"autodeleteDisabled":"Stergere Automata Dezactivata"
},
"descriptions":{
"create":"Ticket-ul tau a fost creat cu succes! Apasa pe butonul de mai jos pentru a-l vizualiza!",
"close":"Ticket-ul tau a fost inchis cu succes!",
"delete":"Ticket-ul tau a fost sters cu succes!",
"reopen":"Ticket-ul tau a fost redeschis cu succes!",
"claim":"Ticket-ul tau a fost revendicat cu succes!",
"unclaim":"Ticket-ul tau a fost eliberat cu succes!",
"pin":"Ticket-ul tau a fost fixat cu succes!",
"unpin":"Ticket-ul tau a fost defixat cu succes!",
"rename":"Ticket-ul tau a fost redenumit ( {0} ) cu succes!",
"move":"Ticket-ul tau a fost mutat in {0} cu succes!",
"add":"{0} a fost adaugat la ticket cu succes!",
"remove":"{0} a fost sters din ticket cu succes!",
"helpExplanation":"`<nume>` => parametru mandatoriu\n`[nume]` => parametru optional",
"statsReset":"Toate statisticile botului au fost resetate cu succes!",
"statsError":"Nu se poate accesa statusul ticketului!\n{0} nu este un ticket!",
"blacklistAdd":"{0} a fost adaugat la blacklist cu succes!",
"blacklistRemove":"{0} a fost sters din blacklist cu succes!",
"blacklistGetSuccess":"{0} este blacklisted!",
"blacklistGetEmpty":"{0} nu este blacklisted!",
"blacklistViewEmpty":"Nu exista utilizatori blacklisted in acest server!",
"blacklistViewTip":"Foloseste \"/blacklist add\" pentru a adauga un user in blacklist!",
"clearVerify":"Esti sigur ca doresti sa stergi mai multe tickete?\nAceasta actiune nu poate fi anulata!",
"clearReady":"{0} tickete au fost sterse cu succes!",
"rolesEmpty":"Nu exista roluri de actualizat!",
"autocloseLeave":"Acest ticket a fost inchis automatat deoarece creatorul a iesit din server.",
"autocloseTimeout":"Acest ticket a fost inchis automatat deoarece a fost inactiv pentru mai mult de `{0}h`!",
"autodeleteLeave":"Acest ticket a fost sters automatat deoarece creatorul a iesit din server.",
"autodeleteTimeout":"Acest ticket a fost sters automatat deoarece a fost inactiv pentru mai mult de `{0} zile`!",
"autocloseEnabled":"Inchiderea automata a fost activata in acest ticket!\nSe va inchide automat cand va fi inactiv pentru mai mult de `{0}h`!",
"autocloseDisabled":"Inchiderea automata a fost dezactivata in acest ticket!\nNu se va mai inchide automat!",
"autodeleteEnabled":"Stergerea automata a fost activata in acest ticket!\nSe va sterge automat cand va fi inactiv pentru mai mult de `{0} zile`!",
"autodeleteDisabled":"Stergerea automata a fost dezactivata in acest ticket!\nNu se va mai sterge automat!",
"ticketMessageLimit":"Poti creea doar {0} tickete in acelasi timp!",
"ticketMessageAutoclose":"Acest ticket va fi inchis automat cand va deveni inactiv de mai mult de {0}h!",
"ticketMessageAutodelete":"Acest ticket va fi sters automat cand va deveni inactiv de mai mult de {0} zile!",
"panelReady":"Panelul poate fi gasit mai jos!\nAcest mesaj poate fi sters acum."
},
"modal":{
"closePlaceholder":"De ce inchizi acest ticket?",
"deletePlaceholder":"De ce stergi acest ticket?",
"reopenPlaceholder":"De ce redeschizi acest ticket?",
"claimPlaceholder":"De ce revendici acest ticket?",
"unclaimPlaceholder":"De ce eliberezi acest ticket?",
"pinPlaceholder":"De ce fixezi acest ticket?",
"unpinPlaceholder":"De ce defixezi acest ticket?"
},
"logs":{
"createLog":"Un nou ticket creat de {0}!",
"closeLog":"Acest ticket a fost inchis de {0}!",
"closeDm":"Ticketul tau a fost inchis in server!",
"deleteLog":"Acest ticket a fost sters de {0}!",
"deleteDm":"Ticketul tau a fost sters din server-ul nostru!",
"reopenLog":"Acest ticket a fost redeschis de {0}!",
"reopenDm":"Ticketul tau a fost redeschis in server!",
"claimLog":"Acest ticket a fost revendicat de {0}!",
"claimDm":"Ticketul tau a fost revendicat in server!",
"unclaimLog":"Acest ticket a fost eliberat de {0}!",
"unclaimDm":"Ticketul tau a fost eliberat in server!",
"pinLog":"Acest ticket a fost fixat de {0}!",
"pinDm":"Ticketul tau a fost fixat in server!",
"unpinLog":"Acest ticket a fost defixat de {0}!",
"unpinDm":"Ticketul tau a fost defixat in server!",
"renameLog":"Acest ticket a fost redenumit in {0} de {1}!",
"renameDm":"Ticketul tau a fost redenumit in server!",
"moveLog":"Acest ticket a fost mutat in {0} de {1}!",
"moveDm":"Ticketul tau a fost mutat in {0} in server!",
"addLog":"{0} a fost adaugat la acest ticket de {1}!",
"addDm":"{0} a fost adaugat la ticketul tau in server!",
"removeLog":"{0} a fost sters din acest ticket de {1}!",
"removeDm":"{0} a fost sters din ticketul tau in server!",
"blacklistAddLog":"{0} a fost adaugat in blacklist de {1}!",
"blacklistRemoveLog":"{0} a fost eliminat din blacklist de {1}!",
"blacklistAddDm":"Ai fost adaugat in blacklist pe serverul nostru!\nNu mai poti creea tickete!",
"blacklistRemoveDm":"Ai fost scos din blacklist pe serverul nostru!\nPoti sa creezi tickete din nou!",
"clearLog":"{0} tickete au fost sterse de {1}!"
}
},
"transcripts":{
"success":{
"visit":"Vizualizeaza Transcript",
"ready":"Transcript Creat",
"textFileDescription":"Acesta este transcriptul in format text al ticketului sters!",
"htmlProgress":"Generarea transcriptului in format HTML a inceput, te rog asteapta...",
"createdChannel":"Un nou transcript {0} a fost creat in server!",
"createdCreator":"Un nou transcript {0} a fost creat pentru unul dintre ticketele tale!",
"createdParticipant":"Un nou transcript {0} a fost creat pentru unul dintre ticketele la care ai participat!",
"createdActiveAdmin":"Un nou transcript {0} a fost creat pentru unul dintre ticketele la care ai fost admin!",
"createdEveryAdmin":"Un nou transcript {0} a fost creat pentru unul dintre ticketele la care ai fost admin!",
"createdOther":"Un nou transcript {0} a fost creat!"
},
"errors":{
"retry":"Reincearca",
"continue":"Sterge fara Transcript",
"backup":"Creeaza un Transcript de Backup",
"error":"Ceva nu a mers bine cand s-a incercat creearea transcriptului.\nCum doresti sa continui?\n\nAcest ticket nu va fi modificat pana cand nu apesi pe unul dintre butoane."
}
},
"errors":{
"titles":{
"internalError":"Eroare Interna",
"optionMissing":"Optiune Comanda Lipsa",
"optionInvalid":"Optiune Comanda Invalida",
"unknownCommand":"Comanda Necunoscuta",
"noPermissions":"Fara Permisiuni",
"unknownTicket":"Ticket Necunoscut",
"deprecatedTicket":"Ticket Depricat",
"unknownOption":"Optiune Necunoscuta",
"unknownPanel":"Panel Necunoscut",
"notInGuild":"Nu este in server",
"channelRename":"Nu se poate redenumi canalul",
"busy":"Ticket ocupat"
},
"descriptions":{
"askForInfo":"Contacteaza ownerul botului pentru mai multe informatii.",
"askForInfoResolve":"Contacteaza ownerul botului pentru a rezolva aceasta problema.",
"internalError":"Nu s-a putut executa {0} aceasta comanda din cauza unei erori interne!",
"optionMissing":"Un parametru in aceasta comanda lipseste!",
"optionInvalid":"Un parametru in aceasta comanda este invalid!",
"optionInvalidChoose":"Alege una dintre urmatoarele optiuni:",
"unknownCommand":"Aceasta comanda nu exista!",
"noPermissions":"Nu ai permisiunea de a folosi aceasta {0}!",
"noPermissionsList":"Permisiuni necesare: (una dintre ele)",
"noPermissionsCooldown":"Nu ai permisiunea sa folosi aceasta {0} pentru ca ai un cooldown!",
"noPermissionsBlacklist":"Nu ai permisiunea sa folosi aceasta {0} pentru ca esti blacklisted!",
"noPermissionsLimitGlobal":"Nu ai permisiunea sa creezi un ticket pentru ca serverul a atins limita maxima de tickete!",
"noPermissionsLimitGlobalUser":"Nu ai permisiunea sa creezi un ticket pentru ca ai atins limita maxima de tickete!",
"noPermissionsLimitOption":"Nu ai permisiunea sa creezi un ticket pentru ca ai atins limita maxima de tickete pentru aceasta optiune!",
"noPermissionsLimitOptionUser":"Nu ai permisiunea sa creezi un ticket pentru ca ai atins limita maxima de tickete pentru aceasta optiune!",
"unknownTicket":"Incearca aceasta comanda din nou intr-un ticket valid!",
"deprecatedTicket":"Acest ticket este deprecat si nu mai poate fi folosit! Posibil sa fie dintr-o versiune veche Open Ticket!",
"notInGuild":"Aceasta {0} poate fi folosita doar in server!",
"channelRename":"Nu s-a putut redenumi canalul din cauza unor limitari Discord! Canalul va fi redenumit in 10 minute daca botul nu va fi repornit.",
"channelRenameSource":"Sursa acestei erori este: {0}",
"busy":"Nu se poate executa {0}!\nTicketul este in curs de procesare.\n\nTe rugam sa incerci din nou in cateva minute!"
},
"optionInvalidReasons":{
"stringRegex":"Valoarea nu respecta formatul necesar!",
"stringMinLength":"Valoarea trebuie sa aiba cel putin {0} caractere!",
"stringMaxLength":"Valoarea trebuie sa aiba cel mult {0} caractere!",
"numberInvalid":"Valoarea trebuie sa fie un numar!",
"numberMin":"Numarul trebuie sa fie cel putin {0}!",
"numberMax":"Numarul trebuie sa fie cel mult {0}!",
"numberDecimal":"Numarul nu poate fi zecimal!",
"numberNegative":"Numarul nu poate fi negativ!",
"numberPositive":"Numarul nu poate fi pozitiv!",
"numberZero":"Numarul nu poate fi 0!",
"channelNotFound":"Canalul nu a fost gasit!",
"userNotFound":"Utilizatorul nu a fost gasit!",
"roleNotFound":"Rolul nu a fost gasit!",
"memberNotFound":"Membrul nu a fost gasit!",
"mentionableNotFound":"Rolul mentionat nu a fost gasit!",
"channelType":"Tipul canalului este invalid!",
"notInGuild":"Aceasta optine poate fi folosita doar in server!"
},
"permissions":{
"developer":"Trebuie sa fii developer pentru a folosi aceasta comanda!",
"owner":"Trebuie sa fii owner pentru a folosi aceasta comanda!",
"admin":"Trebuie sa ai permisiunea de administrator pentru a folosi aceasta comanda!",
"moderator":"Trebuie sa ai permisiunea de moderator pentru a folosi aceasta comanda!",
"support":"Trebuie sa ai permisiunea de support pentru a folosi aceasta comanda!",
"member":"Trebuie sa fii membru pentru a folosi aceasta comanda!",
"discord-administrator":"Trebuie sa ai permisiunea de `ADMINISTRATOR` pentru a folosi aceasta comanda!"
},
"actionInvalid":{
"close":"Ticketul este deja inchis!",
"reopen":"Ticketul este deja deschis!",
"claim":"Ticketul este deja revendicat!",
"unclaim":"Ticketul nu este revendicat!",
"pin":"Ticketul este deja fixat!",
"unpin":"Ticketul nu este fixat!",
"add":"Utilizatorul este deja adaugat la acest ticket!",
"remove":"Utilizatorul nu este adaugat la acest ticket!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickete",
"reason":"Motiv",
"creator":"Creator",
"remaining":"Timp Ramas",
"added":"Adaugat",
"removed":"Sters",
"filter":"Filtru",
"claimedBy":"Revendicat de {0}",
"method":"Metoda",
"type":"Tip",
"blacklisted":"Blacklistat",
"panel":"Panel",
"command":"Comanda",
"system":"Sistem",
"true":"Adevarat",
"false":"Fals",
"syntax":"Sintaxa",
"originalName":"Nume Original",
"newName":"Nume Nou",
"until":"Pana",
"validOptions":"Optiuni Valide",
"validPanels":"Panels Valide",
"autoclose":"Inchidere Automata",
"autodelete":"Stergere Automata",
"startupDate":"Data Pornirii",
"version":"Versiune",
"name":"Nume",
"role":"Rol",
"status":"Status",
"claimed":"Revendicat",
"pinned":"Fixat",
"creationDate":"Data Crearii"
},
"lowercase":{
"text":"text",
"html":"html",
"command":"comanda",
"modal":"modal",
"button":"buton",
"dropdown":"dropdown",
"method":"metoda"
}
},
"commands":{
"reason":"Specifica un motiv optional care va fi vazut in logs.",
"help":"Vezi o lista cu toate comenzile disponibile.",
"panel":"Deschide un panel cu un dropdown sau butoane (pentru crearea de tickete).",
"panelId":"Id-ul panelului pe care vrei sa il deschizi.",
"panelAutoUpdate":"Activeaza sau dezactiveaza actualizarea automata a panelului.",
"ticket":"Creeaza instant un ticket.",
"ticketId":"Id-ul ticketului pe care vrei sa il folosesti.",
"close":"Inchide un ticket.",
"delete":"Sterge un ticket.",
"deleteNoTranscript":"Sterge un ticket fara a crea un transcript.",
"reopen":"Redeschide un ticket.",
"claim":"Revendica un ticket.",
"claimUser":"Revendica acest ticket pentru un alt membru.",
"unclaim":"Elibereaza un ticket.",
"pin":"Fixeaza un ticket.",
"unpin":"Defixeaza un ticket.",
"move":"Muta un ticket.",
"moveId":"Id-ul tipului de optiune in care vrei sa muti acest ticket.",
"rename":"Redenumeste un ticket.",
"renameName":"Noul nume al ticketului.",
"add":"Adauga un user la un ticket.",
"addUser":"Userul pe care vrei sa il adaugi.",
"remove":"Sterge un user dintr-un ticket.",
"removeUser":"Userul pe care vrei sa il stergi.",
"blacklist":"Gestioneaza blacklist-ul in server.",
"blacklistView":"Vezi o lista cu toti userii blacklisted.",
"blacklistAdd":"Adauga un user in blacklist.",
"blacklistRemove":"Sterge un user din blacklist.",
"blacklistGet":"Vezi detaliile unui user blacklisted.",
"blacklistGetUser":"Userul pe care vrei sa il vezi.",
"stats":"Vezi statisticile unui bot, membru sau ticket.",
"statsReset":"Reseteaza toate statisticile botului (si incepe sa numere de la 0).",
"statsGlobal":"Vezi statisticile globale.",
"statsUser":"Vezi statisticile unui user in server.",
"statsUserUser":"Userul pe care vrei sa il vezi.",
"statsTicket":"Vezi statisticile unui ticket in server.",
"statsTicketTicket":"Ticketul pe care vrei sa il vezi.",
"clear":"Sterge mai multe tickete in acelasi timp.",
"clearFilter":"Filtrul pentru ștergerea biletelor.",
"clearFilters":{
"all":"Toate",
"open":"Deschis",
"close":"Inchis",
"claim":"Revendicat",
"unclaim":"Nerevendicat",
"pin":"Fixat",
"unpin":"Nefixat",
"autoclose":"Inchis Automat"
},
"autoclose":"Gestioneaza inchiderea automata a unui ticket.",
"autocloseDisable":"Dezactiveaza inchiderea automata in acest ticket.",
"autocloseEnable":"Activeaza inchiderea automata in acest ticket.",
"autocloseEnableTime":"Numarul de ore in care acest ticket trebuie sa fie inactiv pentru a fi inchis.",
"autodelete":"Gestioneaza stergerea automata a unui ticket.",
"autodeleteDisable":"Dezactiveaza stergerea automata in acest ticket.",
"autodeleteEnable":"Activeaza stergerea automata in acest ticket.",
"autodeleteEnableTime":"Numarul de zile in care acest ticket trebuie sa fie inactiv pentru a fi sters."
},
"helpMenu":{
"help":"Afiseaza o lista cu toate comenzile disponibile.",
"ticket":"Creeaza un ticket instant.",
"close":"Inchide un ticket, dezactivand scrierea in acest canal.",
"delete":"Sterge un ticket, creeaza un transcript cand este activat.",
"reopen":"Redeschide un ticket, activand scrierea in acest canal.",
"pin":"Fixeaza un ticket. Acesta va fi mutat in partea de sus si va avea un emoij '📌' in nume.",
"unpin":"Defixeaza un ticket. Ticketul va ramane pe pozitia sa dar va pierde emoijul '📌'.",
"move":"Muta un ticket. Acesta va schimba tipul acestui ticket.",
"rename":"Redenumeste un ticket. Acesta va schimba numele canalului acestui ticket.",
"claim":"Revendica un ticket. Cu asta, poti sa iti anunti echipa ca tu te ocupi de acest ticket.",
"unclaim":"Elibereaza un ticket. Cu asta, poti sa iti anunti echipa ca acest ticket este liber din nou.",
"add":"Adauga un user la un ticket. Acesta ii va permite userului sa citeasca si sa scrie in acest ticket.",
"remove":"Sterge un user dintr-un ticket. Acesta ii va elimina abilitatea de a citi si scrie pentru un user in acest ticket.",
"panel":"Deschide un panel cu un dropdown sau butoane (pentru crearea de tickete).",
"blacklistView":"Vezi o lista cu toti userii blacklisted.",
"blacklistAdd":"Adauga un user in blacklist.",
"blacklistRemove":"Sterge un user din blacklist.",
"blacklistGet":"Vezi detaliile unui user blacklisted.",
"statsGlobal":"Vezi statisticile globale.",
"statsTicket":"Vezi statisticile unui ticket in server.",
"statsUser":"Vezi statisticile unui user in server.",
"statsReset":"Reseteaza toate statisticile botului (si incepe sa numere de la 0).",
"autocloseDisable":"Dezactiveaza inchiderea automata in acest ticket.",
"autocloseEnable":"Activeaza inchiderea automata in acest ticket.",
"autodeleteDisable":"Dezactiveaza stergerea automata in acest ticket.",
"autodeleteEnable":"Activeaza stergerea automata in acest ticket."
},
"stats":{
"scopes":{
"global":"Statistici Globale",
"system":"Statistici Sistem",
"user":"Statistici User",
"ticket":"Statistici Ticket",
"participants":"Participanti"
},
"properties":{
"ticketsCreated":"Tickete Create",
"ticketsClosed":"Tickete Inchise",
"ticketsDeleted":"Tickete Sterse",
"ticketsReopened":"Tickete Redeschise",
"ticketsAutoclosed":"Tickete Inchise Automat",
"ticketsClaimed":"Tickete Revendicate",
"ticketsPinned":"Tickete Fixate",
"ticketsMoved":"Tickete Mutate",
"usersBlacklisted":"Useri Blacklisted",
"transcriptsCreated":"Transcripturi Create"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["Redactado","Josuens"],
"lastedited":"22/08/2024",
"language":"Spanish",
"automated":false
},
"checker":{
"system":{
"typeError":"[ERROR]",
"headerOpenTicket":"ABRIR TICKET",
"typeWarning":"[AVISO]",
"typeInfo":"[INFORMACIÓN]",
"headerConfigChecker":"VERIFICADOR DE CONFIGURACION",
"headerDescription":"revisa los errores en tus archivos de configuración!",
"footerError":"el bot no comenzará hasta que todos los {0} esten resueltos!",
"footerWarning":"es recomendable corregir todos los {0} antes de comenzar!",
"footerSupport":"SOPORTE: {0} - DOCUMENTACIÓN: {1}",
"compactInformation":"usa el comando {0} para ver más información!",
"dataPath":"ruta",
"dataDocs":"documantación",
"dataMessages":"mensaje"
},
"messages":{
"stringTooShort":"¡Esta cadena no puede ser más corta que {0} caracteres!",
"stringTooLong":"¡Esta cadena no puede ser más larga que {0} caracteres!",
"stringLengthInvalid":"¡Esta cadena necesita tener {0} caracteres!",
"stringStartsWith":"¡Esta cadena necesita empezar con {0}!",
"stringEndsWith":"¡Esta cadena necesita terminar con {0}!",
"stringContains":"¡Esta cadena necesita contener {0}!",
"stringChoices":"¡Esta cadena no puede ser uno de los siguientes valores: {0}!",
"stringRegex":"¡La cadena no es válida!",
"numberTooShort":"¡Este número no puede ser menor que {0}!",
"numberTooLong":"¡Este número no puede ser mayor que {0}!",
"numberLengthInvalid":"¡Este número necesita tener {0}!",
"numberTooSmall":"¡Este número debe ser al menos {0}!",
"numberTooLarge":"¡Este número debe ser como máximo {0}!",
"numberNotEqual":"¡Este número debe ser {0}!",
"numberStep":"¡Este número debe ser un múltiplo de {0}!",
"numberStepOffset":"¡Este número debe ser un múltiplo de {0} comenzando con {1}!",
"numberStartsWith":"¡Este número debe comenzar con {0}!",
"numberEndsWith":"¡Este número debe terminar con {0}!",
"numberContains":"¡Este número debe contener {0}!",
"numberChoices":"¡Este número solo puede ser uno de los siguientes valores: {0}!",
"numberFloat":"¡Este número no puede ser decimal!",
"numberNegative":"¡Este número no puede ser negativo!",
"numberPositive":"¡Este número no puede ser positivo!",
"numberZero":"¡Este número no puede ser cero!",
"booleanTrue":"¡Este valor no puede ser positivo!",
"booleanFalse":"¡Este valor no puede ser negativo!",
"arrayEmptyDisabled":"¡No se permite que este conjunto de valores esté vacío!",
"arrayEmptyRequired":"¡Se requiere que este conjunto de valores esté vacío!",
"arrayTooShort":"¡Este conjunto de valores necesita tener una longitud de al menos {0}!",
"arrayTooLong":"¡Este conjunto de valores necesita tener una longitud de como máximo {0}!",
"arrayLengthInvalid":"¡Este conjunto de valores necesita tener una longitud de {0}!",
"arrayInvalidTypes":"Este conjunto de valores solo puede contener los siguientes tipos: {0}!",
"arrayDouble":"¡Este conjunto de valores no permite el mismo valor dos veces!",
"discordInvalidId":"¡Esta es una ID de discord {0} inválida!",
"discordInvalidIdOptions":"¡Esta es una ID de discord {0} inválida! También puedes usar una de estas: {1}!",
"discordInvalidToken":"¡Este es un token de discord inválido (sintácticamente)!",
"colorInvalid":"¡Este es un color hexadecimal inválido!",
"emojiTooShort":"¡Esta cadena necesita tener al menos {0} emojis!",
"emojiTooLong":"¡Esta cadena necesita tener como máximo {0} emojis!",
"emojiCustom":"¡Este emoji no puede ser un emoji personalizado de discord!",
"emojiInvalid":"¡Este es un emoji inválido!",
"urlInvalid":"¡Esta URL es inválida!",
"urlInvalidHttp":"¡Esta URL solo puede usar el protocolo https:/\/!",
"urlInvalidProtocol":"¡Esta URL solo puede usar los protocolos http:// y https:/\/!",
"urlInvalidHostname":"¡Esta URL tiene un nombre de host no permitido!",
"urlInvalidExtension":"¡Esta URL tiene una extensión inválida! Elige entre: {0}!",
"urlInvalidPath":"¡Esta URL tiene una ruta inválida!",
"idNotUnique":"Esta ID no es única, usa otra ID en su lugar!",
"idNonExistent":"La ID {0} no existe!",
"invalidType":"Esta propiedad necesita ser del tipo: {0}!",
"propertyMissing":"La propiedad {0} falta en este objeto!",
"propertyOptional":"La propiedad {0} es opcional en este objeto!",
"objectDisabled":"Este objeto está deshabilitado, actívalo usando {0}!",
"nullInvalid":"Esta propiedad no puede ser nula!",
"switchInvalidType":"Esto necesita ser uno de los siguientes tipos: {0}!",
"objectSwitchInvalid":"Este objeto necesita ser uno de los siguientes tipos: {0}!",
"invalidLanguage":"¡Este es un idioma inválido!",
"invalidButton":"¡Este botón necesita al menos un {0} o un {1}!",
"unusedOption":"¡La opción {0} no se usa en ningún lugar!",
"unusedQuestion":"¡La pregunta {0} no se usa en ningún lugar!",
"dropdownOption":"¡Este panel de botóns solo puede contener opciones de tipo 'ticket'!"
}
},
"actions":{
"buttons":{
"create":"Visitar Ticket",
"close":"Cerrar Ticket",
"delete":"Eliminar Ticket",
"reopen":"Reabrir Ticket",
"claim":"Reclamar Ticket",
"unclaim":"Liberar Ticket",
"pin":"Anclar Ticket",
"unpin":"Desanclar Ticket",
"clear":"Eliminar los Tickets",
"helpSwitchSlash":"Ver los Comandos de Slash",
"helpSwitchText":"Ver los Comandos de Texto",
"helpPage":"Página {0}",
"withReason":"Con razón",
"withoutTranscript":"Sin transcripción"
},
"titles":{
"created":"Ticket Creado",
"close":"Ticket Cerrado",
"delete":"Ticket Eliminado",
"reopen":"Ticket Reabierto",
"claim":"Ticket Reclamado",
"unclaim":"Ticket Liberado",
"pin":"Ticket Anclado",
"unpin":"Ticket Desanclado",
"rename":"Ticket Renombrado",
"move":"Ticket Movido",
"add":"Agrgegado Usuario a Ticket",
"remove":"Eliminado Usuario de Ticket",
"help":"Comandos Disponibles",
"statsReset":"Reiniciar Estadísticas",
"blacklistAdd":"Usuarios en la Lista Negra",
"blacklistRemove":"Usuarios eliminados de la Lista Negra",
"blacklistGet":"Usuario en la Lista Negra",
"blacklistView":"Lista negra actual",
"blacklistAddDm":"Agregado a la Lista Negra",
"blacklistRemoveDm":"Eliminado de la Lista Negra",
"clear":"Tickets Limpiados",
"roles":"Roles Actualizados",
"autoclose":"Ticket Cerrado Automáticamente",
"autocloseEnabled":"Cierre Automático Habilitado",
"autocloseDisabled":"Cierre Automático Deshabilitado",
"autodelete":"Ticket Eliminado Automáticamente",
"autodeleteEnabled":"Eliminación Automática Habilitada",
"autodeleteDisabled":"Eliminación Automática Deshabilitada"
},
"descriptions":{
"create":"¡Tu ticket ha sido creado! Haz click en el botón abajo para verlo!",
"close":"¡El ticket fué cerrado correctamente!",
"delete":"¡El ticket fué eliminado correctamente!",
"reopen":"¡El ticket fué reabierto correctamente!",
"claim":"¡El ticket fué reclamado correctamente!",
"unclaim":"¡El ticket fué liberado correctamente!",
"pin":"¡El ticket fué anclado correctamente!",
"unpin":"¡El anclado del ticket fue quitado correctamente!",
"rename":"¡El ticket fué renombrado a {0} correctamente!",
"move":"¡El ticket fué movido a {0} correctamente!",
"add":"¡{0} ha sido agregado a este ticket correctamente!",
"remove":"¡{0} ha sido removido de este ticket correctamente!",
"helpExplanation":"`<nombre>` => argumento requerido\n`[nombre]` => argumento opcional",
"statsReset":"¡Las estadísticas de este ticket han sido reiniciadas!",
"statsError":"¡No se pueden ver las estadísticas de este ticket!\n¡{0} no es un ticket!",
"blacklistAdd":"¡{0} ha sido agregado a la Lista Negra correctamente!",
"blacklistRemove":"¡{0} ha sido eliminado de la Lista Negra correctamente!",
"blacklistGetSuccess":"¡{0} está actualmente en la Lista Negra!",
"blacklistGetEmpty":"¡{0} no está actualmente en la Lista Negra!",
"blacklistViewEmpty":"¡No hay usuarios actualmente en la Lista Negra!",
"blacklistViewTip":"¡Usa \"/blacklist add\" para agregar un usuario a la Lista Negra!",
"clearVerify":"¿Estás seguro de que deseas borrar los tickets?\n¡Esta acción no se puede deshacer!",
"clearReady":"¡{0} tickets fueron eliminados correctamente!",
"rolesEmpty":"¡Ningún rol fué actualizado!",
"autocloseLeave":"¡Este ticket se ha cerrado automáticamente porque el creador abandonó el servidor!",
"autocloseTimeout":"¡Este ticket se ha cerrado automáticamente porque ha estado inactivo durante más de `{0}h`!",
"autodeleteLeave":"¡Este ticket se ha eliminado automáticamente porque el creador abandonó el servidor!",
"autodeleteTimeout":"¡Este ticket se ha eliminado automáticamente porque ha estado inactivo durante más de `{0} días`!",
"autocloseEnabled":"¡El cierre automático se ha habilitado en este ticket!\nSe cerrará cuando esté inactivo durante más de `{0}h`!",
"autocloseDisabled":"¡El cierre automático se ha deshabilitado en este ticket!\n¡Ya no se cerrará automáticamente!",
"autodeleteEnabled":"¡La eliminación automática se ha habilitado en este ticket!\nSe eliminará cuando esté inactivo durante más de `{0} días`!",
"autodeleteDisabled":"¡La eliminación automática se ha deshabilitado en este ticket!\n¡Ya no se eliminará automáticamente!",
"ticketMessageLimit":"¡Solo puedes crear {0} ticket(s) al mismo tiempo!",
"ticketMessageAutoclose":"¡Este ticket se cerrará automáticamente cuando esté inactivo durante {0}h!",
"ticketMessageAutodelete":"¡Este ticket se eliminará automáticamente cuando esté inactivo durante {0} días!",
"panelReady":"¡Puedes encontrar el panel a continuación!\n¡Este mensaje ahora puede ser eliminado!"
},
"modal":{
"closePlaceholder":"¿Por qué cerraste este ticket?",
"deletePlaceholder":"¿Por qué eliminaste este ticket?",
"reopenPlaceholder":"¿Por qué reabriste este ticket?",
"claimPlaceholder":"¿Por qué reclamaste este ticket?",
"unclaimPlaceholder":"¿Por qué liberaste este ticket?",
"pinPlaceholder":"¿Por qué fijaste este ticket?",
"unpinPlaceholder":"¿Por qué desanclaste este ticket?"
},
"logs":{
"createLog":"¡Un nuevo ticket ha sido creado por {0}!",
"closeLog":"¡Este ticket ha sido cerrado por {0}!",
"closeDm":"¡Tu ticket ha sido cerrado en nuestro servidor!",
"deleteLog":"¡Este ticket ha sido eliminado por {0}!",
"deleteDm":"¡Tu ticket ha sido eliminado en nuestro servidor!",
"reopenLog":"¡Este ticket ha sido reabierto por {0}!",
"reopenDm":"¡Tu ticket ha sido reabierto en nuestro servidor!",
"claimLog":"¡Este ticket ha sido reclamado por {0}!",
"claimDm":"¡Tu ticket ha sido reclamado en nuestro servidor!",
"unclaimLog":"¡Este ticket ha sido liberado por {0}!",
"unclaimDm":"¡Tu ticket ha sido liberado en nuestro servidor!",
"pinLog":"¡Este ticket ha sido anclado por {0}!",
"pinDm":"¡Tu ticket ha sido anclado en nuestro servidor!",
"unpinLog":"¡Este ticket ha sido desanclado por {0}!",
"unpinDm":"¡Tu ticket ha sido desanclado en nuestro servidor!",
"renameLog":"¡Este ticket ha sido renombrado a {0} por {1}!",
"renameDm":"¡Tu ticket ha sido renombrado a {0} en nuestro servidor!",
"moveLog":"¡Este ticket ha sido movido a {0} por {1}!",
"moveDm":"¡Tu ticket ha sido movido a {0} en nuestro servidor!",
"addLog":"¡{0} ha sido añadido a este ticket por {1}!",
"addDm":"¡{0} ha sido añadido a tu ticket en nuestro servidor!",
"removeLog":"¡{0} ha sido eliminado de este ticket por {1}!",
"removeDm":"¡{0} ha sido eliminado de tu ticket en nuestro servidor!",
"blacklistAddLog":"{0} fue incluido en la lista negra por {1}!",
"blacklistRemoveLog":"{0} fue eliminado de la lista negra por {1}!",
"blacklistAddDm":"¡Has sido incluido en la lista negra en nuestro servidor!\n¡A partir de ahora, no puedes crear un ticket!",
"blacklistRemoveDm":"¡Has sido eliminado de la lista negra en nuestro servidor!\n¡Ahora puedes volver a crear tickets!",
"clearLog":"¡{0} tickets han sido eliminados por {1}!"
}
},
"transcripts":{
"success":{
"visit":"Ver transcripción",
"ready":"Transcripción creada",
"textFileDescription":"¡Esta es la transcripción de texto de un ticket!",
"htmlProgress":"Espera mientras la transcripción en HTML es procesado...",
"createdChannel":"¡Se ha creado una nueva transcripción {0} en el servidor!",
"createdCreator":"¡Se ha creado una nueva transcripción {0} para uno de tus tickets!",
"createdParticipant":"¡Se ha creado una nueva transcripción {0} en uno de los tickets en los que participaste!",
"createdActiveAdmin":"¡Se ha creado una nueva transcripción {0} en uno de los tickets en los que participaste como administrador!",
"createdEveryAdmin":"¡Se ha creado una nueva transcripción {0} en uno de los tickets en los que fuiste administrador!",
"createdOther":"¡Se ha creado una nueva transcripción {0}!"
},
"errors":{
"retry":"Reintentar",
"continue":"Eliminar sin transcripción",
"backup":"Crear respaldo de la transcripción",
"error":"Algo salió mal al intentar subir la transcripción.\n¿Qué desearías hacer?\n\nEste ticket no será eliminado hasta que presiones uno de los botones."
}
},
"errors":{
"titles":{
"internalError":"Error Interno",
"optionMissing":"Argumento Faltante en Comando",
"optionInvalid":"Argumento Inválido en Comando",
"unknownCommand":"Comando Desconocido",
"noPermissions":"Permisos Insuficientes",
"unknownTicket":"Ticket Desconocido",
"deprecatedTicket":"Ticket Desactualizado",
"unknownOption":"Opción Desconocida",
"unknownPanel":"Panel Desconocido",
"notInGuild":"No está en el Servidor",
"channelRename":"No es posible renombrar el canal",
"busy":"El ticket está siendo procesado"
},
"descriptions":{
"askForInfo":"¡Contacta al propietario de este bot para obtener más información!",
"askForInfoResolve":"Contacta al propietario de este bot si este problema no se resuelve después de varios intentos.",
"internalError":"¡No se pudo responder a este {0} debido a un error interno!",
"optionMissing":"¡Falta un argumento requerido en este comando!",
"optionInvalid":"¡Un argumento en este comando es inválido!",
"optionInvalidChoose":"Elige entre",
"unknownCommand":"¡Intenta visitar el menú de ayuda para obtener más información!",
"noPermissions":"¡No tienes permiso para usar este {0}!",
"noPermissionsList":"Permisos requeridos: (uno de ellos)",
"noPermissionsCooldown":"¡No tienes permiso para usar este {0} porque tienes un tiempo de espera!",
"noPermissionsBlacklist":"¡No tienes permiso para usar este {0} porque has sido incluido en la lista negra!",
"noPermissionsLimitGlobal":"¡No tienes permiso para crear un ticket porque el servidor alcanzó el límite máximo de tickets!",
"noPermissionsLimitGlobalUser":"¡No tienes permiso para crear un ticket porque alcanzaste el límite máximo de tickets!",
"noPermissionsLimitOption":"¡No tienes permiso para crear un ticket porque el servidor alcanzó el límite máximo de tickets para esta opción!",
"noPermissionsLimitOptionUser":"¡No tienes permiso para crear un ticket porque alcanzaste el límite máximo de tickets para esta opción!",
"unknownTicket":"¡Intenta este comando de nuevo en un ticket válido!",
"deprecatedTicket":"¡El canal actual no es un ticket válido! ¡Podría haber sido un ticket de una versión antigua de Open Ticket!",
"notInGuild":"¡Este {0} no funciona en DM! ¡Por favor, inténtalo de nuevo en un servidor!",
"channelRename":"Debido a los límites de velocidad de discord, actualmente es imposible para el bot renombrar el canal. El canal se renombrará automáticamente en 10 minutos si el bot no se reinicia.",
"channelRenameSource":"La fuente de este error es: {0}",
"busy":"¡No se puede usar este {0}!\nEl ticket está siendo procesado actualmente por el bot.\n\n¡Por favor, inténtalo de nuevo en unos segundos!"
},
"optionInvalidReasons":{
"stringRegex":"¡El valor no coincide con el patrón!",
"stringMinLength":"¡El valor debe tener al menos {0} caracteres!",
"stringMaxLength":"¡El valor debe tener como máximo {0} caracteres!",
"numberInvalid":"¡Número inválido!",
"numberMin":"¡El número debe ser al menos {0}!",
"numberMax":"¡El número debe ser como máximo {0}!",
"numberDecimal":"¡El número no puede ser decimal!",
"numberNegative":"¡El número no puede ser negativo!",
"numberPositive":"¡El número no puede ser positivo!",
"numberZero":"¡El número no puede ser cero!",
"channelNotFound":"¡No se puede encontrar el canal!",
"userNotFound":"¡No se puede encontrar al usuario!",
"roleNotFound":"¡No se puede encontrar el rol!",
"memberNotFound":"¡No se puede encontrar al usuario!",
"mentionableNotFound":"¡No se puede encontrar al usuario o rol!",
"channelType":"¡Tipo de canal inválido!",
"notInGuild":"¡Esta opción requiere que estés en un servidor!"
},
"permissions":{
"developer":"Necesitas ser el desarrollador del bot.",
"owner":"Necesitas ser el propietario del servidor.",
"admin":"Necesitas ser un administrador del servidor.",
"moderator":"Necesitas ser un moderador.",
"support":"Necesitas estar en el equipo de soporte.",
"member":"Necesitas ser un miembro.",
"discord-administrator":"Necesitas tener el permiso `ADMINISTRADOR`."
},
"actionInvalid":{
"close":"¡El ticket ya está cerrado!",
"reopen":"¡El ticket aún no está cerrado!",
"claim":"¡El ticket ya está reclamado!",
"unclaim":"¡El ticket aún no está reclamado!",
"pin":"¡El ticket ya está anclado!",
"unpin":"¡El ticket aún no está anclado!",
"add":"¡Este usuario ya puede acceder al ticket!",
"remove":"¡No se puede eliminar a este usuario del ticket!"
}
},
"params":{
"uppercase":{
"ticket":"Ticket",
"tickets":"Tickets",
"reason":"Razón",
"creator":"Creador",
"remaining":"Tiempo Restante",
"added":"Agregado",
"removed":"Eliminado",
"filter":"Filtrar",
"claimedBy":"Reclamado Por {0}",
"method":"Método",
"type":"Tipo",
"blacklisted":"En La Lista Negra",
"panel":"Panel",
"command":"Comando",
"system":"Sistema",
"true":"Verdadero",
"false":"Falso",
"syntax":"Sintaxis",
"originalName":"Nombre Original",
"newName":"Nuevo Nombre",
"until":"Hasta",
"validOptions":"Operaciones Válidas",
"validPanels":"Paneles Válidos",
"autoclose":"Cierre Automático",
"autodelete":"Eliminación Automática",
"startupDate":"Fecha De Inicio",
"version":"Versión",
"name":"Nombre",
"role":"Rol",
"status":"Estado",
"claimed":"Reclamado",
"pinned":"Anclado",
"creationDate":"Fecha De Creación"
},
"lowercase":{
"text":"texto",
"html":"html",
"command":"comando",
"modal":"menú",
"button":"botón",
"dropdown":"menú desplegable",
"method":"método"
}
},
"commands":{
"reason":"Especifica una razón opcional que será visible en los registros.",
"help":"Obtén una lista de todos los comandos disponibles.",
"panel":"Genera un mensaje con un desplegable o botones (para la creación de tickets).",
"panelId":"El identificador del panel que quieres generar.",
"panelAutoUpdate":"¿Quieres que este panel se actualice automáticamente cuando se edite?",
"ticket":"Crea un ticket instantáneamente.",
"ticketId":"El identificador del ticket que quieres crear.",
"close":"Cierra un ticket.",
"delete":"Elimina un ticket.",
"deleteNoTranscript":"Elimina este ticket sin crear una transcripción.",
"reopen":"Reabre un ticket",
"claim":"Reclama un ticket.",
"claimUser":"Reclama este ticket a alguien más en lugar de a ti mismo.",
"unclaim":"Libera un ticket.",
"pin":"Ancla un ticket.",
"unpin":"Desancla un ticket.",
"move":"Mueve un ticket.",
"moveId":"El identificador del opción al que quieres mover.",
"rename":"Renombra un ticket.",
"renameName":"El nuevo nombre para este ticket.",
"add":"Añade un usuario a un ticket.",
"addUser":"El usuario a añadir.",
"remove":"Elimina un usuario de un ticket.",
"removeUser":"El usuario a eliminar.",
"blacklist":"Administra la lista negra de tickets.",
"blacklistView":"Ver una lista de la lista negra actual.",
"blacklistAdd":"Añade un usuario a la lista negra.",
"blacklistRemove":"Elimina un usuario de la lista negra.",
"blacklistGet":"Obtén los detalles de un usuario en la lista negra.",
"blacklistGetUser":"El usuario del que obtener detalles.",
"stats":"Ver las estadísticas del bot, un miembro o un ticket.",
"statsReset":"Restablecer todas las estadísticas del bot (y empezar a contar desde cero).",
"statsGlobal":"Ver las estadísticas globales.",
"statsUser":"Ver las estadísticas de un usuario en el servidor.",
"statsUserUser":"El usuario a ver.",
"statsTicket":"Ver las estadísticas de un ticket en el servidor.",
"statsTicketTicket":"El ticket a ver.",
"clear":"Eliminar varios tickets al mismo tiempo. Se puede especificar un filtro opcional.",
"clearFilter":"valor",
"clearFilters":{
"all":"Todo",
"open":"Abierto",
"close":"Cerrado",
"claim":"Reclamado",
"unclaim":"Libre",
"pin":"Anclado",
"unpin":"Desanclado",
"autoclose":"Cerrado automáticamente"
},
"autoclose":"Administra el cierre automático en un ticket.",
"autocloseDisable":"Desactiva el cierre automático en este ticket.",
"autocloseEnable":"Activa el cierre automático en este ticket.",
"autocloseEnableTime":"La cantidad de horas que este ticket necesita estar inactivo para cerrarlo.",
"autodelete":"Administra la eliminación automática en un ticket.",
"autodeleteDisable":"Desactiva la eliminación automática en este ticket.",
"autodeleteEnable":"Activa la eliminación automática en este ticket.",
"autodeleteEnableTime":"La cantidad de días que este ticket necesita estar inactivo para eliminarlo."
},
"helpMenu":{
"help":"Obtén una lista de todos los comandos disponibles.",
"ticket":"Crea un ticket instantáneamente.",
"close":"Cierra un ticket, esto deshabilita la escritura en este canal.",
"delete":"Elimina un ticket, esto crea una transcripción cuando está habilitado.",
"reopen":"Reabre un ticket, esto habilita la escritura en este canal de nuevo.",
"pin":"Ancla un ticket. Esto moverá el ticket a la parte superior y añadirá un emoji '📌' al nombre.",
"unpin":"Desancla un ticket. El ticket se quedará en su posición pero perderá el emoji '📌'.",
"move":"Mueve un ticket. Esto cambiará el tipo de este ticket.",
"rename":"Renombra un ticket. Esto cambiará el nombre del canal de este ticket.",
"claim":"Reclama un ticket. Con esto, puedes hacer saber a tu equipo que estás manejando este ticket.",
"unclaim":"Liberar un ticket. Con esto, puedes hacer saber a tu equipo que este ticket está libre de nuevo.",
"add":"Añade un usuario a un ticket. Esto permitirá al usuario leer y escribir en este ticket.",
"remove":"Elimina un usuario de un ticket. Esto eliminará la capacidad de leer y escribir para un usuario en este ticket.",
"panel":"Genera un mensaje con un desplegable o botones (para la creación de tickets).",
"blacklistView":"Ver una lista de la lista negra actual.",
"blacklistAdd":"Añade un usuario a la lista negra.",
"blacklistRemove":"Elimina un usuario de la lista negra.",
"blacklistGet":"Obtén los detalles de un usuario en la lista negra.",
"statsGlobal":"Ver las estadísticas globales.",
"statsTicket":"Ver las estadísticas de un ticket en el servidor.",
"statsUser":"Ver las estadísticas de un usuario en el servidor.",
"statsReset":"Restablece todas las estadísticas del bot (y comienza a contar desde cero).",
"autocloseDisable":"Desactiva el cierre automático en este ticket.",
"autocloseEnable":"Activa el cierre automático en este ticket.",
"autodeleteDisable":"Desactiva la eliminación automática en este ticket.",
"autodeleteEnable":"Activa la eliminación automática en este ticket."
},
"stats":{
"scopes":{
"global":"Estadísticas Global",
"system":"Estadisticas del Sistema",
"user":"Estadísticas del Usuario",
"ticket":"Ticket Stats",
"participants":"Participantes"
},
"properties":{
"ticketsCreated":"Tickets Creados",
"ticketsClosed":"Tickets Cerrados",
"ticketsDeleted":"Tickets Eliminados",
"ticketsReopened":"Tickets Reabiertos",
"ticketsAutoclosed":"Tickets Cerradps Automáticamente",
"ticketsClaimed":"Tickets Reclamados",
"ticketsPinned":"Tickets Anclados",
"ticketsMoved":"Tickets Movidos",
"usersBlacklisted":"Usuarios En Lista Negra",
"transcriptsCreated":"Transcripciones Creadas"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["modshd"],
"lastedited":"13/11/2024",
"language":"Thai",
"automated":false
},
"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": "ค่าบูลีนนี้ไม่สามารถเป็น true ได้",
"booleanFalse": "ค่าบูลีนนี้ไม่สามารถเป็น false ได้",
"arrayEmptyDisabled": "ค่าตัวแปรนี้ไม่อนุญาตให้ว่างเปล่า",
"arrayEmptyRequired": "ค่าตัวแปรนี้ต้องว่างเปล่า",
"arrayTooShort": "ค่าตัวแปรนี้ต้องมีความยาวอย่างน้อย {0}",
"arrayTooLong": "ค่าตัวแปรนี้ต้องมีความยาวไม่เกิน {0}",
"arrayLengthInvalid": "ค่าตัวแปรนี้ต้องมีความยาว {0}",
"arrayInvalidTypes": "ค่าตัวแปรนี้สามารถประกอบด้วยประเภทเหล่านี้เท่านั้น: {0}",
"arrayDouble": "ค่าตัวแปรนี้ไม่อนุญาตให้มีค่าซ้ำสองครั้ง",
"discordInvalidId": "นี่คือรหัสไอดี {0} discord ที่ไม่ถูกต้อง",
"discordInvalidIdOptions": "นี่คือรหัสไอดี {0} discord ที่ไม่ถูกต้อง คุณสามารถใช้ตัวเลือกเหล่านี้: {1}",
"discordInvalidToken": "นี่คือโทเค็น discord ที่ไม่ถูกต้อง (จากด้านไวยากรณ์)",
"colorInvalid": "นี่คือสี hex ที่ไม่ถูกต้อง",
"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": "ดูคำสั่งแบบ Slash",
"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} นี้ใช้ไม่ได้ใน DM กรุณาลองใหม่ในเซิร์ฟเวอร์",
"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": "บันทึกการสนทนาที่สร้าง"
}
}
}
+477
View File
@@ -0,0 +1,477 @@
{
"_TRANSLATION": {
"otversion": "v4.0.0",
"translators": ["palestinian"],
"lastedited": "26/11/2024",
"language": "Turkish",
"automated": false
},
"checker": {
"system": {
"typeError": "[HATA]",
"headerOpenTicket": "TICKET AÇ",
"typeWarning": "[UYARI]",
"typeInfo": "[BİLGİ]",
"headerConfigChecker": "YAPILANDIRMA KONTROLÜ",
"headerDescription": "Yapılandırma dosyalarınızda hataları kontrol edin!",
"footerError": "Bot, tüm {0} hataları düzeltilmeden başlamayacak!",
"footerWarning": "Başlamadan önce tüm {0} hatalarını düzeltmeniz önerilir!",
"footerSupport": "DESTEK: {0} - DOKÜMANLAR: {1}",
"compactInformation": "Daha fazla bilgi için {0} kullanın!",
"dataPath": "yol",
"dataDocs": "dokümanlar",
"dataMessages": "mesaj"
},
"messages": {
"stringTooShort": "Bu dize {0} karakterden daha kısa olamaz!",
"stringTooLong": "Bu dize {0} karakterden daha uzun olamaz!",
"stringLengthInvalid": "Bu dize {0} karakter uzunluğunda olmalıdır!",
"stringStartsWith": "Bu dize {0} ile başlamalıdır!",
"stringEndsWith": "Bu dize {0} ile bitmelidir!",
"stringContains": "Bu dize {0} içermelidir!",
"stringChoices": "Bu dize yalnızca şu değerlerden biri olmalıdır: {0}!",
"stringRegex": "Bu dize geçersiz!",
"numberTooShort": "Bu sayı {0} karakterden daha kısa olamaz!",
"numberTooLong": "Bu sayı {0} karakterden daha uzun olamaz!",
"numberLengthInvalid": "Bu sayı {0} karakter uzunluğunda olmalıdır!",
"numberTooSmall": "Bu sayı en az {0} olmalıdır!",
"numberTooLarge": "Bu sayı en fazla {0} olmalıdır!",
"numberNotEqual": "Bu sayı {0} olmalıdır!",
"numberStep": "Bu sayı {0} katı olmalıdır!",
"numberStepOffset": "Bu sayı {0} ile başlayarak {1} katı olmalıdır!",
"numberStartsWith": "Bu sayı {0} ile başlamalıdır!",
"numberEndsWith": "Bu sayı {0} ile bitmelidir!",
"numberContains": "Bu sayı {0} içermelidir!",
"numberChoices": "Bu sayı yalnızca şu değerlerden biri olmalıdır: {0}!",
"numberFloat": "Bu sayı ondalıklı olamaz!",
"numberNegative": "Bu sayı negatif olamaz!",
"numberPositive": "Bu sayı pozitif olamaz!",
"numberZero": "Bu sayı sıfır olamaz!",
"booleanTrue": "Bu boolean true olamaz!",
"booleanFalse": "Bu boolean false olamaz!",
"arrayEmptyDisabled": "Bu dizi boş olamaz!",
"arrayEmptyRequired": "Bu dizi boş olmalıdır!",
"arrayTooShort": "Bu dizi en az {0} uzunluğunda olmalıdır!",
"arrayTooLong": "Bu dizi en fazla {0} uzunluğunda olmalıdır!",
"arrayLengthInvalid": "Bu dizi {0} uzunluğunda olmalıdır!",
"arrayInvalidTypes": "Bu dizi yalnızca şu türleri içerebilir: {0}!",
"arrayDouble": "Bu dizi aynı değeri iki kez içeremez!",
"discordInvalidId": "Bu geçersiz bir discord {0} kimliğidir!",
"discordInvalidIdOptions": "Bu geçersiz bir discord {0} kimliğidir! Ayrıca bunları kullanabilirsiniz: {1}!",
"discordInvalidToken": "Bu geçersiz bir discord tokenidir (sentaktik olarak)!",
"colorInvalid": "Bu geçersiz bir hex renktir!",
"emojiTooShort": "Bu dize en az {0} emoji olmalıdır!",
"emojiTooLong": "Bu dize en fazla {0} emoji olmalıdır!",
"emojiCustom": "Bu emoji özel bir discord emojisi olamaz!",
"emojiInvalid": "Bu geçersiz bir emojidir!",
"urlInvalid": "Bu url geçersiz!",
"urlInvalidHttp": "Bu url yalnızca https:// protokolünü kullanabilir!",
"urlInvalidProtocol": "Bu url yalnızca http:// ve https:// protokollerini kullanabilir!",
"urlInvalidHostname": "Bu url yasaklı bir hostname içeriyor!",
"urlInvalidExtension": "Bu url geçersiz bir uzantıya sahip! Şu uzantılardan birini seçin: {0}!",
"urlInvalidPath": "Bu url geçersiz bir yola sahip!",
"idNotUnique": "Bu id benzersiz değil, lütfen başka bir id kullanın!",
"idNonExistent": "{0} id mevcut değil!",
"invalidType": "Bu özellik {0} türünde olmalıdır!",
"propertyMissing": "Bu nesneden {0} özelliği eksik!",
"propertyOptional": "Bu nesnede {0} özelliği isteğe bağlıdır!",
"objectDisabled": "Bu nesne devre dışı, {0} kullanarak etkinleştirin!",
"nullInvalid": "Bu özellik null olamaz!",
"switchInvalidType": "Bu, aşağıdaki türlerden biri olmalıdır: {0}!",
"objectSwitchInvalid": "Bu nesne aşağıdaki türlerden biri olmalıdır: {0}!",
"invalidLanguage": "Bu geçersiz bir dildir!",
"invalidButton": "Bu buton en az bir {0} veya {1} içermelidir!",
"unusedOption": "Seçenek {0} hiçbir yerde kullanılmıyor!",
"unusedQuestion": "Soru {0} hiçbir yerde kullanılmıyor!",
"dropdownOption": "Dropdown etkin olan bir panel yalnızca 'ticket' türündeki seçenekleri içerebilir!"
}
},
"actions": {
"buttons": {
"create": "Ticket'i Ziyaret Et",
"close": "Ticket'i Kapat",
"delete": "Ticket'i Sil",
"reopen": "Ticket'i Yeniden Aç",
"claim": "Ticket'i Üstlen",
"unclaim": "Ticket'i Üstlenmeyi Bırak",
"pin": "Ticket'i Sabitle",
"unpin": "Ticket'i Sabitlemeyi Kaldır",
"clear": "Ticket'leri Sil",
"helpSwitchSlash": "Slash Komutlarını Görüntüle",
"helpSwitchText": "Metin Komutlarını Görüntüle",
"helpPage": "Sayfa {0}",
"withReason": "Sebep ile",
"withoutTranscript": "Transkript Olmadan"
},
"titles": {
"created": "Ticket Oluşturuldu",
"close": "Ticket Kapandı",
"delete": "Ticket Silindi",
"reopen": "Ticket Yeniden Açıldı",
"claim": "Ticket Üstlenildi",
"unclaim": "Ticket Üstlenme Bırakıldı",
"pin": "Ticket Sabitlendi",
"unpin": "Ticket Sabitlemesi Kaldırıldı",
"rename": "Ticket Yeniden Adlandırıldı",
"move": "Ticket Taşındı",
"add": "Ticket Kullanıcısı Eklendi",
"remove": "Ticket Kullanıcısı Çıkarıldı",
"help": "Mevcut Komutlar",
"statsReset": "İstatistikleri Sıfırla",
"blacklistAdd": "Kullanıcı Kara Listeye Alındı",
"blacklistRemove": "Kullanıcı Kara Listeden Çıkarıldı",
"blacklistGet": "Kara Listeye Alınan Kullanıcı",
"blacklistView": "Mevcut Kara Liste",
"blacklistAddDm": "Kara Listeye Eklendi",
"blacklistRemoveDm": "Kara Listeden Çıkarıldı",
"clear": "Ticket'ler Temizlendi",
"roles": "Roller Güncellendi",
"autoclose": "Ticket Otomatik Olarak Kapandı",
"autocloseEnabled": "Otomatik Kapatma Etkinleştirildi",
"autocloseDisabled": "Otomatik Kapatma Devre Dışı Bırakıldı",
"autodelete": "Ticket Otomatik Olarak Silindi",
"autodeleteEnabled": "Otomatik Silme Etkinleştirildi"
},
"descriptions": {
"create": "Ticket'iniz oluşturuldu. Aşağıdaki düğmeye tıklayarak erişebilirsiniz!",
"close": "Ticket başarıyla kapatıldı!",
"delete": "Ticket başarıyla silindi!",
"reopen": "Ticket başarıyla yeniden açıldı!",
"claim": "Ticket başarıyla üstlenildi!",
"unclaim": "Ticket başarıyla üstlenme bırakıldı!",
"pin": "Ticket başarıyla sabitlendi!",
"unpin": "Ticket sabitlemesi başarıyla kaldırıldı!",
"rename": "Ticket başarıyla {0} olarak yeniden adlandırıldı!",
"move": "Ticket başarıyla {0} konumuna taşındı!",
"add": "{0} ticket'e başarıyla eklendi!",
"remove": "{0} ticket'ten başarıyla çıkarıldı!",
"helpExplanation": "`<name>` => zorunlu parametre\n`[name]` => isteğe bağlı parametre",
"statsReset": "Bot istatistikleri başarıyla sıfırlandı!",
"statsError": "Ticket istatistiklerini görüntüleme başarısız oldu!\n{0} bir ticket değil!",
"blacklistAdd": "{0} başarıyla kara listeye alındı!",
"blacklistRemove": "{0} başarıyla serbest bırakıldı!",
"blacklistGetSuccess": "{0} şu anda kara listede!",
"blacklistGetEmpty": "{0} şu anda kara listede değil!",
"blacklistViewEmpty": "Henüz kara listeye alınan kimse yok!",
"blacklistViewTip": "Bir kullanıcıyı kara listeye almak için \"/blacklist add\" komutunu kullanın!",
"clearVerify": "Birden fazla ticket silmek istediğinize emin misiniz?\nBu işlem geri alınamaz!",
"clearReady": "{0} ticket başarıyla silindi!",
"rolesEmpty": "Güncellenen hiçbir rol yok!",
"autocloseLeave": "Bu ticket, yaratıcısı sunucudan ayrıldığı için otomatik olarak kapatıldı!",
"autocloseTimeout": "Bu ticket, `{0}h` süresince aktif olmadığından otomatik olarak kapatıldı!",
"autodeleteLeave": "Bu ticket, yaratıcısı sunucudan ayrıldığı için otomatik olarak silindi!",
"autodeleteTimeout": "Bu ticket, `{0} gün` süresince aktif olmadığından otomatik olarak silindi!",
"autocloseEnabled": "Bu ticket'te otomatik kapatma etkinleştirildi!\nArtık `{0}h` süresince aktif olmadığında kapatılacaktır!",
"autocloseDisabled": "Bu ticket'te otomatik kapatma devre dışı bırakıldı!\nArtık otomatik olarak kapatılmayacak!",
"autodeleteEnabled": "Bu ticket'te otomatik silme etkinleştirildi!\nArtık `{0} gün` süresince aktif olmadığında silinecektir!",
"autodeleteDisabled": "Bu ticket'te otomatik silme devre dışı bırakıldı!\nArtık otomatik olarak silinmeyecek!",
"ticketMessageLimit": "Aynı anda yalnızca {0} ticket oluşturabilirsiniz!",
"ticketMessageAutoclose": "Bu ticket, {0}h süresince aktif olmadığında otomatik olarak kapatılacaktır!",
"ticketMessageAutodelete": "Bu ticket, {0} gün süresince aktif olmadığında otomatik olarak silinecektir!",
"panelReady": "Paneli aşağıda bulabilirsiniz!\nBu mesaj artık silinebilir!"
},
"modal": {
"closePlaceholder": "Bu ticket'i neden kapattınız?",
"deletePlaceholder": "Bu ticket'i neden sildiniz?",
"reopenPlaceholder": "Bu ticket'i neden yeniden açtınız?",
"claimPlaceholder": "Bu ticket'i neden üstlendiniz?",
"unclaimPlaceholder": "Bu ticket'ten neden üstlenmeyi bıraktınız?",
"pinPlaceholder": "Bu ticket'i neden sabitlediniz?",
"unpinPlaceholder": "Bu ticket'ten sabitlemeyi neden kaldırdınız?"
},
"logs": {
"createLog": "Yeni bir ticket {0} tarafından oluşturuldu!",
"closeLog": "Bu ticket {0} tarafından kapatıldı!",
"closeDm": "Ticket'iniz sunucumuzda kapatıldı!",
"deleteLog": "Bu ticket {0} tarafından silindi!",
"deleteDm": "Ticket'iniz sunucumuzda silindi!",
"reopenLog": "Bu ticket {0} tarafından yeniden açıldı!",
"reopenDm": "Ticket'iniz sunucumuzda yeniden açıldı!",
"claimLog": "Bu ticket {0} tarafından üstlenildi!",
"claimDm": "Ticket'iniz sunucumuzda üstlenildi!",
"unclaimLog": "Bu ticket {0} tarafından üstlenme bırakıldı!",
"unclaimDm": "Ticket'iniz sunucumuzda üstlenme bırakıldı!",
"pinLog": "Bu ticket {0} tarafından sabitlendi!",
"pinDm": "Ticket'iniz sunucumuzda sabitlendi!",
"unpinLog": "Bu ticket {0} tarafından sabitlemesi kaldırıldı!",
"unpinDm": "Ticket'iniz sunucumuzda sabitlemesi kaldırıldı!",
"renameLog": "Bu ticket {1} tarafından {0} olarak yeniden adlandırıldı!",
"renameDm": "Ticket'iniz sunucumuzda {0} olarak yeniden adlandırıldı!",
"moveLog": "Bu ticket {1} tarafından {0} konumuna taşındı!",
"moveDm": "Ticket'iniz sunucumuzda {0} konumuna taşındı!",
"addLog": "{0} bu ticket'e {1} tarafından eklendi!",
"addDm": "{0} ticket'inize sunucumuzda eklendi!",
"removeLog": "{0} bu ticket'ten {1} tarafından çıkarıldı!",
"removeDm": "{0} ticket'inizden sunucumuzda çıkarıldı!",
"blacklistAddLog": "{0}, {1} tarafından kara listeye alındı!",
"blacklistRemoveLog": "{0}, {1} tarafından kara listeden çıkarıldı!",
"blacklistAddDm": "Sunucumuzda kara listeye alındınız!\nArtık bir ticket oluşturamazsınız!",
"blacklistRemoveDm": "Sunucumuzda kara listeden çıkarıldınız!\nArtık ticket oluşturabilirsiniz!",
"clearLog": "{0} ticket {1} tarafından silindi!"
}
},
"transcripts": {
"success": {
"visit": "Transkripti Ziyaret Et",
"ready": "Transkript Oluşturuldu",
"textFileDescription": "Bu, silinmiş bir ticket'ın metin transkriptidir!",
"htmlProgress": "Lütfen bu html transkriptinin işlenmesini bekleyin...",
"createdChannel": "Sunucuda yeni bir {0} transkripti oluşturuldu!",
"createdCreator": "Sizin ticket'ınız için yeni bir {0} transkripti oluşturuldu!",
"createdParticipant": "Katıldığınız bir ticket'ta yeni bir {0} transkripti oluşturuldu!",
"createdActiveAdmin": "Katıldığınız bir ticket'ta yeni bir {0} transkripti oluşturuldu!",
"createdEveryAdmin": "Yönetici olarak katıldığınız bir ticket'ta yeni bir {0} transkripti oluşturuldu!",
"createdOther": "Yeni bir {0} transkripti oluşturuldu!"
},
"errors": {
"retry": "Yeniden Dene",
"continue": "Transkript Olmadan Sil",
"backup": "Yedek Transkript Oluştur",
"error": "Transkript oluşturulurken bir sorun oluştu.\nNe yapmak istersiniz?\n\nBu ticket silinmeyecek, bu butonlardan birine tıklamadan önce."
}
},
"errors": {
"titles": {
"internalError": "Dahili Hata",
"optionMissing": "Komut Seçeneği Eksik",
"optionInvalid": "Komut Seçeneği Geçersiz",
"unknownCommand": "Bilinmeyen Komut",
"noPermissions": "İzin Yok",
"unknownTicket": "Bilinmeyen Ticket",
"deprecatedTicket": "Eski Ticket",
"unknownOption": "Bilinmeyen Seçenek",
"unknownPanel": "Bilinmeyen Panel",
"notInGuild": "Sunucuda Değil",
"channelRename": "Kanal Yeniden Adlandırılamadı",
"busy": "Ticket Meşgul"
},
"descriptions": {
"askForInfo": "Daha fazla bilgi için botun sahibine ulaşın!",
"askForInfoResolve": "Bu sorun birkaç denemeden sonra çözülmezse, botun sahibine ulaşın.",
"internalError": "Bu {0} isteğine yanıt vermekte başarısız olundu!",
"optionMissing": "Bu komutta zorunlu bir parametre eksik!",
"optionInvalid": "Bu komutta bir parametre geçersiz!",
"optionInvalidChoose": "Şu seçeneklerden birini seçin",
"unknownCommand": "Daha fazla bilgi için yardım menüsüne göz atmayı deneyin!",
"noPermissions": "Bu {0} işlemini kullanma izniniz yok!",
"noPermissionsList": "Gerekli İzinler: (bunlardan biri)",
"noPermissionsCooldown": "Bu {0} işlemini kullanma izniniz yok çünkü bir bekleme süreniz var!",
"noPermissionsBlacklist": "Bu {0} işlemini kullanma izniniz yok çünkü kara listeye alındınız!",
"noPermissionsLimitGlobal": "Sunucu, maksimum ticket limitine ulaştığı için ticket oluşturma izniniz yok!",
"noPermissionsLimitGlobalUser ": "Maksimum ticket limitine ulaştığınız için ticket oluşturma izniniz yok!",
"noPermissionsLimitOption": "Bu seçenek için sunucu maksimum ticket limitine ulaştığı için ticket oluşturma izniniz yok!",
"noPermissionsLimitOptionUser ": "Bu seçenek için maksimum ticket limitine ulaştığınız için ticket oluşturma izniniz yok!",
"unknownTicket": "Bu komutu geçerli bir ticket'ta tekrar deneyin!",
"deprecatedTicket": "Mevcut kanal geçerli bir ticket değil! Bu, eski bir Open Ticket sürümünden kalmış olabilir!",
"notInGuild": "Bu {0} DM'de çalışmaz! Lütfen bunu bir sunucuda tekrar deneyin!",
"channelRename": "Discord hız limitleri nedeniyle, botun kanal adını değiştirmesi şu anda mümkün değil. Bot yeniden başlatılmazsa kanal 10 dakika içinde otomatik olarak yeniden adlandırılacaktır.",
"channelRenameSource": "Bu hatanın kaynağı: {0}",
"busy": "Bu {0} işlemini kullanamıyorsunuz!\nTicket şu anda bot tarafından işleniyor.\n\nLütfen birkaç saniye içinde tekrar deneyin!"
},
"optionInvalidReasons": {
"stringRegex": "Değer desenle eşleşmiyor!",
"stringMinLength": "Değer en az {0} karakter olmalı!",
"stringMaxLength": "Değer en çok {0} karakter olmalı!",
"numberInvalid": "Geçersiz sayı!",
"numberMin": "Sayı en az {0} olmalı!",
"numberMax": "Sayı en çok {0} olmalı!",
"numberDecimal": "Sayı ondalıklı olmamalıdır!",
"numberNegative": "Sayı negatif olmamalıdır!",
"numberPositive": "Sayı pozitif olmamalıdır!",
"numberZero": "Sayı sıfır olmamalıdır!",
"channelNotFound": "Kanal bulunamadı!",
"userNotFound": "Kullanıcı bulunamadı!",
"roleNotFound": "Rol bulunamadı!",
"memberNotFound": "Kullanıcı bulunamadı!",
"mentionableNotFound": "Kullanıcı veya rol bulunamadı!",
"channelType": "Geçersiz kanal türü!",
"notInGuild": "Bu seçenek sunucuda olmanızı gerektiriyor!"
},
"permissions": {
"developer": "Botun geliştiricisi olmalısınız.",
"owner": "Sunucu sahibi olmalısınız.",
"admin": "Sunucu yöneticisi olmalısınız.",
"moderator": "Bir moderatör olmalısınız.",
"support": "Destek ekibinde olmalısınız.",
"member": "Bir üye olmalısınız.",
"discord-administrator": "`ADMINISTRATOR` iznine sahip olmalısınız."
},
"actionInvalid": {
"close": "Ticket zaten kapatıldı!",
"reopen": "Ticket henüz kapatılmadı!",
"claim": "Ticket zaten üstlenildi!",
"unclaim": "Ticket henüz üstlenilmedi!",
"pin": "Ticket zaten sabitlendi!",
"unpin": "Ticket henüz sabitlenmedi!",
"add": "Bu kullanıcı zaten ticket'e erişim sağlıyor!",
"remove": "Bu kullanıcıyı ticket'ten çıkarmak mümkün değil!"
}
},
"params": {
"uppercase": {
"ticket": "Ticket",
"tickets": "Tickets",
"reason": "Sebep",
"creator": "Yaratıcı",
"remaining": "Kalan Süre",
"added": "Eklendi",
"removed": "Çıkarıldı",
"filter": "Filtre",
"claimedBy": "Üstlenen {0}",
"method": "Yöntem",
"type": "Tür",
"blacklisted": "Kara Listeye Alınmış",
"panel": "Panel",
"command": "Komut",
"system": "Sistem",
"true": "Doğru",
"false": "Yanlış",
"syntax": "Sözdizimi",
"originalName": "Orijinal İsim",
"newName": "Yeni İsim",
"until": "Kadar",
"validOptions": "Geçerli Seçenekler",
"validPanels": "Geçerli Paneller",
"autoclose": "Otomatik Kapatma",
"autodelete": "Otomatik Silme",
"startupDate": "Başlangıç Tarihi",
"version": "Sürüm",
"name": "İsim",
"role": "Rol",
"status": "Durum",
"claimed": "Üstlenildi",
"pinned": "Sabitlenmiş",
"creationDate": "Oluşturulma Tarihi"
},
"lowercase": {
"text": "metin",
"html": "html",
"command": "komut",
"modal": "modal",
"button": "buton",
"dropdown": "açılır menü",
"method": "yöntem"
}
},
"commands": {
"reason": "Kayıtlarda görülebilecek isteğe bağlı bir sebep belirtin.",
"help": "Tüm mevcut komutların bir listesini alın.",
"panel": "Bir mesaj gönderin (ticket oluşturma için dropdown veya butonlar).",
"panelId": "Oluşturmak istediğiniz panelin kimliği.",
"panelAutoUpdate": "Bu panelin düzenlendiğinde otomatik olarak güncellenmesini ister misiniz?",
"ticket": "Anında bir ticket oluştur.",
"ticketId": "Oluşturmak istediğiniz ticket'ın kimliği.",
"close": "Bir ticket'ı kapat.",
"delete": "Bir ticket'ı sil.",
"deleteNoTranscript": "Bu ticket'ı transkript oluşturmadan sil.",
"reopen": "Bir ticket'ı yeniden aç.",
"claim": "Bir ticket'ı üstlen.",
"claimUser ": "Bu ticket'ı kendiniz yerine başka birine üstlenin.",
"unclaim": "Bir ticket'tan üstlenmeyi bırak.",
"pin": "Bir ticket'ı sabitle.",
"unpin": "Bir ticket'ın sabitlemesini kaldır.",
"move": "Bir ticket'ı taşı.",
"moveId": "Taşımak istediğiniz seçeneğin kimliği.",
"rename": "Bir ticket'ı yeniden adlandır.",
"renameName": "Bu ticket için yeni isim.",
"add": "Bir kullanıcıyı bir ticket'a ekle.",
"addUser ": "Eklenecek kullanıcı.",
"remove": "Bir kullanıcıyı bir ticket'tan çıkar.",
"removeUser ": "Çıkarılacak kullanıcı.",
"blacklist": "Ticket kara listesini yönet.",
"blacklistView": "Mevcut kara listeyi görüntüle.",
"blacklistAdd": "Bir kullanıcıyı kara listeye ekle.",
"blacklistRemove": "Bir kullanıcıyı kara listeden çıkar.",
"blacklistGet": "Kara listeye alınmış bir kullanıcının detaylarını al.",
"blacklistGetUser ": "Detaylarını almak istediğiniz kullanıcı.",
"stats": "Bot, bir üye veya bir ticket'tan istatistikleri görüntüle.",
"statsReset": "Botun tüm istatistiklerini sıfırla (sıfırdan saymaya başla).",
"statsGlobal": "Küresel istatistikleri görüntüle.",
"statsUser ": "Sunucudaki bir kullanıcının istatistiklerini görüntüle.",
"statsUser User": "Görüntülemek istediğiniz kullanıcı.",
"statsTicket": "Sunucudaki bir ticket'ın istatistiklerini görüntüle.",
"statsTicketTicket": "Görüntülemek istediğiniz ticket.",
"clear": "Aynı anda birden fazla ticket sil.",
"clearFilter": "Ticket'ları silmek için filtre.",
"clearFilters": {
"all": "Hepsi",
"open": "Açık",
"close": "Kapalı",
"claim": "Üstlenilen",
"unclaim": "Üstlenilmeyen",
"pin": "Sabitlenmiş",
"unpin": "Sabitlenmemiş",
"autoclose": "Otomatik Kapatılmış"
},
"autoclose": "Bir ticket'ta otomatik kapatmayı yönet.",
"autocloseDisable": "Bu ticket'ta otomatik kapatmayı devre dışı bırak.",
"autocloseEnable": "Bu ticket'ta otomatik kapatmayı etkinleştir.",
"autocloseEnableTime": "Bu ticket'ın kapatılması için gereken inaktif süre (saat cinsinden).",
"autodelete": "Bir ticket'ta otomatik silmeyi yönet.",
"autodeleteDisable": "Bu ticket'ta otomatik silmeyi devre dışı bırak.",
"autodeleteEnable": "Bu ticket'ta otomatik silmeyi etkinleştir.",
"autodeleteEnableTime": "Bu ticket'ın silinmesi için gereken inaktif süre (gün cinsinden)."
},
"helpMenu": {
"help": "Tüm mevcut komutların bir listesini alın.",
"ticket": "Anında bir ticket oluştur.",
"close": "Bir ticket'ı kapat, bu kanalda yazmayı devre dışı bırakır.",
"delete": "Bir ticket'ı sil, bu etkinleştirildiğinde bir transkript oluşturur.",
"reopen": "Bir ticket'ı yeniden aç, bu kanalda yazmayı tekrar etkinleştirir.",
"pin": "Bir ticket'ı sabitle. Bu, ticket'ı en üstte tutacak ve adına '📌' emojisi ekleyecektir.",
"unpin": "Bir ticket'ın sabitlemesini kaldır. Ticket, konumunu koruyacak ancak '📌' emojisini kaybedecektir.",
"move": "Bir ticket'ı taşı. Bu, bu ticket'ın türünü değiştirecektir.",
"rename": "Bir ticket'ı yeniden adlandır. Bu, bu ticket'ın kanal adını değiştirecektir.",
"claim": "Bir ticket'ı üstlen. Bu, ekibinize bu ticket'ı sizin üstlendiğinizi bildirecektir.",
"unclaim": "Bir ticket'tan üstlenmeyi bırak. Bu, ekibinize bu ticket'ın tekrar serbest olduğunu bildirecektir.",
"add": "Bir kullanıcıyı bir ticket'a ekle. Bu, kullanıcının bu ticket'ta okumaya ve yazmaya izin verecektir.",
"remove": "Bir kullanıcıyı bir ticket'tan çıkar. Bu, bir kullanıcının bu ticket'ta okumaya ve yazmaya izin vermeyecektir.",
"panel": "Bir mesaj gönderin (ticket oluşturma için dropdown veya butonlar).",
"blacklistView": "Mevcut kara listeyi görüntüle.",
"blacklistAdd": "Bir kullanıcıyı kara listeye ekle.",
"blacklistRemove": "Bir kullanıcıyı kara listeden çıkar.",
"blacklistGet": "Kara listeye alınmış bir kullanıcının detaylarını al.",
"statsGlobal": "Küresel istatistikleri görüntüle.",
"statsTicket": "Sunucudaki bir ticket'ın istatistiklerini görüntüle.",
"statsUser ": "Sunucudaki bir kullanıcının istatistiklerini görüntüle.",
"statsReset": "Botun tüm istatistiklerini sıfırla (sıfırdan saymaya başla).",
"autocloseDisable": "Bu ticket'ta otomatik kapatmayı devre dışı bırak.",
"autocloseEnable": "Bu ticket'ta otomatik kapatmayı etkinleştir.",
"autodeleteDisable": "Bu ticket'ta otomatik silmeyi devre dışı bırak.",
"autodeleteEnable": "Bu ticket'ta otomatik silmeyi etkinleştir."
},
"stats": {
"scopes": {
"global": "Küresel İstatistikler",
"system": "Sistem İstatistikleri",
"user": "Kullanıcı İstatistikleri",
"ticket": "Ticket İstatistikleri",
"participants": "Katılımcılar"
},
"properties": {
"ticketsCreated": "Oluşturulan Ticket'lar",
"ticketsClosed": "Kapalı Ticket'lar",
"ticketsDeleted": "Silinen Ticket'lar",
"ticketsReopened": "Yeniden Açılan Ticket'lar",
"ticketsAutoclosed": "Otomatik Kapatılan Ticket'lar",
"ticketsClaimed": "Üstlenilen Ticket'lar",
"ticketsPinned": "Sabitlenen Ticket'lar",
"ticketsMoved": "Taşınan Ticket'lar",
"usersBlacklisted": "Kara Listeye Alınan Kullanıcılar",
"transcriptsCreated": "Oluşturulan Transkriptler"
}
}
}
+478
View File
@@ -0,0 +1,478 @@
{
"_TRANSLATION":{
"otversion":"v4.0.0",
"translators":["Anderskiy"],
"lastedited":"31/08/2024",
"language":"Ukrainian",
"automated":false
},
"checker":{
"system":{
"typeError":"[ПОМИЛКА]",
"headerOpenTicket":"OPEN TICKET",
"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":"Це недійсний ідентифікатор discord {0}!",
"discordInvalidIdOptions":"Це недійсний ідентифікатор discord {0}! Але ви також можете використати один з цих: {1}!",
"discordInvalidToken":"Це недійсний токен дискорду (синтаксично)!",
"colorInvalid":"Це недійсний hex кольор!",
"emojiTooShort":"Цей рядок повинен містити щонайменше {0} емодзі!",
"emojiTooLong":"Цей рядок повинен містити не більше {0} емодзі!",
"emojiCustom":"Цей емодзі не може бути користувацьким дискорд емодзі!",
"emojiInvalid":"Цей емодзі недійсний!",
"urlInvalid":"Це посилання недійсне!",
"urlInvalidHttp":"Це посилання може використовувати лише https:// протокол!",
"urlInvalidProtocol":"Це посилання може використовувати лише http:// та https:// протоколи!",
"urlInvalidHostname":"Це посилання має заборонене ім'я хоста!",
"urlInvalidExtension":"Це посилання має невірне розширення! Виберіть один з варіантів: {0}!",
"urlInvalidPath":"Це посилання має недійсний шлях!",
"idNotUnique":"Цей ідентифікатор не є унікальним, використовуйте інший ідентифікатор!",
"idNonExistent":"Цей айді {0} недійсний!",
"invalidType":"Ця властивість повинна мати тип: {0}!",
"propertyMissing":"У цього об'єкту відсутня властивість {0}!",
"propertyOptional":"Властивість {0} у цьому об'єкті є необов'язковою!",
"objectDisabled":"Цей об'єкт вимкнено, увімкніть його за допомогою {0}!",
"nullInvalid":"Ця властивість не може бути нульовою!",
"switchInvalidType":"Це має бути один з наступних типів: {0}!",
"objectSwitchInvalid":"Цей об'єкт повинен бути одного з наступних типів: {0}!",
"invalidLanguage":"Це недійсна мова!",
"invalidButton":"Ця кнопка повинна мати принаймні {0} або {1}!",
"unusedOption":"Опція {0} ніде не використовується!",
"unusedQuestion":"Питання {0} ніде не використовується!",
"dropdownOption":"Панель з увімкненим випадаючим списком може містити лише опції типу «тікет»!"
}
},
"actions":{
"buttons":{
"create":"Відвідати тікет",
"close":"Закрити тікет",
"delete":"Видалити тікет",
"reopen":"Відкрити тикет",
"claim":"Запросити тікет",
"unclaim":"Відпросити тікет",
"pin":"Закріпити тікет",
"unpin":"Відкріпити тікет",
"clear":"Видалити тікети",
"helpSwitchSlash":"Перевірити слеш-команди",
"helpSwitchText":"Перевірити текстові команди",
"helpPage":"Cторінка {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} {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\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":"Через обмеження швидкості дискорду бот наразі не може перейменувати канал. Канал буде автоматично перейменовано через 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":"Ви повинні бути 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":"true",
"false":"false",
"syntax":"Синтаксіс",
"originalName":"Оригінальне ім'я",
"newName":"Нове ім'я",
"until":"Доки",
"validOptions":"Дійсні параметри",
"validPanels":"Дійсні панелі",
"autoclose":"Автозакриття",
"autodelete":"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":"Транскриптів створено"
}
}
}
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

+47 -25
View File
@@ -1,27 +1,49 @@
{
"name": "safemt-tickets",
"version": "1.0.0",
"description": "This is an open-source discord ticket bot, you can configure it and it comes with cool features like a transcript.",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"canvas": "^2.8.0",
"discord.js": "^13.2.0",
"express": "^4.17.1",
"node": "^16.10.0",
"node-localstorage": "^2.2.1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/DJj123dj/open-ticket.git"
},
"bugs": {
"url": "https://github.com/DJj123dj/open-ticket/issues"
},
"homepage": "https://github.com/DJj123dj/open-ticket#readme"
"name": "open-ticket",
"author": "DJdj Development",
"version": "4.0.0",
"description": "The most advanced open-source discord ticket bot with HTML transcripts, plugins, questions, claiming, pinning & more! Using discord.js v14 & JSON database! ",
"keywords": [
"ticket-bot",
"discord",
"open-ticket",
"plugins",
"discord-ticket-bot"
],
"main": "index.js",
"scripts": {
"build": "node index.js --compile-only",
"start": "node index.js",
"startnc": "node index.js --no-compile",
"test": "node index.js --dev-config --dev-database",
"testnc": "node index.js --no-compile --dev-config --dev-database",
"docs": "npx typedoc --options .docs/typedoc-config.json && node .docs/createDocs.js"
},
"type": "commonjs",
"license": "GPL-3.0-only",
"dependencies": {
"@discordjs/rest": "^2.4.2",
"@types/node": "^22.5.0",
"ansis": "^2.3.0",
"discord.js": "^14.17.2",
"formatted-json-stringify": "^1.1.0",
"typescript": "^5.5.4"
},
"repository": {
"type": "git",
"url": "git+https://github.com/open-discord-bots/open-ticket.git"
},
"bugs": {
"url": "https://github.com/open-discord-bots/open-ticket/issues",
"email": "support@dj-dj.be"
},
"homepage": "https://openticket.dj-dj.be",
"imports": {
"#opendiscord": "./dist/src/index.js",
"#opendiscord-types": "./dist/src/core/api/api.js"
},
"funding":{
"type": "individual",
"url": "https://github.com/sponsors/DJj123dj"
}
}
+4
View File
@@ -0,0 +1,4 @@
# Example Plugin
A simple example of an Open Ticket v4 plugin!
> Use this plugin as a starter template for all your custom plugins!
+5
View File
@@ -0,0 +1,5 @@
{
"testVariable1":true,
"testVariable2":123,
"testVariable3":"abc"
}
+46
View File
@@ -0,0 +1,46 @@
import {api, opendiscord, utilities} from "#opendiscord"
import * as discord from "discord.js"
/////////////////////////////////////////////
//// This plugin is not enabled yet! ////
//// Enable it in the plugin.json file! ////
/////////////////////////////////////////////
if (utilities.project != "openticket") throw new api.ODPluginError("This plugin only works in Open Ticket!")
//Add Typescript autocomplete support for plugin data. (!!!OPTIONAL!!!)
declare module "#opendiscord-types" {
export interface ODPluginManagerIds_Default {
"example-plugin":api.ODPlugin
}
export interface ODConfigManagerIds_Default {
"example-plugin:config":api.ODJsonConfig
}
}
//Let's register the example config. This way it's available for all plugins & systems.
opendiscord.events.get("onConfigLoad").listen((configManager) => {
configManager.add(new api.ODJsonConfig("example-plugin:config","config.json","./plugins/example-plugin/"))
/*===== What did we do? =====
- "example-plugin:config" Is the ID of this config. You can use this id troughout the bot to access this config file. Even in other plugins.
- "config.json" Is the FILE of this config. It is just the filename.
- "./plugins/example-plugin/" Is the DIRECTORY of this config. By default it's "./config/", but we want to change it to point at the plugin directory.
*/
//Let's also log it to the console to let us know it worked!
const ourConfig = configManager.get("example-plugin:config")
opendiscord.log("The example config loaded successfully!","plugin",[
{key:"var-1",value:ourConfig.data.testVariable1},
{key:"var-2",value:ourConfig.data.testVariable2.toString()},
{key:"var-3",value:ourConfig.data.testVariable3.toString()}
])
})
opendiscord.events.get("onTicketCreate").listen((creator) => {
//This is logged before the ticket is created (after the button is pressed)
opendiscord.log("Ticket is getting created...","plugin")
})
opendiscord.events.get("afterTicketCreated").listen((ticket,creator,channel) => {
//This is logged after the ticket is created
opendiscord.log("Ticket ready!","plugin")
})
+23
View File
@@ -0,0 +1,23 @@
{
"name":"Example Plugin",
"id":"example-plugin",
"version":"1.0.0",
"startFile":"index.ts",
"enabled":false,
"priority":0,
"events":[],
"npmDependencies":[],
"requiredPlugins":[],
"incompatiblePlugins":[],
"details":{
"author":"DJj123dj",
"shortDescription":"A simple template for an Open Ticket v4 plugin!",
"longDescription":"A simple example of an Open Ticket v4 plugin!",
"imageUrl":"",
"projectUrl":"",
"tags":["template","example","default"]
}
}
+88
View File
@@ -0,0 +1,88 @@
///////////////////////////////////////
//TICKET ADD USER SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:add-ticket-user"))
opendiscord.actions.get("opendiscord:add-ticket-user").workers.add([
new api.ODWorker("opendiscord:add-ticket-user",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to add user to ticket! Open Ticket doesn't support threads!")
await opendiscord.events.get("onTicketUserAdd").emit([ticket,user,data,channel,reason])
//update ticket
ticket.get("opendiscord:participants").value.push({type:"user",id:data.id})
ticket.get("opendiscord:participants").refreshDatabase()
ticket.get("opendiscord:busy").value = true
//update channel permissions
try{
await channel.permissionOverwrites.create(data,{
ViewChannel:true,
SendMessages:true,
AddReactions:true,
AttachFiles:true,
SendPolls:true,
ReadMessageHistory:true
})
}catch{
opendiscord.log("Failed to add channel permission overwrites on add-ticket-user","error")
}
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on ticket user adding!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value,hidden:true}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
//reply with new message
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:add-message").build(source,{guild,channel,user,ticket,reason,data})).message)
ticket.get("opendiscord:busy").value = false
await opendiscord.events.get("afterTicketUserAdded").emit([ticket,user,data,channel,reason])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.adding.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
}
//to dm
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.adding.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket,data} = params
opendiscord.log(user.displayName+" added "+data.displayName+" to a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"reason",value:params.reason ?? "/"},
{key:"method",value:source}
])
})
])
opendiscord.actions.get("opendiscord:add-ticket-user").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel
params.ticket.get("opendiscord:busy").value = false
})
}
+277
View File
@@ -0,0 +1,277 @@
///////////////////////////////////////
//TICKET CLAIMING SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:claim-ticket"))
opendiscord.actions.get("opendiscord:claim-ticket").workers.add([
new api.ODWorker("opendiscord:claim-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to claim ticket! Open Ticket doesn't support threads!")
await opendiscord.events.get("onTicketClaim").emit([ticket,user,channel,reason])
//update ticket
ticket.get("opendiscord:claimed").value = true
ticket.get("opendiscord:claimed-by").value = user.id
ticket.get("opendiscord:claimed-on").value = new Date().getTime()
ticket.get("opendiscord:busy").value = true
//update stats
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-claimed",1,"increase")
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-claimed",user.id,1,"increase")
//update category
const rawClaimCategory = ticket.option.get("opendiscord:channel-categories-claimed").value.find((c) => c.user == user.id)
const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null
if (claimCategory){
try {
channel.setParent(claimCategory,{lockPermissions:false})
ticket.get("opendiscord:category-mode").value = "claimed"
ticket.get("opendiscord:category").value = claimCategory
}catch(e){
opendiscord.log("Unable to move ticket to 'claimed category'!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"categoryid",value:claimCategory}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on ticket claiming!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
//reply with new message
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("opendiscord:busy").value = false
await opendiscord.events.get("afterTicketClaimed").emit([ticket,user,channel,reason])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.claiming.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
}
//to dm
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.claiming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params
opendiscord.log(user.displayName+" claimed a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"reason",value:params.reason ?? "/"},
{key:"method",value:source}
])
})
])
opendiscord.actions.get("opendiscord:claim-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel
params.ticket.get("opendiscord:busy").value = false
})
}
export const registerVerifyBars = async () => {
//CLAIM TICKET TICKET MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:claim-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:claim-ticket-ticket-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.claim
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:claim-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when already claimed
if (ticket.get("opendiscord:claimed").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start claiming ticket
if (params.data == "reason"){
//claim with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:claim-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{
//claim without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:claim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
}
})
])
opendiscord.verifybars.get("opendiscord:claim-ticket-ticket-message").failure.add([
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
})
])
//CLAIM TICKET UNCLAIM MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:claim-ticket-unclaim-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-unclaim-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:claim-ticket-unclaim-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.claim
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:claim-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when already claimed
if (ticket.get("opendiscord:claimed").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start claiming ticket
if (params.data == "reason"){
//claim with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:claim-ticket-reason").build("unclaim-message",{guild,channel,user,ticket}))
}else{
//claim without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:claim-ticket").run("unclaim-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build("unclaim-message",{guild,channel,user,ticket,reason:null}))
}
})
])
opendiscord.verifybars.get("opendiscord:claim-ticket-unclaim-message").failure.add([
new api.ODWorker("opendiscord:back-to-unclaim-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const {verifybarMessage} = params
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unclaim-message").build("other",{guild,channel,user,ticket,reason}))
})
])
}
+65
View File
@@ -0,0 +1,65 @@
///////////////////////////////////////
//CLEAR TICKETS SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:clear-tickets"))
opendiscord.actions.get("opendiscord:clear-tickets").workers.add([
new api.ODWorker("opendiscord:clear-tickets",2,async (instance,params,source,cancel) => {
const {guild,channel,user,filter,list} = params
await opendiscord.events.get("onTicketsClear").emit([list,user,channel,filter])
const nameList: string[] = []
//split tickets into smaller groups of 10 (to decrease ratelimit chances for HTML Transcripts & discord API)
const subGroupList: api.ODTicket[][] = []
let tempSubGroup: api.ODTicket[] = []
list.forEach((ticket,index) => {
tempSubGroup.push(ticket)
if (tempSubGroup.length >= 10){
subGroupList.push(tempSubGroup)
tempSubGroup = []
}
})
if (tempSubGroup.length > 0) subGroupList.push(tempSubGroup)
let groupIndex = 0
for (const ticketGroup of subGroupList){
for (const ticket of ticketGroup){
const ticketChannel = await opendiscord.tickets.getTicketChannel(ticket)
if (!ticketChannel) return
nameList.push("#"+ticketChannel.name)
await opendiscord.actions.get("opendiscord:delete-ticket").run("clear",{guild,channel:ticketChannel,user,ticket,reason:"Cleared Ticket",sendMessage:true,withoutTranscript:false})
await utilities.timer(2000) //wait 2sec between each deletion
}
if (groupIndex < subGroupList.length-1) await utilities.timer(45*1000) //wait 45sec between each group deletion (10 tickets)
groupIndex++
}
instance.list = nameList
await opendiscord.events.get("afterTicketsCleared").emit([list,user,channel,filter])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,filter,list} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.deleting.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:clear-logs").build(source,{guild,channel,user,filter,list:instance.list ?? []}))
}
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,user,filter,list} = params
opendiscord.log(user.displayName+" cleared "+list.length+" tickets!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"method",value:source},
{key:"filter",value:filter}
])
})
])
}
+335
View File
@@ -0,0 +1,335 @@
///////////////////////////////////////
//TICKET CLOSING SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:close-ticket"))
opendiscord.actions.get("opendiscord:close-ticket").workers.add([
new api.ODWorker("opendiscord:close-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to close ticket! Open Ticket doesn't support threads!")
await opendiscord.events.get("onTicketClose").emit([ticket,user,channel,reason])
//update ticket
ticket.get("opendiscord:closed").value = true
if (source == "autoclose") ticket.get("opendiscord:autoclosed").value = true
ticket.get("opendiscord:open").value = false
ticket.get("opendiscord:closed-by").value = user.id
ticket.get("opendiscord:closed-on").value = new Date().getTime()
ticket.get("opendiscord:busy").value = true
//update stats
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-closed",1,"increase")
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-closed",user.id,1,"increase")
//update category
const closeCategory = ticket.option.get("opendiscord:channel-category-closed").value
if (closeCategory !== ""){
try {
channel.setParent(closeCategory,{lockPermissions:false})
ticket.get("opendiscord:category-mode").value = "closed"
ticket.get("opendiscord:category").value = closeCategory
}catch(e){
opendiscord.log("Unable to move ticket to 'closed category'!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"categoryid",value:closeCategory}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
//update permissions (non-staff => readonly)
const permissions: discord.OverwriteResolvable[] = [{
type:discord.OverwriteType.Role,
id:guild.roles.everyone.id,
allow:[],
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
}]
const globalAdmins = opendiscord.configs.get("opendiscord:general").data.globalAdmins
const optionAdmins = ticket.option.get("opendiscord:admins").value
const readonlyAdmins = ticket.option.get("opendiscord:admins-readonly").value
globalAdmins.forEach((admin) => {
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
deny:[]
})
})
optionAdmins.forEach((admin) => {
if (globalAdmins.includes(admin)) return
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
deny:[]
})
})
readonlyAdmins.forEach((admin) => {
if (globalAdmins.includes(admin)) return
if (optionAdmins.includes(admin)) return
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","ReadMessageHistory"],
deny:["SendMessages","AddReactions","AttachFiles","SendPolls"]
})
})
ticket.get("opendiscord:participants").value.forEach((participant) => {
//all participants that aren't roles/admins => readonly (OR non-viewable when enabled)
if (participant.type == "user"){
if (generalConfig.data.system.removeParticipantsOnClose) permissions.push({
type:discord.OverwriteType.Member,
id:participant.id,
allow:[],
deny:["SendMessages","AddReactions","AttachFiles","SendPolls","ViewChannel","ReadMessageHistory"]
})
else permissions.push({
type:discord.OverwriteType.Member,
id:participant.id,
allow:["ViewChannel","ReadMessageHistory"],
deny:["SendMessages","AddReactions","AttachFiles","SendPolls"]
})
}
})
channel.permissionOverwrites.set(permissions)
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on ticket closing!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
//reply with new message
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:close-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("opendiscord:busy").value = false
await opendiscord.events.get("afterTicketClosed").emit([ticket,user,channel,reason])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.closing.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
}
//to dm
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.closing.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params
opendiscord.log(user.displayName+" closed a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"reason",value:params.reason ?? "/"},
{key:"method",value:source}
])
})
])
opendiscord.actions.get("opendiscord:close-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel
params.ticket.get("opendiscord:busy").value = false
})
}
export const registerVerifyBars = async () => {
//CLOSE TICKET TICKET MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:close-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:close-ticket-ticket-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.close
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:close-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when already closed
if (ticket.get("opendiscord:closed").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start closing ticket
if (params.data == "reason"){
//close with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:close-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{
//close without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:close-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
}
})
])
opendiscord.verifybars.get("opendiscord:close-ticket-ticket-message").failure.add([
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
})
])
//CLOSE TICKET REOPEN MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:close-ticket-reopen-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:close-ticket-reopen-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.close
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:close-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when already closed
if (ticket.get("opendiscord:closed").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start closing ticket
if (params.data == "reason"){
//close with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:close-ticket-reason").build("reopen-message",{guild,channel,user,ticket}))
}else{
//close without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:close-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:close-message").build("reopen-message",{guild,channel,user,ticket,reason:null}))
}
})
])
opendiscord.verifybars.get("opendiscord:close-ticket-reopen-message").failure.add([
new api.ODWorker("opendiscord:back-to-reopen-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const {verifybarMessage} = params
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("other",{guild,channel,user,ticket,reason}))
})
])
}
+229
View File
@@ -0,0 +1,229 @@
///////////////////////////////////////
//TICKET CREATION SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:create-ticket"))
opendiscord.actions.get("opendiscord:create-ticket").workers.add([
new api.ODWorker("opendiscord:create-ticket",3,async (instance,params,source,cancel) => {
const {guild,user,answers,option} = params
await opendiscord.events.get("onTicketCreate").emit([user])
await opendiscord.events.get("onTicketChannelCreation").emit([option,user])
//get channel properties
const channelPrefix = option.get("opendiscord:channel-prefix").value
const channelCategory = option.get("opendiscord:channel-category").value
const channelBackupCategory = option.get("opendiscord:channel-category-backup").value
const channelDescription = option.get("opendiscord:channel-description").value
const channelSuffix = opendiscord.options.suffix.getSuffixFromOption(option,user)
const channelName = channelPrefix+channelSuffix
//handle category
let category: string|null = null
let categoryMode: "backup"|"normal"|null = null
if (channelCategory != ""){
//category enabled
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
if (!normalCategory){
//default category was not found
opendiscord.log("Ticket Creation Error: Unable to find category! #1","error",[
{key:"categoryid",value:channelCategory},
{key:"backup",value:"false"}
])
}else{
//default category was found
if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){
//use backup category
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
if (!backupCategory){
//default category was not found
opendiscord.log("Ticket Creation Error: Unable to find category! #2","error",[
{key:"categoryid",value:channelBackupCategory},
{key:"backup",value:"true"}
])
}else{
category = backupCategory.id
categoryMode = "backup"
}
}else{
//use default category
category = normalCategory.id
categoryMode = "normal"
}
}
}
//handle permissions
const permissions: discord.OverwriteResolvable[] = [{
type:discord.OverwriteType.Role,
id:guild.roles.everyone.id,
allow:[],
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
}]
const globalAdmins = opendiscord.configs.get("opendiscord:general").data.globalAdmins
const optionAdmins = option.get("opendiscord:admins").value
const readonlyAdmins = option.get("opendiscord:admins-readonly").value
globalAdmins.forEach((admin) => {
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
deny:[]
})
})
optionAdmins.forEach((admin) => {
if (globalAdmins.includes(admin)) return
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
deny:[]
})
})
readonlyAdmins.forEach((admin) => {
if (globalAdmins.includes(admin)) return
if (optionAdmins.includes(admin)) return
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","ReadMessageHistory"],
deny:["SendMessages","AddReactions","AttachFiles","SendPolls"]
})
})
permissions.push({
type:discord.OverwriteType.Member,
id:user.id,
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory"],
deny:[]
})
//create channel
const channel = await guild.channels.create({
type:discord.ChannelType.GuildText,
name:channelName,
nsfw:false,
topic:channelDescription,
parent:category,
reason:"Ticket Created By "+user.displayName,
permissionOverwrites:permissions
})
await opendiscord.events.get("afterTicketChannelCreated").emit([option,channel,user])
//create participants
const participants: {type:"role"|"user",id:string}[] = []
permissions.forEach((permission,index) => {
if (index == 0) return //don't include @everyone
const type = (permission.type == discord.OverwriteType.Role) ? "role" : "user"
const id = permission.id as string
participants.push({type,id})
})
//create ticket
const ticket = new api.ODTicket(channel.id,option,[
new api.ODTicketData("opendiscord:busy",false),
new api.ODTicketData("opendiscord:ticket-message",null),
new api.ODTicketData("opendiscord:participants",participants),
new api.ODTicketData("opendiscord:channel-suffix",channelSuffix),
new api.ODTicketData("opendiscord:open",true),
new api.ODTicketData("opendiscord:opened-by",user.id),
new api.ODTicketData("opendiscord:opened-on",new Date().getTime()),
new api.ODTicketData("opendiscord:closed",false),
new api.ODTicketData("opendiscord:closed-by",null),
new api.ODTicketData("opendiscord:closed-on",null),
new api.ODTicketData("opendiscord:claimed",false),
new api.ODTicketData("opendiscord:claimed-by",null),
new api.ODTicketData("opendiscord:claimed-on",null),
new api.ODTicketData("opendiscord:pinned",false),
new api.ODTicketData("opendiscord:pinned-by",null),
new api.ODTicketData("opendiscord:pinned-on",null),
new api.ODTicketData("opendiscord:for-deletion",false),
new api.ODTicketData("opendiscord:category",category),
new api.ODTicketData("opendiscord:category-mode",categoryMode),
new api.ODTicketData("opendiscord:autoclose-enabled",option.get("opendiscord:autoclose-enable-hours").value),
new api.ODTicketData("opendiscord:autoclose-hours",(option.get("opendiscord:autoclose-enable-hours").value ? option.get("opendiscord:autoclose-hours").value : 0)),
new api.ODTicketData("opendiscord:autoclosed",false),
new api.ODTicketData("opendiscord:autodelete-enabled",option.get("opendiscord:autodelete-enable-days").value),
new api.ODTicketData("opendiscord:autodelete-days",(option.get("opendiscord:autodelete-enable-days").value ? option.get("opendiscord:autodelete-days").value : 0)),
new api.ODTicketData("opendiscord:answers",answers)
])
//manage stats
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-created",1,"increase")
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-created",user.id,1,"increase")
//manage bot permissions
await opendiscord.events.get("onTicketPermissionsCreated").emit([option,opendiscord.permissions,channel,user])
await (await import("../data/framework/permissionLoader.js")).addTicketPermissions(ticket)
await opendiscord.events.get("afterTicketPermissionsCreated").emit([option,opendiscord.permissions,channel,user])
//export channel & ticket
instance.channel = channel
instance.ticket = ticket
opendiscord.tickets.add(ticket)
}),
new api.ODWorker("opendiscord:send-ticket-message",2,async (instance,params,source,cancel) => {
const {guild,user,answers,option} = params
const {ticket,channel} = instance
if (!ticket || !channel) return opendiscord.log("Ticket Creation Error: Unable to send ticket message. Previous worker failed!","error")
await opendiscord.events.get("onTicketMainMessageCreated").emit([ticket,channel,user])
//check if ticket message is enabled
if (!option.get("opendiscord:ticket-message-enabled").value) return
try {
const msg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build(source,{guild,channel,user,ticket})).message)
ticket.get("opendiscord:ticket-message").value = msg.id
//manage stats
await opendiscord.stats.get("opendiscord:ticket").setStat("opendiscord:messages-sent",ticket.id.value,1,"increase")
await opendiscord.events.get("afterTicketMainMessageCreated").emit([ticket,msg,channel,user])
}catch(err){
process.emit("uncaughtException",err)
//something went wrong while sending the ticket message
channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error").build("other",{guild,channel,user,error:"Ticket Message: Creation Error!\n=> Ticket Is Still Created Succesfully",layout:"advanced"})).message)
}
await opendiscord.events.get("afterTicketCreated").emit([ticket,user,channel])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,user,answers,option} = params
const {ticket,channel} = instance
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.creation.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-created-logs").build(source,{guild,channel,user,ticket}))
}
//to dm
if (generalConfig.data.system.messages.creation.dm) await opendiscord.client.sendUserDm(user,await opendiscord.builders.messages.getSafe("opendiscord:ticket-created-dm").build(source,{guild,channel,user,ticket}))
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,user,answers,option} = params
const {ticket,channel} = instance
if (!ticket || !channel) return opendiscord.log("Ticket Creation Error: Unable to create logs. Previous worker failed!","error")
opendiscord.log(user.displayName+" created a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"method",value:source},
{key:"option",value:option.id.value}
])
})
])
}
+106
View File
@@ -0,0 +1,106 @@
///////////////////////////////////////
//TICKET CREATION SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:create-ticket-permissions"))
opendiscord.actions.get("opendiscord:create-ticket-permissions").workers.add([
new api.ODWorker("opendiscord:check-blacklist",4,(instance,params,source,cancel) => {
if (!params.option.get("opendiscord:allow-blacklisted-users").value && opendiscord.blacklist.exists(params.user.id)){
instance.valid = false
instance.reason = "blacklist"
opendiscord.log(params.user.displayName+" tried to create a ticket but is blacklisted!","info",[
{key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value}
])
return cancel()
}
}),
new api.ODWorker("opendiscord:check-cooldown",3,(instance,params,source,cancel) => {
const cooldown = opendiscord.cooldowns.get("opendiscord:option-cooldown_"+params.option.id.value)
if (cooldown && cooldown instanceof api.ODTimeoutCooldown && cooldown.use(params.user.id)){
instance.valid = false
instance.reason = "cooldown"
const remaining = cooldown.remaining(params.user.id) ?? 0
instance.cooldownUntil = new Date(new Date().getTime() + remaining)
opendiscord.log(params.user.displayName+" tried to create a ticket but is on cooldown!","info",[
{key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value},
{key:"remaining",value:(remaining/1000).toString()+"sec"}
])
return cancel()
}
}),
new api.ODWorker("opendiscord:check-global-limits",2,(instance,params,source,cancel) => {
const generalConfig = opendiscord.configs.get("opendiscord:general")
if (!generalConfig.data.system.limits.enabled) return
const allTickets = opendiscord.tickets.getAll()
const globalTicketCount = allTickets.length
const userTickets = opendiscord.tickets.getFiltered((ticket) => ticket.exists("opendiscord:opened-by") && (ticket.get("opendiscord:opened-by").value == params.user.id))
const userTicketCount = userTickets.length
if (globalTicketCount >= generalConfig.data.system.limits.globalMaximum){
instance.valid = false
instance.reason = "global-limit"
opendiscord.log(params.user.displayName+" tried to create a ticket but reached the limit!","info",[
{key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value},
{key:"limit",value:"global"}
])
return cancel()
}else if (userTicketCount >= generalConfig.data.system.limits.userMaximum){
instance.valid = false
instance.reason = "global-user-limit"
opendiscord.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
{key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value},
{key:"limit",value:"global-user"}
])
return cancel()
}
}),
new api.ODWorker("opendiscord:check-option-limits",1,(instance,params,source,cancel) => {
if (!params.option.exists("opendiscord:limits-enabled") || !params.option.get("opendiscord:limits-enabled").value) return
const allTickets = opendiscord.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value)
const globalTicketCount = allTickets.length
const userTickets = opendiscord.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value && ticket.exists("opendiscord:opened-by") && (ticket.get("opendiscord:opened-by").value == params.user.id))
const userTicketCount = userTickets.length
if (globalTicketCount >= params.option.get("opendiscord:limits-maximum-global").value){
instance.valid = false
instance.reason = "option-limit"
opendiscord.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
{key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value},
{key:"limit",value:"option"}
])
return cancel()
}else if (userTicketCount >= params.option.get("opendiscord:limits-maximum-user").value){
instance.valid = false
instance.reason = "option-user-limit"
opendiscord.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
{key:"user",value:params.user.username},
{key:"userid",value:params.user.id,hidden:true},
{key:"option",value:params.option.id.value},
{key:"limit",value:"option-user"}
])
return cancel()
}
}),
new api.ODWorker("opendiscord:valid",0,(instance,params,source,cancel) => {
instance.valid = true
instance.reason = null
cancel()
})
])
}
+165
View File
@@ -0,0 +1,165 @@
///////////////////////////////////////
//TRANSCRIPT CREATION SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const transcriptConfig = opendiscord.configs.get("opendiscord:transcripts")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:create-transcript"))
opendiscord.actions.get("opendiscord:create-transcript").workers.add([
new api.ODWorker("opendiscord:select-compiler",4,async (instance,params,source,cancel) => {
const {channel,user,ticket} = params
if (channel.type != discord.ChannelType.GuildText) return cancel()
if (!transcriptConfig.data.general.enabled) return cancel()
await opendiscord.events.get("onTranscriptCreate").emit([opendiscord.transcripts,ticket,channel,user])
instance.errorReason = null
const participants = await opendiscord.tickets.getAllTicketParticipants(params.ticket)
if (!participants){
instance.pendingMessage = null
instance.errorReason = "Unable to fetch ticket channel participants!"
throw new api.ODSystemError("ODAction(ot:create-transcript) => Unable to fetch ticket channel participants!")
}
instance.participants = participants
//select transcript compiler
if (transcriptConfig.data.general.mode == "text") instance.compiler = opendiscord.transcripts.get("opendiscord:text-compiler")
else if (transcriptConfig.data.general.mode == "html") instance.compiler = opendiscord.transcripts.get("opendiscord:html-compiler")
}),
new api.ODWorker("opendiscord:init-transcript",3,async (instance,params,source,cancel) => {
const {channel,user,ticket} = params
if (channel.type != discord.ChannelType.GuildText) return cancel()
if (!transcriptConfig.data.general.enabled) return cancel()
//run transcript compiler init()
await opendiscord.events.get("onTranscriptInit").emit([opendiscord.transcripts,ticket,channel,user])
if (instance.compiler.init){
try{
const result = await instance.compiler.init(ticket,channel,user)
if (result.success && result.pendingMessage && transcriptConfig.data.general.enableChannel){
//send init message to channel
const post = opendiscord.posts.get("opendiscord:transcripts")
if (post){
instance.pendingMessage = await post.send(result.pendingMessage)
}
}else if (!result.success){
instance.pendingMessage = null
instance.errorReason = result.errorReason
throw new api.ODSystemError("ODAction(ot:create-transcript) => Known Init Error => "+result.errorReason)
}else instance.pendingMessage = null
}catch(err){
instance.success = false
cancel()
process.emit("uncaughtException",err)
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler init()! (see error above)")
}
}
await opendiscord.events.get("afterTranscriptInitiated").emit([opendiscord.transcripts,ticket,channel,user])
}),
new api.ODWorker("opendiscord:compile-transcript",2,async (instance,params,source,cancel) => {
const {channel,user,ticket} = params
if (channel.type != discord.ChannelType.GuildText) return cancel()
if (!instance.compiler){
instance.success = false
cancel()
throw new api.ODSystemError("ODAction(ot:create-transcript):ODWorker(ot:compile-transcript) => Instance is missing transcript compiler!")
}
//run transcript compiler compile()
await opendiscord.events.get("onTranscriptCompile").emit([opendiscord.transcripts,ticket,channel,user])
if (instance.compiler.compile){
try{
const result = await instance.compiler.compile(ticket,channel,user)
if (!result.success){
instance.errorReason = result.errorReason
throw new api.ODSystemError("ODAction(ot:create-transcript) => Known Compiler Error => "+result.errorReason)
}else{
instance.result = result
instance.success = true
}
}catch(err){
instance.success = false
cancel()
process.emit("uncaughtException",err)
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler compile()! (see error above)")
}
}
await opendiscord.events.get("afterTranscriptCompiled").emit([opendiscord.transcripts,ticket,channel,user])
}),
new api.ODWorker("opendiscord:ready-transcript",1,async (instance,params,source,cancel) => {
if (!instance.result){
instance.success = false
cancel()
throw new api.ODSystemError("ODAction(ot:create-transcript):ODWorker(ot:ready-transcript) => Instance is missing transcript result!")
}
//run transcript compiler ready()
utilities.runAsync(async () => {
await opendiscord.events.get("onTranscriptReady").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
if (instance.compiler.ready){
try{
const {channelMessage,creatorDmMessage,participantDmMessage,activeAdminDmMessage,everyAdminDmMessage} = await instance.compiler.ready(instance.result)
//send channel message
if (transcriptConfig.data.general.enableChannel && channelMessage){
if (instance.pendingMessage && instance.pendingMessage.message && instance.pendingMessage.success){
//edit "pending" message to be the "ready" message
instance.pendingMessage.message.edit(channelMessage.message)
}else{
//send ready message to channel
const post = opendiscord.posts.get("opendiscord:transcripts")
if (post) await post.send(channelMessage)
}
}
//send dm mesages
if (instance.participants){
for (const p of instance.participants){
if (p.role == "creator" && transcriptConfig.data.general.enableCreatorDM && creatorDmMessage){
//send creator dm message
await opendiscord.client.sendUserDm(p.user,creatorDmMessage)
}else if (p.role == "participant" && transcriptConfig.data.general.enableParticipantDM && participantDmMessage){
//send participant dm message
await opendiscord.client.sendUserDm(p.user,participantDmMessage)
}else if (p.role == "admin" && transcriptConfig.data.general.enableActiveAdminDM && instance.result.success && instance.result.messages && instance.result.messages.some((msg) => msg.author.id == p.user.id) && activeAdminDmMessage){
//send active admin dm message
await opendiscord.client.sendUserDm(p.user,activeAdminDmMessage)
}else if (p.role == "admin" && transcriptConfig.data.general.enableEveryAdminDM && everyAdminDmMessage){
//send every admin dm message
await opendiscord.client.sendUserDm(p.user,everyAdminDmMessage)
}
}
}
}catch(err){
instance.success = false
cancel()
process.emit("uncaughtException",err)
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler ready()! (see error above)")
}
}
await opendiscord.events.get("afterTranscriptReady").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
})
//update stats
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:transcripts-created",1,"increase")
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:transcripts-created",params.user.id,1,"increase")
await opendiscord.events.get("afterTranscriptCreated").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {user,channel,ticket} = params
opendiscord.log(user.displayName+" created a transcript!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"option",value:ticket.option.id.value},
{key:"method",value:source,hidden:true},
{key:"compiler",value:instance.compiler.id.value},
])
})
])
}
+466
View File
@@ -0,0 +1,466 @@
///////////////////////////////////////
//TICKET DELETION SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:delete-ticket"))
opendiscord.actions.get("opendiscord:delete-ticket").workers.add([
new api.ODWorker("opendiscord:delete-ticket",3,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to delete ticket! Open Ticket doesn't support threads!")
await opendiscord.events.get("onTicketDelete").emit([ticket,user,channel,reason])
//update ticket
ticket.get("opendiscord:for-deletion").value = true
ticket.get("opendiscord:busy").value = true
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on ticket deletion!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build(source,{guild,channel,user,ticket,reason})).message)
//create transcript
if (!params.withoutTranscript){
const transcriptRes = await opendiscord.actions.get("opendiscord:create-transcript").run(source,{guild,channel,user,ticket})
//transcript failure
if (typeof transcriptRes.success == "boolean" && !transcriptRes.success && transcriptRes.compiler){
const {compiler} = transcriptRes
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:transcript-error").build(source,{guild,channel,user,ticket,compiler,reason:transcriptRes.errorReason ?? null})).message)
.catch((reason) => opendiscord.log("Unable to send transcript failure to ticket channel!","error",[{key:"id",value:channel.id}]))
//undo deletion
ticket.get("opendiscord:for-deletion").value = false
ticket.get("opendiscord:busy").value = false
opendiscord.log("Canceled ticket deletion because of transcript system malfunction!","warning",[
{key:"compiler",value:compiler.id.value},
{key:"reason",value:transcriptRes.errorReason ?? "/"},
])
return cancel()
}
}
//update stats
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-deleted",1,"increase")
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-deleted",user.id,1,"increase")
//delete ticket from manager
opendiscord.tickets.remove(ticket.id)
//delete permissions from manager
await (await import("../data/framework/permissionLoader.js")).removeTicketPermissions(ticket)
}),
new api.ODWorker("opendiscord:discord-logs",2,async (instance,params,source,cancel) => {
//logs before channel deletion => channel might still be used in log embeds
const {guild,channel,user,ticket,reason} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.deleting.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
}
//to dm
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.deleting.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
}),
new api.ODWorker("opendiscord:delete-channel",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
//delete channel & events
await opendiscord.events.get("onTicketChannelDeletion").emit([ticket,channel,user])
await channel.delete("Ticket Deleted").catch((reason) => opendiscord.log("Unable to delete ticket channel!","error",[{key:"id",value:channel.id}]))
await opendiscord.events.get("afterTicketChannelDeleted").emit([ticket,user])
//delete permissions from manager
await (await import("../data/framework/permissionLoader.js")).removeTicketPermissions(ticket)
await opendiscord.events.get("afterTicketDeleted").emit([ticket,user,reason])
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params
opendiscord.log(user.displayName+" deleted a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"reason",value:params.reason ?? "/"},
{key:"method",value:source},
{key:"transcript",value:(!params.withoutTranscript).toString()},
])
})
])
opendiscord.actions.get("opendiscord:delete-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel
params.ticket.get("opendiscord:busy").value = false
params.ticket.get("opendiscord:for-deletion").value = false
})
}
export const registerVerifyBars = async () => {
//DELETE TICKET TICKET MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:delete-ticket-ticket-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start deleting ticket
if (params.data == "reason"){
//delete with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{
//delete without reason
await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted
opendiscord.actions.get("opendiscord:delete-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true,withoutTranscript:(params.data == "no-transcript")})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("opendiscord:for-deletion").value = true
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
}
})
])
opendiscord.verifybars.get("opendiscord:delete-ticket-ticket-message").failure.add([
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
})
])
//DELETE TICKET CLOSE MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-close-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:delete-ticket-close-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start deleting ticket
if (params.data == "reason"){
//delete with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("close-message",{guild,channel,user,ticket}))
}else{
//delete without reason
await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted
opendiscord.actions.get("opendiscord:delete-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("opendiscord:for-deletion").value = true
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("close-message",{guild,channel,user,ticket,reason:null}))
}
})
])
opendiscord.verifybars.get("opendiscord:delete-ticket-close-message").failure.add([
new api.ODWorker("opendiscord:back-to-close-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const {verifybarMessage} = params
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:close-message").build("other",{guild,channel,user,ticket,reason}))
})
])
//DELETE TICKET REOPEN MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-reopen-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:delete-ticket-reopen-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start deleting ticket
if (params.data == "reason"){
//delete with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("reopen-message",{guild,channel,user,ticket}))
}else{
//delete without reason
await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted
opendiscord.actions.get("opendiscord:delete-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("opendiscord:for-deletion").value = true
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("reopen-message",{guild,channel,user,ticket,reason:null}))
}
})
])
opendiscord.verifybars.get("opendiscord:delete-ticket-reopen-message").failure.add([
new api.ODWorker("opendiscord:back-to-reopen-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const {verifybarMessage} = params
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("other",{guild,channel,user,ticket,reason}))
})
])
//DELETE TICKET AUTOCLOSE MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-autoclose-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:delete-ticket-autoclose-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start deleting ticket
if (params.data == "reason"){
//delete with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("autoclose-message",{guild,channel,user,ticket}))
}else{
//delete without reason
await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted
opendiscord.actions.get("opendiscord:delete-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("opendiscord:for-deletion").value = true
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("autoclose-message",{guild,channel,user,ticket,reason:null}))
}
})
])
opendiscord.verifybars.get("opendiscord:delete-ticket-autoclose-message").failure.add([
new api.ODWorker("opendiscord:back-to-autoclose-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const {verifybarMessage} = params
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:autoclose-message").build("other",{guild,channel,user,ticket}))
})
])
}
+162
View File
@@ -0,0 +1,162 @@
///////////////////////////////////////
//TRANSCRIPT ERROR SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerButtonResponders = async () => {
//TRANSCRIPT ERROR RETRY
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:transcript-error-retry",/^od:transcript-error-retry_([^_]+)/))
opendiscord.responders.buttons.get("opendiscord:transcript-error-retry").workers.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const originalSource = instance.interaction.customId.split("_")[1] as api.ODActionManagerIds_Default["opendiscord:delete-ticket"]["source"]
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start deleting ticket (without reason)
await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted
opendiscord.actions.get("opendiscord:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Retried)",sendMessage:false,withoutTranscript:false})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("opendiscord:for-deletion").value = true
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Retried)"}))
}),
new api.ODWorker("opendiscord:logs",-1,async (instance,params,source,cancel) => {
const {user,channel} = instance
if (channel.isDMBased()) return
opendiscord.log(user.displayName+" retried deleting a ticket with transcript!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"method",value:source}
])
})
])
//TRANSCRIPT ERROR CONTINUE
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:transcript-error-continue",/^od:transcript-error-continue_([^_]+)/))
opendiscord.responders.buttons.get("opendiscord:transcript-error-continue").workers.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.delete
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const originalSource = instance.interaction.customId.split("_")[1] as api.ODActionManagerIds_Default["opendiscord:delete-ticket"]["source"]
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start deleting ticket (without reason)
await instance.defer("update",false)
//don't await DELETE action => else it will update the message after the channel has been deleted
opendiscord.actions.get("opendiscord:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Continued)",sendMessage:false,withoutTranscript:true})
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
ticket.get("opendiscord:for-deletion").value = true
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Continued)"}))
}),
new api.ODWorker("opendiscord:logs",-1,async (instance,params,source,cancel) => {
const {user,channel} = instance
if (channel.isDMBased()) return
opendiscord.log(user.displayName+" continued deleting a ticket without transcript!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"method",value:source}
])
})
])
}
+32
View File
@@ -0,0 +1,32 @@
///////////////////////////////////////
//VERIFYBAR SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
export const registerButtonResponders = async () => {
//VERIFYBAR SUCCESS
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:verifybar-success",/^od:verifybar-success_([^_]+)/))
opendiscord.responders.buttons.get("opendiscord:verifybar-success").workers.add(
new api.ODWorker("opendiscord:handle-verifybar",0,async (instance,params,source,cancel) => {
const id = instance.interaction.customId.split("_")[1]
const customData = instance.interaction.customId.split("_")[2] as string|undefined
const verifybar = opendiscord.verifybars.get(id)
if (!verifybar) return
if (verifybar.success) await verifybar.success.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message})
})
)
//VERIFYBAR FAILURE
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:verifybar-failure",/^od:verifybar-failure_([^_]+)/))
opendiscord.responders.buttons.get("opendiscord:verifybar-failure").workers.add(
new api.ODWorker("opendiscord:handle-verifybar",0,async (instance,params,source,cancel) => {
const id = instance.interaction.customId.split("_")[1]
const customData = instance.interaction.customId.split("_")[2] as string|undefined
const verifybar = opendiscord.verifybars.get(id)
if (!verifybar) return
if (verifybar.failure) await verifybar.failure.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message})
})
)
}
+221
View File
@@ -0,0 +1,221 @@
///////////////////////////////////////
//TICKET MOVING SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:move-ticket"))
opendiscord.actions.get("opendiscord:move-ticket").workers.add([
new api.ODWorker("opendiscord:move-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to move ticket! Open Ticket doesn't support threads!")
await opendiscord.events.get("onTicketMove").emit([ticket,user,channel,reason])
ticket.option = data
//update stats
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-moved",1,"increase")
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-moved",user.id,1,"increase")
//get new channel properties
const channelPrefix = ticket.option.get("opendiscord:channel-prefix").value
const channelSuffix = ticket.get("opendiscord:channel-suffix").value
const channelCategory = ticket.option.get("opendiscord:channel-category").value
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
const rawClaimCategory = ticket.option.get("opendiscord:channel-categories-claimed").value.find((c) => c.user == user.id)
const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null
const closeCategory = ticket.option.get("opendiscord:channel-category-closed").value
const channelDescription = ticket.option.get("opendiscord:channel-description").value
const channelName = channelPrefix+channelSuffix
//handle category
let category: string|null = null
let categoryMode: "backup"|"normal"|"closed"|"claimed"|null = null
if (claimCategory){
//use claim category
category = claimCategory
categoryMode = "claimed"
}else if (closeCategory != "" && ticket.get("opendiscord:closed").value){
//use close category
category = closeCategory
categoryMode = "closed"
}else if (channelCategory != ""){
//category enabled
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
if (!normalCategory){
//default category was not found
opendiscord.log("Ticket Move Error: Unable to find category! #1","error",[
{key:"categoryid",value:channelCategory},
{key:"backup",value:"false"}
])
}else{
//default category was found
if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){
//use backup category
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
if (!backupCategory){
//default category was not found
opendiscord.log("Ticket Move Error: Unable to find category! #2","error",[
{key:"categoryid",value:channelBackupCategory},
{key:"backup",value:"true"}
])
}else{
category = backupCategory.id
categoryMode = "backup"
}
}else{
//use default category
category = normalCategory.id
categoryMode = "normal"
}
}
}
try {
//only move category when not the same.
if (channel.parentId != category) await utilities.timedAwait(channel.setParent(category,{lockPermissions:false}),2500,(err) => {
opendiscord.log("Failed to change channel category on ticket move","error")
})
ticket.get("opendiscord:category-mode").value = categoryMode
ticket.get("opendiscord:category").value = category
}catch(e){
opendiscord.log("Unable to move ticket to 'moved category'!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"categoryid",value:category ?? "/"}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
//handle permissions
const permissions: discord.OverwriteResolvable[] = [{
type:discord.OverwriteType.Role,
id:guild.roles.everyone.id,
allow:[],
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
}]
const globalAdmins = opendiscord.configs.get("opendiscord:general").data.globalAdmins
const optionAdmins = ticket.option.get("opendiscord:admins").value
const readonlyAdmins = ticket.option.get("opendiscord:admins-readonly").value
globalAdmins.forEach((admin) => {
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
deny:[]
})
})
optionAdmins.forEach((admin) => {
if (globalAdmins.includes(admin)) return
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
deny:[]
})
})
readonlyAdmins.forEach((admin) => {
if (globalAdmins.includes(admin)) return
if (optionAdmins.includes(admin)) return
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","ReadMessageHistory"],
deny:["SendMessages","AddReactions","AttachFiles","SendPolls"]
})
})
//transfer all old user-participants over to the new ticket (creator & participants)
ticket.get("opendiscord:participants").value.forEach((p) => {
if (p.type == "user") permissions.push({
type:discord.OverwriteType.Member,
id:p.id,
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory"],
deny:[]
})
})
try{
await channel.permissionOverwrites.set(permissions)
}catch{
opendiscord.log("Failed to reset channel permissions on ticket move!","error")
}
//handle participants
const participants: {type:"role"|"user",id:string}[] = []
permissions.forEach((permission,index) => {
if (index == 0) return //don't include @everyone
const type = (permission.type == discord.OverwriteType.Role) ? "role" : "user"
const id = permission.id as string
participants.push({type,id})
})
ticket.get("opendiscord:participants").value = participants
ticket.get("opendiscord:participants").refreshDatabase()
//rename channel (and give error when crashed)
const originalName = channel.name
try{
await utilities.timedAwait(channel.setName(channelName),2500,(err) => {
opendiscord.log("Failed to rename channel on ticket move","error")
})
}catch(err){
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-move",{guild,channel,user,originalName,newName:channelName})).message)
}
try{
if (channel.type == discord.ChannelType.GuildText) channel.setTopic(channelDescription)
}catch{}
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on ticket renaming!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
//reply with new message
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:move-message").build(source,{guild,channel,user,ticket,reason,data})).message)
ticket.get("opendiscord:busy").value = false
await opendiscord.events.get("afterTicketMoved").emit([ticket,user,channel,reason])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.moving.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
}
//to dm
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.moving.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params
opendiscord.log(user.displayName+" moved a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"reason",value:params.reason ?? "/"},
{key:"method",value:source}
])
})
])
opendiscord.actions.get("opendiscord:move-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel
params.ticket.get("opendiscord:busy").value = false
})
}
+275
View File
@@ -0,0 +1,275 @@
///////////////////////////////////////
//TICKET PINNING SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:pin-ticket"))
opendiscord.actions.get("opendiscord:pin-ticket").workers.add([
new api.ODWorker("opendiscord:pin-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to pin ticket! Open Ticket doesn't support threads!")
await opendiscord.events.get("onTicketPin").emit([ticket,user,channel,reason])
//update ticket
ticket.get("opendiscord:pinned").value = true
ticket.get("opendiscord:pinned-by").value = user.id
ticket.get("opendiscord:pinned-on").value = new Date().getTime()
ticket.get("opendiscord:busy").value = true
//update stats
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-pinned",1,"increase")
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-pinned",user.id,1,"increase")
//move to top of category
if (channel.parent){
await channel.setPosition(0,{reason:"Ticket Pinned!"})
}
//rename channel (and give error when crashed)
const originalName = channel.name
const newName = "📌"+channel.name
try{
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
opendiscord.log("Failed to rename channel on ticket pin","error")
})
}catch(err){
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-pin",{guild,channel,user,originalName,newName})).message)
}
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on ticket pinning!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"message",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
//reply with new message
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:pin-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("opendiscord:busy").value = false
await opendiscord.events.get("afterTicketPinned").emit([ticket,user,channel,reason])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.pinning.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
}
//to dm
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.pinning.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params
opendiscord.log(user.displayName+" pinned a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"reason",value:params.reason ?? "/"},
{key:"method",value:source}
])
})
])
}
export const registerVerifyBars = async () => {
//PIN TICKET TICKET MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:pin-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:pin-ticket-ticket-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.pin
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:pin-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when already pinned
if (ticket.get("opendiscord:pinned").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start pinning ticket
if (params.data == "reason"){
//pin with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:pin-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{
//pin without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:pin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
}
})
])
opendiscord.verifybars.get("opendiscord:pin-ticket-ticket-message").failure.add([
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
})
])
//PIN TICKET UNPIN MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:pin-ticket-unpin-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-unpin-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:pin-ticket-unpin-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.pin
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:pin-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when already pinned
if (ticket.get("opendiscord:pinned").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start pinning ticket
if (params.data == "reason"){
//pin with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:pin-ticket-reason").build("unpin-message",{guild,channel,user,ticket}))
}else{
//pin without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:pin-ticket").run("unpin-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:pin-message").build("unpin-message",{guild,channel,user,ticket,reason:null}))
}
})
])
opendiscord.verifybars.get("opendiscord:pin-ticket-unpin-message").failure.add([
new api.ODWorker("opendiscord:back-to-unpin-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const {verifybarMessage} = params
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unpin-message").build("other",{guild,channel,user,ticket,reason}))
})
])
opendiscord.actions.get("opendiscord:pin-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel
params.ticket.get("opendiscord:busy").value = false
})
}
+94
View File
@@ -0,0 +1,94 @@
///////////////////////////////////////
//REACTION ROLE SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:reaction-role"))
opendiscord.actions.get("opendiscord:reaction-role").workers.add([
new api.ODWorker("opendiscord:reaction-role",2,async (instance,params,source,cancel) => {
const {guild,user,option,overwriteMode} = params
const role = opendiscord.roles.get(option.id)
if (!role) throw new api.ODSystemError("ODAction(ot:reaction-role) => Unknown reaction role (ODRole)")
instance.role = role
const mode = (overwriteMode) ? overwriteMode : role.get("opendiscord:mode").value
await opendiscord.events.get("onRoleUpdate").emit([user,role])
//get guild member
const member = await opendiscord.client.fetchGuildMember(guild,user.id)
if (!member) throw new api.ODSystemError("ODAction(ot:reaction-role) => User isn't a member of the server!")
//get all roles
const roleIds = role.get("opendiscord:roles").value
const roles: discord.Role[] = []
for (const id of roleIds){
const r = await opendiscord.client.fetchGuildRole(guild,id)
if (r) roles.push(r)
else opendiscord.log("Unable to find role in server!","warning",[
{key:"roleid",value:id}
])
}
//update roles of user
const result: api.ODRoleUpdateResult[] = []
for (const r of roles){
try{
if (r.members.has(user.id) && (mode == "add&remove" || mode == "remove")){
//user has role (remove)
await member.roles.remove(r)
result.push({role:r,action:"removed"})
}else if (!r.members.has(user.id) && (mode == "add&remove" || mode == "add")){
//user doesn't have role (add)
await member.roles.add(r)
result.push({role:r,action:"added"})
}else{
//don't do anything
result.push({role:r,action:null})
}
}catch{
result.push({role:r,action:null})
}
}
//get roles to remove on add
if (result.find((r) => r.action == "added")){
//get all remove roles
const removeRoleIds = role.get("opendiscord:remove-roles-on-add").value
const removeRoles: discord.Role[] = []
for (const id of removeRoleIds){
const r = await opendiscord.client.fetchGuildRole(guild,id)
if (r) removeRoles.push(r)
else opendiscord.log("Unable to find role in server!","warning",[
{key:"roleid",value:id}
])
}
//remove roles from user
for (const r of removeRoles){
try{
if (r.members.has(user.id)){
//user has role (remove)
await member.roles.remove(r)
result.push({role:r,action:"removed"})
}
}catch{}
}
}
//update instance & finish event
instance.result = result
await opendiscord.events.get("afterRolesUpdated").emit([user,role])
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,user,option} = params
opendiscord.log(user.displayName+" updated his roles!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"method",value:source},
{key:"option",value:option.id.value}
])
})
])
}
+82
View File
@@ -0,0 +1,82 @@
///////////////////////////////////////
//TICKET REMOVE USER SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:remove-ticket-user"))
opendiscord.actions.get("opendiscord:remove-ticket-user").workers.add([
new api.ODWorker("opendiscord:remove-ticket-user",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to remove user from ticket! Open Ticket doesn't support threads!")
await opendiscord.events.get("onTicketUserRemove").emit([ticket,user,data,channel,reason])
//update ticket
const index = ticket.get("opendiscord:participants").value.findIndex((p) => p.type == "user" && p.id == data.id)
if (index < 0) return cancel()
ticket.get("opendiscord:participants").value.splice(index,1)
ticket.get("opendiscord:participants").refreshDatabase()
ticket.get("opendiscord:busy").value = true
//update channel permissions
try{
await channel.permissionOverwrites.delete(data)
}catch{
opendiscord.log("Failed to remove channel permission overwrites on remove-ticket-user","error")
}
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on ticket user removal!","error",[
{key:"channel",value:channel.id},
{key:"message",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
//reply with new message
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:remove-message").build(source,{guild,channel,user,ticket,reason,data})).message)
ticket.get("opendiscord:busy").value = false
await opendiscord.events.get("afterTicketUserRemoved").emit([ticket,user,data,channel,reason])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.removing.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
}
//to dm
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.removing.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket,data} = params
opendiscord.log(user.displayName+" removed "+data.displayName+" from a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"reason",value:params.reason ?? "/"},
{key:"method",value:source}
])
})
])
opendiscord.actions.get("opendiscord:remove-ticket-user").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel
params.ticket.get("opendiscord:busy").value = false
})
}
+79
View File
@@ -0,0 +1,79 @@
///////////////////////////////////////
//TICKET RENAMING SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:rename-ticket"))
opendiscord.actions.get("opendiscord:rename-ticket").workers.add([
new api.ODWorker("opendiscord:rename-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to rename ticket! Open Ticket doesn't support threads!")
await opendiscord.events.get("onTicketRename").emit([ticket,user,channel,reason])
//rename channel (and give error when crashed)
const originalName = channel.name
try{
await utilities.timedAwait(channel.setName(data),2500,(err) => {
opendiscord.log("Failed to rename channel on ticket rename","error")
})
}catch(err){
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-rename",{guild,channel,user,originalName,newName:data})).message)
}
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on ticket renaming!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
//reply with new message
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:rename-message").build(source,{guild,channel,user,ticket,reason,data})).message)
ticket.get("opendiscord:busy").value = false
await opendiscord.events.get("afterTicketRenamed").emit([ticket,user,channel,reason])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason,data} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.renaming.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
}
//to dm
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.renaming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params
opendiscord.log(user.displayName+" renamed a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"reason",value:params.reason ?? "/"},
{key:"method",value:source}
])
})
])
opendiscord.actions.get("opendiscord:rename-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel
params.ticket.get("opendiscord:busy").value = false
})
}
+449
View File
@@ -0,0 +1,449 @@
///////////////////////////////////////
//TICKET REOPENING SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:reopen-ticket"))
opendiscord.actions.get("opendiscord:reopen-ticket").workers.add([
new api.ODWorker("opendiscord:reopen-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to reopen ticket! Open Ticket doesn't support threads!")
await opendiscord.events.get("onTicketReopen").emit([ticket,user,channel,reason])
//update ticket
ticket.get("opendiscord:closed").value = false
ticket.get("opendiscord:open").value = true
ticket.get("opendiscord:autoclosed").value = false
ticket.get("opendiscord:closed-by").value = null
ticket.get("opendiscord:closed-on").value = null
ticket.get("opendiscord:busy").value = true
//update stats
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-reopened",1,"increase")
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-reopened",user.id,1,"increase")
//update category
const channelCategory = ticket.option.get("opendiscord:channel-category").value
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
if (channelCategory !== ""){
//category enabled
try {
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
if (!normalCategory){
//default category was not found
opendiscord.log("Ticket Reopening Error: Unable to find category! #1","error",[
{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{
//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"))
}
}else{
channel.setParent(null,{lockPermissions:false})
ticket.get("opendiscord:category-mode").value = null
ticket.get("opendiscord:category").value = null
}
//update permissions
const permissions: discord.OverwriteResolvable[] = [{
type:discord.OverwriteType.Role,
id:guild.roles.everyone.id,
allow:[],
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
}]
const globalAdmins = opendiscord.configs.get("opendiscord:general").data.globalAdmins
const optionAdmins = ticket.option.get("opendiscord:admins").value
const readonlyAdmins = ticket.option.get("opendiscord:admins-readonly").value
globalAdmins.forEach((admin) => {
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
deny:[]
})
})
optionAdmins.forEach((admin) => {
if (globalAdmins.includes(admin)) return
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
deny:[]
})
})
readonlyAdmins.forEach((admin) => {
if (globalAdmins.includes(admin)) return
if (optionAdmins.includes(admin)) return
permissions.push({
type:discord.OverwriteType.Role,
id:admin,
allow:["ViewChannel","ReadMessageHistory"],
deny:["SendMessages","AddReactions","AttachFiles","SendPolls"]
})
})
ticket.get("opendiscord:participants").value.forEach((participant) => {
//all participants that aren't roles/admins
if (participant.type == "user"){
permissions.push({
type:discord.OverwriteType.Member,
id:participant.id,
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory"],
deny:[]
})
}
})
channel.permissionOverwrites.set(permissions)
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on ticket reopening!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("opendiscord:busy").value = false
await opendiscord.events.get("afterTicketReopened").emit([ticket,user,channel,reason])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.reopening.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
}
//to dm
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.reopening.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params
opendiscord.log(user.displayName+" reopened a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"reason",value:params.reason ?? "/"},
{key:"method",value:source}
])
})
])
}
export const registerVerifyBars = async () => {
//REOPEN TICKET TICKET MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:reopen-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:reopen-ticket-ticket-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.reopen
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:reopen-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when not closed
if (!ticket.get("opendiscord:closed").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start reopening ticket
if (params.data == "reason"){
//reopen with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:reopen-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{
//reopen without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:reopen-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
}
})
])
opendiscord.verifybars.get("opendiscord:reopen-ticket-ticket-message").failure.add([
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
})
])
//REOPEN TICKET CLOSE MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:reopen-ticket-close-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:reopen-ticket-close-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.reopen
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:reopen-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when not closed
if (!ticket.get("opendiscord:closed").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start reopening ticket
if (params.data == "reason"){
//reopen with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:reopen-ticket-reason").build("close-message",{guild,channel,user,ticket}))
}else{
//reopen without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:reopen-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("close-message",{guild,channel,user,ticket,reason:null}))
}
})
])
opendiscord.verifybars.get("opendiscord:reopen-ticket-close-message").failure.add([
new api.ODWorker("opendiscord:back-to-close-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const {verifybarMessage} = params
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:close-message").build("other",{guild,channel,user,ticket,reason}))
})
])
//REOPEN TICKET AUTOCLOSE MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:reopen-ticket-autoclose-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:reopen-ticket-autoclose-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.reopen
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:reopen-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when not closed
if (!ticket.get("opendiscord:closed").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start reopening ticket
if (params.data == "reason"){
//reopen with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:reopen-ticket-reason").build("autoclose-message",{guild,channel,user,ticket}))
}else{
//reopen without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:reopen-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("autoclose-message",{guild,channel,user,ticket,reason:null}))
}
})
])
opendiscord.verifybars.get("opendiscord:reopen-ticket-autoclose-message").failure.add([
new api.ODWorker("opendiscord:back-to-autoclose-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const {verifybarMessage} = params
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:autoclose-message").build("other",{guild,channel,user,ticket}))
})
])
opendiscord.actions.get("opendiscord:reopen-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel
params.ticket.get("opendiscord:busy").value = false
})
}
+306
View File
@@ -0,0 +1,306 @@
///////////////////////////////////////
//TICKET UNCLAIMING SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:unclaim-ticket"))
opendiscord.actions.get("opendiscord:unclaim-ticket").workers.add([
new api.ODWorker("opendiscord:unclaim-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to unclaim ticket! Open Ticket doesn't support threads!")
await opendiscord.events.get("onTicketUnclaim").emit([ticket,user,channel,reason])
//update ticket
ticket.get("opendiscord:claimed").value = false
ticket.get("opendiscord:claimed-by").value = null
ticket.get("opendiscord:claimed-on").value = null
ticket.get("opendiscord:busy").value = true
//update category
const channelCategory = ticket.option.get("opendiscord:channel-category").value
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
if (channelCategory !== ""){
//category enabled
try {
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
if (!normalCategory){
//default category was not found
opendiscord.log("Ticket Unclaiming Error: Unable to find category! #1","error",[
{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{
//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{
channel.setParent(null,{lockPermissions:false})
ticket.get("opendiscord:category-mode").value = null
ticket.get("opendiscord:category").value = null
}
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on ticket unclaiming!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
//reply with new message
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:unclaim-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("opendiscord:busy").value = false
await opendiscord.events.get("afterTicketUnclaimed").emit([ticket,user,channel,reason])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.claiming.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
}
//to dm
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.claiming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params
opendiscord.log(user.displayName+" unclaimed a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"reason",value:params.reason ?? "/"},
{key:"method",value:source}
])
})
])
}
export const registerVerifyBars = async () => {
//UNCLAIM TICKET TICKET MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unclaim-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:unclaim-ticket-ticket-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.unclaim
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:unclaim-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when not claimed
if (!ticket.get("opendiscord:claimed").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start unclaiming ticket
if (params.data == "reason"){
//unclaim with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unclaim-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{
//unclaim without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:unclaim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
}
})
])
opendiscord.verifybars.get("opendiscord:unclaim-ticket-ticket-message").failure.add([
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
})
])
//UNCLAIM TICKET CLAIM MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unclaim-ticket-claim-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-claim-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:unclaim-ticket-claim-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.unclaim
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:unclaim-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when not claimed
if (!ticket.get("opendiscord:claimed").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start unclaiming ticket
if (params.data == "reason"){
//unclaim with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unclaim-ticket-reason").build("claim-message",{guild,channel,user,ticket}))
}else{
//unclaim without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:unclaim-ticket").run("claim-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unclaim-message").build("claim-message",{guild,channel,user,ticket,reason:null}))
}
})
])
opendiscord.verifybars.get("opendiscord:unclaim-ticket-claim-message").failure.add([
new api.ODWorker("opendiscord:back-to-claim-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const {verifybarMessage} = params
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build("other",{guild,channel,user,ticket,reason}))
})
])
opendiscord.actions.get("opendiscord:unclaim-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel
params.ticket.get("opendiscord:busy").value = false
})
}
+268
View File
@@ -0,0 +1,268 @@
///////////////////////////////////////
//TICKET UNPINNING SYSTEM
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerActions = async () => {
opendiscord.actions.add(new api.ODAction("opendiscord:unpin-ticket"))
opendiscord.actions.get("opendiscord:unpin-ticket").workers.add([
new api.ODWorker("opendiscord:unpin-ticket",2,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
if (channel.isThread()) throw new api.ODSystemError("Unable to unpin ticket! Open Ticket doesn't support threads!")
await opendiscord.events.get("onTicketUnpin").emit([ticket,user,channel,reason])
//update ticket
ticket.get("opendiscord:pinned").value = false
ticket.get("opendiscord:pinned-by").value = null
ticket.get("opendiscord:pinned-on").value = null
ticket.get("opendiscord:busy").value = true
//rename channel (and give error when crashed)
const originalName = channel.name
if (originalName.startsWith("📌")){
const newName = originalName.replace("📌","");
try{
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
opendiscord.log("Failed to rename channel on ticket unpin","error")
})
}catch(err){
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-unpin",{guild,channel,user,originalName,newName})).message)
}
}
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on ticket unpinning!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
//reply with new message
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:unpin-message").build(source,{guild,channel,user,ticket,reason})).message)
ticket.get("opendiscord:busy").value = false
await opendiscord.events.get("afterTicketUnpinned").emit([ticket,user,channel,reason])
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user,ticket,reason} = params
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.pinning.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
}
//to dm
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
if (creator && generalConfig.data.system.messages.pinning.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
}),
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
const {guild,channel,user,ticket} = params
opendiscord.log(user.displayName+" unpinned a ticket!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"reason",value:params.reason ?? "/"},
{key:"method",value:source}
])
})
])
}
export const registerVerifyBars = async () => {
//UNPIN TICKET TICKET MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unpin-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:unpin-ticket-ticket-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.unpin
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:unpin-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when not pinned
if (!ticket.get("opendiscord:pinned").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start unpining ticket
if (params.data == "reason"){
//unpin with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unpin-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
}else{
//unpin without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:unpin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
}
})
])
opendiscord.verifybars.get("opendiscord:unpin-ticket-ticket-message").failure.add([
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
})
])
//UNPIN TICKET PIN MESSAGE
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unpin-ticket-pin-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-pin-message"),!generalConfig.data.system.disableVerifyBars))
opendiscord.verifybars.get("opendiscord:unpin-ticket-pin-message").success.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.unpin
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:unpin-ticket",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when not pinned
if (!ticket.get("opendiscord:pinned").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
//start unpinning ticket
if (params.data == "reason"){
//unpin with reason
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unpin-ticket-reason").build("pin-message",{guild,channel,user,ticket}))
}else{
//unpin without reason
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:unpin-ticket").run("pin-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unpin-message").build("pin-message",{guild,channel,user,ticket,reason:null}))
}
})
])
opendiscord.verifybars.get("opendiscord:unpin-ticket-pin-message").failure.add([
new api.ODWorker("opendiscord:back-to-pin-message",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
const {verifybarMessage} = params
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:pin-message").build("other",{guild,channel,user,ticket,reason}))
})
])
opendiscord.actions.get("opendiscord:unpin-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
//set busy to false in case of crash or cancel
params.ticket.get("opendiscord:busy").value = false
})
}
+351
View File
@@ -0,0 +1,351 @@
///////////////////////////////////////
//BUTTON BUILDERS
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const buttons = opendiscord.builders.buttons
const lang = opendiscord.languages
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerAllButtons = async () => {
verifybarButtons()
errorButtons()
helpMenuButtons()
panelButtons()
ticketButtons()
transcriptButtons()
clearButtons()
}
const verifybarButtons = () => {
//VERIFYBAR SUCCESS
buttons.add(new api.ODButton("opendiscord:verifybar-success"))
buttons.get("opendiscord:verifybar-success").workers.add(
new api.ODWorker("opendiscord:verifybar-success",0,async (instance,params) => {
const {verifybar,customData,customColor,customLabel,customEmoji} = params
if (customData && customData.length > 40) throw new api.ODSystemError("ODButton:opendiscord:verifybar-success => customData exceeds 40 characters limit!")
const newData = (customData) ? "_"+customData : ""
const newColor = customColor ?? "gray"
const newLabel = customLabel ?? ""
const newEmoji = customEmoji ?? "✅"
instance.setCustomId("od:verifybar-success_"+verifybar.id.value+newData)
instance.setMode("button")
instance.setColor(newColor)
if (newLabel) instance.setLabel(newLabel)
if (newEmoji) instance.setEmoji(newEmoji)
})
)
//VERIFYBAR FAILURE
buttons.add(new api.ODButton("opendiscord:verifybar-failure"))
buttons.get("opendiscord:verifybar-failure").workers.add(
new api.ODWorker("opendiscord:verifybar-failure",0,async (instance,params) => {
const {verifybar,customData,customColor,customLabel,customEmoji} = params
if (customData && customData.length > 40) throw new api.ODSystemError("ODButton:opendiscord:verifybar-success => customData exceeds 40 characters limit!")
const newData = (customData) ? "_"+customData : ""
const newColor = customColor ?? "gray"
const newLabel = customLabel ?? ""
const newEmoji = customEmoji ?? "❌"
instance.setCustomId("od:verifybar-failure_"+verifybar.id.value+newData)
instance.setMode("button")
instance.setColor(newColor)
if (newLabel) instance.setLabel(newLabel)
if (newEmoji) instance.setEmoji(newEmoji)
})
)
}
const errorButtons = () => {
//ERROR TICKET DEPRECATED TRANSCRIPT
buttons.add(new api.ODButton("opendiscord:error-ticket-deprecated-transcript"))
buttons.get("opendiscord:error-ticket-deprecated-transcript").workers.add(
new api.ODWorker("opendiscord:error-ticket-deprecated-transcript",0,async (instance,params) => {
instance.setCustomId("od:error-ticket-deprecated-transcript")
instance.setMode("button")
instance.setColor("gray")
instance.setLabel(lang.getTranslation("transcripts.errors.backup"))
instance.setEmoji("📄")
})
)
}
const helpMenuButtons = () => {
//HELP MENU PAGE
buttons.add(new api.ODButton("opendiscord:help-menu-page"))
buttons.get("opendiscord:help-menu-page").workers.add(
new api.ODWorker("opendiscord:help-menu-page",0,async (instance,params) => {
const {mode,page} = params
const totalPages = (await opendiscord.helpmenu.render(mode)).length
const pageText = (page+1).toString()+"/"+totalPages.toString()
instance.setCustomId("od:help-menu-page_"+page.toString())
instance.setMode("button")
instance.setColor("gray")
instance.setLabel(lang.getTranslationWithParams("actions.buttons.helpPage",[pageText]))
instance.setDisabled(true)
})
)
//HELP MENU SWITCH
buttons.add(new api.ODButton("opendiscord:help-menu-switch"))
buttons.get("opendiscord:help-menu-switch").workers.add(
new api.ODWorker("opendiscord:help-menu-switch",0,async (instance,params) => {
const {mode} = params
instance.setCustomId("od:help-menu-switch_"+mode)
instance.setMode("button")
instance.setColor("gray")
if (mode == "slash") instance.setLabel(lang.getTranslation("actions.buttons.helpSwitchText"))
else instance.setLabel(lang.getTranslation("actions.buttons.helpSwitchSlash"))
})
)
//HELP MENU PREVIOUS
buttons.add(new api.ODButton("opendiscord:help-menu-previous"))
buttons.get("opendiscord:help-menu-previous").workers.add(
new api.ODWorker("opendiscord:help-menu-previous",0,async (instance,params) => {
const {page} = params
instance.setCustomId("od:help-menu-previous")
instance.setMode("button")
instance.setColor("gray")
instance.setEmoji("◀️")
if (page == 0) instance.setDisabled(true)
})
)
//HELP MENU NEXT
buttons.add(new api.ODButton("opendiscord:help-menu-next"))
buttons.get("opendiscord:help-menu-next").workers.add(
new api.ODWorker("opendiscord:help-menu-next",0,async (instance,params) => {
const {mode,page} = params
const totalPages = (await opendiscord.helpmenu.render(mode)).length
instance.setCustomId("od:help-menu-next")
instance.setMode("button")
instance.setColor("gray")
instance.setEmoji("▶️")
if (page == totalPages-1) instance.setDisabled(true)
})
)
}
const panelButtons = () => {
//TICKET OPTION
buttons.add(new api.ODButton("opendiscord:ticket-option"))
buttons.get("opendiscord:ticket-option").workers.add(
new api.ODWorker("opendiscord:ticket-option",0,async (instance,params) => {
const {panel,option} = params
instance.setCustomId("od:ticket-option_"+panel.id.value+"_"+option.id.value)
instance.setMode("button")
instance.setColor(option.get("opendiscord:button-color").value)
if (option.get("opendiscord:button-emoji").value) instance.setEmoji(option.get("opendiscord:button-emoji").value)
if (option.get("opendiscord:button-label").value) instance.setLabel(option.get("opendiscord:button-label").value)
if (!option.get("opendiscord:button-emoji").value && !option.get("opendiscord:button-label").value) instance.setLabel("<"+option.id.value+">")
})
)
//WEBSITE OPTION
buttons.add(new api.ODButton("opendiscord:website-option"))
buttons.get("opendiscord:website-option").workers.add(
new api.ODWorker("opendiscord:website-option",0,async (instance,params) => {
const {panel,option} = params
instance.setMode("url")
instance.setUrl(option.get("opendiscord:url").value)
if (option.get("opendiscord:button-emoji").value) instance.setEmoji(option.get("opendiscord:button-emoji").value)
if (option.get("opendiscord:button-label").value) instance.setLabel(option.get("opendiscord:button-label").value)
if (!option.get("opendiscord:button-emoji").value && !option.get("opendiscord:button-label").value) instance.setLabel("<"+option.id.value+">")
})
)
//ROLE OPTION
buttons.add(new api.ODButton("opendiscord:role-option"))
buttons.get("opendiscord:role-option").workers.add(
new api.ODWorker("opendiscord:role-option",0,async (instance,params) => {
const {panel,option} = params
instance.setCustomId("od:role-option_"+panel.id.value+"_"+option.id.value)
instance.setMode("button")
instance.setColor(option.get("opendiscord:button-color").value)
if (option.get("opendiscord:button-emoji").value) instance.setEmoji(option.get("opendiscord:button-emoji").value)
if (option.get("opendiscord:button-label").value) instance.setLabel(option.get("opendiscord:button-label").value)
if (!option.get("opendiscord:button-emoji").value && !option.get("opendiscord:button-label").value) instance.setLabel("<"+option.id.value+">")
})
)
}
const ticketButtons = () => {
//VISIT TICKET
buttons.add(new api.ODButton("opendiscord:visit-ticket"))
buttons.get("opendiscord:visit-ticket").workers.add(
new api.ODWorker("opendiscord:visit-ticket",0,async (instance,params) => {
const {guild,channel,ticket} = params
instance.setMode("url")
instance.setUrl(channel.url)
instance.setEmoji("🎫")
instance.setLabel(lang.getTranslation("actions.buttons.create"))
})
)
//CLOSE TICKET
buttons.add(new api.ODButton("opendiscord:close-ticket"))
buttons.get("opendiscord:close-ticket").workers.add(
new api.ODWorker("opendiscord:close-ticket",0,async (instance,params,source) => {
const {guild,channel,ticket} = params
instance.setMode("button")
instance.setCustomId("od:close-ticket_"+source)
instance.setColor("gray")
instance.setEmoji("🔒")
instance.setLabel(lang.getTranslation("actions.buttons.close"))
})
)
//DELETE TICKET
buttons.add(new api.ODButton("opendiscord:delete-ticket"))
buttons.get("opendiscord:delete-ticket").workers.add(
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source) => {
const {guild,channel,ticket} = params
instance.setMode("button")
instance.setCustomId("od:delete-ticket_"+source)
instance.setColor("red")
instance.setEmoji("✖")
instance.setLabel(lang.getTranslation("actions.buttons.delete"))
})
)
//REOPEN TICKET
buttons.add(new api.ODButton("opendiscord:reopen-ticket"))
buttons.get("opendiscord:reopen-ticket").workers.add(
new api.ODWorker("opendiscord:reopen-ticket",0,async (instance,params,source) => {
const {guild,channel,ticket} = params
instance.setMode("button")
instance.setCustomId("od:reopen-ticket_"+source)
instance.setColor("green")
instance.setEmoji("🔓")
instance.setLabel(lang.getTranslation("actions.buttons.reopen"))
})
)
//CLAIM TICKET
buttons.add(new api.ODButton("opendiscord:claim-ticket"))
buttons.get("opendiscord:claim-ticket").workers.add(
new api.ODWorker("opendiscord:claim-ticket",0,async (instance,params,source) => {
const {guild,channel,ticket} = params
instance.setMode("button")
instance.setCustomId("od:claim-ticket_"+source)
instance.setColor("green")
instance.setEmoji("👋")
instance.setLabel(lang.getTranslation("actions.buttons.claim"))
})
)
//UNCLAIM TICKET
buttons.add(new api.ODButton("opendiscord:unclaim-ticket"))
buttons.get("opendiscord:unclaim-ticket").workers.add(
new api.ODWorker("opendiscord:unclaim-ticket",0,async (instance,params,source) => {
const {guild,channel,ticket} = params
instance.setMode("button")
instance.setCustomId("od:unclaim-ticket_"+source)
instance.setColor("green")
instance.setEmoji("↩️")
instance.setLabel(lang.getTranslation("actions.buttons.unclaim"))
})
)
//PIN TICKET
buttons.add(new api.ODButton("opendiscord:pin-ticket"))
buttons.get("opendiscord:pin-ticket").workers.add(
new api.ODWorker("opendiscord:pin-ticket",0,async (instance,params,source) => {
const {guild,channel,ticket} = params
instance.setMode("button")
instance.setCustomId("od:pin-ticket_"+source)
instance.setColor("gray")
instance.setEmoji("📌")
instance.setLabel(lang.getTranslation("actions.buttons.pin"))
})
)
//UNPIN TICKET
buttons.add(new api.ODButton("opendiscord:unpin-ticket"))
buttons.get("opendiscord:unpin-ticket").workers.add(
new api.ODWorker("opendiscord:unpin-ticket",0,async (instance,params,source) => {
const {guild,channel,ticket} = params
instance.setMode("button")
instance.setCustomId("od:unpin-ticket_"+source)
instance.setColor("gray")
instance.setEmoji("📌")
instance.setLabel(lang.getTranslation("actions.buttons.unpin"))
})
)
}
const transcriptButtons = () => {
//TRANSCRIPT HTML VISIT
buttons.add(new api.ODButton("opendiscord:transcript-html-visit"))
buttons.get("opendiscord:transcript-html-visit").workers.add(
new api.ODWorker("opendiscord:transcript-html-visit",0,async (instance,params,source) => {
const {result} = params
instance.setMode("url")
if (result.data) instance.setUrl(result.data.url)
else throw new api.ODSystemError("ODButton:opendiscord:transcript-html-visit => Missing Transcript Result Data!")
instance.setEmoji("📄")
instance.setLabel(lang.getTranslation("transcripts.success.visit"))
})
)
//TRANSCRIPT ERROR RETRY
buttons.add(new api.ODButton("opendiscord:transcript-error-retry"))
buttons.get("opendiscord:transcript-error-retry").workers.add(
new api.ODWorker("opendiscord:transcript-error-retry",0,async (instance,params,source) => {
instance.setMode("button")
instance.setCustomId("od:transcript-error-retry_"+source)
instance.setColor("gray")
instance.setEmoji("🔄")
instance.setLabel(lang.getTranslation("transcripts.errors.retry"))
})
)
//TRANSCRIPT ERROR CONTINUE
buttons.add(new api.ODButton("opendiscord:transcript-error-continue"))
buttons.get("opendiscord:transcript-error-continue").workers.add(
new api.ODWorker("opendiscord:transcript-error-continue",0,async (instance,params,source) => {
instance.setMode("button")
instance.setCustomId("od:transcript-error-continue_"+source)
instance.setColor("red")
instance.setEmoji("✖")
instance.setLabel(lang.getTranslation("transcripts.errors.continue"))
})
)
}
const clearButtons = () => {
//CLEAR CONTINUE
buttons.add(new api.ODButton("opendiscord:clear-continue"))
buttons.get("opendiscord:clear-continue").workers.add(
new api.ODWorker("opendiscord:clear-continue",0,async (instance,params,source) => {
instance.setMode("button")
instance.setCustomId("od:clear-continue_"+source+"_"+params.filter)
instance.setColor("red")
instance.setEmoji("✖")
instance.setLabel(lang.getTranslation("actions.buttons.clear"))
})
)
}
+42
View File
@@ -0,0 +1,42 @@
///////////////////////////////////////
//DROPDOWN BUILDERS
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const dropdowns = opendiscord.builders.dropdowns
export const registerAllDropdowns = async () => {
panelDropdowns()
}
const panelDropdowns = () => {
//TICKET OPTION
dropdowns.add(new api.ODDropdown("opendiscord:panel-dropdown-tickets"))
dropdowns.get("opendiscord:panel-dropdown-tickets").workers.add(
new api.ODWorker("opendiscord:panel-dropdown-tickets",0,async (instance,params) => {
const {panel,options} = params
const parsedOptions: api.ODDropdownData["options"] = options.map((option) => {
const label = option.get("opendiscord:button-label").value.substring(0,100)
const desc = option.get("opendiscord:description").value.substring(0,100)
const emoji = option.get("opendiscord:button-emoji").value
return {
label:(label.length > 0) ? label : "<no-label-provided>",
value:"od:ticket-option_"+panel.id.value+"_"+option.id.value,
emoji:(emoji.length > 0) ? emoji : undefined,
description:(desc.length > 0) ? desc : undefined,
default:false
}
})
instance.setCustomId("od:panel-dropdown_"+panel.id.value)
instance.setType("string")
instance.setMaxValues(1)
instance.setMinValues(0)
instance.setPlaceholder(panel.get("opendiscord:dropdown-placeholder").value)
instance.setOptions(parsedOptions)
})
)
}
File diff suppressed because it is too large Load Diff
+45
View File
@@ -0,0 +1,45 @@
///////////////////////////////////////
//FILE BUILDERS
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const files = opendiscord.builders.files
const lang = opendiscord.languages
const transcriptConfig = opendiscord.configs.get("opendiscord:transcripts")
export const registerAllFiles = async () => {
transcriptFiles()
}
const transcriptFiles = () => {
//TEXT TRANSCRIPT
files.add(new api.ODFile("opendiscord:text-transcript"))
files.get("opendiscord:text-transcript").workers.add(
new api.ODWorker("opendiscord:text-transcript",0,async (instance,params,source) => {
const {guild,channel,user,ticket,compiler,result} = params
const fileMode = transcriptConfig.data.textTranscriptStyle.fileMode
const customName = transcriptConfig.data.textTranscriptStyle.customFileName
const creatorId = ticket.get("opendiscord:opened-by").value ?? "unknown-creator-id"
const creator = (await opendiscord.tickets.getTicketUser(ticket,"creator"))
if (fileMode == "custom") instance.setName(customName.split(".")[0]+".txt")
else if (fileMode == "user-id") instance.setName(creatorId+".txt")
else if (fileMode == "user-name") instance.setName((creator ? creator.username : "unknown-creator-name")+".txt")
else if (fileMode == "channel-id") instance.setName(channel.id+".txt")
else if (fileMode == "channel-name") instance.setName(channel.name+".txt")
else instance.setName("transcript.txt")
instance.setDescription(lang.getTranslation("transcripts.success.textFileDescription"))
if (compiler.id.value != "opendiscord:text-compiler" || !result.data || typeof result.data.contents != "string"){
instance.setContents("<invalid-transcript-compiler>")
return
}
instance.setContents(result.data.contents)
})
)
}
File diff suppressed because it is too large Load Diff
+173
View File
@@ -0,0 +1,173 @@
///////////////////////////////////////
//MODAL BUILDERS
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const modals = opendiscord.builders.modals
const lang = opendiscord.languages
export const registerAllModals = async () => {
ticketModals()
}
const ticketModals = () => {
//TICKET QUESTIONS
modals.add(new api.ODModal("opendiscord:ticket-questions"))
modals.get("opendiscord:ticket-questions").workers.add(
new api.ODWorker("opendiscord:ticket-questions",0,async (instance,params,source) => {
const {option} = params
instance.setCustomId("od:ticket-questions_"+option.id.value+"_"+source)
instance.setTitle(option.exists("opendiscord:name") ? option.get("opendiscord:name").value : option.id.value)
const questionIds = option.get("opendiscord:questions").value
questionIds.forEach((id) => {
const question = opendiscord.questions.get(id)
if (!question) return
if (question instanceof api.ODShortQuestion) instance.addQuestion({
customId:question.id.value,
label:question.get("opendiscord:name").value,
style:"short",
required:question.get("opendiscord:required").value,
placeholder:(question.get("opendiscord:placeholder").value) ? question.get("opendiscord:placeholder").value : undefined,
minLength:(question.get("opendiscord:length-enabled").value) ? question.get("opendiscord:length-min").value : undefined,
maxLength:(question.get("opendiscord:length-enabled").value) ? question.get("opendiscord:length-max").value : undefined
})
else if (question instanceof api.ODParagraphQuestion) instance.addQuestion({
customId:question.id.value,
label:question.get("opendiscord:name").value,
style:"paragraph",
required:question.get("opendiscord:required").value,
placeholder:(question.get("opendiscord:placeholder").value) ? question.get("opendiscord:placeholder").value : undefined,
minLength:(question.get("opendiscord:length-enabled").value) ? question.get("opendiscord:length-min").value : undefined,
maxLength:(question.get("opendiscord:length-enabled").value) ? question.get("opendiscord:length-max").value : undefined
})
})
})
)
//CLOSE TICKET REASON
modals.add(new api.ODModal("opendiscord:close-ticket-reason"))
modals.get("opendiscord:close-ticket-reason").workers.add(
new api.ODWorker("opendiscord:close-ticket-reason",0,async (instance,params,source) => {
const {ticket} = params
instance.setCustomId("od:close-ticket-reason_"+ticket.id.value+"_"+source)
instance.setTitle(lang.getTranslation("actions.buttons.close"))
instance.addQuestion({
customId:"reason",
label:lang.getTranslation("params.uppercase.reason"),
style:"paragraph",
required:true,
placeholder:lang.getTranslation("actions.modal.closePlaceholder")
})
})
)
//REOPEN TICKET REASON
modals.add(new api.ODModal("opendiscord:reopen-ticket-reason"))
modals.get("opendiscord:reopen-ticket-reason").workers.add(
new api.ODWorker("opendiscord:reopen-ticket-reason",0,async (instance,params,source) => {
const {ticket} = params
instance.setCustomId("od:reopen-ticket-reason_"+ticket.id.value+"_"+source)
instance.setTitle(lang.getTranslation("actions.buttons.reopen"))
instance.addQuestion({
customId:"reason",
label:lang.getTranslation("params.uppercase.reason"),
style:"paragraph",
required:true,
placeholder:lang.getTranslation("actions.modal.reopenPlaceholder")
})
})
)
//DELETE TICKET REASON
modals.add(new api.ODModal("opendiscord:delete-ticket-reason"))
modals.get("opendiscord:delete-ticket-reason").workers.add(
new api.ODWorker("opendiscord:delete-ticket-reason",0,async (instance,params,source) => {
const {ticket} = params
instance.setCustomId("od:delete-ticket-reason_"+ticket.id.value+"_"+source)
instance.setTitle(lang.getTranslation("actions.buttons.delete"))
instance.addQuestion({
customId:"reason",
label:lang.getTranslation("params.uppercase.reason"),
style:"paragraph",
required:true,
placeholder:lang.getTranslation("actions.modal.deletePlaceholder")
})
})
)
//CLAIM TICKET REASON
modals.add(new api.ODModal("opendiscord:claim-ticket-reason"))
modals.get("opendiscord:claim-ticket-reason").workers.add(
new api.ODWorker("opendiscord:claim-ticket-reason",0,async (instance,params,source) => {
const {ticket} = params
instance.setCustomId("od:claim-ticket-reason_"+ticket.id.value+"_"+source)
instance.setTitle(lang.getTranslation("actions.buttons.claim"))
instance.addQuestion({
customId:"reason",
label:lang.getTranslation("params.uppercase.reason"),
style:"paragraph",
required:true,
placeholder:lang.getTranslation("actions.modal.claimPlaceholder")
})
})
)
//UNCLAIM TICKET REASON
modals.add(new api.ODModal("opendiscord:unclaim-ticket-reason"))
modals.get("opendiscord:unclaim-ticket-reason").workers.add(
new api.ODWorker("opendiscord:unclaim-ticket-reason",0,async (instance,params,source) => {
const {ticket} = params
instance.setCustomId("od:unclaim-ticket-reason_"+ticket.id.value+"_"+source)
instance.setTitle(lang.getTranslation("actions.buttons.unclaim"))
instance.addQuestion({
customId:"reason",
label:lang.getTranslation("params.uppercase.reason"),
style:"paragraph",
required:true,
placeholder:lang.getTranslation("actions.modal.unclaimPlaceholder")
})
})
)
//PIN TICKET REASON
modals.add(new api.ODModal("opendiscord:pin-ticket-reason"))
modals.get("opendiscord:pin-ticket-reason").workers.add(
new api.ODWorker("opendiscord:pin-ticket-reason",0,async (instance,params,source) => {
const {ticket} = params
instance.setCustomId("od:pin-ticket-reason_"+ticket.id.value+"_"+source)
instance.setTitle(lang.getTranslation("actions.buttons.pin"))
instance.addQuestion({
customId:"reason",
label:lang.getTranslation("params.uppercase.reason"),
style:"paragraph",
required:true,
placeholder:lang.getTranslation("actions.modal.pinPlaceholder")
})
})
)
//UNPIN TICKET REASON
modals.add(new api.ODModal("opendiscord:unpin-ticket-reason"))
modals.get("opendiscord:unpin-ticket-reason").workers.add(
new api.ODWorker("opendiscord:unpin-ticket-reason",0,async (instance,params,source) => {
const {ticket} = params
instance.setCustomId("od:unpin-ticket-reason_"+ticket.id.value+"_"+source)
instance.setTitle(lang.getTranslation("actions.buttons.unpin"))
instance.addQuestion({
customId:"reason",
label:lang.getTranslation("params.uppercase.reason"),
style:"paragraph",
required:true,
placeholder:lang.getTranslation("actions.modal.unpinPlaceholder")
})
})
)
}
+87
View File
@@ -0,0 +1,87 @@
///////////////////////////////////////
//ADD COMMAND
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerCommandResponders = async () => {
//ADD COMMAND RESPONDER
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:add",generalConfig.data.prefix,"add"))
opendiscord.responders.commands.get("opendiscord:add").workers.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.add
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:add",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
const data = instance.options.getUser("user",true)
const reason = instance.options.getString("reason",false)
//return when user already added to ticket
const participants = await opendiscord.tickets.getAllTicketParticipants(ticket)
if (!participants || participants.find((p) => p.user.id == data.id)){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.add"),layout:"simple"}))
return cancel()
}
//start adding user to ticket
await instance.defer(false)
await opendiscord.actions.get("opendiscord:add-ticket-user").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data})
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:add-message").build(source,{guild,channel,user,ticket,reason,data}))
}),
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
opendiscord.log(instance.user.displayName+" used the 'add' command!","info",[
{key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true},
{key:"method",value:source}
])
})
])
}
+114
View File
@@ -0,0 +1,114 @@
///////////////////////////////////////
//AUTOCLOSE COMMAND
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerCommandResponders = async () => {
//AUTOCLOSE COMMAND RESPONDER
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:autoclose",generalConfig.data.prefix,/^autoclose/))
opendiscord.responders.commands.get("opendiscord:autoclose").workers.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.autoclose
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:autoclose",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return
}
//return when already closed
if (ticket.get("opendiscord:closed").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
const scope = instance.options.getSubCommand()
if (!scope || (scope != "disable" && scope != "enable")) return
if (scope == "disable"){
const reason = instance.options.getString("reason",false)
ticket.get("opendiscord:autoclose-enabled").value = false
ticket.get("opendiscord:autoclose-hours").value = 0
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:autoclose-disable").build(source,{guild,channel,user,ticket,reason}))
}else if (scope == "enable"){
const time = instance.options.getNumber("time",true)
const reason = instance.options.getString("reason",false)
ticket.get("opendiscord:autoclose-enabled").value = true
ticket.get("opendiscord:autoclose-hours").value = time
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:autoclose-enable").build(source,{guild,channel,user,ticket,reason,time}))
}
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on autoclose "+scope+"!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
}),
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
const scope = instance.options.getSubCommand()
const reason = instance.options.getString("reason",false)
opendiscord.log(instance.user.displayName+" used the 'autoclose "+scope+"' command!","info",[
{key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true},
{key:"method",value:source},
{key:"reason",value:reason ?? "/"},
])
})
])
}
+109
View File
@@ -0,0 +1,109 @@
///////////////////////////////////////
//AUTODELETE COMMAND
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerCommandResponders = async () => {
//AUTODELETE COMMAND RESPONDER
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:autodelete",generalConfig.data.prefix,/^autodelete/))
opendiscord.responders.commands.get("opendiscord:autodelete").workers.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.autodelete
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:autodelete",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
const scope = instance.options.getSubCommand()
if (!scope || (scope != "disable" && scope != "enable")) return
if (scope == "disable"){
const reason = instance.options.getString("reason",false)
ticket.get("opendiscord:autodelete-enabled").value = false
ticket.get("opendiscord:autodelete-days").value = 0
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:autodelete-disable").build(source,{guild,channel,user,ticket,reason}))
}else if (scope == "enable"){
const time = instance.options.getNumber("time",true)
const reason = instance.options.getString("reason",false)
ticket.get("opendiscord:autodelete-enabled").value = true
ticket.get("opendiscord:autodelete-days").value = time
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:autodelete-enable").build(source,{guild,channel,user,ticket,reason,time}))
}
//update ticket message
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
if (ticketMessage){
try{
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
}catch(e){
opendiscord.log("Unable to edit ticket message on autodelete "+scope+"!","error",[
{key:"channel",value:"#"+channel.name},
{key:"channelid",value:channel.id,hidden:true},
{key:"messageid",value:ticketMessage.id},
{key:"option",value:ticket.option.id.value}
])
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
}
}
}),
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
const scope = instance.options.getSubCommand()
const reason = instance.options.getString("reason",false)
opendiscord.log(instance.user.displayName+" used the 'autodelete "+scope+"' command!","info",[
{key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true},
{key:"method",value:source},
{key:"reason",value:reason ?? "/"},
])
})
])
}
+127
View File
@@ -0,0 +1,127 @@
///////////////////////////////////////
//BLACKLIST COMMAND
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerCommandResponders = async () => {
//BLACKLIST COMMAND RESPONDER
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:blacklist",generalConfig.data.prefix,/^blacklist/))
opendiscord.responders.commands.get("opendiscord:blacklist").workers.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.blacklist
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:blacklist",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
return cancel()
}
const scope = instance.options.getSubCommand()
if (!scope || (scope != "add" && scope != "get" && scope != "remove" && scope != "view")) return
if (scope == "view"){
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:blacklist-view").build(source,{guild,channel,user}))
}else if (scope == "get"){
const data = instance.options.getUser("user",true)
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:blacklist-get").build(source,{guild,channel,user,data}))
}else if (scope == "add"){
const data = instance.options.getUser("user",true)
const reason = instance.options.getString("reason",false)
opendiscord.blacklist.add(new api.ODBlacklist(data.id,reason),true)
opendiscord.log(instance.user.displayName+" added "+data.displayName+" to blacklist!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channelid",value:channel.id,hidden:true},
{key:"method",value:source},
{key:"reason",value:reason ?? "/"}
])
//manage stats
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:users-blacklisted",1,"increase")
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:users-blacklisted",user.id,1,"increase")
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:blacklist-add").build(source,{guild,channel,user,data,reason}))
}else if (scope == "remove"){
const data = instance.options.getUser("user",true)
const reason = instance.options.getString("reason",false)
opendiscord.blacklist.remove(data.id)
opendiscord.log(instance.user.displayName+" removed "+data.displayName+" from blacklist!","info",[
{key:"user",value:user.username},
{key:"userid",value:user.id,hidden:true},
{key:"channelid",value:channel.id,hidden:true},
{key:"method",value:source},
{key:"reason",value:reason ?? "/"}
])
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:blacklist-remove").build(source,{guild,channel,user,data,reason}))
}
}),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild) return
const scope = instance.options.getSubCommand()
if (!scope || (scope != "add" && scope != "remove")) return
const data = instance.options.getUser("user",true)
const reason = instance.options.getString("reason",false)
//to logs
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.blacklisting.logs){
const logChannel = opendiscord.posts.get("opendiscord:logs")
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:blacklist-logs").build(source,{guild,channel,user,mode:scope,data,reason}))
}
//to dm
if (generalConfig.data.system.messages.blacklisting.dm) await opendiscord.client.sendUserDm(user,await opendiscord.builders.messages.getSafe("opendiscord:blacklist-dm").build(source,{guild,channel,user,mode:scope,data,reason}))
}),
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
const scope = instance.options.getSubCommand()
opendiscord.log(instance.user.displayName+" used the 'blacklist "+scope+"' command!","info",[
{key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true},
{key:"method",value:source}
])
})
])
}
+138
View File
@@ -0,0 +1,138 @@
///////////////////////////////////////
//CLAIM COMMAND
///////////////////////////////////////
import {opendiscord, api, utilities} from "../index"
import * as discord from "discord.js"
const generalConfig = opendiscord.configs.get("opendiscord:general")
export const registerCommandResponders = async () => {
//CLAIM COMMAND RESPONDER
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:claim",generalConfig.data.prefix,"claim"))
opendiscord.responders.commands.get("opendiscord:claim").workers.add([
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
const permissionMode = generalConfig.data.system.permissions.claim
if (permissionMode == "none"){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else if (permissionMode == "everyone") return
else if (permissionMode == "admin"){
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
return cancel()
}else return
}else{
if (!instance.guild || !instance.member){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
return cancel()
}
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
if (!role){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
return cancel()
}
if (!role.members.has(instance.member.id)){
//no permissions
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
return cancel()
}else return
}
}),
new api.ODWorker("opendiscord:claim",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!guild){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
return cancel()
}
const ticket = opendiscord.tickets.get(channel.id)
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return cancel()
}
//return when already claimed
if (ticket.get("opendiscord:claimed").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
return cancel()
}
//return when busy
if (ticket.get("opendiscord:busy").value){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
return cancel()
}
const claimUser = instance.options.getUser("user",false) ?? user
const reason = instance.options.getString("reason",false)
//start claiming ticket
await instance.defer(false)
await opendiscord.actions.get("opendiscord:claim-ticket").run(source,{guild,channel,user:claimUser,ticket,reason,sendMessage:false})
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build(source,{guild,channel,user:claimUser,ticket,reason}))
}),
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
opendiscord.log(instance.user.displayName+" used the 'claim' command!","info",[
{key:"user",value:instance.user.username},
{key:"userid",value:instance.user.id,hidden:true},
{key:"channelid",value:instance.channel.id,hidden:true},
{key:"method",value:source}
])
})
])
}
export const registerButtonResponders = async () => {
//CLAIM TICKET BUTTON RESPONDER
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:claim-ticket",/^od:claim-ticket/))
opendiscord.responders.buttons.get("opendiscord:claim-ticket").workers.add(
new api.ODWorker("opendiscord:claim-ticket",0,async (instance,params,source,cancel) => {
const originalSource = instance.interaction.customId.split("_")[1] as Exclude<api.ODActionManagerIds_Default["opendiscord:claim-ticket"]["source"],"slash"|"text">
if (originalSource == "ticket-message") await opendiscord.verifybars.get("opendiscord:claim-ticket-ticket-message").activate(instance)
else if (originalSource == "unclaim-message") await opendiscord.verifybars.get("opendiscord:claim-ticket-unclaim-message").activate(instance)
else await instance.defer("update",false)
})
)
}
export const registerModalResponders = async () => {
//CLAIM WITH REASON MODAL RESPONDER
opendiscord.responders.modals.add(new api.ODModalResponder("opendiscord:claim-ticket-reason",/^od:claim-ticket-reason_/))
opendiscord.responders.modals.get("opendiscord:claim-ticket-reason").workers.add([
new api.ODWorker("opendiscord:claim-ticket-reason",0,async (instance,params,source,cancel) => {
const {guild,channel,user} = instance
if (!channel) return
if (!guild){
//error
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build(source,{channel,user:instance.user}))
return cancel()
}
const ticket = opendiscord.tickets.get(instance.interaction.customId.split("_")[1])
if (!ticket || channel.isDMBased()){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
return
}
const originalSource = instance.interaction.customId.split("_")[2] as Exclude<api.ODActionManagerIds_Default["opendiscord:claim-ticket"]["source"],"slash"|"text">
const reason = instance.values.getTextField("reason",true)
//claim with reason
if (originalSource == "ticket-message"){
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
}else if (originalSource == "unclaim-message"){
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build("other",{guild,channel,user,ticket,reason}))
}else{
await instance.defer("update",false)
await opendiscord.actions.get("opendiscord:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
}
})
])
}

Some files were not shown because too many files have changed in this diff Show More