Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
16f1be32a3 | ||
|
|
e1a6feea6e | ||
|
|
9668851a82 | ||
|
|
68d6a2df3f | ||
|
|
f835850b3f | ||
|
|
f7fa0998b6 | ||
|
|
4416736947 | ||
|
|
5494c1ad8f | ||
|
|
4147658575 | ||
|
|
f7cda48ed6 | ||
|
|
4b485adf82 | ||
|
|
e55438cc67 | ||
|
|
c7b44232c4 | ||
|
|
68a8170570 | ||
|
|
34ed4edede | ||
|
|
a40a9b8be8 | ||
|
|
e8f96ef84f | ||
|
|
8413d3c2b7 | ||
|
|
30b6ab4df6 | ||
|
|
2aef855902 | ||
|
|
4aacdd1607 | ||
|
|
d66925a450 | ||
|
|
d2cd6be513 | ||
|
|
30a0a6c503 | ||
|
|
72f84b2566 | ||
|
|
6ce017b407 | ||
|
|
415330be21 | ||
|
|
21ce2921a1 | ||
|
|
b07252151b | ||
|
|
02d37dd177 | ||
|
|
706006e319 | ||
|
|
82f2aeaa90 | ||
|
|
793c6f0603 | ||
|
|
1ef74f0b6b | ||
|
|
337dc3827e | ||
|
|
810db76e91 | ||
|
|
f4f6f30fa2 | ||
|
|
8436b19cbf | ||
|
|
549c161830 | ||
|
|
adc2433216 | ||
|
|
3b3c0aff96 | ||
|
|
ce6ca6fc09 | ||
|
|
e3bc985c0c | ||
|
|
ff8568fde7 | ||
|
|
8ec710fa55 | ||
|
|
076fcbcb37 | ||
|
|
6df3498cb5 | ||
|
|
8116d4d8dd | ||
|
|
e987c176b7 | ||
|
|
2ea38cd7a5 | ||
|
|
b2f2ef3405 | ||
|
|
c2e6f781b9 | ||
|
|
8dfd17ddde | ||
|
|
5f077e87f6 | ||
|
|
76dc3b1022 | ||
|
|
93ed56b4ae | ||
|
|
160f89c7cf | ||
|
|
51c4ae0229 | ||
|
|
2cc2ccc68e | ||
|
|
0a29e13640 | ||
|
|
31b94718f1 | ||
|
|
6ac993617e | ||
|
|
9f4999b89b | ||
|
|
dd3c159413 | ||
|
|
72627a7058 | ||
|
|
b683365126 | ||
|
|
03b3495eb2 | ||
|
|
a6be9df213 | ||
|
|
6b2f291122 | ||
|
|
af0dc879c6 | ||
|
|
a12f60136a | ||
|
|
1d05d04bf2 | ||
|
|
ff6a9eefaf | ||
|
|
aa9004d7e2 | ||
|
|
7e1fe78a26 | ||
|
|
675571b8d8 | ||
|
|
48f0d65fad | ||
|
|
a54422b222 | ||
|
|
c243d03216 | ||
|
|
b965a4f5a2 | ||
|
|
0d8dd8cd17 | ||
|
|
6ac432cadc | ||
|
|
dec6c7598b | ||
|
|
2de2e3cd9b | ||
|
|
f117943e00 | ||
|
|
951aff093a | ||
|
|
2acd185d6f | ||
|
|
2fbef46a53 | ||
|
|
5d0776a9b9 | ||
|
|
7bf843c851 | ||
|
|
3e3ea9263f | ||
|
|
bb5c3e9c8d | ||
|
|
8df13b0d36 | ||
|
|
b5dd7158df | ||
|
|
05919bb57e | ||
|
|
1d6572aa36 | ||
|
|
83080a6e4d | ||
|
|
35fdafb21d | ||
|
|
a0e03be103 | ||
|
|
d404f343e0 | ||
|
|
adf4acd443 | ||
|
|
94f32674cb | ||
|
|
e8eb52e00b | ||
|
|
4efa165949 | ||
|
|
4c3e4ef9a5 | ||
|
|
fd739054fd | ||
|
|
2d1724893e | ||
|
|
7696202dec | ||
|
|
e36c1992de | ||
|
|
e73c8e9b3b | ||
|
|
ad623f9650 | ||
|
|
515b7e1ffc | ||
|
|
605173e788 | ||
|
|
e129724c12 | ||
|
|
49504bc3de | ||
|
|
f414fd77fc | ||
|
|
5dcbcbfabc | ||
|
|
6ec228df53 | ||
|
|
1f3894141a | ||
|
|
9253377766 | ||
|
|
30352b570a | ||
|
|
1fddad1e96 | ||
|
|
d545d21bb1 | ||
|
|
5f79ae909b | ||
|
|
831e120093 | ||
|
|
376fa23288 |
@@ -0,0 +1,649 @@
|
||||
//@ts-check
|
||||
const fjs = require("formatted-json-stringify")
|
||||
const fs = require("fs")
|
||||
const formatter = new fjs.ObjectFormatter(null,true,[
|
||||
new fjs.ObjectFormatter("_TRANSLATION",true,[
|
||||
new fjs.PropertyFormatter("otversion"),
|
||||
new fjs.ArrayFormatter("translators",false,new fjs.PropertyFormatter(null)),
|
||||
new fjs.PropertyFormatter("lastedited"),
|
||||
new fjs.PropertyFormatter("language"),
|
||||
new fjs.PropertyFormatter("automated"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("checker",true,[
|
||||
new fjs.ObjectFormatter("system",true,[
|
||||
new fjs.PropertyFormatter("typeError"),
|
||||
new fjs.PropertyFormatter("headerOpenTicket"),
|
||||
new fjs.PropertyFormatter("typeWarning"),
|
||||
new fjs.PropertyFormatter("typeInfo"),
|
||||
new fjs.PropertyFormatter("headerConfigChecker"),
|
||||
new fjs.PropertyFormatter("headerDescription"),
|
||||
new fjs.PropertyFormatter("footerError"),
|
||||
new fjs.PropertyFormatter("footerWarning"),
|
||||
new fjs.PropertyFormatter("footerSupport"),
|
||||
new fjs.PropertyFormatter("compactInformation"),
|
||||
new fjs.PropertyFormatter("dataPath"),
|
||||
new fjs.PropertyFormatter("dataDocs"),
|
||||
new fjs.PropertyFormatter("dataMessages"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("messages",true,[
|
||||
new fjs.PropertyFormatter("stringTooShort"),
|
||||
new fjs.PropertyFormatter("stringTooLong"),
|
||||
new fjs.PropertyFormatter("stringLengthInvalid"),
|
||||
new fjs.PropertyFormatter("stringStartsWith"),
|
||||
new fjs.PropertyFormatter("stringEndsWith"),
|
||||
new fjs.PropertyFormatter("stringContains"),
|
||||
new fjs.PropertyFormatter("stringChoices"),
|
||||
new fjs.PropertyFormatter("stringRegex"),
|
||||
|
||||
new fjs.PropertyFormatter("stringInvertedContains"),
|
||||
new fjs.PropertyFormatter("stringLowercase"),
|
||||
new fjs.PropertyFormatter("stringUppercase"),
|
||||
new fjs.PropertyFormatter("stringSpecialCharacters"),
|
||||
new fjs.PropertyFormatter("stringNoSpaces"),
|
||||
new fjs.PropertyFormatter("stringCapitalWord"),
|
||||
new fjs.PropertyFormatter("stringCapitalSentence"),
|
||||
new fjs.PropertyFormatter("stringPunctuation"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("numberTooShort"),
|
||||
new fjs.PropertyFormatter("numberTooLong"),
|
||||
new fjs.PropertyFormatter("numberLengthInvalid"),
|
||||
new fjs.PropertyFormatter("numberTooSmall"),
|
||||
new fjs.PropertyFormatter("numberTooLarge"),
|
||||
new fjs.PropertyFormatter("numberNotEqual"),
|
||||
new fjs.PropertyFormatter("numberStep"),
|
||||
new fjs.PropertyFormatter("numberStepOffset"),
|
||||
new fjs.PropertyFormatter("numberStartsWith"),
|
||||
new fjs.PropertyFormatter("numberEndsWith"),
|
||||
new fjs.PropertyFormatter("numberContains"),
|
||||
new fjs.PropertyFormatter("numberChoices"),
|
||||
new fjs.PropertyFormatter("numberFloat"),
|
||||
new fjs.PropertyFormatter("numberNegative"),
|
||||
new fjs.PropertyFormatter("numberPositive"),
|
||||
new fjs.PropertyFormatter("numberZero"),
|
||||
new fjs.PropertyFormatter("numberNan"),
|
||||
new fjs.PropertyFormatter("numberInvertedContains"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("booleanTrue"),
|
||||
new fjs.PropertyFormatter("booleanFalse"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("arrayEmptyDisabled"),
|
||||
new fjs.PropertyFormatter("arrayEmptyRequired"),
|
||||
new fjs.PropertyFormatter("arrayTooShort"),
|
||||
new fjs.PropertyFormatter("arrayTooLong"),
|
||||
new fjs.PropertyFormatter("arrayLengthInvalid"),
|
||||
new fjs.PropertyFormatter("arrayInvalidTypes"),
|
||||
new fjs.PropertyFormatter("arrayDouble"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("discordInvalidId"),
|
||||
new fjs.PropertyFormatter("discordInvalidIdOptions"),
|
||||
new fjs.PropertyFormatter("discordInvalidToken"),
|
||||
new fjs.PropertyFormatter("colorInvalid"),
|
||||
new fjs.PropertyFormatter("emojiTooShort"),
|
||||
new fjs.PropertyFormatter("emojiTooLong"),
|
||||
new fjs.PropertyFormatter("emojiCustom"),
|
||||
new fjs.PropertyFormatter("emojiInvalid"),
|
||||
new fjs.PropertyFormatter("urlInvalid"),
|
||||
new fjs.PropertyFormatter("urlInvalidHttp"),
|
||||
new fjs.PropertyFormatter("urlInvalidProtocol"),
|
||||
new fjs.PropertyFormatter("urlInvalidHostname"),
|
||||
new fjs.PropertyFormatter("urlInvalidExtension"),
|
||||
new fjs.PropertyFormatter("urlInvalidPath"),
|
||||
new fjs.PropertyFormatter("idNotUnique"),
|
||||
new fjs.PropertyFormatter("idNonExistent"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("invalidType"),
|
||||
new fjs.PropertyFormatter("propertyMissing"),
|
||||
new fjs.PropertyFormatter("propertyOptional"),
|
||||
new fjs.PropertyFormatter("objectDisabled"),
|
||||
new fjs.PropertyFormatter("nullInvalid"),
|
||||
new fjs.PropertyFormatter("switchInvalidType"),
|
||||
new fjs.PropertyFormatter("objectSwitchInvalid"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("invalidLanguage"),
|
||||
new fjs.PropertyFormatter("invalidButton"),
|
||||
new fjs.PropertyFormatter("unusedOption"),
|
||||
new fjs.PropertyFormatter("unusedQuestion"),
|
||||
new fjs.PropertyFormatter("dropdownOption"),
|
||||
new fjs.PropertyFormatter("customInvalidVersion"),
|
||||
]),
|
||||
]),
|
||||
new fjs.ObjectFormatter("actions",true,[
|
||||
new fjs.ObjectFormatter("buttons",true,[
|
||||
new fjs.PropertyFormatter("create"),
|
||||
new fjs.PropertyFormatter("close"),
|
||||
new fjs.PropertyFormatter("delete"),
|
||||
new fjs.PropertyFormatter("reopen"),
|
||||
new fjs.PropertyFormatter("claim"),
|
||||
new fjs.PropertyFormatter("unclaim"),
|
||||
new fjs.PropertyFormatter("pin"),
|
||||
new fjs.PropertyFormatter("unpin"),
|
||||
new fjs.PropertyFormatter("clear"),
|
||||
new fjs.PropertyFormatter("helpSwitchSlash"),
|
||||
new fjs.PropertyFormatter("helpSwitchText"),
|
||||
new fjs.PropertyFormatter("helpPage"),
|
||||
new fjs.PropertyFormatter("withReason"),
|
||||
new fjs.PropertyFormatter("withoutTranscript"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("titles",true,[
|
||||
new fjs.PropertyFormatter("created"),
|
||||
new fjs.PropertyFormatter("close"),
|
||||
new fjs.PropertyFormatter("delete"),
|
||||
new fjs.PropertyFormatter("reopen"),
|
||||
new fjs.PropertyFormatter("claim"),
|
||||
new fjs.PropertyFormatter("unclaim"),
|
||||
new fjs.PropertyFormatter("pin"),
|
||||
new fjs.PropertyFormatter("unpin"),
|
||||
new fjs.PropertyFormatter("rename"),
|
||||
new fjs.PropertyFormatter("move"),
|
||||
new fjs.PropertyFormatter("add"),
|
||||
new fjs.PropertyFormatter("remove"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("help"),
|
||||
new fjs.PropertyFormatter("statsReset"),
|
||||
new fjs.PropertyFormatter("blacklistAdd"),
|
||||
new fjs.PropertyFormatter("blacklistRemove"),
|
||||
new fjs.PropertyFormatter("blacklistGet"),
|
||||
new fjs.PropertyFormatter("blacklistView"),
|
||||
new fjs.PropertyFormatter("blacklistAddDm"),
|
||||
new fjs.PropertyFormatter("blacklistRemoveDm"),
|
||||
new fjs.PropertyFormatter("clear"),
|
||||
new fjs.PropertyFormatter("clearTickets"),
|
||||
new fjs.PropertyFormatter("roles"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("autoclose"),
|
||||
new fjs.PropertyFormatter("autocloseEnabled"),
|
||||
new fjs.PropertyFormatter("autocloseDisabled"),
|
||||
new fjs.PropertyFormatter("autodelete"),
|
||||
new fjs.PropertyFormatter("autodeleteEnabled"),
|
||||
new fjs.PropertyFormatter("autodeleteDisabled"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("topicSet"),
|
||||
new fjs.PropertyFormatter("prioritySet"),
|
||||
new fjs.PropertyFormatter("priorityGet"),
|
||||
new fjs.PropertyFormatter("transfer"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("descriptions",true,[
|
||||
new fjs.PropertyFormatter("create"),
|
||||
new fjs.PropertyFormatter("close"),
|
||||
new fjs.PropertyFormatter("delete"),
|
||||
new fjs.PropertyFormatter("reopen"),
|
||||
new fjs.PropertyFormatter("claim"),
|
||||
new fjs.PropertyFormatter("unclaim"),
|
||||
new fjs.PropertyFormatter("pin"),
|
||||
new fjs.PropertyFormatter("unpin"),
|
||||
new fjs.PropertyFormatter("rename"),
|
||||
new fjs.PropertyFormatter("move"),
|
||||
new fjs.PropertyFormatter("add"),
|
||||
new fjs.PropertyFormatter("remove"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("helpExplanation"),
|
||||
new fjs.PropertyFormatter("statsReset"),
|
||||
new fjs.PropertyFormatter("statsError"),
|
||||
new fjs.PropertyFormatter("blacklistAdd"),
|
||||
new fjs.PropertyFormatter("blacklistRemove"),
|
||||
new fjs.PropertyFormatter("blacklistGetSuccess"),
|
||||
new fjs.PropertyFormatter("blacklistGetEmpty"),
|
||||
new fjs.PropertyFormatter("blacklistViewEmpty"),
|
||||
new fjs.PropertyFormatter("blacklistViewTip"),
|
||||
new fjs.PropertyFormatter("clearVerify"),
|
||||
new fjs.PropertyFormatter("clearReady"),
|
||||
new fjs.PropertyFormatter("rolesEmpty"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("autocloseLeave"),
|
||||
new fjs.PropertyFormatter("autocloseTimeout"),
|
||||
new fjs.PropertyFormatter("autodeleteLeave"),
|
||||
new fjs.PropertyFormatter("autodeleteTimeout"),
|
||||
new fjs.PropertyFormatter("autocloseEnabled"),
|
||||
new fjs.PropertyFormatter("autocloseDisabled"),
|
||||
new fjs.PropertyFormatter("autodeleteEnabled"),
|
||||
new fjs.PropertyFormatter("autodeleteDisabled"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("ticketMessageLimit"),
|
||||
new fjs.PropertyFormatter("ticketMessageAutoclose"),
|
||||
new fjs.PropertyFormatter("ticketMessageAutodelete"),
|
||||
new fjs.PropertyFormatter("panelReady"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("topicSet"),
|
||||
new fjs.PropertyFormatter("prioritySet"),
|
||||
new fjs.PropertyFormatter("priorityGet"),
|
||||
new fjs.PropertyFormatter("transfer"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("modal",true,[
|
||||
new fjs.PropertyFormatter("closePlaceholder"),
|
||||
new fjs.PropertyFormatter("deletePlaceholder"),
|
||||
new fjs.PropertyFormatter("reopenPlaceholder"),
|
||||
new fjs.PropertyFormatter("claimPlaceholder"),
|
||||
new fjs.PropertyFormatter("unclaimPlaceholder"),
|
||||
new fjs.PropertyFormatter("pinPlaceholder"),
|
||||
new fjs.PropertyFormatter("unpinPlaceholder"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("logs",true,[
|
||||
new fjs.PropertyFormatter("createLog"),
|
||||
new fjs.PropertyFormatter("closeLog"),
|
||||
new fjs.PropertyFormatter("closeDm"),
|
||||
new fjs.PropertyFormatter("deleteLog"),
|
||||
new fjs.PropertyFormatter("deleteDm"),
|
||||
new fjs.PropertyFormatter("reopenLog"),
|
||||
new fjs.PropertyFormatter("reopenDm"),
|
||||
new fjs.PropertyFormatter("claimLog"),
|
||||
new fjs.PropertyFormatter("claimDm"),
|
||||
new fjs.PropertyFormatter("unclaimLog"),
|
||||
new fjs.PropertyFormatter("unclaimDm"),
|
||||
new fjs.PropertyFormatter("pinLog"),
|
||||
new fjs.PropertyFormatter("pinDm"),
|
||||
new fjs.PropertyFormatter("unpinLog"),
|
||||
new fjs.PropertyFormatter("unpinDm"),
|
||||
new fjs.PropertyFormatter("renameLog"),
|
||||
new fjs.PropertyFormatter("renameDm"),
|
||||
new fjs.PropertyFormatter("moveLog"),
|
||||
new fjs.PropertyFormatter("moveDm"),
|
||||
new fjs.PropertyFormatter("addLog"),
|
||||
new fjs.PropertyFormatter("addDm"),
|
||||
new fjs.PropertyFormatter("removeLog"),
|
||||
new fjs.PropertyFormatter("removeDm"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("blacklistAddLog"),
|
||||
new fjs.PropertyFormatter("blacklistRemoveLog"),
|
||||
new fjs.PropertyFormatter("blacklistAddDm"),
|
||||
new fjs.PropertyFormatter("blacklistRemoveDm"),
|
||||
new fjs.PropertyFormatter("clearLog"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("transferLog"),
|
||||
new fjs.PropertyFormatter("transferDm"),
|
||||
new fjs.PropertyFormatter("prioritySetLog"),
|
||||
new fjs.PropertyFormatter("prioritySetDm"),
|
||||
new fjs.PropertyFormatter("roleUpdateLog"),
|
||||
new fjs.PropertyFormatter("roleUpdateDm"),
|
||||
]),
|
||||
]),
|
||||
new fjs.ObjectFormatter("transcripts",true,[
|
||||
new fjs.ObjectFormatter("success",true,[
|
||||
new fjs.PropertyFormatter("visit"),
|
||||
new fjs.PropertyFormatter("ready"),
|
||||
new fjs.PropertyFormatter("textFileDescription"),
|
||||
new fjs.PropertyFormatter("htmlProgress"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("createdChannel"),
|
||||
new fjs.PropertyFormatter("createdCreator"),
|
||||
new fjs.PropertyFormatter("createdParticipant"),
|
||||
new fjs.PropertyFormatter("createdActiveAdmin"),
|
||||
new fjs.PropertyFormatter("createdEveryAdmin"),
|
||||
new fjs.PropertyFormatter("createdOther"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("errors",true,[
|
||||
new fjs.PropertyFormatter("retry"),
|
||||
new fjs.PropertyFormatter("continue"),
|
||||
new fjs.PropertyFormatter("backup"),
|
||||
new fjs.PropertyFormatter("error"),
|
||||
new fjs.PropertyFormatter("title"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("text",true,[
|
||||
new fjs.PropertyFormatter("messagesTitle"),
|
||||
new fjs.PropertyFormatter("embedTitle"),
|
||||
new fjs.PropertyFormatter("fileTitle"),
|
||||
new fjs.PropertyFormatter("fieldsTitle"),
|
||||
new fjs.PropertyFormatter("reactionsTitle"),
|
||||
new fjs.PropertyFormatter("statsTitle"),
|
||||
new fjs.PropertyFormatter("emptyContent"),
|
||||
new fjs.PropertyFormatter("noTitle"),
|
||||
new fjs.PropertyFormatter("noDesc"),
|
||||
]),
|
||||
]),
|
||||
new fjs.ObjectFormatter("errors",true,[
|
||||
new fjs.ObjectFormatter("titles",true,[
|
||||
new fjs.PropertyFormatter("internalError"),
|
||||
new fjs.PropertyFormatter("optionMissing"),
|
||||
new fjs.PropertyFormatter("optionInvalid"),
|
||||
new fjs.PropertyFormatter("unknownCommand"),
|
||||
new fjs.PropertyFormatter("noPermissions"),
|
||||
new fjs.PropertyFormatter("unknownTicket"),
|
||||
new fjs.PropertyFormatter("deprecatedTicket"),
|
||||
new fjs.PropertyFormatter("unknownOption"),
|
||||
new fjs.PropertyFormatter("unknownPanel"),
|
||||
new fjs.PropertyFormatter("notInGuild"),
|
||||
new fjs.PropertyFormatter("channelRename"),
|
||||
new fjs.PropertyFormatter("busy"),
|
||||
new fjs.PropertyFormatter("permissionError"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("descriptions",true,[
|
||||
new fjs.PropertyFormatter("askForInfo"),
|
||||
new fjs.PropertyFormatter("askForInfoResolve"),
|
||||
new fjs.PropertyFormatter("internalError"),
|
||||
new fjs.PropertyFormatter("optionMissing"),
|
||||
new fjs.PropertyFormatter("optionInvalid"),
|
||||
new fjs.PropertyFormatter("optionInvalidChoose"),
|
||||
new fjs.PropertyFormatter("unknownCommand"),
|
||||
new fjs.PropertyFormatter("noPermissions"),
|
||||
new fjs.PropertyFormatter("noPermissionsList"),
|
||||
new fjs.PropertyFormatter("noPermissionsCooldown"),
|
||||
new fjs.PropertyFormatter("noPermissionsBlacklist"),
|
||||
new fjs.PropertyFormatter("noPermissionsLimitGlobal"),
|
||||
new fjs.PropertyFormatter("noPermissionsLimitGlobalUser"),
|
||||
new fjs.PropertyFormatter("noPermissionsLimitOption"),
|
||||
new fjs.PropertyFormatter("noPermissionsLimitOptionUser"),
|
||||
new fjs.PropertyFormatter("unknownTicket"),
|
||||
new fjs.PropertyFormatter("deprecatedTicket"),
|
||||
new fjs.PropertyFormatter("notInGuild"),
|
||||
new fjs.PropertyFormatter("channelRename"),
|
||||
new fjs.PropertyFormatter("channelRenameSource"),
|
||||
new fjs.PropertyFormatter("busy"),
|
||||
new fjs.PropertyFormatter("closeBeforeMessage"),
|
||||
new fjs.PropertyFormatter("closeBeforeAdminMessage"),
|
||||
new fjs.PropertyFormatter("unableToCreateTicket"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("optionInvalidReasons",true,[
|
||||
new fjs.PropertyFormatter("stringRegex"),
|
||||
new fjs.PropertyFormatter("stringMinLength"),
|
||||
new fjs.PropertyFormatter("stringMaxLength"),
|
||||
new fjs.PropertyFormatter("numberInvalid"),
|
||||
new fjs.PropertyFormatter("numberMin"),
|
||||
new fjs.PropertyFormatter("numberMax"),
|
||||
new fjs.PropertyFormatter("numberDecimal"),
|
||||
new fjs.PropertyFormatter("numberNegative"),
|
||||
new fjs.PropertyFormatter("numberPositive"),
|
||||
new fjs.PropertyFormatter("numberZero"),
|
||||
new fjs.PropertyFormatter("channelNotFound"),
|
||||
new fjs.PropertyFormatter("userNotFound"),
|
||||
new fjs.PropertyFormatter("roleNotFound"),
|
||||
new fjs.PropertyFormatter("memberNotFound"),
|
||||
new fjs.PropertyFormatter("mentionableNotFound"),
|
||||
new fjs.PropertyFormatter("channelType"),
|
||||
new fjs.PropertyFormatter("notInGuild"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("permissions",true,[
|
||||
new fjs.PropertyFormatter("developer"),
|
||||
new fjs.PropertyFormatter("owner"),
|
||||
new fjs.PropertyFormatter("admin"),
|
||||
new fjs.PropertyFormatter("moderator"),
|
||||
new fjs.PropertyFormatter("support"),
|
||||
new fjs.PropertyFormatter("member"),
|
||||
new fjs.PropertyFormatter("discord-administrator"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("actionInvalid",true,[
|
||||
new fjs.PropertyFormatter("close"),
|
||||
new fjs.PropertyFormatter("reopen"),
|
||||
new fjs.PropertyFormatter("claim"),
|
||||
new fjs.PropertyFormatter("unclaim"),
|
||||
new fjs.PropertyFormatter("pin"),
|
||||
new fjs.PropertyFormatter("unpin"),
|
||||
new fjs.PropertyFormatter("add"),
|
||||
new fjs.PropertyFormatter("remove"),
|
||||
]),
|
||||
]),
|
||||
new fjs.ObjectFormatter("params",true,[
|
||||
new fjs.ObjectFormatter("uppercase",true,[
|
||||
new fjs.PropertyFormatter("ticket"),
|
||||
new fjs.PropertyFormatter("tickets"),
|
||||
new fjs.PropertyFormatter("reason"),
|
||||
new fjs.PropertyFormatter("creator"),
|
||||
new fjs.PropertyFormatter("remaining"),
|
||||
new fjs.PropertyFormatter("added"),
|
||||
new fjs.PropertyFormatter("removed"),
|
||||
new fjs.PropertyFormatter("filter"),
|
||||
new fjs.PropertyFormatter("method"),
|
||||
new fjs.PropertyFormatter("type"),
|
||||
new fjs.PropertyFormatter("blacklisted"),
|
||||
new fjs.PropertyFormatter("panel"),
|
||||
new fjs.PropertyFormatter("command"),
|
||||
new fjs.PropertyFormatter("system"),
|
||||
new fjs.PropertyFormatter("true"),
|
||||
new fjs.PropertyFormatter("false"),
|
||||
new fjs.PropertyFormatter("syntax"),
|
||||
new fjs.PropertyFormatter("originalName"),
|
||||
new fjs.PropertyFormatter("newName"),
|
||||
new fjs.PropertyFormatter("until"),
|
||||
new fjs.PropertyFormatter("validOptions"),
|
||||
new fjs.PropertyFormatter("validPanels"),
|
||||
new fjs.PropertyFormatter("autoclose"),
|
||||
new fjs.PropertyFormatter("autodelete"),
|
||||
new fjs.PropertyFormatter("startupDate"),
|
||||
new fjs.PropertyFormatter("version"),
|
||||
new fjs.PropertyFormatter("name"),
|
||||
new fjs.PropertyFormatter("role"),
|
||||
new fjs.PropertyFormatter("status"),
|
||||
new fjs.PropertyFormatter("claimed"),
|
||||
new fjs.PropertyFormatter("pinned"),
|
||||
new fjs.PropertyFormatter("creationDate"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("noone"),
|
||||
new fjs.PropertyFormatter("open"),
|
||||
new fjs.PropertyFormatter("closed"),
|
||||
new fjs.PropertyFormatter("priority"),
|
||||
new fjs.PropertyFormatter("participants"),
|
||||
new fjs.PropertyFormatter("yes"),
|
||||
new fjs.PropertyFormatter("no"),
|
||||
new fjs.PropertyFormatter("option"),
|
||||
new fjs.PropertyFormatter("topic"),
|
||||
new fjs.PropertyFormatter("uptime"),
|
||||
new fjs.PropertyFormatter("messages"),
|
||||
new fjs.PropertyFormatter("embeds"),
|
||||
new fjs.PropertyFormatter("files"),
|
||||
new fjs.PropertyFormatter("components"),
|
||||
new fjs.PropertyFormatter("cooldown"),
|
||||
new fjs.PropertyFormatter("maxTickets"),
|
||||
new fjs.PropertyFormatter("admins"),
|
||||
new fjs.PropertyFormatter("roles"),
|
||||
new fjs.PropertyFormatter("size"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("lowercase",true,[
|
||||
new fjs.PropertyFormatter("text"),
|
||||
new fjs.PropertyFormatter("html"),
|
||||
new fjs.PropertyFormatter("command"),
|
||||
new fjs.PropertyFormatter("modal"),
|
||||
new fjs.PropertyFormatter("button"),
|
||||
new fjs.PropertyFormatter("dropdown"),
|
||||
new fjs.PropertyFormatter("method"),
|
||||
]),
|
||||
]),
|
||||
new fjs.ObjectFormatter("commands",true,[
|
||||
new fjs.PropertyFormatter("reason"),
|
||||
new fjs.PropertyFormatter("help"),
|
||||
new fjs.PropertyFormatter("panel"),
|
||||
new fjs.PropertyFormatter("panelId"),
|
||||
new fjs.PropertyFormatter("panelAutoUpdate"),
|
||||
new fjs.PropertyFormatter("ticket"),
|
||||
new fjs.PropertyFormatter("ticketId"),
|
||||
new fjs.PropertyFormatter("close"),
|
||||
new fjs.PropertyFormatter("delete"),
|
||||
new fjs.PropertyFormatter("deleteNoTranscript"),
|
||||
new fjs.PropertyFormatter("reopen"),
|
||||
new fjs.PropertyFormatter("claim"),
|
||||
new fjs.PropertyFormatter("claimUser"),
|
||||
new fjs.PropertyFormatter("unclaim"),
|
||||
new fjs.PropertyFormatter("pin"),
|
||||
new fjs.PropertyFormatter("unpin"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("move"),
|
||||
new fjs.PropertyFormatter("moveId"),
|
||||
new fjs.PropertyFormatter("rename"),
|
||||
new fjs.PropertyFormatter("renameName"),
|
||||
new fjs.PropertyFormatter("add"),
|
||||
new fjs.PropertyFormatter("addUser"),
|
||||
new fjs.PropertyFormatter("remove"),
|
||||
new fjs.PropertyFormatter("removeUser"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("blacklist"),
|
||||
new fjs.PropertyFormatter("blacklistView"),
|
||||
new fjs.PropertyFormatter("blacklistAdd"),
|
||||
new fjs.PropertyFormatter("blacklistRemove"),
|
||||
new fjs.PropertyFormatter("blacklistGet"),
|
||||
new fjs.PropertyFormatter("blacklistGetUser"),
|
||||
new fjs.PropertyFormatter("stats"),
|
||||
new fjs.PropertyFormatter("statsReset"),
|
||||
new fjs.PropertyFormatter("statsGlobal"),
|
||||
new fjs.PropertyFormatter("statsUser"),
|
||||
new fjs.PropertyFormatter("statsUserUser"),
|
||||
new fjs.PropertyFormatter("statsTicket"),
|
||||
new fjs.PropertyFormatter("statsTicketTicket"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("clear"),
|
||||
new fjs.PropertyFormatter("clearFilter"),
|
||||
new fjs.ObjectFormatter("clearFilters",true,[
|
||||
new fjs.PropertyFormatter("all"),
|
||||
new fjs.PropertyFormatter("open"),
|
||||
new fjs.PropertyFormatter("close"),
|
||||
new fjs.PropertyFormatter("claim"),
|
||||
new fjs.PropertyFormatter("unclaim"),
|
||||
new fjs.PropertyFormatter("pin"),
|
||||
new fjs.PropertyFormatter("unpin"),
|
||||
new fjs.PropertyFormatter("autoclose"),
|
||||
]),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("autoclose"),
|
||||
new fjs.PropertyFormatter("autocloseDisable"),
|
||||
new fjs.PropertyFormatter("autocloseEnable"),
|
||||
new fjs.PropertyFormatter("autocloseEnableTime"),
|
||||
new fjs.PropertyFormatter("autodelete"),
|
||||
new fjs.PropertyFormatter("autodeleteDisable"),
|
||||
new fjs.PropertyFormatter("autodeleteEnable"),
|
||||
new fjs.PropertyFormatter("autodeleteEnableTime"),
|
||||
new fjs.TextFormatter(""),
|
||||
new fjs.PropertyFormatter("topic"),
|
||||
new fjs.PropertyFormatter("topicSet"),
|
||||
new fjs.PropertyFormatter("topicValue"),
|
||||
new fjs.PropertyFormatter("topicList"),
|
||||
new fjs.PropertyFormatter("priority"),
|
||||
new fjs.PropertyFormatter("prioritySet"),
|
||||
new fjs.PropertyFormatter("priorityValue"),
|
||||
new fjs.PropertyFormatter("priorityGet"),
|
||||
new fjs.PropertyFormatter("priorityList"),
|
||||
new fjs.PropertyFormatter("transfer"),
|
||||
new fjs.PropertyFormatter("transferUser"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("helpMenu",true,[
|
||||
new fjs.PropertyFormatter("help"),
|
||||
new fjs.PropertyFormatter("ticket"),
|
||||
new fjs.PropertyFormatter("close"),
|
||||
new fjs.PropertyFormatter("delete"),
|
||||
new fjs.PropertyFormatter("reopen"),
|
||||
new fjs.PropertyFormatter("pin"),
|
||||
new fjs.PropertyFormatter("unpin"),
|
||||
new fjs.PropertyFormatter("move"),
|
||||
new fjs.PropertyFormatter("rename"),
|
||||
new fjs.PropertyFormatter("claim"),
|
||||
new fjs.PropertyFormatter("unclaim"),
|
||||
new fjs.PropertyFormatter("add"),
|
||||
new fjs.PropertyFormatter("remove"),
|
||||
new fjs.PropertyFormatter("panel"),
|
||||
new fjs.PropertyFormatter("blacklistView"),
|
||||
new fjs.PropertyFormatter("blacklistAdd"),
|
||||
new fjs.PropertyFormatter("blacklistRemove"),
|
||||
new fjs.PropertyFormatter("blacklistGet"),
|
||||
new fjs.PropertyFormatter("statsGlobal"),
|
||||
new fjs.PropertyFormatter("statsTicket"),
|
||||
new fjs.PropertyFormatter("statsUser"),
|
||||
new fjs.PropertyFormatter("statsReset"),
|
||||
new fjs.PropertyFormatter("autocloseDisable"),
|
||||
new fjs.PropertyFormatter("autocloseEnable"),
|
||||
new fjs.PropertyFormatter("autodeleteDisable"),
|
||||
new fjs.PropertyFormatter("autodeleteEnable"),
|
||||
new fjs.ObjectFormatter("categories",true,[
|
||||
new fjs.PropertyFormatter("general"),
|
||||
new fjs.PropertyFormatter("basicTicket"),
|
||||
new fjs.PropertyFormatter("advancedTicket"),
|
||||
new fjs.PropertyFormatter("userTicket"),
|
||||
new fjs.PropertyFormatter("admin"),
|
||||
new fjs.PropertyFormatter("advanced"),
|
||||
new fjs.PropertyFormatter("extra"),
|
||||
])
|
||||
]),
|
||||
new fjs.ObjectFormatter("stats",true,[
|
||||
new fjs.ObjectFormatter("scopes",true,[
|
||||
new fjs.PropertyFormatter("global"),
|
||||
new fjs.PropertyFormatter("system"),
|
||||
new fjs.PropertyFormatter("user"),
|
||||
new fjs.PropertyFormatter("ticket"),
|
||||
new fjs.PropertyFormatter("participants"),
|
||||
new fjs.PropertyFormatter("messages"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("properties",true,[
|
||||
new fjs.PropertyFormatter("ticketsCreated"),
|
||||
new fjs.PropertyFormatter("ticketsClosed"),
|
||||
new fjs.PropertyFormatter("ticketsDeleted"),
|
||||
new fjs.PropertyFormatter("ticketsReopened"),
|
||||
new fjs.PropertyFormatter("ticketsAutoclosed"),
|
||||
new fjs.PropertyFormatter("ticketsClaimed"),
|
||||
new fjs.PropertyFormatter("ticketsPinned"),
|
||||
new fjs.PropertyFormatter("ticketsMoved"),
|
||||
new fjs.PropertyFormatter("usersBlacklisted"),
|
||||
new fjs.PropertyFormatter("transcriptsCreated"),
|
||||
new fjs.PropertyFormatter("ticketsAutodeleted"),
|
||||
new fjs.PropertyFormatter("ticketsTransferred"),
|
||||
new fjs.PropertyFormatter("ticketVolume"),
|
||||
new fjs.PropertyFormatter("averageTickets"),
|
||||
new fjs.PropertyFormatter("currentTickets"),
|
||||
new fjs.PropertyFormatter("age"),
|
||||
new fjs.PropertyFormatter("responseTime"),
|
||||
new fjs.PropertyFormatter("resolutionTime"),
|
||||
new fjs.PropertyFormatter("createdOn"),
|
||||
new fjs.PropertyFormatter("createdBy"),
|
||||
new fjs.PropertyFormatter("closedOn"),
|
||||
new fjs.PropertyFormatter("closedBy"),
|
||||
new fjs.PropertyFormatter("claimedOn"),
|
||||
new fjs.PropertyFormatter("claimedBy"),
|
||||
new fjs.PropertyFormatter("pinnedOn"),
|
||||
new fjs.PropertyFormatter("pinnedBy"),
|
||||
new fjs.PropertyFormatter("deletedOn"),
|
||||
new fjs.PropertyFormatter("deletedBy"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("roles",true,[
|
||||
new fjs.PropertyFormatter("developer"),
|
||||
new fjs.PropertyFormatter("serverOwner"),
|
||||
new fjs.PropertyFormatter("serverAdmin"),
|
||||
new fjs.PropertyFormatter("moderator"),
|
||||
new fjs.PropertyFormatter("support"),
|
||||
new fjs.PropertyFormatter("member"),
|
||||
])
|
||||
]),
|
||||
new fjs.ObjectFormatter("panel",true,[
|
||||
new fjs.PropertyFormatter("selectTicket"),
|
||||
new fjs.PropertyFormatter("selectRole"),
|
||||
new fjs.PropertyFormatter("selectOption"),
|
||||
]),
|
||||
new fjs.ObjectFormatter("priorities",true,[
|
||||
new fjs.PropertyFormatter("urgent"),
|
||||
new fjs.PropertyFormatter("veryHigh"),
|
||||
new fjs.PropertyFormatter("high"),
|
||||
new fjs.PropertyFormatter("normal"),
|
||||
new fjs.PropertyFormatter("low"),
|
||||
new fjs.PropertyFormatter("veryLow"),
|
||||
new fjs.PropertyFormatter("none"),
|
||||
]),
|
||||
])
|
||||
|
||||
for (const language of fs.readdirSync(".docs/languages/")){
|
||||
if (!fs.existsSync("./languages/"+language)){
|
||||
console.log("language:",language,"does not exist yet in the primary ./languages/ folder. Unable to merge!")
|
||||
continue
|
||||
}
|
||||
console.log("merging "+language+"...")
|
||||
const original = JSON.parse(fs.readFileSync("./languages/"+language).toString())
|
||||
const newSentences = JSON.parse(fs.readFileSync(".docs/languages/"+language).toString())
|
||||
|
||||
for (const key of Object.keys(newSentences)){
|
||||
if (key.startsWith("_")) continue
|
||||
try{
|
||||
const splitted = key.split(".")
|
||||
let currentObject = original
|
||||
splitted.forEach((property,index) => {
|
||||
let shouldBeObject = (splitted.length-1 !== index)
|
||||
if (shouldBeObject && typeof currentObject[property] == "object"){
|
||||
currentObject = currentObject[property]
|
||||
}else if (shouldBeObject && typeof currentObject[property] == "undefined"){
|
||||
currentObject[property] = {}
|
||||
currentObject = currentObject[property]
|
||||
}else if (typeof currentObject[property] == "string" || typeof currentObject[property] == "undefined"){
|
||||
currentObject[property] = newSentences[key]
|
||||
}else{
|
||||
console.log("Failed to merge key:",key,"in file:",language,"--> Invalid type:",typeof currentObject[property])
|
||||
}
|
||||
})
|
||||
}catch(err){
|
||||
console.log("Failed to merge key:",key,"in file:",language)
|
||||
}
|
||||
}
|
||||
original["_TRANSLATION"]["lastedited"] = new Date().toLocaleDateString("nl-BE",{day:"2-digit",month:"2-digit",year:"numeric"})
|
||||
original["_TRANSLATION"]["otversion"] = "v4.1.0"
|
||||
const finalText = formatter.stringify(original)
|
||||
fs.writeFileSync("./languages/"+language,finalText)
|
||||
}
|
||||
+21
-3
@@ -2,7 +2,7 @@
|
||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
||||
|
||||
[](https://discord.com/invite/26vT9wt3n3)
|
||||
[](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.2)
|
||||
[](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.1.0)
|
||||
[](https://github.com/sponsors/DJj123dj)
|
||||
[](.eggs/README.md)
|
||||
|
||||
@@ -20,6 +20,24 @@ It's recommended to provide at least `1GB` of **Memory/RAM** and `5GB` of **disk
|
||||
[**`openticket-egg-main.json` (Recommended)**](openticket-egg-main.json)
|
||||
- This egg will use the `main` branch of Open Ticket.
|
||||
|
||||
[**`openticket-egg-v4.1.0.json`**](openticket-egg-v4.1.0.json)
|
||||
- This egg will always use Open Ticket `v4.1.0`. Open Ticket updates will not have an effect on this egg.
|
||||
|
||||
[**`openticket-egg-v4.0.7.json`**](openticket-egg-v4.0.7.json)
|
||||
- This egg will always use Open Ticket `v4.0.7`. Open Ticket updates will not have an effect on this egg.
|
||||
|
||||
[**`openticket-egg-v4.0.6.json`**](openticket-egg-v4.0.6.json)
|
||||
- This egg will always use Open Ticket `v4.0.6`. Open Ticket updates will not have an effect on this egg.
|
||||
|
||||
[**`openticket-egg-v4.0.5.json`**](openticket-egg-v4.0.5.json)
|
||||
- This egg will always use Open Ticket `v4.0.5`. Open Ticket updates will not have an effect on this egg.
|
||||
|
||||
[**`openticket-egg-v4.0.4.json`**](openticket-egg-v4.0.4.json)
|
||||
- This egg will always use Open Ticket `v4.0.4`. Open Ticket updates will not have an effect on this egg.
|
||||
|
||||
[**`openticket-egg-v4.0.3.json`**](openticket-egg-v4.0.3.json)
|
||||
- This egg will always use Open Ticket `v4.0.3`. Open Ticket updates will not have an effect on this egg.
|
||||
|
||||
[**`openticket-egg-v4.0.2.json`**](openticket-egg-v4.0.2.json)
|
||||
- This egg will always use Open Ticket `v4.0.2`. Open Ticket updates will not have an effect on this egg.
|
||||
|
||||
@@ -39,6 +57,6 @@ It's recommended to provide at least `1GB` of **Memory/RAM** and `5GB` of **disk
|
||||
<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>
|
||||
[Changelog](https://otgithub.dj-dj.be/releases) - [Documentation](https://otdocs.dj-dj.be) - [Website](https://openticket.dj-dj.be) - [Support Server](https://discord.dj-dj.be) - [License](./LICENSE.md)<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)
|
||||
© 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)
|
||||
@@ -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.3)",
|
||||
"author": "support@dj-dj.be",
|
||||
"description": "This is the official Pterodactyl egg for Open Ticket v4.0.3, 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.3)\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.3\"\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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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.4)",
|
||||
"author": "support@dj-dj.be",
|
||||
"description": "This is the official Pterodactyl egg for Open Ticket v4.0.4, 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.4)\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.4\"\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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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.5)",
|
||||
"author": "support@dj-dj.be",
|
||||
"description": "This is the official Pterodactyl egg for Open Ticket v4.0.5, 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.5)\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.5\"\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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO",
|
||||
"meta": {
|
||||
"version": "PTDL_v2",
|
||||
"update_url": null
|
||||
},
|
||||
"exported_at": "2025-03-16T18:10:18+01:00",
|
||||
"name": "Open Ticket (v4.0.6)",
|
||||
"author": "support@dj-dj.be",
|
||||
"description": "This is the official Pterodactyl egg for Open Ticket v4.0.6, the most advanced & customisable discord ticket bot that you will ever find! You can customise up to 300+ variables! This includes Html Transcripts, Advanced Plugins, Custom Embeds, Questions\/Modals, Stats & more!",
|
||||
"features": null,
|
||||
"docker_images": {
|
||||
"ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20"
|
||||
},
|
||||
"file_denylist": [],
|
||||
"startup": "if [[ ! -z ${NODE_PACKAGES} ]]; then npm install ${NODE_PACKAGES}; fi; if [[ ! -z ${UNNODE_PACKAGES} ]]; then npm uninstall ${UNNODE_PACKAGES}; fi; if [ -f \/home\/container\/package.json ]; then npm install; fi; node \"\/home\/container\/index.js\" ${NODE_FLAGS};",
|
||||
"config": {
|
||||
"files": "{}",
|
||||
"startup": "{\r\n \"done\": \"STARTUP INFO:\"\r\n}",
|
||||
"logs": "{}",
|
||||
"stop": "^C"
|
||||
},
|
||||
"scripts": {
|
||||
"installation": {
|
||||
"script": "#!\/bin\/bash\r\n# Open Ticket Installation Script (v4.0.6)\r\n# Inspired by: Node.js Installation Script\r\n# \u00a9 DJdj Development\r\n\r\necho -e \"[OT INSTALLER] installing dependencies. please wait...\"\r\napt update\r\napt install -y git curl\r\n\r\necho -e \"[OT INSTALLER] updating npm. please wait...\"\r\nnpm install npm@latest --location=global\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nBRANCH=\"v4.0.6\"\r\n\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"[OT INSTALLER] \/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \"[OT INSTALLER] .git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"[OT INSTALLER] loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"[OT INSTALLER] files found with no git config\"\r\n echo -e \"[OT INSTALLER] closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"https:\/\/github.com\/open-discord-bots\/open-ticket.git\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"[OT INSTALLER] \/mnt\/server is empty.\"\r\n echo -e \"[OT INSTALLER] cloning files into repo.\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"[OT INSTALLER] cloning default branch\"\r\n git clone https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n else\r\n echo -e \"[OT INSTALLER] cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n fi\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing Open Ticket node.js packages.\"\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n \/usr\/local\/bin\/npm install --omit=dev\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing custom node.js packages.\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n \/usr\/local\/bin\/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\necho -e \"[OT INSTALLER] install complete!\"\r\nexit 0",
|
||||
"container": "node:latest",
|
||||
"entrypoint": "bash"
|
||||
}
|
||||
},
|
||||
"variables": [
|
||||
{
|
||||
"name": "Additional Npm Packages",
|
||||
"description": "Specify additional npm packages used by Open Ticket plugins. Use spaces to separate.",
|
||||
"env_variable": "NODE_PACKAGES",
|
||||
"default_value": "",
|
||||
"user_viewable": false,
|
||||
"user_editable": true,
|
||||
"rules": "string|nullable",
|
||||
"field_type": "text"
|
||||
},
|
||||
{
|
||||
"name": "Startup Flags",
|
||||
"description": "Start the bot with additional Open Ticket flags. Separate using spaces.\r\nA full reference list can be found in the documentation.",
|
||||
"env_variable": "NODE_FLAGS",
|
||||
"default_value": "",
|
||||
"user_viewable": false,
|
||||
"user_editable": true,
|
||||
"rules": "string|nullable",
|
||||
"field_type": "text"
|
||||
},
|
||||
{
|
||||
"name": "Uninstall Npm Packages",
|
||||
"description": "A list of npm packages to uninstall. Separate by spaces.",
|
||||
"env_variable": "UNNODE_PACKAGES",
|
||||
"default_value": "",
|
||||
"user_viewable": false,
|
||||
"user_editable": true,
|
||||
"rules": "string|nullable",
|
||||
"field_type": "text"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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.7)",
|
||||
"author": "support@dj-dj.be",
|
||||
"description": "This is the official Pterodactyl egg for Open Ticket v4.0.7, 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.7)\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.7\"\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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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.1.0)",
|
||||
"author": "support@dj-dj.be",
|
||||
"description": "This is the official Pterodactyl egg for Open Ticket v4.1.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.1.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.1.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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
# Contributing Guidelines
|
||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
||||
|
||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.2) [](https://github.com/sponsors/DJj123dj)
|
||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.1.0) [](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>
|
||||
@@ -87,6 +87,6 @@ you are **REQUIRED to send the bug privately via one of the following methods:**
|
||||
<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>
|
||||
[Changelog](https://otgithub.dj-dj.be/releases) - [Documentation](https://otdocs.dj-dj.be) - [Website](https://openticket.dj-dj.be) - [Support Server](https://discord.dj-dj.be) - [License](./LICENSE.md)<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)
|
||||
© 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)
|
||||
+14
-12
@@ -1,7 +1,7 @@
|
||||
# Security Policy
|
||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
||||
|
||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.1) [](https://github.com/sponsors/DJj123dj)
|
||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.4) [](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>
|
||||
@@ -17,15 +17,17 @@ This list will be updated on every release.
|
||||
- 🟧 Deprecated **(docs)**
|
||||
- ❌ Fully Deprecated
|
||||
|
||||
| Version | Supported | Notes |
|
||||
|------------|-----------|--------------------------------|
|
||||
| 4.1.0 | 🟦 | |
|
||||
| 4.0.2 | ✅ | |
|
||||
| 4.0.1 | ✅ | |
|
||||
| 4.0.0 | ✅ | |
|
||||
| 3.5.9 | 🚧 | Supported until May 2025 (LTS) |
|
||||
| 3.5.8 | 🟧 | Documentation Only |
|
||||
| < 3.5.8 | ❌ | |
|
||||
| Version | Supported | Notes |
|
||||
|------------|-----------|---------------------------------------------------------------|
|
||||
| 4.2.0 | 🟦 | Transcripts v2.0 will be taken offline when v4.2 is released. |
|
||||
| 4.1.1 | 🟦 | |
|
||||
| 4.1.0 | ✅ | |
|
||||
| 4.0.7 | ✅ | Supported Until October 2025 (LTS) |
|
||||
| 4.0.6 | 🚧 | |
|
||||
| 4.0.5 | 🚧 | |
|
||||
| 4.0.4 | 🚧 | |
|
||||
| < 4.0.4 | 🟧 | Deprecated Transcripts v2.0, Documentation Only |
|
||||
| < 4.0.0 | ❌ | |
|
||||
|
||||
### 🕷️ Reporting Vulnerabilities
|
||||
You can report vulnerabilities, errors & bugs using one of the following methods:
|
||||
@@ -45,6 +47,6 @@ If possible, try to provide screenshots!
|
||||
<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>
|
||||
[Changelog](https://otgithub.dj-dj.be/releases) - [Documentation](https://otdocs.dj-dj.be) - [Website](https://openticket.dj-dj.be) - [Support Server](https://discord.dj-dj.be) - [License](./LICENSE.md)<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)
|
||||
© 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)
|
||||
@@ -19,4 +19,5 @@ otdebug.txt
|
||||
|
||||
.docs/*
|
||||
!.docs/createDocs.js
|
||||
!.docs/mergeTranslations.js
|
||||
!.docs/typedoc-config.json
|
||||
+25
-2
@@ -1,6 +1,12 @@
|
||||
<!-- omit from toc -->
|
||||
# Open Ticket (License)
|
||||
© 2025 - DJj123dj & Contributors
|
||||
|
||||
#### Table Of Contents
|
||||
- [General License](#general-license)
|
||||
- [Additional Terms for Open Ticket](#additional-terms-for-open-ticket)
|
||||
|
||||
### General License
|
||||
```
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
@@ -679,11 +685,28 @@ Public License instead of this License. But first, please read
|
||||
```
|
||||
|
||||
### Additional Terms for Open Ticket
|
||||
#### Terminology:
|
||||
1. **“Software”**
|
||||
Refers to the Open Ticket source code, documentation, and any associated files distributed under this license, including any modifications or derivative works thereof.
|
||||
|
||||
1. **“Public Discord Bot**
|
||||
A Discord bot that is made publicly available for use by multiple, unrelated Discord servers or users, where the bot’s functionality is provided as a service rather than for private or personal use.
|
||||
|
||||
1. **“Monetized Service”**
|
||||
Refers to any service or deployment that generates direct or indirect revenue through the use of the Software. This includes, but is not limited to, subscriptions, premium features, paid hosting, advertisements.
|
||||
|
||||
1. **“For-Profit Discord Server”**
|
||||
Means a Discord server that generates income, revenue, or other material benefits, whether through memberships, donations, or other monetization strategies.
|
||||
|
||||
1. **“Private Use”**
|
||||
Refers to using the Software on a limited number of Discord servers controlled or operated by a single individual or organization, not made available as a public service to multiple unrelated users.
|
||||
|
||||
#### Additional Terms:
|
||||
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.
|
||||
1. This software may not be used as (or part of) a public Discord bot 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.
|
||||
2. This software may not be used as (or part of) a public Discord bot 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.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
> ### 🎥 Content Creators 🎥
|
||||
> Hey there! We're searching for content creators that would want to create a tutorial or setup guide for Open Ticket!<br>
|
||||
> ### 🎥 Content Creators
|
||||
> Hey there! We're searching for content creators that would like to create a tutorial or setup guide for Open Ticket!<br>
|
||||
> [📌 More Information](.github/CONTENT_CREATORS.md)
|
||||
---
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<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.2"><img alt="Open Ticket Version" src="https://img.shields.io/badge/version-4.0.2-brightgreen.svg?style=flat-square"></img></a>
|
||||
<a href="https://github.com/open-discord-bots/open-ticket/releases/tag/v4.1.0"><img alt="Open Ticket Version" src="https://img.shields.io/badge/version-4.1.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>
|
||||
@@ -19,48 +19,50 @@
|
||||
</p>
|
||||
|
||||
<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>27 Languages</code>! If you need any help, feel free to join our <a href="https://discord.dj-dj.be">discord server</a>!
|
||||
Open Ticket is the most advanced & customisable discord ticket bot available! You are able to customise up to 300+ settings and aspects! This includes <code>Html Transcripts</code>, <code>Advanced Plugins</code>, <code>Custom Embeds</code>, <code>Questions/Modals</code>, <code>Stats</code> & more!
|
||||
The bot is translated in more than <code>36 Languages</code> and has been battle tested in large Discord servers! 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>
|
||||
<h3 align="center"><b>⭐️ Help us grow by giving a star! ⭐️</b></h3>
|
||||
|
||||
### 📌 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 battletested by thousands of servers and is very secure!
|
||||
- **📈 scalable** - Open Ticket is made to handle huge servers! (Already tested in **servers with 100k members**)
|
||||
- **📄 HTML transcripts** - Make use of the most customisable, beautiful and easy-to-use HTML Transcripts!
|
||||
- **✅ ticket actions** - Close, Reopen, Delete, Claim, Pin, Rename & Move all your tickets!
|
||||
- **🇬🇧 translation** - Open Ticket has been translated in more than **27 languages** by our community!
|
||||
- **🎨 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!
|
||||
- **⏳ Quick Setup** - Using the interactive Quick Setup CLI, you can **configure Open Ticket in less than 5min!**
|
||||
- **🦇 Pterodactyl Support** - Open Ticket works perfect on Pterodactyl based panels. [(Download official eggs)](.eggs/README.md)
|
||||
- **💩 No Credits** - Your bot won't contain any form of bloat or credits. It's all yours!
|
||||
- **🔒 Private & Secure** - It has been battletested by thousands of servers and **respects security & privacy.**
|
||||
- **📈 Scalable** - Made to handle huge servers and has already been **tested in servers with 100k members.**
|
||||
- **📄 HTML Transcripts** - The **built-in HTML Transcripts Service** provides beautiful & easy-to-use transcripts.
|
||||
- **✅ Ticket Status** - Close, reopen, delete, claim, pin, rename or move tickets in your server.
|
||||
- **🇬🇧 Translation** - Every message has been translated in more than **36 languages** by our community.
|
||||
- **🎨 Customisation** - More than **200+ settings** are related to customisation & advanced features.
|
||||
- **🖥️ Interactions** - The bot has full support for buttons, dropdowns, slash/text commands & modals.
|
||||
- **∞ Unlimited Possibilities** - Create an infinite amount of tickets, questions & panels.
|
||||
- **📝 Advanced Plugins** - Create advanced plugins or use [**pre-made plugins**](#-plugins) by our community.
|
||||
- **👥 Participants** - Add or remove participants & transfer ownership from one user to another.
|
||||
- **📊 Detailed Statistics** - With more than **50+ statistics** for tickets, users & the server.
|
||||
- **🚫 Blacklist** - Blacklist users to prevent them from creating new tickets.
|
||||
- **🚨 Priorities** - Assign different **priority levels** to tickets to mark them as important.
|
||||
- **❓ Modal Questions** - Give users the ability to **answer questions** in a modal before their ticket is created.
|
||||
- **✨ Commands** - Manage all your tickets with more than 28+ commands.
|
||||
- **🤖 Automation** - Automate ticket handling with **autoclose, autodelete** & slow mode.
|
||||
- **😎 Additional Features** - For some weird reason, the bot also supports Reaction Role & URL Buttons.
|
||||
|
||||
#### 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 even more using [pre-made community plugins](#-plugins)!
|
||||
- **💬 Reviews** - Create & manage a support review system.
|
||||
- **📢 Feedback** - Collect feedback & create forms for users to answer.
|
||||
- **⏰ Reminders** - Create & manage customisable reminders.
|
||||
- **🏷️ Tags** - Create tags & answer questions automatically using keywords.
|
||||
- **📝 Forms** - Create advanced forms and automatically ask for repetitive questions.
|
||||
- **🔄 Channel Display** - Create a voice channel with realtime statistics from the ticket system.
|
||||
- **💾 SQLite Database** - Use an `SQLite` database for increased performance.
|
||||
- **🎉 Custom Embeds** - Create your own embeds and send them using a command.
|
||||
- **🎨 Customisation** - Yep, you heard it right. Even more customisation!
|
||||
- **😁 And so much more...**
|
||||
|
||||
> ### 📦 Resources
|
||||
> Not all resources are accurate yet! We are working on this.<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://openticket.dj-dj.be/message.html?msg=The%20current%20tutorial%20is%20outdated,%20we%27re%20still%20working%20on%20a%20new%20one!"><img src="https://apis.dj-dj.be/cdn/openticket/open-ticket-docs.png" alt="Open Ticket Docs" width="180px"></a>
|
||||
> These resources will help with configuration and usage of the bot:<br>
|
||||
> <!--<a href="https://openticket.dj-dj.be/message.html?msg=The%20current%20tutorial%20is%20outdated,%20we%27re%20still%20working%20on%20a%20new%20one!"><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>
|
||||
|
||||
### ❤️ Sponsors
|
||||
@@ -68,10 +70,10 @@ A big thanks to all our sponsors! Without them, it wouldn't be possible to creat
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="https://github.com/roppl3r.png" alt="Profile Picture" width="100px"></td>
|
||||
<td><img src="https://github.com/guillee3.png" alt="Profile Picture" width="100px"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/roppl3r"><b>roppl3r</b></a></td>
|
||||
<td align="center"><a href="https://github.com/guillee3"><b>guillee3</b></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -83,16 +85,23 @@ A big thanks to all our sponsors! Without them, it wouldn't be possible to creat
|
||||
<img src="https://github.com/BENZORICH.png" alt="BENZORICH" width="40px">
|
||||
</a>
|
||||
|
||||
### ⏱️ Quick Setup
|
||||
### ⏱️ Quick Setup (Using CLI)
|
||||
> 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`).
|
||||
> 2. Make sure node.js & npm are installed using `node -v` (minimum `v20`).
|
||||
> 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`
|
||||
> 4. Start the **Quick Setup CLI** using `npm run setup`.
|
||||
> 5. Click on `> ⏱️ Quick Setup` and follow the instructions.
|
||||
> 6. 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!
|
||||
> 7. Enjoy using Open Ticket!
|
||||
> ### [📔 Visit Documentation](https://otdocs.dj-dj.be)
|
||||
>
|
||||
> ### 🖥️ Recommended Hostings
|
||||
> - **Any Pterodactyl-Based Panel** - Easy installation & configuration.
|
||||
> - **A Virtual Private Server (VPS)** - Extra customisation & more stability. Recommended for large servers.
|
||||
>
|
||||
> *❤️ Want to display your hosting here? Contact us in our [Discord server](https://discord.dj-dj.be)!*
|
||||
|
||||
## 📸 Preview
|
||||
<img alt="An example of a panel." src="https://apis.dj-dj.be/cdn/openticket/preview-v4/panel-examples.png">
|
||||
@@ -108,61 +117,69 @@ A list of people that contributed or provided the most support for Open Ticket.
|
||||
<td align="center"><img src="https://github.com/smetsliam.png" alt="Profile Picture" width="80px"></td>
|
||||
<td align="center"><img src="https://github.com/FrankVissers.png" alt="Profile Picture" width="80px"></td>
|
||||
<td align="center"><img src="https://github.com/Sank34.png" alt="Profile Picture" width="80px"></td>
|
||||
<td align="center"><img src="https://github.com/Roppl3r.png" alt="Profile Picture" width="80px"></td>
|
||||
<td align="center"><img src="https://github.com/guillee3.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/smetsliam">💬 smetsliam</a></th>
|
||||
<th><a href="https://github.com/FrankVissers">💬 Frank Vissers</a></th>
|
||||
<th><a href="https://github.com/Sank34">💬 Sanke</a></th>
|
||||
<th><a href="https://github.com/Roppl3r">🧩 Roppl3r</a></th>
|
||||
<th><a href="https://github.com/guillee3">🧩 Guillee3</a></th>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 💬 Translators
|
||||
Without our translators, it wouldn't be possible to translate Open Ticket in so many languages!
|
||||
- 🟢 Available - 🤖 Made Using AI - 🔴 Unavailable/Outdated
|
||||
With the amazing support of our translators, we've been able to translate Open Ticket in more than **36 languages**!
|
||||
#### Categories:
|
||||
- **🟢 Available**
|
||||
- **⏳ In Progress (Incomplete)**
|
||||
- **🤖 Made Using AI**
|
||||
- **🟠 Incomplete**
|
||||
- **🔴 Unavailable/Outdated**
|
||||
|
||||
|🔍 |Language |Maintainer (Github/Discord) |
|
||||
|---|---------------------|----------------------------|
|
||||
|🟢 |🇬🇧 English |djj123dj |
|
||||
|🟢 |🇳🇱 Dutch |djj123dj |
|
||||
|🟢 |🇩🇪 German |benzorich |
|
||||
|🟢 |🇪🇸 Spanish |redactado & josuens |
|
||||
|🟢 |🇵🇹 Portuguese |quiradon |
|
||||
|🟢 |❓ Catalan |guillee3 |
|
||||
|🟢 |🇨🇿 Czech |spyeye_ |
|
||||
|🟢 |🇭🇺 Hungarian |kornel0706 |
|
||||
|🟢 |🇷🇴 Romanian |sankedev |
|
||||
|🟢 |🇺🇦 Ukrainian |anderskiy |
|
||||
|🟢 |🇮🇩 Indonesian |erxg |
|
||||
|🟢 |🇮🇹 Italian |fraden1mvp. |
|
||||
|🟢 |🇩🇰 Danish |the_gamer |
|
||||
|🟢 |🇹🇭 Thai |modshd |
|
||||
|🟢 |🇹🇷 Turkish |palestinian |
|
||||
|🟢 |🇫🇷 French |guillee.3 |
|
||||
|🟢 |🇦🇪 Arabic |palestinian |
|
||||
|🟢 |🇮🇳 Hindi |an_developer |
|
||||
|🟢 |🇱🇹 Lithuanian |tsgindrius |
|
||||
|🟢 |🇵🇱 Polish |danoglez |
|
||||
|🟢 |🇳🇴 Norwegian |NoOneNook |
|
||||
|🟢 |🇸🇪 Swedish |NoOneNook |
|
||||
|🤖 |🇪🇪 Estonian |iamnotmega |
|
||||
|🤖 |🇫🇮 Finnish |iamnotmega |
|
||||
|🤖 |🇷🇺 Russian |NoOneNook |
|
||||
|🤖 |🇱🇻 Latvian |NoOneNook |
|
||||
|🤖 |🇻🇳 Vietnamese |ngocdiep2006 |
|
||||
|🔴 |🇯🇵 Japanese |[⭐ Contribute!](.github/CONTRIBUTING.md)|
|
||||
|🔴 |🇰🇷 Korean |[⭐ Contribute!](.github/CONTRIBUTING.md)|
|
||||
|🔴 |🇨🇳 Simplified Chinese |[⭐ Contribute!](.github/CONTRIBUTING.md)|
|
||||
|🔴 |🇨🇳 Traditional Chinese|[⭐ Contribute!](.github/CONTRIBUTING.md)|
|
||||
|🔴 |🇸🇮 Slovenian |[⭐ Contribute!](.github/CONTRIBUTING.md)|
|
||||
|🔴 |🇬🇷 Greek |[⭐ Contribute!](.github/CONTRIBUTING.md)|
|
||||
|🔴 |❓ Kurdish |[⭐ Contribute!](.github/CONTRIBUTING.md)|
|
||||
|🔴 |❓ Persian |[⭐ Contribute!](.github/CONTRIBUTING.md)|
|
||||
|🔍 |Languages (36) |Maintainer (Github/Discord) |
|
||||
|----|---------------------|--------------------------------|
|
||||
|🟢 |🇬🇧 English |djj123dj |
|
||||
|🟢 |🇳🇱 Dutch |djj123dj |
|
||||
|🟢 |❓ Catalan |guillee3 |
|
||||
|🟢 |🇮🇩 Indonesian |erxg |
|
||||
|🟢 |🇮🇳 Hindi |challenger_nova |
|
||||
|🟢⏳ |🇩🇪 German |benzorich |
|
||||
|🟢⏳ |🇪🇸 Spanish |redactado & josuens |
|
||||
|🟢⏳ |🇫🇷 French |guillee.3 |
|
||||
|🟢⏳ |🇵🇹 Portuguese |quiradon |
|
||||
|🟢⏳ |🇨🇿 Czech |spyeye_ |
|
||||
|🟢⏳ |🇭🇺 Hungarian |kornel0706 |
|
||||
|🟢⏳ |🇷🇴 Romanian |sankedev |
|
||||
|🟢⏳ |🇺🇦 Ukrainian |anderskiy |
|
||||
|🟢⏳ |🇮🇹 Italian |fraden1mvp. |
|
||||
|🟢⏳ |🇩🇰 Danish |the_gamer |
|
||||
|🟢⏳ |🇹🇭 Thai |modshd |
|
||||
|🟢⏳ |🇹🇷 Turkish |palestinian |
|
||||
|🟢⏳ |🇦🇪 Arabic |palestinian |
|
||||
|🟢⏳ |🇱🇹 Lithuanian |tsgindrius |
|
||||
|🟢⏳ |🇵🇱 Polish |danoglez |
|
||||
|🟢⏳ |🇳🇴 Norwegian |NoOneNook |
|
||||
|🟢⏳ |🇸🇪 Swedish |NoOneNook |
|
||||
|🟢⏳ |🇮🇷 Persian |dysashop & zhavis |
|
||||
|🟢⏳ |🇧🇩 Bengali |HanumeshGupta |
|
||||
|🤖 |🇪🇪 Estonian |iamnotmega |
|
||||
|🤖 |🇫🇮 Finnish |iamnotmega |
|
||||
|🤖⏳ |🇷🇺 Russian |NoOneNook |
|
||||
|🤖⏳ |🇱🇻 Latvian |NoOneNook |
|
||||
|🤖⏳ |🇻🇳 Vietnamese |ngocdiep2006 |
|
||||
|🤖⏳ |🇯🇵 Japanese |HanumeshGupta |
|
||||
|🤖⏳ |🇬🇷 Greek |HanumeshGupta |
|
||||
|🤖⏳ |🇸🇮 Slovenian |HanumeshGupta |
|
||||
|🤖⏳ |🇰🇷 Korean |HanumeshGupta |
|
||||
|🤖⏳ |🇮🇳 Tamil |HanumeshGupta |
|
||||
|🤖⏳ |🇨🇳 Simplified Chinese |HanumeshGupta |
|
||||
|🤖⏳ |❓ Kurdish |HanumeshGupta |
|
||||
|🔴 |🇨🇳 Traditional Chinese|[⭐ Contribute!](.github/CONTRIBUTING.md)|
|
||||
<!--[⭐ Contribute!](.github/CONTRIBUTING.md) -->
|
||||
|
||||
## ⭐️ Star History
|
||||
Please give this repository a star if you like it.
|
||||
If you enjoy using Open ticket, **consider starring** this repository.
|
||||
This will help us grow and reach even more people!
|
||||
|
||||
<a href="https://star-history.com/#open-discord-bots/open-ticket&Date">
|
||||
@@ -174,13 +191,21 @@ This will help us grow and reach even more people!
|
||||
</a>
|
||||
|
||||
## 🧩 Plugins
|
||||
**Download all plugins in our [Official Plugin Repository](https://github.com/open-discord-bots/plugins)!**<br>
|
||||
**Download all plugins from 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/)**
|
||||
> [`ot-tags`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-tags/),
|
||||
> [`ot-config-reload`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-config-reload/)**
|
||||
|
||||
#### 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 utility systems. You might not notice them as a ticket user/admin directly.
|
||||
- **🎨 Customisation** - These plugins add even more customisation to the bot.
|
||||
- **💼 Management** - These plugins add features that help you manage your server or ticket system.
|
||||
- **🤖 Client** - These plugins add features affecting the Discord Client or bot itself.
|
||||
|
||||
### 📦 Official *(made by DJdj Development)*
|
||||
|Name |Category |Description |
|
||||
@@ -217,18 +242,10 @@ This will help us grow and reach even more people!
|
||||
|[`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. |
|
||||
|
||||
### 📢 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.
|
||||
|
||||
---
|
||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="170px">
|
||||
|
||||
**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 server](https://discord.dj-dj.be) - [license](./LICENSE.md)<br>
|
||||
[Changelog](https://otgithub.dj-dj.be/releases) - [Documentation](https://otdocs.dj-dj.be) - [Website](https://openticket.dj-dj.be) - [Support Server](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)
|
||||
|
||||
+51
-21
@@ -2,10 +2,10 @@
|
||||
"_INFO":{
|
||||
"support":"https://otdocs.dj-dj.be",
|
||||
"discord":"https://discord.dj-dj.be",
|
||||
"version":"open-ticket-v4.0.2"
|
||||
"version":"open-ticket-v4.1.0"
|
||||
},
|
||||
|
||||
"token":"your bot token here! (or leave empty when using 'tokenFromENV')",
|
||||
"token":"insert your bot token here! (or leave empty when using 'tokenFromENV')",
|
||||
"tokenFromENV":false,
|
||||
|
||||
"mainColor":"#f8ba00",
|
||||
@@ -20,21 +20,34 @@
|
||||
"status":{
|
||||
"enabled":true,
|
||||
"type":"listening OR watching OR playing OR custom",
|
||||
"mode":"online OR invisible OR idle OR dnd",
|
||||
"text":"/help",
|
||||
"status":"online OR invisible OR idle OR dnd"
|
||||
"state":"(additional text or leave empty)"
|
||||
},
|
||||
|
||||
"system":{
|
||||
"removeParticipantsOnClose":false,
|
||||
"replyOnTicketCreation":true,
|
||||
"replyOnReactionRole":true,
|
||||
"useTranslatedConfigChecker":true,
|
||||
"preferSlashOverText":true,
|
||||
"sendErrorOnUnknownCommand":true,
|
||||
"questionFieldsInCodeBlock":true,
|
||||
"displayFieldsWithQuestions":false,
|
||||
"showGlobalAdminsInPanelRoles":false,
|
||||
"disableVerifyBars":false,
|
||||
"useRedErrorEmbeds":true,
|
||||
"alwaysShowReason":false,
|
||||
"emojiStyle":"before (OR after OR double OR disabled)",
|
||||
"pinEmoji":"📌",
|
||||
|
||||
"replyOnTicketCreation":true,
|
||||
"replyOnReactionRole":true,
|
||||
"askPriorityOnTicketCreation":false,
|
||||
"removeParticipantsOnClose":false,
|
||||
"disableAutocloseAfterReopen":true,
|
||||
"autodeleteRequiresClosedTicket":true,
|
||||
"adminOnlyDeleteWithoutTranscript":true,
|
||||
"allowCloseBeforeMessage":false,
|
||||
"allowCloseBeforeAdminMessage":true,
|
||||
"useTranslatedConfigChecker":true,
|
||||
"pinFirstTicketMessage":false,
|
||||
|
||||
"enableTicketClaimButtons":true,
|
||||
"enableTicketCloseButtons":true,
|
||||
@@ -54,6 +67,18 @@
|
||||
"userMaximum":3
|
||||
},
|
||||
|
||||
"channelTopic":{
|
||||
"showOptionName":true,
|
||||
"showOptionDescription":false,
|
||||
"showOptionTopic":true,
|
||||
"showPriority":false,
|
||||
"showClosed":true,
|
||||
"showClaimed":false,
|
||||
"showPinned":false,
|
||||
"showCreator":false,
|
||||
"showParticipants":false
|
||||
},
|
||||
|
||||
"permissions":{
|
||||
"help":"everyone (OR admin OR none OR role id)",
|
||||
"panel":"admin (OR everyone OR none OR role id)",
|
||||
@@ -73,23 +98,28 @@
|
||||
"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)"
|
||||
"autodelete":"admin (OR everyone OR none OR role id)",
|
||||
"transfer":"admin (OR everyone OR none OR role id)",
|
||||
"topic":"admin (OR everyone OR none OR role id)",
|
||||
"priority":"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}
|
||||
"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},
|
||||
"transferring":{"dm":false,"logs":true},
|
||||
"topicChange":{"dm":false,"logs":true},
|
||||
"priorityChange":{"dm":false,"logs":true},
|
||||
"reactionRole":{"dm":false,"logs":true}
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
-1
@@ -25,7 +25,7 @@
|
||||
"claimedCategory":[
|
||||
{"user":"user id","category":"category id"}
|
||||
],
|
||||
"description":"This is a question ticket (or leave empty)"
|
||||
"topic":"This is the topic of this ticket channel and is visible to everyone! (or leave empty)"
|
||||
},
|
||||
|
||||
"dmMessage":{
|
||||
@@ -87,6 +87,10 @@
|
||||
"enabled":false,
|
||||
"globalMaximum":20,
|
||||
"userMaximum":3
|
||||
},
|
||||
"slowMode":{
|
||||
"enabled":false,
|
||||
"slowModeSeconds":20
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@
|
||||
"image":"https://www.example.com/image.png (or leave empty)",
|
||||
"thumbnail":"https://www.example.com/image.png (or leave empty)",
|
||||
|
||||
"footer":"Open Ticket v4.0.2 (or leave empty)",
|
||||
"footer":"Open Ticket v4.1.0 (or leave empty)",
|
||||
"fields":[
|
||||
{"name":"field name","value":"field value","inline":false}
|
||||
],
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
},
|
||||
"favicon":{
|
||||
"enableCustomFavicon":false,
|
||||
"imageUrl":"https://transcripts.dj-dj.be/favicon.png"
|
||||
"imageUrl":"https://t.dj-dj.be/favicon.png"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ process.argv.push(...flags)
|
||||
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║
|
||||
╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║
|
||||
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝
|
||||
v4.0.2 - Made by DJj123dj & Contributors
|
||||
v4.1.0 - Made by DJj123dj & Contributors
|
||||
|
||||
Discord: https://discord.dj-dj.be
|
||||
Docs: https://otdocs.dj-dj.be
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION": {
|
||||
"otversion": "v4.0.2",
|
||||
"otversion": "v4.1.0",
|
||||
"translators": ["palestinian"],
|
||||
"lastedited": "06/12/2024",
|
||||
"language": "Arabic",
|
||||
|
||||
@@ -0,0 +1,478 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["HanumeshGupta"],
|
||||
"lastedited":"19/06/2025",
|
||||
"language":"Bengali",
|
||||
"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} আইডি! আপনি এগুলির মধ্যে একটি ব্যবহার করতে পারেন: {1}!",
|
||||
"discordInvalidToken": "এটি একটি অবৈধ ডিসকর্ড টোকেন (বাক্য গঠনগতভাবে)!",
|
||||
"colorInvalid": "এটি একটি অবৈধ হেক্স রঙ!",
|
||||
"emojiTooShort": "এই স্ট্রিংটিতে কমপক্ষে {0} ইমোজি থাকতে হবে!",
|
||||
"emojiTooLong": "এই স্ট্রিংটিতে সর্বাধিক {0} ইমোজি থাকতে পারে!",
|
||||
"emojiCustom": "এই ইমোজিটি একটি কাস্টম ডিসকর্ড ইমোজি হতে পারে না!",
|
||||
"emojiInvalid": "এটি একটি অবৈধ ইমোজি!",
|
||||
"urlInvalid": "এই URL টি অবৈধ!",
|
||||
"urlInvalidHttp": "এই URL টি শুধুমাত্র https:// প্রোটোকল ব্যবহার করতে পারে!",
|
||||
"urlInvalidProtocol": "এই URL টি শুধুমাত্র http:// এবং https:// প্রোটোকল ব্যবহার করতে পারে!",
|
||||
"urlInvalidHostname": "এই URL টির একটি অননুমোদিত হোস্টনেম আছে!",
|
||||
"urlInvalidExtension": "এই URL টির একটি অবৈধ এক্সটেনশন আছে! নিম্নলিখিতগুলির মধ্যে选择一个: {0}!",
|
||||
"urlInvalidPath": "এই URL টির একটি অবৈধ পথ আছে!",
|
||||
"idNotUnique": "এই আইডিটি অনন্য নয়, পরিবর্তে অন্য একটি আইডি ব্যবহার করুন!",
|
||||
"idNonExistent": "আইডি {0} বিদ্যমান নেই!",
|
||||
|
||||
"invalidType": "এই প্রপার্টিটির ধরন হতে হবে: {0}!",
|
||||
"propertyMissing": "এই অবজেক্টে {0} প্রপার্টিটি অনুপস্থিত!",
|
||||
"propertyOptional": "এই অবজেক্টে {0} প্রপার্টিটি ঐচ্ছিক!",
|
||||
"objectDisabled": "এই অবজেক্টটি নিষ্ক্রিয়, {0} ব্যবহার করে এটি সক্রিয় করুন!",
|
||||
"nullInvalid": "এই প্রপার্টিটি null হতে পারে না!",
|
||||
"switchInvalidType": "এটি নিম্নলিখিত ধরনগুলির একটি হতে হবে: {0}!",
|
||||
"objectSwitchInvalid": "এই অবজেক্টটি নিম্নলিখিত ধরনগুলির একটি হতে হবে: {0}!",
|
||||
|
||||
"invalidLanguage": "এটি একটি অবৈধ ভাষা!",
|
||||
"invalidButton": "এই বাটনটিতে কমপক্ষে একটি {0} বা {1} থাকতে হবে!",
|
||||
"unusedOption": "অপশন {0} কোথাও ব্যবহার করা হয়নি!",
|
||||
"unusedQuestion": "প্রশ্ন {0} কোথাও ব্যবহার করা হয়নি!",
|
||||
"dropdownOption": "ড্রপডাউন সক্রিয় থাকা একটি প্যানেল শুধুমাত্র 'টিকেট' টাইপের অপশন ধারণ করতে পারে!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
"buttons":{
|
||||
"create": "টিকেট দেখুন",
|
||||
"close": "টিকেট বন্ধ করুন",
|
||||
"delete": "টিকেট মুছুন",
|
||||
"reopen": "টিকেট পুনরায় খুলুন",
|
||||
"claim": "টিকেট দাবি করুন",
|
||||
"unclaim": "টিকেট দাবি ত্যাগ করুন",
|
||||
"pin": "টিকেট পিন করুন",
|
||||
"unpin": "টিকেট আনপিন করুন",
|
||||
"clear": "টিকেট মুছুন",
|
||||
"helpSwitchSlash": "স্ল্যাশ কমান্ড দেখুন",
|
||||
"helpSwitchText": "টেক্সট কমান্ড দেখুন",
|
||||
"helpPage": "পৃষ্ঠা {0}",
|
||||
"withReason": "কারণ সহ",
|
||||
"withoutTranscript": "ট্রান্সক্রিপ্ট ছাড়া"
|
||||
},
|
||||
"titles": {
|
||||
"created": "টিকেট তৈরি হয়েছে",
|
||||
"close": "টিকেট বন্ধ হয়েছে",
|
||||
"delete": "টিকেট মুছে ফেলা হয়েছে",
|
||||
"reopen": "টিকেট পুনরায় খোলা হয়েছে",
|
||||
"claim": "টিকেট দাবি করা হয়েছে",
|
||||
"unclaim": "টিকেট দাবি ত্যাগ করা হয়েছে",
|
||||
"pin": "টিকেট পিন করা হয়েছে",
|
||||
"unpin": "টিকেট আনপিন করা হয়েছে",
|
||||
"rename": "টিকেটের নাম পরিবর্তন করা হয়েছে",
|
||||
"move": "টিকেট সরানো হয়েছে",
|
||||
"add": "টিকেটে ব্যবহারকারী যোগ করা হয়েছে",
|
||||
"remove": "টিকেট থেকে ব্যবহারকারী সরানো হয়েছে",
|
||||
|
||||
"help": "উপলব্ধ কমান্ড",
|
||||
"statsReset": "পরিসংখ্যান রিসেট",
|
||||
"blacklistAdd": "ব্যবহারকারী ব্ল্যাকলিস্টেড",
|
||||
"blacklistRemove": "ব্যবহারকারী মুক্তি পেয়েছে",
|
||||
"blacklistGet": "ব্ল্যাকলিস্টেড ব্যবহারকারী",
|
||||
"blacklistView": "বর্তমান ব্ল্যাকলিস্ট",
|
||||
"blacklistAddDm": "ব্ল্যাকলিস্টে যোগ করা হয়েছে",
|
||||
"blacklistRemoveDm": "ব্ল্যাকলিস্ট থেকে সরানো হয়েছে",
|
||||
"clear": "টিকেট সাফ করা হয়েছে",
|
||||
"roles": "ভূমিকা আপডেট করা হয়েছে",
|
||||
|
||||
"autoclose": "টিকেট স্বয়ংক্রিয়ভাবে বন্ধ হয়েছে",
|
||||
"autocloseEnabled": "স্বয়ংক্রিয় বন্ধ সক্রিয়",
|
||||
"autocloseDisabled": "স্বয়ংক্রিয় বন্ধ নিষ্ক্রিয়",
|
||||
"autodelete": "টিকেট স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়েছে",
|
||||
"autodeleteEnabled": "স্বয়ংক্রিয় মুছে ফেলা সক্রিয়",
|
||||
"autodeleteDisabled": "স্বয়ংক্রিয় মুছে ফেলা নিষ্ক্রিয়"
|
||||
},
|
||||
"descriptions":{
|
||||
"create": "আপনার টিকেট তৈরি করা হয়েছে। এটি অ্যাক্সেস করতে নীচের বাটনে ক্লিক করুন!",
|
||||
"close": "টিকেটটি সফলভাবে বন্ধ করা হয়েছে!",
|
||||
"delete": "টিকেটটি সফলভাবে মুছে ফেলা হয়েছে!",
|
||||
"reopen": "টিকেটটি সফলভাবে পুনরায় খোলা হয়েছে!",
|
||||
"claim": "টিকেটটি সফলভাবে দাবি করা হয়েছে!",
|
||||
"unclaim": "টিকেটটি সফলভাবে দাবি ত্যাগ করা হয়েছে!",
|
||||
"pin": "টিকেটটি সফলভাবে পিন করা হয়েছে!",
|
||||
"unpin": "টিকেটটি সফলভাবে আনপিন করা হয়েছে!",
|
||||
"rename": "টিকেটটির নাম সফলভাবে {0} এ পরিবর্তন করা হয়েছে!",
|
||||
"move": "টিকেটটি সফলভাবে {0} এ সরানো হয়েছে!",
|
||||
"add": "{0} কে সফলভাবে টিকেটে যোগ করা হয়েছে!",
|
||||
"remove": "{0} কে সফলভাবে টিকেট থেকে সরানো হয়েছে!",
|
||||
|
||||
"helpExplanation": "`<নাম>` => প্রয়োজনীয় প্যারামিটার\n`[নাম]` => ঐচ্ছিক প্যারামিটার",
|
||||
"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": "ডিসকর্ড রেটলিমিটের কারণে, বটের পক্ষে চ্যানেলের নাম পরিবর্তন করা বর্তমানে অসম্ভব। বট রিবুট না করা হলে চ্যানেলটি ১০ মিনিটের মধ্যে স্বয়ংক্রিয়ভাবে নাম পরিবর্তন করা হবে।",
|
||||
"channelRenameSource": "এই ত্রুটির উৎস হল: {0}",
|
||||
"busy": "এই {0} ব্যবহার করতে অক্ষম!\nটিকেটটি বর্তমানে বট দ্বারা প্রক্রিয়াধীন রয়েছে।\n\nঅনুগ্রহ করে কয়েক সেকেন্ড পর আবার চেষ্টা করুন!"
|
||||
},
|
||||
"optionInvalidReasons": {
|
||||
"stringRegex": "মান প্যাটার্নের সাথে মেলে না!",
|
||||
"stringMinLength": "মান কমপক্ষে {0} অক্ষর দীর্ঘ হতে হবে!",
|
||||
"stringMaxLength": "মান সর্বাধিক {0} অক্ষর দীর্ঘ হতে হবে!",
|
||||
"numberInvalid": "অবৈধ সংখ্যা!",
|
||||
"numberMin": "সংখ্যাটি কমপক্ষে {0} হতে হবে!",
|
||||
"numberMax": "সংখ্যাটি সর্বাধিক {0} হতে হবে!",
|
||||
"numberDecimal": "সংখ্যাটি দশমিক হতে পারবে না!",
|
||||
"numberNegative": "সংখ্যাটি ঋণাত্মক হতে পারবে না!",
|
||||
"numberPositive": "সংখ্যাটি ধনাত্মক হতে পারবে না!",
|
||||
"numberZero": "সংখ্যাটি শূন্য হতে পারবে না!",
|
||||
"channelNotFound": "চ্যানেল খুঁজে পাওয়া যায়নি!",
|
||||
"userNotFound": "ব্যবহারকারী খুঁজে পাওয়া যায়নি!",
|
||||
"roleNotFound": "রোল খুঁজে পাওয়া যায়নি!",
|
||||
"memberNotFound": "ব্যবহারকারী খুঁজে পাওয়া যায়নি!",
|
||||
"mentionableNotFound": "ব্যবহারকারী বা রোল খুঁজে পাওয়া যায়নি!",
|
||||
"channelType": "অবৈধ চ্যানেল টাইপ!",
|
||||
"notInGuild": "এই অপশনের জন্য আপনাকে একটি সার্ভারে থাকতে হবে!"
|
||||
},
|
||||
"permissions": {
|
||||
"developer": "আপনাকে বটের ডেভেলপার হতে হবে।",
|
||||
"owner": "আপনাকে সার্ভারের মালিক হতে হবে।",
|
||||
"admin": "আপনাকে সার্ভার অ্যাডমিন হতে হবে।",
|
||||
"moderator": "আপনাকে মডারেটর হতে হবে।",
|
||||
"support": "আপনাকে সাপোর্ট টিমে থাকতে হবে।",
|
||||
"member": "আপনাকে একজন সদস্য হতে হবে।",
|
||||
"discord-administrator": "আপনার `ADMINISTRATOR` অনুমতি থাকতে হবে।"
|
||||
},
|
||||
"actionInvalid": {
|
||||
"close": "টিকেট ইতিমধ্যেই বন্ধ!",
|
||||
"reopen": "টিকেট এখনো বন্ধ হয়নি!",
|
||||
"claim": "টিকেট ইতিমধ্যেই দাবি করা হয়েছে!",
|
||||
"unclaim": "টিকেট এখনো দাবি করা হয়নি!",
|
||||
"pin": "টিকেট ইতিমধ্যেই পিন করা হয়েছে!",
|
||||
"unpin": "টিকেট এখনো পিন করা হয়নি!",
|
||||
"add": "এই ব্যবহারকারী ইতিমধ্যেই টিকেট অ্যাক্সেস করতে পারছে!",
|
||||
"remove": "এই ব্যবহারকারীকে টিকেট থেকে সরাতে অক্ষম!"
|
||||
}
|
||||
},
|
||||
"params":{
|
||||
"uppercase":{
|
||||
"ticket": "টিকেট",
|
||||
"tickets": "টিকেটসমূহ",
|
||||
"reason": "কারণ",
|
||||
"creator": "নির্মাতা",
|
||||
"remaining": "অবশিষ্ট সময়",
|
||||
"added": "যোগ করা হয়েছে",
|
||||
"removed": "সরানো হয়েছে",
|
||||
"filter": "ফিল্টার",
|
||||
"claimedBy": "{0} দ্বারা দাবি করা হয়েছে",
|
||||
"method": "পদ্ধতি",
|
||||
"type": "ধরন",
|
||||
"blacklisted": "ব্ল্যাকলিস্টেড",
|
||||
"panel": "প্যানেল",
|
||||
"command": "কমান্ড",
|
||||
"system": "সিস্টেম",
|
||||
"true": "সত্য",
|
||||
"false": "মিথ্যা",
|
||||
"syntax": "সিনট্যাক্স",
|
||||
"originalName": "আসল নাম",
|
||||
"newName": "নতুন নাম",
|
||||
"until": "যতক্ষণ না",
|
||||
"validOptions": "বৈধ অপশনসমূহ",
|
||||
"validPanels": "বৈধ প্যানেলসমূহ",
|
||||
"autoclose": "স্বয়ংক্রিয় বন্ধ",
|
||||
"autodelete": "স্বয়ংক্রিয় মুছে ফেলা",
|
||||
"startupDate": "শুরু করার তারিখ",
|
||||
"version": "সংস্করণ",
|
||||
"name": "নাম",
|
||||
"role": "রোল",
|
||||
"status": "স্থিতি",
|
||||
"claimed": "দাবি করা হয়েছে",
|
||||
"pinned": "পিন করা হয়েছে",
|
||||
"creationDate": "তৈরির তারিখ"
|
||||
},
|
||||
"lowercase": {
|
||||
"text": "টেক্সট",
|
||||
"html": "এইচটিএমএল",
|
||||
"command": "কমান্ড",
|
||||
"modal": "মোডাল",
|
||||
"button": "বাটন",
|
||||
"dropdown": "ড্রপডাউন",
|
||||
"method": "পদ্ধতি"
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"reason": "একটি ঐচ্ছিক কারণ উল্লেখ করুন যা লগে দৃশ্যমান হবে।",
|
||||
"help": "সমস্ত উপলব্ধ কমান্ডের তালিকা পান।",
|
||||
"panel": "একটি ড্রপডাউন বা বাটন সহ একটি বার্তা তৈরি করুন (টিকেট তৈরির জন্য)।",
|
||||
"panelId": "আপনি যে প্যানেল তৈরি করতে চান তার আইডেন্টিফায়ার।",
|
||||
"panelAutoUpdate": "আপনি কি এই প্যানেলটিকে সম্পাদনা করার সময় স্বয়ংক্রিয়ভাবে আপডেট করতে চান?",
|
||||
"ticket": "তাৎক্ষণিকভাবে একটি টিকেট তৈরি করুন।",
|
||||
"ticketId": "আপনি যে টিকেট তৈরি করতে চান তার আইডেন্টিফায়ার।",
|
||||
"close": "একটি টিকেট বন্ধ করুন।",
|
||||
"delete": "একটি টিকেট মুছুন।",
|
||||
"deleteNoTranscript": "ট্রান্সক্রিপ্ট তৈরি না করে এই টিকেটটি মুছুন।",
|
||||
"reopen": "একটি টিকেট পুনরায় খুলুন।",
|
||||
"claim": "একটি টিকেট দাবি করুন।",
|
||||
"claimUser": "নিজের পরিবর্তে অন্য কাউকে এই টিকেট দাবি করুন।",
|
||||
"unclaim": "একটি টিকেট দাবি ত্যাগ করুন।",
|
||||
"pin": "একটি টিকেট পিন করুন।",
|
||||
"unpin": "একটি টিকেট আনপিন করুন।",
|
||||
"move": "একটি টিকেট সরান।",
|
||||
"moveId": "আপনি যে অপশনে সরাতে চান তার আইডেন্টিফায়ার।",
|
||||
"rename": "একটি টিকেটের নাম পরিবর্তন করুন।",
|
||||
"renameName": "এই টিকেটের জন্য নতুন নাম।",
|
||||
"add": "একটি টিকেটে ব্যবহারকারী যোগ করুন।",
|
||||
"addUser": "যোগ করার ব্যবহারকারী।",
|
||||
"remove": "একটি টিকেট থেকে ব্যবহারকারী সরান।",
|
||||
"removeUser": "সরানোর ব্যবহারকারী।",
|
||||
"blacklist": "টিকেট ব্ল্যাকলিস্ট পরিচালনা করুন।",
|
||||
"blacklistView": "বর্তমান ব্ল্যাকলিস্টের তালিকা দেখুন।",
|
||||
"blacklistAdd": "ব্ল্যাকলিস্টে একজন ব্যবহারকারী যোগ করুন।",
|
||||
"blacklistRemove": "ব্ল্যাকলিস্ট থেকে একজন ব্যবহারকারী সরান।",
|
||||
"blacklistGet": "একজন ব্ল্যাকলিস্টেড ব্যবহারকারীর বিবরণ পান।",
|
||||
"blacklistGetUser": "বিবরণ পাওয়ার জন্য ব্যবহারকারী।",
|
||||
"stats": "বট, সদস্য বা টিকেটের পরিসংখ্যান দেখুন।",
|
||||
"statsReset": "বটের সমস্ত পরিসংখ্যান রিসেট করুন (এবং শূন্য থেকে গণনা শুরু করুন)।",
|
||||
"statsGlobal": "গ্লোবাল পরিসংখ্যান দেখুন।",
|
||||
"statsUser": "সার্ভারে একজন ব্যবহারকারীর পরিসংখ্যান দেখুন।",
|
||||
"statsUserUser": "দেখার জন্য ব্যবহারকারী।",
|
||||
"statsTicket": "সার্ভারে একটি টিকেটের পরিসংখ্যান দেখুন।",
|
||||
"statsTicketTicket": "দেখার জন্য টিকেট।",
|
||||
"clear": "একই সময়ে একাধিক টিকেট মুছুন।",
|
||||
"clearFilter": "টিকেট সাফ করার জন্য ফিল্টার।",
|
||||
"clearFilters": {
|
||||
"all": "সমস্ত",
|
||||
"open": "খোলা",
|
||||
"close": "বন্ধ",
|
||||
"claim": "দাবি করা",
|
||||
"unclaim": "দাবি ত্যাগ করা",
|
||||
"pin": "পিন করা",
|
||||
"unpin": "আনপিন করা",
|
||||
"autoclose": "স্বয়ংক্রিয় বন্ধ"
|
||||
},
|
||||
"autoclose": "একটি টিকেটে স্বয়ংক্রিয় বন্ধ পরিচালনা করুন।",
|
||||
"autocloseDisable": "এই টিকেটে স্বয়ংক্রিয় বন্ধ নিষ্ক্রিয় করুন।",
|
||||
"autocloseEnable": "এই টিকেটে স্বয়ংক্রিয় বন্ধ সক্রিয় করুন।",
|
||||
"autocloseEnableTime": "এই টিকেটটি বন্ধ করার জন্য কত ঘণ্টা নিষ্ক্রিয় থাকতে হবে।",
|
||||
"autodelete": "একটি টিকেটে স্বয়ংক্রিয় মুছে ফেলা পরিচালনা করুন।",
|
||||
"autodeleteDisable": "এই টিকেটে স্বয়ংক্রিয় মুছে ফেলা নিষ্ক্রিয় করুন।",
|
||||
"autodeleteEnable": "এই টিকেটে স্বয়ংক্রিয় মুছে ফেলা সক্রিয় করুন।",
|
||||
"autodeleteEnableTime": "এই টিকেটটি মুছে ফেলার জন্য কত দিন নিষ্ক্রিয় থাকতে হবে।"
|
||||
},
|
||||
"helpMenu": {
|
||||
"help": "সমস্ত উপলব্ধ কমান্ডের তালিকা পান।",
|
||||
"ticket": "তাৎক্ষণিকভাবে একটি টিকেট তৈরি করুন।",
|
||||
"close": "একটি টিকেট বন্ধ করুন, এটি এই চ্যানেলে লেখা নিষ্ক্রিয় করে।",
|
||||
"delete": "একটি টিকেট মুছুন, এটি সক্রিয় থাকলে একটি ট্রান্সক্রিপ্ট তৈরি করে।",
|
||||
"reopen": "একটি টিকেট পুনরায় খুলুন, এটি এই চ্যানেলে আবার লেখা সক্রিয় করে।",
|
||||
"pin": "একটি টিকেট পিন করুন। এটি টিকেটটি শীর্ষে নিয়ে যাবে এবং নামে একটি '📌' ইমোজি যোগ করবে।",
|
||||
"unpin": "একটি টিকেট আনপিন করুন। টিকেটটি তার অবস্থানে থাকবে কিন্তু '📌' ইমোজি হারাবে।",
|
||||
"move": "একটি টিকেট সরান। এটি এই টিকেটের ধরন পরিবর্তন করবে।",
|
||||
"rename": "একটি টিকেটের নাম পরিবর্তন করুন। এটি এই টিকেটের চ্যানেল নাম পরিবর্তন করবে。",
|
||||
"claim": "একটি টিকেট দাবি করুন। এর মাধ্যমে, আপনি আপনার টিমকে জানাতে পারেন যে আপনি এই টিকেটটি হ্যান্ডল করছেন।",
|
||||
"unclaim": "একটি টিকেট দাবি ত্যাগ করুন। এর মাধ্যমে, আপনি আপনার টিমকে জানাতে পারেন যে এই টিকেটটি এখন ফ্রি।",
|
||||
"add": "একটি টিকেটে ব্যবহারকারী যোগ করুন। এটি ব্যবহারকারীকে এই টিকেটে পড়তে এবং লিখতে অনুমতি দেবে।",
|
||||
"remove": "একটি টিকেট থেকে ব্যবহারকারী সরান। এটি একটি ব্যবহারকারীর জন্য এই টিকেটে পড়া এবং লেখার ক্ষমতা সরিয়ে দেবে।",
|
||||
"panel": "একটি ড্রপডাউন বা বাটন সহ একটি বার্তা তৈরি করুন (টিকেট তৈরির জন্য)।",
|
||||
"blacklistView": "বর্তমান ব্ল্যাকলিস্টের তালিকা দেখুন।",
|
||||
"blacklistAdd": "ব্ল্যাকলিস্টে একজন ব্যবহারকারী যোগ করুন।",
|
||||
"blacklistRemove": "ব্ল্যাকলিস্ট থেকে একজন ব্যবহারকারী সরান।",
|
||||
"blacklistGet": "একজন ব্ল্যাকলিস্টেড ব্যবহারকারীর বিবরণ পান।",
|
||||
"statsGlobal": "গ্লোবাল পরিসংখ্যান দেখুন।",
|
||||
"statsTicket": "সার্ভারে একটি টিকেটের পরিসংখ্যান দেখুন।",
|
||||
"statsUser": "সার্ভারে একজন ব্যবহারকারীর পরিসংখ্যান দেখুন।",
|
||||
"statsReset": "বটের সমস্ত পরিসংখ্যান রিসেট করুন (এবং শূন্য থেকে গণনা শুরু করুন)।",
|
||||
"autocloseDisable": "এই টিকেটে স্বয়ংক্রিয় বন্ধ নিষ্ক্রিয় করুন।",
|
||||
"autocloseEnable": "এই টিকেটে স্বয়ংক্রিয় বন্ধ সক্রিয় করুন।",
|
||||
"autodeleteDisable": "এই টিকেটে স্বয়ংক্রিয় মুছে ফেলা নিষ্ক্রিয় করুন।",
|
||||
"autodeleteEnable": "এই টিকেটে স্বয়ংক্রিয় মুছে ফেলা সক্রিয় করুন।"
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
"global": "গ্লোবাল পরিসংখ্যান",
|
||||
"system": "সিস্টেম পরিসংখ্যান",
|
||||
"user": "ব্যবহারকারী পরিসংখ্যান",
|
||||
"ticket": "টিকেট পরিসংখ্যান",
|
||||
"participants": "অংশগ্রহণকারী"
|
||||
},
|
||||
"properties": {
|
||||
"ticketsCreated": "টিকেট তৈরি হয়েছে",
|
||||
"ticketsClosed": "টিকেট বন্ধ হয়েছে",
|
||||
"ticketsDeleted": "টিকেট মুছে ফেলা হয়েছে",
|
||||
"ticketsReopened": "টিকেট পুনরায় খোলা হয়েছে",
|
||||
"ticketsAutoclosed": "স্বয়ংক্রিয়ভাবে টিকেট বন্ধ হয়েছে",
|
||||
"ticketsClaimed": "টিকেট দাবি করা হয়েছে",
|
||||
"ticketsPinned": "টিকেট পিন করা হয়েছে",
|
||||
"ticketsMoved": "টিকেট সরানো হয়েছে",
|
||||
"usersBlacklisted": "ব্যবহারকারী ব্ল্যাকলিস্ট করা হয়েছে",
|
||||
"transcriptsCreated": "ট্রান্সক্রিপ্ট তৈরি হয়েছে"
|
||||
}
|
||||
}
|
||||
}
|
||||
+145
-15
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["guillee3"],
|
||||
"lastedited":"21/08/2024",
|
||||
"lastedited":"09/11/2025",
|
||||
"language":"Catalan",
|
||||
"automated":false
|
||||
},
|
||||
@@ -31,6 +31,14 @@
|
||||
"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!",
|
||||
"stringInvertedContains":"Aquesta cadena no pot contenir {0}!",
|
||||
"stringLowercase":"Aquesta cadena ha d'estar escrita només en minúscules!",
|
||||
"stringUppercase":"Aquesta cadena ha d'estar escrita només en majúscules!",
|
||||
"stringSpecialCharacters":"Aquesta cadena no pot contenir cap caràcter especial! (només a-z, 0-9 i espai)",
|
||||
"stringNoSpaces":"Aquesta cadena no pot contenir espais!",
|
||||
"stringCapitalWord":"Es recomana que cada paraula d'aquesta cadena comenci amb una lletra majúscula!",
|
||||
"stringCapitalSentence":"Sembla que algunes frases d'aquesta cadena no comencen amb una lletra majúscula!",
|
||||
"stringPunctuation":"Sembla que la frase d'aquesta cadena no acaba amb un signe de puntuació!",
|
||||
|
||||
"numberTooShort":"Aquest nombre no pot tenir menys de {0} caràcters!",
|
||||
"numberTooLong":"Aquest nombre no pot tenir més de {0} caràcters!",
|
||||
@@ -48,6 +56,8 @@
|
||||
"numberNegative":"Aquest nombre no pot ser negatiu!",
|
||||
"numberPositive":"Aquest nombre no pot ser positiu!",
|
||||
"numberZero":"Aquest nombre no pot ser zero!",
|
||||
"numberNan":"Aquest número no pot ser NaN (Not A Number)!",
|
||||
"numberInvertedContains":"Aquest número no pot contenir {0}!",
|
||||
|
||||
"booleanTrue":"Aquest booleà no pot ser veritable!",
|
||||
"booleanFalse":"Aquest booleà no pot ser fals!",
|
||||
@@ -89,7 +99,8 @@
|
||||
"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'!"
|
||||
"dropdownOption":"Un panell amb desplegable activat només pot contenir opcions del tipus 'ticket'!",
|
||||
"customInvalidVersion":"La versió especificada a la teva configuració no coincideix! Assegura't d'haver actualitzat la configuració a la versió més recent!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
@@ -132,6 +143,7 @@
|
||||
"blacklistAddDm":"Afegit a la Llista Negra",
|
||||
"blacklistRemoveDm":"Eliminat de la Llista Negra",
|
||||
"clear":"Tickets Netejats",
|
||||
"clearTickets":"Netejar Tickets",
|
||||
"roles":"Rols Actualitzats",
|
||||
|
||||
"autoclose":"Ticket Tancat Automàticament",
|
||||
@@ -139,7 +151,12 @@
|
||||
"autocloseDisabled":"Tancament Automàtic Desactivat",
|
||||
"autodelete":"Ticket Eliminat Automàticament",
|
||||
"autodeleteEnabled":"Eliminació Automàtica Activada",
|
||||
"autodeleteDisabled":"Eliminació Automàtica Desactivada"
|
||||
"autodeleteDisabled":"Eliminació Automàtica Desactivada",
|
||||
|
||||
"topicSet":"Tema Canviat",
|
||||
"prioritySet":"Prioritat Canviada",
|
||||
"priorityGet":"Prioritat del Ticket",
|
||||
"transfer":"Ticket Transferit"
|
||||
},
|
||||
"descriptions":{
|
||||
"create":"El teu ticket ha estat creat. Fes clic al botó a continuació per accedir-hi!",
|
||||
@@ -180,7 +197,12 @@
|
||||
"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!"
|
||||
"panelReady":"El panell està disponible en el missatge de seguiment!\nAquest missatge es pot eliminar ara!",
|
||||
|
||||
"topicSet":"El tema del canal ha estat canviat per {0} amb èxit!",
|
||||
"prioritySet":"La prioritat del ticket ha estat canviada a {0} per {1} amb èxit!",
|
||||
"priorityGet":"La prioritat actual d'aquest ticket és {0}.",
|
||||
"transfer":"La propietat del ticket ha estat transferida de {0} a {1} per {2} amb èxit!"
|
||||
},
|
||||
"modal":{
|
||||
"closePlaceholder":"Per què has tancat aquest ticket?",
|
||||
@@ -220,7 +242,14 @@
|
||||
"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}!"
|
||||
"clearLog":"{0} tickets han estat eliminats per {1}!",
|
||||
|
||||
"transferLog":"La propietat d'aquest ticket ha estat transferida de {0} a {1} per {2}!",
|
||||
"transferDm":"La propietat del teu ticket ha estat transferida de {0} a {1} al nostre servidor!",
|
||||
"prioritySetLog":"La prioritat d'aquest ticket ha estat canviada a {0} per {1}!",
|
||||
"prioritySetDm":"La prioritat del teu ticket ha estat canviada a {0} al nostre servidor!",
|
||||
"roleUpdateLog":"{0} ha actualitzat els seus rols!",
|
||||
"roleUpdateDm":"Els teus rols al nostre servidor han estat actualitzats!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
@@ -241,7 +270,19 @@
|
||||
"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."
|
||||
"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.",
|
||||
"title":"Error de transcripció"
|
||||
},
|
||||
"text":{
|
||||
"messagesTitle":"MISSATGES",
|
||||
"embedTitle":"EMBED",
|
||||
"fileTitle":"FITXER",
|
||||
"fieldsTitle":"CAMPS",
|
||||
"reactionsTitle":"REACCIONS",
|
||||
"statsTitle":"ESTADÍSTIQUES",
|
||||
"emptyContent":"<el contingut està buit>",
|
||||
"noTitle":"<sense títol>",
|
||||
"noDesc":"<sense descripció>"
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
@@ -257,7 +298,8 @@
|
||||
"unknownPanel":"Panell Desconegut",
|
||||
"notInGuild":"No Ets Al Servidor",
|
||||
"channelRename":"No Es Pot Canviar El Nom Del Canal",
|
||||
"busy":"El Ticket Està Ocupat"
|
||||
"busy":"El Ticket Està Ocupat",
|
||||
"permissionError":"Error de Permisos"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo":"Contacta amb el propietari d'aquest bot per obtenir més informació!",
|
||||
@@ -280,7 +322,10 @@
|
||||
"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!"
|
||||
"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!",
|
||||
"closeBeforeMessage":"Aquest ticket no pot ser tancat/eliminat abans que un usuari hagi enviat un missatge.",
|
||||
"closeBeforeAdminMessage":"Aquest ticket no pot ser tancat/eliminat abans que un administrador o membre de suport hagi enviat un missatge.",
|
||||
"unableToCreateTicket":"No pots crear cap ticket."
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex":"El valor no coincideix amb el patró!",
|
||||
@@ -331,7 +376,6 @@
|
||||
"added":"Afegit",
|
||||
"removed":"Eliminat",
|
||||
"filter":"Filtre",
|
||||
"claimedBy":"Reclamat Per {0}",
|
||||
"method":"Mètode",
|
||||
"type":"Tipus",
|
||||
"blacklisted":"Llista Negra",
|
||||
@@ -355,7 +399,27 @@
|
||||
"status":"Estat",
|
||||
"claimed":"Reclamat",
|
||||
"pinned":"Fixat",
|
||||
"creationDate":"Data de Creació"
|
||||
"creationDate":"Data de Creació",
|
||||
|
||||
"noone":"Ningú",
|
||||
"open":"Obert",
|
||||
"closed":"Tancat",
|
||||
"priority":"Prioritat",
|
||||
"participants":"Participants",
|
||||
"yes":"Si",
|
||||
"no":"No",
|
||||
"option":"Opció",
|
||||
"topic":"Tema",
|
||||
"uptime":"Temps d'Activitat del Sistema",
|
||||
"messages":"Missatges",
|
||||
"embeds":"Embeds",
|
||||
"files":"Fitxers",
|
||||
"components":"Components",
|
||||
"cooldown":"Refredament",
|
||||
"maxTickets":"Max Tickets",
|
||||
"admins":"Admins",
|
||||
"roles":"Rols",
|
||||
"size":"Mida"
|
||||
},
|
||||
"lowercase":{
|
||||
"text":"text",
|
||||
@@ -384,6 +448,7 @@
|
||||
"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.",
|
||||
@@ -392,6 +457,7 @@
|
||||
"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.",
|
||||
@@ -405,6 +471,7 @@
|
||||
"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":{
|
||||
@@ -417,6 +484,7 @@
|
||||
"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.",
|
||||
@@ -424,7 +492,19 @@
|
||||
"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."
|
||||
"autodeleteEnableTime":"La quantitat de dies que aquest ticket ha d'estar inactiu per eliminar-lo.",
|
||||
|
||||
"topic":"Gestiona el tema del canal del ticket.",
|
||||
"topicSet":"Estableix el tema del canal del ticket.",
|
||||
"topicValue":"El nou tema del canal.",
|
||||
"topicList":"Obté una llista de tots els tickets amb el seu tema i estadístiques.",
|
||||
"priority":"Gestiona la prioritat del ticket.",
|
||||
"prioritySet":"Estableix la prioritat del ticket.",
|
||||
"priorityValue":"La prioritat del canal.",
|
||||
"priorityGet":"Obtenir la prioritat del ticket.",
|
||||
"priorityList":"Obté una llista de tots els tickets amb el seu estat de prioritat.",
|
||||
"transfer":"Transfereix la propietat del ticket d'un usuari a un altre.",
|
||||
"transferUser":"L'usuari al qual transferir."
|
||||
},
|
||||
"helpMenu":{
|
||||
"help":"Obtingues una llista de totes les comandes disponibles.",
|
||||
@@ -452,7 +532,16 @@
|
||||
"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."
|
||||
"autodeleteEnable":"Activa l'eliminació automàtica en aquest ticket.",
|
||||
"categories":{
|
||||
"general":"Comandes Generals",
|
||||
"basicTicket":"Comandes Bàsiques de Tickets",
|
||||
"advancedTicket":"Comandes Avançades de Tickets",
|
||||
"userTicket":"Comandes de Tickets d'Usuari",
|
||||
"admin":"Comandes d'Admin",
|
||||
"advanced":"Comandes Avançades",
|
||||
"extra":"Comandes Extra"
|
||||
}
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
@@ -460,7 +549,8 @@
|
||||
"system":"Estadístiques del Sistema",
|
||||
"user":"Estadístiques d'Usuari",
|
||||
"ticket":"Estadístiques de Ticket",
|
||||
"participants":"Participants"
|
||||
"participants":"Participants",
|
||||
"messages":"Missatges"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated":"Tickets Creats",
|
||||
@@ -472,7 +562,47 @@
|
||||
"ticketsPinned":"Tickets Fixats",
|
||||
"ticketsMoved":"Tickets Moguts",
|
||||
"usersBlacklisted":"Usuaris a la Llista Negra",
|
||||
"transcriptsCreated":"Transcripcions Creades"
|
||||
"transcriptsCreated":"Transcripcions Creades",
|
||||
"ticketsAutodeleted":"Tickets Eliminats Automàticament",
|
||||
"ticketsTransferred":"Tickets Transferits",
|
||||
"ticketVolume":"Volum de Tickets",
|
||||
"averageTickets":"Mitjana de Tickets/Usuari",
|
||||
"currentTickets":"Tickets Actuals",
|
||||
"age":"Edat del Ticket",
|
||||
"responseTime":"Temps de Resposta",
|
||||
"resolutionTime":"Temps de Resolució",
|
||||
"createdOn":"Creat el",
|
||||
"createdBy":"Creat per",
|
||||
"closedOn":"Tancat el",
|
||||
"closedBy":"Tancat per",
|
||||
"claimedOn":"Reclamat el",
|
||||
"claimedBy":"Reclamat per",
|
||||
"pinnedOn":"Fixat el",
|
||||
"pinnedBy":"Fixat per",
|
||||
"deletedOn":"Eliminat el",
|
||||
"deletedBy":"Eliminat per"
|
||||
},
|
||||
"roles":{
|
||||
"developer":"Desenvolupador",
|
||||
"serverOwner":"Propietari del Servidor",
|
||||
"serverAdmin":"Admin del Servidor",
|
||||
"moderator":"Equip de Moderació",
|
||||
"support":"Equip de Suport",
|
||||
"member":"Membre"
|
||||
}
|
||||
},
|
||||
"panel":{
|
||||
"selectTicket":"Selecciona el teu ticket",
|
||||
"selectRole":"Selecciona el teu rol",
|
||||
"selectOption":"Selecciona la teva opció"
|
||||
},
|
||||
"priorities":{
|
||||
"urgent":"Urgent",
|
||||
"veryHigh":"Molt Alt",
|
||||
"high":"Alt",
|
||||
"normal":"Normal",
|
||||
"low":"Baix",
|
||||
"veryLow":"Molt Baix",
|
||||
"none":"Cap"
|
||||
}
|
||||
}
|
||||
+145
-15
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["DJj123dj"],
|
||||
"lastedited":"21/08/2024",
|
||||
"lastedited":"09/11/2025",
|
||||
"language":"Custom",
|
||||
"automated":false
|
||||
},
|
||||
@@ -31,6 +31,14 @@
|
||||
"stringContains":"This string needs to contain {0}!",
|
||||
"stringChoices":"This string can only be one of the following values: {0}!",
|
||||
"stringRegex":"This string is invalid!",
|
||||
"stringInvertedContains":"This string is not allowed to contain {0}!",
|
||||
"stringLowercase":"This string must be written in lowercase only!",
|
||||
"stringUppercase":"This string must be written in uppercase only!",
|
||||
"stringSpecialCharacters":"This string is not allowed to contain any special characters! (a-z, 0-9 & space only)",
|
||||
"stringNoSpaces":"This string is not allowed to contain spaces!",
|
||||
"stringCapitalWord":"It's recommended that each word in this string starts with a capital letter!",
|
||||
"stringCapitalSentence":"It looks like some sentences in this string don't start with a capital letter!",
|
||||
"stringPunctuation":"It looks like the sentence in this string doesn't end with a punctuation mark!",
|
||||
|
||||
"numberTooShort":"This number can't be shorter than {0} characters!",
|
||||
"numberTooLong":"This number can't be longer than {0} characters!",
|
||||
@@ -48,6 +56,8 @@
|
||||
"numberNegative":"This number can't be negative!",
|
||||
"numberPositive":"This number can't be positive!",
|
||||
"numberZero":"This number can't be zero!",
|
||||
"numberNan":"This number can't be NaN (Not A Number)!",
|
||||
"numberInvertedContains":"This number is not allowed to contain {0}!",
|
||||
|
||||
"booleanTrue":"This boolean can't be true!",
|
||||
"booleanFalse":"This boolean can't be false!",
|
||||
@@ -89,7 +99,8 @@
|
||||
"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!"
|
||||
"dropdownOption":"A panel with dropdown enabled can only contain options of the 'ticket' type!",
|
||||
"customInvalidVersion":"The version specified in your config does not match! Make sure you have updated the config to the latest version!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
@@ -132,6 +143,7 @@
|
||||
"blacklistAddDm":"Added To Blacklist",
|
||||
"blacklistRemoveDm":"Removed From Blacklist",
|
||||
"clear":"Tickets Cleared",
|
||||
"clearTickets":"Clear Tickets",
|
||||
"roles":"Roles Updated",
|
||||
|
||||
"autoclose":"Ticket Autoclosed",
|
||||
@@ -139,7 +151,12 @@
|
||||
"autocloseDisabled":"Autoclose Disabled",
|
||||
"autodelete":"Ticket Autodeleted",
|
||||
"autodeleteEnabled":"Autodelete Enabled",
|
||||
"autodeleteDisabled":"Autodelete Disabled"
|
||||
"autodeleteDisabled":"Autodelete Disabled",
|
||||
|
||||
"topicSet":"Topic Changed",
|
||||
"prioritySet":"Priority Changed",
|
||||
"priorityGet":"Ticket Priority",
|
||||
"transfer":"Ticket Transferred"
|
||||
},
|
||||
"descriptions":{
|
||||
"create":"Your ticket has been created. Click the button below to access it!",
|
||||
@@ -180,7 +197,12 @@
|
||||
"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!"
|
||||
"panelReady":"The panel is available in the followup message!\nThis message can now be deleted!",
|
||||
|
||||
"topicSet":"The channel topic has been changed by {0} successfully!",
|
||||
"prioritySet":"The ticket priority has been changed to {0} by {1} successfully!",
|
||||
"priorityGet":"The current priority of this ticket is {0}.",
|
||||
"transfer":"The ticket ownership has been transferred from {0} to {1} by {2} successfully!"
|
||||
},
|
||||
"modal":{
|
||||
"closePlaceholder":"Why did you close this ticket?",
|
||||
@@ -220,7 +242,14 @@
|
||||
"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}!"
|
||||
"clearLog":"{0} tickets have been deleted by {1}!",
|
||||
|
||||
"transferLog":"The ownership of this ticket has been transferred from {0} to {1} by {2}!",
|
||||
"transferDm":"The ownership of your ticket has been transferred from {0} to {1} in our server!",
|
||||
"prioritySetLog":"The priority of this ticket has been changed to {0} by {1}!",
|
||||
"prioritySetDm":"The priority of your ticket has been changed to {0} in our server!",
|
||||
"roleUpdateLog":"{0} has updated their roles!",
|
||||
"roleUpdateDm":"Your roles in our server have been updated!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
@@ -241,7 +270,19 @@
|
||||
"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."
|
||||
"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.",
|
||||
"title":"Transcript Error"
|
||||
},
|
||||
"text":{
|
||||
"messagesTitle":"MESSAGES",
|
||||
"embedTitle":"EMBED",
|
||||
"fileTitle":"FILE",
|
||||
"fieldsTitle":"FIELDS",
|
||||
"reactionsTitle":"REACTIONS",
|
||||
"statsTitle":"STATS",
|
||||
"emptyContent":"<content is empty>",
|
||||
"noTitle":"<no-title>",
|
||||
"noDesc":"<no-description>"
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
@@ -257,7 +298,8 @@
|
||||
"unknownPanel":"Unknown Panel",
|
||||
"notInGuild":"Not In Server",
|
||||
"channelRename":"Unable To Rename Channel",
|
||||
"busy":"Ticket Is Busy"
|
||||
"busy":"Ticket Is Busy",
|
||||
"permissionError":"Permission Error"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo":"Contact the owner of this bot for more info!",
|
||||
@@ -280,7 +322,10 @@
|
||||
"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!"
|
||||
"busy":"Unable to use this {0}!\nThe ticket is currently being processed by the bot.\n\nPlease try again in a few seconds!",
|
||||
"closeBeforeMessage":"This ticket cannot be closed/deleted before a message has been sent by a user.",
|
||||
"closeBeforeAdminMessage":"This ticket cannot be closed/deleted before a message has been sent by a ticket admin or support member.",
|
||||
"unableToCreateTicket":"You are unable to create a ticket."
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex":"Value doesn't match pattern!",
|
||||
@@ -331,7 +376,6 @@
|
||||
"added":"Added",
|
||||
"removed":"Removed",
|
||||
"filter":"Filter",
|
||||
"claimedBy":"Claimed By {0}",
|
||||
"method":"Method",
|
||||
"type":"Type",
|
||||
"blacklisted":"Blacklisted",
|
||||
@@ -355,7 +399,27 @@
|
||||
"status":"Status",
|
||||
"claimed":"Claimed",
|
||||
"pinned":"Pinned",
|
||||
"creationDate":"Creation Date"
|
||||
"creationDate":"Creation Date",
|
||||
|
||||
"noone":"No-One",
|
||||
"open":"Open",
|
||||
"closed":"Closed",
|
||||
"priority":"Priority",
|
||||
"participants":"Participants",
|
||||
"yes":"Yes",
|
||||
"no":"No",
|
||||
"option":"Option",
|
||||
"topic":"Topic",
|
||||
"uptime":"System Uptime",
|
||||
"messages":"Messages",
|
||||
"embeds":"Embeds",
|
||||
"files":"Files",
|
||||
"components":"Components",
|
||||
"cooldown":"Cooldown",
|
||||
"maxTickets":"Max Tickets",
|
||||
"admins":"Admins",
|
||||
"roles":"Roles",
|
||||
"size":"Size"
|
||||
},
|
||||
"lowercase":{
|
||||
"text":"text",
|
||||
@@ -384,6 +448,7 @@
|
||||
"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.",
|
||||
@@ -392,6 +457,7 @@
|
||||
"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.",
|
||||
@@ -405,6 +471,7 @@
|
||||
"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":{
|
||||
@@ -417,6 +484,7 @@
|
||||
"unpin":"Unpinned",
|
||||
"autoclose":"Autoclosed"
|
||||
},
|
||||
|
||||
"autoclose":"Manage autoclose in a ticket.",
|
||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
||||
@@ -424,7 +492,19 @@
|
||||
"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."
|
||||
"autodeleteEnableTime":"The amount of days this ticket needs to be inactive to delete it.",
|
||||
|
||||
"topic":"Manage the topic of the ticket channel.",
|
||||
"topicSet":"Set the topic of the ticket channel.",
|
||||
"topicValue":"The new topic of the channel.",
|
||||
"topicList":"Get a list of all tickets with their topic and stats.",
|
||||
"priority":"Manage the priority of the ticket.",
|
||||
"prioritySet":"Set the priority of the ticket.",
|
||||
"priorityValue":"The priority of the channel.",
|
||||
"priorityGet":"Get the priority of the ticket.",
|
||||
"priorityList":"Get a list of all tickets with their priority status.",
|
||||
"transfer":"Transfer the ticket ownership from one user to another.",
|
||||
"transferUser":"The user to transfer to."
|
||||
},
|
||||
"helpMenu":{
|
||||
"help":"Get a list of all the available commands.",
|
||||
@@ -452,7 +532,16 @@
|
||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
||||
"autodeleteDisable":"Disable autodelete in this ticket.",
|
||||
"autodeleteEnable":"Enable autodelete in this ticket."
|
||||
"autodeleteEnable":"Enable autodelete in this ticket.",
|
||||
"categories":{
|
||||
"general":"General Commands",
|
||||
"basicTicket":"Basic Ticket Commands",
|
||||
"advancedTicket":"Advanced Ticket Commands",
|
||||
"userTicket":"User Ticket Commands",
|
||||
"admin":"Admin Commands",
|
||||
"advanced":"Advanced Commands",
|
||||
"extra":"Extra Commands"
|
||||
}
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
@@ -460,7 +549,8 @@
|
||||
"system":"System Stats",
|
||||
"user":"User Stats",
|
||||
"ticket":"Ticket Stats",
|
||||
"participants":"Participants"
|
||||
"participants":"Participants",
|
||||
"messages":"Messages"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated":"Tickets Created",
|
||||
@@ -472,7 +562,47 @@
|
||||
"ticketsPinned":"Tickets Pinned",
|
||||
"ticketsMoved":"Tickets Moved",
|
||||
"usersBlacklisted":"Users Blacklisted",
|
||||
"transcriptsCreated":"Transcripts Created"
|
||||
"transcriptsCreated":"Transcripts Created",
|
||||
"ticketsAutodeleted":"Tickets Autodeleted",
|
||||
"ticketsTransferred":"Tickets Transferred",
|
||||
"ticketVolume":"Ticket Volume",
|
||||
"averageTickets":"Average Tickets/User",
|
||||
"currentTickets":"Current Tickets",
|
||||
"age":"Ticket Age",
|
||||
"responseTime":"Response Time",
|
||||
"resolutionTime":"Resolution Time",
|
||||
"createdOn":"Created On",
|
||||
"createdBy":"Created By",
|
||||
"closedOn":"Closed On",
|
||||
"closedBy":"Closed By",
|
||||
"claimedOn":"Claimed On",
|
||||
"claimedBy":"Claimed By",
|
||||
"pinnedOn":"Pinned On",
|
||||
"pinnedBy":"Pinned By",
|
||||
"deletedOn":"Deleted On",
|
||||
"deletedBy":"Deleted By"
|
||||
},
|
||||
"roles":{
|
||||
"developer":"Developer",
|
||||
"serverOwner":"Server Owner",
|
||||
"serverAdmin":"Server Admin",
|
||||
"moderator":"Moderator Team",
|
||||
"support":"Support Team",
|
||||
"member":"Member"
|
||||
}
|
||||
},
|
||||
"panel":{
|
||||
"selectTicket":"Select your ticket",
|
||||
"selectRole":"Select your role",
|
||||
"selectOption":"Select your option"
|
||||
},
|
||||
"priorities":{
|
||||
"urgent":"Urgent",
|
||||
"veryHigh":"Very High",
|
||||
"high":"High",
|
||||
"normal":"Normal",
|
||||
"low":"Low",
|
||||
"veryLow":"Very Low",
|
||||
"none":"None"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["spyeye_"],
|
||||
"lastedited":"21/08/2024",
|
||||
"language":"Czech",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["the_gamer"],
|
||||
"lastedited":"26/09/2024",
|
||||
"language":"Danish",
|
||||
|
||||
+149
-19
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["DJj123dj"],
|
||||
"lastedited":"21/08/2024",
|
||||
"lastedited":"09/11/2025",
|
||||
"language":"Dutch",
|
||||
"automated":false
|
||||
},
|
||||
@@ -31,6 +31,14 @@
|
||||
"stringContains":"Deze tekst moet {0} bevatten!",
|
||||
"stringChoices":"Deze tekst kan alleen de volgende waardes bevatten: {0}!",
|
||||
"stringRegex":"Deze tekst is ongeldig!",
|
||||
"stringInvertedContains":"Deze tekst mag niet {0} bevatten!",
|
||||
"stringLowercase":"Deze tekst moet in kleine letters geschreven zijn!",
|
||||
"stringUppercase":"Deze tekst moet in hoofdletters geschreven zijn!",
|
||||
"stringSpecialCharacters":"Deze tekst mag geen speciale karakters bevatten! (enkel a-z, 0-9 & spatie)",
|
||||
"stringNoSpaces":"Deze tekst mag geen spaties bevatten!",
|
||||
"stringCapitalWord":"Het is aangeraden om ieder woord in de zin te laten starten met een hoofdletter!",
|
||||
"stringCapitalSentence":"Het ziet er naar uit dat sommige zinnen in deze tekst niet met een hoofdletter beginnen!",
|
||||
"stringPunctuation":"Het ziet er naar uit dat de zin in deze tekst niet met een leesteken eindigt!",
|
||||
|
||||
"numberTooShort":"Dit nummer kan niet korter dan {0} karakters zijn!",
|
||||
"numberTooLong":"Dit nummer kan niet langer dan {0} karakters zijn!",
|
||||
@@ -48,6 +56,8 @@
|
||||
"numberNegative":"Dit nummer kan niet negatief zijn!",
|
||||
"numberPositive":"Dit nummer kan niet positief zijn!",
|
||||
"numberZero":"Dit nummer kan niet nul zijn!",
|
||||
"numberNan":"Dit nummer kan geen NaN (Not A Number) zijn!",
|
||||
"numberInvertedContains":"Dit nummer mag niet {0} bevatten!",
|
||||
|
||||
"booleanTrue":"Deze boolean kan niet true zijn!",
|
||||
"booleanFalse":"Deze boolean kan niet false zijn!",
|
||||
@@ -89,7 +99,8 @@
|
||||
"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!"
|
||||
"dropdownOption":"Een paneel met dropdown mag alleen opties bevaten van het 'ticket' type!",
|
||||
"customInvalidVersion":"De versie gespecificeerd in u configbestand komt niet overeen! Zorg dat u het configbestand geüpdatet heeft naar de laatste versie!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
@@ -132,6 +143,7 @@
|
||||
"blacklistAddDm":"Toegevoegd Aan Blacklist",
|
||||
"blacklistRemoveDm":"Verwijderd Van Blacklist",
|
||||
"clear":"Tickets Opgeruimd",
|
||||
"clearTickets":"Tickets Opruimen",
|
||||
"roles":"Rollen Bijgewerkt",
|
||||
|
||||
"autoclose":"Ticket Automatisch Gesloten",
|
||||
@@ -139,7 +151,12 @@
|
||||
"autocloseDisabled":"Autoclose Uitgeschakeld",
|
||||
"autodelete":"Ticket Automatisch Verwijderd",
|
||||
"autodeleteEnabled":"Autodelete Ingeschakeld",
|
||||
"autodeleteDisabled":"Autodelete Uitgeschakeld"
|
||||
"autodeleteDisabled":"Autodelete Uitgeschakeld",
|
||||
|
||||
"topicSet":"Onderwerp Veranderd",
|
||||
"prioritySet":"Prioriteit Veranderd",
|
||||
"priorityGet":"Ticket Prioriteit",
|
||||
"transfer":"Ticket Overgedragen"
|
||||
},
|
||||
"descriptions":{
|
||||
"create":"Je ticket is aangemaakt. Klik op de knop hier onder om er naar toe te gaan!",
|
||||
@@ -169,18 +186,23 @@
|
||||
"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`!",
|
||||
"autocloseTimeout":"Dit ticket is automatisch gesloten omdat het meer dan `{0} uur` inactief was!",
|
||||
"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`!",
|
||||
"autodeleteTimeout":"Dit ticket is automatisch verwijderd omdat het meer dan `{0} dagen` inactief was!",
|
||||
"autocloseEnabled":"Autoclose is ingeschakeld in dit ticket!\nHet wordt gesloten na `{0} uur` inactiviteit!",
|
||||
"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`!",
|
||||
"autodeleteEnabled":"Autodelete is ingeschakeld in dit ticket!\nHet wordt verwijderd na `{0} dagen` inactiviteit!",
|
||||
"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!"
|
||||
"panelReady":"Het paneel is beschikbaar in het volgende bericht!\nDit bericht kan verwijderd worden!",
|
||||
|
||||
"topicSet":"Het kanaalsonderwerp is succesvol veranderd naar {0}!",
|
||||
"prioritySet":"De ticket prioriteit is succesvol veranderd naar {0} door {1}!",
|
||||
"priorityGet":"De huidige prioriteit van dit ticket is {0}.",
|
||||
"transfer":"Het ticket is succesvol overgedragen van {0} naar {1} door {2}!"
|
||||
},
|
||||
"modal":{
|
||||
"closePlaceholder":"Waarom heb je dit ticket gesloten?",
|
||||
@@ -220,7 +242,14 @@
|
||||
"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}!"
|
||||
"clearLog":"{0} tickets zijn verwijderd door by {1}!",
|
||||
|
||||
"transferLog":"Het ticket is overgedragen van {0} naar {1} door {2}!",
|
||||
"transferDm":"U ticket is overgedragen van {0} naar {1} in onze server!",
|
||||
"prioritySetLog":"De prioriteit van dit ticket is veranderd naar {0} door {1}!",
|
||||
"prioritySetDm":"De prioriteit van u ticket is veranderd naar {0} in onze server!",
|
||||
"roleUpdateLog":"{0} heeft zijn/haar rollen bewerkt!",
|
||||
"roleUpdateDm":"U rollen in onze server zijn veranderd!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
@@ -241,7 +270,19 @@
|
||||
"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."
|
||||
"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.",
|
||||
"title":"Transcript Error"
|
||||
},
|
||||
"text":{
|
||||
"messagesTitle":"BERICHTEN",
|
||||
"embedTitle":"EMBED",
|
||||
"fileTitle":"BESTAND",
|
||||
"fieldsTitle":"VELDEN",
|
||||
"reactionsTitle":"REACTIES",
|
||||
"statsTitle":"STATS",
|
||||
"emptyContent":"<inhoud is leeg>",
|
||||
"noTitle":"<geen-titel>",
|
||||
"noDesc":"<geen-beschrijving>"
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
@@ -257,7 +298,8 @@
|
||||
"unknownPanel":"Onbekend Paneel",
|
||||
"notInGuild":"Niet In Server",
|
||||
"channelRename":"Kan Kanaal Niet Hernoemen",
|
||||
"busy":"Ticket Is Bezig"
|
||||
"busy":"Ticket Is Bezig",
|
||||
"permissionError":"Permission Error"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo":"Contacteer the eigenaar van deze bot voor meer info!",
|
||||
@@ -280,7 +322,10 @@
|
||||
"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!"
|
||||
"busy":"Kan deze {0} niet gebruiken!\nHet ticket wordt op dit moment verwerkt door de bot.\n\nProbeer het opnieuw binnen een paar seconden!",
|
||||
"closeBeforeMessage":"Dit ticket kan niet gesloten/verwijderd worden vooraleer er een bericht door een gebruiker verstuurd is.",
|
||||
"closeBeforeAdminMessage":"Dit ticket kan niet gesloten/verwijderd worden vooraleer er een bericht door een ticket admin of supportlid verstuurd is.",
|
||||
"unableToCreateTicket":"U kunt geen ticket aanmaken."
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex":"Waarde is niet gelijk aan het patroon!",
|
||||
@@ -331,7 +376,6 @@
|
||||
"added":"Toegevoegd",
|
||||
"removed":"Verwijderd",
|
||||
"filter":"Filter",
|
||||
"claimedBy":"Geclaimd Door {0}",
|
||||
"method":"Methode",
|
||||
"type":"Type",
|
||||
"blacklisted":"Geblacklist",
|
||||
@@ -355,7 +399,27 @@
|
||||
"status":"Status",
|
||||
"claimed":"Geclaimd",
|
||||
"pinned":"Gepind",
|
||||
"creationDate":"Aanmaakdatum"
|
||||
"creationDate":"Aanmaakdatum",
|
||||
|
||||
"noone":"Niemand",
|
||||
"open":"Open",
|
||||
"closed":"Gesloten",
|
||||
"priority":"Prioriteit",
|
||||
"participants":"Deelnemers",
|
||||
"yes":"Ja",
|
||||
"no":"Nee",
|
||||
"option":"Optie",
|
||||
"topic":"Onderwerp",
|
||||
"uptime":"Systeem Uptime",
|
||||
"messages":"Berichten",
|
||||
"embeds":"Embeds",
|
||||
"files":"Bestanden",
|
||||
"components":"Componenten",
|
||||
"cooldown":"Cooldown",
|
||||
"maxTickets":"Max Tickets",
|
||||
"admins":"Admins",
|
||||
"roles":"Rollen",
|
||||
"size":"Grootte"
|
||||
},
|
||||
"lowercase":{
|
||||
"text":"tekst",
|
||||
@@ -384,6 +448,7 @@
|
||||
"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.",
|
||||
@@ -392,6 +457,7 @@
|
||||
"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.",
|
||||
@@ -405,6 +471,7 @@
|
||||
"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":{
|
||||
@@ -417,6 +484,7 @@
|
||||
"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.",
|
||||
@@ -424,7 +492,19 @@
|
||||
"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."
|
||||
"autodeleteEnableTime":"De hoeveelheid dagen dat dit ticket inactief moet zijn voor het te verwijderen.",
|
||||
|
||||
"topic":"Beheer het onderwerp van een ticket kanaal.",
|
||||
"topicSet":"Verander het onderwerp van een ticket kanaal.",
|
||||
"topicValue":"Het nieuwe onderwerp van het kanaal.",
|
||||
"topicList":"Bekijk een lijst van alle tickets met hun onderwerp en stats.",
|
||||
"priority":"Beheer de prioriteit van een ticket.",
|
||||
"prioritySet":"Verander de prioriteit van een ticket.",
|
||||
"priorityValue":"De prioriteit van het kanaal.",
|
||||
"priorityGet":"Bekijk de prioriteit van een ticket.",
|
||||
"priorityList":"Bekijk een lijst van alle tickets met hun prioriteit.",
|
||||
"transfer":"Draag het ticket eigendom over van de ene naar de andere gebruiker.",
|
||||
"transferUser":"De user om naar over te dragen."
|
||||
},
|
||||
"helpMenu":{
|
||||
"help":"Krijg een lijst van alle beschikbare commands.",
|
||||
@@ -452,7 +532,16 @@
|
||||
"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."
|
||||
"autodeleteEnable":"Zet autodelete aan in dit ticket.",
|
||||
"categories":{
|
||||
"general":"Algemene Commands",
|
||||
"basicTicket":"Basis Ticket Commands",
|
||||
"advancedTicket":"Geavanceerde Ticket Commands",
|
||||
"userTicket":"Gebruiker Ticket Commands",
|
||||
"admin":"Admin Commands",
|
||||
"advanced":"Geavanceerde Commands",
|
||||
"extra":"Extra Commands"
|
||||
}
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
@@ -460,7 +549,8 @@
|
||||
"system":"Systeem Stats",
|
||||
"user":"User Stats",
|
||||
"ticket":"Ticket Stats",
|
||||
"participants":"Deelnemers"
|
||||
"participants":"Deelnemers",
|
||||
"messages":"Berichten"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated":"Tickets Aangemaakt",
|
||||
@@ -472,7 +562,47 @@
|
||||
"ticketsPinned":"Tickets Gepind",
|
||||
"ticketsMoved":"Tickets Verplaatst",
|
||||
"usersBlacklisted":"Users Geblacklist",
|
||||
"transcriptsCreated":"Transcripts Aangemaakt"
|
||||
"transcriptsCreated":"Transcripts Aangemaakt",
|
||||
"ticketsAutodeleted":"Tickets Autodeleted",
|
||||
"ticketsTransferred":"Tickets Overgedragen",
|
||||
"ticketVolume":"Ticket Volume",
|
||||
"averageTickets":"Gemiddelde Tickets/Gebruiker",
|
||||
"currentTickets":"Huidige Tickets",
|
||||
"age":"Ticket Leeftijd",
|
||||
"responseTime":"Antwoordtijd",
|
||||
"resolutionTime":"Oplostijd",
|
||||
"createdOn":"Gemaakt Op",
|
||||
"createdBy":"Gemaakt Door",
|
||||
"closedOn":"Gesloten Op",
|
||||
"closedBy":"Gesloten Door",
|
||||
"claimedOn":"Geclaimed Op",
|
||||
"claimedBy":"Geclaimed Door",
|
||||
"pinnedOn":"Gepint Op",
|
||||
"pinnedBy":"Gepint Door",
|
||||
"deletedOn":"Verwijderd Op",
|
||||
"deletedBy":"Verwijderd Door"
|
||||
},
|
||||
"roles":{
|
||||
"developer":"Developer",
|
||||
"serverOwner":"Server Eigenaar",
|
||||
"serverAdmin":"Server Admin",
|
||||
"moderator":"Moderator Team",
|
||||
"support":"Support Team",
|
||||
"member":"Serverlid"
|
||||
}
|
||||
},
|
||||
"panel":{
|
||||
"selectTicket":"Selecteer u ticket",
|
||||
"selectRole":"Selecteer u rol",
|
||||
"selectOption":"Selecteer u optie"
|
||||
},
|
||||
"priorities":{
|
||||
"urgent":"Urgent",
|
||||
"veryHigh":"Zeer Hoog",
|
||||
"high":"Hoog",
|
||||
"normal":"Normaal",
|
||||
"low":"Laag",
|
||||
"veryLow":"Zeer Laag",
|
||||
"none":"Geen"
|
||||
}
|
||||
}
|
||||
+145
-15
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["DJj123dj"],
|
||||
"lastedited":"21/08/2024",
|
||||
"lastedited":"09/11/2025",
|
||||
"language":"English",
|
||||
"automated":false
|
||||
},
|
||||
@@ -31,6 +31,14 @@
|
||||
"stringContains":"This string needs to contain {0}!",
|
||||
"stringChoices":"This string can only be one of the following values: {0}!",
|
||||
"stringRegex":"This string is invalid!",
|
||||
"stringInvertedContains":"This string is not allowed to contain {0}!",
|
||||
"stringLowercase":"This string must be written in lowercase only!",
|
||||
"stringUppercase":"This string must be written in uppercase only!",
|
||||
"stringSpecialCharacters":"This string is not allowed to contain any special characters! (a-z, 0-9 & space only)",
|
||||
"stringNoSpaces":"This string is not allowed to contain spaces!",
|
||||
"stringCapitalWord":"It's recommended that each word in this string starts with a capital letter!",
|
||||
"stringCapitalSentence":"It looks like some sentences in this string don't start with a capital letter!",
|
||||
"stringPunctuation":"It looks like the sentence in this string doesn't end with a punctuation mark!",
|
||||
|
||||
"numberTooShort":"This number can't be shorter than {0} characters!",
|
||||
"numberTooLong":"This number can't be longer than {0} characters!",
|
||||
@@ -48,6 +56,8 @@
|
||||
"numberNegative":"This number can't be negative!",
|
||||
"numberPositive":"This number can't be positive!",
|
||||
"numberZero":"This number can't be zero!",
|
||||
"numberNan":"This number can't be NaN (Not A Number)!",
|
||||
"numberInvertedContains":"This number is not allowed to contain {0}!",
|
||||
|
||||
"booleanTrue":"This boolean can't be true!",
|
||||
"booleanFalse":"This boolean can't be false!",
|
||||
@@ -89,7 +99,8 @@
|
||||
"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!"
|
||||
"dropdownOption":"A panel with dropdown enabled can only contain options of the 'ticket' type!",
|
||||
"customInvalidVersion":"The version specified in your config does not match! Make sure you have updated the config to the latest version!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
@@ -132,6 +143,7 @@
|
||||
"blacklistAddDm":"Added To Blacklist",
|
||||
"blacklistRemoveDm":"Removed From Blacklist",
|
||||
"clear":"Tickets Cleared",
|
||||
"clearTickets":"Clear Tickets",
|
||||
"roles":"Roles Updated",
|
||||
|
||||
"autoclose":"Ticket Autoclosed",
|
||||
@@ -139,7 +151,12 @@
|
||||
"autocloseDisabled":"Autoclose Disabled",
|
||||
"autodelete":"Ticket Autodeleted",
|
||||
"autodeleteEnabled":"Autodelete Enabled",
|
||||
"autodeleteDisabled":"Autodelete Disabled"
|
||||
"autodeleteDisabled":"Autodelete Disabled",
|
||||
|
||||
"topicSet":"Topic Changed",
|
||||
"prioritySet":"Priority Changed",
|
||||
"priorityGet":"Ticket Priority",
|
||||
"transfer":"Ticket Transferred"
|
||||
},
|
||||
"descriptions":{
|
||||
"create":"Your ticket has been created. Click the button below to access it!",
|
||||
@@ -180,7 +197,12 @@
|
||||
"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!"
|
||||
"panelReady":"The panel is available in the followup message!\nThis message can now be deleted!",
|
||||
|
||||
"topicSet":"The channel topic has been changed by {0} successfully!",
|
||||
"prioritySet":"The ticket priority has been changed to {0} by {1} successfully!",
|
||||
"priorityGet":"The current priority of this ticket is {0}.",
|
||||
"transfer":"The ticket ownership has been transferred from {0} to {1} by {2} successfully!"
|
||||
},
|
||||
"modal":{
|
||||
"closePlaceholder":"Why did you close this ticket?",
|
||||
@@ -220,7 +242,14 @@
|
||||
"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}!"
|
||||
"clearLog":"{0} tickets have been deleted by {1}!",
|
||||
|
||||
"transferLog":"The ownership of this ticket has been transferred from {0} to {1} by {2}!",
|
||||
"transferDm":"The ownership of your ticket has been transferred from {0} to {1} in our server!",
|
||||
"prioritySetLog":"The priority of this ticket has been changed to {0} by {1}!",
|
||||
"prioritySetDm":"The priority of your ticket has been changed to {0} in our server!",
|
||||
"roleUpdateLog":"{0} has updated their roles!",
|
||||
"roleUpdateDm":"Your roles in our server have been updated!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
@@ -241,7 +270,19 @@
|
||||
"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."
|
||||
"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.",
|
||||
"title":"Transcript Error"
|
||||
},
|
||||
"text":{
|
||||
"messagesTitle":"MESSAGES",
|
||||
"embedTitle":"EMBED",
|
||||
"fileTitle":"FILE",
|
||||
"fieldsTitle":"FIELDS",
|
||||
"reactionsTitle":"REACTIONS",
|
||||
"statsTitle":"STATS",
|
||||
"emptyContent":"<content is empty>",
|
||||
"noTitle":"<no-title>",
|
||||
"noDesc":"<no-description>"
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
@@ -257,7 +298,8 @@
|
||||
"unknownPanel":"Unknown Panel",
|
||||
"notInGuild":"Not In Server",
|
||||
"channelRename":"Unable To Rename Channel",
|
||||
"busy":"Ticket Is Busy"
|
||||
"busy":"Ticket Is Busy",
|
||||
"permissionError":"Permission Error"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo":"Contact the owner of this bot for more info!",
|
||||
@@ -280,7 +322,10 @@
|
||||
"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!"
|
||||
"busy":"Unable to use this {0}!\nThe ticket is currently being processed by the bot.\n\nPlease try again in a few seconds!",
|
||||
"closeBeforeMessage":"This ticket cannot be closed/deleted before a message has been sent by a user.",
|
||||
"closeBeforeAdminMessage":"This ticket cannot be closed/deleted before a message has been sent by a ticket admin or support member.",
|
||||
"unableToCreateTicket":"You are unable to create a ticket."
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex":"Value doesn't match pattern!",
|
||||
@@ -331,7 +376,6 @@
|
||||
"added":"Added",
|
||||
"removed":"Removed",
|
||||
"filter":"Filter",
|
||||
"claimedBy":"Claimed By {0}",
|
||||
"method":"Method",
|
||||
"type":"Type",
|
||||
"blacklisted":"Blacklisted",
|
||||
@@ -355,7 +399,27 @@
|
||||
"status":"Status",
|
||||
"claimed":"Claimed",
|
||||
"pinned":"Pinned",
|
||||
"creationDate":"Creation Date"
|
||||
"creationDate":"Creation Date",
|
||||
|
||||
"noone":"No-One",
|
||||
"open":"Open",
|
||||
"closed":"Closed",
|
||||
"priority":"Priority",
|
||||
"participants":"Participants",
|
||||
"yes":"Yes",
|
||||
"no":"No",
|
||||
"option":"Option",
|
||||
"topic":"Topic",
|
||||
"uptime":"System Uptime",
|
||||
"messages":"Messages",
|
||||
"embeds":"Embeds",
|
||||
"files":"Files",
|
||||
"components":"Components",
|
||||
"cooldown":"Cooldown",
|
||||
"maxTickets":"Max Tickets",
|
||||
"admins":"Admins",
|
||||
"roles":"Roles",
|
||||
"size":"Size"
|
||||
},
|
||||
"lowercase":{
|
||||
"text":"text",
|
||||
@@ -384,6 +448,7 @@
|
||||
"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.",
|
||||
@@ -392,6 +457,7 @@
|
||||
"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.",
|
||||
@@ -405,6 +471,7 @@
|
||||
"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":{
|
||||
@@ -417,6 +484,7 @@
|
||||
"unpin":"Unpinned",
|
||||
"autoclose":"Autoclosed"
|
||||
},
|
||||
|
||||
"autoclose":"Manage autoclose in a ticket.",
|
||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
||||
@@ -424,7 +492,19 @@
|
||||
"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."
|
||||
"autodeleteEnableTime":"The amount of days this ticket needs to be inactive to delete it.",
|
||||
|
||||
"topic":"Manage the topic of the ticket channel.",
|
||||
"topicSet":"Set the topic of the ticket channel.",
|
||||
"topicValue":"The new topic of the channel.",
|
||||
"topicList":"Get a list of all tickets with their topic and stats.",
|
||||
"priority":"Manage the priority of the ticket.",
|
||||
"prioritySet":"Set the priority of the ticket.",
|
||||
"priorityValue":"The priority of the channel.",
|
||||
"priorityGet":"Get the priority of the ticket.",
|
||||
"priorityList":"Get a list of all tickets with their priority status.",
|
||||
"transfer":"Transfer the ticket ownership from one user to another.",
|
||||
"transferUser":"The user to transfer to."
|
||||
},
|
||||
"helpMenu":{
|
||||
"help":"Get a list of all the available commands.",
|
||||
@@ -452,7 +532,16 @@
|
||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
||||
"autodeleteDisable":"Disable autodelete in this ticket.",
|
||||
"autodeleteEnable":"Enable autodelete in this ticket."
|
||||
"autodeleteEnable":"Enable autodelete in this ticket.",
|
||||
"categories":{
|
||||
"general":"General Commands",
|
||||
"basicTicket":"Basic Ticket Commands",
|
||||
"advancedTicket":"Advanced Ticket Commands",
|
||||
"userTicket":"User Ticket Commands",
|
||||
"admin":"Admin Commands",
|
||||
"advanced":"Advanced Commands",
|
||||
"extra":"Extra Commands"
|
||||
}
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
@@ -460,7 +549,8 @@
|
||||
"system":"System Stats",
|
||||
"user":"User Stats",
|
||||
"ticket":"Ticket Stats",
|
||||
"participants":"Participants"
|
||||
"participants":"Participants",
|
||||
"messages":"Messages"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated":"Tickets Created",
|
||||
@@ -472,7 +562,47 @@
|
||||
"ticketsPinned":"Tickets Pinned",
|
||||
"ticketsMoved":"Tickets Moved",
|
||||
"usersBlacklisted":"Users Blacklisted",
|
||||
"transcriptsCreated":"Transcripts Created"
|
||||
"transcriptsCreated":"Transcripts Created",
|
||||
"ticketsAutodeleted":"Tickets Autodeleted",
|
||||
"ticketsTransferred":"Tickets Transferred",
|
||||
"ticketVolume":"Ticket Volume",
|
||||
"averageTickets":"Average Tickets/User",
|
||||
"currentTickets":"Current Tickets",
|
||||
"age":"Ticket Age",
|
||||
"responseTime":"Response Time",
|
||||
"resolutionTime":"Resolution Time",
|
||||
"createdOn":"Created On",
|
||||
"createdBy":"Created By",
|
||||
"closedOn":"Closed On",
|
||||
"closedBy":"Closed By",
|
||||
"claimedOn":"Claimed On",
|
||||
"claimedBy":"Claimed By",
|
||||
"pinnedOn":"Pinned On",
|
||||
"pinnedBy":"Pinned By",
|
||||
"deletedOn":"Deleted On",
|
||||
"deletedBy":"Deleted By"
|
||||
},
|
||||
"roles":{
|
||||
"developer":"Developer",
|
||||
"serverOwner":"Server Owner",
|
||||
"serverAdmin":"Server Admin",
|
||||
"moderator":"Moderator Team",
|
||||
"support":"Support Team",
|
||||
"member":"Member"
|
||||
}
|
||||
},
|
||||
"panel":{
|
||||
"selectTicket":"Select your ticket",
|
||||
"selectRole":"Select your role",
|
||||
"selectOption":"Select your option"
|
||||
},
|
||||
"priorities":{
|
||||
"urgent":"Urgent",
|
||||
"veryHigh":"Very High",
|
||||
"high":"High",
|
||||
"normal":"Normal",
|
||||
"low":"Low",
|
||||
"veryLow":"Very Low",
|
||||
"none":"None"
|
||||
}
|
||||
}
|
||||
+145
-15
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["iamnotmega","ChatGPT"],
|
||||
"lastedited":"21/10/2024",
|
||||
"lastedited":"09/11/2025",
|
||||
"language":"Estonian",
|
||||
"automated":true
|
||||
},
|
||||
@@ -31,6 +31,14 @@
|
||||
"stringContains":"See string peab sisaldama {0}!",
|
||||
"stringChoices":"See string võib olla ainult üks järgmistest väärtustest: {0}!",
|
||||
"stringRegex":"See string on kehtetu!",
|
||||
"stringInvertedContains":"See string ei tohi sisaldada {0}!",
|
||||
"stringLowercase":"See string peab olema kirjutatud ainult väikeste tähtedega!",
|
||||
"stringUppercase":"See string peab olema kirjutatud ainult suurte tähtedega!",
|
||||
"stringSpecialCharacters":"See string ei tohi sisaldada erimärke! (ainult a-z, 0-9 ja tühik)",
|
||||
"stringNoSpaces":"See string ei tohi sisaldada tühikuid!",
|
||||
"stringCapitalWord":"Soovitatav on, et iga sõna selles stringis algaks suure tähega!",
|
||||
"stringCapitalSentence":"Tundub, et mõned laused selles stringis ei alga suure tähega!",
|
||||
"stringPunctuation":"Tundub, et lause selles stringis ei lõpe kirjavahemärgiga!",
|
||||
|
||||
"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!",
|
||||
@@ -48,6 +56,8 @@
|
||||
"numberNegative":"See arv ei saa olla negatiivne!",
|
||||
"numberPositive":"See arv ei saa olla positiivne!",
|
||||
"numberZero":"See arv ei saa olla null!",
|
||||
"numberNan":"See number ei tohi olla NaN (mitte number)!",
|
||||
"numberInvertedContains":"See number ei tohi sisaldada {0}!",
|
||||
|
||||
"booleanTrue":"See tõeväärtus ei saa olla tõsi!",
|
||||
"booleanFalse":"See tõeväärtus ei saa olla vale!",
|
||||
@@ -89,7 +99,8 @@
|
||||
"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!"
|
||||
"dropdownOption":"Lubatud rippmenüüga paneel võib sisaldada ainult \"pileti\" tüüpi valikuid!",
|
||||
"customInvalidVersion":"Teie konfiguratsioonis määratud versioon ei ühti! Veenduge, et olete konfiguratsiooni uuendanud uusimale versioonile!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
@@ -132,6 +143,7 @@
|
||||
"blacklistAddDm":"Lisatud musta nimekirja",
|
||||
"blacklistRemoveDm":"Eemaldatud mustast nimekirjast",
|
||||
"clear":"Piletid kustutatud",
|
||||
"clearTickets":"Kustuta Piletid",
|
||||
"roles":"Rollid uuendatud",
|
||||
|
||||
"autoclose":"Pilet automaatselt suletud",
|
||||
@@ -139,7 +151,12 @@
|
||||
"autocloseDisabled":"Automaatne sulgemine keelatud",
|
||||
"autodelete":"Pilet on automaatselt kustutatud",
|
||||
"autodeleteEnabled":"Automaatne kustutamine lubatud",
|
||||
"autodeleteDisabled":"Automaatne kustutamine keelatud"
|
||||
"autodeleteDisabled":"Automaatne kustutamine keelatud",
|
||||
|
||||
"topicSet":"Teema Muudetud",
|
||||
"prioritySet":"Prioriteet Muudetud",
|
||||
"priorityGet":"Pileti Prioriteet",
|
||||
"transfer":"Pilet Üle Antud"
|
||||
},
|
||||
"descriptions":{
|
||||
"create":"Teie pilet on loodud. Sellele juurdepääsuks klõpsake alloleval nupul!",
|
||||
@@ -180,7 +197,12 @@
|
||||
"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!"
|
||||
"panelReady":"Paneel on saadaval järelteates!\nSelle sõnumi võib nüüd kustutada!",
|
||||
|
||||
"topicSet":"Kanaliteema on edukalt muudetud kasutaja {0} poolt!",
|
||||
"prioritySet":"Pileti prioriteet on edukalt muudetud väärtuseks {0} kasutaja {1} poolt!",
|
||||
"priorityGet":"Selle pileti praegune prioriteet on {0}.",
|
||||
"transfer":"Pileti omand on edukalt üle antud kasutajalt {0} kasutajale {1} kasutaja {2} poolt!"
|
||||
},
|
||||
"modal":{
|
||||
"closePlaceholder":"Miks sa selle pileti kinni panid?",
|
||||
@@ -220,7 +242,14 @@
|
||||
"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!"
|
||||
"clearLog":"{1} on kustutanud {0} piletit!",
|
||||
|
||||
"transferLog":"Selle pileti omand on üle antud kasutajalt {0} kasutajale {1} kasutaja {2} poolt!",
|
||||
"transferDm":"Teie pileti omand on üle antud kasutajalt {0} kasutajale {1} meie serveris!",
|
||||
"prioritySetLog":"Selle pileti prioriteet on muudetud väärtuseks {0} kasutaja {1} poolt!",
|
||||
"prioritySetDm":"Teie pileti prioriteet on muudetud väärtuseks {0} meie serveris!",
|
||||
"roleUpdateLog":"{0} uuendas oma rolle!",
|
||||
"roleUpdateDm":"Teie rolle meie serveris on uuendatud!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
@@ -241,7 +270,19 @@
|
||||
"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."
|
||||
"error":"Midagi läks ärakirja loomisel valesti.\nMida sa teha tahaksid?\n\nSeda piletit ei kustutata enne, kui klõpsate ühel neist nuppudest.",
|
||||
"title":"Transkriptsiooniviga"
|
||||
},
|
||||
"text":{
|
||||
"messagesTitle":"SÕNUMID",
|
||||
"embedTitle":"EMBED",
|
||||
"fileTitle":"FAIL",
|
||||
"fieldsTitle":"VÄLJAD",
|
||||
"reactionsTitle":"REAKTSIOONID",
|
||||
"statsTitle":"STATISTIKA",
|
||||
"emptyContent":"<sisu on tühi>",
|
||||
"noTitle":"<pealkiri puudub>",
|
||||
"noDesc":"<kirjeldus puudub>"
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
@@ -257,7 +298,8 @@
|
||||
"unknownPanel":"Tundmatu paneel",
|
||||
"notInGuild":"Pole serveris",
|
||||
"channelRename":"Kanalit ei saa ümber nimetada",
|
||||
"busy":"Pilet on kinni"
|
||||
"busy":"Pilet on kinni",
|
||||
"permissionError":"Õiguste Viga"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo":"Lisateabe saamiseks võtke ühendust selle roboti omanikuga!",
|
||||
@@ -280,7 +322,10 @@
|
||||
"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!"
|
||||
"busy":"Seda {0} ei saa kasutada!\nPiletit töötleb praegu bot.\n\nPalun proovige mõne sekundi pärast uuesti!",
|
||||
"closeBeforeMessage":"Seda piletit ei saa sulgeda/kustutada enne, kui kasutaja on sõnumi saatnud.",
|
||||
"closeBeforeAdminMessage":"Seda piletit ei saa sulgeda/kustutada enne, kui piletihaldur või tugiliige on sõnumi saatnud.",
|
||||
"unableToCreateTicket":"Te ei saa piletit luua."
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex":"Väärtus ei vasta mustrile!",
|
||||
@@ -331,7 +376,6 @@
|
||||
"added":"Lisatud",
|
||||
"removed":"Eemaldatud",
|
||||
"filter":"Filter",
|
||||
"claimedBy":"Nõude esitas {0}",
|
||||
"method":"Meetod",
|
||||
"type":"Tüüp",
|
||||
"blacklisted":"Mustas nimekirjas",
|
||||
@@ -355,7 +399,27 @@
|
||||
"status":"Olek",
|
||||
"claimed":"Nõutud",
|
||||
"pinned":"Kinnitatud",
|
||||
"creationDate":"Loomise kuupäev"
|
||||
"creationDate":"Loomise kuupäev",
|
||||
|
||||
"noone":"Mitte Keegi",
|
||||
"open":"Avatud",
|
||||
"closed":"Suletud",
|
||||
"priority":"Prioriteet",
|
||||
"participants":"Osalejad",
|
||||
"yes":"Jah",
|
||||
"no":"Ei",
|
||||
"option":"Valik",
|
||||
"topic":"Teema",
|
||||
"uptime":"Süsteemi Töötamise Aeg",
|
||||
"messages":"Sõnumid",
|
||||
"embeds":"Embedid",
|
||||
"files":"Failid",
|
||||
"components":"Komponendid",
|
||||
"cooldown":"Jahtumisaeg",
|
||||
"maxTickets":"Maksimaalselt Pileteid",
|
||||
"admins":"Adminid",
|
||||
"roles":"Rollid",
|
||||
"size":"Suurus"
|
||||
},
|
||||
"lowercase":{
|
||||
"text":"tekst",
|
||||
@@ -384,6 +448,7 @@
|
||||
"unclaim":"Tühista pilet.",
|
||||
"pin":"Kinnitage pilet.",
|
||||
"unpin":"Vabastage pilet.",
|
||||
|
||||
"move":"Liigutage pilet.",
|
||||
"moveId":"Selle valiku identifikaator, millele soovite liikuda.",
|
||||
"rename":"Nimetage pilet ümber.",
|
||||
@@ -392,6 +457,7 @@
|
||||
"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.",
|
||||
@@ -405,6 +471,7 @@
|
||||
"statsUserUser":"Kasutaja vaatamiseks.",
|
||||
"statsTicket":"Vaadake serveris pileti statistikat.",
|
||||
"statsTicketTicket":"Pilet vaatamiseks.",
|
||||
|
||||
"clear":"Kustutage mitu piletit korraga.",
|
||||
"clearFilter":"Piletite puhastamise filter.",
|
||||
"clearFilters":{
|
||||
@@ -417,6 +484,7 @@
|
||||
"unpin":"Vabastatud",
|
||||
"autoclose":"Automaatselt suletud"
|
||||
},
|
||||
|
||||
"autoclose":"Hallake piletis automaatset sulgemist.",
|
||||
"autocloseDisable":"Keela sellel piletil automaatne sulgemine.",
|
||||
"autocloseEnable":"Luba sellel piletil automaatne sulgemine.",
|
||||
@@ -424,7 +492,19 @@
|
||||
"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."
|
||||
"autodeleteEnableTime":"Päevade arv, mille jooksul see pilet peab olema selle kustutamiseks passiivne.",
|
||||
|
||||
"topic":"Halda pileti kanali teemat.",
|
||||
"topicSet":"Määra pileti kanali teema.",
|
||||
"topicValue":"Kanali uus teema.",
|
||||
"topicList":"Hangi nimekiri kõigist piletitest koos nende teemade ja statistikaga.",
|
||||
"priority":"Halda pileti prioriteeti.",
|
||||
"prioritySet":"Määra pileti prioriteet.",
|
||||
"priorityValue":"Kanali prioriteet.",
|
||||
"priorityGet":"Hangi pileti prioriteet.",
|
||||
"priorityList":"Hangi nimekiri kõigist piletitest ja nende prioriteedi olekust.",
|
||||
"transfer":"Anna pileti omand üle ühelt kasutajalt teisele.",
|
||||
"transferUser":"Kasutaja, kellele omand üle anda."
|
||||
},
|
||||
"helpMenu":{
|
||||
"help":"Hankige kõigi saadaolevate käskude loend.",
|
||||
@@ -452,7 +532,16 @@
|
||||
"autocloseDisable":"Keela sellel piletil automaatne sulgemine.",
|
||||
"autocloseEnable":"Luba sellel piletil automaatne sulgemine.",
|
||||
"autodeleteDisable":"Keela sellel piletil automaatne kustutamine.",
|
||||
"autodeleteEnable":"Luba sellel piletil automaatne kustutamine."
|
||||
"autodeleteEnable":"Luba sellel piletil automaatne kustutamine.",
|
||||
"categories":{
|
||||
"general":"Üldised Käsud",
|
||||
"basicTicket":"Põhilised Piletikäsud",
|
||||
"advancedTicket":"Täpsemad Piletikäsud",
|
||||
"userTicket":"Kasutaja Piletikäsud",
|
||||
"admin":"Admini Käsud",
|
||||
"advanced":"Täpsemad Käsud",
|
||||
"extra":"Lisakäsud"
|
||||
}
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
@@ -460,7 +549,8 @@
|
||||
"system":"Süsteemi statistika",
|
||||
"user":"Kasutaja statistika",
|
||||
"ticket":"Piletistatistika",
|
||||
"participants":"Osalejad"
|
||||
"participants":"Osalejad",
|
||||
"messages":"Sõnumid"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated":"Pileteid loodud",
|
||||
@@ -472,7 +562,47 @@
|
||||
"ticketsPinned":"Pileteid kinnitatud",
|
||||
"ticketsMoved":"Pileteid teisaldatud",
|
||||
"usersBlacklisted":"Kasutajaid mustas nimekirjas",
|
||||
"transcriptsCreated":"Loodud ärakirjad"
|
||||
"transcriptsCreated":"Loodud ärakirjad",
|
||||
"ticketsAutodeleted":"Piletid Automaatselt Kustutatud",
|
||||
"ticketsTransferred":"Piletid Üle Antud",
|
||||
"ticketVolume":"Piletite Arv",
|
||||
"averageTickets":"Keskmine Piletite Arv/Kasutaja",
|
||||
"currentTickets":"Praegused Piletid",
|
||||
"age":"Pileti Vanus",
|
||||
"responseTime":"Reageerimisaeg",
|
||||
"resolutionTime":"Lahendusaeg",
|
||||
"createdOn":"Loodud",
|
||||
"createdBy":"Looja",
|
||||
"closedOn":"Suletud",
|
||||
"closedBy":"Sulgenud",
|
||||
"claimedOn":"Võetud",
|
||||
"claimedBy":"Võtnud",
|
||||
"pinnedOn":"Kinnitatud",
|
||||
"pinnedBy":"Kinnitanud",
|
||||
"deletedOn":"Kustutatud",
|
||||
"deletedBy":"Kustutanud"
|
||||
},
|
||||
"roles":{
|
||||
"developer":"Arendaja",
|
||||
"serverOwner":"Serveri Omanik",
|
||||
"serverAdmin":"Serveri Administraator",
|
||||
"moderator":"Moderaatorite Meeskond",
|
||||
"support":"Tugimeeskond",
|
||||
"member":"Liige"
|
||||
}
|
||||
},
|
||||
"panel":{
|
||||
"selectTicket":"Vali oma pilet",
|
||||
"selectRole":"Vali oma roll",
|
||||
"selectOption":"Vali oma valik"
|
||||
},
|
||||
"priorities":{
|
||||
"urgent":"Kiireloomuline",
|
||||
"veryHigh":"Väga Kõrge",
|
||||
"high":"Kõrge",
|
||||
"normal":"Tavaline",
|
||||
"low":"Madal",
|
||||
"veryLow":"Väga Madal",
|
||||
"none":"Puudub"
|
||||
}
|
||||
}
|
||||
+146
-16
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["iamnotmega","ChatGPT"],
|
||||
"lastedited":"21/10/2024",
|
||||
"lastedited":"09/11/2025",
|
||||
"language":"Finnish",
|
||||
"automated":true
|
||||
},
|
||||
@@ -31,6 +31,14 @@
|
||||
"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!",
|
||||
"stringInvertedContains":"Tämä merkkijono ei saa sisältää {0}!",
|
||||
"stringLowercase":"Tämä merkkijono on kirjoitettava vain pienillä kirjaimilla!",
|
||||
"stringUppercase":"Tämä merkkijono on kirjoitettava vain isoilla kirjaimilla!",
|
||||
"stringSpecialCharacters":"Tämä merkkijono ei saa sisältää erikoismerkkejä! (vain a–z, 0–9 ja välilyönti)",
|
||||
"stringNoSpaces":"Tämä merkkijono ei saa sisältää välilyöntejä!",
|
||||
"stringCapitalWord":"On suositeltavaa, että jokainen sana tässä merkkijonossa alkaa isolla kirjaimella!",
|
||||
"stringCapitalSentence":"Näyttää siltä, että jotkut lauseet tässä merkkijonossa eivät ala isolla kirjaimella!",
|
||||
"stringPunctuation":"Näyttää siltä, että tämän merkkijonon lause ei pääty välimerkkiin!",
|
||||
|
||||
"numberTooShort":"Tämä numero ei voi olla lyhyempi kuin {0} merkkiä!",
|
||||
"numberTooLong":"Tämä numero ei voi olla pidempi kuin {0} merkkiä!",
|
||||
@@ -48,6 +56,8 @@
|
||||
"numberNegative":"Tämä luku ei voi olla negatiivinen!",
|
||||
"numberPositive":"Tämä luku ei voi olla positiivinen!",
|
||||
"numberZero":"Tämä luku ei voi olla nolla!",
|
||||
"numberNan":"Tämä numero ei voi olla NaN (ei numero)!",
|
||||
"numberInvertedContains":"Tämä numero ei saa sisältää {0}!",
|
||||
|
||||
"booleanTrue":"Tämä boolean ei voi olla totta!",
|
||||
"booleanFalse":"Tämä boolean ei voi olla väärä!",
|
||||
@@ -89,7 +99,8 @@
|
||||
"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!"
|
||||
"dropdownOption":"Paneeli, jossa pudotusvalikko on käytössä, voi sisältää vain \"lippu\"-tyyppisiä vaihtoehtoja!",
|
||||
"customInvalidVersion":"Määritetty versio kokoonpanossasi ei vastaa! Varmista, että olet päivittänyt kokoonpanon uusimpaan versioon!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
@@ -132,6 +143,7 @@
|
||||
"blacklistAddDm":"Lisätty mustalle listalle",
|
||||
"blacklistRemoveDm":"Poistettu mustalta listalta",
|
||||
"clear":"Liput tyhjennetty",
|
||||
"clearTickets":"Tyhjennä Tiketit",
|
||||
"roles":"Roolit päivitetty",
|
||||
|
||||
"autoclose":"Lippu suljettu automaattisesti",
|
||||
@@ -139,7 +151,12 @@
|
||||
"autocloseDisabled":"Automaattinen sulkeminen pois käytöstä",
|
||||
"autodelete":"Lippu poistettu automaattisesti",
|
||||
"autodeleteEnabled":"Automaattinen poisto käytössä",
|
||||
"autodeleteDisabled":"Automaattinen poisto poissa käytöstä"
|
||||
"autodeleteDisabled":"Automaattinen poisto poissa käytöstä",
|
||||
|
||||
"topicSet":"Aihe Muutettu",
|
||||
"prioritySet":"Prioriteetti Muutettu",
|
||||
"priorityGet":"Tiketin Prioriteetti",
|
||||
"transfer":"Tiketti Siirretty"
|
||||
},
|
||||
"descriptions":{
|
||||
"create":"Lippusi on luotu. Napsauta alla olevaa painiketta päästäksesi siihen!",
|
||||
@@ -180,7 +197,12 @@
|
||||
"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!"
|
||||
"panelReady":"Paneeli on saatavilla jatkoviestissä!\nTämä viesti voidaan nyt poistaa!",
|
||||
|
||||
"topicSet":"Kanavan aihe on vaihdettu käyttäjän {0} toimesta onnistuneesti!",
|
||||
"prioritySet":"Tiketin prioriteetti on vaihdettu arvoksi {0} käyttäjän {1} toimesta onnistuneesti!",
|
||||
"priorityGet":"Tämän tiketin nykyinen prioriteetti on {0}.",
|
||||
"transfer":"Tiketin omistus on siirretty käyttäjältä {0} käyttäjälle {1} käyttäjän {2} toimesta onnistuneesti!"
|
||||
},
|
||||
"modal":{
|
||||
"closePlaceholder":"Miksi suljit tämän lipun?",
|
||||
@@ -220,7 +242,14 @@
|
||||
"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!"
|
||||
"clearLog":"{1} on poistanut {0} lippua!",
|
||||
|
||||
"transferLog":"Tämän tiketin omistus on siirretty käyttäjältä {0} käyttäjälle {1} käyttäjän {2} toimesta!",
|
||||
"transferDm":"Tiketin omistus on siirretty käyttäjältä {0} käyttäjälle {1} palvelimellamme!",
|
||||
"prioritySetLog":"Tämän tiketin prioriteetti on vaihdettu arvoksi {0} käyttäjän {1} toimesta!",
|
||||
"prioritySetDm":"Tiketin prioriteetti on vaihdettu arvoksi {0} palvelimellamme!",
|
||||
"roleUpdateLog":"{0} on päivittänyt roolinsa!",
|
||||
"roleUpdateDm":"Roolisi palvelimellamme on päivitetty!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
@@ -241,7 +270,19 @@
|
||||
"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. "
|
||||
"error":"Jotain meni pieleen, kun yritettiin luoda transkriptiota. Mitä haluaisit tehdä? Tätä lippua ei poisteta, ennen kuin napsautat jotakin näistä painikkeista. ",
|
||||
"title":"Transkriptiovirhe"
|
||||
},
|
||||
"text":{
|
||||
"messagesTitle":"VIESTIT",
|
||||
"embedTitle":"UPOTUS",
|
||||
"fileTitle":"TIEDOSTO",
|
||||
"fieldsTitle":"KENTÄT",
|
||||
"reactionsTitle":"REAKTIOT",
|
||||
"statsTitle":"TILASTOT",
|
||||
"emptyContent":"<sisältö on tyhjä>",
|
||||
"noTitle":"<ei-otsikkoa>",
|
||||
"noDesc":"<ei-kuvausta>"
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
@@ -257,7 +298,8 @@
|
||||
"unknownPanel":"Tuntematon paneeli",
|
||||
"notInGuild":"Ei Palvelimessa",
|
||||
"channelRename":"Kanavaa ei voi nimetä uudelleen",
|
||||
"busy":"Lippu on varattu"
|
||||
"busy":"Lippu on varattu",
|
||||
"permissionError":"Käyttöoikeusvirhe"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo":"Ota yhteyttä tämän botin omistajaan saadaksesi lisätietoja!",
|
||||
@@ -280,7 +322,10 @@
|
||||
"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!"
|
||||
"busy":"Tätä {0} ei voi käyttää! Botti käsittelee lippua parhaillaan. Yritä uudelleen muutaman sekunnin kuluttua!",
|
||||
"closeBeforeMessage":"Tätä tikettiä ei voi sulkea/poistaa ennen kuin käyttäjä on lähettänyt viestin.",
|
||||
"closeBeforeAdminMessage":"Tätä tikettiä ei voi sulkea/poistaa ennen kuin tikettien ylläpitäjä tai tukihenkilö on lähettänyt viestin.",
|
||||
"unableToCreateTicket":"Et voi luoda tikettiä."
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex":"Arvo ei vastaa mallia!",
|
||||
@@ -331,7 +376,6 @@
|
||||
"added":"Lisätty",
|
||||
"removed":"Poistettu",
|
||||
"filter":"Suodattaa",
|
||||
"claimedBy":"Vaatimuksen tekijä: {0}",
|
||||
"method":"Menetelmä",
|
||||
"type":"Tyyppi",
|
||||
"blacklisted":"Mustalla listalla",
|
||||
@@ -352,10 +396,30 @@
|
||||
"version":"Versio",
|
||||
"name":"Nimi",
|
||||
"role":"Rooli",
|
||||
"status":"Status",
|
||||
"status":"Tila",
|
||||
"claimed":"Väitetty",
|
||||
"pinned":"Kiinnitetty",
|
||||
"creationDate":"Luontipäivämäärä"
|
||||
"creationDate":"Luontipäivämäärä",
|
||||
|
||||
"noone":"Ei Kukaan",
|
||||
"open":"Avoin",
|
||||
"closed":"Suljettu",
|
||||
"priority":"Prioriteetti",
|
||||
"participants":"Osallistujat",
|
||||
"yes":"Kyllä",
|
||||
"no":"Ei",
|
||||
"option":"Vaihtoehto",
|
||||
"topic":"Aihe",
|
||||
"uptime":"Järjestelmän Käyttöaika",
|
||||
"messages":"Viestit",
|
||||
"embeds":"Upotukset",
|
||||
"files":"Tiedostot",
|
||||
"components":"Komponentit",
|
||||
"cooldown":"Jäähy",
|
||||
"maxTickets":"Maksimi Tiketit",
|
||||
"admins":"Ylläpitäjät",
|
||||
"roles":"Roolit",
|
||||
"size":"Koko"
|
||||
},
|
||||
"lowercase":{
|
||||
"text":"teksti",
|
||||
@@ -384,6 +448,7 @@
|
||||
"unclaim":"Peruuta lippu.",
|
||||
"pin":"Kiinnitä lippu.",
|
||||
"unpin":"Irrota lippu.",
|
||||
|
||||
"move":"Siirrä lippu.",
|
||||
"moveId":"Sen vaihtoehdon tunniste, johon haluat siirtyä.",
|
||||
"rename":"Nimeä lippu uudelleen.",
|
||||
@@ -392,6 +457,7 @@
|
||||
"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.",
|
||||
@@ -405,6 +471,7 @@
|
||||
"statsUserUser":"Käyttäjä katsella.",
|
||||
"statsTicket":"Tarkastele lipun tilastoja palvelimella.",
|
||||
"statsTicketTicket":"Lippu katsottavaksi.",
|
||||
|
||||
"clear":"Poista useita lippuja samanaikaisesti.",
|
||||
"clearFilter":"Lippujen tyhjennyssuodatin.",
|
||||
"clearFilters":{
|
||||
@@ -417,6 +484,7 @@
|
||||
"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.",
|
||||
@@ -424,7 +492,19 @@
|
||||
"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."
|
||||
"autodeleteEnableTime":"Kuinka monta päivää tämän lipun on oltava passiivinen, jotta se voidaan poistaa.",
|
||||
|
||||
"topic":"Hallitse tikettikanavan aihetta.",
|
||||
"topicSet":"Aseta tikettikanavan aihe.",
|
||||
"topicValue":"Kanavan uusi aihe.",
|
||||
"topicList":"Hae lista kaikista tiketeistä niiden aiheen ja tilastojen kanssa.",
|
||||
"priority":"Hallitse tiketin prioriteettia.",
|
||||
"prioritySet":"Aseta tiketin prioriteetti.",
|
||||
"priorityValue":"Kanavan prioriteetti.",
|
||||
"priorityGet":"Hae tiketin prioriteetti.",
|
||||
"priorityList":"Hae lista kaikista tiketeistä ja niiden prioriteettitilasta.",
|
||||
"transfer":"Siirrä tiketin omistus käyttäjältä toiselle.",
|
||||
"transferUser":"Käyttäjä, jolle omistus siirretään."
|
||||
},
|
||||
"helpMenu":{
|
||||
"help":"Hanki luettelo kaikista käytettävissä olevista komennoista.",
|
||||
@@ -452,7 +532,16 @@
|
||||
"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."
|
||||
"autodeleteEnable":"Ota automaattinen poisto käyttöön tässä lipussa.",
|
||||
"categories":{
|
||||
"general":"Yleiset Komennot",
|
||||
"basicTicket":"Perus Tikettikomennot",
|
||||
"advancedTicket":"Edistyneet Tikettikomennot",
|
||||
"userTicket":"Käyttäjän Tikettikomennot",
|
||||
"admin":"Ylläpitäjäkomennot",
|
||||
"advanced":"Edistyneet Komennot",
|
||||
"extra":"Lisäkomennot"
|
||||
}
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
@@ -460,7 +549,8 @@
|
||||
"system":"Järjestelmätilastot",
|
||||
"user":"Käyttäjätilastot",
|
||||
"ticket":"Lipputilastot",
|
||||
"participants":"Osallistujat"
|
||||
"participants":"Osallistujat",
|
||||
"messages":"Viestit"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated":"Liput luotu",
|
||||
@@ -472,7 +562,47 @@
|
||||
"ticketsPinned":"Liput kiinni",
|
||||
"ticketsMoved":"Liput siirretty",
|
||||
"usersBlacklisted":"Käyttäjät mustalla listalla",
|
||||
"transcriptsCreated":"Transkriptiot luotu"
|
||||
"transcriptsCreated":"Transkriptiot luotu",
|
||||
"ticketsAutodeleted":"Tiketit Automaattisesti Poistettu",
|
||||
"ticketsTransferred":"Tiketit Siirretty",
|
||||
"ticketVolume":"Tikettilukumäärä",
|
||||
"averageTickets":"Keskimääräiset Tiketit/Käyttäjä",
|
||||
"currentTickets":"Nykyiset Tiketit",
|
||||
"age":"Tiketin Ikä",
|
||||
"responseTime":"Vastausaika",
|
||||
"resolutionTime":"Ratkaisuaika",
|
||||
"createdOn":"Luotu",
|
||||
"createdBy":"Luonut",
|
||||
"closedOn":"Suljettu",
|
||||
"closedBy":"Sulkenut",
|
||||
"claimedOn":"Otettu Vastaan",
|
||||
"claimedBy":"Vastaanottanut",
|
||||
"pinnedOn":"Kiinnitetty",
|
||||
"pinnedBy":"Kiinnittänyt",
|
||||
"deletedOn":"Poistettu",
|
||||
"deletedBy":"Poistanut"
|
||||
},
|
||||
"roles":{
|
||||
"developer":"Kehittäjä",
|
||||
"serverOwner":"Palvelimen Omistaja",
|
||||
"serverAdmin":"Palvelimen Ylläpitäjä",
|
||||
"moderator":"Moderaattoritiimi",
|
||||
"support":"Tukitiimi",
|
||||
"member":"Jäsen"
|
||||
}
|
||||
},
|
||||
"panel":{
|
||||
"selectTicket":"Valitse tikettisi",
|
||||
"selectRole":"Valitse roolisi",
|
||||
"selectOption":"Valitse vaihtoehtosi"
|
||||
},
|
||||
"priorities":{
|
||||
"urgent":"Kiireellinen",
|
||||
"veryHigh":"Erittäin Korkea",
|
||||
"high":"Korkea",
|
||||
"normal":"Normaali",
|
||||
"low":"Matala",
|
||||
"veryLow":"Erittäin Matala",
|
||||
"none":"Ei Mikään"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["guillee3"],
|
||||
"lastedited":"04/12/2024",
|
||||
"language":"French",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["benzorich"],
|
||||
"lastedited":"06/10/2024",
|
||||
"language":"German",
|
||||
|
||||
@@ -0,0 +1,478 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["HanumeshGupta"],
|
||||
"lastedited":"19/06/2025",
|
||||
"language":"Greek",
|
||||
"automated":true
|
||||
},
|
||||
"checker":{
|
||||
"system":{
|
||||
"typeError":"[ΛΑΘΟΣ]",
|
||||
"headerOpenTicket":"ΑΝΟΙΓΜΑ ΕΙΣΙΤΗΡΙΟΥ",
|
||||
"typeWarning":"[ΠΡΟΕΙΔΟΠΟΙΗΣΗ]",
|
||||
"typeInfo":"[ΠΛΗΡΟΦΟΡΙΑ]",
|
||||
"headerConfigChecker":"ΕΛΕΓΧΟΣ ΡΥΘΜΙΣΕΩΝ",
|
||||
"headerDescription":"έλεγχος για λάθη στα αρχεία ρυθμίσεων!",
|
||||
"footerError":"το bot δεν θα ξεκινήσει μέχρι να διορθωθούν όλα τα {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":"Αυτό το boolean δεν μπορεί να είναι true!",
|
||||
"booleanFalse":"Αυτό το boolean δεν μπορεί να είναι false!",
|
||||
|
||||
"arrayEmptyDisabled":"Αυτός ο πίνακας δεν επιτρέπεται να είναι κενός!",
|
||||
"arrayEmptyRequired":"Αυτός ο πίνακας πρέπει να είναι κενός!",
|
||||
"arrayTooShort":"Αυτός ο πίνακας πρέπει να έχει μήκος τουλάχιστον {0}!",
|
||||
"arrayTooLong":"Αυτός ο πίνακας πρέπει να έχει μήκος το πολύ {0}!",
|
||||
"arrayLengthInvalid":"Αυτός ο πίνακας πρέπει να έχει μήκος {0}!",
|
||||
"arrayInvalidTypes":"Αυτός ο πίνακας μπορεί να περιέχει μόνο τους ακόλουθους τύπους: {0}!",
|
||||
"arrayDouble":"Αυτός ο πίνακας δεν επιτρέπει την ίδια τιμή δύο φορές!",
|
||||
|
||||
"discordInvalidId":"Αυτό είναι ένα άκυρο discord {0} id!",
|
||||
"discordInvalidIdOptions":"Αυτό είναι ένα άκυρο discord {0} id! Μπορείτε επίσης να χρησιμοποιήσετε ένα από αυτά: {1}!",
|
||||
"discordInvalidToken":"Αυτό είναι ένα άκυρο discord token (συντακτικά)!",
|
||||
"colorInvalid":"Αυτό είναι ένα άκυρο hex χρώμα!",
|
||||
"emojiTooShort":"Αυτή η συμβολοσειρά πρέπει να έχει τουλάχιστον {0} emoji!",
|
||||
"emojiTooLong":"Αυτή η συμβολοσειρά πρέπει να έχει το πολύ {0} emoji!",
|
||||
"emojiCustom":"Αυτό το emoji δεν μπορεί να είναι προσαρμοσμένο discord emoji!",
|
||||
"emojiInvalid":"Αυτό είναι ένα άκυρο emoji!",
|
||||
"urlInvalid":"Αυτό το url είναι άκυρο!",
|
||||
"urlInvalidHttp":"Αυτό το url μπορεί να χρησιμοποιήσει μόνο το https:// πρωτόκολλο!",
|
||||
"urlInvalidProtocol":"Αυτό το url μπορεί να χρησιμοποιήσει μόνο τα http:// & https:// πρωτόκολλα!",
|
||||
"urlInvalidHostname":"Αυτό το url έχει μη επιτρεπόμενο hostname!",
|
||||
"urlInvalidExtension":"Αυτό το url έχει άκυρη επέκταση! Επιλέξτε μεταξύ: {0}!",
|
||||
"urlInvalidPath":"Αυτό το url έχει άκυρη διαδρομή!",
|
||||
"idNotUnique":"Αυτό το id δεν είναι μοναδικό, χρησιμοποιήστε άλλο id!",
|
||||
"idNonExistent":"Το id {0} δεν υπάρχει!",
|
||||
|
||||
"invalidType":"Αυτή η ιδιότητα πρέπει να είναι του τύπου: {0}!",
|
||||
"propertyMissing":"Η ιδιότητα {0} λείπει από αυτό το αντικείμενο!",
|
||||
"propertyOptional":"Η ιδιότητα {0} είναι προαιρετική σε αυτό το αντικείμενο!",
|
||||
"objectDisabled":"Αυτό το αντικείμενο είναι απενεργοποιημένο, ενεργοποιήστε το χρησιμοποιώντας {0}!",
|
||||
"nullInvalid":"Αυτή η ιδιότητα δεν μπορεί να είναι null!",
|
||||
"switchInvalidType":"Αυτό πρέπει να είναι ένας από τους ακόλουθους τύπους: {0}!",
|
||||
"objectSwitchInvalid":"Αυτό το αντικείμενο πρέπει να είναι ένας από τους ακόλουθους τύπους: {0}!",
|
||||
|
||||
"invalidLanguage":"Αυτή είναι μια άκυρη γλώσσα!",
|
||||
"invalidButton":"Αυτό το κουμπί πρέπει να έχει τουλάχιστον ένα {0} ή {1}!",
|
||||
"unusedOption":"Η επιλογή {0} δεν χρησιμοποιείται πουθενά!",
|
||||
"unusedQuestion":"Η ερώτηση {0} δεν χρησιμοποιείται πουθενά!",
|
||||
"dropdownOption":"Ένα πάνελ με ενεργοποιημένο dropdown μπορεί να περιέχει μόνο επιλογές τύπου '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":"`<όνομα>` => απαιτούμενη παράμετρος\n`[όνομα]` => προαιρετική παράμετρος",
|
||||
"statsReset":"Τα στατιστικά του bot επαναφέρθηκαν με επιτυχία!",
|
||||
"statsError":"Αδυναμία προβολής στατιστικών εισιτηρίου!\nτο {0} δεν είναι εισιτήριο!",
|
||||
"blacklistAdd":"Ο {0} προστέθηκε στη μαύρη λίστα με επιτυχία!",
|
||||
"blacklistRemove":"Ο {0} αφαιρέθηκε από τη μαύρη λίστα με επιτυχία!",
|
||||
"blacklistGetSuccess":"Ο {0} είναι στη μαύρη λίστα!",
|
||||
"blacklistGetEmpty":"Ο {0} δεν είναι στη μαύρη λίστα!",
|
||||
"blacklistViewEmpty":"Κανείς δεν έχει προστεθεί στη μαύρη λίστα ακόμα!",
|
||||
"blacklistViewTip":"Χρησιμοποιήστε \"/blacklist add\" για να προσθέσετε χρήστη στη μαύρη λίστα!",
|
||||
"clearVerify":"Είστε βέβαιοι ότι θέλετε να διαγράψετε πολλά εισιτήρια;\nΑυτή η ενέργεια δεν μπορεί να αναιρεθεί!",
|
||||
"clearReady":"{0} εισιτήρια διαγράφηκαν με επιτυχία!",
|
||||
"rolesEmpty":"Δεν ενημερώθηκαν ρόλοι!",
|
||||
|
||||
"autocloseLeave":"Αυτό το εισιτήριο έκλεισε αυτόματα επειδή ο δημιουργός άφησε τον server!",
|
||||
"autocloseTimeout":"Αυτό το εισιτήριο έκλεισε αυτόματα επειδή ήταν ανενεργό για περισσότερο από `{0} ώρες`!",
|
||||
"autodeleteLeave":"Αυτό το εισιτήριο διαγράφηκε αυτόματα επειδή ο δημιουργός άφησε τον server!",
|
||||
"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":"Το εισιτήριό σας έκλεισε στον server μας!",
|
||||
"deleteLog":"Αυτό το εισιτήριο διαγράφηκε από τον {0}!",
|
||||
"deleteDm":"Το εισιτήριό σας διαγράφηκε στον server μας!",
|
||||
"reopenLog":"Αυτό το εισιτήριο επαναφέρθηκε από τον {0}!",
|
||||
"reopenDm":"Το εισιτήριό σας επαναφέρθηκε στον server μας!",
|
||||
"claimLog":"Αυτό το εισιτήριο αναλήφθηκε από τον {0}!",
|
||||
"claimDm":"Το εισιτήριό σας αναλήφθηκε στον server μας!",
|
||||
"unclaimLog":"Η ανάληψη αυτού του εισιτηρίου ανακλήθηκε από τον {0}!",
|
||||
"unclaimDm":"Η ανάληψη του εισιτηρίου σας ανακλήθηκε στον server μας!",
|
||||
"pinLog":"Αυτό το εισιτήριο καρφιτσώθηκε από τον {0}!",
|
||||
"pinDm":"Το εισιτήριό σας καρφιτσώθηκε στον server μας!",
|
||||
"unpinLog":"Αυτό το εισιτήριο ξεκαρφιτσώθηκε από τον {0}!",
|
||||
"unpinDm":"Το εισιτήριό σας ξεκαρφιτσώθηκε στον server μας!",
|
||||
"renameLog":"Αυτό το εισιτήριο μετονομάστηκε σε {0} από τον {1}!",
|
||||
"renameDm":"Το εισιτήριό σας μετονομάστηκε σε {0} στον server μας!",
|
||||
"moveLog":"Αυτό το εισιτήριο μετακινήθηκε στο {0} από τον {1}!",
|
||||
"moveDm":"Το εισιτήριό σας μετακινήθηκε στο {0} στον server μας!",
|
||||
"addLog":"Ο {0} προστέθηκε σε αυτό το εισιτήριο από τον {1}!",
|
||||
"addDm":"Ο {0} προστέθηκε στο εισιτήριό σας στον server μας!",
|
||||
"removeLog":"Ο {0} αφαιρέθηκε από αυτό το εισιτήριο από τον {1}!",
|
||||
"removeDm":"Ο {0} αφαιρέθηκε από το εισιτήριό σας στον server μας!",
|
||||
|
||||
"blacklistAddLog":"Ο {0} προστέθηκε στη μαύρη λίστα από τον {1}!",
|
||||
"blacklistRemoveLog":"Ο {0} αφαιρέθηκε από τη μαύρη λίστα από τον {1}!",
|
||||
"blacklistAddDm":"Έχετε προστεθεί στη μαύρη λίστα στον server μας!\nΑπό τώρα, δεν μπορείτε να δημιουργήσετε εισιτήριο!",
|
||||
"blacklistRemoveDm":"Έχετε αφαιρεθεί από τη μαύρη λίστα στον server μας!\nΤώρα μπορείτε να δημιουργήσετε εισιτήρια ξανά!",
|
||||
"clearLog":"{0} εισιτήρια διαγράφηκαν από τον {1}!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
"success":{
|
||||
"visit":"Προβολή Αντιγράφου",
|
||||
"ready":"Δημιουργήθηκε Αντίγραφο",
|
||||
"textFileDescription":"Αυτό είναι το αντίγραφο κειμένου ενός διαγεγραμμένου εισιτηρίου!",
|
||||
"htmlProgress":"Παρακαλώ περιμένετε ενώ επεξεργάζεται αυτό το html αντίγραφο...",
|
||||
|
||||
"createdChannel":"Ένα νέο {0} αντίγραφο δημιουργήθηκε στον server!",
|
||||
"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":"Δεν Είστε σε Server",
|
||||
"channelRename":"Αδυναμία Μετονομασίας Κανάλι",
|
||||
"busy":"Το Εισιτήριο Είναι Απασχολημένο"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo":"Επικοινωνήστε με τον ιδιοκτήτη αυτού του bot για περισσότερες πληροφορίες!",
|
||||
"askForInfoResolve":"Επικοινωνήστε με τον ιδιοκτήτη του bot αν αυτό το πρόβλημα δεν επιλυθεί μετά από μερικές προσπάθειες.",
|
||||
"internalError":"Αποτυχία απόκρισης σε αυτό το {0} λόγω εσωτερικού σφάλματος!",
|
||||
"optionMissing":"Μια απαιτούμενη παράμετρος λείπει από αυτήν την εντολή!",
|
||||
"optionInvalid":"Μια παράμετρος σε αυτήν την εντολή είναι άκυρη!",
|
||||
"optionInvalidChoose":"Επιλέξτε μεταξύ",
|
||||
"unknownCommand":"Δοκιμάστε να επισκεφτείτε το μενού βοήθειας για περισσότερες πληροφορίες!",
|
||||
"noPermissions":"Δεν επιτρέπεται να χρησιμοποιήσετε αυτό το {0}!",
|
||||
"noPermissionsList":"Απαιτούμενα Δικαιώματα: (ένα από αυτά)",
|
||||
"noPermissionsCooldown":"Δεν επιτρέπεται να χρησιμοποιήσετε αυτό το {0} επειδή έχετε cooldown!",
|
||||
"noPermissionsBlacklist":"Δεν επιτρέπεται να χρησιμοποιήσετε αυτό το {0} επειδή είστε στη μαύρη λίστα!",
|
||||
"noPermissionsLimitGlobal":"Δεν επιτρέπεται να δημιουργήσετε εισιτήριο επειδή ο server έφτασε το μέγιστο όριο εισιτηρίων!",
|
||||
"noPermissionsLimitGlobalUser":"Δεν επιτρέπεται να δημιουργήσετε εισιτήριο επειδή έφτασατε το μέγιστο όριο εισιτηρίων!",
|
||||
"noPermissionsLimitOption":"Δεν επιτρέπεται να δημιουργήσετε εισιτήριο επειδή ο server έφτασε το μέγιστο όριο εισιτηρίων για αυτήν την επιλογή!",
|
||||
"noPermissionsLimitOptionUser":"Δεν επιτρέπεται να δημιουργήσετε εισιτήριο επειδή έφτασατε το μέγιστο όριο εισιτηρίων για αυτήν την επιλογή!",
|
||||
"unknownTicket":"Δοκιμάστε ξανά αυτήν την εντολή σε ένα έγκυρο εισιτήριο!",
|
||||
"deprecatedTicket":"Το τρέχον κανάλι δεν είναι έγκυρο εισιτήριο! Μπορεί να ήταν εισιτήριο από παλιά έκδοση του Open Ticket!",
|
||||
"notInGuild":"Αυτό το {0} δεν λειτουργεί σε DM! Παρακαλώ δοκιμάστε ξανά σε έναν server!",
|
||||
"channelRename":"Λόγω discord ratelimits, είναι αδύνατο για το bot να μετονομάσει το κανάλι. Το κανάλι θα μετονομαστεί αυτόματα σε 10 λεπτά αν το bot δεν επανεκκινηθεί.",
|
||||
"channelRenameSource":"Η πηγή αυτού του σφάλματος είναι: {0}",
|
||||
"busy":"Αδυναμία χρήσης αυτού του {0}!\nΤο εισιτήριο είναι αυτή τη στιγμή σε επεξεργασία από το bot.\n\nΠαρακαλώ δοκιμάστε ξανά σε λίγα δευτερόλεπτα!"
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex":"Η τιμή δεν ταιριάζει με το μοτίβο!",
|
||||
"stringMinLength":"Η τιμή πρέπει να είναι τουλάχιστον {0} χαρακτήρες!",
|
||||
"stringMaxLength":"Η τιμή πρέπει να είναι το πολύ {0} χαρακτήρες!",
|
||||
"numberInvalid":"Άκυρος αριθμός!",
|
||||
"numberMin":"Ο αριθμός πρέπει να είναι τουλάχιστον {0}!",
|
||||
"numberMax":"Ο αριθμός πρέπει να είναι το πολύ {0}!",
|
||||
"numberDecimal":"Ο αριθμός δεν μπορεί να είναι δεκαδικός!",
|
||||
"numberNegative":"Ο αριθμός δεν μπορεί να είναι αρνητικός!",
|
||||
"numberPositive":"Ο αριθμός δεν μπορεί να είναι θετικός!",
|
||||
"numberZero":"Ο αριθμός δεν μπορεί να είναι μηδέν!",
|
||||
"channelNotFound":"Αδυναμία εύρεσης καναλιού!",
|
||||
"userNotFound":"Αδυναμία εύρεσης χρήστη!",
|
||||
"roleNotFound":"Αδυναμία εύρεσης ρόλου!",
|
||||
"memberNotFound":"Αδυναμία εύρεσης χρήστη!",
|
||||
"mentionableNotFound":"Αδυναμία εύρεσης χρήστη ή ρόλου!",
|
||||
"channelType":"Άκυρος τύπος καναλιού!",
|
||||
"notInGuild":"Αυτή η επιλογή απαιτεί να είστε σε έναν server!"
|
||||
},
|
||||
"permissions":{
|
||||
"developer":"Πρέπει να είστε ο προγραμματιστής του bot.",
|
||||
"owner":"Πρέπει να είστε ο ιδιοκτήτης του server.",
|
||||
"admin":"Πρέπει να είστε διαχειριστής server.",
|
||||
"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": "Προβολή στατιστικών από το bot, ένα μέλος ή ένα εισιτήριο.",
|
||||
"statsReset": "Επαναφορά όλων των στατιστικών του bot (και έναρξη καταμέτρησης από το μηδέν).",
|
||||
"statsGlobal": "Προβολή παγκόσμιων στατιστικών.",
|
||||
"statsUser": "Προβολή στατιστικών ενός χρήστη στον server.",
|
||||
"statsUserUser": "Ο χρήστης που θα προβληθεί.",
|
||||
"statsTicket": "Προβολή στατιστικών ενός εισιτηρίου στον server.",
|
||||
"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": "Καρφίτσωμα εισιτηρίου. Αυτό θα μετακινήσει το εισιτήριο στην κορυφή και θα προσθέσει ένα emoji '📌' στο όνομα.",
|
||||
"unpin": "Ξεκαρφίτσωμα εισιτηρίου. Το εισιτήριο θα παραμείνει στη θέση του αλλά θα χάσει το emoji '📌'.",
|
||||
"move": "Μετακίνηση εισιτηρίου. Αυτό θα αλλάξει τον τύπο αυτού του εισιτηρίου.",
|
||||
"rename": "Μετονομασία εισιτηρίου. Αυτό θα αλλάξει το όνομα του καναλιού αυτού του εισιτηρίου.",
|
||||
"claim": "Αιτηματοποίηση εισιτηρίου. Με αυτό, μπορείτε να ενημερώσετε την ομάδα σας ότι το χειρίζεστε.",
|
||||
"unclaim": "Ακύρωση αιτηματοποίησης εισιτηρίου. Με αυτό, μπορείτε να ενημερώσετε την ομάδα σας ότι το εισιτήριο είναι ελεύθερο ξανά.",
|
||||
"add": "Προσθήκη χρήστη σε εισιτήριο. Αυτό θα επιτρέψει στον χρήστη να διαβάζει και να γράφει σε αυτό το εισιτήριο.",
|
||||
"remove": "Αφαίρεση χρήστη από εισιτήριο. Αυτό θα αφαιρέσει τη δυνατότητα ανάγνωσης και εγγραφής για έναν χρήστη σε αυτό το εισιτήριο.",
|
||||
"panel": "Δημιουργία μηνύματος με αναπτυσσόμενο μενού ή κουμπιά (για δημιουργία εισιτηρίου).",
|
||||
"blacklistView": "Προβολή λίστας της τρέχουσας μαύρης λίστας.",
|
||||
"blacklistAdd": "Προσθήκη χρήστη στη μαύρη λίστα.",
|
||||
"blacklistRemove": "Αφαίρεση χρήστη από τη μαύρη λίστα.",
|
||||
"blacklistGet": "Λήψη λεπτομερειών από έναν χρήστη στη μαύρη λίστα.",
|
||||
"statsGlobal": "Προβολή παγκόσμιων στατιστικών.",
|
||||
"statsTicket": "Προβολή στατιστικών ενός εισιτηρίου στον server.",
|
||||
"statsUser": "Προβολή στατιστικών ενός χρήστη στον server.",
|
||||
"statsReset": "Επαναφορά όλων των στατιστικών του bot (και έναρξη καταμέτρησης από το μηδέν).",
|
||||
"autocloseDisable": "Απενεργοποίηση αυτόματου κλεισίματος σε αυτό το εισιτήριο.",
|
||||
"autocloseEnable": "Ενεργοποίηση αυτόματου κλεισίματος σε αυτό το εισιτήριο.",
|
||||
"autodeleteDisable": "Απενεργοποίηση αυτόματης διαγραφής σε αυτό το εισιτήριο.",
|
||||
"autodeleteEnable": "Ενεργοποίηση αυτόματης διαγραφής σε αυτό το εισιτήριο."
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
"global": "Παγκόσμια Στατιστικά",
|
||||
"system": "Στατιστικά Συστήματος",
|
||||
"user": "Στατιστικά Χρήστη",
|
||||
"ticket": "Στατιστικά Εισιτηρίου",
|
||||
"participants": "Συμμετέχοντες"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated": "Εισιτήρια Δημιουργήθηκαν",
|
||||
"ticketsClosed": "Εισιτήρια Κλείσαν",
|
||||
"ticketsDeleted": "Εισιτήρια Διαγράφηκαν",
|
||||
"ticketsReopened": "Εισιτήρια Επαναφέρθηκαν",
|
||||
"ticketsAutoclosed": "Εισιτήρια Αυτόματα Κλείσαν",
|
||||
"ticketsClaimed": "Εισιτήρια Αιτηματοποιήθηκαν",
|
||||
"ticketsPinned": "Εισιτήρια Καρφιτσώθηκαν",
|
||||
"ticketsMoved": "Εισιτήρια Μετακινήθηκαν",
|
||||
"usersBlacklisted": "Χρήστες στη Μαύρη Λίστα",
|
||||
"transcriptsCreated": "Μεταγραφές Δημιουργήθηκαν"
|
||||
}
|
||||
}
|
||||
}
|
||||
+146
-16
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"translators":["an_developer"],
|
||||
"lastedited":"14/12/2024",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["challenger_nova"],
|
||||
"lastedited":"09/11/2025",
|
||||
"language":"Hindi",
|
||||
"automated":false
|
||||
},
|
||||
@@ -31,6 +31,14 @@
|
||||
"stringContains":"इस स्ट्रिंग में {0} होना आवश्यक है!",
|
||||
"stringChoices":"यह स्ट्रिंग केवल निम्नलिखित मानों में से एक हो सकती है: {0}!",
|
||||
"stringRegex":"यह स्ट्रिंग अमान्य है!",
|
||||
"stringInvertedContains":"इस स्ट्रिंग में {0} शामिल नहीं होना चाहिए!",
|
||||
"stringLowercase":"यह स्ट्रिंग केवल छोटे अक्षरों में लिखी जानी चाहिए!",
|
||||
"stringUppercase":"यह स्ट्रिंग केवल बड़े अक्षरों में लिखी जानी चाहिए!",
|
||||
"stringSpecialCharacters":"इस स्ट्रिंग में कोई विशेष अक्षर नहीं होना चाहिए! (केवल a-z, 0-9 और स्पेस अनुमत हैं)",
|
||||
"stringNoSpaces":"इस स्ट्रिंग में स्पेस नहीं होना चाहिए!",
|
||||
"stringCapitalWord":"यह अनुशंसा की जाती है कि इस स्ट्रिंग के प्रत्येक शब्द की शुरुआत बड़े अक्षर से हो!",
|
||||
"stringCapitalSentence":"ऐसा लगता है कि इस स्ट्रिंग में कुछ वाक्य बड़े अक्षर से शुरू नहीं होते हैं!",
|
||||
"stringPunctuation":"ऐसा लगता है कि इस स्ट्रिंग का वाक्य विराम चिह्न के साथ समाप्त नहीं होता है!",
|
||||
|
||||
"numberTooShort":"यह संख्या {0} वर्णों से छोटी नहीं हो सकती!",
|
||||
"numberTooLong":"यह संख्या {0} वर्णों से अधिक लंबी नहीं हो सकती!",
|
||||
@@ -48,6 +56,8 @@
|
||||
"numberNegative":"यह संख्या ऋणात्मक नहीं हो सकती!",
|
||||
"numberPositive":"यह संख्या सकारात्मक नहीं हो सकती!",
|
||||
"numberZero":"यह संख्या शून्य नहीं हो सकती!",
|
||||
"numberNan":"यह संख्या NaN (Not A Number) नहीं हो सकती!",
|
||||
"numberInvertedContains":"इस संख्या में {0} शामिल नहीं होना चाहिए!",
|
||||
|
||||
"booleanTrue":"यह बूलियन सत्य नहीं हो सकता!",
|
||||
"booleanFalse":"यह बूलियन झूठा नहीं हो सकता!",
|
||||
@@ -89,7 +99,8 @@
|
||||
"invalidButton":"इस बटन पर कम से कम {0} या {1} होना आवश्यक है!",
|
||||
"unusedOption":"विकल्प {0} का उपयोग कहीं भी नहीं किया जाता है!",
|
||||
"unusedQuestion":"प्रश्न {0} का प्रयोग कहीं भी नहीं किया गया है!",
|
||||
"dropdownOption":"ड्रॉपडाउन सक्षम पैनल में केवल 'टिकट' प्रकार के विकल्प हो सकते हैं!"
|
||||
"dropdownOption":"ड्रॉपडाउन सक्षम पैनल में केवल 'टिकट' प्रकार के विकल्प हो सकते हैं!",
|
||||
"customInvalidVersion":"आपके कॉन्फ़िग में निर्दिष्ट संस्करण मेल नहीं खाता! कृपया सुनिश्चित करें कि आपने कॉन्फ़िग को नवीनतम संस्करण में अपडेट किया है!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
@@ -132,6 +143,7 @@
|
||||
"blacklistAddDm":"ब्लैकलिस्ट में जोड़ा गया",
|
||||
"blacklistRemoveDm":"काली सूची से हटाया गया",
|
||||
"clear":"टिकट साफ़ हो गए",
|
||||
"clearTickets":"टिकट साफ़ करें",
|
||||
"roles":"भूमिकाएँ अद्यतन की गईं",
|
||||
|
||||
"autoclose":"टिकट स्वतः बंद",
|
||||
@@ -139,7 +151,12 @@
|
||||
"autocloseDisabled":"स्वत: बंद अक्षम",
|
||||
"autodelete":"टिकट स्वतः हटा दिया गया",
|
||||
"autodeleteEnabled":"स्वतः हटाना सक्षम",
|
||||
"autodeleteDisabled":"स्वतः हटाना अक्षम"
|
||||
"autodeleteDisabled":"स्वतः हटाना अक्षम",
|
||||
|
||||
"topicSet":"विषय बदला गया",
|
||||
"prioritySet":"प्राथमिकता बदली गई",
|
||||
"priorityGet":"टिकट प्राथमिकता",
|
||||
"transfer":"टिकट स्थानांतरित किया गया"
|
||||
},
|
||||
"descriptions":{
|
||||
"create":"आपका टिकट बन गया है. ",
|
||||
@@ -180,7 +197,12 @@
|
||||
"ticketMessageLimit":"आप एक ही समय में केवल {0} टिकट बना सकते हैं!",
|
||||
"ticketMessageAutoclose":"{0}घंटे तक निष्क्रिय रहने पर यह टिकट स्वतः बंद हो जाएगा!",
|
||||
"ticketMessageAutodelete":"{0} दिनों तक निष्क्रिय रहने पर यह टिकट स्वतः हटा दिया जाएगा!",
|
||||
"panelReady":"आप नीचे पैनल पा सकते हैं!\n"
|
||||
"panelReady":"पैनल फॉलोअप संदेश में उपलब्ध है!\nयह संदेश अब हटाया जा सकता है!",
|
||||
|
||||
"topicSet":"चैनल का विषय {0} द्वारा सफलतापूर्वक बदल दिया गया है!",
|
||||
"prioritySet":"टिकट की प्राथमिकता {1} द्वारा {0} में सफलतापूर्वक बदल दी गई है!",
|
||||
"priorityGet":"इस टिकट की वर्तमान प्राथमिकता {0} है।",
|
||||
"transfer":"टिकट का स्वामित्व {0} से {1} में {2} द्वारा सफलतापूर्वक स्थानांतरित कर दिया गया है!"
|
||||
},
|
||||
"modal":{
|
||||
"closePlaceholder":"आपने यह टिकट क्यों बंद कर दिया?",
|
||||
@@ -220,7 +242,14 @@
|
||||
"blacklistRemoveLog":"{0} को {1} द्वारा काली सूची से हटा दिया गया था!",
|
||||
"blacklistAddDm":"आपको हमारे सर्वर में काली सूची में डाल दिया गया है!\n",
|
||||
"blacklistRemoveDm":"आपको हमारे सर्वर में ब्लैकलिस्ट से हटा दिया गया है!\n",
|
||||
"clearLog":"{0} टिकटें {1} द्वारा हटा दी गई हैं!"
|
||||
"clearLog":"{0} टिकटें {1} द्वारा हटा दी गई हैं!",
|
||||
|
||||
"transferLog":"इस टिकट का स्वामित्व {0} से {1} में {2} द्वारा स्थानांतरित किया गया है!",
|
||||
"transferDm":"आपके टिकट का स्वामित्व हमारे सर्वर में {0} से {1} में स्थानांतरित कर दिया गया है!",
|
||||
"prioritySetLog":"इस टिकट की प्राथमिकता {1} द्वारा {0} में बदल दी गई है!",
|
||||
"prioritySetDm":"आपके टिकट की प्राथमिकता हमारे सर्वर में {0} में बदल दी गई है!",
|
||||
"roleUpdateLog":"{0} ने अपनी भूमिकाएँ अपडेट की हैं!",
|
||||
"roleUpdateDm":"आपकी भूमिकाएँ हमारे सर्वर में अपडेट कर दी गई हैं!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
@@ -241,7 +270,19 @@
|
||||
"retry":"पुन: प्रयास करें",
|
||||
"continue":"प्रतिलेख के बिना हटाएँ",
|
||||
"backup":"बैकअप ट्रांस्क्रिप्ट बनाएं",
|
||||
"error":"प्रतिलेख बनाने का प्रयास करते समय कुछ गलत हो गया।\n"
|
||||
"error":"प्रतिलेख बनाने का प्रयास करते समय कुछ गलत हो गया।\n",
|
||||
"title":"ट्रांसक्रिप्ट त्रुटि"
|
||||
},
|
||||
"text":{
|
||||
"messagesTitle":"संदेश",
|
||||
"embedTitle":"एम्बेड",
|
||||
"fileTitle":"फ़ाइल",
|
||||
"fieldsTitle":"फ़ील्ड्स",
|
||||
"reactionsTitle":"प्रतिक्रियाएँ",
|
||||
"statsTitle":"आँकड़े",
|
||||
"emptyContent":"<सामग्री खाली है>",
|
||||
"noTitle":"<कोई शीर्षक नहीं>",
|
||||
"noDesc":"<कोई विवरण नहीं>"
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
@@ -257,7 +298,8 @@
|
||||
"unknownPanel":"अज्ञात पैनल",
|
||||
"notInGuild":"सर्वर में नहीं",
|
||||
"channelRename":"चैनल का नाम बदलने में असमर्थ",
|
||||
"busy":"टिकट व्यस्त है"
|
||||
"busy":"टिकट व्यस्त है",
|
||||
"permissionError":"अनुमति त्रुटि"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo":"अधिक जानकारी के लिए इस बॉट के मालिक से संपर्क करें!",
|
||||
@@ -280,7 +322,10 @@
|
||||
"notInGuild":"यह {0} डीएम में काम नहीं करता! ",
|
||||
"channelRename":"विवाद की दर सीमा के कारण, वर्तमान में बॉट के लिए चैनल का नाम बदलना असंभव है। ",
|
||||
"channelRenameSource":"इस त्रुटि का स्रोत है: {0}",
|
||||
"busy":"इस {0} का उपयोग करने में असमर्थ!\n"
|
||||
"busy":"इस {0} का उपयोग करने में असमर्थ!\n",
|
||||
"closeBeforeMessage":"किसी उपयोगकर्ता द्वारा संदेश भेजे जाने से पहले इस टिकट को बंद/हटाया नहीं जा सकता।",
|
||||
"closeBeforeAdminMessage":"टिकट एडमिन या सपोर्ट सदस्य द्वारा संदेश भेजे जाने से पहले इस टिकट को बंद/हटाया नहीं जा सकता।",
|
||||
"unableToCreateTicket":"आप टिकट बनाने में असमर्थ हैं।"
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex":"मान पैटर्न से मेल नहीं खाता!",
|
||||
@@ -331,7 +376,6 @@
|
||||
"added":"जोड़ा",
|
||||
"removed":"निकाला गया",
|
||||
"filter":"फ़िल्टर",
|
||||
"claimedBy":"{0} द्वारा दावा किया गया",
|
||||
"method":"तरीका",
|
||||
"type":"प्रकार",
|
||||
"blacklisted":"ब्लैक लिस्ट किया",
|
||||
@@ -355,7 +399,27 @@
|
||||
"status":"स्थिति",
|
||||
"claimed":"दावा किया",
|
||||
"pinned":"पिन की गई",
|
||||
"creationDate":"निर्माण तिथि"
|
||||
"creationDate":"निर्माण तिथि",
|
||||
|
||||
"noone":"कोई नहीं",
|
||||
"open":"खुला",
|
||||
"closed":"बंद",
|
||||
"priority":"प्राथमिकता",
|
||||
"participants":"प्रतिभागी",
|
||||
"yes":"हाँ",
|
||||
"no":"नहीं",
|
||||
"option":"विकल्प",
|
||||
"topic":"विषय",
|
||||
"uptime":"सिस्टम अपटाइम",
|
||||
"messages":"संदेश",
|
||||
"embeds":"एम्बेड्स",
|
||||
"files":"फ़ाइलें",
|
||||
"components":"घटक",
|
||||
"cooldown":"कूलडाउन",
|
||||
"maxTickets":"अधिकतम टिकट",
|
||||
"admins":"एडमिन",
|
||||
"roles":"भूमिकाएँ",
|
||||
"size":"आकार"
|
||||
},
|
||||
"lowercase":{
|
||||
"text":"मूलपाठ",
|
||||
@@ -384,6 +448,7 @@
|
||||
"unclaim":"टिकट का दावा रद्द करें.",
|
||||
"pin":"टिकट पिन करें.",
|
||||
"unpin":"टिकट अनपिन करें.",
|
||||
|
||||
"move":"एक टिकट ले जाएँ.",
|
||||
"moveId":"उस विकल्प का पहचानकर्ता जिस पर आप जाना चाहते हैं.",
|
||||
"rename":"टिकट का नाम बदलें.",
|
||||
@@ -392,6 +457,7 @@
|
||||
"addUser":"उपयोगकर्ता को जोड़ना है.",
|
||||
"remove":"किसी उपयोगकर्ता को टिकट से हटाएँ.",
|
||||
"removeUser":"उपयोगकर्ता को हटाना है.",
|
||||
|
||||
"blacklist":"टिकट ब्लैकलिस्ट प्रबंधित करें.",
|
||||
"blacklistView":"वर्तमान ब्लैकलिस्ट की सूची देखें.",
|
||||
"blacklistAdd":"किसी उपयोगकर्ता को काली सूची में जोड़ें.",
|
||||
@@ -405,6 +471,7 @@
|
||||
"statsUserUser":"देखने के लिए उपयोगकर्ता.",
|
||||
"statsTicket":"सर्वर में टिकट के आँकड़े देखें।",
|
||||
"statsTicketTicket":"देखने के लिए टिकट.",
|
||||
|
||||
"clear":"एक ही समय में एकाधिक टिकट हटाएँ।",
|
||||
"clearFilter":"टिकट साफ़ करने के लिए फ़िल्टर.",
|
||||
"clearFilters":{
|
||||
@@ -417,6 +484,7 @@
|
||||
"unpin":"अनपिन किया गया",
|
||||
"autoclose":"स्वतः बंद"
|
||||
},
|
||||
|
||||
"autoclose":"किसी टिकट में ऑटोक्लोज़ प्रबंधित करें.",
|
||||
"autocloseDisable":"इस टिकट में ऑटोक्लोज़ अक्षम करें.",
|
||||
"autocloseEnable":"इस टिकट में ऑटोक्लोज़ सक्षम करें।",
|
||||
@@ -424,7 +492,19 @@
|
||||
"autodelete":"किसी टिकट में स्वत: हटाना प्रबंधित करें.",
|
||||
"autodeleteDisable":"इस टिकट में ऑटोडिलीट अक्षम करें।",
|
||||
"autodeleteEnable":"इस टिकट में ऑटोडिलीट सक्षम करें।",
|
||||
"autodeleteEnableTime":"इस टिकट को हटाने के लिए उतने दिनों की संख्या निष्क्रिय होनी चाहिए।"
|
||||
"autodeleteEnableTime":"इस टिकट को हटाने के लिए उतने दिनों की संख्या निष्क्रिय होनी चाहिए।",
|
||||
|
||||
"topic":"टिकट चैनल के विषय का प्रबंधन करें।",
|
||||
"topicSet":"टिकट चैनल का विषय सेट करें।",
|
||||
"topicValue":"चैनल का नया विषय।",
|
||||
"topicList":"सभी टिकटों की सूची प्राप्त करें जिनके विषय और आँकड़े शामिल हैं।",
|
||||
"priority":"टिकट की प्राथमिकता का प्रबंधन करें।",
|
||||
"prioritySet":"टिकट की प्राथमिकता सेट करें।",
|
||||
"priorityValue":"चैनल की प्राथमिकता।",
|
||||
"priorityGet":"टिकट की प्राथमिकता प्राप्त करें।",
|
||||
"priorityList":"सभी टिकटों की प्राथमिकता स्थिति की सूची प्राप्त करें।",
|
||||
"transfer":"टिकट का स्वामित्व एक उपयोगकर्ता से दूसरे को स्थानांतरित करें।",
|
||||
"transferUser":"जिस उपयोगकर्ता को स्थानांतरित करना है।"
|
||||
},
|
||||
"helpMenu":{
|
||||
"help":"सभी उपलब्ध आदेशों की सूची प्राप्त करें.",
|
||||
@@ -452,7 +532,16 @@
|
||||
"autocloseDisable":"इस टिकट में ऑटोक्लोज़ अक्षम करें.",
|
||||
"autocloseEnable":"इस टिकट में ऑटोक्लोज़ सक्षम करें।",
|
||||
"autodeleteDisable":"इस टिकट में ऑटोडिलीट अक्षम करें।",
|
||||
"autodeleteEnable":"इस टिकट में ऑटोडिलीट सक्षम करें।"
|
||||
"autodeleteEnable":"इस टिकट में ऑटोडिलीट सक्षम करें।",
|
||||
"categories":{
|
||||
"general":"सामान्य कमांड्स",
|
||||
"basicTicket":"मूल टिकट कमांड्स",
|
||||
"advancedTicket":"उन्नत टिकट कमांड्स",
|
||||
"userTicket":"उपयोगकर्ता टिकट कमांड्स",
|
||||
"admin":"एडमिन कमांड्स",
|
||||
"advanced":"उन्नत कमांड्स",
|
||||
"extra":"अतिरिक्त कमांड्स"
|
||||
}
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
@@ -460,7 +549,8 @@
|
||||
"system":"सिस्टम आँकड़े",
|
||||
"user":"उपयोगकर्ता आँकड़े",
|
||||
"ticket":"टिकट आँकड़े",
|
||||
"participants":"प्रतिभागियों"
|
||||
"participants":"प्रतिभागियों",
|
||||
"messages":"संदेश"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated":"टिकट बनाये गये",
|
||||
@@ -472,7 +562,47 @@
|
||||
"ticketsPinned":"टिकट पिन किये गये",
|
||||
"ticketsMoved":"टिकट ले जाया गया",
|
||||
"usersBlacklisted":"उपयोगकर्ता ब्लैकलिस्टेड",
|
||||
"transcriptsCreated":"प्रतिलिपियाँ बनाई गईं"
|
||||
"transcriptsCreated":"प्रतिलिपियाँ बनाई गईं",
|
||||
"ticketsAutodeleted":"टिकट स्वचालित रूप से हटाए गए",
|
||||
"ticketsTransferred":"स्थानांतरित टिकट",
|
||||
"ticketVolume":"टिकट मात्रा",
|
||||
"averageTickets":"औसत टिकट/उपयोगकर्ता",
|
||||
"currentTickets":"वर्तमान टिकट",
|
||||
"age":"टिकट की आयु",
|
||||
"responseTime":"प्रतिक्रिया समय",
|
||||
"resolutionTime":"समाधान समय",
|
||||
"createdOn":"निर्माण तिथि",
|
||||
"createdBy":"द्वारा बनाया गया",
|
||||
"closedOn":"बंद करने की तिथि",
|
||||
"closedBy":"द्वारा बंद किया गया",
|
||||
"claimedOn":"दावा की गई तिथि",
|
||||
"claimedBy":"द्वारा दावा किया गया",
|
||||
"pinnedOn":"पिन की गई तिथि",
|
||||
"pinnedBy":"द्वारा पिन किया गया",
|
||||
"deletedOn":"हटाने की तिथि",
|
||||
"deletedBy":"द्वारा हटाया गया"
|
||||
},
|
||||
"roles":{
|
||||
"developer":"डेवलपर",
|
||||
"serverOwner":"सर्वर स्वामी",
|
||||
"serverAdmin":"सर्वर एडमिन",
|
||||
"moderator":"मॉडरेटर टीम",
|
||||
"support":"सपोर्ट टीम",
|
||||
"member":"सदस्य"
|
||||
}
|
||||
},
|
||||
"panel":{
|
||||
"selectTicket":"अपना टिकट चुनें",
|
||||
"selectRole":"अपनी भूमिका चुनें",
|
||||
"selectOption":"अपना विकल्प चुनें"
|
||||
},
|
||||
"priorities":{
|
||||
"urgent":"अत्यावश्यक",
|
||||
"veryHigh":"बहुत उच्च",
|
||||
"high":"उच्च",
|
||||
"normal":"सामान्य",
|
||||
"low":"निम्न",
|
||||
"veryLow":"बहुत निम्न",
|
||||
"none":"कोई नहीं"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["Kornel0706"],
|
||||
"lastedited":"22/08/2024",
|
||||
"language":"Hungarian",
|
||||
|
||||
+147
-17
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["erxg"],
|
||||
"lastedited":"25/08/2024",
|
||||
"lastedited":"09/11/2025",
|
||||
"language":"Indonesian",
|
||||
"automated":false
|
||||
},
|
||||
@@ -31,6 +31,14 @@
|
||||
"stringContains":"String ini harus mengandung {0}!",
|
||||
"stringChoices":"String ini hanya dapat berupa salah satu dari nilai berikut ini: {0}!",
|
||||
"stringRegex":"String ini tidak valid!",
|
||||
"stringInvertedContains":"Teks ini tidak boleh mengandung {0}!",
|
||||
"stringLowercase":"Teks ini harus ditulis dalam huruf kecil saja!",
|
||||
"stringUppercase":"Teks ini harus ditulis dalam huruf kecil besar!",
|
||||
"stringSpecialCharacters":"Teks ini tidak boleh mengandung karakter khusus apa pun! (Hanya huruf a-z, angka 0-9, dan spasi)",
|
||||
"stringNoSpaces":"Teks ini tidak boleh mengandung spasi",
|
||||
"stringCapitalWord":"Disarankan agar setiap kata dalam teks ini dimulai dengan huruf kapital!",
|
||||
"stringCapitalSentence":"Sepertinya beberapa kalimat dalam teks ini tidak dimulai dengan huruf kapital!",
|
||||
"stringPunctuation":"Sepertinya kalimat dalam teks ini tidak diakhiri dengan tanda baca!",
|
||||
|
||||
"numberTooShort":"Nomor ini tidak boleh lebih pendek dari {0} karakter!",
|
||||
"numberTooLong":"Nomor ini tidak boleh lebih panjang dari {0} karakter!",
|
||||
@@ -48,6 +56,8 @@
|
||||
"numberNegative":"Nomor ini tidak boleh negatif!",
|
||||
"numberPositive":"Nomor ini tidak boleh positif!",
|
||||
"numberZero":"Nomor ini tidak boleh nol!",
|
||||
"numberNan":"Nomor ini tidak boleh NaN (Bukan Angka)!",
|
||||
"numberInvertedContains":"Nomor ini tidak boleh mengandung {0}!",
|
||||
|
||||
"booleanTrue":"Boolean ini tidak boleh benar!",
|
||||
"booleanFalse":"Boolean ini tidak boleh salah!",
|
||||
@@ -89,7 +99,8 @@
|
||||
"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'!"
|
||||
"dropdownOption":"Panel dengan menu tarik-ulur yang diaktifkan hanya dapat berisi opsi dengan tipe 'tiket'!",
|
||||
"customInvalidVersion":"Versi yang ditetapkan dalam konfigurasi tidak sesuai! Pastikan konfigurasi Anda telah diperbarui ke versi terbaru!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
@@ -132,6 +143,7 @@
|
||||
"blacklistAddDm":"Ditambahkan ke Daftar Hitam",
|
||||
"blacklistRemoveDm":"Dihapus dari Daftar Hitam",
|
||||
"clear":"Tiket dibersihkan.",
|
||||
"clearTickets":"Bersihkan Tiket",
|
||||
"roles":"Peran Diperbarui",
|
||||
|
||||
"autoclose":"Tiket Ditutup Otomatis",
|
||||
@@ -139,7 +151,12 @@
|
||||
"autocloseDisabled":"Tutup Otomatis Dimatikan",
|
||||
"autodelete":"Tiket Dihapus Otomatis",
|
||||
"autodeleteEnabled":"Hapus Otomatis Diaktifkan",
|
||||
"autodeleteDisabled":"Hapus Otomatis Dinonaktifkan"
|
||||
"autodeleteDisabled":"Hapus Otomatis Dinonaktifkan",
|
||||
|
||||
"topicSet":"Topik Diganti",
|
||||
"prioritySet":"Prioritas Berganti",
|
||||
"priorityGet":"Prioritas Tiket",
|
||||
"transfer":"Tiket Ditransfer"
|
||||
},
|
||||
"descriptions":{
|
||||
"create":"Tiket kamu telah dibuat. Klik tombol di bawah ini untuk mengaksesnya!",
|
||||
@@ -180,7 +197,12 @@
|
||||
"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!"
|
||||
"panelReady":"Panel ini tersedia dalam pesan tindak lanjut!\nPesan ini sekarang dapat dihapus!",
|
||||
|
||||
"topicSet":"Topik kanal ini telah diubah oleh {0}!",
|
||||
"prioritySet":"Prioritas tiket ini telah diubah menjadi {0} oleh {1}!",
|
||||
"priorityGet":"Prioritas tiket ini pada saat ini adalah {0}.",
|
||||
"transfer":"Status kepemilikan tiket telah berhasil dipindahkan dari {0} ke {1} oleh {2}!"
|
||||
},
|
||||
"modal":{
|
||||
"closePlaceholder":"Mengapa kamu menutup tiket ini?",
|
||||
@@ -220,7 +242,14 @@
|
||||
"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}!"
|
||||
"clearLog":"Tiket {0} telah dihapus oleh {1}!",
|
||||
|
||||
"transferLog":"Kepemilikan tiket ini telah berhasil dipindahkan dari {0} ke {1} oleh {2}",
|
||||
"transferDm":"Kepemilikan tiket kamu sudah dialihkan dari {0} ke {1} di server kami!",
|
||||
"prioritySetLog":"Prioritas tiket ini telah diubah menjadi {0} oleh {1}!",
|
||||
"prioritySetDm":"Prioritas tiket kamu telah diubah menjadi {0} di server kami!",
|
||||
"roleUpdateLog":"{0} telah memperbarui status mereka!",
|
||||
"roleUpdateDm":"Status kamu di server kami telah diperbarui!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
@@ -241,7 +270,19 @@
|
||||
"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."
|
||||
"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.",
|
||||
"title":"Kesalahan Dalam Pembuatan Transkrip"
|
||||
},
|
||||
"text":{
|
||||
"messagesTitle":"PESAN",
|
||||
"embedTitle":"SEMATAN",
|
||||
"fileTitle":"BERKAS",
|
||||
"fieldsTitle":"BIDANG",
|
||||
"reactionsTitle":"REAKSI",
|
||||
"statsTitle":"STATUS",
|
||||
"emptyContent":"<isi dokumen kosong>",
|
||||
"noTitle":"<tidak-ada-judul>",
|
||||
"noDesc":"<tidak-ada-deskripsi>"
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
@@ -257,7 +298,8 @@
|
||||
"unknownPanel":"Panel Tidak Diketahui",
|
||||
"notInGuild":"Tidak Berada Di Dalam Server",
|
||||
"channelRename":"Tidak Dapat Mengganti Nama Saluran",
|
||||
"busy":"Tidak Sedang Sibuk"
|
||||
"busy":"Tidak Sedang Sibuk",
|
||||
"permissionError":"Terjadi Kesalahan Hak Akses"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo":"Hubungi pemilik bot ini untuk info lebih lanjut!",
|
||||
@@ -272,15 +314,18 @@
|
||||
"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!",
|
||||
"noPermissionsLimitGlobalUser":"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!",
|
||||
"noPermissionsLimitOptionUser":"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!"
|
||||
"busy":"Dapat dapat menggunakan {0}!\nTiket sedang diproses oleh bot.\n\nMohon coba beberapa saat lagi!",
|
||||
"closeBeforeMessage":"Tiket ini tidak dapat ditutup ataupun dihapus sebelum pesan dikirim oleh seseorang.",
|
||||
"closeBeforeAdminMessage":"Tiket ini tidak dapat ditutup ataupun dihapus sebelum admin tiket atau anggota tim dukungan mengirimkan pesan.",
|
||||
"unableToCreateTicket":"Anda tidak dapat membuat tiket.."
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex":"Nilai tidak sesuai pola!",
|
||||
@@ -331,7 +376,6 @@
|
||||
"added":"Ditambahkan",
|
||||
"removed":"Dikeluarkan",
|
||||
"filter":"Penyaring",
|
||||
"claimedBy":"Diklaim oleh {0}",
|
||||
"method":"Metode",
|
||||
"type":"Tipe",
|
||||
"blacklisted":"Daftar hitam",
|
||||
@@ -355,7 +399,27 @@
|
||||
"status":"Status",
|
||||
"claimed":"Diklaim",
|
||||
"pinned":"Disematkan",
|
||||
"creationDate":"Tanggal Pembuatan"
|
||||
"creationDate":"Tanggal Pembuatan",
|
||||
|
||||
"noone":"Tidak Seorangpun",
|
||||
"open":"Buka",
|
||||
"closed":"Tutup",
|
||||
"priority":"Prioritas",
|
||||
"participants":"Para Partisipan",
|
||||
"yes":"Ya",
|
||||
"no":"Tidak",
|
||||
"option":"Opsi",
|
||||
"topic":"Topik",
|
||||
"uptime":"Waktu Aktif Sistem",
|
||||
"messages":"Pesan",
|
||||
"embeds":"Sematan",
|
||||
"files":"Berkas",
|
||||
"components":"Komponen",
|
||||
"cooldown":"Cooldown",
|
||||
"maxTickets":"Tiket Maksimum",
|
||||
"admins":"Admin",
|
||||
"roles":"Hak",
|
||||
"size":"Ukuran"
|
||||
},
|
||||
"lowercase":{
|
||||
"text":"teks",
|
||||
@@ -384,6 +448,7 @@
|
||||
"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.",
|
||||
@@ -392,6 +457,7 @@
|
||||
"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.",
|
||||
@@ -405,6 +471,7 @@
|
||||
"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":{
|
||||
@@ -417,6 +484,7 @@
|
||||
"unpin":"Pembatalan penyematan",
|
||||
"autoclose":"Ditutup otomatis"
|
||||
},
|
||||
|
||||
"autoclose":"Kelola penutupan otomatis tiket.",
|
||||
"autocloseDisable":"Non-aktifkan penutupan otomatis.",
|
||||
"autocloseEnable":"Aktifkan penutupan otomatis.",
|
||||
@@ -424,7 +492,19 @@
|
||||
"autodelete":"Kelola penghapusan otomatis tiket.",
|
||||
"autodeleteDisable":"Non-aktifkan penghapusan otomatis.",
|
||||
"autodeleteEnable":"Aktifkan penghapusan otomatis.",
|
||||
"autodeleteEnableTime":"Lama waktu saluran tidak aktif sebelum dihapus."
|
||||
"autodeleteEnableTime":"Lama waktu saluran tidak aktif sebelum dihapus.",
|
||||
|
||||
"topic":"Kelola topik kanal tiket.",
|
||||
"topicSet":"Tentukan topik kanal tiket.",
|
||||
"topicValue":"Topik baru kanal ini.",
|
||||
"topicList":"Dapatkan informasi lengkap tentang semua tiket beserta topik dan statistiknya.",
|
||||
"priority":"Kelola prioritas tiket.",
|
||||
"prioritySet":"Tentukan prioritas tiket.",
|
||||
"priorityValue":"Prioritas kanal.",
|
||||
"priorityGet":"Dapatkan prioritas tiket.",
|
||||
"priorityList":"Dapatkan daftar semua tiket beserta status prioritasnya.",
|
||||
"transfer":"Alihkan kepemilikan tiket dari satu pengguna ke pengguna lain..",
|
||||
"transferUser":"Pengguna yang akan ditransferkan."
|
||||
},
|
||||
"helpMenu":{
|
||||
"help":"Dapatkan daftar perintah yang tersedia.",
|
||||
@@ -452,7 +532,16 @@
|
||||
"autocloseDisable":"Nonaktifkan penutupan otomatis.",
|
||||
"autocloseEnable":"Aktifkan penutupan otomatis.",
|
||||
"autodeleteDisable":"Non-aktifkan penghapusan otomatis.",
|
||||
"autodeleteEnable":"Aktifkan penghapusan otomatis."
|
||||
"autodeleteEnable":"Aktifkan penghapusan otomatis.",
|
||||
"categories":{
|
||||
"general":"Perintah Umum",
|
||||
"basicTicket":"Perintah Dasar Tiket",
|
||||
"advancedTicket":"Perintah Lanjutan Ticket",
|
||||
"userTicket":"Perintah Tiket untuk Pengguna",
|
||||
"admin":"Perintah Admin",
|
||||
"advanced":"Perintah Lanjutan",
|
||||
"extra":"Perintah Tambahan"
|
||||
}
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
@@ -460,7 +549,8 @@
|
||||
"system":"Status Sistem",
|
||||
"user":"Status Pengguna",
|
||||
"ticket":"Status Tiket",
|
||||
"participants":"Partisipan"
|
||||
"participants":"Partisipan",
|
||||
"messages":"Pesan"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated":"Tiket Dibuat",
|
||||
@@ -472,7 +562,47 @@
|
||||
"ticketsPinned":"Tiket Disematkan",
|
||||
"ticketsMoved":"Tickets Dipindahkan",
|
||||
"usersBlacklisted":"Pengguna Masuk Ke Dalam Daftar Hitam",
|
||||
"transcriptsCreated":"Transkrip Dibuat"
|
||||
"transcriptsCreated":"Transkrip Dibuat",
|
||||
"ticketsAutodeleted":"Tiket Dihapus Secara Otomatis",
|
||||
"ticketsTransferred":"Tiket Dipindahkan",
|
||||
"ticketVolume":"Kapasitas Tiket",
|
||||
"averageTickets":"Rata-rata Tiket per Pengguna",
|
||||
"currentTickets":"Tiket Saat Ini",
|
||||
"age":"Umur Tiket",
|
||||
"responseTime":"Waktu Respons",
|
||||
"resolutionTime":"Resolution Time",
|
||||
"createdOn":"Dibuat Pada",
|
||||
"createdBy":"Dibuat Oleh",
|
||||
"closedOn":"Ditutup Pada",
|
||||
"closedBy":"Ditutup Oleh",
|
||||
"claimedOn":"Diklaim Pada",
|
||||
"claimedBy":"Diklaim Oleh",
|
||||
"pinnedOn":"Disematkan Pada",
|
||||
"pinnedBy":"Disematkan Oleh",
|
||||
"deletedOn":"Dihapus Pada",
|
||||
"deletedBy":"Dihapus Oleh"
|
||||
},
|
||||
"roles":{
|
||||
"developer":"Pembuat",
|
||||
"serverOwner":"Pemilik Server",
|
||||
"serverAdmin":"Admin Server",
|
||||
"moderator":"Tim Moderator",
|
||||
"support":"Tim Pendukung",
|
||||
"member":"Anggota"
|
||||
}
|
||||
},
|
||||
"panel":{
|
||||
"selectTicket":"Pilih tiket kamu",
|
||||
"selectRole":"Pilih status kamu",
|
||||
"selectOption":"Pilih opsi kamu"
|
||||
},
|
||||
"priorities":{
|
||||
"urgent":"Sangat Penting",
|
||||
"veryHigh":"Sangat Tinggi",
|
||||
"high":"Tinggi",
|
||||
"normal":"Normal",
|
||||
"low":"Rendah",
|
||||
"veryLow":"Sangat Rendah",
|
||||
"none":"Tidak Ada"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["fraden1mvp."],
|
||||
"lastedited":"08/10/2024",
|
||||
"language":"Italian",
|
||||
|
||||
@@ -0,0 +1,472 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["HanumeshGupta"],
|
||||
"lastedited":"19/06/2025",
|
||||
"language":"Japanese",
|
||||
"automated":true
|
||||
},
|
||||
"checker":{
|
||||
"system":{
|
||||
"typeError":"[エラー]",
|
||||
"headerOpenTicket":"チケットを開く",
|
||||
"typeWarning":"[警告]",
|
||||
"typeInfo":"[情報]",
|
||||
"headerConfigChecker": "コンフィグチェッカー",
|
||||
"headerDescription": "設定ファイルのエラーをチェック!",
|
||||
"footerError": "{0}が修正されるまでボットは起動しません!",
|
||||
"footerWarning": "起動前にすべての{0}を修正することを推奨します!",
|
||||
"footerSupport": "サポート: {0} - ドキュメント: {1}",
|
||||
"compactInformation": "詳細は{0}を使用してください!",
|
||||
"dataPath": "パス",
|
||||
"dataDocs": "ドキュメント",
|
||||
"dataMessages": "メッセージ"
|
||||
},
|
||||
"messages":{
|
||||
"stringTooShort": "この文字列は{0}文字より短くできません!",
|
||||
"stringTooLong": "この文字列は{0}文字より長くできません!",
|
||||
"stringLengthInvalid": "この文字列は{0}文字でなければなりません!",
|
||||
"stringStartsWith": "この文字列は「{0}」で始まる必要があります!",
|
||||
"stringEndsWith": "この文字列は「{0}」で終わる必要があります!",
|
||||
"stringContains": "この文字列には「{0}」が含まれている必要があります!",
|
||||
"stringChoices": "この文字列は次のいずれかの値でなければなりません: {0}!",
|
||||
"stringRegex": "この文字列は無効です!",
|
||||
"numberTooShort": "この数値は{0}桁より短くできません!",
|
||||
"numberTooLong": "この数値は{0}桁より長くできません!",
|
||||
"numberLengthInvalid": "この数値は{0}桁でなければなりません!",
|
||||
"numberTooSmall": "この数値は{0}以上でなければなりません!",
|
||||
"numberTooLarge": "この数値は{0}以下でなければなりません!",
|
||||
"numberNotEqual": "この数値は{0}でなければなりません!",
|
||||
"numberStep": "この数値は{0}の倍数でなければなりません!",
|
||||
"numberStepOffset": "この数値は{1}から始まる{0}の倍数でなければなりません!",
|
||||
"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": "この配列では同じ値を2回使用できません!",
|
||||
"discordInvalidId": "これは無効なDiscordの{0}IDです!",
|
||||
"discordInvalidIdOptions": "これは無効なDiscordの{0}IDです! 代わりに次のいずれかを使用できます: {1}!",
|
||||
"discordInvalidToken": "これは無効なDiscordトークンです(構文的に)!",
|
||||
"colorInvalid": "これは無効なHEXカラーコードです!",
|
||||
"emojiTooShort": "この文字列には少なくとも{0}個の絵文字が必要です!",
|
||||
"emojiTooLong": "この文字列には最大{0}個の絵文字しか含められません!",
|
||||
"emojiCustom": "この絵文字はDiscordのカスタム絵文字にできません!",
|
||||
"emojiInvalid": "これは無効な絵文字です!",
|
||||
"urlInvalid": "このURLは無効です!",
|
||||
"urlInvalidHttp": "This url can only use the https:// protocol!",
|
||||
"urlInvalidProtocol": "This url can only use the http:// & https:// protocols!",
|
||||
"urlInvalidHostname": "このURLのホスト名は許可されていません!",
|
||||
"urlInvalidExtension": "このURLの拡張子が無効です! 次のいずれかを選択してください: {0}!",
|
||||
"urlInvalidPath": "このURLのパスが無効です!",
|
||||
"idNotUnique": "このIDは一意ではありません。別のIDを使用してください!",
|
||||
"idNonExistent": "ID「{0}」は存在しません!",
|
||||
"invalidType": "このプロパティは{0}型でなければなりません!",
|
||||
"propertyMissing": "このオブジェクトにはプロパティ「{0}」がありません!",
|
||||
"propertyOptional": "このオブジェクトではプロパティ「{0}」はオプションです!",
|
||||
"objectDisabled": "このオブジェクトは無効です。{0}を使用して有効にしてください!",
|
||||
"nullInvalid": "このプロパティはnullにできません!",
|
||||
"switchInvalidType": "これは次のいずれかの型でなければなりません: {0}!",
|
||||
"objectSwitchInvalid": "このオブジェクトは次のいずれかの型でなければなりません: {0}!",
|
||||
"invalidLanguage": "これは無効な言語です!",
|
||||
"invalidButton": "このボタンには少なくとも「{0}」または「{1}」が必要です!",
|
||||
"unusedOption": "オプション「{0}」はどこでも使用されていません!",
|
||||
"unusedQuestion": "質問「{0}」はどこでも使用されていません!",
|
||||
"dropdownOption": "ドロップダウンが有効なパネルには「ticket」タイプのオプションのみ含めることができます!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
"buttons":{
|
||||
"create":"チケットを開く",
|
||||
"close":"チケットを閉じる",
|
||||
"delete":"チケットを削除",
|
||||
"reopen":"チケットを再開",
|
||||
"claim":"チケットを引き受ける",
|
||||
"unclaim":"チケットの引き受けを解除",
|
||||
"pin":"チケットをピン留め",
|
||||
"unpin":"チケットのピン留めを解除",
|
||||
"clear":"チケットを一括削除",
|
||||
"helpSwitchSlash":"スラッシュコマンドを表示",
|
||||
"helpSwitchText":"テキストコマンドを表示",
|
||||
"helpPage":"ページ {0}",
|
||||
"withReason":"理由を付ける",
|
||||
"withoutTranscript":"トランスクリプトなし"
|
||||
},
|
||||
"titles":{
|
||||
"created":"チケットが作成されました",
|
||||
"close":"チケットが閉じられました",
|
||||
"delete":"チケットが削除されました",
|
||||
"reopen":"チケットが再開されました",
|
||||
"claim":"チケットが引き受けられました",
|
||||
"unclaim":"チケットの引き受けが解除されました",
|
||||
"pin":"チケットがピン留めされました",
|
||||
"unpin":"チケットのピン留めが解除されました",
|
||||
"rename":"チケット名が変更されました",
|
||||
"move":"チケットが移動されました",
|
||||
"add":"ユーザーがチケットに追加されました",
|
||||
"remove":"ユーザーがチケットから削除されました",
|
||||
|
||||
"help":"利用可能なコマンド",
|
||||
"statsReset":"統計をリセット",
|
||||
"blacklistAdd":"ユーザーをブラックリストに追加",
|
||||
"blacklistRemove":"ユーザーをブラックリストから解除",
|
||||
"blacklistGet":"ブラックリストユーザー",
|
||||
"blacklistView":"現在のブラックリスト",
|
||||
"blacklistAddDm":"ブラックリストに追加されました",
|
||||
"blacklistRemoveDm":"ブラックリストから解除されました",
|
||||
"clear":"チケットが一括削除されました",
|
||||
"roles":"ロールが更新されました",
|
||||
|
||||
"autoclose":"チケットが自動閉じされました",
|
||||
"autocloseEnabled":"自動閉じが有効化されました",
|
||||
"autocloseDisabled":"自動閉じが無効化されました",
|
||||
"autodelete":"チケットが自動削除されました",
|
||||
"autodeleteEnabled":"自動削除が有効化されました",
|
||||
"autodeleteDisabled":"自動削除が無効化されました"
|
||||
},
|
||||
"descriptions":{
|
||||
"create":"チケットが作成されました。下のボタンをクリックしてアクセスしてください!",
|
||||
"close":"チケットが正常に閉じられました!",
|
||||
"delete":"チケットが正常に削除されました!",
|
||||
"reopen":"チケットが正常に再開されました!",
|
||||
"claim":"チケットが正常に引き受けられました!",
|
||||
"unclaim":"チケットの引き受けが正常に解除されました!",
|
||||
"pin":"チケットが正常にピン留めされました!",
|
||||
"unpin":"チケットのピン留めが正常に解除されました!",
|
||||
"rename":"チケット名が「{0}」に正常に変更されました!",
|
||||
"move":"チケットが「{0}」に正常に移動されました!",
|
||||
"add":"{0}がチケットに正常に追加されました!",
|
||||
"remove":"{0}がチケットから正常に削除されました!",
|
||||
|
||||
"helpExplanation":"`<名前>` => 必須パラメータ\n`[名前]` => オプションパラメータ",
|
||||
"statsReset":"ボットの統計が正常にリセットされました!",
|
||||
"statsError":"チケット統計を表示できません!\n{0}はチケットではありません!",
|
||||
"blacklistAdd":"{0}がブラックリストに正常に追加されました!",
|
||||
"blacklistRemove":"{0}がブラックリストから正常に解除されました!",
|
||||
"blacklistGetSuccess":"{0}は現在ブラックリストに登録されています!",
|
||||
"blacklistGetEmpty":"{0}は現在ブラックリストに登録されていません!",
|
||||
"blacklistViewEmpty":"ブラックリストに登録されているユーザーはいません!",
|
||||
"blacklistViewTip":"「/blacklist add」を使用してユーザーをブラックリストに追加できます!",
|
||||
"clearVerify":"複数のチケットを削除してもよろしいですか?\nこの操作は元に戻せません!",
|
||||
"clearReady":"{0}件のチケットが正常に削除されました!",
|
||||
"rolesEmpty":"更新されたロールはありません!",
|
||||
|
||||
"autocloseLeave":"作成者がサーバーを退出したため、このチケットは自動閉じされました!",
|
||||
"autocloseTimeout":"このチケットは{0}時間以上非アクティブだったため自動閉じされました!",
|
||||
"autodeleteLeave":"作成者がサーバーを退出したため、このチケットは自動削除されました!",
|
||||
"autodeleteTimeout":"このチケットは{0}日間以上非アクティブだったため自動削除されました!",
|
||||
"autocloseEnabled":"このチケットで自動閉じが有効化されました!\n{0}時間以上非アクティブの場合に自動的に閉じられます!",
|
||||
"autocloseDisabled":"このチケットで自動閉じが無効化されました!\n今後は自動的に閉じられません!",
|
||||
"autodeleteEnabled":"このチケットで自動削除が有効化されました!\n{0}日間以上非アクティブの場合に自動的に削除されます!",
|
||||
"autodeleteDisabled":"このチケットで自動削除が無効化されました!\n今後は自動的に削除されません!",
|
||||
|
||||
"ticketMessageLimit":"同時に作成できるチケットは{0}件までです!",
|
||||
"ticketMessageAutoclose":"このチケットは{0}時間非アクティブの場合に自動閉じされます!",
|
||||
"ticketMessageAutodelete":"このチケットは{0}日間非アクティブの場合に自動削除されます!",
|
||||
"panelReady":"下にパネルが表示されます!\nこのメッセージは削除可能です!"
|
||||
},
|
||||
"modal":{
|
||||
"closePlaceholder":"このチケットを閉じた理由は?",
|
||||
"deletePlaceholder":"このチケットを削除した理由は?",
|
||||
"reopenPlaceholder":"このチケットを再開した理由は?",
|
||||
"claimPlaceholder":"このチケットを引き受けた理由は?",
|
||||
"unclaimPlaceholder":"このチケットの引き受けを解除した理由は?",
|
||||
"pinPlaceholder":"このチケットをピン留めした理由は?",
|
||||
"unpinPlaceholder":"このチケットのピン留めを解除した理由は?"
|
||||
},
|
||||
"logs":{
|
||||
"createLog":"{0}によって新しいチケットが作成されました!",
|
||||
"closeLog":"{0}によってこのチケットが閉じられました!",
|
||||
"closeDm":"サーバーであなたのチケットが閉じられました!",
|
||||
"deleteLog":"{0}によってこのチケットが削除されました!",
|
||||
"deleteDm":"サーバーであなたのチケットが削除されました!",
|
||||
"reopenLog":"{0}によってこのチケットが再開されました!",
|
||||
"reopenDm":"サーバーであなたのチケットが再開されました!",
|
||||
"claimLog":"{0}によってこのチケットが引き受けられました!",
|
||||
"claimDm":"サーバーであなたのチケットが引き受けられました!",
|
||||
"unclaimLog":"{0}によってこのチケットの引き受けが解除されました!",
|
||||
"unclaimDm":"サーバーであなたのチケットの引き受けが解除されました!",
|
||||
"pinLog":"{0}によってこのチケットがピン留めされました!",
|
||||
"pinDm":"サーバーであなたのチケットがピン留めされました!",
|
||||
"unpinLog":"{0}によってこのチケットのピン留めが解除されました!",
|
||||
"unpinDm":"サーバーであなたのチケットのピン留めが解除されました!",
|
||||
"renameLog":"{1}によってこのチケット名が「{0}」に変更されました!",
|
||||
"renameDm":"サーバーであなたのチケット名が「{0}」に変更されました!",
|
||||
"moveLog":"{1}によってこのチケットが「{0}」に移動されました!",
|
||||
"moveDm":"サーバーであなたのチケットが「{0}」に移動されました!",
|
||||
"addLog":"{1}によって{0}がこのチケットに追加されました!",
|
||||
"addDm":"サーバーであなたのチケットに{0}が追加されました!",
|
||||
"removeLog":"{1}によって{0}がこのチケットから削除されました!",
|
||||
"removeDm":"サーバーであなたのチケットから{0}が削除されました!",
|
||||
|
||||
"blacklistAddLog":"{1}によって{0}がブラックリストに追加されました!",
|
||||
"blacklistRemoveLog":"{1}によって{0}がブラックリストから解除されました!",
|
||||
"blacklistAddDm":"あなたはサーバーのブラックリストに追加されました!\n今後チケットを作成できなくなります!",
|
||||
"blacklistRemoveDm":"あなたはサーバーのブラックリストから解除されました!\n再びチケットを作成できるようになりました!",
|
||||
"clearLog":"{1}によって{0}件のチケットが削除されました!"
|
||||
}
|
||||
},
|
||||
"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":"必要な権限:(いずれか1つ)",
|
||||
"noPermissionsCooldown":"クールダウン中のため、この{0}を使用できません!",
|
||||
"noPermissionsBlacklist":"ブラックリストに登録されているため、この{0}を使用できません!",
|
||||
"noPermissionsLimitGlobal":"サーバーがチケットの最大制限に達したため、チケットを作成できません!",
|
||||
"noPermissionsLimitGlobalUser":"チケットの最大制限に達したため、チケットを作成できません!",
|
||||
"noPermissionsLimitOption":"このオプションのサーバー制限に達したため、チケットを作成できません!",
|
||||
"noPermissionsLimitOptionUser":"このオプションのユーザー制限に達したため、チケットを作成できません!",
|
||||
"unknownTicket":"有効なチケットでこのコマンドを再試行してください!",
|
||||
"deprecatedTicket":"現在のチャンネルは有効なチケットではありません!旧バージョンのチケットかもしれません!",
|
||||
"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":"作成済みトランスクリプト"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,478 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["HanumeshGupta"],
|
||||
"lastedited":"19/06/2025",
|
||||
"language":"Korean",
|
||||
"automated":true
|
||||
},
|
||||
"checker":{
|
||||
"system":{
|
||||
"typeError": "[오류]",
|
||||
"headerOpenTicket": "티켓 열기",
|
||||
"typeWarning": "[경고]",
|
||||
"typeInfo": "[정보]",
|
||||
"headerConfigChecker": "설정 검사기",
|
||||
"headerDescription": "설정 파일의 오류를 확인하세요!",
|
||||
"footerError": "모든 {0} 오류를 수정하기 전까지 봇이 시작되지 않습니다!",
|
||||
"footerWarning": "시작하기 전에 모든 {0} 경고를 수정하는 것이 좋습니다!",
|
||||
"footerSupport": "지원: {0} - 문서: {1}",
|
||||
"compactInformation": "더 많은 정보를 보려면 {0}를 사용하세요!",
|
||||
"dataPath": "경로",
|
||||
"dataDocs": "문서",
|
||||
"dataMessages": "메시지"
|
||||
},
|
||||
"messages":{
|
||||
"stringTooShort": "이 문자열은 {0}자 이상이어야 합니다!",
|
||||
"stringTooLong": "이 문자열은 {0}자 이하여야 합니다!",
|
||||
"stringLengthInvalid": "이 문자열은 {0}자여야 합니다!",
|
||||
"stringStartsWith": "이 문자열은 {0}로 시작해야 합니다!",
|
||||
"stringEndsWith": "이 문자열은 {0}로 끝나야 합니다!",
|
||||
"stringContains": "이 문자열은 {0}을(를) 포함해야 합니다!",
|
||||
"stringChoices": "이 문자열은 다음 값 중 하나여야 합니다: {0}!",
|
||||
"stringRegex": "이 문자열은 유효하지 않습니다!",
|
||||
|
||||
"numberTooShort": "이 숫자는 {0}자 이상이어야 합니다!",
|
||||
"numberTooLong": "이 숫자는 {0}자 이하여야 합니다!",
|
||||
"numberLengthInvalid": "이 숫자는 {0}자여야 합니다!",
|
||||
"numberTooSmall": "이 숫자는 최소 {0} 이상이어야 합니다!",
|
||||
"numberTooLarge": "이 숫자는 최대 {0} 이하여야 합니다!",
|
||||
"numberNotEqual": "이 숫자는 {0}이어야 합니다!",
|
||||
"numberStep": "이 숫자는 {0}의 배수여야 합니다!",
|
||||
"numberStepOffset": "이 숫자는 {1}부터 시작하는 {0}의 배수여야 합니다!",
|
||||
"numberStartsWith": "이 숫자는 {0}로 시작해야 합니다!",
|
||||
"numberEndsWith": "이 숫자는 {0}로 끝나야 합니다!",
|
||||
"numberContains": "이 숫자는 {0}을(를) 포함해야 합니다!",
|
||||
"numberChoices": "이 숫자는 다음 값 중 하나여야 합니다: {0}!",
|
||||
"numberFloat": "이 숫자는 소수일 수 없습니다!",
|
||||
"numberNegative": "이 숫자는 음수일 수 없습니다!",
|
||||
"numberPositive": "이 숫자는 양수일 수 없습니다!",
|
||||
"numberZero": "이 숫자는 0일 수 없습니다!",
|
||||
|
||||
"booleanTrue": "이 불리언은 참일 수 없습니다!",
|
||||
"booleanFalse": "이 불리언은 거짓일 수 없습니다!",
|
||||
|
||||
"arrayEmptyDisabled": "이 배열은 비어 있을 수 없습니다!",
|
||||
"arrayEmptyRequired": "이 배열은 비어 있어야 합니다!",
|
||||
"arrayTooShort": "이 배열의 길이는 최소 {0} 이상이어야 합니다!",
|
||||
"arrayTooLong": "이 배열의 길이는 최대 {0} 이하여야 합니다!",
|
||||
"arrayLengthInvalid": "이 배열의 길이는 {0}이어야 합니다!",
|
||||
"arrayInvalidTypes": "이 배열은 다음 유형만 포함할 수 있습니다: {0}!",
|
||||
"arrayDouble": "이 배열은 동일한 값을 두 번 포함할 수 없습니다!",
|
||||
|
||||
"discordInvalidId": "이것은 유효하지 않은 디스코드 {0} ID입니다!",
|
||||
"discordInvalidIdOptions": "이것은 유효하지 않은 디스코드 {0} ID입니다! 다음 중 하나를 사용할 수 있습니다: {1}!",
|
||||
"discordInvalidToken": "이것은 유효하지 않은 디스코드 토큰입니다(구문적으로)!",
|
||||
"colorInvalid": "이것은 유효하지 않은 HEX 색상입니다!",
|
||||
"emojiTooShort": "이 문자열은 최소 {0}개의 이모지를 포함해야 합니다!",
|
||||
"emojiTooLong": "이 문자열은 최대 {0}개의 이모지를 포함해야 합니다!",
|
||||
"emojiCustom": "이 이모지는 사용자 정의 디스코드 이모지일 수 없습니다!",
|
||||
"emojiInvalid": "이것은 유효하지 않은 이모지입니다!",
|
||||
"urlInvalid": "이 URL은 유효하지 않습니다!",
|
||||
"urlInvalidHttp":"This url can only use the https:// protocol!",
|
||||
"urlInvalidProtocol":"This url can only use the http:// & https:// protocols!",
|
||||
"urlInvalidHostname": "이 URL은 허용되지 않은 호스트 이름을 가지고 있습니다!",
|
||||
"urlInvalidExtension": "이 URL은 유효하지 않은 확장자를 가지고 있습니다! 다음 중에서 선택하세요: {0}!",
|
||||
"urlInvalidPath": "이 URL은 유효하지 않은 경로를 가지고 있습니다!",
|
||||
"idNotUnique": "이 ID는 고유하지 않습니다, 다른 ID를 사용하세요!",
|
||||
"idNonExistent": "ID {0}가 존재하지 않습니다!",
|
||||
|
||||
"invalidType": "이 속성은 {0} 유형이어야 합니다!",
|
||||
"propertyMissing": "이 객체에서 {0} 속성이 누락되었습니다!",
|
||||
"propertyOptional": "이 객체에서 {0} 속성은 선택 사항입니다!",
|
||||
"objectDisabled": "이 객체는 비활성화되어 있습니다, {0}를 사용하여 활성화하세요!",
|
||||
"nullInvalid": "이 속성은 null일 수 없습니다!",
|
||||
"switchInvalidType": "이것은 다음 유형 중 하나여야 합니다: {0}!",
|
||||
"objectSwitchInvalid": "이 객체는 다음 유형 중 하나여야 합니다: {0}!",
|
||||
|
||||
"invalidLanguage": "이것은 유효하지 않은 언어입니다!",
|
||||
"invalidButton": "이 버튼은 최소한 {0} 또는 {1}을(를) 가지고 있어야 합니다!",
|
||||
"unusedOption": "옵션 {0}은(는) 어디에서도 사용되지 않습니다!",
|
||||
"unusedQuestion": "질문 {0}은(는) 어디에서도 사용되지 않습니다!",
|
||||
"dropdownOption": "드롭다운이 활성화된 패널은 'ticket' 유형의 옵션만 포함할 수 있습니다!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
"buttons":{
|
||||
"create": "티켓 방문",
|
||||
"close": "티켓 닫기",
|
||||
"delete": "티켓 삭제",
|
||||
"reopen": "티켓 다시 열기",
|
||||
"claim": "티켓 가져오기",
|
||||
"unclaim": "티켓 반납하기",
|
||||
"pin": "티켓 고정하기",
|
||||
"unpin": "티켓 고정 해제",
|
||||
"clear": "티켓 삭제",
|
||||
"helpSwitchSlash": "슬래시 명령어 보기",
|
||||
"helpSwitchText": "텍스트 명령어 보기",
|
||||
"helpPage": "페이지 {0}",
|
||||
"withReason": "이유와 함께",
|
||||
"withoutTranscript": "기록 없이"
|
||||
},
|
||||
"titles":{
|
||||
"created": "티켓 생성됨",
|
||||
"close": "티켓 닫힘",
|
||||
"delete": "티켓 삭제됨",
|
||||
"reopen": "티켓 다시 열림",
|
||||
"claim": "티켓 가져옴",
|
||||
"unclaim": "티켓 반납됨",
|
||||
"pin": "티켓 고정됨",
|
||||
"unpin": "티켓 고정 해제됨",
|
||||
"rename": "티켓 이름 변경됨",
|
||||
"move": "티켓 이동됨",
|
||||
"add": "티켓 사용자 추가됨",
|
||||
"remove": "티켓 사용자 제거됨",
|
||||
|
||||
"help": "사용 가능한 명령어",
|
||||
"statsReset": "통계 초기화",
|
||||
"blacklistAdd": "사용자 블랙리스트 추가됨",
|
||||
"blacklistRemove": "사용자 블랙리스트 해제됨",
|
||||
"blacklistGet": "블랙리스트된 사용자",
|
||||
"blacklistView": "현재 블랙리스트",
|
||||
"blacklistAddDm": "블랙리스트에 추가됨",
|
||||
"blacklistRemoveDm": "블랙리스트에서 제거됨",
|
||||
"clear": "티켓 삭제됨",
|
||||
"roles": "역할 업데이트됨",
|
||||
|
||||
"autoclose": "티켓 자동 닫힘",
|
||||
"autocloseEnabled": "자동 닫기 활성화됨",
|
||||
"autocloseDisabled": "자동 닫기 비활성화됨",
|
||||
"autodelete": "티켓 자동 삭제됨",
|
||||
"autodeleteEnabled": "자동 삭제 활성화됨",
|
||||
"autodeleteDisabled": "자동 삭제 비활성화됨"
|
||||
},
|
||||
"descriptions":{
|
||||
"create": "티켓이 생성되었습니다. 아래 버튼을 클릭하여 접근하세요!",
|
||||
"close": "티켓이 성공적으로 닫혔습니다!",
|
||||
"delete": "티켓이 성공적으로 삭제되었습니다!",
|
||||
"reopen": "티켓이 성공적으로 다시 열렸습니다!",
|
||||
"claim": "티켓이 성공적으로 가져와졌습니다!",
|
||||
"unclaim": "티켓이 성공적으로 반납되었습니다!",
|
||||
"pin": "티켓이 성공적으로 고정되었습니다!",
|
||||
"unpin": "티켓이 성공적으로 고정 해제되었습니다!",
|
||||
"rename": "티켓 이름이 {0}(으)로 성공적으로 변경되었습니다!",
|
||||
"move": "티켓이 {0}(으)로 성공적으로 이동되었습니다!",
|
||||
"add": "{0}이(가) 티켓에 성공적으로 추가되었습니다!",
|
||||
"remove": "{0}이(가) 티켓에서 성공적으로 제거되었습니다!",
|
||||
|
||||
"helpExplanation": "`<이름>` => 필수 매개변수\n`[이름]` => 선택적 매개변수",
|
||||
"statsReset": "봇 통계가 성공적으로 초기화되었습니다!",
|
||||
"statsError": "티켓 통계를 볼 수 없습니다!\n{0}은(는) 티켓이 아닙니다!",
|
||||
"blacklistAdd": "{0}이(가) 성공적으로 블랙리스트에 추가되었습니다!",
|
||||
"blacklistRemove": "{0}이(가) 성공적으로 블랙리스트에서 해제되었습니다!",
|
||||
"blacklistGetSuccess": "{0}은(는) 현재 블랙리스트에 있습니다!",
|
||||
"blacklistGetEmpty": "{0}은(는) 현재 블랙리스트에 없습니다!",
|
||||
"blacklistViewEmpty": "아직 블랙리스트에 추가된 사용자가 없습니다!",
|
||||
"blacklistViewTip": "\"/blacklist add\"를 사용하여 사용자를 블랙리스트에 추가하세요!",
|
||||
"clearVerify": "정말로 여러 티켓을 삭제하시겠습니까?\n이 작업은 되돌릴 수 없습니다!",
|
||||
"clearReady": "{0}개의 티켓이 성공적으로 삭제되었습니다!",
|
||||
"rolesEmpty": "업데이트된 역할이 없습니다!",
|
||||
|
||||
"autocloseLeave": "생성자가 서버를 떠났기 때문에 이 티켓이 자동으로 닫혔습니다!",
|
||||
"autocloseTimeout": "이 티켓은 {0}시간 이상 비활성 상태여서 자동으로 닫혔습니다!",
|
||||
"autodeleteLeave": "생성자가 서버를 떠났기 때문에 이 티켓이 자동으로 삭제되었습니다!",
|
||||
"autodeleteTimeout": "이 티켓은 {0}일 이상 비활성 상태여서 자동으로 삭제되었습니다!",
|
||||
"autocloseEnabled": "이 티켓에서 자동 닫기가 활성화되었습니다!\n{0}시간 이상 비활성 상태일 경우 자동으로 닫힙니다!",
|
||||
"autocloseDisabled": "이 티켓에서 자동 닫기가 비활성화되었습니다!\n더 이상 자동으로 닫히지 않습니다!",
|
||||
"autodeleteEnabled": "이 티켓에서 자동 삭제가 활성화되었습니다!\n{0}일 이상 비활성 상태일 경우 자동으로 삭제됩니다!",
|
||||
"autodeleteDisabled": "이 티켓에서 자동 삭제가 비활성화되었습니다!\n더 이상 자동으로 삭제되지 않습니다!",
|
||||
|
||||
"ticketMessageLimit": "동시에 {0}개의 티켓만 생성할 수 있습니다!",
|
||||
"ticketMessageAutoclose": "이 티켓은 {0}시간 동안 비활성 상태일 경우 자동으로 닫힙니다!",
|
||||
"ticketMessageAutodelete": "이 티켓은 {0}일 동안 비활성 상태일 경우 자동으로 삭제됩니다!",
|
||||
"panelReady": "아래에서 패널을 찾을 수 있습니다!\n이 메시지는 이제 삭제할 수 있습니다!"
|
||||
},
|
||||
"modal":{
|
||||
"closePlaceholder": "이 티켓을 닫은 이유는 무엇인가요?",
|
||||
"deletePlaceholder": "이 티켓을 삭제한 이유는 무엇인가요?",
|
||||
"reopenPlaceholder": "이 티켓을 다시 연 이유는 무엇인가요?",
|
||||
"claimPlaceholder": "이 티켓을 가져온 이유는 무엇인가요?",
|
||||
"unclaimPlaceholder": "이 티켓을 반납한 이유는 무엇인가요?",
|
||||
"pinPlaceholder": "이 티켓을 고정한 이유는 무엇인가요?",
|
||||
"unpinPlaceholder": "이 티켓을 고정 해제한 이유는 무엇인가요?"
|
||||
},
|
||||
"logs":{
|
||||
"createLog": "{0}에 의해 새로운 티켓이 생성되었습니다!",
|
||||
"closeLog": "이 티켓은 {0}에 의해 닫혔습니다!",
|
||||
"closeDm": "당신의 티켓이 우리 서버에서 닫혔습니다!",
|
||||
"deleteLog": "이 티켓은 {0}에 의해 삭제되었습니다!",
|
||||
"deleteDm": "당신의 티켓이 우리 서버에서 삭제되었습니다!",
|
||||
"reopenLog": "이 티켓은 {0}에 의해 다시 열렸습니다!",
|
||||
"reopenDm": "당신의 티켓이 우리 서버에서 다시 열렸습니다!",
|
||||
"claimLog": "이 티켓은 {0}에 의해 가져와졌습니다!",
|
||||
"claimDm": "당신의 티켓이 우리 서버에서 가져와졌습니다!",
|
||||
"unclaimLog": "이 티켓은 {0}에 의해 반납되었습니다!",
|
||||
"unclaimDm": "당신의 티켓이 우리 서버에서 반납되었습니다!",
|
||||
"pinLog": "이 티켓은 {0}에 의해 고정되었습니다!",
|
||||
"pinDm": "당신의 티켓이 우리 서버에서 고정되었습니다!",
|
||||
"unpinLog": "이 티켓은 {0}에 의해 고정 해제되었습니다!",
|
||||
"unpinDm": "당신의 티켓이 우리 서버에서 고정 해제되었습니다!",
|
||||
"renameLog": "이 티켓은 {1}에 의해 {0}(으)로 이름이 변경되었습니다!",
|
||||
"renameDm": "당신의 티켓이 우리 서버에서 {0}(으)로 이름이 변경되었습니다!",
|
||||
"moveLog": "이 티켓은 {1}에 의해 {0}(으)로 이동되었습니다!",
|
||||
"moveDm": "당신의 티켓이 우리 서버에서 {0}(으)로 이동되었습니다!",
|
||||
"addLog": "{0}이(가) {1}에 의해 이 티켓에 추가되었습니다!",
|
||||
"addDm": "{0}이(가) 우리 서버에서 당신의 티켓에 추가되었습니다!",
|
||||
"removeLog": "{0}이(가) {1}에 의해 이 티켓에서 제거되었습니다!",
|
||||
"removeDm": "{0}이(가) 우리 서버에서 당신의 티켓에서 제거되었습니다!",
|
||||
|
||||
"blacklistAddLog": "{0}이(가) {1}에 의해 블랙리스트에 추가되었습니다!",
|
||||
"blacklistRemoveLog": "{0}이(가) {1}에 의해 블랙리스트에서 제거되었습니다!",
|
||||
"blacklistAddDm": "당신은 우리 서버에서 블랙리스트에 추가되었습니다!\n이제부터 티켓을 생성할 수 없습니다!",
|
||||
"blacklistRemoveDm": "당신은 우리 서버에서 블랙리스트에서 제거되었습니다!\n이제 티켓을 생성할 수 있습니다!",
|
||||
"clearLog": "{0}개의 티켓이 {1}에 의해 삭제되었습니다!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
"success":{
|
||||
"visit": "기록 확인하기",
|
||||
"ready": "기록 생성됨",
|
||||
"textFileDescription": "삭제된 티켓의 텍스트 기록입니다!",
|
||||
"htmlProgress": "HTML 기록 처리 중입니다. 잠시 기다려주세요...",
|
||||
|
||||
"createdChannel": "서버에 새로운 {0} 기록이 생성되었습니다!",
|
||||
"createdCreator": "귀하의 티켓에 대한 새로운 {0} 기록이 생성되었습니다!",
|
||||
"createdParticipant": "참여하신 티켓에 새로운 {0} 기록이 생성되었습니다!",
|
||||
"createdActiveAdmin": "관리자로 참여하신 티켓에 새로운 {0} 기록이 생성되었습니다!",
|
||||
"createdEveryAdmin": "관리자였던 티켓에 새로운 {0} 기록이 생성되었습니다!",
|
||||
"createdOther": "새로운 {0} 기록이 생성되었습니다!"
|
||||
},
|
||||
"errors":{
|
||||
"retry": "다시 시도",
|
||||
"continue": "기록 없이 삭제",
|
||||
"backup": "백업 기록 생성",
|
||||
"error": "기록 생성 중 오류가 발생했습니다.\n어떻게 하시겠습니까?\n\n아래 버튼 중 하나를 클릭할 때까지 이 티켓은 삭제되지 않습니다."
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
"titles":{
|
||||
"internalError": "내부 오류",
|
||||
"optionMissing": "명령어 옵션 누락",
|
||||
"optionInvalid": "명령어 옵션 무효",
|
||||
"unknownCommand": "알 수 없는 명령어",
|
||||
"noPermissions": "권한 없음",
|
||||
"unknownTicket": "알 수 없는 티켓",
|
||||
"deprecatedTicket": "구버전 티켓",
|
||||
"unknownOption": "알 수 없는 옵션",
|
||||
"unknownPanel": "알 수 없는 패널",
|
||||
"notInGuild": "서버에 없음",
|
||||
"channelRename": "채널 이름 변경 불가",
|
||||
"busy": "티켓 사용 중"
|
||||
},
|
||||
"descriptions": {
|
||||
"askForInfo": "더 많은 정보를 원하시면 봇 소유자에게 문의하세요!",
|
||||
"askForInfoResolve": "몇 번 시도 후에도 문제가 해결되지 않으면 봇 소유자에게 문의하세요.",
|
||||
"internalError": "내부 오류로 인해 이 {0}에 응답하지 못했습니다!",
|
||||
"optionMissing": "이 명령어에 필수 매개변수가 누락되었습니다!",
|
||||
"optionInvalid": "이 명령어의 매개변수가 유효하지 않습니다!",
|
||||
"optionInvalidChoose": "다음 중 선택하세요",
|
||||
"unknownCommand": "도움말 메뉴를 참조하세요!",
|
||||
"noPermissions": "이 {0}을(를) 사용할 권한이 없습니다!",
|
||||
"noPermissionsList": "필요한 권한: (하나 이상)",
|
||||
"noPermissionsCooldown": "쿨다운 중이므로 이 {0}을(를) 사용할 수 없습니다!",
|
||||
"noPermissionsBlacklist": "블랙리스트에 등록되어 이 {0}을(를) 사용할 수 없습니다!",
|
||||
"noPermissionsLimitGlobal": "서버가 최대 티켓 제한에 도달하여 티켓을 생성할 수 없습니다!",
|
||||
"noPermissionsLimitGlobalUser": "최대 티켓 제한에 도달하여 티켓을 생성할 수 없습니다!",
|
||||
"noPermissionsLimitOption": "이 옵션에 대한 서버 최대 티켓 제한에 도달하여 티켓을 생성할 수 없습니다!",
|
||||
"noPermissionsLimitOptionUser": "이 옵션에 대한 최대 티켓 제한에 도달하여 티켓을 생성할 수 없습니다!",
|
||||
"unknownTicket": "유효한 티켓에서 이 명령어를 다시 시도하세요!",
|
||||
"deprecatedTicket": "현재 채널은 유효한 티켓이 아닙니다! 이전 Open Ticket 버전의 티켓일 수 있습니다!",
|
||||
"notInGuild": "이 {0}은(는) DM에서 작동하지 않습니다! 서버에서 다시 시도하세요!",
|
||||
"channelRename": "디스코드 속도 제한으로 인해 현재 채널 이름을 변경할 수 없습니다. 봇이 재시작되지 않으면 10분 내에 자동으로 변경됩니다.",
|
||||
"channelRenameSource": "오류 원인: {0}",
|
||||
"busy": "이 {0}을(를) 사용할 수 없습니다!\n티켓이 현재 봇에 의해 처리 중입니다.\n\n몇 초 후에 다시 시도하세요!"
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex": "값이 패턴과 일치하지 않습니다!",
|
||||
"stringMinLength": "값은 최소 {0}자 이상이어야 합니다!",
|
||||
"stringMaxLength": "값은 최대 {0}자 이하여야 합니다!",
|
||||
"numberInvalid": "유효하지 않은 숫자입니다!",
|
||||
"numberMin": "숫자는 최소 {0} 이상이어야 합니다!",
|
||||
"numberMax": "숫자는 최대 {0} 이하여야 합니다!",
|
||||
"numberDecimal": "숫자는 소수일 수 없습니다!",
|
||||
"numberNegative": "숫자는 음수일 수 없습니다!",
|
||||
"numberPositive": "숫자는 양수일 수 없습니다!",
|
||||
"numberZero": "숫자는 0일 수 없습니다!",
|
||||
"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": "봇의 모든 통계를 초기화하세요(0부터 다시 계산).",
|
||||
"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": "봇의 모든 통계를 초기화하세요(0부터 다시 계산).",
|
||||
"autocloseDisable": "이 티켓에서 자동 닫기를 비활성화하세요.",
|
||||
"autocloseEnable": "이 티켓에서 자동 닫기를 활성화하세요.",
|
||||
"autodeleteDisable": "이 티켓에서 자동 삭제를 비활성화하세요.",
|
||||
"autodeleteEnable": "이 티켓에서 자동 삭제를 활성화하세요."
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
"global": "전체 통계",
|
||||
"system": "시스템 통계",
|
||||
"user": "사용자 통계",
|
||||
"ticket": "티켓 통계",
|
||||
"participants": "참여자"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated": "생성된 티켓",
|
||||
"ticketsClosed": "닫힌 티켓",
|
||||
"ticketsDeleted": "삭제된 티켓",
|
||||
"ticketsReopened": "다시 열린 티켓",
|
||||
"ticketsAutoclosed": "자동 닫힌 티켓",
|
||||
"ticketsClaimed": "가져가진 티켓",
|
||||
"ticketsPinned": "고정된 티켓",
|
||||
"ticketsMoved": "이동된 티켓",
|
||||
"usersBlacklisted": "블랙리스트된 사용자",
|
||||
"transcriptsCreated": "생성된 기록"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,465 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["HanumeshGupta"],
|
||||
"lastedited":"19/06/2025",
|
||||
"language":"Kurdish",
|
||||
"automated":false
|
||||
},
|
||||
"checker":{
|
||||
"system":{
|
||||
"typeError": "[XETA]",
|
||||
"headerOpenTicket": "TIKETÊ VEKIN",
|
||||
"typeWarning": "[HIŞYARÎ]",
|
||||
"typeInfo": "[AGAHÎ]",
|
||||
"headerConfigChecker": "KONTROLKERA KONFÎGURASYONÊ",
|
||||
"headerDescription": "ji bo xeteyên di pelên konfîgurasyonê de kontrol bike!",
|
||||
"footerError": "bot dê ne dest pê bike heta ku hemî {0} werin çareserkirin!",
|
||||
"footerWarning": "pêşniyar tê ku hemî {0} berî destpêkirinê werin çareserkirin!",
|
||||
"footerSupport": "ALÎKARÎ: {0} - DOKUMENT: {1}",
|
||||
"compactInformation": "ji bo agahiyên zêdetir {0} bikar bînin!",
|
||||
"dataPath": "rê",
|
||||
"dataDocs": "dokument",
|
||||
"dataMessages": "peyam"
|
||||
},
|
||||
"messages": {
|
||||
"stringTooShort": "Ev nivîs nikare ji {0} tîpan kurtir be!",
|
||||
"stringTooLong": "Ev nivîs nikare ji {0} tîpan dirêjtir be!",
|
||||
"stringLengthInvalid": "Ev nivîs divê {0} tîpan be!",
|
||||
"stringStartsWith": "Ev nivîs divê bi {0} dest pê bike!",
|
||||
"stringEndsWith": "Ev nivîs divê bi {0} biqede!",
|
||||
"stringContains": "Ev nivîs divê {0} dihewîne!",
|
||||
"stringChoices": "Ev nivîs tenê dikare yek ji van nirxan be: {0}!",
|
||||
"stringRegex": "Ev nivîs nederbasdar e!",
|
||||
|
||||
"numberTooShort": "Ev hejmar nikare ji {0} reqeman kurtir be!",
|
||||
"numberTooLong": "Ev hejmar nikare ji {0} reqeman dirêjtir be!",
|
||||
"numberLengthInvalid": "Ev hejmar divê {0} reqeman be!",
|
||||
"numberTooSmall": "Ev hejmar divê qene {0} be!",
|
||||
"numberTooLarge": "Ev hejmar divê herî zêde {0} be!",
|
||||
"numberNotEqual": "Ev hejmar divê {0} be!",
|
||||
"numberStep": "Ev hejmar divê pirjimara {0} be!",
|
||||
"numberStepOffset": "Ev hejmar divê pirjimara {0} be ku bi {1} dest pê bike!",
|
||||
"numberStartsWith": "Ev hejmar divê bi {0} dest pê bike!",
|
||||
"numberEndsWith": "Ev hejmar divê bi {0} biqede!",
|
||||
"numberContains": "Ev hejmar divê {0} dihewîne!",
|
||||
"numberChoices": "Ev hejmar tenê dikare yek ji van nirxan be: {0}!",
|
||||
"numberFloat": "Ev hejmar nikare dehî be!",
|
||||
"numberNegative": "Ev hejmar nikare neyînî be!",
|
||||
"numberPositive": "Ev hejmar nikare erênî be!",
|
||||
"numberZero": "Ev hejmar nikare sifir be!",
|
||||
|
||||
"booleanTrue": "Ev boolean nikare rast be!",
|
||||
"booleanFalse": "Ev boolean nikare çewt be!",
|
||||
|
||||
"arrayEmptyDisabled": "Ev rêz nikare vala be!",
|
||||
"arrayEmptyRequired": "Ev rêz divê vala be!",
|
||||
"arrayTooShort": "Ev rêz divê bi qasî {0} be!",
|
||||
"arrayTooLong": "Ev rêz divê herî zêde {0} be!",
|
||||
"arrayLengthInvalid": "Ev rêz divê {0} be!",
|
||||
"arrayInvalidTypes": "Ev rêz tenê dikare van tîpan dihewîne: {0}!",
|
||||
"arrayDouble": "Ev rêz nade ku nirxa wekhev du carî were bikar anîn!",
|
||||
|
||||
"discordInvalidId": "Ev nasnameya discordê ya {0} nederbasdar e!",
|
||||
"discordInvalidIdOptions": "Ev nasnameya discordê ya {0} nederbasdar e! Hûn dikarin yek ji van bikar bînin: {1}!",
|
||||
"discordInvalidToken": "Ev tokena discordê nederbasdar e (sîntaktîkî)!",
|
||||
"colorInvalid": "Ev renga hexê nederbasdar e!",
|
||||
"emojiTooShort": "Ev nivîs divê bi qasî {0} emojîyan be!",
|
||||
"emojiTooLong": "Ev nivîs divê herî zêde {0} emojîyan be!",
|
||||
"emojiCustom": "Ev emojî nikare emojiya xwerû ya discordê be!",
|
||||
"emojiInvalid": "Ev emojî nederbasdar e!",
|
||||
"urlInvalid": "Ev URL nederbasdar e!",
|
||||
"switchInvalidType": "Ev divê yek ji van tîpan be: {0}!",
|
||||
"objectSwitchInvalid": "Ev objeyê divê yek ji van tîpan be: {0}!",
|
||||
|
||||
"invalidLanguage": "Ev ziman nederbasdar e!",
|
||||
"invalidButton": "Ev bişkok divê bi qasî {0} an {1} hebe!",
|
||||
"unusedOption": "Vebijarka {0} li ku derê nayê bikar anîn!",
|
||||
"unusedQuestion": "Pirsiyara {0} li ku derê nayê bikar anîn!",
|
||||
"dropdownOption": "Panelê ku bi dropdownê çalak e tenê dikare vebijarkên ji tîpa 'ticket' dihewîne!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
"buttons":{
|
||||
"create": "Tiketê Serlêdan Bikin",
|
||||
"close": "Tiketê Bigirin",
|
||||
"delete": "Tiketê Jê Bikin",
|
||||
"reopen": "Tiketê Vegerînin",
|
||||
"claim": "Tiketê Bistînin",
|
||||
"unclaim": "Tiketê Ji Bîr Bikin",
|
||||
"pin": "Tiketê Rêz Bikin",
|
||||
"unpin": "Tiketê Ji Rêzê Bikin",
|
||||
"clear": "Tiketên Jê Bikin",
|
||||
"helpSwitchSlash": "Fermana Slashê Bibînin",
|
||||
"helpSwitchText": "Fermana Nivîsê Bibînin",
|
||||
"helpPage": "Rûpel {0}",
|
||||
"withReason": "Bi Sedem",
|
||||
"withoutTranscript": "Bê Transcript"
|
||||
},
|
||||
"titles": {
|
||||
"created": "Tiket Hate Afirandin",
|
||||
"close": "Tiket Hate Girtin",
|
||||
"delete": "Tiket Hate Jêkirin",
|
||||
"reopen": "Tiket Hate Vekirin",
|
||||
"claim": "Tiket Hate Standin",
|
||||
"unclaim": "Tiket Hate Ji Bîr Kirin",
|
||||
"pin": "Tiket Hate Rêz Kirin",
|
||||
"unpin": "Tiket Hate Ji Rêzê Kirin",
|
||||
"rename": "Tiket Hate Nav Lê Kirin",
|
||||
"move": "Tiket Hate Guhertin",
|
||||
"add": "Bikarhêner Hate Zêdekirin",
|
||||
"remove": "Bikarhêner Hate Jêbirin",
|
||||
|
||||
"help": "Fermên Berdest",
|
||||
"statsReset": "Statîstîkên Reset Bikin",
|
||||
"blacklistAdd": "Bikarhêner Hate Qedexekirin",
|
||||
"blacklistRemove": "Bikarhêner Hate Berdan",
|
||||
"blacklistGet": "Bikarhênerê Qedexekirî",
|
||||
"blacklistView": "Qedexeyên Niha",
|
||||
"blacklistAddDm": "Tê Qedexekirin",
|
||||
"blacklistRemoveDm": "Ji Qedexeyê Hate Derxistin",
|
||||
"clear": "Tiketên Hate Jêkirin",
|
||||
"roles": "Rolên Hate Nûvekirin",
|
||||
|
||||
"autoclose": "Tiket Xweber Hate Girtin",
|
||||
"autocloseEnabled": "Xweber Girtin Hate Çalakirin",
|
||||
"autocloseDisabled": "Xweber Girtin Hate Seqetkirin",
|
||||
"autodelete": "Tiket Xweber Hate Jêkirin",
|
||||
"autodeleteEnabled": "Xweber Jêkirin Hate Çalakirin",
|
||||
"autodeleteDisabled": "Xweber Jêkirin Hate Seqetkirin"
|
||||
},
|
||||
"descriptions":{
|
||||
"create": "Tiketa we hate afirandin. Ji bo têketinê bişkoka jêrîn bikar bînin!",
|
||||
"close": "Tiket bi serkeftî hate girtin!",
|
||||
"delete": "Tiket bi serkeftî hate jêkirin!",
|
||||
"reopen": "Tiket bi serkeftî hate vekirin!",
|
||||
"claim": "Tiket bi serkeftî hate standin!",
|
||||
"unclaim": "Tiket bi serkeftî hate ji bîr kirin!",
|
||||
"pin": "Tiket bi serkeftî hate rêz kirin!",
|
||||
"unpin": "Tiket bi serkeftî hate ji rêzê kirin!",
|
||||
"rename": "Tiket bi serkeftî hate nav lê kirin navê {0}!",
|
||||
"move": "Tiket bi serkeftî hate guhertin bo {0}!",
|
||||
"add": "{0} bi serkeftî hate zêdekirin bo tiketê!",
|
||||
"remove": "{0} bi serkeftî hate jêbirin ji tiketê!",
|
||||
|
||||
"helpExplanation": "`<nav>` => parametreya pêwîst\n`[nav]` => parametreya ne mecbûrî",
|
||||
"statsReset": "Statîstîkên botê bi serkeftî hatin reset kirin!",
|
||||
"statsError": "Nikare statîstîkên tiketê bibîne!\n{0} tiket nîne!",
|
||||
"blacklistAdd": "{0} bi serkeftî hate qedexekirin!",
|
||||
"blacklistRemove": "{0} bi serkeftî hate berdan!",
|
||||
"blacklistGetSuccess": "{0} niha qedexe ye!",
|
||||
"blacklistGetEmpty": "{0} niha ne qedexe ye!",
|
||||
"blacklistViewEmpty": "Hîn kes qedexe nekirine!",
|
||||
"blacklistViewTip": "Ji bo qedexekirina bikarhênerê \"/blacklist add\" bikar bînin!",
|
||||
"clearVerify": "Ma hûn dixwazin pir tiketên jê bikin?\nEv çalakî nikare were vegerandin!",
|
||||
"clearReady": "{0} tiket bi serkeftî hatin jêkirin!",
|
||||
"rolesEmpty": "Tu rol nehatine nûvekirin!",
|
||||
|
||||
"autocloseLeave": "Ev tiket hate girtin çimkî afirîner serverê terikand!",
|
||||
"autocloseTimeout": "Ev tiket hate girtin çimkî ji bo zêdetirî `{0}h` bêkar ma!",
|
||||
"autodeleteLeave": "Ev tiket hate jêkirin çimkî afirîner serverê terikand!",
|
||||
"autodeleteTimeout": "Ev tiket hate jêkirin çimkî ji bo zêdetirî `{0} roj` bêkar ma!",
|
||||
"autocloseEnabled": "Xweber girtin di vê tiketê de hate çalakirin!\nDê were girtin dema ji bo zêdetirî `{0}h` bêkar be!",
|
||||
"autocloseDisabled": "Xweber girtin di vê tiketê de hate seqetkirin!\nDê ne were girtin xweber!",
|
||||
"autodeleteEnabled": "Xweber jêkirin di vê tiketê de hate çalakirin!\nDê were jêkirin dema ji bo zêdetirî `{0} roj` bêkar be!",
|
||||
"autodeleteDisabled": "Xweber jêkirin di vê tiketê de hate seqetkirin!\nDê ne were jêkirin xweber!",
|
||||
|
||||
"ticketMessageLimit": "Hûn tenê dikarin {0} tiket(an) di heman demê de biafirînin!",
|
||||
"ticketMessageAutoclose": "Ev tiket dê were girtin dema ji bo {0}h bêkar be!",
|
||||
"ticketMessageAutodelete": "Ev tiket dê were jêkirin dema ji bo {0} roj bêkar be!",
|
||||
"panelReady": "Hûn dikarin panelê li jêr bibînin!\nNiha ev peyam dikare were jêbirin!"
|
||||
},
|
||||
"modal": {
|
||||
"closePlaceholder": "Çima te vê tiketê girt?",
|
||||
"deletePlaceholder": "Çima te vê tiketê jê kir?",
|
||||
"reopenPlaceholder": "Çima te vê tiketê vekir?",
|
||||
"claimPlaceholder": "Çima te vê tiketê stand?",
|
||||
"unclaimPlaceholder": "Çima te vê tiketê ji bîr kir?",
|
||||
"pinPlaceholder": "Çima te vê tiketê rêz kir?",
|
||||
"unpinPlaceholder": "Çima te vê tiketê ji rêzê kir?"
|
||||
},
|
||||
"logs": {
|
||||
"createLog": "Tiketa nû ji aliyê {0} ve hate afirandin!",
|
||||
"closeLog": "Ev tiket ji aliyê {0} ve hate girtin!",
|
||||
"closeDm": "Tiketa we di servera me de hate girtin!",
|
||||
"deleteLog": "Ev tiket ji aliyê {0} ve hate jêkirin!",
|
||||
"deleteDm": "Tiketa we di servera me de hate jêkirin!",
|
||||
"reopenLog": "Ev tiket ji aliyê {0} ve hate vekirin!",
|
||||
"reopenDm": "Tiketa we di servera me de hate vekirin!",
|
||||
"claimLog": "Ev tiket ji aliyê {0} ve hate standin!",
|
||||
"claimDm": "Tiketa we di servera me de hate standin!",
|
||||
"unclaimLog": "Ev tiket ji aliyê {0} ve hate ji bîr kirin!",
|
||||
"unclaimDm": "Tiketa we di servera me de hate ji bîr kirin!",
|
||||
"pinLog": "Ev tiket ji aliyê {0} ve hate rêz kirin!",
|
||||
"pinDm": "Tiketa we di servera me de hate rêz kirin!",
|
||||
"unpinLog": "Ev tiket ji aliyê {0} ve hate ji rêzê kirin!",
|
||||
"unpinDm": "Tiketa we di servera me de hate ji rêzê kirin!",
|
||||
"renameLog": "Ev tiket ji aliyê {1} ve hate nav lê kirin navê {0}!",
|
||||
"renameDm": "Tiketa we di servera me de hate nav lê kirin navê {0}!",
|
||||
"moveLog": "Ev tiket ji aliyê {1} ve hate guhertin bo {0}!",
|
||||
"moveDm": "Tiketa we di servera me de hate guhertin bo {0}!",
|
||||
"addLog": "{0} ji aliyê {1} ve hate zêdekirin bo vê tiketê!",
|
||||
"addDm": "{0} di tiketa we de hate zêdekirin di servera me de!",
|
||||
"removeLog": "{0} ji aliyê {1} ve hate jêbirin ji vê tiketê!",
|
||||
"removeDm": "{0} ji tiketa we hate jêbirin di servera me de!",
|
||||
|
||||
"blacklistAddLog": "{0} ji aliyê {1} ve hate qedexekirin!",
|
||||
"blacklistRemoveLog": "{0} ji aliyê {1} ve hate berdan ji qedexeyê!",
|
||||
"blacklistAddDm": "Hûn di servera me de hate qedexekirin!\nJi niha û pê ve, hûn nikarin tiketek biafirînin!",
|
||||
"blacklistRemoveDm": "Hûn ji qedexeya servera me hate berdan!\nNiha hûn dikarin tiketan biafirînin!",
|
||||
"clearLog": "{0} tiket ji aliyê {1} ve hatin jêkirin!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
"success":{
|
||||
"visit": "Transcriptê Serlêdan Bikin",
|
||||
"ready": "Transcript Hate Afirandin",
|
||||
"textFileDescription": "Ev transcripta nivîskî ya tiketeke jêkirî ye!",
|
||||
"htmlProgress": "Ji kerema xwe li benda bin ku ev transcripta htmlê were pêvajokirin...",
|
||||
|
||||
"createdChannel": "Transcripta nû ya {0} di serverê de hate afirandin!",
|
||||
"createdCreator": "Transcripta nû ya {0} ji bo yek ji tiketên we hate afirandin!",
|
||||
"createdParticipant": "Transcripta nû ya {0} di yek ji tiketên ku hûn tevlî bûne de hate afirandin!",
|
||||
"createdActiveAdmin": "Transcripta nû ya {0} di yek ji tiketên ku hûn wekî admin tevlî bûne de hate afirandin!",
|
||||
"createdEveryAdmin": "Transcripta nû ya {0} di yek ji tiketên ku hûn admin bûne de hate afirandin!",
|
||||
"createdOther": "Transcripta nû ya {0} hate afirandin!"
|
||||
},
|
||||
"errors": {
|
||||
"retry": "Dîsa Biceribîne",
|
||||
"continue": "Bê Transcript Jê Bike",
|
||||
"backup": "Transcripta Backupê Afirîne",
|
||||
"error": "Tiştek çewt çû dema ku transcript hate afirandin.\nHûn çi dixwazin bikin?\n\nEv tiket dê neyê jêkirin heta ku hûn yek ji van bişkokan bikar bînin."
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
"titles":{
|
||||
"internalError": "Xeta Navxweyî",
|
||||
"optionMissing": "Vebijarka Fermana Windakirî",
|
||||
"optionInvalid": "Vebijarka Fermana Nederbasdar",
|
||||
"unknownCommand": "Fermana Nenas",
|
||||
"noPermissions": "Ne Destûr",
|
||||
"unknownTicket": "Tiketa Nenas",
|
||||
"deprecatedTicket": "Tiketa Kevn",
|
||||
"unknownOption": "Vebijarka Nenas",
|
||||
"unknownPanel": "Panela Nenas",
|
||||
"notInGuild": "Ne Di Serverê De",
|
||||
"channelRename": "Nikare Qenalê Nav Lê Bike",
|
||||
"busy": "Tiketê Şixul E"
|
||||
},
|
||||
"descriptions": {
|
||||
"askForInfo": "Ji bo agahiyên zêdetir bi xwediyê vê botê re têkilî daynin!",
|
||||
"askForInfoResolve": "Ger ev pirsgirêk piştî çend hewlên neyê çareserkirin, bi xwediyê botê re têkilî daynin.",
|
||||
"internalError": "Nikare bersivê vê {0} bidê ji ber xeteyek navxweyî!",
|
||||
"optionMissing": "Parametreyeke pêwîst di vê fermana de winda ye!",
|
||||
"optionInvalid": "Parametreyek di vê fermana de nederbasdar e!",
|
||||
"optionInvalidChoose": "Ji navbera",
|
||||
"unknownCommand": "Ji bo agahiyên zêdetir meniya alîkariyê serlêdan bikin!",
|
||||
"noPermissions": "Hûn ne destûr in ku vê {0} bikar bînin!",
|
||||
"noPermissionsList": "Destûrên Pêwîst: (yek ji wan)",
|
||||
"noPermissionsCooldown": "Hûn ne destûr in ku vê {0} bikar bînin ji ber ku hûn cooldown heye!",
|
||||
"noPermissionsBlacklist": "Hûn ne destûr in ku vê {0} bikar bînin ji ber ku hûn hatine qedexekirin!",
|
||||
"noPermissionsLimitGlobal": "Hûn ne destûr in ku tiketek biafirînin ji ber ku server gihîştiye sînorê herî zêde ya tiketan!",
|
||||
"noPermissionsLimitGlobalUser": "Hûn ne destûr in ku tiketek biafirînin ji ber ku hûn gihîştiye sînorê herî zêde ya tiketan!",
|
||||
"noPermissionsLimitOption": "Hûn ne destûr in ku tiketek biafirînin ji ber ku server gihîştiye sînorê herî zêde ya vê vebijarkê!",
|
||||
"noPermissionsLimitOptionUser": "Hûn ne destûr in ku tiketek biafirînin ji ber ku hûn gihîştiye sînorê herî zêde ya vê vebijarkê!",
|
||||
"unknownTicket": "Vê fermana di tiketeke derbasdar de dîsa biceribînin!",
|
||||
"deprecatedTicket": "Qenala niha tiketeke derbasdar nîne! Dibe ku ji versiyonek kevn a Open Ticketê be!",
|
||||
"notInGuild": "Ev {0} di DM de naxebite! Ji kerema xwe dîsa di serverekê de biceribînin!",
|
||||
"channelRename": "Ji ber sînorên discordê, niha ne mimkûn e ku bot qenalê nav lê bike. Qenal dê bixweber ji bo zêdetirî 10 deqîqan were nav lê kirin ger bot neyê nûvekirin.",
|
||||
"channelRenameSource": "Çavkaniya vê xetê: {0}",
|
||||
"busy": "Nikare vê {0} bikar bîne!\nTiket niha ji aliyê botê ve tê pêvajokirin.\n\nJi kerema xwe di çend saniyeyan de dîsa biceribînin!"
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex": "Nirx li şablonê nagire!",
|
||||
"stringMinLength": "Nirx divê bi qasî {0} tîpan be!",
|
||||
"stringMaxLength": "Nirx divê herî zêde {0} tîpan be!",
|
||||
"numberInvalid": "Hejmara nederbasdar!",
|
||||
"numberMin": "Hejmar divê bi qasî {0} be!",
|
||||
"numberMax": "Hejmar divê herî zêde {0} be!",
|
||||
"numberDecimal": "Hejmar ne destûr e ku dehî be!",
|
||||
"numberNegative": "Hejmar ne destûr e ku neyînî be!",
|
||||
"numberPositive": "Hejmar ne destûr e ku erênî be!",
|
||||
"numberZero": "Hejmar ne destûr e ku sifir be!",
|
||||
"channelNotFound": "Nikare qenalê bibîne!",
|
||||
"userNotFound": "Nikare bikarhênerê bibîne!",
|
||||
"roleNotFound": "Nikare rolê bibîne!",
|
||||
"memberNotFound": "Nikare endamê bibîne!",
|
||||
"mentionableNotFound": "Nikare bikarhêner an rolê bibîne!",
|
||||
"channelType": "Cureya qenalê nederbasdar e!",
|
||||
"notInGuild": "Ev vebijark ji we re dixwaze ku hûn di serverekê de bin!"
|
||||
},
|
||||
"permissions":{
|
||||
"developer": "Divê hûn pêşkêşkarê botê bin.",
|
||||
"owner": "Divê hûn xwediyê serverê bin.",
|
||||
"admin": "Divê hûn adminê serverê bin.",
|
||||
"moderator": "Divê hûn moderatör bin.",
|
||||
"support": "Divê hûn di tîma alîkariyê de bin.",
|
||||
"member": "Divê hûn endam bin.",
|
||||
"discord-administrator": "Divê hûn destûra `ADMINISTRATOR` hebe."
|
||||
},
|
||||
"actionInvalid": {
|
||||
"close": "Tiket jixwe girtî ye!",
|
||||
"reopen": "Tiket hîn negirtî ye!",
|
||||
"claim": "Tiket jixwe hate standin!",
|
||||
"unclaim": "Tiket hîn nehatiye standin!",
|
||||
"pin": "Tiket jixwe hate rêz kirin!",
|
||||
"unpin": "Tiket hîn nehatiye rêz kirin!",
|
||||
"add": "Ev bikarhêner jixwe dikare tiketê bikar bîne!",
|
||||
"remove": "Nikare vê bikarhêner ji tiketê jê bike!"
|
||||
}
|
||||
},
|
||||
"params":{
|
||||
"uppercase":{
|
||||
"ticket": "Tîket",
|
||||
"tickets": "Tîket",
|
||||
"reason": "Sedem",
|
||||
"creator": "Afirîner",
|
||||
"remaining": "Dema Mayî",
|
||||
"added": "Hat Zêdekirin",
|
||||
"removed": "Hat Jêbirin",
|
||||
"filter": "Parzûn",
|
||||
"claimedBy": "Hat Standin Ji Aliyê {0}",
|
||||
"method": "Rêbaz",
|
||||
"type": "Cure",
|
||||
"blacklisted": "Qedexekirî",
|
||||
"panel": "Panel",
|
||||
"command": "Ferman",
|
||||
"system": "Sîstem",
|
||||
"true": "Rast",
|
||||
"false": "Çewt",
|
||||
"syntax": "Sîntaks",
|
||||
"originalName": "Navê Orjînal",
|
||||
"newName": "Navê Nû",
|
||||
"until": "Heta",
|
||||
"validOptions": "Vebijarkên Derbasdar",
|
||||
"validPanels": "Panelên Derbasdar",
|
||||
"autoclose": "Xweber Girtin",
|
||||
"autodelete": "Xweber Jêbirin",
|
||||
"startupDate": "Dema Destpêkirinê",
|
||||
"version": "Versiyon",
|
||||
"name": "Nav",
|
||||
"role": "Rol",
|
||||
"status": "Rewş",
|
||||
"claimed": "Hat Standin",
|
||||
"pinned": "Hat Rêzkirin",
|
||||
"creationDate": "Dema Afirandinê"
|
||||
},
|
||||
"lowercase": {
|
||||
"text": "nivîs",
|
||||
"html": "html",
|
||||
"command": "ferman",
|
||||
"modal": "modal",
|
||||
"button": "bişkok",
|
||||
"dropdown": "dropdown",
|
||||
"method": "rêbaz"
|
||||
}
|
||||
},
|
||||
"commands":{
|
||||
"reason": "Sedemek ne mecbûrî diyar bike ku dê di tomarên logê de xuya bibe.",
|
||||
"help": "Lîsteyê hemû fermanên berdest bistînin.",
|
||||
"panel": "Peyamek bi dropdown an bişkokan (ji bo afirandina tîketê) çêbike.",
|
||||
"panelId": "Nasnameya panelê ku hûn dixwazin çêbikin.",
|
||||
"panelAutoUpdate": "Ma hûn dixwazin ev panel xweber were nûvekirin dema ku hate guhertin?",
|
||||
"ticket": "Bilez tîketek çêbike.",
|
||||
"ticketId": "Nasnameya tîketê ku hûn dixwazin çêbikin.",
|
||||
"close": "Tîketek bigire.",
|
||||
"delete": "Tîketek jê bike.",
|
||||
"deleteNoTranscript": "Vê tîketê bêyî çêkirina transcriptê jê bike.",
|
||||
"reopen": "Tîketek vekir.",
|
||||
"claim": "Tîketek bistîne.",
|
||||
"claimUser": "Vê tîketê ji xwe re ne, ji kesekî din re bistîne.",
|
||||
"unclaim": "Tîketê ji bîr bike.",
|
||||
"pin": "Tîketê rêz bike.",
|
||||
"unpin": "Tîketê ji rêzê derxe.",
|
||||
"move": "Tîketê biguherîne.",
|
||||
"moveId": "Nasnameya vebijarkê ku hûn dixwazin biguherînin.",
|
||||
"rename": "Tîketê nav lê bike.",
|
||||
"renameName": "Navê nû yê vê tîketê.",
|
||||
"add": "Bikarhênerekê li tîketê zêde bike.",
|
||||
"addUser": "Bikarhênerê ku were zêdekirin.",
|
||||
"remove": "Bikarhênerekê ji tîketê jê bike.",
|
||||
"removeUser": "Bikarhênerê ku were jêbirin.",
|
||||
"blacklist": "Qedexeyên tîketê birêvebirin.",
|
||||
"blacklistView": "Lîsteya qedexeyên niha bibîne.",
|
||||
"blacklistAdd": "Bikarhênerekê li qedexeyê zêde bike.",
|
||||
"blacklistRemove": "Bikarhênerekê ji qedexeyê jê bike.",
|
||||
"blacklistGet": "Agahiyên ji bikarhênerekê qedexekirî bistîne.",
|
||||
"blacklistGetUser": "Bikarhênerê ku agahiyên wî werin stendin.",
|
||||
"stats": "Statîstîkên botê, endamek an tîketekê bibîne.",
|
||||
"statsReset": "Hemû statîstîkên botê reset bike (û ji sifirê dest pê bike).",
|
||||
"statsGlobal": "Statîstîkên global bibîne.",
|
||||
"statsUser": "Statîstîkên bikarhênerekê di serverê de bibîne.",
|
||||
"statsUserUser": "Bikarhênerê ku were dîtin.",
|
||||
"statsTicket": "Statîstîkên tîketekê di serverê de bibîne.",
|
||||
"statsTicketTicket": "Tîketê ku were dîtin.",
|
||||
"clear": "Pir tîketên di heman demê de jê bike.",
|
||||
"clearFilter": "Parzûna ji bo jêbirkirina tîketan.",
|
||||
"clearFilters": {
|
||||
"all": "Hemû",
|
||||
"open": "Vekirî",
|
||||
"close": "Girtî",
|
||||
"claim": "Hat Standin",
|
||||
"unclaim": "Hat Ji Bîr Kirin",
|
||||
"pin": "Hat Rêzkirin",
|
||||
"unpin": "Hat Ji Rêzê Kirin",
|
||||
"autoclose": "Xweber Girtî"
|
||||
},
|
||||
"autoclose": "Xweber girtina tîketê birêvebirin.",
|
||||
"autocloseDisable": "Xweber girtina vê tîketê seqet bike.",
|
||||
"autocloseEnable": "Xweber girtina vê tîketê çalak bike.",
|
||||
"autocloseEnableTime": "Hejmara saetan ku ev tîket divê bêkar be da ku were girtin.",
|
||||
"autodelete": "Xweber jêbirkirina tîketê birêvebirin.",
|
||||
"autodeleteDisable": "Xweber jêbirkirina vê tîketê seqet bike.",
|
||||
"autodeleteEnable": "Xweber jêbirkirina vê tîketê çalak bike.",
|
||||
"autodeleteEnableTime": "Hejmara rojan ku ev tîket divê bêkar be da ku were jêbirin."
|
||||
},
|
||||
"helpMenu": {
|
||||
"help": "Lîsteyê hemû fermanên berdest bistînin.",
|
||||
"ticket": "Bilez tîketek çêbike.",
|
||||
"close": "Tîketek bigire, ev nivîsandinê di vê kanalê de seqet dike.",
|
||||
"delete": "Tîketek jê bike, ev dema ku çalak be transcriptekê çêdike.",
|
||||
"reopen": "Tîketek vekir, ev dîsa nivîsandinê di vê kanalê de çalak dike.",
|
||||
"pin": "Tîketê rêz bike. Ev dê tîketê bibe serê lîsteyê û emojîyek '📌' li navê zêde bike.",
|
||||
"unpin": "Tîketê ji rêzê derxe. Tîket dê li cihê xwe bimîne lê emojîya '📌' winda dike.",
|
||||
"move": "Tîketê biguherîne. Ev dê cureya vê tîketê biguherîne.",
|
||||
"rename": "Tîketê nav lê bike. Ev dê navê kanala vê tîketê biguherîne.",
|
||||
"claim": "Tîketê bistîne. Bi vê, hûn dikarin tîma xwe agahdar bikin ku hûn vê tîketê birêve dibin.",
|
||||
"unclaim": "Tîketê ji bîr bike. Bi vê, hûn dikarin tîma xwe agahdar bikin ku ev tîket azad e.",
|
||||
"add": "Bikarhênerekê li tîketê zêde bike. Ev dê destûrê bide bikarhêner ku di vê tîketê de bixwîne û binivîse.",
|
||||
"remove": "Bikarhênerekê ji tîketê jê bike. Ev dê destûra xwendin û nivîsandinê ji bikarhênerê re jê bike.",
|
||||
"panel": "Peyamek bi dropdown an bişkokan (ji bo afirandina tîketê) çêbike.",
|
||||
"blacklistView": "Lîsteya qedexeyên niha bibîne.",
|
||||
"blacklistAdd": "Bikarhênerekê li qedexeyê zêde bike.",
|
||||
"blacklistRemove": "Bikarhênerekê ji qedexeyê jê bike.",
|
||||
"blacklistGet": "Agahiyên ji bikarhênerekê qedexekirî bistîne.",
|
||||
"statsGlobal": "Statîstîkên global bibîne.",
|
||||
"statsTicket": "Statîstîkên tîketekê di serverê de bibîne.",
|
||||
"statsUser": "Statîstîkên bikarhênerekê di serverê de bibîne.",
|
||||
"statsReset": "Hemû statîstîkên botê reset bike (û ji sifirê dest pê bike).",
|
||||
"autocloseDisable": "Xweber girtina vê tîketê seqet bike.",
|
||||
"autocloseEnable": "Xweber girtina vê tîketê çalak bike.",
|
||||
"autodeleteDisable": "Xweber jêbirkirina vê tîketê seqet bike.",
|
||||
"autodeleteEnable": "Xweber jêbirkirina vê tîketê çalak bike."
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
"global": "Statîstîkên Global",
|
||||
"system": "Statîstîkên Sîstemê",
|
||||
"user": "Statîstîkên Bikarhêner",
|
||||
"ticket": "Statîstîkên Tîketê",
|
||||
"participants": "Beşdar"
|
||||
},
|
||||
"properties": {
|
||||
"ticketsCreated": "Tîketên Afirandî",
|
||||
"ticketsClosed": "Tîketên Girtî",
|
||||
"ticketsDeleted": "Tîketên Jêkirî",
|
||||
"ticketsReopened": "Tîketên Vekirî",
|
||||
"ticketsAutoclosed": "Tîketên Xweber Girtî",
|
||||
"ticketsClaimed": "Tîketên Hatine Standin",
|
||||
"ticketsPinned": "Tîketên Hatine Rêzkirin",
|
||||
"ticketsMoved": "Tîketên Hatine Guhertin",
|
||||
"usersBlacklisted": "Bikarhênerên Qedexekirî",
|
||||
"transcriptsCreated": "Transcriptên Afirandî"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION": {
|
||||
"otversion": "v4.0.2",
|
||||
"otversion": "v4.1.0",
|
||||
"translators": ["NoOneNook"],
|
||||
"lastedited": "25/03/2025",
|
||||
"language": "Latvian",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["TsgIndrius"],
|
||||
"lastedited":"26/01/2025",
|
||||
"language":"Lithuanian",
|
||||
|
||||
+126
-126
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION": {
|
||||
"otversion": "v4.0.2",
|
||||
"otversion": "v4.1.0",
|
||||
"translators": ["NoOneNook"],
|
||||
"lastedited": "25/03/2025",
|
||||
"language": "Norwegian",
|
||||
@@ -92,138 +92,138 @@
|
||||
"dropdownOption": "Et panel med nedtrekksmeny aktivert kan kun inneholde alternativer av typen 'sak'!"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"buttons": {
|
||||
"create": "Opprett Sak",
|
||||
"close": "Lukk Sak",
|
||||
"delete": "Slett Sak",
|
||||
"reopen": "Gjenåpne Sak",
|
||||
"claim": "Ta Sak",
|
||||
"unclaim": "Frigi Sak",
|
||||
"pin": "Fest Sak",
|
||||
"unpin": "Løsne Sak",
|
||||
"clear": "Slett Saker",
|
||||
"helpSwitchSlash": "Vis Skråstrekskommandoer",
|
||||
"helpSwitchText": "Vis Tekstkommandoer",
|
||||
"helpPage": "Side {0}",
|
||||
"withReason": "Med Årsak",
|
||||
"withoutTranscript": "Uten Utskrift"
|
||||
},
|
||||
"titles": {
|
||||
"created": "Sak Opprettet",
|
||||
"close": "Sak Lukket",
|
||||
"delete": "Sak Slettet",
|
||||
"reopen": "Sak Gjenåpnet",
|
||||
"claim": "Sak Tatt",
|
||||
"unclaim": "Sak Frigitt",
|
||||
"pin": "Sak Festet",
|
||||
"unpin": "Sak Løsnet",
|
||||
"rename": "Sak Omdøpt",
|
||||
"move": "Sak Flyttet",
|
||||
"add": "Bruker Lagt Til Sak",
|
||||
"remove": "Bruker Fjernet Fra Sak",
|
||||
"actions": {
|
||||
"buttons": {
|
||||
"create": "Opprett Sak",
|
||||
"close": "Lukk Sak",
|
||||
"delete": "Slett Sak",
|
||||
"reopen": "Gjenåpne Sak",
|
||||
"claim": "Ta Sak",
|
||||
"unclaim": "Frigi Sak",
|
||||
"pin": "Fest Sak",
|
||||
"unpin": "Løsne Sak",
|
||||
"clear": "Slett Saker",
|
||||
"helpSwitchSlash": "Vis Skråstrekskommandoer",
|
||||
"helpSwitchText": "Vis Tekstkommandoer",
|
||||
"helpPage": "Side {0}",
|
||||
"withReason": "Med Årsak",
|
||||
"withoutTranscript": "Uten Utskrift"
|
||||
},
|
||||
"titles": {
|
||||
"created": "Sak Opprettet",
|
||||
"close": "Sak Lukket",
|
||||
"delete": "Sak Slettet",
|
||||
"reopen": "Sak Gjenåpnet",
|
||||
"claim": "Sak Tatt",
|
||||
"unclaim": "Sak Frigitt",
|
||||
"pin": "Sak Festet",
|
||||
"unpin": "Sak Løsnet",
|
||||
"rename": "Sak Omdøpt",
|
||||
"move": "Sak Flyttet",
|
||||
"add": "Bruker Lagt Til Sak",
|
||||
"remove": "Bruker Fjernet Fra Sak",
|
||||
|
||||
"help": "Tilgjengelige Kommandoer",
|
||||
"statsReset": "Tilbakestill Statistikk",
|
||||
"blacklistAdd": "Bruker Svartelistet",
|
||||
"blacklistRemove": "Bruker Fjernet Fra Svarteliste",
|
||||
"blacklistGet": "Svartelistet Bruker",
|
||||
"blacklistView": "Gjeldende Svarteliste",
|
||||
"blacklistAddDm": "Lagt Til Svarteliste",
|
||||
"blacklistRemoveDm": "Fjernet Fra Svarteliste",
|
||||
"clear": "Saker Slettet",
|
||||
"roles": "Roller Oppdatert",
|
||||
"help": "Tilgjengelige Kommandoer",
|
||||
"statsReset": "Tilbakestill Statistikk",
|
||||
"blacklistAdd": "Bruker Svartelistet",
|
||||
"blacklistRemove": "Bruker Fjernet Fra Svarteliste",
|
||||
"blacklistGet": "Svartelistet Bruker",
|
||||
"blacklistView": "Gjeldende Svarteliste",
|
||||
"blacklistAddDm": "Lagt Til Svarteliste",
|
||||
"blacklistRemoveDm": "Fjernet Fra Svarteliste",
|
||||
"clear": "Saker Slettet",
|
||||
"roles": "Roller Oppdatert",
|
||||
|
||||
"autoclose": "Sak Autolukket",
|
||||
"autocloseEnabled": "Autolukking Aktivert",
|
||||
"autocloseDisabled": "Autolukking Deaktivert",
|
||||
"autodelete": "Sak Autoslettet",
|
||||
"autodeleteEnabled": "Autosletting Aktivert",
|
||||
"autodeleteDisabled": "Autosletting Deaktivert"
|
||||
},
|
||||
"descriptions": {
|
||||
"create": "Din sak er blitt opprettet. Klikk på knappen nedenfor for å få tilgang til den!",
|
||||
"close": "Saken er blitt lukket vellykket!",
|
||||
"delete": "Saken er blitt slettet vellykket!",
|
||||
"reopen": "Saken er blitt gjenåpnet vellykket!",
|
||||
"claim": "Saken er blitt tatt vellykket!",
|
||||
"unclaim": "Saken er blitt frigitt vellykket!",
|
||||
"pin": "Saken er blitt festet vellykket!",
|
||||
"unpin": "Saken er blitt løsnet vellykket!",
|
||||
"rename": "Saken er blitt omdøpt til {0} vellykket!",
|
||||
"move": "Saken er blitt flyttet til {0} vellykket!",
|
||||
"add": "{0} er blitt lagt til saken vellykket!",
|
||||
"remove": "{0} er blitt fjernet fra saken vellykket!",
|
||||
"autoclose": "Sak Autolukket",
|
||||
"autocloseEnabled": "Autolukking Aktivert",
|
||||
"autocloseDisabled": "Autolukking Deaktivert",
|
||||
"autodelete": "Sak Autoslettet",
|
||||
"autodeleteEnabled": "Autosletting Aktivert",
|
||||
"autodeleteDisabled": "Autosletting Deaktivert"
|
||||
},
|
||||
"descriptions": {
|
||||
"create": "Din sak er blitt opprettet. Klikk på knappen nedenfor for å få tilgang til den!",
|
||||
"close": "Saken er blitt lukket vellykket!",
|
||||
"delete": "Saken er blitt slettet vellykket!",
|
||||
"reopen": "Saken er blitt gjenåpnet vellykket!",
|
||||
"claim": "Saken er blitt tatt vellykket!",
|
||||
"unclaim": "Saken er blitt frigitt vellykket!",
|
||||
"pin": "Saken er blitt festet vellykket!",
|
||||
"unpin": "Saken er blitt løsnet vellykket!",
|
||||
"rename": "Saken er blitt omdøpt til {0} vellykket!",
|
||||
"move": "Saken er blitt flyttet til {0} vellykket!",
|
||||
"add": "{0} er blitt lagt til saken vellykket!",
|
||||
"remove": "{0} er blitt fjernet fra saken vellykket!",
|
||||
|
||||
"helpExplanation": "`<navn>` => påkrevd parameter\n`[navn]` => valgfri parameter",
|
||||
"statsReset": "Botens statistikk er blitt tilbakestilt vellykket!",
|
||||
"statsError": "Kan ikke vise saksstatistikk!\n{0} er ikke en sak!",
|
||||
"blacklistAdd": "{0} er blitt svartelistet vellykket!",
|
||||
"blacklistRemove": "{0} er blitt fjernet fra svartelisten vellykket!",
|
||||
"blacklistGetSuccess": "{0} er for øyeblikket svartelistet!",
|
||||
"blacklistGetEmpty": "{0} er for øyeblikket ikke svartelistet!",
|
||||
"blacklistViewEmpty": "Ingen er svartelistet ennå!",
|
||||
"blacklistViewTip": "Bruk \"/blacklist add\" for å svarteliste en bruker!",
|
||||
"clearVerify": "Er du sikker på at du vil slette flere saker?\nDenne handlingen kan ikke angres!",
|
||||
"clearReady": "{0} saker er blitt slettet vellykket!",
|
||||
"rolesEmpty": "Ingen roller er blitt oppdatert!",
|
||||
"helpExplanation": "`<navn>` => påkrevd parameter\n`[navn]` => valgfri parameter",
|
||||
"statsReset": "Botens statistikk er blitt tilbakestilt vellykket!",
|
||||
"statsError": "Kan ikke vise saksstatistikk!\n{0} er ikke en sak!",
|
||||
"blacklistAdd": "{0} er blitt svartelistet vellykket!",
|
||||
"blacklistRemove": "{0} er blitt fjernet fra svartelisten vellykket!",
|
||||
"blacklistGetSuccess": "{0} er for øyeblikket svartelistet!",
|
||||
"blacklistGetEmpty": "{0} er for øyeblikket ikke svartelistet!",
|
||||
"blacklistViewEmpty": "Ingen er svartelistet ennå!",
|
||||
"blacklistViewTip": "Bruk \"/blacklist add\" for å svarteliste en bruker!",
|
||||
"clearVerify": "Er du sikker på at du vil slette flere saker?\nDenne handlingen kan ikke angres!",
|
||||
"clearReady": "{0} saker er blitt slettet vellykket!",
|
||||
"rolesEmpty": "Ingen roller er blitt oppdatert!",
|
||||
|
||||
"autocloseLeave": "Denne saken er blitt autolukket fordi oppretteren forlot serveren!",
|
||||
"autocloseTimeout": "Denne saken er blitt autolukket fordi den har vært inaktiv i mer enn `{0}t`!",
|
||||
"autodeleteLeave": "Denne saken er blitt autoslettet fordi oppretteren forlot serveren!",
|
||||
"autodeleteTimeout": "Denne saken er blitt autoslettet fordi den har vært inaktiv i mer enn `{0} dager`!",
|
||||
"autocloseEnabled": "Autolukking er blitt aktivert i denne saken!\nDen vil bli lukket når den er inaktiv i mer enn `{0}t`!",
|
||||
"autocloseDisabled": "Autolukking er blitt deaktivert i denne saken!\nDen vil ikke lenger bli lukket automatisk!",
|
||||
"autodeleteEnabled": "Autosletting er blitt aktivert i denne saken!\nDen vil bli slettet når den er inaktiv i mer enn `{0} dager`!",
|
||||
"autodeleteDisabled": "Autosletting er blitt deaktivert i denne saken!\nDen vil ikke lenger bli slettet automatisk!",
|
||||
"autocloseLeave": "Denne saken er blitt autolukket fordi oppretteren forlot serveren!",
|
||||
"autocloseTimeout": "Denne saken er blitt autolukket fordi den har vært inaktiv i mer enn `{0}t`!",
|
||||
"autodeleteLeave": "Denne saken er blitt autoslettet fordi oppretteren forlot serveren!",
|
||||
"autodeleteTimeout": "Denne saken er blitt autoslettet fordi den har vært inaktiv i mer enn `{0} dager`!",
|
||||
"autocloseEnabled": "Autolukking er blitt aktivert i denne saken!\nDen vil bli lukket når den er inaktiv i mer enn `{0}t`!",
|
||||
"autocloseDisabled": "Autolukking er blitt deaktivert i denne saken!\nDen vil ikke lenger bli lukket automatisk!",
|
||||
"autodeleteEnabled": "Autosletting er blitt aktivert i denne saken!\nDen vil bli slettet når den er inaktiv i mer enn `{0} dager`!",
|
||||
"autodeleteDisabled": "Autosletting er blitt deaktivert i denne saken!\nDen vil ikke lenger bli slettet automatisk!",
|
||||
|
||||
"ticketMessageLimit": "Du kan kun opprette {0} sak(er) om gangen!",
|
||||
"ticketMessageAutoclose": "Denne saken vil bli autolukket når den er inaktiv i {0}t!",
|
||||
"ticketMessageAutodelete": "Denne saken vil bli autoslettet når den er inaktiv i {0} dager!",
|
||||
"panelReady": "Du finner panelet nedenfor!\nDenne meldingen kan nå slettes!"
|
||||
},
|
||||
"modal": {
|
||||
"closePlaceholder": "Hvorfor lukket du denne saken?",
|
||||
"deletePlaceholder": "Hvorfor slettet du denne saken?",
|
||||
"reopenPlaceholder": "Hvorfor gjenåpnet du denne saken?",
|
||||
"claimPlaceholder": "Hvorfor tok du denne saken?",
|
||||
"unclaimPlaceholder": "Hvorfor frigjorde du denne saken?",
|
||||
"pinPlaceholder": "Hvorfor festet du denne saken?",
|
||||
"unpinPlaceholder": "Hvorfor løsnet du denne saken?"
|
||||
},
|
||||
"logs": {
|
||||
"createLog": "En ny sak er blitt opprettet av {0}!",
|
||||
"closeLog": "Denne saken er blitt lukket av {0}!",
|
||||
"closeDm": "Din sak er blitt lukket på vår server!",
|
||||
"deleteLog": "Denne saken er blitt slettet av {0}!",
|
||||
"deleteDm": "Din sak er blitt slettet på vår server!",
|
||||
"reopenLog": "Denne saken er blitt gjenåpnet av {0}!",
|
||||
"reopenDm": "Din sak er blitt gjenåpnet på vår server!",
|
||||
"claimLog": "Denne saken er blitt tatt av {0}!",
|
||||
"claimDm": "Din sak er blitt tatt på vår server!",
|
||||
"unclaimLog": "Denne saken er blitt frigitt av {0}!",
|
||||
"unclaimDm": "Din sak er blitt frigitt på vår server!",
|
||||
"pinLog": "Denne saken er blitt festet av {0}!",
|
||||
"pinDm": "Din sak er blitt festet på vår server!",
|
||||
"unpinLog": "Denne saken er blitt løsnet av {0}!",
|
||||
"unpinDm": "Din sak er blitt løsnet på vår server!",
|
||||
"renameLog": "Denne saken er blitt omdøpt til {0} av {1}!",
|
||||
"renameDm": "Din sak er blitt omdøpt til {0} på vår server!",
|
||||
"moveLog": "Denne saken er blitt flyttet til {0} av {1}!",
|
||||
"moveDm": "Din sak er blitt flyttet til {0} på vår server!",
|
||||
"addLog": "{0} er blitt lagt til denne saken av {1}!",
|
||||
"addDm": "{0} er blitt lagt til din sak på vår server!",
|
||||
"removeLog": "{0} er blitt fjernet fra denne saken av {1}!",
|
||||
"removeDm": "{0} er blitt fjernet fra din sak på vår server!",
|
||||
"ticketMessageLimit": "Du kan kun opprette {0} sak(er) om gangen!",
|
||||
"ticketMessageAutoclose": "Denne saken vil bli autolukket når den er inaktiv i {0}t!",
|
||||
"ticketMessageAutodelete": "Denne saken vil bli autoslettet når den er inaktiv i {0} dager!",
|
||||
"panelReady": "Du finner panelet nedenfor!\nDenne meldingen kan nå slettes!"
|
||||
},
|
||||
"modal": {
|
||||
"closePlaceholder": "Hvorfor lukket du denne saken?",
|
||||
"deletePlaceholder": "Hvorfor slettet du denne saken?",
|
||||
"reopenPlaceholder": "Hvorfor gjenåpnet du denne saken?",
|
||||
"claimPlaceholder": "Hvorfor tok du denne saken?",
|
||||
"unclaimPlaceholder": "Hvorfor frigjorde du denne saken?",
|
||||
"pinPlaceholder": "Hvorfor festet du denne saken?",
|
||||
"unpinPlaceholder": "Hvorfor løsnet du denne saken?"
|
||||
},
|
||||
"logs": {
|
||||
"createLog": "En ny sak er blitt opprettet av {0}!",
|
||||
"closeLog": "Denne saken er blitt lukket av {0}!",
|
||||
"closeDm": "Din sak er blitt lukket på vår server!",
|
||||
"deleteLog": "Denne saken er blitt slettet av {0}!",
|
||||
"deleteDm": "Din sak er blitt slettet på vår server!",
|
||||
"reopenLog": "Denne saken er blitt gjenåpnet av {0}!",
|
||||
"reopenDm": "Din sak er blitt gjenåpnet på vår server!",
|
||||
"claimLog": "Denne saken er blitt tatt av {0}!",
|
||||
"claimDm": "Din sak er blitt tatt på vår server!",
|
||||
"unclaimLog": "Denne saken er blitt frigitt av {0}!",
|
||||
"unclaimDm": "Din sak er blitt frigitt på vår server!",
|
||||
"pinLog": "Denne saken er blitt festet av {0}!",
|
||||
"pinDm": "Din sak er blitt festet på vår server!",
|
||||
"unpinLog": "Denne saken er blitt løsnet av {0}!",
|
||||
"unpinDm": "Din sak er blitt løsnet på vår server!",
|
||||
"renameLog": "Denne saken er blitt omdøpt til {0} av {1}!",
|
||||
"renameDm": "Din sak er blitt omdøpt til {0} på vår server!",
|
||||
"moveLog": "Denne saken er blitt flyttet til {0} av {1}!",
|
||||
"moveDm": "Din sak er blitt flyttet til {0} på vår server!",
|
||||
"addLog": "{0} er blitt lagt til denne saken av {1}!",
|
||||
"addDm": "{0} er blitt lagt til din sak på vår server!",
|
||||
"removeLog": "{0} er blitt fjernet fra denne saken av {1}!",
|
||||
"removeDm": "{0} er blitt fjernet fra din sak på vår server!",
|
||||
|
||||
"blacklistAddLog": "{0} er blitt svartelistet av {1}!",
|
||||
"blacklistRemoveLog": "{0} er blitt fjernet fra svartelisten av {1}!",
|
||||
"blacklistAddDm": "Du er blitt svartelistet på vår server!\nFra nå av kan du ikke opprette en sak!",
|
||||
"blacklistRemoveDm": "Du er blitt fjernet fra svartelisten på vår server!\nNå kan du opprette saker igjen!",
|
||||
"clearLog": "{0} saker er blitt slettet av {1}!"
|
||||
"blacklistAddLog": "{0} er blitt svartelistet av {1}!",
|
||||
"blacklistRemoveLog": "{0} er blitt fjernet fra svartelisten av {1}!",
|
||||
"blacklistAddDm": "Du er blitt svartelistet på vår server!\nFra nå av kan du ikke opprette en sak!",
|
||||
"blacklistRemoveDm": "Du er blitt fjernet fra svartelisten på vår server!\nNå kan du opprette saker igjen!",
|
||||
"clearLog": "{0} saker er blitt slettet av {1}!"
|
||||
}
|
||||
},
|
||||
"transcripts": {
|
||||
},
|
||||
"transcripts": {
|
||||
"success": {
|
||||
"visit": "Besøk Utskrift",
|
||||
"ready": "Utskrift Opprettet",
|
||||
|
||||
@@ -0,0 +1,478 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["dysashop","zhavis"],
|
||||
"lastedited":"28/05/2025",
|
||||
"language":"Persian",
|
||||
"automated":false
|
||||
},
|
||||
"checker":{
|
||||
"system":{
|
||||
"typeError":"[خطا]",
|
||||
"headerOpenTicket":"بازکردن تیکت",
|
||||
"typeWarning":"[اخطار]",
|
||||
"typeInfo":"[اطلاعات]",
|
||||
"headerConfigChecker":"جستجوگر پیکربندی",
|
||||
"headerDescription":"برای خطاها فایل پیکربندی ( کانفیگ ) خود را چک کنید",
|
||||
"footerError":"ربات تا تمام مدت شروع نمی شود {0}'s ثابت هستند!",
|
||||
"footerWarning":"توصیه میشه همه رو تعمیر کنید {0}'s قبل از شروع کردن!",
|
||||
"footerSupport":"پشتیبانی: {0} - اسناد: {1}",
|
||||
"compactInformation":"استفاده کنید {0} برای اطلاعات بیشتر!",
|
||||
"dataPath":"path",
|
||||
"dataDocs":"docs",
|
||||
"dataMessages":"message"
|
||||
},
|
||||
"messages":{
|
||||
"stringTooShort":"این رشته نمیتواند کوتاه تر از این باشد {0} شخصیت ها!",
|
||||
"stringTooLong":"این رشته نمیتواند طولانی تر از این باشد {0} شخصیت ها!",
|
||||
"stringLengthInvalid":"این رشته باید باشد {0} شخصیت های طولانی!",
|
||||
"stringStartsWith":"این رشته باید با آن شروع شود {0}!",
|
||||
"stringEndsWith":"این رشته باید به پایان برسد {0}!",
|
||||
"stringContains":"این رشته باید حاوی باشد {0}!",
|
||||
"stringChoices":"این رشته فقط می تواند یکی از مقادیر زیر باشد: {0}!",
|
||||
"stringRegex":"این رشته اشتباه است!",
|
||||
|
||||
"numberTooShort":"این عدد نمیتواند کوتاهتر از {0} کاراکتر باشد!",
|
||||
"numberTooLong":"این عدد نمیتواند طولانیتر از {0} کاراکتر باشد!",
|
||||
"numberLengthInvalid":"این عدد باید دقیقاً {0} کاراکتر طول داشته باشد!",
|
||||
"numberTooSmall":"این عدد باید حداقل {0} باشد!",
|
||||
"numberTooLarge":"این عدد باید حداکثر {0} باشد!",
|
||||
"numberNotEqual":"این عدد باید برابر با {0} باشد!",
|
||||
"numberStep": "این عدد باید مضربی از {0} باشد!",
|
||||
"numberStepOffset": "این عدد باید مضربی از {0} باشد و با {1} شروع شود!",
|
||||
"numberStartsWith": "این عدد باید با {0} شروع شود!",
|
||||
"numberEndsWith": "این عدد باید با {0} پایان یابد!",
|
||||
"numberContains": "این عدد باید شامل {0} باشد!",
|
||||
"numberChoices": "این عدد فقط میتواند یکی از مقادیر زیر باشد: {0}!",
|
||||
"numberFloat": "این عدد نمیتواند اعشاری باشد!",
|
||||
"numberNegative": "این عدد نمیتواند منفی باشد!",
|
||||
"numberPositive": "این عدد نمیتواند مثبت باشد!",
|
||||
"numberZero": "این عدد نمیتواند صفر باشد!",
|
||||
|
||||
"booleanTrue": "این مقدار بولین نمیتواند درست (true) باشد!",
|
||||
"booleanFalse": "این مقدار بولین نمیتواند نادرست (false) باشد!",
|
||||
|
||||
"arrayEmptyDisabled": "این آرایه نمیتواند خالی باشد!",
|
||||
"arrayEmptyRequired": "این آرایه باید خالی باشد!",
|
||||
"arrayTooShort": "طول این آرایه باید حداقل {0} باشد!",
|
||||
"arrayTooLong": "طول این آرایه باید حداکثر {0} باشد!",
|
||||
"arrayLengthInvalid": "طول این آرایه باید دقیقاً {0} باشد!",
|
||||
"arrayInvalidTypes": "این آرایه فقط میتواند شامل انواع زیر باشد: {0}!",
|
||||
"arrayDouble": "این آرایه نمیتواند مقادیر تکراری داشته باشد!",
|
||||
|
||||
"discordInvalidId": "این شناسه دیسکورد {0} نامعتبر است!",
|
||||
"discordInvalidIdOptions": "این شناسه دیسکورد {0} نامعتبر است! میتوانید از یکی از این موارد استفاده کنید: {1}!",
|
||||
"discordInvalidToken": "این توکن دیسکورد از نظر ساختاری نامعتبر است!",
|
||||
"colorInvalid": "این کد رنگ هگزادسیمال نامعتبر است!",
|
||||
"emojiTooShort": "این رشته باید حداقل {0} ایموجی داشته باشد!",
|
||||
"emojiTooLong": "این رشته باید حداکثر {0} ایموجی داشته باشد!",
|
||||
"emojiCustom": "این ایموجی نمیتواند یک ایموجی سفارشی دیسکورد باشد!",
|
||||
"emojiInvalid": "این ایموجی نامعتبر است!",
|
||||
"urlInvalid": "این آدرس URL نامعتبر است!",
|
||||
"urlInvalidHttp": "این آدرس URL فقط میتواند از پروتکل https:// استفاده کند!",
|
||||
"urlInvalidProtocol": "این آدرس URL فقط میتواند از پروتکلهای http:// و https:// استفاده کند!",
|
||||
"urlInvalidHostname": "این آدرس URL دارای نام میزبان غیرمجازی است!",
|
||||
"urlInvalidExtension": "این آدرس URL دارای پسوند نامعتبر است! یکی از موارد زیر را انتخاب کنید: {0}!",
|
||||
"urlInvalidPath": "این آدرس URL دارای مسیر نامعتبر است!",
|
||||
"idNotUnique": "این شناسه یکتا نیست، لطفاً از شناسه دیگری استفاده کنید!",
|
||||
"idNonExistent": "شناسه {0} وجود ندارد!",
|
||||
|
||||
"invalidType": "این ویژگی باید از نوع {0} باشد!",
|
||||
"propertyMissing": "ویژگی {0} در این شیء وجود ندارد!",
|
||||
"propertyOptional": "ویژگی {0} در این شیء اختیاری است!",
|
||||
"objectDisabled": "این شیء غیرفعال است، آن را با استفاده از {0} فعال کنید!",
|
||||
"nullInvalid": "این ویژگی نمیتواند null باشد!",
|
||||
"switchInvalidType": "این باید یکی از انواع زیر باشد: {0}!",
|
||||
"objectSwitchInvalid": "این شیء باید یکی از انواع زیر باشد: {0}!",
|
||||
|
||||
"invalidLanguage": "این زبان نامعتبر است!",
|
||||
"invalidButton": "این دکمه باید حداقل شامل یک {0} یا {1} باشد!",
|
||||
"unusedOption": "گزینه {0} در هیچ جایی استفاده نشده است!",
|
||||
"unusedQuestion": "سوال {0} در هیچ جایی استفاده نشده است!",
|
||||
"dropdownOption": "پنلی که منوی کشویی آن فعال است، فقط میتواند شامل گزینههایی از نوع 'تیکت' باشد!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
"buttons":{
|
||||
"create": "بازدید از تیکت",
|
||||
"close": "بستن تیکت",
|
||||
"delete": "حذف تیکت",
|
||||
"reopen": "بازگشایی تیکت",
|
||||
"claim": "اختصاص تیکت",
|
||||
"unclaim": "لغو اختصاص تیکت",
|
||||
"pin": "پین کردن تیکت",
|
||||
"unpin": "لغو پین تیکت",
|
||||
"clear": "حذف تیکتها",
|
||||
"helpSwitchSlash": "مشاهده دستورات اسلش",
|
||||
"helpSwitchText": "مشاهده دستورات متنی",
|
||||
"helpPage": "صفحه {0}",
|
||||
"withReason": "با دلیل",
|
||||
"withoutTranscript": "بدون رونوشت"
|
||||
},
|
||||
"titles":{
|
||||
"created": "تیکت ایجاد شد",
|
||||
"close": "تیکت بسته شد",
|
||||
"delete": "تیکت حذف شد",
|
||||
"reopen": "تیکت بازگشایی شد",
|
||||
"claim": "تیکت اختصاص یافت",
|
||||
"unclaim": "اختصاص تیکت لغو شد",
|
||||
"pin": "تیکت پین شد",
|
||||
"unpin": "پین تیکت لغو شد",
|
||||
"rename": "نام تیکت تغییر یافت",
|
||||
"move": "تیکت منتقل شد",
|
||||
"add": "کاربر به تیکت اضافه شد",
|
||||
"remove": "کاربر از تیکت حذف شد",
|
||||
|
||||
"help": "دستورات موجود",
|
||||
"statsReset": "بازنشانی آمار",
|
||||
"blacklistAdd": "کاربر به لیست سیاه اضافه شد",
|
||||
"blacklistRemove": "کاربر از لیست سیاه آزاد شد",
|
||||
"blacklistGet": "کاربر لیست سیاه",
|
||||
"blacklistView": "لیست سیاه کنونی",
|
||||
"blacklistAddDm": "به لیست سیاه اضافه شد",
|
||||
"blacklistRemoveDm": "از لیست سیاه حذف شد",
|
||||
"clear": "تیکتها پاکسازی شدند",
|
||||
"roles": "نقشها بهروزرسانی شدند",
|
||||
|
||||
"autoclose": "تیکت بهصورت خودکار بسته شد",
|
||||
"autocloseEnabled": "بسته شدن خودکار فعال شد",
|
||||
"autocloseDisabled": "بسته شدن خودکار غیرفعال شد",
|
||||
"autodelete": "تیکت بهصورت خودکار حذف شد",
|
||||
"autodeleteEnabled": "حذف خودکار فعال شد",
|
||||
"autodeleteDisabled": "حذف خودکار غیرفعال شد"
|
||||
},
|
||||
"descriptions":{
|
||||
"create": "تیکت شما با موفقیت ایجاد شد. برای دسترسی به آن، روی دکمه زیر کلیک کنید!",
|
||||
"close": "تیکت با موفقیت بسته شد!",
|
||||
"delete": "تیکت با موفقیت حذف شد!",
|
||||
"reopen": "تیکت با موفقیت دوباره باز شد!",
|
||||
"claim": "تیکت با موفقیت به شما اختصاص یافت!",
|
||||
"unclaim": "تیکت با موفقیت از حالت اختصاصیافته خارج شد!",
|
||||
"pin": "تیکت با موفقیت پین شد!",
|
||||
"unpin": "تیکت با موفقیت از حالت پین خارج شد!",
|
||||
"rename": "نام تیکت با موفقیت به {0} تغییر یافت!",
|
||||
"move": "تیکت با موفقیت به {0} منتقل شد!",
|
||||
"add": "کاربر {0} با موفقیت به تیکت اضافه شد!",
|
||||
"remove": "کاربر {0} با موفقیت از تیکت حذف شد!",
|
||||
|
||||
"helpExplanation": "`<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": "این تیکت توسط {1} به {0} تغییر نام یافت!",
|
||||
"renameDm": "تیکت شما در سرور ما به {0} تغییر نام یافت!",
|
||||
"moveLog": "این تیکت توسط {1} به {0} منتقل شد!",
|
||||
"moveDm": "تیکت شما در سرور ما به {0} منتقل شد!",
|
||||
"addLog": "کاربر {0} توسط {1} به این تیکت اضافه شد!",
|
||||
"addDm": "کاربر {0} به تیکت شما در سرور ما اضافه شد!",
|
||||
"removeLog": "کاربر {0} توسط {1} از این تیکت حذف شد!",
|
||||
"removeDm": "کاربر {0} از تیکت شما در سرور ما حذف شد!",
|
||||
|
||||
"blacklistAddLog": "کاربر {0} توسط {1} به لیست سیاه اضافه شد!",
|
||||
"blacklistRemoveLog": "کاربر {0} توسط {1} از لیست سیاه حذف شد!",
|
||||
"blacklistAddDm": "شما در سرور ما به لیست سیاه اضافه شدید!\nاز این پس نمیتوانید تیکت ایجاد کنید!",
|
||||
"blacklistRemoveDm": "شما از لیست سیاه در سرور ما حذف شدید!\nاکنون میتوانید دوباره تیکت ایجاد کنید!",
|
||||
"clearLog": "{0} تیکت توسط {1} حذف شدند!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
"success":{
|
||||
"visit": "بازدید از رونوشت",
|
||||
"ready": "رونوشت ایجاد شد",
|
||||
"textFileDescription": "این فایل متنی، رونوشت یک تیکت حذفشده است!",
|
||||
"htmlProgress": "لطفاً صبر کنید تا این رونوشت HTML پردازش شود...",
|
||||
|
||||
"createdChannel": "یک رونوشت {0} جدید در سرور ایجاد شد!",
|
||||
"createdCreator": "یک رونوشت {0} جدید برای یکی از تیکتهای شما ایجاد شد!",
|
||||
"createdParticipant": "یک رونوشت {0} جدید در یکی از تیکتهایی که در آن مشارکت داشتید ایجاد شد!",
|
||||
"createdActiveAdmin": "یک رونوشت {0} جدید در یکی از تیکتهایی که بهعنوان مدیر در آن مشارکت داشتید ایجاد شد!",
|
||||
"createdEveryAdmin": "یک رونوشت {0} جدید در یکی از تیکتهایی که شما مدیر آن بودید ایجاد شد!",
|
||||
"createdOther": "یک رونوشت {0} جدید ایجاد شد!"
|
||||
},
|
||||
"errors":{
|
||||
"retry": "دوباره تلاش کنید",
|
||||
"continue": "حذف بدون رونوشت",
|
||||
"backup": "ایجاد رونوشت پشتیبان",
|
||||
"error": "مشکلی در هنگام ایجاد رونوشت رخ داد.\nمیخواهید چه کاری انجام دهید؟\n\nاین تیکت تا زمانی که یکی از این دکمهها را کلیک نکنید حذف نخواهد شد."
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
"titles":{
|
||||
"internalError": "خطای داخلی",
|
||||
"optionMissing": "گزینه دستور غایب است",
|
||||
"optionInvalid": "گزینه دستور نامعتبر است",
|
||||
"unknownCommand": "دستور ناشناخته",
|
||||
"noPermissions": "بدون مجوز",
|
||||
"unknownTicket": "تیکت ناشناخته",
|
||||
"deprecatedTicket": "تیکت منسوخشده",
|
||||
"unknownOption": "گزینه ناشناخته",
|
||||
"unknownPanel": "پنل ناشناخته",
|
||||
"notInGuild": "خارج از سرور",
|
||||
"channelRename": "عدم امکان تغییر نام کانال",
|
||||
"busy": "تیکت مشغول است"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo": "برای اطلاعات بیشتر با صاحب این ربات تماس بگیرید!",
|
||||
"askForInfoResolve": "اگر این مشکل پس از چند بار تلاش برطرف نشد، با صاحب این ربات تماس بگیرید.",
|
||||
"internalError": "به دلیل خطای داخلی، امکان پاسخ به این {0} وجود نداشت!",
|
||||
"optionMissing": "یک پارامتر ضروری در این دستور وجود ندارد!",
|
||||
"optionInvalid": "یک پارامتر در این دستور نامعتبر است!",
|
||||
"optionInvalidChoose": "یکی از موارد زیر را انتخاب کنید:",
|
||||
"unknownCommand": "برای اطلاعات بیشتر، منوی راهنما را بررسی کنید!",
|
||||
"noPermissions": "شما اجازه استفاده از این {0} را ندارید!",
|
||||
"noPermissionsList": "مجوزهای مورد نیاز: (یکی از آنها)",
|
||||
"noPermissionsCooldown": "به دلیل وجود محدودیت زمانی، اجازه استفاده از این {0} را ندارید!",
|
||||
"noPermissionsBlacklist": "چون در لیست سیاه قرار دارید، اجازه استفاده از این {0} را ندارید!",
|
||||
"noPermissionsLimitGlobal": "به دلیل رسیدن سرور به حداکثر تعداد تیکت، نمیتوانید تیکت ایجاد کنید!",
|
||||
"noPermissionsLimitGlobalUser": "به دلیل رسیدن شما به حداکثر تعداد تیکت، نمیتوانید تیکت ایجاد کنید!",
|
||||
"noPermissionsLimitOption": "به دلیل رسیدن سرور به حداکثر تعداد تیکت برای این گزینه، نمیتوانید تیکت ایجاد کنید!",
|
||||
"noPermissionsLimitOptionUser": "به دلیل رسیدن شما به حداکثر تعداد تیکت برای این گزینه، نمیتوانید تیکت ایجاد کنید!",
|
||||
"unknownTicket": "این دستور را دوباره در یک تیکت معتبر امتحان کنید!",
|
||||
"deprecatedTicket": "کانال کنونی یک تیکت معتبر نیست! ممکن است این تیکت از نسخه قدیمی Open Ticket باشد!",
|
||||
"notInGuild": "این {0} در پیامهای مستقیم (DM) کار نمیکند! لطفاً دوباره در یک سرور امتحان کنید!",
|
||||
"channelRename": "به دلیل محدودیتهای نرخ دیسکورد، ربات در حال حاضر نمیتواند نام کانال را تغییر دهد. اگر ربات ریاستارت نشود، نام کانال ظرف 10 دقیقه بهطور خودکار تغییر خواهد کرد.",
|
||||
"channelRenameSource": "منبع این خطا: {0}",
|
||||
"busy": "امکان استفاده از این {0} وجود ندارد!\nتیکت در حال پردازش توسط ربات است.\n\nلطفاً چند ثانیه دیگر دوباره امتحان کنید!"
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex": "مقدار با الگوی مورد نظر مطابقت ندارد!",
|
||||
"stringMinLength": "مقدار باید حداقل {0} کاراکتر باشد!",
|
||||
"stringMaxLength": "مقدار باید حداکثر {0} کاراکتر باشد!",
|
||||
"numberInvalid": "عدد نامعتبر است!",
|
||||
"numberMin": "عدد باید حداقل {0} باشد!",
|
||||
"numberMax": "عدد باید حداکثر {0} باشد!",
|
||||
"numberDecimal": "عدد نمیتواند اعشاری باشد!",
|
||||
"numberNegative": "عدد نمیتواند منفی باشد!",
|
||||
"numberPositive": "عدد نمیتواند مثبت باشد!",
|
||||
"numberZero": "عدد نمیتواند صفر باشد!",
|
||||
"channelNotFound": "کانال یافت نشد!",
|
||||
"userNotFound": "کاربر یافت نشد!",
|
||||
"roleNotFound": "نقش یافت نشد!",
|
||||
"memberNotFound": "کاربر یافت نشد!",
|
||||
"mentionableNotFound": "کاربر یا نقش یافت نشد!",
|
||||
"channelType": "نوع کانال نامعتبر است!",
|
||||
"notInGuild": "این گزینه نیازمند حضور شما در یک سرور است!"
|
||||
},
|
||||
"permissions":{
|
||||
"developer": "شما باید توسعهدهنده این ربات باشید.",
|
||||
"owner": "شما باید صاحب سرور باشید.",
|
||||
"admin": "شما باید مدیر سرور باشید.",
|
||||
"moderator": "شما باید ناظم (مدراتور) باشید.",
|
||||
"support": "شما باید عضو تیم پشتیبانی باشید.",
|
||||
"member": "شما باید عضو سرور باشید.",
|
||||
"discord-administrator": "شما باید مجوز `ADMINISTRATOR` را داشته باشید."
|
||||
},
|
||||
"actionInvalid":{
|
||||
"close": "تیکت قبلاً بسته شده است!",
|
||||
"reopen": "تیکت هنوز بسته نشده است!",
|
||||
"claim": "تیکت قبلاً اختصاص یافته است!",
|
||||
"unclaim": "تیکت هنوز اختصاص نیافته است!",
|
||||
"pin": "تیکت قبلاً پین شده است!",
|
||||
"unpin": "تیکت هنوز پین نشده است!",
|
||||
"add": "این کاربر قبلاً به تیکت دسترسی دارد!",
|
||||
"remove": "امکان حذف این کاربر از تیکت وجود ندارد!"
|
||||
}
|
||||
},
|
||||
"params":{
|
||||
"uppercase":{
|
||||
"ticket": "تیکت",
|
||||
"tickets": "تیکتها",
|
||||
"reason": "دلیل",
|
||||
"creator": "ایجادکننده",
|
||||
"remaining": "زمان باقیمانده",
|
||||
"added": "اضافهشده",
|
||||
"removed": "حذفشده",
|
||||
"filter": "فیلتر",
|
||||
"claimedBy": "اختصاصیافته به {0}",
|
||||
"method": "روش",
|
||||
"type": "نوع",
|
||||
"blacklisted": "در لیست سیاه",
|
||||
"panel": "پنل",
|
||||
"command": "دستور",
|
||||
"system": "سیستم",
|
||||
"true": "درست",
|
||||
"false": "نادرست",
|
||||
"syntax": "نحوه نگارش",
|
||||
"originalName": "نام اصلی",
|
||||
"newName": "نام جدید",
|
||||
"until": "تا",
|
||||
"validOptions": "گزینههای معتبر",
|
||||
"validPanels": "پنلهای معتبر",
|
||||
"autoclose": "بسته شدن خودکار",
|
||||
"autodelete": "حذف خودکار",
|
||||
"startupDate": "تاریخ راهاندازی",
|
||||
"version": "نسخه",
|
||||
"name": "نام",
|
||||
"role": "نقش",
|
||||
"status": "وضعیت",
|
||||
"claimed": "اختصاصیافته",
|
||||
"pinned": "پینشده",
|
||||
"creationDate": "تاریخ ایجاد"
|
||||
},
|
||||
"lowercase":{
|
||||
"text": "متن",
|
||||
"html": "اچتیامال",
|
||||
"command": "دستور",
|
||||
"modal": "پنجره بازشو",
|
||||
"button": "دکمه",
|
||||
"dropdown": "منوی کشویی",
|
||||
"method": "روش"
|
||||
}
|
||||
},
|
||||
"commands":{
|
||||
"reason": "یک دلیل اختیاری مشخص کنید که در لاگها قابل مشاهده خواهد بود.",
|
||||
"help": "لیستی از تمام دستورات موجود را دریافت کنید.",
|
||||
"panel": "یک پیام با منوی کشویی یا دکمهها ایجاد کنید (برای ساخت تیکت).",
|
||||
"panelId": "شناسه پنلی که میخواهید ایجاد کنید.",
|
||||
"panelAutoUpdate": "آیا میخواهید این پنل هنگام ویرایش بهصورت خودکار بهروزرسانی شود؟",
|
||||
"ticket": "فوراً یک تیکت ایجاد کنید.",
|
||||
"ticketId": "شناسه تیکتی که میخواهید ایجاد کنید.",
|
||||
"close": "یک تیکت را ببندید.",
|
||||
"delete": "یک تیکت را حذف کنید.",
|
||||
"deleteNoTranscript": "این تیکت را بدون ایجاد رونوشت حذف کنید.",
|
||||
"reopen": "یک تیکت را دوباره باز کنید.",
|
||||
"claim": "یک تیکت را به خود اختصاص دهید.",
|
||||
"claimUser": "این تیکت را به جای خودتان به شخص دیگری اختصاص دهید.",
|
||||
"unclaim": "اختصاص یک تیکت را لغو کنید.",
|
||||
"pin": "یک تیکت را پین کنید.",
|
||||
"unpin": "پین یک تیکت را لغو کنید.",
|
||||
"move": "یک تیکت را منتقل کنید.",
|
||||
"moveId": "شناسه گزینهای که میخواهید تیکت به آن منتقل شود.",
|
||||
"rename": "نام یک تیکت را تغییر دهید.",
|
||||
"renameName": "نام جدید برای این تیکت.",
|
||||
"add": "یک کاربر را به تیکت اضافه کنید.",
|
||||
"addUser": "کاربری که میخواهید اضافه کنید.",
|
||||
"remove": "یک کاربر را از تیکت حذف کنید.",
|
||||
"removeUser": "کاربری که میخواهید حذف کنید.",
|
||||
"blacklist": "لیست سیاه تیکتها را مدیریت کنید.",
|
||||
"blacklistView": "لیستی از لیست سیاه کنونی را مشاهده کنید.",
|
||||
"blacklistAdd": "یک کاربر را به لیست سیاه اضافه کنید.",
|
||||
"blacklistRemove": "یک کاربر را از لیست سیاه حذف کنید.",
|
||||
"blacklistGet": "جزئیات یک کاربر در لیست سیاه را دریافت کنید.",
|
||||
"blacklistGetUser": "کاربری که میخواهید جزئیاتش را دریافت کنید.",
|
||||
"stats": "آمار ربات، یک عضو یا یک تیکت را مشاهده کنید.",
|
||||
"statsReset": "تمام آمار ربات را بازنشانی کنید (و شمارش را از صفر شروع کنید).",
|
||||
"statsGlobal": "آمار کلی را مشاهده کنید.",
|
||||
"statsUser": "آمار یک کاربر در سرور را مشاهده کنید.",
|
||||
"statsUserUser": "کاربری که میخواهید آمارش را مشاهده کنید.",
|
||||
"statsTicket": "آمار یک تیکت در سرور را مشاهده کنید.",
|
||||
"statsTicketTicket": "تیکتی که میخواهید آمارش را مشاهده کنید.",
|
||||
"clear": "چندین تیکت را بهصورت همزمان حذف کنید.",
|
||||
"clearFilter": "فیلتر برای حذف تیکتها.",
|
||||
"clearFilters": {
|
||||
"all": "همه",
|
||||
"open": "باز",
|
||||
"close": "بسته",
|
||||
"claim": "اختصاصیافته",
|
||||
"unclaim": "بدون اختصاص",
|
||||
"pin": "پینشده",
|
||||
"unpin": "بدون پین",
|
||||
"autoclose": "بستهشده خودکار"
|
||||
},
|
||||
"autoclose": "مدیریت بسته شدن خودکار در یک تیکت.",
|
||||
"autocloseDisable": "غیرفعال کردن بسته شدن خودکار در این تیکت.",
|
||||
"autocloseEnable": "فعال کردن بسته شدن خودکار در این تیکت.",
|
||||
"autocloseEnableTime": "تعداد ساعاتی که این تیکت باید غیرفعال باشد تا بسته شود.",
|
||||
"autodelete": "مدیریت حذف خودکار در یک تیکت.",
|
||||
"autodeleteDisable": "غیرفعال کردن حذف خودکار در این تیکت.",
|
||||
"autodeleteEnable": "فعال کردن حذف خودکار در این تیکت.",
|
||||
"autodeleteEnableTime": "تعداد روزهایی که این تیکت باید غیرفعال باشد تا حذف شود."
|
||||
},
|
||||
"helpMenu":{
|
||||
"help": "لیستی از تمام دستورات موجود را دریافت کنید.",
|
||||
"ticket": "فوراً یک تیکت ایجاد کنید.",
|
||||
"close": "یک تیکت را ببندید، این کار نوشتن در این کانال را غیرفعال میکند.",
|
||||
"delete": "یک تیکت را حذف کنید، این کار در صورت فعال بودن، یک رونوشت ایجاد میکند.",
|
||||
"reopen": "یک تیکت را دوباره باز کنید، این کار نوشتن در این کانال را دوباره فعال میکند.",
|
||||
"pin": "یک تیکت را پین کنید. این کار تیکت را به بالای لیست منتقل میکند و ایموجی '📌' به نام آن اضافه میشود.",
|
||||
"unpin": "پین یک تیکت را لغو کنید. تیکت در جایگاه فعلی خود باقی میماند اما ایموجی '📌' از نام آن حذف میشود.",
|
||||
"move": "یک تیکت را منتقل کنید. این کار نوع تیکت را تغییر میدهد.",
|
||||
"rename": "نام یک تیکت را تغییر دهید. این کار نام کانال تیکت را تغییر میدهد.",
|
||||
"claim": "یک تیکت را به خود اختصاص دهید. با این کار به تیم خود اطلاع میدهید که شما این تیکت را مدیریت میکنید.",
|
||||
"unclaim": "اختصاص یک تیکت را لغو کنید. با این کار به تیم خود اطلاع میدهید که این تیکت دوباره آزاد است.",
|
||||
"add": "یک کاربر را به تیکت اضافه کنید. این کار به کاربر امکان خواندن و نوشتن در تیکت را میدهد.",
|
||||
"remove": "یک کاربر را از تیکت حذف کنید. این کار امکان خواندن و نوشتن کاربر در تیکت را حذف میکند.",
|
||||
"panel": "یک پیام با منوی کشویی یا دکمهها ایجاد کنید (برای ساخت تیکت).",
|
||||
"blacklistView": "لیستی از لیست سیاه کنونی را مشاهده کنید.",
|
||||
"blacklistAdd": "یک کاربر را به لیست سیاه اضافه کنید.",
|
||||
"blacklistRemove": "یک کاربر را از لیست سیاه حذف کنید.",
|
||||
"blacklistGet": "جزئیات یک کاربر در لیست سیاه را دریافت کنید.",
|
||||
"statsGlobal": "آمار کلی را مشاهده کنید.",
|
||||
"statsTicket": "آمار یک تیکت در سرور را مشاهده کنید.",
|
||||
"statsUser": "آمار یک کاربر در سرور را مشاهده کنید.",
|
||||
"statsReset": "تمام آمار ربات را بازنشانی کنید (و شمارش را از صفر شروع کنید).",
|
||||
"autocloseDisable": "بسته شدن خودکار را در این تیکت غیرفعال کنید.",
|
||||
"autocloseEnable": "بسته شدن خودکار را در این تیکت فعال کنید.",
|
||||
"autodeleteDisable": "حذف خودکار را در این تیکت غیرفعال کنید.",
|
||||
"autodeleteEnable": "حذف خودکار را در این تیکت فعال کنید."
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
"global": "آمار کلی",
|
||||
"system": "آمار سیستم",
|
||||
"user": "آمار کاربر",
|
||||
"ticket": "آمار تیکت",
|
||||
"participants": "مشارکتکنندگان"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated": "تیکتهای ایجادشده",
|
||||
"ticketsClosed": "تیکتهای بستهشده",
|
||||
"ticketsDeleted": "تیکتهای حذفشده",
|
||||
"ticketsReopened": "تیکتهای دوباره بازشده",
|
||||
"ticketsAutoclosed": "تیکتهای بستهشده خودکار",
|
||||
"ticketsClaimed": "تیکتهای اختصاص یافته",
|
||||
"ticketsPinned": "تیکتهای پین شده",
|
||||
"ticketsMoved": "تیکتهای منتقل شده",
|
||||
"usersBlacklisted": "کاربران در لیست سیاه",
|
||||
"transcriptsCreated": "رونوشتهای ایجادشده"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["DanoGlez"],
|
||||
"lastedited":"28/01/2025",
|
||||
"language":"Polish",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["quiradon"],
|
||||
"lastedited":"20/08/2024",
|
||||
"language":"Portuguese",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["SankeDev"],
|
||||
"lastedited":"27/08/2024",
|
||||
"language":"Romanian",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION": {
|
||||
"otversion": "v4.0.2",
|
||||
"otversion": "v4.1.0",
|
||||
"translators": ["NoOneNook"],
|
||||
"lastedited": "25/03/2025",
|
||||
"language": "Russian",
|
||||
|
||||
@@ -0,0 +1,478 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["HanumeshGupta"],
|
||||
"lastedited":"19/06/2025",
|
||||
"language":"Simplified Chainese",
|
||||
"automated":true
|
||||
},
|
||||
"checker":{
|
||||
"system":{
|
||||
"typeError": "[错误]",
|
||||
"headerOpenTicket": "开启工单",
|
||||
"typeWarning": "[警告]",
|
||||
"typeInfo": "[信息]",
|
||||
"headerConfigChecker": "配置检查器",
|
||||
"headerDescription": "检查您的配置文件中的错误!",
|
||||
"footerError": "机器人将无法启动,直到所有{0}错误被修复!",
|
||||
"footerWarning": "建议在启动前修复所有{0}警告!",
|
||||
"footerSupport": "支持:{0} - 文档:{1}",
|
||||
"compactInformation": "使用{0}获取更多信息!",
|
||||
"dataPath": "路径",
|
||||
"dataDocs": "文档",
|
||||
"dataMessages": "消息"
|
||||
},
|
||||
"messages": {
|
||||
"stringTooShort": "此字符串不能少于{0}个字符!",
|
||||
"stringTooLong": "此字符串不能超过{0}个字符!",
|
||||
"stringLengthInvalid": "此字符串长度必须为{0}个字符!",
|
||||
"stringStartsWith": "此字符串必须以{0}开头!",
|
||||
"stringEndsWith": "此字符串必须以{0}结尾!",
|
||||
"stringContains": "此字符串必须包含{0}!",
|
||||
"stringChoices": "此字符串只能是以下值之一:{0}!",
|
||||
"stringRegex": "此字符串无效!",
|
||||
|
||||
"numberTooShort": "此数字不能少于{0}位!",
|
||||
"numberTooLong": "此数字不能超过{0}位!",
|
||||
"numberLengthInvalid": "此数字长度必须为{0}位!",
|
||||
"numberTooSmall": "此数字至少为{0}!",
|
||||
"numberTooLarge": "此数字最多为{0}!",
|
||||
"numberNotEqual": "此数字必须为{0}!",
|
||||
"numberStep": "此数字必须是{0}的倍数!",
|
||||
"numberStepOffset": "此数字必须是{0}的倍数,起始值为{1}!",
|
||||
"numberStartsWith": "此数字必须以{0}开头!",
|
||||
"numberEndsWith": "此数字必须以{0}结尾!",
|
||||
"numberContains": "此数字必须包含{0}!",
|
||||
"numberChoices": "此数字只能是以下值之一:{0}!",
|
||||
"numberFloat": "此数字不能为小数!",
|
||||
"numberNegative": "此数字不能为负数!",
|
||||
"numberPositive": "此数字不能为正数!",
|
||||
"numberZero": "此数字不能为零!",
|
||||
|
||||
"booleanTrue": "此布尔值不能为真!",
|
||||
"booleanFalse": "此布尔值不能为假!",
|
||||
|
||||
"arrayEmptyDisabled": "此数组不允许为空!",
|
||||
"arrayEmptyRequired": "此数组必须为空!",
|
||||
"arrayTooShort": "此数组长度至少为{0}!",
|
||||
"arrayTooLong": "此数组长度最多为{0}!",
|
||||
"arrayLengthInvalid": "此数组长度必须为{0}!",
|
||||
"arrayInvalidTypes": "此数组只能包含以下类型:{0}!",
|
||||
"arrayDouble": "此数组不允许重复值!",
|
||||
|
||||
"discordInvalidId": "这是无效的Discord {0} ID!",
|
||||
"discordInvalidIdOptions": "这是无效的Discord {0} ID!您还可以使用以下之一:{1}!",
|
||||
"discordInvalidToken": "这是无效的Discord令牌(语法上)!",
|
||||
"colorInvalid": "这是无效的十六进制颜色!",
|
||||
"emojiTooShort": "此字符串至少需要{0}个表情符号!",
|
||||
"emojiTooLong": "此字符串最多只能有{0}个表情符号!",
|
||||
"emojiCustom": "此表情符号不能是自定义Discord表情符号!",
|
||||
"emojiInvalid": "这是无效的表情符号!",
|
||||
"urlInvalid": "此URL无效!",
|
||||
"urlInvalidHttp":"This url can only use the https:// protocol!",
|
||||
"urlInvalidProtocol":"This url can only use the http:// & https:// protocols!",
|
||||
"urlInvalidHostname": "此URL的主机名不被允许!",
|
||||
"urlInvalidExtension": "此URL的扩展名无效!请选择:{0}!",
|
||||
"urlInvalidPath": "此URL的路径无效!",
|
||||
"idNotUnique": "此ID不唯一,请使用其他ID!",
|
||||
"idNonExistent": "ID {0}不存在!",
|
||||
|
||||
"invalidType": "此属性必须为类型:{0}!",
|
||||
"propertyMissing": "此对象缺少属性{0}!",
|
||||
"propertyOptional": "此对象中的属性{0}是可选的!",
|
||||
"objectDisabled": "此对象已禁用,请使用{0}启用!",
|
||||
"nullInvalid": "此属性不能为null!",
|
||||
"switchInvalidType": "此属性必须是以下类型之一:{0}!",
|
||||
"objectSwitchInvalid": "此对象必须是以下类型之一:{0}!",
|
||||
|
||||
"invalidLanguage": "这是无效的语言!",
|
||||
"invalidButton": "此按钮必须至少有一个{0}或{1}!",
|
||||
"unusedOption": "选项{0}未在任何地方使用!",
|
||||
"unusedQuestion": "问题{0}未在任何地方使用!",
|
||||
"dropdownOption": "启用下拉菜单的面板只能包含“ticket”类型的选项!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
"buttons":{
|
||||
"create": "访问工单",
|
||||
"close": "关闭工单",
|
||||
"delete": "删除工单",
|
||||
"reopen": "重新开启工单",
|
||||
"claim": "认领工单",
|
||||
"unclaim": "取消认领工单",
|
||||
"pin": "置顶工单",
|
||||
"unpin": "取消置顶工单",
|
||||
"clear": "删除工单",
|
||||
"helpSwitchSlash": "查看斜杠命令",
|
||||
"helpSwitchText": "查看文本命令",
|
||||
"helpPage": "第{0}页",
|
||||
"withReason": "带原因",
|
||||
"withoutTranscript": "不带记录"
|
||||
},
|
||||
"titles": {
|
||||
"created": "工单已创建",
|
||||
"close": "工单已关闭",
|
||||
"delete": "工单已删除",
|
||||
"reopen": "工单已重新开启",
|
||||
"claim": "工单已认领",
|
||||
"unclaim": "工单已取消认领",
|
||||
"pin": "工单已置顶",
|
||||
"unpin": "工单已取消置顶",
|
||||
"rename": "工单已重命名",
|
||||
"move": "工单已移动",
|
||||
"add": "工单用户已添加",
|
||||
"remove": "工单用户已移除",
|
||||
|
||||
"help": "可用命令",
|
||||
"statsReset": "重置统计",
|
||||
"blacklistAdd": "用户已拉黑",
|
||||
"blacklistRemove": "用户已解禁",
|
||||
"blacklistGet": "已拉黑用户",
|
||||
"blacklistView": "当前黑名单",
|
||||
"blacklistAddDm": "已加入黑名单",
|
||||
"blacklistRemoveDm": "已从黑名单移除",
|
||||
"clear": "工单已清除",
|
||||
"roles": "角色已更新",
|
||||
|
||||
"autoclose": "工单自动关闭",
|
||||
"autocloseEnabled": "自动关闭已启用",
|
||||
"autocloseDisabled": "自动关闭已禁用",
|
||||
"autodelete": "工单自动删除",
|
||||
"autodeleteEnabled": "自动删除已启用",
|
||||
"autodeleteDisabled": "自动删除已禁用"
|
||||
},
|
||||
"descriptions":{
|
||||
"create": "您的工单已创建。点击下方按钮访问!",
|
||||
"close": "工单已成功关闭!",
|
||||
"delete": "工单已成功删除!",
|
||||
"reopen": "工单已成功重新开启!",
|
||||
"claim": "工单已成功认领!",
|
||||
"unclaim": "工单已成功取消认领!",
|
||||
"pin": "工单已成功置顶!",
|
||||
"unpin": "工单已成功取消置顶!",
|
||||
"rename": "工单已成功重命名为{0}!",
|
||||
"move": "工单已成功移动到{0}!",
|
||||
"add": "{0}已成功添加到工单!",
|
||||
"remove": "{0}已成功从工单移除!",
|
||||
|
||||
"helpExplanation": "`<名称>` => 必填参数\n`[名称]` => 可选参数",
|
||||
"statsReset": "机器人统计已成功重置!",
|
||||
"statsError": "无法查看工单统计!\n{0}不是工单!",
|
||||
"blacklistAdd": "{0}已成功拉黑!",
|
||||
"blacklistRemove": "{0}已成功解禁!",
|
||||
"blacklistGetSuccess": "{0}当前已被拉黑!",
|
||||
"blacklistGetEmpty": "{0}当前未被拉黑!",
|
||||
"blacklistViewEmpty": "尚未有人被拉黑!",
|
||||
"blacklistViewTip": "使用“/blacklist add”拉黑用户!",
|
||||
"clearVerify": "确定要删除多个工单吗?\n此操作无法撤销!",
|
||||
"clearReady": "{0}个工单已成功删除!",
|
||||
"rolesEmpty": "未更新任何角色!",
|
||||
|
||||
"autocloseLeave": "此工单已自动关闭,因为创建者离开了服务器!",
|
||||
"autocloseTimeout": "此工单已自动关闭,因为它已超过`{0}小时`未活动!",
|
||||
"autodeleteLeave": "此工单已自动删除,因为创建者离开了服务器!",
|
||||
"autodeleteTimeout": "此工单已自动删除,因为它已超过`{0}天`未活动!",
|
||||
"autocloseEnabled": "此工单已启用自动关闭!\n超过`{0}小时`未活动后将自动关闭!",
|
||||
"autocloseDisabled": "此工单已禁用自动关闭!\n不再自动关闭!",
|
||||
"autodeleteEnabled": "此工单已启用自动删除!\n超过`{0}天`未活动后将自动删除!",
|
||||
"autodeleteDisabled": "此工单已禁用自动删除!\n不再自动删除!",
|
||||
|
||||
"ticketMessageLimit": "您只能同时创建{0}个工单!",
|
||||
"ticketMessageAutoclose": "此工单将在超过{0}小时未活动后自动关闭!",
|
||||
"ticketMessageAutodelete": "此工单将在超过{0}天未活动后自动删除!",
|
||||
"panelReady": "您可以在下方找到面板!\n现在可以删除此消息!"
|
||||
},
|
||||
"modal": {
|
||||
"closePlaceholder": "您为什么关闭此工单?",
|
||||
"deletePlaceholder": "您为什么删除此工单?",
|
||||
"reopenPlaceholder": "您为什么重新开启此工单?",
|
||||
"claimPlaceholder": "您为什么认领此工单?",
|
||||
"unclaimPlaceholder": "您为什么取消认领此工单?",
|
||||
"pinPlaceholder": "您为什么置顶此工单?",
|
||||
"unpinPlaceholder": "您为什么取消置顶此工单?"
|
||||
},
|
||||
"logs": {
|
||||
"createLog": "{0}创建了一个新工单!",
|
||||
"closeLog": "此工单已被{0}关闭!",
|
||||
"closeDm": "您的工单已在我们的服务器中关闭!",
|
||||
"deleteLog": "此工单已被{0}删除!",
|
||||
"deleteDm": "您的工单已在我们的服务器中删除!",
|
||||
"reopenLog": "此工单已被{0}重新开启!",
|
||||
"reopenDm": "您的工单已在我们的服务器中重新开启!",
|
||||
"claimLog": "此工单已被{0}认领!",
|
||||
"claimDm": "您的工单已在我们的服务器中被认领!",
|
||||
"unclaimLog": "此工单已被{0}取消认领!",
|
||||
"unclaimDm": "您的工单已在我们的服务器中取消认领!",
|
||||
"pinLog": "此工单已被{0}置顶!",
|
||||
"pinDm": "您的工单已在我们的服务器中置顶!",
|
||||
"unpinLog": "此工单已被{0}取消置顶!",
|
||||
"unpinDm": "您的工单已在我们的服务器中取消置顶!",
|
||||
"renameLog": "此工单已被{1}重命名为{0}!",
|
||||
"renameDm": "您的工单已在我们的服务器中重命名为{0}!",
|
||||
"moveLog": "此工单已被{1}移动到{0}!",
|
||||
"moveDm": "您的工单已在我们的服务器中移动到{0}!",
|
||||
"addLog": "{0}已被{1}添加到此工单!",
|
||||
"addDm": "{0}已被添加到您的工单中!",
|
||||
"removeLog": "{0}已被{1}从此工单移除!",
|
||||
"removeDm": "{0}已被从您的工单中移除!",
|
||||
|
||||
"blacklistAddLog": "{0}被{1}拉黑!",
|
||||
"blacklistRemoveLog": "{0}被{1}从黑名单移除!",
|
||||
"blacklistAddDm": "您已被我们的服务器拉黑!\n从现在起,您无法创建工单!",
|
||||
"blacklistRemoveDm": "您已被我们的服务器解禁!\n现在您可以再次创建工单!",
|
||||
"clearLog": "{0}个工单已被{1}删除!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
"success":{
|
||||
"visit": "查看记录",
|
||||
"ready": "记录已创建",
|
||||
"textFileDescription": "这是已删除工单的文本记录!",
|
||||
"htmlProgress": "请等待此HTML记录处理完成...",
|
||||
|
||||
"createdChannel": "服务器中已创建一个新的{0}记录!",
|
||||
"createdCreator": "已为您的工单创建一个新的{0}记录!",
|
||||
"createdParticipant": "您参与的工单中已创建一个新的{0}记录!",
|
||||
"createdActiveAdmin": "您作为管理员参与的工单中已创建一个新的{0}记录!",
|
||||
"createdEveryAdmin": "您曾担任管理员的工单中已创建一个新的{0}记录!",
|
||||
"createdOther": "已创建一个新的{0}记录!"
|
||||
},
|
||||
"errors": {
|
||||
"retry": "重试",
|
||||
"continue": "删除无记录",
|
||||
"backup": "创建备份记录",
|
||||
"error": "创建记录时出错。\n您想怎么做?\n\n在您点击以下按钮之前,此工单不会被删除。"
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
"titles":{
|
||||
"internalError": "内部错误",
|
||||
"optionMissing": "命令选项缺失",
|
||||
"optionInvalid": "命令选项无效",
|
||||
"unknownCommand": "未知命令",
|
||||
"noPermissions": "无权限",
|
||||
"unknownTicket": "未知工单",
|
||||
"deprecatedTicket": "过时工单",
|
||||
"unknownOption": "未知选项",
|
||||
"unknownPanel": "未知面板",
|
||||
"notInGuild": "不在服务器中",
|
||||
"channelRename": "无法重命名频道",
|
||||
"busy": "工单繁忙"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo": "请联系此机器人的所有者获取更多信息!",
|
||||
"askForInfoResolve": "如果此问题在多次尝试后仍未解决,请联系此机器人的所有者。",
|
||||
"internalError": "由于内部错误,无法响应此{0}!",
|
||||
"optionMissing": "此命令缺少必填参数!",
|
||||
"optionInvalid": "此命令中的参数无效!",
|
||||
"optionInvalidChoose": "请选择",
|
||||
"unknownCommand": "请访问帮助菜单获取更多信息!",
|
||||
"noPermissions": "您无权使用此{0}!",
|
||||
"noPermissionsList": "所需权限:(其中之一)",
|
||||
"noPermissionsCooldown": "您因冷却时间无法使用此{0}!",
|
||||
"noPermissionsBlacklist": "您因被拉黑无法使用此{0}!",
|
||||
"noPermissionsLimitGlobal": "您无法创建工单,因为服务器已达到最大工单限制!",
|
||||
"noPermissionsLimitGlobalUser": "您无法创建工单,因为您已达到最大工单限制!",
|
||||
"noPermissionsLimitOption": "您无法创建工单,因为服务器已达到此选项的最大工单限制!",
|
||||
"noPermissionsLimitOptionUser": "您无法创建工单,因为您已达到此选项的最大工单限制!",
|
||||
"unknownTicket": "请在有效工单中重试此命令!",
|
||||
"deprecatedTicket": "当前频道不是有效工单!可能是旧版Open Ticket的工单!",
|
||||
"notInGuild": "此{0}在私信中无效!请在服务器中重试!",
|
||||
"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": "记录已创建"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,478 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["HanumeshGupta"],
|
||||
"lastedited":"19/06/2025",
|
||||
"language":"Solvenian",
|
||||
"automated":true
|
||||
},
|
||||
"checker":{
|
||||
"system":{
|
||||
"typeError": "[NAPAKA]",
|
||||
"headerOpenTicket": "ODPRTI VSTOPNICO",
|
||||
"typeWarning": "[OPOZORILO]",
|
||||
"typeInfo": "[INFORMACIJA]",
|
||||
"headerConfigChecker": "PREVERJALNIK KONFIGURACIJE",
|
||||
"headerDescription": "preveri napake v svojih konfiguracijskih datotekah!",
|
||||
"footerError": "bot se ne bo zagnal, dokler se ne popravijo vse napake {0}!",
|
||||
"footerWarning": "priporočljivo je popraviti vsa opozorila {0} pred zagonom!",
|
||||
"footerSupport": "PODPORA: {0} - DOKUMENTACIJA: {1}",
|
||||
"compactInformation": "uporabi {0} za več informacij!",
|
||||
"dataPath": "pot",
|
||||
"dataDocs": "dokumenti",
|
||||
"dataMessages": "sporočilo"
|
||||
},
|
||||
"messages":{
|
||||
"stringTooShort": "Ta niz ne sme biti krajši od {0} znakov!",
|
||||
"stringTooLong": "Ta niz ne sme biti daljši od {0} znakov!",
|
||||
"stringLengthInvalid": "Ta niz mora biti dolg {0} znakov!",
|
||||
"stringStartsWith": "Ta niz se mora začeti z {0}!",
|
||||
"stringEndsWith": "Ta niz se mora končati z {0}!",
|
||||
"stringContains": "Ta niz mora vsebovati {0}!",
|
||||
"stringChoices": "Ta niz je lahko le ena od naslednjih vrednosti: {0}!",
|
||||
"stringRegex": "Ta niz je neveljaven!",
|
||||
|
||||
"numberTooShort": "Ta številka ne sme biti krajša od {0} znakov!",
|
||||
"numberTooLong": "Ta številka ne sme biti daljša od {0} znakov!",
|
||||
"numberLengthInvalid": "Ta številka mora biti dolga {0} znakov!",
|
||||
"numberTooSmall": "Ta številka mora biti vsaj {0}!",
|
||||
"numberTooLarge": "Ta številka mora biti največ {0}!",
|
||||
"numberNotEqual": "Ta številka mora biti {0}!",
|
||||
"numberStep": "Ta številka mora biti večkratnik {0}!",
|
||||
"numberStepOffset": "Ta številka mora biti večkratnik {0}, ki se začne z {1}!",
|
||||
"numberStartsWith": "Ta številka se mora začeti z {0}!",
|
||||
"numberEndsWith": "Ta številka se mora končati z {0}!",
|
||||
"numberContains": "Ta številka mora vsebovati {0}!",
|
||||
"numberChoices": "Ta številka je lahko le ena od naslednjih vrednosti: {0}!",
|
||||
"numberFloat": "Ta številka ne sme biti decimalna!",
|
||||
"numberNegative": "Ta številka ne sme biti negativna!",
|
||||
"numberPositive": "Ta številka ne sme biti pozitivna!",
|
||||
"numberZero": "Ta številka ne sme biti nič!",
|
||||
|
||||
"booleanTrue": "Ta logična vrednost ne sme biti resnična!",
|
||||
"booleanFalse": "Ta logična vrednost ne sme biti napačna!",
|
||||
|
||||
"arrayEmptyDisabled": "Ta tabela ne sme biti prazna!",
|
||||
"arrayEmptyRequired": "Ta tabela mora biti prazna!",
|
||||
"arrayTooShort": "Ta tabela mora imeti vsaj {0} elementov!",
|
||||
"arrayTooLong": "Ta tabela mora imeti največ {0} elementov!",
|
||||
"arrayLengthInvalid": "Ta tabela mora imeti natanko {0} elementov!",
|
||||
"arrayInvalidTypes": "Ta tabela lahko vsebuje le naslednje tipe: {0}!",
|
||||
"arrayDouble": "Ta tabela ne dovoljuje podvajanja vrednosti!",
|
||||
|
||||
"discordInvalidId": "To je neveljaven Discord {0} ID!",
|
||||
"discordInvalidIdOptions": "To je neveljaven Discord {0} ID! Lahko uporabite tudi eno od teh: {1}!",
|
||||
"discordInvalidToken": "To je neveljaven Discord žeton (sintaktično)!",
|
||||
"colorInvalid": "To je neveljavna heksadecimalna barva!",
|
||||
"emojiTooShort": "Ta niz mora vsebovati vsaj {0} emojije!",
|
||||
"emojiTooLong": "Ta niz mora vsebovati največ {0} emojijev!",
|
||||
"emojiCustom": "Ta emoji ne sme biti prilagojen Discord emoji!",
|
||||
"emojiInvalid": "To je neveljaven emoji!",
|
||||
"urlInvalid": "Ta URL je neveljaven!",
|
||||
"urlInvalidHttp": "Ta URL lahko uporablja samo protokol https://!",
|
||||
"urlInvalidProtocol": "Ta URL lahko uporablja samo protokola http:// in https://!",
|
||||
"urlInvalidHostname": "Ta URL ima nedovoljeno ime gostitelja!",
|
||||
"urlInvalidExtension": "Ta URL ima neveljavno končnico! Izberite med: {0}!",
|
||||
"urlInvalidPath": "Ta URL ima neveljavno pot!",
|
||||
"idNotUnique": "Ta ID ni edinstven, uporabite drug ID!",
|
||||
"idNonExistent": "ID {0} ne obstaja!",
|
||||
|
||||
"invalidType": "Ta lastnost mora biti tipa: {0}!",
|
||||
"propertyMissing": "Lastnost {0} manjka v tem objektu!",
|
||||
"propertyOptional": "Lastnost {0} je izbirna v tem objektu!",
|
||||
"objectDisabled": "Ta objekt je onemogočen, omogočite ga z {0}!",
|
||||
"nullInvalid": "Ta lastnost ne sme biti null!",
|
||||
"switchInvalidType": "To mora biti enega od naslednjih tipov: {0}!",
|
||||
"objectSwitchInvalid": "Ta objekt mora biti enega od naslednjih tipov: {0}!",
|
||||
|
||||
"invalidLanguage": "To je neveljaven jezik!",
|
||||
"invalidButton": "Ta gumb mora imeti vsaj {0} ali {1}!",
|
||||
"unusedOption": "Možnost {0} se ne uporablja nikjer!",
|
||||
"unusedQuestion": "Vprašanje {0} se ne uporablja nikjer!",
|
||||
"dropdownOption": "Panel z omogočenim spustnim menijem lahko vsebuje samo možnosti tipa 'ticket'!"
|
||||
}
|
||||
},
|
||||
"actions":{
|
||||
"buttons":{
|
||||
"create": "Obišči Vstopnico",
|
||||
"close": "Zapri Vstopnico",
|
||||
"delete": "Izbriši Vstopnico",
|
||||
"reopen": "Ponovno Odpri Vstopnico",
|
||||
"claim": "Prevzemi Vstopnico",
|
||||
"unclaim": "Odstopi Vstopnico",
|
||||
"pin": "Pripni Vstopnico",
|
||||
"unpin": "Odpni Vstopnico",
|
||||
"clear": "Izbriši Vstopnice",
|
||||
"helpSwitchSlash": "Prikaži Ukaze s Poševnico",
|
||||
"helpSwitchText": "Prikaži Besedilne Ukaze",
|
||||
"helpPage": "Stran {0}",
|
||||
"withReason": "Z Razlogom",
|
||||
"withoutTranscript": "Brez Prepisa"
|
||||
},
|
||||
"titles":{
|
||||
"created": "Vstopnica Ustvarjena",
|
||||
"close": "Vstopnica Zaprta",
|
||||
"delete": "Vstopnica Izbrisana",
|
||||
"reopen": "Vstopnica Ponovno Odprta",
|
||||
"claim": "Vstopnica Prevzeta",
|
||||
"unclaim": "Vstopnica Odstopljena",
|
||||
"pin": "Vstopnica Pripeta",
|
||||
"unpin": "Vstopnica Odpeta",
|
||||
"rename": "Vstopnica Preimenovana",
|
||||
"move": "Vstopnica Premaknjena",
|
||||
"add": "Uporabnik Dodan k Vstopnici",
|
||||
"remove": "Uporabnik Odstranjen iz Vstopnice",
|
||||
|
||||
"help": "Razpoložljivi Ukazi",
|
||||
"statsReset": "Ponastavi Statistiko",
|
||||
"blacklistAdd": "Uporabnik na Črni Listi",
|
||||
"blacklistRemove": "Uporabnik Odstranjen s Črne Liste",
|
||||
"blacklistGet": "Uporabnik na Črni Listi",
|
||||
"blacklistView": "Trenutna Črna Lista",
|
||||
"blacklistAddDm": "Dodan na Črno Listo",
|
||||
"blacklistRemoveDm": "Odstranjen s Črne Liste",
|
||||
"clear": "Vstopnice Izbrisane",
|
||||
"roles": "Vloge Posodobljene",
|
||||
|
||||
"autoclose": "Vstopnica Samodejno Zaprta",
|
||||
"autocloseEnabled": "Samodejno Zapiranje Omogočeno",
|
||||
"autocloseDisabled": "Samodejno Zapiranje Onemogočeno",
|
||||
"autodelete": "Vstopnica Samodejno Izbrisana",
|
||||
"autodeleteEnabled": "Samodejno Brisanje Omogočeno",
|
||||
"autodeleteDisabled": "Samodejno Brisanje Onemogočeno"
|
||||
},
|
||||
"descriptions":{
|
||||
"create": "Vaša vstopnica je bila ustvarjena. Kliknite spodnji gumb za dostop do nje!",
|
||||
"close": "Vstopnica je bila uspešno zaprta!",
|
||||
"delete": "Vstopnica je bila uspešno izbrisana!",
|
||||
"reopen": "Vstopnica je bila uspešno ponovno odprta!",
|
||||
"claim": "Vstopnica je bila uspešno prevzeta!",
|
||||
"unclaim": "Vstopnica je bila uspešno odstopljena!",
|
||||
"pin": "Vstopnica je bila uspešno pripeta!",
|
||||
"unpin": "Vstopnica je bila uspešno odprta!",
|
||||
"rename": "Vstopnica je bila uspešno preimenovana v {0}!",
|
||||
"move": "Vstopnica je bila uspešno premaknjena v {0}!",
|
||||
"add": "{0} je bil uspešno dodan k vstopnici!",
|
||||
"remove": "{0} je bil uspešno odstranjen iz vstopnice!",
|
||||
|
||||
"helpExplanation": "`<ime>` => obvezen parameter\n`[ime]` => izbiren parameter",
|
||||
"statsReset": "Statistika bota je bila uspešno ponastavljena!",
|
||||
"statsError": "Ni mogoče prikazati statistike vstopnice!\n{0} ni vstopnica!",
|
||||
"blacklistAdd": "{0} je bil uspešno dodan na črno listo!",
|
||||
"blacklistRemove": "{0} je bil uspešno odstranjen s črne liste!",
|
||||
"blacklistGetSuccess": "{0} je trenutno na črni listi!",
|
||||
"blacklistGetEmpty": "{0} trenutno ni na črni listi!",
|
||||
"blacklistViewEmpty": "Nihče še ni bil dodan na črno listo!",
|
||||
"blacklistViewTip": "Uporabi \"/blacklist add\" za dodajanje uporabnika na črno listo!",
|
||||
"clearVerify": "Ali ste prepričani, da želite izbrisati več vstopnic?\nTega dejanja ni mogoče razveljaviti!",
|
||||
"clearReady": "{0} vstopnic je bilo uspešno izbrisanih!",
|
||||
"rolesEmpty": "Nobena vloga ni bila posodobljena!",
|
||||
|
||||
"autocloseLeave": "Ta vstopnica je bila samodejno zaprta, ker je ustvarjalec zapustil strežnik!",
|
||||
"autocloseTimeout": "Ta vstopnica je bila samodejno zaprta, ker je bila neaktivna več kot `{0}h`!",
|
||||
"autodeleteLeave": "Ta vstopnica je bila samodejno izbrisana, ker je ustvarjalec zapustil strežnik!",
|
||||
"autodeleteTimeout": "Ta vstopnica je bila samodejno izbrisana, ker je bila neaktivna več kot `{0} dni`!",
|
||||
"autocloseEnabled": "Samodejno zapiranje je bilo omogočeno za to vstopnico!\nZaprta bo, ko bo neaktivna več kot `{0}h`!",
|
||||
"autocloseDisabled": "Samodejno zapiranje je bilo onemogočeno za to vstopnico!\nNe bo več samodejno zaprta!",
|
||||
"autodeleteEnabled": "Samodejno brisanje je bilo omogočeno za to vstopnico!\nIzbrisana bo, ko bo neaktivna več kot `{0} dni`!",
|
||||
"autodeleteDisabled": "Samodejno brisanje je bilo onemogočeno za to vstopnico!\nNe bo več samodejno izbrisana!",
|
||||
|
||||
"ticketMessageLimit": "Lahko ustvarite le {0} vstopnice hkrati!",
|
||||
"ticketMessageAutoclose": "Ta vstopnica bo samodejno zaprta, če bo neaktivna {0}h!",
|
||||
"ticketMessageAutodelete": "Ta vstopnica bo samodejno izbrisana, če bo neaktivna {0} dni!",
|
||||
"panelReady": "Panel najdete spodaj!\nTo sporočilo lahko zdaj izbrišete!"
|
||||
},
|
||||
"modal":{
|
||||
"closePlaceholder": "Zakaj ste zaprli to vstopnico?",
|
||||
"deletePlaceholder": "Zakaj ste izbrisali to vstopnico?",
|
||||
"reopenPlaceholder": "Zakaj ste ponovno odprli to vstopnico?",
|
||||
"claimPlaceholder": "Zakaj ste prevzeli to vstopnico?",
|
||||
"unclaimPlaceholder": "Zakaj ste odstopili to vstopnico?",
|
||||
"pinPlaceholder": "Zakaj ste pripeli to vstopnico?",
|
||||
"unpinPlaceholder": "Zakaj ste odprli to vstopnico?"
|
||||
},
|
||||
"logs":{
|
||||
"createLog": "Novo vstopnico je ustvaril {0}!",
|
||||
"closeLog": "To vstopnico je zaprl {0}!",
|
||||
"closeDm": "Vaša vstopnica je bila zaprta na našem strežniku!",
|
||||
"deleteLog": "To vstopnico je izbrisal {0}!",
|
||||
"deleteDm": "Vaša vstopnica je bila izbrisana na našem strežniku!",
|
||||
"reopenLog": "To vstopnico je ponovno odprl {0}!",
|
||||
"reopenDm": "Vaša vstopnica je bila ponovno odprta na našem strežniku!",
|
||||
"claimLog": "To vstopnico je prevzel {0}!",
|
||||
"claimDm": "Vaša vstopnica je bila prevzeta na našem strežniku!",
|
||||
"unclaimLog": "To vstopnico je odstopil {0}!",
|
||||
"unclaimDm": "Vaša vstopnica je bila odstopljena na našem strežniku!",
|
||||
"pinLog": "To vstopnico je pripel {0}!",
|
||||
"pinDm": "Vaša vstopnica je bila pripeta na našem strežniku!",
|
||||
"unpinLog": "To vstopnico je odprl {0}!",
|
||||
"unpinDm": "Vaša vstopnica je bila odprta na našem strežniku!",
|
||||
"renameLog": "To vstopnico je preimenoval v {0} uporabnik {1}!",
|
||||
"renameDm": "Vaša vstopnica je bila preimenovana v {0} na našem strežniku!",
|
||||
"moveLog": "To vstopnico je premaknil v {0} uporabnik {1}!",
|
||||
"moveDm": "Vaša vstopnica je bila premaknjena v {0} na našem strežniku!",
|
||||
"addLog": "{0} je bil dodan k tej vstopnici s strani {1}!",
|
||||
"addDm": "{0} je bil dodan k vaši vstopnici na našem strežniku!",
|
||||
"removeLog": "{0} je bil odstranjen iz te vstopnice s strani {1}!",
|
||||
"removeDm": "{0} je bil odstranjen iz vaše vstopnice na našem strežniku!",
|
||||
|
||||
"blacklistAddLog": "{0} je bil dodan na črno listo s strani {1}!",
|
||||
"blacklistRemoveLog": "{0} je bil odstranjen s črne liste s strani {1}!",
|
||||
"blacklistAddDm": "Bili ste dodani na črno listo na našem strežniku!\nOd zdaj naprej ne morete ustvarjati vstopnic!",
|
||||
"blacklistRemoveDm": "Bili ste odstranjeni s črne liste na našem strežniku!\nZdaj lahko znova ustvarjate vstopnice!",
|
||||
"clearLog": "{0} vstopnic je bilo izbrisanih s strani {1}!"
|
||||
}
|
||||
},
|
||||
"transcripts":{
|
||||
"success":{
|
||||
"visit": "Obišči Prepis",
|
||||
"ready": "Prepis Ustvarjen",
|
||||
"textFileDescription": "To je besedilni prepis izbrisane vstopnice!",
|
||||
"htmlProgress": "Počakajte, medtem ko se ta HTML prepis obdeluje...",
|
||||
|
||||
"createdChannel": "Nov {0} prepis je bil ustvarjen na strežniku!",
|
||||
"createdCreator": "Nov {0} prepis je bil ustvarjen za eno od vaših vstopnic!",
|
||||
"createdParticipant": "Nov {0} prepis je bil ustvarjen v eni od vstopnic, v kateri ste sodelovali!",
|
||||
"createdActiveAdmin": "Nov {0} prepis je bil ustvarjen v eni od vstopnic, v kateri ste sodelovali kot skrbnik!",
|
||||
"createdEveryAdmin": "Nov {0} prepis je bil ustvarjen v eni od vstopnic, v kateri ste bili skrbnik!",
|
||||
"createdOther": "Nov {0} prepis je bil ustvarjen!"
|
||||
},
|
||||
"errors":{
|
||||
"retry": "Poskusi Znova",
|
||||
"continue": "Izbriši Brez Prepisa",
|
||||
"backup": "Ustvarili Varnostni Prepis",
|
||||
"error": "Prišlo je do napake med ustvarjanjem prepisa.\nKaj bi radi naredili?\n\nTa vstopnica ne bo izbrisana, dokler ne kliknete enega od teh gumbov."
|
||||
}
|
||||
},
|
||||
"errors":{
|
||||
"titles":{
|
||||
"internalError": "Notranja Napaka",
|
||||
"optionMissing": "Manjkajoč Parameter Ukaza",
|
||||
"optionInvalid": "Neveljaven Parameter Ukaza",
|
||||
"unknownCommand": "Neznan Ukaz",
|
||||
"noPermissions": "Ni Dovoljenj",
|
||||
"unknownTicket": "Neznana Vstopnica",
|
||||
"deprecatedTicket": "Zastarela Vstopnica",
|
||||
"unknownOption": "Neznana Možnost",
|
||||
"unknownPanel": "Neznan Panel",
|
||||
"notInGuild": "Ni na Strežniku",
|
||||
"channelRename": "Ni mogoče Preimenovati Kanala",
|
||||
"busy": "Vstopnica je Zasedena"
|
||||
},
|
||||
"descriptions":{
|
||||
"askForInfo": "Stopite v stik z lastnikom tega bota za več informacij!",
|
||||
"askForInfoResolve": "Stopite v stik z lastnikom bota, če se ta težava ne reši po nekaj poskusih.",
|
||||
"internalError": "Ni bilo mogoče odgovoriti na ta {0} zaradi notranje napake!",
|
||||
"optionMissing": "V tem ukazu manjka obvezen parameter!",
|
||||
"optionInvalid": "Parameter v tem ukazu je neveljaven!",
|
||||
"optionInvalidChoose": "Izberite med",
|
||||
"unknownCommand": "Poskusite obiskati pomoč za več informacij!",
|
||||
"noPermissions": "Nimate dovoljenja za uporabo tega {0}!",
|
||||
"noPermissionsList": "Zahtevana Dovoljenja: (eno od njih)",
|
||||
"noPermissionsCooldown": "Nimate dovoljenja za uporabo tega {0}, ker imate čakalno dobo!",
|
||||
"noPermissionsBlacklist": "Nimate dovoljenja za uporabo tega {0}, ker ste na črni listi!",
|
||||
"noPermissionsLimitGlobal": "Ne morete ustvariti vstopnice, ker je strežnik dosegel največje število vstopnic!",
|
||||
"noPermissionsLimitGlobalUser": "Ne morete ustvariti vstopnice, ker ste dosegli največje število vstopnic!",
|
||||
"noPermissionsLimitOption": "Ne morete ustvariti vstopnice, ker je strežnik dosegel največje število vstopnic za to možnost!",
|
||||
"noPermissionsLimitOptionUser": "Ne morete ustvariti vstopnice, ker ste dosegli največje število vstopnic za to možnost!",
|
||||
"unknownTicket": "Poskusite ta ukaz znova v veljavni vstopnici!",
|
||||
"deprecatedTicket": "Trenutni kanal ni veljavna vstopnica! Morda je vstopnica iz starejše različice Open Ticket!",
|
||||
"notInGuild": "Ta {0} ne deluje v zasebnih sporočilih! Poskusite znova na strežniku!",
|
||||
"channelRename": "Zaradi omejitev Discord-a trenutno ni mogoče preimenovati kanala. Kanal bo samodejno preimenovan v več kot 10 minutah, če bot ne bo ponovno zagnan.",
|
||||
"channelRenameSource": "Vir te napake je: {0}",
|
||||
"busy": "Ni mogoče uporabiti tega {0}!\nVstopnica je trenutno v obdelavi.\n\nPoskusite znova čez nekaj sekund!"
|
||||
},
|
||||
"optionInvalidReasons":{
|
||||
"stringRegex": "Vrednost se ne ujema z vzorcem!",
|
||||
"stringMinLength": "Vrednost mora biti dolga vsaj {0} znakov!",
|
||||
"stringMaxLength": "Vrednost mora biti dolga največ {0} znakov!",
|
||||
"numberInvalid": "Neveljavna številka!",
|
||||
"numberMin": "Številka mora biti vsaj {0}!",
|
||||
"numberMax": "Številka mora biti največ {0}!",
|
||||
"numberDecimal": "Številka ne sme biti decimalna!",
|
||||
"numberNegative": "Številka ne sme biti negativna!",
|
||||
"numberPositive": "Številka ne sme biti pozitivna!",
|
||||
"numberZero": "Številka ne sme biti nič!",
|
||||
"channelNotFound": "Kanala ni mogoče najti!",
|
||||
"userNotFound": "Uporabnika ni mogoče najti!",
|
||||
"roleNotFound": "Vloge ni mogoče najti!",
|
||||
"memberNotFound": "Uporabnika ni mogoče najti!",
|
||||
"mentionableNotFound": "Uporabnika ali vloge ni mogoče najti!",
|
||||
"channelType": "Neveljavna vrsta kanala!",
|
||||
"notInGuild": "Ta možnost zahteva, da ste na strežniku!"
|
||||
},
|
||||
"permissions":{
|
||||
"developer": "Morate biti razvijalec bota.",
|
||||
"owner": "Morate biti lastnik strežnika.",
|
||||
"admin": "Morate biti skrbnik strežnika.",
|
||||
"moderator": "Morate biti moderator.",
|
||||
"support": "Morate biti v podporni ekipi.",
|
||||
"member": "Morate biti član.",
|
||||
"discord-administrator": "Imeti morate dovoljenje `ADMINISTRATOR`."
|
||||
},
|
||||
"actionInvalid":{
|
||||
"close": "Vstopnica je že zaprta!",
|
||||
"reopen": "Vstopnica še ni zaprta!",
|
||||
"claim": "Vstopnica je že prevzeta!",
|
||||
"unclaim": "Vstopnica še ni prevzeta!",
|
||||
"pin": "Vstopnica je že pripeta!",
|
||||
"unpin": "Vstopnica še ni pripeta!",
|
||||
"add": "Ta uporabnik že ima dostop do vstopnice!",
|
||||
"remove": "Ni mogoče odstraniti tega uporabnika iz vstopnice!"
|
||||
}
|
||||
},
|
||||
"params":{
|
||||
"uppercase":{
|
||||
"ticket": "Vstopnica",
|
||||
"tickets": "Vstopnice",
|
||||
"reason": "Razlog",
|
||||
"creator": "Ustvarjalec",
|
||||
"remaining": "Preostali čas",
|
||||
"added": "Dodano",
|
||||
"removed": "Odstranjeno",
|
||||
"filter": "Filter",
|
||||
"claimedBy": "Prevzel {0}",
|
||||
"method": "Metoda",
|
||||
"type": "Tip",
|
||||
"blacklisted": "Na črnem seznamu",
|
||||
"panel": "Panel",
|
||||
"command": "Ukaz",
|
||||
"system": "Sistem",
|
||||
"true": "Da",
|
||||
"false": "Ne",
|
||||
"syntax": "Sintaksa",
|
||||
"originalName": "Prvotno ime",
|
||||
"newName": "Novo ime",
|
||||
"until": "Do",
|
||||
"validOptions": "Veljavne možnosti",
|
||||
"validPanels": "Veljavni paneli",
|
||||
"autoclose": "Samodejno zapiranje",
|
||||
"autodelete": "Samodejno brisanje",
|
||||
"startupDate": "Datum zagon",
|
||||
"version": "Različica",
|
||||
"name": "Ime",
|
||||
"role": "Vloga",
|
||||
"status": "Status",
|
||||
"claimed": "Prevzeto",
|
||||
"pinned": "Pripeto",
|
||||
"creationDate": "Datum ustvarjanja"
|
||||
},
|
||||
"lowercase":{
|
||||
"text": "besedilo",
|
||||
"html": "html",
|
||||
"command": "ukaz",
|
||||
"modal": "modal",
|
||||
"button": "gumb",
|
||||
"dropdown": "spustni meni",
|
||||
"method": "metoda"
|
||||
}
|
||||
},
|
||||
"commands":{
|
||||
"reason": "Določite izbirni razlog, ki bo viden v dnevnikih.",
|
||||
"help": "Pridobite seznam vseh razpoložljivih ukazov.",
|
||||
"panel": "Ustvari sporočilo s spustnim menijem ali gumbi (za ustvarjanje vstopnic).",
|
||||
"panelId": "Identifikator panela, ki ga želite ustvariti.",
|
||||
"panelAutoUpdate": "Ali želite, da se ta panel samodejno posodobi, ko ga uredite?",
|
||||
"ticket": "Takoj ustvari vstopnico.",
|
||||
"ticketId": "Identifikator vstopnice, ki jo želite ustvariti.",
|
||||
"close": "Zapri vstopnico.",
|
||||
"delete": "Izbriši vstopnico.",
|
||||
"deleteNoTranscript": "Izbriši to vstopnico brez ustvarjanja prepisa.",
|
||||
"reopen": "Ponovno odpri vstopnico.",
|
||||
"claim": "Prevzemi vstopnico.",
|
||||
"claimUser": "Prevzemi to vstopnico za nekoga drugega namesto zase.",
|
||||
"unclaim": "Odstrani prevzem vstopnice.",
|
||||
"pin": "Pripni vstopnico.",
|
||||
"unpin": "Odstrani pripenjanje vstopnice.",
|
||||
"move": "Premakni vstopnico.",
|
||||
"moveId": "Identifikator možnosti, na katero želite premakniti.",
|
||||
"rename": "Preimenuj vstopnico.",
|
||||
"renameName": "Novo ime za to vstopnico.",
|
||||
"add": "Dodaj uporabnika v vstopnico.",
|
||||
"addUser": "Uporabnik, ki ga želite dodati.",
|
||||
"remove": "Odstrani uporabnika iz vstopnice.",
|
||||
"removeUser": "Uporabnik, ki ga želite odstraniti.",
|
||||
"blacklist": "Upravljaj s črnim seznamom vstopnic.",
|
||||
"blacklistView": "Oglej si seznam trenutnega črnega seznama.",
|
||||
"blacklistAdd": "Dodaj uporabnika na črni seznam.",
|
||||
"blacklistRemove": "Odstrani uporabnika s črnega seznama.",
|
||||
"blacklistGet": "Pridobi podrobnosti o uporabniku na črnem seznamu.",
|
||||
"blacklistGetUser": "Uporabnik, za katerega želite pridobiti podrobnosti.",
|
||||
"stats": "Oglej si statistiko bota, člana ali vstopnice.",
|
||||
"statsReset": "Ponastavi vse statistike bota (in začni šteti iz nič).",
|
||||
"statsGlobal": "Oglej si globalno statistiko.",
|
||||
"statsUser": "Oglej si statistiko uporabnika na strežniku.",
|
||||
"statsUserUser": "Uporabnik, ki ga želite ogledati.",
|
||||
"statsTicket": "Oglej si statistiko vstopnice na strežniku.",
|
||||
"statsTicketTicket": "Vstopnica, ki jo želite ogledati.",
|
||||
"clear": "Izbriši več vstopnic hkrati.",
|
||||
"clearFilter": "Filter za čiščenje vstopnic.",
|
||||
"clearFilters": {
|
||||
"all": "Vse",
|
||||
"open": "Odprte",
|
||||
"close": "Zaprte",
|
||||
"claim": "Prevzete",
|
||||
"unclaim": "Neprevzete",
|
||||
"pin": "Pripete",
|
||||
"unpin": "Nepripete",
|
||||
"autoclose": "Samodejno zaprte"
|
||||
},
|
||||
"autoclose": "Upravljaj samodejno zapiranje v vstopnici.",
|
||||
"autocloseDisable": "Onemogoči samodejno zapiranje v tej vstopnici.",
|
||||
"autocloseEnable": "Omogoči samodejno zapiranje v tej vstopnici.",
|
||||
"autocloseEnableTime": "Število ur, ko mora biti vstopnica neaktivna, da se zapre.",
|
||||
"autodelete": "Upravljaj samodejno brisanje v vstopnici.",
|
||||
"autodeleteDisable": "Onemogoči samodejno brisanje v tej vstopnici.",
|
||||
"autodeleteEnable": "Omogoči samodejno brisanje v tej vstopnici.",
|
||||
"autodeleteEnableTime": "Število dni, ko mora biti vstopnica neaktivna, da se izbriše."
|
||||
},
|
||||
"helpMenu":{
|
||||
"help": "Pridobite seznam vseh razpoložljivih ukazov.",
|
||||
"ticket": "Takoj ustvari vstopnico.",
|
||||
"close": "Zapri vstopnico, s tem onemogočiš pisanje v tem kanalu.",
|
||||
"delete": "Izbriši vstopnico, s tem ustvariš prepis, če je omogočeno.",
|
||||
"reopen": "Ponovno odpri vstopnico, s tem ponovno omogočiš pisanje v tem kanalu.",
|
||||
"pin": "Pripni vstopnico. To bo premaknilo vstopnico na vrh in dodalo '📌' emoji k imenu.",
|
||||
"unpin": "Odstrani pripenjanje vstopnice. Vstopnica bo ostala na svojem mestu, vendar bo izgubila '📌' emoji.",
|
||||
"move": "Premakni vstopnico. To bo spremenilo tip te vstopnice.",
|
||||
"rename": "Preimenuj vstopnico. To bo spremenilo ime kanala te vstopnice.",
|
||||
"claim": "Prevzemi vstopnico. S tem lahko svoji ekipi sporočiš, da skrbiš za to vstopnico.",
|
||||
"unclaim": "Odstrani prevzem vstopnice. S tem lahko svoji ekipi sporočiš, da je ta vstopnica spet prosta.",
|
||||
"add": "Dodaj uporabnika v vstopnico. To bo uporabniku omogočilo branje in pisanje v tej vstopnici.",
|
||||
"remove": "Odstrani uporabnika iz vstopnice. To bo uporabniku odstranilo možnost branja in pisanja v tej vstopnici.",
|
||||
"panel": "Ustvari sporočilo s spustnim menijem ali gumbi (za ustvarjanje vstopnic).",
|
||||
"blacklistView": "Oglej si seznam trenutnega črnega seznama.",
|
||||
"blacklistAdd": "Dodaj uporabnika na črni seznam.",
|
||||
"blacklistRemove": "Odstrani uporabnika s črnega seznama.",
|
||||
"blacklistGet": "Pridobi podrobnosti o uporabniku na črnem seznamu.",
|
||||
"statsGlobal": "Oglej si globalno statistiko.",
|
||||
"statsTicket": "Oglej si statistiko vstopnice na strežniku.",
|
||||
"statsUser": "Oglej si statistiko uporabnika na strežniku.",
|
||||
"statsReset": "Ponastavi vse statistike bota (in začni šteti iz nič).",
|
||||
"autocloseDisable": "Onemogoči samodejno zapiranje v tej vstopnici.",
|
||||
"autocloseEnable": "Omogoči samodejno zapiranje v tej vstopnici.",
|
||||
"autodeleteDisable": "Onemogoči samodejno brisanje v tej vstopnici.",
|
||||
"autodeleteEnable": "Omogoči samodejno brisanje v tej vstopnici."
|
||||
},
|
||||
"stats":{
|
||||
"scopes":{
|
||||
"global": "Globalna statistika",
|
||||
"system": "Sistemska statistika",
|
||||
"user": "Uporabniška statistika",
|
||||
"ticket": "Statistika vstopnic",
|
||||
"participants": "Udeleženci"
|
||||
},
|
||||
"properties":{
|
||||
"ticketsCreated": "Ustvarjene vstopnice",
|
||||
"ticketsClosed": "Zaprte vstopnice",
|
||||
"ticketsDeleted": "Izbrisane vstopnice",
|
||||
"ticketsReopened": "Ponovno odprte vstopnice",
|
||||
"ticketsAutoclosed": "Samodejno zaprte vstopnice",
|
||||
"ticketsClaimed": "Prevzete vstopnice",
|
||||
"ticketsPinned": "Pripete vstopnice",
|
||||
"ticketsMoved": "Premaknjene vstopnice",
|
||||
"usersBlacklisted": "Uporabniki na črnem seznamu",
|
||||
"transcriptsCreated": "Ustvarjeni prepisi"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["Redactado","Josuens"],
|
||||
"lastedited":"22/08/2024",
|
||||
"language":"Spanish",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION": {
|
||||
"otversion": "v4.0.2",
|
||||
"otversion": "v4.1.0",
|
||||
"translators": ["NoOneNook"],
|
||||
"lastedited": "25/03/2025",
|
||||
"language": "Svenska",
|
||||
|
||||
@@ -0,0 +1,478 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["HanumeshGupta"],
|
||||
"lastedited":"19/06/2025",
|
||||
"language":"Tamil",
|
||||
"automated":true
|
||||
},
|
||||
"checker":{
|
||||
"system":{
|
||||
"typeError": "[பிழை]",
|
||||
"headerOpenTicket": "டிக்கெட் திறக்க",
|
||||
"typeWarning": "[எச்சரிக்கை]",
|
||||
"typeInfo": "[தகவல்]",
|
||||
"headerConfigChecker": "கட்டமைப்பு சரிபார்ப்பு",
|
||||
"headerDescription": "உங்கள் கட்டமைப்பு கோப்புகளில் உள்ள பிழைகளை சரிபார்க்கவும்!",
|
||||
"footerError": "அனைத்து {0} பிழைகளும் சரி செய்யப்படும் வரை போட் தொடங்காது!",
|
||||
"footerWarning": "தொடங்குவதற்கு முன் அனைத்து {0} எச்சரிக்கைகளையும் சரி செய்ய பரிந்துரைக்கப்படுகிறது!",
|
||||
"footerSupport": "ஆதரவு: {0} - ஆவணங்கள்: {1}",
|
||||
"compactInformation": "மேலும் தகவலுக்கு {0} பயன்படுத்தவும்!",
|
||||
"dataPath": "பாதை",
|
||||
"dataDocs": "ஆவணங்கள்",
|
||||
"dataMessages": "செய்தி"
|
||||
},
|
||||
"messages": {
|
||||
"stringTooShort": "இந்த சரம் {0} எழுத்துகளுக்கு குறைவாக இருக்க முடியாது!",
|
||||
"stringTooLong": "இந்த சரம் {0} எழுத்துகளுக்கு மேல் இருக்க முடியாது!",
|
||||
"stringLengthInvalid": "இந்த சரம் {0} எழுத்துகள் நீளமாக இருக்க வேண்டும்!",
|
||||
"stringStartsWith": "இந்த சரம் {0} உடன் தொடங்க வேண்டும்!",
|
||||
"stringEndsWith": "இந்த சரம் {0} உடன் முடிவடைய வேண்டும்!",
|
||||
"stringContains": "இந்த சரம் {0} ஐ கொண்டிருக்க வேண்டும்!",
|
||||
"stringChoices": "இந்த சரம் பின்வரும் மதிப்புகளில் ஒன்றாக மட்டுமே இருக்க முடியும்: {0}!",
|
||||
"stringRegex": "இந்த சரம் தவறானது!",
|
||||
|
||||
"numberTooShort": "இந்த எண் {0} எழுத்துகளுக்கு குறைவாக இருக்க முடியாது!",
|
||||
"numberTooLong": "இந்த எண் {0} எழுத்துகளுக்கு மேல் இருக்க முடியாது!",
|
||||
"numberLengthInvalid": "இந்த எண் {0} எழுத்துகள் நீளமாக இருக்க வேண்டும்!",
|
||||
"numberTooSmall": "இந்த எண் குறைந்தது {0} ஆக இருக்க வேண்டும்!",
|
||||
"numberTooLarge": "இந்த எண் அதிகபட்சம் {0} ஆக இருக்க வேண்டும்!",
|
||||
"numberNotEqual": "இந்த எண் {0} ஆக இருக்க வேண்டும்!",
|
||||
"numberStep": "இந்த எண் {0} இன் மடங்காக இருக்க வேண்டும்!",
|
||||
"numberStepOffset": "இந்த எண் {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} ஐடி! நீங்கள் இவற்றில் ஒன்றை பயன்படுத்தலாம்: {1}!",
|
||||
"discordInvalidToken": "இது தவறான டிஸ்கார்டு டோக்கன் (இலக்கணப்படி)!",
|
||||
"colorInvalid": "இது தவறான ஹெக்ஸ் நிறம்!",
|
||||
"emojiTooShort": "இந்த சரத்தில் குறைந்தது {0} எமோஜிகள் இருக்க வேண்டும்!",
|
||||
"emojiTooLong": "இந்த சரத்தில் அதிகபட்சம் {0} எமோஜிகள் இருக்க வேண்டும்!",
|
||||
"emojiCustom": "இந்த எமோஜி தனிப்பயன் டிஸ்கார்டு எமோஜியாக இருக்க முடியாது!",
|
||||
"emojiInvalid": "இது தவறான எமோஜி!",
|
||||
"urlInvalid": "இந்த URL தவறானது!",
|
||||
"urlInvalidHttp":"This url can only use the https:// protocol!",
|
||||
"urlInvalidProtocol":"This url can only use the http:// & https:// protocols!",
|
||||
"urlInvalidHostname": "இந்த URL இல் அனுமதிக்கப்படாத ஹோஸ்ட்பெயர் உள்ளது!",
|
||||
"urlInvalidExtension": "இந்த URL இல் தவறான நீட்சி உள்ளது! இவற்றுக்கு இடையே தேர்வு செய்யவும்: {0}!",
|
||||
"urlInvalidPath": "இந்த URL இல் தவறான பாதை உள்ளது!",
|
||||
"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": "`<பெயர்>` => தேவையான அளவுரு\n`[பெயர்]` => விருப்ப அளவுரு",
|
||||
"statsReset": "போட் புள்ளிவிவரங்கள் வெற்றிகரமாக மீட்டமைக்கப்பட்டது!",
|
||||
"statsError": "டிக்கெட் புள்ளிவிவரங்களை பார்க்க முடியவில்லை!\n{0} ஒரு டிக்கெட் அல்ல!",
|
||||
"blacklistAdd": "{0} வெற்றிகரமாக பிளாக்லிஸ்ட் செய்யப்பட்டது!",
|
||||
"blacklistRemove": "{0} வெற்றிகரமாக விடுவிக்கப்பட்டது!",
|
||||
"blacklistGetSuccess": "{0} தற்போது பிளாக்லிஸ்ட் செய்யப்பட்டுள்ளது!",
|
||||
"blacklistGetEmpty": "{0} தற்போது பிளாக்லிஸ்ட் செய்யப்படவில்லை!",
|
||||
"blacklistViewEmpty": "இன்னும் யாரும் பிளாக்லிஸ்ட் செய்யப்படவில்லை!",
|
||||
"blacklistViewTip": "பயனரை பிளாக்லிஸ்ட் செய்ய \"/blacklist add\" பயன்படுத்தவும்!",
|
||||
"clearVerify": "நீங்கள் பல டிக்கெட்டுகளை நீக்க விரும்புகிறீர்களா?\nஇந்த செயலை திரும்ப பெற முடியாது!",
|
||||
"clearReady": "{0} டிக்கெட்டுகள் வெற்றிகரமாக நீக்கப்பட்டது!",
|
||||
"rolesEmpty": "எந்த பங்குகளும் புதுப்பிக்கப்படவில்லை!",
|
||||
|
||||
"autocloseLeave": "டிக்கெட் உருவாக்கியவர் சேர்வை விட்டு வெளியேறியதால் இந்த டிக்கெட் தானாக மூடப்பட்டது!",
|
||||
"autocloseTimeout": "இந்த டிக்கெட் `{0} மணி நேரத்திற்கு` செயலற்று இருந்ததால் தானாக மூடப்பட்டது!",
|
||||
"autodeleteLeave": "டிக்கெட் உருவாக்கியவர் சேர்வை விட்டு வெளியேறியதால் இந்த டிக்கெட் தானாக நீக்கப்பட்டது!",
|
||||
"autodeleteTimeout": "இந்த டிக்கெட் `{0} நாட்களுக்கு` செயலற்று இருந்ததால் தானாக நீக்கப்பட்டது!",
|
||||
"autocloseEnabled": "இந்த டிக்கெட்டில் தானாக மூடுதல் இயக்கப்பட்டது!\nஇது `{0} மணி நேரத்திற்கு` செயலற்று இருந்தால் மூடப்படும்!",
|
||||
"autocloseDisabled": "இந்த டிக்கெட்டில் தானாக மூடுதல் முடக்கப்பட்டது!\nஇது இனி தானாக மூடப்படாது!",
|
||||
"autodeleteEnabled": "இந்த டிக்கெட்டில் தானாக நீக்குதல் இயக்கப்பட்டது!\nஇது `{0} நாட்களுக்கு` செயலற்று இருந்தால் நீக்கப்படும்!",
|
||||
"autodeleteDisabled": "இந்த டிக்கெட்டில் தானாக நீக்குதல் முடக்கப்பட்டது!\nஇது இனி தானாக நீக்கப்படாது!",
|
||||
|
||||
"ticketMessageLimit": "நீங்கள் ஒரே நேரத்தில் {0} டிக்கெட்டுகளை மட்டுமே உருவாக்க முடியும்!",
|
||||
"ticketMessageAutoclose": "இந்த டிக்கெட் {0} மணி நேரம் செயலற்று இருந்தால் தானாக மூடப்படும்!",
|
||||
"ticketMessageAutodelete": "இந்த டிக்கெட் {0} நாட்கள் செயலற்று இருந்தால் தானாக நீக்கப்படும்!",
|
||||
"panelReady": "கீழே பேனலை காணலாம்!\nஇந்த செய்தியை இப்போது நீக்கலாம்!"
|
||||
},
|
||||
"modal": {
|
||||
"closePlaceholder": "இந்த டிக்கெட்டை ஏன் மூடினீர்கள்?",
|
||||
"deletePlaceholder": "இந்த டிக்கெட்டை ஏன் நீக்கினீர்கள்?",
|
||||
"reopenPlaceholder": "இந்த டிக்கெட்டை ஏன் மீண்டும் திறந்தீர்கள்?",
|
||||
"claimPlaceholder": "இந்த டிக்கெட்டை ஏன் கிளெய்ம் செய்தீர்கள்?",
|
||||
"unclaimPlaceholder": "இந்த டிக்கெட்டை ஏன் அன்கிளெய்ம் செய்தீர்கள்?",
|
||||
"pinPlaceholder": "இந்த டிக்கெட்டை ஏன் பின் செய்தீர்கள்?",
|
||||
"unpinPlaceholder": "இந்த டிக்கெட்டை ஏன் அன்பின் செய்தீர்கள்?"
|
||||
},
|
||||
"logs": {
|
||||
"createLog": "{0} என்பவரால் புதிய டிக்கெட் உருவாக்கப்பட்டது!",
|
||||
"closeLog": "{0} என்பவரால் இந்த டிக்கெட் மூடப்பட்டது!",
|
||||
"closeDm": "உங்கள் டிக்கெட் எங்கள் சேர்வில் மூடப்பட்டது!",
|
||||
"deleteLog": "{0} என்பவரால் இந்த டிக்கெட் நீக்கப்பட்டது!",
|
||||
"deleteDm": "உங்கள் டிக்கெட் எங்கள் சேர்வில் நீக்கப்பட்டது!",
|
||||
"reopenLog": "{0} என்பவரால் இந்த டிக்கெட் மீண்டும் திறக்கப்பட்டது!",
|
||||
"reopenDm": "உங்கள் டிக்கெட் எங்கள் சேர்வில் மீண்டும் திறக்கப்பட்டது!",
|
||||
"claimLog": "{0} என்பவரால் இந்த டிக்கெட் கிளெய்ம் செய்யப்பட்டது!",
|
||||
"claimDm": "உங்கள் டிக்கெட் எங்கள் சேர்வில் கிளெய்ம் செய்யப்பட்டது!",
|
||||
"unclaimLog": "{0} என்பவரால் இந்த டிக்கெட் அன்கிளெய்ம் செய்யப்பட்டது!",
|
||||
"unclaimDm": "உங்கள் டிக்கெட் எங்கள் சேர்வில் அன்கிளெய்ம் செய்யப்பட்டது!",
|
||||
"pinLog": "{0} என்பவரால் இந்த டிக்கெட் பின் செய்யப்பட்டது!",
|
||||
"pinDm": "உங்கள் டிக்கெட் எங்கள் சேர்வில் பின் செய்யப்பட்டது!",
|
||||
"unpinLog": "{0} என்பவரால் இந்த டிக்கெட் அன்பின் செய்யப்பட்டது!",
|
||||
"unpinDm": "உங்கள் டிக்கெட் எங்கள் சேர்வில் அன்பின் செய்யப்பட்டது!",
|
||||
"renameLog": "{1} என்பவரால் இந்த டிக்கெட்டின் பெயர் {0} ஆக மாற்றப்பட்டது!",
|
||||
"renameDm": "உங்கள் டிக்கெட்டின் பெயர் எங்கள் சேர்வில் {0} ஆக மாற்றப்பட்டது!",
|
||||
"moveLog": "{1} என்பவரால் இந்த டிக்கெட் {0} க்கு நகர்த்தப்பட்டது!",
|
||||
"moveDm": "உங்கள் டிக்கெட் எங்கள் சேர்வில் {0} க்கு நகர்த்தப்பட்டது!",
|
||||
"addLog": "{1} என்பவரால் {0} இந்த டிக்கெட்டில் சேர்க்கப்பட்டது!",
|
||||
"addDm": "{0} உங்கள் டிக்கெட்டில் எங்கள் சேர்வில் சேர்க்கப்பட்டது!",
|
||||
"removeLog": "{1} என்பவரால் {0} இந்த டிக்கெட்டில் இருந்து நீக்கப்பட்டது!",
|
||||
"removeDm": "{0} உங்கள் டிக்கெட்டில் இருந்து எங்கள் சேர்வில் நீக்கப்பட்டது!",
|
||||
|
||||
"blacklistAddLog": "{0} {1} என்பவரால் பிளாக்லிஸ்ட் செய்யப்பட்டது!",
|
||||
"blacklistRemoveLog": "{0} {1} என்பவரால் பிளாக்லிஸ்டில் இருந்து நீக்கப்பட்டது!",
|
||||
"blacklistAddDm": "நீங்கள் எங்கள் சேர்வில் பிளாக்லிஸ்ட் செய்யப்பட்டுள்ளீர்கள்!\nஇனி நீங்கள் டிக்கெட் உருவாக்க முடியாது!",
|
||||
"blacklistRemoveDm": "நீங்கள் எங்கள் சேர்வில் பிளாக்லிஸ்டில் இருந்து நீக்கப்பட்டுள்ளீர்கள்!\nஇப்போது நீங்கள் மீண்டும் டிக்கெட் உருவாக்கலாம்!",
|
||||
"clearLog": "{1} என்பவரால் {0} டிக்கெட்டுகள் நீக்கப்பட்டது!"
|
||||
}
|
||||
},
|
||||
"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": "தற்போதைய சேனல் ஒரு சரியான டிக்கெட் அல்ல! இது பழைய ஓபன் டிக்கெட் பதிப்பிலிருந்து ஒரு டிக்கெட் ஆக இருக்கலாம்!",
|
||||
"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": "சேவையில் ஒரு பயனரின் புள்ளிவிவரங்களைப் பார்க்கவும்.",
|
||||
"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": "பதிவுகள் உருவாக்கப்பட்டன"
|
||||
}
|
||||
}
|
||||
}
|
||||
+534
-404
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION": {
|
||||
"otversion": "v4.0.2",
|
||||
"otversion": "v4.1.0",
|
||||
"translators": ["palestinian"],
|
||||
"lastedited": "26/11/2024",
|
||||
"language": "Turkish",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["Anderskiy"],
|
||||
"lastedited":"31/08/2024",
|
||||
"language":"Ukrainian",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"_TRANSLATION":{
|
||||
"otversion":"v4.0.2",
|
||||
"otversion":"v4.1.0",
|
||||
"translators":["ngocdiep2006"],
|
||||
"lastedited":"07/04/2025",
|
||||
"language":"Vietnamese",
|
||||
|
||||
+12
-7
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "open-ticket",
|
||||
"author": "DJdj Development",
|
||||
"version": "4.0.2",
|
||||
"version": "4.1.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",
|
||||
@@ -14,19 +14,24 @@
|
||||
"scripts": {
|
||||
"build": "node index.js --compile-only",
|
||||
"start": "node index.js",
|
||||
"setup": "node index.js --cli",
|
||||
"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"
|
||||
"test": "node index.js --dev-config --dev-database --soft-plugins",
|
||||
"testsetup": "node index.js --cli --dev-config --dev-database --soft-plugins",
|
||||
"testnc": "node index.js --no-compile --dev-config --dev-database --soft-plugins",
|
||||
"docs": "npx typedoc --options .docs/typedoc-config.json && node .docs/createDocs.js",
|
||||
"mergelang": "node .docs/mergeTranslations.js"
|
||||
},
|
||||
"type": "commonjs",
|
||||
"license": "GPL-3.0-only",
|
||||
"dependencies": {
|
||||
"@discordjs/rest": "^2.4.2",
|
||||
"@types/node": "^22.5.0",
|
||||
"@types/terminal-kit": "^2.5.7",
|
||||
"ansis": "^2.3.0",
|
||||
"discord.js": "^14.17.2",
|
||||
"formatted-json-stringify": "^1.1.0",
|
||||
"discord.js": "^14.22.1",
|
||||
"formatted-json-stringify": "^1.2.1",
|
||||
"terminal-kit": "^3.1.2",
|
||||
"typescript": "^5.5.4"
|
||||
},
|
||||
"repository": {
|
||||
@@ -42,7 +47,7 @@
|
||||
"#opendiscord": "./dist/src/index.js",
|
||||
"#opendiscord-types": "./dist/src/core/api/api.js"
|
||||
},
|
||||
"funding":{
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/DJj123dj"
|
||||
}
|
||||
|
||||
@@ -54,6 +54,9 @@ export const registerActions = async () => {
|
||||
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])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,reason,data} = params
|
||||
|
||||
@@ -65,6 +65,9 @@ export const registerActions = async () => {
|
||||
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])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,reason} = params
|
||||
|
||||
@@ -5,6 +5,7 @@ import {opendiscord, api, utilities} from "../index"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||
const lang = opendiscord.languages
|
||||
|
||||
export const registerActions = async () => {
|
||||
opendiscord.actions.add(new api.ODAction("opendiscord:close-ticket"))
|
||||
@@ -17,10 +18,15 @@ export const registerActions = async () => {
|
||||
|
||||
//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:reopened").value = false
|
||||
ticket.get("opendiscord:reopened-by").value = null
|
||||
ticket.get("opendiscord:reopened-on").value = null
|
||||
|
||||
if (source == "autoclose") ticket.get("opendiscord:autoclosed").value = true
|
||||
ticket.get("opendiscord:open").value = false
|
||||
ticket.get("opendiscord:busy").value = true
|
||||
|
||||
//update stats
|
||||
@@ -123,6 +129,9 @@ export const registerActions = async () => {
|
||||
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])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,reason} = params
|
||||
@@ -206,7 +215,7 @@ export const registerVerifyBars = async () => {
|
||||
}
|
||||
//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"}))
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:lang.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
|
||||
return cancel()
|
||||
}
|
||||
//return when busy
|
||||
@@ -214,6 +223,18 @@ export const registerVerifyBars = async () => {
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||
return cancel()
|
||||
}
|
||||
//return when not allowed because of missing messages
|
||||
if (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage){
|
||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
}
|
||||
|
||||
//start closing ticket
|
||||
if (params.data == "reason"){
|
||||
@@ -293,7 +314,7 @@ export const registerVerifyBars = async () => {
|
||||
}
|
||||
//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"}))
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:lang.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
|
||||
return cancel()
|
||||
}
|
||||
//return when busy
|
||||
@@ -301,6 +322,18 @@ export const registerVerifyBars = async () => {
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||
return cancel()
|
||||
}
|
||||
//return when not allowed because of missing messages
|
||||
if (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage){
|
||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
}
|
||||
|
||||
//start closing ticket
|
||||
if (params.data == "reason"){
|
||||
|
||||
+48
-20
@@ -5,6 +5,7 @@ import {opendiscord, api, utilities} from "../index"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||
const lang = opendiscord.languages
|
||||
|
||||
export const registerActions = async () => {
|
||||
opendiscord.actions.add(new api.ODAction("opendiscord:create-ticket"))
|
||||
@@ -19,8 +20,8 @@ export const registerActions = async () => {
|
||||
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 channelTopicText = option.get("opendiscord:channel-topic").value
|
||||
const channelSuffix = await opendiscord.options.suffix.getSuffixFromOption(option,user,guild)
|
||||
const channelName = channelPrefix+channelSuffix
|
||||
|
||||
//handle category
|
||||
@@ -73,7 +74,7 @@ export const registerActions = async () => {
|
||||
permissions.push({
|
||||
type:discord.OverwriteType.Role,
|
||||
id:admin,
|
||||
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
|
||||
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages","PinMessages","EmbedLinks"],
|
||||
deny:[]
|
||||
})
|
||||
})
|
||||
@@ -82,7 +83,7 @@ export const registerActions = async () => {
|
||||
permissions.push({
|
||||
type:discord.OverwriteType.Role,
|
||||
id:admin,
|
||||
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
|
||||
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages","PinMessages","EmbedLinks"],
|
||||
deny:[]
|
||||
})
|
||||
})
|
||||
@@ -93,29 +94,16 @@ export const registerActions = async () => {
|
||||
type:discord.OverwriteType.Role,
|
||||
id:admin,
|
||||
allow:["ViewChannel","ReadMessageHistory"],
|
||||
deny:["SendMessages","AddReactions","AttachFiles","SendPolls"]
|
||||
deny:["SendMessages","AddReactions","AttachFiles","SendPolls","PinMessages"]
|
||||
})
|
||||
})
|
||||
permissions.push({
|
||||
type:discord.OverwriteType.Member,
|
||||
id:user.id,
|
||||
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory"],
|
||||
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","EmbedLinks","PinMessages"],
|
||||
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) => {
|
||||
@@ -125,12 +113,42 @@ export const registerActions = async () => {
|
||||
participants.push({type,id})
|
||||
})
|
||||
|
||||
//manage slowmode
|
||||
const slowMode = option.get("opendiscord:slowmode-enabled").value ? option.get("opendiscord:slowmode-seconds").value : undefined
|
||||
|
||||
//handle channel topic
|
||||
const channelTopics: string[] = []
|
||||
if (generalConfig.data.system.channelTopic.showOptionName) channelTopics.push(option.get("opendiscord:name").value)
|
||||
if (generalConfig.data.system.channelTopic.showOptionDescription) channelTopics.push(option.get("opendiscord:description").value)
|
||||
if (generalConfig.data.system.channelTopic.showOptionTopic) channelTopics.push(channelTopicText)
|
||||
if (generalConfig.data.system.channelTopic.showPriority) channelTopics.push("**"+lang.getTranslation("params.uppercase.priority")+":** "+opendiscord.priorities.get("opendiscord:none").renderDisplayName())
|
||||
if (generalConfig.data.system.channelTopic.showClosed) channelTopics.push("**"+lang.getTranslation("params.uppercase.status")+":** "+lang.getTranslation("params.uppercase.open"))
|
||||
if (generalConfig.data.system.channelTopic.showClaimed) channelTopics.push("**"+lang.getTranslation("stats.properties.claimedBy")+":** "+lang.getTranslation("params.uppercase.noone"))
|
||||
if (generalConfig.data.system.channelTopic.showPinned) channelTopics.push("**"+lang.getTranslation("params.uppercase.pinned")+":** "+lang.getTranslation("params.uppercase.no"))
|
||||
if (generalConfig.data.system.channelTopic.showCreator) channelTopics.push("**"+lang.getTranslation("params.uppercase.creator")+":** "+discord.userMention(user.id))
|
||||
if (generalConfig.data.system.channelTopic.showParticipants) channelTopics.push("**"+lang.getTranslation("params.uppercase.participants")+":** "+participants.map((p) => (p.type == "user") ? discord.userMention(p.id) : discord.roleMention(p.id)).join(", "))
|
||||
|
||||
//create channel
|
||||
const channel = await guild.channels.create({
|
||||
type:discord.ChannelType.GuildText,
|
||||
name:channelName,
|
||||
nsfw:false,
|
||||
topic:(channelTopics.length > 0) ? channelTopics.join(" • ") : undefined,
|
||||
parent:category,
|
||||
reason:"Ticket Created By "+user.displayName,
|
||||
permissionOverwrites:permissions,
|
||||
rateLimitPerUser:slowMode
|
||||
})
|
||||
|
||||
await opendiscord.events.get("afterTicketChannelCreated").emit([option,channel,user])
|
||||
|
||||
//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:previous-creators",[]),
|
||||
|
||||
new api.ODTicketData("opendiscord:open",true),
|
||||
new api.ODTicketData("opendiscord:opened-by",user.id),
|
||||
@@ -138,6 +156,9 @@ export const registerActions = async () => {
|
||||
new api.ODTicketData("opendiscord:closed",false),
|
||||
new api.ODTicketData("opendiscord:closed-by",null),
|
||||
new api.ODTicketData("opendiscord:closed-on",null),
|
||||
new api.ODTicketData("opendiscord:reopened",false),
|
||||
new api.ODTicketData("opendiscord:reopened-by",null),
|
||||
new api.ODTicketData("opendiscord:reopened-on",null),
|
||||
new api.ODTicketData("opendiscord:claimed",false),
|
||||
new api.ODTicketData("opendiscord:claimed-by",null),
|
||||
new api.ODTicketData("opendiscord:claimed-on",null),
|
||||
@@ -155,7 +176,11 @@ export const registerActions = async () => {
|
||||
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)
|
||||
new api.ODTicketData("opendiscord:answers",answers),
|
||||
new api.ODTicketData("opendiscord:priority",-1),
|
||||
new api.ODTicketData("opendiscord:topic",option.get("opendiscord:channel-topic").value),
|
||||
new api.ODTicketData("opendiscord:message-sent",false),
|
||||
new api.ODTicketData("opendiscord:admin-message-sent",false),
|
||||
])
|
||||
|
||||
//manage stats
|
||||
@@ -186,6 +211,9 @@ export const registerActions = async () => {
|
||||
|
||||
ticket.get("opendiscord:ticket-message").value = msg.id
|
||||
|
||||
//pin ticket message (if required)
|
||||
if (generalConfig.data.system.pinFirstTicketMessage && msg.pinnable) await msg.pin("Ticket Message")
|
||||
|
||||
//manage stats
|
||||
await opendiscord.stats.get("opendiscord:ticket").setStat("opendiscord:messages-sent",ticket.id.value,1,"increase")
|
||||
|
||||
|
||||
@@ -38,7 +38,9 @@ export const registerActions = async () => {
|
||||
await opendiscord.events.get("onTranscriptInit").emit([opendiscord.transcripts,ticket,channel,user])
|
||||
if (instance.compiler.init){
|
||||
try{
|
||||
instance.initData = null
|
||||
const result = await instance.compiler.init(ticket,channel,user)
|
||||
instance.initData = result.initData
|
||||
if (result.success && result.pendingMessage && transcriptConfig.data.general.enableChannel){
|
||||
//send init message to channel
|
||||
const post = opendiscord.posts.get("opendiscord:transcripts")
|
||||
@@ -49,7 +51,9 @@ export const registerActions = async () => {
|
||||
instance.pendingMessage = null
|
||||
instance.errorReason = result.errorReason
|
||||
throw new api.ODSystemError("ODAction(ot:create-transcript) => Known Init Error => "+result.errorReason)
|
||||
}else instance.pendingMessage = null
|
||||
}else{
|
||||
instance.pendingMessage = null
|
||||
}
|
||||
}catch(err){
|
||||
instance.success = false
|
||||
cancel()
|
||||
@@ -72,7 +76,7 @@ export const registerActions = async () => {
|
||||
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)
|
||||
const result = await instance.compiler.compile(ticket,channel,user,instance.initData)
|
||||
if (!result.success){
|
||||
instance.errorReason = result.errorReason
|
||||
throw new api.ODSystemError("ODAction(ot:create-transcript) => Known Compiler Error => "+result.errorReason)
|
||||
|
||||
@@ -5,6 +5,7 @@ import {opendiscord, api, utilities} from "../index"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||
const lang = opendiscord.languages
|
||||
|
||||
export const registerActions = async () => {
|
||||
opendiscord.actions.add(new api.ODAction("opendiscord:delete-ticket"))
|
||||
@@ -121,6 +122,14 @@ export const registerVerifyBars = async () => {
|
||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||
const permissionMode = generalConfig.data.system.permissions.delete
|
||||
|
||||
//don't allow deleteWithoutTranscript to non-global-admins when enabled
|
||||
if (params.data == "no-transcript" && generalConfig.data.system.adminOnlyDeleteWithoutTranscript){
|
||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild,{allowChannelRoleScope:false,allowChannelUserScope:false,allowGlobalRoleScope:true,allowGlobalUserScope:true}))){
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
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:[]}))
|
||||
@@ -167,6 +176,18 @@ export const registerVerifyBars = async () => {
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||
return cancel()
|
||||
}
|
||||
//return when not allowed because of missing messages
|
||||
if (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage){
|
||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
}
|
||||
|
||||
//start deleting ticket
|
||||
if (params.data == "reason"){
|
||||
@@ -206,6 +227,14 @@ export const registerVerifyBars = async () => {
|
||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||
const permissionMode = generalConfig.data.system.permissions.delete
|
||||
|
||||
//don't allow deleteWithoutTranscript to non-global-admins when enabled
|
||||
if (params.data == "no-transcript" && generalConfig.data.system.adminOnlyDeleteWithoutTranscript){
|
||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild,{allowChannelRoleScope:false,allowChannelUserScope:false,allowGlobalRoleScope:true,allowGlobalUserScope:true}))){
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
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:[]}))
|
||||
@@ -252,6 +281,18 @@ export const registerVerifyBars = async () => {
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||
return cancel()
|
||||
}
|
||||
//return when not allowed because of missing messages
|
||||
if (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage){
|
||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
}
|
||||
|
||||
//start deleting ticket
|
||||
if (params.data == "reason"){
|
||||
@@ -295,6 +336,14 @@ export const registerVerifyBars = async () => {
|
||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||
const permissionMode = generalConfig.data.system.permissions.delete
|
||||
|
||||
//don't allow deleteWithoutTranscript to non-global-admins when enabled
|
||||
if (params.data == "no-transcript" && generalConfig.data.system.adminOnlyDeleteWithoutTranscript){
|
||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild,{allowChannelRoleScope:false,allowChannelUserScope:false,allowGlobalRoleScope:true,allowGlobalUserScope:true}))){
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
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:[]}))
|
||||
@@ -341,6 +390,18 @@ export const registerVerifyBars = async () => {
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||
return cancel()
|
||||
}
|
||||
//return when not allowed because of missing messages
|
||||
if (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage){
|
||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
}
|
||||
|
||||
//start deleting ticket
|
||||
if (params.data == "reason"){
|
||||
@@ -384,6 +445,14 @@ export const registerVerifyBars = async () => {
|
||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||
const permissionMode = generalConfig.data.system.permissions.delete
|
||||
|
||||
//don't allow deleteWithoutTranscript to non-global-admins when enabled
|
||||
if (params.data == "no-transcript" && generalConfig.data.system.adminOnlyDeleteWithoutTranscript){
|
||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild,{allowChannelRoleScope:false,allowChannelUserScope:false,allowGlobalRoleScope:true,allowGlobalUserScope:true}))){
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
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:[]}))
|
||||
@@ -430,6 +499,18 @@ export const registerVerifyBars = async () => {
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||
return cancel()
|
||||
}
|
||||
//return when not allowed because of missing messages
|
||||
if (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage){
|
||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
}
|
||||
|
||||
//start deleting ticket
|
||||
if (params.data == "reason"){
|
||||
|
||||
@@ -28,8 +28,7 @@ export const registerActions = async () => {
|
||||
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
|
||||
const channelTopic = ticket.option.get("opendiscord:channel-topic").value
|
||||
|
||||
//handle category
|
||||
let category: string|null = null
|
||||
@@ -155,17 +154,18 @@ export const registerActions = async () => {
|
||||
ticket.get("opendiscord:participants").refreshDatabase()
|
||||
|
||||
//rename channel (and give error when crashed)
|
||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
||||
const priorityEmoji = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? ""
|
||||
|
||||
const originalName = channel.name
|
||||
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(channelPrefix+channelSuffix)
|
||||
try{
|
||||
await utilities.timedAwait(channel.setName(channelName),2500,(err) => {
|
||||
await utilities.timedAwait(channel.setName(newName),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)
|
||||
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-move",{guild,channel,user,originalName,newName:newName})).message)
|
||||
}
|
||||
try{
|
||||
if (channel.type == discord.ChannelType.GuildText) channel.setTopic(channelDescription)
|
||||
}catch{}
|
||||
|
||||
//update ticket message
|
||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||
@@ -173,7 +173,7 @@ export const registerActions = async () => {
|
||||
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",[
|
||||
opendiscord.log("Unable to edit ticket message on ticket moving!","error",[
|
||||
{key:"channel",value:"#"+channel.name},
|
||||
{key:"channelid",value:channel.id,hidden:true},
|
||||
{key:"messageid",value:ticketMessage.id},
|
||||
@@ -187,6 +187,9 @@ export const registerActions = async () => {
|
||||
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])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,reason,data} = params
|
||||
|
||||
@@ -31,8 +31,11 @@ export const registerActions = async () => {
|
||||
}
|
||||
|
||||
//rename channel (and give error when crashed)
|
||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
||||
const priorityEmoji = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? ""
|
||||
|
||||
const originalName = channel.name
|
||||
const newName = "📌"+channel.name
|
||||
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(channel.name)
|
||||
try{
|
||||
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||
opendiscord.log("Failed to rename channel on ticket pin","error")
|
||||
@@ -61,6 +64,9 @@ export const registerActions = async () => {
|
||||
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])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,reason} = params
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
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:reaction-role"))
|
||||
opendiscord.actions.get("opendiscord:reaction-role").workers.add([
|
||||
@@ -81,6 +83,19 @@ export const registerActions = async () => {
|
||||
instance.result = result
|
||||
await opendiscord.events.get("afterRolesUpdated").emit([user,role])
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,user,option,overwriteMode} = params
|
||||
if (!instance.role || !instance.result) return
|
||||
|
||||
//to logs
|
||||
if (generalConfig.data.system.logs.enabled && (generalConfig.data.system.messages.reactionRole.logs)){
|
||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:reaction-role-logs").build(source,{guild,user,role:instance.role,result:instance.result}))
|
||||
}
|
||||
|
||||
//to dm
|
||||
if (generalConfig.data.system.messages.reactionRole.dm) await opendiscord.client.sendUserDm(user,await opendiscord.builders.messages.getSafe("opendiscord:reaction-role-dm").build(source,{guild,user,role:instance.role,result:instance.result}))
|
||||
}),
|
||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||
const {guild,user,option} = params
|
||||
opendiscord.log(user.displayName+" updated his roles!","info",[
|
||||
|
||||
@@ -48,6 +48,9 @@ export const registerActions = async () => {
|
||||
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])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,reason,data} = params
|
||||
|
||||
@@ -16,9 +16,13 @@ export const registerActions = async () => {
|
||||
await opendiscord.events.get("onTicketRename").emit([ticket,user,channel,reason])
|
||||
|
||||
//rename channel (and give error when crashed)
|
||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
||||
const priorityEmoji = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? ""
|
||||
|
||||
const originalName = channel.name
|
||||
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(data)
|
||||
try{
|
||||
await utilities.timedAwait(channel.setName(data),2500,(err) => {
|
||||
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||
opendiscord.log("Failed to rename channel on ticket rename","error")
|
||||
})
|
||||
}catch(err){
|
||||
@@ -45,6 +49,9 @@ export const registerActions = async () => {
|
||||
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])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,reason,data} = params
|
||||
|
||||
@@ -16,13 +16,24 @@ export const registerActions = async () => {
|
||||
await opendiscord.events.get("onTicketReopen").emit([ticket,user,channel,reason])
|
||||
|
||||
//update ticket
|
||||
ticket.get("opendiscord:reopened").value = true
|
||||
ticket.get("opendiscord:reopened-by").value = user.id
|
||||
ticket.get("opendiscord:reopened-on").value = new Date().getTime()
|
||||
|
||||
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:autoclosed").value = false
|
||||
ticket.get("opendiscord:open").value = true
|
||||
ticket.get("opendiscord:busy").value = true
|
||||
|
||||
if (generalConfig.data.system.disableAutocloseAfterReopen){
|
||||
//disable autoclose after reopen
|
||||
ticket.get("opendiscord:autoclose-enabled").value = false
|
||||
ticket.get("opendiscord:autoclose-hours").value = 0
|
||||
}
|
||||
|
||||
//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")
|
||||
@@ -149,6 +160,9 @@ export const registerActions = async () => {
|
||||
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])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,reason} = params
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
///////////////////////////////////////
|
||||
//TICKET TRANSFER 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:transfer-ticket"))
|
||||
opendiscord.actions.get("opendiscord:transfer-ticket").workers.add([
|
||||
new api.ODWorker("opendiscord:transfer-ticket",2,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,reason,newCreator} = params
|
||||
if (channel.isThread()) throw new api.ODSystemError("Unable to transfer ticket! Open Ticket doesn't support threads!")
|
||||
|
||||
const oldCreator = await opendiscord.tickets.getTicketUser(ticket,"creator") ?? opendiscord.client.client.user
|
||||
await opendiscord.events.get("onTicketTransfer").emit([ticket,user,channel,oldCreator,newCreator,reason])
|
||||
|
||||
//update ticket
|
||||
const oldCreatorId = ticket.get("opendiscord:opened-by").value
|
||||
if (oldCreatorId){
|
||||
ticket.get("opendiscord:previous-creators").value.push(oldCreatorId)
|
||||
ticket.get("opendiscord:previous-creators").refreshDatabase()
|
||||
}
|
||||
if (!ticket.get("opendiscord:participants").value.find((p) => p.type == "user" && p.id == newCreator.id)){
|
||||
ticket.get("opendiscord:participants").value.push({type:"user",id:newCreator.id})
|
||||
ticket.get("opendiscord:participants").refreshDatabase()
|
||||
}
|
||||
ticket.get("opendiscord:opened-by").value = newCreator.id
|
||||
if (["user-name","user-nickname","user-id"].includes(ticket.option.get("opendiscord:channel-suffix").value)){
|
||||
const newSuffix = await opendiscord.options.suffix.getSuffixFromOption(ticket.option,newCreator,guild)
|
||||
if (newSuffix) ticket.get("opendiscord:channel-suffix").value = newSuffix
|
||||
}
|
||||
|
||||
//update stats
|
||||
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-transferred",1,"increase")
|
||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-transferred",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
|
||||
|
||||
//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 transfer!","error")
|
||||
}
|
||||
|
||||
//rename channel (and give error when crashed)
|
||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
||||
const priorityEmoji = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? ""
|
||||
|
||||
const originalName = channel.name
|
||||
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(channelPrefix+channelSuffix)
|
||||
try{
|
||||
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||
opendiscord.log("Failed to rename channel on ticket transfer","error")
|
||||
})
|
||||
}catch(err){
|
||||
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-transfer",{guild,channel,user,originalName,newName: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 transferring!","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:transfer-message").build(source,{guild,channel,user,ticket,oldCreator,newCreator,reason})).message)
|
||||
ticket.get("opendiscord:busy").value = false
|
||||
await opendiscord.events.get("afterTicketTransferred").emit([ticket,user,channel,oldCreator,newCreator,reason])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,newCreator,reason} = params
|
||||
}),
|
||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,newCreator} = params
|
||||
|
||||
opendiscord.log(user.displayName+" transferred a ticket to '"+newCreator.displayName+"'!","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:transfer-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,6 +94,9 @@ export const registerActions = async () => {
|
||||
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])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,reason} = params
|
||||
|
||||
@@ -22,16 +22,17 @@ export const registerActions = async () => {
|
||||
ticket.get("opendiscord:busy").value = true
|
||||
|
||||
//rename channel (and give error when crashed)
|
||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
||||
const priorityEmoji = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? ""
|
||||
|
||||
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)
|
||||
}
|
||||
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(channel.name)
|
||||
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
|
||||
@@ -54,6 +55,9 @@ export const registerActions = async () => {
|
||||
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])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,reason} = params
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
///////////////////////////////////////
|
||||
//TICKET TOPIC 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:update-ticket-priority"))
|
||||
opendiscord.actions.get("opendiscord:update-ticket-priority").workers.add([
|
||||
new api.ODWorker("opendiscord:update-ticket-priority",2,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,newPriority,reason} = params
|
||||
if (channel.isThread() || !(channel instanceof discord.TextChannel)) throw new api.ODSystemError("Unable to set priority of ticket! Open Ticket doesn't support threads!")
|
||||
|
||||
const oldPriority = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value)
|
||||
await opendiscord.events.get("onTicketPriorityChange").emit([ticket,user,channel,oldPriority,newPriority,reason])
|
||||
|
||||
//update ticket
|
||||
ticket.get("opendiscord:busy").value = true
|
||||
if (newPriority) ticket.get("opendiscord:priority").value = newPriority.priority
|
||||
|
||||
//rename channel (and give error when crashed)
|
||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
||||
const priorityEmoji = newPriority.channelEmoji ?? ""
|
||||
|
||||
const originalName = channel.name
|
||||
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(channel.name)
|
||||
try{
|
||||
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||
opendiscord.log("Failed to rename channel on ticket priority update","error")
|
||||
})
|
||||
}catch(err){
|
||||
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-priority",{guild,channel,user,originalName,newName})).message)
|
||||
}
|
||||
|
||||
//reply with new message
|
||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:priority-set").build(source,{guild,channel,user,ticket,priority:newPriority,reason})).message)
|
||||
ticket.get("opendiscord:busy").value = false
|
||||
await opendiscord.events.get("afterTicketPriorityChanged").emit([ticket,user,channel,oldPriority,newPriority,reason])
|
||||
|
||||
//update channel topic
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket} = params
|
||||
}),
|
||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,newPriority} = params
|
||||
|
||||
opendiscord.log(user.displayName+" changed the priority of 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:"priority",value:newPriority.id.value},
|
||||
{key:"method",value:source}
|
||||
])
|
||||
})
|
||||
])
|
||||
opendiscord.actions.get("opendiscord:update-ticket-priority").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
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
///////////////////////////////////////
|
||||
//TICKET TOPIC SYSTEM
|
||||
///////////////////////////////////////
|
||||
import {opendiscord, api, utilities} from "../index"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||
const lang = opendiscord.languages
|
||||
|
||||
export const registerActions = async () => {
|
||||
opendiscord.actions.add(new api.ODAction("opendiscord:update-ticket-topic"))
|
||||
opendiscord.actions.get("opendiscord:update-ticket-topic").workers.add([
|
||||
new api.ODWorker("opendiscord:update-ticket-topic",2,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,newTopic} = params
|
||||
if (channel.isThread() || !(channel instanceof discord.TextChannel)) throw new api.ODSystemError("Unable to set topic of ticket! Open Ticket doesn't support threads!")
|
||||
|
||||
const oldTopic = ticket.get("opendiscord:topic").value
|
||||
if (newTopic) await opendiscord.events.get("onTicketTopicChange").emit([ticket,user,channel,oldTopic,newTopic])
|
||||
|
||||
//update ticket
|
||||
ticket.get("opendiscord:busy").value = true
|
||||
if (newTopic) ticket.get("opendiscord:topic").value = newTopic
|
||||
|
||||
//get ticket data
|
||||
const closed = ticket.get("opendiscord:closed").value
|
||||
const claimedBy = ticket.get("opendiscord:claimed-by").value
|
||||
const pinned = ticket.get("opendiscord:pinned").value
|
||||
const creator = ticket.get("opendiscord:opened-by").value ?? opendiscord.client.client.user.id
|
||||
|
||||
//handle channel topic
|
||||
const channelTopics: string[] = []
|
||||
if (generalConfig.data.system.channelTopic.showOptionName) channelTopics.push(ticket.option.get("opendiscord:name").value)
|
||||
if (generalConfig.data.system.channelTopic.showOptionDescription) channelTopics.push(ticket.option.get("opendiscord:description").value)
|
||||
if (generalConfig.data.system.channelTopic.showOptionTopic) channelTopics.push(ticket.get("opendiscord:topic").value)
|
||||
if (generalConfig.data.system.channelTopic.showPriority) channelTopics.push("**"+lang.getTranslation("params.uppercase.priority")+":** "+opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).renderDisplayName())
|
||||
if (generalConfig.data.system.channelTopic.showClosed) channelTopics.push("**"+lang.getTranslation("params.uppercase.status")+":** "+(closed ? lang.getTranslation("params.uppercase.closed") : lang.getTranslation("params.uppercase.open")))
|
||||
if (generalConfig.data.system.channelTopic.showClaimed) channelTopics.push("**"+lang.getTranslation("stats.properties.claimedBy")+":** "+(claimedBy ? discord.userMention(claimedBy) : lang.getTranslation("params.uppercase.noone")))
|
||||
if (generalConfig.data.system.channelTopic.showPinned) channelTopics.push("**"+lang.getTranslation("params.uppercase.pinned")+":** "+(pinned ? lang.getTranslation("params.uppercase.yes") : lang.getTranslation("params.uppercase.no")))
|
||||
if (generalConfig.data.system.channelTopic.showCreator) channelTopics.push("**"+lang.getTranslation("params.uppercase.creator")+":** "+discord.userMention(creator))
|
||||
if (generalConfig.data.system.channelTopic.showParticipants) channelTopics.push("**"+lang.getTranslation("params.uppercase.participants")+":** "+ticket.get("opendiscord:participants").value.map((p) => (p.type == "user") ? discord.userMention(p.id) : discord.roleMention(p.id)).join(", "))
|
||||
|
||||
//update channel
|
||||
channel.setTopic(channelTopics.join(" • "),"Topic Changed")
|
||||
|
||||
//reply with new message
|
||||
if (params.sendMessage && newTopic) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:topic-set").build(source,{guild,channel,user,ticket,topic:newTopic})).message)
|
||||
ticket.get("opendiscord:busy").value = false
|
||||
if (newTopic) await opendiscord.events.get("afterTicketTopicChanged").emit([ticket,user,channel,oldTopic,newTopic])
|
||||
}),
|
||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket} = params
|
||||
}),
|
||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||
const {guild,channel,user,ticket,newTopic} = params
|
||||
|
||||
if (newTopic) opendiscord.log(user.displayName+" changed the topic of 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:"topic",value:newTopic},
|
||||
{key:"method",value:source}
|
||||
])
|
||||
})
|
||||
])
|
||||
opendiscord.actions.get("opendiscord:update-ticket-topic").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,7 +277,7 @@ const ticketButtons = () => {
|
||||
instance.setMode("button")
|
||||
instance.setCustomId("od:pin-ticket_"+source)
|
||||
instance.setColor("gray")
|
||||
instance.setEmoji("📌")
|
||||
instance.setEmoji(generalConfig.data.system.pinEmoji)
|
||||
instance.setLabel(lang.getTranslation("actions.buttons.pin"))
|
||||
})
|
||||
)
|
||||
@@ -291,7 +291,7 @@ const ticketButtons = () => {
|
||||
instance.setMode("button")
|
||||
instance.setCustomId("od:unpin-ticket_"+source)
|
||||
instance.setColor("gray")
|
||||
instance.setEmoji("📌")
|
||||
instance.setEmoji(generalConfig.data.system.pinEmoji)
|
||||
instance.setLabel(lang.getTranslation("actions.buttons.unpin"))
|
||||
})
|
||||
)
|
||||
|
||||
+153
-38
@@ -20,6 +20,7 @@ export const registerAllEmbeds = async () => {
|
||||
roleEmbeds()
|
||||
clearEmbeds()
|
||||
autoEmbeds()
|
||||
extraEmbeds()
|
||||
}
|
||||
|
||||
/**Utility function to get the translated "method" from the source. Mostly used in error embeds. */
|
||||
@@ -37,12 +38,12 @@ const errorEmbeds = () => {
|
||||
embeds.add(new api.ODEmbed("opendiscord:error"))
|
||||
embeds.get("opendiscord:error").workers.add(
|
||||
new api.ODWorker("opendiscord:error",0,async (instance,params,source) => {
|
||||
const {user,error,layout} = params
|
||||
const {user,error,layout,customTitle} = params
|
||||
|
||||
const method = getMethodFromSource(source)
|
||||
|
||||
instance.setColor(generalConfig.data.system.useRedErrorEmbeds ? "Red" : generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("❌",lang.getTranslation("errors.titles.internalError")))
|
||||
instance.setTitle(utilities.emojiTitle("❌",customTitle ?? lang.getTranslation("errors.titles.internalError")))
|
||||
instance.setAuthor(user.displayName,user.displayAvatarURL())
|
||||
instance.setDescription(lang.getTranslationWithParams("errors.descriptions.internalError",[method]) + (layout == "simple") ? "\n"+error : "")
|
||||
if (layout == "advanced" && error) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+error+"```"})
|
||||
@@ -329,7 +330,7 @@ const errorEmbeds = () => {
|
||||
new api.ODWorker("opendiscord:error-channel-rename",0,async (instance,params,source) => {
|
||||
const {channel,user,originalName,newName} = params
|
||||
|
||||
const method = (source == "ticket-move" || source == "ticket-pin" || source == "ticket-rename" || source == "ticket-unpin") ? source : getMethodFromSource(source)
|
||||
const method = (source == "ticket-move" || source == "ticket-pin" || source == "ticket-rename" || source == "ticket-unpin" || source == "ticket-priority" || source == "ticket-transfer") ? source : getMethodFromSource(source)
|
||||
|
||||
instance.setColor(generalConfig.data.system.useRedErrorEmbeds ? "Red" : generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("❌",lang.getTranslation("errors.titles.channelRename")))
|
||||
@@ -412,14 +413,17 @@ const statsEmbeds = () => {
|
||||
|
||||
const scope = opendiscord.stats.get("opendiscord:ticket")
|
||||
const participantsScope = opendiscord.stats.get("opendiscord:participants")
|
||||
if (!scope || !participantsScope) return
|
||||
const messagesScope = opendiscord.stats.get("opendiscord:messages")
|
||||
if (!scope || !participantsScope || !messagesScope) return
|
||||
const data = await scope.render(scopeData.id.value,guild,channel,user)
|
||||
const participantsData = await participantsScope.render(scopeData.id.value,guild,channel,user)
|
||||
const messagesData = await messagesScope.render(scopeData.id.value,guild,channel,user)
|
||||
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(scope.name)
|
||||
instance.setDescription(data)
|
||||
instance.addFields({name:participantsScope.name,value:participantsData,inline:false})
|
||||
instance.addFields({name:participantsScope.name,value:participantsData,inline:true})
|
||||
instance.addFields({name:messagesScope.name,value:messagesData,inline:true})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -594,6 +598,9 @@ const ticketEmbeds = () => {
|
||||
if (embedOptions.description) instance.setDescription(embedOptions.description)
|
||||
|
||||
if (ticket.option.get("opendiscord:questions").value.length > 0){
|
||||
//show config fields if mixing is allowed
|
||||
if (generalConfig.data.system.displayFieldsWithQuestions) instance.addFields(...embedOptions.fields)
|
||||
|
||||
const answers = ticket.get("opendiscord:answers").value
|
||||
answers.forEach((answer) => {
|
||||
if (!answer.value || answer.value.length == 0) return
|
||||
@@ -610,7 +617,7 @@ const ticketEmbeds = () => {
|
||||
if (ticket.get("opendiscord:claimed").value){
|
||||
const claimUser = await opendiscord.tickets.getTicketUser(ticket,"claimer")
|
||||
if (!claimUser) return
|
||||
instance.setAuthor(lang.getTranslationWithParams("params.uppercase.claimedBy",[claimUser.displayName]),claimUser.displayAvatarURL())
|
||||
instance.setAuthor(lang.getTranslation("stats.properties.claimedBy")+" "+claimUser.displayName,claimUser.displayAvatarURL())
|
||||
}
|
||||
})
|
||||
)
|
||||
@@ -625,7 +632,7 @@ const ticketEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🔒",lang.getTranslation("actions.titles.close")))
|
||||
instance.setDescription(lang.getTranslation("actions.descriptions.close"))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -639,7 +646,7 @@ const ticketEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🔓",lang.getTranslation("actions.titles.reopen")))
|
||||
instance.setDescription(lang.getTranslation("actions.descriptions.reopen"))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -653,7 +660,7 @@ const ticketEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🗑️",lang.getTranslation("actions.titles.delete")))
|
||||
instance.setDescription(lang.getTranslation("actions.descriptions.delete"))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -667,7 +674,7 @@ const ticketEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("👋",lang.getTranslation("actions.titles.claim")))
|
||||
instance.setDescription(lang.getTranslation("actions.descriptions.claim"))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -681,7 +688,7 @@ const ticketEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("↩️",lang.getTranslation("actions.titles.unclaim")))
|
||||
instance.setDescription(lang.getTranslation("actions.descriptions.unclaim"))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -693,9 +700,9 @@ const ticketEmbeds = () => {
|
||||
|
||||
instance.setAuthor(user.displayName,user.displayAvatarURL())
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("📌",lang.getTranslation("actions.titles.pin")))
|
||||
instance.setTitle(utilities.emojiTitle(generalConfig.data.system.pinEmoji,lang.getTranslation("actions.titles.pin")))
|
||||
instance.setDescription(lang.getTranslation("actions.descriptions.pin"))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -707,9 +714,9 @@ const ticketEmbeds = () => {
|
||||
|
||||
instance.setAuthor(user.displayName,user.displayAvatarURL())
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("📌",lang.getTranslation("actions.titles.unpin")))
|
||||
instance.setTitle(utilities.emojiTitle(generalConfig.data.system.pinEmoji,lang.getTranslation("actions.titles.unpin")))
|
||||
instance.setDescription(lang.getTranslation("actions.descriptions.unpin"))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -723,7 +730,7 @@ const ticketEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🔄",lang.getTranslation("actions.titles.rename")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.rename",["`#"+data+"`"]))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -737,7 +744,7 @@ const ticketEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🔀",lang.getTranslation("actions.titles.move")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.move",["`"+data.get("opendiscord:name").value+"`"]))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -751,7 +758,7 @@ const ticketEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("👤",lang.getTranslation("actions.titles.add")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.add",[discord.userMention(data.id)]))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -765,7 +772,7 @@ const ticketEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("👤",lang.getTranslation("actions.titles.remove")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.remove",[discord.userMention(data.id)]))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -797,10 +804,10 @@ const ticketEmbeds = () => {
|
||||
instance.setTitle(utilities.emojiTitle("↩️",lang.getTranslation("actions.titles.unclaim")))
|
||||
instance.setDescription(lang.getTranslation("actions.logs.unclaimDm"))
|
||||
}else if (mode == "pin"){
|
||||
instance.setTitle(utilities.emojiTitle("📌",lang.getTranslation("actions.titles.pin")))
|
||||
instance.setTitle(utilities.emojiTitle(generalConfig.data.system.pinEmoji,lang.getTranslation("actions.titles.pin")))
|
||||
instance.setDescription(lang.getTranslation("actions.logs.pinDm"))
|
||||
}else if (mode == "unpin"){
|
||||
instance.setTitle(utilities.emojiTitle("📌",lang.getTranslation("actions.titles.unpin")))
|
||||
instance.setTitle(utilities.emojiTitle(generalConfig.data.system.pinEmoji,lang.getTranslation("actions.titles.unpin")))
|
||||
instance.setDescription(lang.getTranslation("actions.logs.unpinDm"))
|
||||
}else if (mode == "rename"){
|
||||
instance.setTitle(utilities.emojiTitle("🔄",lang.getTranslation("actions.titles.rename")))
|
||||
@@ -831,10 +838,9 @@ const ticketEmbeds = () => {
|
||||
instance.setTimestamp(new Date())
|
||||
instance.addFields(
|
||||
{name:lang.getTranslation("params.uppercase.ticket")+":",value:"```#"+(channel ? channel.name : "<unknown>")+"```",inline:false},
|
||||
//TODO TRANSLATION!!!
|
||||
{name:"Option"+":",value:"```"+(ticket.option.get("opendiscord:name").value)+"```",inline:false},
|
||||
{name:lang.getTranslation("params.uppercase.option")+":",value:"```"+(ticket.option.get("opendiscord:name").value)+"```",inline:false},
|
||||
)
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```",inline:false})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```",inline:false})
|
||||
|
||||
if (mode == "close"){
|
||||
instance.setTitle(utilities.emojiTitle("🔒",lang.getTranslation("actions.titles.close")))
|
||||
@@ -852,10 +858,10 @@ const ticketEmbeds = () => {
|
||||
instance.setTitle(utilities.emojiTitle("↩️",lang.getTranslation("actions.titles.unclaim")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.logs.unclaimLog",[discord.userMention(user.id)]))
|
||||
}else if (mode == "pin"){
|
||||
instance.setTitle(utilities.emojiTitle("📌",lang.getTranslation("actions.titles.pin")))
|
||||
instance.setTitle(utilities.emojiTitle(generalConfig.data.system.pinEmoji,lang.getTranslation("actions.titles.pin")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.logs.pinLog",[discord.userMention(user.id)]))
|
||||
}else if (mode == "unpin"){
|
||||
instance.setTitle(utilities.emojiTitle("📌",lang.getTranslation("actions.titles.unpin")))
|
||||
instance.setTitle(utilities.emojiTitle(generalConfig.data.system.pinEmoji,lang.getTranslation("actions.titles.unpin")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.logs.unpinLog",[discord.userMention(user.id)]))
|
||||
}else if (mode == "rename"){
|
||||
instance.setTitle(utilities.emojiTitle("🔄",lang.getTranslation("actions.titles.rename")))
|
||||
@@ -908,7 +914,7 @@ const blacklistEmbeds = () => {
|
||||
|
||||
if (blacklist){
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.blacklistGetSuccess",[discord.userMention(data.id)]))
|
||||
if (blacklist.reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+blacklist.reason+"```"})
|
||||
if (blacklist.reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(blacklist.reason ?? "/")+"```"})
|
||||
|
||||
}else instance.setDescription("*"+lang.getTranslationWithParams("actions.descriptions.blacklistGetEmpty",[discord.userMention(data.id)])+"*")
|
||||
})
|
||||
@@ -924,7 +930,7 @@ const blacklistEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🚫",lang.getTranslation("actions.titles.blacklistAdd")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.blacklistAdd",[discord.userMention(data.id)]))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -938,7 +944,7 @@ const blacklistEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🆓",lang.getTranslation("actions.titles.blacklistRemove")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.blacklistRemove",[discord.userMention(data.id)]))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -955,7 +961,7 @@ const blacklistEmbeds = () => {
|
||||
instance.setTitle(utilities.emojiTitle((mode == "add") ? "🚫" : "🆓",title))
|
||||
instance.setTimestamp(new Date())
|
||||
instance.setDescription(text)
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```",inline:false})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -974,7 +980,7 @@ const blacklistEmbeds = () => {
|
||||
instance.setAuthor(user.displayName,user.displayAvatarURL())
|
||||
instance.setTimestamp(new Date())
|
||||
instance.setDescription(text)
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```",inline:false})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
}
|
||||
@@ -1074,11 +1080,11 @@ const transcriptEmbeds = () => {
|
||||
const {guild,channel,user,ticket,compiler,reason} = params
|
||||
|
||||
instance.setColor(generalConfig.data.system.useRedErrorEmbeds ? "Red" : generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("❌","Transcript Error")) //TODO TRANSLATION!!!
|
||||
instance.setTitle(utilities.emojiTitle("❌",lang.getTranslation("transcripts.errors.title")))
|
||||
instance.setTimestamp(new Date())
|
||||
instance.setDescription(lang.getTranslation("transcripts.errors.error"))
|
||||
instance.setFooter(lang.getTranslation("errors.descriptions.askForInfo"))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```",inline:false})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
}
|
||||
@@ -1107,6 +1113,58 @@ const roleEmbeds = () => {
|
||||
else instance.setDescription(lang.getTranslation("actions.descriptions.rolesEmpty"))
|
||||
})
|
||||
)
|
||||
|
||||
//REACTION ROLE DM
|
||||
embeds.add(new api.ODEmbed("opendiscord:reaction-role-dm"))
|
||||
embeds.get("opendiscord:reaction-role-dm").workers.add(
|
||||
new api.ODWorker("opendiscord:reaction-role-dm",0,async (instance,params,source) => {
|
||||
const {guild,user,role,result} = params
|
||||
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🎨",lang.getTranslation("actions.titles.roles")))
|
||||
instance.setAuthor(user.displayName,user.displayAvatarURL())
|
||||
instance.setTimestamp(new Date())
|
||||
|
||||
const newResult = result.filter((r) => r.action != null).sort((a,b) => {
|
||||
if (a.action == "added" && b.action == "removed") return -1
|
||||
else if (a.action == "removed" && b.action == "added") return 1
|
||||
else return 0
|
||||
}).map((r) => {
|
||||
return (r.action == "added") ? "🟢 "+lang.getTranslation("params.uppercase.added")+" @"+r.role.name : "🔴 "+lang.getTranslation("params.uppercase.removed")+" @"+r.role.name
|
||||
})
|
||||
|
||||
const baseDescription = lang.getTranslation("actions.logs.roleUpdateDm")
|
||||
|
||||
if (newResult.length > 0) instance.setDescription(baseDescription+"\n\n"+newResult.join("\n"))
|
||||
else instance.setDescription(baseDescription+"\n"+lang.getTranslation("actions.descriptions.rolesEmpty"))
|
||||
})
|
||||
)
|
||||
|
||||
//REACTION ROLE LOGS
|
||||
embeds.add(new api.ODEmbed("opendiscord:reaction-role-logs"))
|
||||
embeds.get("opendiscord:reaction-role-logs").workers.add(
|
||||
new api.ODWorker("opendiscord:reaction-role-logs",0,async (instance,params,source) => {
|
||||
const {guild,user,role,result} = params
|
||||
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🎨",lang.getTranslation("actions.titles.roles")))
|
||||
instance.setAuthor(user.displayName,user.displayAvatarURL())
|
||||
instance.setTimestamp(new Date())
|
||||
|
||||
const newResult = result.filter((r) => r.action != null).sort((a,b) => {
|
||||
if (a.action == "added" && b.action == "removed") return -1
|
||||
else if (a.action == "removed" && b.action == "added") return 1
|
||||
else return 0
|
||||
}).map((r) => {
|
||||
return (r.action == "added") ? "🟢 "+lang.getTranslation("params.uppercase.added")+" "+discord.roleMention(r.role.id) : "🔴 "+lang.getTranslation("params.uppercase.removed")+" "+discord.roleMention(r.role.id)
|
||||
})
|
||||
|
||||
const baseDescription = lang.getTranslationWithParams("actions.logs.roleUpdateLog",[discord.userMention(user.id)])
|
||||
|
||||
if (newResult.length > 0) instance.setDescription(baseDescription+"\n\n"+newResult.join("\n"))
|
||||
else instance.setDescription(baseDescription+"\n"+lang.getTranslation("actions.descriptions.rolesEmpty"))
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
const clearEmbeds = () => {
|
||||
@@ -1117,7 +1175,7 @@ const clearEmbeds = () => {
|
||||
const {guild,channel,user,filter,list} = params
|
||||
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("⚠️","Clear Tickets")) //TODO TRANSLATION!!!
|
||||
instance.setTitle(utilities.emojiTitle("⚠️",lang.getTranslation("actions.titles.clearTickets")))
|
||||
instance.setAuthor(user.displayName,user.displayAvatarURL())
|
||||
instance.setTimestamp(new Date())
|
||||
instance.setDescription(lang.getTranslation("actions.descriptions.clearVerify"))
|
||||
@@ -1207,7 +1265,7 @@ const autoEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("⏱️",lang.getTranslation("actions.titles.autocloseEnabled")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.autocloseEnabled",[time.toString()]))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -1221,7 +1279,7 @@ const autoEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("⏱️",lang.getTranslation("actions.titles.autodeleteEnabled")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.autodeleteEnabled",[time.toString()]))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -1235,7 +1293,7 @@ const autoEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("⏱️",lang.getTranslation("actions.titles.autocloseDisabled")))
|
||||
instance.setDescription(lang.getTranslation("actions.descriptions.autocloseDisabled"))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
@@ -1249,7 +1307,64 @@ const autoEmbeds = () => {
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("⏱️",lang.getTranslation("actions.titles.autodeleteDisabled")))
|
||||
instance.setDescription(lang.getTranslation("actions.descriptions.autodeleteDisabled"))
|
||||
if (reason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+reason+"```"})
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
const extraEmbeds = () => {
|
||||
//TOPIC SET
|
||||
embeds.add(new api.ODEmbed("opendiscord:topic-set"))
|
||||
embeds.get("opendiscord:topic-set").workers.add(
|
||||
new api.ODWorker("opendiscord:topic-set",0,async (instance,params,source) => {
|
||||
const {user,topic} = params
|
||||
|
||||
instance.setAuthor(user.displayName,user.displayAvatarURL())
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("ℹ️",lang.getTranslation("actions.titles.topicSet")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.topicSet",[discord.userMention(user.id)]))
|
||||
if (topic) instance.addFields({name:lang.getTranslation("params.uppercase.topic")+":",value:"```"+topic+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
//PRIORITY SET
|
||||
embeds.add(new api.ODEmbed("opendiscord:priority-set"))
|
||||
embeds.get("opendiscord:priority-set").workers.add(
|
||||
new api.ODWorker("opendiscord:priority-set",0,async (instance,params,source) => {
|
||||
const {user,priority,reason} = params
|
||||
|
||||
instance.setAuthor(user.displayName,user.displayAvatarURL())
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🚨",lang.getTranslation("actions.titles.prioritySet")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.prioritySet",["**"+priority.renderDisplayName()+"**",discord.userMention(user.id)]))
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
|
||||
//PRIORITY GET
|
||||
embeds.add(new api.ODEmbed("opendiscord:priority-get"))
|
||||
embeds.get("opendiscord:priority-get").workers.add(
|
||||
new api.ODWorker("opendiscord:priority-get",0,async (instance,params,source) => {
|
||||
const {user,priority} = params
|
||||
|
||||
instance.setAuthor(user.displayName,user.displayAvatarURL())
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🚨",lang.getTranslation("actions.titles.priorityGet")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.priorityGet",["**"+priority.renderDisplayName()+"**"]))
|
||||
})
|
||||
)
|
||||
|
||||
//TRANSFER MESSAGE
|
||||
embeds.add(new api.ODEmbed("opendiscord:transfer-message"))
|
||||
embeds.get("opendiscord:transfer-message").workers.add(
|
||||
new api.ODWorker("opendiscord:transfer-message",0,async (instance,params,source) => {
|
||||
const {user,oldCreator,newCreator,reason} = params
|
||||
|
||||
instance.setAuthor(user.displayName,user.displayAvatarURL())
|
||||
instance.setColor(generalConfig.data.mainColor)
|
||||
instance.setTitle(utilities.emojiTitle("🔀",lang.getTranslation("actions.titles.transfer")))
|
||||
instance.setDescription(lang.getTranslationWithParams("actions.descriptions.transfer",[discord.userMention(oldCreator.id),discord.userMention(newCreator.id),discord.userMention(user.id)]))
|
||||
if (reason || generalConfig.data.system.alwaysShowReason) instance.addFields({name:lang.getTranslation("params.uppercase.reason")+":",value:"```"+(reason ?? "/")+"```"})
|
||||
})
|
||||
)
|
||||
}
|
||||
@@ -24,6 +24,7 @@ export const registerAllMessages = async () => {
|
||||
roleMessages()
|
||||
clearMessages()
|
||||
autoMessages()
|
||||
extraMessages()
|
||||
}
|
||||
|
||||
const verifyBarMessages = () => {
|
||||
@@ -332,8 +333,8 @@ const errorMessages = () => {
|
||||
messages.add(new api.ODMessage("opendiscord:error"))
|
||||
messages.get("opendiscord:error").workers.add(
|
||||
new api.ODWorker("opendiscord:error",0,async (instance,params,source) => {
|
||||
const {guild,channel,user,error,layout} = params
|
||||
instance.addEmbed(await embeds.getSafe("opendiscord:error").build(source,{guild,channel,user,error,layout}))
|
||||
const {guild,channel,user,error,layout,customTitle} = params
|
||||
instance.addEmbed(await embeds.getSafe("opendiscord:error").build(source,{guild,channel,user,error,layout,customTitle}))
|
||||
instance.setEphemeral(true)
|
||||
})
|
||||
)
|
||||
@@ -964,6 +965,24 @@ const roleMessages = () => {
|
||||
instance.setEphemeral(true)
|
||||
})
|
||||
)
|
||||
|
||||
//REACTION ROLE DM
|
||||
messages.add(new api.ODMessage("opendiscord:reaction-role-dm"))
|
||||
messages.get("opendiscord:reaction-role-dm").workers.add(
|
||||
new api.ODWorker("opendiscord:reaction-role-dm",0,async (instance,params,source) => {
|
||||
const {guild,user,role,result} = params
|
||||
instance.addEmbed(await embeds.getSafe("opendiscord:reaction-role-dm").build(source,{guild,user,role,result}))
|
||||
})
|
||||
)
|
||||
|
||||
//REACTION ROLE LOGS
|
||||
messages.add(new api.ODMessage("opendiscord:reaction-role-logs"))
|
||||
messages.get("opendiscord:reaction-role-logs").workers.add(
|
||||
new api.ODWorker("opendiscord:reaction-role-logs",0,async (instance,params,source) => {
|
||||
const {guild,user,role,result} = params
|
||||
instance.addEmbed(await embeds.getSafe("opendiscord:reaction-role-logs").build(source,{guild,user,role,result}))
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
const clearMessages = () => {
|
||||
@@ -1055,3 +1074,41 @@ const autoMessages = () => {
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
const extraMessages = () => {
|
||||
//TOPIC SET
|
||||
messages.add(new api.ODMessage("opendiscord:topic-set"))
|
||||
messages.get("opendiscord:topic-set").workers.add(
|
||||
new api.ODWorker("opendiscord:topic-set",0,async (instance,params,source) => {
|
||||
const {guild,channel,user,ticket,topic} = params
|
||||
instance.addEmbed(await embeds.getSafe("opendiscord:topic-set").build(source,{guild,channel,user,ticket,topic}))
|
||||
})
|
||||
)
|
||||
|
||||
//PRIORITY SET
|
||||
messages.add(new api.ODMessage("opendiscord:priority-set"))
|
||||
messages.get("opendiscord:priority-set").workers.add(
|
||||
new api.ODWorker("opendiscord:priority-set",0,async (instance,params,source) => {
|
||||
const {guild,channel,user,ticket,priority,reason} = params
|
||||
instance.addEmbed(await embeds.getSafe("opendiscord:priority-set").build(source,{guild,channel,user,ticket,priority,reason}))
|
||||
})
|
||||
)
|
||||
|
||||
//PRIORITY GET
|
||||
messages.add(new api.ODMessage("opendiscord:priority-get"))
|
||||
messages.get("opendiscord:priority-get").workers.add(
|
||||
new api.ODWorker("opendiscord:priority-get",0,async (instance,params,source) => {
|
||||
const {guild,channel,user,ticket,priority} = params
|
||||
instance.addEmbed(await embeds.getSafe("opendiscord:priority-get").build(source,{guild,channel,user,ticket,priority}))
|
||||
})
|
||||
)
|
||||
|
||||
//TRANSFER MESSAGE
|
||||
messages.add(new api.ODMessage("opendiscord:transfer-message"))
|
||||
messages.get("opendiscord:transfer-message").workers.add(
|
||||
new api.ODWorker("opendiscord:transfer-message",0,async (instance,params,source) => {
|
||||
const {guild,channel,user,ticket,oldCreator,newCreator,reason} = params
|
||||
instance.addEmbed(await embeds.getSafe("opendiscord:transfer-message").build(source,{guild,channel,user,ticket,oldCreator,newCreator,reason}))
|
||||
})
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
///////////////////////////////////////
|
||||
//AUTOCOMPLETE COMMAND UTILS
|
||||
///////////////////////////////////////
|
||||
import {opendiscord, api, utilities} from "../index"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
export const registerAutocompleteResponders = async () => {
|
||||
//PANEL ID AUTOCOMPLETE
|
||||
opendiscord.responders.autocomplete.add(new api.ODAutocompleteResponder("opendiscord:panel-id","panel","id"))
|
||||
opendiscord.responders.autocomplete.get("opendiscord:panel-id").workers.add(new api.ODWorker("opendiscord:panel-id",0,async (instance,params,source,cancel) => {
|
||||
//create panel choices
|
||||
const panelChoices : {name:string, value:string}[] = []
|
||||
opendiscord.configs.get("opendiscord:panels").data.forEach((panel) => {
|
||||
panelChoices.push({name:panel.name, value:panel.id})
|
||||
})
|
||||
|
||||
await instance.filteredAutocomplete(panelChoices)
|
||||
}))
|
||||
|
||||
//OPTION ID AUTOCOMPLETE
|
||||
opendiscord.responders.autocomplete.add(new api.ODAutocompleteResponder("opendiscord:option-id",/ticket|move/,"id"))
|
||||
opendiscord.responders.autocomplete.get("opendiscord:option-id").workers.add(new api.ODWorker("opendiscord:option-id",0,async (instance,params,source,cancel) => {
|
||||
//create ticket choices
|
||||
const ticketChoices : {name:string, value:string}[] = []
|
||||
opendiscord.configs.get("opendiscord:options").data.forEach((option) => {
|
||||
if (option.type != "ticket") return
|
||||
ticketChoices.push({name:option.name, value:option.id})
|
||||
})
|
||||
|
||||
instance.filteredAutocomplete(ticketChoices)
|
||||
}))
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import {opendiscord, api, utilities} from "../index"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||
const lang = opendiscord.languages
|
||||
|
||||
export const registerCommandResponders = async () => {
|
||||
//CLOSE COMMAND RESPONDER
|
||||
@@ -64,6 +65,18 @@ export const registerCommandResponders = async () => {
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||
return cancel()
|
||||
}
|
||||
//return when not allowed because of missing messages
|
||||
if (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage){
|
||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
}
|
||||
|
||||
const reason = instance.options.getString("reason",false)
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import {opendiscord, api, utilities} from "../index"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||
const lang = opendiscord.languages
|
||||
|
||||
export const registerCommandResponders = async () => {
|
||||
//DELETE COMMAND RESPONDER
|
||||
@@ -59,10 +60,30 @@ export const registerCommandResponders = async () => {
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||
return cancel()
|
||||
}
|
||||
//return when not allowed because of missing messages
|
||||
if (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage){
|
||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
||||
return cancel()
|
||||
}
|
||||
}
|
||||
|
||||
const reason = instance.options.getString("reason",false)
|
||||
const withoutTranscript = instance.options.getBoolean("notranscript",false) ?? false
|
||||
|
||||
//don't allow deleteWithoutTranscript to non-global-admins when enabled
|
||||
if (withoutTranscript && generalConfig.data.system.adminOnlyDeleteWithoutTranscript){
|
||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild,{allowChannelRoleScope:false,allowChannelUserScope:false,allowGlobalRoleScope:true,allowGlobalUserScope:true}))){
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
//start deleting ticket
|
||||
await instance.defer(false)
|
||||
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build(source,{guild,channel,user,ticket,reason}))
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
///////////////////////////////////////
|
||||
//PRIORITY COMMAND
|
||||
///////////////////////////////////////
|
||||
import {opendiscord, api, utilities} from "../index"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||
|
||||
export const registerCommandResponders = async () => {
|
||||
//PRIORITY COMMAND RESPONDER
|
||||
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:priority",generalConfig.data.prefix,"priority"))
|
||||
opendiscord.responders.commands.get("opendiscord:priority").workers.add([
|
||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||
const permissionMode = generalConfig.data.system.permissions.priority
|
||||
|
||||
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:priority",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 scope = instance.options.getSubCommand()
|
||||
if (!scope || (scope != "set" && scope != "get")) return
|
||||
|
||||
if (scope == "set"){
|
||||
const priorityName = instance.options.getString("priority",true)
|
||||
const reason = instance.options.getString("reason",false)
|
||||
|
||||
const priority = opendiscord.priorities.getAll().find((lvl) => lvl.rawName === priorityName) ?? null
|
||||
if (!priority){
|
||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:"Please provide a valid priority level.",customTitle:"Unknown Priority Level"}))
|
||||
return cancel()
|
||||
}
|
||||
|
||||
//start changing ticket priority
|
||||
await instance.defer(false)
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-priority").run(source,{guild,channel,user,ticket,newPriority:priority,sendMessage:false,reason})
|
||||
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:priority-set").build(source,{guild,channel,user,ticket,priority,reason}))
|
||||
|
||||
}else if (scope == "get"){
|
||||
const priority = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value)
|
||||
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:priority-get").build(source,{guild,channel,user,ticket,priority}))
|
||||
}
|
||||
}),
|
||||
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||
const scope = instance.options.getSubCommand()
|
||||
opendiscord.log(instance.user.displayName+" used the 'priority "+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}
|
||||
])
|
||||
})
|
||||
])
|
||||
}
|
||||
+10
-3
@@ -5,6 +5,7 @@ import {opendiscord, api, utilities} from "../index"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||
const lang = opendiscord.languages
|
||||
|
||||
export const registerCommandResponders = async () => {
|
||||
//TICKET COMMAND RESPONDER
|
||||
@@ -70,6 +71,7 @@ export const registerCommandResponders = async () => {
|
||||
else if (res.reason == "global-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global-user"}))
|
||||
else if (res.reason == "option-limit") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option"}))
|
||||
else if (res.reason == "option-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option-user"}))
|
||||
else if (res.reason == "custom") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,layout:"simple",error:res.customReason ?? lang.getTranslation("errors.descriptions.unableToCreateTicket")+" `Unknown invalid_permission_reason => no reason specified by plugin`",customTitle:lang.getTranslation("errors.titles.permissionError")}))
|
||||
else instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Unknown invalid_permission reason => calculation failed #1",layout:"advanced"}))
|
||||
return cancel()
|
||||
}
|
||||
@@ -132,6 +134,7 @@ export const registerButtonResponders = async () => {
|
||||
else if (res.reason == "global-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global-user"}))
|
||||
else if (res.reason == "option-limit") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option"}))
|
||||
else if (res.reason == "option-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option-user"}))
|
||||
else if (res.reason == "custom") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,layout:"simple",error:res.customReason ?? lang.getTranslation("errors.descriptions.unableToCreateTicket")+" `Unknown invalid_permission_reason => no reason specified by plugin`",customTitle:lang.getTranslation("errors.titles.permissionError")}))
|
||||
else instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Unknown invalid_permission reason => calculation failed #1",layout:"advanced"}))
|
||||
return cancel()
|
||||
}
|
||||
@@ -142,7 +145,8 @@ export const registerButtonResponders = async () => {
|
||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:ticket-questions").build("panel-button",{guild,channel,user,option}))
|
||||
}else{
|
||||
//create ticket
|
||||
await instance.defer("reply",true)
|
||||
await instance.defer((generalConfig.data.system.replyOnTicketCreation) ? "reply" : "update",true)
|
||||
|
||||
const res = await opendiscord.actions.get("opendiscord:create-ticket").run("panel-button",{guild,user,answers:[],option})
|
||||
if (!res.channel || !res.ticket){
|
||||
//error
|
||||
@@ -186,6 +190,7 @@ export const registerDropdownResponders = async () => {
|
||||
else if (res.reason == "global-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"global-user"}))
|
||||
else if (res.reason == "option-limit") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option"}))
|
||||
else if (res.reason == "option-user-limit") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions-limits").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,limit:"option-user"}))
|
||||
else if (res.reason == "custom") instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,layout:"simple",error:res.customReason ?? lang.getTranslation("errors.descriptions.unableToCreateTicket")+" `Unknown invalid_permission_reason => no reason specified by plugin`",customTitle:lang.getTranslation("errors.titles.permissionError")}))
|
||||
else instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Unknown invalid_permission reason => calculation failed #1",layout:"advanced"}))
|
||||
return cancel()
|
||||
}
|
||||
@@ -196,7 +201,8 @@ export const registerDropdownResponders = async () => {
|
||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:ticket-questions").build("panel-dropdown",{guild,channel,user,option}))
|
||||
}else{
|
||||
//create ticket
|
||||
await instance.defer("reply",true)
|
||||
await instance.defer((generalConfig.data.system.replyOnTicketCreation) ? "reply" : "update",true)
|
||||
|
||||
const res = await opendiscord.actions.get("opendiscord:create-ticket").run("panel-dropdown",{guild,user,answers:[],option})
|
||||
if (!res.channel || !res.ticket){
|
||||
//error
|
||||
@@ -264,7 +270,8 @@ export const registerModalResponders = async () => {
|
||||
})
|
||||
|
||||
//create ticket
|
||||
await instance.defer("reply",true)
|
||||
await instance.defer((generalConfig.data.system.replyOnTicketCreation) ? "reply" : "update",true)
|
||||
|
||||
const res = await opendiscord.actions.get("opendiscord:create-ticket").run(originalSource,{guild,user,answers,option})
|
||||
if (!res.channel || !res.ticket){
|
||||
//error
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
///////////////////////////////////////
|
||||
//TOPIC COMMAND
|
||||
///////////////////////////////////////
|
||||
import {opendiscord, api, utilities} from "../index"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||
|
||||
export const registerCommandResponders = async () => {
|
||||
//TOPIC COMMAND RESPONDER
|
||||
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:topic",generalConfig.data.prefix,"topic"))
|
||||
opendiscord.responders.commands.get("opendiscord:topic").workers.add([
|
||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||
const permissionMode = generalConfig.data.system.permissions.topic
|
||||
|
||||
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:topic",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 scope = instance.options.getSubCommand()
|
||||
if (!scope || (scope != "set")) return
|
||||
|
||||
if (scope == "set"){
|
||||
const topic = instance.options.getString("topic",true)
|
||||
//start changing ticket topic
|
||||
await instance.defer(false)
|
||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run(source,{guild,channel,user,ticket,newTopic:topic,sendMessage:false})
|
||||
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:topic-set").build(source,{guild,channel,user,ticket,topic}))
|
||||
}
|
||||
}),
|
||||
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||
opendiscord.log(instance.user.displayName+" used the 'topic set' 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}
|
||||
])
|
||||
})
|
||||
])
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
///////////////////////////////////////
|
||||
//TRANSFER COMMAND
|
||||
///////////////////////////////////////
|
||||
import {opendiscord, api, utilities} from "../index"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||
|
||||
export const registerCommandResponders = async () => {
|
||||
//TRANSFER COMMAND RESPONDER
|
||||
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:transfer",generalConfig.data.prefix,"transfer"))
|
||||
opendiscord.responders.commands.get("opendiscord:transfer").workers.add([
|
||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||
const permissionMode = generalConfig.data.system.permissions.transfer
|
||||
|
||||
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:transfer",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 oldCreator = await opendiscord.tickets.getTicketUser(ticket,"creator") ?? opendiscord.client.client.user
|
||||
const newCreator = instance.options.getUser("user",true)
|
||||
const reason = instance.options.getString("reason",false)
|
||||
|
||||
//start transferring ticket ownership
|
||||
await instance.defer(false)
|
||||
await opendiscord.actions.get("opendiscord:transfer-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false,newCreator})
|
||||
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:transfer-message").build(source,{guild,channel,user,ticket,oldCreator,newCreator,reason}))
|
||||
}),
|
||||
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||
opendiscord.log(instance.user.displayName+" used the 'transfer' 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}
|
||||
])
|
||||
})
|
||||
])
|
||||
}
|
||||
@@ -61,3 +61,4 @@ export * from "./openticket/ticket"
|
||||
export * from "./openticket/blacklist"
|
||||
export * from "./openticket/transcript"
|
||||
export * from "./openticket/role"
|
||||
export * from "./openticket/priority"
|
||||
@@ -10,6 +10,7 @@ import { ODTicket, ODTicketClearFilter } from "../openticket/ticket"
|
||||
import { ODTranscriptCompiler, ODTranscriptCompilerCompileResult } from "../openticket/transcript"
|
||||
import { ODMessageBuildSentResult } from "../modules/builder"
|
||||
import { ODRole, ODRoleUpdateMode, ODRoleUpdateResult } from "../openticket/role"
|
||||
import { ODPriorityLevel } from "../openticket/priority"
|
||||
|
||||
/**## ODActionManagerIds_Default `interface`
|
||||
* This interface is a list of ids available in the `ODActionManager_Default` class.
|
||||
@@ -19,13 +20,13 @@ export interface ODActionManagerIds_Default {
|
||||
"opendiscord:create-ticket-permissions":{
|
||||
source:"panel-button"|"panel-dropdown"|"slash"|"text"|"other",
|
||||
params:{guild:discord.Guild,user:discord.User,option:ODTicketOption},
|
||||
result:{valid:boolean,reason:"blacklist"|"cooldown"|"global-limit"|"global-user-limit"|"option-limit"|"option-user-limit"|null,cooldownUntil?:Date},
|
||||
result:{valid:boolean,reason:"blacklist"|"cooldown"|"global-limit"|"global-user-limit"|"option-limit"|"option-user-limit"|"custom"|null,cooldownUntil?:Date,customReason?:string},
|
||||
workers:"opendiscord:check-blacklist"|"opendiscord:check-cooldown"|"opendiscord:check-global-limits"|"opendiscord:check-option-limits"|"opendiscord:valid"
|
||||
},
|
||||
"opendiscord:create-transcript":{
|
||||
source:"slash"|"text"|"ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"autodelete"|"clear"|"other",
|
||||
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket},
|
||||
result:{compiler:ODTranscriptCompiler<any>, success:boolean, result:ODTranscriptCompilerCompileResult<any>, errorReason:string|null, pendingMessage:ODMessageBuildSentResult<true>|null, participants:{user:discord.User,role:"creator"|"participant"|"admin"}[]},
|
||||
result:{compiler:ODTranscriptCompiler<any,object|null>, success:boolean, result:ODTranscriptCompilerCompileResult<any>, errorReason:string|null, pendingMessage:ODMessageBuildSentResult<true>|null, initData:object|null, participants:{user:discord.User,role:"creator"|"participant"|"admin"}[]},
|
||||
workers:"opendiscord:select-compiler"|"opendiscord:init-transcript"|"opendiscord:compile-transcript"|"opendiscord:ready-transcript"|"opendiscord:logs"
|
||||
},
|
||||
"opendiscord:create-ticket":{
|
||||
@@ -111,7 +112,25 @@ export interface ODActionManagerIds_Default {
|
||||
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:ODTicket[]},
|
||||
result:{list:string[]},
|
||||
workers:"opendiscord:clear-tickets"|"opendiscord:discord-logs"|"opendiscord:logs"
|
||||
}
|
||||
},
|
||||
"opendiscord:update-ticket-topic":{
|
||||
source:"slash"|"text"|"ticket-action"|"other",
|
||||
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,newTopic:string|null,sendMessage:boolean},
|
||||
result:{},
|
||||
workers:"opendiscord:update-ticket-topic"|"opendiscord:discord-logs"|"opendiscord:logs"
|
||||
},
|
||||
"opendiscord:update-ticket-priority":{
|
||||
source:"slash"|"text"|"other",
|
||||
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,newPriority:ODPriorityLevel,reason:string|null,sendMessage:boolean},
|
||||
result:{},
|
||||
workers:"opendiscord:update-ticket-priority"|"opendiscord:discord-logs"|"opendiscord:logs"
|
||||
},
|
||||
"opendiscord:transfer-ticket":{
|
||||
source:"slash"|"text"|"other",
|
||||
params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,newCreator:discord.User,reason:string|null,sendMessage:boolean},
|
||||
result:{},
|
||||
workers:"opendiscord:transfer-ticket"|"opendiscord:discord-logs"|"opendiscord:logs"
|
||||
},
|
||||
}
|
||||
|
||||
/**## ODActionManager_Default `default_class`
|
||||
|
||||
@@ -13,6 +13,7 @@ import { ODVerifyBar } from "../modules/verifybar"
|
||||
import * as discord from "discord.js"
|
||||
import { ODTranscriptCompiler, ODTranscriptCompilerCompileResult } from "../openticket/transcript"
|
||||
import { ODRole, ODRoleUpdateResult } from "../openticket/role"
|
||||
import { ODPriorityLevel } from "../openticket/priority"
|
||||
|
||||
/**## ODBuilderManager_Default `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODBuilderManager class.
|
||||
@@ -58,9 +59,9 @@ export interface ODButtonManagerIds_Default {
|
||||
"opendiscord:pin-ticket":{source:"ticket-message"|"unpin-message"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket},workers:"opendiscord:pin-ticket"},
|
||||
"opendiscord:unpin-ticket":{source:"ticket-message"|"pin-message"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket},workers:"opendiscord:unpin-ticket"},
|
||||
|
||||
"opendiscord:transcript-html-visit":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{url:string}>,result:ODTranscriptCompilerCompileResult<{url:string}>},workers:"opendiscord:transcript-html-visit"},
|
||||
"opendiscord:transcript-error-retry":{source:"slash"|"text"|"ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<any>,reason:string|null},workers:"opendiscord:transcript-error-retry"},
|
||||
"opendiscord:transcript-error-continue":{source:"slash"|"text"|"ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<any>,reason:string|null},workers:"opendiscord:transcript-error-continue"},
|
||||
"opendiscord:transcript-html-visit":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{url:string,availableUntil:Date},{auth:string}>,result:ODTranscriptCompilerCompileResult<{url:string,availableUntil:Date}>},workers:"opendiscord:transcript-html-visit"},
|
||||
"opendiscord:transcript-error-retry":{source:"slash"|"text"|"ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<any,object|null>,reason:string|null},workers:"opendiscord:transcript-error-retry"},
|
||||
"opendiscord:transcript-error-continue":{source:"slash"|"text"|"ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<any,object|null>,reason:string|null},workers:"opendiscord:transcript-error-continue"},
|
||||
|
||||
"opendiscord:clear-continue":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-continue"},
|
||||
}
|
||||
@@ -170,7 +171,7 @@ export class ODDropdown_Default<Source extends string, Params, WorkerIds extends
|
||||
* It's used to generate typescript declarations for this class.
|
||||
*/
|
||||
export interface ODFileManagerIds_Default {
|
||||
"opendiscord:text-transcript":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<any>,result:ODTranscriptCompilerCompileResult<any>},workers:"opendiscord:text-transcript"}
|
||||
"opendiscord:text-transcript":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<any,object|null>,result:ODTranscriptCompilerCompileResult<any>},workers:"opendiscord:text-transcript"}
|
||||
}
|
||||
|
||||
/**## ODFileManager_Default `default_class`
|
||||
@@ -224,7 +225,7 @@ export class ODFile_Default<Source extends string, Params, WorkerIds extends str
|
||||
* It's used to generate typescript declarations for this class.
|
||||
*/
|
||||
export interface ODEmbedManagerIds_Default {
|
||||
"opendiscord:error":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:string,layout:"simple"|"advanced"},workers:"opendiscord:error"},
|
||||
"opendiscord:error":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:string,layout:"simple"|"advanced",customTitle?:string},workers:"opendiscord:error"},
|
||||
"opendiscord:error-option-missing":{source:"slash"|"text"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:ODTextCommandErrorMissingOption},workers:"opendiscord:error-option-missing"},
|
||||
"opendiscord:error-option-invalid":{source:"slash"|"text"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:ODTextCommandErrorInvalidOption},workers:"opendiscord:error-option-invalid"},
|
||||
"opendiscord:error-unknown-command":{source:"slash"|"text"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:ODTextCommandErrorUnknownCommand},workers:"opendiscord:error-unknown-command"},
|
||||
@@ -238,7 +239,7 @@ export interface ODEmbedManagerIds_Default {
|
||||
"opendiscord:error-option-unknown":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-option-unknown"},
|
||||
"opendiscord:error-panel-unknown":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-panel-unknown"},
|
||||
"opendiscord:error-not-in-guild":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-not-in-guild"},
|
||||
"opendiscord:error-channel-rename":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-pin"|"ticket-unpin"|"ticket-rename"|"ticket-move"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalName:string,newName:string},workers:"opendiscord:error-channel-rename"},
|
||||
"opendiscord:error-channel-rename":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-pin"|"ticket-unpin"|"ticket-rename"|"ticket-move"|"ticket-priority"|"ticket-transfer"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalName:string,newName:string},workers:"opendiscord:error-channel-rename"},
|
||||
"opendiscord:error-ticket-busy":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-ticket-busy"},
|
||||
|
||||
"opendiscord:help-menu":{source:"text"|"slash"|"button"|"other",params:{mode:"slash"|"text",page:number},workers:"opendiscord:help-menu"},
|
||||
@@ -275,12 +276,15 @@ export interface ODEmbedManagerIds_Default {
|
||||
"opendiscord:blacklist-dm":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"add"|"remove",data:discord.User,reason:string|null},workers:"opendiscord:blacklist-dm"},
|
||||
"opendiscord:blacklist-logs":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"add"|"remove",data:discord.User,reason:string|null},workers:"opendiscord:blacklist-logs"},
|
||||
|
||||
"opendiscord:transcript-text-ready":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{contents:string}>,result:ODTranscriptCompilerCompileResult<{contents:string}>},workers:"opendiscord:transcript-text-ready"},
|
||||
"opendiscord:transcript-html-ready":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{url:string}>,result:ODTranscriptCompilerCompileResult<{url:string}>},workers:"opendiscord:transcript-html-ready"},
|
||||
"opendiscord:transcript-html-progress":{source:"channel"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{url:string}>,remaining:number},workers:"opendiscord:transcript-html-progress"},
|
||||
"opendiscord:transcript-error":{source:"slash"|"text"|"ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<any>,reason:string|null},workers:"opendiscord:transcript-error"},
|
||||
"opendiscord:transcript-text-ready":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{contents:string},null>,result:ODTranscriptCompilerCompileResult<{contents:string}>},workers:"opendiscord:transcript-text-ready"},
|
||||
"opendiscord:transcript-html-ready":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{url:string,availableUntil:Date},{auth:string}>,result:ODTranscriptCompilerCompileResult<{url:string,availableUntil:Date}>},workers:"opendiscord:transcript-html-ready"},
|
||||
"opendiscord:transcript-html-progress":{source:"channel"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{url:string,availableUntil:Date},{auth:string}>,remaining:number},workers:"opendiscord:transcript-html-progress"},
|
||||
"opendiscord:transcript-error":{source:"slash"|"text"|"ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<any,object|null>,reason:string|null},workers:"opendiscord:transcript-error"},
|
||||
|
||||
"opendiscord:reaction-role":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role"},
|
||||
"opendiscord:reaction-role-dm":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role-dm"},
|
||||
"opendiscord:reaction-role-logs":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role-logs"},
|
||||
|
||||
"opendiscord:clear-verify-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-verify-message"},
|
||||
"opendiscord:clear-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-message"},
|
||||
"opendiscord:clear-logs":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-logs"},
|
||||
@@ -291,6 +295,11 @@ export interface ODEmbedManagerIds_Default {
|
||||
"opendiscord:autodelete-enable":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,time:number,reason:string|null},workers:"opendiscord:autodelete-enable"},
|
||||
"opendiscord:autoclose-disable":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null},workers:"opendiscord:autoclose-disable"},
|
||||
"opendiscord:autodelete-disable":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null},workers:"opendiscord:autodelete-disable"},
|
||||
|
||||
"opendiscord:topic-set":{source:"slash"|"text"|"ticket-action"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,topic:string},workers:"opendiscord:topic-set"},
|
||||
"opendiscord:priority-set":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,priority:ODPriorityLevel,reason:string|null},workers:"opendiscord:priority-set"},
|
||||
"opendiscord:priority-get":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,priority:ODPriorityLevel},workers:"opendiscord:priority-get"},
|
||||
"opendiscord:transfer-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,oldCreator:discord.User,newCreator:discord.User,reason:string|null},workers:"opendiscord:transfer-message"},
|
||||
}
|
||||
|
||||
/**## ODEmbedManager_Default `default_class`
|
||||
@@ -353,7 +362,7 @@ export interface ODMessageManagerIds_Default {
|
||||
"opendiscord:verifybar-unpin-message":{source:"verifybar",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,verifybar:ODVerifyBar,originalMessage:discord.Message<boolean>},workers:"opendiscord:verifybar-unpin-message"}
|
||||
"opendiscord:verifybar-autoclose-message":{source:"verifybar",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,verifybar:ODVerifyBar,originalMessage:discord.Message<boolean>},workers:"opendiscord:verifybar-autoclose-message"}
|
||||
|
||||
"opendiscord:error":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:string,layout:"simple"|"advanced"},workers:"opendiscord:error"},
|
||||
"opendiscord:error":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:string,layout:"simple"|"advanced",customTitle?:string},workers:"opendiscord:error"},
|
||||
"opendiscord:error-option-missing":{source:"slash"|"text"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:ODTextCommandErrorMissingOption},workers:"opendiscord:error-option-missing"},
|
||||
"opendiscord:error-option-invalid":{source:"slash"|"text"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:ODTextCommandErrorInvalidOption},workers:"opendiscord:error-option-invalid"},
|
||||
"opendiscord:error-unknown-command":{source:"slash"|"text"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,error:ODTextCommandErrorUnknownCommand},workers:"opendiscord:error-unknown-command"},
|
||||
@@ -367,7 +376,7 @@ export interface ODMessageManagerIds_Default {
|
||||
"opendiscord:error-option-unknown":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-option-unknown"},
|
||||
"opendiscord:error-panel-unknown":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-panel-unknown"},
|
||||
"opendiscord:error-not-in-guild":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-not-in-guild"},
|
||||
"opendiscord:error-channel-rename":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-pin"|"ticket-unpin"|"ticket-rename"|"ticket-move"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalName:string,newName:string},workers:"opendiscord:error-channel-rename"},
|
||||
"opendiscord:error-channel-rename":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-pin"|"ticket-unpin"|"ticket-rename"|"ticket-move"|"ticket-priority"|"ticket-transfer"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalName:string,newName:string},workers:"opendiscord:error-channel-rename"},
|
||||
"opendiscord:error-ticket-busy":{source:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-ticket-busy"},
|
||||
|
||||
"opendiscord:help-menu":{source:"slash"|"text"|"button"|"other",params:{mode:"slash"|"text",page:number},workers:"opendiscord:help-menu"},
|
||||
@@ -406,12 +415,15 @@ export interface ODMessageManagerIds_Default {
|
||||
"opendiscord:blacklist-dm":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"add"|"remove",data:discord.User,reason:string|null},workers:"opendiscord:blacklist-dm"},
|
||||
"opendiscord:blacklist-logs":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"add"|"remove",data:discord.User,reason:string|null},workers:"opendiscord:blacklist-logs"},
|
||||
|
||||
"opendiscord:transcript-text-ready":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{contents:string}>,result:ODTranscriptCompilerCompileResult<{contents:string}>},workers:"opendiscord:transcript-text-ready"},
|
||||
"opendiscord:transcript-html-ready":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{url:string}>,result:ODTranscriptCompilerCompileResult<{url:string}>},workers:"opendiscord:transcript-html-ready"},
|
||||
"opendiscord:transcript-html-progress":{source:"channel"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{url:string}>,remaining:number},workers:"opendiscord:transcript-html-progress"},
|
||||
"opendiscord:transcript-error":{source:"slash"|"text"|"ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<any>,reason:string|null},workers:"opendiscord:transcript-error"},
|
||||
"opendiscord:transcript-text-ready":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{contents:string},null>,result:ODTranscriptCompilerCompileResult<{contents:string}>},workers:"opendiscord:transcript-text-ready"},
|
||||
"opendiscord:transcript-html-ready":{source:"channel"|"creator-dm"|"participant-dm"|"active-admin-dm"|"every-admin-dm"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{url:string,availableUntil:Date},{auth:string}>,result:ODTranscriptCompilerCompileResult<{url:string,availableUntil:Date}>},workers:"opendiscord:transcript-html-ready"},
|
||||
"opendiscord:transcript-html-progress":{source:"channel"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<{url:string,availableUntil:Date},{auth:string}>,remaining:number},workers:"opendiscord:transcript-html-progress"},
|
||||
"opendiscord:transcript-error":{source:"slash"|"text"|"ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,compiler:ODTranscriptCompiler<any,object|null>,reason:string|null},workers:"opendiscord:transcript-error"},
|
||||
|
||||
"opendiscord:reaction-role":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role"},
|
||||
"opendiscord:reaction-role-dm":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role-dm"},
|
||||
"opendiscord:reaction-role-logs":{source:"panel-button"|"other",params:{guild:discord.Guild,user:discord.User,role:ODRole,result:ODRoleUpdateResult[]},workers:"opendiscord:reaction-role-logs"},
|
||||
|
||||
"opendiscord:clear-verify-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-verify-message"},
|
||||
"opendiscord:clear-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-message"},
|
||||
"opendiscord:clear-logs":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,filter:ODTicketClearFilter,list:string[]},workers:"opendiscord:clear-logs"},
|
||||
@@ -422,6 +434,11 @@ export interface ODMessageManagerIds_Default {
|
||||
"opendiscord:autodelete-enable":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,time:number,reason:string|null},workers:"opendiscord:autodelete-enable"},
|
||||
"opendiscord:autoclose-disable":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null},workers:"opendiscord:autoclose-disable"},
|
||||
"opendiscord:autodelete-disable":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null},workers:"opendiscord:autodelete-disable"},
|
||||
|
||||
"opendiscord:topic-set":{source:"slash"|"text"|"ticket-action"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,topic:string},workers:"opendiscord:topic-set"},
|
||||
"opendiscord:priority-set":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,priority:ODPriorityLevel,reason:string|null},workers:"opendiscord:priority-set"},
|
||||
"opendiscord:priority-get":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,priority:ODPriorityLevel},workers:"opendiscord:priority-get"},
|
||||
"opendiscord:transfer-message":{source:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,oldCreator:discord.User,newCreator:discord.User,reason:string|null},workers:"opendiscord:transfer-message"},
|
||||
}
|
||||
|
||||
/**## ODMessageManager_Default `default_class`
|
||||
|
||||
@@ -183,14 +183,8 @@ export class ODCheckerRenderer_Default extends ODCheckerRenderer {
|
||||
return finalComponents
|
||||
}
|
||||
/**Get the length of the longest string in the array. */
|
||||
#getLongestLength(text:string[]): number {
|
||||
let finalLength = 0
|
||||
text.forEach((t) => {
|
||||
const l = ansis.strip(t).length
|
||||
if (l > finalLength) finalLength = l
|
||||
})
|
||||
|
||||
return finalLength
|
||||
#getLongestLength(texts:string[]): number {
|
||||
return Math.max(...texts.map((t) => ansis.strip(t).length))
|
||||
}
|
||||
/**Get a horizontal divider used between different parts of the config checker result. */
|
||||
#getHorizontalDivider(width:number): string {
|
||||
@@ -247,9 +241,18 @@ export type ODCheckerTranslationRegisterMessageIds_Default = (
|
||||
"opendiscord:string-starts-with"|
|
||||
"opendiscord:string-ends-with"|
|
||||
"opendiscord:string-contains"|
|
||||
"opendiscord:string-inverted-contains"|
|
||||
"opendiscord:string-choices"|
|
||||
"opendiscord:string-lowercase"|
|
||||
"opendiscord:string-uppercase"|
|
||||
"opendiscord:string-special-characters"|
|
||||
"opendiscord:string-no-spaces"|
|
||||
"opendiscord:string-regex"|
|
||||
"opendiscord:string-capital-word"|
|
||||
"opendiscord:string-capital-sentence"|
|
||||
"opendiscord:string-punctuation"|
|
||||
|
||||
"opendiscord:number-nan"|
|
||||
"opendiscord:number-too-short"|
|
||||
"opendiscord:number-too-long"|
|
||||
"opendiscord:number-length-invalid"|
|
||||
@@ -261,6 +264,7 @@ export type ODCheckerTranslationRegisterMessageIds_Default = (
|
||||
"opendiscord:number-starts-with"|
|
||||
"opendiscord:number-ends-with"|
|
||||
"opendiscord:number-contains"|
|
||||
"opendiscord:number-inverted-contains"|
|
||||
"opendiscord:number-choices"|
|
||||
"opendiscord:number-float"|
|
||||
"opendiscord:number-negative"|
|
||||
|
||||
@@ -2,7 +2,17 @@
|
||||
//DEFAULT CLIENT MODULE
|
||||
///////////////////////////////////////
|
||||
import { ODValidId } from "../modules/base"
|
||||
import { ODClientManager, ODSlashCommand, ODTextCommand, ODSlashCommandManager, ODTextCommandManager, ODSlashCommandInteractionCallback, ODTextCommandInteractionCallback } from "../modules/client"
|
||||
import { ODClientManager, ODSlashCommand, ODTextCommand, ODSlashCommandManager, ODTextCommandManager, ODSlashCommandInteractionCallback, ODTextCommandInteractionCallback, ODContextMenu, ODContextMenuManager, ODContextMenuInteractionCallback } from "../modules/client"
|
||||
|
||||
/** (CONTRIBUTOR GUIDE) HOW TO ADD NEW COMMANDS?
|
||||
* - Register the command in loadAllSlashCommands() & loadAllTextCommands() in (./src/data/framework/commandLoader.ts)
|
||||
* - Add autocomplete for the command in OD(Slash/Text)CommandManagerIds_Default in (./src/core/api/defaults/client.ts)
|
||||
* - Add the command to the help menu in (./src/data/framework/helpMenuLoader.ts)
|
||||
* - If required, new config variables should be added (incl. logs, dm-logs & permissions).
|
||||
* - Update the Open Ticket Documentation.
|
||||
* - If the command contains complex logic or can be executed from a button/dropdown, it should be placed inside an `ODAction`.
|
||||
* - Check all files, test the bot carefully & try a lot of different scenario's with different settings.
|
||||
*/
|
||||
|
||||
/**## ODClientManager_Default `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODClientManager class.
|
||||
@@ -13,6 +23,7 @@ import { ODClientManager, ODSlashCommand, ODTextCommand, ODSlashCommandManager,
|
||||
export class ODClientManager_Default extends ODClientManager {
|
||||
declare slashCommands: ODSlashCommandManager_Default
|
||||
declare textCommands: ODTextCommandManager_Default
|
||||
declare contextMenus: ODContextMenuManager_Default
|
||||
}
|
||||
|
||||
/**## ODSlashCommandManagerIds_Default `interface`
|
||||
@@ -39,6 +50,9 @@ export interface ODSlashCommandManagerIds_Default {
|
||||
"opendiscord:clear":ODSlashCommand,
|
||||
"opendiscord:autoclose":ODSlashCommand,
|
||||
"opendiscord:autodelete":ODSlashCommand,
|
||||
"opendiscord:topic":ODSlashCommand,
|
||||
"opendiscord:priority":ODSlashCommand,
|
||||
"opendiscord:transfer":ODSlashCommand,
|
||||
}
|
||||
|
||||
/**## ODSlashCommandManager_Default `default_class`
|
||||
@@ -108,7 +122,11 @@ export interface ODTextCommandManagerIds_Default {
|
||||
"opendiscord:autoclose-disable":ODTextCommand,
|
||||
"opendiscord:autoclose-enable":ODTextCommand,
|
||||
"opendiscord:autodelete-disable":ODTextCommand,
|
||||
"opendiscord:autodelete-enable":ODTextCommand
|
||||
"opendiscord:autodelete-enable":ODTextCommand,
|
||||
"opendiscord:topic-set":ODTextCommand,
|
||||
"opendiscord:priority-set":ODTextCommand,
|
||||
"opendiscord:priority-get":ODTextCommand,
|
||||
"opendiscord:transfer":ODTextCommand,
|
||||
}
|
||||
|
||||
/**## ODTextCommandManager_Default `default_class`
|
||||
@@ -143,3 +161,47 @@ export class ODTextCommandManager_Default extends ODTextCommandManager {
|
||||
return super.onInteraction(commandPrefix,commandName,callback)
|
||||
}
|
||||
}
|
||||
|
||||
/**## ODContextMenuManagerIds_Default `interface`
|
||||
* This interface is a list of ids available in the `ODContextMenuManager_Default` class.
|
||||
* It's used to generate typescript declarations for this class.
|
||||
*/
|
||||
export interface ODContextMenuManagerIds_Default {
|
||||
//"opendiscord:test-menu":ODContextMenu
|
||||
}
|
||||
|
||||
/**## ODContextMenuManager_Default `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODContextMenuManager class.
|
||||
* It doesn't add any extra features!
|
||||
*
|
||||
* This default class is made for the global variable `opendiscord.client.contextMenus`!
|
||||
*/
|
||||
export class ODContextMenuManager_Default extends ODContextMenuManager {
|
||||
get<ContextMenuId extends keyof ODContextMenuManagerIds_Default>(id:ContextMenuId): ODContextMenuManagerIds_Default[ContextMenuId]
|
||||
get(id:ODValidId): ODContextMenu|null
|
||||
|
||||
get(id:ODValidId): ODContextMenu|null {
|
||||
return super.get(id)
|
||||
}
|
||||
|
||||
remove<ContextMenuId extends keyof ODContextMenuManagerIds_Default>(id:ContextMenuId): ODContextMenuManagerIds_Default[ContextMenuId]
|
||||
remove(id:ODValidId): ODContextMenu|null
|
||||
|
||||
remove(id:ODValidId): ODContextMenu|null {
|
||||
return super.remove(id)
|
||||
}
|
||||
|
||||
exists(id:keyof ODContextMenuManagerIds_Default): boolean
|
||||
exists(id:ODValidId): boolean
|
||||
|
||||
exists(id:ODValidId): boolean {
|
||||
return super.exists(id)
|
||||
}
|
||||
|
||||
onInteraction(menuName:keyof ODContextMenuManagerIds_Default, callback:ODContextMenuInteractionCallback): void
|
||||
onInteraction(menuName:string|RegExp, callback:ODContextMenuInteractionCallback): void
|
||||
|
||||
onInteraction(menuName:string|RegExp, callback:ODContextMenuInteractionCallback): void {
|
||||
return super.onInteraction(menuName,callback)
|
||||
}
|
||||
}
|
||||
+167
-69
@@ -4,18 +4,38 @@
|
||||
import { ODValidButtonColor, ODValidId } from "../modules/base"
|
||||
import * as discord from "discord.js"
|
||||
import { ODConfigManager, ODConfig, ODJsonConfig } from "../modules/config"
|
||||
import { ODClientActivityStatus, ODClientActivityType } from "../modules/client"
|
||||
import { ODClientActivityMode, ODClientActivityType } from "../modules/client"
|
||||
import { ODRoleUpdateMode } from "../openticket/role"
|
||||
|
||||
/** (CONTRIBUTOR GUIDE) HOW TO ADD NEW CONFIG VARIABLES?
|
||||
* - Make the change to the config file in (./config/) and be aware of the following things:
|
||||
* - The variable has a clear name and its function is obvious.
|
||||
* - The variable is in the correct position/category of the config.
|
||||
* - The variable contains a default placeholder to suggest the contents.
|
||||
* - If there's a (./devconfig/), also modify this file.
|
||||
* - Register the config in loadAllConfigs() in (./src/data/framework/configLoader.ts)
|
||||
* - The variable should be added to the "formatters" in the correct position.
|
||||
* - Add autocomplete for the variable in ODJsonConfig_Default... in (./src/core/api/defaults/config.ts)
|
||||
* - Add the variable to the config checker in (./src/data/framework/checkerLoader.ts)
|
||||
* - Make sure the variable is compatible with the Interactive Setup CLI.
|
||||
* - The variable should be added by the migration manager (./src/core/startup/migration.ts) when missing.
|
||||
* - Update the Open Ticket Documentation.
|
||||
*
|
||||
* IF VARIABLE IS FROM questions.json, options.json OR panels.json:
|
||||
* - Check (./src/data/openticket/...) for loading/unloading of data.
|
||||
* - Check (./src/actions/createTicket.ts) and related files.
|
||||
* - Check (./src/builders), (./src/actions), (./src/data) & (./src/commands) in general in the areas that were changed.
|
||||
*/
|
||||
|
||||
/**## ODConfigManagerIds_Default `interface`
|
||||
* This interface is a list of ids available in the `ODConfigManager_Default` class.
|
||||
* It's used to generate typescript declarations for this class.
|
||||
*/
|
||||
export interface ODConfigManagerIds_Default {
|
||||
"opendiscord:general":ODJsonConfig_DefaultGeneral,
|
||||
"opendiscord:questions":ODJsonConfig_DefaultQuestions,
|
||||
"opendiscord:options":ODJsonConfig_DefaultOptions,
|
||||
"opendiscord:panels":ODJsonConfig_DefaultPanels,
|
||||
"opendiscord:questions":ODJsonConfig_DefaultQuestions,
|
||||
"opendiscord:transcripts":ODJsonConfig_DefaultTranscripts
|
||||
}
|
||||
|
||||
@@ -56,10 +76,12 @@ export interface ODJsonConfig_DefaultStatusType {
|
||||
enabled:boolean,
|
||||
/**The type of status (e.g. playing, listening, custom, ...) */
|
||||
type:Exclude<ODClientActivityType,false>,
|
||||
/**The mode/status of the bot (e.g. online, invisible, idle, do not disturb) */
|
||||
mode:ODClientActivityMode
|
||||
/**The text for the status. */
|
||||
text:string,
|
||||
/**The status of the bot (e.g. online, invisible, idle, do not disturb) */
|
||||
status:ODClientActivityStatus
|
||||
/**Additional text for the status. (visible below 'text') */
|
||||
state:string,
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultMessageSettingsType `interface`
|
||||
@@ -111,6 +133,30 @@ export interface ODJsonConfig_DefaultSystemLimits {
|
||||
userMaximum:number
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultSystemChannelTopic `interface`
|
||||
* All global channel topic settings.
|
||||
*/
|
||||
export interface ODJsonConfig_DefaultSystemChannelTopic {
|
||||
/**Show the option name in the channel topic. */
|
||||
showOptionName:boolean,
|
||||
/**Show the option description in the channel topic. */
|
||||
showOptionDescription:boolean,
|
||||
/**Show the option topic text in the channel topic (configured in the options config). */
|
||||
showOptionTopic:boolean,
|
||||
/**Show the current priority in the channel topic (auto-updated). */
|
||||
showPriority:boolean,
|
||||
/**Show the current close/reopen status in the channel topic (auto-updated). */
|
||||
showClosed:boolean,
|
||||
/**Show the current claim status in the channel topic (auto-updated). */
|
||||
showClaimed:boolean,
|
||||
/**Show the current pin status in the channel topic (auto-updated). */
|
||||
showPinned:boolean,
|
||||
/**Show the creator of the ticket in the channel topic (auto-updated on transfer). */
|
||||
showCreator:boolean,
|
||||
/**Show the first 5 participants of the ticket in the channel topic (auto-updated). */
|
||||
showParticipants:boolean
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultSystemPermissions `interface`
|
||||
* Configure permissions for all Open Ticket commands & actions.
|
||||
*/
|
||||
@@ -133,7 +179,10 @@ export interface ODJsonConfig_DefaultSystemPermissions {
|
||||
stats:ODJsonConfig_DefaultCmdPermissionSettingsType,
|
||||
clear:ODJsonConfig_DefaultCmdPermissionSettingsType,
|
||||
autoclose:ODJsonConfig_DefaultCmdPermissionSettingsType,
|
||||
autodelete:ODJsonConfig_DefaultCmdPermissionSettingsType
|
||||
autodelete:ODJsonConfig_DefaultCmdPermissionSettingsType,
|
||||
transfer:ODJsonConfig_DefaultCmdPermissionSettingsType,
|
||||
topic:ODJsonConfig_DefaultCmdPermissionSettingsType,
|
||||
priority:ODJsonConfig_DefaultCmdPermissionSettingsType,
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultSystemMessages `interface`
|
||||
@@ -151,34 +200,59 @@ export interface ODJsonConfig_DefaultSystemMessages {
|
||||
renaming:ODJsonConfig_DefaultMessageSettingsType,
|
||||
moving:ODJsonConfig_DefaultMessageSettingsType,
|
||||
blacklisting:ODJsonConfig_DefaultMessageSettingsType,
|
||||
roleAdding:ODJsonConfig_DefaultMessageSettingsType,
|
||||
roleRemoving:ODJsonConfig_DefaultMessageSettingsType
|
||||
transferring:ODJsonConfig_DefaultMessageSettingsType,
|
||||
topicChange:ODJsonConfig_DefaultMessageSettingsType,
|
||||
priorityChange:ODJsonConfig_DefaultMessageSettingsType,
|
||||
reactionRole:ODJsonConfig_DefaultMessageSettingsType,
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultSystem `interface`
|
||||
* All settings related to the ticket system.
|
||||
*/
|
||||
export interface ODJsonConfig_DefaultSystem {
|
||||
/**Remove all participants (except admins) from the ticket when it's closed. */
|
||||
removeParticipantsOnClose:boolean,
|
||||
/**Reply with an ephemeral message when a ticket is created. */
|
||||
replyOnTicketCreation:boolean,
|
||||
/**Reply with an ephemeral message when reaction roles are changed. */
|
||||
replyOnReactionRole:boolean,
|
||||
/**Use a translated config checker in the console. */
|
||||
useTranslatedConfigChecker:boolean,
|
||||
/**Prefer slash-commands over text-commands when displaying them in menu's and messages. */
|
||||
preferSlashOverText:boolean,
|
||||
/**Reply with "unknown command" when the prefix is used without a valid command. */
|
||||
sendErrorOnUnknownCommand:boolean,
|
||||
/**Display the question fields (in a ticket message) in code blocks. */
|
||||
questionFieldsInCodeBlock:boolean,
|
||||
/**Display embed fields together with question fields (in a ticket message). */
|
||||
displayFieldsWithQuestions:boolean,
|
||||
/**Show global admins roles together with ticket admins in panel embeds. */
|
||||
showGlobalAdminsInPanelRoles:boolean,
|
||||
/**Disable the (✅❌) buttons and directly run the action. */
|
||||
disableVerifyBars:boolean,
|
||||
/**Display error embeds/messages with red instead of the default bot color. */
|
||||
useRedErrorEmbeds:boolean,
|
||||
/**Always show the reason field in embeds, even when there is no reason provided. */
|
||||
alwaysShowReason:boolean,
|
||||
/**The emoji style used in the bot. This will affect all embeds, titles & messages in the bot. */
|
||||
emojiStyle:"before"|"after"|"double"|"disabled",
|
||||
/**The emoji used when pinning tickets. This is '📌' by default. */
|
||||
pinEmoji:string,
|
||||
|
||||
/**Reply with an ephemeral message when a ticket is created. */
|
||||
replyOnTicketCreation:boolean,
|
||||
/**Reply with an ephemeral message when reaction roles are changed. */
|
||||
replyOnReactionRole:boolean,
|
||||
/**Ask for the priority of this ticket on ticket creation. This will happen in a dropdown in the ticket message. */
|
||||
askPriorityOnTicketCreation:boolean,
|
||||
/**Remove all participants (except admins) from the ticket when it's closed. */
|
||||
removeParticipantsOnClose:boolean,
|
||||
/**Disable autoclose for a ticket when it has been closed and re-opened. */
|
||||
disableAutocloseAfterReopen:boolean,
|
||||
/**Only allow autodelete when the ticket is already closed. */
|
||||
autodeleteRequiresClosedTicket:boolean,
|
||||
/**When enabled, only global admins are able to delete a ticket without transcript. */
|
||||
adminOnlyDeleteWithoutTranscript:boolean,
|
||||
/**Only allow ticket closing when at least 1 message has been sent by the creator. (admins are able to bypass) */
|
||||
allowCloseBeforeMessage:boolean,
|
||||
/**Only allow ticket closing when at least 1 message has been sent by a global or ticket admin. (admins are able to bypass) */
|
||||
allowCloseBeforeAdminMessage:boolean,
|
||||
/**Use a translated config checker in the console. */
|
||||
useTranslatedConfigChecker:boolean,
|
||||
/**Pin the (first) ticket message in the channel. This simulates old behaviour like Open Ticket v1, v2 & v3. */
|
||||
pinFirstTicketMessage:boolean,
|
||||
|
||||
/**Enable/disable the ticket claim & unclaim button in the ticket message. */
|
||||
enableTicketClaimButtons:boolean,
|
||||
@@ -199,6 +273,9 @@ export interface ODJsonConfig_DefaultSystem {
|
||||
/**All settings related to global ticket limits. */
|
||||
limits:ODJsonConfig_DefaultSystemLimits,
|
||||
|
||||
/**All global channel topic settings. */
|
||||
channelTopic:ODJsonConfig_DefaultSystemChannelTopic,
|
||||
|
||||
/**Configure permissions for all Open Ticket commands & actions. */
|
||||
permissions:ODJsonConfig_DefaultSystemPermissions,
|
||||
|
||||
@@ -219,7 +296,7 @@ export interface ODJsonConfig_DefaultGeneralData {
|
||||
tokenFromENV:boolean,
|
||||
|
||||
/**The main (hex) color used in almost every embed in the bot. */
|
||||
mainColor:discord.ColorResolvable,
|
||||
mainColor:discord.ColorResolvable|string,
|
||||
/**The language to use. Can be the id of the language or the id without the prefix when using `opendiscord:...`. */
|
||||
language:string,
|
||||
/**The prefix used in all text-commands. */
|
||||
@@ -295,7 +372,7 @@ export interface ODJsonConfig_DefaultOptionEmbedSettingsType {
|
||||
/**The description of this embed. */
|
||||
description:string,
|
||||
/**A custom color for this embed. (The default bot color is used when empty) */
|
||||
customColor:discord.ColorResolvable,
|
||||
customColor:discord.ColorResolvable|string,
|
||||
|
||||
/**A URL to an image displayed in the embed. */
|
||||
image:string,
|
||||
@@ -332,7 +409,7 @@ export interface ODJsonConfig_DefaultOptionTicketChannelType {
|
||||
/**The prefix used in the name of this ticket channel. */
|
||||
prefix:string,
|
||||
/**The type of suffix used in the name of this ticket channel. */
|
||||
suffix:"user-name"|"user-id"|"random-number"|"random-hex"|"counter-dynamic"|"counter-fixed",
|
||||
suffix:"user-name"|"user-nickname"|"user-id"|"random-number"|"random-hex"|"counter-dynamic"|"counter-fixed",
|
||||
/**An optional discord category id to create this ticket in. */
|
||||
category:string,
|
||||
/**An optional discord category id to move this ticket to when closed. */
|
||||
@@ -346,8 +423,8 @@ export interface ODJsonConfig_DefaultOptionTicketChannelType {
|
||||
/**The category to move the ticket to when claimed by this user. */
|
||||
category:string
|
||||
}[],
|
||||
/**The channel description/topic shown at the top of the channel in discord. */
|
||||
description:string
|
||||
/**The channel topic shown at the top of the channel in discord. */
|
||||
topic:string
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultOptionTicketType `interface`
|
||||
@@ -408,14 +485,14 @@ export interface ODJsonConfig_DefaultOptionTicketType extends ODJsonConfig_Defau
|
||||
/**Disable autodeleting when the ticket is claimed by someone. */
|
||||
disableOnClaim:boolean
|
||||
},
|
||||
/**All settings related to the cooldown of this ticket type */
|
||||
/**All settings related to the cooldown of this ticket type. */
|
||||
cooldown:{
|
||||
/**Enable cooldown (per user) */
|
||||
enabled:boolean,
|
||||
/**The amount of minutes a user needs to wait before being able to create a ticket again. */
|
||||
cooldownMinutes:number
|
||||
},
|
||||
/**All settings related to the limits of this ticket type */
|
||||
/**All settings related to the limits of this ticket type. */
|
||||
limits:{
|
||||
/**Enable option ticket limits. */
|
||||
enabled:boolean,
|
||||
@@ -423,6 +500,13 @@ export interface ODJsonConfig_DefaultOptionTicketType extends ODJsonConfig_Defau
|
||||
globalMaximum:number,
|
||||
/**The maximum amount of tickets of this type that a user is allowed to create at the same time. */
|
||||
userMaximum:number
|
||||
},
|
||||
/**All settings related to the slow mode of this ticket type. */
|
||||
slowMode:{
|
||||
/**Enable channel slow mode. */
|
||||
enabled:boolean,
|
||||
/**The amount of seconds users need to wait between sending messages. */
|
||||
slowModeSeconds:number
|
||||
}
|
||||
}
|
||||
|
||||
@@ -451,6 +535,11 @@ export interface ODJsonConfig_DefaultOptionRoleType extends ODJsonConfig_Default
|
||||
addOnMemberJoin:boolean
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultOptionsData `type`
|
||||
* All contents of the `options.json` config file.
|
||||
*/
|
||||
export type ODJsonConfig_DefaultOptionsData = (ODJsonConfig_DefaultOptionTicketType|ODJsonConfig_DefaultOptionWebsiteType|ODJsonConfig_DefaultOptionRoleType)[]
|
||||
|
||||
/**## ODJsonConfig_DefaultOptions `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODJsonConfig class.
|
||||
* It doesn't add any extra features!
|
||||
@@ -458,11 +547,7 @@ export interface ODJsonConfig_DefaultOptionRoleType extends ODJsonConfig_Default
|
||||
* This default class is made for the `options.json` config!
|
||||
*/
|
||||
export class ODJsonConfig_DefaultOptions extends ODJsonConfig {
|
||||
declare data: (
|
||||
ODJsonConfig_DefaultOptionTicketType|
|
||||
ODJsonConfig_DefaultOptionWebsiteType|
|
||||
ODJsonConfig_DefaultOptionRoleType
|
||||
)[]
|
||||
declare data: ODJsonConfig_DefaultOptionsData
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultPanelEmbedSettingsType `interface`
|
||||
@@ -477,7 +562,7 @@ export interface ODJsonConfig_DefaultPanelEmbedSettingsType {
|
||||
description:string,
|
||||
|
||||
/**A custom color for this embed. (The default bot color is used when empty) */
|
||||
customColor:discord.ColorResolvable,
|
||||
customColor:discord.ColorResolvable|string,
|
||||
/**An optional URL used in the title of the embed. */
|
||||
url:string,
|
||||
|
||||
@@ -545,6 +630,11 @@ export interface ODJsonConfig_DefaultPanelType {
|
||||
settings:ODJsonConfig_DefaultPanelSettingsType
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultPanelsData `type`
|
||||
* All contents of the `panels.json` config file.
|
||||
*/
|
||||
export type ODJsonConfig_DefaultPanelsData = ODJsonConfig_DefaultPanelType[]
|
||||
|
||||
/**## ODJsonConfig_DefaultPanels `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODJsonConfig class.
|
||||
* It doesn't add any extra features!
|
||||
@@ -552,7 +642,7 @@ export interface ODJsonConfig_DefaultPanelType {
|
||||
* This default class is made for the `panels.json` config!
|
||||
*/
|
||||
export class ODJsonConfig_DefaultPanels extends ODJsonConfig {
|
||||
declare data: ODJsonConfig_DefaultPanelType[]
|
||||
declare data: ODJsonConfig_DefaultPanelsData
|
||||
}
|
||||
|
||||
/**## ODJSonConfig_DefaultQuestionLengthSettings `interface`
|
||||
@@ -605,6 +695,11 @@ export interface ODJsonConfig_DefaultParagraphQuestionType {
|
||||
length:ODJSonConfig_DefaultQuestionLengthSettings
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultQuestionsData `type`
|
||||
* All contents of the `questions.json` config file.
|
||||
*/
|
||||
export type ODJsonConfig_DefaultQuestionsData = (ODJsonConfig_DefaultShortQuestionType|ODJsonConfig_DefaultParagraphQuestionType)[]
|
||||
|
||||
/**## ODJsonConfig_DefaultQuestions `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODJsonConfig class.
|
||||
* It doesn't add any extra features!
|
||||
@@ -612,10 +707,7 @@ export interface ODJsonConfig_DefaultParagraphQuestionType {
|
||||
* This default class is made for the `questions.json` config!
|
||||
*/
|
||||
export class ODJsonConfig_DefaultQuestions extends ODJsonConfig {
|
||||
declare data: (
|
||||
ODJsonConfig_DefaultShortQuestionType|
|
||||
ODJsonConfig_DefaultParagraphQuestionType
|
||||
)[]
|
||||
declare data: ODJsonConfig_DefaultQuestionsData
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultTranscriptsTextLayout `interface`
|
||||
@@ -689,6 +781,47 @@ export interface ODJsonConfig_DefaultTranscriptsHtmlLayout {
|
||||
}
|
||||
}
|
||||
|
||||
/**## ODJsonConfig_DefaultTranscriptsData `interface`
|
||||
* All contents of the `transcripts.json` config file.
|
||||
*/
|
||||
export interface ODJsonConfig_DefaultTranscriptsData {
|
||||
/**All general settings related to transcripts. */
|
||||
general:{
|
||||
/**Are transcripts enabled? */
|
||||
enabled:boolean,
|
||||
|
||||
/**Enable sending the generated transcript in a channel. */
|
||||
enableChannel:boolean,
|
||||
/**Enable sending the generated transcript to the DM of the ticket creator. */
|
||||
enableCreatorDM:boolean,
|
||||
/**Enable sending the generated transcript to the DM of the participants. */
|
||||
enableParticipantDM:boolean,
|
||||
/**Enable sending the generated transcript to the DM of all admins which were active in the ticket. */
|
||||
enableActiveAdminDM:boolean,
|
||||
/**Enable sending the generated transcript to the DM of all admins which were assigned to the ticket. */
|
||||
enableEveryAdminDM:boolean,
|
||||
|
||||
/**A discord channel id for the `"enableChannel"` setting. */
|
||||
channel:string,
|
||||
/**Want to use text or HTML transcripts? */
|
||||
mode:"html"|"text"
|
||||
},
|
||||
/**All settings related to the embed from the transcripts. (UNIMPLEMENTED!!) */
|
||||
embedSettings:{
|
||||
/**Unimplemented feature */
|
||||
customColor:discord.ColorResolvable|string,
|
||||
/**Unimplemented feature */
|
||||
listAllParticipants:boolean,
|
||||
/**Unimplemented feature */
|
||||
includeTicketStats:boolean
|
||||
},
|
||||
/**The layout of the text transcripts. */
|
||||
textTranscriptStyle:ODJsonConfig_DefaultTranscriptsTextLayout,
|
||||
/**The layout of the HTML transcripts. */
|
||||
htmlTranscriptStyle:ODJsonConfig_DefaultTranscriptsHtmlLayout
|
||||
}
|
||||
|
||||
|
||||
/**## ODJsonConfig_DefaultTranscripts `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODJsonConfig class.
|
||||
* It doesn't add any extra features!
|
||||
@@ -696,40 +829,5 @@ export interface ODJsonConfig_DefaultTranscriptsHtmlLayout {
|
||||
* This default class is made for the `transcripts.json` config!
|
||||
*/
|
||||
export class ODJsonConfig_DefaultTranscripts extends ODJsonConfig {
|
||||
declare data: {
|
||||
/**All general settings related to transcripts. */
|
||||
general:{
|
||||
/**Are transcripts enabled? */
|
||||
enabled:boolean,
|
||||
|
||||
/**Enable sending the generated transcript in a channel. */
|
||||
enableChannel:boolean,
|
||||
/**Enable sending the generated transcript to the DM of the ticket creator. */
|
||||
enableCreatorDM:boolean,
|
||||
/**Enable sending the generated transcript to the DM of the participants. */
|
||||
enableParticipantDM:boolean,
|
||||
/**Enable sending the generated transcript to the DM of all admins which were active in the ticket. */
|
||||
enableActiveAdminDM:boolean,
|
||||
/**Enable sending the generated transcript to the DM of all admins which were assigned to the ticket. */
|
||||
enableEveryAdminDM:boolean,
|
||||
|
||||
/**A discord channel id for the `"enableChannel"` setting. */
|
||||
channel:string,
|
||||
/**Want to use text or HTML transcripts? */
|
||||
mode:"html"|"text"
|
||||
},
|
||||
/**All settings related to the embed from the transcripts. (UNIMPLEMENTED!!) */
|
||||
embedSettings:{
|
||||
/**Unimplemented feature */
|
||||
customColor:discord.ColorResolvable,
|
||||
/**Unimplemented feature */
|
||||
listAllParticipants:boolean,
|
||||
/**Unimplemented feature */
|
||||
includeTicketStats:boolean
|
||||
},
|
||||
/**The layout of the text transcripts. */
|
||||
textTranscriptStyle:ODJsonConfig_DefaultTranscriptsTextLayout,
|
||||
/**The layout of the HTML transcripts. */
|
||||
htmlTranscriptStyle:ODJsonConfig_DefaultTranscriptsHtmlLayout
|
||||
}
|
||||
declare data: ODJsonConfig_DefaultTranscriptsData
|
||||
}
|
||||
@@ -19,9 +19,9 @@ import { ODFlagManager_Default } from "./flag"
|
||||
import { ODSessionManager_Default } from "./session"
|
||||
import { ODLanguageManager_Default } from "./language"
|
||||
import { ODCheckerFunctionManager_Default, ODCheckerManager_Default, ODCheckerRenderer_Default, ODCheckerTranslationRegister_Default } from "./checker"
|
||||
import { ODClientManager_Default, ODSlashCommandManager_Default, ODTextCommandManager_Default } from "./client"
|
||||
import { ODClientManager_Default, ODContextMenuManager_Default, ODSlashCommandManager_Default, ODTextCommandManager_Default } from "./client"
|
||||
import { ODBuilderManager_Default, ODButtonManager_Default, ODDropdownManager_Default, ODEmbedManager_Default, ODFileManager_Default, ODMessageManager_Default, ODModalManager_Default } from "./builder"
|
||||
import { ODButtonResponderManager_Default, ODCommandResponderManager_Default, ODDropdownResponderManager_Default, ODModalResponderManager_Default, ODResponderManager_Default } from "./responder"
|
||||
import { ODAutocompleteResponderManager_Default, ODButtonResponderManager_Default, ODCommandResponderManager_Default, ODContextMenuResponderManager_Default, ODDropdownResponderManager_Default, ODModalResponderManager_Default, ODResponderManager_Default } from "./responder"
|
||||
import { ODActionManager_Default } from "./action"
|
||||
import { ODPermissionManager_Default } from "./permission"
|
||||
import { ODHelpMenuManager_Default } from "./helpmenu"
|
||||
@@ -42,6 +42,7 @@ import { ODQuestionManager } from "../openticket/question"
|
||||
import { ODBlacklistManager } from "../openticket/blacklist"
|
||||
import { ODTranscriptManager_Default } from "../openticket/transcript"
|
||||
import { ODRole, ODRoleManager } from "../openticket/role"
|
||||
import { ODPriorityLevel, ODPriorityManager_Default } from "../openticket/priority"
|
||||
|
||||
/**## ODEventIds_Default `interface`
|
||||
* This interface is a list of ids available in the `ODEvent_Default` class.
|
||||
@@ -122,12 +123,22 @@ export interface ODEventIds_Default {
|
||||
"onClientActivityInit": ODEvent_Default<(activity:ODClientActivityManager, client:ODClientManager_Default) => ODPromiseVoid>
|
||||
"afterClientActivityInitiated": ODEvent_Default<(activity:ODClientActivityManager, client:ODClientManager_Default) => ODPromiseVoid>
|
||||
|
||||
//priority levels
|
||||
"onPriorityLoad": ODEvent_Default<(priorities:ODPriorityManager_Default) => ODPromiseVoid>
|
||||
"afterPrioritiesLoaded": ODEvent_Default<(priorities:ODPriorityManager_Default) => ODPromiseVoid>
|
||||
|
||||
//client slash commands
|
||||
"onSlashCommandLoad": ODEvent_Default<(slash:ODSlashCommandManager_Default, client:ODClientManager_Default) => ODPromiseVoid>
|
||||
"afterSlashCommandsLoaded": ODEvent_Default<(slash:ODSlashCommandManager_Default, client:ODClientManager_Default) => ODPromiseVoid>
|
||||
"onSlashCommandRegister": ODEvent_Default<(slash:ODSlashCommandManager_Default, client:ODClientManager_Default) => ODPromiseVoid>
|
||||
"afterSlashCommandsRegistered": ODEvent_Default<(slash:ODSlashCommandManager_Default, client:ODClientManager_Default) => ODPromiseVoid>
|
||||
|
||||
//client context menus
|
||||
"onContextMenuLoad": ODEvent_Default<(menu:ODContextMenuManager_Default, client:ODClientManager_Default) => ODPromiseVoid>
|
||||
"afterContextMenusLoaded": ODEvent_Default<(menu:ODContextMenuManager_Default, client:ODClientManager_Default) => ODPromiseVoid>
|
||||
"onContextMenuRegister": ODEvent_Default<(menu:ODContextMenuManager_Default, client:ODClientManager_Default) => ODPromiseVoid>
|
||||
"afterContextMenusRegistered": ODEvent_Default<(menu:ODContextMenuManager_Default, client:ODClientManager_Default) => ODPromiseVoid>
|
||||
|
||||
//client text commands
|
||||
"onTextCommandLoad": ODEvent_Default<(text:ODTextCommandManager_Default, client:ODClientManager_Default,) => ODPromiseVoid>
|
||||
"afterTextCommandsLoaded": ODEvent_Default<(text:ODTextCommandManager_Default, client:ODClientManager_Default) => ODPromiseVoid>
|
||||
@@ -191,6 +202,12 @@ export interface ODEventIds_Default {
|
||||
"afterTicketRenamed": ODEvent_Default<(ticket:ODTicket, renamer:discord.User, channel:discord.GuildTextBasedChannel, reason:string|null) => ODPromiseVoid>
|
||||
"onTicketsClear": ODEvent_Default<(tickets:ODTicket[], clearer:discord.User, channel:discord.GuildTextBasedChannel, filter:ODTicketClearFilter) => ODPromiseVoid>
|
||||
"afterTicketsCleared": ODEvent_Default<(tickets:ODTicket[], clearer:discord.User, channel:discord.GuildTextBasedChannel, filter:ODTicketClearFilter) => ODPromiseVoid>
|
||||
"onTicketTopicChange": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldTopic:string, newTopic:string) => ODPromiseVoid>
|
||||
"afterTicketTopicChanged": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldTopic:string, newTopic:string) => ODPromiseVoid>
|
||||
"onTicketPriorityChange": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldPriority:ODPriorityLevel, newPriority:ODPriorityLevel, reason:string|null) => ODPromiseVoid>
|
||||
"afterTicketPriorityChanged": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldPriority:ODPriorityLevel, newPriority:ODPriorityLevel, reason:string|null) => ODPromiseVoid>
|
||||
"onTicketTransfer": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldCreator:discord.User, newCreator:discord.User, reason:string|null) => ODPromiseVoid>
|
||||
"afterTicketTransferred": ODEvent_Default<(ticket:ODTicket, changer:discord.User, channel:discord.GuildTextBasedChannel, oldCreator:discord.User, newCreator:discord.User, reason:string|null) => ODPromiseVoid>
|
||||
|
||||
//roles
|
||||
"onRoleLoad": ODEvent_Default<(roles:ODRoleManager) => ODPromiseVoid>
|
||||
@@ -249,6 +266,10 @@ export interface ODEventIds_Default {
|
||||
"afterDropdownRespondersLoaded": ODEvent_Default<(dropdowns:ODDropdownResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => ODPromiseVoid>
|
||||
"onModalResponderLoad": ODEvent_Default<(modals:ODModalResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => ODPromiseVoid>
|
||||
"afterModalRespondersLoaded": ODEvent_Default<(modals:ODModalResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => ODPromiseVoid>
|
||||
"onContextMenuResponderLoad": ODEvent_Default<(menus:ODContextMenuResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => ODPromiseVoid>
|
||||
"afterContextMenuRespondersLoaded": ODEvent_Default<(menus:ODContextMenuResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => ODPromiseVoid>
|
||||
"onAutocompleteResponderLoad": ODEvent_Default<(autocomplete:ODAutocompleteResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => ODPromiseVoid>
|
||||
"afterAutocompleteRespondersLoaded": ODEvent_Default<(autocomplete:ODAutocompleteResponderManager_Default, responders:ODResponderManager_Default, actions:ODActionManager_Default) => ODPromiseVoid>
|
||||
|
||||
//plugin loading before finalizations
|
||||
"onPluginBeforeFinalizationLoad": ODEvent_Default<() => ODPromiseVoid>,
|
||||
|
||||
@@ -23,6 +23,8 @@ export interface ODFlagManagerIds_Default {
|
||||
"opendiscord:force-slash-update":ODFlag,
|
||||
"opendiscord:no-compile":ODFlag,
|
||||
"opendiscord:compile-only":ODFlag,
|
||||
"opendiscord:silent":ODFlag,
|
||||
"opendiscord:cli":ODFlag,
|
||||
}
|
||||
|
||||
/**## ODFlagManager_Default `default_class`
|
||||
|
||||
@@ -4,6 +4,16 @@
|
||||
import { ODValidId } from "../modules/base"
|
||||
import { ODHelpMenuCategory, ODHelpMenuCommandComponent, ODHelpMenuComponent, ODHelpMenuManager } from "../modules/helpmenu"
|
||||
|
||||
/** (CONTRIBUTOR GUIDE) HOW TO ADD NEW COMMANDS?
|
||||
* - Register the command in loadAllSlashCommands() & loadAllTextCommands() in (./src/data/framework/commandLoader.ts)
|
||||
* - Add autocomplete for the command in OD(Slash/Text)CommandManagerIds_Default in (./src/core/api/defaults/client.ts)
|
||||
* - Add the command to the help menu in (./src/data/framework/helpMenuLoader.ts)
|
||||
* - If required, new config variables should be added (incl. logs, dm-logs & permissions).
|
||||
* - Update the Open Ticket Documentation.
|
||||
* - If the command contains complex logic or can be executed from a button/dropdown, it should be placed inside an `ODAction`.
|
||||
* - Check all files, test the bot carefully & try a lot of different scenario's with different settings.
|
||||
*/
|
||||
|
||||
/**## ODHelpMenuManagerIds_Default `interface`
|
||||
* This interface is a list of ids available in the `ODHelpMenuManager_Default` class.
|
||||
* It's used to generate typescript declarations for this class.
|
||||
@@ -172,7 +182,8 @@ export interface ODHelpMenuManagerCategoryIds_DefaultTicketUser {
|
||||
"opendiscord:claim":ODHelpMenuCommandComponent,
|
||||
"opendiscord:unclaim":ODHelpMenuCommandComponent,
|
||||
"opendiscord:add":ODHelpMenuCommandComponent,
|
||||
"opendiscord:remove":ODHelpMenuCommandComponent
|
||||
"opendiscord:remove":ODHelpMenuCommandComponent,
|
||||
"opendiscord:transfer":ODHelpMenuCommandComponent,
|
||||
}
|
||||
|
||||
/**## ODHelpMenuCategory_DefaultTicketUser `default_class`
|
||||
@@ -255,7 +266,11 @@ export interface ODHelpMenuManagerCategoryIds_DefaultAdvanced {
|
||||
"opendiscord:stats-ticket":ODHelpMenuCommandComponent,
|
||||
"opendiscord:stats-user":ODHelpMenuCommandComponent,
|
||||
"opendiscord:autoclose-disable":ODHelpMenuCommandComponent,
|
||||
"opendiscord:autoclose-enable":ODHelpMenuCommandComponent
|
||||
"opendiscord:autoclose-enable":ODHelpMenuCommandComponent,
|
||||
"opendiscord:autodelete-disable":ODHelpMenuCommandComponent,
|
||||
"opendiscord:autodelete-enable":ODHelpMenuCommandComponent,
|
||||
"opendiscord:topic-set":ODHelpMenuCommandComponent,
|
||||
"opendiscord:priority-set":ODHelpMenuCommandComponent,
|
||||
}
|
||||
|
||||
/**## ODHelpMenuCategory_DefaultAdvanced `default_class`
|
||||
|
||||
@@ -4,6 +4,60 @@
|
||||
import { ODValidId } from "../modules/base"
|
||||
import { ODLanguageManager, ODLanguage } from "../modules/language"
|
||||
|
||||
/** (CONTRIBUTOR GUIDE) HOW TO ADD NEW LANGUAGES?
|
||||
* - Add the file to (./languages/) and make sure the metadata is valid.
|
||||
* - Register the language in loadAllLanguages() in (./src/data/framework/languageLoader.ts).
|
||||
* - Add autocomplete for the language in ODLanguageManagerIds_Default in (./src/core/api/defaults/language.ts).
|
||||
* - Update the language list in the README.md translator list.
|
||||
* - Update the 2 language counters in the README.md features list.
|
||||
* - Update the Open Ticket Documentation.
|
||||
*/
|
||||
|
||||
/**## ODLanguageManagerIds_Default `interface`
|
||||
* This interface is a list of ids available in the `ODLanguageManager_Default` class.
|
||||
* It's used to generate typescript declarations for this class.
|
||||
*/
|
||||
export interface ODLanguageManagerIds_Default {
|
||||
"opendiscord:custom":ODLanguage,
|
||||
"opendiscord:english":ODLanguage,
|
||||
"opendiscord:dutch":ODLanguage,
|
||||
"opendiscord:portuguese":ODLanguage,
|
||||
"opendiscord:czech":ODLanguage,
|
||||
"opendiscord:german":ODLanguage,
|
||||
"opendiscord:catalan":ODLanguage,
|
||||
"opendiscord:hungarian":ODLanguage,
|
||||
"opendiscord:spanish":ODLanguage,
|
||||
"opendiscord:romanian":ODLanguage,
|
||||
"opendiscord:ukrainian":ODLanguage,
|
||||
"opendiscord:indonesian":ODLanguage,
|
||||
"opendiscord:italian":ODLanguage,
|
||||
"opendiscord:estonian":ODLanguage,
|
||||
"opendiscord:finnish":ODLanguage,
|
||||
"opendiscord:danish":ODLanguage,
|
||||
"opendiscord:thai":ODLanguage,
|
||||
"opendiscord:turkish":ODLanguage,
|
||||
"opendiscord:french":ODLanguage,
|
||||
"opendiscord:arabic":ODLanguage,
|
||||
"opendiscord:hindi":ODLanguage,
|
||||
"opendiscord:lithuanian":ODLanguage,
|
||||
"opendiscord:polish":ODLanguage,
|
||||
"opendiscord:latvian":ODLanguage,
|
||||
"opendiscord:norwegian":ODLanguage,
|
||||
"opendiscord:russian":ODLanguage,
|
||||
"opendiscord:swedish":ODLanguage,
|
||||
"opendiscord:vietnamese":ODLanguage,
|
||||
"opendiscord:persian":ODLanguage,
|
||||
"opendiscord:bengali":ODLanguage,
|
||||
"opendiscord:greek":ODLanguage,
|
||||
"opendiscord:japanese":ODLanguage,
|
||||
"opendiscord:korean":ODLanguage,
|
||||
"opendiscord:kurdish":ODLanguage,
|
||||
"opendiscord:simplified-chinese":ODLanguage,
|
||||
"opendiscord:slovenian":ODLanguage,
|
||||
"opendiscord:tamil":ODLanguage,
|
||||
//ADD NEW LANGUAGES HERE!!!
|
||||
}
|
||||
|
||||
/**## ODLanguageManagerTranslations_Default `type`
|
||||
* This interface is a list of ids available in the `ODLanguageManager_Default` class.
|
||||
* It's used to generate typescript declarations for this class.
|
||||
@@ -22,6 +76,7 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"checker.system.dataPath"|
|
||||
"checker.system.dataDocs"|
|
||||
"checker.system.dataMessages"|
|
||||
|
||||
"checker.messages.invalidType"|
|
||||
"checker.messages.propertyMissing"|
|
||||
"checker.messages.propertyOptional"|
|
||||
@@ -29,6 +84,7 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"checker.messages.nullInvalid"|
|
||||
"checker.messages.switchInvalidType"|
|
||||
"checker.messages.objectSwitchInvalid"|
|
||||
|
||||
"checker.messages.stringTooShort"|
|
||||
"checker.messages.stringTooLong"|
|
||||
"checker.messages.stringLengthInvalid"|
|
||||
@@ -37,6 +93,15 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"checker.messages.stringContains"|
|
||||
"checker.messages.stringChoices"|
|
||||
"checker.messages.stringRegex"|
|
||||
"checker.messages.stringInvertedContains"|
|
||||
"checker.messages.stringLowercase"|
|
||||
"checker.messages.stringUppercase"|
|
||||
"checker.messages.stringSpecialCharacters"|
|
||||
"checker.messages.stringNoSpaces"|
|
||||
"checker.messages.stringCapitalWord"|
|
||||
"checker.messages.stringCapitalSentence"|
|
||||
"checker.messages.stringPunctuation"|
|
||||
|
||||
"checker.messages.numberTooShort"|
|
||||
"checker.messages.numberTooLong"|
|
||||
"checker.messages.numberLengthInvalid"|
|
||||
@@ -53,8 +118,12 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"checker.messages.numberNegative"|
|
||||
"checker.messages.numberPositive"|
|
||||
"checker.messages.numberZero"|
|
||||
"checker.messages.numberNan"|
|
||||
"checker.messages.numberInvertedContains"|
|
||||
|
||||
"checker.messages.booleanTrue"|
|
||||
"checker.messages.booleanFalse"|
|
||||
|
||||
"checker.messages.arrayEmptyDisabled"|
|
||||
"checker.messages.arrayEmptyRequired"|
|
||||
"checker.messages.arrayTooShort"|
|
||||
@@ -62,6 +131,7 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"checker.messages.arrayLengthInvalid"|
|
||||
"checker.messages.arrayInvalidTypes"|
|
||||
"checker.messages.arrayDouble"|
|
||||
|
||||
"checker.messages.discordInvalidId"|
|
||||
"checker.messages.discordInvalidIdOptions"|
|
||||
"checker.messages.discordInvalidToken"|
|
||||
@@ -83,6 +153,8 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"checker.messages.unusedOption"|
|
||||
"checker.messages.unusedQuestion"|
|
||||
"checker.messages.dropdownOption"|
|
||||
"checker.messages.customInvalidVersion"|
|
||||
|
||||
"actions.buttons.create"|
|
||||
"actions.buttons.close"|
|
||||
"actions.buttons.delete"|
|
||||
@@ -120,6 +192,7 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"actions.titles.blacklistAddDm"|
|
||||
"actions.titles.blacklistRemoveDm"|
|
||||
"actions.titles.clear"|
|
||||
"actions.titles.clearTickets"|
|
||||
"actions.titles.roles"|
|
||||
|
||||
"actions.titles.autoclose"|
|
||||
@@ -129,6 +202,11 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"actions.titles.autodeleteEnabled"|
|
||||
"actions.titles.autodeleteDisabled"|
|
||||
|
||||
"actions.titles.topicSet"|
|
||||
"actions.titles.prioritySet"|
|
||||
"actions.titles.priorityGet"|
|
||||
"actions.titles.transfer"|
|
||||
|
||||
"actions.descriptions.create"|
|
||||
"actions.descriptions.close"|
|
||||
"actions.descriptions.delete"|
|
||||
@@ -169,6 +247,11 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"actions.descriptions.ticketMessageAutodelete"|
|
||||
"actions.descriptions.panelReady"|
|
||||
|
||||
"actions.descriptions.topicSet"|
|
||||
"actions.descriptions.prioritySet"|
|
||||
"actions.descriptions.priorityGet"|
|
||||
"actions.descriptions.transfer"|
|
||||
|
||||
"actions.modal.closePlaceholder"|
|
||||
"actions.modal.deletePlaceholder"|
|
||||
"actions.modal.reopenPlaceholder"|
|
||||
@@ -207,6 +290,13 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"actions.logs.blacklistRemoveDm"|
|
||||
"actions.logs.clearLog"|
|
||||
|
||||
"actions.logs.transferLog"|
|
||||
"actions.logs.transferDm"|
|
||||
"actions.logs.prioritySetLog"|
|
||||
"actions.logs.prioritySetDm"|
|
||||
"actions.logs.roleUpdateLog"|
|
||||
"actions.logs.roleUpdateDm"|
|
||||
|
||||
"transcripts.success.visit"|
|
||||
"transcripts.success.ready"|
|
||||
"transcripts.success.textFileDescription"|
|
||||
@@ -223,6 +313,17 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"transcripts.errors.continue"|
|
||||
"transcripts.errors.backup"|
|
||||
"transcripts.errors.error"|
|
||||
"transcripts.errors.title"|
|
||||
|
||||
"transcripts.text.messagesTitle"|
|
||||
"transcripts.text.embedTitle"|
|
||||
"transcripts.text.fileTitle"|
|
||||
"transcripts.text.fieldsTitle"|
|
||||
"transcripts.text.reactionsTitle"|
|
||||
"transcripts.text.statsTitle"|
|
||||
"transcripts.text.emptyContent"|
|
||||
"transcripts.text.noTitle"|
|
||||
"transcripts.text.noDesc"|
|
||||
|
||||
"errors.titles.internalError"|
|
||||
"errors.titles.optionMissing"|
|
||||
@@ -236,6 +337,7 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"errors.titles.notInGuild"|
|
||||
"errors.titles.channelRename"|
|
||||
"errors.titles.busy"|
|
||||
"errors.titles.permissionError"|
|
||||
|
||||
"errors.descriptions.askForInfo"|
|
||||
"errors.descriptions.askForInfoResolve"|
|
||||
@@ -258,6 +360,9 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"errors.descriptions.channelRename"|
|
||||
"errors.descriptions.channelRenameSource"|
|
||||
"errors.descriptions.busy"|
|
||||
"errors.descriptions.closeBeforeMessage"|
|
||||
"errors.descriptions.closeBeforeAdminMessage"|
|
||||
"errors.descriptions.unableToCreateTicket"|
|
||||
|
||||
"errors.optionInvalidReasons.stringRegex"|
|
||||
"errors.optionInvalidReasons.stringMinLength"|
|
||||
@@ -302,7 +407,6 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"params.uppercase.added"|
|
||||
"params.uppercase.removed"|
|
||||
"params.uppercase.filter"|
|
||||
"params.uppercase.claimedBy"|
|
||||
"params.uppercase.method"|
|
||||
"params.uppercase.type"|
|
||||
"params.uppercase.blacklisted"|
|
||||
@@ -328,6 +432,27 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"params.uppercase.pinned"|
|
||||
"params.uppercase.creationDate"|
|
||||
|
||||
"params.uppercase.noone"|
|
||||
"params.uppercase.open"|
|
||||
"params.uppercase.closed"|
|
||||
"params.uppercase.priority"|
|
||||
"params.uppercase.status"|
|
||||
"params.uppercase.participants"|
|
||||
"params.uppercase.yes"|
|
||||
"params.uppercase.no"|
|
||||
"params.uppercase.option"|
|
||||
"params.uppercase.topic"|
|
||||
"params.uppercase.uptime"|
|
||||
"params.uppercase.messages"|
|
||||
"params.uppercase.embeds"|
|
||||
"params.uppercase.files"|
|
||||
"params.uppercase.components"|
|
||||
"params.uppercase.cooldown"|
|
||||
"params.uppercase.maxTickets"|
|
||||
"params.uppercase.admins"|
|
||||
"params.uppercase.roles"|
|
||||
"params.uppercase.size"|
|
||||
|
||||
"params.lowercase.text"|
|
||||
"params.lowercase.html"|
|
||||
"params.lowercase.command"|
|
||||
@@ -394,6 +519,18 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"commands.autodeleteEnable"|
|
||||
"commands.autodeleteEnableTime"|
|
||||
|
||||
"commands.topic"|
|
||||
"commands.topicSet"|
|
||||
"commands.topicValue"|
|
||||
"commands.topicList"|
|
||||
"commands.priority"|
|
||||
"commands.prioritySet"|
|
||||
"commands.priorityValue"|
|
||||
"commands.priorityGet"|
|
||||
"commands.priorityList"|
|
||||
"commands.transfer"|
|
||||
"commands.transferUser"|
|
||||
|
||||
"helpMenu.help"|
|
||||
"helpMenu.ticket"|
|
||||
"helpMenu.close"|
|
||||
@@ -421,11 +558,20 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"helpMenu.autodeleteDisable"|
|
||||
"helpMenu.autodeleteEnable"|
|
||||
|
||||
"helpMenu.categories.general"|
|
||||
"helpMenu.categories.basicTicket"|
|
||||
"helpMenu.categories.advancedTicket"|
|
||||
"helpMenu.categories.userTicket"|
|
||||
"helpMenu.categories.admin"|
|
||||
"helpMenu.categories.advanced"|
|
||||
"helpMenu.categories.extra"|
|
||||
|
||||
"stats.scopes.global"|
|
||||
"stats.scopes.system"|
|
||||
"stats.scopes.user"|
|
||||
"stats.scopes.ticket"|
|
||||
"stats.scopes.participants"|
|
||||
"stats.scopes.messages"|
|
||||
|
||||
"stats.properties.ticketsCreated"|
|
||||
"stats.properties.ticketsClosed"|
|
||||
@@ -436,44 +582,45 @@ export type ODLanguageManagerTranslations_Default = (
|
||||
"stats.properties.ticketsPinned"|
|
||||
"stats.properties.ticketsMoved"|
|
||||
"stats.properties.usersBlacklisted"|
|
||||
"stats.properties.transcriptsCreated"
|
||||
)
|
||||
"stats.properties.transcriptsCreated"|
|
||||
"stats.properties.ticketsAutodeleted"|
|
||||
"stats.properties.ticketsTransferred"|
|
||||
"stats.properties.ticketVolume"|
|
||||
"stats.properties.averageTickets"|
|
||||
"stats.properties.currentTickets"|
|
||||
"stats.properties.age"|
|
||||
"stats.properties.responseTime"|
|
||||
"stats.properties.resolutionTime"|
|
||||
"stats.properties.createdOn"|
|
||||
"stats.properties.createdBy"|
|
||||
"stats.properties.closedOn"|
|
||||
"stats.properties.closedBy"|
|
||||
"stats.properties.claimedOn"|
|
||||
"stats.properties.claimedBy"|
|
||||
"stats.properties.pinnedOn"|
|
||||
"stats.properties.pinnedBy"|
|
||||
"stats.properties.deletedOn"|
|
||||
"stats.properties.deletedBy"|
|
||||
|
||||
/**## ODLanguageManagerIds_Default `interface`
|
||||
* This interface is a list of ids available in the `ODLanguageManager_Default` class.
|
||||
* It's used to generate typescript declarations for this class.
|
||||
*/
|
||||
export interface ODLanguageManagerIds_Default {
|
||||
"opendiscord:custom":ODLanguage,
|
||||
"opendiscord:english":ODLanguage,
|
||||
"opendiscord:dutch":ODLanguage,
|
||||
"opendiscord:portuguese":ODLanguage,
|
||||
"opendiscord:czech":ODLanguage,
|
||||
"opendiscord:german":ODLanguage,
|
||||
"opendiscord:catalan":ODLanguage,
|
||||
"opendiscord:hungarian":ODLanguage,
|
||||
"opendiscord:spanish":ODLanguage,
|
||||
"opendiscord:romanian":ODLanguage,
|
||||
"opendiscord:ukrainian":ODLanguage,
|
||||
"opendiscord:indonesian":ODLanguage,
|
||||
"opendiscord:italian":ODLanguage,
|
||||
"opendiscord:estonian":ODLanguage,
|
||||
"opendiscord:finnish":ODLanguage,
|
||||
"opendiscord:danish":ODLanguage,
|
||||
"opendiscord:thai":ODLanguage,
|
||||
"opendiscord:turkish":ODLanguage,
|
||||
"opendiscord:french":ODLanguage,
|
||||
"opendiscord:arabic":ODLanguage,
|
||||
"opendiscord:hindi":ODLanguage,
|
||||
"opendiscord:lithuanian":ODLanguage,
|
||||
"opendiscord:polish":ODLanguage,
|
||||
"opendiscord:latvian":ODLanguage,
|
||||
"opendiscord:norwegian":ODLanguage,
|
||||
"opendiscord:russian":ODLanguage,
|
||||
"opendiscord:swedish":ODLanguage,
|
||||
"opendiscord:vietnamese":ODLanguage,
|
||||
//ADD NEW LANGUAGES HERE!!!
|
||||
}
|
||||
"stats.roles.developer"|
|
||||
"stats.roles.serverOwner"|
|
||||
"stats.roles.serverAdmin"|
|
||||
"stats.roles.moderator"|
|
||||
"stats.roles.support"|
|
||||
"stats.roles.member"|
|
||||
|
||||
"panel.selectTicket"|
|
||||
"panel.selectRole"|
|
||||
"panel.selectOption"|
|
||||
|
||||
"priorities.urgent"|
|
||||
"priorities.veryHigh"|
|
||||
"priorities.high"|
|
||||
"priorities.normal"|
|
||||
"priorities.low"|
|
||||
"priorities.veryLow"|
|
||||
"priorities.none"
|
||||
)
|
||||
|
||||
/**## ODLanguageManager_Default `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODLanguageManager class.
|
||||
|
||||
@@ -134,6 +134,9 @@ export interface ODProgressBarManagerIds_Default {
|
||||
"opendiscord:slash-command-remove":ODManualProgressBar,
|
||||
"opendiscord:slash-command-create":ODManualProgressBar,
|
||||
"opendiscord:slash-command-update":ODManualProgressBar,
|
||||
"opendiscord:context-menu-remove":ODManualProgressBar,
|
||||
"opendiscord:context-menu-create":ODManualProgressBar,
|
||||
"opendiscord:context-menu-update":ODManualProgressBar,
|
||||
}
|
||||
|
||||
/**## ODProgressBarManager_Default `default_class`
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//DEFAULT RESPONDER MODULE
|
||||
///////////////////////////////////////
|
||||
import { ODValidId } from "../modules/base"
|
||||
import { ODButtonResponder, ODButtonResponderInstance, ODButtonResponderManager, ODCommandResponder, ODCommandResponderInstance, ODCommandResponderManager, ODDropdownResponder, ODDropdownResponderInstance, ODDropdownResponderManager, ODModalResponder, ODModalResponderInstance, ODModalResponderManager, ODResponderManager } from "../modules/responder"
|
||||
import { ODAutocompleteResponder, ODAutocompleteResponderInstance, ODAutocompleteResponderManager, ODButtonResponder, ODButtonResponderInstance, ODButtonResponderManager, ODCommandResponder, ODCommandResponderInstance, ODCommandResponderManager, ODContextMenuResponder, ODContextMenuResponderInstance, ODContextMenuResponderManager, ODDropdownResponder, ODDropdownResponderInstance, ODDropdownResponderManager, ODModalResponder, ODModalResponderInstance, ODModalResponderManager, ODResponderManager } from "../modules/responder"
|
||||
import { ODWorkerManager_Default } from "./worker"
|
||||
|
||||
/**## ODResponderManager_Default `default_class`
|
||||
@@ -16,6 +16,8 @@ export class ODResponderManager_Default extends ODResponderManager {
|
||||
declare buttons: ODButtonResponderManager_Default
|
||||
declare dropdowns: ODDropdownResponderManager_Default
|
||||
declare modals: ODModalResponderManager_Default
|
||||
declare contextMenus: ODContextMenuResponderManager_Default
|
||||
declare autocomplete: ODAutocompleteResponderManager_Default
|
||||
}
|
||||
|
||||
/**## ODCommandResponderManagerIds_Default `interface`
|
||||
@@ -42,6 +44,9 @@ export interface ODCommandResponderManagerIds_Default {
|
||||
"opendiscord:add":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:add"|"opendiscord:logs"},
|
||||
"opendiscord:remove":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:remove"|"opendiscord:logs"},
|
||||
"opendiscord:clear":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:clear"|"opendiscord:logs"},
|
||||
"opendiscord:topic":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:topic"|"opendiscord:logs"},
|
||||
"opendiscord:priority":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:priority"|"opendiscord:logs"},
|
||||
"opendiscord:transfer":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:transfer"|"opendiscord:logs"},
|
||||
|
||||
"opendiscord:autoclose":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:autoclose"|"opendiscord:logs"},
|
||||
"opendiscord:autodelete":{source:"slash"|"text",params:{},workers:"opendiscord:permissions"|"opendiscord:autodelete"|"opendiscord:logs"},
|
||||
@@ -253,3 +258,98 @@ export class ODModalResponderManager_Default extends ODModalResponderManager {
|
||||
export class ODModalResponder_Default<Source extends string, Params, WorkerIds extends string> extends ODModalResponder<Source,Params> {
|
||||
declare workers: ODWorkerManager_Default<ODModalResponderInstance,Source,Params,WorkerIds>
|
||||
}
|
||||
|
||||
/**## ODContextMenuResponderManagerIds_Default `interface`
|
||||
* This interface is a list of ids available in the `ODContextMenuResponderManager_Default` class.
|
||||
* It's used to generate typescript declarations for this class.
|
||||
*/
|
||||
export interface ODContextMenuResponderManagerIds_Default {
|
||||
//"opendiscord:example":{source:"context-menu",params:{},workers:"opendiscord:example"},
|
||||
}
|
||||
|
||||
/**## ODContextMenuResponderManager_Default `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODContextMenuResponderManager class.
|
||||
* It doesn't add any extra features!
|
||||
*
|
||||
* This default class is made for the global variable `opendiscord.responders.contextMenus`!
|
||||
*/
|
||||
export class ODContextMenuResponderManager_Default extends ODContextMenuResponderManager {
|
||||
get<ModalResponderId extends keyof ODContextMenuResponderManagerIds_Default>(id:ModalResponderId): ODContextMenuResponder_Default<ODContextMenuResponderManagerIds_Default[ModalResponderId]["source"],ODContextMenuResponderManagerIds_Default[ModalResponderId]["params"],ODContextMenuResponderManagerIds_Default[ModalResponderId]["workers"]>
|
||||
get(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null
|
||||
|
||||
get(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null {
|
||||
return super.get(id)
|
||||
}
|
||||
|
||||
remove<ModalResponderId extends keyof ODContextMenuResponderManagerIds_Default>(id:ModalResponderId): ODContextMenuResponder_Default<ODContextMenuResponderManagerIds_Default[ModalResponderId]["source"],ODContextMenuResponderManagerIds_Default[ModalResponderId]["params"],ODContextMenuResponderManagerIds_Default[ModalResponderId]["workers"]>
|
||||
remove(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null
|
||||
|
||||
remove(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null {
|
||||
return super.remove(id)
|
||||
}
|
||||
|
||||
exists(id:keyof ODContextMenuResponderManagerIds_Default): boolean
|
||||
exists(id:ODValidId): boolean
|
||||
|
||||
exists(id:ODValidId): boolean {
|
||||
return super.exists(id)
|
||||
}
|
||||
}
|
||||
|
||||
/**## ODContextMenuResponder_Default `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODContextMenuResponder class.
|
||||
* It doesn't add any extra features!
|
||||
*
|
||||
* This default class is made for the default `ODContextMenuResponder`'s!
|
||||
*/
|
||||
export class ODContextMenuResponder_Default<Source extends string, Params, WorkerIds extends string> extends ODContextMenuResponder<Source,Params> {
|
||||
declare workers: ODWorkerManager_Default<ODContextMenuResponderInstance,Source,Params,WorkerIds>
|
||||
}
|
||||
|
||||
/**## ODAutocompleteResponderManagerIds_Default `interface`
|
||||
* This interface is a list of ids available in the `ODAutocompleteResponderManager_Default` class.
|
||||
* It's used to generate typescript declarations for this class.
|
||||
*/
|
||||
export interface ODAutocompleteResponderManagerIds_Default {
|
||||
"opendiscord:panel-id":{source:"autocomplete",params:{},workers:"opendiscord:panel-id"},
|
||||
"opendiscord:option-id":{source:"autocomplete",params:{},workers:"opendiscord:option-id"}
|
||||
}
|
||||
|
||||
/**## ODAutocompleteResponderManager_Default `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODAutocompleteResponderManager class.
|
||||
* It doesn't add any extra features!
|
||||
*
|
||||
* This default class is made for the global variable `opendiscord.responders.autocomplete`!
|
||||
*/
|
||||
export class ODAutocompleteResponderManager_Default extends ODAutocompleteResponderManager {
|
||||
get<ModalResponderId extends keyof ODAutocompleteResponderManagerIds_Default>(id:ModalResponderId): ODAutocompleteResponder_Default<ODAutocompleteResponderManagerIds_Default[ModalResponderId]["source"],ODAutocompleteResponderManagerIds_Default[ModalResponderId]["params"],ODAutocompleteResponderManagerIds_Default[ModalResponderId]["workers"]>
|
||||
get(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null
|
||||
|
||||
get(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null {
|
||||
return super.get(id)
|
||||
}
|
||||
|
||||
remove<ModalResponderId extends keyof ODAutocompleteResponderManagerIds_Default>(id:ModalResponderId): ODAutocompleteResponder_Default<ODAutocompleteResponderManagerIds_Default[ModalResponderId]["source"],ODAutocompleteResponderManagerIds_Default[ModalResponderId]["params"],ODAutocompleteResponderManagerIds_Default[ModalResponderId]["workers"]>
|
||||
remove(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null
|
||||
|
||||
remove(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null {
|
||||
return super.remove(id)
|
||||
}
|
||||
|
||||
exists(id:keyof ODAutocompleteResponderManagerIds_Default): boolean
|
||||
exists(id:ODValidId): boolean
|
||||
|
||||
exists(id:ODValidId): boolean {
|
||||
return super.exists(id)
|
||||
}
|
||||
}
|
||||
|
||||
/**## ODAutocompleteResponder_Default `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODAutocompleteResponder class.
|
||||
* It doesn't add any extra features!
|
||||
*
|
||||
* This default class is made for the default `ODAutocompleteResponder`'s!
|
||||
*/
|
||||
export class ODAutocompleteResponder_Default<Source extends string, Params, WorkerIds extends string> extends ODAutocompleteResponder<Source,Params> {
|
||||
declare workers: ODWorkerManager_Default<ODAutocompleteResponderInstance,Source,Params,WorkerIds>
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
///////////////////////////////////////
|
||||
//DEFAULT SESSION MODULE
|
||||
///////////////////////////////////////
|
||||
import { Guild, TextBasedChannel, User } from "discord.js"
|
||||
import { ODValidId } from "../modules/base"
|
||||
import { ODStatScope, ODStatGlobalScope, ODStatsManager, ODStat, ODBasicStat, ODDynamicStat, ODValidStatValue, ODStatScopeSetMode } from "../modules/stat"
|
||||
|
||||
@@ -14,7 +13,8 @@ export interface ODStatsManagerIds_Default {
|
||||
"opendiscord:system":ODStatGlobalScope_DefaultSystem,
|
||||
"opendiscord:user":ODStatScope_DefaultUser,
|
||||
"opendiscord:ticket":ODStatScope_DefaultTicket,
|
||||
"opendiscord:participants":ODStatScope_DefaultParticipants
|
||||
"opendiscord:participants":ODStatScope_DefaultParticipants,
|
||||
"opendiscord:messages":ODStatScope_DefaultMessages,
|
||||
}
|
||||
|
||||
/**## ODStatsManager_Default `default_class`
|
||||
@@ -60,8 +60,11 @@ export interface ODStatGlobalScopeIds_DefaultGlobal {
|
||||
"opendiscord:tickets-claimed":ODBasicStat,
|
||||
"opendiscord:tickets-pinned":ODBasicStat,
|
||||
"opendiscord:tickets-moved":ODBasicStat,
|
||||
"opendiscord:tickets-transferred":ODBasicStat,
|
||||
"opendiscord:users-blacklisted":ODBasicStat,
|
||||
"opendiscord:transcripts-created":ODBasicStat
|
||||
"opendiscord:transcripts-created":ODBasicStat,
|
||||
"opendiscord:ticket-volume":ODDynamicStat,
|
||||
"opendiscord:average-tickets":ODDynamicStat,
|
||||
}
|
||||
|
||||
/**## ODStatGlobalScope_DefaultGlobal `default_class`
|
||||
@@ -99,6 +102,13 @@ export class ODStatGlobalScope_DefaultGlobal extends ODStatGlobalScope {
|
||||
return super.getStat(id)
|
||||
}
|
||||
|
||||
getAllStats<StatsId extends keyof ODStatGlobalScopeIds_DefaultGlobal>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
|
||||
return super.getAllStats(id)
|
||||
}
|
||||
|
||||
setStat<StatsId extends keyof ODStatGlobalScopeIds_DefaultGlobal>(id:StatsId, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
setStat(id:ODValidId, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
|
||||
@@ -120,6 +130,7 @@ export class ODStatGlobalScope_DefaultGlobal extends ODStatGlobalScope {
|
||||
*/
|
||||
export interface ODStatGlobalScopeIds_DefaultSystem {
|
||||
"opendiscord:startup-date":ODDynamicStat,
|
||||
"opendiscord:system-uptime":ODDynamicStat,
|
||||
"opendiscord:version":ODDynamicStat
|
||||
}
|
||||
|
||||
@@ -158,6 +169,13 @@ export class ODStatGlobalScope_DefaultSystem extends ODStatGlobalScope {
|
||||
return super.getStat(id)
|
||||
}
|
||||
|
||||
getAllStats<StatsId extends keyof ODStatGlobalScopeIds_DefaultSystem>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
|
||||
return super.getAllStats(id)
|
||||
}
|
||||
|
||||
setStat<StatsId extends keyof ODStatGlobalScopeIds_DefaultSystem>(id:StatsId, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
setStat(id:ODValidId, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
|
||||
@@ -187,8 +205,10 @@ export interface ODStatScopeIds_DefaultUser {
|
||||
"opendiscord:tickets-claimed":ODBasicStat,
|
||||
"opendiscord:tickets-pinned":ODBasicStat,
|
||||
"opendiscord:tickets-moved":ODBasicStat,
|
||||
"opendiscord:tickets-transferred":ODBasicStat,
|
||||
"opendiscord:users-blacklisted":ODBasicStat,
|
||||
"opendiscord:transcripts-created":ODBasicStat
|
||||
"opendiscord:transcripts-created":ODBasicStat,
|
||||
"opendiscord:current-tickets":ODDynamicStat,
|
||||
}
|
||||
|
||||
/**## ODStatScope_DefaultUser `default_class`
|
||||
@@ -226,6 +246,13 @@ export class ODStatScope_DefaultUser extends ODStatScope {
|
||||
return super.getStat(id,scopeId)
|
||||
}
|
||||
|
||||
getAllStats<StatsId extends keyof ODStatScopeIds_DefaultUser>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
|
||||
return super.getAllStats(id)
|
||||
}
|
||||
|
||||
setStat<StatsId extends keyof ODStatScopeIds_DefaultUser>(id:StatsId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
setStat(id:ODValidId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
|
||||
@@ -251,7 +278,10 @@ export interface ODStatScopeIds_DefaultTicket {
|
||||
"opendiscord:claimed":ODDynamicStat,
|
||||
"opendiscord:pinned":ODDynamicStat,
|
||||
"opendiscord:creation-date":ODDynamicStat,
|
||||
"opendiscord:creator":ODDynamicStat
|
||||
"opendiscord:creator":ODDynamicStat,
|
||||
"opendiscord:ticket-age":ODDynamicStat,
|
||||
"opendiscord:response-time":ODDynamicStat,
|
||||
"opendiscord:resolution-time":ODDynamicStat,
|
||||
}
|
||||
|
||||
/**## ODStatScope_DefaultTicket `default_class`
|
||||
@@ -289,6 +319,13 @@ export class ODStatScope_DefaultTicket extends ODStatScope {
|
||||
return super.getStat(id,scopeId)
|
||||
}
|
||||
|
||||
getAllStats<StatsId extends keyof ODStatScopeIds_DefaultTicket>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
|
||||
return super.getAllStats(id)
|
||||
}
|
||||
|
||||
setStat<StatsId extends keyof ODStatScopeIds_DefaultTicket>(id:StatsId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
setStat(id:ODValidId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
|
||||
@@ -347,6 +384,13 @@ export class ODStatScope_DefaultParticipants extends ODStatScope {
|
||||
return super.getStat(id,scopeId)
|
||||
}
|
||||
|
||||
getAllStats<StatsId extends keyof ODStatScopeIds_DefaultParticipants>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
|
||||
return super.getAllStats(id)
|
||||
}
|
||||
|
||||
setStat<StatsId extends keyof ODStatScopeIds_DefaultParticipants>(id:StatsId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
setStat(id:ODValidId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
|
||||
@@ -361,3 +405,68 @@ export class ODStatScope_DefaultParticipants extends ODStatScope {
|
||||
return super.resetStat(id,scopeId)
|
||||
}
|
||||
}
|
||||
|
||||
/**## ODStatScopeIds_DefaultMessages `type`
|
||||
* This interface is a list of ids available in the `ODStatScope_DefaultMessages` class.
|
||||
* It's used to generate typescript declarations for this class.
|
||||
*/
|
||||
export interface ODStatScopeIds_DefaultMessages {
|
||||
"opendiscord:count":ODDynamicStat
|
||||
}
|
||||
|
||||
/**## ODStatScope_DefaultMessages `default_class`
|
||||
* This is a special class that adds type definitions & typescript to the ODStatsManager class.
|
||||
* It doesn't add any extra features!
|
||||
*
|
||||
* This default class is made for the `opendiscord:participants` category in `opendiscord.stats`!
|
||||
*/
|
||||
export class ODStatScope_DefaultMessages extends ODStatScope {
|
||||
get<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:StatsId): ODStatScopeIds_DefaultMessages[StatsId]
|
||||
get(id:ODValidId): ODStat|null
|
||||
|
||||
get(id:ODValidId): ODStat|null {
|
||||
return super.get(id)
|
||||
}
|
||||
|
||||
remove<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:StatsId): ODStatScopeIds_DefaultMessages[StatsId]
|
||||
remove(id:ODValidId): ODStat|null
|
||||
|
||||
remove(id:ODValidId): ODStat|null {
|
||||
return super.remove(id)
|
||||
}
|
||||
|
||||
exists(id:keyof ODStatScopeIds_DefaultMessages): boolean
|
||||
exists(id:ODValidId): boolean
|
||||
|
||||
exists(id:ODValidId): boolean {
|
||||
return super.exists(id)
|
||||
}
|
||||
|
||||
getStat<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:StatsId, scopeId:string): Promise<ODValidStatValue|null>
|
||||
getStat(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null>
|
||||
|
||||
getStat(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null> {
|
||||
return super.getStat(id,scopeId)
|
||||
}
|
||||
|
||||
getAllStats<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:StatsId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]>
|
||||
|
||||
getAllStats(id:ODValidId): Promise<{id:string,value:ODValidStatValue}[]> {
|
||||
return super.getAllStats(id)
|
||||
}
|
||||
|
||||
setStat<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:StatsId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
setStat(id:ODValidId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean>
|
||||
|
||||
setStat(id:ODValidId, scopeId:string, value:ODValidStatValue, mode:ODStatScopeSetMode): Promise<boolean> {
|
||||
return super.setStat(id,scopeId,value,mode)
|
||||
}
|
||||
|
||||
resetStat<StatsId extends keyof ODStatScopeIds_DefaultMessages>(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null>
|
||||
resetStat(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null>
|
||||
|
||||
resetStat(id:ODValidId, scopeId:string): Promise<ODValidStatValue|null> {
|
||||
return super.resetStat(id,scopeId)
|
||||
}
|
||||
}
|
||||
@@ -37,6 +37,7 @@ import { ODQuestionManager } from "./openticket/question"
|
||||
import { ODBlacklistManager } from "./openticket/blacklist"
|
||||
import { ODTranscriptManager_Default } from "./openticket/transcript"
|
||||
import { ODRoleManager } from "./openticket/role"
|
||||
import { ODPriorityManager_Default } from "./openticket/priority"
|
||||
|
||||
/**## ODMain `class`
|
||||
* This is the main Open Ticket class.
|
||||
@@ -127,12 +128,14 @@ export class ODMain {
|
||||
transcripts: ODTranscriptManager_Default
|
||||
/**The manager that manages all reaction roles in the bot. (here, you can add additional data to roles) */
|
||||
roles: ODRoleManager
|
||||
/**The manager that manages all priority levels in the bot. (register/edit ticket priority levels) */
|
||||
priorities: ODPriorityManager_Default
|
||||
|
||||
constructor(){
|
||||
this.versions = new ODVersionManager_Default()
|
||||
this.versions.add(ODVersion.fromString("opendiscord:version","v4.0.2"))
|
||||
this.versions.add(ODVersion.fromString("opendiscord:version","v4.1.0"))
|
||||
this.versions.add(ODVersion.fromString("opendiscord:api","v1.0.0"))
|
||||
this.versions.add(ODVersion.fromString("opendiscord:transcripts","v2.0.0"))
|
||||
this.versions.add(ODVersion.fromString("opendiscord:transcripts","v2.1.0"))
|
||||
this.versions.add(ODVersion.fromString("opendiscord:livestatus","v2.0.0"))
|
||||
|
||||
this.debugfile = new ODDebugFileManager("./","otdebug.txt",5000,this.versions.get("opendiscord:version"))
|
||||
@@ -173,8 +176,9 @@ export class ODMain {
|
||||
this.panels = new ODPanelManager(this.debug)
|
||||
this.tickets = new ODTicketManager(this.debug,this.client)
|
||||
this.blacklist = new ODBlacklistManager(this.debug)
|
||||
this.transcripts = new ODTranscriptManager_Default(this.debug,this.tickets,this.client)
|
||||
this.transcripts = new ODTranscriptManager_Default(this.debug,this.tickets,this.client,this.permissions)
|
||||
this.roles = new ODRoleManager(this.debug)
|
||||
this.priorities = new ODPriorityManager_Default(this.debug)
|
||||
}
|
||||
|
||||
/**Log a message to the console. But in the Open Ticket style :) */
|
||||
|
||||
@@ -63,16 +63,6 @@ export class ODId {
|
||||
get value(){
|
||||
return this.#value
|
||||
}
|
||||
/**The source of the id (text before `:`). (e.g. `openticket` for all built-in ids)
|
||||
*
|
||||
* @deprecated Replaced with `getNamespace()` and will be removed in `v4.1.0`.
|
||||
*/
|
||||
source: string
|
||||
/**The identifier of the id (text after `:`).
|
||||
*
|
||||
* @deprecated Replaced with `getIdentifier()` and will be removed in `v4.1.0`.
|
||||
*/
|
||||
identifier: string
|
||||
/**The change listener for the parent `ODManager` of this `ODId`. */
|
||||
#change: ((oldId:string,newId:string) => void)|null = null
|
||||
|
||||
@@ -92,21 +82,9 @@ export class ODId {
|
||||
|
||||
if (result.length > 0) this.#value = result.join("")
|
||||
else throw new ODSystemError("invalid ID at 'new ODID(id: "+id+")'")
|
||||
|
||||
const splitted = this.#value.split(":")
|
||||
if (splitted.length > 1){
|
||||
this.source = splitted[0]
|
||||
splitted.shift()
|
||||
this.identifier = splitted.join(":")
|
||||
}else{
|
||||
this.identifier = splitted.join(":")
|
||||
this.source = ""
|
||||
}
|
||||
}else{
|
||||
//id is ODId
|
||||
this.#value = id.#value
|
||||
this.source = id.source
|
||||
this.identifier = id.identifier
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,47 +149,6 @@ export class ODManagerChangeHelper {
|
||||
}
|
||||
}
|
||||
|
||||
/**## ODManagerRedirectHelper `class`
|
||||
* @deprecated ### Will be removed in Open Ticket `v4.1.0`!
|
||||
*
|
||||
* This is Open Ticket ticket manager redirect helper.
|
||||
*
|
||||
* It is used to redirect a source to another source when the id isn't found.
|
||||
*
|
||||
* It will be used in **Open Discord** to allow plugins from all projects to work seamlessly!
|
||||
* ## **(❌ SYSTEM ONLY!!)**
|
||||
*/
|
||||
export class ODManagerRedirectHelper {
|
||||
#data: {fromSource:string,toSource:string}[] = []
|
||||
|
||||
/****(❌ SYSTEM ONLY!!)** Add a redirect to this manager. Returns `true` when overwritten. */
|
||||
add(fromSource:string, toSource:string){
|
||||
const index = this.#data.findIndex((data) => data.fromSource === fromSource)
|
||||
if (index > -1){
|
||||
//already exists
|
||||
this.#data[index] = {fromSource,toSource}
|
||||
return true
|
||||
}else{
|
||||
//doesn't exist
|
||||
this.#data.push({fromSource,toSource})
|
||||
return false
|
||||
}
|
||||
}
|
||||
/****(❌ SYSTEM ONLY!!)** Remove a redirect from this manager. Returns `true` when it existed. */
|
||||
remove(fromSource:string, toSource:string){
|
||||
const index = this.#data.findIndex((data) => data.fromSource === fromSource && data.toSource == toSource)
|
||||
if (index > -1){
|
||||
//already exists
|
||||
this.#data.splice(index,1)
|
||||
return true
|
||||
}else return false
|
||||
}
|
||||
/**List all redirects from this manager. */
|
||||
list(){
|
||||
return [...this.#data]
|
||||
}
|
||||
}
|
||||
|
||||
/**## ODManagerData `class`
|
||||
* This is Open Ticket manager data.
|
||||
*
|
||||
@@ -261,11 +198,9 @@ export class ODManager<DataType extends ODManagerData> extends ODManagerChangeHe
|
||||
#changeListeners: ODManagerCallback<DataType>[] = []
|
||||
/**An array storing all listeners when data is removed. */
|
||||
#removeListeners: ODManagerCallback<DataType>[] = []
|
||||
/**Handle all redirects in this `ODManager` */
|
||||
redirects: ODManagerRedirectHelper = new ODManagerRedirectHelper()
|
||||
|
||||
constructor(debug?:ODDebugger, debugname?:string){
|
||||
super()
|
||||
super()
|
||||
this.#debug = debug
|
||||
this.#debugname = debugname
|
||||
}
|
||||
@@ -333,15 +268,7 @@ export class ODManager<DataType extends ODManagerData> extends ODManagerChangeHe
|
||||
const newId = new ODId(id)
|
||||
const data = this.#data.get(newId.value)
|
||||
if (data) return data
|
||||
else{
|
||||
//DEPRECATED!!!
|
||||
const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.getNamespace())
|
||||
if (!redirect) return null
|
||||
else{
|
||||
const redirectId = new ODId(redirect.toSource+":"+newId.getIdentifier())
|
||||
return this.get(redirectId)
|
||||
}
|
||||
}
|
||||
else return null
|
||||
}
|
||||
/**Remove data that matches the `ODId`. Returns the removed data. */
|
||||
remove(id:ODValidId): DataType|null {
|
||||
@@ -349,15 +276,8 @@ export class ODManager<DataType extends ODManagerData> extends ODManagerChangeHe
|
||||
const data = this.#data.get(newId.value)
|
||||
|
||||
if (!data){
|
||||
//DEPRECATED!!!
|
||||
const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.getNamespace())
|
||||
if (!redirect){
|
||||
if (this.#debug) this.#debug.debug("Removed "+this.#debugname+" from manager",[{key:"id",value:newId.value},{key:"found",value:"false"}])
|
||||
return null
|
||||
}else{
|
||||
const redirectId = new ODId(redirect.toSource+":"+newId.getIdentifier())
|
||||
return this.remove(redirectId)
|
||||
}
|
||||
if (this.#debug) this.#debug.debug("Removed "+this.#debugname+" from manager",[{key:"id",value:newId.value},{key:"found",value:"false"}])
|
||||
return null
|
||||
}else{
|
||||
this.#data.delete(newId.value)
|
||||
if (this.#debug) this.#debug.debug("Removed "+this.#debugname+" from manager",[{key:"id",value:newId.value},{key:"found",value:"true"}])
|
||||
@@ -385,15 +305,7 @@ export class ODManager<DataType extends ODManagerData> extends ODManagerChangeHe
|
||||
exists(id:ODValidId): boolean {
|
||||
const newId = new ODId(id)
|
||||
if (this.#data.has(newId.value)) return true
|
||||
else{
|
||||
//DEPRECATED!!!
|
||||
const redirect = this.redirects.list().find((redirect) => redirect.fromSource === newId.getNamespace())
|
||||
if (!redirect) return false
|
||||
else{
|
||||
const redirectId = new ODId(redirect.toSource+":"+newId.getIdentifier())
|
||||
return this.exists(redirectId)
|
||||
}
|
||||
}
|
||||
else return false
|
||||
}
|
||||
/**Get all data inside this manager*/
|
||||
getAll(): DataType[] {
|
||||
@@ -648,8 +560,8 @@ export class ODHTTPGetRequest {
|
||||
this.throwOnError = throwOnError
|
||||
const newConfig = config ?? {}
|
||||
newConfig.method = "GET"
|
||||
if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.0.2"})
|
||||
else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.2"}
|
||||
if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.1.0"})
|
||||
else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.1.0"}
|
||||
this.config = newConfig
|
||||
}
|
||||
|
||||
@@ -703,8 +615,8 @@ export class ODHTTPPostRequest {
|
||||
this.throwOnError = throwOnError
|
||||
const newConfig = config ?? {}
|
||||
newConfig.method = "POST"
|
||||
if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.0.2"})
|
||||
else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.0.2"}
|
||||
if (newConfig.headers) Object.assign(newConfig.headers,{"User-Agent":"OpenDiscordBots-OpenTicket/4.1.0"})
|
||||
else newConfig.headers = {"User-Agent":"OpenDiscordBots-OpenTicket/4.1.0"}
|
||||
this.config = newConfig
|
||||
}
|
||||
|
||||
|
||||
+102
-65
@@ -257,17 +257,9 @@ export class ODQuickButton {
|
||||
/**The id of this button. */
|
||||
id: ODId
|
||||
/**The current data of this button */
|
||||
data: ODButtonData = {
|
||||
customId:"",
|
||||
mode:"button",
|
||||
url:null,
|
||||
color:null,
|
||||
label:null,
|
||||
emoji:null,
|
||||
disabled:false
|
||||
}
|
||||
data: Partial<ODButtonData>
|
||||
|
||||
constructor(id:ODValidId,data:ODButtonData){
|
||||
constructor(id:ODValidId,data:Partial<ODButtonData>){
|
||||
this.id = new ODId(id)
|
||||
this.data = data
|
||||
}
|
||||
@@ -277,17 +269,18 @@ export class ODQuickButton {
|
||||
try {
|
||||
//create the discord.js button
|
||||
const button = new discord.ButtonBuilder()
|
||||
if (this.data.mode == "button") button.setCustomId(this.data.customId)
|
||||
if (this.data.mode == "button" || (!this.data.mode && this.data.customId)) button.setCustomId(this.data.customId ?? "od:unknown-button")
|
||||
if (this.data.mode == "url") button.setStyle(discord.ButtonStyle.Link)
|
||||
else if (this.data.color == "gray") button.setStyle(discord.ButtonStyle.Secondary)
|
||||
else if (this.data.color == "blue") button.setStyle(discord.ButtonStyle.Primary)
|
||||
else if (this.data.color == "green") button.setStyle(discord.ButtonStyle.Success)
|
||||
else if (this.data.color == "red") button.setStyle(discord.ButtonStyle.Danger)
|
||||
else button.setStyle(discord.ButtonStyle.Secondary)
|
||||
if (this.data.url) button.setURL(this.data.url)
|
||||
if (this.data.label) button.setLabel(this.data.label)
|
||||
if (this.data.emoji) button.setEmoji(this.data.emoji)
|
||||
if (this.data.disabled) button.setDisabled(this.data.disabled)
|
||||
if (!this.data.emoji && !this.data.label) button.setLabel(this.data.customId)
|
||||
if (!this.data.emoji && !this.data.label) button.setLabel(this.data.customId ?? "od:unknown-button")
|
||||
|
||||
return {id:this.id,component:button}
|
||||
}catch(err){
|
||||
@@ -564,23 +557,9 @@ export class ODQuickDropdown {
|
||||
/**The id of this dropdown. */
|
||||
id: ODId
|
||||
/**The current data of this dropdown */
|
||||
data: ODDropdownData = {
|
||||
customId:"",
|
||||
type:"string",
|
||||
placeholder:null,
|
||||
minValues:null,
|
||||
maxValues:null,
|
||||
disabled:false,
|
||||
channelTypes:[],
|
||||
data: Partial<ODDropdownData>
|
||||
|
||||
options:[],
|
||||
users:[],
|
||||
roles:[],
|
||||
channels:[],
|
||||
mentionables:[]
|
||||
}
|
||||
|
||||
constructor(id:ODValidId,data:ODDropdownData){
|
||||
constructor(id:ODValidId,data:Partial<ODDropdownData>){
|
||||
this.id = new ODId(id)
|
||||
this.data = data
|
||||
}
|
||||
@@ -590,8 +569,9 @@ export class ODQuickDropdown {
|
||||
try{
|
||||
//create the discord.js dropdown
|
||||
if (this.data.type == "string"){
|
||||
if (!this.data.options) throw new ODSystemError("ODQuickDropdown:build(): "+this.id.value+" => Dropdown requires at least 1 option to be present.")
|
||||
const dropdown = new discord.StringSelectMenuBuilder()
|
||||
dropdown.setCustomId(this.data.customId)
|
||||
dropdown.setCustomId(this.data.customId ?? "od:unknown-dropdown")
|
||||
dropdown.setOptions(...this.data.options)
|
||||
if (this.data.placeholder) dropdown.setPlaceholder(this.data.placeholder)
|
||||
if (this.data.minValues) dropdown.setMinValues(this.data.minValues)
|
||||
@@ -601,8 +581,9 @@ export class ODQuickDropdown {
|
||||
return {id:this.id,component:dropdown}
|
||||
|
||||
}else if (this.data.type == "user"){
|
||||
if (!this.data.users) throw new ODSystemError("ODQuickDropdown:build(): "+this.id.value+" => Dropdown requires at least 1 user option to be present.")
|
||||
const dropdown = new discord.UserSelectMenuBuilder()
|
||||
dropdown.setCustomId(this.data.customId)
|
||||
dropdown.setCustomId(this.data.customId ?? "od:unknown-dropdown")
|
||||
if (this.data.users.length > 0) dropdown.setDefaultUsers(...this.data.users.map((u) => u.id))
|
||||
if (this.data.placeholder) dropdown.setPlaceholder(this.data.placeholder)
|
||||
if (this.data.minValues) dropdown.setMinValues(this.data.minValues)
|
||||
@@ -612,8 +593,9 @@ export class ODQuickDropdown {
|
||||
return {id:this.id,component:dropdown}
|
||||
|
||||
}else if (this.data.type == "role"){
|
||||
if (!this.data.roles) throw new ODSystemError("ODQuickDropdown:build(): "+this.id.value+" => Dropdown requires at least 1 role option to be present.")
|
||||
const dropdown = new discord.RoleSelectMenuBuilder()
|
||||
dropdown.setCustomId(this.data.customId)
|
||||
dropdown.setCustomId(this.data.customId ?? "od:unknown-dropdown")
|
||||
if (this.data.roles.length > 0) dropdown.setDefaultRoles(...this.data.roles.map((r) => r.id))
|
||||
if (this.data.placeholder) dropdown.setPlaceholder(this.data.placeholder)
|
||||
if (this.data.minValues) dropdown.setMinValues(this.data.minValues)
|
||||
@@ -623,8 +605,9 @@ export class ODQuickDropdown {
|
||||
return {id:this.id,component:dropdown}
|
||||
|
||||
}else if (this.data.type == "channel"){
|
||||
if (!this.data.channels) throw new ODSystemError("ODQuickDropdown:build(): "+this.id.value+" => Dropdown requires at least 1 channel option to be present.")
|
||||
const dropdown = new discord.ChannelSelectMenuBuilder()
|
||||
dropdown.setCustomId(this.data.customId)
|
||||
dropdown.setCustomId(this.data.customId ?? "od:unknown-dropdown")
|
||||
if (this.data.channels.length > 0) dropdown.setDefaultChannels(...this.data.channels.map((c) => c.id))
|
||||
if (this.data.placeholder) dropdown.setPlaceholder(this.data.placeholder)
|
||||
if (this.data.minValues) dropdown.setMinValues(this.data.minValues)
|
||||
@@ -634,6 +617,7 @@ export class ODQuickDropdown {
|
||||
return {id:this.id,component:dropdown}
|
||||
|
||||
}else if (this.data.type == "mentionable"){
|
||||
if (!this.data.mentionables) throw new ODSystemError("ODQuickDropdown:build(): "+this.id.value+" => Dropdown requires at least 1 mentionable option to be present.")
|
||||
const dropdown = new discord.MentionableSelectMenuBuilder()
|
||||
|
||||
const values: ({type:discord.SelectMenuDefaultValueType.User,id:string}|{type:discord.SelectMenuDefaultValueType.Role,id:string})[] = []
|
||||
@@ -645,7 +629,7 @@ export class ODQuickDropdown {
|
||||
}
|
||||
})
|
||||
|
||||
dropdown.setCustomId(this.data.customId)
|
||||
dropdown.setCustomId(this.data.customId ?? "od:unknown-dropdown")
|
||||
if (this.data.mentionables.length > 0) dropdown.setDefaultValues(...values)
|
||||
if (this.data.placeholder) dropdown.setPlaceholder(this.data.placeholder)
|
||||
if (this.data.minValues) dropdown.setMinValues(this.data.minValues)
|
||||
@@ -799,14 +783,9 @@ export class ODQuickFile {
|
||||
/**The id of this file. */
|
||||
id: ODId
|
||||
/**The current data of this file */
|
||||
data: ODFileData = {
|
||||
file:"",
|
||||
name:"file.txt",
|
||||
description:null,
|
||||
spoiler:false
|
||||
}
|
||||
data: Partial<ODFileData>
|
||||
|
||||
constructor(id:ODValidId,data:ODFileData){
|
||||
constructor(id:ODValidId,data:Partial<ODFileData>){
|
||||
this.id = new ODId(id)
|
||||
this.data = data
|
||||
}
|
||||
@@ -815,7 +794,7 @@ export class ODQuickFile {
|
||||
async build(): Promise<ODFileBuildResult> {
|
||||
try{
|
||||
//create the discord.js attachment
|
||||
const file = new discord.AttachmentBuilder(this.data.file)
|
||||
const file = new discord.AttachmentBuilder(this.data.file ?? "<empty-file>")
|
||||
file.setName(this.data.name ? this.data.name : "file.txt")
|
||||
if (this.data.description) file.setDescription(this.data.description)
|
||||
if (this.data.spoiler) file.setSpoiler(this.data.spoiler)
|
||||
@@ -857,7 +836,7 @@ export interface ODEmbedData {
|
||||
/**The title of the embed */
|
||||
title:string|null,
|
||||
/**The color of the embed */
|
||||
color:discord.ColorResolvable|null,
|
||||
color:discord.ColorResolvable|string|null,
|
||||
/**The url of the embed */
|
||||
url:string|null,
|
||||
/**The description of the embed */
|
||||
@@ -1015,7 +994,7 @@ export class ODEmbed<Source extends string,Params> extends ODBuilderImplementati
|
||||
//create the discord.js embed
|
||||
const embed = new discord.EmbedBuilder()
|
||||
if (instance.data.title) embed.setTitle(instance.data.title)
|
||||
if (instance.data.color) embed.setColor(instance.data.color)
|
||||
if (instance.data.color) embed.setColor(instance.data.color as discord.ColorResolvable)
|
||||
if (instance.data.url) embed.setURL(instance.data.url)
|
||||
if (instance.data.description) embed.setDescription(instance.data.description)
|
||||
if (instance.data.authorText) embed.setAuthor({
|
||||
@@ -1055,23 +1034,9 @@ export class ODQuickEmbed {
|
||||
/**The id of this embed. */
|
||||
id: ODId
|
||||
/**The current data of this embed */
|
||||
data: ODEmbedData = {
|
||||
title:null,
|
||||
color:null,
|
||||
url:null,
|
||||
description:null,
|
||||
authorText:null,
|
||||
authorImage:null,
|
||||
authorUrl:null,
|
||||
footerText:null,
|
||||
footerImage:null,
|
||||
image:null,
|
||||
thumbnail:null,
|
||||
fields:[],
|
||||
timestamp:null
|
||||
}
|
||||
data: Partial<ODEmbedData>
|
||||
|
||||
constructor(id:ODValidId,data:ODEmbedData){
|
||||
constructor(id:ODValidId,data:Partial<ODEmbedData>){
|
||||
this.id = new ODId(id)
|
||||
this.data = data
|
||||
}
|
||||
@@ -1082,7 +1047,7 @@ export class ODQuickEmbed {
|
||||
//create the discord.js embed
|
||||
const embed = new discord.EmbedBuilder()
|
||||
if (this.data.title) embed.setTitle(this.data.title)
|
||||
if (this.data.color) embed.setColor(this.data.color)
|
||||
if (this.data.color) embed.setColor(this.data.color as discord.ColorResolvable)
|
||||
if (this.data.url) embed.setURL(this.data.url)
|
||||
if (this.data.description) embed.setDescription(this.data.description)
|
||||
if (this.data.authorText) embed.setAuthor({
|
||||
@@ -1097,7 +1062,7 @@ export class ODQuickEmbed {
|
||||
if (this.data.image) embed.setImage(this.data.image)
|
||||
if (this.data.thumbnail) embed.setThumbnail(this.data.thumbnail)
|
||||
if (this.data.timestamp) embed.setTimestamp(this.data.timestamp)
|
||||
if (this.data.fields.length > 0) embed.setFields(this.data.fields)
|
||||
if (this.data.fields && this.data.fields.length > 0) embed.setFields(this.data.fields)
|
||||
|
||||
return {id:this.id,embed}
|
||||
}catch(err){
|
||||
@@ -1181,13 +1146,10 @@ export class ODMessageInstance {
|
||||
content:null,
|
||||
poll:null,
|
||||
ephemeral:false,
|
||||
|
||||
embeds:[],
|
||||
components:[],
|
||||
files:[],
|
||||
|
||||
additionalOptions:{
|
||||
}
|
||||
additionalOptions:{}
|
||||
}
|
||||
|
||||
/**Set the content of this message */
|
||||
@@ -1349,6 +1311,81 @@ export class ODMessage<Source extends string,Params> extends ODBuilderImplementa
|
||||
}
|
||||
}
|
||||
|
||||
/**## ODQuickMessage `class`
|
||||
* This is an Open Ticket quick message builder.
|
||||
*
|
||||
* With this class, you can quickly create a message to send in a discord channel.
|
||||
* This quick message can be used by Open Ticket plugins instead of the normal builders to speed up the process!
|
||||
*
|
||||
* Because of the quick functionality, these messages are less customisable by other plugins.
|
||||
*/
|
||||
export class ODQuickMessage {
|
||||
/**The id of this message. */
|
||||
id: ODId
|
||||
/**The current data of this message. */
|
||||
data: Partial<ODMessageData>
|
||||
|
||||
constructor(id:ODValidId,data:Partial<ODMessageData>){
|
||||
this.id = new ODId(id)
|
||||
this.data = data
|
||||
}
|
||||
|
||||
/**Build this message & compile it for discord.js */
|
||||
async build(): Promise<ODMessageBuildResult> {
|
||||
//create the discord.js message
|
||||
const componentArray: discord.ActionRowBuilder<discord.MessageActionRowComponentBuilder>[] = []
|
||||
let currentRow: discord.ActionRowBuilder<discord.MessageActionRowComponentBuilder> = new discord.ActionRowBuilder()
|
||||
this.data.components?.forEach((c) => {
|
||||
//return when component crashed
|
||||
if (c.component == null) return
|
||||
else if (c.component == "\n"){
|
||||
//create new current row when required
|
||||
if (currentRow.components.length > 0){
|
||||
componentArray.push(currentRow)
|
||||
currentRow = new discord.ActionRowBuilder()
|
||||
}
|
||||
}else if (c.component instanceof discord.BaseSelectMenuBuilder){
|
||||
//push current row when not empty
|
||||
if (currentRow.components.length > 0){
|
||||
componentArray.push(currentRow)
|
||||
currentRow = new discord.ActionRowBuilder()
|
||||
}
|
||||
currentRow.addComponents(c.component)
|
||||
//create new current row after dropdown
|
||||
componentArray.push(currentRow)
|
||||
currentRow = new discord.ActionRowBuilder()
|
||||
}else{
|
||||
//push button to current row
|
||||
currentRow.addComponents(c.component)
|
||||
}
|
||||
|
||||
//create new row when 5 rows in length
|
||||
if (currentRow.components.length == 5){
|
||||
componentArray.push(currentRow)
|
||||
currentRow = new discord.ActionRowBuilder()
|
||||
}
|
||||
})
|
||||
//push final row to array
|
||||
if (currentRow.components.length > 0) componentArray.push(currentRow)
|
||||
|
||||
const filteredEmbeds = (this.data.embeds?.map((e) => e.embed).filter((e) => e instanceof discord.EmbedBuilder) as discord.EmbedBuilder[]) ?? []
|
||||
const filteredFiles = (this.data.files?.map((f) => f.file).filter((f) => f instanceof discord.AttachmentBuilder) as discord.AttachmentBuilder[]) ?? []
|
||||
|
||||
const message : discord.MessageCreateOptions = {
|
||||
content:this.data.content ?? "",
|
||||
poll:this.data.poll ?? undefined,
|
||||
embeds:filteredEmbeds,
|
||||
components:componentArray,
|
||||
files:filteredFiles
|
||||
}
|
||||
|
||||
let result = {id:this.id,message,ephemeral:this.data.ephemeral ?? false}
|
||||
|
||||
Object.assign(result.message,this.data.additionalOptions)
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
/**## ODModalManager `class`
|
||||
* This is an Open Ticket modal manager.
|
||||
*
|
||||
|
||||
+135
-47
@@ -82,6 +82,10 @@ export class ODCheckerManager extends ODManager<ODChecker> {
|
||||
messages:final
|
||||
}
|
||||
}
|
||||
/**Create temporary and unlisted `ODConfig`, `ODChecker` & `ODCheckerStorage` classes. This will help you use a `ODCheckerStructure` validator without officially registering it in `opendiscord.checkers`. */
|
||||
createTemporaryCheckerEnvironment(){
|
||||
return new ODChecker("opendiscord:temporary-environment",new ODCheckerStorage(),0,new ODConfig("opendiscord:temporary-environment",{}),new ODCheckerStructure("opendiscord:temporary-environment",{}))
|
||||
}
|
||||
}
|
||||
|
||||
/**## ODCheckerStorage `class`
|
||||
@@ -289,6 +293,16 @@ export class ODCheckerFunctionManager extends ODManager<ODCheckerFunction> {
|
||||
*/
|
||||
export type ODCheckerLocationTrace = (string|number)[]
|
||||
|
||||
/**## ODCheckerOptions `interface`
|
||||
* This interface contains all optional properties to customise in the `ODChecker` class.
|
||||
*/
|
||||
export interface ODCheckerOptions {
|
||||
/**The name of this config in the Interactive Setup CLI. */
|
||||
cliDisplayName?:string
|
||||
/**The description of this config in the Interactive Setup CLI. */
|
||||
cliDisplayDescription?:string
|
||||
}
|
||||
|
||||
/**## ODChecker `class`
|
||||
* This is an Open Ticket config checker.
|
||||
*
|
||||
@@ -310,15 +324,29 @@ export class ODChecker extends ODManagerData {
|
||||
messages: ODCheckerMessage[] = []
|
||||
/**Temporary storage for the quit status from the check() method (not recommended to use) */
|
||||
quit: boolean = false
|
||||
/**All additional properties of this config checker. */
|
||||
options: ODCheckerOptions
|
||||
|
||||
constructor(id:ODValidId, storage: ODCheckerStorage, priority:number, config:ODConfig, structure: ODCheckerStructure){
|
||||
constructor(id:ODValidId, storage: ODCheckerStorage, priority:number, config:ODConfig, structure:ODCheckerStructure, options?:ODCheckerOptions){
|
||||
super(id)
|
||||
this.storage = storage
|
||||
this.priority = priority
|
||||
this.config = config
|
||||
this.structure = structure
|
||||
this.options = options ?? {}
|
||||
}
|
||||
|
||||
/**Get a human-readable number string. */
|
||||
#ordinalNumber(num:number){
|
||||
const i = Math.abs(Math.round(num))
|
||||
const cent = i % 100
|
||||
if (cent >= 10 && cent <= 20) return i+'th'
|
||||
const dec = i % 10
|
||||
if (dec === 1) return i+'st'
|
||||
if (dec === 2) return i+'nd'
|
||||
if (dec === 3) return i+'rd'
|
||||
return i+'th'
|
||||
}
|
||||
/**Run this checker. Returns all errors*/
|
||||
check(): ODCheckerResult {
|
||||
this.messages = []
|
||||
@@ -330,12 +358,12 @@ export class ODChecker extends ODManagerData {
|
||||
messages:this.messages
|
||||
}
|
||||
}
|
||||
/**Create a string from the location trace (path)*/
|
||||
/**Create a string from the location trace/path in a human readable format. */
|
||||
locationTraceToString(trace:ODCheckerLocationTrace){
|
||||
const final: ODCheckerLocationTrace = []
|
||||
trace.forEach((t) => {
|
||||
if (typeof t == "number"){
|
||||
final.push(`:${t}`)
|
||||
final.push(`:(${this.#ordinalNumber(t+1)})`)
|
||||
}else{
|
||||
final.push(`."${t}"`)
|
||||
}
|
||||
@@ -391,7 +419,15 @@ export interface ODCheckerStructureOptions {
|
||||
/**Add a custom checker function. Returns `true` when valid. */
|
||||
custom?:(checker:ODChecker, value:ODValidJsonType, locationTrace:ODCheckerLocationTrace, locationId:ODId, locationDocs:string|null) => boolean,
|
||||
/**Set the url to the documentation of this variable. */
|
||||
docs?:string
|
||||
docs?:string,
|
||||
/**The name of this config in the Interactive Setup CLI. */
|
||||
cliDisplayName?:string
|
||||
/**The description of this config in the Interactive Setup CLI. */
|
||||
cliDisplayDescription?:string
|
||||
/**Hide the description of this config in the Interactive Setup CLI parent view/list. */
|
||||
cliHideDescriptionInParent?:boolean
|
||||
/**The default value of this variable when creating it in the Interactive Setup CLI. When not specified, the user will be asked to insert a value. */
|
||||
cliInitDefaultValue?:ODValidJsonType
|
||||
}
|
||||
|
||||
/**## ODCheckerStructure `class`
|
||||
@@ -426,7 +462,13 @@ export class ODCheckerStructure {
|
||||
*/
|
||||
export interface ODCheckerObjectStructureOptions extends ODCheckerStructureOptions {
|
||||
/**Add a checker for a property in an object (can also be optional) */
|
||||
children?:{key:string, checker:ODCheckerStructure, priority:number, optional:boolean}[]
|
||||
children:{key:string, priority?:number, optional?:boolean, cliHideInEditMode?:boolean, checker:ODCheckerStructure}[],
|
||||
/**A list of keys to skip when creating this object with the Interactive Setup CLI. The default value of these properties will be used instead. */
|
||||
cliInitSkipKeys?:string[],
|
||||
/**The key of a (primitive) property in this object to show the value of in the Interactive Setup CLI when listed in an array. */
|
||||
cliDisplayKeyInParentArray?:string,
|
||||
/**A list of additional (primitive) property keys in this object to show the value of in the Interactive Setup CLI when listed in an array. */
|
||||
cliDisplayAdditionalKeysInParentArray?:string[]
|
||||
}
|
||||
|
||||
/**## ODCheckerObjectStructure `class`
|
||||
@@ -454,8 +496,8 @@ export class ODCheckerObjectStructure extends ODCheckerStructure {
|
||||
//sort children
|
||||
if (typeof this.options.children == "undefined") return super.check(checker,value,locationTrace)
|
||||
const sortedChildren = this.options.children.sort((a,b) => {
|
||||
if (a.priority < b.priority) return -1
|
||||
else if (a.priority > b.priority) return 1
|
||||
if ((a.priority ?? 0) < (b.priority ?? 0)) return -1
|
||||
else if ((a.priority ?? 0) > (b.priority ?? 0)) return 1
|
||||
else return 0
|
||||
})
|
||||
|
||||
@@ -497,10 +539,28 @@ export interface ODCheckerStringStructureOptions extends ODCheckerStructureOptio
|
||||
endsWith?:string,
|
||||
/**This string needs to contain ... */
|
||||
contains?:string,
|
||||
/**This string is not allowed to contain ... */
|
||||
invertedContains?:string,
|
||||
/**You need to choose between ... */
|
||||
choices?:string[],
|
||||
/**This string needs to be in lowercase. */
|
||||
lowercaseOnly?:boolean,
|
||||
/**This string needs to be in uppercase. */
|
||||
uppercaseOnly?:boolean,
|
||||
/**This string shouldn't contain any special characters (allowed: A-Z, a-z, 0-9, space, a few punctuation marks, ...). */
|
||||
noSpecialCharacters?:boolean,
|
||||
/**Do not allow any spaces in this string. */
|
||||
withoutSpaces?:boolean,
|
||||
/**Give a warning when a sentence doesn't start with a capital letter. Or require every word to start with a capital letter. (Ignores numbers, unicode characters, ...) */
|
||||
capitalLetterWarning?:false|"sentence"|"word"
|
||||
/**Give a warning when a sentence doesn't end with a punctuation letter (.,?!) */
|
||||
punctuationWarning?:boolean
|
||||
/**The string needs to match this regex */
|
||||
regex?:RegExp
|
||||
regex?:RegExp,
|
||||
/**Provide an optional list for autocomplete when using the Interactive Setup CLI. Defaults to the `choices` option. */
|
||||
cliAutocompleteList?:string[],
|
||||
/**Dynamically provide a list for autocomplete items when using the Interactive Setup CLI. */
|
||||
cliAutocompleteFunc?:() => Promise<string[]|null>
|
||||
}
|
||||
|
||||
/**## ODCheckerStringStructure `class`
|
||||
@@ -540,13 +600,35 @@ export class ODCheckerStringStructure extends ODCheckerStructure {
|
||||
}else if (typeof this.options.contains != "undefined" && !value.includes(this.options.contains)){
|
||||
checker.createMessage("opendiscord:string-contains","error",`This string needs to contain "${this.options.contains}"!`,lt,null,[`"${this.options.contains}"`],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (typeof this.options.invertedContains != "undefined" && value.includes(this.options.invertedContains)){
|
||||
checker.createMessage("opendiscord:string-inverted-contains","error",`This string is not allowed to contain "${this.options.invertedContains}"!`,lt,null,[`"${this.options.invertedContains}"`],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (typeof this.options.choices != "undefined" && !this.options.choices.includes(value)){
|
||||
checker.createMessage("opendiscord:string-choices","error",`This string can only be one of the following values: "${this.options.choices.join(`", "`)}"!`,lt,null,[`"${this.options.choices.join(`", "`)}"`],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (this.options.lowercaseOnly && value !== value.toLowerCase()){
|
||||
checker.createMessage("opendiscord:string-lowercase","error",`This string must be written in lowercase only!`,lt,null,[],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (this.options.uppercaseOnly && value !== value.toUpperCase()){
|
||||
checker.createMessage("opendiscord:string-uppercase","error",`This string must be written in uppercase only!`,lt,null,[],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (this.options.noSpecialCharacters && !/^[A-Za-z0-9 ]*$/.test(value)){
|
||||
checker.createMessage("opendiscord:string-special-characters","error",`This string is not allowed to contain any special characters! (a-z, 0-9 & space only)`,lt,null,[],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (this.options.withoutSpaces && value.includes(" ")){
|
||||
checker.createMessage("opendiscord:string-no-spaces","error",`This string is not allowed to contain spaces!`,lt,null,[],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (typeof this.options.regex != "undefined" && !this.options.regex.test(value)){
|
||||
checker.createMessage("opendiscord:string-regex","error","This string is invalid!",lt,null,[],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else return super.check(checker,value,locationTrace)
|
||||
}else{
|
||||
//warnings
|
||||
if ((this.options.capitalLetterWarning == "word" && !value.split(" ").every((word) => word.length == 0 || /^[^a-z].*/.test(word)))) checker.createMessage("opendiscord:string-capital-word","warning",`It's recommended that each word in this string starts with a capital letter!`,lt,null,[],this.id,(this.options.docs ?? null))
|
||||
if ((this.options.capitalLetterWarning == "sentence" && !value.split(/ *[.?!] */).every((sentence) => sentence.length == 0 || /^[^a-z].*/.test(sentence)))) checker.createMessage("opendiscord:string-capital-sentence","warning",`It looks like some sentences in this string don't start with a capital letter!`,lt,null,[],this.id,(this.options.docs ?? null))
|
||||
if (this.options.punctuationWarning && value.length > 0 && (!value.endsWith(".") && !value.endsWith("?") && !value.endsWith("!") && !value.endsWith("'") && !value.endsWith('"') && !value.endsWith(",") && !value.endsWith(";") && !value.endsWith(":") && !value.endsWith("="))) checker.createMessage("opendiscord:string-punctuation","warning",`It looks like the sentence in this string doesn't end with a punctuation mark!`,lt,null,[],this.id,(this.options.docs ?? null))
|
||||
|
||||
return super.check(checker,value,locationTrace)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -554,6 +636,8 @@ export class ODCheckerStringStructure extends ODCheckerStructure {
|
||||
* This interface has the options for `ODCheckerNumberStructure`!
|
||||
*/
|
||||
export interface ODCheckerNumberStructureOptions extends ODCheckerStructureOptions {
|
||||
/**Is `NaN` (not a number) allowed? (`false` by default) */
|
||||
nanAllowed?:boolean
|
||||
/**The minimum length of this number */
|
||||
minLength?:number,
|
||||
/**The maximum length of this number */
|
||||
@@ -576,6 +660,8 @@ export interface ODCheckerNumberStructureOptions extends ODCheckerStructureOptio
|
||||
endsWith?:string,
|
||||
/**This number needs to contain ... */
|
||||
contains?:string,
|
||||
/**This number is not allowed to contain ... */
|
||||
invertedContains?:string,
|
||||
/**You need to choose between ... */
|
||||
choices?:number[],
|
||||
/**Are numbers with a decimal value allowed? */
|
||||
@@ -610,6 +696,9 @@ export class ODCheckerNumberStructure extends ODCheckerStructure {
|
||||
if (typeof value != "number"){
|
||||
checker.createMessage("opendiscord:invalid-type","error","This property needs to be the type: number!",lt,null,["number"],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (!this.options.nanAllowed && isNaN(value)){
|
||||
checker.createMessage("opendiscord:number-nan","error",`This number can't be NaN (Not A Number)!`,lt,null,[],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (typeof this.options.minLength != "undefined" && value.toString().length < this.options.minLength){
|
||||
checker.createMessage("opendiscord:number-too-short","error",`This number can't be shorter than ${this.options.minLength} characters!`,lt,null,[this.options.minLength.toString()],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
@@ -641,19 +730,22 @@ export class ODCheckerNumberStructure extends ODCheckerStructure {
|
||||
}else if (typeof this.options.contains != "undefined" && !value.toString().includes(this.options.contains)){
|
||||
checker.createMessage("opendiscord:number-contains","error",`This number needs to contain "${this.options.contains}"!`,lt,null,[`"${this.options.contains}"`],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (typeof this.options.invertedContains != "undefined" && value.toString().includes(this.options.invertedContains)){
|
||||
checker.createMessage("opendiscord:number-inverted-contains","error",`This number is not allowed to contain "${this.options.invertedContains}"!`,lt,null,[`"${this.options.invertedContains}"`],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (typeof this.options.choices != "undefined" && !this.options.choices.includes(value)){
|
||||
checker.createMessage("opendiscord:number-choices","error",`This number can only be one of the following values: "${this.options.choices.join(`", "`)}"!`,lt,null,[`"${this.options.choices.join(`", "`)}"`],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (typeof this.options.floatAllowed != "undefined" && !this.options.floatAllowed && (value % 1) !== 0){
|
||||
checker.createMessage("opendiscord:number-float","error","This number can't be a decimal!",lt,null,[],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (typeof this.options.negativeAllowed != "undefined" && value < 0){
|
||||
}else if (typeof this.options.negativeAllowed != "undefined" && !this.options.negativeAllowed && value < 0){
|
||||
checker.createMessage("opendiscord:number-negative","error","This number can't be negative!",lt,null,[],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (typeof this.options.positiveAllowed != "undefined" && value > 0){
|
||||
}else if (typeof this.options.positiveAllowed != "undefined" && !this.options.positiveAllowed && value > 0){
|
||||
checker.createMessage("opendiscord:number-positive","error","This number can't be positive!",lt,null,[],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else if (typeof this.options.zeroAllowed != "undefined" && value === 0){
|
||||
}else if (typeof this.options.zeroAllowed != "undefined" && !this.options.zeroAllowed && value === 0){
|
||||
checker.createMessage("opendiscord:number-zero","error","This number can't be zero!",lt,null,[],this.id,(this.options.docs ?? null))
|
||||
return false
|
||||
}else return super.check(checker,value,locationTrace)
|
||||
@@ -718,7 +810,9 @@ export interface ODCheckerArrayStructureOptions extends ODCheckerStructureOption
|
||||
/**Allow double values (only for `string`, `number` & `boolean`) */
|
||||
allowDoubles?:boolean
|
||||
/**Only allow these types in the array (for multi-type propertyCheckers) */
|
||||
allowedTypes?:("string"|"number"|"boolean"|"null"|"array"|"object"|"other")[]
|
||||
allowedTypes?:("string"|"number"|"boolean"|"null"|"array"|"object"|"other")[],
|
||||
/**The name of the properties inside this array. Used in the GUI of the Interactive Setup CLI. */
|
||||
cliDisplayPropertyName?:string
|
||||
}
|
||||
|
||||
/**## ODCheckerArrayStructure `class`
|
||||
@@ -863,15 +957,15 @@ export interface ODCheckerTypeSwitchStructureOptions extends ODCheckerStructureO
|
||||
/**A checker when the property is a boolean */
|
||||
boolean?:ODCheckerBooleanStructure,
|
||||
/**A checker when the property is null */
|
||||
null?:ODCheckerStructure,
|
||||
null?:ODCheckerNullStructure,
|
||||
/**A checker when the property is an array */
|
||||
array?:ODCheckerStructure,
|
||||
array?:ODCheckerArrayStructure,
|
||||
/**A checker when the property is an object */
|
||||
object?:ODCheckerObjectStructure,
|
||||
/**A checker when the property is something else */
|
||||
other?:ODCheckerStructure,
|
||||
/**A list of allowed types */
|
||||
allowedTypes?:("string"|"number"|"boolean"|"null"|"array"|"object"|"other")[]
|
||||
allowedTypes:("string"|"number"|"boolean"|"null"|"array"|"object"|"other")[]
|
||||
}
|
||||
|
||||
/**## ODCheckerTypeSwitchStructure `class`
|
||||
@@ -925,9 +1019,9 @@ export class ODCheckerTypeSwitchStructure extends ODCheckerStructure {
|
||||
*/
|
||||
export interface ODCheckerObjectSwitchStructureOptions extends ODCheckerStructureOptions {
|
||||
/**An array of object checkers with their name, properties & priority. */
|
||||
objects?:{
|
||||
objects:{
|
||||
/**The properties to match for this checker to be used. */
|
||||
properties:{key:string, value:any}[],
|
||||
properties:{key:string, value:boolean|string|number}[],
|
||||
/**The name for this object type (used in rendering) */
|
||||
name:string,
|
||||
/**The higher the priority, the earlier this checker will be tested. */
|
||||
@@ -993,11 +1087,11 @@ export class ODCheckerObjectSwitchStructure extends ODCheckerStructure {
|
||||
*/
|
||||
export interface ODCheckerEnabledObjectStructureOptions extends ODCheckerStructureOptions {
|
||||
/**The name of the property to match the `enabledValue`. */
|
||||
property?:string,
|
||||
/**The value of the property to be enabled. Defaults to `true` */
|
||||
enabledValue?:any,
|
||||
property:string,
|
||||
/**The value of the property to be enabled. (e.g. `true`) */
|
||||
enabledValue:boolean|string|number,
|
||||
/**The object checker to use once the property has been matched. */
|
||||
checker?:ODCheckerObjectStructure
|
||||
checker:ODCheckerObjectStructure
|
||||
}
|
||||
|
||||
/**## ODCheckerEnabledObjectStructure `class`
|
||||
@@ -1387,35 +1481,29 @@ export class ODCheckerCustomStructure_UniqueIdArray extends ODCheckerArrayStruct
|
||||
/**The scope to push unique ids when used in this array! */
|
||||
readonly usedScope: string|null
|
||||
|
||||
constructor(id:ODValidId, source:string, scope:string, usedScope?:string, options?:ODCheckerArrayStructureOptions){
|
||||
constructor(id:ODValidId, source:string, scope:string, usedScope?:string, options?:ODCheckerArrayStructureOptions, idOptions?:Omit<ODCheckerStringStructureOptions,"minLength"|"custom">){
|
||||
//add premade custom structure checker
|
||||
const newOptions = options ?? {}
|
||||
newOptions.custom = (checker,value,locationTrace,locationId,locationDocs) => {
|
||||
const lt = checker.locationTraceDeref(locationTrace)
|
||||
newOptions.propertyChecker = new ODCheckerStringStructure("opendiscord:unique-id",{...(idOptions ?? {}),minLength:1,custom:(checker,value,locationTrace,locationId,locationDocs) => {
|
||||
if (typeof value != "string") return false
|
||||
const localLt = checker.locationTraceDeref(locationTrace)
|
||||
localLt.pop()
|
||||
|
||||
if (!Array.isArray(value)) return false
|
||||
const uniqueArray: string[] = (checker.storage.get(source,scope) === null) ? [] : checker.storage.get(source,scope)
|
||||
|
||||
let localQuit = false
|
||||
value.forEach((id,index) => {
|
||||
if (typeof id != "string") return
|
||||
const localLt = checker.locationTraceDeref(lt)
|
||||
localLt.push(index)
|
||||
if (uniqueArray.includes(id)){
|
||||
//exists
|
||||
if (usedScope){
|
||||
const current: string[] = checker.storage.get(source,usedScope) ?? []
|
||||
current.push(id)
|
||||
checker.storage.set(source,usedScope,current)
|
||||
}
|
||||
}else{
|
||||
//doesn't exist
|
||||
checker.createMessage("opendiscord:id-non-existent","error",`The id "${id}" doesn't exist!`,localLt,null,[`"${id}"`],this.id,(this.options.docs ?? null))
|
||||
localQuit = true
|
||||
const uniqueArray: string[] = checker.storage.get(source,scope) ?? []
|
||||
if (uniqueArray.includes(value)){
|
||||
//exists
|
||||
if (usedScope){
|
||||
const current: string[] = checker.storage.get(source,usedScope) ?? []
|
||||
current.push(value)
|
||||
checker.storage.set(source,usedScope,current)
|
||||
}
|
||||
})
|
||||
return !localQuit
|
||||
}
|
||||
return true
|
||||
}else{
|
||||
//doesn't exist
|
||||
checker.createMessage("opendiscord:id-non-existent","error",`The id "${value}" doesn't exist!`,localLt,null,[`"${value}"`],locationId,locationDocs)
|
||||
return false
|
||||
}
|
||||
}})
|
||||
super(id,newOptions)
|
||||
this.source = source
|
||||
this.scope = scope
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user