Compare commits
219
Commits
v4.0.0-beta3
...
v4.1.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d31be1bb57 | ||
|
|
76095bea30 | ||
|
|
da962c6c2e | ||
|
|
a89d5c2149 | ||
|
|
7d5313c77e | ||
|
|
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 | ||
|
|
6355fb5562 | ||
|
|
442c201994 | ||
|
|
b61f9d4d5a | ||
|
|
129053b9f5 | ||
|
|
35a0511b97 | ||
|
|
bae221056c | ||
|
|
9c6e4ccde4 | ||
|
|
ac6845b4d4 | ||
|
|
30352b570a | ||
|
|
1fddad1e96 | ||
|
|
75770c84b2 | ||
|
|
2281d78896 | ||
|
|
37cc3b794e | ||
|
|
d545d21bb1 | ||
|
|
5f79ae909b | ||
|
|
831e120093 | ||
|
|
376fa23288 | ||
|
|
9414b96221 | ||
|
|
0befd2860e | ||
|
|
74d4ac24f2 | ||
|
|
364bf4f702 | ||
|
|
dd5b76f3d8 | ||
|
|
a02ba56e9a | ||
|
|
6d5bdc5dd4 | ||
|
|
51bfb1a367 | ||
|
|
d85d842046 | ||
|
|
53136e0e6c | ||
|
|
2031a82523 | ||
|
|
453c48fab5 | ||
|
|
fd3bc0e7b9 | ||
|
|
f316ae83e7 | ||
|
|
d2c5cf0fc1 | ||
|
|
45dfc18c1d | ||
|
|
d81b1e7be3 | ||
|
|
2a82bdebae | ||
|
|
c9e13b2471 | ||
|
|
cbeac2fda2 | ||
|
|
8b1dd7d27a | ||
|
|
9e7cd28c6a | ||
|
|
fabe11bfd1 | ||
|
|
79187b9995 | ||
|
|
a1251cf11c | ||
|
|
1bc8b2b401 | ||
|
|
ce727e52b0 | ||
|
|
30233df7b0 | ||
|
|
48d3296868 | ||
|
|
6b8ef26b4c | ||
|
|
9c992c3dbd | ||
|
|
6feb56c25c | ||
|
|
e29b6afd87 | ||
|
|
d35b7fca99 | ||
|
|
126fada990 | ||
|
|
bd4929f11b | ||
|
|
d28fcf40d7 | ||
|
|
bed4e2a56a | ||
|
|
ba3a35a343 | ||
|
|
1e159c9bab | ||
|
|
e7ad3dd50b | ||
|
|
177dee7468 | ||
|
|
0d40c23aa8 | ||
|
|
15eef95fdd | ||
|
|
c89e93d33d | ||
|
|
e6c413cdf5 | ||
|
|
b12556120c | ||
|
|
58674452d8 | ||
|
|
a2f9593d55 | ||
|
|
9702c4d97d | ||
|
|
f13777e5f3 | ||
|
|
9395e9af75 | ||
|
|
b2a5e65fe2 | ||
|
|
071c8f953c | ||
|
|
9a4e5e2175 | ||
|
|
4e709f2a0b | ||
|
|
27e3e78439 | ||
|
|
06e7919162 | ||
|
|
bf952e3ef7 | ||
|
|
a397b66c9e | ||
|
|
27f6e3a81f | ||
|
|
f2cefae37c | ||
|
|
6acbf74846 | ||
|
|
29f8e1452c | ||
|
|
ce242741cd | ||
|
|
ac587568d3 | ||
|
|
f5e78949d7 | ||
|
|
f05d2d7d1b | ||
|
|
0604e334ed | ||
|
|
e9d20c0a14 | ||
|
|
67465bfdf4 | ||
|
|
a66d3aad2d | ||
|
|
f2de7fc408 | ||
|
|
fc8a252e67 | ||
|
|
ca9fe0aa77 | ||
|
|
9028eaa16a | ||
|
|
e1f4936ae6 |
@@ -0,0 +1,328 @@
|
|||||||
|
//@ts-check
|
||||||
|
const fs = require("fs")
|
||||||
|
|
||||||
|
/*////// OT DOCS GENERATOR ////////
|
||||||
|
What does this file do?:
|
||||||
|
Well, this file will parse the result returned from typedoc (the documentation generator).
|
||||||
|
The resulting file will then be used in the OT Docs markdown generator to generate the Open Ticket API Reference.
|
||||||
|
|
||||||
|
In short:
|
||||||
|
This file generates the documentation for Open Ticket :)
|
||||||
|
|
||||||
|
Contributing:
|
||||||
|
If you want to contribute to the Open Ticket Docs, please run the following command:
|
||||||
|
|
||||||
|
> npm run docs
|
||||||
|
|
||||||
|
This will give you a "result.json" file which can then be used in the OT Docs.
|
||||||
|
Further instructions can be found there.
|
||||||
|
/////////////////////////////////*/
|
||||||
|
|
||||||
|
if (!fs.existsSync(".docs/typedoc-result.json")){
|
||||||
|
console.log("Unable to generate documentation! Run typedoc first!")
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
const result = JSON.parse(fs.readFileSync(".docs/typedoc-result.json").toString())
|
||||||
|
const availableElements = []
|
||||||
|
const skipElementNames = [
|
||||||
|
"#opendiscord-types"
|
||||||
|
]
|
||||||
|
|
||||||
|
const handleFunction = (memberType) => {
|
||||||
|
if (!memberType || !memberType.signatures || !Array.isArray(memberType.signatures)) return {type:"unknown"}
|
||||||
|
|
||||||
|
//try to get signature
|
||||||
|
let signature = memberType.signatures.find((s) => !s.typeParameters)
|
||||||
|
if (!signature) signature = memberType.signatures[0]
|
||||||
|
if (!signature) return {type:"unknown"}
|
||||||
|
|
||||||
|
//try to get comment
|
||||||
|
let comment = signature.comment
|
||||||
|
if (!comment) comment = memberType.signatures.find((s) => s.comment)?.comment
|
||||||
|
if (!comment) comment = null
|
||||||
|
|
||||||
|
const signatureInherited = signature.flags.isInherited ? true : false
|
||||||
|
const signatureComment = comment ? comment.summary?.map((c) => c.text).join("") : null
|
||||||
|
const signatureParameters = signature.parameters?.map((p) => {
|
||||||
|
return {name:p.name,details:handleType(p.type)}
|
||||||
|
}) ?? []
|
||||||
|
const signatureReturns = handleType(signature.type)
|
||||||
|
|
||||||
|
return {type:"function",inherited:signatureInherited,comment:signatureComment,parameters:signatureParameters,returns:signatureReturns}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleObject = (memberType) => {
|
||||||
|
if (!memberType || !memberType.children || !Array.isArray(memberType.children)) return {type:"unknown"}
|
||||||
|
const propertyIds = memberType.groups?.find((g) => g.title == "Properties")?.children ?? []
|
||||||
|
const methodIds = memberType.groups?.find((g) => g.title == "Methods")?.children ?? []
|
||||||
|
|
||||||
|
const objectChildren = []
|
||||||
|
for (const member of (memberType.children ?? [])){
|
||||||
|
const memberName = member.name
|
||||||
|
const memberType = propertyIds.includes(member.id) ? "property" : methodIds.includes(member.id) ? "method" : "other"
|
||||||
|
let memberComment = member.comment?.summary?.map((c) => c.text).join("") ?? null
|
||||||
|
|
||||||
|
const rawMemberSource = member.sources ? (member.sources[0] ?? null) : null
|
||||||
|
let memberSource = rawMemberSource ? rawMemberSource.fileName+":"+rawMemberSource.line+":"+rawMemberSource.character : null
|
||||||
|
|
||||||
|
let memberDetails = null
|
||||||
|
if (memberType == "property"){
|
||||||
|
//INTERFACE => PROPERTY
|
||||||
|
memberDetails = handleType(member.type)
|
||||||
|
}else if (memberType == "method"){
|
||||||
|
//INTERFACE => METHOD
|
||||||
|
memberDetails = handleFunction(member)
|
||||||
|
memberComment = memberDetails.comment
|
||||||
|
}
|
||||||
|
|
||||||
|
objectChildren.push({
|
||||||
|
type:memberType,
|
||||||
|
name:memberName,
|
||||||
|
comment:memberComment,
|
||||||
|
source:memberSource,
|
||||||
|
details:memberDetails
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return {type:"object",children:objectChildren}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleType = (memberType) => {
|
||||||
|
if (!memberType || !memberType.type) return {type:"unknown"}
|
||||||
|
else if (memberType.type == "intrinsic") return {type:"primitive",name:memberType.name}
|
||||||
|
else if (memberType.type == "array") return {type:"array",child:handleType(memberType.elementType)}
|
||||||
|
else if (memberType.type == "union") return {type:"union",children:memberType.types.map((t) => handleType(t))}
|
||||||
|
else if (memberType.type == "intersection") return {type:"intersection",children:memberType.types.map((t) => handleType(t))}
|
||||||
|
else if (memberType.type == "reference"){
|
||||||
|
const referenceTypeArguments = (memberType.typeArguments) ? memberType.typeArguments.map((ta) => handleType(ta)) : null
|
||||||
|
let referenceType = availableElements.find((el) => el.name == memberType.name)?.type ?? null
|
||||||
|
|
||||||
|
if (referenceType){
|
||||||
|
//member is known type (from Open Ticket)
|
||||||
|
return {type:"reference",name:memberType.name,target:referenceType,typeArguments:referenceTypeArguments}
|
||||||
|
}else if (memberType.package){
|
||||||
|
//member is type from node.js or another package
|
||||||
|
if (memberType.package == "typescript") return {type:"internal",name:memberType.name,typeArguments:referenceTypeArguments}
|
||||||
|
if (memberType.package == "open-ticket" && memberType.refersToTypeParameter) return {type:"typeParam",name:memberType.name,typeArguments:referenceTypeArguments}
|
||||||
|
else return {type:"external",package:memberType.package,name:memberType.name,typeArguments:referenceTypeArguments}
|
||||||
|
}else return {type:"unknown"}
|
||||||
|
}
|
||||||
|
else if (memberType.type == "literal") return {type:"literal",name:(typeof memberType.value == "string") ? JSON.stringify(memberType.value) : String(memberType.value)}
|
||||||
|
else if (memberType.type == "typeOperator"){
|
||||||
|
if (memberType.operator == "keyof") return {type:"keyof",child:handleType(memberType.target)}
|
||||||
|
else if (memberType.operator == "readonly") return {type:"readonly",child:handleType(memberType.target)}
|
||||||
|
else if (memberType.operator == "unique") return {type:"unique",child:handleType(memberType.target)}
|
||||||
|
}
|
||||||
|
else if (memberType.type == "conditional") return {type:"conditional",checker:handleType(memberType.checkType),extends:handleType(memberType.extendsType),trueValue:handleType(memberType.trueType),falseValue:handleType(memberType.falseType)}
|
||||||
|
else if (memberType.type == "indexedAccess") return {type:"index",index:handleType(memberType.indexType),object:handleType(memberType.objectType)}
|
||||||
|
else if (memberType.type == "mapped") return {type:"mapped",parameterName:memberType.parameter,parameter:handleType(memberType.parameterType),template:handleType(memberType.templateType)}
|
||||||
|
else if (memberType.type == "optional") return {type:"optional",child:handleType(memberType.elementType)}
|
||||||
|
else if (memberType.type == "predicate") return {type:"predicate",name:memberType.name,target:handleType(memberType.targetType)}
|
||||||
|
else if (memberType.type == "query") return {type:"query",target:handleType(memberType.queryType)}
|
||||||
|
else if (memberType.type == "rest") return {type:"rest",child:handleType(memberType.elementType)}
|
||||||
|
else if (memberType.type == "tuple") return {type:"tuple",children:memberType.elements.map((t) => handleType(t))}
|
||||||
|
else if (memberType.type == "templateLiteral") return {type:"template",head:memberType.head,tails:memberType.tail.map((t) => {
|
||||||
|
return {element:handleType(t[0]),text:t[1]}
|
||||||
|
})}
|
||||||
|
else if (memberType.type == "reflection" && memberType.declaration && memberType.declaration.signatures && memberType.declaration.signatures[0]){
|
||||||
|
return handleFunction(memberType.declaration)
|
||||||
|
}
|
||||||
|
else if (memberType.type == "reflection"){
|
||||||
|
return handleObject(memberType.declaration)
|
||||||
|
}
|
||||||
|
else return {type:"unknown"}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const file of result.children){
|
||||||
|
const classIds = file.groups?.find((g) => g.title == "Classes")?.children ?? []
|
||||||
|
const interfaceIds = file.groups?.find((g) => g.title == "Interfaces")?.children ?? []
|
||||||
|
const typeIds = file.groups?.find((g) => g.title == "Type Aliases")?.children ?? []
|
||||||
|
const enumIds = file.groups?.find((g) => g.title == "Enumerations")?.children ?? []
|
||||||
|
const varIds = file.groups?.find((g) => g.title == "Variables")?.children ?? []
|
||||||
|
const funcIds = file.groups?.find((g) => g.title == "Functions")?.children ?? []
|
||||||
|
|
||||||
|
for (const declaration of file.children){
|
||||||
|
const declarationName = declaration.name
|
||||||
|
const declarationType = classIds.includes(declaration.id) ? "class" : interfaceIds.includes(declaration.id) ? "interface" : typeIds.includes(declaration.id) ? "type" : enumIds.includes(declaration.id) ? "enum" : varIds.includes(declaration.id) ? "variable" : funcIds.includes(declaration.id) ? "function" : "other"
|
||||||
|
availableElements.push({name:declarationName,type:declarationType})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const exported = []
|
||||||
|
for (const file of result.children){
|
||||||
|
const classIds = file.groups?.find((g) => g.title == "Classes")?.children ?? []
|
||||||
|
const interfaceIds = file.groups?.find((g) => g.title == "Interfaces")?.children ?? []
|
||||||
|
const typeIds = file.groups?.find((g) => g.title == "Type Aliases")?.children ?? []
|
||||||
|
const enumIds = file.groups?.find((g) => g.title == "Enumerations")?.children ?? []
|
||||||
|
const varIds = file.groups?.find((g) => g.title == "Variables")?.children ?? []
|
||||||
|
const funcIds = file.groups?.find((g) => g.title == "Functions")?.children ?? []
|
||||||
|
|
||||||
|
for (const declaration of (file.children ?? [])){
|
||||||
|
const declarationName = declaration.name
|
||||||
|
if (skipElementNames.includes(declarationName)) continue
|
||||||
|
|
||||||
|
const declarationType = classIds.includes(declaration.id) ? "class" : interfaceIds.includes(declaration.id) ? "interface" : typeIds.includes(declaration.id) ? "type" : enumIds.includes(declaration.id) ? "enum" : varIds.includes(declaration.id) ? "variable" : funcIds.includes(declaration.id) ? "function" : "other"
|
||||||
|
const declarationTypeParams = (declaration.typeParameters) ? declaration.typeParameters.map((tp) => {
|
||||||
|
return {name:tp.name,type:handleType(tp.type)}
|
||||||
|
}) : null
|
||||||
|
const declarationComment = declaration.comment?.summary?.map((c) => c.text).join("") ?? null
|
||||||
|
const declarationConstant = declaration.flags.isConst ? true : false
|
||||||
|
|
||||||
|
const rawDeclarationSource = declaration.sources ? (declaration.sources[0] ?? null) : null
|
||||||
|
const declarationSource = rawDeclarationSource ? rawDeclarationSource.fileName+":"+rawDeclarationSource.line+":"+rawDeclarationSource.character : null
|
||||||
|
|
||||||
|
const declarationChildren = []
|
||||||
|
if (declarationType == "class"){
|
||||||
|
//CLASS
|
||||||
|
const constructorIds = declaration.groups?.find((g) => g.title == "Constructors")?.children ?? []
|
||||||
|
const propertyIds = declaration.groups?.find((g) => g.title == "Properties")?.children ?? []
|
||||||
|
const methodIds = declaration.groups?.find((g) => g.title == "Methods")?.children ?? []
|
||||||
|
|
||||||
|
for (const member of (declaration.children ?? [])){
|
||||||
|
const memberName = member.name
|
||||||
|
const memberType = constructorIds.includes(member.id) ? "constructor" : propertyIds.includes(member.id) ? "property" : methodIds.includes(member.id) ? "method" : "other"
|
||||||
|
let memberComment = member.comment?.summary?.map((c) => c.text).join("") ?? null
|
||||||
|
|
||||||
|
const rawMemberSource = member.sources ? (member.sources[0] ?? null) : null
|
||||||
|
let memberSource = rawMemberSource ? rawMemberSource.fileName+":"+rawMemberSource.line+":"+rawMemberSource.character : null
|
||||||
|
|
||||||
|
const memberInherited = member.flags.isInherited ? true : false
|
||||||
|
const memberStatic = member.flags.isStatic ? true : false
|
||||||
|
const memberProtected = member.flags.isProtected ? true : false
|
||||||
|
const memberOptional = member.flags.isOptional ? true : false
|
||||||
|
const memberReadonly = member.flags.isReadonly ? true : false
|
||||||
|
|
||||||
|
let memberDetails = null
|
||||||
|
if (memberType == "property"){
|
||||||
|
//CLASS => PROPERTY
|
||||||
|
memberDetails = handleType(member.type)
|
||||||
|
|
||||||
|
}else if (memberType == "method"){
|
||||||
|
//CLASS => METHOD
|
||||||
|
memberDetails = handleFunction(member)
|
||||||
|
memberComment = memberDetails.comment
|
||||||
|
|
||||||
|
}else if (memberType == "constructor"){
|
||||||
|
//CLASS => CONSTRUCTOR
|
||||||
|
memberDetails = handleFunction(member)
|
||||||
|
memberComment = memberDetails.comment
|
||||||
|
}
|
||||||
|
|
||||||
|
declarationChildren.push({
|
||||||
|
type:memberType,
|
||||||
|
name:memberName,
|
||||||
|
comment:memberComment,
|
||||||
|
source:memberSource,
|
||||||
|
details:memberDetails,
|
||||||
|
inherited:memberInherited,
|
||||||
|
static:memberStatic,
|
||||||
|
protected:memberProtected,
|
||||||
|
optional:memberOptional,
|
||||||
|
readonly:memberReadonly
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}else if (declarationType == "interface"){
|
||||||
|
//INTERFACE
|
||||||
|
const propertyIds = declaration.groups?.find((g) => g.title == "Properties")?.children ?? []
|
||||||
|
const methodIds = declaration.groups?.find((g) => g.title == "Methods")?.children ?? []
|
||||||
|
|
||||||
|
for (const member of (declaration.children ?? [])){
|
||||||
|
const memberName = member.name
|
||||||
|
const memberType = propertyIds.includes(member.id) ? "property" : methodIds.includes(member.id) ? "method" : "other"
|
||||||
|
let memberComment = member.comment?.summary?.map((c) => c.text).join("") ?? null
|
||||||
|
|
||||||
|
const rawMemberSource = member.sources ? (member.sources[0] ?? null) : null
|
||||||
|
let memberSource = rawMemberSource ? rawMemberSource.fileName+":"+rawMemberSource.line+":"+rawMemberSource.character : null
|
||||||
|
|
||||||
|
const memberInherited = member.flags.isInherited ? true : false
|
||||||
|
const memberStatic = member.flags.isStatic ? true : false
|
||||||
|
const memberProtected = member.flags.isProtected ? true : false
|
||||||
|
const memberOptional = member.flags.isOptional ? true : false
|
||||||
|
const memberReadonly = member.flags.isReadonly ? true : false
|
||||||
|
|
||||||
|
let memberDetails = null
|
||||||
|
if (memberType == "property"){
|
||||||
|
//INTERFACE => PROPERTY
|
||||||
|
memberDetails = handleType(member.type)
|
||||||
|
}else if (memberType == "method"){
|
||||||
|
//INTERFACE => METHOD
|
||||||
|
memberDetails = handleFunction(member)
|
||||||
|
memberComment = memberDetails.comment
|
||||||
|
}
|
||||||
|
|
||||||
|
declarationChildren.push({
|
||||||
|
type:memberType,
|
||||||
|
name:memberName,
|
||||||
|
comment:memberComment,
|
||||||
|
source:memberSource,
|
||||||
|
details:memberDetails,
|
||||||
|
inherited:memberInherited,
|
||||||
|
static:memberStatic,
|
||||||
|
protected:memberProtected,
|
||||||
|
optional:memberOptional,
|
||||||
|
readonly:memberReadonly
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}else if (declarationType == "type"){
|
||||||
|
//TYPE
|
||||||
|
declarationChildren.push(handleType(declaration.type))
|
||||||
|
}else if (declarationType == "enum"){
|
||||||
|
//ENUM
|
||||||
|
const enumerableIds = declaration.groups?.find((g) => g.title == "Enumeration Members")?.children ?? []
|
||||||
|
|
||||||
|
for (const member of (declaration.children ?? [])){
|
||||||
|
const memberName = member.name
|
||||||
|
const memberType = enumerableIds.includes(member.id) ? "enumerable" : "other"
|
||||||
|
const memberComment = member.comment?.summary?.map((c) => c.text).join("") ?? null
|
||||||
|
|
||||||
|
const rawMemberSource = member.sources ? (member.sources[0] ?? null) : null
|
||||||
|
let memberSource = rawMemberSource ? rawMemberSource.fileName+":"+rawMemberSource.line+":"+rawMemberSource.character : null
|
||||||
|
|
||||||
|
let memberDetails = null
|
||||||
|
if (memberType == "enumerable"){
|
||||||
|
//ENUM => ENUMERABLE
|
||||||
|
memberDetails = handleType(member.type)
|
||||||
|
}
|
||||||
|
|
||||||
|
const memberInherited = member.flags.isInherited ? true : false
|
||||||
|
const memberStatic = member.flags.isStatic ? true : false
|
||||||
|
const memberProtected = member.flags.isProtected ? true : false
|
||||||
|
const memberOptional = member.flags.isOptional ? true : false
|
||||||
|
const memberReadonly = member.flags.isReadonly ? true : false
|
||||||
|
|
||||||
|
declarationChildren.push({
|
||||||
|
type:memberType,
|
||||||
|
name:memberName,
|
||||||
|
comment:memberComment,
|
||||||
|
source:memberSource,
|
||||||
|
details:memberDetails,
|
||||||
|
inherited:memberInherited,
|
||||||
|
static:memberStatic,
|
||||||
|
protected:memberProtected,
|
||||||
|
optional:memberOptional,
|
||||||
|
readonly:memberReadonly
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}else if (declarationType == "variable"){
|
||||||
|
//VARIABLE
|
||||||
|
declarationChildren.push(handleType(declaration.type))
|
||||||
|
|
||||||
|
}else if (declarationType == "function"){
|
||||||
|
//FUNCTION
|
||||||
|
declarationChildren.push(handleFunction(declaration))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
exported.push({
|
||||||
|
type:declarationType,
|
||||||
|
name:declarationName,
|
||||||
|
comment:declarationComment,
|
||||||
|
constant:declarationConstant,
|
||||||
|
source:declarationSource,
|
||||||
|
children:declarationChildren,
|
||||||
|
typeParams:declarationTypeParams
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(".docs/result.json",JSON.stringify(exported,null,"\t"))
|
||||||
|
fs.rmSync(".docs/typedoc-result.json")
|
||||||
@@ -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.1"
|
||||||
|
const finalText = formatter.stringify(original)
|
||||||
|
fs.writeFileSync("./languages/"+language,finalText)
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://typedoc.org/schema.json",
|
||||||
|
"entryPoints": [
|
||||||
|
"../src/core/api/modules/",
|
||||||
|
"../src/core/api/defaults/",
|
||||||
|
"../src/core/api/openticket/",
|
||||||
|
"../src/core/api/main.ts",
|
||||||
|
"../src/core/startup/init.ts",
|
||||||
|
],
|
||||||
|
"entryPointStrategy": "expand",
|
||||||
|
"json": "./typedoc-result.json",
|
||||||
|
"basePath": "../"
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# Pterodactyl Eggs
|
||||||
|
<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.1.1)
|
||||||
|
[](https://github.com/sponsors/DJj123dj)
|
||||||
|
[](.eggs/README.md)
|
||||||
|
|
||||||
|
|
||||||
|
Hi there! Open Ticket provides **official eggs** for the Pterodactyl & Pelican panels!<br>
|
||||||
|
There are different eggs for different versions of Open Ticket.
|
||||||
|
Please choose the one that fits your needs the most.
|
||||||
|
|
||||||
|
If you encounter any issues while installing these eggs, please head to our [**discord server**](https://discord.dj-dj.be) for further assistance!
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
It's recommended to provide at least `1GB` of **Memory/RAM** and `5GB` of **disk space** for Open Ticket to work correctly.
|
||||||
|
|
||||||
|
### Egg Variants
|
||||||
|
[**`openticket-egg-main.json` (Recommended)**](openticket-egg-main.json)
|
||||||
|
- This egg will use the `main` branch of Open Ticket.
|
||||||
|
|
||||||
|
[**`openticket-egg-v4.1.1.json`**](openticket-egg-v4.1.1.json)
|
||||||
|
- This egg will always use Open Ticket `v4.1.1`. Open Ticket updates will not have an effect on this egg.
|
||||||
|
|
||||||
|
[**`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-v3.5.9.json`**](openticket-egg-v3.5.9.json)
|
||||||
|
- This egg will always use Open Ticket `v3.5.9`. Open Ticket updates will not have an effect on this egg.
|
||||||
|
|
||||||
|
[**`openticket-egg-dev.json` (Not Recommended)**](openticket-egg-dev.json)
|
||||||
|
- This egg will use the `dev` branch of Open Ticket.
|
||||||
|
|
||||||
|
---
|
||||||
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="170px">
|
||||||
|
|
||||||
|
**Pterodactyl Eggs**<br>
|
||||||
|
[Changelog](https://otgithub.dj-dj.be/releases) - [Documentation](https://otdocs.dj-dj.be) - [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)
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO",
|
||||||
|
"meta": {
|
||||||
|
"version": "PTDL_v2",
|
||||||
|
"update_url": null
|
||||||
|
},
|
||||||
|
"exported_at": "2025-03-16T18:10:21+01:00",
|
||||||
|
"name": "Open Ticket (Experimental)",
|
||||||
|
"author": "support@dj-dj.be",
|
||||||
|
"description": "This is the experimental Pterodactyl egg for Open Ticket, the most advanced & customisable discord ticket bot that you will ever find! DO NOT USE IN PRODUCTION!",
|
||||||
|
"features": null,
|
||||||
|
"docker_images": {
|
||||||
|
"ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20"
|
||||||
|
},
|
||||||
|
"file_denylist": [],
|
||||||
|
"startup": "if [[ ! -z ${NODE_PACKAGES} ]]; then npm install ${NODE_PACKAGES}; fi; if [[ ! -z ${UNNODE_PACKAGES} ]]; then npm uninstall ${UNNODE_PACKAGES}; fi; if [ -f \/home\/container\/package.json ]; then npm install; fi; node \"\/home\/container\/index.js\" ${NODE_FLAGS};",
|
||||||
|
"config": {
|
||||||
|
"files": "{}",
|
||||||
|
"startup": "{\r\n \"done\": \"STARTUP INFO:\"\r\n}",
|
||||||
|
"logs": "{}",
|
||||||
|
"stop": "^C"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"installation": {
|
||||||
|
"script": "#!\/bin\/bash\r\n# Open Ticket Installation Script (dev)\r\n# Inspired by: Node.js Installation Script\r\n# \u00a9 DJdj Development\r\n\r\necho -e \"[OT INSTALLER] installing dependencies. please wait...\"\r\napt update\r\napt install -y git curl\r\n\r\necho -e \"[OT INSTALLER] updating npm. please wait...\"\r\nnpm install npm@latest --location=global\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nBRANCH=\"dev\"\r\n\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"[OT INSTALLER] \/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \"[OT INSTALLER] .git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"[OT INSTALLER] loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"[OT INSTALLER] files found with no git config\"\r\n echo -e \"[OT INSTALLER] closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"https:\/\/github.com\/open-discord-bots\/open-ticket.git\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"[OT INSTALLER] \/mnt\/server is empty.\"\r\n echo -e \"[OT INSTALLER] cloning files into repo.\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"[OT INSTALLER] cloning default branch\"\r\n git clone https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n else\r\n echo -e \"[OT INSTALLER] cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n fi\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing Open Ticket node.js packages.\"\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n \/usr\/local\/bin\/npm install --omit=dev\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing custom node.js packages.\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n \/usr\/local\/bin\/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\necho -e \"[OT INSTALLER] install complete!\"\r\nexit 0",
|
||||||
|
"container": "node:latest",
|
||||||
|
"entrypoint": "bash"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"name": "Additional Npm Packages",
|
||||||
|
"description": "Specify additional npm packages used by Open Ticket plugins. Use spaces to separate.",
|
||||||
|
"env_variable": "NODE_PACKAGES",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Startup Flags",
|
||||||
|
"description": "Start the bot with additional Open Ticket flags. Separate using spaces.\r\nA full reference list can be found in the documentation.",
|
||||||
|
"env_variable": "NODE_FLAGS",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Uninstall Npm Packages",
|
||||||
|
"description": "A list of npm packages to uninstall. Separate by spaces.",
|
||||||
|
"env_variable": "UNNODE_PACKAGES",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO",
|
||||||
|
"meta": {
|
||||||
|
"version": "PTDL_v2",
|
||||||
|
"update_url": null
|
||||||
|
},
|
||||||
|
"exported_at": "2025-03-16T18:10:20+01:00",
|
||||||
|
"name": "Open Ticket (Latest)",
|
||||||
|
"author": "support@dj-dj.be",
|
||||||
|
"description": "This is the official Pterodactyl egg for Open Ticket, the most advanced & customisable discord ticket bot that you will ever find! You can customise up to 300+ variables! This includes Html Transcripts, Advanced Plugins, Custom Embeds, Questions\/Modals, Stats & more!",
|
||||||
|
"features": null,
|
||||||
|
"docker_images": {
|
||||||
|
"ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20"
|
||||||
|
},
|
||||||
|
"file_denylist": [],
|
||||||
|
"startup": "if [[ ! -z ${NODE_PACKAGES} ]]; then npm install ${NODE_PACKAGES}; fi; if [[ ! -z ${UNNODE_PACKAGES} ]]; then npm uninstall ${UNNODE_PACKAGES}; fi; if [ -f \/home\/container\/package.json ]; then npm install; fi; node \"\/home\/container\/index.js\" ${NODE_FLAGS};",
|
||||||
|
"config": {
|
||||||
|
"files": "{}",
|
||||||
|
"startup": "{\r\n \"done\": \"STARTUP INFO:\"\r\n}",
|
||||||
|
"logs": "{}",
|
||||||
|
"stop": "^C"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"installation": {
|
||||||
|
"script": "#!\/bin\/bash\r\n# Open Ticket Installation Script (main)\r\n# Inspired by: Node.js Installation Script\r\n# \u00a9 DJdj Development\r\n\r\necho -e \"[OT INSTALLER] installing dependencies. please wait...\"\r\napt update\r\napt install -y git curl\r\n\r\necho -e \"[OT INSTALLER] updating npm. please wait...\"\r\nnpm install npm@latest --location=global\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nBRANCH=\"main\"\r\n\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"[OT INSTALLER] \/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \"[OT INSTALLER] .git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"[OT INSTALLER] loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"[OT INSTALLER] files found with no git config\"\r\n echo -e \"[OT INSTALLER] closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"https:\/\/github.com\/open-discord-bots\/open-ticket.git\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"[OT INSTALLER] \/mnt\/server is empty.\"\r\n echo -e \"[OT INSTALLER] cloning files into repo.\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"[OT INSTALLER] cloning default branch\"\r\n git clone https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n else\r\n echo -e \"[OT INSTALLER] cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n fi\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing Open Ticket node.js packages.\"\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n \/usr\/local\/bin\/npm install --omit=dev\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing custom node.js packages.\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n \/usr\/local\/bin\/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\necho -e \"[OT INSTALLER] install complete!\"\r\nexit 0",
|
||||||
|
"container": "node:latest",
|
||||||
|
"entrypoint": "bash"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"name": "Additional Npm Packages",
|
||||||
|
"description": "Specify additional npm packages used by Open Ticket plugins. Use spaces to separate.",
|
||||||
|
"env_variable": "NODE_PACKAGES",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Startup Flags",
|
||||||
|
"description": "Start the bot with additional Open Ticket flags. Separate using spaces.\r\nA full reference list can be found in the documentation.",
|
||||||
|
"env_variable": "NODE_FLAGS",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Uninstall Npm Packages",
|
||||||
|
"description": "A list of npm packages to uninstall. Separate by spaces.",
|
||||||
|
"env_variable": "UNNODE_PACKAGES",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO",
|
||||||
|
"meta": {
|
||||||
|
"version": "PTDL_v2",
|
||||||
|
"update_url": null
|
||||||
|
},
|
||||||
|
"exported_at": "2025-03-16T18:10:19+01:00",
|
||||||
|
"name": "Open Ticket (v3.5.9)",
|
||||||
|
"author": "support@dj-dj.be",
|
||||||
|
"description": "This is the official Pterodactyl egg for Open Ticket v3.5.9, the most advanced & customisable discord ticket bot that you will ever find! You can customise up to 300+ variables! This includes Html Transcripts, Advanced Plugins, Custom Embeds, Questions\/Modals, Stats & more!",
|
||||||
|
"features": null,
|
||||||
|
"docker_images": {
|
||||||
|
"ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20"
|
||||||
|
},
|
||||||
|
"file_denylist": [],
|
||||||
|
"startup": "if [[ ! -z ${NODE_PACKAGES} ]]; then npm install ${NODE_PACKAGES}; fi; if [[ ! -z ${UNNODE_PACKAGES} ]]; then npm uninstall ${UNNODE_PACKAGES}; fi; if [ -f \/home\/container\/package.json ]; then npm install; fi; node \"\/home\/container\/index.js\" ${NODE_FLAGS};",
|
||||||
|
"config": {
|
||||||
|
"files": "{}",
|
||||||
|
"startup": "{\r\n \"done\": \"STARTUP INFO:\"\r\n}",
|
||||||
|
"logs": "{}",
|
||||||
|
"stop": "^C"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"installation": {
|
||||||
|
"script": "#!\/bin\/bash\r\n# Open Ticket Installation Script (v3.5.9)\r\n# Inspired by: Node.js Installation Script\r\n# \u00a9 DJdj Development\r\n\r\necho -e \"[OT INSTALLER] installing dependencies. please wait...\"\r\napt update\r\napt install -y git curl\r\n\r\necho -e \"[OT INSTALLER] updating npm. please wait...\"\r\nnpm install npm@latest --location=global\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nBRANCH=\"v3.5.9\"\r\n\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"[OT INSTALLER] \/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \"[OT INSTALLER] .git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"[OT INSTALLER] loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"[OT INSTALLER] files found with no git config\"\r\n echo -e \"[OT INSTALLER] closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"https:\/\/github.com\/open-discord-bots\/open-ticket.git\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"[OT INSTALLER] \/mnt\/server is empty.\"\r\n echo -e \"[OT INSTALLER] cloning files into repo.\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"[OT INSTALLER] cloning default branch\"\r\n git clone https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n else\r\n echo -e \"[OT INSTALLER] cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n fi\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing Open Ticket node.js packages.\"\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n \/usr\/local\/bin\/npm install --omit=dev\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing custom node.js packages.\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n \/usr\/local\/bin\/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\necho -e \"[OT INSTALLER] install complete!\"\r\nexit 0",
|
||||||
|
"container": "node:latest",
|
||||||
|
"entrypoint": "bash"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"name": "Additional Npm Packages",
|
||||||
|
"description": "Specify additional npm packages used by Open Ticket plugins. Use spaces to separate.",
|
||||||
|
"env_variable": "NODE_PACKAGES",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Startup Flags",
|
||||||
|
"description": "Start the bot with additional Open Ticket flags. Separate using spaces.\r\nA full reference list can be found in the documentation.",
|
||||||
|
"env_variable": "NODE_FLAGS",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Uninstall Npm Packages",
|
||||||
|
"description": "A list of npm packages to uninstall. Separate by spaces.",
|
||||||
|
"env_variable": "UNNODE_PACKAGES",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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.1)",
|
||||||
|
"author": "support@dj-dj.be",
|
||||||
|
"description": "This is the official Pterodactyl egg for Open Ticket v4.1.1, the most advanced & customisable discord ticket bot that you will ever find! You can customise up to 300+ variables! This includes Html Transcripts, Advanced Plugins, Custom Embeds, Questions\/Modals, Stats & more!",
|
||||||
|
"features": null,
|
||||||
|
"docker_images": {
|
||||||
|
"ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20"
|
||||||
|
},
|
||||||
|
"file_denylist": [],
|
||||||
|
"startup": "if [[ ! -z ${NODE_PACKAGES} ]]; then npm install ${NODE_PACKAGES}; fi; if [[ ! -z ${UNNODE_PACKAGES} ]]; then npm uninstall ${UNNODE_PACKAGES}; fi; if [ -f \/home\/container\/package.json ]; then npm install; fi; node \"\/home\/container\/index.js\" ${NODE_FLAGS};",
|
||||||
|
"config": {
|
||||||
|
"files": "{}",
|
||||||
|
"startup": "{\r\n \"done\": \"STARTUP INFO:\"\r\n}",
|
||||||
|
"logs": "{}",
|
||||||
|
"stop": "^C"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"installation": {
|
||||||
|
"script": "#!\/bin\/bash\r\n# Open Ticket Installation Script (v4.1.1)\r\n# Inspired by: Node.js Installation Script\r\n# \u00a9 DJdj Development\r\n\r\necho -e \"[OT INSTALLER] installing dependencies. please wait...\"\r\napt update\r\napt install -y git curl\r\n\r\necho -e \"[OT INSTALLER] updating npm. please wait...\"\r\nnpm install npm@latest --location=global\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nBRANCH=\"v4.1.1\"\r\n\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"[OT INSTALLER] \/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \"[OT INSTALLER] .git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"[OT INSTALLER] loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"[OT INSTALLER] files found with no git config\"\r\n echo -e \"[OT INSTALLER] closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"https:\/\/github.com\/open-discord-bots\/open-ticket.git\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"[OT INSTALLER] \/mnt\/server is empty.\"\r\n echo -e \"[OT INSTALLER] cloning files into repo.\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"[OT INSTALLER] cloning default branch\"\r\n git clone https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n else\r\n echo -e \"[OT INSTALLER] cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n fi\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing Open Ticket node.js packages.\"\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n \/usr\/local\/bin\/npm install --omit=dev\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing custom node.js packages.\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n \/usr\/local\/bin\/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\necho -e \"[OT INSTALLER] install complete!\"\r\nexit 0",
|
||||||
|
"container": "node:latest",
|
||||||
|
"entrypoint": "bash"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"name": "Additional Npm Packages",
|
||||||
|
"description": "Specify additional npm packages used by Open Ticket plugins. Use spaces to separate.",
|
||||||
|
"env_variable": "NODE_PACKAGES",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Startup Flags",
|
||||||
|
"description": "Start the bot with additional Open Ticket flags. Separate using spaces.\r\nA full reference list can be found in the documentation.",
|
||||||
|
"env_variable": "NODE_FLAGS",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Uninstall Npm Packages",
|
||||||
|
"description": "A list of npm packages to uninstall. Separate by spaces.",
|
||||||
|
"env_variable": "UNNODE_PACKAGES",
|
||||||
|
"default_value": "",
|
||||||
|
"user_viewable": false,
|
||||||
|
"user_editable": true,
|
||||||
|
"rules": "string|nullable",
|
||||||
|
"field_type": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -6,14 +6,12 @@ You can choose which type of tutorial you want to make. You can create a quick s
|
|||||||
You are not required to talk in the video, but make sure it has some kind of subtitles instead.
|
You are not required to talk in the video, but make sure it has some kind of subtitles instead.
|
||||||
|
|
||||||
### 📄 Requirements
|
### 📄 Requirements
|
||||||
- 📌 At least 2k subscribers!
|
- 📌 Video length of at least 2 minutes.
|
||||||
- 📌 A little bit of channel activity! *(minimum 2 uploads/month)*
|
- 📌 Provide a link to the Open Ticket repository in the description of the video.
|
||||||
- 📌 Video length of at least 3 minutes!
|
- 📌 Please use the latest version of Open Ticket available at the time of making the video.
|
||||||
- 📌 Provide a clear link to the Open Ticket repository!
|
- 📌 **(Optional)** Recommended language is English.
|
||||||
- 📌 Recommended language is English!
|
- 📌 **(Optional)** Recommended platform is YouTube!
|
||||||
- 📌 Recommended platform is YouTube!
|
- 📌 **(Optional)** Speech in the video *(AI is allowed)*
|
||||||
- 📌 Must be for the latest version of Open Ticket!
|
|
||||||
- 📌 **(OPTIONAL)** Speech in the video *(AI is allowed)*
|
|
||||||
|
|
||||||
|
|
||||||
### 🎁 Rewards
|
### 🎁 Rewards
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Contributing Guidelines
|
# Contributing Guidelines
|
||||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
||||||
|
|
||||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v4.0.0)
|
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.1.1) [](https://github.com/sponsors/DJj123dj)
|
||||||
|
|
||||||
These are the Contributing Guidelines of Open Ticket!<br>
|
These are the Contributing Guidelines of Open Ticket!<br>
|
||||||
Here you can find everything you need to know about contributing to Open Ticket.<br>
|
Here you can find everything you need to know about contributing to Open Ticket.<br>
|
||||||
@@ -36,7 +36,7 @@ Metadata can be found in the `_TRANSLATION` variable.
|
|||||||
#### Step 4: Uploading
|
#### Step 4: Uploading
|
||||||
1. When adding a new language, please mention @DJj123dj. He will add the code required for the language to work.
|
1. When adding a new language, please mention @DJj123dj. He will add the code required for the language to work.
|
||||||
2. There are currently 3 ways of uploading translations:
|
2. There are currently 3 ways of uploading translations:
|
||||||
- Create a pull request to the [__`dev` branch!__](https://github.com/DJj123dj/open-ticket/tree/dev)
|
- Create a pull request to the [__`dev` branch!__](https://github.com/open-discord-bots/open-ticket/tree/dev)
|
||||||
- Create a ticket in our [discord server](https://discord.dj-dj.be)!
|
- Create a ticket in our [discord server](https://discord.dj-dj.be)!
|
||||||
- Send a DM to @DJj123dj on discord!
|
- Send a DM to @DJj123dj on discord!
|
||||||
3. Now you'll need to wait until the next Open Ticket version for it to be added.
|
3. Now you'll need to wait until the next Open Ticket version for it to be added.
|
||||||
@@ -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">
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="170px">
|
||||||
|
|
||||||
**Contributing Guidelines**<br>
|
**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>
|
||||||
|
|
||||||
© 2024 - [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)
|
||||||
+16
-12
@@ -1,7 +1,7 @@
|
|||||||
# Security Policy
|
# Security Policy
|
||||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
||||||
|
|
||||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/DJj123dj/open-ticket/releases/tag/v4.0.0) [](https://github.com/sponsors/DJj123dj)
|
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.0.4) [](https://github.com/sponsors/DJj123dj)
|
||||||
|
|
||||||
This is the Security Policy of Open Ticket!<br>
|
This is the Security Policy of Open Ticket!<br>
|
||||||
Here you can find a list of all supported & deprecated versions of the bot.<br>
|
Here you can find a list of all supported & deprecated versions of the bot.<br>
|
||||||
@@ -11,20 +11,24 @@ You will also find some guidelines about how to report vulnerabilities, bugs & e
|
|||||||
Below, you can find a list with the status of every Open Ticket version.<br>
|
Below, you can find a list with the status of every Open Ticket version.<br>
|
||||||
This list will be updated on every release.
|
This list will be updated on every release.
|
||||||
|
|
||||||
- 🟦 Early Access **(ideas, bugs, support, html transcripts)**
|
- 🟦 In Development **(ideas, bugs, support, html transcripts)**
|
||||||
- ✅ Supported **(features, bugs, support, docs, html transcripts)**
|
- ✅ Supported **(features, bugs, support, docs, html transcripts)**
|
||||||
- 🚧 Maintenance **(support, docs, html transcripts)**
|
- 🚧 Maintenance **(support, docs, html transcripts)**
|
||||||
- 🟧 Deprecated **(docs)**
|
- 🟧 Deprecated **(docs)**
|
||||||
- ❌ Fully Deprecated
|
- ❌ Fully Deprecated
|
||||||
|
|
||||||
| Version | Supported | Notes |
|
| Version | Supported | Notes |
|
||||||
|------------|-----------|--------------------------------|
|
|------------|-----------|---------------------------------------------------------------|
|
||||||
| 4.0.0-beta | 🟦 | For v4.0.0 Full Release |
|
| 4.2.0 | 🟦 | Transcripts v2.0 will be inaccessible when v4.2 is released. |
|
||||||
| 3.5.8 | ✅ | Supported until October 2024 |
|
| 4.1.2 | 🟦 | |
|
||||||
| 3.5.7 | ✅ | Supported until September 2024 |
|
| 4.1.1 | ✅ | |
|
||||||
| 3.5.6 | 🟧 | Documentation Only |
|
| 4.1.0 | ✅ | |
|
||||||
| < 3.5.6 | 🟧 | Documentation Only |
|
| 4.0.7 | ✅ | Supported Until December 2025 (LTS) |
|
||||||
| < 3.5.0 | ❌ | |
|
| 4.0.6 | 🚧 | |
|
||||||
|
| 4.0.5 | 🚧 | |
|
||||||
|
| 4.0.4 | 🚧 | |
|
||||||
|
| < 4.0.4 | 🟧 | Deprecated Transcripts v2.0, Documentation Only |
|
||||||
|
| < 4.0.0 | ❌ | |
|
||||||
|
|
||||||
### 🕷️ Reporting Vulnerabilities
|
### 🕷️ Reporting Vulnerabilities
|
||||||
You can report vulnerabilities, errors & bugs using one of the following methods:
|
You can report vulnerabilities, errors & bugs using one of the following methods:
|
||||||
@@ -44,6 +48,6 @@ If possible, try to provide screenshots!
|
|||||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="170px">
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="170px">
|
||||||
|
|
||||||
**Security Policy**<br>
|
**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>
|
||||||
|
|
||||||
© 2024 - [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)
|
||||||
+13
-6
@@ -1,16 +1,23 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
.vscode/
|
||||||
|
|
||||||
devconfig/
|
devconfig/
|
||||||
devdatabase/
|
devdatabase/
|
||||||
|
plugins/*
|
||||||
|
!plugins/example-plugin/
|
||||||
|
database/openticket.sqlite
|
||||||
|
dist/
|
||||||
|
|
||||||
otdebug.txt
|
otdebug.txt
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*/.DS_Store
|
*/.DS_Store
|
||||||
*/*/.DS_Store
|
*/*/.DS_Store
|
||||||
*/*/*/.DS_Store
|
*/*/*/.DS_Store
|
||||||
**/.DS_Store
|
**/.DS_Store
|
||||||
TEMP/
|
|
||||||
.vscode/
|
.docs/*
|
||||||
plugins/*
|
!.docs/createDocs.js
|
||||||
!plugins/example-plugin/
|
!.docs/mergeTranslations.js
|
||||||
dist/
|
!.docs/typedoc-config.json
|
||||||
database/openticket.sqlite
|
|
||||||
+25
-2
@@ -1,6 +1,12 @@
|
|||||||
|
<!-- omit from toc -->
|
||||||
# Open Ticket (License)
|
# Open Ticket (License)
|
||||||
© 2025 - DJj123dj & Contributors
|
© 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
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 3, 29 June 2007
|
Version 3, 29 June 2007
|
||||||
@@ -679,11 +685,28 @@ Public License instead of this License. But first, please read
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Additional Terms for Open Ticket
|
### 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:
|
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.
|
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 🎥
|
> ### 🎥 Content Creators
|
||||||
> Hey there! We're searching for content creators that would want to create a tutorial or setup guide for Open Ticket!<br>
|
> 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)
|
> [📌 More Information](.github/CONTENT_CREATORS.md)
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -8,71 +8,72 @@
|
|||||||
<br>Powered By<br>
|
<br>Powered By<br>
|
||||||
<img src="https://apis.dj-dj.be/cdn/opendiscord/logo.png" alt="Open Ticket" width="170px"><br>
|
<img src="https://apis.dj-dj.be/cdn/opendiscord/logo.png" alt="Open Ticket" width="170px"><br>
|
||||||
<a href="https://discord.com/invite/26vT9wt3n3"><img alt="Discord Invite Link" src="https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord"></img></a>
|
<a href="https://discord.com/invite/26vT9wt3n3"><img alt="Discord Invite Link" src="https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord"></img></a>
|
||||||
<a href="https://github.com/DJj123dj/open-ticket/releases/tag/v4.0.0"><img alt="Open Ticket Version" src="https://img.shields.io/badge/version-4.0.0-brightgreen.svg?style=flat-square"></img></a>
|
<a href="https://github.com/open-discord-bots/open-ticket/releases/tag/v4.1.1"><img alt="Open Ticket Version" src="https://img.shields.io/badge/version-4.1.1-brightgreen.svg?style=flat-square"></img></a>
|
||||||
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Documentation" src="https://img.shields.io/badge/discord.js-v14-CB3837.svg?style=flat-square&logo=npm"></img></a>
|
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Documentation" src="https://img.shields.io/badge/discord.js-v14-CB3837.svg?style=flat-square&logo=npm"></img></a>
|
||||||
<a href="https://github.com/DJj123dj/open-ticket/blob/main/LICENSE"><img alt="Open Ticket License" src="https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square"></img></a>
|
<a href="https://github.com/open-discord-bots/open-ticket/blob/main/LICENSE"><img alt="Open Ticket License" src="https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square"></img></a>
|
||||||
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Stars" src="https://img.shields.io/github/stars/djj123dj/open-ticket?color=yellow&label=stars&logo=github&style=flat-square"></img></a>
|
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Stars" src="https://img.shields.io/github/stars/djj123dj/open-ticket?color=yellow&label=stars&logo=github&style=flat-square"></img></a>
|
||||||
|
<br>
|
||||||
<a href="https://github.com/sponsors/DJj123dj"><img alt="Sponsor DJj123dj" src="https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors"></img></a>
|
<a href="https://github.com/sponsors/DJj123dj"><img alt="Sponsor DJj123dj" src="https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors"></img></a>
|
||||||
|
<a href="https://hub.docker.com/repository/docker/djj123dj/open-ticket"><img alt="Open Ticket supports Docker!" src="https://img.shields.io/badge/docker-supported-2496ED?style=flat-square&logo=docker"></img></a>
|
||||||
|
<a href=".eggs/README.md"><img alt="Open Ticket supports Pterodactyl Eggs!" src="https://img.shields.io/badge/pterodactyl-supported-10539F?style=flat-square&logo=pterodactyl"></img></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
Open Ticket is the most advanced & customisable discord ticket bot that you will ever find! You can customise up to 300+ variables! This includes <code>Html Transcripts</code>, <code>Advanced Plugins</code>, <code>Custom Embeds</code>, <code>Questions/Modals</code>, <code>Stats</code> & more!
|
Open Ticket is the most advanced & customisable discord ticket bot 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!
|
||||||
You're also able to customise every little aspect of the bot! From embeds to transcripts. Open Ticket is also translated in more than <code>22 Languages</code>! If you need any help, feel free to join our <a href="https://discord.dj-dj.be">discord server</a>!
|
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>
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Open Ticket v4 is still in beta! Please report all bugs in our [discord server](https://discord.dj-dj.be)!<br>
|
|
||||||
> The translation count may not be accurate!
|
|
||||||
|
|
||||||
### 📌 Features
|
### 📌 Features
|
||||||
- **💩 no bloat** - Your Open Ticket bot doesn't contain any form of bloat or credits!
|
- **⏳ Quick Setup** - Using the interactive Quick Setup CLI, you can **configure Open Ticket in less than 5min!**
|
||||||
- **🔒 tested & secure** - Open Ticket has been tested by thousands of servers and is very secure!
|
- **🦇 Pterodactyl Support** - Open Ticket works perfect on Pterodactyl based panels. [(Download official eggs)](.eggs/README.md)
|
||||||
- **📈 scalable** - Open Ticket is made to handle huge servers! (Already tested in **servers with 100k members**)
|
- **💩 No Credits** - Your bot won't contain any form of bloat or credits. It's all yours!
|
||||||
- **📄 HTML transcripts** - Make use of the most customisable, beautiful and easy-to-use HTML Transcripts!
|
- **🔒 Private & Secure** - It has been battletested by thousands of servers and **respects security & privacy.**
|
||||||
- **✅ ticket actions** - Close, Reopen, Delete, Rename & Move all your tickets!
|
- **📈 Scalable** - Made to handle huge servers and has already been **tested in servers with 100k members.**
|
||||||
- **🇬🇧 translation** - Open Ticket has been translated in more than **22 languages** by our community!
|
- **📄 HTML Transcripts** - The **built-in HTML Transcripts Service** provides beautiful & easy-to-use transcripts.
|
||||||
- **🎨 customisation** - Open Ticket has been created around customisation, everything can be customised!
|
- **✅ Ticket Status** - Close, reopen, delete, claim, pin, rename or move tickets in your server.
|
||||||
- **🖥️ interactions** - The bot has full support for Buttons, Dropdowns, Slash Commands and Modals!
|
- **🇬🇧 Translation** - Every message has been translated in more than **36 languages** by our community.
|
||||||
- **∞ unlimited** - Create an infinite amount of tickets & panels!
|
- **🎨 Customisation** - More than **200+ settings** are related to customisation & advanced features.
|
||||||
- **📝 advanced plugins** - Create advanced plugins or use pre-made ones by our community!
|
- **🖥️ Interactions** - The bot has full support for buttons, dropdowns, slash/text commands & modals.
|
||||||
- **👥 user management** - Add & Remove users from all tickets!
|
- **∞ Unlimited Possibilities** - Create an infinite amount of tickets, questions & panels.
|
||||||
- **📊 detailed stats** - Open Ticket has ticket, user & global staticstics available for everyone!
|
- **📝 Advanced Plugins** - Create advanced plugins or use [**pre-made plugins**](#-plugins) by our community.
|
||||||
- **🚫 blacklist** - Blacklist users to prevent them from creating a ticket!
|
- **👥 Participants** - Add or remove participants & transfer ownership from one user to another.
|
||||||
- **❓ questions** - Let users answer questions in a modal before the ticket is created!
|
- **📊 Detailed Statistics** - With more than **50+ statistics** for tickets, users & the server.
|
||||||
- **📦 slash & text** - Open Ticket supports both slash & text commands!
|
- **🚫 Blacklist** - Blacklist users to prevent them from creating new tickets.
|
||||||
- **📥 extra buttons** - The bot also supports Reaction Roles & Url Buttons, because why not ¯\\_(ツ)_/¯
|
- **🚨 Priorities** - Assign different **priority levels** to tickets to mark them as important.
|
||||||
- **✨ commands** - The bot contains more than 25 commands!
|
- **❓ 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!
|
#### And even more using [pre-made community plugins](#-plugins)!
|
||||||
- **💬 reviews** - Create & customise your own review system!
|
- **💬 Reviews** - Create & manage a support review system.
|
||||||
- **📢 feedback** - Collect feedback & create forms for people to answer!
|
- **📢 Feedback** - Collect feedback & create forms for users to answer.
|
||||||
- **🏷️ tags** - Create tags & answer questions automatically using keywords!
|
- **⏰ Reminders** - Create & manage customisable reminders.
|
||||||
- **📝 forms** - Create advanced forms and ask people for additional details!
|
- **🏷️ Tags** - Create tags & answer questions automatically using keywords.
|
||||||
- **🔄 rotating status** - Create a rotating bot status & use dynamic variables from the bot!
|
- **📝 Forms** - Create advanced forms and automatically ask for repetitive questions.
|
||||||
- **💾 sqlite database** - Use an `sqlite` database for increased performances!
|
- **🔄 Channel Display** - Create a voice channel with realtime statistics from the ticket system.
|
||||||
- **🎉 custom embeds** - Create your own embeds and use them in your server!
|
- **💾 SQLite Database** - Use an `SQLite` database for increased performance.
|
||||||
- **🎨 customisation** - Yep, you heard it right! Even more customisation!
|
- **🎉 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...**
|
- **😁 And so much more...**
|
||||||
|
|
||||||
> ### 📦 Resources
|
> ### 📦 Resources
|
||||||
> Resources might not be accurate yet! *(because v4 is still in beta)*<br>
|
> These resources will help with configuration and usage of the bot:<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-tutorial.png" alt="Open Ticket Tutorial" width="180px"></a>-->
|
||||||
> <a href="https:/otdocs.dj-dj.be"><img src="https://apis.dj-dj.be/cdn/openticket/open-ticket-docs.png" alt="Open Ticket Docs" width="180px"></a>
|
> <a href="https://otdocs.dj-dj.be"><img src="https://apis.dj-dj.be/cdn/openticket/open-ticket-docs.png" alt="Open Ticket Docs" width="180px"></a>
|
||||||
> <a href="https://github.com/DJj123dj/open-discord-plugins"><img src="https://apis.dj-dj.be/cdn/openticket/open-ticket-plugins.png" alt="Open Ticket Plugins" width="180px"></a>
|
> <a href="https://github.com/open-discord-bots/plugins"><img src="https://apis.dj-dj.be/cdn/openticket/open-ticket-plugins.png" alt="Open Ticket Plugins" width="180px"></a>
|
||||||
|
|
||||||
### ❤️ Sponsors
|
### ❤️ Sponsors
|
||||||
A big thanks to all our sponsors! Without them, it wouldn't be possible to create this project!
|
A big thanks to all our sponsors! Without them, it wouldn't be possible to create this project!
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="https://github.com/roppl3r.png" alt="Profile Picture" width="80px"></td>
|
<td><img src="https://github.com/guillee3.png" alt="Profile Picture" width="100px"></td>
|
||||||
<td><img src="https://github.com/BENZORICH.png" alt="Profile Picture" width="80px"></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th><a href="https://github.com/roppl3r">roppl3r</a></th>
|
<td align="center"><a href="https://github.com/guillee3"><b>guillee3</b></a></td>
|
||||||
<th><a href="https://github.com/BENZORICH">BENZORICH</a></th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -81,134 +82,176 @@ A big thanks to all our sponsors! Without them, it wouldn't be possible to creat
|
|||||||
<img src="https://github.com/SpyEye2.png" alt="SpyEye" width="40px">
|
<img src="https://github.com/SpyEye2.png" alt="SpyEye" width="40px">
|
||||||
<img src="https://github.com/mods-hd.png" alt="Mods HD" width="40px">
|
<img src="https://github.com/mods-hd.png" alt="Mods HD" width="40px">
|
||||||
<img src="https://github.com/DOSEV5.png" alt="DOSEV5" width="40px">
|
<img src="https://github.com/DOSEV5.png" alt="DOSEV5" width="40px">
|
||||||
|
<img src="https://github.com/BENZORICH.png" alt="BENZORICH" width="40px">
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
### ⏱️ 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 `v20`).
|
||||||
|
> 3. Install any required dependencies using `npm install`.
|
||||||
|
> 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.
|
||||||
|
> 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
|
## 📸 Preview
|
||||||
<img alt="Ticket Message" width="350px" src="https://apis.dj-dj.be/cdn/openticket/preview-v4/ticket.png">
|
<img alt="An example of a panel." src="https://apis.dj-dj.be/cdn/openticket/preview-v4/panel-examples.png">
|
||||||
<img alt="Ticket Stats Message" width="350px" src="https://apis.dj-dj.be/cdn/openticket/preview-v4/stats.png">
|
<img alt="An example of a ticket message." src="https://apis.dj-dj.be/cdn/openticket/preview-v4/ticket-example.png">
|
||||||
<img alt="Example Panel 1" width="350px" src="https://apis.dj-dj.be/cdn/openticket/preview-v4/panel-1.png">
|
<img alt="Examples of built-in commands." src="https://apis.dj-dj.be/cdn/openticket/preview-v4/command-examples.png">
|
||||||
<img alt="Example Panel 2" width="350px" src="https://apis.dj-dj.be/cdn/openticket/preview-v4/panel-2.png">
|
|
||||||
|
|
||||||
## 🧩 Plugins
|
|
||||||
**Download all plugins in our [Official Plugin Repository](https://github.com/DJj123dj/open-discord-plugins)!**<br>
|
|
||||||
> #### ⭐ Featured Plugins (Top 5 Most Used)
|
|
||||||
> **[`ot-sqlite-database`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-sqlite-database/),
|
|
||||||
> [`ot-migrate-v3`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-migrate-v3/),
|
|
||||||
> [`ot-reviews`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-reviews/),
|
|
||||||
> [`ot-feedback`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-feedback/),
|
|
||||||
> [`ot-tags`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-tags/)**
|
|
||||||
|
|
||||||
### 📦 Official *(made by DJdj Development)*
|
|
||||||
|Name |Category |Description |
|
|
||||||
|----------------------------------------------------------------------|----------------------------|-------------------------|
|
|
||||||
|[`example-plugin`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/example-plugin/) |📄 Example |This is just an example plugin for people that want to create their own plugin. |
|
|
||||||
|[`example-command`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/example-command/) |📄 Example |Sample custom command using the Open Discord system. |
|
|
||||||
|[`ot-jump-to-top`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-jump-to-top/) |📢 Command |Add a simple command to jump to the top of the ticket. |
|
|
||||||
|[`ot-kill-switch`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-kill-switch/) |📢 Command |Temporarily disable the ticket system using a kill switch. |
|
|
||||||
|[`ot-hosting-status`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-hosting-status/) |📢 Command |A simple command to send hosting status updates to a channel. |
|
|
||||||
|[`ot-shutdown`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-shutdown/) |📢 Command |A simple command to turn off the bot from a slash command (server & bot owner only). |
|
|
||||||
|[`ot-sqlite-database`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-sqlite-database/) |⚙️ Utility |With this plugin, the database will be an SQLite file. It's a must-have for large servers! |
|
|
||||||
|[`ot-no-slash-clear`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-no-slash-clear/) |⚙️ Utility |Disable the automatic removal of slash commands that aren't used by Open Ticket. |
|
|
||||||
|[`ot-migrate-v3`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-migrate-v3/) |⚙️ Utility |Use this plugin to migrate all tickets from Open Ticket v3 to v4. |
|
|
||||||
|[`ot-ticket-message-extras`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-ticket-message-extras/) |🎨 Customisation |A plugin which adds a few little features to the ticket message. |
|
|
||||||
|[`ot-rename-keep-prefix`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-rename-keep-prefix/) |🎨 Customisation |Simple plugin to keep the channel prefix when using the /rename command. |
|
|
||||||
|[`ot-customise-buttons`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-customise-buttons/) |🎨 Customisation |Customise almost all built-in buttons. This includes the claim, reopen, close & delete buttons. |
|
|
||||||
|[`ot-ephemeral-messages`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-ephemeral-messages/) |🎨 Customisation |Customise for every messages if it needs to be ephemeral or not. |
|
|
||||||
|[`ot-footers`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-footers/) |🎨 Customisation |A simple plugin to add footers in all Open Ticket embeds. |
|
|
||||||
|[`ot-alt-detector`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-alt-detector/) |💼 Management |Use the discord-alt-detector npm package by DJdj Development in your ticket bot. |
|
|
||||||
|[`ot-embeds`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-embeds/) |💼 Management |Create custom premade embeds in the config or use the command to create one from scratch. |
|
|
||||||
|[`ot-move-actions`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-move-actions/) |💼 Management |Automatically unclaim/unpin a ticket when it's moved using `/move`. |
|
|
||||||
|[`ot-reviews`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-reviews/) |💼 Management |Review system for Open Ticket! It is very customisable and has lots of features. |
|
|
||||||
|[`ot-tags`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-tags/) |💼 Management |Use tags to quickly reply with a pre-existing text. |
|
|
||||||
|[`ot-better-status`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-better-status/) |🤖 Client |An advanced status plugin to rotate between states. It also allows for the use of variables. |
|
|
||||||
|
|
||||||
### ✅ Verified *(made by community)*
|
|
||||||
|Name |Author |Category |Description |
|
|
||||||
|---------------------------------------------------------------------|----------------------------|----------------------------|-------------------------|
|
|
||||||
|[`ot-config-reload`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-config-reload/) |guillee.3 |⚙️ Utility |This plugin adds a new command that allows reloading the Open Ticket config files without the need for a restart. |
|
|
||||||
|[`ot-ticket-forms`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-ticket-forms/) |guillee.3 |💼 Management |An advanced forms plugin for Open Ticket. |
|
|
||||||
|[`ot-feedback`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-feedback/) |an_developer |💼 Management |A plugin to gather feedback of your support service. |
|
|
||||||
|[`ot-assign-role`](https://github.com/DJj123dj/open-discord-plugins/tree/main/open-ticket/ot-assign-role/) |rapid.fast |💼 Management |This plugin assigns a predefined role to a user upon creating a ticket. |
|
|
||||||
|[`ot-translate-cmds`](https://github.com/DJj123dj/open-discord-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.
|
|
||||||
|
|
||||||
## 🛠️ Contributors
|
## 🛠️ Contributors
|
||||||
### 🖥️ Team
|
### 🖥️ Team & Contributors
|
||||||
This is the main team working on Open Ticket. Don't forget to check their profiles!
|
A list of people that contributed or provided the most support for Open Ticket.
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="https://github.com/DJj123dj.png" alt="Profile Picture" width="80px"></td>
|
<td align="center"><img src="https://github.com/DJj123dj.png" alt="Profile Picture" width="80px"></td>
|
||||||
<td><img src="https://github.com/Sank34.png" alt="Profile Picture" width="80px"></td>
|
<td align="center"><img src="https://github.com/smetsliam.png" alt="Profile Picture" width="80px"></td>
|
||||||
<td><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/guillee3.png" alt="Profile Picture" width="80px"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th><a href="https://github.com/DJj123dj">💻 DJj123dj</a></th>
|
<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/Sank34">💬 Sanke</a></th>
|
||||||
<th><a href="https://github.com/smetsliam">💬 DevBack</a></th>
|
<th><a href="https://github.com/guillee3">🧩 Guillee3</a></th>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
### 💬 Translators
|
### 💬 Translators
|
||||||
|Language |Maintainer (discord name) |Status |
|
With the amazing support of our translators, we've been able to translate Open Ticket in more than **36 languages**!
|
||||||
|---------------------|--------------------------|-----------------------------|
|
#### Categories:
|
||||||
|🇬🇧 English |djj123dj |🟢 Up To Date |
|
- **🟢 Available**
|
||||||
|🇳🇱 Dutch |djj123dj |🟢 Up To Date |
|
- **⏳ In Progress (Incomplete)**
|
||||||
|🇩🇪 German |benzorich |🟢 Up To Date |
|
- **🤖 Made Using AI**
|
||||||
|🇪🇸 Spanish |redactado & josuens |🟢 Up To Date |
|
- **🟠 Incomplete**
|
||||||
|🇵🇹 Portuguese |quiradon |🟢 Up To Date |
|
- **🔴 Unavailable/Outdated**
|
||||||
|❓ Catalan |guillee3 |🟢 Up To Date |
|
|
||||||
|🇨🇿 Czech |spyeye_ |🟢 Up To Date |
|
|🔍 |Languages (36) |Maintainer (Github/Discord) |
|
||||||
|🇭🇺 Hungarian |kornel0706 |🟢 Up To Date |
|
|----|---------------------|--------------------------------|
|
||||||
|🇷🇴 Romanian |sankedev |🟢 Up To Date |
|
|🟢 |🇬🇧 English |djj123dj |
|
||||||
|🇺🇦 Ukrainian |anderskiy |🟢 Up To Date |
|
|🟢 |🇳🇱 Dutch |djj123dj |
|
||||||
|🇮🇩 Indonesian |erxg |🟢 Up To Date |
|
|🟢 |❓ Catalan |guillee3 |
|
||||||
|🇮🇹 Italian |fraden1mvp. |🟢 Up To Date |
|
|🟢 |🇮🇩 Indonesian |erxg |
|
||||||
|🇩🇰 Danish |the_gamer |🟢 Up To Date |
|
|🟢 |🇮🇳 Hindi |challenger_nova |
|
||||||
|🇹🇭 Thai |modshd |🟢 Up To Date |
|
|🟢⏳ |🇩🇪 German |benzorich |
|
||||||
|🇹🇷 Turkish |palestinian |🟢 Up To Date |
|
|🟢⏳ |🇪🇸 Spanish |redactado & josuens |
|
||||||
|🇫🇷 French |guillee.3 |🟢 Up To Date |
|
|🟢⏳ |🇫🇷 French |guillee.3 |
|
||||||
|🇦🇪 Arabic |palestinian |🟢 Up To Date |
|
|🟢⏳ |🇵🇹 Portuguese |quiradon |
|
||||||
|🇮🇳 Hindi |an_developer |🟢 Up To Date |
|
|🟢⏳ |🇨🇿 Czech |spyeye_ |
|
||||||
|🇱🇹 Lithuanian |tsgindrius |🟢 Up To Date |
|
|🟢⏳ |🇭🇺 Hungarian |kornel0706 |
|
||||||
|🇵🇱 Polish |danoglez |🟢 Up To Date |
|
|🟢⏳ |🇷🇴 Romanian |sankedev |
|
||||||
|🇪🇪 Estonian |iamnotmega |🔵 Up To Date (ChatGPT) |
|
|🟢⏳ |🇺🇦 Ukrainian |anderskiy |
|
||||||
|🇫🇮 Finnish |iamnotmega |🔵 Up To Date (ChatGPT) |
|
|🟢⏳ |🇮🇹 Italian |fraden1mvp. |
|
||||||
|🇷🇺 Russian |apexo & ander |🟠 Temporary Outdated (beta) |
|
|🟢⏳ |🇩🇰 Danish |the_gamer |
|
||||||
|🇳🇴 Norwegian |noonenook |🟠 Temporary Outdated (beta) |
|
|🟢⏳ |🇹🇭 Thai |modshd |
|
||||||
|❓ Kurdish |raze.hama |🟠 Temporary Outdated (beta) |
|
|🟢⏳ |🇹🇷 Turkish |palestinian |
|
||||||
|❓ Persian |sasanwm |🟠 Temporary Outdated (beta) |
|
|🟢⏳ |🇦🇪 Arabic |palestinian |
|
||||||
|🇱🇻 Latvian |ronalds1398 |🟠 Temporary Outdated (beta) |
|
|🟢⏳ |🇱🇹 Lithuanian |tsgindrius |
|
||||||
|🇯🇵 Japanese |iamnotmega |🟠 Temporary Outdated (beta) |
|
|🟢⏳ |🇵🇱 Polish |danoglez |
|
||||||
|🇰🇷 Korean |iamnotmega |🟠 Temporary Outdated (beta) |
|
|🟢⏳ |🇳🇴 Norwegian |NoOneNook |
|
||||||
|🇨🇳 Simplified Chinese |iamnotmega |🟠 Temporary Outdated (beta) |
|
|🟢⏳ |🇸🇪 Swedish |NoOneNook |
|
||||||
|🇨🇳 Traditional Chinese|iamnotmega |🟠 Temporary Outdated (beta) |
|
|🟢⏳ |🇮🇷 Persian |dysashop & zhavis |
|
||||||
|🇸🇪 Swedish |iamnotmega |🟠 Temporary Outdated (beta) |
|
|🟢⏳ |🇧🇩 Bengali |HanumeshGupta |
|
||||||
|🇻🇳 Vietnamese |iamnotmega |🟠 Temporary Outdated (beta) |
|
|🤖 |🇪🇪 Estonian |iamnotmega |
|
||||||
|🇸🇮 Slovenian |n1kkec |🔴 Outdated |
|
|🤖 |🇫🇮 Finnish |iamnotmega |
|
||||||
|🇬🇷 Greek |stefanos |🔴 Outdated |
|
|🤖 |🇯🇵 Japanese |HanumeshGupta |
|
||||||
|
|🤖 |🇬🇷 Greek |HanumeshGupta |
|
||||||
|
|🤖 |🇸🇮 Slovenian |HanumeshGupta |
|
||||||
|
|🤖 |🇰🇷 Korean |HanumeshGupta |
|
||||||
|
|🤖 |🇮🇳 Tamil |HanumeshGupta |
|
||||||
|
|🤖 |🇨🇳 Simplified Chinese |HanumeshGupta |
|
||||||
|
|🤖 |❓ Kurdish |HanumeshGupta |
|
||||||
|
|🤖⏳ |🇷🇺 Russian |NoOneNook |
|
||||||
|
|🤖⏳ |🇱🇻 Latvian |NoOneNook |
|
||||||
|
|🤖⏳ |🇻🇳 Vietnamese |ngocdiep2006 |
|
||||||
|
|🔴 |🇨🇳 Traditional Chinese|[⭐ Contribute!](.github/CONTRIBUTING.md)|
|
||||||
|
<!--[⭐ Contribute!](.github/CONTRIBUTING.md) -->
|
||||||
|
|
||||||
## ⭐️ Star History
|
## ⭐️ Star History
|
||||||
Please help us grow by giving a star! It would help us a lot!
|
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/#DJj123dj/open-ticket&Date">
|
<a href="https://star-history.com/#open-discord-bots/open-ticket&Date">
|
||||||
<picture>
|
<picture>
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=DJj123dj/open-ticket&type=Date&theme=dark" />
|
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=open-discord-bots/open-ticket&type=Date&theme=dark" />
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=DJj123dj/open-ticket&type=Date" />
|
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=open-discord-bots/open-ticket&type=Date" />
|
||||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=DJj123dj/open-ticket&type=Date" />
|
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=open-discord-bots/open-ticket&type=Date" />
|
||||||
</picture>
|
</picture>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
## 🧩 Plugins
|
||||||
|
**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-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-restrictions`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-restrictions/)**
|
||||||
|
|
||||||
|
#### 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.
|
||||||
|
- Please Create a new category when your plugin doesn't fit in one of the available categories.
|
||||||
|
|
||||||
|
### 📦 Official *(made by DJdj Development)*
|
||||||
|
|Name |Category |Description |
|
||||||
|
|----------------------------------------------------------------------|----------------------------|-------------------------|
|
||||||
|
|[`example-plugin`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/example-plugin/) |📄 Example |This is just an example plugin for people that want to create their own plugin. |
|
||||||
|
|[`example-command`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/example-command/) |📄 Example |Sample custom command using the Open Discord system. |
|
||||||
|
|[`ot-jump-to-top`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-jump-to-top/) |📢 Command |Add a simple command to jump to the top of the ticket. |
|
||||||
|
|[`ot-kill-switch`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-kill-switch/) |📢 Command |Temporarily disable the ticket system using a kill switch. |
|
||||||
|
|[`od-hosting-status`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/od-hosting-status/) |📢 Command |A simple command to send hosting status updates to a channel. |
|
||||||
|
|[`od-shutdown`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/od-shutdown/) |📢 Command |A simple command to turn off the bot from a slash command (server & bot owner only). |
|
||||||
|
|[`ot-sqlite-database`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-sqlite-database/) |⚙️ Utility |With this plugin, the database will be an SQLite file. It's a must-have for large servers! |
|
||||||
|
|[`od-no-slash-clear`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/od-no-slash-clear/) |⚙️ Utility |Disable the automatic removal of slash commands that aren't used by Open Ticket. |
|
||||||
|
|[`ot-migrate-v3`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-migrate-v3/) |⚙️ Utility |Use this plugin to migrate all tickets from Open Ticket v3 to v4. |
|
||||||
|
|[`ot-ticket-message-extras`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-ticket-message-extras/) |🎨 Customisation |A plugin which adds a few little features to the ticket message. |
|
||||||
|
|[`ot-rename-keep-prefix`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-rename-keep-prefix/) |🎨 Customisation |Simple plugin to keep the channel prefix when using the /rename command. |
|
||||||
|
|[`ot-customise-buttons`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-customise-buttons/) |🎨 Customisation |Customise almost all built-in buttons. This includes the claim, reopen, close & delete buttons. |
|
||||||
|
|[`ot-ephemeral-messages`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-ephemeral-messages/) |🎨 Customisation |Customise for every messages if it needs to be ephemeral or not. |
|
||||||
|
|[`ot-footers`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-footers/) |🎨 Customisation |A simple plugin to add footers in all Open Ticket embeds. |
|
||||||
|
|[`od-alt-detector`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/od-alt-detector/) |💼 Management |Use the discord-alt-detector npm package by DJdj Development in your ticket bot. |
|
||||||
|
|[`ot-embeds`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-embeds/) |💼 Management |Create custom premade embeds in the config or use the command to create one from scratch. |
|
||||||
|
|[`ot-move-actions`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-move-actions/) |💼 Management |Automatically unclaim/unpin a ticket when it's moved using `/move`. |
|
||||||
|
|[`ot-reviews`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-reviews/) |💼 Management |Review system for Open Ticket! It is very customisable and has lots of features. |
|
||||||
|
|[`ot-tags`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-tags/) |💼 Management |Use tags to quickly reply with a pre-existing text. |
|
||||||
|
|[`ot-restrictions`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-restrictions/) |💼 Management |Restrict which roles can open a specific ticket option. |
|
||||||
|
|[`ot-better-status`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-better-status/) |🤖 Client |An advanced status plugin to rotate between states. It also allows for the use of variables. |
|
||||||
|
|[`ot-channel-display`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-channel-display/) |🤖 Client |A plugin to show different variables in a voice channel in your server. |
|
||||||
|
|[`ot-vanity`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-vanity/) |🤖 Client |A plugin to detect the vanity status of members in the server and give them exclusive privilleges. |
|
||||||
|
|
||||||
|
### ✅ Verified *(made by community)*
|
||||||
|
|Name |Author |Category |Description |
|
||||||
|
|---------------------------------------------------------------------|----------------------------|----------------------------|-------------------------|
|
||||||
|
|[`ot-config-reload`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-config-reload/) |guillee.3 |⚙️ Utility |This plugin adds a new command that allows reloading the Open Ticket config files without the need for a restart. |
|
||||||
|
|[`ot-ticket-forms`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-ticket-forms/) |guillee.3 |💼 Management |An advanced forms plugin for Open Ticket. |
|
||||||
|
|[`ot-feedback`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-feedback/) |an_developer |💼 Management |A plugin to gather feedback of your support service. |
|
||||||
|
|[`ot-assign-role`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-assign-role/) |rapid.fast |💼 Management |This plugin assigns a predefined role to a user upon creating a ticket. |
|
||||||
|
|[`ot-volume-warning`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-volume-warning/) |guillee.3 |💼 Management |Alerts ticket creators when too many tickets are open, indicating possible response delays. |
|
||||||
|
|[`od-reminders`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/od-reminders/) |guillee.3 |💼 Management |Set reminders that will be sent to a channel every specified time. |
|
||||||
|
|[`od-moderation`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/od-moderation/) |NotMukundOP |💼 Management |A simple moderation plugin for Open Discord with ban, kick & warnings. |
|
||||||
|
|[`ot-followups`](https://github.com/open-discord-bots/plugins/tree/main/open-ticket/ot-followups/) |guillee.3 |💼 Management |Send additional follow-up messages to a ticket. |
|
||||||
|
|[`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. |
|
||||||
|
|
||||||
---
|
---
|
||||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="170px">
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="170px">
|
||||||
|
|
||||||
**README.md**<br>
|
**README.md**<br>
|
||||||
[changelog](https://otgithub.dj-dj.be/releases) - [documentation](https://otdocs.dj-dj.be) - [tutorial](https://www.youtube.com/watch?v=2jK9kAf6ASU) - [website](https://openticket.dj-dj.be) - [discord](https://discord.dj-dj.be) - [license](./LICENSE.md)<br>
|
[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)
|
© 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":{
|
"_INFO":{
|
||||||
"support":"https://otdocs.dj-dj.be",
|
"support":"https://otdocs.dj-dj.be",
|
||||||
"discord":"https://discord.dj-dj.be",
|
"discord":"https://discord.dj-dj.be",
|
||||||
"version":"open-ticket-v4.0.0"
|
"version":"open-ticket-v4.1.1"
|
||||||
},
|
},
|
||||||
|
|
||||||
"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,
|
"tokenFromENV":false,
|
||||||
|
|
||||||
"mainColor":"#f8ba00",
|
"mainColor":"#f8ba00",
|
||||||
@@ -20,21 +20,34 @@
|
|||||||
"status":{
|
"status":{
|
||||||
"enabled":true,
|
"enabled":true,
|
||||||
"type":"listening OR watching OR playing OR custom",
|
"type":"listening OR watching OR playing OR custom",
|
||||||
|
"mode":"online OR invisible OR idle OR dnd",
|
||||||
"text":"/help",
|
"text":"/help",
|
||||||
"status":"online OR invisible OR idle OR dnd"
|
"state":"(additional text or leave empty)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"system":{
|
"system":{
|
||||||
"removeParticipantsOnClose":false,
|
|
||||||
"replyOnTicketCreation":true,
|
|
||||||
"replyOnReactionRole":true,
|
|
||||||
"useTranslatedConfigChecker":true,
|
|
||||||
"preferSlashOverText":true,
|
"preferSlashOverText":true,
|
||||||
"sendErrorOnUnknownCommand":true,
|
"sendErrorOnUnknownCommand":true,
|
||||||
"questionFieldsInCodeBlock":true,
|
"questionFieldsInCodeBlock":true,
|
||||||
|
"displayFieldsWithQuestions":false,
|
||||||
|
"showGlobalAdminsInPanelRoles":false,
|
||||||
"disableVerifyBars":false,
|
"disableVerifyBars":false,
|
||||||
"useRedErrorEmbeds":true,
|
"useRedErrorEmbeds":true,
|
||||||
|
"alwaysShowReason":false,
|
||||||
"emojiStyle":"before (OR after OR double OR disabled)",
|
"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,
|
"enableTicketClaimButtons":true,
|
||||||
"enableTicketCloseButtons":true,
|
"enableTicketCloseButtons":true,
|
||||||
@@ -54,6 +67,18 @@
|
|||||||
"userMaximum":3
|
"userMaximum":3
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"channelTopic":{
|
||||||
|
"showOptionName":true,
|
||||||
|
"showOptionDescription":false,
|
||||||
|
"showOptionTopic":true,
|
||||||
|
"showPriority":false,
|
||||||
|
"showClosed":true,
|
||||||
|
"showClaimed":false,
|
||||||
|
"showPinned":false,
|
||||||
|
"showCreator":false,
|
||||||
|
"showParticipants":false
|
||||||
|
},
|
||||||
|
|
||||||
"permissions":{
|
"permissions":{
|
||||||
"help":"everyone (OR admin OR none OR role id)",
|
"help":"everyone (OR admin OR none OR role id)",
|
||||||
"panel":"admin (OR everyone 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)",
|
"stats":"everyone (OR admin OR none OR role id)",
|
||||||
"clear":"admin (OR everyone OR none OR role id)",
|
"clear":"admin (OR everyone OR none OR role id)",
|
||||||
"autoclose":"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":{
|
"messages":{
|
||||||
"creation":{"dm":false, "logs":true},
|
"creation":{"dm":false,"logs":true},
|
||||||
"closing":{"dm":false, "logs":true},
|
"closing":{"dm":false,"logs":true},
|
||||||
"deleting":{"dm":false, "logs":true},
|
"deleting":{"dm":false,"logs":true},
|
||||||
"reopening":{"dm":false, "logs":true},
|
"reopening":{"dm":false,"logs":true},
|
||||||
"claiming":{"dm":false, "logs":true},
|
"claiming":{"dm":false,"logs":true},
|
||||||
"pinning":{"dm":false, "logs":true},
|
"pinning":{"dm":false,"logs":true},
|
||||||
"adding":{"dm":false, "logs":true},
|
"adding":{"dm":false,"logs":true},
|
||||||
"removing":{"dm":false, "logs":true},
|
"removing":{"dm":false,"logs":true},
|
||||||
"renaming":{"dm":false, "logs":true},
|
"renaming":{"dm":false,"logs":true},
|
||||||
"moving":{"dm":false, "logs":true},
|
"moving":{"dm":false,"logs":true},
|
||||||
"blacklisting":{"dm":false, "logs":true},
|
"blacklisting":{"dm":false,"logs":true},
|
||||||
"roleAdding":{"dm":false, "logs":true},
|
"transferring":{"dm":false,"logs":true},
|
||||||
"roleRemoving":{"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":[
|
"claimedCategory":[
|
||||||
{"user":"user id","category":"category id"}
|
{"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":{
|
"dmMessage":{
|
||||||
@@ -87,6 +87,10 @@
|
|||||||
"enabled":false,
|
"enabled":false,
|
||||||
"globalMaximum":20,
|
"globalMaximum":20,
|
||||||
"userMaximum":3
|
"userMaximum":3
|
||||||
|
},
|
||||||
|
"slowMode":{
|
||||||
|
"enabled":false,
|
||||||
|
"slowModeSeconds":20
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@
|
|||||||
"image":"https://www.example.com/image.png (or leave empty)",
|
"image":"https://www.example.com/image.png (or leave empty)",
|
||||||
"thumbnail":"https://www.example.com/image.png (or leave empty)",
|
"thumbnail":"https://www.example.com/image.png (or leave empty)",
|
||||||
|
|
||||||
"footer":"Open Ticket v4.0.0 (or leave empty)",
|
"footer":"Open Ticket v4.1.1 (or leave empty)",
|
||||||
"fields":[
|
"fields":[
|
||||||
{"name":"field name","value":"field value","inline":false}
|
{"name":"field name","value":"field value","inline":false}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
},
|
},
|
||||||
"favicon":{
|
"favicon":{
|
||||||
"enableCustomFavicon":false,
|
"enableCustomFavicon":false,
|
||||||
"imageUrl":"https://transcripts.dj-dj.be/favicon.png"
|
"imageUrl":"https://t.dj-dj.be/favicon.png"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+5
-3
@@ -4,6 +4,8 @@ services:
|
|||||||
openticket:
|
openticket:
|
||||||
build: .
|
build: .
|
||||||
volumes:
|
volumes:
|
||||||
- .:/app
|
- openticket:/home/container
|
||||||
environment: NODE_ENV=production
|
restart: no
|
||||||
restart: unless-stopped
|
container_name: open-ticket
|
||||||
|
volumes:
|
||||||
|
openticket:
|
||||||
+4
-4
@@ -1,9 +1,9 @@
|
|||||||
# Docker File for Open Ticket v4
|
# Docker File for Open Ticket v4
|
||||||
# Use the official Node.js 18 image from Docker Hub
|
# Use the official Node.js 20 image from Docker Hub
|
||||||
FROM node:18-alpine
|
FROM node:20-alpine
|
||||||
|
|
||||||
# Set a different working directory inside the container
|
# Set pterodactyl working directory inside the container
|
||||||
WORKDIR /usr/src/openticket
|
WORKDIR /home/container
|
||||||
|
|
||||||
# Copy package.json and package-lock.json into the container
|
# Copy package.json and package-lock.json into the container
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ process.argv.push(...flags)
|
|||||||
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║
|
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║
|
||||||
╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║
|
╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║
|
||||||
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝
|
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝
|
||||||
v4.0.0 - Made by DJj123dj & Contributors
|
v4.1.1 - Made by DJj123dj & Contributors
|
||||||
|
|
||||||
Discord: https://discord.dj-dj.be
|
Discord: https://discord.dj-dj.be
|
||||||
Docs: https://otdocs.dj-dj.be
|
Docs: https://otdocs.dj-dj.be
|
||||||
@@ -45,7 +45,7 @@ function computeSourceHash(dir,upperHash){
|
|||||||
|
|
||||||
for (const file of info) {
|
for (const file of info) {
|
||||||
const fullPath = nodepath.join(dir,file.name)
|
const fullPath = nodepath.join(dir,file.name)
|
||||||
if (file.isFile()){
|
if (file.isFile() && [".js",".ts",".jsx",".tsx"].some((ext) => file.name.endsWith(ext))){
|
||||||
const statInfo = fs.statSync(fullPath)
|
const statInfo = fs.statSync(fullPath)
|
||||||
//compute hash using file metadata
|
//compute hash using file metadata
|
||||||
const fileInfo = `${fullPath}:${statInfo.size}:${statInfo.mtimeMs}`
|
const fileInfo = `${fullPath}:${statInfo.size}:${statInfo.mtimeMs}`
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION": {
|
"_TRANSLATION": {
|
||||||
"otversion": "v4.0.0",
|
"otversion": "v4.1.1",
|
||||||
"translators": ["palestinian"],
|
"translators": ["palestinian"],
|
||||||
"lastedited": "06/12/2024",
|
"lastedited": "06/12/2024",
|
||||||
"language": "Arabic",
|
"language": "Arabic",
|
||||||
|
|||||||
@@ -0,0 +1,478 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.1.1",
|
||||||
|
"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": "ট্রান্সক্রিপ্ট তৈরি হয়েছে"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+607
-477
File diff suppressed because it is too large
Load Diff
+156
-26
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["DJj123dj"],
|
"translators":["DJj123dj"],
|
||||||
"lastedited":"21/08/2024",
|
"lastedited":"16/11/2025",
|
||||||
"language":"Custom",
|
"language":"Custom",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,7 +31,15 @@
|
|||||||
"stringContains":"This string needs to contain {0}!",
|
"stringContains":"This string needs to contain {0}!",
|
||||||
"stringChoices":"This string can only be one of the following values: {0}!",
|
"stringChoices":"This string can only be one of the following values: {0}!",
|
||||||
"stringRegex":"This string is invalid!",
|
"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!",
|
"numberTooShort":"This number can't be shorter than {0} characters!",
|
||||||
"numberTooLong":"This number can't be longer than {0} characters!",
|
"numberTooLong":"This number can't be longer than {0} characters!",
|
||||||
"numberLengthInvalid":"This number needs to be {0} characters long!",
|
"numberLengthInvalid":"This number needs to be {0} characters long!",
|
||||||
@@ -48,10 +56,12 @@
|
|||||||
"numberNegative":"This number can't be negative!",
|
"numberNegative":"This number can't be negative!",
|
||||||
"numberPositive":"This number can't be positive!",
|
"numberPositive":"This number can't be positive!",
|
||||||
"numberZero":"This number can't be zero!",
|
"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!",
|
"booleanTrue":"This boolean can't be true!",
|
||||||
"booleanFalse":"This boolean can't be false!",
|
"booleanFalse":"This boolean can't be false!",
|
||||||
|
|
||||||
"arrayEmptyDisabled":"This array isn't allowed to be empty!",
|
"arrayEmptyDisabled":"This array isn't allowed to be empty!",
|
||||||
"arrayEmptyRequired":"This array is required to be empty!",
|
"arrayEmptyRequired":"This array is required to be empty!",
|
||||||
"arrayTooShort":"This array needs to have a length of at least {0}!",
|
"arrayTooShort":"This array needs to have a length of at least {0}!",
|
||||||
@@ -59,7 +69,7 @@
|
|||||||
"arrayLengthInvalid":"This array needs to have a length of {0}!",
|
"arrayLengthInvalid":"This array needs to have a length of {0}!",
|
||||||
"arrayInvalidTypes":"This array can only contain the following types: {0}!",
|
"arrayInvalidTypes":"This array can only contain the following types: {0}!",
|
||||||
"arrayDouble":"This array doesn't allow the same value twice!",
|
"arrayDouble":"This array doesn't allow the same value twice!",
|
||||||
|
|
||||||
"discordInvalidId":"This is an invalid discord {0} id!",
|
"discordInvalidId":"This is an invalid discord {0} id!",
|
||||||
"discordInvalidIdOptions":"This is an invalid discord {0} id! You can also use one of these: {1}!",
|
"discordInvalidIdOptions":"This is an invalid discord {0} id! You can also use one of these: {1}!",
|
||||||
"discordInvalidToken":"This is an invalid discord token (syntactically)!",
|
"discordInvalidToken":"This is an invalid discord token (syntactically)!",
|
||||||
@@ -76,7 +86,7 @@
|
|||||||
"urlInvalidPath":"This url has an invalid path!",
|
"urlInvalidPath":"This url has an invalid path!",
|
||||||
"idNotUnique":"This id isn't unique, use another id instead!",
|
"idNotUnique":"This id isn't unique, use another id instead!",
|
||||||
"idNonExistent":"The id {0} doesn't exist!",
|
"idNonExistent":"The id {0} doesn't exist!",
|
||||||
|
|
||||||
"invalidType":"This property needs to be the type: {0}!",
|
"invalidType":"This property needs to be the type: {0}!",
|
||||||
"propertyMissing":"The property {0} is missing from this object!",
|
"propertyMissing":"The property {0} is missing from this object!",
|
||||||
"propertyOptional":"The property {0} is optional in this object!",
|
"propertyOptional":"The property {0} is optional in this object!",
|
||||||
@@ -84,12 +94,13 @@
|
|||||||
"nullInvalid":"This property can't be null!",
|
"nullInvalid":"This property can't be null!",
|
||||||
"switchInvalidType":"This needs to be one of the following types: {0}!",
|
"switchInvalidType":"This needs to be one of the following types: {0}!",
|
||||||
"objectSwitchInvalid":"This object needs to be one of the following types: {0}!",
|
"objectSwitchInvalid":"This object needs to be one of the following types: {0}!",
|
||||||
|
|
||||||
"invalidLanguage":"This is an invalid language!",
|
"invalidLanguage":"This is an invalid language!",
|
||||||
"invalidButton":"This button needs to have at least an {0} or {1}!",
|
"invalidButton":"This button needs to have at least an {0} or {1}!",
|
||||||
"unusedOption":"The option {0} isn't used anywhere!",
|
"unusedOption":"The option {0} isn't used anywhere!",
|
||||||
"unusedQuestion":"The question {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":{
|
"actions":{
|
||||||
@@ -132,6 +143,7 @@
|
|||||||
"blacklistAddDm":"Added To Blacklist",
|
"blacklistAddDm":"Added To Blacklist",
|
||||||
"blacklistRemoveDm":"Removed From Blacklist",
|
"blacklistRemoveDm":"Removed From Blacklist",
|
||||||
"clear":"Tickets Cleared",
|
"clear":"Tickets Cleared",
|
||||||
|
"clearTickets":"Clear Tickets",
|
||||||
"roles":"Roles Updated",
|
"roles":"Roles Updated",
|
||||||
|
|
||||||
"autoclose":"Ticket Autoclosed",
|
"autoclose":"Ticket Autoclosed",
|
||||||
@@ -139,7 +151,12 @@
|
|||||||
"autocloseDisabled":"Autoclose Disabled",
|
"autocloseDisabled":"Autoclose Disabled",
|
||||||
"autodelete":"Ticket Autodeleted",
|
"autodelete":"Ticket Autodeleted",
|
||||||
"autodeleteEnabled":"Autodelete Enabled",
|
"autodeleteEnabled":"Autodelete Enabled",
|
||||||
"autodeleteDisabled":"Autodelete Disabled"
|
"autodeleteDisabled":"Autodelete Disabled",
|
||||||
|
|
||||||
|
"topicSet":"Topic Changed",
|
||||||
|
"prioritySet":"Priority Changed",
|
||||||
|
"priorityGet":"Ticket Priority",
|
||||||
|
"transfer":"Ticket Transferred"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Your ticket has been created. Click the button below to access it!",
|
"create":"Your ticket has been created. Click the button below to access it!",
|
||||||
@@ -154,7 +171,7 @@
|
|||||||
"move":"The ticket has been moved to {0} successfully!",
|
"move":"The ticket has been moved to {0} successfully!",
|
||||||
"add":"{0} has been added to the ticket successfully!",
|
"add":"{0} has been added to the ticket successfully!",
|
||||||
"remove":"{0} has been removed from the ticket successfully!",
|
"remove":"{0} has been removed from the ticket successfully!",
|
||||||
|
|
||||||
"helpExplanation":"`<name>` => required parameter\n`[name]` => optional parameter",
|
"helpExplanation":"`<name>` => required parameter\n`[name]` => optional parameter",
|
||||||
"statsReset":"The bot stats have been reset successfully!",
|
"statsReset":"The bot stats have been reset successfully!",
|
||||||
"statsError":"Unable to view ticket stats!\n{0} is not a ticket!",
|
"statsError":"Unable to view ticket stats!\n{0} is not a ticket!",
|
||||||
@@ -167,7 +184,7 @@
|
|||||||
"clearVerify":"Are you sure you want to delete multiple tickets?\nThis action can't be undone!",
|
"clearVerify":"Are you sure you want to delete multiple tickets?\nThis action can't be undone!",
|
||||||
"clearReady":"{0} tickets have been deleted successfully!",
|
"clearReady":"{0} tickets have been deleted successfully!",
|
||||||
"rolesEmpty":"No roles have been updated!",
|
"rolesEmpty":"No roles have been updated!",
|
||||||
|
|
||||||
"autocloseLeave":"This ticket has been autoclosed because the creator left the server!",
|
"autocloseLeave":"This ticket has been autoclosed because the creator left the server!",
|
||||||
"autocloseTimeout":"This ticket has been autoclosed because it has been inactive for more than `{0}h`!",
|
"autocloseTimeout":"This ticket has been autoclosed because it has been inactive for more than `{0}h`!",
|
||||||
"autodeleteLeave":"This ticket has been autodeleted because the creator left the server!",
|
"autodeleteLeave":"This ticket has been autodeleted because the creator left the server!",
|
||||||
@@ -176,11 +193,16 @@
|
|||||||
"autocloseDisabled":"Autoclose has been disabled in this ticket!\nIt won't be closed automatically anymore!",
|
"autocloseDisabled":"Autoclose has been disabled in this ticket!\nIt won't be closed automatically anymore!",
|
||||||
"autodeleteEnabled":"Autodelete has been enabled in this ticket!\nIt will be deleted when it is inactive for more than `{0} days`!",
|
"autodeleteEnabled":"Autodelete has been enabled in this ticket!\nIt will be deleted when it is inactive for more than `{0} days`!",
|
||||||
"autodeleteDisabled":"Autodelete has been disabled in this ticket!\nIt won't be deleted automatically anymore!",
|
"autodeleteDisabled":"Autodelete has been disabled in this ticket!\nIt won't be deleted automatically anymore!",
|
||||||
|
|
||||||
"ticketMessageLimit":"You can only create {0} ticket(s) at the same time!",
|
"ticketMessageLimit":"You can only create {0} ticket(s) at the same time!",
|
||||||
"ticketMessageAutoclose":"This ticket will be autoclosed when inactive for {0}h!",
|
"ticketMessageAutoclose":"This ticket will be autoclosed when inactive for {0}h!",
|
||||||
"ticketMessageAutodelete":"This ticket will be autodeleted when inactive for {0} days!",
|
"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":{
|
"modal":{
|
||||||
"closePlaceholder":"Why did you close this ticket?",
|
"closePlaceholder":"Why did you close this ticket?",
|
||||||
@@ -215,12 +237,19 @@
|
|||||||
"addDm":"{0} has been added to your ticket in our server!",
|
"addDm":"{0} has been added to your ticket in our server!",
|
||||||
"removeLog":"{0} has been removed from this ticket by {1}!",
|
"removeLog":"{0} has been removed from this ticket by {1}!",
|
||||||
"removeDm":"{0} has been removed from your ticket in our server!",
|
"removeDm":"{0} has been removed from your ticket in our server!",
|
||||||
|
|
||||||
"blacklistAddLog":"{0} was blacklisted by {1}!",
|
"blacklistAddLog":"{0} was blacklisted by {1}!",
|
||||||
"blacklistRemoveLog":"{0} was removed from the blacklist by {1}!",
|
"blacklistRemoveLog":"{0} was removed from the blacklist by {1}!",
|
||||||
"blacklistAddDm":"You have been blacklisted in our server!\nFrom now on, you are unable to create a ticket!",
|
"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!",
|
"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":{
|
"transcripts":{
|
||||||
@@ -229,7 +258,7 @@
|
|||||||
"ready":"Transcript Created",
|
"ready":"Transcript Created",
|
||||||
"textFileDescription":"This is the text transcript of a deleted ticket!",
|
"textFileDescription":"This is the text transcript of a deleted ticket!",
|
||||||
"htmlProgress":"Please wait while this html transcript is getting processed...",
|
"htmlProgress":"Please wait while this html transcript is getting processed...",
|
||||||
|
|
||||||
"createdChannel":"A new {0} transcript has been created in the server!",
|
"createdChannel":"A new {0} transcript has been created in the server!",
|
||||||
"createdCreator":"A new {0} transcript has been created for one of your tickets!",
|
"createdCreator":"A new {0} transcript has been created for one of your tickets!",
|
||||||
"createdParticipant":"A new {0} transcript has been created in one of the tickets you participated in!",
|
"createdParticipant":"A new {0} transcript has been created in one of the tickets you participated in!",
|
||||||
@@ -241,7 +270,19 @@
|
|||||||
"retry":"Retry",
|
"retry":"Retry",
|
||||||
"continue":"Delete Without Transcript",
|
"continue":"Delete Without Transcript",
|
||||||
"backup":"Create Backup 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":{
|
"errors":{
|
||||||
@@ -257,7 +298,8 @@
|
|||||||
"unknownPanel":"Unknown Panel",
|
"unknownPanel":"Unknown Panel",
|
||||||
"notInGuild":"Not In Server",
|
"notInGuild":"Not In Server",
|
||||||
"channelRename":"Unable To Rename Channel",
|
"channelRename":"Unable To Rename Channel",
|
||||||
"busy":"Ticket Is Busy"
|
"busy":"Ticket Is Busy",
|
||||||
|
"permissionError":"Permission Error"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Contact the owner of this bot for more info!",
|
"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!",
|
"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.",
|
"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}",
|
"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":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Value doesn't match pattern!",
|
"stringRegex":"Value doesn't match pattern!",
|
||||||
@@ -331,7 +376,6 @@
|
|||||||
"added":"Added",
|
"added":"Added",
|
||||||
"removed":"Removed",
|
"removed":"Removed",
|
||||||
"filter":"Filter",
|
"filter":"Filter",
|
||||||
"claimedBy":"Claimed By {0}",
|
|
||||||
"method":"Method",
|
"method":"Method",
|
||||||
"type":"Type",
|
"type":"Type",
|
||||||
"blacklisted":"Blacklisted",
|
"blacklisted":"Blacklisted",
|
||||||
@@ -355,7 +399,27 @@
|
|||||||
"status":"Status",
|
"status":"Status",
|
||||||
"claimed":"Claimed",
|
"claimed":"Claimed",
|
||||||
"pinned":"Pinned",
|
"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":{
|
"lowercase":{
|
||||||
"text":"text",
|
"text":"text",
|
||||||
@@ -384,6 +448,7 @@
|
|||||||
"unclaim":"Unclaim a ticket.",
|
"unclaim":"Unclaim a ticket.",
|
||||||
"pin":"Pin a ticket.",
|
"pin":"Pin a ticket.",
|
||||||
"unpin":"Unpin a ticket.",
|
"unpin":"Unpin a ticket.",
|
||||||
|
|
||||||
"move":"Move a ticket.",
|
"move":"Move a ticket.",
|
||||||
"moveId":"The identifier of the option that you want to move to.",
|
"moveId":"The identifier of the option that you want to move to.",
|
||||||
"rename":"Rename a ticket.",
|
"rename":"Rename a ticket.",
|
||||||
@@ -392,6 +457,7 @@
|
|||||||
"addUser":"The user to add.",
|
"addUser":"The user to add.",
|
||||||
"remove":"Remove a user from a ticket.",
|
"remove":"Remove a user from a ticket.",
|
||||||
"removeUser":"The user to remove.",
|
"removeUser":"The user to remove.",
|
||||||
|
|
||||||
"blacklist":"Manage the ticket blacklist.",
|
"blacklist":"Manage the ticket blacklist.",
|
||||||
"blacklistView":"View a list of the current blacklist.",
|
"blacklistView":"View a list of the current blacklist.",
|
||||||
"blacklistAdd":"Add a user to the blacklist.",
|
"blacklistAdd":"Add a user to the blacklist.",
|
||||||
@@ -405,6 +471,7 @@
|
|||||||
"statsUserUser":"The user to view.",
|
"statsUserUser":"The user to view.",
|
||||||
"statsTicket":"View the stats of a ticket in the server.",
|
"statsTicket":"View the stats of a ticket in the server.",
|
||||||
"statsTicketTicket":"The ticket to view.",
|
"statsTicketTicket":"The ticket to view.",
|
||||||
|
|
||||||
"clear":"Delete multiple tickets at the same time.",
|
"clear":"Delete multiple tickets at the same time.",
|
||||||
"clearFilter":"The filter for clearing tickets.",
|
"clearFilter":"The filter for clearing tickets.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +484,7 @@
|
|||||||
"unpin":"Unpinned",
|
"unpin":"Unpinned",
|
||||||
"autoclose":"Autoclosed"
|
"autoclose":"Autoclosed"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Manage autoclose in a ticket.",
|
"autoclose":"Manage autoclose in a ticket.",
|
||||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
"autocloseDisable":"Disable autoclose in this ticket.",
|
||||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
"autocloseEnable":"Enable autoclose in this ticket.",
|
||||||
@@ -424,7 +492,19 @@
|
|||||||
"autodelete":"Manage autodelete in a ticket.",
|
"autodelete":"Manage autodelete in a ticket.",
|
||||||
"autodeleteDisable":"Disable autodelete in this ticket.",
|
"autodeleteDisable":"Disable autodelete in this ticket.",
|
||||||
"autodeleteEnable":"Enable 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":{
|
"helpMenu":{
|
||||||
"help":"Get a list of all the available commands.",
|
"help":"Get a list of all the available commands.",
|
||||||
@@ -452,7 +532,16 @@
|
|||||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
"autocloseDisable":"Disable autoclose in this ticket.",
|
||||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
"autocloseEnable":"Enable autoclose in this ticket.",
|
||||||
"autodeleteDisable":"Disable autodelete 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":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +549,8 @@
|
|||||||
"system":"System Stats",
|
"system":"System Stats",
|
||||||
"user":"User Stats",
|
"user":"User Stats",
|
||||||
"ticket":"Ticket Stats",
|
"ticket":"Ticket Stats",
|
||||||
"participants":"Participants"
|
"participants":"Participants",
|
||||||
|
"messages":"Messages"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Tickets Created",
|
"ticketsCreated":"Tickets Created",
|
||||||
@@ -472,7 +562,47 @@
|
|||||||
"ticketsPinned":"Tickets Pinned",
|
"ticketsPinned":"Tickets Pinned",
|
||||||
"ticketsMoved":"Tickets Moved",
|
"ticketsMoved":"Tickets Moved",
|
||||||
"usersBlacklisted":"Users Blacklisted",
|
"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":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["spyeye_"],
|
"translators":["spyeye_"],
|
||||||
"lastedited":"21/08/2024",
|
"lastedited":"21/08/2024",
|
||||||
"language":"Czech",
|
"language":"Czech",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["the_gamer"],
|
"translators":["the_gamer"],
|
||||||
"lastedited":"26/09/2024",
|
"lastedited":"26/09/2024",
|
||||||
"language":"Danish",
|
"language":"Danish",
|
||||||
|
|||||||
+161
-31
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["DJj123dj"],
|
"translators":["DJj123dj"],
|
||||||
"lastedited":"21/08/2024",
|
"lastedited":"16/11/2025",
|
||||||
"language":"Dutch",
|
"language":"Dutch",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,7 +31,15 @@
|
|||||||
"stringContains":"Deze tekst moet {0} bevatten!",
|
"stringContains":"Deze tekst moet {0} bevatten!",
|
||||||
"stringChoices":"Deze tekst kan alleen de volgende waardes bevatten: {0}!",
|
"stringChoices":"Deze tekst kan alleen de volgende waardes bevatten: {0}!",
|
||||||
"stringRegex":"Deze tekst is ongeldig!",
|
"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!",
|
"numberTooShort":"Dit nummer kan niet korter dan {0} karakters zijn!",
|
||||||
"numberTooLong":"Dit nummer kan niet langer dan {0} karakters zijn!",
|
"numberTooLong":"Dit nummer kan niet langer dan {0} karakters zijn!",
|
||||||
"numberLengthInvalid":"Dit nummer moet {0} karakters lang zijn!",
|
"numberLengthInvalid":"Dit nummer moet {0} karakters lang zijn!",
|
||||||
@@ -48,10 +56,12 @@
|
|||||||
"numberNegative":"Dit nummer kan niet negatief zijn!",
|
"numberNegative":"Dit nummer kan niet negatief zijn!",
|
||||||
"numberPositive":"Dit nummer kan niet positief zijn!",
|
"numberPositive":"Dit nummer kan niet positief zijn!",
|
||||||
"numberZero":"Dit nummer kan niet nul 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!",
|
"booleanTrue":"Deze boolean kan niet true zijn!",
|
||||||
"booleanFalse":"Deze boolean kan niet false zijn!",
|
"booleanFalse":"Deze boolean kan niet false zijn!",
|
||||||
|
|
||||||
"arrayEmptyDisabled":"Deze array mag niet leeg zijn!",
|
"arrayEmptyDisabled":"Deze array mag niet leeg zijn!",
|
||||||
"arrayEmptyRequired":"Deze array moet leeg zijn!",
|
"arrayEmptyRequired":"Deze array moet leeg zijn!",
|
||||||
"arrayTooShort":"Deze array moet een minimum lengte hebben van {0}!",
|
"arrayTooShort":"Deze array moet een minimum lengte hebben van {0}!",
|
||||||
@@ -59,7 +69,7 @@
|
|||||||
"arrayLengthInvalid":"Deze array moet een lengte hebben van {0}!",
|
"arrayLengthInvalid":"Deze array moet een lengte hebben van {0}!",
|
||||||
"arrayInvalidTypes":"Deze array kan alleen de volgende waardes bevatten: {0}!",
|
"arrayInvalidTypes":"Deze array kan alleen de volgende waardes bevatten: {0}!",
|
||||||
"arrayDouble":"Deze array staat dubbele waardes niet toe!",
|
"arrayDouble":"Deze array staat dubbele waardes niet toe!",
|
||||||
|
|
||||||
"discordInvalidId":"Dit is een ongeldig discord {0} id!",
|
"discordInvalidId":"Dit is een ongeldig discord {0} id!",
|
||||||
"discordInvalidIdOptions":"Dit is an ongeldig discord {0} id! Je kan ook een van deze gebruiken: {1}!",
|
"discordInvalidIdOptions":"Dit is an ongeldig discord {0} id! Je kan ook een van deze gebruiken: {1}!",
|
||||||
"discordInvalidToken":"Dit is een ongeldig discord token (syntactisch)!",
|
"discordInvalidToken":"Dit is een ongeldig discord token (syntactisch)!",
|
||||||
@@ -76,7 +86,7 @@
|
|||||||
"urlInvalidPath":"Deze url heeft een ongeldig pad!",
|
"urlInvalidPath":"Deze url heeft een ongeldig pad!",
|
||||||
"idNotUnique":"Dit id is niet uniek, gebruik een andere in de plaats!",
|
"idNotUnique":"Dit id is niet uniek, gebruik een andere in de plaats!",
|
||||||
"idNonExistent":"Het id {0} bestaat niet!",
|
"idNonExistent":"Het id {0} bestaat niet!",
|
||||||
|
|
||||||
"invalidType":"Het type van deze property moet gelijk zijn aan: {0}!",
|
"invalidType":"Het type van deze property moet gelijk zijn aan: {0}!",
|
||||||
"propertyMissing":"De property {0} mist in dit object!",
|
"propertyMissing":"De property {0} mist in dit object!",
|
||||||
"propertyOptional":"De property {0} is optioneel in dit object!",
|
"propertyOptional":"De property {0} is optioneel in dit object!",
|
||||||
@@ -84,12 +94,13 @@
|
|||||||
"nullInvalid":"Deze property kan niet null zijn!",
|
"nullInvalid":"Deze property kan niet null zijn!",
|
||||||
"switchInvalidType":"Dit moet een van de volgende types zijn: {0}!",
|
"switchInvalidType":"Dit moet een van de volgende types zijn: {0}!",
|
||||||
"objectSwitchInvalid":"Dit object moet een van de volgende types zijn: {0}!",
|
"objectSwitchInvalid":"Dit object moet een van de volgende types zijn: {0}!",
|
||||||
|
|
||||||
"invalidLanguage":"Dit is een ongeldige taal!",
|
"invalidLanguage":"Dit is een ongeldige taal!",
|
||||||
"invalidButton":"Deze knop moet een {0} of {1} hebben!",
|
"invalidButton":"Deze knop moet een {0} of {1} hebben!",
|
||||||
"unusedOption":"De optie {0} wordt nergens gebruikt!",
|
"unusedOption":"De optie {0} wordt nergens gebruikt!",
|
||||||
"unusedQuestion":"The vraag {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":{
|
"actions":{
|
||||||
@@ -132,6 +143,7 @@
|
|||||||
"blacklistAddDm":"Toegevoegd Aan Blacklist",
|
"blacklistAddDm":"Toegevoegd Aan Blacklist",
|
||||||
"blacklistRemoveDm":"Verwijderd Van Blacklist",
|
"blacklistRemoveDm":"Verwijderd Van Blacklist",
|
||||||
"clear":"Tickets Opgeruimd",
|
"clear":"Tickets Opgeruimd",
|
||||||
|
"clearTickets":"Tickets Opruimen",
|
||||||
"roles":"Rollen Bijgewerkt",
|
"roles":"Rollen Bijgewerkt",
|
||||||
|
|
||||||
"autoclose":"Ticket Automatisch Gesloten",
|
"autoclose":"Ticket Automatisch Gesloten",
|
||||||
@@ -139,7 +151,12 @@
|
|||||||
"autocloseDisabled":"Autoclose Uitgeschakeld",
|
"autocloseDisabled":"Autoclose Uitgeschakeld",
|
||||||
"autodelete":"Ticket Automatisch Verwijderd",
|
"autodelete":"Ticket Automatisch Verwijderd",
|
||||||
"autodeleteEnabled":"Autodelete Ingeschakeld",
|
"autodeleteEnabled":"Autodelete Ingeschakeld",
|
||||||
"autodeleteDisabled":"Autodelete Uitgeschakeld"
|
"autodeleteDisabled":"Autodelete Uitgeschakeld",
|
||||||
|
|
||||||
|
"topicSet":"Onderwerp Veranderd",
|
||||||
|
"prioritySet":"Prioriteit Veranderd",
|
||||||
|
"priorityGet":"Ticket Prioriteit",
|
||||||
|
"transfer":"Ticket Overgedragen"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Je ticket is aangemaakt. Klik op de knop hier onder om er naar toe te gaan!",
|
"create":"Je ticket is aangemaakt. Klik op de knop hier onder om er naar toe te gaan!",
|
||||||
@@ -154,7 +171,7 @@
|
|||||||
"move":"Het ticket is succesvol verplaatst naar {0}!",
|
"move":"Het ticket is succesvol verplaatst naar {0}!",
|
||||||
"add":"{0} is succesvol toegevoegd aan het ticket!",
|
"add":"{0} is succesvol toegevoegd aan het ticket!",
|
||||||
"remove":"{0} is succesvol verwijderd van het ticket!",
|
"remove":"{0} is succesvol verwijderd van het ticket!",
|
||||||
|
|
||||||
"helpExplanation":"`<naam>` => verplichte parameter\n`[naam]` => optionele parameter",
|
"helpExplanation":"`<naam>` => verplichte parameter\n`[naam]` => optionele parameter",
|
||||||
"statsReset":"De bot stats zijn succesvol gereset!",
|
"statsReset":"De bot stats zijn succesvol gereset!",
|
||||||
"statsError":"Kan ticket stats niet bekijken!\n{0} is geen ticket!",
|
"statsError":"Kan ticket stats niet bekijken!\n{0} is geen ticket!",
|
||||||
@@ -167,20 +184,25 @@
|
|||||||
"clearVerify":"Weet je zeker dat je meerdere tickets wilt verwijderen? Deze actie kan niet teruggedraaid worden!",
|
"clearVerify":"Weet je zeker dat je meerdere tickets wilt verwijderen? Deze actie kan niet teruggedraaid worden!",
|
||||||
"clearReady":"{0} tickets zijn succesvol verwijderd!",
|
"clearReady":"{0} tickets zijn succesvol verwijderd!",
|
||||||
"rolesEmpty":"Geen enkele rollen zijn bijgewerkt!",
|
"rolesEmpty":"Geen enkele rollen zijn bijgewerkt!",
|
||||||
|
|
||||||
"autocloseLeave":"Dit ticket is automatisch gesloten omdat de maker de server verlaten is!",
|
"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!",
|
"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`!",
|
"autodeleteTimeout":"Dit ticket is automatisch verwijderd omdat het meer dan `{0} dagen` inactief was!",
|
||||||
"autocloseEnabled":"Autoclose is ingeschakeld in dit ticket!\nHet wordt gesloten wanneer het inactief is voor meer dan `{0} uur`!",
|
"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!",
|
"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!",
|
"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!",
|
"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!",
|
"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!",
|
"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":{
|
"modal":{
|
||||||
"closePlaceholder":"Waarom heb je dit ticket gesloten?",
|
"closePlaceholder":"Waarom heb je dit ticket gesloten?",
|
||||||
@@ -215,12 +237,19 @@
|
|||||||
"addDm":"{0} is toegevoegd aan jouw ticket in onze server!",
|
"addDm":"{0} is toegevoegd aan jouw ticket in onze server!",
|
||||||
"removeLog":"{0} is verwijderd van dit ticket door {1}!",
|
"removeLog":"{0} is verwijderd van dit ticket door {1}!",
|
||||||
"removeDm":"{0} is verwijderd van jouw ticket in onze server!",
|
"removeDm":"{0} is verwijderd van jouw ticket in onze server!",
|
||||||
|
|
||||||
"blacklistAddLog":"{0} is geblacklist door {1}!",
|
"blacklistAddLog":"{0} is geblacklist door {1}!",
|
||||||
"blacklistRemoveLog":"{0} is verwijderd van de blacklist door {1}!",
|
"blacklistRemoveLog":"{0} is verwijderd van de blacklist door {1}!",
|
||||||
"blacklistAddDm":"Je bent geblacklist in onze server!\nVanaf nu kan je geen tickets meer aanmaken!",
|
"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!",
|
"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":{
|
"transcripts":{
|
||||||
@@ -229,7 +258,7 @@
|
|||||||
"ready":"Transcript Aangemaakt",
|
"ready":"Transcript Aangemaakt",
|
||||||
"textFileDescription":"Dit is een tekst transcript van een verwijderd ticket!",
|
"textFileDescription":"Dit is een tekst transcript van een verwijderd ticket!",
|
||||||
"htmlProgress":"Gelieve te wachten terwijl dit html transcript verwerkt wordt...",
|
"htmlProgress":"Gelieve te wachten terwijl dit html transcript verwerkt wordt...",
|
||||||
|
|
||||||
"createdChannel":"Een nieuw {0} transcript is aangemaakt in de server!",
|
"createdChannel":"Een nieuw {0} transcript is aangemaakt in de server!",
|
||||||
"createdCreator":"Een nieuw {0} transcript is aangemaakt voor een van jouw tickets!",
|
"createdCreator":"Een nieuw {0} transcript is aangemaakt voor een van jouw tickets!",
|
||||||
"createdParticipant":"Een nieuw {0} transcript is aangemaakt in een van de tickets waar jij lid van was!",
|
"createdParticipant":"Een nieuw {0} transcript is aangemaakt in een van de tickets waar jij lid van was!",
|
||||||
@@ -241,7 +270,19 @@
|
|||||||
"retry":"Herprobeer",
|
"retry":"Herprobeer",
|
||||||
"continue":"Verwijder Zonder Transcript",
|
"continue":"Verwijder Zonder Transcript",
|
||||||
"backup":"Maak Backup 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":{
|
"errors":{
|
||||||
@@ -257,10 +298,11 @@
|
|||||||
"unknownPanel":"Onbekend Paneel",
|
"unknownPanel":"Onbekend Paneel",
|
||||||
"notInGuild":"Niet In Server",
|
"notInGuild":"Niet In Server",
|
||||||
"channelRename":"Kan Kanaal Niet Hernoemen",
|
"channelRename":"Kan Kanaal Niet Hernoemen",
|
||||||
"busy":"Ticket Is Bezig"
|
"busy":"Ticket Is Bezig",
|
||||||
|
"permissionError":"Permission Error"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Contacteer the eigenaar van deze bot voor meer info!",
|
"askForInfo":"Contacteer de eigenaar van deze bot voor meer info!",
|
||||||
"askForInfoResolve":"Contacteer de eigenaar van deze bot als het probleem niet opgelost wordt na enkele keren.",
|
"askForInfoResolve":"Contacteer de eigenaar van deze bot als het probleem niet opgelost wordt na enkele keren.",
|
||||||
"internalError":"Gefaald om te reageren op deze {0} door een interne error!",
|
"internalError":"Gefaald om te reageren op deze {0} door een interne error!",
|
||||||
"optionMissing":"Een verplichte parameter mist in deze command!",
|
"optionMissing":"Een verplichte parameter mist in deze command!",
|
||||||
@@ -280,7 +322,10 @@
|
|||||||
"notInGuild":"Deze {0} werkt niet in DM! Probeer het opnieuw in een server!",
|
"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.",
|
"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}",
|
"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":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Waarde is niet gelijk aan het patroon!",
|
"stringRegex":"Waarde is niet gelijk aan het patroon!",
|
||||||
@@ -331,7 +376,6 @@
|
|||||||
"added":"Toegevoegd",
|
"added":"Toegevoegd",
|
||||||
"removed":"Verwijderd",
|
"removed":"Verwijderd",
|
||||||
"filter":"Filter",
|
"filter":"Filter",
|
||||||
"claimedBy":"Geclaimd Door {0}",
|
|
||||||
"method":"Methode",
|
"method":"Methode",
|
||||||
"type":"Type",
|
"type":"Type",
|
||||||
"blacklisted":"Geblacklist",
|
"blacklisted":"Geblacklist",
|
||||||
@@ -355,7 +399,27 @@
|
|||||||
"status":"Status",
|
"status":"Status",
|
||||||
"claimed":"Geclaimd",
|
"claimed":"Geclaimd",
|
||||||
"pinned":"Gepind",
|
"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":{
|
"lowercase":{
|
||||||
"text":"tekst",
|
"text":"tekst",
|
||||||
@@ -384,6 +448,7 @@
|
|||||||
"unclaim":"Ontclaim dit ticket.",
|
"unclaim":"Ontclaim dit ticket.",
|
||||||
"pin":"Pin dit ticket.",
|
"pin":"Pin dit ticket.",
|
||||||
"unpin":"Maak dit ticket los.",
|
"unpin":"Maak dit ticket los.",
|
||||||
|
|
||||||
"move":"Verplaats een ticket.",
|
"move":"Verplaats een ticket.",
|
||||||
"moveId":"Het id van de optie waarnaar je wilt verplaatsen.",
|
"moveId":"Het id van de optie waarnaar je wilt verplaatsen.",
|
||||||
"rename":"Hernoem een ticket.",
|
"rename":"Hernoem een ticket.",
|
||||||
@@ -392,6 +457,7 @@
|
|||||||
"addUser":"De gebruiker om toe te voegen.",
|
"addUser":"De gebruiker om toe te voegen.",
|
||||||
"remove":"Verwijder een user van dit ticket.",
|
"remove":"Verwijder een user van dit ticket.",
|
||||||
"removeUser":"De gebruiker om te verwijderen.",
|
"removeUser":"De gebruiker om te verwijderen.",
|
||||||
|
|
||||||
"blacklist":"Beheer de ticket blacklist.",
|
"blacklist":"Beheer de ticket blacklist.",
|
||||||
"blacklistView":"Bekijk de huidige blacklist.",
|
"blacklistView":"Bekijk de huidige blacklist.",
|
||||||
"blacklistAdd":"Voeg een gebruiker toe aan de blacklist.",
|
"blacklistAdd":"Voeg een gebruiker toe aan de blacklist.",
|
||||||
@@ -405,6 +471,7 @@
|
|||||||
"statsUserUser":"De gebruiker om te bekijken.",
|
"statsUserUser":"De gebruiker om te bekijken.",
|
||||||
"statsTicket":"Bekijk de stats van een ticket in de server.",
|
"statsTicket":"Bekijk de stats van een ticket in de server.",
|
||||||
"statsTicketTicket":"Het ticket om te bekijken.",
|
"statsTicketTicket":"Het ticket om te bekijken.",
|
||||||
|
|
||||||
"clear":"Verwijder meerdere tickets tegelijkertijd.",
|
"clear":"Verwijder meerdere tickets tegelijkertijd.",
|
||||||
"clearFilter":"De filter om tickets op te ruimen.",
|
"clearFilter":"De filter om tickets op te ruimen.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +484,7 @@
|
|||||||
"unpin":"Losgemaakt (niet gepind)",
|
"unpin":"Losgemaakt (niet gepind)",
|
||||||
"autoclose":"Automatisch Gesloten"
|
"autoclose":"Automatisch Gesloten"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Beheer autoclose in een ticket.",
|
"autoclose":"Beheer autoclose in een ticket.",
|
||||||
"autocloseDisable":"Schakel autoclose in dit ticket uit.",
|
"autocloseDisable":"Schakel autoclose in dit ticket uit.",
|
||||||
"autocloseEnable":"Schakel autoclose in dit ticket in.",
|
"autocloseEnable":"Schakel autoclose in dit ticket in.",
|
||||||
@@ -424,7 +492,19 @@
|
|||||||
"autodelete":"Beheer autodelete in een ticket.",
|
"autodelete":"Beheer autodelete in een ticket.",
|
||||||
"autodeleteDisable":"Schakel autodelete in dit ticket aan.",
|
"autodeleteDisable":"Schakel autodelete in dit ticket aan.",
|
||||||
"autodeleteEnable":"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":{
|
"helpMenu":{
|
||||||
"help":"Krijg een lijst van alle beschikbare commands.",
|
"help":"Krijg een lijst van alle beschikbare commands.",
|
||||||
@@ -452,7 +532,16 @@
|
|||||||
"autocloseDisable":"Zet autoclose uit in dit ticket.",
|
"autocloseDisable":"Zet autoclose uit in dit ticket.",
|
||||||
"autocloseEnable":"Zet autoclose in aan dit ticket.",
|
"autocloseEnable":"Zet autoclose in aan dit ticket.",
|
||||||
"autodeleteDisable":"Zet autodelete uit in 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":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +549,8 @@
|
|||||||
"system":"Systeem Stats",
|
"system":"Systeem Stats",
|
||||||
"user":"User Stats",
|
"user":"User Stats",
|
||||||
"ticket":"Ticket Stats",
|
"ticket":"Ticket Stats",
|
||||||
"participants":"Deelnemers"
|
"participants":"Deelnemers",
|
||||||
|
"messages":"Berichten"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Tickets Aangemaakt",
|
"ticketsCreated":"Tickets Aangemaakt",
|
||||||
@@ -472,7 +562,47 @@
|
|||||||
"ticketsPinned":"Tickets Gepind",
|
"ticketsPinned":"Tickets Gepind",
|
||||||
"ticketsMoved":"Tickets Verplaatst",
|
"ticketsMoved":"Tickets Verplaatst",
|
||||||
"usersBlacklisted":"Users Geblacklist",
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+156
-26
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["DJj123dj"],
|
"translators":["DJj123dj"],
|
||||||
"lastedited":"21/08/2024",
|
"lastedited":"16/11/2025",
|
||||||
"language":"English",
|
"language":"English",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,7 +31,15 @@
|
|||||||
"stringContains":"This string needs to contain {0}!",
|
"stringContains":"This string needs to contain {0}!",
|
||||||
"stringChoices":"This string can only be one of the following values: {0}!",
|
"stringChoices":"This string can only be one of the following values: {0}!",
|
||||||
"stringRegex":"This string is invalid!",
|
"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!",
|
"numberTooShort":"This number can't be shorter than {0} characters!",
|
||||||
"numberTooLong":"This number can't be longer than {0} characters!",
|
"numberTooLong":"This number can't be longer than {0} characters!",
|
||||||
"numberLengthInvalid":"This number needs to be {0} characters long!",
|
"numberLengthInvalid":"This number needs to be {0} characters long!",
|
||||||
@@ -48,10 +56,12 @@
|
|||||||
"numberNegative":"This number can't be negative!",
|
"numberNegative":"This number can't be negative!",
|
||||||
"numberPositive":"This number can't be positive!",
|
"numberPositive":"This number can't be positive!",
|
||||||
"numberZero":"This number can't be zero!",
|
"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!",
|
"booleanTrue":"This boolean can't be true!",
|
||||||
"booleanFalse":"This boolean can't be false!",
|
"booleanFalse":"This boolean can't be false!",
|
||||||
|
|
||||||
"arrayEmptyDisabled":"This array isn't allowed to be empty!",
|
"arrayEmptyDisabled":"This array isn't allowed to be empty!",
|
||||||
"arrayEmptyRequired":"This array is required to be empty!",
|
"arrayEmptyRequired":"This array is required to be empty!",
|
||||||
"arrayTooShort":"This array needs to have a length of at least {0}!",
|
"arrayTooShort":"This array needs to have a length of at least {0}!",
|
||||||
@@ -59,7 +69,7 @@
|
|||||||
"arrayLengthInvalid":"This array needs to have a length of {0}!",
|
"arrayLengthInvalid":"This array needs to have a length of {0}!",
|
||||||
"arrayInvalidTypes":"This array can only contain the following types: {0}!",
|
"arrayInvalidTypes":"This array can only contain the following types: {0}!",
|
||||||
"arrayDouble":"This array doesn't allow the same value twice!",
|
"arrayDouble":"This array doesn't allow the same value twice!",
|
||||||
|
|
||||||
"discordInvalidId":"This is an invalid discord {0} id!",
|
"discordInvalidId":"This is an invalid discord {0} id!",
|
||||||
"discordInvalidIdOptions":"This is an invalid discord {0} id! You can also use one of these: {1}!",
|
"discordInvalidIdOptions":"This is an invalid discord {0} id! You can also use one of these: {1}!",
|
||||||
"discordInvalidToken":"This is an invalid discord token (syntactically)!",
|
"discordInvalidToken":"This is an invalid discord token (syntactically)!",
|
||||||
@@ -76,7 +86,7 @@
|
|||||||
"urlInvalidPath":"This url has an invalid path!",
|
"urlInvalidPath":"This url has an invalid path!",
|
||||||
"idNotUnique":"This id isn't unique, use another id instead!",
|
"idNotUnique":"This id isn't unique, use another id instead!",
|
||||||
"idNonExistent":"The id {0} doesn't exist!",
|
"idNonExistent":"The id {0} doesn't exist!",
|
||||||
|
|
||||||
"invalidType":"This property needs to be the type: {0}!",
|
"invalidType":"This property needs to be the type: {0}!",
|
||||||
"propertyMissing":"The property {0} is missing from this object!",
|
"propertyMissing":"The property {0} is missing from this object!",
|
||||||
"propertyOptional":"The property {0} is optional in this object!",
|
"propertyOptional":"The property {0} is optional in this object!",
|
||||||
@@ -84,12 +94,13 @@
|
|||||||
"nullInvalid":"This property can't be null!",
|
"nullInvalid":"This property can't be null!",
|
||||||
"switchInvalidType":"This needs to be one of the following types: {0}!",
|
"switchInvalidType":"This needs to be one of the following types: {0}!",
|
||||||
"objectSwitchInvalid":"This object needs to be one of the following types: {0}!",
|
"objectSwitchInvalid":"This object needs to be one of the following types: {0}!",
|
||||||
|
|
||||||
"invalidLanguage":"This is an invalid language!",
|
"invalidLanguage":"This is an invalid language!",
|
||||||
"invalidButton":"This button needs to have at least an {0} or {1}!",
|
"invalidButton":"This button needs to have at least an {0} or {1}!",
|
||||||
"unusedOption":"The option {0} isn't used anywhere!",
|
"unusedOption":"The option {0} isn't used anywhere!",
|
||||||
"unusedQuestion":"The question {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":{
|
"actions":{
|
||||||
@@ -132,6 +143,7 @@
|
|||||||
"blacklistAddDm":"Added To Blacklist",
|
"blacklistAddDm":"Added To Blacklist",
|
||||||
"blacklistRemoveDm":"Removed From Blacklist",
|
"blacklistRemoveDm":"Removed From Blacklist",
|
||||||
"clear":"Tickets Cleared",
|
"clear":"Tickets Cleared",
|
||||||
|
"clearTickets":"Clear Tickets",
|
||||||
"roles":"Roles Updated",
|
"roles":"Roles Updated",
|
||||||
|
|
||||||
"autoclose":"Ticket Autoclosed",
|
"autoclose":"Ticket Autoclosed",
|
||||||
@@ -139,7 +151,12 @@
|
|||||||
"autocloseDisabled":"Autoclose Disabled",
|
"autocloseDisabled":"Autoclose Disabled",
|
||||||
"autodelete":"Ticket Autodeleted",
|
"autodelete":"Ticket Autodeleted",
|
||||||
"autodeleteEnabled":"Autodelete Enabled",
|
"autodeleteEnabled":"Autodelete Enabled",
|
||||||
"autodeleteDisabled":"Autodelete Disabled"
|
"autodeleteDisabled":"Autodelete Disabled",
|
||||||
|
|
||||||
|
"topicSet":"Topic Changed",
|
||||||
|
"prioritySet":"Priority Changed",
|
||||||
|
"priorityGet":"Ticket Priority",
|
||||||
|
"transfer":"Ticket Transferred"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Your ticket has been created. Click the button below to access it!",
|
"create":"Your ticket has been created. Click the button below to access it!",
|
||||||
@@ -154,7 +171,7 @@
|
|||||||
"move":"The ticket has been moved to {0} successfully!",
|
"move":"The ticket has been moved to {0} successfully!",
|
||||||
"add":"{0} has been added to the ticket successfully!",
|
"add":"{0} has been added to the ticket successfully!",
|
||||||
"remove":"{0} has been removed from the ticket successfully!",
|
"remove":"{0} has been removed from the ticket successfully!",
|
||||||
|
|
||||||
"helpExplanation":"`<name>` => required parameter\n`[name]` => optional parameter",
|
"helpExplanation":"`<name>` => required parameter\n`[name]` => optional parameter",
|
||||||
"statsReset":"The bot stats have been reset successfully!",
|
"statsReset":"The bot stats have been reset successfully!",
|
||||||
"statsError":"Unable to view ticket stats!\n{0} is not a ticket!",
|
"statsError":"Unable to view ticket stats!\n{0} is not a ticket!",
|
||||||
@@ -167,7 +184,7 @@
|
|||||||
"clearVerify":"Are you sure you want to delete multiple tickets?\nThis action can't be undone!",
|
"clearVerify":"Are you sure you want to delete multiple tickets?\nThis action can't be undone!",
|
||||||
"clearReady":"{0} tickets have been deleted successfully!",
|
"clearReady":"{0} tickets have been deleted successfully!",
|
||||||
"rolesEmpty":"No roles have been updated!",
|
"rolesEmpty":"No roles have been updated!",
|
||||||
|
|
||||||
"autocloseLeave":"This ticket has been autoclosed because the creator left the server!",
|
"autocloseLeave":"This ticket has been autoclosed because the creator left the server!",
|
||||||
"autocloseTimeout":"This ticket has been autoclosed because it has been inactive for more than `{0}h`!",
|
"autocloseTimeout":"This ticket has been autoclosed because it has been inactive for more than `{0}h`!",
|
||||||
"autodeleteLeave":"This ticket has been autodeleted because the creator left the server!",
|
"autodeleteLeave":"This ticket has been autodeleted because the creator left the server!",
|
||||||
@@ -176,11 +193,16 @@
|
|||||||
"autocloseDisabled":"Autoclose has been disabled in this ticket!\nIt won't be closed automatically anymore!",
|
"autocloseDisabled":"Autoclose has been disabled in this ticket!\nIt won't be closed automatically anymore!",
|
||||||
"autodeleteEnabled":"Autodelete has been enabled in this ticket!\nIt will be deleted when it is inactive for more than `{0} days`!",
|
"autodeleteEnabled":"Autodelete has been enabled in this ticket!\nIt will be deleted when it is inactive for more than `{0} days`!",
|
||||||
"autodeleteDisabled":"Autodelete has been disabled in this ticket!\nIt won't be deleted automatically anymore!",
|
"autodeleteDisabled":"Autodelete has been disabled in this ticket!\nIt won't be deleted automatically anymore!",
|
||||||
|
|
||||||
"ticketMessageLimit":"You can only create {0} ticket(s) at the same time!",
|
"ticketMessageLimit":"You can only create {0} ticket(s) at the same time!",
|
||||||
"ticketMessageAutoclose":"This ticket will be autoclosed when inactive for {0}h!",
|
"ticketMessageAutoclose":"This ticket will be autoclosed when inactive for {0}h!",
|
||||||
"ticketMessageAutodelete":"This ticket will be autodeleted when inactive for {0} days!",
|
"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":{
|
"modal":{
|
||||||
"closePlaceholder":"Why did you close this ticket?",
|
"closePlaceholder":"Why did you close this ticket?",
|
||||||
@@ -215,12 +237,19 @@
|
|||||||
"addDm":"{0} has been added to your ticket in our server!",
|
"addDm":"{0} has been added to your ticket in our server!",
|
||||||
"removeLog":"{0} has been removed from this ticket by {1}!",
|
"removeLog":"{0} has been removed from this ticket by {1}!",
|
||||||
"removeDm":"{0} has been removed from your ticket in our server!",
|
"removeDm":"{0} has been removed from your ticket in our server!",
|
||||||
|
|
||||||
"blacklistAddLog":"{0} was blacklisted by {1}!",
|
"blacklistAddLog":"{0} was blacklisted by {1}!",
|
||||||
"blacklistRemoveLog":"{0} was removed from the blacklist by {1}!",
|
"blacklistRemoveLog":"{0} was removed from the blacklist by {1}!",
|
||||||
"blacklistAddDm":"You have been blacklisted in our server!\nFrom now on, you are unable to create a ticket!",
|
"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!",
|
"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":{
|
"transcripts":{
|
||||||
@@ -229,7 +258,7 @@
|
|||||||
"ready":"Transcript Created",
|
"ready":"Transcript Created",
|
||||||
"textFileDescription":"This is the text transcript of a deleted ticket!",
|
"textFileDescription":"This is the text transcript of a deleted ticket!",
|
||||||
"htmlProgress":"Please wait while this html transcript is getting processed...",
|
"htmlProgress":"Please wait while this html transcript is getting processed...",
|
||||||
|
|
||||||
"createdChannel":"A new {0} transcript has been created in the server!",
|
"createdChannel":"A new {0} transcript has been created in the server!",
|
||||||
"createdCreator":"A new {0} transcript has been created for one of your tickets!",
|
"createdCreator":"A new {0} transcript has been created for one of your tickets!",
|
||||||
"createdParticipant":"A new {0} transcript has been created in one of the tickets you participated in!",
|
"createdParticipant":"A new {0} transcript has been created in one of the tickets you participated in!",
|
||||||
@@ -241,7 +270,19 @@
|
|||||||
"retry":"Retry",
|
"retry":"Retry",
|
||||||
"continue":"Delete Without Transcript",
|
"continue":"Delete Without Transcript",
|
||||||
"backup":"Create Backup 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":{
|
"errors":{
|
||||||
@@ -257,7 +298,8 @@
|
|||||||
"unknownPanel":"Unknown Panel",
|
"unknownPanel":"Unknown Panel",
|
||||||
"notInGuild":"Not In Server",
|
"notInGuild":"Not In Server",
|
||||||
"channelRename":"Unable To Rename Channel",
|
"channelRename":"Unable To Rename Channel",
|
||||||
"busy":"Ticket Is Busy"
|
"busy":"Ticket Is Busy",
|
||||||
|
"permissionError":"Permission Error"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Contact the owner of this bot for more info!",
|
"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!",
|
"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.",
|
"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}",
|
"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":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Value doesn't match pattern!",
|
"stringRegex":"Value doesn't match pattern!",
|
||||||
@@ -331,7 +376,6 @@
|
|||||||
"added":"Added",
|
"added":"Added",
|
||||||
"removed":"Removed",
|
"removed":"Removed",
|
||||||
"filter":"Filter",
|
"filter":"Filter",
|
||||||
"claimedBy":"Claimed By {0}",
|
|
||||||
"method":"Method",
|
"method":"Method",
|
||||||
"type":"Type",
|
"type":"Type",
|
||||||
"blacklisted":"Blacklisted",
|
"blacklisted":"Blacklisted",
|
||||||
@@ -355,7 +399,27 @@
|
|||||||
"status":"Status",
|
"status":"Status",
|
||||||
"claimed":"Claimed",
|
"claimed":"Claimed",
|
||||||
"pinned":"Pinned",
|
"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":{
|
"lowercase":{
|
||||||
"text":"text",
|
"text":"text",
|
||||||
@@ -384,6 +448,7 @@
|
|||||||
"unclaim":"Unclaim a ticket.",
|
"unclaim":"Unclaim a ticket.",
|
||||||
"pin":"Pin a ticket.",
|
"pin":"Pin a ticket.",
|
||||||
"unpin":"Unpin a ticket.",
|
"unpin":"Unpin a ticket.",
|
||||||
|
|
||||||
"move":"Move a ticket.",
|
"move":"Move a ticket.",
|
||||||
"moveId":"The identifier of the option that you want to move to.",
|
"moveId":"The identifier of the option that you want to move to.",
|
||||||
"rename":"Rename a ticket.",
|
"rename":"Rename a ticket.",
|
||||||
@@ -392,6 +457,7 @@
|
|||||||
"addUser":"The user to add.",
|
"addUser":"The user to add.",
|
||||||
"remove":"Remove a user from a ticket.",
|
"remove":"Remove a user from a ticket.",
|
||||||
"removeUser":"The user to remove.",
|
"removeUser":"The user to remove.",
|
||||||
|
|
||||||
"blacklist":"Manage the ticket blacklist.",
|
"blacklist":"Manage the ticket blacklist.",
|
||||||
"blacklistView":"View a list of the current blacklist.",
|
"blacklistView":"View a list of the current blacklist.",
|
||||||
"blacklistAdd":"Add a user to the blacklist.",
|
"blacklistAdd":"Add a user to the blacklist.",
|
||||||
@@ -405,6 +471,7 @@
|
|||||||
"statsUserUser":"The user to view.",
|
"statsUserUser":"The user to view.",
|
||||||
"statsTicket":"View the stats of a ticket in the server.",
|
"statsTicket":"View the stats of a ticket in the server.",
|
||||||
"statsTicketTicket":"The ticket to view.",
|
"statsTicketTicket":"The ticket to view.",
|
||||||
|
|
||||||
"clear":"Delete multiple tickets at the same time.",
|
"clear":"Delete multiple tickets at the same time.",
|
||||||
"clearFilter":"The filter for clearing tickets.",
|
"clearFilter":"The filter for clearing tickets.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +484,7 @@
|
|||||||
"unpin":"Unpinned",
|
"unpin":"Unpinned",
|
||||||
"autoclose":"Autoclosed"
|
"autoclose":"Autoclosed"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Manage autoclose in a ticket.",
|
"autoclose":"Manage autoclose in a ticket.",
|
||||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
"autocloseDisable":"Disable autoclose in this ticket.",
|
||||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
"autocloseEnable":"Enable autoclose in this ticket.",
|
||||||
@@ -424,7 +492,19 @@
|
|||||||
"autodelete":"Manage autodelete in a ticket.",
|
"autodelete":"Manage autodelete in a ticket.",
|
||||||
"autodeleteDisable":"Disable autodelete in this ticket.",
|
"autodeleteDisable":"Disable autodelete in this ticket.",
|
||||||
"autodeleteEnable":"Enable 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":{
|
"helpMenu":{
|
||||||
"help":"Get a list of all the available commands.",
|
"help":"Get a list of all the available commands.",
|
||||||
@@ -452,7 +532,16 @@
|
|||||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
"autocloseDisable":"Disable autoclose in this ticket.",
|
||||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
"autocloseEnable":"Enable autoclose in this ticket.",
|
||||||
"autodeleteDisable":"Disable autodelete 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":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +549,8 @@
|
|||||||
"system":"System Stats",
|
"system":"System Stats",
|
||||||
"user":"User Stats",
|
"user":"User Stats",
|
||||||
"ticket":"Ticket Stats",
|
"ticket":"Ticket Stats",
|
||||||
"participants":"Participants"
|
"participants":"Participants",
|
||||||
|
"messages":"Messages"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Tickets Created",
|
"ticketsCreated":"Tickets Created",
|
||||||
@@ -472,7 +562,47 @@
|
|||||||
"ticketsPinned":"Tickets Pinned",
|
"ticketsPinned":"Tickets Pinned",
|
||||||
"ticketsMoved":"Tickets Moved",
|
"ticketsMoved":"Tickets Moved",
|
||||||
"usersBlacklisted":"Users Blacklisted",
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+158
-28
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["iamnotmega","ChatGPT"],
|
"translators":["iamnotmega","ChatGPT"],
|
||||||
"lastedited":"21/10/2024",
|
"lastedited":"16/11/2025",
|
||||||
"language":"Estonian",
|
"language":"Estonian",
|
||||||
"automated":true
|
"automated":true
|
||||||
},
|
},
|
||||||
@@ -31,7 +31,15 @@
|
|||||||
"stringContains":"See string peab sisaldama {0}!",
|
"stringContains":"See string peab sisaldama {0}!",
|
||||||
"stringChoices":"See string võib olla ainult üks järgmistest väärtustest: {0}!",
|
"stringChoices":"See string võib olla ainult üks järgmistest väärtustest: {0}!",
|
||||||
"stringRegex":"See string on kehtetu!",
|
"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!",
|
"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!",
|
"numberTooLong":"See number ei tohi olla pikem kui {0} tähemärki!",
|
||||||
"numberLengthInvalid":"See number peab olema {0} tähemärki pikk!",
|
"numberLengthInvalid":"See number peab olema {0} tähemärki pikk!",
|
||||||
@@ -48,10 +56,12 @@
|
|||||||
"numberNegative":"See arv ei saa olla negatiivne!",
|
"numberNegative":"See arv ei saa olla negatiivne!",
|
||||||
"numberPositive":"See arv ei saa olla positiivne!",
|
"numberPositive":"See arv ei saa olla positiivne!",
|
||||||
"numberZero":"See arv ei saa olla null!",
|
"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!",
|
"booleanTrue":"See tõeväärtus ei saa olla tõsi!",
|
||||||
"booleanFalse":"See tõeväärtus ei saa olla vale!",
|
"booleanFalse":"See tõeväärtus ei saa olla vale!",
|
||||||
|
|
||||||
"arrayEmptyDisabled":"See massiiv ei tohi olla tühi!",
|
"arrayEmptyDisabled":"See massiiv ei tohi olla tühi!",
|
||||||
"arrayEmptyRequired":"See massiiv peab olema tühi!",
|
"arrayEmptyRequired":"See massiiv peab olema tühi!",
|
||||||
"arrayTooShort":"Selle massiivi pikkus peab olema vähemalt {0}!",
|
"arrayTooShort":"Selle massiivi pikkus peab olema vähemalt {0}!",
|
||||||
@@ -59,7 +69,7 @@
|
|||||||
"arrayLengthInvalid":"Selle massiivi pikkus peab olema {0}!",
|
"arrayLengthInvalid":"Selle massiivi pikkus peab olema {0}!",
|
||||||
"arrayInvalidTypes":"See massiiv võib sisaldada ainult järgmisi tüüpe: {0}!",
|
"arrayInvalidTypes":"See massiiv võib sisaldada ainult järgmisi tüüpe: {0}!",
|
||||||
"arrayDouble":"See massiiv ei luba sama väärtust kaks korda kasutada!",
|
"arrayDouble":"See massiiv ei luba sama väärtust kaks korda kasutada!",
|
||||||
|
|
||||||
"discordInvalidId":"See on kehtetu Discordi {0} ID!",
|
"discordInvalidId":"See on kehtetu Discordi {0} ID!",
|
||||||
"discordInvalidIdOptions":"See on kehtetu Discordi {0} ID! Võite kasutada ka ühte järgmistest: {1}!",
|
"discordInvalidIdOptions":"See on kehtetu Discordi {0} ID! Võite kasutada ka ühte järgmistest: {1}!",
|
||||||
"discordInvalidToken":"See on kehtetu Discordi tooken (süntaktiliselt)!",
|
"discordInvalidToken":"See on kehtetu Discordi tooken (süntaktiliselt)!",
|
||||||
@@ -76,7 +86,7 @@
|
|||||||
"urlInvalidPath":"Sellel URL-il on vale tee!",
|
"urlInvalidPath":"Sellel URL-il on vale tee!",
|
||||||
"idNotUnique":"See ID ei ole kordumatu, kasutage selle asemel teist ID-d!",
|
"idNotUnique":"See ID ei ole kordumatu, kasutage selle asemel teist ID-d!",
|
||||||
"idNonExistent":"ID-d {0} pole olemas!",
|
"idNonExistent":"ID-d {0} pole olemas!",
|
||||||
|
|
||||||
"invalidType":"Selle atribuudi tüüp peab olema: {0}!",
|
"invalidType":"Selle atribuudi tüüp peab olema: {0}!",
|
||||||
"propertyMissing":"Sellel objektil puudub atribuut {0}!",
|
"propertyMissing":"Sellel objektil puudub atribuut {0}!",
|
||||||
"propertyOptional":"Atribuut {0} on selles objektis valikuline!",
|
"propertyOptional":"Atribuut {0} on selles objektis valikuline!",
|
||||||
@@ -84,12 +94,13 @@
|
|||||||
"nullInvalid":"See vara ei saa olla tühi!",
|
"nullInvalid":"See vara ei saa olla tühi!",
|
||||||
"switchInvalidType":"See peab olema üks järgmistest tüüpidest: {0}!",
|
"switchInvalidType":"See peab olema üks järgmistest tüüpidest: {0}!",
|
||||||
"objectSwitchInvalid":"See objekt peab olema ühte järgmistest tüüpidest: {0}!",
|
"objectSwitchInvalid":"See objekt peab olema ühte järgmistest tüüpidest: {0}!",
|
||||||
|
|
||||||
"invalidLanguage":"See on sobimatu keel!",
|
"invalidLanguage":"See on sobimatu keel!",
|
||||||
"invalidButton":"Sellel nupul peab olema vähemalt {0} või {1}!",
|
"invalidButton":"Sellel nupul peab olema vähemalt {0} või {1}!",
|
||||||
"unusedOption":"Valik {0} ei ole kusagil kasutusel!",
|
"unusedOption":"Valik {0} ei ole kusagil kasutusel!",
|
||||||
"unusedQuestion":"Küsimust {0} ei kasutata kuskil!",
|
"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":{
|
"actions":{
|
||||||
@@ -122,7 +133,7 @@
|
|||||||
"move":"Pilet teisaldatud",
|
"move":"Pilet teisaldatud",
|
||||||
"add":"Pileti kasutaja lisatud",
|
"add":"Pileti kasutaja lisatud",
|
||||||
"remove":"Pileti kasutaja eemaldatud",
|
"remove":"Pileti kasutaja eemaldatud",
|
||||||
|
|
||||||
"help":"Saadaolevad käsud",
|
"help":"Saadaolevad käsud",
|
||||||
"statsReset":"Lähtestage statistika",
|
"statsReset":"Lähtestage statistika",
|
||||||
"blacklistAdd":"Kasutaja on mustas nimekirjas",
|
"blacklistAdd":"Kasutaja on mustas nimekirjas",
|
||||||
@@ -132,14 +143,20 @@
|
|||||||
"blacklistAddDm":"Lisatud musta nimekirja",
|
"blacklistAddDm":"Lisatud musta nimekirja",
|
||||||
"blacklistRemoveDm":"Eemaldatud mustast nimekirjast",
|
"blacklistRemoveDm":"Eemaldatud mustast nimekirjast",
|
||||||
"clear":"Piletid kustutatud",
|
"clear":"Piletid kustutatud",
|
||||||
|
"clearTickets":"Kustuta Piletid",
|
||||||
"roles":"Rollid uuendatud",
|
"roles":"Rollid uuendatud",
|
||||||
|
|
||||||
"autoclose":"Pilet automaatselt suletud",
|
"autoclose":"Pilet automaatselt suletud",
|
||||||
"autocloseEnabled":"Automaatne sulgemine lubatud",
|
"autocloseEnabled":"Automaatne sulgemine lubatud",
|
||||||
"autocloseDisabled":"Automaatne sulgemine keelatud",
|
"autocloseDisabled":"Automaatne sulgemine keelatud",
|
||||||
"autodelete":"Pilet on automaatselt kustutatud",
|
"autodelete":"Pilet on automaatselt kustutatud",
|
||||||
"autodeleteEnabled":"Automaatne kustutamine lubatud",
|
"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":{
|
"descriptions":{
|
||||||
"create":"Teie pilet on loodud. Sellele juurdepääsuks klõpsake alloleval nupul!",
|
"create":"Teie pilet on loodud. Sellele juurdepääsuks klõpsake alloleval nupul!",
|
||||||
@@ -154,7 +171,7 @@
|
|||||||
"move":"Pilet teisaldati asukohta {0} edukalt!",
|
"move":"Pilet teisaldati asukohta {0} edukalt!",
|
||||||
"add":"{0} lisati piletile edukalt!",
|
"add":"{0} lisati piletile edukalt!",
|
||||||
"remove":"{0} eemaldati piletist edukalt!",
|
"remove":"{0} eemaldati piletist edukalt!",
|
||||||
|
|
||||||
"helpExplanation":"`<nimi>` => nõutav parameeter\n`[nimi]` => valikuline parameeter",
|
"helpExplanation":"`<nimi>` => nõutav parameeter\n`[nimi]` => valikuline parameeter",
|
||||||
"statsReset":"Boti statistika on edukalt lähtestatud!",
|
"statsReset":"Boti statistika on edukalt lähtestatud!",
|
||||||
"statsError":"Piletistatistikat ei saa vaadata!\n{0} ei ole pilet!",
|
"statsError":"Piletistatistikat ei saa vaadata!\n{0} ei ole pilet!",
|
||||||
@@ -167,7 +184,7 @@
|
|||||||
"clearVerify":"Kas soovite kindlasti mitu piletit kustutada?\nSeda toimingut ei saa tagasi võtta!",
|
"clearVerify":"Kas soovite kindlasti mitu piletit kustutada?\nSeda toimingut ei saa tagasi võtta!",
|
||||||
"clearReady":"{0} piletit on edukalt kustutatud!",
|
"clearReady":"{0} piletit on edukalt kustutatud!",
|
||||||
"rolesEmpty":"Ühtegi rolli pole värskendatud!",
|
"rolesEmpty":"Ühtegi rolli pole värskendatud!",
|
||||||
|
|
||||||
"autocloseLeave":"See pilet on automaatselt suletud, kuna looja lahkus serverist!",
|
"autocloseLeave":"See pilet on automaatselt suletud, kuna looja lahkus serverist!",
|
||||||
"autocloseTimeout":"See pilet on automaatselt suletud, kuna see on olnud passiivne rohkem kui `{0}h`!",
|
"autocloseTimeout":"See pilet on automaatselt suletud, kuna see on olnud passiivne rohkem kui `{0}h`!",
|
||||||
"autodeleteLeave":"See pilet on automaatselt kustutatud, kuna looja lahkus serverist!",
|
"autodeleteLeave":"See pilet on automaatselt kustutatud, kuna looja lahkus serverist!",
|
||||||
@@ -176,11 +193,16 @@
|
|||||||
"autocloseDisabled":"Automaatne sulgemine on sellel piletil keelatud!\nSeda ei suleta enam automaatselt!",
|
"autocloseDisabled":"Automaatne sulgemine on sellel piletil keelatud!\nSeda ei suleta enam automaatselt!",
|
||||||
"autodeleteEnabled":"Sellel piletil on automaatne kustutamine lubatud!\nSee kustutatakse, kui see on passiivne rohkem kui `{0} päeva`!",
|
"autodeleteEnabled":"Sellel piletil on automaatne kustutamine lubatud!\nSee kustutatakse, kui see on passiivne rohkem kui `{0} päeva`!",
|
||||||
"autodeleteDisabled":"Automaatne kustutamine on sellel piletil keelatud!\nSeda ei kustutata enam automaatselt!",
|
"autodeleteDisabled":"Automaatne kustutamine on sellel piletil keelatud!\nSeda ei kustutata enam automaatselt!",
|
||||||
|
|
||||||
"ticketMessageLimit":"Saate korraga luua ainult {0} piletit!",
|
"ticketMessageLimit":"Saate korraga luua ainult {0} piletit!",
|
||||||
"ticketMessageAutoclose":"See pilet suletakse automaatselt, kui see on {0} tundi passiivne!",
|
"ticketMessageAutoclose":"See pilet suletakse automaatselt, kui see on {0} tundi passiivne!",
|
||||||
"ticketMessageAutodelete":"See pilet kustutatakse automaatselt, kui see on {0} päeva 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":{
|
"modal":{
|
||||||
"closePlaceholder":"Miks sa selle pileti kinni panid?",
|
"closePlaceholder":"Miks sa selle pileti kinni panid?",
|
||||||
@@ -215,12 +237,19 @@
|
|||||||
"addDm":"{0} lisati teie piletile meie serveris!",
|
"addDm":"{0} lisati teie piletile meie serveris!",
|
||||||
"removeLog":"Kasutaja {1} eemaldas sellelt piletilt {0}!",
|
"removeLog":"Kasutaja {1} eemaldas sellelt piletilt {0}!",
|
||||||
"removeDm":"{0} on teie piletist meie serveris eemaldatud!",
|
"removeDm":"{0} on teie piletist meie serveris eemaldatud!",
|
||||||
|
|
||||||
"blacklistAddLog":"{1} lisas kasutaja {0} musta nimekirja!",
|
"blacklistAddLog":"{1} lisas kasutaja {0} musta nimekirja!",
|
||||||
"blacklistRemoveLog":"Kasutaja {1} eemaldas kasutaja {0} mustast nimekirjast!",
|
"blacklistRemoveLog":"Kasutaja {1} eemaldas kasutaja {0} mustast nimekirjast!",
|
||||||
"blacklistAddDm":"Olete meie serveris mustas nimekirjas!\nNüüdsest ei saa te piletit luua!",
|
"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!",
|
"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":{
|
"transcripts":{
|
||||||
@@ -229,7 +258,7 @@
|
|||||||
"ready":"Transkriptsioon loodud",
|
"ready":"Transkriptsioon loodud",
|
||||||
"textFileDescription":"See on kustutatud pileti teksti ärakiri!",
|
"textFileDescription":"See on kustutatud pileti teksti ärakiri!",
|
||||||
"htmlProgress":"Palun oodake, kuni seda html-i ärakirja töödeldakse...",
|
"htmlProgress":"Palun oodake, kuni seda html-i ärakirja töödeldakse...",
|
||||||
|
|
||||||
"createdChannel":"Serveris on loodud uus {0} ärakiri!",
|
"createdChannel":"Serveris on loodud uus {0} ärakiri!",
|
||||||
"createdCreator":"Ühe teie pileti jaoks on loodud uus {0} ärakiri!",
|
"createdCreator":"Ühe teie pileti jaoks on loodud uus {0} ärakiri!",
|
||||||
"createdParticipant":"Ühes teie osalenud piletis on loodud uus {0} ärakiri!",
|
"createdParticipant":"Ühes teie osalenud piletis on loodud uus {0} ärakiri!",
|
||||||
@@ -241,7 +270,19 @@
|
|||||||
"retry":"Proovi uuesti",
|
"retry":"Proovi uuesti",
|
||||||
"continue":"Kustuta ilma ärakirjata",
|
"continue":"Kustuta ilma ärakirjata",
|
||||||
"backup":"Loo varukoopia ärakirjast",
|
"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":{
|
"errors":{
|
||||||
@@ -257,7 +298,8 @@
|
|||||||
"unknownPanel":"Tundmatu paneel",
|
"unknownPanel":"Tundmatu paneel",
|
||||||
"notInGuild":"Pole serveris",
|
"notInGuild":"Pole serveris",
|
||||||
"channelRename":"Kanalit ei saa ümber nimetada",
|
"channelRename":"Kanalit ei saa ümber nimetada",
|
||||||
"busy":"Pilet on kinni"
|
"busy":"Pilet on kinni",
|
||||||
|
"permissionError":"Õiguste Viga"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Lisateabe saamiseks võtke ühendust selle roboti omanikuga!",
|
"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!",
|
"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.",
|
"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}",
|
"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":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Väärtus ei vasta mustrile!",
|
"stringRegex":"Väärtus ei vasta mustrile!",
|
||||||
@@ -331,7 +376,6 @@
|
|||||||
"added":"Lisatud",
|
"added":"Lisatud",
|
||||||
"removed":"Eemaldatud",
|
"removed":"Eemaldatud",
|
||||||
"filter":"Filter",
|
"filter":"Filter",
|
||||||
"claimedBy":"Nõude esitas {0}",
|
|
||||||
"method":"Meetod",
|
"method":"Meetod",
|
||||||
"type":"Tüüp",
|
"type":"Tüüp",
|
||||||
"blacklisted":"Mustas nimekirjas",
|
"blacklisted":"Mustas nimekirjas",
|
||||||
@@ -355,7 +399,27 @@
|
|||||||
"status":"Olek",
|
"status":"Olek",
|
||||||
"claimed":"Nõutud",
|
"claimed":"Nõutud",
|
||||||
"pinned":"Kinnitatud",
|
"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":{
|
"lowercase":{
|
||||||
"text":"tekst",
|
"text":"tekst",
|
||||||
@@ -384,6 +448,7 @@
|
|||||||
"unclaim":"Tühista pilet.",
|
"unclaim":"Tühista pilet.",
|
||||||
"pin":"Kinnitage pilet.",
|
"pin":"Kinnitage pilet.",
|
||||||
"unpin":"Vabastage pilet.",
|
"unpin":"Vabastage pilet.",
|
||||||
|
|
||||||
"move":"Liigutage pilet.",
|
"move":"Liigutage pilet.",
|
||||||
"moveId":"Selle valiku identifikaator, millele soovite liikuda.",
|
"moveId":"Selle valiku identifikaator, millele soovite liikuda.",
|
||||||
"rename":"Nimetage pilet ümber.",
|
"rename":"Nimetage pilet ümber.",
|
||||||
@@ -392,6 +457,7 @@
|
|||||||
"addUser":"Lisatav kasutaja.",
|
"addUser":"Lisatav kasutaja.",
|
||||||
"remove":"Kasutaja eemaldamine piletist.",
|
"remove":"Kasutaja eemaldamine piletist.",
|
||||||
"removeUser":"Eemaldatav kasutaja.",
|
"removeUser":"Eemaldatav kasutaja.",
|
||||||
|
|
||||||
"blacklist":"Hallake piletite musta nimekirja.",
|
"blacklist":"Hallake piletite musta nimekirja.",
|
||||||
"blacklistView":"Vaadake praeguse musta nimekirja loendit.",
|
"blacklistView":"Vaadake praeguse musta nimekirja loendit.",
|
||||||
"blacklistAdd":"Lisage kasutaja musta nimekirja.",
|
"blacklistAdd":"Lisage kasutaja musta nimekirja.",
|
||||||
@@ -405,6 +471,7 @@
|
|||||||
"statsUserUser":"Kasutaja vaatamiseks.",
|
"statsUserUser":"Kasutaja vaatamiseks.",
|
||||||
"statsTicket":"Vaadake serveris pileti statistikat.",
|
"statsTicket":"Vaadake serveris pileti statistikat.",
|
||||||
"statsTicketTicket":"Pilet vaatamiseks.",
|
"statsTicketTicket":"Pilet vaatamiseks.",
|
||||||
|
|
||||||
"clear":"Kustutage mitu piletit korraga.",
|
"clear":"Kustutage mitu piletit korraga.",
|
||||||
"clearFilter":"Piletite puhastamise filter.",
|
"clearFilter":"Piletite puhastamise filter.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +484,7 @@
|
|||||||
"unpin":"Vabastatud",
|
"unpin":"Vabastatud",
|
||||||
"autoclose":"Automaatselt suletud"
|
"autoclose":"Automaatselt suletud"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Hallake piletis automaatset sulgemist.",
|
"autoclose":"Hallake piletis automaatset sulgemist.",
|
||||||
"autocloseDisable":"Keela sellel piletil automaatne sulgemine.",
|
"autocloseDisable":"Keela sellel piletil automaatne sulgemine.",
|
||||||
"autocloseEnable":"Luba sellel piletil automaatne sulgemine.",
|
"autocloseEnable":"Luba sellel piletil automaatne sulgemine.",
|
||||||
@@ -424,7 +492,19 @@
|
|||||||
"autodelete":"Automaatse kustutamise haldamine piletis.",
|
"autodelete":"Automaatse kustutamise haldamine piletis.",
|
||||||
"autodeleteDisable":"Keela sellel piletil automaatne kustutamine.",
|
"autodeleteDisable":"Keela sellel piletil automaatne kustutamine.",
|
||||||
"autodeleteEnable":"Luba 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":{
|
"helpMenu":{
|
||||||
"help":"Hankige kõigi saadaolevate käskude loend.",
|
"help":"Hankige kõigi saadaolevate käskude loend.",
|
||||||
@@ -452,7 +532,16 @@
|
|||||||
"autocloseDisable":"Keela sellel piletil automaatne sulgemine.",
|
"autocloseDisable":"Keela sellel piletil automaatne sulgemine.",
|
||||||
"autocloseEnable":"Luba sellel piletil automaatne sulgemine.",
|
"autocloseEnable":"Luba sellel piletil automaatne sulgemine.",
|
||||||
"autodeleteDisable":"Keela sellel piletil automaatne kustutamine.",
|
"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":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +549,8 @@
|
|||||||
"system":"Süsteemi statistika",
|
"system":"Süsteemi statistika",
|
||||||
"user":"Kasutaja statistika",
|
"user":"Kasutaja statistika",
|
||||||
"ticket":"Piletistatistika",
|
"ticket":"Piletistatistika",
|
||||||
"participants":"Osalejad"
|
"participants":"Osalejad",
|
||||||
|
"messages":"Sõnumid"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Pileteid loodud",
|
"ticketsCreated":"Pileteid loodud",
|
||||||
@@ -472,7 +562,47 @@
|
|||||||
"ticketsPinned":"Pileteid kinnitatud",
|
"ticketsPinned":"Pileteid kinnitatud",
|
||||||
"ticketsMoved":"Pileteid teisaldatud",
|
"ticketsMoved":"Pileteid teisaldatud",
|
||||||
"usersBlacklisted":"Kasutajaid mustas nimekirjas",
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+159
-29
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["iamnotmega","ChatGPT"],
|
"translators":["iamnotmega","ChatGPT"],
|
||||||
"lastedited":"21/10/2024",
|
"lastedited":"16/11/2025",
|
||||||
"language":"Finnish",
|
"language":"Finnish",
|
||||||
"automated":true
|
"automated":true
|
||||||
},
|
},
|
||||||
@@ -31,7 +31,15 @@
|
|||||||
"stringContains":"Tämän merkkijonon täytyy sisältää {0}!",
|
"stringContains":"Tämän merkkijonon täytyy sisältää {0}!",
|
||||||
"stringChoices":"Tämä merkkijono voi olla vain yksi seuraavista arvoista: {0}!",
|
"stringChoices":"Tämä merkkijono voi olla vain yksi seuraavista arvoista: {0}!",
|
||||||
"stringRegex":"Tämä merkkijono on virheellinen!",
|
"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ä!",
|
"numberTooShort":"Tämä numero ei voi olla lyhyempi kuin {0} merkkiä!",
|
||||||
"numberTooLong":"Tämä numero ei voi olla pidempi kuin {0} merkkiä!",
|
"numberTooLong":"Tämä numero ei voi olla pidempi kuin {0} merkkiä!",
|
||||||
"numberLengthInvalid":"Tämän numeron on oltava {0} merkkiä pitkä!",
|
"numberLengthInvalid":"Tämän numeron on oltava {0} merkkiä pitkä!",
|
||||||
@@ -48,10 +56,12 @@
|
|||||||
"numberNegative":"Tämä luku ei voi olla negatiivinen!",
|
"numberNegative":"Tämä luku ei voi olla negatiivinen!",
|
||||||
"numberPositive":"Tämä luku ei voi olla positiivinen!",
|
"numberPositive":"Tämä luku ei voi olla positiivinen!",
|
||||||
"numberZero":"Tämä luku ei voi olla nolla!",
|
"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!",
|
"booleanTrue":"Tämä boolean ei voi olla totta!",
|
||||||
"booleanFalse":"Tämä boolean ei voi olla väärä!",
|
"booleanFalse":"Tämä boolean ei voi olla väärä!",
|
||||||
|
|
||||||
"arrayEmptyDisabled":"Tämä taulukko ei saa olla tyhjä!",
|
"arrayEmptyDisabled":"Tämä taulukko ei saa olla tyhjä!",
|
||||||
"arrayEmptyRequired":"Tämän taulukon on oltava tyhjä!",
|
"arrayEmptyRequired":"Tämän taulukon on oltava tyhjä!",
|
||||||
"arrayTooShort":"Tämän taulukon pituuden on oltava vähintään {0}!",
|
"arrayTooShort":"Tämän taulukon pituuden on oltava vähintään {0}!",
|
||||||
@@ -59,7 +69,7 @@
|
|||||||
"arrayLengthInvalid":"Tämän taulukon pituuden on oltava {0}!",
|
"arrayLengthInvalid":"Tämän taulukon pituuden on oltava {0}!",
|
||||||
"arrayInvalidTypes":"Tämä matriisi voi sisältää vain seuraavat tyypit: {0}!",
|
"arrayInvalidTypes":"Tämä matriisi voi sisältää vain seuraavat tyypit: {0}!",
|
||||||
"arrayDouble":"Tämä matriisi ei salli samaa arvoa kahdesti!",
|
"arrayDouble":"Tämä matriisi ei salli samaa arvoa kahdesti!",
|
||||||
|
|
||||||
"discordInvalidId":"Tämä on virheellinen discord {0} -tunnus!",
|
"discordInvalidId":"Tämä on virheellinen discord {0} -tunnus!",
|
||||||
"discordInvalidIdOptions":"Tämä on virheellinen discord {0} -tunnus! Voit myös käyttää jotakin seuraavista: {1}!",
|
"discordInvalidIdOptions":"Tämä on virheellinen discord {0} -tunnus! Voit myös käyttää jotakin seuraavista: {1}!",
|
||||||
"discordInvalidToken":"Tämä on virheellinen discord tunnus (syntaktisesti)!",
|
"discordInvalidToken":"Tämä on virheellinen discord tunnus (syntaktisesti)!",
|
||||||
@@ -76,7 +86,7 @@
|
|||||||
"urlInvalidPath":"Tällä URL-osoitteella on virheellinen polku!",
|
"urlInvalidPath":"Tällä URL-osoitteella on virheellinen polku!",
|
||||||
"idNotUnique":"Tämä tunnus ei ole ainutlaatuinen, käytä sen sijaan toista tunnusta!",
|
"idNotUnique":"Tämä tunnus ei ole ainutlaatuinen, käytä sen sijaan toista tunnusta!",
|
||||||
"idNonExistent":"Tunnusta {0} ei ole olemassa!",
|
"idNonExistent":"Tunnusta {0} ei ole olemassa!",
|
||||||
|
|
||||||
"invalidType":"Tämän ominaisuuden on oltava tyyppiä: {0}!",
|
"invalidType":"Tämän ominaisuuden on oltava tyyppiä: {0}!",
|
||||||
"propertyMissing":"Ominaisuus {0} puuttuu tästä objektista!",
|
"propertyMissing":"Ominaisuus {0} puuttuu tästä objektista!",
|
||||||
"propertyOptional":"Ominaisuus {0} on valinnainen tässä objektissa!",
|
"propertyOptional":"Ominaisuus {0} on valinnainen tässä objektissa!",
|
||||||
@@ -84,12 +94,13 @@
|
|||||||
"nullInvalid":"Tämä omaisuus ei voi olla tyhjä!",
|
"nullInvalid":"Tämä omaisuus ei voi olla tyhjä!",
|
||||||
"switchInvalidType":"Tämän on oltava jokin seuraavista: {0}!",
|
"switchInvalidType":"Tämän on oltava jokin seuraavista: {0}!",
|
||||||
"objectSwitchInvalid":"Tämän objektin on oltava jokin seuraavista tyypeistä: {0}!",
|
"objectSwitchInvalid":"Tämän objektin on oltava jokin seuraavista tyypeistä: {0}!",
|
||||||
|
|
||||||
"invalidLanguage":"Tämä on virheellinen kieli!",
|
"invalidLanguage":"Tämä on virheellinen kieli!",
|
||||||
"invalidButton":"Tässä painikkeessa on oltava vähintään {0} tai {1}!",
|
"invalidButton":"Tässä painikkeessa on oltava vähintään {0} tai {1}!",
|
||||||
"unusedOption":"Vaihtoehtoa {0} ei käytetä missään!",
|
"unusedOption":"Vaihtoehtoa {0} ei käytetä missään!",
|
||||||
"unusedQuestion":"Kysymystä {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":{
|
"actions":{
|
||||||
@@ -122,7 +133,7 @@
|
|||||||
"move":"Lippu siirretty",
|
"move":"Lippu siirretty",
|
||||||
"add":"Lipun käyttäjä lisätty",
|
"add":"Lipun käyttäjä lisätty",
|
||||||
"remove":"Lipun käyttäjä poistettu",
|
"remove":"Lipun käyttäjä poistettu",
|
||||||
|
|
||||||
"help":"Käytettävissä olevat komennot",
|
"help":"Käytettävissä olevat komennot",
|
||||||
"statsReset":"Nollaa tilastot",
|
"statsReset":"Nollaa tilastot",
|
||||||
"blacklistAdd":"Käyttäjä mustalla listalla",
|
"blacklistAdd":"Käyttäjä mustalla listalla",
|
||||||
@@ -132,14 +143,20 @@
|
|||||||
"blacklistAddDm":"Lisätty mustalle listalle",
|
"blacklistAddDm":"Lisätty mustalle listalle",
|
||||||
"blacklistRemoveDm":"Poistettu mustalta listalta",
|
"blacklistRemoveDm":"Poistettu mustalta listalta",
|
||||||
"clear":"Liput tyhjennetty",
|
"clear":"Liput tyhjennetty",
|
||||||
|
"clearTickets":"Tyhjennä Tiketit",
|
||||||
"roles":"Roolit päivitetty",
|
"roles":"Roolit päivitetty",
|
||||||
|
|
||||||
"autoclose":"Lippu suljettu automaattisesti",
|
"autoclose":"Lippu suljettu automaattisesti",
|
||||||
"autocloseEnabled":"Automaattinen sulkeminen käytössä",
|
"autocloseEnabled":"Automaattinen sulkeminen käytössä",
|
||||||
"autocloseDisabled":"Automaattinen sulkeminen pois käytöstä",
|
"autocloseDisabled":"Automaattinen sulkeminen pois käytöstä",
|
||||||
"autodelete":"Lippu poistettu automaattisesti",
|
"autodelete":"Lippu poistettu automaattisesti",
|
||||||
"autodeleteEnabled":"Automaattinen poisto käytössä",
|
"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":{
|
"descriptions":{
|
||||||
"create":"Lippusi on luotu. Napsauta alla olevaa painiketta päästäksesi siihen!",
|
"create":"Lippusi on luotu. Napsauta alla olevaa painiketta päästäksesi siihen!",
|
||||||
@@ -154,7 +171,7 @@
|
|||||||
"move":"Lippu on siirretty kohteeseen {0} onnistuneesti!",
|
"move":"Lippu on siirretty kohteeseen {0} onnistuneesti!",
|
||||||
"add":"{0} on lisätty lippuun onnistuneesti!",
|
"add":"{0} on lisätty lippuun onnistuneesti!",
|
||||||
"remove":"{0} on poistettu lipusta onnistuneesti!",
|
"remove":"{0} on poistettu lipusta onnistuneesti!",
|
||||||
|
|
||||||
"helpExplanation":"`<nimi>` => pakollinen parametri\n`[nimi]` => valinnainen parametri",
|
"helpExplanation":"`<nimi>` => pakollinen parametri\n`[nimi]` => valinnainen parametri",
|
||||||
"statsReset":"Bottitilastot on nollattu onnistuneesti!",
|
"statsReset":"Bottitilastot on nollattu onnistuneesti!",
|
||||||
"statsError":"Lipputilastoja ei voi tarkastella!\n{0} ei ole lippu!",
|
"statsError":"Lipputilastoja ei voi tarkastella!\n{0} ei ole lippu!",
|
||||||
@@ -167,7 +184,7 @@
|
|||||||
"clearVerify":"Haluatko varmasti poistaa useita lippuja? Tätä toimintoa ei voi kumota!",
|
"clearVerify":"Haluatko varmasti poistaa useita lippuja? Tätä toimintoa ei voi kumota!",
|
||||||
"clearReady":"{0} lippua on poistettu onnistuneesti!",
|
"clearReady":"{0} lippua on poistettu onnistuneesti!",
|
||||||
"rolesEmpty":"Rooleja ei ole päivitetty!",
|
"rolesEmpty":"Rooleja ei ole päivitetty!",
|
||||||
|
|
||||||
"autocloseLeave":"Tämä lippu on suljettu automaattisesti, koska luoja poistui palvelimelta!",
|
"autocloseLeave":"Tämä lippu on suljettu automaattisesti, koska luoja poistui palvelimelta!",
|
||||||
"autocloseTimeout":"Tämä lippu on suljettu automaattisesti, koska se on ollut passiivinen yli `{0}h`!",
|
"autocloseTimeout":"Tämä lippu on suljettu automaattisesti, koska se on ollut passiivinen yli `{0}h`!",
|
||||||
"autodeleteLeave":"Tämä lippu on poistettu automaattisesti, koska sisällöntuottaja poistui palvelimelta!",
|
"autodeleteLeave":"Tämä lippu on poistettu automaattisesti, koska sisällöntuottaja poistui palvelimelta!",
|
||||||
@@ -176,11 +193,16 @@
|
|||||||
"autocloseDisabled":"Automaattinen sulkeminen on poistettu käytöstä tässä lipussa! Se ei enää sulkeudu automaattisesti!",
|
"autocloseDisabled":"Automaattinen sulkeminen on poistettu käytöstä tässä lipussa! Se ei enää sulkeudu automaattisesti!",
|
||||||
"autodeleteEnabled":"Automaattinen poisto on otettu käyttöön tässä lipussa! Se poistetaan, kun se on passiivinen yli `{0} päivään`!",
|
"autodeleteEnabled":"Automaattinen poisto on otettu käyttöön tässä lipussa! Se poistetaan, kun se on passiivinen yli `{0} päivään`!",
|
||||||
"autodeleteDisabled":"Automaattinen poisto on poistettu käytöstä tässä lipussa! Sitä ei enää poisteta automaattisesti!",
|
"autodeleteDisabled":"Automaattinen poisto on poistettu käytöstä tässä lipussa! Sitä ei enää poisteta automaattisesti!",
|
||||||
|
|
||||||
"ticketMessageLimit":"Voit luoda vain {0} lippua samanaikaisesti!",
|
"ticketMessageLimit":"Voit luoda vain {0} lippua samanaikaisesti!",
|
||||||
"ticketMessageAutoclose":"Tämä lippu suljetaan automaattisesti, kun se ei ole aktiivinen {0} tuntia!",
|
"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!",
|
"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":{
|
"modal":{
|
||||||
"closePlaceholder":"Miksi suljit tämän lipun?",
|
"closePlaceholder":"Miksi suljit tämän lipun?",
|
||||||
@@ -215,12 +237,19 @@
|
|||||||
"addDm":"{0} on lisätty lippuusi palvelimellamme!",
|
"addDm":"{0} on lisätty lippuusi palvelimellamme!",
|
||||||
"removeLog":"{1} on poistanut {0} tästä lipusta!",
|
"removeLog":"{1} on poistanut {0} tästä lipusta!",
|
||||||
"removeDm":"{0} on poistettu lipustasi palvelimellamme!",
|
"removeDm":"{0} on poistettu lipustasi palvelimellamme!",
|
||||||
|
|
||||||
"blacklistAddLog":"{1} lisäsi käyttäjän {0} mustalle listalle!",
|
"blacklistAddLog":"{1} lisäsi käyttäjän {0} mustalle listalle!",
|
||||||
"blacklistRemoveLog":"{1} poisti käyttäjän {0} mustalta listalta!",
|
"blacklistRemoveLog":"{1} poisti käyttäjän {0} mustalta listalta!",
|
||||||
"blacklistAddDm":"Sinut on mustalla listalla palvelimellamme! Tästä eteenpäin et voi luoda lippua!",
|
"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!",
|
"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":{
|
"transcripts":{
|
||||||
@@ -229,7 +258,7 @@
|
|||||||
"ready":"Transkriptio luotu",
|
"ready":"Transkriptio luotu",
|
||||||
"textFileDescription":"Tämä on poistetun lipun tekstikopio!",
|
"textFileDescription":"Tämä on poistetun lipun tekstikopio!",
|
||||||
"htmlProgress":"Odota, kun tätä html-transkriptiota käsitellään...",
|
"htmlProgress":"Odota, kun tätä html-transkriptiota käsitellään...",
|
||||||
|
|
||||||
"createdChannel":"Uusi {0}-transkriptio on luotu palvelimelle!",
|
"createdChannel":"Uusi {0}-transkriptio on luotu palvelimelle!",
|
||||||
"createdCreator":"Yhdelle lipullesi on luotu uusi transkriptio {0}!",
|
"createdCreator":"Yhdelle lipullesi on luotu uusi transkriptio {0}!",
|
||||||
"createdParticipant":"Uusi {0}-transkriptio on luotu yhteen lipuista, joihin osallistuit!",
|
"createdParticipant":"Uusi {0}-transkriptio on luotu yhteen lipuista, joihin osallistuit!",
|
||||||
@@ -241,7 +270,19 @@
|
|||||||
"retry":"Yritä uudelleen",
|
"retry":"Yritä uudelleen",
|
||||||
"continue":"Poista ilman transkriptiota",
|
"continue":"Poista ilman transkriptiota",
|
||||||
"backup":"Luo varmuuskopio",
|
"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":{
|
"errors":{
|
||||||
@@ -257,7 +298,8 @@
|
|||||||
"unknownPanel":"Tuntematon paneeli",
|
"unknownPanel":"Tuntematon paneeli",
|
||||||
"notInGuild":"Ei Palvelimessa",
|
"notInGuild":"Ei Palvelimessa",
|
||||||
"channelRename":"Kanavaa ei voi nimetä uudelleen",
|
"channelRename":"Kanavaa ei voi nimetä uudelleen",
|
||||||
"busy":"Lippu on varattu"
|
"busy":"Lippu on varattu",
|
||||||
|
"permissionError":"Käyttöoikeusvirhe"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Ota yhteyttä tämän botin omistajaan saadaksesi lisätietoja!",
|
"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!",
|
"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.",
|
"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}",
|
"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":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Arvo ei vastaa mallia!",
|
"stringRegex":"Arvo ei vastaa mallia!",
|
||||||
@@ -331,7 +376,6 @@
|
|||||||
"added":"Lisätty",
|
"added":"Lisätty",
|
||||||
"removed":"Poistettu",
|
"removed":"Poistettu",
|
||||||
"filter":"Suodattaa",
|
"filter":"Suodattaa",
|
||||||
"claimedBy":"Vaatimuksen tekijä: {0}",
|
|
||||||
"method":"Menetelmä",
|
"method":"Menetelmä",
|
||||||
"type":"Tyyppi",
|
"type":"Tyyppi",
|
||||||
"blacklisted":"Mustalla listalla",
|
"blacklisted":"Mustalla listalla",
|
||||||
@@ -352,10 +396,30 @@
|
|||||||
"version":"Versio",
|
"version":"Versio",
|
||||||
"name":"Nimi",
|
"name":"Nimi",
|
||||||
"role":"Rooli",
|
"role":"Rooli",
|
||||||
"status":"Status",
|
"status":"Tila",
|
||||||
"claimed":"Väitetty",
|
"claimed":"Väitetty",
|
||||||
"pinned":"Kiinnitetty",
|
"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":{
|
"lowercase":{
|
||||||
"text":"teksti",
|
"text":"teksti",
|
||||||
@@ -384,6 +448,7 @@
|
|||||||
"unclaim":"Peruuta lippu.",
|
"unclaim":"Peruuta lippu.",
|
||||||
"pin":"Kiinnitä lippu.",
|
"pin":"Kiinnitä lippu.",
|
||||||
"unpin":"Irrota lippu.",
|
"unpin":"Irrota lippu.",
|
||||||
|
|
||||||
"move":"Siirrä lippu.",
|
"move":"Siirrä lippu.",
|
||||||
"moveId":"Sen vaihtoehdon tunniste, johon haluat siirtyä.",
|
"moveId":"Sen vaihtoehdon tunniste, johon haluat siirtyä.",
|
||||||
"rename":"Nimeä lippu uudelleen.",
|
"rename":"Nimeä lippu uudelleen.",
|
||||||
@@ -392,6 +457,7 @@
|
|||||||
"addUser":"Lisättävä käyttäjä.",
|
"addUser":"Lisättävä käyttäjä.",
|
||||||
"remove":"Poista käyttäjä lipusta.",
|
"remove":"Poista käyttäjä lipusta.",
|
||||||
"removeUser":"Poistettava käyttäjä.",
|
"removeUser":"Poistettava käyttäjä.",
|
||||||
|
|
||||||
"blacklist":"Hallitse lippujen mustaa listaa.",
|
"blacklist":"Hallitse lippujen mustaa listaa.",
|
||||||
"blacklistView":"Näytä luettelo nykyisestä mustasta listasta.",
|
"blacklistView":"Näytä luettelo nykyisestä mustasta listasta.",
|
||||||
"blacklistAdd":"Lisää käyttäjä mustalle listalle.",
|
"blacklistAdd":"Lisää käyttäjä mustalle listalle.",
|
||||||
@@ -405,6 +471,7 @@
|
|||||||
"statsUserUser":"Käyttäjä katsella.",
|
"statsUserUser":"Käyttäjä katsella.",
|
||||||
"statsTicket":"Tarkastele lipun tilastoja palvelimella.",
|
"statsTicket":"Tarkastele lipun tilastoja palvelimella.",
|
||||||
"statsTicketTicket":"Lippu katsottavaksi.",
|
"statsTicketTicket":"Lippu katsottavaksi.",
|
||||||
|
|
||||||
"clear":"Poista useita lippuja samanaikaisesti.",
|
"clear":"Poista useita lippuja samanaikaisesti.",
|
||||||
"clearFilter":"Lippujen tyhjennyssuodatin.",
|
"clearFilter":"Lippujen tyhjennyssuodatin.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +484,7 @@
|
|||||||
"unpin":"Irrotettu",
|
"unpin":"Irrotettu",
|
||||||
"autoclose":"Automaattisuljettu"
|
"autoclose":"Automaattisuljettu"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Hallitse automaattista sulkemista lipussa.",
|
"autoclose":"Hallitse automaattista sulkemista lipussa.",
|
||||||
"autocloseDisable":"Poista automaattinen sulkeminen käytöstä tässä lipussa.",
|
"autocloseDisable":"Poista automaattinen sulkeminen käytöstä tässä lipussa.",
|
||||||
"autocloseEnable":"Ota automaattinen sulkeminen käyttöön tässä lipussa.",
|
"autocloseEnable":"Ota automaattinen sulkeminen käyttöön tässä lipussa.",
|
||||||
@@ -424,7 +492,19 @@
|
|||||||
"autodelete":"Hallitse automaattista poistoa lipussa.",
|
"autodelete":"Hallitse automaattista poistoa lipussa.",
|
||||||
"autodeleteDisable":"Poista automaattinen poisto käytöstä 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.",
|
||||||
"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":{
|
"helpMenu":{
|
||||||
"help":"Hanki luettelo kaikista käytettävissä olevista komennoista.",
|
"help":"Hanki luettelo kaikista käytettävissä olevista komennoista.",
|
||||||
@@ -452,7 +532,16 @@
|
|||||||
"autocloseDisable":"Poista automaattinen sulkeminen käytöstä tässä lipussa.",
|
"autocloseDisable":"Poista automaattinen sulkeminen käytöstä tässä lipussa.",
|
||||||
"autocloseEnable":"Ota automaattinen sulkeminen käyttöön tässä lipussa.",
|
"autocloseEnable":"Ota automaattinen sulkeminen käyttöön tässä lipussa.",
|
||||||
"autodeleteDisable":"Poista automaattinen poisto käytöstä 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":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +549,8 @@
|
|||||||
"system":"Järjestelmätilastot",
|
"system":"Järjestelmätilastot",
|
||||||
"user":"Käyttäjätilastot",
|
"user":"Käyttäjätilastot",
|
||||||
"ticket":"Lipputilastot",
|
"ticket":"Lipputilastot",
|
||||||
"participants":"Osallistujat"
|
"participants":"Osallistujat",
|
||||||
|
"messages":"Viestit"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Liput luotu",
|
"ticketsCreated":"Liput luotu",
|
||||||
@@ -472,7 +562,47 @@
|
|||||||
"ticketsPinned":"Liput kiinni",
|
"ticketsPinned":"Liput kiinni",
|
||||||
"ticketsMoved":"Liput siirretty",
|
"ticketsMoved":"Liput siirretty",
|
||||||
"usersBlacklisted":"Käyttäjät mustalla listalla",
|
"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":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["guillee3"],
|
"translators":["guillee3"],
|
||||||
"lastedited":"04/12/2024",
|
"lastedited":"04/12/2024",
|
||||||
"language":"French",
|
"language":"French",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["benzorich"],
|
"translators":["benzorich"],
|
||||||
"lastedited":"06/10/2024",
|
"lastedited":"06/10/2024",
|
||||||
"language":"German",
|
"language":"German",
|
||||||
|
|||||||
@@ -0,0 +1,608 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.1.1",
|
||||||
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
|
"lastedited":"16/11/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":"Αυτή η συμβολοσειρά είναι άκυρη!",
|
||||||
|
"stringInvertedContains":"Αυτή η συμβολοσειρά δεν επιτρέπεται να περιέχει {0}!",
|
||||||
|
"stringLowercase":"Αυτή η συμβολοσειρά πρέπει να είναι γραμμένη μόνο με πεζά!",
|
||||||
|
"stringUppercase":"Αυτή η συμβολοσειρά πρέπει να είναι γραμμένη μόνο με κεφαλαία!",
|
||||||
|
"stringSpecialCharacters":"Αυτή η συμβολοσειρά δεν επιτρέπεται να περιέχει ειδικούς χαρακτήρες! (a-z, 0-9 & κενό μόνο)",
|
||||||
|
"stringNoSpaces":"Αυτή η συμβολοσειρά δεν επιτρέπεται να περιέχει κενά!",
|
||||||
|
"stringCapitalWord":"Συνιστάται κάθε λέξη σε αυτήν τη συμβολοσειρά να ξεκινά με κεφαλαίο γράμμα!",
|
||||||
|
"stringCapitalSentence":"Φαίνεται ότι ορισμένες προτάσεις σε αυτήν τη συμβολοσειρά δεν ξεκινούν με κεφαλαίο γράμμα!",
|
||||||
|
"stringPunctuation":"Φαίνεται ότι η πρόταση σε αυτήν τη συμβολοσειρά δεν τελειώνει με σημείο στίξης!",
|
||||||
|
|
||||||
|
"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":"Αυτός ο αριθμός δεν μπορεί να είναι μηδέν!",
|
||||||
|
"numberNan":"Αυτός ο αριθμός δεν μπορεί να είναι NaN (Not A Number)!",
|
||||||
|
"numberInvertedContains":"Αυτός ο αριθμός δεν επιτρέπεται να περιέχει {0}!",
|
||||||
|
|
||||||
|
"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'!",
|
||||||
|
"customInvalidVersion":"Η έκδοση που καθορίστηκε στο config σας δεν ταιριάζει! Βεβαιωθείτε ότι έχετε ενημερώσει το config στην πιο πρόσφατη έκδοση!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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":"Εισιτήρια Διαγράφηκαν",
|
||||||
|
"clearTickets":"Εκκαθάριση Tickets",
|
||||||
|
"roles":"Ενημέρωση Ρόλων",
|
||||||
|
|
||||||
|
"autoclose":"Αυτόματο Κλείσιμο",
|
||||||
|
"autocloseEnabled":"Ενεργοποιήθηκε Αυτόματο Κλείσιμο",
|
||||||
|
"autocloseDisabled":"Απενεργοποιήθηκε Αυτόματο Κλείσιμο",
|
||||||
|
"autodelete":"Αυτόματη Διαγραφή",
|
||||||
|
"autodeleteEnabled":"Ενεργοποιήθηκε Αυτόματη Διαγραφή",
|
||||||
|
"autodeleteDisabled":"Απενεργοποιήθηκε Αυτόματη Διαγραφή",
|
||||||
|
|
||||||
|
"topicSet":"Το Θέμα Αλλάχθηκε",
|
||||||
|
"prioritySet":"Η Προτεραιότητα Αλλάχθηκε",
|
||||||
|
"priorityGet":"Προτεραιότητα Ticket",
|
||||||
|
"transfer":"Το Ticket Μεταφέρθηκε"
|
||||||
|
},
|
||||||
|
"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Αυτό το μήνυμα μπορεί τώρα να διαγραφεί!",
|
||||||
|
|
||||||
|
"topicSet":"Το θέμα του καναλιού άλλαξε επιτυχώς από τον/την {0}!",
|
||||||
|
"prioritySet":"Η προτεραιότητα του ticket άλλαξε σε {0} από τον/την {1} επιτυχώς!",
|
||||||
|
"priorityGet":"Η τρέχουσα προτεραιότητα αυτού του ticket είναι {0}.",
|
||||||
|
"transfer":"Η ιδιοκτησία του ticket μεταφέρθηκε από τον/την {0} στον/στην {1} από τον/την {2} επιτυχώς!"
|
||||||
|
},
|
||||||
|
"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}!",
|
||||||
|
|
||||||
|
"transferLog":"Η ιδιοκτησία αυτού του ticket μεταφέρθηκε από τον/την {0} στον/στην {1} από τον/την {2}!",
|
||||||
|
"transferDm":"Η ιδιοκτησία του ticket σας μεταφέρθηκε από τον/την {0} στον/στην {1} στον server μας!",
|
||||||
|
"prioritySetLog":"Η προτεραιότητα αυτού του ticket άλλαξε σε {0} από τον/την {1}!",
|
||||||
|
"prioritySetDm":"Η προτεραιότητα του ticket σας άλλαξε σε {0} στον server μας!",
|
||||||
|
"roleUpdateLog":"Ο/Η {0} ενημέρωσε τους ρόλους του/της!",
|
||||||
|
"roleUpdateDm":"Οι ρόλοι σας στον server μας έχουν ενημερωθεί!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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Αυτό το εισιτήριο δεν θα διαγραφεί μέχρι να κάνετε κλικ σε ένα από αυτά τα κουμπιά.",
|
||||||
|
"title":"Σφάλμα Transcript"
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"ΜΗΝΥΜΑΤΑ",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"ΑΡΧΕΙΟ",
|
||||||
|
"fieldsTitle":"ΠΕΔΙΑ",
|
||||||
|
"reactionsTitle":"ΑΝΤΙΔΡΑΣΕΙΣ",
|
||||||
|
"statsTitle":"ΣΤΑΤΙΣΤΙΚΑ",
|
||||||
|
"emptyContent":"<το περιεχόμενο είναι κενό>",
|
||||||
|
"noTitle":"<χωρίς τίτλο>",
|
||||||
|
"noDesc":"<χωρίς περιγραφή>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors":{
|
||||||
|
"titles":{
|
||||||
|
"internalError":"Εσωτερικό Σφάλμα",
|
||||||
|
"optionMissing":"Λείπει Επιλογή Εντολής",
|
||||||
|
"optionInvalid":"Άκυρη Επιλογή Εντολής",
|
||||||
|
"unknownCommand":"Άγνωστη Εντολή",
|
||||||
|
"noPermissions":"Δεν Έχετε Δικαιώματα",
|
||||||
|
"unknownTicket":"Άγνωστο Εισιτήριο",
|
||||||
|
"deprecatedTicket":"Παρωχημένο Εισιτήριο",
|
||||||
|
"unknownOption":"Άγνωστη Επιλογή",
|
||||||
|
"unknownPanel":"Άγνωστο Πάνελ",
|
||||||
|
"notInGuild":"Δεν Είστε σε Server",
|
||||||
|
"channelRename":"Αδυναμία Μετονομασίας Κανάλι",
|
||||||
|
"busy":"Το Εισιτήριο Είναι Απασχολημένο",
|
||||||
|
"permissionError":"Σφάλμα Δικαιωμάτων"
|
||||||
|
},
|
||||||
|
"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Παρακαλώ δοκιμάστε ξανά σε λίγα δευτερόλεπτα!",
|
||||||
|
"closeBeforeMessage":"Αυτό το ticket δεν μπορεί να κλείσει/διαγραφεί πριν σταλεί ένα μήνυμα από έναν χρήστη.",
|
||||||
|
"closeBeforeAdminMessage":"Αυτό το ticket δεν μπορεί να κλείσει/διαγραφεί πριν σταλεί μήνυμα από έναν ticket admin ή μέλος υποστήριξης.",
|
||||||
|
"unableToCreateTicket":"Δεν μπορείτε να δημιουργήσετε ticket."
|
||||||
|
},
|
||||||
|
"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":"Φίλτρο",
|
||||||
|
"method":"Μέθοδος",
|
||||||
|
"type":"Τύπος",
|
||||||
|
"blacklisted":"Στη Μαύρη Λίστα",
|
||||||
|
"panel":"Πάνελ",
|
||||||
|
"command":"Εντολή",
|
||||||
|
"system":"Σύστημα",
|
||||||
|
"true":"Ναι",
|
||||||
|
"false":"Όχι",
|
||||||
|
"syntax":"Σύνταξη",
|
||||||
|
"originalName":"Αρχικό Όνομα",
|
||||||
|
"newName":"Νέο Όνομα",
|
||||||
|
"until":"Μέχρι",
|
||||||
|
"validOptions":"Έγκυρες Επιλογές",
|
||||||
|
"validPanels":"Έγκυρα Πάνελ",
|
||||||
|
"autoclose":"Αυτόματο Κλείσιμο",
|
||||||
|
"autodelete":"Αυτόματη Διαγραφή",
|
||||||
|
"startupDate":"Ημερομηνία Εκκίνησης",
|
||||||
|
"version":"Έκδοση",
|
||||||
|
"name":"Όνομα",
|
||||||
|
"role":"Ρόλος",
|
||||||
|
"status":"Κατάσταση",
|
||||||
|
"claimed":"Αναληφθείς",
|
||||||
|
"pinned":"Καρφιτσωμένο",
|
||||||
|
"creationDate":"Ημερομηνία Δημιουργίας",
|
||||||
|
|
||||||
|
"noone":"Κανείς",
|
||||||
|
"open":"Ανοιχτό",
|
||||||
|
"closed":"Κλειστό",
|
||||||
|
"priority":"Προτεραιότητα",
|
||||||
|
"participants":"Συμμετέχοντες",
|
||||||
|
"yes":"Ναι",
|
||||||
|
"no":"Όχι",
|
||||||
|
"option":"Επιλογή",
|
||||||
|
"topic":"Θέμα",
|
||||||
|
"uptime":"Χρόνος Λειτουργίας Συστήματος",
|
||||||
|
"messages":"Μηνύματα",
|
||||||
|
"embeds":"Embeds",
|
||||||
|
"files":"Αρχεία",
|
||||||
|
"components":"Στοιχεία",
|
||||||
|
"cooldown":"Χρόνος Αναμονής",
|
||||||
|
"maxTickets":"Μέγιστος Αριθμός Tickets",
|
||||||
|
"admins":"Διαχειριστές",
|
||||||
|
"roles":"Ρόλοι",
|
||||||
|
"size":"Μέγεθος"
|
||||||
|
},
|
||||||
|
"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":"Ο αριθμός των ημερών που απαιτείται για να διαγραφεί αυτόματα το εισιτήριο λόγω αδράνειας.",
|
||||||
|
|
||||||
|
"topic":"Διαχειριστείτε το θέμα του καναλιού ticket.",
|
||||||
|
"topicSet":"Ορίστε το θέμα του καναλιού ticket.",
|
||||||
|
"topicValue":"Το νέο θέμα του καναλιού.",
|
||||||
|
"topicList":"Λάβετε μια λίστα όλων των tickets με το θέμα και τα στατιστικά τους.",
|
||||||
|
"priority":"Διαχειριστείτε την προτεραιότητα του ticket.",
|
||||||
|
"prioritySet":"Ορίστε την προτεραιότητα του ticket.",
|
||||||
|
"priorityValue":"Η προτεραιότητα του καναλιού.",
|
||||||
|
"priorityGet":"Λάβετε την προτεραιότητα του ticket.",
|
||||||
|
"priorityList":"Λάβετε μια λίστα όλων των tickets με την κατάσταση προτεραιότητάς τους.",
|
||||||
|
"transfer":"Μεταφέρετε την ιδιοκτησία του ticket από έναν χρήστη σε άλλον.",
|
||||||
|
"transferUser":"Ο χρήστης στον οποίο θα γίνει η μεταφορά."
|
||||||
|
},
|
||||||
|
"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":"Ενεργοποίηση αυτόματης διαγραφής σε αυτό το εισιτήριο.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Γενικές Εντολές",
|
||||||
|
"basicTicket":"Βασικές Εντολές Ticket",
|
||||||
|
"advancedTicket":"Προχωρημένες Εντολές Ticket",
|
||||||
|
"userTicket":"Εντολές Ticket Χρήστη",
|
||||||
|
"admin":"Εντολές Διαχειριστή",
|
||||||
|
"advanced":"Προχωρημένες Εντολές",
|
||||||
|
"extra":"Επιπλέον Εντολές"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"scopes":{
|
||||||
|
"global":"Παγκόσμια Στατιστικά",
|
||||||
|
"system":"Στατιστικά Συστήματος",
|
||||||
|
"user":"Στατιστικά Χρήστη",
|
||||||
|
"ticket":"Στατιστικά Εισιτηρίου",
|
||||||
|
"participants":"Συμμετέχοντες",
|
||||||
|
"messages":"Μηνύματα"
|
||||||
|
},
|
||||||
|
"properties":{
|
||||||
|
"ticketsCreated":"Εισιτήρια Δημιουργήθηκαν",
|
||||||
|
"ticketsClosed":"Εισιτήρια Κλείσαν",
|
||||||
|
"ticketsDeleted":"Εισιτήρια Διαγράφηκαν",
|
||||||
|
"ticketsReopened":"Εισιτήρια Επαναφέρθηκαν",
|
||||||
|
"ticketsAutoclosed":"Εισιτήρια Αυτόματα Κλείσαν",
|
||||||
|
"ticketsClaimed":"Εισιτήρια Αιτηματοποιήθηκαν",
|
||||||
|
"ticketsPinned":"Εισιτήρια Καρφιτσώθηκαν",
|
||||||
|
"ticketsMoved":"Εισιτήρια Μετακινήθηκαν",
|
||||||
|
"usersBlacklisted":"Χρήστες στη Μαύρη Λίστα",
|
||||||
|
"transcriptsCreated":"Μεταγραφές Δημιουργήθηκαν",
|
||||||
|
"ticketsAutodeleted":"Tickets Αυτόματης Διαγραφής",
|
||||||
|
"ticketsTransferred":"Tickets Μεταφερμένα",
|
||||||
|
"ticketVolume":"Όγκος Tickets",
|
||||||
|
"averageTickets":"Μέσος Όρος Tickets/Χρήστη",
|
||||||
|
"currentTickets":"Τρέχοντα Tickets",
|
||||||
|
"age":"Ηλικία Ticket",
|
||||||
|
"responseTime":"Χρόνος Απόκρισης",
|
||||||
|
"resolutionTime":"Χρόνος Επίλυσης",
|
||||||
|
"createdOn":"Δημιουργήθηκε Στις",
|
||||||
|
"createdBy":"Δημιουργήθηκε Από",
|
||||||
|
"closedOn":"Έκλεισε Στις",
|
||||||
|
"closedBy":"Έκλεισε Από",
|
||||||
|
"claimedOn":"Διεκδικήθηκε Στις",
|
||||||
|
"claimedBy":"Διεκδικήθηκε Από",
|
||||||
|
"pinnedOn":"Καρφιτσώθηκε Στις",
|
||||||
|
"pinnedBy":"Καρφιτσώθηκε Από",
|
||||||
|
"deletedOn":"Διαγράφηκε Στις",
|
||||||
|
"deletedBy":"Διαγράφηκε Από"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Developer",
|
||||||
|
"serverOwner":"Ιδιοκτήτης Server",
|
||||||
|
"serverAdmin":"Διαχειριστής Server",
|
||||||
|
"moderator":"Ομάδα Moderators",
|
||||||
|
"support":"Ομάδα Υποστήριξης",
|
||||||
|
"member":"Μέλος"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Επιλέξτε το ticket σας",
|
||||||
|
"selectRole":"Επιλέξτε τον ρόλο σας",
|
||||||
|
"selectOption":"Επιλέξτε την επιλογή σας"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Επείγον",
|
||||||
|
"veryHigh":"Πολύ Υψηλή",
|
||||||
|
"high":"Υψηλή",
|
||||||
|
"normal":"Κανονική",
|
||||||
|
"low":"Χαμηλή",
|
||||||
|
"veryLow":"Πολύ Χαμηλή",
|
||||||
|
"none":"Καμία"
|
||||||
|
}
|
||||||
|
}
|
||||||
+158
-28
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["an_developer"],
|
"translators":["challenger_nova"],
|
||||||
"lastedited":"14/12/2024",
|
"lastedited":"16/11/2025",
|
||||||
"language":"Hindi",
|
"language":"Hindi",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,7 +31,15 @@
|
|||||||
"stringContains":"इस स्ट्रिंग में {0} होना आवश्यक है!",
|
"stringContains":"इस स्ट्रिंग में {0} होना आवश्यक है!",
|
||||||
"stringChoices":"यह स्ट्रिंग केवल निम्नलिखित मानों में से एक हो सकती है: {0}!",
|
"stringChoices":"यह स्ट्रिंग केवल निम्नलिखित मानों में से एक हो सकती है: {0}!",
|
||||||
"stringRegex":"यह स्ट्रिंग अमान्य है!",
|
"stringRegex":"यह स्ट्रिंग अमान्य है!",
|
||||||
|
"stringInvertedContains":"इस स्ट्रिंग में {0} शामिल नहीं होना चाहिए!",
|
||||||
|
"stringLowercase":"यह स्ट्रिंग केवल छोटे अक्षरों में लिखी जानी चाहिए!",
|
||||||
|
"stringUppercase":"यह स्ट्रिंग केवल बड़े अक्षरों में लिखी जानी चाहिए!",
|
||||||
|
"stringSpecialCharacters":"इस स्ट्रिंग में कोई विशेष अक्षर नहीं होना चाहिए! (केवल a-z, 0-9 और स्पेस अनुमत हैं)",
|
||||||
|
"stringNoSpaces":"इस स्ट्रिंग में स्पेस नहीं होना चाहिए!",
|
||||||
|
"stringCapitalWord":"यह अनुशंसा की जाती है कि इस स्ट्रिंग के प्रत्येक शब्द की शुरुआत बड़े अक्षर से हो!",
|
||||||
|
"stringCapitalSentence":"ऐसा लगता है कि इस स्ट्रिंग में कुछ वाक्य बड़े अक्षर से शुरू नहीं होते हैं!",
|
||||||
|
"stringPunctuation":"ऐसा लगता है कि इस स्ट्रिंग का वाक्य विराम चिह्न के साथ समाप्त नहीं होता है!",
|
||||||
|
|
||||||
"numberTooShort":"यह संख्या {0} वर्णों से छोटी नहीं हो सकती!",
|
"numberTooShort":"यह संख्या {0} वर्णों से छोटी नहीं हो सकती!",
|
||||||
"numberTooLong":"यह संख्या {0} वर्णों से अधिक लंबी नहीं हो सकती!",
|
"numberTooLong":"यह संख्या {0} वर्णों से अधिक लंबी नहीं हो सकती!",
|
||||||
"numberLengthInvalid":"यह संख्या {0} वर्ण लंबी होनी चाहिए!",
|
"numberLengthInvalid":"यह संख्या {0} वर्ण लंबी होनी चाहिए!",
|
||||||
@@ -48,10 +56,12 @@
|
|||||||
"numberNegative":"यह संख्या ऋणात्मक नहीं हो सकती!",
|
"numberNegative":"यह संख्या ऋणात्मक नहीं हो सकती!",
|
||||||
"numberPositive":"यह संख्या सकारात्मक नहीं हो सकती!",
|
"numberPositive":"यह संख्या सकारात्मक नहीं हो सकती!",
|
||||||
"numberZero":"यह संख्या शून्य नहीं हो सकती!",
|
"numberZero":"यह संख्या शून्य नहीं हो सकती!",
|
||||||
|
"numberNan":"यह संख्या NaN (Not A Number) नहीं हो सकती!",
|
||||||
|
"numberInvertedContains":"इस संख्या में {0} शामिल नहीं होना चाहिए!",
|
||||||
|
|
||||||
"booleanTrue":"यह बूलियन सत्य नहीं हो सकता!",
|
"booleanTrue":"यह बूलियन सत्य नहीं हो सकता!",
|
||||||
"booleanFalse":"यह बूलियन झूठा नहीं हो सकता!",
|
"booleanFalse":"यह बूलियन झूठा नहीं हो सकता!",
|
||||||
|
|
||||||
"arrayEmptyDisabled":"इस सरणी को खाली रहने की अनुमति नहीं है!",
|
"arrayEmptyDisabled":"इस सरणी को खाली रहने की अनुमति नहीं है!",
|
||||||
"arrayEmptyRequired":"यह सरणी खाली होनी आवश्यक है!",
|
"arrayEmptyRequired":"यह सरणी खाली होनी आवश्यक है!",
|
||||||
"arrayTooShort":"इस सरणी की लंबाई कम से कम {0} होनी चाहिए!",
|
"arrayTooShort":"इस सरणी की लंबाई कम से कम {0} होनी चाहिए!",
|
||||||
@@ -59,7 +69,7 @@
|
|||||||
"arrayLengthInvalid":"इस सरणी की लंबाई {0} होनी चाहिए!",
|
"arrayLengthInvalid":"इस सरणी की लंबाई {0} होनी चाहिए!",
|
||||||
"arrayInvalidTypes":"इस सरणी में केवल निम्नलिखित प्रकार हो सकते हैं: {0}!",
|
"arrayInvalidTypes":"इस सरणी में केवल निम्नलिखित प्रकार हो सकते हैं: {0}!",
|
||||||
"arrayDouble":"यह सरणी एक ही मान को दो बार अनुमति नहीं देती है!",
|
"arrayDouble":"यह सरणी एक ही मान को दो बार अनुमति नहीं देती है!",
|
||||||
|
|
||||||
"discordInvalidId":"यह एक अमान्य कलह {0} आईडी है!",
|
"discordInvalidId":"यह एक अमान्य कलह {0} आईडी है!",
|
||||||
"discordInvalidIdOptions":"यह एक अमान्य कलह {0} आईडी है! ",
|
"discordInvalidIdOptions":"यह एक अमान्य कलह {0} आईडी है! ",
|
||||||
"discordInvalidToken":"यह एक अमान्य कलह टोकन है (वाक्यविन्यास की दृष्टि से)!",
|
"discordInvalidToken":"यह एक अमान्य कलह टोकन है (वाक्यविन्यास की दृष्टि से)!",
|
||||||
@@ -76,7 +86,7 @@
|
|||||||
"urlInvalidPath":"इस यूआरएल में एक अमान्य पथ है!",
|
"urlInvalidPath":"इस यूआरएल में एक अमान्य पथ है!",
|
||||||
"idNotUnique":"यह आईडी अद्वितीय नहीं है, इसके बजाय किसी अन्य आईडी का उपयोग करें!",
|
"idNotUnique":"यह आईडी अद्वितीय नहीं है, इसके बजाय किसी अन्य आईडी का उपयोग करें!",
|
||||||
"idNonExistent":"आईडी {0} मौजूद नहीं है!",
|
"idNonExistent":"आईडी {0} मौजूद नहीं है!",
|
||||||
|
|
||||||
"invalidType":"यह संपत्ति इस प्रकार की होनी चाहिए: {0}!",
|
"invalidType":"यह संपत्ति इस प्रकार की होनी चाहिए: {0}!",
|
||||||
"propertyMissing":"इस ऑब्जेक्ट में संपत्ति {0} गायब है!",
|
"propertyMissing":"इस ऑब्जेक्ट में संपत्ति {0} गायब है!",
|
||||||
"propertyOptional":"इस ऑब्जेक्ट में संपत्ति {0} वैकल्पिक है!",
|
"propertyOptional":"इस ऑब्जेक्ट में संपत्ति {0} वैकल्पिक है!",
|
||||||
@@ -84,12 +94,13 @@
|
|||||||
"nullInvalid":"यह संपत्ति शून्य नहीं हो सकती!",
|
"nullInvalid":"यह संपत्ति शून्य नहीं हो सकती!",
|
||||||
"switchInvalidType":"इसे निम्न प्रकारों में से एक होना आवश्यक है: {0}!",
|
"switchInvalidType":"इसे निम्न प्रकारों में से एक होना आवश्यक है: {0}!",
|
||||||
"objectSwitchInvalid":"यह ऑब्जेक्ट निम्न प्रकारों में से एक होना चाहिए: {0}!",
|
"objectSwitchInvalid":"यह ऑब्जेक्ट निम्न प्रकारों में से एक होना चाहिए: {0}!",
|
||||||
|
|
||||||
"invalidLanguage":"यह एक अमान्य भाषा है!",
|
"invalidLanguage":"यह एक अमान्य भाषा है!",
|
||||||
"invalidButton":"इस बटन पर कम से कम {0} या {1} होना आवश्यक है!",
|
"invalidButton":"इस बटन पर कम से कम {0} या {1} होना आवश्यक है!",
|
||||||
"unusedOption":"विकल्प {0} का उपयोग कहीं भी नहीं किया जाता है!",
|
"unusedOption":"विकल्प {0} का उपयोग कहीं भी नहीं किया जाता है!",
|
||||||
"unusedQuestion":"प्रश्न {0} का प्रयोग कहीं भी नहीं किया गया है!",
|
"unusedQuestion":"प्रश्न {0} का प्रयोग कहीं भी नहीं किया गया है!",
|
||||||
"dropdownOption":"ड्रॉपडाउन सक्षम पैनल में केवल 'टिकट' प्रकार के विकल्प हो सकते हैं!"
|
"dropdownOption":"ड्रॉपडाउन सक्षम पैनल में केवल 'टिकट' प्रकार के विकल्प हो सकते हैं!",
|
||||||
|
"customInvalidVersion":"आपके कॉन्फ़िग में निर्दिष्ट संस्करण मेल नहीं खाता! कृपया सुनिश्चित करें कि आपने कॉन्फ़िग को नवीनतम संस्करण में अपडेट किया है!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -122,7 +133,7 @@
|
|||||||
"move":"टिकट स्थानांतरित",
|
"move":"टिकट स्थानांतरित",
|
||||||
"add":"टिकट उपयोगकर्ता जोड़ा गया",
|
"add":"टिकट उपयोगकर्ता जोड़ा गया",
|
||||||
"remove":"टिकट उपयोगकर्ता हटा दिया गया",
|
"remove":"टिकट उपयोगकर्ता हटा दिया गया",
|
||||||
|
|
||||||
"help":"उपलब्ध आदेश",
|
"help":"उपलब्ध आदेश",
|
||||||
"statsReset":"आँकड़े रीसेट करें",
|
"statsReset":"आँकड़े रीसेट करें",
|
||||||
"blacklistAdd":"उपयोगकर्ता को ब्लैकलिस्ट किया गया",
|
"blacklistAdd":"उपयोगकर्ता को ब्लैकलिस्ट किया गया",
|
||||||
@@ -132,14 +143,20 @@
|
|||||||
"blacklistAddDm":"ब्लैकलिस्ट में जोड़ा गया",
|
"blacklistAddDm":"ब्लैकलिस्ट में जोड़ा गया",
|
||||||
"blacklistRemoveDm":"काली सूची से हटाया गया",
|
"blacklistRemoveDm":"काली सूची से हटाया गया",
|
||||||
"clear":"टिकट साफ़ हो गए",
|
"clear":"टिकट साफ़ हो गए",
|
||||||
|
"clearTickets":"टिकट साफ़ करें",
|
||||||
"roles":"भूमिकाएँ अद्यतन की गईं",
|
"roles":"भूमिकाएँ अद्यतन की गईं",
|
||||||
|
|
||||||
"autoclose":"टिकट स्वतः बंद",
|
"autoclose":"टिकट स्वतः बंद",
|
||||||
"autocloseEnabled":"स्वत: बंद सक्षम",
|
"autocloseEnabled":"स्वत: बंद सक्षम",
|
||||||
"autocloseDisabled":"स्वत: बंद अक्षम",
|
"autocloseDisabled":"स्वत: बंद अक्षम",
|
||||||
"autodelete":"टिकट स्वतः हटा दिया गया",
|
"autodelete":"टिकट स्वतः हटा दिया गया",
|
||||||
"autodeleteEnabled":"स्वतः हटाना सक्षम",
|
"autodeleteEnabled":"स्वतः हटाना सक्षम",
|
||||||
"autodeleteDisabled":"स्वतः हटाना अक्षम"
|
"autodeleteDisabled":"स्वतः हटाना अक्षम",
|
||||||
|
|
||||||
|
"topicSet":"विषय बदला गया",
|
||||||
|
"prioritySet":"प्राथमिकता बदली गई",
|
||||||
|
"priorityGet":"टिकट प्राथमिकता",
|
||||||
|
"transfer":"टिकट स्थानांतरित किया गया"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"आपका टिकट बन गया है. ",
|
"create":"आपका टिकट बन गया है. ",
|
||||||
@@ -154,7 +171,7 @@
|
|||||||
"move":"टिकट को सफलतापूर्वक {0} पर ले जाया गया है!",
|
"move":"टिकट को सफलतापूर्वक {0} पर ले जाया गया है!",
|
||||||
"add":"{0} को टिकट में सफलतापूर्वक जोड़ दिया गया है!",
|
"add":"{0} को टिकट में सफलतापूर्वक जोड़ दिया गया है!",
|
||||||
"remove":"{0} को टिकट से सफलतापूर्वक हटा दिया गया है!",
|
"remove":"{0} को टिकट से सफलतापूर्वक हटा दिया गया है!",
|
||||||
|
|
||||||
"helpExplanation":"`<name>` => आवश्यक पैरामीटर\n",
|
"helpExplanation":"`<name>` => आवश्यक पैरामीटर\n",
|
||||||
"statsReset":"बॉट आँकड़े सफलतापूर्वक रीसेट कर दिए गए हैं!",
|
"statsReset":"बॉट आँकड़े सफलतापूर्वक रीसेट कर दिए गए हैं!",
|
||||||
"statsError":"टिकट आँकड़े देखने में असमर्थ!\n",
|
"statsError":"टिकट आँकड़े देखने में असमर्थ!\n",
|
||||||
@@ -167,7 +184,7 @@
|
|||||||
"clearVerify":"क्या आप वाकई एकाधिक टिकट हटाना चाहते हैं?\n",
|
"clearVerify":"क्या आप वाकई एकाधिक टिकट हटाना चाहते हैं?\n",
|
||||||
"clearReady":"{0} टिकट सफलतापूर्वक हटा दिए गए हैं!",
|
"clearReady":"{0} टिकट सफलतापूर्वक हटा दिए गए हैं!",
|
||||||
"rolesEmpty":"कोई भूमिका अद्यतन नहीं की गई है!",
|
"rolesEmpty":"कोई भूमिका अद्यतन नहीं की गई है!",
|
||||||
|
|
||||||
"autocloseLeave":"यह टिकट स्वतः बंद हो गया है क्योंकि निर्माता ने सर्वर छोड़ दिया है!",
|
"autocloseLeave":"यह टिकट स्वतः बंद हो गया है क्योंकि निर्माता ने सर्वर छोड़ दिया है!",
|
||||||
"autocloseTimeout":"यह टिकट स्वतः बंद कर दिया गया है क्योंकि यह `{0}h` से अधिक समय से निष्क्रिय है!",
|
"autocloseTimeout":"यह टिकट स्वतः बंद कर दिया गया है क्योंकि यह `{0}h` से अधिक समय से निष्क्रिय है!",
|
||||||
"autodeleteLeave":"यह टिकट स्वतः हटा दिया गया है क्योंकि निर्माता ने सर्वर छोड़ दिया है!",
|
"autodeleteLeave":"यह टिकट स्वतः हटा दिया गया है क्योंकि निर्माता ने सर्वर छोड़ दिया है!",
|
||||||
@@ -176,11 +193,16 @@
|
|||||||
"autocloseDisabled":"इस टिकट में ऑटोक्लोज़ अक्षम कर दिया गया है!\n",
|
"autocloseDisabled":"इस टिकट में ऑटोक्लोज़ अक्षम कर दिया गया है!\n",
|
||||||
"autodeleteEnabled":"इस टिकट में ऑटोडिलीट सक्षम कर दिया गया है!\n",
|
"autodeleteEnabled":"इस टिकट में ऑटोडिलीट सक्षम कर दिया गया है!\n",
|
||||||
"autodeleteDisabled":"इस टिकट में ऑटोडिलीट अक्षम कर दिया गया है!\n",
|
"autodeleteDisabled":"इस टिकट में ऑटोडिलीट अक्षम कर दिया गया है!\n",
|
||||||
|
|
||||||
"ticketMessageLimit":"आप एक ही समय में केवल {0} टिकट बना सकते हैं!",
|
"ticketMessageLimit":"आप एक ही समय में केवल {0} टिकट बना सकते हैं!",
|
||||||
"ticketMessageAutoclose":"{0}घंटे तक निष्क्रिय रहने पर यह टिकट स्वतः बंद हो जाएगा!",
|
"ticketMessageAutoclose":"{0}घंटे तक निष्क्रिय रहने पर यह टिकट स्वतः बंद हो जाएगा!",
|
||||||
"ticketMessageAutodelete":"{0} दिनों तक निष्क्रिय रहने पर यह टिकट स्वतः हटा दिया जाएगा!",
|
"ticketMessageAutodelete":"{0} दिनों तक निष्क्रिय रहने पर यह टिकट स्वतः हटा दिया जाएगा!",
|
||||||
"panelReady":"आप नीचे पैनल पा सकते हैं!\n"
|
"panelReady":"पैनल फॉलोअप संदेश में उपलब्ध है!\nयह संदेश अब हटाया जा सकता है!",
|
||||||
|
|
||||||
|
"topicSet":"चैनल का विषय {0} द्वारा सफलतापूर्वक बदल दिया गया है!",
|
||||||
|
"prioritySet":"टिकट की प्राथमिकता {1} द्वारा {0} में सफलतापूर्वक बदल दी गई है!",
|
||||||
|
"priorityGet":"इस टिकट की वर्तमान प्राथमिकता {0} है।",
|
||||||
|
"transfer":"टिकट का स्वामित्व {0} से {1} में {2} द्वारा सफलतापूर्वक स्थानांतरित कर दिया गया है!"
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder":"आपने यह टिकट क्यों बंद कर दिया?",
|
"closePlaceholder":"आपने यह टिकट क्यों बंद कर दिया?",
|
||||||
@@ -215,12 +237,19 @@
|
|||||||
"addDm":"हमारे सर्वर में आपके टिकट में {0} जोड़ दिया गया है!",
|
"addDm":"हमारे सर्वर में आपके टिकट में {0} जोड़ दिया गया है!",
|
||||||
"removeLog":"{1} द्वारा इस टिकट से {0} हटा दिया गया है!",
|
"removeLog":"{1} द्वारा इस टिकट से {0} हटा दिया गया है!",
|
||||||
"removeDm":"हमारे सर्वर में आपके टिकट से {0} हटा दिया गया है!",
|
"removeDm":"हमारे सर्वर में आपके टिकट से {0} हटा दिया गया है!",
|
||||||
|
|
||||||
"blacklistAddLog":"{0} को {1} द्वारा काली सूची में डाल दिया गया था!",
|
"blacklistAddLog":"{0} को {1} द्वारा काली सूची में डाल दिया गया था!",
|
||||||
"blacklistRemoveLog":"{0} को {1} द्वारा काली सूची से हटा दिया गया था!",
|
"blacklistRemoveLog":"{0} को {1} द्वारा काली सूची से हटा दिया गया था!",
|
||||||
"blacklistAddDm":"आपको हमारे सर्वर में काली सूची में डाल दिया गया है!\n",
|
"blacklistAddDm":"आपको हमारे सर्वर में काली सूची में डाल दिया गया है!\n",
|
||||||
"blacklistRemoveDm":"आपको हमारे सर्वर में ब्लैकलिस्ट से हटा दिया गया है!\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":{
|
"transcripts":{
|
||||||
@@ -241,7 +270,19 @@
|
|||||||
"retry":"पुन: प्रयास करें",
|
"retry":"पुन: प्रयास करें",
|
||||||
"continue":"प्रतिलेख के बिना हटाएँ",
|
"continue":"प्रतिलेख के बिना हटाएँ",
|
||||||
"backup":"बैकअप ट्रांस्क्रिप्ट बनाएं",
|
"backup":"बैकअप ट्रांस्क्रिप्ट बनाएं",
|
||||||
"error":"प्रतिलेख बनाने का प्रयास करते समय कुछ गलत हो गया।\n"
|
"error":"प्रतिलेख बनाने का प्रयास करते समय कुछ गलत हो गया।\n",
|
||||||
|
"title":"ट्रांसक्रिप्ट त्रुटि"
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"संदेश",
|
||||||
|
"embedTitle":"एम्बेड",
|
||||||
|
"fileTitle":"फ़ाइल",
|
||||||
|
"fieldsTitle":"फ़ील्ड्स",
|
||||||
|
"reactionsTitle":"प्रतिक्रियाएँ",
|
||||||
|
"statsTitle":"आँकड़े",
|
||||||
|
"emptyContent":"<सामग्री खाली है>",
|
||||||
|
"noTitle":"<कोई शीर्षक नहीं>",
|
||||||
|
"noDesc":"<कोई विवरण नहीं>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
@@ -257,7 +298,8 @@
|
|||||||
"unknownPanel":"अज्ञात पैनल",
|
"unknownPanel":"अज्ञात पैनल",
|
||||||
"notInGuild":"सर्वर में नहीं",
|
"notInGuild":"सर्वर में नहीं",
|
||||||
"channelRename":"चैनल का नाम बदलने में असमर्थ",
|
"channelRename":"चैनल का नाम बदलने में असमर्थ",
|
||||||
"busy":"टिकट व्यस्त है"
|
"busy":"टिकट व्यस्त है",
|
||||||
|
"permissionError":"अनुमति त्रुटि"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"अधिक जानकारी के लिए इस बॉट के मालिक से संपर्क करें!",
|
"askForInfo":"अधिक जानकारी के लिए इस बॉट के मालिक से संपर्क करें!",
|
||||||
@@ -280,7 +322,10 @@
|
|||||||
"notInGuild":"यह {0} डीएम में काम नहीं करता! ",
|
"notInGuild":"यह {0} डीएम में काम नहीं करता! ",
|
||||||
"channelRename":"विवाद की दर सीमा के कारण, वर्तमान में बॉट के लिए चैनल का नाम बदलना असंभव है। ",
|
"channelRename":"विवाद की दर सीमा के कारण, वर्तमान में बॉट के लिए चैनल का नाम बदलना असंभव है। ",
|
||||||
"channelRenameSource":"इस त्रुटि का स्रोत है: {0}",
|
"channelRenameSource":"इस त्रुटि का स्रोत है: {0}",
|
||||||
"busy":"इस {0} का उपयोग करने में असमर्थ!\n"
|
"busy":"इस {0} का उपयोग करने में असमर्थ!\n",
|
||||||
|
"closeBeforeMessage":"किसी उपयोगकर्ता द्वारा संदेश भेजे जाने से पहले इस टिकट को बंद/हटाया नहीं जा सकता।",
|
||||||
|
"closeBeforeAdminMessage":"टिकट एडमिन या सपोर्ट सदस्य द्वारा संदेश भेजे जाने से पहले इस टिकट को बंद/हटाया नहीं जा सकता।",
|
||||||
|
"unableToCreateTicket":"आप टिकट बनाने में असमर्थ हैं।"
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"मान पैटर्न से मेल नहीं खाता!",
|
"stringRegex":"मान पैटर्न से मेल नहीं खाता!",
|
||||||
@@ -331,7 +376,6 @@
|
|||||||
"added":"जोड़ा",
|
"added":"जोड़ा",
|
||||||
"removed":"निकाला गया",
|
"removed":"निकाला गया",
|
||||||
"filter":"फ़िल्टर",
|
"filter":"फ़िल्टर",
|
||||||
"claimedBy":"{0} द्वारा दावा किया गया",
|
|
||||||
"method":"तरीका",
|
"method":"तरीका",
|
||||||
"type":"प्रकार",
|
"type":"प्रकार",
|
||||||
"blacklisted":"ब्लैक लिस्ट किया",
|
"blacklisted":"ब्लैक लिस्ट किया",
|
||||||
@@ -355,7 +399,27 @@
|
|||||||
"status":"स्थिति",
|
"status":"स्थिति",
|
||||||
"claimed":"दावा किया",
|
"claimed":"दावा किया",
|
||||||
"pinned":"पिन की गई",
|
"pinned":"पिन की गई",
|
||||||
"creationDate":"निर्माण तिथि"
|
"creationDate":"निर्माण तिथि",
|
||||||
|
|
||||||
|
"noone":"कोई नहीं",
|
||||||
|
"open":"खुला",
|
||||||
|
"closed":"बंद",
|
||||||
|
"priority":"प्राथमिकता",
|
||||||
|
"participants":"प्रतिभागी",
|
||||||
|
"yes":"हाँ",
|
||||||
|
"no":"नहीं",
|
||||||
|
"option":"विकल्प",
|
||||||
|
"topic":"विषय",
|
||||||
|
"uptime":"सिस्टम अपटाइम",
|
||||||
|
"messages":"संदेश",
|
||||||
|
"embeds":"एम्बेड्स",
|
||||||
|
"files":"फ़ाइलें",
|
||||||
|
"components":"घटक",
|
||||||
|
"cooldown":"कूलडाउन",
|
||||||
|
"maxTickets":"अधिकतम टिकट",
|
||||||
|
"admins":"एडमिन",
|
||||||
|
"roles":"भूमिकाएँ",
|
||||||
|
"size":"आकार"
|
||||||
},
|
},
|
||||||
"lowercase":{
|
"lowercase":{
|
||||||
"text":"मूलपाठ",
|
"text":"मूलपाठ",
|
||||||
@@ -384,6 +448,7 @@
|
|||||||
"unclaim":"टिकट का दावा रद्द करें.",
|
"unclaim":"टिकट का दावा रद्द करें.",
|
||||||
"pin":"टिकट पिन करें.",
|
"pin":"टिकट पिन करें.",
|
||||||
"unpin":"टिकट अनपिन करें.",
|
"unpin":"टिकट अनपिन करें.",
|
||||||
|
|
||||||
"move":"एक टिकट ले जाएँ.",
|
"move":"एक टिकट ले जाएँ.",
|
||||||
"moveId":"उस विकल्प का पहचानकर्ता जिस पर आप जाना चाहते हैं.",
|
"moveId":"उस विकल्प का पहचानकर्ता जिस पर आप जाना चाहते हैं.",
|
||||||
"rename":"टिकट का नाम बदलें.",
|
"rename":"टिकट का नाम बदलें.",
|
||||||
@@ -392,6 +457,7 @@
|
|||||||
"addUser":"उपयोगकर्ता को जोड़ना है.",
|
"addUser":"उपयोगकर्ता को जोड़ना है.",
|
||||||
"remove":"किसी उपयोगकर्ता को टिकट से हटाएँ.",
|
"remove":"किसी उपयोगकर्ता को टिकट से हटाएँ.",
|
||||||
"removeUser":"उपयोगकर्ता को हटाना है.",
|
"removeUser":"उपयोगकर्ता को हटाना है.",
|
||||||
|
|
||||||
"blacklist":"टिकट ब्लैकलिस्ट प्रबंधित करें.",
|
"blacklist":"टिकट ब्लैकलिस्ट प्रबंधित करें.",
|
||||||
"blacklistView":"वर्तमान ब्लैकलिस्ट की सूची देखें.",
|
"blacklistView":"वर्तमान ब्लैकलिस्ट की सूची देखें.",
|
||||||
"blacklistAdd":"किसी उपयोगकर्ता को काली सूची में जोड़ें.",
|
"blacklistAdd":"किसी उपयोगकर्ता को काली सूची में जोड़ें.",
|
||||||
@@ -405,6 +471,7 @@
|
|||||||
"statsUserUser":"देखने के लिए उपयोगकर्ता.",
|
"statsUserUser":"देखने के लिए उपयोगकर्ता.",
|
||||||
"statsTicket":"सर्वर में टिकट के आँकड़े देखें।",
|
"statsTicket":"सर्वर में टिकट के आँकड़े देखें।",
|
||||||
"statsTicketTicket":"देखने के लिए टिकट.",
|
"statsTicketTicket":"देखने के लिए टिकट.",
|
||||||
|
|
||||||
"clear":"एक ही समय में एकाधिक टिकट हटाएँ।",
|
"clear":"एक ही समय में एकाधिक टिकट हटाएँ।",
|
||||||
"clearFilter":"टिकट साफ़ करने के लिए फ़िल्टर.",
|
"clearFilter":"टिकट साफ़ करने के लिए फ़िल्टर.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +484,7 @@
|
|||||||
"unpin":"अनपिन किया गया",
|
"unpin":"अनपिन किया गया",
|
||||||
"autoclose":"स्वतः बंद"
|
"autoclose":"स्वतः बंद"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"किसी टिकट में ऑटोक्लोज़ प्रबंधित करें.",
|
"autoclose":"किसी टिकट में ऑटोक्लोज़ प्रबंधित करें.",
|
||||||
"autocloseDisable":"इस टिकट में ऑटोक्लोज़ अक्षम करें.",
|
"autocloseDisable":"इस टिकट में ऑटोक्लोज़ अक्षम करें.",
|
||||||
"autocloseEnable":"इस टिकट में ऑटोक्लोज़ सक्षम करें।",
|
"autocloseEnable":"इस टिकट में ऑटोक्लोज़ सक्षम करें।",
|
||||||
@@ -424,7 +492,19 @@
|
|||||||
"autodelete":"किसी टिकट में स्वत: हटाना प्रबंधित करें.",
|
"autodelete":"किसी टिकट में स्वत: हटाना प्रबंधित करें.",
|
||||||
"autodeleteDisable":"इस टिकट में ऑटोडिलीट अक्षम करें।",
|
"autodeleteDisable":"इस टिकट में ऑटोडिलीट अक्षम करें।",
|
||||||
"autodeleteEnable":"इस टिकट में ऑटोडिलीट सक्षम करें।",
|
"autodeleteEnable":"इस टिकट में ऑटोडिलीट सक्षम करें।",
|
||||||
"autodeleteEnableTime":"इस टिकट को हटाने के लिए उतने दिनों की संख्या निष्क्रिय होनी चाहिए।"
|
"autodeleteEnableTime":"इस टिकट को हटाने के लिए उतने दिनों की संख्या निष्क्रिय होनी चाहिए।",
|
||||||
|
|
||||||
|
"topic":"टिकट चैनल के विषय का प्रबंधन करें।",
|
||||||
|
"topicSet":"टिकट चैनल का विषय सेट करें।",
|
||||||
|
"topicValue":"चैनल का नया विषय।",
|
||||||
|
"topicList":"सभी टिकटों की सूची प्राप्त करें जिनके विषय और आँकड़े शामिल हैं।",
|
||||||
|
"priority":"टिकट की प्राथमिकता का प्रबंधन करें।",
|
||||||
|
"prioritySet":"टिकट की प्राथमिकता सेट करें।",
|
||||||
|
"priorityValue":"चैनल की प्राथमिकता।",
|
||||||
|
"priorityGet":"टिकट की प्राथमिकता प्राप्त करें।",
|
||||||
|
"priorityList":"सभी टिकटों की प्राथमिकता स्थिति की सूची प्राप्त करें।",
|
||||||
|
"transfer":"टिकट का स्वामित्व एक उपयोगकर्ता से दूसरे को स्थानांतरित करें।",
|
||||||
|
"transferUser":"जिस उपयोगकर्ता को स्थानांतरित करना है।"
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"सभी उपलब्ध आदेशों की सूची प्राप्त करें.",
|
"help":"सभी उपलब्ध आदेशों की सूची प्राप्त करें.",
|
||||||
@@ -452,7 +532,16 @@
|
|||||||
"autocloseDisable":"इस टिकट में ऑटोक्लोज़ अक्षम करें.",
|
"autocloseDisable":"इस टिकट में ऑटोक्लोज़ अक्षम करें.",
|
||||||
"autocloseEnable":"इस टिकट में ऑटोक्लोज़ सक्षम करें।",
|
"autocloseEnable":"इस टिकट में ऑटोक्लोज़ सक्षम करें।",
|
||||||
"autodeleteDisable":"इस टिकट में ऑटोडिलीट अक्षम करें।",
|
"autodeleteDisable":"इस टिकट में ऑटोडिलीट अक्षम करें।",
|
||||||
"autodeleteEnable":"इस टिकट में ऑटोडिलीट सक्षम करें।"
|
"autodeleteEnable":"इस टिकट में ऑटोडिलीट सक्षम करें।",
|
||||||
|
"categories":{
|
||||||
|
"general":"सामान्य कमांड्स",
|
||||||
|
"basicTicket":"मूल टिकट कमांड्स",
|
||||||
|
"advancedTicket":"उन्नत टिकट कमांड्स",
|
||||||
|
"userTicket":"उपयोगकर्ता टिकट कमांड्स",
|
||||||
|
"admin":"एडमिन कमांड्स",
|
||||||
|
"advanced":"उन्नत कमांड्स",
|
||||||
|
"extra":"अतिरिक्त कमांड्स"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +549,8 @@
|
|||||||
"system":"सिस्टम आँकड़े",
|
"system":"सिस्टम आँकड़े",
|
||||||
"user":"उपयोगकर्ता आँकड़े",
|
"user":"उपयोगकर्ता आँकड़े",
|
||||||
"ticket":"टिकट आँकड़े",
|
"ticket":"टिकट आँकड़े",
|
||||||
"participants":"प्रतिभागियों"
|
"participants":"प्रतिभागियों",
|
||||||
|
"messages":"संदेश"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"टिकट बनाये गये",
|
"ticketsCreated":"टिकट बनाये गये",
|
||||||
@@ -472,7 +562,47 @@
|
|||||||
"ticketsPinned":"टिकट पिन किये गये",
|
"ticketsPinned":"टिकट पिन किये गये",
|
||||||
"ticketsMoved":"टिकट ले जाया गया",
|
"ticketsMoved":"टिकट ले जाया गया",
|
||||||
"usersBlacklisted":"उपयोगकर्ता ब्लैकलिस्टेड",
|
"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":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["Kornel0706"],
|
"translators":["Kornel0706"],
|
||||||
"lastedited":"22/08/2024",
|
"lastedited":"22/08/2024",
|
||||||
"language":"Hungarian",
|
"language":"Hungarian",
|
||||||
|
|||||||
+157
-27
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["erxg"],
|
"translators":["erxg"],
|
||||||
"lastedited":"25/08/2024",
|
"lastedited":"16/11/2025",
|
||||||
"language":"Indonesian",
|
"language":"Indonesian",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,7 +31,15 @@
|
|||||||
"stringContains":"String ini harus mengandung {0}!",
|
"stringContains":"String ini harus mengandung {0}!",
|
||||||
"stringChoices":"String ini hanya dapat berupa salah satu dari nilai berikut ini: {0}!",
|
"stringChoices":"String ini hanya dapat berupa salah satu dari nilai berikut ini: {0}!",
|
||||||
"stringRegex":"String ini tidak valid!",
|
"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!",
|
"numberTooShort":"Nomor ini tidak boleh lebih pendek dari {0} karakter!",
|
||||||
"numberTooLong":"Nomor ini tidak boleh lebih panjang dari {0} karakter!",
|
"numberTooLong":"Nomor ini tidak boleh lebih panjang dari {0} karakter!",
|
||||||
"numberLengthInvalid":"Nomor ini harus setidaknya {0} karakter!",
|
"numberLengthInvalid":"Nomor ini harus setidaknya {0} karakter!",
|
||||||
@@ -48,10 +56,12 @@
|
|||||||
"numberNegative":"Nomor ini tidak boleh negatif!",
|
"numberNegative":"Nomor ini tidak boleh negatif!",
|
||||||
"numberPositive":"Nomor ini tidak boleh positif!",
|
"numberPositive":"Nomor ini tidak boleh positif!",
|
||||||
"numberZero":"Nomor ini tidak boleh nol!",
|
"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!",
|
"booleanTrue":"Boolean ini tidak boleh benar!",
|
||||||
"booleanFalse":"Boolean ini tidak boleh salah!",
|
"booleanFalse":"Boolean ini tidak boleh salah!",
|
||||||
|
|
||||||
"arrayEmptyDisabled":"Array ini tidak boleh kosong!",
|
"arrayEmptyDisabled":"Array ini tidak boleh kosong!",
|
||||||
"arrayEmptyRequired":"Array ini harus kosong!",
|
"arrayEmptyRequired":"Array ini harus kosong!",
|
||||||
"arrayTooShort":"Array ini harus memiliki panjang setidaknya {0}!",
|
"arrayTooShort":"Array ini harus memiliki panjang setidaknya {0}!",
|
||||||
@@ -59,7 +69,7 @@
|
|||||||
"arrayLengthInvalid":"Array ini hanya dapat berisi tipe berikut ini: {0}!",
|
"arrayLengthInvalid":"Array ini hanya dapat berisi tipe berikut ini: {0}!",
|
||||||
"arrayInvalidTypes":"Array ini hanya dapat berisi tipe berikut: {0}!",
|
"arrayInvalidTypes":"Array ini hanya dapat berisi tipe berikut: {0}!",
|
||||||
"arrayDouble":"Array ini tidak mengizinkan nilai yang sama dua kali!",
|
"arrayDouble":"Array ini tidak mengizinkan nilai yang sama dua kali!",
|
||||||
|
|
||||||
"discordInvalidId":"Ini adalah id Discord {0} yang tidak valid!",
|
"discordInvalidId":"Ini adalah id Discord {0} yang tidak valid!",
|
||||||
"discordInvalidIdOptions":"Ini adalah id Discord {0} yang tidak valid! Anda juga dapat menggunakan salah satu dari ini: {1}!",
|
"discordInvalidIdOptions":"Ini adalah id Discord {0} yang tidak valid! Anda juga dapat menggunakan salah satu dari ini: {1}!",
|
||||||
"discordInvalidToken":"Ini adalah token Discord yang tidak valid (secara sintaksis)!",
|
"discordInvalidToken":"Ini adalah token Discord yang tidak valid (secara sintaksis)!",
|
||||||
@@ -76,7 +86,7 @@
|
|||||||
"urlInvalidPath":"URL ini memiliki jalur yang tidak valid!",
|
"urlInvalidPath":"URL ini memiliki jalur yang tidak valid!",
|
||||||
"idNotUnique":"Id ini tidak unik, gunakan id lain sebagai gantinya!",
|
"idNotUnique":"Id ini tidak unik, gunakan id lain sebagai gantinya!",
|
||||||
"idNonExistent":"Id {0} tidak ada!",
|
"idNonExistent":"Id {0} tidak ada!",
|
||||||
|
|
||||||
"invalidType":"Properti ini harus sesuai dengan jenisnya: {0}!",
|
"invalidType":"Properti ini harus sesuai dengan jenisnya: {0}!",
|
||||||
"propertyMissing":"Properti {0} tidak ada pada objek ini!",
|
"propertyMissing":"Properti {0} tidak ada pada objek ini!",
|
||||||
"propertyOptional":"Properti {0} bersifat opsional dalam objek ini!",
|
"propertyOptional":"Properti {0} bersifat opsional dalam objek ini!",
|
||||||
@@ -84,12 +94,13 @@
|
|||||||
"nullInvalid":"Properti ini tidak boleh bernilai nol!",
|
"nullInvalid":"Properti ini tidak boleh bernilai nol!",
|
||||||
"switchInvalidType":"Ini harus salah satu dari jenis berikut ini: {0}!",
|
"switchInvalidType":"Ini harus salah satu dari jenis berikut ini: {0}!",
|
||||||
"objectSwitchInvalid":"Objek ini harus merupakan salah satu dari jenis berikut: {0}!",
|
"objectSwitchInvalid":"Objek ini harus merupakan salah satu dari jenis berikut: {0}!",
|
||||||
|
|
||||||
"invalidLanguage":"Ini adalah bahasa yang tidak valid!",
|
"invalidLanguage":"Ini adalah bahasa yang tidak valid!",
|
||||||
"invalidButton":"Tombol ini harus memiliki setidaknya {0} atau {1}!",
|
"invalidButton":"Tombol ini harus memiliki setidaknya {0} atau {1}!",
|
||||||
"unusedOption":"Opsi {0} tidak digunakan di mana pun!",
|
"unusedOption":"Opsi {0} tidak digunakan di mana pun!",
|
||||||
"unusedQuestion":"Pertanyaan {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":{
|
"actions":{
|
||||||
@@ -132,6 +143,7 @@
|
|||||||
"blacklistAddDm":"Ditambahkan ke Daftar Hitam",
|
"blacklistAddDm":"Ditambahkan ke Daftar Hitam",
|
||||||
"blacklistRemoveDm":"Dihapus dari Daftar Hitam",
|
"blacklistRemoveDm":"Dihapus dari Daftar Hitam",
|
||||||
"clear":"Tiket dibersihkan.",
|
"clear":"Tiket dibersihkan.",
|
||||||
|
"clearTickets":"Bersihkan Tiket",
|
||||||
"roles":"Peran Diperbarui",
|
"roles":"Peran Diperbarui",
|
||||||
|
|
||||||
"autoclose":"Tiket Ditutup Otomatis",
|
"autoclose":"Tiket Ditutup Otomatis",
|
||||||
@@ -139,7 +151,12 @@
|
|||||||
"autocloseDisabled":"Tutup Otomatis Dimatikan",
|
"autocloseDisabled":"Tutup Otomatis Dimatikan",
|
||||||
"autodelete":"Tiket Dihapus Otomatis",
|
"autodelete":"Tiket Dihapus Otomatis",
|
||||||
"autodeleteEnabled":"Hapus Otomatis Diaktifkan",
|
"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":{
|
"descriptions":{
|
||||||
"create":"Tiket kamu telah dibuat. Klik tombol di bawah ini untuk mengaksesnya!",
|
"create":"Tiket kamu telah dibuat. Klik tombol di bawah ini untuk mengaksesnya!",
|
||||||
@@ -154,7 +171,7 @@
|
|||||||
"move":"Tiket telah berhasil dipindahkan ke {0}!",
|
"move":"Tiket telah berhasil dipindahkan ke {0}!",
|
||||||
"add":"{0} telah berhasil ditambahkan ke tiket!",
|
"add":"{0} telah berhasil ditambahkan ke tiket!",
|
||||||
"remove":"{0} telah berhasil dihapus dari tiket!",
|
"remove":"{0} telah berhasil dihapus dari tiket!",
|
||||||
|
|
||||||
"helpExplanation":"`<name>` => parameter wajib\n`[name]` => parameter opsional",
|
"helpExplanation":"`<name>` => parameter wajib\n`[name]` => parameter opsional",
|
||||||
"statsReset":"Statistik bot telah berhasil disetel ulang!",
|
"statsReset":"Statistik bot telah berhasil disetel ulang!",
|
||||||
"statsError":"Tidak dapat melihat statistik tiket!\n{0} bukan tiket!",
|
"statsError":"Tidak dapat melihat statistik tiket!\n{0} bukan tiket!",
|
||||||
@@ -167,7 +184,7 @@
|
|||||||
"clearVerify":"Apakah Anda yakin ingin menghapus beberapa tiket?\nTindakan ini tidak dapat dibatalkan!",
|
"clearVerify":"Apakah Anda yakin ingin menghapus beberapa tiket?\nTindakan ini tidak dapat dibatalkan!",
|
||||||
"clearReady":"Tiket {0} telah berhasil dihapus!",
|
"clearReady":"Tiket {0} telah berhasil dihapus!",
|
||||||
"rolesEmpty":"Tidak ada peran yang telah diperbarui!",
|
"rolesEmpty":"Tidak ada peran yang telah diperbarui!",
|
||||||
|
|
||||||
"autocloseLeave":"tiket ini telah ditutup secara otomatis karena pembuatnya meninggalkan server!",
|
"autocloseLeave":"tiket ini telah ditutup secara otomatis karena pembuatnya meninggalkan server!",
|
||||||
"autocloseTimeout":"tiket ini telah ditutup otomatis karena tidak aktif selama lebih dari `{0} jam`!",
|
"autocloseTimeout":"tiket ini telah ditutup otomatis karena tidak aktif selama lebih dari `{0} jam`!",
|
||||||
"autodeleteLeave":"tiket ini telah dihapus secara otomatis karena pembuatnya meninggalkan server!",
|
"autodeleteLeave":"tiket ini telah dihapus secara otomatis karena pembuatnya meninggalkan server!",
|
||||||
@@ -176,11 +193,16 @@
|
|||||||
"autocloseDisabled":"Penutupan otomatis telah dinonaktifkan untuk tiket ini!\nIt won't be closed automatically anymore!",
|
"autocloseDisabled":"Penutupan otomatis telah dinonaktifkan untuk tiket ini!\nIt won't be closed automatically anymore!",
|
||||||
"autodeleteEnabled":"Penghapsan otomatis telah diaktifkan untuk tiket ini!\nIni akan dihapus jika tidak aktif selama lebih dari `{0} hari`!",
|
"autodeleteEnabled":"Penghapsan otomatis telah diaktifkan untuk tiket ini!\nIni akan dihapus jika tidak aktif selama lebih dari `{0} hari`!",
|
||||||
"autodeleteDisabled":"Penghapusan otomatis telah dinonaktifkan untuk tiket ini!\nTiket ini tidak akan dihapus secara otomatis lagi!",
|
"autodeleteDisabled":"Penghapusan otomatis telah dinonaktifkan untuk tiket ini!\nTiket ini tidak akan dihapus secara otomatis lagi!",
|
||||||
|
|
||||||
"ticketMessageLimit":"Anda hanya dapat membuat {0} tiket pada saat yang bersamaan!",
|
"ticketMessageLimit":"Anda hanya dapat membuat {0} tiket pada saat yang bersamaan!",
|
||||||
"ticketMessageAutoclose":"Tiket ini akan ditutup secara otomatis ketika tidak aktif selama {0} jam!",
|
"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!",
|
"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":{
|
"modal":{
|
||||||
"closePlaceholder":"Mengapa kamu menutup tiket ini?",
|
"closePlaceholder":"Mengapa kamu menutup tiket ini?",
|
||||||
@@ -215,12 +237,19 @@
|
|||||||
"addDm":"{0} telah ditambahkan ke tiket kamu di server kami!",
|
"addDm":"{0} telah ditambahkan ke tiket kamu di server kami!",
|
||||||
"removeLog":"{0} telah dihapus dari tiket ini oleh {1}!",
|
"removeLog":"{0} telah dihapus dari tiket ini oleh {1}!",
|
||||||
"removeDm":"{0} telah dihapus dari tiket kamu di server kami!",
|
"removeDm":"{0} telah dihapus dari tiket kamu di server kami!",
|
||||||
|
|
||||||
"blacklistAddLog":"{0} dimasukkan ke dalam daftar hitam oleh {1}!",
|
"blacklistAddLog":"{0} dimasukkan ke dalam daftar hitam oleh {1}!",
|
||||||
"blacklistRemoveLog":"{0} dihapus dari daftar hitam oleh {1}!",
|
"blacklistRemoveLog":"{0} dihapus dari daftar hitam oleh {1}!",
|
||||||
"blacklistAddDm":"Anda telah masuk ke dalam daftar hitam di server kami!\nMulai sekarang, Anda tidak dapat membuat tiket!",
|
"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!",
|
"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":{
|
"transcripts":{
|
||||||
@@ -241,7 +270,19 @@
|
|||||||
"retry":"Coba Ulang",
|
"retry":"Coba Ulang",
|
||||||
"continue":"Hapus Tanpa Transkrip",
|
"continue":"Hapus Tanpa Transkrip",
|
||||||
"backup":"Membuat Transkrip Cadangan",
|
"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":{
|
"errors":{
|
||||||
@@ -257,7 +298,8 @@
|
|||||||
"unknownPanel":"Panel Tidak Diketahui",
|
"unknownPanel":"Panel Tidak Diketahui",
|
||||||
"notInGuild":"Tidak Berada Di Dalam Server",
|
"notInGuild":"Tidak Berada Di Dalam Server",
|
||||||
"channelRename":"Tidak Dapat Mengganti Nama Saluran",
|
"channelRename":"Tidak Dapat Mengganti Nama Saluran",
|
||||||
"busy":"Tidak Sedang Sibuk"
|
"busy":"Tidak Sedang Sibuk",
|
||||||
|
"permissionError":"Terjadi Kesalahan Hak Akses"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Hubungi pemilik bot ini untuk info lebih lanjut!",
|
"askForInfo":"Hubungi pemilik bot ini untuk info lebih lanjut!",
|
||||||
@@ -272,15 +314,18 @@
|
|||||||
"noPermissionsCooldown":"Anda tidak diperbolehkan menggunakan {0} karena kamu sedang dalam cooldown!",
|
"noPermissionsCooldown":"Anda tidak diperbolehkan menggunakan {0} karena kamu sedang dalam cooldown!",
|
||||||
"noPermissionsBlacklist":"Anda tidak diperbolehkan menggunakan {0} karena Anda telah masuk dalam daftar hitam!",
|
"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!",
|
"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!",
|
"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!",
|
"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!",
|
"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!",
|
"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.",
|
"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}",
|
"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":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Nilai tidak sesuai pola!",
|
"stringRegex":"Nilai tidak sesuai pola!",
|
||||||
@@ -331,7 +376,6 @@
|
|||||||
"added":"Ditambahkan",
|
"added":"Ditambahkan",
|
||||||
"removed":"Dikeluarkan",
|
"removed":"Dikeluarkan",
|
||||||
"filter":"Penyaring",
|
"filter":"Penyaring",
|
||||||
"claimedBy":"Diklaim oleh {0}",
|
|
||||||
"method":"Metode",
|
"method":"Metode",
|
||||||
"type":"Tipe",
|
"type":"Tipe",
|
||||||
"blacklisted":"Daftar hitam",
|
"blacklisted":"Daftar hitam",
|
||||||
@@ -355,7 +399,27 @@
|
|||||||
"status":"Status",
|
"status":"Status",
|
||||||
"claimed":"Diklaim",
|
"claimed":"Diklaim",
|
||||||
"pinned":"Disematkan",
|
"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":{
|
"lowercase":{
|
||||||
"text":"teks",
|
"text":"teks",
|
||||||
@@ -384,6 +448,7 @@
|
|||||||
"unclaim":"Batalkan klaim tiket.",
|
"unclaim":"Batalkan klaim tiket.",
|
||||||
"pin":"Sematkan sebuah tiket.",
|
"pin":"Sematkan sebuah tiket.",
|
||||||
"unpin":"Batalkan penyematan tiket.",
|
"unpin":"Batalkan penyematan tiket.",
|
||||||
|
|
||||||
"move":"Pindahkan tiket.",
|
"move":"Pindahkan tiket.",
|
||||||
"moveId":"Penanda opsi yang ingin anda pindahkan.",
|
"moveId":"Penanda opsi yang ingin anda pindahkan.",
|
||||||
"rename":"Ganti nama tiket.",
|
"rename":"Ganti nama tiket.",
|
||||||
@@ -392,6 +457,7 @@
|
|||||||
"addUser":"Pengguna yang akan ditambahkan.",
|
"addUser":"Pengguna yang akan ditambahkan.",
|
||||||
"remove":"Keluarkan seseorang dari tiket.",
|
"remove":"Keluarkan seseorang dari tiket.",
|
||||||
"removeUser":"Pengguna yang akan dikeluarkan.",
|
"removeUser":"Pengguna yang akan dikeluarkan.",
|
||||||
|
|
||||||
"blacklist":"Kelola the Tiket blacklist.",
|
"blacklist":"Kelola the Tiket blacklist.",
|
||||||
"blacklistView":"Lihat daftar yang masuk ke dalam daftar hitam.",
|
"blacklistView":"Lihat daftar yang masuk ke dalam daftar hitam.",
|
||||||
"blacklistAdd":"Tambahkan seseorang ke dalam daftar hitam.",
|
"blacklistAdd":"Tambahkan seseorang ke dalam daftar hitam.",
|
||||||
@@ -405,6 +471,7 @@
|
|||||||
"statsUserUser":"Pengguna yang akan dilihat.",
|
"statsUserUser":"Pengguna yang akan dilihat.",
|
||||||
"statsTicket":"Lihat status dari sebuah tiket di server.",
|
"statsTicket":"Lihat status dari sebuah tiket di server.",
|
||||||
"statsTicketTicket":"Tiket yang akan dilihat.",
|
"statsTicketTicket":"Tiket yang akan dilihat.",
|
||||||
|
|
||||||
"clear":"Hapus banyak tiket sekaligus.",
|
"clear":"Hapus banyak tiket sekaligus.",
|
||||||
"clearFilter":"Filter untuk menghapus tiket.",
|
"clearFilter":"Filter untuk menghapus tiket.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +484,7 @@
|
|||||||
"unpin":"Pembatalan penyematan",
|
"unpin":"Pembatalan penyematan",
|
||||||
"autoclose":"Ditutup otomatis"
|
"autoclose":"Ditutup otomatis"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Kelola penutupan otomatis tiket.",
|
"autoclose":"Kelola penutupan otomatis tiket.",
|
||||||
"autocloseDisable":"Non-aktifkan penutupan otomatis.",
|
"autocloseDisable":"Non-aktifkan penutupan otomatis.",
|
||||||
"autocloseEnable":"Aktifkan penutupan otomatis.",
|
"autocloseEnable":"Aktifkan penutupan otomatis.",
|
||||||
@@ -424,7 +492,19 @@
|
|||||||
"autodelete":"Kelola penghapusan otomatis tiket.",
|
"autodelete":"Kelola penghapusan otomatis tiket.",
|
||||||
"autodeleteDisable":"Non-aktifkan penghapusan otomatis.",
|
"autodeleteDisable":"Non-aktifkan penghapusan otomatis.",
|
||||||
"autodeleteEnable":"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":{
|
"helpMenu":{
|
||||||
"help":"Dapatkan daftar perintah yang tersedia.",
|
"help":"Dapatkan daftar perintah yang tersedia.",
|
||||||
@@ -452,7 +532,16 @@
|
|||||||
"autocloseDisable":"Nonaktifkan penutupan otomatis.",
|
"autocloseDisable":"Nonaktifkan penutupan otomatis.",
|
||||||
"autocloseEnable":"Aktifkan penutupan otomatis.",
|
"autocloseEnable":"Aktifkan penutupan otomatis.",
|
||||||
"autodeleteDisable":"Non-aktifkan penghapusan 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":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +549,8 @@
|
|||||||
"system":"Status Sistem",
|
"system":"Status Sistem",
|
||||||
"user":"Status Pengguna",
|
"user":"Status Pengguna",
|
||||||
"ticket":"Status Tiket",
|
"ticket":"Status Tiket",
|
||||||
"participants":"Partisipan"
|
"participants":"Partisipan",
|
||||||
|
"messages":"Pesan"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Tiket Dibuat",
|
"ticketsCreated":"Tiket Dibuat",
|
||||||
@@ -472,7 +562,47 @@
|
|||||||
"ticketsPinned":"Tiket Disematkan",
|
"ticketsPinned":"Tiket Disematkan",
|
||||||
"ticketsMoved":"Tickets Dipindahkan",
|
"ticketsMoved":"Tickets Dipindahkan",
|
||||||
"usersBlacklisted":"Pengguna Masuk Ke Dalam Daftar Hitam",
|
"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":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["fraden1mvp."],
|
"translators":["fraden1mvp."],
|
||||||
"lastedited":"08/10/2024",
|
"lastedited":"08/10/2024",
|
||||||
"language":"Italian",
|
"language":"Italian",
|
||||||
|
|||||||
@@ -0,0 +1,608 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.1.1",
|
||||||
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
|
"lastedited":"16/11/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":"この文字列は無効です!",
|
||||||
|
"stringInvertedContains":"この文字列には {0} を含めることはできません!",
|
||||||
|
"stringLowercase":"この文字列はすべて小文字で書かなければなりません!",
|
||||||
|
"stringUppercase":"この文字列はすべて大文字で書かなければなりません!",
|
||||||
|
"stringSpecialCharacters":"この文字列には特殊文字を含めることはできません!(a-z、0-9、スペースのみ)",
|
||||||
|
"stringNoSpaces":"この文字列にはスペースを含めることはできません!",
|
||||||
|
"stringCapitalWord":"この文字列の各単語は大文字で始めることを推奨します!",
|
||||||
|
"stringCapitalSentence":"この文字列の一部の文が大文字で始まっていないようです!",
|
||||||
|
"stringPunctuation":"この文字列の文が句読点で終わっていないようです!",
|
||||||
|
|
||||||
|
"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":"この数値はゼロにできません!",
|
||||||
|
"numberNan":"この数値は NaN(Not A Number)であってはなりません!",
|
||||||
|
"numberInvertedContains":"この数値には {0} を含めることはできません!",
|
||||||
|
|
||||||
|
"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」タイプのオプションのみ含めることができます!",
|
||||||
|
"customInvalidVersion":"設定ファイルに指定されたバージョンが一致しません! 設定を最新バージョンに更新してください!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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":"チケットが一括削除されました",
|
||||||
|
"clearTickets":"チケットをクリア",
|
||||||
|
"roles":"ロールが更新されました",
|
||||||
|
|
||||||
|
"autoclose":"チケットが自動閉じされました",
|
||||||
|
"autocloseEnabled":"自動閉じが有効化されました",
|
||||||
|
"autocloseDisabled":"自動閉じが無効化されました",
|
||||||
|
"autodelete":"チケットが自動削除されました",
|
||||||
|
"autodeleteEnabled":"自動削除が有効化されました",
|
||||||
|
"autodeleteDisabled":"自動削除が無効化されました",
|
||||||
|
|
||||||
|
"topicSet":"トピックが変更されました",
|
||||||
|
"prioritySet":"優先度が変更されました",
|
||||||
|
"priorityGet":"チケットの優先度",
|
||||||
|
"transfer":"チケットが転送されました"
|
||||||
|
},
|
||||||
|
"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このメッセージは削除しても構いません!",
|
||||||
|
|
||||||
|
"topicSet":"チャンネルのトピックは {0} によって正常に変更されました!",
|
||||||
|
"prioritySet":"チケットの優先度は {1} により {0} に正常に変更されました!",
|
||||||
|
"priorityGet":"このチケットの現在の優先度は {0} です。",
|
||||||
|
"transfer":"チケットの所有権は {2} によって {0} から {1} に正常に転送されました!"
|
||||||
|
},
|
||||||
|
"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}件のチケットが削除されました!",
|
||||||
|
|
||||||
|
"transferLog":"このチケットの所有権は {2} によって {0} から {1} に転送されました!",
|
||||||
|
"transferDm":"あなたのチケットの所有権はサーバー内で {0} から {1} に転送されました!",
|
||||||
|
"prioritySetLog":"このチケットの優先度は {1} により {0} に変更されました!",
|
||||||
|
"prioritySetDm":"あなたのチケットの優先度はサーバー内で {0} に変更されました!",
|
||||||
|
"roleUpdateLog":"{0} がロールを更新しました!",
|
||||||
|
"roleUpdateDm":"サーバー内のあなたのロールが更新されました!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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いずれかのボタンをクリックするまでチケットは削除されません。",
|
||||||
|
"title":"トランスクリプトエラー"
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"メッセージ",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"ファイル",
|
||||||
|
"fieldsTitle":"フィールド",
|
||||||
|
"reactionsTitle":"リアクション",
|
||||||
|
"statsTitle":"統計",
|
||||||
|
"emptyContent":"<内容は空です>",
|
||||||
|
"noTitle":"<タイトルなし>",
|
||||||
|
"noDesc":"<説明なし>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors":{
|
||||||
|
"titles":{
|
||||||
|
"internalError":"内部エラー",
|
||||||
|
"optionMissing":"コマンドオプションが不足",
|
||||||
|
"optionInvalid":"無効なコマンドオプション",
|
||||||
|
"unknownCommand":"不明なコマンド",
|
||||||
|
"noPermissions":"権限がありません",
|
||||||
|
"unknownTicket":"不明なチケット",
|
||||||
|
"deprecatedTicket":"非推奨のチケット",
|
||||||
|
"unknownOption":"不明なオプション",
|
||||||
|
"unknownPanel":"不明なパネル",
|
||||||
|
"notInGuild":"サーバー内にいません",
|
||||||
|
"channelRename":"チャンネル名を変更できません",
|
||||||
|
"busy":"チケットは使用中です",
|
||||||
|
"permissionError":"権限エラー"
|
||||||
|
},
|
||||||
|
"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数秒後にもう一度お試しください!",
|
||||||
|
"closeBeforeMessage":"ユーザーがメッセージを送信する前に、このチケットを閉じたり削除したりすることはできません。",
|
||||||
|
"closeBeforeAdminMessage":"チケット管理者またはサポートメンバーがメッセージを送信する前に、このチケットを閉じたり削除したりすることはできません。",
|
||||||
|
"unableToCreateTicket":"チケットを作成することはできません。"
|
||||||
|
},
|
||||||
|
"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":"フィルター",
|
||||||
|
"method":"方法",
|
||||||
|
"type":"タイプ",
|
||||||
|
"blacklisted":"ブラックリスト",
|
||||||
|
"panel":"パネル",
|
||||||
|
"command":"コマンド",
|
||||||
|
"system":"システム",
|
||||||
|
"true":"はい",
|
||||||
|
"false":"いいえ",
|
||||||
|
"syntax":"構文",
|
||||||
|
"originalName":"元の名前",
|
||||||
|
"newName":"新しい名前",
|
||||||
|
"until":"期限",
|
||||||
|
"validOptions":"有効なオプション",
|
||||||
|
"validPanels":"有効なパネル",
|
||||||
|
"autoclose":"自動閉じ",
|
||||||
|
"autodelete":"自動削除",
|
||||||
|
"startupDate":"起動日時",
|
||||||
|
"version":"バージョン",
|
||||||
|
"name":"名前",
|
||||||
|
"role":"ロール",
|
||||||
|
"status":"ステータス",
|
||||||
|
"claimed":"引き受け済み",
|
||||||
|
"pinned":"ピン留め済み",
|
||||||
|
"creationDate":"作成日時",
|
||||||
|
|
||||||
|
"noone":"該当なし",
|
||||||
|
"open":"オープン",
|
||||||
|
"closed":"クローズ",
|
||||||
|
"priority":"優先度",
|
||||||
|
"participants":"参加者",
|
||||||
|
"yes":"はい",
|
||||||
|
"no":"いいえ",
|
||||||
|
"option":"オプション",
|
||||||
|
"topic":"トピック",
|
||||||
|
"uptime":"システム稼働時間",
|
||||||
|
"messages":"メッセージ",
|
||||||
|
"embeds":"埋め込み",
|
||||||
|
"files":"ファイル",
|
||||||
|
"components":"コンポーネント",
|
||||||
|
"cooldown":"クールダウン",
|
||||||
|
"maxTickets":"最大チケット数",
|
||||||
|
"admins":"管理者",
|
||||||
|
"roles":"ロール",
|
||||||
|
"size":"サイズ"
|
||||||
|
},
|
||||||
|
"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":"チケットを自動削除する非アクティブ時間(日単位)。",
|
||||||
|
|
||||||
|
"topic":"チケットチャネルのトピックを管理します。",
|
||||||
|
"topicSet":"チケットチャネルのトピックを設定します。",
|
||||||
|
"topicValue":"チャンネルの新しいトピック。",
|
||||||
|
"topicList":"すべてのチケットをトピックと統計付きで一覧表示します。",
|
||||||
|
"priority":"チケットの優先度を管理します。",
|
||||||
|
"prioritySet":"チケットの優先度を設定します。",
|
||||||
|
"priorityValue":"チャンネルの優先度。",
|
||||||
|
"priorityGet":"チケットの優先度を取得します。",
|
||||||
|
"priorityList":"すべてのチケットを優先度ステータス付きで一覧表示します。",
|
||||||
|
"transfer":"チケットの所有権を別のユーザーに転送します。",
|
||||||
|
"transferUser":"転送先のユーザー。"
|
||||||
|
},
|
||||||
|
"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":"このチケットの自動削除を有効にします。",
|
||||||
|
"categories":{
|
||||||
|
"general":"一般コマンド",
|
||||||
|
"basicTicket":"基本チケットコマンド",
|
||||||
|
"advancedTicket":"高度なチケットコマンド",
|
||||||
|
"userTicket":"ユーザーチケットコマンド",
|
||||||
|
"admin":"管理者コマンド",
|
||||||
|
"advanced":"高度なコマンド",
|
||||||
|
"extra":"追加コマンド"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"scopes":{
|
||||||
|
"global":"全体統計",
|
||||||
|
"system":"システム統計",
|
||||||
|
"user":"ユーザー統計",
|
||||||
|
"ticket":"チケット統計",
|
||||||
|
"participants":"参加者",
|
||||||
|
"messages":"メッセージ"
|
||||||
|
},
|
||||||
|
"properties":{
|
||||||
|
"ticketsCreated":"作成済みチケット",
|
||||||
|
"ticketsClosed":"閉じ済みチケット",
|
||||||
|
"ticketsDeleted":"削除済みチケット",
|
||||||
|
"ticketsReopened":"再開済みチケット",
|
||||||
|
"ticketsAutoclosed":"自動閉じ済みチケット",
|
||||||
|
"ticketsClaimed":"引き受け済みチケット",
|
||||||
|
"ticketsPinned":"ピン留め済みチケット",
|
||||||
|
"ticketsMoved":"移動済みチケット",
|
||||||
|
"usersBlacklisted":"ブラックリストユーザー",
|
||||||
|
"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":"なし"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,608 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.1.1",
|
||||||
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
|
"lastedited":"16/11/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":"이 문자열은 유효하지 않습니다!",
|
||||||
|
"stringInvertedContains":"이 문자열에는 {0}을(를) 포함할 수 없습니다!",
|
||||||
|
"stringLowercase":"이 문자열은 소문자로만 작성되어야 합니다!",
|
||||||
|
"stringUppercase":"이 문자열은 대문자로만 작성되어야 합니다!",
|
||||||
|
"stringSpecialCharacters":"이 문자열에는 특수 문자를 포함할 수 없습니다! (a-z, 0-9 및 공백만 허용)",
|
||||||
|
"stringNoSpaces":"이 문자열에는 공백을 포함할 수 없습니다!",
|
||||||
|
"stringCapitalWord":"이 문자열의 각 단어는 대문자로 시작하는 것이 좋습니다!",
|
||||||
|
"stringCapitalSentence":"이 문자열의 일부 문장이 대문자로 시작하지 않는 것 같습니다!",
|
||||||
|
"stringPunctuation":"이 문자열의 문장이 문장 부호로 끝나지 않는 것 같습니다!",
|
||||||
|
|
||||||
|
"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일 수 없습니다!",
|
||||||
|
"numberNan":"이 숫자는 NaN(Not A Number)이 될 수 없습니다!",
|
||||||
|
"numberInvertedContains":"이 숫자에는 {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' 유형의 옵션만 포함할 수 있습니다!",
|
||||||
|
"customInvalidVersion":"구성 파일에 지정된 버전이 일치하지 않습니다! 구성 파일을 최신 버전으로 업데이트했는지 확인하세요!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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":"티켓 삭제됨",
|
||||||
|
"clearTickets":"티켓 초기화",
|
||||||
|
"roles":"역할 업데이트됨",
|
||||||
|
|
||||||
|
"autoclose":"티켓 자동 닫힘",
|
||||||
|
"autocloseEnabled":"자동 닫기 활성화됨",
|
||||||
|
"autocloseDisabled":"자동 닫기 비활성화됨",
|
||||||
|
"autodelete":"티켓 자동 삭제됨",
|
||||||
|
"autodeleteEnabled":"자동 삭제 활성화됨",
|
||||||
|
"autodeleteDisabled":"자동 삭제 비활성화됨",
|
||||||
|
|
||||||
|
"topicSet":"주제가 변경됨",
|
||||||
|
"prioritySet":"우선순위 변경됨",
|
||||||
|
"priorityGet":"티켓 우선순위",
|
||||||
|
"transfer":"티켓이 전송됨"
|
||||||
|
},
|
||||||
|
"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이 메시지는 삭제해도 됩니다!",
|
||||||
|
|
||||||
|
"topicSet":"채널 주제가 {0}에 의해 성공적으로 변경되었습니다!",
|
||||||
|
"prioritySet":"티켓 우선순위가 {1}에 의해 {0}(으)로 성공적으로 변경되었습니다!",
|
||||||
|
"priorityGet":"이 티켓의 현재 우선순위는 {0}입니다.",
|
||||||
|
"transfer":"티켓 소유권이 {2}에 의해 {0}에서 {1}(으)로 성공적으로 전송되었습니다!"
|
||||||
|
},
|
||||||
|
"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}에 의해 삭제되었습니다!",
|
||||||
|
|
||||||
|
"transferLog":"이 티켓의 소유권이 {2}에 의해 {0}에서 {1}(으)로 전송되었습니다!",
|
||||||
|
"transferDm":"귀하의 티켓 소유권이 서버에서 {0}에서 {1}(으)로 전송되었습니다!",
|
||||||
|
"prioritySetLog":"이 티켓의 우선순위가 {1}에 의해 {0}(으)로 변경되었습니다!",
|
||||||
|
"prioritySetDm":"귀하의 티켓 우선순위가 서버에서 {0}(으)로 변경되었습니다!",
|
||||||
|
"roleUpdateLog":"{0}님이 자신의 역할을 업데이트했습니다!",
|
||||||
|
"roleUpdateDm":"서버에서 귀하의 역할이 업데이트되었습니다!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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아래 버튼 중 하나를 클릭할 때까지 이 티켓은 삭제되지 않습니다.",
|
||||||
|
"title":"기록 오류"
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"메시지",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"파일",
|
||||||
|
"fieldsTitle":"필드",
|
||||||
|
"reactionsTitle":"반응",
|
||||||
|
"statsTitle":"통계",
|
||||||
|
"emptyContent":"<내용 없음>",
|
||||||
|
"noTitle":"<제목 없음>",
|
||||||
|
"noDesc":"<설명 없음>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors":{
|
||||||
|
"titles":{
|
||||||
|
"internalError":"내부 오류",
|
||||||
|
"optionMissing":"명령어 옵션 누락",
|
||||||
|
"optionInvalid":"명령어 옵션 무효",
|
||||||
|
"unknownCommand":"알 수 없는 명령어",
|
||||||
|
"noPermissions":"권한 없음",
|
||||||
|
"unknownTicket":"알 수 없는 티켓",
|
||||||
|
"deprecatedTicket":"구버전 티켓",
|
||||||
|
"unknownOption":"알 수 없는 옵션",
|
||||||
|
"unknownPanel":"알 수 없는 패널",
|
||||||
|
"notInGuild":"서버에 없음",
|
||||||
|
"channelRename":"채널 이름 변경 불가",
|
||||||
|
"busy":"티켓 사용 중",
|
||||||
|
"permissionError":"권한 오류"
|
||||||
|
},
|
||||||
|
"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몇 초 후에 다시 시도하세요!",
|
||||||
|
"closeBeforeMessage":"사용자가 메시지를 보내기 전에는 이 티켓을 닫거나 삭제할 수 없습니다.",
|
||||||
|
"closeBeforeAdminMessage":"티켓 관리자 또는 지원 팀원이 메시지를 보내기 전에는 이 티켓을 닫거나 삭제할 수 없습니다.",
|
||||||
|
"unableToCreateTicket":"티켓을 생성할 수 없습니다."
|
||||||
|
},
|
||||||
|
"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":"필터",
|
||||||
|
"method":"방법",
|
||||||
|
"type":"유형",
|
||||||
|
"blacklisted":"블랙리스트됨",
|
||||||
|
"panel":"패널",
|
||||||
|
"command":"명령어",
|
||||||
|
"system":"시스템",
|
||||||
|
"true":"참",
|
||||||
|
"false":"거짓",
|
||||||
|
"syntax":"구문",
|
||||||
|
"originalName":"원래 이름",
|
||||||
|
"newName":"새 이름",
|
||||||
|
"until":"까지",
|
||||||
|
"validOptions":"유효한 옵션",
|
||||||
|
"validPanels":"유효한 패널",
|
||||||
|
"autoclose":"자동 닫기",
|
||||||
|
"autodelete":"자동 삭제",
|
||||||
|
"startupDate":"시작 일자",
|
||||||
|
"version":"버전",
|
||||||
|
"name":"이름",
|
||||||
|
"role":"역할",
|
||||||
|
"status":"상태",
|
||||||
|
"claimed":"가져옴",
|
||||||
|
"pinned":"고정됨",
|
||||||
|
"creationDate":"생성 일자",
|
||||||
|
|
||||||
|
"noone":"없음",
|
||||||
|
"open":"열림",
|
||||||
|
"closed":"닫힘",
|
||||||
|
"priority":"우선순위",
|
||||||
|
"participants":"참가자",
|
||||||
|
"yes":"예",
|
||||||
|
"no":"아니오",
|
||||||
|
"option":"옵션",
|
||||||
|
"topic":"주제",
|
||||||
|
"uptime":"시스템 가동 시간",
|
||||||
|
"messages":"메시지",
|
||||||
|
"embeds":"임베드",
|
||||||
|
"files":"파일",
|
||||||
|
"components":"컴포넌트",
|
||||||
|
"cooldown":"쿨다운",
|
||||||
|
"maxTickets":"최대 티켓 수",
|
||||||
|
"admins":"관리자",
|
||||||
|
"roles":"역할",
|
||||||
|
"size":"크기"
|
||||||
|
},
|
||||||
|
"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":"이 티켓이 비활성 상태일 때 삭제할 시간(일 단위)입니다.",
|
||||||
|
|
||||||
|
"topic":"티켓 채널의 주제를 관리합니다.",
|
||||||
|
"topicSet":"티켓 채널의 주제를 설정합니다.",
|
||||||
|
"topicValue":"채널의 새 주제입니다.",
|
||||||
|
"topicList":"모든 티켓의 주제와 통계를 목록으로 가져옵니다.",
|
||||||
|
"priority":"티켓의 우선순위를 관리합니다.",
|
||||||
|
"prioritySet":"티켓의 우선순위를 설정합니다.",
|
||||||
|
"priorityValue":"채널의 우선순위입니다.",
|
||||||
|
"priorityGet":"티켓의 우선순위를 가져옵니다.",
|
||||||
|
"priorityList":"모든 티켓의 우선순위 상태를 목록으로 가져옵니다.",
|
||||||
|
"transfer":"티켓 소유권을 다른 사용자에게 전송합니다.",
|
||||||
|
"transferUser":"전송할 사용자입니다."
|
||||||
|
},
|
||||||
|
"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":"이 티켓에서 자동 삭제를 활성화하세요.",
|
||||||
|
"categories":{
|
||||||
|
"general":"일반 명령어",
|
||||||
|
"basicTicket":"기본 티켓 명령어",
|
||||||
|
"advancedTicket":"고급 티켓 명령어",
|
||||||
|
"userTicket":"사용자 티켓 명령어",
|
||||||
|
"admin":"관리자 명령어",
|
||||||
|
"advanced":"고급 명령어",
|
||||||
|
"extra":"추가 명령어"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"scopes":{
|
||||||
|
"global":"전체 통계",
|
||||||
|
"system":"시스템 통계",
|
||||||
|
"user":"사용자 통계",
|
||||||
|
"ticket":"티켓 통계",
|
||||||
|
"participants":"참여자",
|
||||||
|
"messages":"메시지"
|
||||||
|
},
|
||||||
|
"properties":{
|
||||||
|
"ticketsCreated":"생성된 티켓",
|
||||||
|
"ticketsClosed":"닫힌 티켓",
|
||||||
|
"ticketsDeleted":"삭제된 티켓",
|
||||||
|
"ticketsReopened":"다시 열린 티켓",
|
||||||
|
"ticketsAutoclosed":"자동 닫힌 티켓",
|
||||||
|
"ticketsClaimed":"가져가진 티켓",
|
||||||
|
"ticketsPinned":"고정된 티켓",
|
||||||
|
"ticketsMoved":"이동된 티켓",
|
||||||
|
"usersBlacklisted":"블랙리스트된 사용자",
|
||||||
|
"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":"없음"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,608 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.1.1",
|
||||||
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
|
"lastedited":"16/11/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!",
|
||||||
|
"stringInvertedContains":"Ev rêze ne destûr e ku {0} tê de be!",
|
||||||
|
"stringLowercase":"Ev rêze tenê divê bi tîpên piçûk binivîse!",
|
||||||
|
"stringUppercase":"Ev rêze tenê divê bi tîpên mezin binivîse!",
|
||||||
|
"stringSpecialCharacters":"Ev rêze ne destûr e ku tîpên taybetî tê de be! (tenê a-z, 0-9 û boşî)",
|
||||||
|
"stringNoSpaces":"Ev rêze ne destûr e ku boşî tê de be!",
|
||||||
|
"stringCapitalWord":"Pêşniyar e ku her peyv li vir bi tîpa mezin dest pê bike!",
|
||||||
|
"stringCapitalSentence":"Wekî xuya dike hin cûmeyên ev rêze bi tîpa mezin dest pê nakin!",
|
||||||
|
"stringPunctuation":"Wekî xuya dike cûmeya ev rêze bi nişana xwerû dawi nakin!",
|
||||||
|
|
||||||
|
"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!",
|
||||||
|
"numberNan":"Ev hejmar nikare NaN (Not A Number) be!",
|
||||||
|
"numberInvertedContains":"Ev hejmar ne destûr e ku {0} tê de 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!",
|
||||||
|
"urlInvalidHttp":"Ev URL tenê dikare protokola https:// bikar bîne!",
|
||||||
|
"urlInvalidProtocol":"Ev URL tenê dikare protokolên http:// û https:// bikar bîne!",
|
||||||
|
"urlInvalidHostname":"Ev URL hostname-eke qebûl nekirî heye!",
|
||||||
|
"urlInvalidExtension":"Ev URL pêvekî nederbasdar heye! Di navbera vanan hilbijêre: {0}!",
|
||||||
|
"urlInvalidPath":"Ev URL rêgeheke nederbasdar heye!",
|
||||||
|
"idNotUnique":"Ev ID taybetî nîne, ji kerema xwe ID-eke din bikar bîne!",
|
||||||
|
"idNonExistent":"ID {0} tune ye!",
|
||||||
|
|
||||||
|
"invalidType":"Ev taybetmendî divê ji celebê: {0} be!",
|
||||||
|
"propertyMissing":"Taybetmendiya {0} ji vê objekê têk çûye!",
|
||||||
|
"propertyOptional":"Taybetmendiya {0} li vê objekê hêwce nîne!",
|
||||||
|
"objectDisabled":"Ev objek hate girtin, bi karanîna {0} veke!",
|
||||||
|
"nullInvalid":"Ev taybetmendî nikare null be!",
|
||||||
|
"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!",
|
||||||
|
"customInvalidVersion":"Wersiyona ku di configê te de hate qeyd kirin ne hevrû ye! Pêwîste ku configê xwe bi dawîna nûvekirî nûve bikin!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
"clearTickets":"Pak Kirina Tickets",
|
||||||
|
"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",
|
||||||
|
|
||||||
|
"topicSet":"Mijar Guherî",
|
||||||
|
"prioritySet":"Pêşî Guherî",
|
||||||
|
"priorityGet":"Pêşîya Ticket",
|
||||||
|
"transfer":"Ticket Veguhastin"
|
||||||
|
},
|
||||||
|
"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":"Panel li peyamê piştgirê de amade ye!\nEv peyam niha dikare jê birin!",
|
||||||
|
|
||||||
|
"topicSet":"Mijara kanala bi serfirazî ji {0} hate guhertin!",
|
||||||
|
"prioritySet":"Pêşîya ticket bi serfirazî hate guhertin bo {0} ji {1}!",
|
||||||
|
"priorityGet":"Pêşîya niha ya vê ticketê {0} e.",
|
||||||
|
"transfer":"Mulkê ticketê bi serfirazî ji {0} veguherîye bo {1} ji {2}!"
|
||||||
|
},
|
||||||
|
"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!",
|
||||||
|
|
||||||
|
"transferLog":"Mulkê vê ticketê ji {0} bo {1} ji {2} veguherîye!",
|
||||||
|
"transferDm":"Mulkê ticketê te di serverê me de ji {0} bo {1} veguherîye!",
|
||||||
|
"prioritySetLog":"Pêşîya vê ticketê ji {1} bo {0} hate guhertin!",
|
||||||
|
"prioritySetDm":"Pêşîya ticketê te di serverê me de hate guhertin bo {0}!",
|
||||||
|
"roleUpdateLog":"{0} rolên xwe nûve kir!",
|
||||||
|
"roleUpdateDm":"Rolên te di serverê me de nûve 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.",
|
||||||
|
"title":"Xeletiya Transkriptê"
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"PEYAMAN",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"PEL",
|
||||||
|
"fieldsTitle":"QADA",
|
||||||
|
"reactionsTitle":"BERDAWANÎ",
|
||||||
|
"statsTitle":"STATÎSTÎK",
|
||||||
|
"emptyContent":"<nawtê vala ye>",
|
||||||
|
"noTitle":"<bê-sernav>",
|
||||||
|
"noDesc":"<bê-danîştin>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
"permissionError":"Xeletiya Destûrê"
|
||||||
|
},
|
||||||
|
"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!",
|
||||||
|
"closeBeforeMessage":"Ev ticket nikare were girtin/jêbirin berî ku bikarhêner peyamê şandibe.",
|
||||||
|
"closeBeforeAdminMessage":"Ev ticket nikare were girtin/jêbirin berî ku adminê ticket an endamê piştgirî peyamê şandibe.",
|
||||||
|
"unableToCreateTicket":"Tu nikarî ticket çê bikî."
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
"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ê",
|
||||||
|
|
||||||
|
"noone":"Tu Kesî",
|
||||||
|
"open":"Vekirî",
|
||||||
|
"closed":"Girtî",
|
||||||
|
"priority":"Pêşî",
|
||||||
|
"participants":"Beşdar",
|
||||||
|
"yes":"Erê",
|
||||||
|
"no":"Na",
|
||||||
|
"option":"Vebijêrk",
|
||||||
|
"topic":"Mijar",
|
||||||
|
"uptime":"Demjimêra Sistêmê",
|
||||||
|
"messages":"Peyaman",
|
||||||
|
"embeds":"Embedan",
|
||||||
|
"files":"Pelan",
|
||||||
|
"components":"Parçeyên",
|
||||||
|
"cooldown":"Sarmaze",
|
||||||
|
"maxTickets":"Herî Zêde Ticket",
|
||||||
|
"admins":"Adminan",
|
||||||
|
"roles":"Rolên",
|
||||||
|
"size":"Mezinahî"
|
||||||
|
},
|
||||||
|
"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.",
|
||||||
|
|
||||||
|
"topic":"Mijara kanala ticketê rêve bibin.",
|
||||||
|
"topicSet":"Mijara kanala ticketê danîn.",
|
||||||
|
"topicValue":"Mijara nû ya kanala.",
|
||||||
|
"topicList":"Lîsteya hemû ticketan bi mijar û statîstîkê wan bistînin.",
|
||||||
|
"priority":"Pêşîya ticketê rêve bibin.",
|
||||||
|
"prioritySet":"Pêşîya ticketê danîn.",
|
||||||
|
"priorityValue":"Pêşîya kanala.",
|
||||||
|
"priorityGet":"Pêşîya ticketê bistînin.",
|
||||||
|
"priorityList":"Lîsteya hemû ticketan bi rewşa pêşîyan bistînin.",
|
||||||
|
"transfer":"Mulkê ticketê ji yek bikarhêner bo yê din veguherîn.",
|
||||||
|
"transferUser":"Bikarhêner ku divê veguherîn."
|
||||||
|
},
|
||||||
|
"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.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Fermanên Giştî",
|
||||||
|
"basicTicket":"Fermanên Bingehîn Ticket",
|
||||||
|
"advancedTicket":"Fermanên Pêşkeftî Ticket",
|
||||||
|
"userTicket":"Fermanên Ticket Bikarhêner",
|
||||||
|
"admin":"Fermanên Admin",
|
||||||
|
"advanced":"Fermanên Pêşkeftî",
|
||||||
|
"extra":"Fermanên Zêde"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
"messages":"Peyaman"
|
||||||
|
},
|
||||||
|
"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î",
|
||||||
|
"ticketsAutodeleted":"Ticketan Bi Xwe Jêbirin",
|
||||||
|
"ticketsTransferred":"Ticketan Veguhastin",
|
||||||
|
"ticketVolume":"Hejmara Ticketan",
|
||||||
|
"averageTickets":"Navîça Ticket/ Bikarhêner",
|
||||||
|
"currentTickets":"Ticketên Niha",
|
||||||
|
"age":"Temenê Ticketê",
|
||||||
|
"responseTime":"Demê Bersivdanê",
|
||||||
|
"resolutionTime":"Demê Çareserkirinê",
|
||||||
|
"createdOn":"Lêhatin Çêkirin",
|
||||||
|
"createdBy":"Çêker",
|
||||||
|
"closedOn":"Girtin",
|
||||||
|
"closedBy":"Girtî Ji",
|
||||||
|
"claimedOn":"Guhertin",
|
||||||
|
"claimedBy":"Guhertî Ji",
|
||||||
|
"pinnedOn":"Pin Kirin",
|
||||||
|
"pinnedBy":"Pin Kirî Ji",
|
||||||
|
"deletedOn":"Jêbirin",
|
||||||
|
"deletedBy":"Jêbirî Ji"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Pêşkeftkar",
|
||||||
|
"serverOwner":"Xwedî Server",
|
||||||
|
"serverAdmin":"Admin Server",
|
||||||
|
"moderator":"Tîma Moderator",
|
||||||
|
"support":"Tîma Piştgirî",
|
||||||
|
"member":"Endam"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Ticketê xwe hilbijêrin",
|
||||||
|
"selectRole":"Rolê xwe hilbijêrin",
|
||||||
|
"selectOption":"Vebijêrka xwe hilbijêrin"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Zû",
|
||||||
|
"veryHigh":"Pir Bilind",
|
||||||
|
"high":"Bilind",
|
||||||
|
"normal":"Normal",
|
||||||
|
"low":"Kêm",
|
||||||
|
"veryLow":"Pir Kêm",
|
||||||
|
"none":"Tiştekî Nîne"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,478 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION": {
|
||||||
|
"otversion": "v4.1.1",
|
||||||
|
"translators": ["NoOneNook"],
|
||||||
|
"lastedited": "25/03/2025",
|
||||||
|
"language": "Latvian",
|
||||||
|
"automated": false
|
||||||
|
},
|
||||||
|
"checker": {
|
||||||
|
"system": {
|
||||||
|
"typeError": "[KĻŪDA]",
|
||||||
|
"headerOpenTicket": "ATVĒRT BIĻETI",
|
||||||
|
"typeWarning": "[BRĪDINĀJUMS]",
|
||||||
|
"typeInfo": "[INFORMĀCIJA]",
|
||||||
|
"headerConfigChecker": "KONFIGURĀCIJAS PĀRBAUDĪTĀJS",
|
||||||
|
"headerDescription": "pārbaudiet kļūdas savos konfigurācijas failos!",
|
||||||
|
"footerError": "bots netiks startēts, kamēr visas {0} nebūs izlabotas!",
|
||||||
|
"footerWarning": "ieteicams izlabot visas {0} pirms startēšanas!",
|
||||||
|
"footerSupport": "ATBALSTS: {0} - DOKUMENTI: {1}",
|
||||||
|
"compactInformation": "izmantojiet {0}, lai iegūtu vairāk informācijas!",
|
||||||
|
"dataPath": "ceļš",
|
||||||
|
"dataDocs": "dokumenti",
|
||||||
|
"dataMessages": "ziņojums"
|
||||||
|
},
|
||||||
|
"messages": {
|
||||||
|
"stringTooShort": "Šis teksts nedrīkst būt īsāks par {0} rakstzīmēm!",
|
||||||
|
"stringTooLong": "Šis teksts nedrīkst būt garāks par {0} rakstzīmēm!",
|
||||||
|
"stringLengthInvalid": "Šim tekstam jābūt {0} rakstzīmju garam!",
|
||||||
|
"stringStartsWith": "Šim tekstam jāsākas ar {0}!",
|
||||||
|
"stringEndsWith": "Šim tekstam jābeidzas ar {0}!",
|
||||||
|
"stringContains": "Šim tekstam jāsatur {0}!",
|
||||||
|
"stringChoices": "Šis teksts var būt tikai viena no šīm vērtībām: {0}!",
|
||||||
|
"stringRegex": "Šis teksts ir nederīgs!",
|
||||||
|
|
||||||
|
"numberTooShort": "Šis skaitlis nedrīkst būt īsāks par {0} rakstzīmēm!",
|
||||||
|
"numberTooLong": "Šis skaitlis nedrīkst būt garāks par {0} rakstzīmēm!",
|
||||||
|
"numberLengthInvalid": "Šim skaitlim jābūt {0} rakstzīmju garam!",
|
||||||
|
"numberTooSmall": "Šim skaitlim jābūt vismaz {0}!",
|
||||||
|
"numberTooLarge": "Šim skaitlim jābūt ne vairāk kā {0}!",
|
||||||
|
"numberNotEqual": "Šim skaitlim jābūt {0}!",
|
||||||
|
"numberStep": "Šim skaitlim jābūt {0} reizinājumam!",
|
||||||
|
"numberStepOffset": "Šim skaitlim jābūt {0} reizinājumam, sākot ar {1}!",
|
||||||
|
"numberStartsWith": "Šim skaitlim jāsākas ar {0}!",
|
||||||
|
"numberEndsWith": "Šim skaitlim jābeidzas ar {0}!",
|
||||||
|
"numberContains": "Šim skaitlim jāsatur {0}!",
|
||||||
|
"numberChoices": "Šis skaitlis var būt tikai viena no šīm vērtībām: {0}!",
|
||||||
|
"numberFloat": "Šis skaitlis nedrīkst būt decimāldaļa!",
|
||||||
|
"numberNegative": "Šis skaitlis nedrīkst būt negatīvs!",
|
||||||
|
"numberPositive": "Šis skaitlis nedrīkst būt pozitīvs!",
|
||||||
|
"numberZero": "Šis skaitlis nedrīkst būt nulle!",
|
||||||
|
|
||||||
|
"booleanTrue": "Šis loģiskais mainīgais nedrīkst būt patiess!",
|
||||||
|
"booleanFalse": "Šis loģiskais mainīgais nedrīkst būt nepatiess!",
|
||||||
|
|
||||||
|
"arrayEmptyDisabled": "Šis masīvs nedrīkst būt tukšs!",
|
||||||
|
"arrayEmptyRequired": "Šim masīvam jābūt tukšam!",
|
||||||
|
"arrayTooShort": "Šim masīvam jābūt vismaz {0} garam!",
|
||||||
|
"arrayTooLong": "Šim masīvam jābūt ne garākam par {0}!",
|
||||||
|
"arrayLengthInvalid": "Šim masīvam jābūt {0} garam!",
|
||||||
|
"arrayInvalidTypes": "Šis masīvs var saturēt tikai šādus tipus: {0}!",
|
||||||
|
"arrayDouble": "Šis masīvs neatļauj vienādas vērtības divreiz!",
|
||||||
|
|
||||||
|
"discordInvalidId": "Šis ir nederīgs Discord {0} ID!",
|
||||||
|
"discordInvalidIdOptions": "Šis ir nederīgs Discord {0} ID! Jūs varat izmantot arī kādu no šiem: {1}!",
|
||||||
|
"discordInvalidToken": "Šis ir nederīgs Discord tokens (sintaktiski)!",
|
||||||
|
"colorInvalid": "Šī ir nederīga heksadecimālā krāsa!",
|
||||||
|
"emojiTooShort": "Šim tekstam jābūt vismaz {0} emocijzīmēm!",
|
||||||
|
"emojiTooLong": "Šim tekstam jābūt ne vairāk kā {0} emocijzīmēm!",
|
||||||
|
"emojiCustom": "Šī emocijzīme nedrīkst būt pielāgota Discord emocijzīme!",
|
||||||
|
"emojiInvalid": "Šī ir nederīga emocijzīme!",
|
||||||
|
"urlInvalid": "Šī URL ir nederīga!",
|
||||||
|
"urlInvalidHttp": "Šī URL var izmantot tikai https:// protokolu!",
|
||||||
|
"urlInvalidProtocol": "Šī URL var izmantot tikai http:// un https:// protokolus!",
|
||||||
|
"urlInvalidHostname": "Šai URL ir neatļauts resursdatora nosaukums!",
|
||||||
|
"urlInvalidExtension": "Šai URL ir nederīgs paplašinājums! Izvēlieties starp: {0}!",
|
||||||
|
"urlInvalidPath": "Šai URL ir nederīgs ceļš!",
|
||||||
|
"idNotUnique": "Šis ID nav unikāls, izmantojiet citu ID!",
|
||||||
|
"idNonExistent": "ID {0} neeksistē!",
|
||||||
|
|
||||||
|
"invalidType": "Šai īpašībai jābūt tipam: {0}!",
|
||||||
|
"propertyMissing": "Īpašība {0} trūkst šajā objektā!",
|
||||||
|
"propertyOptional": "Īpašība {0} šajā objektā ir izvēles!",
|
||||||
|
"objectDisabled": "Šis objekts ir atspējots, aktivizējiet to, izmantojot {0}!",
|
||||||
|
"nullInvalid": "Šī īpašība nedrīkst būt null!",
|
||||||
|
"switchInvalidType": "Tam jābūt vienam no šiem tipiem: {0}!",
|
||||||
|
"objectSwitchInvalid": "Šim objektam jābūt vienam no šiem tipiem: {0}!",
|
||||||
|
|
||||||
|
"invalidLanguage": "Šī ir nederīga valoda!",
|
||||||
|
"invalidButton": "Šai pogai jābūt vismaz {0} vai {1}!",
|
||||||
|
"unusedOption": "Opcija {0} nekur netiek izmantota!",
|
||||||
|
"unusedQuestion": "Jautājums {0} nekur netiek izmantots!",
|
||||||
|
"dropdownOption": "Panelim ar iespējotu izvēlni var būt tikai 'ticket' tipa opcijas!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"buttons": {
|
||||||
|
"create": "Apmeklēt biļeti",
|
||||||
|
"close": "Aizvērt biļeti",
|
||||||
|
"delete": "Dzēst biļeti",
|
||||||
|
"reopen": "Atvērt biļeti no jauna",
|
||||||
|
"claim": "Pieprasīt biļeti",
|
||||||
|
"unclaim": "Atcelt biļetes pieprasījumu",
|
||||||
|
"pin": "Piespraust biļeti",
|
||||||
|
"unpin": "Atspraust biļeti",
|
||||||
|
"clear": "Dzēst biļetes",
|
||||||
|
"helpSwitchSlash": "Skatīt slīpsvītras komandas",
|
||||||
|
"helpSwitchText": "Skatīt teksta komandas",
|
||||||
|
"helpPage": "Lapa {0}",
|
||||||
|
"withReason": "Ar iemeslu",
|
||||||
|
"withoutTranscript": "Bez transkripta"
|
||||||
|
},
|
||||||
|
"titles": {
|
||||||
|
"created": "Biļete izveidota",
|
||||||
|
"close": "Biļete aizvērta",
|
||||||
|
"delete": "Biļete dzēsta",
|
||||||
|
"reopen": "Biļete atkal atvērta",
|
||||||
|
"claim": "Biļete pieprasīta",
|
||||||
|
"unclaim": "Biļetes pieprasījums atcelts",
|
||||||
|
"pin": "Biļete piesprausta",
|
||||||
|
"unpin": "Biļete atsprausta",
|
||||||
|
"rename": "Biļete pārdēvēta",
|
||||||
|
"move": "Biļete pārvietota",
|
||||||
|
"add": "Lietotājs pievienots biļetei",
|
||||||
|
"remove": "Lietotājs noņemts no biļetes",
|
||||||
|
|
||||||
|
"help": "Pieejamās komandas",
|
||||||
|
"statsReset": "Atiestatīt statistiku",
|
||||||
|
"blacklistAdd": "Lietotājs pievienots melnajam sarakstam",
|
||||||
|
"blacklistRemove": "Lietotājs atbrīvots",
|
||||||
|
"blacklistGet": "Melnajā sarakstā esošs lietotājs",
|
||||||
|
"blacklistView": "Pašreizējais melnais saraksts",
|
||||||
|
"blacklistAddDm": "Pievienots melnajam sarakstam",
|
||||||
|
"blacklistRemoveDm": "Noņemts no melnā saraksta",
|
||||||
|
"clear": "Biļetes izdzēstas",
|
||||||
|
"roles": "Lomas atjauninātas",
|
||||||
|
|
||||||
|
"autoclose": "Biļete automātiski aizvērta",
|
||||||
|
"autocloseEnabled": "Automātiskā aizvēršana ieslēgta",
|
||||||
|
"autocloseDisabled": "Automātiskā aizvēršana izslēgta",
|
||||||
|
"autodelete": "Biļete automātiski dzēsta",
|
||||||
|
"autodeleteEnabled": "Automātiskā dzēšana ieslēgta",
|
||||||
|
"autodeleteDisabled": "Automātiskā dzēšana izslēgta"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"create": "Jūsu biļete ir izveidota. Noklikšķiniet uz pogas zemāk, lai tai piekļūtu!",
|
||||||
|
"close": "Biļete ir veiksmīgi aizvērta!",
|
||||||
|
"delete": "Biļete ir veiksmīgi dzēsta!",
|
||||||
|
"reopen": "Biļete ir veiksmīgi atkal atvērta!",
|
||||||
|
"claim": "Biļete ir veiksmīgi pieprasīta!",
|
||||||
|
"unclaim": "Biļetes pieprasījums ir veiksmīgi atcelts!",
|
||||||
|
"pin": "Biļete ir veiksmīgi piesprausta!",
|
||||||
|
"unpin": "Biļete ir veiksmīgi atsprausta!",
|
||||||
|
"rename": "Biļete ir veiksmīgi pārdēvēta par {0}!",
|
||||||
|
"move": "Biļete ir veiksmīgi pārvietota uz {0}!",
|
||||||
|
"add": "{0} ir veiksmīgi pievienots biļetei!",
|
||||||
|
"remove": "{0} ir veiksmīgi noņemts no biļetes!",
|
||||||
|
|
||||||
|
"helpExplanation": "`<nosaukums>` => obligāts parametrs\n`[nosaukums]` => izvēles parametrs",
|
||||||
|
"statsReset": "Bota statistika ir veiksmīgi atiestatīta!",
|
||||||
|
"statsError": "Nevar skatīt biļešu statistiku!\n{0} nav biļete!",
|
||||||
|
"blacklistAdd": "{0} ir veiksmīgi pievienots melnajam sarakstam!",
|
||||||
|
"blacklistRemove": "{0} ir veiksmīgi atbrīvots!",
|
||||||
|
"blacklistGetSuccess": "{0} pašlaik ir melnajā sarakstā!",
|
||||||
|
"blacklistGetEmpty": "{0} pašlaik nav melnajā sarakstā!",
|
||||||
|
"blacklistViewEmpty": "Vēl neviens nav melnajā sarakstā!",
|
||||||
|
"blacklistViewTip": "Izmantojiet \"/blacklist add\", lai pievienotu lietotāju melnajam sarakstam!",
|
||||||
|
"clearVerify": "Vai esat pārliecināts, ka vēlaties dzēst vairākas biļetes?\nŠo darbību nevar atsaukt!",
|
||||||
|
"clearReady": "{0} biļetes ir veiksmīgi dzēstas!",
|
||||||
|
"rolesEmpty": "Neviena loma nav atjaunināta!",
|
||||||
|
|
||||||
|
"autocloseLeave": "Šī biļete tika automātiski aizvērta, jo izveidotājs pameta serveri!",
|
||||||
|
"autocloseTimeout": "Šī biļete tika automātiski aizvērta, jo tā bija neaktīva ilgāk par `{0}h`!",
|
||||||
|
"autodeleteLeave": "Šī biļete tika automātiski dzēsta, jo izveidotājs pameta serveri!",
|
||||||
|
"autodeleteTimeout": "Šī biļete tika automātiski dzēsta, jo tā bija neaktīva ilgāk par `{0} dienām`!",
|
||||||
|
"autocloseEnabled": "Automātiskā aizvēršana ir ieslēgta šai biļetei!\nTā tiks aizvērta, ja būs neaktīva ilgāk par `{0}h`!",
|
||||||
|
"autocloseDisabled": "Automātiskā aizvēršana ir izslēgta šai biļetei!\nTā vairs netiks automātiski aizvērta!",
|
||||||
|
"autodeleteEnabled": "Automātiskā dzēšana ir ieslēgta šai biļetei!\nTā tiks dzēsta, ja būs neaktīva ilgāk par `{0} dienām`!",
|
||||||
|
"autodeleteDisabled": "Automātiskā dzēšana ir izslēgta šai biļetei!\nTā vairs netiks automātiski dzēsta!",
|
||||||
|
|
||||||
|
"ticketMessageLimit": "Jūs varat izveidot tikai {0} biļeti(-es) vienlaikus!",
|
||||||
|
"ticketMessageAutoclose": "Šī biļete tiks automātiski aizvērta, ja būs neaktīva {0}h!",
|
||||||
|
"ticketMessageAutodelete": "Šī biļete tiks automātiski dzēsta, ja būs neaktīva {0} dienas!",
|
||||||
|
"panelReady": "Paneli var atrast zemāk!\nŠo ziņojumu tagad var dzēst!"
|
||||||
|
},
|
||||||
|
"modal": {
|
||||||
|
"closePlaceholder": "Kāpēc jūs aizvērāt šo biļeti?",
|
||||||
|
"deletePlaceholder": "Kāpēc jūs dzēsāt šo biļeti?",
|
||||||
|
"reopenPlaceholder": "Kāpēc jūs atkal atvērāt šo biļeti?",
|
||||||
|
"claimPlaceholder": "Kāpēc jūs pieprasījāt šo biļeti?",
|
||||||
|
"unclaimPlaceholder": "Kāpēc jūs atcēlāt šīs biļetes pieprasījumu?",
|
||||||
|
"pinPlaceholder": "Kāpēc jūs piespraudāt šo biļeti?",
|
||||||
|
"unpinPlaceholder": "Kāpēc jūs atspraudāt šo biļeti?"
|
||||||
|
},
|
||||||
|
"logs": {
|
||||||
|
"createLog": "Jauna biļete tika izveidota no {0}!",
|
||||||
|
"closeLog": "Šī biļete tika aizvērta no {0}!",
|
||||||
|
"closeDm": "Jūsu biļete tika aizvērta mūsu serverī!",
|
||||||
|
"deleteLog": "Šī biļete tika dzēsta no {0}!",
|
||||||
|
"deleteDm": "Jūsu biļete tika dzēsta mūsu serverī!",
|
||||||
|
"reopenLog": "Šī biļete tika atkal atvērta no {0}!",
|
||||||
|
"reopenDm": "Jūsu biļete tika atkal atvērta mūsu serverī!",
|
||||||
|
"claimLog": "Šī biļete tika pieprasīta no {0}!",
|
||||||
|
"claimDm": "Jūsu biļete tika pieprasīta mūsu serverī!",
|
||||||
|
"unclaimLog": "Šīs biļetes pieprasījums tika atcelts no {0}!",
|
||||||
|
"unclaimDm": "Jūsu biļetes pieprasījums tika atcelts mūsu serverī!",
|
||||||
|
"pinLog": "Šī biļete tika piesprausta no {0}!",
|
||||||
|
"pinDm": "Jūsu biļete tika piesprausta mūsu serverī!",
|
||||||
|
"unpinLog": "Šī biļete tika atsprausta no {0}!",
|
||||||
|
"unpinDm": "Jūsu biļete tika atsprausta mūsu serverī!",
|
||||||
|
"renameLog": "Šī biļete tika pārdēvēta par {0} no {1}!",
|
||||||
|
"renameDm": "Jūsu biļete tika pārdēvēta par {0} mūsu serverī!",
|
||||||
|
"moveLog": "Šī biļete tika pārvietota uz {0} no {1}!",
|
||||||
|
"moveDm": "Jūsu biļete tika pārvietota uz {0} mūsu serverī!",
|
||||||
|
"addLog": "{0} tika pievienots šai biļetei no {1}!",
|
||||||
|
"addDm": "{0} tika pievienots jūsu biļetei mūsu serverī!",
|
||||||
|
"removeLog": "{0} tika noņemts no šīs biļetes no {1}!",
|
||||||
|
"removeDm": "{0} tika noņemts no jūsu biļetes mūsu serverī!",
|
||||||
|
|
||||||
|
"blacklistAddLog": "{0} tika pievienots melnajam sarakstam no {1}!",
|
||||||
|
"blacklistRemoveLog": "{0} tika noņemts no melnā saraksta no {1}!",
|
||||||
|
"blacklistAddDm": "Jūs esat pievienots melnajam sarakstam mūsu serverī!\nNo šī brīža jūs nevarat izveidot biļeti!",
|
||||||
|
"blacklistRemoveDm": "Jūs esat noņemts no melnā saraksta mūsu serverī!\nTagad jūs atkal varat izveidot biļetes!",
|
||||||
|
"clearLog": "{0} biļetes tika dzēstas no {1}!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transcripts": {
|
||||||
|
"success": {
|
||||||
|
"visit": "Apmeklēt transkriptu",
|
||||||
|
"ready": "Transkripts izveidots",
|
||||||
|
"textFileDescription": "Šis ir dzēstas biļetes teksta transkripts!",
|
||||||
|
"htmlProgress": "Lūdzu, uzgaidiet, kamēr šis HTML transkripts tiek apstrādāts...",
|
||||||
|
|
||||||
|
"createdChannel": "Jauns {0} transkripts tika izveidots serverī!",
|
||||||
|
"createdCreator": "Jauns {0} transkripts tika izveidots vienai no jūsu biļetēm!",
|
||||||
|
"createdParticipant": "Jauns {0} transkripts tika izveidots vienā no biļetēm, kurā jūs piedalījāties!",
|
||||||
|
"createdActiveAdmin": "Jauns {0} transkripts tika izveidots vienā no biļetēm, kurā jūs piedalījāties kā administrators!",
|
||||||
|
"createdEveryAdmin": "Jauns {0} transkripts tika izveidots vienā no biļetēm, kurā jūs bijāt administrators!",
|
||||||
|
"createdOther": "Jauns {0} transkripts tika izveidots!"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"retry": "Mēģināt vēlreiz",
|
||||||
|
"continue": "Dzēst bez transkripta",
|
||||||
|
"backup": "Izveidot rezerves transkriptu",
|
||||||
|
"error": "Kaut kas nogāja greizi, mēģinot izveidot transkriptu.\nKo jūs vēlaties darīt?\n\nŠī biļete netiks dzēsta, kamēr jūs nenoklikšķināsiet uz vienas no šīm pogām."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"titles": {
|
||||||
|
"internalError": "Iekšēja kļūda",
|
||||||
|
"optionMissing": "Trūkst komandas opcijas",
|
||||||
|
"optionInvalid": "Nederīga komandas opcija",
|
||||||
|
"unknownCommand": "Nezināma komanda",
|
||||||
|
"noPermissions": "Nav atļauju",
|
||||||
|
"unknownTicket": "Nezināma biļete",
|
||||||
|
"deprecatedTicket": "Novecojusi biļete",
|
||||||
|
"unknownOption": "Nezināma opcija",
|
||||||
|
"unknownPanel": "Nezināms panelis",
|
||||||
|
"notInGuild": "Nav serverī",
|
||||||
|
"channelRename": "Nevar pārdēvēt kanālu",
|
||||||
|
"busy": "Biļete ir aizņemta"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"askForInfo": "Sazinieties ar šī bota īpašnieku, lai iegūtu plašāku informāciju!",
|
||||||
|
"askForInfoResolve": "Sazinieties ar bota īpašnieku, ja šī problēma neatrisinās pēc dažiem mēģinājumiem.",
|
||||||
|
"internalError": "Neizdevās atbildēt uz šo {0} iekšējas kļūdas dēļ!",
|
||||||
|
"optionMissing": "Šai komandai trūkst obligāta parametra!",
|
||||||
|
"optionInvalid": "Šīs komandas parametrs ir nederīgs!",
|
||||||
|
"optionInvalidChoose": "Izvēlieties starp",
|
||||||
|
"unknownCommand": "Mēģiniet apmeklēt palīdzības izvēlni, lai iegūtu vairāk informācijas!",
|
||||||
|
"noPermissions": "Jums nav atļauts izmantot šo {0}!",
|
||||||
|
"noPermissionsList": "Nepieciešamās atļaujas: (viena no tām)",
|
||||||
|
"noPermissionsCooldown": "Jums nav atļauts izmantot šo {0}, jo jums ir atpūtas periods!",
|
||||||
|
"noPermissionsBlacklist": "Jums nav atļauts izmantot šo {0}, jo esat melnajā sarakstā!",
|
||||||
|
"noPermissionsLimitGlobal": "Jūs nevarat izveidot biļeti, jo serveris ir sasniedzis maksimālo biļešu skaitu!",
|
||||||
|
"noPermissionsLimitGlobalUser": "Jūs nevarat izveidot biļeti, jo esat sasniedzis maksimālo biļešu skaitu!",
|
||||||
|
"noPermissionsLimitOption": "Jūs nevarat izveidot biļeti, jo serveris ir sasniedzis maksimālo biļešu skaitu šai opcijai!",
|
||||||
|
"noPermissionsLimitOptionUser": "Jūs nevarat izveidot biļeti, jo esat sasniedzis maksimālo biļešu skaitu šai opcijai!",
|
||||||
|
"unknownTicket": "Mēģiniet vēlreiz izmantot šo komandu derīgā biļetē!",
|
||||||
|
"deprecatedTicket": "Pašreizējais kanāls nav derīga biļete! Tas varētu būt biļete no vecas Open Ticket versijas!",
|
||||||
|
"notInGuild": "Šis {0} nedarbojas DM! Lūdzu, mēģiniet vēlreiz serverī!",
|
||||||
|
"channelRename": "Discord ierobežojumu dēļ bots pašlaik nevar pārdēvēt kanālu. Kanāls tiks automātiski pārdēvēts 10 minūšu laikā, ja bots netiks restartēts.",
|
||||||
|
"channelRenameSource": "Šīs kļūdas avots ir: {0}",
|
||||||
|
"busy": "Nevar izmantot šo {0}!\nBiļete pašlaik tiek apstrādāta ar botu.\n\nLūdzu, mēģiniet vēlreiz pēc dažām sekundēm!"
|
||||||
|
},
|
||||||
|
"optionInvalidReasons": {
|
||||||
|
"stringRegex": "Vērtība neatbilst šablonam!",
|
||||||
|
"stringMinLength": "Vērtībai jābūt vismaz {0} rakstzīmēm!",
|
||||||
|
"stringMaxLength": "Vērtībai jābūt ne vairāk kā {0} rakstzīmēm!",
|
||||||
|
"numberInvalid": "Nederīgs skaitlis!",
|
||||||
|
"numberMin": "Skaitlim jābūt vismaz {0}!",
|
||||||
|
"numberMax": "Skaitlim jābūt ne vairāk kā {0}!",
|
||||||
|
"numberDecimal": "Skaitlis nedrīkst būt decimāldaļa!",
|
||||||
|
"numberNegative": "Skaitlis nedrīkst būt negatīvs!",
|
||||||
|
"numberPositive": "Skaitlis nedrīkst būt pozitīvs!",
|
||||||
|
"numberZero": "Skaitlis nedrīkst būt nulle!",
|
||||||
|
"channelNotFound": "Nevar atrast kanālu!",
|
||||||
|
"userNotFound": "Nevar atrast lietotāju!",
|
||||||
|
"roleNotFound": "Nevar atrast lomu!",
|
||||||
|
"memberNotFound": "Nevar atrast lietotāju!",
|
||||||
|
"mentionableNotFound": "Nevar atrast lietotāju vai lomu!",
|
||||||
|
"channelType": "Nederīgs kanāla tips!",
|
||||||
|
"notInGuild": "Šai opcijai jābūt serverī!"
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"developer": "Jums jābūt bota izstrādātājam.",
|
||||||
|
"owner": "Jums jābūt servera īpašniekam.",
|
||||||
|
"admin": "Jums jābūt servera administratoram.",
|
||||||
|
"moderator": "Jums jābūt moderatoram.",
|
||||||
|
"support": "Jums jābūt atbalsta komandā.",
|
||||||
|
"member": "Jums jābūt dalībniekam.",
|
||||||
|
"discord-administrator": "Jums jābūt `ADMINISTRATOR` atļaujai."
|
||||||
|
},
|
||||||
|
"actionInvalid": {
|
||||||
|
"close": "Biļete jau ir aizvērta!",
|
||||||
|
"reopen": "Biļete vēl nav aizvērta!",
|
||||||
|
"claim": "Biļete jau ir pieprasīta!",
|
||||||
|
"unclaim": "Biļete vēl nav pieprasīta!",
|
||||||
|
"pin": "Biļete jau ir piesprausta!",
|
||||||
|
"unpin": "Biļete nav piesprausta!",
|
||||||
|
"add": "Šis lietotājs jau var piekļūt biļetei!",
|
||||||
|
"remove": "Nevar noņemt šo lietotāju no biļetes!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"params": {
|
||||||
|
"uppercase": {
|
||||||
|
"ticket": "Biļete",
|
||||||
|
"tickets": "Biļetes",
|
||||||
|
"reason": "Iemesls",
|
||||||
|
"creator": "Izveidotājs",
|
||||||
|
"remaining": "Atlikušais laiks",
|
||||||
|
"added": "Pievienots",
|
||||||
|
"removed": "Noņemts",
|
||||||
|
"filter": "Filtrs",
|
||||||
|
"claimedBy": "Pieprasījis {0}",
|
||||||
|
"method": "Metode",
|
||||||
|
"type": "Tips",
|
||||||
|
"blacklisted": "Melnajā sarakstā",
|
||||||
|
"panel": "Panelis",
|
||||||
|
"command": "Komanda",
|
||||||
|
"system": "Sistēma",
|
||||||
|
"true": "Patiess",
|
||||||
|
"false": "Nepatiess",
|
||||||
|
"syntax": "Sintakse",
|
||||||
|
"originalName": "Sākotnējais nosaukums",
|
||||||
|
"newName": "Jaunais nosaukums",
|
||||||
|
"until": "Līdz",
|
||||||
|
"validOptions": "Derīgas opcijas",
|
||||||
|
"validPanels": "Derīgi paneļi",
|
||||||
|
"autoclose": "Automātiskā aizvēršana",
|
||||||
|
"autodelete": "Automātiskā dzēšana",
|
||||||
|
"startupDate": "Startēšanas datums",
|
||||||
|
"version": "Versija",
|
||||||
|
"name": "Nosaukums",
|
||||||
|
"role": "Loma",
|
||||||
|
"status": "Statuss",
|
||||||
|
"claimed": "Pieprasīts",
|
||||||
|
"pinned": "Piesprausts",
|
||||||
|
"creationDate": "Izveidošanas datums"
|
||||||
|
},
|
||||||
|
"lowercase": {
|
||||||
|
"text": "teksts",
|
||||||
|
"html": "html",
|
||||||
|
"command": "komanda",
|
||||||
|
"modal": "modāls",
|
||||||
|
"button": "poga",
|
||||||
|
"dropdown": "izvēlne",
|
||||||
|
"method": "metode"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commands": {
|
||||||
|
"reason": "Norādiet izvēles iemeslu, kas būs redzams žurnālos.",
|
||||||
|
"help": "Iegūstiet visu pieejamo komandu sarakstu.",
|
||||||
|
"panel": "Izveidojiet ziņojumu ar izvēlni vai pogām (biļešu izveidei).",
|
||||||
|
"panelId": "Paneļa identifikators, kuru vēlaties izveidot.",
|
||||||
|
"panelAutoUpdate": "Vai vēlaties, lai šis panelis automātiski atjauninātos, kad tas tiek rediģēts?",
|
||||||
|
"ticket": "Nekavējoties izveidojiet biļeti.",
|
||||||
|
"ticketId": "Biļetes identifikators, kuru vēlaties izveidot.",
|
||||||
|
"close": "Aizveriet biļeti.",
|
||||||
|
"delete": "Dzēsiet biļeti.",
|
||||||
|
"deleteNoTranscript": "Dzēsiet šo biļeti, neizveidojot transkriptu.",
|
||||||
|
"reopen": "Atveriet biļeti no jauna.",
|
||||||
|
"claim": "Pieprasiet biļeti.",
|
||||||
|
"claimUser": "Pieprasiet šo biļeti kādam citam, nevis sev.",
|
||||||
|
"unclaim": "Atceliet biļetes pieprasījumu.",
|
||||||
|
"pin": "Piespraudiet biļeti.",
|
||||||
|
"unpin": "Atspraudiet biļeti.",
|
||||||
|
"move": "Pārvietojiet biļeti.",
|
||||||
|
"moveId": "Opcijas identifikators, uz kuru vēlaties pārvietot.",
|
||||||
|
"rename": "Pārdēvējiet biļeti.",
|
||||||
|
"renameName": "Jaunais nosaukums šai biļetei.",
|
||||||
|
"add": "Pievienojiet lietotāju biļetei.",
|
||||||
|
"addUser": "Lietotājs, kuru pievienot.",
|
||||||
|
"remove": "Noņemiet lietotāju no biļetes.",
|
||||||
|
"removeUser": "Lietotājs, kuru noņemt.",
|
||||||
|
"blacklist": "Pārvaldiet biļešu melno sarakstu.",
|
||||||
|
"blacklistView": "Skatiet pašreizējā melnā saraksta sarakstu.",
|
||||||
|
"blacklistAdd": "Pievienojiet lietotāju melnajam sarakstam.",
|
||||||
|
"blacklistRemove": "Noņemiet lietotāju no melnā saraksta.",
|
||||||
|
"blacklistGet": "Iegūstiet informāciju par melnajā sarakstā esošu lietotāju.",
|
||||||
|
"blacklistGetUser": "Lietotājs, par kuru iegūt informāciju.",
|
||||||
|
"stats": "Skatiet statistiku no bota, dalībnieka vai biļetes.",
|
||||||
|
"statsReset": "Atiestatiet visu bota statistiku (un sāciet skaitīt no nulles).",
|
||||||
|
"statsGlobal": "Skatiet globālo statistiku.",
|
||||||
|
"statsUser": "Skatiet lietotāja statistiku serverī.",
|
||||||
|
"statsUserUser": "Lietotājs, kuru skatīt.",
|
||||||
|
"statsTicket": "Skatiet biļetes statistiku serverī.",
|
||||||
|
"statsTicketTicket": "Biļete, kuru skatīt.",
|
||||||
|
"clear": "Dzēsiet vairākas biļetes vienlaikus.",
|
||||||
|
"clearFilter": "Filtrs biļešu dzēšanai.",
|
||||||
|
"clearFilters": {
|
||||||
|
"all": "Visas",
|
||||||
|
"open": "Atvērtas",
|
||||||
|
"close": "Aizvērtas",
|
||||||
|
"claim": "Pieprasītas",
|
||||||
|
"unclaim": "Nepieprasītas",
|
||||||
|
"pin": "Piespraustas",
|
||||||
|
"unpin": "Atspraustas",
|
||||||
|
"autoclose": "Automātiski aizvērtas"
|
||||||
|
},
|
||||||
|
"autoclose": "Pārvaldiet automātisko aizvēršanu biļetē.",
|
||||||
|
"autocloseDisable": "Atspējojiet automātisko aizvēršanu šai biļetei.",
|
||||||
|
"autocloseEnable": "Ieslēdziet automātisko aizvēršanu šai biļetei.",
|
||||||
|
"autocloseEnableTime": "Stundu skaits, cik ilgi biļetei jābūt neaktīvai, lai to aizvērtu.",
|
||||||
|
"autodelete": "Pārvaldiet automātisko dzēšanu biļetē.",
|
||||||
|
"autodeleteDisable": "Atspējojiet automātisko dzēšanu šai biļetei.",
|
||||||
|
"autodeleteEnable": "Ieslēdziet automātisko dzēšanu šai biļetei.",
|
||||||
|
"autodeleteEnableTime": "Dienu skaits, cik ilgi biļetei jābūt neaktīvai, lai to dzēstu."
|
||||||
|
},
|
||||||
|
"helpMenu": {
|
||||||
|
"help": "Iegūstiet visu pieejamo komandu sarakstu.",
|
||||||
|
"ticket": "Nekavējoties izveidojiet biļeti.",
|
||||||
|
"close": "Aizveriet biļeti, tas atspējo rakstīšanu šajā kanālā.",
|
||||||
|
"delete": "Dzēsiet biļeti, tas izveido transkriptu, ja ir iespējots.",
|
||||||
|
"reopen": "Atveriet biļeti no jauna, tas atkal iespējo rakstīšanu šajā kanālā.",
|
||||||
|
"pin": "Piespraudiet biļeti. Tas pārvietos biļeti uz augšu un pievienos '📌' emocijzīmi nosaukumam.",
|
||||||
|
"unpin": "Atspraudiet biļeti. Biļete paliks savā pozīcijā, bet zaudēs '📌' emocijzīmi.",
|
||||||
|
"move": "Pārvietojiet biļeti. Tas mainīs šīs biļetes tipu.",
|
||||||
|
"rename": "Pārdēvējiet biļeti. Tas mainīs šīs biļetes kanāla nosaukumu.",
|
||||||
|
"claim": "Pieprasiet biļeti. Ar to jūs varat informēt savu komandu, ka jūs apstrādājat šo biļeti.",
|
||||||
|
"unclaim": "Atceliet biļetes pieprasījumu. Ar to jūs varat informēt savu komandu, ka šī biļete atkal ir brīva.",
|
||||||
|
"add": "Pievienojiet lietotāju biļetei. Tas ļaus lietotājam lasīt un rakstīt šajā biļetē.",
|
||||||
|
"remove": "Noņemiet lietotāju no biļetes. Tas atņems lietotājam iespēju lasīt un rakstīt šajā biļetē.",
|
||||||
|
"panel": "Izveidojiet ziņojumu ar izvēlni vai pogām (biļešu izveidei).",
|
||||||
|
"blacklistView": "Skatiet pašreizējā melnā saraksta sarakstu.",
|
||||||
|
"blacklistAdd": "Pievienojiet lietotāju melnajam sarakstam.",
|
||||||
|
"blacklistRemove": "Noņemiet lietotāju no melnā saraksta.",
|
||||||
|
"blacklistGet": "Iegūstiet informāciju par melnajā sarakstā esošu lietotāju.",
|
||||||
|
"statsGlobal": "Skatiet globālo statistiku.",
|
||||||
|
"statsTicket": "Skatiet biļetes statistiku serverī.",
|
||||||
|
"statsUser": "Skatiet lietotāja statistiku serverī.",
|
||||||
|
"statsReset": "Atiestatiet visu bota statistiku (un sāciet skaitīt no nulles).",
|
||||||
|
"autocloseDisable": "Atspējojiet automātisko aizvēršanu šai biļetei.",
|
||||||
|
"autocloseEnable": "Ieslēdziet automātisko aizvēršanu šai biļetei.",
|
||||||
|
"autodeleteDisable": "Atspējojiet automātisko dzēšanu šai biļetei.",
|
||||||
|
"autodeleteEnable": "Ieslēdziet automātisko dzēšanu šai biļetei."
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"scopes": {
|
||||||
|
"global": "Globālā statistika",
|
||||||
|
"system": "Sistēmas statistika",
|
||||||
|
"user": "Lietotāja statistika",
|
||||||
|
"ticket": "Biļešu statistika",
|
||||||
|
"participants": "Dalībnieki"
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"ticketsCreated": "Izveidotās biļetes",
|
||||||
|
"ticketsClosed": "Aizvērtās biļetes",
|
||||||
|
"ticketsDeleted": "Dzēstās biļetes",
|
||||||
|
"ticketsReopened": "Atkal atvērtās biļetes",
|
||||||
|
"ticketsAutoclosed": "Automātiski aizvērtās biļetes",
|
||||||
|
"ticketsClaimed": "Pieprasītās biļetes",
|
||||||
|
"ticketsPinned": "Piespraustās biļetes",
|
||||||
|
"ticketsMoved": "Pārvietotās biļetes",
|
||||||
|
"usersBlacklisted": "Melnajā sarakstā esošie lietotāji",
|
||||||
|
"transcriptsCreated": "Izveidotie transkripti"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["TsgIndrius"],
|
"translators":["TsgIndrius"],
|
||||||
"lastedited":"26/01/2025",
|
"lastedited":"26/01/2025",
|
||||||
"language":"Lithuanian",
|
"language":"Lithuanian",
|
||||||
|
|||||||
@@ -0,0 +1,478 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION": {
|
||||||
|
"otversion": "v4.1.1",
|
||||||
|
"translators": ["NoOneNook"],
|
||||||
|
"lastedited": "25/03/2025",
|
||||||
|
"language": "Norwegian",
|
||||||
|
"automated": false
|
||||||
|
},
|
||||||
|
"checker": {
|
||||||
|
"system": {
|
||||||
|
"typeError": "[FEIL]",
|
||||||
|
"headerOpenTicket": "ÅPNE SAK",
|
||||||
|
"typeWarning": "[ADVARSEL]",
|
||||||
|
"typeInfo": "[INFO]",
|
||||||
|
"headerConfigChecker": "KONFIGURASJONSSJEKKER",
|
||||||
|
"headerDescription": "sjekk etter feil i konfigurasjonen din!",
|
||||||
|
"footerError": "boten starter ikke før alle {0} er fikset!",
|
||||||
|
"footerWarning": "det anbefales å fikse alle {0} før oppstart!",
|
||||||
|
"footerSupport": "STØTTE: {0} - DOKUMENTASJON: {1}",
|
||||||
|
"compactInformation": "bruk {0} for mer informasjon!",
|
||||||
|
"dataPath": "sti",
|
||||||
|
"dataDocs": "dokumentasjon",
|
||||||
|
"dataMessages": "melding"
|
||||||
|
},
|
||||||
|
"messages": {
|
||||||
|
"stringTooShort": "Denne strengen kan ikke være kortere enn {0} tegn!",
|
||||||
|
"stringTooLong": "Denne strengen kan ikke være lengre enn {0} tegn!",
|
||||||
|
"stringLengthInvalid": "Denne strengen skal være {0} tegn lang!",
|
||||||
|
"stringStartsWith": "Denne strengen skal starte med {0}!",
|
||||||
|
"stringEndsWith": "Denne strengen skal slutte med {0}!",
|
||||||
|
"stringContains": "Denne strengen skal inneholde {0}!",
|
||||||
|
"stringChoices": "Denne strengen kan kun være en av følgende verdier: {0}!",
|
||||||
|
"stringRegex": "Denne strengen er ugyldig!",
|
||||||
|
|
||||||
|
"numberTooShort": "Dette tallet kan ikke være kortere enn {0} tegn!",
|
||||||
|
"numberTooLong": "Dette tallet kan ikke være lengre enn {0} tegn!",
|
||||||
|
"numberLengthInvalid": "Dette tallet skal være {0} tegn langt!",
|
||||||
|
"numberTooSmall": "Dette tallet skal være minst {0}!",
|
||||||
|
"numberTooLarge": "Dette tallet skal være høyst {0}!",
|
||||||
|
"numberNotEqual": "Dette tallet skal være {0}!",
|
||||||
|
"numberStep": "Dette tallet skal være et multiplum av {0}!",
|
||||||
|
"numberStepOffset": "Dette tallet skal være et multiplum av {0}, startende med {1}!",
|
||||||
|
"numberStartsWith": "Dette tallet skal starte med {0}!",
|
||||||
|
"numberEndsWith": "Dette tallet skal slutte med {0}!",
|
||||||
|
"numberContains": "Dette tallet skal inneholde {0}!",
|
||||||
|
"numberChoices": "Dette tallet kan kun være en av følgende verdier: {0}!",
|
||||||
|
"numberFloat": "Dette tallet kan ikke være et desimaltall!",
|
||||||
|
"numberNegative": "Dette tallet kan ikke være negativt!",
|
||||||
|
"numberPositive": "Dette tallet kan ikke være positivt!",
|
||||||
|
"numberZero": "Dette tallet kan ikke være null!",
|
||||||
|
|
||||||
|
"booleanTrue": "Denne boolske verdien kan ikke være sann!",
|
||||||
|
"booleanFalse": "Denne boolske verdien kan ikke være usann!",
|
||||||
|
|
||||||
|
"arrayEmptyDisabled": "Denne listen kan ikke være tom!",
|
||||||
|
"arrayEmptyRequired": "Denne listen skal være tom!",
|
||||||
|
"arrayTooShort": "Denne listen skal ha en lengde på minst {0}!",
|
||||||
|
"arrayTooLong": "Denne listen skal ha en lengde på høyst {0}!",
|
||||||
|
"arrayLengthInvalid": "Denne listen skal ha en lengde på {0}!",
|
||||||
|
"arrayInvalidTypes": "Denne listen kan kun inneholde følgende typer: {0}!",
|
||||||
|
"arrayDouble": "Denne listen tillater ikke samme verdi to ganger!",
|
||||||
|
|
||||||
|
"discordInvalidId": "Dette er en ugyldig Discord {0} ID!",
|
||||||
|
"discordInvalidIdOptions": "Dette er en ugyldig Discord {0} ID! Du kan også bruke en av disse: {1}!",
|
||||||
|
"discordInvalidToken": "Dette er et ugyldig Discord-token (syntaktisk)!",
|
||||||
|
"colorInvalid": "Dette er en ugyldig heksadesimal farge!",
|
||||||
|
"emojiTooShort": "Denne strengen skal ha minst {0} emojier!",
|
||||||
|
"emojiTooLong": "Denne strengen skal ha høyst {0} emojier!",
|
||||||
|
"emojiCustom": "Denne emojien kan ikke være en tilpasset Discord-emoji!",
|
||||||
|
"emojiInvalid": "Dette er en ugyldig emoji!",
|
||||||
|
"urlInvalid": "Denne URL-en er ugyldig!",
|
||||||
|
"urlInvalidHttp": "Denne URL-en kan kun bruke https://-protokollen!",
|
||||||
|
"urlInvalidProtocol": "Denne URL-en kan kun bruke http://- og https://-protokollene!",
|
||||||
|
"urlInvalidHostname": "Denne URL-en har et ikke-tillatt vertsnavn!",
|
||||||
|
"urlInvalidExtension": "Denne URL-en har en ugyldig filtype! Velg mellom: {0}!",
|
||||||
|
"urlInvalidPath": "Denne URL-en har en ugyldig sti!",
|
||||||
|
"idNotUnique": "Denne ID-en er ikke unik, bruk en annen ID i stedet!",
|
||||||
|
"idNonExistent": "ID-en {0} finnes ikke!",
|
||||||
|
|
||||||
|
"invalidType": "Denne egenskapen skal være av typen: {0}!",
|
||||||
|
"propertyMissing": "Egenskapen {0} mangler i dette objektet!",
|
||||||
|
"propertyOptional": "Egenskapen {0} er valgfri i dette objektet!",
|
||||||
|
"objectDisabled": "Dette objektet er deaktivert, aktiver det ved å bruke {0}!",
|
||||||
|
"nullInvalid": "Denne egenskapen kan ikke være null!",
|
||||||
|
"switchInvalidType": "Dette skal være en av følgende typer: {0}!",
|
||||||
|
"objectSwitchInvalid": "Dette objektet skal være en av følgende typer: {0}!",
|
||||||
|
|
||||||
|
"invalidLanguage": "Dette er et ugyldig språk!",
|
||||||
|
"invalidButton": "Denne knappen skal ha minst en {0} eller {1}!",
|
||||||
|
"unusedOption": "Alternativet {0} brukes ikke noe sted!",
|
||||||
|
"unusedQuestion": "Spørsmålet {0} brukes ikke noe sted!",
|
||||||
|
"dropdownOption": "Et panel med nedtrekksmeny aktivert kan kun inneholde alternativer av typen 'sak'!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"buttons": {
|
||||||
|
"create": "Opprett Sak",
|
||||||
|
"close": "Lukk Sak",
|
||||||
|
"delete": "Slett Sak",
|
||||||
|
"reopen": "Gjenåpne Sak",
|
||||||
|
"claim": "Ta Sak",
|
||||||
|
"unclaim": "Frigi Sak",
|
||||||
|
"pin": "Fest Sak",
|
||||||
|
"unpin": "Løsne Sak",
|
||||||
|
"clear": "Slett Saker",
|
||||||
|
"helpSwitchSlash": "Vis Skråstrekskommandoer",
|
||||||
|
"helpSwitchText": "Vis Tekstkommandoer",
|
||||||
|
"helpPage": "Side {0}",
|
||||||
|
"withReason": "Med Årsak",
|
||||||
|
"withoutTranscript": "Uten Utskrift"
|
||||||
|
},
|
||||||
|
"titles": {
|
||||||
|
"created": "Sak Opprettet",
|
||||||
|
"close": "Sak Lukket",
|
||||||
|
"delete": "Sak Slettet",
|
||||||
|
"reopen": "Sak Gjenåpnet",
|
||||||
|
"claim": "Sak Tatt",
|
||||||
|
"unclaim": "Sak Frigitt",
|
||||||
|
"pin": "Sak Festet",
|
||||||
|
"unpin": "Sak Løsnet",
|
||||||
|
"rename": "Sak Omdøpt",
|
||||||
|
"move": "Sak Flyttet",
|
||||||
|
"add": "Bruker Lagt Til Sak",
|
||||||
|
"remove": "Bruker Fjernet Fra Sak",
|
||||||
|
|
||||||
|
"help": "Tilgjengelige Kommandoer",
|
||||||
|
"statsReset": "Tilbakestill Statistikk",
|
||||||
|
"blacklistAdd": "Bruker Svartelistet",
|
||||||
|
"blacklistRemove": "Bruker Fjernet Fra Svarteliste",
|
||||||
|
"blacklistGet": "Svartelistet Bruker",
|
||||||
|
"blacklistView": "Gjeldende Svarteliste",
|
||||||
|
"blacklistAddDm": "Lagt Til Svarteliste",
|
||||||
|
"blacklistRemoveDm": "Fjernet Fra Svarteliste",
|
||||||
|
"clear": "Saker Slettet",
|
||||||
|
"roles": "Roller Oppdatert",
|
||||||
|
|
||||||
|
"autoclose": "Sak Autolukket",
|
||||||
|
"autocloseEnabled": "Autolukking Aktivert",
|
||||||
|
"autocloseDisabled": "Autolukking Deaktivert",
|
||||||
|
"autodelete": "Sak Autoslettet",
|
||||||
|
"autodeleteEnabled": "Autosletting Aktivert",
|
||||||
|
"autodeleteDisabled": "Autosletting Deaktivert"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"create": "Din sak er blitt opprettet. Klikk på knappen nedenfor for å få tilgang til den!",
|
||||||
|
"close": "Saken er blitt lukket vellykket!",
|
||||||
|
"delete": "Saken er blitt slettet vellykket!",
|
||||||
|
"reopen": "Saken er blitt gjenåpnet vellykket!",
|
||||||
|
"claim": "Saken er blitt tatt vellykket!",
|
||||||
|
"unclaim": "Saken er blitt frigitt vellykket!",
|
||||||
|
"pin": "Saken er blitt festet vellykket!",
|
||||||
|
"unpin": "Saken er blitt løsnet vellykket!",
|
||||||
|
"rename": "Saken er blitt omdøpt til {0} vellykket!",
|
||||||
|
"move": "Saken er blitt flyttet til {0} vellykket!",
|
||||||
|
"add": "{0} er blitt lagt til saken vellykket!",
|
||||||
|
"remove": "{0} er blitt fjernet fra saken vellykket!",
|
||||||
|
|
||||||
|
"helpExplanation": "`<navn>` => påkrevd parameter\n`[navn]` => valgfri parameter",
|
||||||
|
"statsReset": "Botens statistikk er blitt tilbakestilt vellykket!",
|
||||||
|
"statsError": "Kan ikke vise saksstatistikk!\n{0} er ikke en sak!",
|
||||||
|
"blacklistAdd": "{0} er blitt svartelistet vellykket!",
|
||||||
|
"blacklistRemove": "{0} er blitt fjernet fra svartelisten vellykket!",
|
||||||
|
"blacklistGetSuccess": "{0} er for øyeblikket svartelistet!",
|
||||||
|
"blacklistGetEmpty": "{0} er for øyeblikket ikke svartelistet!",
|
||||||
|
"blacklistViewEmpty": "Ingen er svartelistet ennå!",
|
||||||
|
"blacklistViewTip": "Bruk \"/blacklist add\" for å svarteliste en bruker!",
|
||||||
|
"clearVerify": "Er du sikker på at du vil slette flere saker?\nDenne handlingen kan ikke angres!",
|
||||||
|
"clearReady": "{0} saker er blitt slettet vellykket!",
|
||||||
|
"rolesEmpty": "Ingen roller er blitt oppdatert!",
|
||||||
|
|
||||||
|
"autocloseLeave": "Denne saken er blitt autolukket fordi oppretteren forlot serveren!",
|
||||||
|
"autocloseTimeout": "Denne saken er blitt autolukket fordi den har vært inaktiv i mer enn `{0}t`!",
|
||||||
|
"autodeleteLeave": "Denne saken er blitt autoslettet fordi oppretteren forlot serveren!",
|
||||||
|
"autodeleteTimeout": "Denne saken er blitt autoslettet fordi den har vært inaktiv i mer enn `{0} dager`!",
|
||||||
|
"autocloseEnabled": "Autolukking er blitt aktivert i denne saken!\nDen vil bli lukket når den er inaktiv i mer enn `{0}t`!",
|
||||||
|
"autocloseDisabled": "Autolukking er blitt deaktivert i denne saken!\nDen vil ikke lenger bli lukket automatisk!",
|
||||||
|
"autodeleteEnabled": "Autosletting er blitt aktivert i denne saken!\nDen vil bli slettet når den er inaktiv i mer enn `{0} dager`!",
|
||||||
|
"autodeleteDisabled": "Autosletting er blitt deaktivert i denne saken!\nDen vil ikke lenger bli slettet automatisk!",
|
||||||
|
|
||||||
|
"ticketMessageLimit": "Du kan kun opprette {0} sak(er) om gangen!",
|
||||||
|
"ticketMessageAutoclose": "Denne saken vil bli autolukket når den er inaktiv i {0}t!",
|
||||||
|
"ticketMessageAutodelete": "Denne saken vil bli autoslettet når den er inaktiv i {0} dager!",
|
||||||
|
"panelReady": "Du finner panelet nedenfor!\nDenne meldingen kan nå slettes!"
|
||||||
|
},
|
||||||
|
"modal": {
|
||||||
|
"closePlaceholder": "Hvorfor lukket du denne saken?",
|
||||||
|
"deletePlaceholder": "Hvorfor slettet du denne saken?",
|
||||||
|
"reopenPlaceholder": "Hvorfor gjenåpnet du denne saken?",
|
||||||
|
"claimPlaceholder": "Hvorfor tok du denne saken?",
|
||||||
|
"unclaimPlaceholder": "Hvorfor frigjorde du denne saken?",
|
||||||
|
"pinPlaceholder": "Hvorfor festet du denne saken?",
|
||||||
|
"unpinPlaceholder": "Hvorfor løsnet du denne saken?"
|
||||||
|
},
|
||||||
|
"logs": {
|
||||||
|
"createLog": "En ny sak er blitt opprettet av {0}!",
|
||||||
|
"closeLog": "Denne saken er blitt lukket av {0}!",
|
||||||
|
"closeDm": "Din sak er blitt lukket på vår server!",
|
||||||
|
"deleteLog": "Denne saken er blitt slettet av {0}!",
|
||||||
|
"deleteDm": "Din sak er blitt slettet på vår server!",
|
||||||
|
"reopenLog": "Denne saken er blitt gjenåpnet av {0}!",
|
||||||
|
"reopenDm": "Din sak er blitt gjenåpnet på vår server!",
|
||||||
|
"claimLog": "Denne saken er blitt tatt av {0}!",
|
||||||
|
"claimDm": "Din sak er blitt tatt på vår server!",
|
||||||
|
"unclaimLog": "Denne saken er blitt frigitt av {0}!",
|
||||||
|
"unclaimDm": "Din sak er blitt frigitt på vår server!",
|
||||||
|
"pinLog": "Denne saken er blitt festet av {0}!",
|
||||||
|
"pinDm": "Din sak er blitt festet på vår server!",
|
||||||
|
"unpinLog": "Denne saken er blitt løsnet av {0}!",
|
||||||
|
"unpinDm": "Din sak er blitt løsnet på vår server!",
|
||||||
|
"renameLog": "Denne saken er blitt omdøpt til {0} av {1}!",
|
||||||
|
"renameDm": "Din sak er blitt omdøpt til {0} på vår server!",
|
||||||
|
"moveLog": "Denne saken er blitt flyttet til {0} av {1}!",
|
||||||
|
"moveDm": "Din sak er blitt flyttet til {0} på vår server!",
|
||||||
|
"addLog": "{0} er blitt lagt til denne saken av {1}!",
|
||||||
|
"addDm": "{0} er blitt lagt til din sak på vår server!",
|
||||||
|
"removeLog": "{0} er blitt fjernet fra denne saken av {1}!",
|
||||||
|
"removeDm": "{0} er blitt fjernet fra din sak på vår server!",
|
||||||
|
|
||||||
|
"blacklistAddLog": "{0} er blitt svartelistet av {1}!",
|
||||||
|
"blacklistRemoveLog": "{0} er blitt fjernet fra svartelisten av {1}!",
|
||||||
|
"blacklistAddDm": "Du er blitt svartelistet på vår server!\nFra nå av kan du ikke opprette en sak!",
|
||||||
|
"blacklistRemoveDm": "Du er blitt fjernet fra svartelisten på vår server!\nNå kan du opprette saker igjen!",
|
||||||
|
"clearLog": "{0} saker er blitt slettet av {1}!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transcripts": {
|
||||||
|
"success": {
|
||||||
|
"visit": "Besøk Utskrift",
|
||||||
|
"ready": "Utskrift Opprettet",
|
||||||
|
"textFileDescription": "Dette er tekstutskriften av en slettet sak!",
|
||||||
|
"htmlProgress": "Vennligst vent mens denne HTML-utskriften blir behandlet...",
|
||||||
|
|
||||||
|
"createdChannel": "En ny {0} utskrift er blitt opprettet på serveren!",
|
||||||
|
"createdCreator": "En ny {0} utskrift er blitt opprettet for en av dine saker!",
|
||||||
|
"createdParticipant": "En ny {0} utskrift er blitt opprettet i en av sakene du deltok i!",
|
||||||
|
"createdActiveAdmin": "En ny {0} utskrift er blitt opprettet i en av sakene du deltok i som admin!",
|
||||||
|
"createdEveryAdmin": "En ny {0} utskrift er blitt opprettet i en av sakene du var admin i!",
|
||||||
|
"createdOther": "En ny {0} utskrift er blitt opprettet!"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"retry": "Prøv Igjen",
|
||||||
|
"continue": "Slett Uten Utskrift",
|
||||||
|
"backup": "Opprett Sikkerhetskopiutskrift",
|
||||||
|
"error": "Noe gikk galt under forsøket på å opprette utskriften.\nHva vil du gjøre?\n\nDenne saken vil ikke bli slettet før du klikker på en av disse knappene."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"titles": {
|
||||||
|
"internalError": "Intern Feil",
|
||||||
|
"optionMissing": "Kommandoalternativ Mangler",
|
||||||
|
"optionInvalid": "Ugyldig Kommandoalternativ",
|
||||||
|
"unknownCommand": "Ukjent Kommando",
|
||||||
|
"noPermissions": "Ingen Tillatelser",
|
||||||
|
"unknownTicket": "Ukjent Sak",
|
||||||
|
"deprecatedTicket": "Utdatert Sak",
|
||||||
|
"unknownOption": "Ukjent Alternativ",
|
||||||
|
"unknownPanel": "Ukjent Panel",
|
||||||
|
"notInGuild": "Ikke På Server",
|
||||||
|
"channelRename": "Kan Ikke Omdøpe Kanal",
|
||||||
|
"busy": "Saken Er Opptatt"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"askForInfo": "Kontakt eieren av denne boten for mer informasjon!",
|
||||||
|
"askForInfoResolve": "Kontakt eieren av denne boten hvis problemet ikke løser seg etter noen forsøk!",
|
||||||
|
"internalError": "Kunne ikke svare på denne {0} på grunn av en intern feil!",
|
||||||
|
"optionMissing": "En påkrevd parameter mangler i denne kommandoen!",
|
||||||
|
"optionInvalid": "En parameter i denne kommandoen er ugyldig!",
|
||||||
|
"optionInvalidChoose": "Velg mellom",
|
||||||
|
"unknownCommand": "Prøv å besøke hjelpmenyen for mer informasjon!",
|
||||||
|
"noPermissions": "Du har ikke tillatelse til å bruke denne {0}!",
|
||||||
|
"noPermissionsList": "Påkrevde tillatelser: (en av dem)",
|
||||||
|
"noPermissionsCooldown": "Du har ikke tillatelse til å bruke denne {0} fordi du har en nedkjølingsperiode!",
|
||||||
|
"noPermissionsBlacklist": "Du har ikke tillatelse til å bruke denne {0} fordi du er svartelistet!",
|
||||||
|
"noPermissionsLimitGlobal": "Du har ikke tillatelse til å opprette en sak fordi serveren har nådd maksgrensen for saker!",
|
||||||
|
"noPermissionsLimitGlobalUser": "Du har ikke tillatelse til å opprette en sak fordi du har nådd maksgrensen for saker!",
|
||||||
|
"noPermissionsLimitOption": "Du har ikke tillatelse til å opprette en sak fordi serveren har nådd maksgrensen for dette alternativet!",
|
||||||
|
"noPermissionsLimitOptionUser": "Du har ikke tillatelse til å opprette en sak fordi du har nådd maksgrensen for dette alternativet!",
|
||||||
|
"unknownTicket": "Prøv denne kommandoen igjen i en gyldig sak!",
|
||||||
|
"deprecatedTicket": "Den nåværende kanalen er ikke en gyldig sak! Den kan ha vært en sak fra en eldre versjon av Open Ticket!",
|
||||||
|
"notInGuild": "Denne {0} fungerer ikke i DM! Prøv igjen på en server!",
|
||||||
|
"channelRename": "På grunn av Discords hastighetsbegrensninger er det for øyeblikket umulig for boten å omdøpe kanalen. Kanalen vil automatisk bli omdøpt innen 10 minutter hvis boten ikke startes på nytt.",
|
||||||
|
"channelRenameSource": "Kilden til denne feilen er: {0}",
|
||||||
|
"busy": "Kan ikke bruke denne {0}!\nSaken behandles for øyeblikket av boten.\n\nPrøv igjen om noen sekunder!"
|
||||||
|
},
|
||||||
|
"optionInvalidReasons": {
|
||||||
|
"stringRegex": "Verdien samsvarer ikke med mønsteret!",
|
||||||
|
"stringMinLength": "Verdien skal være minst {0} tegn!",
|
||||||
|
"stringMaxLength": "Verdien skal være høyst {0} tegn!",
|
||||||
|
"numberInvalid": "Ugyldig tall!",
|
||||||
|
"numberMin": "Tallet skal være minst {0}!",
|
||||||
|
"numberMax": "Tallet skal være høyst {0}!",
|
||||||
|
"numberDecimal": "Tallet kan ikke være et desimaltall!",
|
||||||
|
"numberNegative": "Tallet kan ikke være negativt!",
|
||||||
|
"numberPositive": "Tallet kan ikke være positivt!",
|
||||||
|
"numberZero": "Tallet kan ikke være null!",
|
||||||
|
"channelNotFound": "Kan ikke finne kanalen!",
|
||||||
|
"userNotFound": "Kan ikke finne brukeren!",
|
||||||
|
"roleNotFound": "Kan ikke finne rollen!",
|
||||||
|
"memberNotFound": "Kan ikke finne brukeren!",
|
||||||
|
"mentionableNotFound": "Kan ikke finne brukeren eller rollen!",
|
||||||
|
"channelType": "Ugyldig kanaltype!",
|
||||||
|
"notInGuild": "Dette alternativet krever at du er på en server!"
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"developer": "Du må være utvikleren av boten.",
|
||||||
|
"owner": "Du må være servereieren.",
|
||||||
|
"admin": "Du må være serveradministrator.",
|
||||||
|
"moderator": "Du må være moderator.",
|
||||||
|
"support": "Du må være en del av støtteteamet.",
|
||||||
|
"member": "Du må være medlem.",
|
||||||
|
"discord-administrator": "Du må ha `ADMINISTRATOR`-tillatelsen."
|
||||||
|
},
|
||||||
|
"actionInvalid": {
|
||||||
|
"close": "Saken er allerede lukket!",
|
||||||
|
"reopen": "Saken er ikke lukket ennå!",
|
||||||
|
"claim": "Saken er allerede tatt!",
|
||||||
|
"unclaim": "Saken er ikke tatt ennå!",
|
||||||
|
"pin": "Saken er allerede festet!",
|
||||||
|
"unpin": "Saken er ikke festet ennå!",
|
||||||
|
"add": "Denne brukeren har allerede tilgang til saken!",
|
||||||
|
"remove": "Kan ikke fjerne denne brukeren fra saken!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"params": {
|
||||||
|
"uppercase": {
|
||||||
|
"ticket": "Sak",
|
||||||
|
"tickets": "Saker",
|
||||||
|
"reason": "Årsak",
|
||||||
|
"creator": "Oppretter",
|
||||||
|
"remaining": "Tid Igjen",
|
||||||
|
"added": "Lagt Til",
|
||||||
|
"removed": "Fjernet",
|
||||||
|
"filter": "Filter",
|
||||||
|
"claimedBy": "Tatt Av {0}",
|
||||||
|
"method": "Metode",
|
||||||
|
"type": "Type",
|
||||||
|
"blacklisted": "Svartelistet",
|
||||||
|
"panel": "Panel",
|
||||||
|
"command": "Kommando",
|
||||||
|
"system": "System",
|
||||||
|
"true": "Sann",
|
||||||
|
"false": "Usann",
|
||||||
|
"syntax": "Syntaks",
|
||||||
|
"originalName": "Opprinnelig Navn",
|
||||||
|
"newName": "Nytt Navn",
|
||||||
|
"until": "Til",
|
||||||
|
"validOptions": "Gyldige Alternativer",
|
||||||
|
"validPanels": "Gyldige Paneler",
|
||||||
|
"autoclose": "Autolukking",
|
||||||
|
"autodelete": "Autosletting",
|
||||||
|
"startupDate": "Oppstartsdato",
|
||||||
|
"version": "Versjon",
|
||||||
|
"name": "Navn",
|
||||||
|
"role": "Rolle",
|
||||||
|
"status": "Status",
|
||||||
|
"claimed": "Tatt",
|
||||||
|
"pinned": "Festet",
|
||||||
|
"creationDate": "Opprettelsesdato"
|
||||||
|
},
|
||||||
|
"lowercase": {
|
||||||
|
"text": "tekst",
|
||||||
|
"html": "html",
|
||||||
|
"command": "kommando",
|
||||||
|
"modal": "modal",
|
||||||
|
"button": "knapp",
|
||||||
|
"dropdown": "nedtrekksmeny",
|
||||||
|
"method": "metode"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commands": {
|
||||||
|
"reason": "Angi en valgfri årsak som vil være synlig i loggene.",
|
||||||
|
"help": "Få en liste over alle tilgjengelige kommandoer.",
|
||||||
|
"panel": "Opprett en melding med en nedtrekksmeny eller knapper (for sakopprettelse).",
|
||||||
|
"panelId": "Identifikatoren for panelet du vil opprette.",
|
||||||
|
"panelAutoUpdate": "Ønsker du at dette panelet skal oppdatere seg automatisk når det redigeres?",
|
||||||
|
"ticket": "Opprett en sak med det samme.",
|
||||||
|
"ticketId": "Identifikatoren for saken du vil opprette.",
|
||||||
|
"close": "Lukk en sak.",
|
||||||
|
"delete": "Slett en sak.",
|
||||||
|
"deleteNoTranscript": "Slett denne saken uten å opprette en utskrift.",
|
||||||
|
"reopen": "Gjenåpne en sak.",
|
||||||
|
"claim": "Ta en sak.",
|
||||||
|
"claimUser": "Ta denne saken for en annen bruker i stedet for deg selv.",
|
||||||
|
"unclaim": "Frigi en sak.",
|
||||||
|
"pin": "Fest en sak.",
|
||||||
|
"unpin": "Løsne en sak.",
|
||||||
|
"move": "Flytt en sak.",
|
||||||
|
"moveId": "Identifikatoren for alternativet du vil flytte til.",
|
||||||
|
"rename": "Omdøp en sak.",
|
||||||
|
"renameName": "Det nye navnet på denne saken.",
|
||||||
|
"add": "Legg til en bruker i en sak.",
|
||||||
|
"addUser": "Brukeren som skal legges til.",
|
||||||
|
"remove": "Fjern en bruker fra en sak.",
|
||||||
|
"removeUser": "Brukeren som skal fjernes.",
|
||||||
|
"blacklist": "Administrer svartelisten for saker.",
|
||||||
|
"blacklistView": "Vis en liste over gjeldende svarteliste.",
|
||||||
|
"blacklistAdd": "Legg til en bruker på svartelisten.",
|
||||||
|
"blacklistRemove": "Fjern en bruker fra svartelisten.",
|
||||||
|
"blacklistGet": "Hent detaljer om en svartelistet bruker.",
|
||||||
|
"blacklistGetUser": "Brukeren å hente detaljer fra.",
|
||||||
|
"stats": "Vis statistikk fra boten, en bruker eller en sak.",
|
||||||
|
"statsReset": "Tilbakestill all statistikk for boten (og start tellingen fra null).",
|
||||||
|
"statsGlobal": "Vis global statistikk.",
|
||||||
|
"statsUser": "Vis statistikk fra en bruker på serveren.",
|
||||||
|
"statsUserUser": "Brukeren som skal vises.",
|
||||||
|
"statsTicket": "Vis statistikk for en sak på serveren.",
|
||||||
|
"statsTicketTicket": "Saken som skal vises.",
|
||||||
|
"clear": "Slett flere saker samtidig.",
|
||||||
|
"clearFilter": "Filteret for å slette saker.",
|
||||||
|
"clearFilters": {
|
||||||
|
"all": "Alle",
|
||||||
|
"open": "Åpne",
|
||||||
|
"close": "Lukkede",
|
||||||
|
"claim": "Tatte",
|
||||||
|
"unclaim": "Frigitte",
|
||||||
|
"pin": "Festede",
|
||||||
|
"unpin": "Løsnede",
|
||||||
|
"autoclose": "Autolukkede"
|
||||||
|
},
|
||||||
|
"autoclose": "Administrer autolukking i en sak.",
|
||||||
|
"autocloseDisable": "Deaktiver autolukking i denne saken.",
|
||||||
|
"autocloseEnable": "Aktiver autolukking i denne saken.",
|
||||||
|
"autocloseEnableTime": "Antall timer denne saken må være inaktiv før den lukkes.",
|
||||||
|
"autodelete": "Administrer autosletting i en sak.",
|
||||||
|
"autodeleteDisable": "Deaktiver autosletting i denne saken.",
|
||||||
|
"autodeleteEnable": "Aktiver autosletting i denne saken.",
|
||||||
|
"autodeleteEnableTime": "Antall dager denne saken må være inaktiv før den slettes."
|
||||||
|
},
|
||||||
|
"helpMenu": {
|
||||||
|
"help": "Få en liste over alle tilgjengelige kommandoer.",
|
||||||
|
"ticket": "Opprett en sak med det samme.",
|
||||||
|
"close": "Lukk en sak, dette deaktiverer skriving i kanalen.",
|
||||||
|
"delete": "Slett en sak, dette oppretter en utskrift når det er aktivert.",
|
||||||
|
"reopen": "Gjenåpne en sak, dette aktiverer skriving i kanalen igjen.",
|
||||||
|
"pin": "Fest en sak. Dette flytter saken til toppen og legger til en '📌' emoji i navnet.",
|
||||||
|
"unpin": "Løsne en sak. Saken blir værende på plass, men mister '📌' emojien.",
|
||||||
|
"move": "Flytt en sak. Dette endrer typen på saken.",
|
||||||
|
"rename": "Omdøp en sak. Dette endrer kanalnavnet på saken.",
|
||||||
|
"claim": "Ta en sak. Dette lar teamet ditt vite at du håndterer saken.",
|
||||||
|
"unclaim": "Frigi en sak. Dette lar teamet ditt vite at saken er ledig igjen.",
|
||||||
|
"add": "Legg til en bruker i en sak. Dette gir brukeren tilgang til å lese og skrive i saken.",
|
||||||
|
"remove": "Fjern en bruker fra en sak. Dette fjerner brukerens tilgang til å lese og skrive i saken.",
|
||||||
|
"panel": "Opprett en melding med en nedtrekksmeny eller knapper (for sakopprettelse).",
|
||||||
|
"blacklistView": "Vis en liste over gjeldende svarteliste.",
|
||||||
|
"blacklistAdd": "Legg til en bruker på svartelisten.",
|
||||||
|
"blacklistRemove": "Fjern en bruker fra svartelisten.",
|
||||||
|
"blacklistGet": "Hent detaljer om en svartelistet bruker.",
|
||||||
|
"statsGlobal": "Vis global statistikk.",
|
||||||
|
"statsTicket": "Vis statistikk for en sak på serveren.",
|
||||||
|
"statsUser": "Vis statistikk fra en bruker på serveren.",
|
||||||
|
"statsReset": "Tilbakestill all statistikk for boten (og start tellingen fra null).",
|
||||||
|
"autocloseDisable": "Deaktiver autolukking i denne saken.",
|
||||||
|
"autocloseEnable": "Aktiver autolukking i denne saken.",
|
||||||
|
"autodeleteDisable": "Deaktiver autosletting i denne saken.",
|
||||||
|
"autodeleteEnable": "Aktiver autosletting i denne saken."
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"scopes": {
|
||||||
|
"global": "Global Statistikk",
|
||||||
|
"system": "Systemstatistikk",
|
||||||
|
"user": "Brukerstatistikk",
|
||||||
|
"ticket": "Saksstatistikk",
|
||||||
|
"participants": "Deltakere"
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"ticketsCreated": "Saker Opprettet",
|
||||||
|
"ticketsClosed": "Saker Lukket",
|
||||||
|
"ticketsDeleted": "Saker Slettet",
|
||||||
|
"ticketsReopened": "Saker Gjenåpnet",
|
||||||
|
"ticketsAutoclosed": "Saker Autolukket",
|
||||||
|
"ticketsClaimed": "Saker Tatt",
|
||||||
|
"ticketsPinned": "Saker Festet",
|
||||||
|
"ticketsMoved": "Saker Flyttet",
|
||||||
|
"usersBlacklisted": "Brukere Svartelistet",
|
||||||
|
"transcriptsCreated": "Utskrifter Opprettet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,478 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.1.1",
|
||||||
|
"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":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["DanoGlez"],
|
"translators":["DanoGlez"],
|
||||||
"lastedited":"28/01/2025",
|
"lastedited":"28/01/2025",
|
||||||
"language":"Polish",
|
"language":"Polish",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["quiradon"],
|
"translators":["quiradon"],
|
||||||
"lastedited":"20/08/2024",
|
"lastedited":"20/08/2024",
|
||||||
"language":"Portuguese",
|
"language":"Portuguese",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["SankeDev"],
|
"translators":["SankeDev"],
|
||||||
"lastedited":"27/08/2024",
|
"lastedited":"27/08/2024",
|
||||||
"language":"Romanian",
|
"language":"Romanian",
|
||||||
|
|||||||
@@ -0,0 +1,465 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION": {
|
||||||
|
"otversion": "v4.1.1",
|
||||||
|
"translators": ["NoOneNook"],
|
||||||
|
"lastedited": "25/03/2025",
|
||||||
|
"language": "Russian",
|
||||||
|
"automated": true
|
||||||
|
},
|
||||||
|
"checker": {
|
||||||
|
"system": {
|
||||||
|
"typeError": "[ОШИБКА]",
|
||||||
|
"headerOpenTicket": "ОТКРЫТЬ ТИКЕТ",
|
||||||
|
"typeWarning": "[ПРЕДУПРЕЖДЕНИЕ]",
|
||||||
|
"typeInfo": "[ИНФОРМАЦИЯ]",
|
||||||
|
"headerConfigChecker": "ПРОВЕРКА КОНФИГУРАЦИИ",
|
||||||
|
"headerDescription": "проверьте наличие ошибок в ваших конфигурационных файлах!",
|
||||||
|
"footerError": "бот не запустится, пока все {0} не будут исправлены!",
|
||||||
|
"footerWarning": "рекомендуется исправить все {0} перед запуском!",
|
||||||
|
"footerSupport": "ПОДДЕРЖКА: {0} - ДОКУМЕНТАЦИЯ: {1}",
|
||||||
|
"compactInformation": "используйте {0} для получения дополнительной информации!",
|
||||||
|
"dataPath": "путь",
|
||||||
|
"dataDocs": "документация",
|
||||||
|
"dataMessages": "сообщение"
|
||||||
|
},
|
||||||
|
"messages": {
|
||||||
|
"stringTooShort": "Эта строка не может быть короче {0} символов!",
|
||||||
|
"stringTooLong": "Эта строка не может быть длиннее {0} символов!",
|
||||||
|
"stringLengthInvalid": "Эта строка должна быть длиной {0} символов!",
|
||||||
|
"stringStartsWith": "Эта строка должна начинаться с {0}!",
|
||||||
|
"stringEndsWith": "Эта строка должна заканчиваться на {0}!",
|
||||||
|
"stringContains": "Эта строка должна содержать {0}!",
|
||||||
|
"stringChoices": "Эта строка может быть только одним из следующих значений: {0}!",
|
||||||
|
"stringRegex": "Эта строка недействительна!",
|
||||||
|
"numberTooShort": "Это число не может быть короче {0} символов!",
|
||||||
|
"numberTooLong": "Это число не может быть длиннее {0} символов!",
|
||||||
|
"numberLengthInvalid": "Это число должно быть длиной {0} символов!",
|
||||||
|
"numberTooSmall": "Это число должно быть не менее {0}!",
|
||||||
|
"numberTooLarge": "Это число должно быть не более {0}!",
|
||||||
|
"numberNotEqual": "Это число должно быть {0}!",
|
||||||
|
"numberStep": "Это число должно быть кратным {0}!",
|
||||||
|
"numberStepOffset": "Это число должно быть кратным {0}, начиная с {1}!",
|
||||||
|
"numberStartsWith": "Это число должно начинаться с {0}!",
|
||||||
|
"numberEndsWith": "Это число должно заканчиваться на {0}!",
|
||||||
|
"numberContains": "Это число должно содержать {0}!",
|
||||||
|
"numberChoices": "Это число может быть только одним из следующих значений: {0}!",
|
||||||
|
"numberFloat": "Это число не может быть десятичным!",
|
||||||
|
"numberNegative": "Это число не может быть отрицательным!",
|
||||||
|
"numberPositive": "Это число не может быть положительным!",
|
||||||
|
"numberZero": "Это число не может быть нулем!",
|
||||||
|
"booleanTrue": "Это булево значение не может быть истинным!",
|
||||||
|
"booleanFalse": "Это булево значение не может быть ложным!",
|
||||||
|
"arrayEmptyDisabled": "Этот массив не может быть пустым!",
|
||||||
|
"arrayEmptyRequired": "Этот массив должен быть пустым!",
|
||||||
|
"arrayTooShort": "Этот массив должен иметь длину не менее {0}!",
|
||||||
|
"arrayTooLong": "Этот массив должен иметь длину не более {0}!",
|
||||||
|
"arrayLengthInvalid": "Этот массив должен иметь длину {0}!",
|
||||||
|
"arrayInvalidTypes": "Этот массив может содержать только следующие типы: {0}!",
|
||||||
|
"arrayDouble": "Этот массив не допускает повторяющихся значений!",
|
||||||
|
"discordInvalidId": "Это недействительный идентификатор {0} в Discord!",
|
||||||
|
"discordInvalidIdOptions": "Это недействительный идентификатор {0} в Discord! Вы также можете использовать один из следующих: {1}!",
|
||||||
|
"discordInvalidToken": "Это недействительный токен Discord (синтаксически)!",
|
||||||
|
"colorInvalid": "Это недействительный шестнадцатеричный цвет!",
|
||||||
|
"emojiTooShort": "Эта строка должна содержать не менее {0} эмодзи!",
|
||||||
|
"emojiTooLong": "Эта строка должна содержать не более {0} эмодзи!",
|
||||||
|
"emojiCustom": "Этот эмодзи не может быть пользовательским эмодзи Discord!",
|
||||||
|
"emojiInvalid": "Это недействительный эмодзи!",
|
||||||
|
"urlInvalid": "Этот URL недействителен!",
|
||||||
|
"urlInvalidHttp": "Этот URL может использовать только протокол https://!",
|
||||||
|
"urlInvalidProtocol": "Этот URL может использовать только протоколы http:// и https://!",
|
||||||
|
"urlInvalidHostname": "Этот URL имеет недопустимое имя хоста!",
|
||||||
|
"urlInvalidExtension": "Этот URL имеет недействительное расширение! Выберите из: {0}!",
|
||||||
|
"urlInvalidPath": "Этот URL имеет недействительный путь!",
|
||||||
|
"idNotUnique": "Этот идентификатор не уникален, используйте другой идентификатор!",
|
||||||
|
"idNonExistent": "Идентификатор {0} не существует!",
|
||||||
|
"invalidType": "Это свойство должно быть типа: {0}!",
|
||||||
|
"propertyMissing": "Свойство {0} отсутствует в этом объекте!",
|
||||||
|
"propertyOptional": "Свойство {0} необязательно в этом объекте!",
|
||||||
|
"objectDisabled": "Этот объект отключен, включите его с помощью {0}!",
|
||||||
|
"nullInvalid": "Это свойство не может быть null!",
|
||||||
|
"switchInvalidType": "Это должно быть одним из следующих типов: {0}!",
|
||||||
|
"objectSwitchInvalid": "Этот объект должен быть одним из следующих типов: {0}!",
|
||||||
|
"invalidLanguage": "Это недействительный язык!",
|
||||||
|
"invalidButton": "Эта кнопка должна иметь хотя бы {0} или {1}!",
|
||||||
|
"unusedOption": "Опция {0} нигде не используется!",
|
||||||
|
"unusedQuestion": "Вопрос {0} нигде не используется!",
|
||||||
|
"dropdownOption": "Панель с включенным выпадающим списком может содержать только опции типа 'ticket'!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"buttons": {
|
||||||
|
"create": "Посетить тикет",
|
||||||
|
"close": "Закрыть тикет",
|
||||||
|
"delete": "Удалить тикет",
|
||||||
|
"reopen": "Переоткрыть тикет",
|
||||||
|
"claim": "Забрать тикет",
|
||||||
|
"unclaim": "Отказаться от тикета",
|
||||||
|
"pin": "Закрепить тикет",
|
||||||
|
"unpin": "Открепить тикет",
|
||||||
|
"clear": "Удалить тикеты",
|
||||||
|
"helpSwitchSlash": "Просмотреть слэш-команды",
|
||||||
|
"helpSwitchText": "Просмотреть текстовые команды",
|
||||||
|
"helpPage": "Страница {0}",
|
||||||
|
"withReason": "С причиной",
|
||||||
|
"withoutTranscript": "Без стенограммы"
|
||||||
|
},
|
||||||
|
"titles": {
|
||||||
|
"created": "Тикет создан",
|
||||||
|
"close": "Тикет закрыт",
|
||||||
|
"delete": "Тикет удален",
|
||||||
|
"reopen": "Тикет переоткрыт",
|
||||||
|
"claim": "Тикет забран",
|
||||||
|
"unclaim": "Тикет освобожден",
|
||||||
|
"pin": "Тикет закреплен",
|
||||||
|
"unpin": "Тикет откреплен",
|
||||||
|
"rename": "Тикет переименован",
|
||||||
|
"move": "Тикет перемещен",
|
||||||
|
"add": "Пользователь добавлен в тикет",
|
||||||
|
"remove": "Пользователь удален из тикета",
|
||||||
|
"help": "Доступные команды",
|
||||||
|
"statsReset": "Сбросить статистику",
|
||||||
|
"blacklistAdd": "Пользователь в черном списке",
|
||||||
|
"blacklistRemove": "Пользователь освобожден",
|
||||||
|
"blacklistGet": "Пользователь в черном списке",
|
||||||
|
"blacklistView": "Текущий черный список",
|
||||||
|
"blacklistAddDm": "Добавлен в черный список",
|
||||||
|
"blacklistRemoveDm": "Удален из черного списка",
|
||||||
|
"clear": "Тикеты очищены",
|
||||||
|
"roles": "Роли обновлены",
|
||||||
|
"autoclose": "Тикет автоматически закрыт",
|
||||||
|
"autocloseEnabled": "Автозакрытие включено",
|
||||||
|
"autocloseDisabled": "Автозакрытие отключено",
|
||||||
|
"autodelete": "Тикет автоматически удален",
|
||||||
|
"autodeleteEnabled": "Автоудаление включено",
|
||||||
|
"autodeleteDisabled": "Автоудаление отключено"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"create": "Ваш тикет был создан. Нажмите кнопку ниже, чтобы получить к нему доступ!",
|
||||||
|
"close": "Тикет был успешно закрыт!",
|
||||||
|
"delete": "Тикет был успешно удален!",
|
||||||
|
"reopen": "Тикет был успешно переоткрыт!",
|
||||||
|
"claim": "Тикет был успешно забран!",
|
||||||
|
"unclaim": "Тикет был успешно освобожден!",
|
||||||
|
"pin": "Тикет был успешно закреплен!",
|
||||||
|
"unpin": "Тикет был успешно откреплен!",
|
||||||
|
"rename": "Тикет был успешно переименован в {0}!",
|
||||||
|
"move": "Тикет был успешно перемещен в {0}!",
|
||||||
|
"add": "{0} был успешно добавлен в тикет!",
|
||||||
|
"remove": "{0} был успешно удален из тикета!",
|
||||||
|
"helpExplanation": "`<name>` => обязательный параметр\n`[name]` => необязательный параметр",
|
||||||
|
"statsReset": "Статистика бота была успешно сброшена!",
|
||||||
|
"statsError": "Невозможно просмотреть статистику тикета!\n{0} не является тикетом!",
|
||||||
|
"blacklistAdd": "{0} был успешно добавлен в черный список!",
|
||||||
|
"blacklistRemove": "{0} был успешно удален из черного списка!",
|
||||||
|
"blacklistGetSuccess": "{0} в настоящее время в черном списке!",
|
||||||
|
"blacklistGetEmpty": "{0} в настоящее время не в черном списке!",
|
||||||
|
"blacklistViewEmpty": "Никто еще не был добавлен в черный список!",
|
||||||
|
"blacklistViewTip": "Используйте \"/blacklist add\", чтобы добавить пользователя в черный список!",
|
||||||
|
"clearVerify": "Вы уверены, что хотите удалить несколько тикетов?\nЭто действие не может быть отменено!",
|
||||||
|
"clearReady": "{0} тикетов были успешно удалены!",
|
||||||
|
"rolesEmpty": "Ни одна роль не была обновлена!",
|
||||||
|
"autocloseLeave": "Этот тикет был автоматически закрыт, потому что создатель покинул сервер!",
|
||||||
|
"autocloseTimeout": "Этот тикет был автоматически закрыт, потому что он был неактивен более `{0}ч`!",
|
||||||
|
"autodeleteLeave": "Этот тикет был автоматически удален, потому что создатель покинул сервер!",
|
||||||
|
"autodeleteTimeout": "Этот тикет был автоматически удален, потому что он был неактивен более `{0} дней`!",
|
||||||
|
"autocloseEnabled": "Автозакрытие было включено для этого тикета!\nОн будет закрыт, если будет неактивен более `{0}ч`!",
|
||||||
|
"autocloseDisabled": "Автозакрытие было отключено для этого тикета!\nОн больше не будет закрываться автоматически!",
|
||||||
|
"autodeleteEnabled": "Автоудаление было включено для этого тикета!\nОн будет удален, если будет неактивен более `{0} дней`!",
|
||||||
|
"autodeleteDisabled": "Автоудаление было отключено для этого тикета!\nОн больше не будет удаляться автоматически!",
|
||||||
|
"ticketMessageLimit": "Вы можете создать только {0} тикет(ов) одновременно!",
|
||||||
|
"ticketMessageAutoclose": "Этот тикет будет автоматически закрыт, если будет неактивен {0}ч!",
|
||||||
|
"ticketMessageAutodelete": "Этот тикет будет автоматически удален, если будет неактивен {0} дней!",
|
||||||
|
"panelReady": "Вы можете найти панель ниже!\nЭто сообщение теперь можно удалить!"
|
||||||
|
},
|
||||||
|
"modal": {
|
||||||
|
"closePlaceholder": "Почему вы закрыли этот тикет?",
|
||||||
|
"deletePlaceholder": "Почему вы удалили этот тикет?",
|
||||||
|
"reopenPlaceholder": "Почему вы переоткрыли этот тикет?",
|
||||||
|
"claimPlaceholder": "Почему вы забрали этот тикет?",
|
||||||
|
"unclaimPlaceholder": "Почему вы отказались от этого тикета?",
|
||||||
|
"pinPlaceholder": "Почему вы закрепили этот тикет?",
|
||||||
|
"unpinPlaceholder": "Почему вы открепили этот тикет?"
|
||||||
|
},
|
||||||
|
"logs": {
|
||||||
|
"createLog": "Новый тикет был создан {0}!",
|
||||||
|
"closeLog": "Этот тикет был закрыт {0}!",
|
||||||
|
"closeDm": "Ваш тикет был закрыт на нашем сервере!",
|
||||||
|
"deleteLog": "Этот тикет был удален {0}!",
|
||||||
|
"deleteDm": "Ваш тикет был удален на нашем сервере!",
|
||||||
|
"reopenLog": "Этот тикет был переоткрыт {0}!",
|
||||||
|
"reopenDm": "Ваш тикет был переоткрыт на нашем сервере!",
|
||||||
|
"claimLog": "Этот тикет был забран {0}!",
|
||||||
|
"claimDm": "Ваш тикет был забран на нашем сервере!",
|
||||||
|
"unclaimLog": "Этот тикет был освобожден {0}!",
|
||||||
|
"unclaimDm": "Ваш тикет был освобожден на нашем сервере!",
|
||||||
|
"pinLog": "Этот тикет был закреплен {0}!",
|
||||||
|
"pinDm": "Ваш тикет был закреплен на нашем сервере!",
|
||||||
|
"unpinLog": "Этот тикет был откреплен {0}!",
|
||||||
|
"unpinDm": "Ваш тикет был откреплен на нашем сервере!",
|
||||||
|
"renameLog": "Этот тикет был переименован в {0} пользователем {1}!",
|
||||||
|
"renameDm": "Ваш тикет был переименован в {0} на нашем сервере!",
|
||||||
|
"moveLog": "Этот тикет был перемещен в {0} пользователем {1}!",
|
||||||
|
"moveDm": "Ваш тикет был перемещен в {0} на нашем сервере!",
|
||||||
|
"addLog": "{0} был добавлен в этот тикет пользователем {1}!",
|
||||||
|
"addDm": "{0} был добавлен в ваш тикет на нашем сервере!",
|
||||||
|
"removeLog": "{0} был удален из этого тикета пользователем {1}!",
|
||||||
|
"removeDm": "{0} был удален из вашего тикета на нашем сервере!",
|
||||||
|
"blacklistAddLog": "{0} был добавлен в черный список {1}!",
|
||||||
|
"blacklistRemoveLog": "{0} был удален из черного списка {1}!",
|
||||||
|
"blacklistAddDm": "Вы были добавлены в черный список на нашем сервере!\nОтныне вы не можете создавать тикеты!",
|
||||||
|
"blacklistRemoveDm": "Вы были удалены из черного списка на нашем сервере!\nТеперь вы снова можете создавать тикеты!",
|
||||||
|
"clearLog": "{0} тикетов были удалены {1}!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transcripts": {
|
||||||
|
"success": {
|
||||||
|
"visit": "Посетить стенограмму",
|
||||||
|
"ready": "Стенограмма создана",
|
||||||
|
"textFileDescription": "Это текстовая стенограмма удаленного тикета!",
|
||||||
|
"htmlProgress": "Пожалуйста, подождите, пока эта html-стенограмма обрабатывается...",
|
||||||
|
"createdChannel": "Новая {0} стенограмма была создана на сервере!",
|
||||||
|
"createdCreator": "Новая {0} стенограмма была создана для одного из ваших тикетов!",
|
||||||
|
"createdParticipant": "Новая {0} стенограмма была создана в одном из тикетов, в котором вы участвовали!",
|
||||||
|
"createdActiveAdmin": "Новая {0} стенограмма была создана в одном из тикетов, в котором вы участвовали как администратор!",
|
||||||
|
"createdEveryAdmin": "Новая {0} стенограмма была создана в одном из тикетов, в котором вы были администратором!",
|
||||||
|
"createdOther": "Новая {0} стенограмма была создана!"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"retry": "Повторить",
|
||||||
|
"continue": "Удалить без стенограммы",
|
||||||
|
"backup": "Создать резервную стенограмму",
|
||||||
|
"error": "Что-то пошло не так при попытке создать стенограмму.\nЧто вы хотите сделать?\n\nЭтот тикет не будет удален, пока вы не нажмете одну из этих кнопок."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"titles": {
|
||||||
|
"internalError": "Внутренняя ошибка",
|
||||||
|
"optionMissing": "Отсутствует опция команды",
|
||||||
|
"optionInvalid": "Недействительная опция команды",
|
||||||
|
"unknownCommand": "Неизвестная команда",
|
||||||
|
"noPermissions": "Нет разрешений",
|
||||||
|
"unknownTicket": "Неизвестный тикет",
|
||||||
|
"deprecatedTicket": "Устаревший тикет",
|
||||||
|
"unknownOption": "Неизвестная опция",
|
||||||
|
"unknownPanel": "Неизвестная панель",
|
||||||
|
"notInGuild": "Не на сервере",
|
||||||
|
"channelRename": "Невозможно переименовать канал",
|
||||||
|
"busy": "Тикет занят"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"askForInfo": "Свяжитесь с владельцем этого бота для получения дополнительной информации!",
|
||||||
|
"askForInfoResolve": "Свяжитесь с владельцем бота, если эта проблема не решится после нескольких попыток.",
|
||||||
|
"internalError": "Не удалось ответить на это {0} из-за внутренней ошибки!",
|
||||||
|
"optionMissing": "В этой команде отсутствует обязательный параметр!",
|
||||||
|
"optionInvalid": "Параметр в этой команде недействителен!",
|
||||||
|
"optionInvalidChoose": "Выберите из",
|
||||||
|
"unknownCommand": "Попробуйте посетить меню помощи для получения дополнительной информации!",
|
||||||
|
"noPermissions": "Вам не разрешено использовать это {0}!",
|
||||||
|
"noPermissionsList": "Требуемые разрешения: (одно из них)",
|
||||||
|
"noPermissionsCooldown": "Вам не разрешено использовать это {0}, потому что у вас есть перезарядка!",
|
||||||
|
"noPermissionsBlacklist": "Вам не разрешено использовать это {0}, потому что вы были добавлены в черный список!",
|
||||||
|
"noPermissionsLimitGlobal": "Вам не разрешено создавать тикет, потому что сервер достиг максимального предела тикетов!",
|
||||||
|
"noPermissionsLimitGlobalUser": "Вам не разрешено создавать тикет, потому что вы достигли максимального предела тикетов!",
|
||||||
|
"noPermissionsLimitOption": "Вам не разрешено создавать тикет, потому что сервер достиг максимального предела тикетов для этой опции!",
|
||||||
|
"noPermissionsLimitOptionUser": "Вам не разрешено создавать тикет, потому что вы достигли максимального предела тикетов для этой опции!",
|
||||||
|
"unknownTicket": "Попробуйте эту команду еще раз в действительном тикете!",
|
||||||
|
"deprecatedTicket": "Текущий канал не является действительным тикетом! Возможно, это был тикет из старой версии Open Ticket!",
|
||||||
|
"notInGuild": "Это {0} не работает в ЛС! Пожалуйста, попробуйте еще раз на сервере!",
|
||||||
|
"channelRename": "Из-за ограничений Discord на частоту запросов, боту сейчас невозможно переименовать канал. Канал будет автоматически переименован через 10 минут, если бот не будет перезагружен.",
|
||||||
|
"channelRenameSource": "Источник этой ошибки: {0}",
|
||||||
|
"busy": "Невозможно использовать это {0}!\nТикет в настоящее время обрабатывается ботом.\n\nПожалуйста, попробуйте еще раз через несколько секунд!"
|
||||||
|
},
|
||||||
|
"optionInvalidReasons": {
|
||||||
|
"stringRegex": "Значение не соответствует шаблону!",
|
||||||
|
"stringMinLength": "Значение должно быть не менее {0} символов!",
|
||||||
|
"stringMaxLength": "Значение должно быть не более {0} символов!",
|
||||||
|
"numberInvalid": "Недействительное число!",
|
||||||
|
"numberMin": "Число должно быть не менее {0}!",
|
||||||
|
"numberMax": "Число должно быть не более {0}!",
|
||||||
|
"numberDecimal": "Число не может быть десятичным!",
|
||||||
|
"numberNegative": "Число не может быть отрицательным!",
|
||||||
|
"numberPositive": "Число не может быть положительным!",
|
||||||
|
"numberZero": "Число не может быть нулем!",
|
||||||
|
"channelNotFound": "Невозможно найти канал!",
|
||||||
|
"userNotFound": "Невозможно найти пользователя!",
|
||||||
|
"roleNotFound": "Невозможно найти роль!",
|
||||||
|
"memberNotFound": "Невозможно найти пользователя!",
|
||||||
|
"mentionableNotFound": "Невозможно найти пользователя или роль!",
|
||||||
|
"channelType": "Недействительный тип канала!",
|
||||||
|
"notInGuild": "Для этой опции вам нужно быть на сервере!"
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"developer": "Вы должны быть разработчиком бота.",
|
||||||
|
"owner": "Вы должны быть владельцем сервера.",
|
||||||
|
"admin": "Вы должны быть администратором сервера.",
|
||||||
|
"moderator": "Вы должны быть модератором.",
|
||||||
|
"support": "Вы должны быть в команде поддержки.",
|
||||||
|
"member": "Вы должны быть участником.",
|
||||||
|
"discord-administrator": "У вас должно быть разрешение `ADMINISTRATOR`."
|
||||||
|
},
|
||||||
|
"actionInvalid": {
|
||||||
|
"close": "Тикет уже закрыт!",
|
||||||
|
"reopen": "Тикет еще не закрыт!",
|
||||||
|
"claim": "Тикет уже забран!",
|
||||||
|
"unclaim": "Тикет еще не забран!",
|
||||||
|
"pin": "Тикет уже закреплен!",
|
||||||
|
"unpin": "Тикет еще не закреплен!",
|
||||||
|
"add": "Этот пользователь уже имеет доступ к тикету!",
|
||||||
|
"remove": "Невозможно удалить этого пользователя из тикета!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"params": {
|
||||||
|
"uppercase": {
|
||||||
|
"ticket": "Тикет",
|
||||||
|
"tickets": "Тикеты",
|
||||||
|
"reason": "Причина",
|
||||||
|
"creator": "Создатель",
|
||||||
|
"remaining": "Оставшееся время",
|
||||||
|
"added": "Добавлен",
|
||||||
|
"removed": "Удален",
|
||||||
|
"filter": "Фильтр",
|
||||||
|
"claimedBy": "Забран {0}",
|
||||||
|
"method": "Метод",
|
||||||
|
"type": "Тип",
|
||||||
|
"blacklisted": "В черном списке",
|
||||||
|
"panel": "Панель",
|
||||||
|
"command": "Команда",
|
||||||
|
"system": "Система",
|
||||||
|
"true": "Истина",
|
||||||
|
"false": "Ложь",
|
||||||
|
"syntax": "Синтаксис",
|
||||||
|
"originalName": "Исходное имя",
|
||||||
|
"newName": "Новое имя",
|
||||||
|
"until": "До",
|
||||||
|
"validOptions": "Действительные опции",
|
||||||
|
"validPanels": "Действительные панели",
|
||||||
|
"autoclose": "Автозакрытие",
|
||||||
|
"autodelete": "Автоудаление",
|
||||||
|
"startupDate": "Дата запуска",
|
||||||
|
"version": "Версия",
|
||||||
|
"name": "Имя",
|
||||||
|
"role": "Роль",
|
||||||
|
"status": "Статус",
|
||||||
|
"claimed": "Забран",
|
||||||
|
"pinned": "Закреплен",
|
||||||
|
"creationDate": "Дата создания"
|
||||||
|
},
|
||||||
|
"lowercase": {
|
||||||
|
"text": "текст",
|
||||||
|
"html": "html",
|
||||||
|
"command": "команда",
|
||||||
|
"modal": "модальное окно",
|
||||||
|
"button": "кнопка",
|
||||||
|
"dropdown": "выпадающий список",
|
||||||
|
"method": "метод"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commands": {
|
||||||
|
"reason": "Укажите необязательную причину, которая будет видна в журналах.",
|
||||||
|
"help": "Получите список всех доступных команд.",
|
||||||
|
"panel": "Создайте сообщение с выпадающим списком или кнопками (для создания тикета).",
|
||||||
|
"panelId": "Идентификатор панели, которую вы хотите создать.",
|
||||||
|
"panelAutoUpdate": "Хотите ли вы, чтобы эта панель автоматически обновлялась при редактировании?",
|
||||||
|
"ticket": "Мгновенно создать тикет.",
|
||||||
|
"ticketId": "Идентификатор тикета, который вы хотите создать.",
|
||||||
|
"close": "Закрыть тикет.",
|
||||||
|
"delete": "Удалить тикет.",
|
||||||
|
"deleteNoTranscript": "Удалить этот тикет без создания стенограммы.",
|
||||||
|
"reopen": "Переоткрыть тикет.",
|
||||||
|
"claim": "Забрать тикет.",
|
||||||
|
"claimUser": "Забрать этот тикет для кого-то другого, а не для себя.",
|
||||||
|
"unclaim": "Отказаться от тикета.",
|
||||||
|
"pin": "Закрепить тикет.",
|
||||||
|
"unpin": "Открепить тикет.",
|
||||||
|
"move": "Переместить тикет.",
|
||||||
|
"moveId": "Идентификатор опции, в которую вы хотите переместить.",
|
||||||
|
"rename": "Переименовать тикет.",
|
||||||
|
"renameName": "Новое имя для этого тикета.",
|
||||||
|
"add": "Добавить пользователя в тикет.",
|
||||||
|
"addUser": "Пользователь, которого нужно добавить.",
|
||||||
|
"remove": "Удалить пользователя из тикета.",
|
||||||
|
"removeUser": "Пользователь, которого нужно удалить.",
|
||||||
|
"blacklist": "Управление черным списком тикетов.",
|
||||||
|
"blacklistView": "Просмотреть список текущего черного списка.",
|
||||||
|
"blacklistAdd": "Добавить пользователя в черный список.",
|
||||||
|
"blacklistRemove": "Удалить пользователя из черного списка.",
|
||||||
|
"blacklistGet": "Получить подробности о пользователе в черном списке.",
|
||||||
|
"blacklistGetUser": "Пользователь, о котором нужно получить подробности.",
|
||||||
|
"stats": "Просмотреть статистику бота, участника или тикета.",
|
||||||
|
"statsReset": "Сбросить всю статистику бота (и начать отсчет с нуля).",
|
||||||
|
"statsGlobal": "Просмотреть глобальную статистику.",
|
||||||
|
"statsUser": "Просмотреть статистику пользователя на сервере.",
|
||||||
|
"statsUserUser": "Пользователь для просмотра.",
|
||||||
|
"statsTicket": "Просмотреть статистику тикета на сервере.",
|
||||||
|
"statsTicketTicket": "Тикет для просмотра.",
|
||||||
|
"clear": "Удалить несколько тикетов одновременно.",
|
||||||
|
"clearFilter": "Фильтр для очистки тикетов.",
|
||||||
|
"clearFilters": {
|
||||||
|
"all": "Все",
|
||||||
|
"open": "Открытые",
|
||||||
|
"close": "Закрытые",
|
||||||
|
"claim": "Забранные",
|
||||||
|
"unclaim": "Не забранные",
|
||||||
|
"pin": "Закрепленные",
|
||||||
|
"unpin": "Не закрепленные",
|
||||||
|
"autoclose": "Автоматически закрытые"
|
||||||
|
},
|
||||||
|
"autoclose": "Управление автозакрытием в тикете.",
|
||||||
|
"autocloseDisable": "Отключить автозакрытие в этом тикете.",
|
||||||
|
"autocloseEnable": "Включить автозакрытие в этом тикете.",
|
||||||
|
"autocloseEnableTime": "Количество часов, в течение которых тикет должен быть неактивен, чтобы закрыть его.",
|
||||||
|
"autodelete": "Управление автоудалением в тикете.",
|
||||||
|
"autodeleteDisable": "Отключить автоудаление в этом тикете.",
|
||||||
|
"autodeleteEnable": "Включить автоудаление в этом тикете.",
|
||||||
|
"autodeleteEnableTime": "Количество дней, в течение которых тикет должен быть неактивен, чтобы удалить его."
|
||||||
|
},
|
||||||
|
"helpMenu": {
|
||||||
|
"help": "Получите список всех доступных команд.",
|
||||||
|
"ticket": "Мгновенно создать тикет.",
|
||||||
|
"close": "Закрыть тикет, это отключает запись в этом канале.",
|
||||||
|
"delete": "Удалить тикет, это создает стенограмму, если включено.",
|
||||||
|
"reopen": "Переоткрыть тикет, это снова включает запись в этом канале.",
|
||||||
|
"pin": "Закрепить тикет. Это переместит тикет наверх и добавит к имени эмодзи '📌'.",
|
||||||
|
"unpin": "Открепить тикет. Тикет останется на своем месте, но потеряет эмодзи '📌'.",
|
||||||
|
"move": "Переместить тикет. Это изменит тип этого тикета.",
|
||||||
|
"rename": "Переименовать тикет. Это изменит имя канала этого тикета.",
|
||||||
|
"claim": "Забрать тикет. С помощью этого вы можете сообщить своей команде, что вы обрабатываете этот тикет.",
|
||||||
|
"unclaim": "Отказаться от тикета. С помощью этого вы можете сообщить своей команде, что этот тикет снова свободен.",
|
||||||
|
"add": "Добавить пользователя в тикет. Это позволит пользователю читать и писать в этом тикете.",
|
||||||
|
"remove": "Удалить пользователя из тикета. Это удалит возможность читать и писать для пользователя в этом тикете.",
|
||||||
|
"panel": "Создайте сообщение с выпадающим списком или кнопками (для создания тикета).",
|
||||||
|
"blacklistView": "Просмотреть список текущего черного списка.",
|
||||||
|
"blacklistAdd": "Добавить пользователя в черный список.",
|
||||||
|
"blacklistRemove": "Удалить пользователя из черного списка.",
|
||||||
|
"blacklistGet": "Получить подробности о пользователе в черном списке.",
|
||||||
|
"statsGlobal": "Просмотреть глобальную статистику.",
|
||||||
|
"statsTicket": "Просмотреть статистику тикета на сервере.",
|
||||||
|
"statsUser": "Просмотреть статистику пользователя на сервере.",
|
||||||
|
"statsReset": "Сбросить всю статистику бота (и начать отсчет с нуля).",
|
||||||
|
"autocloseDisable": "Отключить автозакрытие в этом тикете.",
|
||||||
|
"autocloseEnable": "Включить автозакрытие в этом тикете.",
|
||||||
|
"autodeleteDisable": "Отключить автоудаление в этом тикете.",
|
||||||
|
"autodeleteEnable": "Включить автоудаление в этом тикете."
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"scopes": {
|
||||||
|
"global": "Глобальная статистика",
|
||||||
|
"system": "Статистика системы",
|
||||||
|
"user": "Статистика пользователя",
|
||||||
|
"ticket": "Статистика тикета",
|
||||||
|
"participants": "Участники"
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"ticketsCreated": "Тикеты созданы",
|
||||||
|
"ticketsClosed": "Тикеты закрыты",
|
||||||
|
"ticketsDeleted": "Тикеты удалены",
|
||||||
|
"ticketsReopened": "Тикеты переоткрыты",
|
||||||
|
"ticketsAutoclosed": "Тикеты автоматически закрыты",
|
||||||
|
"ticketsClaimed": "Тикеты забраны",
|
||||||
|
"ticketsPinned": "Тикеты закреплены",
|
||||||
|
"ticketsMoved": "Тикеты перемещены",
|
||||||
|
"usersBlacklisted": "Пользователи в черном списке",
|
||||||
|
"transcriptsCreated": "Стенограммы созданы"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,608 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.1.1",
|
||||||
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
|
"lastedited":"16/11/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":"此字符串无效!",
|
||||||
|
"stringInvertedContains":"此字符串不能包含 {0}!",
|
||||||
|
"stringLowercase":"此字符串必须全部使用小写字母!",
|
||||||
|
"stringUppercase":"此字符串必须全部使用大写字母!",
|
||||||
|
"stringSpecialCharacters":"此字符串不能包含任何特殊字符!(仅允许 a-z、0-9 和空格)",
|
||||||
|
"stringNoSpaces":"此字符串不能包含空格!",
|
||||||
|
"stringCapitalWord":"建议此字符串中的每个单词都以大写字母开头!",
|
||||||
|
"stringCapitalSentence":"此字符串中的某些句子似乎没有以大写字母开头!",
|
||||||
|
"stringPunctuation":"此字符串中的句子似乎没有以标点符号结尾!",
|
||||||
|
|
||||||
|
"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":"此数字不能为零!",
|
||||||
|
"numberNan":"此数字不能为 NaN(非数字)!",
|
||||||
|
"numberInvertedContains":"此数字不能包含 {0}!",
|
||||||
|
|
||||||
|
"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”类型的选项!",
|
||||||
|
"customInvalidVersion":"配置文件中指定的版本不匹配!请确保您已将配置更新至最新版本!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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":"工单已清除",
|
||||||
|
"clearTickets":"清除工单",
|
||||||
|
"roles":"角色已更新",
|
||||||
|
|
||||||
|
"autoclose":"工单自动关闭",
|
||||||
|
"autocloseEnabled":"自动关闭已启用",
|
||||||
|
"autocloseDisabled":"自动关闭已禁用",
|
||||||
|
"autodelete":"工单自动删除",
|
||||||
|
"autodeleteEnabled":"自动删除已启用",
|
||||||
|
"autodeleteDisabled":"自动删除已禁用",
|
||||||
|
|
||||||
|
"topicSet":"主题已更改",
|
||||||
|
"prioritySet":"优先级已更改",
|
||||||
|
"priorityGet":"工单优先级",
|
||||||
|
"transfer":"工单已转移"
|
||||||
|
},
|
||||||
|
"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此消息现在可以删除!",
|
||||||
|
|
||||||
|
"topicSet":"频道主题已由 {0} 成功更改!",
|
||||||
|
"prioritySet":"工单优先级已由 {1} 成功更改为 {0}!",
|
||||||
|
"priorityGet":"此工单当前的优先级为 {0}。",
|
||||||
|
"transfer":"工单所有权已由 {2} 成功从 {0} 转移至 {1}!"
|
||||||
|
},
|
||||||
|
"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}删除!",
|
||||||
|
|
||||||
|
"transferLog":"此工单的所有权已由 {2} 从 {0} 转移至 {1}!",
|
||||||
|
"transferDm":"您在服务器中的工单所有权已从 {0} 转移至 {1}!",
|
||||||
|
"prioritySetLog":"此工单的优先级已由 {1} 更改为 {0}!",
|
||||||
|
"prioritySetDm":"您在服务器中的工单优先级已更改为 {0}!",
|
||||||
|
"roleUpdateLog":"{0} 已更新其角色!",
|
||||||
|
"roleUpdateDm":"您在服务器中的角色已更新!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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在您点击以下按钮之前,此工单不会被删除。",
|
||||||
|
"title":"记录错误"
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"消息",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"文件",
|
||||||
|
"fieldsTitle":"字段",
|
||||||
|
"reactionsTitle":"反应",
|
||||||
|
"statsTitle":"统计",
|
||||||
|
"emptyContent":"<内容为空>",
|
||||||
|
"noTitle":"<无标题>",
|
||||||
|
"noDesc":"<无描述>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors":{
|
||||||
|
"titles":{
|
||||||
|
"internalError":"内部错误",
|
||||||
|
"optionMissing":"命令选项缺失",
|
||||||
|
"optionInvalid":"命令选项无效",
|
||||||
|
"unknownCommand":"未知命令",
|
||||||
|
"noPermissions":"无权限",
|
||||||
|
"unknownTicket":"未知工单",
|
||||||
|
"deprecatedTicket":"过时工单",
|
||||||
|
"unknownOption":"未知选项",
|
||||||
|
"unknownPanel":"未知面板",
|
||||||
|
"notInGuild":"不在服务器中",
|
||||||
|
"channelRename":"无法重命名频道",
|
||||||
|
"busy":"工单繁忙",
|
||||||
|
"permissionError":"权限错误"
|
||||||
|
},
|
||||||
|
"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请几秒后重试!",
|
||||||
|
"closeBeforeMessage":"用户发送消息之前,无法关闭或删除此工单。",
|
||||||
|
"closeBeforeAdminMessage":"工单管理员或支持成员发送消息之前,无法关闭或删除此工单。",
|
||||||
|
"unableToCreateTicket":"您无法创建工单。"
|
||||||
|
},
|
||||||
|
"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":"筛选",
|
||||||
|
"method":"方式",
|
||||||
|
"type":"类型",
|
||||||
|
"blacklisted":"已拉黑",
|
||||||
|
"panel":"面板",
|
||||||
|
"command":"命令",
|
||||||
|
"system":"系统",
|
||||||
|
"true":"是",
|
||||||
|
"false":"否",
|
||||||
|
"syntax":"语法",
|
||||||
|
"originalName":"原名称",
|
||||||
|
"newName":"新名称",
|
||||||
|
"until":"直到",
|
||||||
|
"validOptions":"有效选项",
|
||||||
|
"validPanels":"有效面板",
|
||||||
|
"autoclose":"自动关闭",
|
||||||
|
"autodelete":"自动删除",
|
||||||
|
"startupDate":"启动日期",
|
||||||
|
"version":"版本",
|
||||||
|
"name":"名称",
|
||||||
|
"role":"角色",
|
||||||
|
"status":"状态",
|
||||||
|
"claimed":"已认领",
|
||||||
|
"pinned":"已置顶",
|
||||||
|
"creationDate":"创建日期",
|
||||||
|
|
||||||
|
"noone":"无人",
|
||||||
|
"open":"开启",
|
||||||
|
"closed":"关闭",
|
||||||
|
"priority":"优先级",
|
||||||
|
"participants":"参与者",
|
||||||
|
"yes":"是",
|
||||||
|
"no":"否",
|
||||||
|
"option":"选项",
|
||||||
|
"topic":"主题",
|
||||||
|
"uptime":"系统运行时间",
|
||||||
|
"messages":"消息",
|
||||||
|
"embeds":"嵌入",
|
||||||
|
"files":"文件",
|
||||||
|
"components":"组件",
|
||||||
|
"cooldown":"冷却时间",
|
||||||
|
"maxTickets":"最大工单数",
|
||||||
|
"admins":"管理员",
|
||||||
|
"roles":"角色",
|
||||||
|
"size":"大小"
|
||||||
|
},
|
||||||
|
"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":"工单需要多少天不活动才能自动删除。",
|
||||||
|
|
||||||
|
"topic":"管理工单频道的主题。",
|
||||||
|
"topicSet":"设置工单频道的主题。",
|
||||||
|
"topicValue":"频道的新主题。",
|
||||||
|
"topicList":"获取所有工单及其主题和统计信息的列表。",
|
||||||
|
"priority":"管理工单的优先级。",
|
||||||
|
"prioritySet":"设置工单的优先级。",
|
||||||
|
"priorityValue":"频道的优先级。",
|
||||||
|
"priorityGet":"获取工单的优先级。",
|
||||||
|
"priorityList":"获取所有工单的优先级状态列表。",
|
||||||
|
"transfer":"将工单所有权从一位用户转移至另一位用户。",
|
||||||
|
"transferUser":"要转移给的用户。"
|
||||||
|
},
|
||||||
|
"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":"启用此工单的自动删除。",
|
||||||
|
"categories":{
|
||||||
|
"general":"通用命令",
|
||||||
|
"basicTicket":"基础工单命令",
|
||||||
|
"advancedTicket":"高级工单命令",
|
||||||
|
"userTicket":"用户工单命令",
|
||||||
|
"admin":"管理员命令",
|
||||||
|
"advanced":"高级命令",
|
||||||
|
"extra":"额外命令"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"scopes":{
|
||||||
|
"global":"全局统计",
|
||||||
|
"system":"系统统计",
|
||||||
|
"user":"用户统计",
|
||||||
|
"ticket":"工单统计",
|
||||||
|
"participants":"参与者",
|
||||||
|
"messages":"消息"
|
||||||
|
},
|
||||||
|
"properties":{
|
||||||
|
"ticketsCreated":"工单已创建",
|
||||||
|
"ticketsClosed":"工单已关闭",
|
||||||
|
"ticketsDeleted":"工单已删除",
|
||||||
|
"ticketsReopened":"工单已重新开启",
|
||||||
|
"ticketsAutoclosed":"工单已自动关闭",
|
||||||
|
"ticketsClaimed":"工单已认领",
|
||||||
|
"ticketsPinned":"工单已置顶",
|
||||||
|
"ticketsMoved":"工单已移动",
|
||||||
|
"usersBlacklisted":"用户已拉黑",
|
||||||
|
"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":"无"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,608 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.1.1",
|
||||||
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
|
"lastedited":"16/11/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!",
|
||||||
|
"stringInvertedContains":"Ta niz ne sme vsebovati {0}!",
|
||||||
|
"stringLowercase":"Ta niz mora biti napisan samo z malimi črkami!",
|
||||||
|
"stringUppercase":"Ta niz mora biti napisan samo z velikimi črkami!",
|
||||||
|
"stringSpecialCharacters":"Ta niz ne sme vsebovati posebnih znakov! (dovoljeni samo a-z, 0-9 in presledek)",
|
||||||
|
"stringNoSpaces":"Ta niz ne sme vsebovati presledkov!",
|
||||||
|
"stringCapitalWord":"Priporočljivo je, da se vsaka beseda v tem nizu začne z veliko začetnico!",
|
||||||
|
"stringCapitalSentence":"Zdi se, da nekatere povedi v tem nizu ne začnejo z veliko začetnico!",
|
||||||
|
"stringPunctuation":"Zdi se, da se poved v tem nizu ne konča s ločilom!",
|
||||||
|
|
||||||
|
"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č!",
|
||||||
|
"numberNan":"Ta številka ne sme biti NaN (Not A Number)!",
|
||||||
|
"numberInvertedContains":"Ta številka ne sme vsebovati {0}!",
|
||||||
|
|
||||||
|
"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'!",
|
||||||
|
"customInvalidVersion":"Različica, navedena v vaši konfiguraciji, se ne ujema! Prepričajte se, da ste konfiguracijo posodobili na najnovejšo različico!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
"clearTickets":"Počisti zahtevke",
|
||||||
|
"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",
|
||||||
|
|
||||||
|
"topicSet":"Tema spremenjena",
|
||||||
|
"prioritySet":"Prioriteta spremenjena",
|
||||||
|
"priorityGet":"Prioriteta zahtevka",
|
||||||
|
"transfer":"Zahtevek prenesen"
|
||||||
|
},
|
||||||
|
"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":"Pult je na voljo v nadaljnjem sporočilu!\nTo sporočilo je zdaj mogoče izbrisati!",
|
||||||
|
|
||||||
|
"topicSet":"Tema kanala je bila uspešno spremenjena s strani {0}!",
|
||||||
|
"prioritySet":"Prioriteta zahtevka je bila uspešno spremenjena v {0} s strani {1}!",
|
||||||
|
"priorityGet":"Trenutna prioriteta tega zahtevka je {0}.",
|
||||||
|
"transfer":"Lastništvo zahtevka je bilo uspešno preneseno z {0} na {1} s strani {2}!"
|
||||||
|
},
|
||||||
|
"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}!",
|
||||||
|
|
||||||
|
"transferLog":"Lastništvo tega zahtevka je bilo preneseno z {0} na {1} s strani {2}!",
|
||||||
|
"transferDm":"Lastništvo vašega zahtevka je bilo v našem strežniku preneseno z {0} na {1}!",
|
||||||
|
"prioritySetLog":"Prioriteta tega zahtevka je bila spremenjena v {0} s strani {1}!",
|
||||||
|
"prioritySetDm":"Prioriteta vašega zahtevka je bila spremenjena v {0} v našem strežniku!",
|
||||||
|
"roleUpdateLog":"{0} je posodobil svoje vloge!",
|
||||||
|
"roleUpdateDm":"Vaše vloge v našem strežniku so bile posodobljene!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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.",
|
||||||
|
"title":"Napaka v prepisu"
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"SPOROČILA",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"DATOTEKA",
|
||||||
|
"fieldsTitle":"POLJA",
|
||||||
|
"reactionsTitle":"REAKCIJE",
|
||||||
|
"statsTitle":"STATISTIKA",
|
||||||
|
"emptyContent":"<vsebina je prazna>",
|
||||||
|
"noTitle":"<brez naslova>",
|
||||||
|
"noDesc":"<brez opisa>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
"permissionError":"Napaka dovoljenj"
|
||||||
|
},
|
||||||
|
"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!",
|
||||||
|
"closeBeforeMessage":"Tega zahtevka ni mogoče zapreti/izbrisati, preden uporabnik ne pošlje sporočila.",
|
||||||
|
"closeBeforeAdminMessage":"Tega zahtevka ni mogoče zapreti/izbrisati, preden skrbnik zahtevkov ali član podpore ne pošlje sporočila.",
|
||||||
|
"unableToCreateTicket":"Ne morete ustvariti zahtevka."
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
"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",
|
||||||
|
|
||||||
|
"noone":"Nihče",
|
||||||
|
"open":"Odprto",
|
||||||
|
"closed":"Zaprto",
|
||||||
|
"priority":"Prioriteta",
|
||||||
|
"participants":"Udeleženci",
|
||||||
|
"yes":"Da",
|
||||||
|
"no":"Ne",
|
||||||
|
"option":"Možnost",
|
||||||
|
"topic":"Tema",
|
||||||
|
"uptime":"Čas delovanja sistema",
|
||||||
|
"messages":"Sporočila",
|
||||||
|
"embeds":"Vdelave",
|
||||||
|
"files":"Datoteke",
|
||||||
|
"components":"Komponente",
|
||||||
|
"cooldown":"Ohladitev",
|
||||||
|
"maxTickets":"Največ zahtevkov",
|
||||||
|
"admins":"Skrbniki",
|
||||||
|
"roles":"Vloge",
|
||||||
|
"size":"Velikost"
|
||||||
|
},
|
||||||
|
"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.",
|
||||||
|
|
||||||
|
"topic":"Upravljajte temo kanala zahtevka.",
|
||||||
|
"topicSet":"Nastavite temo kanala zahtevka.",
|
||||||
|
"topicValue":"Nova tema kanala.",
|
||||||
|
"topicList":"Pridobite seznam vseh zahtevkov z njihovimi temami in statistiko.",
|
||||||
|
"priority":"Upravljajte prioriteto zahtevka.",
|
||||||
|
"prioritySet":"Nastavite prioriteto zahtevka.",
|
||||||
|
"priorityValue":"Prioriteta kanala.",
|
||||||
|
"priorityGet":"Pridobite prioriteto zahtevka.",
|
||||||
|
"priorityList":"Pridobite seznam vseh zahtevkov z njihovim prioritetnim statusom.",
|
||||||
|
"transfer":"Prenesite lastništvo zahtevka z enega uporabnika na drugega.",
|
||||||
|
"transferUser":"Uporabnik, na katerega želite prenesti."
|
||||||
|
},
|
||||||
|
"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.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Splošni ukazi",
|
||||||
|
"basicTicket":"Osnovni ukazi zahtevkov",
|
||||||
|
"advancedTicket":"Napredni ukazi zahtevkov",
|
||||||
|
"userTicket":"Uporabniški ukazi zahtevkov",
|
||||||
|
"admin":"Skrbniški ukazi",
|
||||||
|
"advanced":"Napredni ukazi",
|
||||||
|
"extra":"Dodatni ukazi"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"scopes":{
|
||||||
|
"global":"Globalna statistika",
|
||||||
|
"system":"Sistemska statistika",
|
||||||
|
"user":"Uporabniška statistika",
|
||||||
|
"ticket":"Statistika vstopnic",
|
||||||
|
"participants":"Udeleženci",
|
||||||
|
"messages":"Sporočila"
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
"ticketsAutodeleted":"Samodejno izbrisani zahtevki",
|
||||||
|
"ticketsTransferred":"Preneseni zahtevki",
|
||||||
|
"ticketVolume":"Količina zahtevkov",
|
||||||
|
"averageTickets":"Povprečno zahtevkov/uporabnik",
|
||||||
|
"currentTickets":"Trenutni zahtevki",
|
||||||
|
"age":"Starost zahtevka",
|
||||||
|
"responseTime":"Čas odziva",
|
||||||
|
"resolutionTime":"Čas rešitve",
|
||||||
|
"createdOn":"Ustvarjeno",
|
||||||
|
"createdBy":"Ustvaril",
|
||||||
|
"closedOn":"Zaprto",
|
||||||
|
"closedBy":"Zaprl",
|
||||||
|
"claimedOn":"Prevzeto",
|
||||||
|
"claimedBy":"Prevzel",
|
||||||
|
"pinnedOn":"Pripeto",
|
||||||
|
"pinnedBy":"Pripel",
|
||||||
|
"deletedOn":"Izbrisano",
|
||||||
|
"deletedBy":"Izbrisal"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Razvijalec",
|
||||||
|
"serverOwner":"Lastnik strežnika",
|
||||||
|
"serverAdmin":"Skrbnik strežnika",
|
||||||
|
"moderator":"Moderatorji",
|
||||||
|
"support":"Podporna ekipa",
|
||||||
|
"member":"Član"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Izberite svoj zahtevek",
|
||||||
|
"selectRole":"Izberite svojo vlogo",
|
||||||
|
"selectOption":"Izberite svojo možnost"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Nujno",
|
||||||
|
"veryHigh":"Zelo visoka",
|
||||||
|
"high":"Visoka",
|
||||||
|
"normal":"Normalna",
|
||||||
|
"low":"Nizka",
|
||||||
|
"veryLow":"Zelo nizka",
|
||||||
|
"none":"Brez"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["Redactado","Josuens"],
|
"translators":["Redactado","Josuens"],
|
||||||
"lastedited":"22/08/2024",
|
"lastedited":"22/08/2024",
|
||||||
"language":"Spanish",
|
"language":"Spanish",
|
||||||
|
|||||||
@@ -0,0 +1,478 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION": {
|
||||||
|
"otversion": "v4.1.1",
|
||||||
|
"translators": ["NoOneNook"],
|
||||||
|
"lastedited": "25/03/2025",
|
||||||
|
"language": "Svenska",
|
||||||
|
"automated": false
|
||||||
|
},
|
||||||
|
"checker": {
|
||||||
|
"system": {
|
||||||
|
"typeError": "[FEL]",
|
||||||
|
"headerOpenTicket":"OPEN TICKET",
|
||||||
|
"typeWarning": "[VARNING]",
|
||||||
|
"typeInfo": "[INFO]",
|
||||||
|
"headerConfigChecker": "KONFIGURATIONSKONTROLL",
|
||||||
|
"headerDescription": "kontrollera efter fel i din konfiguration!",
|
||||||
|
"footerError": "botten startar inte förrän alla {0} är fixade!",
|
||||||
|
"footerWarning": "det rekommenderas att fixa alla {0} före start!",
|
||||||
|
"footerSupport": "SUPPORT: {0} - DOKUMENTATION: {1}",
|
||||||
|
"compactInformation": "använd {0} för mer information!",
|
||||||
|
"dataPath": "sökväg",
|
||||||
|
"dataDocs": "dokumentation",
|
||||||
|
"dataMessages": "meddelande"
|
||||||
|
},
|
||||||
|
"messages": {
|
||||||
|
"stringTooShort": "Denna sträng kan inte vara kortare än {0} tecken!",
|
||||||
|
"stringTooLong": "Denna sträng kan inte vara längre än {0} tecken!",
|
||||||
|
"stringLengthInvalid": "Denna sträng ska vara {0} tecken lång!",
|
||||||
|
"stringStartsWith": "Denna sträng ska börja med {0}!",
|
||||||
|
"stringEndsWith": "Denna sträng ska sluta med {0}!",
|
||||||
|
"stringContains": "Denna sträng ska innehålla {0}!",
|
||||||
|
"stringChoices": "Denna sträng kan endast vara en av följande värden: {0}!",
|
||||||
|
"stringRegex": "Denna sträng är ogiltig!",
|
||||||
|
|
||||||
|
"numberTooShort": "Detta tal kan inte vara kortare än {0} tecken!",
|
||||||
|
"numberTooLong": "Detta tal kan inte vara längre än {0} tecken!",
|
||||||
|
"numberLengthInvalid": "Detta tal ska vara {0} tecken långt!",
|
||||||
|
"numberTooSmall": "Detta tal ska vara minst {0}!",
|
||||||
|
"numberTooLarge": "Detta tal ska vara högst {0}!",
|
||||||
|
"numberNotEqual": "Detta tal ska vara {0}!",
|
||||||
|
"numberStep": "Detta tal ska vara en multipel av {0}!",
|
||||||
|
"numberStepOffset": "Detta tal ska vara en multipel av {0}, med start från {1}!",
|
||||||
|
"numberStartsWith": "Detta tal ska börja med {0}!",
|
||||||
|
"numberEndsWith": "Detta tal ska sluta med {0}!",
|
||||||
|
"numberContains": "Detta tal ska innehålla {0}!",
|
||||||
|
"numberChoices": "Detta tal kan endast vara en av följande värden: {0}!",
|
||||||
|
"numberFloat": "Detta tal kan inte vara ett decimaltal!",
|
||||||
|
"numberNegative": "Detta tal kan inte vara negativt!",
|
||||||
|
"numberPositive": "Detta tal kan inte vara positivt!",
|
||||||
|
"numberZero": "Detta tal kan inte vara noll!",
|
||||||
|
|
||||||
|
"booleanTrue": "Detta booleska värde kan inte vara sant!",
|
||||||
|
"booleanFalse": "Detta booleska värde kan inte vara falskt!",
|
||||||
|
|
||||||
|
"arrayEmptyDisabled": "Denna lista kan inte vara tom!",
|
||||||
|
"arrayEmptyRequired": "Denna lista ska vara tom!",
|
||||||
|
"arrayTooShort": "Denna lista ska ha en längd på minst {0}!",
|
||||||
|
"arrayTooLong": "Denna lista ska ha en längd på högst {0}!",
|
||||||
|
"arrayLengthInvalid": "Denna lista ska ha en längd på {0}!",
|
||||||
|
"arrayInvalidTypes": "Denna lista kan endast innehålla följande typer: {0}!",
|
||||||
|
"arrayDouble": "Denna lista tillåter inte samma värde två gånger!",
|
||||||
|
|
||||||
|
"discordInvalidId": "Detta är en ogiltig Discord {0} ID!",
|
||||||
|
"discordInvalidIdOptions": "Detta är en ogiltig Discord {0} ID! Du kan också använda en av dessa: {1}!",
|
||||||
|
"discordInvalidToken": "Detta är en ogiltig Discord-token (syntaktiskt)!",
|
||||||
|
"colorInvalid": "Detta är en ogiltig hexadecimal färg!",
|
||||||
|
"emojiTooShort": "Denna sträng ska ha minst {0} emojis!",
|
||||||
|
"emojiTooLong": "Denna sträng ska ha högst {0} emojis!",
|
||||||
|
"emojiCustom": "Denna emoji kan inte vara en anpassad Discord-emoji!",
|
||||||
|
"emojiInvalid": "Detta är en ogiltig emoji!",
|
||||||
|
"urlInvalid": "Denna URL är ogiltig!",
|
||||||
|
"urlInvalidHttp": "Denna URL kan endast använda https://-protokollet!",
|
||||||
|
"urlInvalidProtocol": "Denna URL kan endast använda http://- och https://-protokollen!",
|
||||||
|
"urlInvalidHostname": "Denna URL har ett otillåtet värdnamn!",
|
||||||
|
"urlInvalidExtension": "Denna URL har en ogiltig filtyp! Välj mellan: {0}!",
|
||||||
|
"urlInvalidPath": "Denna URL har en ogiltig sökväg!",
|
||||||
|
"idNotUnique": "Detta ID är inte unikt, använd ett annat ID istället!",
|
||||||
|
"idNonExistent": "ID {0} existerar inte!",
|
||||||
|
|
||||||
|
"invalidType": "Denna egenskap ska vara av typen: {0}!",
|
||||||
|
"propertyMissing": "Egenskapen {0} saknas i detta objekt!",
|
||||||
|
"propertyOptional": "Egenskapen {0} är valfri i detta objekt!",
|
||||||
|
"objectDisabled": "Detta objekt är inaktiverat, aktivera det genom att använda {0}!",
|
||||||
|
"nullInvalid": "Denna egenskap kan inte vara null!",
|
||||||
|
"switchInvalidType": "Detta ska vara en av följande typer: {0}!",
|
||||||
|
"objectSwitchInvalid": "Detta objekt ska vara en av följande typer: {0}!",
|
||||||
|
|
||||||
|
"invalidLanguage": "Detta är ett ogiltigt språk!",
|
||||||
|
"invalidButton": "Denna knapp ska ha minst en {0} eller {1}!",
|
||||||
|
"unusedOption": "Alternativet {0} används inte någonstans!",
|
||||||
|
"unusedQuestion": "Frågan {0} används inte någonstans!",
|
||||||
|
"dropdownOption": "Ett panel med dropdown aktiverad kan endast innehålla alternativ av typen 'ärende'!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"buttons": {
|
||||||
|
"create": "Skapa Ärende",
|
||||||
|
"close": "Stäng Ärende",
|
||||||
|
"delete": "Radera Ärende",
|
||||||
|
"reopen": "Återöppna Ärende",
|
||||||
|
"claim": "Ta Ärende",
|
||||||
|
"unclaim": "Frigör Ärende",
|
||||||
|
"pin": "Fäst Ärende",
|
||||||
|
"unpin": "Lossa Ärende",
|
||||||
|
"clear": "Radera Ärenden",
|
||||||
|
"helpSwitchSlash": "Visa Slash-kommandon",
|
||||||
|
"helpSwitchText": "Visa Textkommandon",
|
||||||
|
"helpPage": "Sida {0}",
|
||||||
|
"withReason": "Med Orsak",
|
||||||
|
"withoutTranscript": "Utan Utskrift"
|
||||||
|
},
|
||||||
|
"titles": {
|
||||||
|
"created": "Ärende Skapat",
|
||||||
|
"close": "Ärende Stängt",
|
||||||
|
"delete": "Ärende Raderat",
|
||||||
|
"reopen": "Ärende Återöppnat",
|
||||||
|
"claim": "Ärende Taget",
|
||||||
|
"unclaim": "Ärende Frigjort",
|
||||||
|
"pin": "Ärende Fäst",
|
||||||
|
"unpin": "Ärende Lossat",
|
||||||
|
"rename": "Ärende Omdöpt",
|
||||||
|
"move": "Ärende Flyttat",
|
||||||
|
"add": "Användare Tillagd i Ärende",
|
||||||
|
"remove": "Användare Borttagen Från Ärende",
|
||||||
|
|
||||||
|
"help": "Tillgängliga Kommandon",
|
||||||
|
"statsReset": "Återställ Statistik",
|
||||||
|
"blacklistAdd": "Användare Svartlistad",
|
||||||
|
"blacklistRemove": "Användare Borttagen Från Svartlista",
|
||||||
|
"blacklistGet": "Svartlistad Användare",
|
||||||
|
"blacklistView": "Nuvarande Svartlista",
|
||||||
|
"blacklistAddDm": "Tillagd i Svartlista",
|
||||||
|
"blacklistRemoveDm": "Borttagen Från Svartlista",
|
||||||
|
"clear": "Ärenden Raderade",
|
||||||
|
"roles": "Roller Uppdaterade",
|
||||||
|
|
||||||
|
"autoclose": "Ärende Autostängt",
|
||||||
|
"autocloseEnabled": "Autostängning Aktiverad",
|
||||||
|
"autocloseDisabled": "Autostängning Inaktiverad",
|
||||||
|
"autodelete": "Ärende Autoraderat",
|
||||||
|
"autodeleteEnabled": "Autoradering Aktiverad",
|
||||||
|
"autodeleteDisabled": "Autoradering Inaktiverad"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"create": "Ditt ärende har skapats. Klicka på knappen nedan för att få tillgång till det!",
|
||||||
|
"close": "Ärendet har stängts framgångsrikt!",
|
||||||
|
"delete": "Ärendet har raderats framgångsrikt!",
|
||||||
|
"reopen": "Ärendet har återöppnats framgångsrikt!",
|
||||||
|
"claim": "Ärendet har tagits framgångsrikt!",
|
||||||
|
"unclaim": "Ärendet har frigjorts framgångsrikt!",
|
||||||
|
"pin": "Ärendet har fästs framgångsrikt!",
|
||||||
|
"unpin": "Ärendet har lossats framgångsrikt!",
|
||||||
|
"rename": "Ärendet har döpts om till {0} framgångsrikt!",
|
||||||
|
"move": "Ärendet har flyttats till {0} framgångsrikt!",
|
||||||
|
"add": "{0} har lagts till i ärendet framgångsrikt!",
|
||||||
|
"remove": "{0} har tagits bort från ärendet framgångsrikt!",
|
||||||
|
|
||||||
|
"helpExplanation": "`<namn>` => obligatorisk parameter\n`[namn]` => valfri parameter",
|
||||||
|
"statsReset": "Bottens statistik har återställts framgångsrikt!",
|
||||||
|
"statsError": "Kan inte visa ärendestatistik!\n{0} är inte ett ärende!",
|
||||||
|
"blacklistAdd": "{0} har svartlistats framgångsrikt!",
|
||||||
|
"blacklistRemove": "{0} har tagits bort från svartlistan framgångsrikt!",
|
||||||
|
"blacklistGetSuccess": "{0} är för närvarande svartlistad!",
|
||||||
|
"blacklistGetEmpty": "{0} är för närvarande inte svartlistad!",
|
||||||
|
"blacklistViewEmpty": "Ingen är svartlistad ännu!",
|
||||||
|
"blacklistViewTip": "Använd \"/blacklist add\" för att svartlista en användare!",
|
||||||
|
"clearVerify": "Är du säker på att du vill radera flera ärenden?\nDenna åtgärd kan inte ångras!",
|
||||||
|
"clearReady": "{0} ärenden har raderats framgångsrikt!",
|
||||||
|
"rolesEmpty": "Inga roller har uppdaterats!",
|
||||||
|
|
||||||
|
"autocloseLeave": "Detta ärende har autostängts eftersom skaparen lämnade servern!",
|
||||||
|
"autocloseTimeout": "Detta ärende har autostängts eftersom det har varit inaktivt i mer än `{0}t`!",
|
||||||
|
"autodeleteLeave": "Detta ärende har autoraderats eftersom skaparen lämnade servern!",
|
||||||
|
"autodeleteTimeout": "Detta ärende har autoraderats eftersom det har varit inaktivt i mer än `{0} dagar`!",
|
||||||
|
"autocloseEnabled": "Autostängning har aktiverats i detta ärende!\nDet kommer att stängas när det är inaktivt i mer än `{0}t`!",
|
||||||
|
"autocloseDisabled": "Autostängning har inaktiverats i detta ärende!\nDet kommer inte längre att stängas automatiskt!",
|
||||||
|
"autodeleteEnabled": "Autoradering har aktiverats i detta ärende!\nDet kommer att raderas när det är inaktivt i mer än `{0} dagar`!",
|
||||||
|
"autodeleteDisabled": "Autoradering har inaktiverats i detta ärende!\nDet kommer inte längre att raderas automatiskt!",
|
||||||
|
|
||||||
|
"ticketMessageLimit": "Du kan endast skapa {0} ärende(n) åt gången!",
|
||||||
|
"ticketMessageAutoclose": "Detta ärende kommer att autostängas när det är inaktivt i {0}t!",
|
||||||
|
"ticketMessageAutodelete": "Detta ärende kommer att autoraderas när det är inaktivt i {0} dagar!",
|
||||||
|
"panelReady": "Du hittar panelen nedan!\nDetta meddelande kan nu raderas!"
|
||||||
|
},
|
||||||
|
"modal": {
|
||||||
|
"closePlaceholder": "Varför stängde du detta ärende?",
|
||||||
|
"deletePlaceholder": "Varför raderade du detta ärende?",
|
||||||
|
"reopenPlaceholder": "Varför återöppnade du detta ärende?",
|
||||||
|
"claimPlaceholder": "Varför tog du detta ärende?",
|
||||||
|
"unclaimPlaceholder": "Varför frigjorde du detta ärende?",
|
||||||
|
"pinPlaceholder": "Varför fäste du detta ärende?",
|
||||||
|
"unpinPlaceholder": "Varför lossade du detta ärende?"
|
||||||
|
},
|
||||||
|
"logs": {
|
||||||
|
"createLog": "Ett nytt ärende har skapats av {0}!",
|
||||||
|
"closeLog": "Detta ärende har stängts av {0}!",
|
||||||
|
"closeDm": "Ditt ärende har stängts på vår server!",
|
||||||
|
"deleteLog": "Detta ärende har raderats av {0}!",
|
||||||
|
"deleteDm": "Ditt ärende har raderats på vår server!",
|
||||||
|
"reopenLog": "Detta ärende har återöppnats av {0}!",
|
||||||
|
"reopenDm": "Ditt ärende har återöppnats på vår server!",
|
||||||
|
"claimLog": "Detta ärende har tagits av {0}!",
|
||||||
|
"claimDm": "Ditt ärende har tagits på vår server!",
|
||||||
|
"unclaimLog": "Detta ärende har frigjorts av {0}!",
|
||||||
|
"unclaimDm": "Ditt ärende har frigjorts på vår server!",
|
||||||
|
"pinLog": "Detta ärende har fästs av {0}!",
|
||||||
|
"pinDm": "Ditt ärende har fästs på vår server!",
|
||||||
|
"unpinLog": "Detta ärende har lossats av {0}!",
|
||||||
|
"unpinDm": "Ditt ärende har lossats på vår server!",
|
||||||
|
"renameLog": "Detta ärende har döpts om till {0} av {1}!",
|
||||||
|
"renameDm": "Ditt ärende har döpts om till {0} på vår server!",
|
||||||
|
"moveLog": "Detta ärende har flyttats till {0} av {1}!",
|
||||||
|
"moveDm": "Ditt ärende har flyttats till {0} på vår server!",
|
||||||
|
"addLog": "{0} har lagts till i detta ärende av {1}!",
|
||||||
|
"addDm": "{0} har lagts till i ditt ärende på vår server!",
|
||||||
|
"removeLog": "{0} har tagits bort från detta ärende av {1}!",
|
||||||
|
"removeDm": "{0} har tagits bort från ditt ärende på vår server!",
|
||||||
|
|
||||||
|
"blacklistAddLog": "{0} har svartlistats av {1}!",
|
||||||
|
"blacklistRemoveLog": "{0} har tagits bort från svartlistan av {1}!",
|
||||||
|
"blacklistAddDm": "Du har svartlistats på vår server!\nFrån och med nu kan du inte skapa ett ärende!",
|
||||||
|
"blacklistRemoveDm": "Du har tagits bort från svartlistan på vår server!\nNu kan du skapa ärenden igen!",
|
||||||
|
"clearLog": "{0} ärenden har raderats av {1}!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transcripts": {
|
||||||
|
"success": {
|
||||||
|
"visit": "Besök Utskrift",
|
||||||
|
"ready": "Utskrift Skapad",
|
||||||
|
"textFileDescription": "Detta är textutskriften av ett raderat ärende!",
|
||||||
|
"htmlProgress": "Vänligen vänta medan denna HTML-utskrift bearbetas...",
|
||||||
|
|
||||||
|
"createdChannel": "En ny {0} utskrift har skapats på servern!",
|
||||||
|
"createdCreator": "En ny {0} utskrift har skapats för ett av dina ärenden!",
|
||||||
|
"createdParticipant": "En ny {0} utskrift har skapats i ett av ärendena du deltog i!",
|
||||||
|
"createdActiveAdmin": "En ny {0} utskrift har skapats i ett av ärendena du deltog i som admin!",
|
||||||
|
"createdEveryAdmin": "En ny {0} utskrift har skapats i ett av ärendena du var admin i!",
|
||||||
|
"createdOther": "En ny {0} utskrift har skapats!"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"retry": "Försök Igen",
|
||||||
|
"continue": "Radera Utan Utskrift",
|
||||||
|
"backup": "Skapa Säkerhetskopieringsutskrift",
|
||||||
|
"error": "Något gick fel vid försöket att skapa utskriften.\nVad vill du göra?\n\nDetta ärende kommer inte att raderas förrän du klickar på en av dessa knappar."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"titles": {
|
||||||
|
"internalError": "Internt Fel",
|
||||||
|
"optionMissing": "Kommandoalternativ Saknas",
|
||||||
|
"optionInvalid": "Ogiltigt Kommandoalternativ",
|
||||||
|
"unknownCommand": "Okänt Kommando",
|
||||||
|
"noPermissions": "Inga Behörigheter",
|
||||||
|
"unknownTicket": "Okänt Ärende",
|
||||||
|
"deprecatedTicket": "Utgånget Ärende",
|
||||||
|
"unknownOption": "Okänt Alternativ",
|
||||||
|
"unknownPanel": "Okänt Panel",
|
||||||
|
"notInGuild": "Inte På Server",
|
||||||
|
"channelRename": "Kan Inte Döpa Om Kanal",
|
||||||
|
"busy": "Ärendet Är Upptaget"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"askForInfo": "Kontakta ägaren av denna bot för mer information!",
|
||||||
|
"askForInfoResolve": "Kontakta ägaren av denna bot om problemet inte löser sig efter några försök!",
|
||||||
|
"internalError": "Kunde inte svara på denna {0} på grund av ett internt fel!",
|
||||||
|
"optionMissing": "En obligatorisk parameter saknas i detta kommando!",
|
||||||
|
"optionInvalid": "En parameter i detta kommando är ogiltig!",
|
||||||
|
"optionInvalidChoose": "Välj mellan",
|
||||||
|
"unknownCommand": "Försök besöka hjälpmenyn för mer information!",
|
||||||
|
"noPermissions": "Du har inte behörighet att använda denna {0}!",
|
||||||
|
"noPermissionsList": "Nödvändiga behörigheter: (en av dem)",
|
||||||
|
"noPermissionsCooldown": "Du har inte behörighet att använda denna {0} eftersom du har en nedkylningsperiod!",
|
||||||
|
"noPermissionsBlacklist": "Du har inte behörighet att använda denna {0} eftersom du är svartlistad!",
|
||||||
|
"noPermissionsLimitGlobal": "Du har inte behörighet att skapa ett ärende eftersom servern har nått maxgränsen för ärenden!",
|
||||||
|
"noPermissionsLimitGlobalUser": "Du har inte behörighet att skapa ett ärende eftersom du har nått maxgränsen för ärenden!",
|
||||||
|
"noPermissionsLimitOption": "Du har inte behörighet att skapa ett ärende eftersom servern har nått maxgränsen för detta alternativ!",
|
||||||
|
"noPermissionsLimitOptionUser": "Du har inte behörighet att skapa ett ärende eftersom du har nått maxgränsen för detta alternativ!",
|
||||||
|
"unknownTicket": "Försök med detta kommando igen i ett giltigt ärende!",
|
||||||
|
"deprecatedTicket": "Den nuvarande kanalen är inte ett giltigt ärende! Det kan ha varit ett ärende från en äldre version av Open Ticket!",
|
||||||
|
"notInGuild": "Denna {0} fungerar inte i DM! Försök igen på en server!",
|
||||||
|
"channelRename": "På grund av Discords hastighetsbegränsningar är det för närvarande omöjligt för botten att döpa om kanalen. Kanalen kommer automatiskt att döpas om inom 10 minuter om botten inte startas om.",
|
||||||
|
"channelRenameSource": "Källan till detta fel är: {0}",
|
||||||
|
"busy": "Kan inte använda denna {0}!\nÄrendet behandlas för närvarande av botten.\n\nFörsök igen om några sekunder!"
|
||||||
|
},
|
||||||
|
"optionInvalidReasons": {
|
||||||
|
"stringRegex": "Värdet matchar inte mönstret!",
|
||||||
|
"stringMinLength": "Värdet ska vara minst {0} tecken!",
|
||||||
|
"stringMaxLength": "Värdet ska vara högst {0} tecken!",
|
||||||
|
"numberInvalid": "Ogiltigt tal!",
|
||||||
|
"numberMin": "Talet ska vara minst {0}!",
|
||||||
|
"numberMax": "Talet ska vara högst {0}!",
|
||||||
|
"numberDecimal": "Talet kan inte vara ett decimaltal!",
|
||||||
|
"numberNegative": "Talet kan inte vara negativt!",
|
||||||
|
"numberPositive": "Talet kan inte vara positivt!",
|
||||||
|
"numberZero": "Talet kan inte vara noll!",
|
||||||
|
"channelNotFound": "Kan inte hitta kanalen!",
|
||||||
|
"userNotFound": "Kan inte hitta användaren!",
|
||||||
|
"roleNotFound": "Kan inte hitta rollen!",
|
||||||
|
"memberNotFound": "Kan inte hitta användaren!",
|
||||||
|
"mentionableNotFound": "Kan inte hitta användaren eller rollen!",
|
||||||
|
"channelType": "Ogiltig kanaltyp!",
|
||||||
|
"notInGuild": "Detta alternativ kräver att du är på en server!"
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"developer": "Du måste vara utvecklaren av botten.",
|
||||||
|
"owner": "Du måste vara serverägaren.",
|
||||||
|
"admin": "Du måste vara serveradministratör.",
|
||||||
|
"moderator": "Du måste vara moderator.",
|
||||||
|
"support": "Du måste vara en del av supportteamet.",
|
||||||
|
"member": "Du måste vara medlem.",
|
||||||
|
"discord-administrator": "Du måste ha `ADMINISTRATOR`-behörigheten."
|
||||||
|
},
|
||||||
|
"actionInvalid": {
|
||||||
|
"close": "Ärendet är redan stängt!",
|
||||||
|
"reopen": "Ärendet är inte stängt ännu!",
|
||||||
|
"claim": "Ärendet är redan taget!",
|
||||||
|
"unclaim": "Ärendet är inte taget ännu!",
|
||||||
|
"pin": "Ärendet är redan fäst!",
|
||||||
|
"unpin": "Ärendet är inte fäst ännu!",
|
||||||
|
"add": "Denna användare har redan tillgång till ärendet!",
|
||||||
|
"remove": "Kan inte ta bort denna användare från ärendet!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"params": {
|
||||||
|
"uppercase": {
|
||||||
|
"ticket": "Ärende",
|
||||||
|
"tickets": "Ärenden",
|
||||||
|
"reason": "Orsak",
|
||||||
|
"creator": "Skapare",
|
||||||
|
"remaining": "Tid Kvar",
|
||||||
|
"added": "Tillagd",
|
||||||
|
"removed": "Borttagen",
|
||||||
|
"filter": "Filter",
|
||||||
|
"claimedBy": "Taget Av {0}",
|
||||||
|
"method": "Metod",
|
||||||
|
"type": "Typ",
|
||||||
|
"blacklisted": "Svartlistad",
|
||||||
|
"panel": "Panel",
|
||||||
|
"command": "Kommando",
|
||||||
|
"system": "System",
|
||||||
|
"true": "Sant",
|
||||||
|
"false": "Falskt",
|
||||||
|
"syntax": "Syntax",
|
||||||
|
"originalName": "Ursprungligt Namn",
|
||||||
|
"newName": "Nytt Namn",
|
||||||
|
"until": "Till",
|
||||||
|
"validOptions": "Giltiga Alternativ",
|
||||||
|
"validPanels": "Giltiga Paneler",
|
||||||
|
"autoclose": "Autostängning",
|
||||||
|
"autodelete": "Autoradering",
|
||||||
|
"startupDate": "Startdatum",
|
||||||
|
"version": "Version",
|
||||||
|
"name": "Namn",
|
||||||
|
"role": "Roll",
|
||||||
|
"status": "Status",
|
||||||
|
"claimed": "Taget",
|
||||||
|
"pinned": "Fäst",
|
||||||
|
"creationDate": "Skapelsedatum"
|
||||||
|
},
|
||||||
|
"lowercase": {
|
||||||
|
"text": "text",
|
||||||
|
"html": "html",
|
||||||
|
"command": "kommando",
|
||||||
|
"modal": "modal",
|
||||||
|
"button": "knapp",
|
||||||
|
"dropdown": "rullgardinsmeny",
|
||||||
|
"method": "metod"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commands": {
|
||||||
|
"reason": "Ange en valfri orsak som kommer att vara synlig i loggarna.",
|
||||||
|
"help": "Få en lista över alla tillgängliga kommandon.",
|
||||||
|
"panel": "Skapa ett meddelande med en rullgardinsmeny eller knappar (för ärendeskapande).",
|
||||||
|
"panelId": "Identifieraren för panelen du vill skapa.",
|
||||||
|
"panelAutoUpdate": "Vill du att denna panel ska uppdateras automatiskt när den redigeras?",
|
||||||
|
"ticket": "Skapa ett ärende direkt.",
|
||||||
|
"ticketId": "Identifieraren för ärendet du vill skapa.",
|
||||||
|
"close": "Stäng ett ärende.",
|
||||||
|
"delete": "Radera ett ärende.",
|
||||||
|
"deleteNoTranscript": "Radera detta ärende utan att skapa en utskrift.",
|
||||||
|
"reopen": "Återöppna ett ärende.",
|
||||||
|
"claim": "Ta ett ärende.",
|
||||||
|
"claimUser": "Ta detta ärende för en annan användare istället för dig själv.",
|
||||||
|
"unclaim": "Frigör ett ärende.",
|
||||||
|
"pin": "Fäst ett ärende.",
|
||||||
|
"unpin": "Lossa ett ärende.",
|
||||||
|
"move": "Flytta ett ärende.",
|
||||||
|
"moveId": "Identifieraren för alternativet du vill flytta till.",
|
||||||
|
"rename": "Döp om ett ärende.",
|
||||||
|
"renameName": "Det nya namnet på detta ärende.",
|
||||||
|
"add": "Lägg till en användare i ett ärende.",
|
||||||
|
"addUser": "Användaren som ska läggas till.",
|
||||||
|
"remove": "Ta bort en användare från ett ärende.",
|
||||||
|
"removeUser": "Användaren som ska tas bort.",
|
||||||
|
"blacklist": "Hantera svartlistan för ärenden.",
|
||||||
|
"blacklistView": "Visa en lista över nuvarande svartlista.",
|
||||||
|
"blacklistAdd": "Lägg till en användare på svartlistan.",
|
||||||
|
"blacklistRemove": "Ta bort en användare från svartlistan.",
|
||||||
|
"blacklistGet": "Hämta detaljer om en svartlistad användare.",
|
||||||
|
"blacklistGetUser": "Användaren att hämta detaljer från.",
|
||||||
|
"stats": "Visa statistik från botten, en användare eller ett ärende.",
|
||||||
|
"statsReset": "Återställ all statistik för botten (och börja räkna från noll).",
|
||||||
|
"statsGlobal": "Visa global statistik.",
|
||||||
|
"statsUser": "Visa statistik från en användare på servern.",
|
||||||
|
"statsUserUser": "Användaren som ska visas.",
|
||||||
|
"statsTicket": "Visa statistik för ett ärende på servern.",
|
||||||
|
"statsTicketTicket": "Ärendet som ska visas.",
|
||||||
|
"clear": "Radera flera ärenden samtidigt.",
|
||||||
|
"clearFilter": "Filtret för att radera ärenden.",
|
||||||
|
"clearFilters": {
|
||||||
|
"all": "Alla",
|
||||||
|
"open": "Öppna",
|
||||||
|
"close": "Stängda",
|
||||||
|
"claim": "Tagna",
|
||||||
|
"unclaim": "Frigjorda",
|
||||||
|
"pin": "Fästa",
|
||||||
|
"unpin": "Lossade",
|
||||||
|
"autoclose": "Autostängda"
|
||||||
|
},
|
||||||
|
"autoclose": "Hantera autostängning i ett ärende.",
|
||||||
|
"autocloseDisable": "Inaktivera autostängning i detta ärende.",
|
||||||
|
"autocloseEnable": "Aktivera autostängning i detta ärende.",
|
||||||
|
"autocloseEnableTime": "Antal timmar detta ärende måste vara inaktivt innan det stängs.",
|
||||||
|
"autodelete": "Hantera autoradering i ett ärende.",
|
||||||
|
"autodeleteDisable": "Inaktivera autoradering i detta ärende.",
|
||||||
|
"autodeleteEnable": "Aktivera autoradering i detta ärende.",
|
||||||
|
"autodeleteEnableTime": "Antal dagar detta ärende måste vara inaktivt innan det raderas."
|
||||||
|
},
|
||||||
|
"helpMenu": {
|
||||||
|
"help": "Få en lista över alla tillgängliga kommandon.",
|
||||||
|
"ticket": "Skapa ett ärende direkt.",
|
||||||
|
"close": "Stäng ett ärende, detta inaktiverar skrivning i kanalen.",
|
||||||
|
"delete": "Radera ett ärende, detta skapar en utskrift när det är aktiverat.",
|
||||||
|
"reopen": "Återöppna ett ärende, detta aktiverar skrivning i kanalen igen.",
|
||||||
|
"pin": "Fäst ett ärende. Detta flyttar ärendet till toppen och lägger till en '📌' emoji i namnet.",
|
||||||
|
"unpin": "Lossa ett ärende. Ärendet blir kvar på plats, men förlorar '📌' emojin.",
|
||||||
|
"move": "Flytta ett ärende. Detta ändrar typen på ärendet.",
|
||||||
|
"rename": "Döp om ett ärende. Detta ändrar kanalnamnet på ärendet.",
|
||||||
|
"claim": "Ta ett ärende. Detta låter ditt team veta att du hanterar ärendet.",
|
||||||
|
"unclaim": "Frigör ett ärende. Detta låter ditt team veta att ärendet är ledigt igen.",
|
||||||
|
"add": "Lägg till en användare i ett ärende. Detta ger användaren tillgång att läsa och skriva i ärendet.",
|
||||||
|
"remove": "Ta bort en användare från ett ärende. Detta tar bort användarens tillgång att läsa och skriva i ärendet.",
|
||||||
|
"panel": "Skapa ett meddelande med en rullgardinsmeny eller knappar (för ärendeskapande).",
|
||||||
|
"blacklistView": "Visa en lista över nuvarande svartlista.",
|
||||||
|
"blacklistAdd": "Lägg till en användare på svartlistan.",
|
||||||
|
"blacklistRemove": "Ta bort en användare från svartlistan.",
|
||||||
|
"blacklistGet": "Hämta detaljer om en svartlistad användare.",
|
||||||
|
"statsGlobal": "Visa global statistik.",
|
||||||
|
"statsTicket": "Visa statistik för ett ärende på servern.",
|
||||||
|
"statsUser": "Visa statistik från en användare på servern.",
|
||||||
|
"statsReset": "Återställ all statistik för botten (och börja räkna från noll).",
|
||||||
|
"autocloseDisable": "Inaktivera autostängning i detta ärende.",
|
||||||
|
"autocloseEnable": "Aktivera autostängning i detta ärende.",
|
||||||
|
"autodeleteDisable": "Inaktivera autoradering i detta ärende.",
|
||||||
|
"autodeleteEnable": "Aktivera autoradering i detta ärende."
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"scopes": {
|
||||||
|
"global": "Global Statistik",
|
||||||
|
"system": "Systemstatistik",
|
||||||
|
"user": "Användarstatistik",
|
||||||
|
"ticket": "Ärendestatistik",
|
||||||
|
"participants": "Deltagare"
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"ticketsCreated": "Ärenden Skapade",
|
||||||
|
"ticketsClosed": "Ärenden Stängda",
|
||||||
|
"ticketsDeleted": "Ärenden Raderade",
|
||||||
|
"ticketsReopened": "Ärenden Återöppnade",
|
||||||
|
"ticketsAutoclosed": "Ärenden Autostängda",
|
||||||
|
"ticketsClaimed": "Ärenden Tagna",
|
||||||
|
"ticketsPinned": "Ärenden Fästa",
|
||||||
|
"ticketsMoved": "Ärenden Flyttade",
|
||||||
|
"usersBlacklisted": "Användare Svartlistade",
|
||||||
|
"transcriptsCreated": "Utskrifter Skapade"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,608 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.1.1",
|
||||||
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
|
"lastedited":"16/11/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":"இந்த சரம் தவறானது!",
|
||||||
|
"stringInvertedContains":"இந்த உரை {0} அடக்க முடியாது!",
|
||||||
|
"stringLowercase":"இந்த உரை சிறிய எழுத்துக்களில் மட்டுமே எழுதப்பட வேண்டும்!",
|
||||||
|
"stringUppercase":"இந்த உரை பெரிய எழுத்துக்களில் மட்டுமே எழுதப்பட வேண்டும்!",
|
||||||
|
"stringSpecialCharacters":"இந்த உரையில் சிறப்பு எழுத்துக்கள் இருக்க கூடாது! (a-z, 0-9 மற்றும் இடைவெளி மட்டும்)",
|
||||||
|
"stringNoSpaces":"இந்த உரையில் இடைவெளிகள் இருக்க கூடாது!",
|
||||||
|
"stringCapitalWord":"இந்த உரையில் ஒவ்வொரு வார்த்தையும் பெரிய எழுத்தால் துவங்குவது நல்லது!",
|
||||||
|
"stringCapitalSentence":"இந்த உரையில் சில வாக்கியங்கள் பெரிய எழுத்தால் துவங்கவில்லை போல் தோன்றுகிறது!",
|
||||||
|
"stringPunctuation":"இந்த உரையின் வாக்கியம் வாக்கியச்சுட்டுடன் முடிவடையவில்லை போல் தோன்றுகிறது!",
|
||||||
|
|
||||||
|
"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":"இந்த எண் பூஜ்ஜியமாக இருக்க முடியாது!",
|
||||||
|
"numberNan":"இந்த எண் NaN (எண் அல்ல) ஆக இருக்க முடியாது!",
|
||||||
|
"numberInvertedContains":"இந்த எண்ணில் {0} இருக்க கூடாது!",
|
||||||
|
|
||||||
|
"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":"டிராப்புடவ்ன் இயக்கப்பட்ட பேனலில் 'டிக்கெட்' வகையின் விருப்பங்கள் மட்டுமே இருக்க முடியும்!",
|
||||||
|
"customInvalidVersion":"உங்கள் கான்பிக் குறிப்பிடும் பதிப்பு பொருந்தவில்லை! கான்பிகை புதிய பதிப்புக்கு புதுப்பித்தீர்களா என்பதை சரிபார்க்கவும்!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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":"டிக்கெட்டுகள் அழிக்கப்பட்டது",
|
||||||
|
"clearTickets":"டிக்கெட்டுகளை சுத்தம் செய்யவும்",
|
||||||
|
"roles":"பங்குகள் புதுப்பிக்கப்பட்டது",
|
||||||
|
|
||||||
|
"autoclose":"டிக்கெட் தானாக மூடப்பட்டது",
|
||||||
|
"autocloseEnabled":"தானாக மூடுதல் இயக்கப்பட்டது",
|
||||||
|
"autocloseDisabled":"தானாக மூடுதல் முடக்கப்பட்டது",
|
||||||
|
"autodelete":"டிக்கெட் தானாக நீக்கப்பட்டது",
|
||||||
|
"autodeleteEnabled":"தானாக நீக்குதல் இயக்கப்பட்டது",
|
||||||
|
"autodeleteDisabled":"தானாக நீக்குதல் முடக்கப்பட்டது",
|
||||||
|
|
||||||
|
"topicSet":"தலைப்பு மாற்றப்பட்டது",
|
||||||
|
"prioritySet":"முன்னுரிமை மாற்றப்பட்டது",
|
||||||
|
"priorityGet":"டிக்கெட் முன்னுரிமை",
|
||||||
|
"transfer":"டிக்கெட் மாற்றப்பட்டது"
|
||||||
|
},
|
||||||
|
"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இந்த செய்தி இப்போது நீக்கலாம்!",
|
||||||
|
|
||||||
|
"topicSet":"சேனல் தலைப்பை {0} வெற்றிகரமாக மாற்றினார்!",
|
||||||
|
"prioritySet":"டிக்கெட் முன்னுரிமை {1} மூலம் {0} ஆக வெற்றிகரமாக மாற்றப்பட்டது!",
|
||||||
|
"priorityGet":"இந்த டிக்கெட் தற்போதைய முன்னுரிமை {0}.",
|
||||||
|
"transfer":"டிக்கெட் உரிமை {2} மூலம் {0} இலிருந்து {1} க்கு வெற்றிகரமாக மாற்றப்பட்டது!"
|
||||||
|
},
|
||||||
|
"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} டிக்கெட்டுகள் நீக்கப்பட்டது!",
|
||||||
|
|
||||||
|
"transferLog":"இந்த டிக்கெட் உரிமை {2} மூலம் {0} இலிருந்து {1} க்கு மாற்றப்பட்டது!",
|
||||||
|
"transferDm":"உங்கள் டிக்கெட் உரிமை நமது சர்வரில் {0} இலிருந்து {1} க்கு மாற்றப்பட்டது!",
|
||||||
|
"prioritySetLog":"இந்த டிக்கெட் முன்னுரிமை {1} மூலம் {0} ஆக மாற்றப்பட்டது!",
|
||||||
|
"prioritySetDm":"உங்கள் டிக்கெட் முன்னுரிமை நமது சர்வரில் {0} ஆக மாற்றப்பட்டது!",
|
||||||
|
"roleUpdateLog":"{0} அவர்களது பங்களிப்புகளை புதுப்பித்துள்ளார்!",
|
||||||
|
"roleUpdateDm":"நமது சர்வரில் உங்கள் பங்களிப்புகள் புதுப்பிக்கப்பட்டுள்ளன!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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இந்த டிக்கெட் நீங்கள் இந்த பொத்தான்களில் ஒன்றை கிளிக் செய்யும் வரை நீக்கப்படாது.",
|
||||||
|
"title":"மொழிப்பெயர்ப்பு பிழை"
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"செய்திகள்",
|
||||||
|
"embedTitle":"எம்பெட்",
|
||||||
|
"fileTitle":"கோப்பு",
|
||||||
|
"fieldsTitle":"புலங்கள்",
|
||||||
|
"reactionsTitle":"பிரதிபலிப்புகள்",
|
||||||
|
"statsTitle":"புள்ளிவிவரங்கள்",
|
||||||
|
"emptyContent":"<உள்ளடக்கம் வெறுமை>",
|
||||||
|
"noTitle":"<தலைப்பு இல்லை>",
|
||||||
|
"noDesc":"<விவரம் இல்லை>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors":{
|
||||||
|
"titles":{
|
||||||
|
"internalError":"உள் பிழை",
|
||||||
|
"optionMissing":"கட்டளை விருப்பம் காணவில்லை",
|
||||||
|
"optionInvalid":"கட்டளை விருப்பம் தவறானது",
|
||||||
|
"unknownCommand":"தெரியாத கட்டளை",
|
||||||
|
"noPermissions":"அனுமதிகள் இல்லை",
|
||||||
|
"unknownTicket":"தெரியாத டிக்கெட்",
|
||||||
|
"deprecatedTicket":"பழைய டிக்கெட்",
|
||||||
|
"unknownOption":"தெரியாத விருப்பம்",
|
||||||
|
"unknownPanel":"தெரியாத பேனல்",
|
||||||
|
"notInGuild":"சேவையில் இல்லை",
|
||||||
|
"channelRename":"சேனலை மறுபெயரிட முடியவில்லை",
|
||||||
|
"busy":"டிக்கெட் பிஸியாக உள்ளது",
|
||||||
|
"permissionError":"அனுமதி பிழை"
|
||||||
|
},
|
||||||
|
"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தயவு செய்து சில விநாடிகள் காத்திருக்கவும்!",
|
||||||
|
"closeBeforeMessage":"பயனர் ஒரு செய்தியை அனுப்பும் முன் இந்த டிக்கெட் மூடப்பட முடியாது/நீக்கப்பட முடியாது.",
|
||||||
|
"closeBeforeAdminMessage":"டிக்கெட் நிர்வாகி அல்லது ஆதரவு உறுப்பினர் ஒரு செய்தி அனுப்பும் முன் இந்த டிக்கெட் மூடப்பட முடியாது/நீக்கப்பட முடியாது.",
|
||||||
|
"unableToCreateTicket":"நீங்கள் டிக்கெட் உருவாக்க முடியாது."
|
||||||
|
},
|
||||||
|
"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":"வடிகட்டி",
|
||||||
|
"method":"முறை",
|
||||||
|
"type":"வகை",
|
||||||
|
"blacklisted":"பிளாக்லிஸ்ட் செய்யப்பட்டது",
|
||||||
|
"panel":"பேனல்",
|
||||||
|
"command":"கட்டளை",
|
||||||
|
"system":"அமைப்பு",
|
||||||
|
"true":"உண்மை",
|
||||||
|
"false":"பொய்",
|
||||||
|
"syntax":"தொடரியல்",
|
||||||
|
"originalName":"அசல் பெயர்",
|
||||||
|
"newName":"புதிய பெயர்",
|
||||||
|
"until":"வரை",
|
||||||
|
"validOptions":"சரியான விருப்பங்கள்",
|
||||||
|
"validPanels":"சரியான பேனல்கள்",
|
||||||
|
"autoclose":"தானாக மூடுதல்",
|
||||||
|
"autodelete":"தானாக நீக்குதல்",
|
||||||
|
"startupDate":"தொடக்க தேதி",
|
||||||
|
"version":"பதிப்பு",
|
||||||
|
"name":"பெயர்",
|
||||||
|
"role":"பங்கு",
|
||||||
|
"status":"நிலை",
|
||||||
|
"claimed":"கிளெய்ம் செய்யப்பட்டது",
|
||||||
|
"pinned":"பின் செய்யப்பட்டது",
|
||||||
|
"creationDate":"உருவாக்க தேதி",
|
||||||
|
|
||||||
|
"noone":"யாரும் இல்லை",
|
||||||
|
"open":"திறந்தது",
|
||||||
|
"closed":"மூடப்பட்டது",
|
||||||
|
"priority":"முன்னுரிமை",
|
||||||
|
"participants":"பங்கேற்பாளர்கள்",
|
||||||
|
"yes":"ஆம்",
|
||||||
|
"no":"இல்லை",
|
||||||
|
"option":"விருப்பம்",
|
||||||
|
"topic":"தலைப்பு",
|
||||||
|
"uptime":"சிஸ்டம் இயங்கும் நேரம்",
|
||||||
|
"messages":"செய்திகள்",
|
||||||
|
"embeds":"எம்பெட்கள்",
|
||||||
|
"files":"கோப்புகள்",
|
||||||
|
"components":"கூறுகள்",
|
||||||
|
"cooldown":"குளிர்நிலை",
|
||||||
|
"maxTickets":"அதிகபட்ச டிக்கெட்டுகள்",
|
||||||
|
"admins":"நிர்வாகிகள்",
|
||||||
|
"roles":"பங்குகள்",
|
||||||
|
"size":"அளவு"
|
||||||
|
},
|
||||||
|
"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":"இந்த டிக்கெட் நீக்கப்பட வேண்டிய நாட்களின் அளவு.",
|
||||||
|
|
||||||
|
"topic":"டிக்கெட் சேனல் தலைப்பை நிர்வகிக்கவும்.",
|
||||||
|
"topicSet":"டிக்கெட் சேனல் தலைப்பை அமைக்கவும்.",
|
||||||
|
"topicValue":"சேனல் புதிய தலைப்பு.",
|
||||||
|
"topicList":"அனைத்து டிக்கெட்டுகளின் தலைப்பு மற்றும் புள்ளிவிவரங்களைப் பெறுங்கள்.",
|
||||||
|
"priority":"டிக்கெட் முன்னுரிமையை நிர்வகிக்கவும்.",
|
||||||
|
"prioritySet":"டிக்கெட் முன்னுரிமையை அமைக்கவும்.",
|
||||||
|
"priorityValue":"சேனல் முன்னுரிமை.",
|
||||||
|
"priorityGet":"டிக்கெட் முன்னுரிமையைப் பெறவும்.",
|
||||||
|
"priorityList":"அனைத்து டிக்கெட்டுகளின் முன்னுரிமை நிலையைப் பெறுங்கள்.",
|
||||||
|
"transfer":"ஒரு பயனரிடமிருந்து மற்றொரு பயனருக்கு டிக்கெட் உரிமையை மாற்றவும்.",
|
||||||
|
"transferUser":"மாற்ற வேண்டிய பயனர்."
|
||||||
|
},
|
||||||
|
"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":"இந்த டிக்கெட்டில் தானாக நீக்குவதை இயக்கவும்.",
|
||||||
|
"categories":{
|
||||||
|
"general":"பொது கட்டளைகள்",
|
||||||
|
"basicTicket":"அடிப்படை டிக்கெட் கட்டளைகள்",
|
||||||
|
"advancedTicket":"மேம்பட்ட டிக்கெட் கட்டளைகள்",
|
||||||
|
"userTicket":"பயனர் டிக்கெட் கட்டளைகள்",
|
||||||
|
"admin":"நிர்வாகி கட்டளைகள்",
|
||||||
|
"advanced":"மேம்பட்ட கட்டளைகள்",
|
||||||
|
"extra":"மேலும் கட்டளைகள்"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"scopes":{
|
||||||
|
"global":"உலகளாவிய புள்ளிவிவரங்கள்",
|
||||||
|
"system":"கணினி புள்ளிவிவரங்கள்",
|
||||||
|
"user":"பயனர் புள்ளிவிவரங்கள்",
|
||||||
|
"ticket":"டிக்கெட் புள்ளிவிவரங்கள்",
|
||||||
|
"participants":"பங்கேற்பாளர்கள்",
|
||||||
|
"messages":"செய்திகள்"
|
||||||
|
},
|
||||||
|
"properties":{
|
||||||
|
"ticketsCreated":"டிக்கெட்டுகள் உருவாக்கப்பட்டன",
|
||||||
|
"ticketsClosed":"டிக்கெட்டுகள் மூடப்பட்டன",
|
||||||
|
"ticketsDeleted":"டிக்கெட்டுகள் நீக்கப்பட்டன",
|
||||||
|
"ticketsReopened":"டிக்கெட்டுகள் மீண்டும் திறக்கப்பட்டன",
|
||||||
|
"ticketsAutoclosed":"டிக்கெட்டுகள் தானாக மூடப்பட்டன",
|
||||||
|
"ticketsClaimed":"டிக்கெட்டுகள் கிளெய்ம் செய்யப்பட்டன",
|
||||||
|
"ticketsPinned":"டிக்கெட்டுகள் பின் செய்யப்பட்டன",
|
||||||
|
"ticketsMoved":"டிக்கெட்டுகள் நகர்த்தப்பட்டன",
|
||||||
|
"usersBlacklisted":"பயனர்கள் பிளாக்லிஸ்ட் செய்யப்பட்டனர்",
|
||||||
|
"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":"ஏதும் இல்லை"
|
||||||
|
}
|
||||||
|
}
|
||||||
+544
-414
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION": {
|
"_TRANSLATION": {
|
||||||
"otversion": "v4.0.0",
|
"otversion": "v4.1.1",
|
||||||
"translators": ["palestinian"],
|
"translators": ["palestinian"],
|
||||||
"lastedited": "26/11/2024",
|
"lastedited": "26/11/2024",
|
||||||
"language": "Turkish",
|
"language": "Turkish",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.0.0",
|
"otversion":"v4.1.1",
|
||||||
"translators":["Anderskiy"],
|
"translators":["Anderskiy"],
|
||||||
"lastedited":"31/08/2024",
|
"lastedited":"31/08/2024",
|
||||||
"language":"Ukrainian",
|
"language":"Ukrainian",
|
||||||
|
|||||||
@@ -0,0 +1,466 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.1.1",
|
||||||
|
"translators":["ngocdiep2006"],
|
||||||
|
"lastedited":"07/04/2025",
|
||||||
|
"language":"Vietnamese",
|
||||||
|
"automated":true
|
||||||
|
},
|
||||||
|
"checker":{
|
||||||
|
"system":{
|
||||||
|
"typeError":"[ERROR]",
|
||||||
|
"headerOpenTicket":"OPEN TICKET",
|
||||||
|
"typeWarning":"[WARNING]",
|
||||||
|
"typeInfo":"[INFO]",
|
||||||
|
"headerConfigChecker":"CONFIG CHECKER",
|
||||||
|
"headerDescription":"check for errors in your config files!",
|
||||||
|
"footerError":"the bot won't start until all {0}'s are fixed!",
|
||||||
|
"footerWarning":"it's recommended to fix all {0}'s before starting!",
|
||||||
|
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
|
||||||
|
"compactInformation":"use {0} for more information!",
|
||||||
|
"dataPath":"path",
|
||||||
|
"dataDocs":"docs",
|
||||||
|
"dataMessages":"message"
|
||||||
|
},
|
||||||
|
"messages": {
|
||||||
|
"stringTooShort": "Chuỗi này không thể ngắn hơn {0} ký tự!",
|
||||||
|
"stringTooLong": "Chuỗi này không thể dài hơn {0} ký tự!",
|
||||||
|
"stringLengthInvalid": "Chuỗi này cần dài {0} ký tự!",
|
||||||
|
"stringStartsWith": "Chuỗi này cần bắt đầu bằng {0}!",
|
||||||
|
"stringEndsWith": "Chuỗi này cần kết thúc bằng {0}!",
|
||||||
|
"stringContains": "Chuỗi này cần chứa {0}!",
|
||||||
|
"stringChoices": "Chuỗi này chỉ có thể là một trong các giá trị sau: {0}!",
|
||||||
|
"stringRegex": "Chuỗi này không hợp lệ!",
|
||||||
|
"numberTooShort": "Số này không thể ngắn hơn {0} ký tự!",
|
||||||
|
"numberTooLong": "Số này không thể dài hơn {0} ký tự!",
|
||||||
|
"numberLengthInvalid": "Số này cần dài {0} ký tự!",
|
||||||
|
"numberTooSmall": "Số này cần ít nhất là {0}!",
|
||||||
|
"numberTooLarge": "Số này cần nhiều nhất là {0}!",
|
||||||
|
"numberNotEqual": "Số này cần là {0}!",
|
||||||
|
"numberStep": "Số này cần là bội số của {0}!",
|
||||||
|
"numberStepOffset": "Số này cần là bội số của {0} bắt đầu từ {1}!",
|
||||||
|
"numberStartsWith": "Số này cần bắt đầu bằng {0}!",
|
||||||
|
"numberEndsWith": "Số này cần kết thúc bằng {0}!",
|
||||||
|
"numberContains": "Số này cần chứa {0}!",
|
||||||
|
"numberChoices": "Số này chỉ có thể là một trong các giá trị sau: {0}!",
|
||||||
|
"numberFloat": "Số này không thể là số thập phân!",
|
||||||
|
"numberNegative": "Số này không thể là số âm!",
|
||||||
|
"numberPositive": "Số này không thể là số dương!",
|
||||||
|
"numberZero": "Số này không thể là số không!",
|
||||||
|
"booleanTrue": "Boolean này không thể là true!",
|
||||||
|
"booleanFalse": "Boolean này không thể là false!",
|
||||||
|
"arrayEmptyDisabled": "Mảng này không được phép rỗng!",
|
||||||
|
"arrayEmptyRequired": "Mảng này bắt buộc phải rỗng!",
|
||||||
|
"arrayTooShort": "Mảng này cần có độ dài ít nhất là {0}!",
|
||||||
|
"arrayTooLong": "Mảng này cần có độ dài nhiều nhất là {0}!",
|
||||||
|
"arrayLengthInvalid": "Mảng này cần có độ dài là {0}!",
|
||||||
|
"arrayInvalidTypes": "Mảng này chỉ có thể chứa các kiểu sau: {0}!",
|
||||||
|
"arrayDouble": "Mảng này không cho phép giá trị trùng lặp!",
|
||||||
|
"discordInvalidId": "Đây là id discord {0} không hợp lệ!",
|
||||||
|
"discordInvalidIdOptions": "Đây là id discord {0} không hợp lệ! Bạn cũng có thể sử dụng một trong những id sau: {1}!",
|
||||||
|
"discordInvalidToken": "Đây là token discord không hợp lệ (về mặt cú pháp)!",
|
||||||
|
"colorInvalid": "Đây là màu hex không hợp lệ!",
|
||||||
|
"emojiTooShort": "Chuỗi này cần có ít nhất {0} emoji!",
|
||||||
|
"emojiTooLong": "Chuỗi này cần có nhiều nhất {0} emoji!",
|
||||||
|
"emojiCustom": "Emoji này không thể là emoji discord tùy chỉnh!",
|
||||||
|
"emojiInvalid": "Đây là emoji không hợp lệ!",
|
||||||
|
"urlInvalid": "URL này không hợp lệ!",
|
||||||
|
"urlInvalidHttp": "URL này chỉ có thể sử dụng giao thức https://!",
|
||||||
|
"urlInvalidProtocol": "URL này chỉ có thể sử dụng giao thức http:// & https://!",
|
||||||
|
"urlInvalidHostname": "URL này có tên máy chủ bị cấm!",
|
||||||
|
"urlInvalidExtension": "URL này có phần mở rộng không hợp lệ! Chọn trong số: {0}!",
|
||||||
|
"urlInvalidPath": "URL này có đường dẫn không hợp lệ!",
|
||||||
|
"idNotUnique": "ID này không duy nhất, hãy sử dụng ID khác!",
|
||||||
|
"idNonExistent": "ID {0} không tồn tại!",
|
||||||
|
"invalidType": "Thuộc tính này cần có kiểu: {0}!",
|
||||||
|
"propertyMissing": "Thuộc tính {0} bị thiếu trong đối tượng này!",
|
||||||
|
"propertyOptional": "Thuộc tính {0} là tùy chọn trong đối tượng này!",
|
||||||
|
"objectDisabled": "Đối tượng này bị tắt, hãy bật nó bằng cách sử dụng {0}!",
|
||||||
|
"nullInvalid": "Thuộc tính này không thể là null!",
|
||||||
|
"switchInvalidType": "Điều này cần là một trong các kiểu sau: {0}!",
|
||||||
|
"objectSwitchInvalid": "Đối tượng này cần là một trong các kiểu sau: {0}!",
|
||||||
|
"invalidLanguage": "Đây là ngôn ngữ không hợp lệ!",
|
||||||
|
"invalidButton": "Nút này cần có ít nhất một {0} hoặc {1}!",
|
||||||
|
"unusedOption": "Tùy chọn {0} không được sử dụng ở bất kỳ đâu!",
|
||||||
|
"unusedQuestion": "Câu hỏi {0} không được sử dụng ở bất kỳ đâu!",
|
||||||
|
"dropdownOption": "Bảng điều khiển có bật dropdown chỉ có thể chứa các tùy chọn thuộc loại 'ticket'!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"buttons": {
|
||||||
|
"create": "Truy cập Ticket",
|
||||||
|
"close": "Đóng Ticket",
|
||||||
|
"delete": "Xóa Ticket",
|
||||||
|
"reopen": "Mở lại Ticket",
|
||||||
|
"claim": "Nhận Ticket",
|
||||||
|
"unclaim": "Bỏ nhận Ticket",
|
||||||
|
"pin": "Ghim Ticket",
|
||||||
|
"unpin": "Bỏ ghim Ticket",
|
||||||
|
"clear": "Xóa Tickets",
|
||||||
|
"helpSwitchSlash": "Xem Lệnh Slash",
|
||||||
|
"helpSwitchText": "Xem Lệnh Văn Bản",
|
||||||
|
"helpPage": "Trang {0}",
|
||||||
|
"withReason": "Có Lý Do",
|
||||||
|
"withoutTranscript": "Không Có Bản Ghi"
|
||||||
|
},
|
||||||
|
"titles": {
|
||||||
|
"created": "Ticket Đã Tạo",
|
||||||
|
"close": "Ticket Đã Đóng",
|
||||||
|
"delete": "Ticket Đã Xóa",
|
||||||
|
"reopen": "Ticket Đã Mở Lại",
|
||||||
|
"claim": "Ticket Đã Nhận",
|
||||||
|
"unclaim": "Ticket Đã Bỏ Nhận",
|
||||||
|
"pin": "Ticket Đã Ghim",
|
||||||
|
"unpin": "Ticket Đã Bỏ Ghim",
|
||||||
|
"rename": "Ticket Đã Đổi Tên",
|
||||||
|
"move": "Ticket Đã Di Chuyển",
|
||||||
|
"add": "Người Dùng Đã Thêm Vào Ticket",
|
||||||
|
"remove": "Người Dùng Đã Xóa Khỏi Ticket",
|
||||||
|
"help": "Lệnh Có Sẵn",
|
||||||
|
"statsReset": "Đặt Lại Thống Kê",
|
||||||
|
"blacklistAdd": "Người Dùng Đã Bị Cấm",
|
||||||
|
"blacklistRemove": "Người Dùng Đã Được Gỡ Cấm",
|
||||||
|
"blacklistGet": "Người Dùng Bị Cấm",
|
||||||
|
"blacklistView": "Danh Sách Cấm Hiện Tại",
|
||||||
|
"blacklistAddDm": "Đã Thêm Vào Danh Sách Cấm",
|
||||||
|
"blacklistRemoveDm": "Đã Xóa Khỏi Danh Sách Cấm",
|
||||||
|
"clear": "Tickets Đã Xóa",
|
||||||
|
"roles": "Vai Trò Đã Cập Nhật",
|
||||||
|
"autoclose": "Ticket Tự Động Đóng",
|
||||||
|
"autocloseEnabled": "Tự Động Đóng Đã Bật",
|
||||||
|
"autocloseDisabled": "Tự Động Đóng Đã Tắt",
|
||||||
|
"autodelete": "Ticket Tự Động Xóa",
|
||||||
|
"autodeleteEnabled": "Tự Động Xóa Đã Bật",
|
||||||
|
"autodeleteDisabled": "Tự Động Xóa Đã Tắt"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"create": "Ticket của bạn đã được tạo. Nhấp vào nút bên dưới để truy cập!",
|
||||||
|
"close": "Ticket đã được đóng thành công!",
|
||||||
|
"delete": "Ticket đã được xóa thành công!",
|
||||||
|
"reopen": "Ticket đã được mở lại thành công!",
|
||||||
|
"claim": "Ticket đã được nhận thành công!",
|
||||||
|
"unclaim": "Ticket đã được bỏ nhận thành công!",
|
||||||
|
"pin": "Ticket đã được ghim thành công!",
|
||||||
|
"unpin": "Ticket đã được bỏ ghim thành công!",
|
||||||
|
"rename": "Ticket đã được đổi tên thành {0} thành công!",
|
||||||
|
"move": "Ticket đã được di chuyển đến {0} thành công!",
|
||||||
|
"add": "{0} đã được thêm vào ticket thành công!",
|
||||||
|
"remove": "{0} đã được xóa khỏi ticket thành công!",
|
||||||
|
"helpExplanation": "`<name>` => tham số bắt buộc\n`[name]` => tham số tùy chọn",
|
||||||
|
"statsReset": "Thống kê bot đã được đặt lại thành công!",
|
||||||
|
"statsError": "Không thể xem thống kê ticket!\n{0} không phải là ticket!",
|
||||||
|
"blacklistAdd": "{0} đã bị cấm thành công!",
|
||||||
|
"blacklistRemove": "{0} đã được gỡ cấm thành công!",
|
||||||
|
"blacklistGetSuccess": "{0} hiện đang bị cấm!",
|
||||||
|
"blacklistGetEmpty": "{0} hiện không bị cấm!",
|
||||||
|
"blacklistViewEmpty": "Chưa có ai bị cấm!",
|
||||||
|
"blacklistViewTip": "Sử dụng \"/blacklist add\" để cấm người dùng!",
|
||||||
|
"clearVerify": "Bạn có chắc chắn muốn xóa nhiều ticket không?\nHành động này không thể hoàn tác!",
|
||||||
|
"clearReady": "{0} tickets đã được xóa thành công!",
|
||||||
|
"rolesEmpty": "Không có vai trò nào được cập nhật!",
|
||||||
|
"autocloseLeave": "Ticket này đã được tự động đóng vì người tạo đã rời khỏi máy chủ!",
|
||||||
|
"autocloseTimeout": "Ticket này đã được tự động đóng vì không hoạt động quá `{0}h`!",
|
||||||
|
"autodeleteLeave": "Ticket này đã được tự động xóa vì người tạo đã rời khỏi máy chủ!",
|
||||||
|
"autodeleteTimeout": "Ticket này đã được tự động xóa vì không hoạt động quá `{0} ngày`!",
|
||||||
|
"autocloseEnabled": "Tự động đóng đã được bật trong ticket này!\nNó sẽ được đóng khi không hoạt động quá `{0}h`!",
|
||||||
|
"autocloseDisabled": "Tự động đóng đã được tắt trong ticket này!\nNó sẽ không tự động đóng nữa!",
|
||||||
|
"autodeleteEnabled": "Tự động xóa đã được bật trong ticket này!\nNó sẽ được xóa khi không hoạt động quá `{0} ngày`!",
|
||||||
|
"autodeleteDisabled": "Tự động xóa đã được tắt trong ticket này!\nNó sẽ không tự động xóa nữa!",
|
||||||
|
"ticketMessageLimit": "Bạn chỉ có thể tạo {0} ticket cùng lúc!",
|
||||||
|
"ticketMessageAutoclose": "Ticket này sẽ được tự động đóng khi không hoạt động trong {0}h!",
|
||||||
|
"ticketMessageAutodelete": "Ticket này sẽ được tự động xóa khi không hoạt động trong {0} ngày!",
|
||||||
|
"panelReady": "Bạn có thể tìm thấy bảng điều khiển bên dưới!\nThông báo này có thể được xóa ngay bây giờ!"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
"modal": {
|
||||||
|
"closePlaceholder": "Tại sao bạn đóng ticket này?",
|
||||||
|
"deletePlaceholder": "Tại sao bạn xóa ticket này?",
|
||||||
|
"reopenPlaceholder": "Tại sao bạn mở lại ticket này?",
|
||||||
|
"claimPlaceholder": "Tại sao bạn nhận ticket này?",
|
||||||
|
"unclaimPlaceholder": "Tại sao bạn bỏ nhận ticket này?",
|
||||||
|
"pinPlaceholder": "Tại sao bạn ghim ticket này?",
|
||||||
|
"unpinPlaceholder": "Tại sao bạn bỏ ghim ticket này?"
|
||||||
|
},
|
||||||
|
"logs": {
|
||||||
|
"createLog": "Một ticket mới đã được tạo bởi {0}!",
|
||||||
|
"closeLog": "Ticket này đã được đóng bởi {0}!",
|
||||||
|
"closeDm": "Ticket của bạn đã được đóng trong máy chủ của chúng tôi!",
|
||||||
|
"deleteLog": "Ticket này đã được xóa bởi {0}!",
|
||||||
|
"deleteDm": "Ticket của bạn đã được xóa trong máy chủ của chúng tôi!",
|
||||||
|
"reopenLog": "Ticket này đã được mở lại bởi {0}!",
|
||||||
|
"reopenDm": "Ticket của bạn đã được mở lại trong máy chủ của chúng tôi!",
|
||||||
|
"claimLog": "Ticket này đã được nhận bởi {0}!",
|
||||||
|
"claimDm": "Ticket của bạn đã được nhận trong máy chủ của chúng tôi!",
|
||||||
|
"unclaimLog": "Ticket này đã được bỏ nhận bởi {0}!",
|
||||||
|
"unclaimDm": "Ticket của bạn đã được bỏ nhận trong máy chủ của chúng tôi!",
|
||||||
|
"pinLog": "Ticket này đã được ghim bởi {0}!",
|
||||||
|
"pinDm": "Ticket của bạn đã được ghim trong máy chủ của chúng tôi!",
|
||||||
|
"unpinLog": "Ticket này đã được bỏ ghim bởi {0}!",
|
||||||
|
"unpinDm": "Ticket của bạn đã được bỏ ghim trong máy chủ của chúng tôi!",
|
||||||
|
"renameLog": "Ticket này đã được đổi tên thành {0} bởi {1}!",
|
||||||
|
"renameDm": "Ticket của bạn đã được đổi tên thành {0} trong máy chủ của chúng tôi!",
|
||||||
|
"moveLog": "Ticket này đã được di chuyển đến {0} bởi {1}!",
|
||||||
|
"moveDm": "Ticket của bạn đã được di chuyển đến {0} trong máy chủ của chúng tôi!",
|
||||||
|
"addLog": "{0} đã được thêm vào ticket này bởi {1}!",
|
||||||
|
"addDm": "{0} đã được thêm vào ticket của bạn trong máy chủ của chúng tôi!",
|
||||||
|
"removeLog": "{0} đã được xóa khỏi ticket này bởi {1}!",
|
||||||
|
"removeDm": "{0} đã được xóa khỏi ticket của bạn trong máy chủ của chúng tôi!",
|
||||||
|
"blacklistAddLog": "{0} đã bị cấm bởi {1}!",
|
||||||
|
"blacklistRemoveLog": "{0} đã được gỡ khỏi danh sách cấm bởi {1}!",
|
||||||
|
"blacklistAddDm": "Bạn đã bị cấm trong máy chủ của chúng tôi!\nTừ bây giờ, bạn không thể tạo ticket!",
|
||||||
|
"blacklistRemoveDm": "Bạn đã được gỡ khỏi danh sách cấm trong máy chủ của chúng tôi!\nBây giờ bạn có thể tạo lại ticket!",
|
||||||
|
"clearLog": "{0} tickets đã được xóa bởi {1}!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transcripts": {
|
||||||
|
"success": {
|
||||||
|
"visit": "Truy Cập Bản Ghi",
|
||||||
|
"ready": "Bản Ghi Đã Tạo",
|
||||||
|
"textFileDescription": "Đây là bản ghi văn bản của một ticket đã xóa!",
|
||||||
|
"htmlProgress": "Vui lòng đợi trong khi bản ghi html này đang được xử lý...",
|
||||||
|
"createdChannel": "Một bản ghi {0} mới đã được tạo trong máy chủ!",
|
||||||
|
"createdCreator": "Một bản ghi {0} mới đã được tạo cho một trong các ticket của bạn!",
|
||||||
|
"createdParticipant": "Một bản ghi {0} mới đã được tạo trong một trong các ticket bạn tham gia!",
|
||||||
|
"createdActiveAdmin": "Một bản ghi {0} mới đã được tạo trong một trong các ticket bạn tham gia với tư cách quản trị viên!",
|
||||||
|
"createdEveryAdmin": "Một bản ghi {0} mới đã được tạo trong một trong các ticket bạn là quản trị viên!",
|
||||||
|
"createdOther": "Một bản ghi {0} mới đã được tạo!"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"retry": "Thử Lại",
|
||||||
|
"continue": "Xóa Không Có Bản Ghi",
|
||||||
|
"backup": "Tạo Bản Ghi Dự Phòng",
|
||||||
|
"error": "Đã xảy ra lỗi khi cố gắng tạo bản ghi.\nBạn muốn làm gì?\n\nTicket này sẽ không bị xóa cho đến khi bạn nhấp vào một trong các nút này."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"titles": {
|
||||||
|
"internalError": "Lỗi Nội Bộ",
|
||||||
|
"optionMissing": "Thiếu Tùy Chọn Lệnh",
|
||||||
|
"optionInvalid": "Tùy Chọn Lệnh Không Hợp Lệ",
|
||||||
|
"unknownCommand": "Lệnh Không Xác Định",
|
||||||
|
"noPermissions": "Không Có Quyền",
|
||||||
|
"unknownTicket": "Ticket Không Xác Định",
|
||||||
|
"deprecatedTicket": "Ticket Đã Lỗi Thời",
|
||||||
|
"unknownOption": "Tùy Chọn Không Xác Định",
|
||||||
|
"unknownPanel": "Bảng Điều Khiển Không Xác Định",
|
||||||
|
"notInGuild": "Không Ở Trong Máy Chủ",
|
||||||
|
"channelRename": "Không Thể Đổi Tên Kênh",
|
||||||
|
"busy": "Ticket Đang Bận"
|
||||||
|
},
|
||||||
|
"descriptions": {
|
||||||
|
"askForInfo": "Liên hệ với chủ sở hữu của bot này để biết thêm thông tin!",
|
||||||
|
"askForInfoResolve": "Liên hệ với chủ sở hữu bot này nếu vấn đề này không được giải quyết sau vài lần thử.",
|
||||||
|
"internalError": "Không thể phản hồi {0} này do lỗi nội bộ!",
|
||||||
|
"optionMissing": "Thiếu tham số bắt buộc trong lệnh này!",
|
||||||
|
"optionInvalid": "Tham số trong lệnh này không hợp lệ!",
|
||||||
|
"optionInvalidChoose": "Chọn trong số",
|
||||||
|
"unknownCommand": "Hãy thử truy cập menu trợ giúp để biết thêm thông tin!",
|
||||||
|
"noPermissions": "Bạn không được phép sử dụng {0} này!",
|
||||||
|
"noPermissionsList": "Quyền Bắt Buộc: (một trong số chúng)",
|
||||||
|
"noPermissionsCooldown": "Bạn không được phép sử dụng {0} này vì bạn đang trong thời gian chờ!",
|
||||||
|
"noPermissionsBlacklist": "Bạn không được phép sử dụng {0} này vì bạn đã bị cấm!",
|
||||||
|
"noPermissionsLimitGlobal": "Bạn không được phép tạo ticket vì máy chủ đã đạt đến giới hạn ticket tối đa!",
|
||||||
|
"noPermissionsLimitGlobalUser": "Bạn không được phép tạo ticket vì bạn đã đạt đến giới hạn ticket tối đa!",
|
||||||
|
"noPermissionsLimitOption": "Bạn không được phép tạo ticket vì máy chủ đã đạt đến giới hạn ticket tối đa cho tùy chọn này!",
|
||||||
|
"noPermissionsLimitOptionUser": "Bạn không được phép tạo ticket vì bạn đã đạt đến giới hạn ticket tối đa cho tùy chọn này!",
|
||||||
|
"unknownTicket": "Hãy thử lại lệnh này trong một ticket hợp lệ!",
|
||||||
|
"deprecatedTicket": "Kênh hiện tại không phải là ticket hợp lệ! Nó có thể là một ticket từ phiên bản Open Ticket cũ!",
|
||||||
|
"notInGuild": "{0} này không hoạt động trong DM! Vui lòng thử lại trong máy chủ!",
|
||||||
|
"channelRename": "Do giới hạn tốc độ của discord, hiện tại bot không thể đổi tên kênh. Kênh sẽ tự động được đổi tên trong 10 phút nếu bot không được khởi động lại.",
|
||||||
|
"channelRenameSource": "Nguồn gốc của lỗi này là: {0}",
|
||||||
|
"busy": "Không thể sử dụng {0} này!\nTicket hiện đang được bot xử lý.\n\nVui lòng thử lại sau vài giây!"
|
||||||
|
},
|
||||||
|
"optionInvalidReasons": {
|
||||||
|
"stringRegex": "Giá trị không khớp với mẫu!",
|
||||||
|
"stringMinLength": "Giá trị cần có ít nhất {0} ký tự!",
|
||||||
|
"stringMaxLength": "Giá trị cần có nhiều nhất {0} ký tự!",
|
||||||
|
"numberInvalid": "Số không hợp lệ!",
|
||||||
|
"numberMin": "Số cần ít nhất là {0}!",
|
||||||
|
"numberMax": "Số cần nhiều nhất là {0}!",
|
||||||
|
"numberDecimal": "Số không được phép là số thập phân!",
|
||||||
|
"numberNegative": "Số không được phép là số âm!",
|
||||||
|
"numberPositive": "Số không được phép là số dương!",
|
||||||
|
"numberZero": "Số không được phép là số không!",
|
||||||
|
"channelNotFound": "Không thể tìm thấy kênh!",
|
||||||
|
"userNotFound": "Không thể tìm thấy người dùng!",
|
||||||
|
"roleNotFound": "Không thể tìm thấy vai trò!",
|
||||||
|
"memberNotFound": "Không thể tìm thấy người dùng!",
|
||||||
|
"mentionableNotFound": "Không thể tìm thấy người dùng hoặc vai trò!",
|
||||||
|
"channelType": "Loại kênh không hợp lệ!",
|
||||||
|
"notInGuild": "Tùy chọn này yêu cầu bạn phải ở trong máy chủ!"
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"developer": "Bạn cần là nhà phát triển của bot.",
|
||||||
|
"owner": "Bạn cần là chủ sở hữu máy chủ.",
|
||||||
|
"admin": "Bạn cần là quản trị viên máy chủ.",
|
||||||
|
"moderator": "Bạn cần là người điều hành.",
|
||||||
|
"support": "Bạn cần ở trong nhóm hỗ trợ.",
|
||||||
|
"member": "Bạn cần là thành viên.",
|
||||||
|
"discord-administrator": "Bạn cần có quyền `ADMINISTRATOR`."
|
||||||
|
},
|
||||||
|
"actionInvalid": {
|
||||||
|
"close": "Ticket đã đóng!",
|
||||||
|
"reopen": "Ticket chưa đóng!",
|
||||||
|
"claim": "Ticket đã được nhận!",
|
||||||
|
"unclaim": "Ticket chưa được nhận!",
|
||||||
|
"pin": "Ticket đã được ghim!",
|
||||||
|
"unpin": "Ticket chưa được ghim!",
|
||||||
|
"add": "Người dùng này đã có thể truy cập ticket!",
|
||||||
|
"remove": "Không thể xóa người dùng này khỏi ticket!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"params": {
|
||||||
|
"uppercase": {
|
||||||
|
"ticket": "Ticket",
|
||||||
|
"tickets": "Tickets",
|
||||||
|
"reason": "Lý Do",
|
||||||
|
"creator": "Người Tạo",
|
||||||
|
"remaining": "Thời Gian Còn Lại",
|
||||||
|
"added": "Đã Thêm",
|
||||||
|
"removed": "Đã Xóa",
|
||||||
|
"filter": "Bộ Lọc",
|
||||||
|
"claimedBy": "Được Nhận Bởi {0}",
|
||||||
|
"method": "Phương Pháp",
|
||||||
|
"type": "Loại",
|
||||||
|
"blacklisted": "Bị Cấm",
|
||||||
|
"panel": "Bảng Điều Khiển",
|
||||||
|
"command": "Lệnh",
|
||||||
|
"system": "Hệ Thống",
|
||||||
|
"true": "Đúng",
|
||||||
|
"false": "Sai",
|
||||||
|
"syntax": "Cú Pháp",
|
||||||
|
"originalName": "Tên Gốc",
|
||||||
|
"newName": "Tên Mới",
|
||||||
|
"until": "Đến",
|
||||||
|
"validOptions": "Tùy Chọn Hợp Lệ",
|
||||||
|
"validPanels": "Bảng Điều Khiển Hợp Lệ",
|
||||||
|
"autoclose": "Tự Động Đóng",
|
||||||
|
"autodelete": "Tự Động Xóa",
|
||||||
|
"startupDate": "Ngày Khởi Động",
|
||||||
|
"version": "Phiên Bản",
|
||||||
|
"name": "Tên",
|
||||||
|
"role": "Vai Trò",
|
||||||
|
"status": "Trạng Thái",
|
||||||
|
"claimed": "Đã Nhận",
|
||||||
|
"pinned": "Đã Ghim",
|
||||||
|
"creationDate": "Ngày Tạo"
|
||||||
|
},
|
||||||
|
"lowercase": {
|
||||||
|
"text": "văn bản",
|
||||||
|
"html": "html",
|
||||||
|
"command": "lệnh",
|
||||||
|
"modal": "modal",
|
||||||
|
"button": "nút",
|
||||||
|
"dropdown": "dropdown",
|
||||||
|
"method": "phương pháp"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commands": {
|
||||||
|
"reason": "Chỉ định lý do tùy chọn sẽ hiển thị trong nhật ký.",
|
||||||
|
"help": "Nhận danh sách tất cả các lệnh có sẵn.",
|
||||||
|
"panel": "Tạo thông báo có dropdown hoặc nút (để tạo ticket).",
|
||||||
|
"panelId": "Mã định danh của bảng điều khiển bạn muốn tạo.",
|
||||||
|
"panelAutoUpdate": "Bạn có muốn bảng điều khiển này tự động cập nhật khi được chỉnh sửa không?",
|
||||||
|
"ticket": "Tạo ticket ngay lập tức.",
|
||||||
|
"ticketId": "Mã định danh của ticket bạn muốn tạo.",
|
||||||
|
"close": "Đóng ticket.",
|
||||||
|
"delete": "Xóa ticket.",
|
||||||
|
"deleteNoTranscript": "Xóa ticket này mà không tạo bản ghi.",
|
||||||
|
"reopen": "Mở lại ticket.",
|
||||||
|
"claim": "Nhận ticket.",
|
||||||
|
"claimUser": "Nhận ticket này cho người khác thay vì chính bạn.",
|
||||||
|
"unclaim": "Bỏ nhận ticket.",
|
||||||
|
"pin": "Ghim ticket.",
|
||||||
|
"unpin": "Bỏ ghim ticket.",
|
||||||
|
"move": "Di chuyển ticket.",
|
||||||
|
"moveId": "Mã định danh của tùy chọn bạn muốn di chuyển đến.",
|
||||||
|
"rename": "Đổi tên ticket.",
|
||||||
|
"renameName": "Tên mới cho ticket này.",
|
||||||
|
"add": "Thêm người dùng vào ticket.",
|
||||||
|
"addUser": "Người dùng cần thêm.",
|
||||||
|
"remove": "Xóa người dùng khỏi ticket.",
|
||||||
|
"removeUser": "Người dùng cần xóa.",
|
||||||
|
"blacklist": "Quản lý danh sách cấm ticket.",
|
||||||
|
"blacklistView": "Xem danh sách cấm hiện tại.",
|
||||||
|
"blacklistAdd": "Thêm người dùng vào danh sách cấm.",
|
||||||
|
"blacklistRemove": "Xóa người dùng khỏi danh sách cấm.",
|
||||||
|
"blacklistGet": "Nhận thông tin chi tiết từ người dùng bị cấm.",
|
||||||
|
"blacklistGetUser": "Người dùng cần nhận thông tin chi tiết.",
|
||||||
|
"stats": "Xem thống kê từ bot, thành viên hoặc ticket.",
|
||||||
|
"statsReset": "Đặt lại tất cả thống kê của bot (và bắt đầu đếm từ không).",
|
||||||
|
"statsGlobal": "Xem thống kê toàn cầu.",
|
||||||
|
"statsUser": "Xem thống kê từ người dùng trong máy chủ.",
|
||||||
|
"statsUserUser": "Người dùng cần xem.",
|
||||||
|
"statsTicket": "Xem thống kê của ticket trong máy chủ.",
|
||||||
|
"statsTicketTicket": "Ticket cần xem.",
|
||||||
|
"clear": "Xóa nhiều ticket cùng lúc.",
|
||||||
|
"clearFilter": "Bộ lọc để xóa ticket.",
|
||||||
|
"clearFilters": {
|
||||||
|
"all": "Tất Cả",
|
||||||
|
"open": "Mở",
|
||||||
|
"close": "Đã Đóng",
|
||||||
|
"claim": "Đã Nhận",
|
||||||
|
"unclaim": "Chưa Nhận",
|
||||||
|
"pin": "Đã Ghim",
|
||||||
|
"unpin": "Chưa Ghim",
|
||||||
|
"autoclose": "Tự Động Đóng"
|
||||||
|
},
|
||||||
|
"autoclose": "Quản lý tự động đóng trong ticket.",
|
||||||
|
"autocloseDisable": "Tắt tự động đóng trong ticket này.",
|
||||||
|
"autocloseEnable": "Bật tự động đóng trong ticket này.",
|
||||||
|
"autocloseEnableTime": "Số giờ ticket này cần không hoạt động để đóng.",
|
||||||
|
"autodelete": "Quản lý tự động xóa trong ticket.",
|
||||||
|
"autodeleteDisable": "Tắt tự động xóa trong ticket này.",
|
||||||
|
"autodeleteEnable": "Bật tự động xóa trong ticket này.",
|
||||||
|
"autodeleteEnableTime": "Số ngày ticket này cần không hoạt động để xóa."
|
||||||
|
},
|
||||||
|
"helpMenu": {
|
||||||
|
"help": "Nhận danh sách tất cả các lệnh có sẵn.",
|
||||||
|
"ticket": "Tạo ticket ngay lập tức.",
|
||||||
|
"close": "Đóng ticket, điều này vô hiệu hóa việc viết trong kênh này.",
|
||||||
|
"delete": "Xóa ticket, điều này tạo bản ghi khi được bật.",
|
||||||
|
"reopen": "Mở lại ticket, điều này cho phép viết lại trong kênh này.",
|
||||||
|
"pin": "Ghim ticket. Điều này sẽ di chuyển ticket lên đầu và thêm biểu tượng cảm xúc '📌' vào tên.",
|
||||||
|
"unpin": "Bỏ ghim ticket. Ticket sẽ giữ nguyên vị trí nhưng sẽ mất biểu tượng cảm xúc '📌'.",
|
||||||
|
"move": "Di chuyển ticket. Điều này sẽ thay đổi loại ticket này.",
|
||||||
|
"rename": "Đổi tên ticket. Điều này sẽ thay đổi tên kênh của ticket này.",
|
||||||
|
"claim": "Nhận ticket. Với điều này, bạn có thể cho nhóm của mình biết bạn đang xử lý ticket này.",
|
||||||
|
"unclaim": "Bỏ nhận ticket. Với điều này, bạn có thể cho nhóm của mình biết rằng ticket này lại rảnh.",
|
||||||
|
"add": "Thêm người dùng vào ticket. Điều này sẽ cho phép người dùng đọc và viết trong ticket này.",
|
||||||
|
"remove": "Xóa người dùng khỏi ticket. Điều này sẽ xóa khả năng đọc và viết của người dùng trong ticket này.",
|
||||||
|
"panel": "Tạo thông báo có dropdown hoặc nút (để tạo ticket).",
|
||||||
|
"blacklistView": "Xem danh sách cấm hiện tại.",
|
||||||
|
"blacklistAdd": "Thêm người dùng vào danh sách cấm.",
|
||||||
|
"blacklistRemove": "Xóa người dùng khỏi danh sách cấm.",
|
||||||
|
"blacklistGet": "Nhận thông tin chi tiết từ người dùng bị cấm.",
|
||||||
|
"statsGlobal": "Xem thống kê toàn cầu.",
|
||||||
|
"statsTicket": "Xem thống kê của ticket trong máy chủ.",
|
||||||
|
"statsUser": "Xem thống kê từ người dùng trong máy chủ.",
|
||||||
|
"statsReset": "Đặt lại tất cả thống kê của bot (và bắt đầu đếm từ không).",
|
||||||
|
"autocloseDisable": "Tắt tự động đóng trong ticket này.",
|
||||||
|
"autocloseEnable": "Bật tự động đóng trong ticket này.",
|
||||||
|
"autodeleteDisable": "Tắt tự động xóa trong ticket này.",
|
||||||
|
"autodeleteEnable": "Bật tự động xóa trong ticket này."
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"scopes": {
|
||||||
|
"global": "Thống Kê Toàn Cầu",
|
||||||
|
"system": "Thống Kê Hệ Thống",
|
||||||
|
"user": "Thống Kê Người Dùng",
|
||||||
|
"ticket": "Thống Kê Ticket",
|
||||||
|
"participants": "Người Tham Gia"
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"ticketsCreated": "Tickets Đã Tạo",
|
||||||
|
"ticketsClosed": "Tickets Đã Đóng",
|
||||||
|
"ticketsDeleted": "Tickets Đã Xóa",
|
||||||
|
"ticketsReopened": "Tickets Đã Mở Lại",
|
||||||
|
"ticketsAutoclosed": "Tickets Tự Động Đóng",
|
||||||
|
"ticketsClaimed": "Tickets Đã Nhận",
|
||||||
|
"ticketsPinned": "Tickets Đã Ghim",
|
||||||
|
"ticketsMoved": "Tickets Đã Di Chuyển",
|
||||||
|
"usersBlacklisted": "Người Dùng Bị Cấm",
|
||||||
|
"transcriptsCreated": "Bản Ghi Đã Tạo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+17
-11
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "open-ticket",
|
"name": "open-ticket",
|
||||||
"author": "DJdj Development",
|
"author": "DJdj Development",
|
||||||
"version": "4.0.0",
|
"version": "4.1.1",
|
||||||
"description": "The most advanced open-source discord ticket bot with HTML transcripts, plugins, questions, claiming, pinning & more! Using discord.js v14 & JSON database! ",
|
"description": "The most advanced open-source discord ticket bot with HTML transcripts, plugins, questions, claiming, pinning & more! Using discord.js v14 & JSON database! ",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"ticket-bot",
|
"ticket-bot",
|
||||||
@@ -14,26 +14,32 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "node index.js --compile-only",
|
"build": "node index.js --compile-only",
|
||||||
"start": "node index.js",
|
"start": "node index.js",
|
||||||
|
"setup": "node index.js --cli",
|
||||||
"startnc": "node index.js --no-compile",
|
"startnc": "node index.js --no-compile",
|
||||||
"test": "node index.js --dev-config --dev-database",
|
"test": "node index.js --dev-config --dev-database --soft-plugins",
|
||||||
"testnc": "node index.js --no-compile --dev-config --dev-database"
|
"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",
|
"type": "commonjs",
|
||||||
"license": "GPL-3.0-only",
|
"license": "GPL-3.0-only",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@discordjs/rest": "^2.4.2",
|
"@discordjs/rest": "^2.6.0",
|
||||||
"@types/node": "^22.5.0",
|
"@types/node": "^22.5.0",
|
||||||
"ansis": "^2.3.0",
|
"@types/terminal-kit": "^2.5.7",
|
||||||
"discord.js": "^14.17.2",
|
"ansis": "^4.2.0",
|
||||||
"formatted-json-stringify": "^1.1.0",
|
"discord.js": "^14.24.2",
|
||||||
"typescript": "^5.5.4"
|
"formatted-json-stringify": "^1.2.1",
|
||||||
|
"terminal-kit": "^3.1.2",
|
||||||
|
"typescript": "^5.9.3"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+https://github.com/DJj123dj/open-ticket.git"
|
"url": "git+https://github.com/open-discord-bots/open-ticket.git"
|
||||||
},
|
},
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/DJj123dj/open-ticket/issues",
|
"url": "https://github.com/open-discord-bots/open-ticket/issues",
|
||||||
"email": "support@dj-dj.be"
|
"email": "support@dj-dj.be"
|
||||||
},
|
},
|
||||||
"homepage": "https://openticket.dj-dj.be",
|
"homepage": "https://openticket.dj-dj.be",
|
||||||
@@ -41,7 +47,7 @@
|
|||||||
"#opendiscord": "./dist/src/index.js",
|
"#opendiscord": "./dist/src/index.js",
|
||||||
"#opendiscord-types": "./dist/src/core/api/api.js"
|
"#opendiscord-types": "./dist/src/core/api/api.js"
|
||||||
},
|
},
|
||||||
"funding":{
|
"funding": {
|
||||||
"type": "individual",
|
"type": "individual",
|
||||||
"url": "https://github.com/sponsors/DJj123dj"
|
"url": "https://github.com/sponsors/DJj123dj"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {api, openticket, utilities} from "#opendiscord"
|
import {api, opendiscord, utilities} from "#opendiscord"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
@@ -19,7 +19,7 @@ declare module "#opendiscord-types" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Let's register the example config. This way it's available for all plugins & systems.
|
//Let's register the example config. This way it's available for all plugins & systems.
|
||||||
openticket.events.get("onConfigLoad").listen((configManager) => {
|
opendiscord.events.get("onConfigLoad").listen((configManager) => {
|
||||||
configManager.add(new api.ODJsonConfig("example-plugin:config","config.json","./plugins/example-plugin/"))
|
configManager.add(new api.ODJsonConfig("example-plugin:config","config.json","./plugins/example-plugin/"))
|
||||||
/*===== What did we do? =====
|
/*===== What did we do? =====
|
||||||
- "example-plugin:config" Is the ID of this config. You can use this id troughout the bot to access this config file. Even in other plugins.
|
- "example-plugin:config" Is the ID of this config. You can use this id troughout the bot to access this config file. Even in other plugins.
|
||||||
@@ -29,18 +29,18 @@ openticket.events.get("onConfigLoad").listen((configManager) => {
|
|||||||
|
|
||||||
//Let's also log it to the console to let us know it worked!
|
//Let's also log it to the console to let us know it worked!
|
||||||
const ourConfig = configManager.get("example-plugin:config")
|
const ourConfig = configManager.get("example-plugin:config")
|
||||||
openticket.log("The example config loaded successfully!","plugin",[
|
opendiscord.log("The example config loaded successfully!","plugin",[
|
||||||
{key:"var-1",value:ourConfig.data.testVariable1},
|
{key:"var-1",value:ourConfig.data.testVariable1},
|
||||||
{key:"var-2",value:ourConfig.data.testVariable2.toString()},
|
{key:"var-2",value:ourConfig.data.testVariable2.toString()},
|
||||||
{key:"var-3",value:ourConfig.data.testVariable3.toString()}
|
{key:"var-3",value:ourConfig.data.testVariable3.toString()}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
openticket.events.get("onTicketCreate").listen((creator) => {
|
opendiscord.events.get("onTicketCreate").listen((creator) => {
|
||||||
//This is logged before the ticket is created (after the button is pressed)
|
//This is logged before the ticket is created (after the button is pressed)
|
||||||
openticket.log("Ticket is getting created...","plugin")
|
opendiscord.log("Ticket is getting created...","plugin")
|
||||||
})
|
})
|
||||||
openticket.events.get("afterTicketCreated").listen((ticket,creator,channel) => {
|
opendiscord.events.get("afterTicketCreated").listen((ticket,creator,channel) => {
|
||||||
//This is logged after the ticket is created
|
//This is logged after the ticket is created
|
||||||
openticket.log("Ticket ready!","plugin")
|
opendiscord.log("Ticket ready!","plugin")
|
||||||
})
|
})
|
||||||
@@ -1,24 +1,24 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET ADD USER SYSTEM
|
//TICKET ADD USER SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:add-ticket-user"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:add-ticket-user"))
|
||||||
openticket.actions.get("openticket:add-ticket-user").workers.add([
|
opendiscord.actions.get("opendiscord:add-ticket-user").workers.add([
|
||||||
new api.ODWorker("openticket:add-ticket-user",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:add-ticket-user",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason,data} = params
|
const {guild,channel,user,ticket,reason,data} = params
|
||||||
if (channel.isThread()) throw new api.ODSystemError("Unable to add user to ticket! Open Ticket doesn't support threads!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to add user to ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
await openticket.events.get("onTicketUserAdd").emit([ticket,user,data,channel,reason])
|
await opendiscord.events.get("onTicketUserAdd").emit([ticket,user,data,channel,reason])
|
||||||
|
|
||||||
//update ticket
|
//update ticket
|
||||||
ticket.get("openticket:participants").value.push({type:"user",id:data.id})
|
ticket.get("opendiscord:participants").value.push({type:"user",id:data.id})
|
||||||
ticket.get("openticket:participants").refreshDatabase()
|
ticket.get("opendiscord:participants").refreshDatabase()
|
||||||
ticket.get("openticket:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update channel permissions
|
//update channel permissions
|
||||||
try{
|
try{
|
||||||
@@ -31,47 +31,50 @@ export const registerActions = async () => {
|
|||||||
ReadMessageHistory:true
|
ReadMessageHistory:true
|
||||||
})
|
})
|
||||||
}catch{
|
}catch{
|
||||||
openticket.log("Failed to add channel permission overwrites on add-ticket-user","error")
|
opendiscord.log("Failed to add channel permission overwrites on add-ticket-user","error")
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on ticket user adding!","error",[
|
opendiscord.log("Unable to edit ticket message on ticket user adding!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"messageid",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value,hidden:true}
|
{key:"option",value:ticket.option.id.value,hidden:true}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:add-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:add-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
||||||
ticket.get("openticket:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await openticket.events.get("afterTicketUserAdded").emit([ticket,user,data,channel,reason])
|
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("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason,data} = params
|
const {guild,channel,user,ticket,reason,data} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.adding.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.adding.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await openticket.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.adding.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
|
if (creator && generalConfig.data.system.messages.adding.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,data} = params
|
const {guild,channel,user,ticket,data} = params
|
||||||
|
|
||||||
openticket.log(user.displayName+" added "+data.displayName+" to a ticket!","info",[
|
opendiscord.log(user.displayName+" added "+data.displayName+" to a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -81,8 +84,8 @@ export const registerActions = async () => {
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.actions.get("openticket:add-ticket-user").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
|
opendiscord.actions.get("opendiscord:add-ticket-user").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
||||||
//set busy to false in case of crash or cancel
|
//set busy to false in case of crash or cancel
|
||||||
params.ticket.get("openticket:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+101
-96
@@ -1,86 +1,91 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET CLAIMING SYSTEM
|
//TICKET CLAIMING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:claim-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:claim-ticket"))
|
||||||
openticket.actions.get("openticket:claim-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:claim-ticket").workers.add([
|
||||||
new api.ODWorker("openticket:claim-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:claim-ticket",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
if (channel.isThread()) throw new api.ODSystemError("Unable to claim ticket! Open Ticket doesn't support threads!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to claim ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
await openticket.events.get("onTicketClaim").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("onTicketClaim").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update ticket
|
//update ticket
|
||||||
ticket.get("openticket:claimed").value = true
|
ticket.get("opendiscord:claimed").value = true
|
||||||
ticket.get("openticket:claimed-by").value = user.id
|
ticket.get("opendiscord:claimed-by").value = user.id
|
||||||
ticket.get("openticket:claimed-on").value = new Date().getTime()
|
ticket.get("opendiscord:claimed-on").value = new Date().getTime()
|
||||||
ticket.get("openticket:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await openticket.stats.get("openticket:global").setStat("openticket:tickets-claimed",1,"increase")
|
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-claimed",1,"increase")
|
||||||
await openticket.stats.get("openticket:user").setStat("openticket:tickets-claimed",user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-claimed",user.id,1,"increase")
|
||||||
|
|
||||||
//update category
|
//update category
|
||||||
const rawClaimCategory = ticket.option.get("openticket:channel-categories-claimed").value.find((c) => c.user == user.id)
|
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
||||||
const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null
|
const rawClaimCategory = ticket.option.get("opendiscord:channel-categories-claimed").value.find((c) => c.user == user.id)
|
||||||
if (claimCategory){
|
const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null
|
||||||
try {
|
if (claimCategory){
|
||||||
channel.setParent(claimCategory,{lockPermissions:false})
|
try {
|
||||||
ticket.get("openticket:category-mode").value = "claimed"
|
channel.setParent(claimCategory,{lockPermissions:false})
|
||||||
ticket.get("openticket:category").value = claimCategory
|
ticket.get("opendiscord:category-mode").value = "claimed"
|
||||||
}catch(e){
|
ticket.get("opendiscord:category").value = claimCategory
|
||||||
openticket.log("Unable to move ticket to 'claimed category'!","error",[
|
}catch(e){
|
||||||
{key:"channel",value:"#"+channel.name},
|
opendiscord.log("Unable to move ticket to 'claimed category'!","error",[
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"categoryid",value:claimCategory}
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
])
|
{key:"categoryid",value:claimCategory}
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
])
|
||||||
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on ticket claiming!","error",[
|
opendiscord.log("Unable to edit ticket message on ticket claiming!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"messageid",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:claim-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build(source,{guild,channel,user,ticket,reason})).message)
|
||||||
ticket.get("openticket:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await openticket.events.get("afterTicketClaimed").emit([ticket,user,channel,reason])
|
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("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.claiming.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.claiming.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await openticket.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.claiming.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
|
if (creator && generalConfig.data.system.messages.claiming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
openticket.log(user.displayName+" claimed a ticket!","info",[
|
opendiscord.log(user.displayName+" claimed a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -90,188 +95,188 @@ export const registerActions = async () => {
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.actions.get("openticket:claim-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
|
opendiscord.actions.get("opendiscord:claim-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
||||||
//set busy to false in case of crash or cancel
|
//set busy to false in case of crash or cancel
|
||||||
params.ticket.get("openticket:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
export const registerVerifyBars = async () => {
|
||||||
//CLAIM TICKET TICKET MESSAGE
|
//CLAIM TICKET TICKET MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:claim-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:claim-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:claim-ticket-ticket-message").success.add([
|
opendiscord.verifybars.get("opendiscord:claim-ticket-ticket-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.claim
|
const permissionMode = generalConfig.data.system.permissions.claim
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:claim-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:claim-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when already claimed
|
//return when already claimed
|
||||||
if (ticket.get("openticket:claimed").value){
|
if (ticket.get("opendiscord:claimed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start claiming ticket
|
//start claiming ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//claim with reason
|
//claim with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:claim-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:claim-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//claim without reason
|
//claim without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:claim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
await opendiscord.actions.get("opendiscord:claim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:claim-ticket-ticket-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:claim-ticket-ticket-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|
||||||
//CLAIM TICKET UNCLAIM MESSAGE
|
//CLAIM TICKET UNCLAIM MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:claim-ticket-unclaim-message",openticket.builders.messages.getSafe("openticket:verifybar-unclaim-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:claim-ticket-unclaim-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-unclaim-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:claim-ticket-unclaim-message").success.add([
|
opendiscord.verifybars.get("opendiscord:claim-ticket-unclaim-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.claim
|
const permissionMode = generalConfig.data.system.permissions.claim
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:claim-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:claim-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when already claimed
|
//return when already claimed
|
||||||
if (ticket.get("openticket:claimed").value){
|
if (ticket.get("opendiscord:claimed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start claiming ticket
|
//start claiming ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//claim with reason
|
//claim with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:claim-ticket-reason").build("unclaim-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:claim-ticket-reason").build("unclaim-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//claim without reason
|
//claim without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:claim-ticket").run("unclaim-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
await opendiscord.actions.get("opendiscord:claim-ticket").run("unclaim-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:claim-message").build("unclaim-message",{guild,channel,user,ticket,reason:null}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build("unclaim-message",{guild,channel,user,ticket,reason:null}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:claim-ticket-unclaim-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:claim-ticket-unclaim-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-unclaim-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-unclaim-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const {verifybarMessage} = params
|
const {verifybarMessage} = params
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:unclaim-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unclaim-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
+37
-17
@@ -1,40 +1,60 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//CLEAR TICKETS SYSTEM
|
//CLEAR TICKETS SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:clear-tickets"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:clear-tickets"))
|
||||||
openticket.actions.get("openticket:clear-tickets").workers.add([
|
opendiscord.actions.get("opendiscord:clear-tickets").workers.add([
|
||||||
new api.ODWorker("openticket:clear-tickets",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:clear-tickets",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,filter,list} = params
|
const {guild,channel,user,filter,list} = params
|
||||||
|
|
||||||
await openticket.events.get("onTicketsClear").emit([list,user,channel,filter])
|
await opendiscord.events.get("onTicketsClear").emit([list,user,channel,filter])
|
||||||
const nameList: string[] = []
|
const nameList: string[] = []
|
||||||
for (const ticket of list){
|
|
||||||
const ticketChannel = await openticket.tickets.getTicketChannel(ticket)
|
//split tickets into smaller groups of 10 (to decrease ratelimit chances for HTML Transcripts & discord API)
|
||||||
if (!ticketChannel) return
|
const subGroupList: api.ODTicket[][] = []
|
||||||
nameList.push("#"+ticketChannel.name)
|
let tempSubGroup: api.ODTicket[] = []
|
||||||
await openticket.actions.get("openticket:delete-ticket").run("clear",{guild,channel:ticketChannel,user,ticket,reason:"Cleared Ticket",sendMessage:true,withoutTranscript:false})
|
list.forEach((ticket,index) => {
|
||||||
|
tempSubGroup.push(ticket)
|
||||||
|
if (tempSubGroup.length >= 10){
|
||||||
|
subGroupList.push(tempSubGroup)
|
||||||
|
tempSubGroup = []
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (tempSubGroup.length > 0) subGroupList.push(tempSubGroup)
|
||||||
|
|
||||||
|
let groupIndex = 0
|
||||||
|
for (const ticketGroup of subGroupList){
|
||||||
|
for (const ticket of ticketGroup){
|
||||||
|
const ticketChannel = await opendiscord.tickets.getTicketChannel(ticket)
|
||||||
|
if (!ticketChannel) return
|
||||||
|
nameList.push("#"+ticketChannel.name)
|
||||||
|
await opendiscord.actions.get("opendiscord:delete-ticket").run("clear",{guild,channel:ticketChannel,user,ticket,reason:"Cleared Ticket",sendMessage:true,withoutTranscript:false})
|
||||||
|
await utilities.timer(2000) //wait 2sec between each deletion
|
||||||
|
}
|
||||||
|
if (groupIndex < subGroupList.length-1) await utilities.timer(45*1000) //wait 45sec between each group deletion (10 tickets)
|
||||||
|
groupIndex++
|
||||||
}
|
}
|
||||||
|
|
||||||
instance.list = nameList
|
instance.list = nameList
|
||||||
await openticket.events.get("afterTicketsCleared").emit([list,user,channel,filter])
|
await opendiscord.events.get("afterTicketsCleared").emit([list,user,channel,filter])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,filter,list} = params
|
const {guild,channel,user,filter,list} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.deleting.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.deleting.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:clear-logs").build(source,{guild,channel,user,filter,list:instance.list ?? []}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:clear-logs").build(source,{guild,channel,user,filter,list:instance.list ?? []}))
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,user,filter,list} = params
|
const {guild,user,filter,list} = params
|
||||||
openticket.log(user.displayName+" cleared "+list.length+" tickets!","info",[
|
opendiscord.log(user.displayName+" cleared "+list.length+" tickets!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"method",value:source},
|
{key:"method",value:source},
|
||||||
|
|||||||
+136
-101
@@ -1,46 +1,54 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET CLOSING SYSTEM
|
//TICKET CLOSING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
const lang = opendiscord.languages
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:close-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:close-ticket"))
|
||||||
openticket.actions.get("openticket:close-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:close-ticket").workers.add([
|
||||||
new api.ODWorker("openticket:close-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:close-ticket",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
if (channel.isThread()) throw new api.ODSystemError("Unable to close ticket! Open Ticket doesn't support threads!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to close ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
await openticket.events.get("onTicketClose").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("onTicketClose").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update ticket
|
//update ticket
|
||||||
ticket.get("openticket:closed").value = true
|
ticket.get("opendiscord:closed").value = true
|
||||||
if (source == "autoclose") ticket.get("openticket:autoclosed").value = true
|
ticket.get("opendiscord:closed-by").value = user.id
|
||||||
ticket.get("openticket:open").value = false
|
ticket.get("opendiscord:closed-on").value = new Date().getTime()
|
||||||
ticket.get("openticket:closed-by").value = user.id
|
|
||||||
ticket.get("openticket:closed-on").value = new Date().getTime()
|
ticket.get("opendiscord:reopened").value = false
|
||||||
ticket.get("openticket:busy").value = true
|
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
|
//update stats
|
||||||
await openticket.stats.get("openticket:global").setStat("openticket:tickets-closed",1,"increase")
|
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-closed",1,"increase")
|
||||||
await openticket.stats.get("openticket:user").setStat("openticket:tickets-closed",user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-closed",user.id,1,"increase")
|
||||||
|
|
||||||
//update category
|
//update category
|
||||||
const closeCategory = ticket.option.get("openticket:channel-category-closed").value
|
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
||||||
if (closeCategory !== ""){
|
const closeCategory = ticket.option.get("opendiscord:channel-category-closed").value
|
||||||
try {
|
if (closeCategory !== ""){
|
||||||
channel.setParent(closeCategory,{lockPermissions:false})
|
try {
|
||||||
ticket.get("openticket:category-mode").value = "closed"
|
channel.setParent(closeCategory,{lockPermissions:false})
|
||||||
ticket.get("openticket:category").value = closeCategory
|
ticket.get("opendiscord:category-mode").value = "closed"
|
||||||
}catch(e){
|
ticket.get("opendiscord:category").value = closeCategory
|
||||||
openticket.log("Unable to move ticket to 'closed category'!","error",[
|
}catch(e){
|
||||||
{key:"channel",value:"#"+channel.name},
|
opendiscord.log("Unable to move ticket to 'closed category'!","error",[
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"categoryid",value:closeCategory}
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
])
|
{key:"categoryid",value:closeCategory}
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
])
|
||||||
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,9 +59,9 @@ export const registerActions = async () => {
|
|||||||
allow:[],
|
allow:[],
|
||||||
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
|
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
|
||||||
}]
|
}]
|
||||||
const globalAdmins = openticket.configs.get("openticket:general").data.globalAdmins
|
const globalAdmins = opendiscord.configs.get("opendiscord:general").data.globalAdmins
|
||||||
const optionAdmins = ticket.option.get("openticket:admins").value
|
const optionAdmins = ticket.option.get("opendiscord:admins").value
|
||||||
const readonlyAdmins = ticket.option.get("openticket:admins-readonly").value
|
const readonlyAdmins = ticket.option.get("opendiscord:admins-readonly").value
|
||||||
|
|
||||||
globalAdmins.forEach((admin) => {
|
globalAdmins.forEach((admin) => {
|
||||||
permissions.push({
|
permissions.push({
|
||||||
@@ -82,7 +90,7 @@ export const registerActions = async () => {
|
|||||||
deny:["SendMessages","AddReactions","AttachFiles","SendPolls"]
|
deny:["SendMessages","AddReactions","AttachFiles","SendPolls"]
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
ticket.get("openticket:participants").value.forEach((participant) => {
|
ticket.get("opendiscord:participants").value.forEach((participant) => {
|
||||||
//all participants that aren't roles/admins => readonly (OR non-viewable when enabled)
|
//all participants that aren't roles/admins => readonly (OR non-viewable when enabled)
|
||||||
if (participant.type == "user"){
|
if (participant.type == "user"){
|
||||||
if (generalConfig.data.system.removeParticipantsOnClose) permissions.push({
|
if (generalConfig.data.system.removeParticipantsOnClose) permissions.push({
|
||||||
@@ -102,43 +110,46 @@ export const registerActions = async () => {
|
|||||||
channel.permissionOverwrites.set(permissions)
|
channel.permissionOverwrites.set(permissions)
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on ticket closing!","error",[
|
opendiscord.log("Unable to edit ticket message on ticket closing!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"messageid",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:close-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:close-message").build(source,{guild,channel,user,ticket,reason})).message)
|
||||||
ticket.get("openticket:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await openticket.events.get("afterTicketClosed").emit([ticket,user,channel,reason])
|
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("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.closing.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.closing.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await openticket.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.closing.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
|
if (creator && generalConfig.data.system.messages.closing.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
openticket.log(user.displayName+" closed a ticket!","info",[
|
opendiscord.log(user.displayName+" closed a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -148,188 +159,212 @@ export const registerActions = async () => {
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.actions.get("openticket:close-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
|
opendiscord.actions.get("opendiscord:close-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
||||||
//set busy to false in case of crash or cancel
|
//set busy to false in case of crash or cancel
|
||||||
params.ticket.get("openticket:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
export const registerVerifyBars = async () => {
|
||||||
//CLOSE TICKET TICKET MESSAGE
|
//CLOSE TICKET TICKET MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:close-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:close-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:close-ticket-ticket-message").success.add([
|
opendiscord.verifybars.get("opendiscord:close-ticket-ticket-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.close
|
const permissionMode = generalConfig.data.system.permissions.close
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:close-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:close-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when already closed
|
//return when already closed
|
||||||
if (ticket.get("openticket:closed").value){
|
if (ticket.get("opendiscord:closed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.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 cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
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
|
//start closing ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//close with reason
|
//close with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:close-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:close-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//close without reason
|
//close without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:close-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
await opendiscord.actions.get("opendiscord:close-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:close-ticket-ticket-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:close-ticket-ticket-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|
||||||
//CLOSE TICKET REOPEN MESSAGE
|
//CLOSE TICKET REOPEN MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:close-ticket-reopen-message",openticket.builders.messages.getSafe("openticket:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:close-ticket-reopen-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:close-ticket-reopen-message").success.add([
|
opendiscord.verifybars.get("opendiscord:close-ticket-reopen-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.close
|
const permissionMode = generalConfig.data.system.permissions.close
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:close-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:close-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when already closed
|
//return when already closed
|
||||||
if (ticket.get("openticket:closed").value){
|
if (ticket.get("opendiscord:closed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.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 cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
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
|
//start closing ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//close with reason
|
//close with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:close-ticket-reason").build("reopen-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:close-ticket-reason").build("reopen-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//close without reason
|
//close without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:close-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
await opendiscord.actions.get("opendiscord:close-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:close-message").build("reopen-message",{guild,channel,user,ticket,reason:null}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:close-message").build("reopen-message",{guild,channel,user,ticket,reason:null}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:close-ticket-reopen-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:close-ticket-reopen-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-reopen-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-reopen-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const {verifybarMessage} = params
|
const {verifybarMessage} = params
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:reopen-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
+112
-84
@@ -1,26 +1,27 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET CREATION SYSTEM
|
//TICKET CREATION SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
const lang = opendiscord.languages
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:create-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:create-ticket"))
|
||||||
openticket.actions.get("openticket:create-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:create-ticket").workers.add([
|
||||||
new api.ODWorker("openticket:create-ticket",3,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:create-ticket",3,async (instance,params,source,cancel) => {
|
||||||
const {guild,user,answers,option} = params
|
const {guild,user,answers,option} = params
|
||||||
|
|
||||||
await openticket.events.get("onTicketCreate").emit([user])
|
await opendiscord.events.get("onTicketCreate").emit([user])
|
||||||
await openticket.events.get("onTicketChannelCreation").emit([option,user])
|
await opendiscord.events.get("onTicketChannelCreation").emit([option,user])
|
||||||
|
|
||||||
//get channel properties
|
//get channel properties
|
||||||
const channelPrefix = option.get("openticket:channel-prefix").value
|
const channelPrefix = option.get("opendiscord:channel-prefix").value
|
||||||
const channelCategory = option.get("openticket:channel-category").value
|
const channelCategory = option.get("opendiscord:channel-category").value
|
||||||
const channelBackupCategory = option.get("openticket:channel-category-backup").value
|
const channelBackupCategory = option.get("opendiscord:channel-category-backup").value
|
||||||
const channelDescription = option.get("openticket:channel-description").value
|
const channelTopicText = option.get("opendiscord:channel-topic").value
|
||||||
const channelSuffix = openticket.options.suffix.getSuffixFromOption(option,user)
|
const channelSuffix = await opendiscord.options.suffix.getSuffixFromOption(option,user,guild)
|
||||||
const channelName = channelPrefix+channelSuffix
|
const channelName = channelPrefix+channelSuffix
|
||||||
|
|
||||||
//handle category
|
//handle category
|
||||||
@@ -28,10 +29,10 @@ export const registerActions = async () => {
|
|||||||
let categoryMode: "backup"|"normal"|null = null
|
let categoryMode: "backup"|"normal"|null = null
|
||||||
if (channelCategory != ""){
|
if (channelCategory != ""){
|
||||||
//category enabled
|
//category enabled
|
||||||
const normalCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelCategory)
|
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
||||||
if (!normalCategory){
|
if (!normalCategory){
|
||||||
//default category was not found
|
//default category was not found
|
||||||
openticket.log("Ticket Creation Error: Unable to find category! #1","error",[
|
opendiscord.log("Ticket Creation Error: Unable to find category! #1","error",[
|
||||||
{key:"categoryid",value:channelCategory},
|
{key:"categoryid",value:channelCategory},
|
||||||
{key:"backup",value:"false"}
|
{key:"backup",value:"false"}
|
||||||
])
|
])
|
||||||
@@ -39,10 +40,10 @@ export const registerActions = async () => {
|
|||||||
//default category was found
|
//default category was found
|
||||||
if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){
|
if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){
|
||||||
//use backup category
|
//use backup category
|
||||||
const backupCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
||||||
if (!backupCategory){
|
if (!backupCategory){
|
||||||
//default category was not found
|
//default category was not found
|
||||||
openticket.log("Ticket Creation Error: Unable to find category! #2","error",[
|
opendiscord.log("Ticket Creation Error: Unable to find category! #2","error",[
|
||||||
{key:"categoryid",value:channelBackupCategory},
|
{key:"categoryid",value:channelBackupCategory},
|
||||||
{key:"backup",value:"true"}
|
{key:"backup",value:"true"}
|
||||||
])
|
])
|
||||||
@@ -65,15 +66,15 @@ export const registerActions = async () => {
|
|||||||
allow:[],
|
allow:[],
|
||||||
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
|
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
|
||||||
}]
|
}]
|
||||||
const globalAdmins = openticket.configs.get("openticket:general").data.globalAdmins
|
const globalAdmins = opendiscord.configs.get("opendiscord:general").data.globalAdmins
|
||||||
const optionAdmins = option.get("openticket:admins").value
|
const optionAdmins = option.get("opendiscord:admins").value
|
||||||
const readonlyAdmins = option.get("openticket:admins-readonly").value
|
const readonlyAdmins = option.get("opendiscord:admins-readonly").value
|
||||||
|
|
||||||
globalAdmins.forEach((admin) => {
|
globalAdmins.forEach((admin) => {
|
||||||
permissions.push({
|
permissions.push({
|
||||||
type:discord.OverwriteType.Role,
|
type:discord.OverwriteType.Role,
|
||||||
id:admin,
|
id:admin,
|
||||||
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
|
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages","PinMessages","EmbedLinks"],
|
||||||
deny:[]
|
deny:[]
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -82,7 +83,7 @@ export const registerActions = async () => {
|
|||||||
permissions.push({
|
permissions.push({
|
||||||
type:discord.OverwriteType.Role,
|
type:discord.OverwriteType.Role,
|
||||||
id:admin,
|
id:admin,
|
||||||
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages"],
|
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","ManageMessages","PinMessages","EmbedLinks"],
|
||||||
deny:[]
|
deny:[]
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -93,28 +94,15 @@ export const registerActions = async () => {
|
|||||||
type:discord.OverwriteType.Role,
|
type:discord.OverwriteType.Role,
|
||||||
id:admin,
|
id:admin,
|
||||||
allow:["ViewChannel","ReadMessageHistory"],
|
allow:["ViewChannel","ReadMessageHistory"],
|
||||||
deny:["SendMessages","AddReactions","AttachFiles","SendPolls"]
|
deny:["SendMessages","AddReactions","AttachFiles","SendPolls","PinMessages"]
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
permissions.push({
|
permissions.push({
|
||||||
type:discord.OverwriteType.Member,
|
type:discord.OverwriteType.Member,
|
||||||
id:user.id,
|
id:user.id,
|
||||||
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory"],
|
allow:["ViewChannel","SendMessages","AddReactions","AttachFiles","SendPolls","ReadMessageHistory","EmbedLinks","PinMessages"],
|
||||||
deny:[]
|
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 openticket.events.get("afterTicketChannelCreated").emit([option,channel,user])
|
|
||||||
|
|
||||||
//create participants
|
//create participants
|
||||||
const participants: {type:"role"|"user",id:string}[] = []
|
const participants: {type:"role"|"user",id:string}[] = []
|
||||||
@@ -125,98 +113,138 @@ export const registerActions = async () => {
|
|||||||
participants.push({type,id})
|
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
|
//create ticket
|
||||||
const ticket = new api.ODTicket(channel.id,option,[
|
const ticket = new api.ODTicket(channel.id,option,[
|
||||||
new api.ODTicketData("openticket:busy",false),
|
new api.ODTicketData("opendiscord:busy",false),
|
||||||
new api.ODTicketData("openticket:ticket-message",null),
|
new api.ODTicketData("opendiscord:ticket-message",null),
|
||||||
new api.ODTicketData("openticket:participants",participants),
|
new api.ODTicketData("opendiscord:participants",participants),
|
||||||
new api.ODTicketData("openticket:channel-suffix",channelSuffix),
|
new api.ODTicketData("opendiscord:channel-suffix",channelSuffix),
|
||||||
|
new api.ODTicketData("opendiscord:previous-creators",[]),
|
||||||
|
|
||||||
new api.ODTicketData("openticket:open",true),
|
new api.ODTicketData("opendiscord:open",true),
|
||||||
new api.ODTicketData("openticket:opened-by",user.id),
|
new api.ODTicketData("opendiscord:opened-by",user.id),
|
||||||
new api.ODTicketData("openticket:opened-on",new Date().getTime()),
|
new api.ODTicketData("opendiscord:opened-on",new Date().getTime()),
|
||||||
new api.ODTicketData("openticket:closed",false),
|
new api.ODTicketData("opendiscord:closed",false),
|
||||||
new api.ODTicketData("openticket:closed-by",null),
|
new api.ODTicketData("opendiscord:closed-by",null),
|
||||||
new api.ODTicketData("openticket:closed-on",null),
|
new api.ODTicketData("opendiscord:closed-on",null),
|
||||||
new api.ODTicketData("openticket:claimed",false),
|
new api.ODTicketData("opendiscord:reopened",false),
|
||||||
new api.ODTicketData("openticket:claimed-by",null),
|
new api.ODTicketData("opendiscord:reopened-by",null),
|
||||||
new api.ODTicketData("openticket:claimed-on",null),
|
new api.ODTicketData("opendiscord:reopened-on",null),
|
||||||
new api.ODTicketData("openticket:pinned",false),
|
new api.ODTicketData("opendiscord:claimed",false),
|
||||||
new api.ODTicketData("openticket:pinned-by",null),
|
new api.ODTicketData("opendiscord:claimed-by",null),
|
||||||
new api.ODTicketData("openticket:pinned-on",null),
|
new api.ODTicketData("opendiscord:claimed-on",null),
|
||||||
new api.ODTicketData("openticket:for-deletion",false),
|
new api.ODTicketData("opendiscord:pinned",false),
|
||||||
|
new api.ODTicketData("opendiscord:pinned-by",null),
|
||||||
|
new api.ODTicketData("opendiscord:pinned-on",null),
|
||||||
|
new api.ODTicketData("opendiscord:for-deletion",false),
|
||||||
|
|
||||||
new api.ODTicketData("openticket:category",category),
|
new api.ODTicketData("opendiscord:category",category),
|
||||||
new api.ODTicketData("openticket:category-mode",categoryMode),
|
new api.ODTicketData("opendiscord:category-mode",categoryMode),
|
||||||
|
|
||||||
new api.ODTicketData("openticket:autoclose-enabled",option.get("openticket:autoclose-enable-hours").value),
|
new api.ODTicketData("opendiscord:autoclose-enabled",option.get("opendiscord:autoclose-enable-hours").value),
|
||||||
new api.ODTicketData("openticket:autoclose-hours",(option.get("openticket:autoclose-enable-hours").value ? option.get("openticket:autoclose-hours").value : 0)),
|
new api.ODTicketData("opendiscord:autoclose-hours",(option.get("opendiscord:autoclose-enable-hours").value ? option.get("opendiscord:autoclose-hours").value : 0)),
|
||||||
new api.ODTicketData("openticket:autoclosed",false),
|
new api.ODTicketData("opendiscord:autoclosed",false),
|
||||||
new api.ODTicketData("openticket:autodelete-enabled",option.get("openticket:autodelete-enable-days").value),
|
new api.ODTicketData("opendiscord:autodelete-enabled",option.get("opendiscord:autodelete-enable-days").value),
|
||||||
new api.ODTicketData("openticket:autodelete-days",(option.get("openticket:autodelete-enable-days").value ? option.get("openticket:autodelete-days").value : 0)),
|
new api.ODTicketData("opendiscord:autodelete-days",(option.get("opendiscord:autodelete-enable-days").value ? option.get("opendiscord:autodelete-days").value : 0)),
|
||||||
|
|
||||||
new api.ODTicketData("openticket: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
|
//manage stats
|
||||||
await openticket.stats.get("openticket:global").setStat("openticket:tickets-created",1,"increase")
|
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-created",1,"increase")
|
||||||
await openticket.stats.get("openticket:user").setStat("openticket:tickets-created",user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-created",user.id,1,"increase")
|
||||||
|
|
||||||
//manage bot permissions
|
//manage bot permissions
|
||||||
await openticket.events.get("onTicketPermissionsCreated").emit([option,openticket.permissions,channel,user])
|
await opendiscord.events.get("onTicketPermissionsCreated").emit([option,opendiscord.permissions,channel,user])
|
||||||
await (await import("../data/framework/permissionLoader.js")).addTicketPermissions(ticket)
|
await (await import("../data/framework/permissionLoader.js")).addTicketPermissions(ticket)
|
||||||
await openticket.events.get("afterTicketPermissionsCreated").emit([option,openticket.permissions,channel,user])
|
await opendiscord.events.get("afterTicketPermissionsCreated").emit([option,opendiscord.permissions,channel,user])
|
||||||
|
|
||||||
//export channel & ticket
|
//export channel & ticket
|
||||||
instance.channel = channel
|
instance.channel = channel
|
||||||
instance.ticket = ticket
|
instance.ticket = ticket
|
||||||
openticket.tickets.add(ticket)
|
opendiscord.tickets.add(ticket)
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:send-ticket-message",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:send-ticket-message",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,user,answers,option} = params
|
const {guild,user,answers,option} = params
|
||||||
const {ticket,channel} = instance
|
const {ticket,channel} = instance
|
||||||
|
|
||||||
if (!ticket || !channel) return openticket.log("Ticket Creation Error: Unable to send ticket message. Previous worker failed!","error")
|
if (!ticket || !channel) return opendiscord.log("Ticket Creation Error: Unable to send ticket message. Previous worker failed!","error")
|
||||||
|
|
||||||
await openticket.events.get("onTicketMainMessageCreated").emit([ticket,channel,user])
|
await opendiscord.events.get("onTicketMainMessageCreated").emit([ticket,channel,user])
|
||||||
//check if ticket message is enabled
|
//check if ticket message is enabled
|
||||||
if (!option.get("openticket:ticket-message-enabled").value) return
|
if (!option.get("opendiscord:ticket-message-enabled").value) return
|
||||||
try {
|
try {
|
||||||
const msg = await channel.send((await openticket.builders.messages.getSafe("openticket:ticket-message").build(source,{guild,channel,user,ticket})).message)
|
const msg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build(source,{guild,channel,user,ticket})).message)
|
||||||
|
|
||||||
ticket.get("openticket:ticket-message").value = msg.id
|
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
|
//manage stats
|
||||||
await openticket.stats.get("openticket:ticket").setStat("openticket:messages-sent",ticket.id.value,1,"increase")
|
await opendiscord.stats.get("opendiscord:ticket").setStat("opendiscord:messages-sent",ticket.id.value,1,"increase")
|
||||||
|
|
||||||
await openticket.events.get("afterTicketMainMessageCreated").emit([ticket,msg,channel,user])
|
await opendiscord.events.get("afterTicketMainMessageCreated").emit([ticket,msg,channel,user])
|
||||||
}catch(err){
|
}catch(err){
|
||||||
process.emit("uncaughtException",err)
|
process.emit("uncaughtException",err)
|
||||||
//something went wrong while sending the ticket message
|
//something went wrong while sending the ticket message
|
||||||
channel.send((await openticket.builders.messages.getSafe("openticket:error").build("other",{guild,channel,user,error:"Ticket Message: Creation Error!\n=> Ticket Is Still Created Succesfully",layout:"advanced"})).message)
|
channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error").build("other",{guild,channel,user,error:"Ticket Message: Creation Error!\n=> Ticket Is Still Created Succesfully",layout:"advanced"})).message)
|
||||||
}
|
}
|
||||||
await openticket.events.get("afterTicketCreated").emit([ticket,user,channel])
|
await opendiscord.events.get("afterTicketCreated").emit([ticket,user,channel])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,user,answers,option} = params
|
const {guild,user,answers,option} = params
|
||||||
const {ticket,channel} = instance
|
const {ticket,channel} = instance
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.creation.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.creation.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-created-logs").build(source,{guild,channel,user,ticket}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-created-logs").build(source,{guild,channel,user,ticket}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
if (generalConfig.data.system.messages.creation.dm) await openticket.client.sendUserDm(user,await openticket.builders.messages.getSafe("openticket:ticket-created-dm").build(source,{guild,channel,user,ticket}))
|
if (generalConfig.data.system.messages.creation.dm) await opendiscord.client.sendUserDm(user,await opendiscord.builders.messages.getSafe("opendiscord:ticket-created-dm").build(source,{guild,channel,user,ticket}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,user,answers,option} = params
|
const {guild,user,answers,option} = params
|
||||||
const {ticket,channel} = instance
|
const {ticket,channel} = instance
|
||||||
|
|
||||||
if (!ticket || !channel) return openticket.log("Ticket Creation Error: Unable to create logs. Previous worker failed!","error")
|
if (!ticket || !channel) return opendiscord.log("Ticket Creation Error: Unable to create logs. Previous worker failed!","error")
|
||||||
|
|
||||||
openticket.log(user.displayName+" created a ticket!","info",[
|
opendiscord.log(user.displayName+" created a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -226,4 +254,4 @@ export const registerActions = async () => {
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET CREATION SYSTEM
|
//TICKET CREATION SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:create-ticket-permissions"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:create-ticket-permissions"))
|
||||||
openticket.actions.get("openticket:create-ticket-permissions").workers.add([
|
opendiscord.actions.get("opendiscord:create-ticket-permissions").workers.add([
|
||||||
new api.ODWorker("openticket:check-blacklist",4,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:check-blacklist",4,(instance,params,source,cancel) => {
|
||||||
if (!params.option.get("openticket:allow-blacklisted-users").value && openticket.blacklist.exists(params.user.id)){
|
if (!params.option.get("opendiscord:allow-blacklisted-users").value && opendiscord.blacklist.exists(params.user.id)){
|
||||||
instance.valid = false
|
instance.valid = false
|
||||||
instance.reason = "blacklist"
|
instance.reason = "blacklist"
|
||||||
openticket.log(params.user.displayName+" tried to create a ticket but is blacklisted!","info",[
|
opendiscord.log(params.user.displayName+" tried to create a ticket but is blacklisted!","info",[
|
||||||
{key:"user",value:params.user.username},
|
{key:"user",value:params.user.username},
|
||||||
{key:"userid",value:params.user.id,hidden:true},
|
{key:"userid",value:params.user.id,hidden:true},
|
||||||
{key:"option",value:params.option.id.value}
|
{key:"option",value:params.option.id.value}
|
||||||
@@ -19,15 +19,15 @@ export const registerActions = async () => {
|
|||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:check-cooldown",3,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:check-cooldown",3,(instance,params,source,cancel) => {
|
||||||
const cooldown = openticket.cooldowns.get("openticket:option-cooldown_"+params.option.id.value)
|
const cooldown = opendiscord.cooldowns.get("opendiscord:option-cooldown_"+params.option.id.value)
|
||||||
if (cooldown && cooldown instanceof api.ODTimeoutCooldown && cooldown.use(params.user.id)){
|
if (cooldown && cooldown instanceof api.ODTimeoutCooldown && cooldown.use(params.user.id)){
|
||||||
instance.valid = false
|
instance.valid = false
|
||||||
instance.reason = "cooldown"
|
instance.reason = "cooldown"
|
||||||
const remaining = cooldown.remaining(params.user.id) ?? 0
|
const remaining = cooldown.remaining(params.user.id) ?? 0
|
||||||
instance.cooldownUntil = new Date(new Date().getTime() + remaining)
|
instance.cooldownUntil = new Date(new Date().getTime() + remaining)
|
||||||
|
|
||||||
openticket.log(params.user.displayName+" tried to create a ticket but is on cooldown!","info",[
|
opendiscord.log(params.user.displayName+" tried to create a ticket but is on cooldown!","info",[
|
||||||
{key:"user",value:params.user.username},
|
{key:"user",value:params.user.username},
|
||||||
{key:"userid",value:params.user.id,hidden:true},
|
{key:"userid",value:params.user.id,hidden:true},
|
||||||
{key:"option",value:params.option.id.value},
|
{key:"option",value:params.option.id.value},
|
||||||
@@ -36,19 +36,19 @@ export const registerActions = async () => {
|
|||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:check-global-limits",2,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:check-global-limits",2,(instance,params,source,cancel) => {
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
if (!generalConfig.data.system.limits.enabled) return
|
if (!generalConfig.data.system.limits.enabled) return
|
||||||
|
|
||||||
const allTickets = openticket.tickets.getAll()
|
const allTickets = opendiscord.tickets.getAll()
|
||||||
const globalTicketCount = allTickets.length
|
const globalTicketCount = allTickets.length
|
||||||
const userTickets = openticket.tickets.getFiltered((ticket) => ticket.exists("openticket:opened-by") && (ticket.get("openticket:opened-by").value == params.user.id))
|
const userTickets = opendiscord.tickets.getFiltered((ticket) => ticket.exists("opendiscord:opened-by") && (ticket.get("opendiscord:opened-by").value == params.user.id))
|
||||||
const userTicketCount = userTickets.length
|
const userTicketCount = userTickets.length
|
||||||
|
|
||||||
if (globalTicketCount >= generalConfig.data.system.limits.globalMaximum){
|
if (globalTicketCount >= generalConfig.data.system.limits.globalMaximum){
|
||||||
instance.valid = false
|
instance.valid = false
|
||||||
instance.reason = "global-limit"
|
instance.reason = "global-limit"
|
||||||
openticket.log(params.user.displayName+" tried to create a ticket but reached the limit!","info",[
|
opendiscord.log(params.user.displayName+" tried to create a ticket but reached the limit!","info",[
|
||||||
{key:"user",value:params.user.username},
|
{key:"user",value:params.user.username},
|
||||||
{key:"userid",value:params.user.id,hidden:true},
|
{key:"userid",value:params.user.id,hidden:true},
|
||||||
{key:"option",value:params.option.id.value},
|
{key:"option",value:params.option.id.value},
|
||||||
@@ -58,7 +58,7 @@ export const registerActions = async () => {
|
|||||||
}else if (userTicketCount >= generalConfig.data.system.limits.userMaximum){
|
}else if (userTicketCount >= generalConfig.data.system.limits.userMaximum){
|
||||||
instance.valid = false
|
instance.valid = false
|
||||||
instance.reason = "global-user-limit"
|
instance.reason = "global-user-limit"
|
||||||
openticket.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
|
opendiscord.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
|
||||||
{key:"user",value:params.user.username},
|
{key:"user",value:params.user.username},
|
||||||
{key:"userid",value:params.user.id,hidden:true},
|
{key:"userid",value:params.user.id,hidden:true},
|
||||||
{key:"option",value:params.option.id.value},
|
{key:"option",value:params.option.id.value},
|
||||||
@@ -67,28 +67,28 @@ export const registerActions = async () => {
|
|||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:check-option-limits",1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:check-option-limits",1,(instance,params,source,cancel) => {
|
||||||
if (!params.option.exists("openticket:limits-enabled") || !params.option.get("openticket:limits-enabled").value) return
|
if (!params.option.exists("opendiscord:limits-enabled") || !params.option.get("opendiscord:limits-enabled").value) return
|
||||||
|
|
||||||
const allTickets = openticket.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value)
|
const allTickets = opendiscord.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value)
|
||||||
const globalTicketCount = allTickets.length
|
const globalTicketCount = allTickets.length
|
||||||
const userTickets = openticket.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value && ticket.exists("openticket:opened-by") && (ticket.get("openticket:opened-by").value == params.user.id))
|
const userTickets = opendiscord.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value && ticket.exists("opendiscord:opened-by") && (ticket.get("opendiscord:opened-by").value == params.user.id))
|
||||||
const userTicketCount = userTickets.length
|
const userTicketCount = userTickets.length
|
||||||
|
|
||||||
if (globalTicketCount >= params.option.get("openticket:limits-maximum-global").value){
|
if (globalTicketCount >= params.option.get("opendiscord:limits-maximum-global").value){
|
||||||
instance.valid = false
|
instance.valid = false
|
||||||
instance.reason = "option-limit"
|
instance.reason = "option-limit"
|
||||||
openticket.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
|
opendiscord.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
|
||||||
{key:"user",value:params.user.username},
|
{key:"user",value:params.user.username},
|
||||||
{key:"userid",value:params.user.id,hidden:true},
|
{key:"userid",value:params.user.id,hidden:true},
|
||||||
{key:"option",value:params.option.id.value},
|
{key:"option",value:params.option.id.value},
|
||||||
{key:"limit",value:"option"}
|
{key:"limit",value:"option"}
|
||||||
])
|
])
|
||||||
return cancel()
|
return cancel()
|
||||||
}else if (userTicketCount >= params.option.get("openticket:limits-maximum-user").value){
|
}else if (userTicketCount >= params.option.get("opendiscord:limits-maximum-user").value){
|
||||||
instance.valid = false
|
instance.valid = false
|
||||||
instance.reason = "option-user-limit"
|
instance.reason = "option-user-limit"
|
||||||
openticket.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
|
opendiscord.log(params.user.displayName+" tried to create a ticket, but reached the limit!","info",[
|
||||||
{key:"user",value:params.user.username},
|
{key:"user",value:params.user.username},
|
||||||
{key:"userid",value:params.user.id,hidden:true},
|
{key:"userid",value:params.user.id,hidden:true},
|
||||||
{key:"option",value:params.option.id.value},
|
{key:"option",value:params.option.id.value},
|
||||||
@@ -97,7 +97,7 @@ export const registerActions = async () => {
|
|||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:valid",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:valid",0,(instance,params,source,cancel) => {
|
||||||
instance.valid = true
|
instance.valid = true
|
||||||
instance.reason = null
|
instance.reason = null
|
||||||
cancel()
|
cancel()
|
||||||
|
|||||||
@@ -1,23 +1,23 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TRANSCRIPT CREATION SYSTEM
|
//TRANSCRIPT CREATION SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const transcriptConfig = openticket.configs.get("openticket:transcripts")
|
const transcriptConfig = opendiscord.configs.get("opendiscord:transcripts")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:create-transcript"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:create-transcript"))
|
||||||
openticket.actions.get("openticket:create-transcript").workers.add([
|
opendiscord.actions.get("opendiscord:create-transcript").workers.add([
|
||||||
new api.ODWorker("openticket:select-compiler",4,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:select-compiler",4,async (instance,params,source,cancel) => {
|
||||||
const {channel,user,ticket} = params
|
const {channel,user,ticket} = params
|
||||||
if (channel.type != discord.ChannelType.GuildText) return cancel()
|
if (channel.type != discord.ChannelType.GuildText) return cancel()
|
||||||
if (!transcriptConfig.data.general.enabled) return cancel()
|
if (!transcriptConfig.data.general.enabled) return cancel()
|
||||||
|
|
||||||
await openticket.events.get("onTranscriptCreate").emit([openticket.transcripts,ticket,channel,user])
|
await opendiscord.events.get("onTranscriptCreate").emit([opendiscord.transcripts,ticket,channel,user])
|
||||||
|
|
||||||
instance.errorReason = null
|
instance.errorReason = null
|
||||||
const participants = await openticket.tickets.getAllTicketParticipants(params.ticket)
|
const participants = await opendiscord.tickets.getAllTicketParticipants(params.ticket)
|
||||||
if (!participants){
|
if (!participants){
|
||||||
instance.pendingMessage = null
|
instance.pendingMessage = null
|
||||||
instance.errorReason = "Unable to fetch ticket channel participants!"
|
instance.errorReason = "Unable to fetch ticket channel participants!"
|
||||||
@@ -26,22 +26,24 @@ export const registerActions = async () => {
|
|||||||
instance.participants = participants
|
instance.participants = participants
|
||||||
|
|
||||||
//select transcript compiler
|
//select transcript compiler
|
||||||
if (transcriptConfig.data.general.mode == "text") instance.compiler = openticket.transcripts.get("openticket:text-compiler")
|
if (transcriptConfig.data.general.mode == "text") instance.compiler = opendiscord.transcripts.get("opendiscord:text-compiler")
|
||||||
else if (transcriptConfig.data.general.mode == "html") instance.compiler = openticket.transcripts.get("openticket:html-compiler")
|
else if (transcriptConfig.data.general.mode == "html") instance.compiler = opendiscord.transcripts.get("opendiscord:html-compiler")
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:init-transcript",3,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:init-transcript",3,async (instance,params,source,cancel) => {
|
||||||
const {channel,user,ticket} = params
|
const {channel,user,ticket} = params
|
||||||
if (channel.type != discord.ChannelType.GuildText) return cancel()
|
if (channel.type != discord.ChannelType.GuildText) return cancel()
|
||||||
if (!transcriptConfig.data.general.enabled) return cancel()
|
if (!transcriptConfig.data.general.enabled) return cancel()
|
||||||
|
|
||||||
//run transcript compiler init()
|
//run transcript compiler init()
|
||||||
await openticket.events.get("onTranscriptInit").emit([openticket.transcripts,ticket,channel,user])
|
await opendiscord.events.get("onTranscriptInit").emit([opendiscord.transcripts,ticket,channel,user])
|
||||||
if (instance.compiler.init){
|
if (instance.compiler.init){
|
||||||
try{
|
try{
|
||||||
|
instance.initData = null
|
||||||
const result = await instance.compiler.init(ticket,channel,user)
|
const result = await instance.compiler.init(ticket,channel,user)
|
||||||
|
instance.initData = result.initData
|
||||||
if (result.success && result.pendingMessage && transcriptConfig.data.general.enableChannel){
|
if (result.success && result.pendingMessage && transcriptConfig.data.general.enableChannel){
|
||||||
//send init message to channel
|
//send init message to channel
|
||||||
const post = openticket.posts.get("openticket:transcripts")
|
const post = opendiscord.posts.get("opendiscord:transcripts")
|
||||||
if (post){
|
if (post){
|
||||||
instance.pendingMessage = await post.send(result.pendingMessage)
|
instance.pendingMessage = await post.send(result.pendingMessage)
|
||||||
}
|
}
|
||||||
@@ -49,7 +51,9 @@ export const registerActions = async () => {
|
|||||||
instance.pendingMessage = null
|
instance.pendingMessage = null
|
||||||
instance.errorReason = result.errorReason
|
instance.errorReason = result.errorReason
|
||||||
throw new api.ODSystemError("ODAction(ot:create-transcript) => Known Init Error => "+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){
|
}catch(err){
|
||||||
instance.success = false
|
instance.success = false
|
||||||
cancel()
|
cancel()
|
||||||
@@ -57,9 +61,9 @@ export const registerActions = async () => {
|
|||||||
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler init()! (see error above)")
|
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler init()! (see error above)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await openticket.events.get("afterTranscriptInitiated").emit([openticket.transcripts,ticket,channel,user])
|
await opendiscord.events.get("afterTranscriptInitiated").emit([opendiscord.transcripts,ticket,channel,user])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:compile-transcript",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:compile-transcript",2,async (instance,params,source,cancel) => {
|
||||||
const {channel,user,ticket} = params
|
const {channel,user,ticket} = params
|
||||||
if (channel.type != discord.ChannelType.GuildText) return cancel()
|
if (channel.type != discord.ChannelType.GuildText) return cancel()
|
||||||
if (!instance.compiler){
|
if (!instance.compiler){
|
||||||
@@ -69,10 +73,10 @@ export const registerActions = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//run transcript compiler compile()
|
//run transcript compiler compile()
|
||||||
await openticket.events.get("onTranscriptCompile").emit([openticket.transcripts,ticket,channel,user])
|
await opendiscord.events.get("onTranscriptCompile").emit([opendiscord.transcripts,ticket,channel,user])
|
||||||
if (instance.compiler.compile){
|
if (instance.compiler.compile){
|
||||||
try{
|
try{
|
||||||
const result = await instance.compiler.compile(ticket,channel,user)
|
const result = await instance.compiler.compile(ticket,channel,user,instance.initData)
|
||||||
if (!result.success){
|
if (!result.success){
|
||||||
instance.errorReason = result.errorReason
|
instance.errorReason = result.errorReason
|
||||||
throw new api.ODSystemError("ODAction(ot:create-transcript) => Known Compiler Error => "+result.errorReason)
|
throw new api.ODSystemError("ODAction(ot:create-transcript) => Known Compiler Error => "+result.errorReason)
|
||||||
@@ -87,9 +91,9 @@ export const registerActions = async () => {
|
|||||||
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler compile()! (see error above)")
|
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler compile()! (see error above)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await openticket.events.get("afterTranscriptCompiled").emit([openticket.transcripts,ticket,channel,user])
|
await opendiscord.events.get("afterTranscriptCompiled").emit([opendiscord.transcripts,ticket,channel,user])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:ready-transcript",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:ready-transcript",1,async (instance,params,source,cancel) => {
|
||||||
if (!instance.result){
|
if (!instance.result){
|
||||||
instance.success = false
|
instance.success = false
|
||||||
cancel()
|
cancel()
|
||||||
@@ -98,7 +102,7 @@ export const registerActions = async () => {
|
|||||||
|
|
||||||
//run transcript compiler ready()
|
//run transcript compiler ready()
|
||||||
utilities.runAsync(async () => {
|
utilities.runAsync(async () => {
|
||||||
await openticket.events.get("onTranscriptReady").emit([openticket.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
|
await opendiscord.events.get("onTranscriptReady").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
|
||||||
if (instance.compiler.ready){
|
if (instance.compiler.ready){
|
||||||
try{
|
try{
|
||||||
const {channelMessage,creatorDmMessage,participantDmMessage,activeAdminDmMessage,everyAdminDmMessage} = await instance.compiler.ready(instance.result)
|
const {channelMessage,creatorDmMessage,participantDmMessage,activeAdminDmMessage,everyAdminDmMessage} = await instance.compiler.ready(instance.result)
|
||||||
@@ -110,7 +114,7 @@ export const registerActions = async () => {
|
|||||||
instance.pendingMessage.message.edit(channelMessage.message)
|
instance.pendingMessage.message.edit(channelMessage.message)
|
||||||
}else{
|
}else{
|
||||||
//send ready message to channel
|
//send ready message to channel
|
||||||
const post = openticket.posts.get("openticket:transcripts")
|
const post = opendiscord.posts.get("opendiscord:transcripts")
|
||||||
if (post) await post.send(channelMessage)
|
if (post) await post.send(channelMessage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,16 +124,16 @@ export const registerActions = async () => {
|
|||||||
for (const p of instance.participants){
|
for (const p of instance.participants){
|
||||||
if (p.role == "creator" && transcriptConfig.data.general.enableCreatorDM && creatorDmMessage){
|
if (p.role == "creator" && transcriptConfig.data.general.enableCreatorDM && creatorDmMessage){
|
||||||
//send creator dm message
|
//send creator dm message
|
||||||
await openticket.client.sendUserDm(p.user,creatorDmMessage)
|
await opendiscord.client.sendUserDm(p.user,creatorDmMessage)
|
||||||
}else if (p.role == "participant" && transcriptConfig.data.general.enableParticipantDM && participantDmMessage){
|
}else if (p.role == "participant" && transcriptConfig.data.general.enableParticipantDM && participantDmMessage){
|
||||||
//send participant dm message
|
//send participant dm message
|
||||||
await openticket.client.sendUserDm(p.user,participantDmMessage)
|
await opendiscord.client.sendUserDm(p.user,participantDmMessage)
|
||||||
}else if (p.role == "admin" && transcriptConfig.data.general.enableActiveAdminDM && instance.result.success && instance.result.messages && instance.result.messages.some((msg) => msg.author.id == p.user.id) && activeAdminDmMessage){
|
}else if (p.role == "admin" && transcriptConfig.data.general.enableActiveAdminDM && instance.result.success && instance.result.messages && instance.result.messages.some((msg) => msg.author.id == p.user.id) && activeAdminDmMessage){
|
||||||
//send active admin dm message
|
//send active admin dm message
|
||||||
await openticket.client.sendUserDm(p.user,activeAdminDmMessage)
|
await opendiscord.client.sendUserDm(p.user,activeAdminDmMessage)
|
||||||
}else if (p.role == "admin" && transcriptConfig.data.general.enableEveryAdminDM && everyAdminDmMessage){
|
}else if (p.role == "admin" && transcriptConfig.data.general.enableEveryAdminDM && everyAdminDmMessage){
|
||||||
//send every admin dm message
|
//send every admin dm message
|
||||||
await openticket.client.sendUserDm(p.user,everyAdminDmMessage)
|
await opendiscord.client.sendUserDm(p.user,everyAdminDmMessage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -141,17 +145,17 @@ export const registerActions = async () => {
|
|||||||
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler ready()! (see error above)")
|
throw new api.ODSystemError("ODAction(ot:create-transcript) => Failed transcript compiler ready()! (see error above)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await openticket.events.get("afterTranscriptReady").emit([openticket.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
|
await opendiscord.events.get("afterTranscriptReady").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
|
||||||
})
|
})
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await openticket.stats.get("openticket:global").setStat("openticket:transcripts-created",1,"increase")
|
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:transcripts-created",1,"increase")
|
||||||
await openticket.stats.get("openticket:user").setStat("openticket:transcripts-created",params.user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:transcripts-created",params.user.id,1,"increase")
|
||||||
await openticket.events.get("afterTranscriptCreated").emit([openticket.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
|
await opendiscord.events.get("afterTranscriptCreated").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {user,channel,ticket} = params
|
const {user,channel,ticket} = params
|
||||||
openticket.log(user.displayName+" created a transcript!","info",[
|
opendiscord.log(user.displayName+" created a transcript!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
|
|||||||
+222
-141
@@ -1,55 +1,56 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET DELETION SYSTEM
|
//TICKET DELETION SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
const lang = opendiscord.languages
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:delete-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:delete-ticket"))
|
||||||
openticket.actions.get("openticket:delete-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:delete-ticket").workers.add([
|
||||||
new api.ODWorker("openticket:delete-ticket",3,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket",3,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
if (channel.isThread()) throw new api.ODSystemError("Unable to delete ticket! Open Ticket doesn't support threads!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to delete ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
await openticket.events.get("onTicketDelete").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("onTicketDelete").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update ticket
|
//update ticket
|
||||||
ticket.get("openticket:for-deletion").value = true
|
ticket.get("opendiscord:for-deletion").value = true
|
||||||
ticket.get("openticket:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on ticket deletion!","error",[
|
opendiscord.log("Unable to edit ticket message on ticket deletion!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"messageid",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:delete-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build(source,{guild,channel,user,ticket,reason})).message)
|
||||||
|
|
||||||
//create transcript
|
//create transcript
|
||||||
if (!params.withoutTranscript){
|
if (!params.withoutTranscript){
|
||||||
const transcriptRes = await openticket.actions.get("openticket:create-transcript").run(source,{guild,channel,user,ticket})
|
const transcriptRes = await opendiscord.actions.get("opendiscord:create-transcript").run(source,{guild,channel,user,ticket})
|
||||||
//transcript failure
|
//transcript failure
|
||||||
if (typeof transcriptRes.success == "boolean" && !transcriptRes.success && transcriptRes.compiler){
|
if (typeof transcriptRes.success == "boolean" && !transcriptRes.success && transcriptRes.compiler){
|
||||||
const {compiler} = transcriptRes
|
const {compiler} = transcriptRes
|
||||||
await channel.send((await openticket.builders.messages.getSafe("openticket:transcript-error").build(source,{guild,channel,user,ticket,compiler,reason:transcriptRes.errorReason ?? null})).message)
|
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:transcript-error").build(source,{guild,channel,user,ticket,compiler,reason:transcriptRes.errorReason ?? null})).message)
|
||||||
.catch((reason) => openticket.log("Unable to send transcript failure to ticket channel!","error",[{key:"id",value:channel.id}]))
|
.catch((reason) => opendiscord.log("Unable to send transcript failure to ticket channel!","error",[{key:"id",value:channel.id}]))
|
||||||
|
|
||||||
//undo deletion
|
//undo deletion
|
||||||
ticket.get("openticket:for-deletion").value = false
|
ticket.get("opendiscord:for-deletion").value = false
|
||||||
ticket.get("openticket:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
openticket.log("Canceled ticket deletion because of transcript system malfunction!","warning",[
|
opendiscord.log("Canceled ticket deletion because of transcript system malfunction!","warning",[
|
||||||
{key:"compiler",value:compiler.id.value},
|
{key:"compiler",value:compiler.id.value},
|
||||||
{key:"reason",value:transcriptRes.errorReason ?? "/"},
|
{key:"reason",value:transcriptRes.errorReason ?? "/"},
|
||||||
])
|
])
|
||||||
@@ -58,45 +59,45 @@ export const registerActions = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await openticket.stats.get("openticket:global").setStat("openticket:tickets-deleted",1,"increase")
|
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-deleted",1,"increase")
|
||||||
await openticket.stats.get("openticket:user").setStat("openticket:tickets-deleted",user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-deleted",user.id,1,"increase")
|
||||||
|
|
||||||
//delete ticket from manager
|
//delete ticket from manager
|
||||||
openticket.tickets.remove(ticket.id)
|
opendiscord.tickets.remove(ticket.id)
|
||||||
|
|
||||||
//delete permissions from manager
|
//delete permissions from manager
|
||||||
await (await import("../data/framework/permissionLoader.js")).removeTicketPermissions(ticket)
|
await (await import("../data/framework/permissionLoader.js")).removeTicketPermissions(ticket)
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:discord-logs",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",2,async (instance,params,source,cancel) => {
|
||||||
//logs before channel deletion => channel might still be used in log embeds
|
//logs before channel deletion => channel might still be used in log embeds
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.deleting.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.deleting.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await openticket.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.deleting.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
|
if (creator && generalConfig.data.system.messages.deleting.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:delete-channel",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-channel",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
//delete channel & events
|
//delete channel & events
|
||||||
await openticket.events.get("onTicketChannelDeletion").emit([ticket,channel,user])
|
await opendiscord.events.get("onTicketChannelDeletion").emit([ticket,channel,user])
|
||||||
await channel.delete("Ticket Deleted").catch((reason) => openticket.log("Unable to delete ticket channel!","error",[{key:"id",value:channel.id}]))
|
await channel.delete("Ticket Deleted").catch((reason) => opendiscord.log("Unable to delete ticket channel!","error",[{key:"id",value:channel.id}]))
|
||||||
await openticket.events.get("afterTicketChannelDeleted").emit([ticket,user])
|
await opendiscord.events.get("afterTicketChannelDeleted").emit([ticket,user])
|
||||||
|
|
||||||
//delete permissions from manager
|
//delete permissions from manager
|
||||||
await (await import("../data/framework/permissionLoader.js")).removeTicketPermissions(ticket)
|
await (await import("../data/framework/permissionLoader.js")).removeTicketPermissions(ticket)
|
||||||
|
|
||||||
await openticket.events.get("afterTicketDeleted").emit([ticket,user,reason])
|
await opendiscord.events.get("afterTicketDeleted").emit([ticket,user,reason])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
openticket.log(user.displayName+" deleted a ticket!","info",[
|
opendiscord.log(user.displayName+" deleted a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -107,360 +108,440 @@ export const registerActions = async () => {
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.actions.get("openticket:delete-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
|
opendiscord.actions.get("opendiscord:delete-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
||||||
//set busy to false in case of crash or cancel
|
//set busy to false in case of crash or cancel
|
||||||
params.ticket.get("openticket:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
params.ticket.get("openticket:for-deletion").value = false
|
params.ticket.get("opendiscord:for-deletion").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
export const registerVerifyBars = async () => {
|
||||||
//DELETE TICKET TICKET MESSAGE
|
//DELETE TICKET TICKET MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:delete-ticket-ticket-message").success.add([
|
opendiscord.verifybars.get("opendiscord:delete-ticket-ticket-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.delete
|
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"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
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
|
//start deleting ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//delete with reason
|
//delete with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:delete-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//delete without reason
|
//delete without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
//don't await DELETE action => else it will update the message after the channel has been deleted
|
||||||
openticket.actions.get("openticket:delete-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true,withoutTranscript:(params.data == "no-transcript")})
|
opendiscord.actions.get("opendiscord:delete-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true,withoutTranscript:(params.data == "no-transcript")})
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
||||||
ticket.get("openticket:for-deletion").value = true
|
ticket.get("opendiscord:for-deletion").value = true
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:delete-ticket-ticket-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:delete-ticket-ticket-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|
||||||
//DELETE TICKET CLOSE MESSAGE
|
//DELETE TICKET CLOSE MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-close-message",openticket.builders.messages.getSafe("openticket:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-close-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:delete-ticket-close-message").success.add([
|
opendiscord.verifybars.get("opendiscord:delete-ticket-close-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.delete
|
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"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
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
|
//start deleting ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//delete with reason
|
//delete with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:delete-ticket-reason").build("close-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("close-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//delete without reason
|
//delete without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
//don't await DELETE action => else it will update the message after the channel has been deleted
|
||||||
openticket.actions.get("openticket:delete-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
|
opendiscord.actions.get("opendiscord:delete-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
||||||
ticket.get("openticket:for-deletion").value = true
|
ticket.get("opendiscord:for-deletion").value = true
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("close-message",{guild,channel,user,ticket,reason:null}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("close-message",{guild,channel,user,ticket,reason:null}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:delete-ticket-close-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:delete-ticket-close-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-close-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-close-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const {verifybarMessage} = params
|
const {verifybarMessage} = params
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:close-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:close-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|
||||||
//DELETE TICKET REOPEN MESSAGE
|
//DELETE TICKET REOPEN MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-reopen-message",openticket.builders.messages.getSafe("openticket:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-reopen-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:delete-ticket-reopen-message").success.add([
|
opendiscord.verifybars.get("opendiscord:delete-ticket-reopen-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.delete
|
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"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
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
|
//start deleting ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//delete with reason
|
//delete with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:delete-ticket-reason").build("reopen-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("reopen-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//delete without reason
|
//delete without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
//don't await DELETE action => else it will update the message after the channel has been deleted
|
||||||
openticket.actions.get("openticket:delete-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
|
opendiscord.actions.get("opendiscord:delete-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
||||||
ticket.get("openticket:for-deletion").value = true
|
ticket.get("opendiscord:for-deletion").value = true
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("reopen-message",{guild,channel,user,ticket,reason:null}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("reopen-message",{guild,channel,user,ticket,reason:null}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:delete-ticket-reopen-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:delete-ticket-reopen-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-reopen-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-reopen-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const {verifybarMessage} = params
|
const {verifybarMessage} = params
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:reopen-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|
||||||
//DELETE TICKET AUTOCLOSE MESSAGE
|
//DELETE TICKET AUTOCLOSE MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:delete-ticket-autoclose-message",openticket.builders.messages.getSafe("openticket:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-autoclose-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:delete-ticket-autoclose-message").success.add([
|
opendiscord.verifybars.get("opendiscord:delete-ticket-autoclose-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.delete
|
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"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
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
|
//start deleting ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//delete with reason
|
//delete with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:delete-ticket-reason").build("autoclose-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("autoclose-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//delete without reason
|
//delete without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
//don't await DELETE action => else it will update the message after the channel has been deleted
|
||||||
openticket.actions.get("openticket:delete-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
|
opendiscord.actions.get("opendiscord:delete-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
||||||
ticket.get("openticket:for-deletion").value = true
|
ticket.get("opendiscord:for-deletion").value = true
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("autoclose-message",{guild,channel,user,ticket,reason:null}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("autoclose-message",{guild,channel,user,ticket,reason:null}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:delete-ticket-autoclose-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:delete-ticket-autoclose-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-autoclose-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-autoclose-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const {verifybarMessage} = params
|
const {verifybarMessage} = params
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:autoclose-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:autoclose-message").build("other",{guild,channel,user,ticket}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
@@ -1,80 +1,79 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TRANSCRIPT ERROR SYSTEM
|
//TRANSCRIPT ERROR SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerButtonResponders = async () => {
|
export const registerButtonResponders = async () => {
|
||||||
//TRANSCRIPT ERROR RETRY
|
//TRANSCRIPT ERROR RETRY
|
||||||
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:transcript-error-retry",/^od:transcript-error-retry_([^_]+)/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:transcript-error-retry",/^od:transcript-error-retry_([^_]+)/))
|
||||||
openticket.responders.buttons.get("openticket:transcript-error-retry").workers.add([
|
opendiscord.responders.buttons.get("opendiscord:transcript-error-retry").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.delete
|
const permissionMode = generalConfig.data.system.permissions.delete
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const originalSource = instance.interaction.customId.split("_")[1]
|
const originalSource = instance.interaction.customId.split("_")[1] as api.ODActionManagerIds_Default["opendiscord:delete-ticket"]["source"]
|
||||||
if (originalSource != "slash" && originalSource != "text" && originalSource != "ticket-message" && originalSource != "reopen-message" && originalSource != "close-message" && originalSource != "other") return
|
|
||||||
|
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start deleting ticket (without reason)
|
//start deleting ticket (without reason)
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
//don't await DELETE action => else it will update the message after the channel has been deleted
|
||||||
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Retried)",sendMessage:false,withoutTranscript:false})
|
opendiscord.actions.get("opendiscord:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Retried)",sendMessage:false,withoutTranscript:false})
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
||||||
ticket.get("openticket:for-deletion").value = true
|
ticket.get("opendiscord:for-deletion").value = true
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Retried)"}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Retried)"}))
|
||||||
|
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,async (instance,params,source,cancel) => {
|
||||||
const {user,channel} = instance
|
const {user,channel} = instance
|
||||||
if (channel.isDMBased()) return
|
if (channel.isDMBased()) return
|
||||||
openticket.log(user.displayName+" retried deleting a ticket with transcript!","info",[
|
opendiscord.log(user.displayName+" retried deleting a ticket with transcript!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -85,74 +84,73 @@ export const registerButtonResponders = async () => {
|
|||||||
])
|
])
|
||||||
|
|
||||||
//TRANSCRIPT ERROR CONTINUE
|
//TRANSCRIPT ERROR CONTINUE
|
||||||
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:transcript-error-continue",/^od:transcript-error-continue_([^_]+)/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:transcript-error-continue",/^od:transcript-error-continue_([^_]+)/))
|
||||||
openticket.responders.buttons.get("openticket:transcript-error-continue").workers.add([
|
opendiscord.responders.buttons.get("opendiscord:transcript-error-continue").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.delete
|
const permissionMode = generalConfig.data.system.permissions.delete
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const originalSource = instance.interaction.customId.split("_")[1]
|
const originalSource = instance.interaction.customId.split("_")[1] as api.ODActionManagerIds_Default["opendiscord:delete-ticket"]["source"]
|
||||||
if (originalSource != "slash" && originalSource != "text" && originalSource != "ticket-message" && originalSource != "reopen-message" && originalSource != "close-message" && originalSource != "other") return
|
|
||||||
|
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start deleting ticket (without reason)
|
//start deleting ticket (without reason)
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
//don't await DELETE action => else it will update the message after the channel has been deleted
|
||||||
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Continued)",sendMessage:false,withoutTranscript:true})
|
opendiscord.actions.get("opendiscord:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Continued)",sendMessage:false,withoutTranscript:true})
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
||||||
ticket.get("openticket:for-deletion").value = true
|
ticket.get("opendiscord:for-deletion").value = true
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Continued)"}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Continued)"}))
|
||||||
|
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,async (instance,params,source,cancel) => {
|
||||||
const {user,channel} = instance
|
const {user,channel} = instance
|
||||||
if (channel.isDMBased()) return
|
if (channel.isDMBased()) return
|
||||||
openticket.log(user.displayName+" continued deleting a ticket without transcript!","info",[
|
opendiscord.log(user.displayName+" continued deleting a ticket without transcript!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
|
|||||||
@@ -1,30 +1,30 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//VERIFYBAR SYSTEM
|
//VERIFYBAR SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
|
|
||||||
export const registerButtonResponders = async () => {
|
export const registerButtonResponders = async () => {
|
||||||
//VERIFYBAR SUCCESS
|
//VERIFYBAR SUCCESS
|
||||||
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:verifybar-success",/^od:verifybar-success_([^_]+)/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:verifybar-success",/^od:verifybar-success_([^_]+)/))
|
||||||
openticket.responders.buttons.get("openticket:verifybar-success").workers.add(
|
opendiscord.responders.buttons.get("opendiscord:verifybar-success").workers.add(
|
||||||
new api.ODWorker("openticket:handle-verifybar",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:handle-verifybar",0,async (instance,params,source,cancel) => {
|
||||||
const id = instance.interaction.customId.split("_")[1]
|
const id = instance.interaction.customId.split("_")[1]
|
||||||
const customData = instance.interaction.customId.split("_")[2] as string|undefined
|
const customData = instance.interaction.customId.split("_")[2] as string|undefined
|
||||||
|
|
||||||
const verifybar = openticket.verifybars.get(id)
|
const verifybar = opendiscord.verifybars.get(id)
|
||||||
if (!verifybar) return
|
if (!verifybar) return
|
||||||
if (verifybar.success) await verifybar.success.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message})
|
if (verifybar.success) await verifybar.success.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message})
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
//VERIFYBAR FAILURE
|
//VERIFYBAR FAILURE
|
||||||
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:verifybar-failure",/^od:verifybar-failure_([^_]+)/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:verifybar-failure",/^od:verifybar-failure_([^_]+)/))
|
||||||
openticket.responders.buttons.get("openticket:verifybar-failure").workers.add(
|
opendiscord.responders.buttons.get("opendiscord:verifybar-failure").workers.add(
|
||||||
new api.ODWorker("openticket:handle-verifybar",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:handle-verifybar",0,async (instance,params,source,cancel) => {
|
||||||
const id = instance.interaction.customId.split("_")[1]
|
const id = instance.interaction.customId.split("_")[1]
|
||||||
const customData = instance.interaction.customId.split("_")[2] as string|undefined
|
const customData = instance.interaction.customId.split("_")[2] as string|undefined
|
||||||
|
|
||||||
const verifybar = openticket.verifybars.get(id)
|
const verifybar = opendiscord.verifybars.get(id)
|
||||||
if (!verifybar) return
|
if (!verifybar) return
|
||||||
if (verifybar.failure) await verifybar.failure.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message})
|
if (verifybar.failure) await verifybar.failure.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message})
|
||||||
})
|
})
|
||||||
|
|||||||
+58
-55
@@ -1,35 +1,34 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET MOVING SYSTEM
|
//TICKET MOVING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:move-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:move-ticket"))
|
||||||
openticket.actions.get("openticket:move-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:move-ticket").workers.add([
|
||||||
new api.ODWorker("openticket:move-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:move-ticket",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason,data} = params
|
const {guild,channel,user,ticket,reason,data} = params
|
||||||
if (channel.isThread()) throw new api.ODSystemError("Unable to move ticket! Open Ticket doesn't support threads!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to move ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
await openticket.events.get("onTicketMove").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("onTicketMove").emit([ticket,user,channel,reason])
|
||||||
ticket.option = data
|
ticket.option = data
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await openticket.stats.get("openticket:global").setStat("openticket:tickets-moved",1,"increase")
|
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-moved",1,"increase")
|
||||||
await openticket.stats.get("openticket:user").setStat("openticket:tickets-moved",user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-moved",user.id,1,"increase")
|
||||||
|
|
||||||
//get new channel properties
|
//get new channel properties
|
||||||
const channelPrefix = ticket.option.get("openticket:channel-prefix").value
|
const channelPrefix = ticket.option.get("opendiscord:channel-prefix").value
|
||||||
const channelSuffix = ticket.get("openticket:channel-suffix").value
|
const channelSuffix = ticket.get("opendiscord:channel-suffix").value
|
||||||
const channelCategory = ticket.option.get("openticket:channel-category").value
|
const channelCategory = ticket.option.get("opendiscord:channel-category").value
|
||||||
const channelBackupCategory = ticket.option.get("openticket:channel-category-backup").value
|
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
|
||||||
const rawClaimCategory = ticket.option.get("openticket:channel-categories-claimed").value.find((c) => c.user == user.id)
|
const rawClaimCategory = ticket.option.get("opendiscord:channel-categories-claimed").value.find((c) => c.user == user.id)
|
||||||
const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null
|
const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null
|
||||||
const closeCategory = ticket.option.get("openticket:channel-category-closed").value
|
const closeCategory = ticket.option.get("opendiscord:channel-category-closed").value
|
||||||
const channelDescription = ticket.option.get("openticket:channel-description").value
|
const channelTopic = ticket.option.get("opendiscord:channel-topic").value
|
||||||
const channelName = channelPrefix+channelSuffix
|
|
||||||
|
|
||||||
//handle category
|
//handle category
|
||||||
let category: string|null = null
|
let category: string|null = null
|
||||||
@@ -38,16 +37,16 @@ export const registerActions = async () => {
|
|||||||
//use claim category
|
//use claim category
|
||||||
category = claimCategory
|
category = claimCategory
|
||||||
categoryMode = "claimed"
|
categoryMode = "claimed"
|
||||||
}else if (closeCategory != "" && ticket.get("openticket:closed").value){
|
}else if (closeCategory != "" && ticket.get("opendiscord:closed").value){
|
||||||
//use close category
|
//use close category
|
||||||
category = closeCategory
|
category = closeCategory
|
||||||
categoryMode = "closed"
|
categoryMode = "closed"
|
||||||
}else if (channelCategory != ""){
|
}else if (channelCategory != ""){
|
||||||
//category enabled
|
//category enabled
|
||||||
const normalCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelCategory)
|
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
||||||
if (!normalCategory){
|
if (!normalCategory){
|
||||||
//default category was not found
|
//default category was not found
|
||||||
openticket.log("Ticket Move Error: Unable to find category! #1","error",[
|
opendiscord.log("Ticket Move Error: Unable to find category! #1","error",[
|
||||||
{key:"categoryid",value:channelCategory},
|
{key:"categoryid",value:channelCategory},
|
||||||
{key:"backup",value:"false"}
|
{key:"backup",value:"false"}
|
||||||
])
|
])
|
||||||
@@ -55,10 +54,10 @@ export const registerActions = async () => {
|
|||||||
//default category was found
|
//default category was found
|
||||||
if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){
|
if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){
|
||||||
//use backup category
|
//use backup category
|
||||||
const backupCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
||||||
if (!backupCategory){
|
if (!backupCategory){
|
||||||
//default category was not found
|
//default category was not found
|
||||||
openticket.log("Ticket Move Error: Unable to find category! #2","error",[
|
opendiscord.log("Ticket Move Error: Unable to find category! #2","error",[
|
||||||
{key:"categoryid",value:channelBackupCategory},
|
{key:"categoryid",value:channelBackupCategory},
|
||||||
{key:"backup",value:"true"}
|
{key:"backup",value:"true"}
|
||||||
])
|
])
|
||||||
@@ -77,17 +76,17 @@ export const registerActions = async () => {
|
|||||||
try {
|
try {
|
||||||
//only move category when not the same.
|
//only move category when not the same.
|
||||||
if (channel.parentId != category) await utilities.timedAwait(channel.setParent(category,{lockPermissions:false}),2500,(err) => {
|
if (channel.parentId != category) await utilities.timedAwait(channel.setParent(category,{lockPermissions:false}),2500,(err) => {
|
||||||
openticket.log("Failed to change channel category on ticket move","error")
|
opendiscord.log("Failed to change channel category on ticket move","error")
|
||||||
})
|
})
|
||||||
ticket.get("openticket:category-mode").value = categoryMode
|
ticket.get("opendiscord:category-mode").value = categoryMode
|
||||||
ticket.get("openticket:category").value = category
|
ticket.get("opendiscord:category").value = category
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to move ticket to 'moved category'!","error",[
|
opendiscord.log("Unable to move ticket to 'moved category'!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"categoryid",value:category ?? "/"}
|
{key:"categoryid",value:category ?? "/"}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
|
|
||||||
//handle permissions
|
//handle permissions
|
||||||
@@ -97,9 +96,9 @@ export const registerActions = async () => {
|
|||||||
allow:[],
|
allow:[],
|
||||||
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
|
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
|
||||||
}]
|
}]
|
||||||
const globalAdmins = openticket.configs.get("openticket:general").data.globalAdmins
|
const globalAdmins = opendiscord.configs.get("opendiscord:general").data.globalAdmins
|
||||||
const optionAdmins = ticket.option.get("openticket:admins").value
|
const optionAdmins = ticket.option.get("opendiscord:admins").value
|
||||||
const readonlyAdmins = ticket.option.get("openticket:admins-readonly").value
|
const readonlyAdmins = ticket.option.get("opendiscord:admins-readonly").value
|
||||||
|
|
||||||
globalAdmins.forEach((admin) => {
|
globalAdmins.forEach((admin) => {
|
||||||
permissions.push({
|
permissions.push({
|
||||||
@@ -129,7 +128,7 @@ export const registerActions = async () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
//transfer all old user-participants over to the new ticket (creator & participants)
|
//transfer all old user-participants over to the new ticket (creator & participants)
|
||||||
ticket.get("openticket:participants").value.forEach((p) => {
|
ticket.get("opendiscord:participants").value.forEach((p) => {
|
||||||
if (p.type == "user") permissions.push({
|
if (p.type == "user") permissions.push({
|
||||||
type:discord.OverwriteType.Member,
|
type:discord.OverwriteType.Member,
|
||||||
id:p.id,
|
id:p.id,
|
||||||
@@ -140,7 +139,7 @@ export const registerActions = async () => {
|
|||||||
try{
|
try{
|
||||||
await channel.permissionOverwrites.set(permissions)
|
await channel.permissionOverwrites.set(permissions)
|
||||||
}catch{
|
}catch{
|
||||||
openticket.log("Failed to reset channel permissions on ticket move!","error")
|
opendiscord.log("Failed to reset channel permissions on ticket move!","error")
|
||||||
}
|
}
|
||||||
|
|
||||||
//handle participants
|
//handle participants
|
||||||
@@ -151,60 +150,64 @@ export const registerActions = async () => {
|
|||||||
const id = permission.id as string
|
const id = permission.id as string
|
||||||
participants.push({type,id})
|
participants.push({type,id})
|
||||||
})
|
})
|
||||||
ticket.get("openticket:participants").value = participants
|
ticket.get("opendiscord:participants").value = participants
|
||||||
ticket.get("openticket:participants").refreshDatabase()
|
ticket.get("opendiscord:participants").refreshDatabase()
|
||||||
|
|
||||||
//rename channel (and give error when crashed)
|
//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 originalName = channel.name
|
||||||
|
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(channelPrefix+channelSuffix)
|
||||||
try{
|
try{
|
||||||
await utilities.timedAwait(channel.setName(channelName),2500,(err) => {
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
openticket.log("Failed to rename channel on ticket move","error")
|
opendiscord.log("Failed to rename channel on ticket move","error")
|
||||||
})
|
})
|
||||||
}catch(err){
|
}catch(err){
|
||||||
await channel.send((await openticket.builders.messages.getSafe("openticket: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
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.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:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"messageid",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:move-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:move-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
||||||
ticket.get("openticket:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await openticket.events.get("afterTicketMoved").emit([ticket,user,channel,reason])
|
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("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason,data} = params
|
const {guild,channel,user,ticket,reason,data} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.moving.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.moving.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await openticket.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.moving.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
|
if (creator && generalConfig.data.system.messages.moving.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
openticket.log(user.displayName+" moved a ticket!","info",[
|
opendiscord.log(user.displayName+" moved a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -214,8 +217,8 @@ export const registerActions = async () => {
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.actions.get("openticket:move-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
|
opendiscord.actions.get("opendiscord:move-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
||||||
//set busy to false in case of crash or cancel
|
//set busy to false in case of crash or cancel
|
||||||
params.ticket.get("openticket:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+91
-85
@@ -1,29 +1,29 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET PINNING SYSTEM
|
//TICKET PINNING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:pin-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:pin-ticket"))
|
||||||
openticket.actions.get("openticket:pin-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:pin-ticket").workers.add([
|
||||||
new api.ODWorker("openticket:pin-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:pin-ticket",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
if (channel.isThread()) throw new api.ODSystemError("Unable to pin ticket! Open Ticket doesn't support threads!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to pin ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
await openticket.events.get("onTicketPin").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("onTicketPin").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update ticket
|
//update ticket
|
||||||
ticket.get("openticket:pinned").value = true
|
ticket.get("opendiscord:pinned").value = true
|
||||||
ticket.get("openticket:pinned-by").value = user.id
|
ticket.get("opendiscord:pinned-by").value = user.id
|
||||||
ticket.get("openticket:pinned-on").value = new Date().getTime()
|
ticket.get("opendiscord:pinned-on").value = new Date().getTime()
|
||||||
ticket.get("openticket:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await openticket.stats.get("openticket:global").setStat("openticket:tickets-pinned",1,"increase")
|
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-pinned",1,"increase")
|
||||||
await openticket.stats.get("openticket:user").setStat("openticket:tickets-pinned",user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-pinned",user.id,1,"increase")
|
||||||
|
|
||||||
//move to top of category
|
//move to top of category
|
||||||
if (channel.parent){
|
if (channel.parent){
|
||||||
@@ -31,54 +31,60 @@ export const registerActions = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//rename channel (and give error when crashed)
|
//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 originalName = channel.name
|
||||||
const newName = "📌"+channel.name
|
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(channel.name)
|
||||||
try{
|
try{
|
||||||
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
openticket.log("Failed to rename channel on ticket pin","error")
|
opendiscord.log("Failed to rename channel on ticket pin","error")
|
||||||
})
|
})
|
||||||
}catch(err){
|
}catch(err){
|
||||||
await channel.send((await openticket.builders.messages.getSafe("openticket:error-channel-rename").build("ticket-pin",{guild,channel,user,originalName,newName})).message)
|
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-pin",{guild,channel,user,originalName,newName})).message)
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on ticket pinning!","error",[
|
opendiscord.log("Unable to edit ticket message on ticket pinning!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"message",value:ticketMessage.id},
|
{key:"message",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:pin-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:pin-message").build(source,{guild,channel,user,ticket,reason})).message)
|
||||||
ticket.get("openticket:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await openticket.events.get("afterTicketPinned").emit([ticket,user,channel,reason])
|
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("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.pinning.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.pinning.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await openticket.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.pinning.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
|
if (creator && generalConfig.data.system.messages.pinning.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
openticket.log(user.displayName+" pinned a ticket!","info",[
|
opendiscord.log(user.displayName+" pinned a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -92,184 +98,184 @@ export const registerActions = async () => {
|
|||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
export const registerVerifyBars = async () => {
|
||||||
//PIN TICKET TICKET MESSAGE
|
//PIN TICKET TICKET MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:pin-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:pin-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:pin-ticket-ticket-message").success.add([
|
opendiscord.verifybars.get("opendiscord:pin-ticket-ticket-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.pin
|
const permissionMode = generalConfig.data.system.permissions.pin
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:pin-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:pin-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when already pinned
|
//return when already pinned
|
||||||
if (ticket.get("openticket:pinned").value){
|
if (ticket.get("opendiscord:pinned").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start pinning ticket
|
//start pinning ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//pin with reason
|
//pin with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:pin-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:pin-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//pin without reason
|
//pin without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:pin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
await opendiscord.actions.get("opendiscord:pin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:pin-ticket-ticket-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:pin-ticket-ticket-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|
||||||
//PIN TICKET UNPIN MESSAGE
|
//PIN TICKET UNPIN MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:pin-ticket-unpin-message",openticket.builders.messages.getSafe("openticket:verifybar-unpin-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:pin-ticket-unpin-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-unpin-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:pin-ticket-unpin-message").success.add([
|
opendiscord.verifybars.get("opendiscord:pin-ticket-unpin-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.pin
|
const permissionMode = generalConfig.data.system.permissions.pin
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:pin-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:pin-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when already pinned
|
//return when already pinned
|
||||||
if (ticket.get("openticket:pinned").value){
|
if (ticket.get("opendiscord:pinned").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start pinning ticket
|
//start pinning ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//pin with reason
|
//pin with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:pin-ticket-reason").build("unpin-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:pin-ticket-reason").build("unpin-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//pin without reason
|
//pin without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:pin-ticket").run("unpin-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
await opendiscord.actions.get("opendiscord:pin-ticket").run("unpin-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:pin-message").build("unpin-message",{guild,channel,user,ticket,reason:null}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:pin-message").build("unpin-message",{guild,channel,user,ticket,reason:null}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:pin-ticket-unpin-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:pin-ticket-unpin-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-unpin-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-unpin-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const {verifybarMessage} = params
|
const {verifybarMessage} = params
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:unpin-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unpin-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.actions.get("openticket:pin-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
|
opendiscord.actions.get("opendiscord:pin-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
||||||
//set busy to false in case of crash or cancel
|
//set busy to false in case of crash or cancel
|
||||||
params.ticket.get("openticket:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+32
-17
@@ -1,32 +1,34 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//REACTION ROLE SYSTEM
|
//REACTION ROLE SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:reaction-role"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:reaction-role"))
|
||||||
openticket.actions.get("openticket:reaction-role").workers.add([
|
opendiscord.actions.get("opendiscord:reaction-role").workers.add([
|
||||||
new api.ODWorker("openticket:reaction-role",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:reaction-role",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,user,option,overwriteMode} = params
|
const {guild,user,option,overwriteMode} = params
|
||||||
const role = openticket.roles.get(option.id)
|
const role = opendiscord.roles.get(option.id)
|
||||||
if (!role) throw new api.ODSystemError("ODAction(ot:reaction-role) => Unknown reaction role (ODRole)")
|
if (!role) throw new api.ODSystemError("ODAction(ot:reaction-role) => Unknown reaction role (ODRole)")
|
||||||
instance.role = role
|
instance.role = role
|
||||||
const mode = (overwriteMode) ? overwriteMode : role.get("openticket:mode").value
|
const mode = (overwriteMode) ? overwriteMode : role.get("opendiscord:mode").value
|
||||||
|
|
||||||
await openticket.events.get("onRoleUpdate").emit([user,role])
|
await opendiscord.events.get("onRoleUpdate").emit([user,role])
|
||||||
|
|
||||||
//get guild member
|
//get guild member
|
||||||
const member = await openticket.client.fetchGuildMember(guild,user.id)
|
const member = await opendiscord.client.fetchGuildMember(guild,user.id)
|
||||||
if (!member) throw new api.ODSystemError("ODAction(ot:reaction-role) => User isn't a member of the server!")
|
if (!member) throw new api.ODSystemError("ODAction(ot:reaction-role) => User isn't a member of the server!")
|
||||||
|
|
||||||
//get all roles
|
//get all roles
|
||||||
const roleIds = role.get("openticket:roles").value
|
const roleIds = role.get("opendiscord:roles").value
|
||||||
const roles: discord.Role[] = []
|
const roles: discord.Role[] = []
|
||||||
for (const id of roleIds){
|
for (const id of roleIds){
|
||||||
const r = await openticket.client.fetchGuildRole(guild,id)
|
const r = await opendiscord.client.fetchGuildRole(guild,id)
|
||||||
if (r) roles.push(r)
|
if (r) roles.push(r)
|
||||||
else openticket.log("Unable to find role in server!","warning",[
|
else opendiscord.log("Unable to find role in server!","warning",[
|
||||||
{key:"roleid",value:id}
|
{key:"roleid",value:id}
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
@@ -55,12 +57,12 @@ export const registerActions = async () => {
|
|||||||
//get roles to remove on add
|
//get roles to remove on add
|
||||||
if (result.find((r) => r.action == "added")){
|
if (result.find((r) => r.action == "added")){
|
||||||
//get all remove roles
|
//get all remove roles
|
||||||
const removeRoleIds = role.get("openticket:remove-roles-on-add").value
|
const removeRoleIds = role.get("opendiscord:remove-roles-on-add").value
|
||||||
const removeRoles: discord.Role[] = []
|
const removeRoles: discord.Role[] = []
|
||||||
for (const id of removeRoleIds){
|
for (const id of removeRoleIds){
|
||||||
const r = await openticket.client.fetchGuildRole(guild,id)
|
const r = await opendiscord.client.fetchGuildRole(guild,id)
|
||||||
if (r) removeRoles.push(r)
|
if (r) removeRoles.push(r)
|
||||||
else openticket.log("Unable to find role in server!","warning",[
|
else opendiscord.log("Unable to find role in server!","warning",[
|
||||||
{key:"roleid",value:id}
|
{key:"roleid",value:id}
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
@@ -79,11 +81,24 @@ export const registerActions = async () => {
|
|||||||
|
|
||||||
//update instance & finish event
|
//update instance & finish event
|
||||||
instance.result = result
|
instance.result = result
|
||||||
await openticket.events.get("afterRolesUpdated").emit([user,role])
|
await opendiscord.events.get("afterRolesUpdated").emit([user,role])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
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
|
const {guild,user,option} = params
|
||||||
openticket.log(user.displayName+" updated his roles!","info",[
|
opendiscord.log(user.displayName+" updated his roles!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"method",value:source},
|
{key:"method",value:source},
|
||||||
|
|||||||
@@ -1,71 +1,74 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET REMOVE USER SYSTEM
|
//TICKET REMOVE USER SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:remove-ticket-user"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:remove-ticket-user"))
|
||||||
openticket.actions.get("openticket:remove-ticket-user").workers.add([
|
opendiscord.actions.get("opendiscord:remove-ticket-user").workers.add([
|
||||||
new api.ODWorker("openticket:remove-ticket-user",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:remove-ticket-user",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason,data} = params
|
const {guild,channel,user,ticket,reason,data} = params
|
||||||
if (channel.isThread()) throw new api.ODSystemError("Unable to remove user from ticket! Open Ticket doesn't support threads!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to remove user from ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
await openticket.events.get("onTicketUserRemove").emit([ticket,user,data,channel,reason])
|
await opendiscord.events.get("onTicketUserRemove").emit([ticket,user,data,channel,reason])
|
||||||
|
|
||||||
//update ticket
|
//update ticket
|
||||||
const index = ticket.get("openticket:participants").value.findIndex((p) => p.type == "user" && p.id == data.id)
|
const index = ticket.get("opendiscord:participants").value.findIndex((p) => p.type == "user" && p.id == data.id)
|
||||||
if (index < 0) return cancel()
|
if (index < 0) return cancel()
|
||||||
ticket.get("openticket:participants").value.splice(index,1)
|
ticket.get("opendiscord:participants").value.splice(index,1)
|
||||||
ticket.get("openticket:participants").refreshDatabase()
|
ticket.get("opendiscord:participants").refreshDatabase()
|
||||||
ticket.get("openticket:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update channel permissions
|
//update channel permissions
|
||||||
try{
|
try{
|
||||||
await channel.permissionOverwrites.delete(data)
|
await channel.permissionOverwrites.delete(data)
|
||||||
}catch{
|
}catch{
|
||||||
openticket.log("Failed to remove channel permission overwrites on remove-ticket-user","error")
|
opendiscord.log("Failed to remove channel permission overwrites on remove-ticket-user","error")
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on ticket user removal!","error",[
|
opendiscord.log("Unable to edit ticket message on ticket user removal!","error",[
|
||||||
{key:"channel",value:channel.id},
|
{key:"channel",value:channel.id},
|
||||||
{key:"message",value:ticketMessage.id},
|
{key:"message",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:remove-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:remove-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
||||||
ticket.get("openticket:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await openticket.events.get("afterTicketUserRemoved").emit([ticket,user,data,channel,reason])
|
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("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason,data} = params
|
const {guild,channel,user,ticket,reason,data} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.removing.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.removing.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await openticket.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.removing.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
|
if (creator && generalConfig.data.system.messages.removing.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,data} = params
|
const {guild,channel,user,ticket,data} = params
|
||||||
|
|
||||||
openticket.log(user.displayName+" removed "+data.displayName+" from a ticket!","info",[
|
opendiscord.log(user.displayName+" removed "+data.displayName+" from a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -75,8 +78,8 @@ export const registerActions = async () => {
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.actions.get("openticket:remove-ticket-user").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
|
opendiscord.actions.get("opendiscord:remove-ticket-user").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
||||||
//set busy to false in case of crash or cancel
|
//set busy to false in case of crash or cancel
|
||||||
params.ticket.get("openticket:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+32
-25
@@ -1,68 +1,75 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET RENAMING SYSTEM
|
//TICKET RENAMING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:rename-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:rename-ticket"))
|
||||||
openticket.actions.get("openticket:rename-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:rename-ticket").workers.add([
|
||||||
new api.ODWorker("openticket:rename-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:rename-ticket",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason,data} = params
|
const {guild,channel,user,ticket,reason,data} = params
|
||||||
if (channel.isThread()) throw new api.ODSystemError("Unable to rename ticket! Open Ticket doesn't support threads!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to rename ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
await openticket.events.get("onTicketRename").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("onTicketRename").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//rename channel (and give error when crashed)
|
//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 originalName = channel.name
|
||||||
|
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(data)
|
||||||
try{
|
try{
|
||||||
await utilities.timedAwait(channel.setName(data),2500,(err) => {
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
openticket.log("Failed to rename channel on ticket rename","error")
|
opendiscord.log("Failed to rename channel on ticket rename","error")
|
||||||
})
|
})
|
||||||
}catch(err){
|
}catch(err){
|
||||||
await channel.send((await openticket.builders.messages.getSafe("openticket:error-channel-rename").build("ticket-rename",{guild,channel,user,originalName,newName:data})).message)
|
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-rename",{guild,channel,user,originalName,newName:data})).message)
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on ticket renaming!","error",[
|
opendiscord.log("Unable to edit ticket message on ticket renaming!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"messageid",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:rename-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:rename-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
||||||
ticket.get("openticket:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await openticket.events.get("afterTicketRenamed").emit([ticket,user,channel,reason])
|
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("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason,data} = params
|
const {guild,channel,user,ticket,reason,data} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.renaming.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.renaming.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await openticket.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.renaming.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
|
if (creator && generalConfig.data.system.messages.renaming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
openticket.log(user.displayName+" renamed a ticket!","info",[
|
opendiscord.log(user.displayName+" renamed a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -72,8 +79,8 @@ export const registerActions = async () => {
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.actions.get("openticket:rename-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
|
opendiscord.actions.get("opendiscord:rename-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
||||||
//set busy to false in case of crash or cancel
|
//set busy to false in case of crash or cancel
|
||||||
params.ticket.get("openticket:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+174
-158
@@ -1,80 +1,93 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET REOPENING SYSTEM
|
//TICKET REOPENING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:reopen-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:reopen-ticket"))
|
||||||
openticket.actions.get("openticket:reopen-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:reopen-ticket").workers.add([
|
||||||
new api.ODWorker("openticket:reopen-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:reopen-ticket",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
if (channel.isThread()) throw new api.ODSystemError("Unable to reopen ticket! Open Ticket doesn't support threads!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to reopen ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
await openticket.events.get("onTicketReopen").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("onTicketReopen").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update ticket
|
//update ticket
|
||||||
ticket.get("openticket:closed").value = false
|
ticket.get("opendiscord:reopened").value = true
|
||||||
ticket.get("openticket:open").value = true
|
ticket.get("opendiscord:reopened-by").value = user.id
|
||||||
ticket.get("openticket:autoclosed").value = false
|
ticket.get("opendiscord:reopened-on").value = new Date().getTime()
|
||||||
ticket.get("openticket:closed-by").value = null
|
|
||||||
ticket.get("openticket:closed-on").value = null
|
ticket.get("opendiscord:closed").value = false
|
||||||
ticket.get("openticket:busy").value = true
|
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
|
//update stats
|
||||||
await openticket.stats.get("openticket:global").setStat("openticket:tickets-reopened",1,"increase")
|
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-reopened",1,"increase")
|
||||||
await openticket.stats.get("openticket:user").setStat("openticket:tickets-reopened",user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-reopened",user.id,1,"increase")
|
||||||
|
|
||||||
//update category
|
//update category
|
||||||
const channelCategory = ticket.option.get("openticket:channel-category").value
|
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
||||||
const channelBackupCategory = ticket.option.get("openticket:channel-category-backup").value
|
const channelCategory = ticket.option.get("opendiscord:channel-category").value
|
||||||
if (channelCategory !== ""){
|
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
|
||||||
//category enabled
|
if (channelCategory !== ""){
|
||||||
try {
|
//category enabled
|
||||||
const normalCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelCategory)
|
try {
|
||||||
if (!normalCategory){
|
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
||||||
//default category was not found
|
if (!normalCategory){
|
||||||
openticket.log("Ticket Reopening Error: Unable to find category! #1","error",[
|
//default category was not found
|
||||||
{key:"categoryid",value:channelCategory},
|
opendiscord.log("Ticket Reopening Error: Unable to find category! #1","error",[
|
||||||
{key:"backup",value:"false"}
|
{key:"categoryid",value:channelCategory},
|
||||||
])
|
{key:"backup",value:"false"}
|
||||||
}else{
|
])
|
||||||
//default category was found
|
|
||||||
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
|
|
||||||
//use backup category
|
|
||||||
const backupCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
|
||||||
if (!backupCategory){
|
|
||||||
//default category was not found
|
|
||||||
openticket.log("Ticket Reopening Error: Unable to find category! #2","error",[
|
|
||||||
{key:"categoryid",value:channelBackupCategory},
|
|
||||||
{key:"backup",value:"true"}
|
|
||||||
])
|
|
||||||
}else{
|
|
||||||
//use backup category
|
|
||||||
channel.setParent(backupCategory,{lockPermissions:false})
|
|
||||||
ticket.get("openticket:category-mode").value = "backup"
|
|
||||||
ticket.get("openticket:category").value = backupCategory.id
|
|
||||||
}
|
|
||||||
}else{
|
}else{
|
||||||
//use default category
|
//default category was found
|
||||||
channel.setParent(normalCategory,{lockPermissions:false})
|
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
|
||||||
ticket.get("openticket:category-mode").value = "normal"
|
//use backup category
|
||||||
ticket.get("openticket:category").value = normalCategory.id
|
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
||||||
|
if (!backupCategory){
|
||||||
|
//default category was not found
|
||||||
|
opendiscord.log("Ticket Reopening Error: Unable to find category! #2","error",[
|
||||||
|
{key:"categoryid",value:channelBackupCategory},
|
||||||
|
{key:"backup",value:"true"}
|
||||||
|
])
|
||||||
|
}else{
|
||||||
|
//use backup category
|
||||||
|
channel.setParent(backupCategory,{lockPermissions:false})
|
||||||
|
ticket.get("opendiscord:category-mode").value = "backup"
|
||||||
|
ticket.get("opendiscord:category").value = backupCategory.id
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
//use default category
|
||||||
|
channel.setParent(normalCategory,{lockPermissions:false})
|
||||||
|
ticket.get("opendiscord:category-mode").value = "normal"
|
||||||
|
ticket.get("opendiscord:category").value = normalCategory.id
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}catch(e){
|
||||||
|
opendiscord.log("Unable to move ticket to 'reopened category'!","error",[
|
||||||
|
{key:"channel",value:"#"+channel.name},
|
||||||
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
|
])
|
||||||
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}catch(e){
|
}else{
|
||||||
openticket.log("Unable to move ticket to 'reopened category'!","error",[
|
channel.setParent(null,{lockPermissions:false})
|
||||||
{key:"channel",value:"#"+channel.name},
|
ticket.get("opendiscord:category-mode").value = null
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
ticket.get("opendiscord:category").value = null
|
||||||
])
|
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
}
|
||||||
}else{
|
|
||||||
channel.setParent(null,{lockPermissions:false})
|
|
||||||
ticket.get("openticket:category-mode").value = null
|
|
||||||
ticket.get("openticket:category").value = null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//update permissions
|
//update permissions
|
||||||
@@ -84,9 +97,9 @@ export const registerActions = async () => {
|
|||||||
allow:[],
|
allow:[],
|
||||||
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
|
deny:["ViewChannel","SendMessages","ReadMessageHistory"]
|
||||||
}]
|
}]
|
||||||
const globalAdmins = openticket.configs.get("openticket:general").data.globalAdmins
|
const globalAdmins = opendiscord.configs.get("opendiscord:general").data.globalAdmins
|
||||||
const optionAdmins = ticket.option.get("openticket:admins").value
|
const optionAdmins = ticket.option.get("opendiscord:admins").value
|
||||||
const readonlyAdmins = ticket.option.get("openticket:admins-readonly").value
|
const readonlyAdmins = ticket.option.get("opendiscord:admins-readonly").value
|
||||||
|
|
||||||
globalAdmins.forEach((admin) => {
|
globalAdmins.forEach((admin) => {
|
||||||
permissions.push({
|
permissions.push({
|
||||||
@@ -115,7 +128,7 @@ export const registerActions = async () => {
|
|||||||
deny:["SendMessages","AddReactions","AttachFiles","SendPolls"]
|
deny:["SendMessages","AddReactions","AttachFiles","SendPolls"]
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
ticket.get("openticket:participants").value.forEach((participant) => {
|
ticket.get("opendiscord:participants").value.forEach((participant) => {
|
||||||
//all participants that aren't roles/admins
|
//all participants that aren't roles/admins
|
||||||
if (participant.type == "user"){
|
if (participant.type == "user"){
|
||||||
permissions.push({
|
permissions.push({
|
||||||
@@ -129,42 +142,45 @@ export const registerActions = async () => {
|
|||||||
channel.permissionOverwrites.set(permissions)
|
channel.permissionOverwrites.set(permissions)
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on ticket reopening!","error",[
|
opendiscord.log("Unable to edit ticket message on ticket reopening!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"messageid",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:reopen-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build(source,{guild,channel,user,ticket,reason})).message)
|
||||||
ticket.get("openticket:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await openticket.events.get("afterTicketReopened").emit([ticket,user,channel,reason])
|
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("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.reopening.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.reopening.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await openticket.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.reopening.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
|
if (creator && generalConfig.data.system.messages.reopening.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
openticket.log(user.displayName+" reopened a ticket!","info",[
|
opendiscord.log(user.displayName+" reopened a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -178,272 +194,272 @@ export const registerActions = async () => {
|
|||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
export const registerVerifyBars = async () => {
|
||||||
//REOPEN TICKET TICKET MESSAGE
|
//REOPEN TICKET TICKET MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:reopen-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:reopen-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:reopen-ticket-ticket-message").success.add([
|
opendiscord.verifybars.get("opendiscord:reopen-ticket-ticket-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.reopen
|
const permissionMode = generalConfig.data.system.permissions.reopen
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:reopen-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when not closed
|
//return when not closed
|
||||||
if (!ticket.get("openticket:closed").value){
|
if (!ticket.get("opendiscord:closed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start reopening ticket
|
//start reopening ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//reopen with reason
|
//reopen with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:reopen-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:reopen-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//reopen without reason
|
//reopen without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:reopen-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
await opendiscord.actions.get("opendiscord:reopen-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:reopen-ticket-ticket-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:reopen-ticket-ticket-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|
||||||
//REOPEN TICKET CLOSE MESSAGE
|
//REOPEN TICKET CLOSE MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:reopen-ticket-close-message",openticket.builders.messages.getSafe("openticket:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:reopen-ticket-close-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:reopen-ticket-close-message").success.add([
|
opendiscord.verifybars.get("opendiscord:reopen-ticket-close-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.reopen
|
const permissionMode = generalConfig.data.system.permissions.reopen
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:reopen-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when not closed
|
//return when not closed
|
||||||
if (!ticket.get("openticket:closed").value){
|
if (!ticket.get("opendiscord:closed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start reopening ticket
|
//start reopening ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//reopen with reason
|
//reopen with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:reopen-ticket-reason").build("close-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:reopen-ticket-reason").build("close-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//reopen without reason
|
//reopen without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:reopen-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
await opendiscord.actions.get("opendiscord:reopen-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:reopen-message").build("close-message",{guild,channel,user,ticket,reason:null}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("close-message",{guild,channel,user,ticket,reason:null}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:reopen-ticket-close-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:reopen-ticket-close-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-close-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-close-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const {verifybarMessage} = params
|
const {verifybarMessage} = params
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:close-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:close-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|
||||||
//REOPEN TICKET AUTOCLOSE MESSAGE
|
//REOPEN TICKET AUTOCLOSE MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:reopen-ticket-autoclose-message",openticket.builders.messages.getSafe("openticket:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:reopen-ticket-autoclose-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:reopen-ticket-autoclose-message").success.add([
|
opendiscord.verifybars.get("opendiscord:reopen-ticket-autoclose-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.reopen
|
const permissionMode = generalConfig.data.system.permissions.reopen
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:reopen-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when not closed
|
//return when not closed
|
||||||
if (!ticket.get("openticket:closed").value){
|
if (!ticket.get("opendiscord:closed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start reopening ticket
|
//start reopening ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//reopen with reason
|
//reopen with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:reopen-ticket-reason").build("autoclose-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:reopen-ticket-reason").build("autoclose-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//reopen without reason
|
//reopen without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:reopen-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
await opendiscord.actions.get("opendiscord:reopen-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:reopen-message").build("autoclose-message",{guild,channel,user,ticket,reason:null}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("autoclose-message",{guild,channel,user,ticket,reason:null}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:reopen-ticket-autoclose-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:reopen-ticket-autoclose-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-autoclose-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-autoclose-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const {verifybarMessage} = params
|
const {verifybarMessage} = params
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:autoclose-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:autoclose-message").build("other",{guild,channel,user,ticket}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.actions.get("openticket:reopen-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
|
opendiscord.actions.get("opendiscord:reopen-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
||||||
//set busy to false in case of crash or cancel
|
//set busy to false in case of crash or cancel
|
||||||
params.ticket.get("openticket:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
})
|
||||||
|
}
|
||||||
+129
-124
@@ -1,115 +1,120 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET UNCLAIMING SYSTEM
|
//TICKET UNCLAIMING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:unclaim-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:unclaim-ticket"))
|
||||||
openticket.actions.get("openticket:unclaim-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:unclaim-ticket").workers.add([
|
||||||
new api.ODWorker("openticket:unclaim-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:unclaim-ticket",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
if (channel.isThread()) throw new api.ODSystemError("Unable to unclaim ticket! Open Ticket doesn't support threads!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to unclaim ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
await openticket.events.get("onTicketUnclaim").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("onTicketUnclaim").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update ticket
|
//update ticket
|
||||||
ticket.get("openticket:claimed").value = false
|
ticket.get("opendiscord:claimed").value = false
|
||||||
ticket.get("openticket:claimed-by").value = null
|
ticket.get("opendiscord:claimed-by").value = null
|
||||||
ticket.get("openticket:claimed-on").value = null
|
ticket.get("opendiscord:claimed-on").value = null
|
||||||
ticket.get("openticket:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update category
|
//update category
|
||||||
const channelCategory = ticket.option.get("openticket:channel-category").value
|
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
||||||
const channelBackupCategory = ticket.option.get("openticket:channel-category-backup").value
|
const channelCategory = ticket.option.get("opendiscord:channel-category").value
|
||||||
if (channelCategory !== ""){
|
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
|
||||||
//category enabled
|
if (channelCategory !== ""){
|
||||||
try {
|
//category enabled
|
||||||
const normalCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelCategory)
|
try {
|
||||||
if (!normalCategory){
|
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
||||||
//default category was not found
|
if (!normalCategory){
|
||||||
openticket.log("Ticket Unclaiming Error: Unable to find category! #1","error",[
|
//default category was not found
|
||||||
{key:"categoryid",value:channelCategory},
|
opendiscord.log("Ticket Unclaiming Error: Unable to find category! #1","error",[
|
||||||
{key:"backup",value:"false"}
|
{key:"categoryid",value:channelCategory},
|
||||||
])
|
{key:"backup",value:"false"}
|
||||||
}else{
|
])
|
||||||
//default category was found
|
|
||||||
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
|
|
||||||
//use backup category
|
|
||||||
const backupCategory = await openticket.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
|
||||||
if (!backupCategory){
|
|
||||||
//default category was not found
|
|
||||||
openticket.log("Ticket Unclaiming Error: Unable to find category! #2","error",[
|
|
||||||
{key:"categoryid",value:channelBackupCategory},
|
|
||||||
{key:"backup",value:"true"}
|
|
||||||
])
|
|
||||||
}else{
|
|
||||||
//use backup category
|
|
||||||
channel.setParent(backupCategory,{lockPermissions:false})
|
|
||||||
ticket.get("openticket:category-mode").value = "backup"
|
|
||||||
ticket.get("openticket:category").value = backupCategory.id
|
|
||||||
}
|
|
||||||
}else{
|
}else{
|
||||||
//use default category
|
//default category was found
|
||||||
channel.setParent(normalCategory,{lockPermissions:false})
|
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
|
||||||
ticket.get("openticket:category-mode").value = "normal"
|
//use backup category
|
||||||
ticket.get("openticket:category").value = normalCategory.id
|
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
||||||
|
if (!backupCategory){
|
||||||
|
//default category was not found
|
||||||
|
opendiscord.log("Ticket Unclaiming Error: Unable to find category! #2","error",[
|
||||||
|
{key:"categoryid",value:channelBackupCategory},
|
||||||
|
{key:"backup",value:"true"}
|
||||||
|
])
|
||||||
|
}else{
|
||||||
|
//use backup category
|
||||||
|
channel.setParent(backupCategory,{lockPermissions:false})
|
||||||
|
ticket.get("opendiscord:category-mode").value = "backup"
|
||||||
|
ticket.get("opendiscord:category").value = backupCategory.id
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
//use default category
|
||||||
|
channel.setParent(normalCategory,{lockPermissions:false})
|
||||||
|
ticket.get("opendiscord:category-mode").value = "normal"
|
||||||
|
ticket.get("opendiscord:category").value = normalCategory.id
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}catch(e){
|
||||||
|
opendiscord.log("Unable to move ticket to 'unclaimed category'!","error",[
|
||||||
|
{key:"channel",value:"#"+channel.name},
|
||||||
|
{key:"channelid",value:channel.id,hidden:true}
|
||||||
|
])
|
||||||
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
}catch(e){
|
channel.setParent(null,{lockPermissions:false})
|
||||||
openticket.log("Unable to move ticket to 'unclaimed category'!","error",[
|
ticket.get("opendiscord:category-mode").value = null
|
||||||
{key:"channel",value:"#"+channel.name},
|
ticket.get("opendiscord:category").value = null
|
||||||
{key:"channelid",value:channel.id,hidden:true}
|
|
||||||
])
|
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
}
|
||||||
}else{
|
|
||||||
channel.setParent(null,{lockPermissions:false})
|
|
||||||
ticket.get("openticket:category-mode").value = null
|
|
||||||
ticket.get("openticket:category").value = null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on ticket unclaiming!","error",[
|
opendiscord.log("Unable to edit ticket message on ticket unclaiming!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"messageid",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:unclaim-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:unclaim-message").build(source,{guild,channel,user,ticket,reason})).message)
|
||||||
ticket.get("openticket:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await openticket.events.get("afterTicketUnclaimed").emit([ticket,user,channel,reason])
|
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("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.claiming.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.claiming.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await openticket.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.claiming.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
|
if (creator && generalConfig.data.system.messages.claiming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
openticket.log(user.displayName+" unclaimed a ticket!","info",[
|
opendiscord.log(user.displayName+" unclaimed a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -123,184 +128,184 @@ export const registerActions = async () => {
|
|||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
export const registerVerifyBars = async () => {
|
||||||
//UNCLAIM TICKET TICKET MESSAGE
|
//UNCLAIM TICKET TICKET MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:unclaim-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unclaim-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:unclaim-ticket-ticket-message").success.add([
|
opendiscord.verifybars.get("opendiscord:unclaim-ticket-ticket-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.unclaim
|
const permissionMode = generalConfig.data.system.permissions.unclaim
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:unclaim-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:unclaim-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when not claimed
|
//return when not claimed
|
||||||
if (!ticket.get("openticket:claimed").value){
|
if (!ticket.get("opendiscord:claimed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start unclaiming ticket
|
//start unclaiming ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//unclaim with reason
|
//unclaim with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:unclaim-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unclaim-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//unclaim without reason
|
//unclaim without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:unclaim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
await opendiscord.actions.get("opendiscord:unclaim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:unclaim-ticket-ticket-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:unclaim-ticket-ticket-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|
||||||
//UNCLAIM TICKET CLAIM MESSAGE
|
//UNCLAIM TICKET CLAIM MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:unclaim-ticket-claim-message",openticket.builders.messages.getSafe("openticket:verifybar-claim-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unclaim-ticket-claim-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-claim-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:unclaim-ticket-claim-message").success.add([
|
opendiscord.verifybars.get("opendiscord:unclaim-ticket-claim-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.unclaim
|
const permissionMode = generalConfig.data.system.permissions.unclaim
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:unclaim-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:unclaim-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when not claimed
|
//return when not claimed
|
||||||
if (!ticket.get("openticket:claimed").value){
|
if (!ticket.get("opendiscord:claimed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start unclaiming ticket
|
//start unclaiming ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//unclaim with reason
|
//unclaim with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:unclaim-ticket-reason").build("claim-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unclaim-ticket-reason").build("claim-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//unclaim without reason
|
//unclaim without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:unclaim-ticket").run("claim-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
await opendiscord.actions.get("opendiscord:unclaim-ticket").run("claim-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:unclaim-message").build("claim-message",{guild,channel,user,ticket,reason:null}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unclaim-message").build("claim-message",{guild,channel,user,ticket,reason:null}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:unclaim-ticket-claim-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:unclaim-ticket-claim-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-claim-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-claim-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const {verifybarMessage} = params
|
const {verifybarMessage} = params
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:claim-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.actions.get("openticket:unclaim-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
|
opendiscord.actions.get("opendiscord:unclaim-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
||||||
//set busy to false in case of crash or cancel
|
//set busy to false in case of crash or cancel
|
||||||
params.ticket.get("openticket:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
+93
-89
@@ -1,77 +1,81 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET UNPINNING SYSTEM
|
//TICKET UNPINNING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export const registerActions = async () => {
|
||||||
openticket.actions.add(new api.ODAction("openticket:unpin-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:unpin-ticket"))
|
||||||
openticket.actions.get("openticket:unpin-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:unpin-ticket").workers.add([
|
||||||
new api.ODWorker("openticket:unpin-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:unpin-ticket",2,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
if (channel.isThread()) throw new api.ODSystemError("Unable to unpin ticket! Open Ticket doesn't support threads!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to unpin ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
await openticket.events.get("onTicketUnpin").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("onTicketUnpin").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update ticket
|
//update ticket
|
||||||
ticket.get("openticket:pinned").value = false
|
ticket.get("opendiscord:pinned").value = false
|
||||||
ticket.get("openticket:pinned-by").value = null
|
ticket.get("opendiscord:pinned-by").value = null
|
||||||
ticket.get("openticket:pinned-on").value = null
|
ticket.get("opendiscord:pinned-on").value = null
|
||||||
ticket.get("openticket:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//rename channel (and give error when crashed)
|
//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 originalName = channel.name
|
||||||
if (originalName.startsWith("📌")){
|
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(channel.name)
|
||||||
const newName = originalName.replace("📌","");
|
try{
|
||||||
try{
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
opendiscord.log("Failed to rename channel on ticket unpin","error")
|
||||||
openticket.log("Failed to rename channel on ticket unpin","error")
|
})
|
||||||
})
|
}catch(err){
|
||||||
}catch(err){
|
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-unpin",{guild,channel,user,originalName,newName})).message)
|
||||||
await channel.send((await openticket.builders.messages.getSafe("openticket:error-channel-rename").build("ticket-unpin",{guild,channel,user,originalName,newName})).message)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on ticket unpinning!","error",[
|
opendiscord.log("Unable to edit ticket message on ticket unpinning!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"messageid",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await openticket.builders.messages.getSafe("openticket:unpin-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:unpin-message").build(source,{guild,channel,user,ticket,reason})).message)
|
||||||
ticket.get("openticket:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await openticket.events.get("afterTicketUnpinned").emit([ticket,user,channel,reason])
|
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("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.pinning.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.pinning.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await openticket.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.pinning.dm) await openticket.client.sendUserDm(creator,await openticket.builders.messages.getSafe("openticket:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
|
if (creator && generalConfig.data.system.messages.pinning.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
openticket.log(user.displayName+" unpinned a ticket!","info",[
|
opendiscord.log(user.displayName+" unpinned a ticket!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
@@ -85,184 +89,184 @@ export const registerActions = async () => {
|
|||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
export const registerVerifyBars = async () => {
|
||||||
//UNPIN TICKET TICKET MESSAGE
|
//UNPIN TICKET TICKET MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:unpin-ticket-ticket-message",openticket.builders.messages.getSafe("openticket:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unpin-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:unpin-ticket-ticket-message").success.add([
|
opendiscord.verifybars.get("opendiscord:unpin-ticket-ticket-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.unpin
|
const permissionMode = generalConfig.data.system.permissions.unpin
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:unpin-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:unpin-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when not pinned
|
//return when not pinned
|
||||||
if (!ticket.get("openticket:pinned").value){
|
if (!ticket.get("opendiscord:pinned").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start unpining ticket
|
//start unpining ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//unpin with reason
|
//unpin with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:unpin-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unpin-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//unpin without reason
|
//unpin without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:unpin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
await opendiscord.actions.get("opendiscord:unpin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:unpin-ticket-ticket-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:unpin-ticket-ticket-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|
||||||
//UNPIN TICKET PIN MESSAGE
|
//UNPIN TICKET PIN MESSAGE
|
||||||
openticket.verifybars.add(new api.ODVerifyBar("openticket:unpin-ticket-pin-message",openticket.builders.messages.getSafe("openticket:verifybar-pin-message"),!generalConfig.data.system.disableVerifyBars))
|
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unpin-ticket-pin-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-pin-message"),!generalConfig.data.system.disableVerifyBars))
|
||||||
openticket.verifybars.get("openticket:unpin-ticket-pin-message").success.add([
|
opendiscord.verifybars.get("opendiscord:unpin-ticket-pin-message").success.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.unpin
|
const permissionMode = generalConfig.data.system.permissions.unpin
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:unpin-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:unpin-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when not pinned
|
//return when not pinned
|
||||||
if (!ticket.get("openticket:pinned").value){
|
if (!ticket.get("opendiscord:pinned").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start unpinning ticket
|
//start unpinning ticket
|
||||||
if (params.data == "reason"){
|
if (params.data == "reason"){
|
||||||
//unpin with reason
|
//unpin with reason
|
||||||
instance.modal(await openticket.builders.modals.getSafe("openticket:unpin-ticket-reason").build("pin-message",{guild,channel,user,ticket}))
|
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unpin-ticket-reason").build("pin-message",{guild,channel,user,ticket}))
|
||||||
}else{
|
}else{
|
||||||
//unpin without reason
|
//unpin without reason
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:unpin-ticket").run("pin-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
await opendiscord.actions.get("opendiscord:unpin-ticket").run("pin-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:unpin-message").build("pin-message",{guild,channel,user,ticket,reason:null}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unpin-message").build("pin-message",{guild,channel,user,ticket,reason:null}))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.verifybars.get("openticket:unpin-ticket-pin-message").failure.add([
|
opendiscord.verifybars.get("opendiscord:unpin-ticket-pin-message").failure.add([
|
||||||
new api.ODWorker("openticket:back-to-pin-message",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:back-to-pin-message",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const {verifybarMessage} = params
|
const {verifybarMessage} = params
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
||||||
|
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:pin-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:pin-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
openticket.actions.get("openticket:unpin-ticket").workers.backupWorker = new api.ODWorker("openticket:cancel-busy",0,(instance,params) => {
|
opendiscord.actions.get("opendiscord:unpin-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
||||||
//set busy to false in case of crash or cancel
|
//set busy to false in case of crash or cancel
|
||||||
params.ticket.get("openticket:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
})
|
||||||
|
}
|
||||||
+89
-89
@@ -1,12 +1,12 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//BUTTON BUILDERS
|
//BUTTON BUILDERS
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const buttons = openticket.builders.buttons
|
const buttons = opendiscord.builders.buttons
|
||||||
const lang = openticket.languages
|
const lang = opendiscord.languages
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerAllButtons = async () => {
|
export const registerAllButtons = async () => {
|
||||||
verifybarButtons()
|
verifybarButtons()
|
||||||
@@ -20,12 +20,12 @@ export const registerAllButtons = async () => {
|
|||||||
|
|
||||||
const verifybarButtons = () => {
|
const verifybarButtons = () => {
|
||||||
//VERIFYBAR SUCCESS
|
//VERIFYBAR SUCCESS
|
||||||
buttons.add(new api.ODButton("openticket:verifybar-success"))
|
buttons.add(new api.ODButton("opendiscord:verifybar-success"))
|
||||||
buttons.get("openticket:verifybar-success").workers.add(
|
buttons.get("opendiscord:verifybar-success").workers.add(
|
||||||
new api.ODWorker("openticket:verifybar-success",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:verifybar-success",0,async (instance,params) => {
|
||||||
const {verifybar,customData,customColor,customLabel,customEmoji} = params
|
const {verifybar,customData,customColor,customLabel,customEmoji} = params
|
||||||
|
|
||||||
if (customData && customData.length > 40) throw new api.ODSystemError("ODButton:openticket:verifybar-success => customData exceeds 40 characters limit!")
|
if (customData && customData.length > 40) throw new api.ODSystemError("ODButton:opendiscord:verifybar-success => customData exceeds 40 characters limit!")
|
||||||
|
|
||||||
const newData = (customData) ? "_"+customData : ""
|
const newData = (customData) ? "_"+customData : ""
|
||||||
const newColor = customColor ?? "gray"
|
const newColor = customColor ?? "gray"
|
||||||
@@ -41,12 +41,12 @@ const verifybarButtons = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//VERIFYBAR FAILURE
|
//VERIFYBAR FAILURE
|
||||||
buttons.add(new api.ODButton("openticket:verifybar-failure"))
|
buttons.add(new api.ODButton("opendiscord:verifybar-failure"))
|
||||||
buttons.get("openticket:verifybar-failure").workers.add(
|
buttons.get("opendiscord:verifybar-failure").workers.add(
|
||||||
new api.ODWorker("openticket:verifybar-failure",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:verifybar-failure",0,async (instance,params) => {
|
||||||
const {verifybar,customData,customColor,customLabel,customEmoji} = params
|
const {verifybar,customData,customColor,customLabel,customEmoji} = params
|
||||||
|
|
||||||
if (customData && customData.length > 40) throw new api.ODSystemError("ODButton:openticket:verifybar-success => customData exceeds 40 characters limit!")
|
if (customData && customData.length > 40) throw new api.ODSystemError("ODButton:opendiscord:verifybar-success => customData exceeds 40 characters limit!")
|
||||||
|
|
||||||
const newData = (customData) ? "_"+customData : ""
|
const newData = (customData) ? "_"+customData : ""
|
||||||
const newColor = customColor ?? "gray"
|
const newColor = customColor ?? "gray"
|
||||||
@@ -64,9 +64,9 @@ const verifybarButtons = () => {
|
|||||||
|
|
||||||
const errorButtons = () => {
|
const errorButtons = () => {
|
||||||
//ERROR TICKET DEPRECATED TRANSCRIPT
|
//ERROR TICKET DEPRECATED TRANSCRIPT
|
||||||
buttons.add(new api.ODButton("openticket:error-ticket-deprecated-transcript"))
|
buttons.add(new api.ODButton("opendiscord:error-ticket-deprecated-transcript"))
|
||||||
buttons.get("openticket:error-ticket-deprecated-transcript").workers.add(
|
buttons.get("opendiscord:error-ticket-deprecated-transcript").workers.add(
|
||||||
new api.ODWorker("openticket:error-ticket-deprecated-transcript",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:error-ticket-deprecated-transcript",0,async (instance,params) => {
|
||||||
|
|
||||||
instance.setCustomId("od:error-ticket-deprecated-transcript")
|
instance.setCustomId("od:error-ticket-deprecated-transcript")
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
@@ -79,11 +79,11 @@ const errorButtons = () => {
|
|||||||
|
|
||||||
const helpMenuButtons = () => {
|
const helpMenuButtons = () => {
|
||||||
//HELP MENU PAGE
|
//HELP MENU PAGE
|
||||||
buttons.add(new api.ODButton("openticket:help-menu-page"))
|
buttons.add(new api.ODButton("opendiscord:help-menu-page"))
|
||||||
buttons.get("openticket:help-menu-page").workers.add(
|
buttons.get("opendiscord:help-menu-page").workers.add(
|
||||||
new api.ODWorker("openticket:help-menu-page",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:help-menu-page",0,async (instance,params) => {
|
||||||
const {mode,page} = params
|
const {mode,page} = params
|
||||||
const totalPages = (await openticket.helpmenu.render(mode)).length
|
const totalPages = (await opendiscord.helpmenu.render(mode)).length
|
||||||
const pageText = (page+1).toString()+"/"+totalPages.toString()
|
const pageText = (page+1).toString()+"/"+totalPages.toString()
|
||||||
|
|
||||||
instance.setCustomId("od:help-menu-page_"+page.toString())
|
instance.setCustomId("od:help-menu-page_"+page.toString())
|
||||||
@@ -95,9 +95,9 @@ const helpMenuButtons = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//HELP MENU SWITCH
|
//HELP MENU SWITCH
|
||||||
buttons.add(new api.ODButton("openticket:help-menu-switch"))
|
buttons.add(new api.ODButton("opendiscord:help-menu-switch"))
|
||||||
buttons.get("openticket:help-menu-switch").workers.add(
|
buttons.get("opendiscord:help-menu-switch").workers.add(
|
||||||
new api.ODWorker("openticket:help-menu-switch",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:help-menu-switch",0,async (instance,params) => {
|
||||||
const {mode} = params
|
const {mode} = params
|
||||||
|
|
||||||
instance.setCustomId("od:help-menu-switch_"+mode)
|
instance.setCustomId("od:help-menu-switch_"+mode)
|
||||||
@@ -109,9 +109,9 @@ const helpMenuButtons = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//HELP MENU PREVIOUS
|
//HELP MENU PREVIOUS
|
||||||
buttons.add(new api.ODButton("openticket:help-menu-previous"))
|
buttons.add(new api.ODButton("opendiscord:help-menu-previous"))
|
||||||
buttons.get("openticket:help-menu-previous").workers.add(
|
buttons.get("opendiscord:help-menu-previous").workers.add(
|
||||||
new api.ODWorker("openticket:help-menu-previous",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:help-menu-previous",0,async (instance,params) => {
|
||||||
const {page} = params
|
const {page} = params
|
||||||
|
|
||||||
instance.setCustomId("od:help-menu-previous")
|
instance.setCustomId("od:help-menu-previous")
|
||||||
@@ -123,11 +123,11 @@ const helpMenuButtons = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//HELP MENU NEXT
|
//HELP MENU NEXT
|
||||||
buttons.add(new api.ODButton("openticket:help-menu-next"))
|
buttons.add(new api.ODButton("opendiscord:help-menu-next"))
|
||||||
buttons.get("openticket:help-menu-next").workers.add(
|
buttons.get("opendiscord:help-menu-next").workers.add(
|
||||||
new api.ODWorker("openticket:help-menu-next",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:help-menu-next",0,async (instance,params) => {
|
||||||
const {mode,page} = params
|
const {mode,page} = params
|
||||||
const totalPages = (await openticket.helpmenu.render(mode)).length
|
const totalPages = (await opendiscord.helpmenu.render(mode)).length
|
||||||
|
|
||||||
instance.setCustomId("od:help-menu-next")
|
instance.setCustomId("od:help-menu-next")
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
@@ -140,55 +140,55 @@ const helpMenuButtons = () => {
|
|||||||
|
|
||||||
const panelButtons = () => {
|
const panelButtons = () => {
|
||||||
//TICKET OPTION
|
//TICKET OPTION
|
||||||
buttons.add(new api.ODButton("openticket:ticket-option"))
|
buttons.add(new api.ODButton("opendiscord:ticket-option"))
|
||||||
buttons.get("openticket:ticket-option").workers.add(
|
buttons.get("opendiscord:ticket-option").workers.add(
|
||||||
new api.ODWorker("openticket:ticket-option",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:ticket-option",0,async (instance,params) => {
|
||||||
const {panel,option} = params
|
const {panel,option} = params
|
||||||
|
|
||||||
instance.setCustomId("od:ticket-option_"+panel.id.value+"_"+option.id.value)
|
instance.setCustomId("od:ticket-option_"+panel.id.value+"_"+option.id.value)
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
instance.setColor(option.get("openticket:button-color").value)
|
instance.setColor(option.get("opendiscord:button-color").value)
|
||||||
if (option.get("openticket:button-emoji").value) instance.setEmoji(option.get("openticket:button-emoji").value)
|
if (option.get("opendiscord:button-emoji").value) instance.setEmoji(option.get("opendiscord:button-emoji").value)
|
||||||
if (option.get("openticket:button-label").value) instance.setLabel(option.get("openticket:button-label").value)
|
if (option.get("opendiscord:button-label").value) instance.setLabel(option.get("opendiscord:button-label").value)
|
||||||
if (!option.get("openticket:button-emoji").value && !option.get("openticket:button-label").value) instance.setLabel("<"+option.id.value+">")
|
if (!option.get("opendiscord:button-emoji").value && !option.get("opendiscord:button-label").value) instance.setLabel("<"+option.id.value+">")
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
//WEBSITE OPTION
|
//WEBSITE OPTION
|
||||||
buttons.add(new api.ODButton("openticket:website-option"))
|
buttons.add(new api.ODButton("opendiscord:website-option"))
|
||||||
buttons.get("openticket:website-option").workers.add(
|
buttons.get("opendiscord:website-option").workers.add(
|
||||||
new api.ODWorker("openticket:website-option",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:website-option",0,async (instance,params) => {
|
||||||
const {panel,option} = params
|
const {panel,option} = params
|
||||||
|
|
||||||
instance.setMode("url")
|
instance.setMode("url")
|
||||||
instance.setUrl(option.get("openticket:url").value)
|
instance.setUrl(option.get("opendiscord:url").value)
|
||||||
if (option.get("openticket:button-emoji").value) instance.setEmoji(option.get("openticket:button-emoji").value)
|
if (option.get("opendiscord:button-emoji").value) instance.setEmoji(option.get("opendiscord:button-emoji").value)
|
||||||
if (option.get("openticket:button-label").value) instance.setLabel(option.get("openticket:button-label").value)
|
if (option.get("opendiscord:button-label").value) instance.setLabel(option.get("opendiscord:button-label").value)
|
||||||
if (!option.get("openticket:button-emoji").value && !option.get("openticket:button-label").value) instance.setLabel("<"+option.id.value+">")
|
if (!option.get("opendiscord:button-emoji").value && !option.get("opendiscord:button-label").value) instance.setLabel("<"+option.id.value+">")
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
//ROLE OPTION
|
//ROLE OPTION
|
||||||
buttons.add(new api.ODButton("openticket:role-option"))
|
buttons.add(new api.ODButton("opendiscord:role-option"))
|
||||||
buttons.get("openticket:role-option").workers.add(
|
buttons.get("opendiscord:role-option").workers.add(
|
||||||
new api.ODWorker("openticket:role-option",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:role-option",0,async (instance,params) => {
|
||||||
const {panel,option} = params
|
const {panel,option} = params
|
||||||
|
|
||||||
instance.setCustomId("od:role-option_"+panel.id.value+"_"+option.id.value)
|
instance.setCustomId("od:role-option_"+panel.id.value+"_"+option.id.value)
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
instance.setColor(option.get("openticket:button-color").value)
|
instance.setColor(option.get("opendiscord:button-color").value)
|
||||||
if (option.get("openticket:button-emoji").value) instance.setEmoji(option.get("openticket:button-emoji").value)
|
if (option.get("opendiscord:button-emoji").value) instance.setEmoji(option.get("opendiscord:button-emoji").value)
|
||||||
if (option.get("openticket:button-label").value) instance.setLabel(option.get("openticket:button-label").value)
|
if (option.get("opendiscord:button-label").value) instance.setLabel(option.get("opendiscord:button-label").value)
|
||||||
if (!option.get("openticket:button-emoji").value && !option.get("openticket:button-label").value) instance.setLabel("<"+option.id.value+">")
|
if (!option.get("opendiscord:button-emoji").value && !option.get("opendiscord:button-label").value) instance.setLabel("<"+option.id.value+">")
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const ticketButtons = () => {
|
const ticketButtons = () => {
|
||||||
//VISIT TICKET
|
//VISIT TICKET
|
||||||
buttons.add(new api.ODButton("openticket:visit-ticket"))
|
buttons.add(new api.ODButton("opendiscord:visit-ticket"))
|
||||||
buttons.get("openticket:visit-ticket").workers.add(
|
buttons.get("opendiscord:visit-ticket").workers.add(
|
||||||
new api.ODWorker("openticket:visit-ticket",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:visit-ticket",0,async (instance,params) => {
|
||||||
const {guild,channel,ticket} = params
|
const {guild,channel,ticket} = params
|
||||||
|
|
||||||
instance.setMode("url")
|
instance.setMode("url")
|
||||||
@@ -199,9 +199,9 @@ const ticketButtons = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//CLOSE TICKET
|
//CLOSE TICKET
|
||||||
buttons.add(new api.ODButton("openticket:close-ticket"))
|
buttons.add(new api.ODButton("opendiscord:close-ticket"))
|
||||||
buttons.get("openticket:close-ticket").workers.add(
|
buttons.get("opendiscord:close-ticket").workers.add(
|
||||||
new api.ODWorker("openticket:close-ticket",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:close-ticket",0,async (instance,params,source) => {
|
||||||
const {guild,channel,ticket} = params
|
const {guild,channel,ticket} = params
|
||||||
|
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
@@ -213,9 +213,9 @@ const ticketButtons = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//DELETE TICKET
|
//DELETE TICKET
|
||||||
buttons.add(new api.ODButton("openticket:delete-ticket"))
|
buttons.add(new api.ODButton("opendiscord:delete-ticket"))
|
||||||
buttons.get("openticket:delete-ticket").workers.add(
|
buttons.get("opendiscord:delete-ticket").workers.add(
|
||||||
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source) => {
|
||||||
const {guild,channel,ticket} = params
|
const {guild,channel,ticket} = params
|
||||||
|
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
@@ -227,9 +227,9 @@ const ticketButtons = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//REOPEN TICKET
|
//REOPEN TICKET
|
||||||
buttons.add(new api.ODButton("openticket:reopen-ticket"))
|
buttons.add(new api.ODButton("opendiscord:reopen-ticket"))
|
||||||
buttons.get("openticket:reopen-ticket").workers.add(
|
buttons.get("opendiscord:reopen-ticket").workers.add(
|
||||||
new api.ODWorker("openticket:reopen-ticket",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:reopen-ticket",0,async (instance,params,source) => {
|
||||||
const {guild,channel,ticket} = params
|
const {guild,channel,ticket} = params
|
||||||
|
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
@@ -241,9 +241,9 @@ const ticketButtons = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//CLAIM TICKET
|
//CLAIM TICKET
|
||||||
buttons.add(new api.ODButton("openticket:claim-ticket"))
|
buttons.add(new api.ODButton("opendiscord:claim-ticket"))
|
||||||
buttons.get("openticket:claim-ticket").workers.add(
|
buttons.get("opendiscord:claim-ticket").workers.add(
|
||||||
new api.ODWorker("openticket:claim-ticket",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:claim-ticket",0,async (instance,params,source) => {
|
||||||
const {guild,channel,ticket} = params
|
const {guild,channel,ticket} = params
|
||||||
|
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
@@ -255,9 +255,9 @@ const ticketButtons = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//UNCLAIM TICKET
|
//UNCLAIM TICKET
|
||||||
buttons.add(new api.ODButton("openticket:unclaim-ticket"))
|
buttons.add(new api.ODButton("opendiscord:unclaim-ticket"))
|
||||||
buttons.get("openticket:unclaim-ticket").workers.add(
|
buttons.get("opendiscord:unclaim-ticket").workers.add(
|
||||||
new api.ODWorker("openticket:unclaim-ticket",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:unclaim-ticket",0,async (instance,params,source) => {
|
||||||
const {guild,channel,ticket} = params
|
const {guild,channel,ticket} = params
|
||||||
|
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
@@ -269,29 +269,29 @@ const ticketButtons = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//PIN TICKET
|
//PIN TICKET
|
||||||
buttons.add(new api.ODButton("openticket:pin-ticket"))
|
buttons.add(new api.ODButton("opendiscord:pin-ticket"))
|
||||||
buttons.get("openticket:pin-ticket").workers.add(
|
buttons.get("opendiscord:pin-ticket").workers.add(
|
||||||
new api.ODWorker("openticket:pin-ticket",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:pin-ticket",0,async (instance,params,source) => {
|
||||||
const {guild,channel,ticket} = params
|
const {guild,channel,ticket} = params
|
||||||
|
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
instance.setCustomId("od:pin-ticket_"+source)
|
instance.setCustomId("od:pin-ticket_"+source)
|
||||||
instance.setColor("gray")
|
instance.setColor("gray")
|
||||||
instance.setEmoji("📌")
|
instance.setEmoji(generalConfig.data.system.pinEmoji)
|
||||||
instance.setLabel(lang.getTranslation("actions.buttons.pin"))
|
instance.setLabel(lang.getTranslation("actions.buttons.pin"))
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
//UNPIN TICKET
|
//UNPIN TICKET
|
||||||
buttons.add(new api.ODButton("openticket:unpin-ticket"))
|
buttons.add(new api.ODButton("opendiscord:unpin-ticket"))
|
||||||
buttons.get("openticket:unpin-ticket").workers.add(
|
buttons.get("opendiscord:unpin-ticket").workers.add(
|
||||||
new api.ODWorker("openticket:unpin-ticket",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:unpin-ticket",0,async (instance,params,source) => {
|
||||||
const {guild,channel,ticket} = params
|
const {guild,channel,ticket} = params
|
||||||
|
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
instance.setCustomId("od:unpin-ticket_"+source)
|
instance.setCustomId("od:unpin-ticket_"+source)
|
||||||
instance.setColor("gray")
|
instance.setColor("gray")
|
||||||
instance.setEmoji("📌")
|
instance.setEmoji(generalConfig.data.system.pinEmoji)
|
||||||
instance.setLabel(lang.getTranslation("actions.buttons.unpin"))
|
instance.setLabel(lang.getTranslation("actions.buttons.unpin"))
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
@@ -299,22 +299,22 @@ const ticketButtons = () => {
|
|||||||
|
|
||||||
const transcriptButtons = () => {
|
const transcriptButtons = () => {
|
||||||
//TRANSCRIPT HTML VISIT
|
//TRANSCRIPT HTML VISIT
|
||||||
buttons.add(new api.ODButton("openticket:transcript-html-visit"))
|
buttons.add(new api.ODButton("opendiscord:transcript-html-visit"))
|
||||||
buttons.get("openticket:transcript-html-visit").workers.add(
|
buttons.get("opendiscord:transcript-html-visit").workers.add(
|
||||||
new api.ODWorker("openticket:transcript-html-visit",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:transcript-html-visit",0,async (instance,params,source) => {
|
||||||
const {result} = params
|
const {result} = params
|
||||||
instance.setMode("url")
|
instance.setMode("url")
|
||||||
if (result.data) instance.setUrl(result.data.url)
|
if (result.data) instance.setUrl(result.data.url)
|
||||||
else throw new api.ODSystemError("ODButton:openticket:transcript-html-visit => Missing Transcript Result Data!")
|
else throw new api.ODSystemError("ODButton:opendiscord:transcript-html-visit => Missing Transcript Result Data!")
|
||||||
instance.setEmoji("📄")
|
instance.setEmoji("📄")
|
||||||
instance.setLabel(lang.getTranslation("transcripts.success.visit"))
|
instance.setLabel(lang.getTranslation("transcripts.success.visit"))
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
//TRANSCRIPT ERROR RETRY
|
//TRANSCRIPT ERROR RETRY
|
||||||
buttons.add(new api.ODButton("openticket:transcript-error-retry"))
|
buttons.add(new api.ODButton("opendiscord:transcript-error-retry"))
|
||||||
buttons.get("openticket:transcript-error-retry").workers.add(
|
buttons.get("opendiscord:transcript-error-retry").workers.add(
|
||||||
new api.ODWorker("openticket:transcript-error-retry",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:transcript-error-retry",0,async (instance,params,source) => {
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
instance.setCustomId("od:transcript-error-retry_"+source)
|
instance.setCustomId("od:transcript-error-retry_"+source)
|
||||||
instance.setColor("gray")
|
instance.setColor("gray")
|
||||||
@@ -324,9 +324,9 @@ const transcriptButtons = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//TRANSCRIPT ERROR CONTINUE
|
//TRANSCRIPT ERROR CONTINUE
|
||||||
buttons.add(new api.ODButton("openticket:transcript-error-continue"))
|
buttons.add(new api.ODButton("opendiscord:transcript-error-continue"))
|
||||||
buttons.get("openticket:transcript-error-continue").workers.add(
|
buttons.get("opendiscord:transcript-error-continue").workers.add(
|
||||||
new api.ODWorker("openticket:transcript-error-continue",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:transcript-error-continue",0,async (instance,params,source) => {
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
instance.setCustomId("od:transcript-error-continue_"+source)
|
instance.setCustomId("od:transcript-error-continue_"+source)
|
||||||
instance.setColor("red")
|
instance.setColor("red")
|
||||||
@@ -338,9 +338,9 @@ const transcriptButtons = () => {
|
|||||||
|
|
||||||
const clearButtons = () => {
|
const clearButtons = () => {
|
||||||
//CLEAR CONTINUE
|
//CLEAR CONTINUE
|
||||||
buttons.add(new api.ODButton("openticket:clear-continue"))
|
buttons.add(new api.ODButton("opendiscord:clear-continue"))
|
||||||
buttons.get("openticket:clear-continue").workers.add(
|
buttons.get("opendiscord:clear-continue").workers.add(
|
||||||
new api.ODWorker("openticket:clear-continue",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:clear-continue",0,async (instance,params,source) => {
|
||||||
instance.setMode("button")
|
instance.setMode("button")
|
||||||
instance.setCustomId("od:clear-continue_"+source+"_"+params.filter)
|
instance.setCustomId("od:clear-continue_"+source+"_"+params.filter)
|
||||||
instance.setColor("red")
|
instance.setColor("red")
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//DROPDOWN BUILDERS
|
//DROPDOWN BUILDERS
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const dropdowns = openticket.builders.dropdowns
|
const dropdowns = opendiscord.builders.dropdowns
|
||||||
|
|
||||||
export const registerAllDropdowns = async () => {
|
export const registerAllDropdowns = async () => {
|
||||||
panelDropdowns()
|
panelDropdowns()
|
||||||
@@ -12,16 +12,18 @@ export const registerAllDropdowns = async () => {
|
|||||||
|
|
||||||
const panelDropdowns = () => {
|
const panelDropdowns = () => {
|
||||||
//TICKET OPTION
|
//TICKET OPTION
|
||||||
dropdowns.add(new api.ODDropdown("openticket:panel-dropdown-tickets"))
|
dropdowns.add(new api.ODDropdown("opendiscord:panel-dropdown-tickets"))
|
||||||
dropdowns.get("openticket:panel-dropdown-tickets").workers.add(
|
dropdowns.get("opendiscord:panel-dropdown-tickets").workers.add(
|
||||||
new api.ODWorker("openticket:panel-dropdown-tickets",0,async (instance,params) => {
|
new api.ODWorker("opendiscord:panel-dropdown-tickets",0,async (instance,params) => {
|
||||||
const {panel,options} = params
|
const {panel,options} = params
|
||||||
|
|
||||||
const parsedOptions: api.ODDropdownData["options"] = options.map((option) => {
|
const parsedOptions: api.ODDropdownData["options"] = options.map((option) => {
|
||||||
const desc = option.get("openticket:description").value.substring(0,100)
|
const label = option.get("opendiscord:button-label").value.substring(0,100)
|
||||||
const emoji = option.get("openticket:button-emoji").value
|
const desc = option.get("opendiscord:description").value.substring(0,100)
|
||||||
|
const emoji = option.get("opendiscord:button-emoji").value
|
||||||
|
|
||||||
return {
|
return {
|
||||||
label:option.get("openticket:button-label").value.substring(0,100),
|
label:(label.length > 0) ? label : "<no-label-provided>",
|
||||||
value:"od:ticket-option_"+panel.id.value+"_"+option.id.value,
|
value:"od:ticket-option_"+panel.id.value+"_"+option.id.value,
|
||||||
emoji:(emoji.length > 0) ? emoji : undefined,
|
emoji:(emoji.length > 0) ? emoji : undefined,
|
||||||
description:(desc.length > 0) ? desc : undefined,
|
description:(desc.length > 0) ? desc : undefined,
|
||||||
@@ -33,7 +35,7 @@ const panelDropdowns = () => {
|
|||||||
instance.setType("string")
|
instance.setType("string")
|
||||||
instance.setMaxValues(1)
|
instance.setMaxValues(1)
|
||||||
instance.setMinValues(0)
|
instance.setMinValues(0)
|
||||||
instance.setPlaceholder(panel.get("openticket:dropdown-placeholder").value)
|
instance.setPlaceholder(panel.get("opendiscord:dropdown-placeholder").value)
|
||||||
instance.setOptions(parsedOptions)
|
instance.setOptions(parsedOptions)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|||||||
+387
-272
File diff suppressed because it is too large
Load Diff
+10
-10
@@ -1,12 +1,12 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//FILE BUILDERS
|
//FILE BUILDERS
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const files = openticket.builders.files
|
const files = opendiscord.builders.files
|
||||||
const lang = openticket.languages
|
const lang = opendiscord.languages
|
||||||
const transcriptConfig = openticket.configs.get("openticket:transcripts")
|
const transcriptConfig = opendiscord.configs.get("opendiscord:transcripts")
|
||||||
|
|
||||||
export const registerAllFiles = async () => {
|
export const registerAllFiles = async () => {
|
||||||
transcriptFiles()
|
transcriptFiles()
|
||||||
@@ -15,16 +15,16 @@ export const registerAllFiles = async () => {
|
|||||||
|
|
||||||
const transcriptFiles = () => {
|
const transcriptFiles = () => {
|
||||||
//TEXT TRANSCRIPT
|
//TEXT TRANSCRIPT
|
||||||
files.add(new api.ODFile("openticket:text-transcript"))
|
files.add(new api.ODFile("opendiscord:text-transcript"))
|
||||||
files.get("openticket:text-transcript").workers.add(
|
files.get("opendiscord:text-transcript").workers.add(
|
||||||
new api.ODWorker("openticket:text-transcript",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:text-transcript",0,async (instance,params,source) => {
|
||||||
const {guild,channel,user,ticket,compiler,result} = params
|
const {guild,channel,user,ticket,compiler,result} = params
|
||||||
|
|
||||||
const fileMode = transcriptConfig.data.textTranscriptStyle.fileMode
|
const fileMode = transcriptConfig.data.textTranscriptStyle.fileMode
|
||||||
const customName = transcriptConfig.data.textTranscriptStyle.customFileName
|
const customName = transcriptConfig.data.textTranscriptStyle.customFileName
|
||||||
|
|
||||||
const creatorId = ticket.get("openticket:opened-by").value ?? "unknown-creator-id"
|
const creatorId = ticket.get("opendiscord:opened-by").value ?? "unknown-creator-id"
|
||||||
const creator = (await openticket.tickets.getTicketUser(ticket,"creator"))
|
const creator = (await opendiscord.tickets.getTicketUser(ticket,"creator"))
|
||||||
|
|
||||||
if (fileMode == "custom") instance.setName(customName.split(".")[0]+".txt")
|
if (fileMode == "custom") instance.setName(customName.split(".")[0]+".txt")
|
||||||
else if (fileMode == "user-id") instance.setName(creatorId+".txt")
|
else if (fileMode == "user-id") instance.setName(creatorId+".txt")
|
||||||
@@ -35,7 +35,7 @@ const transcriptFiles = () => {
|
|||||||
|
|
||||||
instance.setDescription(lang.getTranslation("transcripts.success.textFileDescription"))
|
instance.setDescription(lang.getTranslation("transcripts.success.textFileDescription"))
|
||||||
|
|
||||||
if (compiler.id.value != "openticket:text-compiler" || !result.data || typeof result.data.contents != "string"){
|
if (compiler.id.value != "opendiscord:text-compiler" || !result.data || typeof result.data.contents != "string"){
|
||||||
instance.setContents("<invalid-transcript-compiler>")
|
instance.setContents("<invalid-transcript-compiler>")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+497
-440
File diff suppressed because it is too large
Load Diff
+40
-40
@@ -1,54 +1,54 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//MODAL BUILDERS
|
//MODAL BUILDERS
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const modals = openticket.builders.modals
|
const modals = opendiscord.builders.modals
|
||||||
const lang = openticket.languages
|
const lang = opendiscord.languages
|
||||||
|
|
||||||
export const registerAllModals = async () => {
|
export const registerAllModals = async () => {
|
||||||
ticketModals()
|
ticketModals()
|
||||||
}
|
}
|
||||||
const ticketModals = () => {
|
const ticketModals = () => {
|
||||||
//TICKET QUESTIONS
|
//TICKET QUESTIONS
|
||||||
modals.add(new api.ODModal("openticket:ticket-questions"))
|
modals.add(new api.ODModal("opendiscord:ticket-questions"))
|
||||||
modals.get("openticket:ticket-questions").workers.add(
|
modals.get("opendiscord:ticket-questions").workers.add(
|
||||||
new api.ODWorker("openticket:ticket-questions",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:ticket-questions",0,async (instance,params,source) => {
|
||||||
const {option} = params
|
const {option} = params
|
||||||
|
|
||||||
instance.setCustomId("od:ticket-questions_"+option.id.value+"_"+source)
|
instance.setCustomId("od:ticket-questions_"+option.id.value+"_"+source)
|
||||||
instance.setTitle(option.exists("openticket:name") ? option.get("openticket:name").value : option.id.value)
|
instance.setTitle(option.exists("opendiscord:name") ? option.get("opendiscord:name").value : option.id.value)
|
||||||
const questionIds = option.get("openticket:questions").value
|
const questionIds = option.get("opendiscord:questions").value
|
||||||
questionIds.forEach((id) => {
|
questionIds.forEach((id) => {
|
||||||
const question = openticket.questions.get(id)
|
const question = opendiscord.questions.get(id)
|
||||||
if (!question) return
|
if (!question) return
|
||||||
if (question instanceof api.ODShortQuestion) instance.addQuestion({
|
if (question instanceof api.ODShortQuestion) instance.addQuestion({
|
||||||
customId:question.id.value,
|
customId:question.id.value,
|
||||||
label:question.get("openticket:name").value,
|
label:question.get("opendiscord:name").value,
|
||||||
style:"short",
|
style:"short",
|
||||||
required:question.get("openticket:required").value,
|
required:question.get("opendiscord:required").value,
|
||||||
placeholder:(question.get("openticket:placeholder").value) ? question.get("openticket:placeholder").value : undefined,
|
placeholder:(question.get("opendiscord:placeholder").value) ? question.get("opendiscord:placeholder").value : undefined,
|
||||||
minLength:(question.get("openticket:length-enabled").value) ? question.get("openticket:length-min").value : undefined,
|
minLength:(question.get("opendiscord:length-enabled").value) ? question.get("opendiscord:length-min").value : undefined,
|
||||||
maxLength:(question.get("openticket:length-enabled").value) ? question.get("openticket:length-max").value : undefined
|
maxLength:(question.get("opendiscord:length-enabled").value) ? question.get("opendiscord:length-max").value : undefined
|
||||||
})
|
})
|
||||||
else if (question instanceof api.ODParagraphQuestion) instance.addQuestion({
|
else if (question instanceof api.ODParagraphQuestion) instance.addQuestion({
|
||||||
customId:question.id.value,
|
customId:question.id.value,
|
||||||
label:question.get("openticket:name").value,
|
label:question.get("opendiscord:name").value,
|
||||||
style:"paragraph",
|
style:"paragraph",
|
||||||
required:question.get("openticket:required").value,
|
required:question.get("opendiscord:required").value,
|
||||||
placeholder:(question.get("openticket:placeholder").value) ? question.get("openticket:placeholder").value : undefined,
|
placeholder:(question.get("opendiscord:placeholder").value) ? question.get("opendiscord:placeholder").value : undefined,
|
||||||
minLength:(question.get("openticket:length-enabled").value) ? question.get("openticket:length-min").value : undefined,
|
minLength:(question.get("opendiscord:length-enabled").value) ? question.get("opendiscord:length-min").value : undefined,
|
||||||
maxLength:(question.get("openticket:length-enabled").value) ? question.get("openticket:length-max").value : undefined
|
maxLength:(question.get("opendiscord:length-enabled").value) ? question.get("opendiscord:length-max").value : undefined
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
//CLOSE TICKET REASON
|
//CLOSE TICKET REASON
|
||||||
modals.add(new api.ODModal("openticket:close-ticket-reason"))
|
modals.add(new api.ODModal("opendiscord:close-ticket-reason"))
|
||||||
modals.get("openticket:close-ticket-reason").workers.add(
|
modals.get("opendiscord:close-ticket-reason").workers.add(
|
||||||
new api.ODWorker("openticket:close-ticket-reason",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:close-ticket-reason",0,async (instance,params,source) => {
|
||||||
const {ticket} = params
|
const {ticket} = params
|
||||||
|
|
||||||
instance.setCustomId("od:close-ticket-reason_"+ticket.id.value+"_"+source)
|
instance.setCustomId("od:close-ticket-reason_"+ticket.id.value+"_"+source)
|
||||||
@@ -64,9 +64,9 @@ const ticketModals = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//REOPEN TICKET REASON
|
//REOPEN TICKET REASON
|
||||||
modals.add(new api.ODModal("openticket:reopen-ticket-reason"))
|
modals.add(new api.ODModal("opendiscord:reopen-ticket-reason"))
|
||||||
modals.get("openticket:reopen-ticket-reason").workers.add(
|
modals.get("opendiscord:reopen-ticket-reason").workers.add(
|
||||||
new api.ODWorker("openticket:reopen-ticket-reason",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:reopen-ticket-reason",0,async (instance,params,source) => {
|
||||||
const {ticket} = params
|
const {ticket} = params
|
||||||
|
|
||||||
instance.setCustomId("od:reopen-ticket-reason_"+ticket.id.value+"_"+source)
|
instance.setCustomId("od:reopen-ticket-reason_"+ticket.id.value+"_"+source)
|
||||||
@@ -82,9 +82,9 @@ const ticketModals = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//DELETE TICKET REASON
|
//DELETE TICKET REASON
|
||||||
modals.add(new api.ODModal("openticket:delete-ticket-reason"))
|
modals.add(new api.ODModal("opendiscord:delete-ticket-reason"))
|
||||||
modals.get("openticket:delete-ticket-reason").workers.add(
|
modals.get("opendiscord:delete-ticket-reason").workers.add(
|
||||||
new api.ODWorker("openticket:delete-ticket-reason",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:delete-ticket-reason",0,async (instance,params,source) => {
|
||||||
const {ticket} = params
|
const {ticket} = params
|
||||||
|
|
||||||
instance.setCustomId("od:delete-ticket-reason_"+ticket.id.value+"_"+source)
|
instance.setCustomId("od:delete-ticket-reason_"+ticket.id.value+"_"+source)
|
||||||
@@ -100,9 +100,9 @@ const ticketModals = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//CLAIM TICKET REASON
|
//CLAIM TICKET REASON
|
||||||
modals.add(new api.ODModal("openticket:claim-ticket-reason"))
|
modals.add(new api.ODModal("opendiscord:claim-ticket-reason"))
|
||||||
modals.get("openticket:claim-ticket-reason").workers.add(
|
modals.get("opendiscord:claim-ticket-reason").workers.add(
|
||||||
new api.ODWorker("openticket:claim-ticket-reason",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:claim-ticket-reason",0,async (instance,params,source) => {
|
||||||
const {ticket} = params
|
const {ticket} = params
|
||||||
|
|
||||||
instance.setCustomId("od:claim-ticket-reason_"+ticket.id.value+"_"+source)
|
instance.setCustomId("od:claim-ticket-reason_"+ticket.id.value+"_"+source)
|
||||||
@@ -118,9 +118,9 @@ const ticketModals = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//UNCLAIM TICKET REASON
|
//UNCLAIM TICKET REASON
|
||||||
modals.add(new api.ODModal("openticket:unclaim-ticket-reason"))
|
modals.add(new api.ODModal("opendiscord:unclaim-ticket-reason"))
|
||||||
modals.get("openticket:unclaim-ticket-reason").workers.add(
|
modals.get("opendiscord:unclaim-ticket-reason").workers.add(
|
||||||
new api.ODWorker("openticket:unclaim-ticket-reason",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:unclaim-ticket-reason",0,async (instance,params,source) => {
|
||||||
const {ticket} = params
|
const {ticket} = params
|
||||||
|
|
||||||
instance.setCustomId("od:unclaim-ticket-reason_"+ticket.id.value+"_"+source)
|
instance.setCustomId("od:unclaim-ticket-reason_"+ticket.id.value+"_"+source)
|
||||||
@@ -136,9 +136,9 @@ const ticketModals = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//PIN TICKET REASON
|
//PIN TICKET REASON
|
||||||
modals.add(new api.ODModal("openticket:pin-ticket-reason"))
|
modals.add(new api.ODModal("opendiscord:pin-ticket-reason"))
|
||||||
modals.get("openticket:pin-ticket-reason").workers.add(
|
modals.get("opendiscord:pin-ticket-reason").workers.add(
|
||||||
new api.ODWorker("openticket:pin-ticket-reason",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:pin-ticket-reason",0,async (instance,params,source) => {
|
||||||
const {ticket} = params
|
const {ticket} = params
|
||||||
|
|
||||||
instance.setCustomId("od:pin-ticket-reason_"+ticket.id.value+"_"+source)
|
instance.setCustomId("od:pin-ticket-reason_"+ticket.id.value+"_"+source)
|
||||||
@@ -154,9 +154,9 @@ const ticketModals = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
//UNPIN TICKET REASON
|
//UNPIN TICKET REASON
|
||||||
modals.add(new api.ODModal("openticket:unpin-ticket-reason"))
|
modals.add(new api.ODModal("opendiscord:unpin-ticket-reason"))
|
||||||
modals.get("openticket:unpin-ticket-reason").workers.add(
|
modals.get("opendiscord:unpin-ticket-reason").workers.add(
|
||||||
new api.ODWorker("openticket:unpin-ticket-reason",0,async (instance,params,source) => {
|
new api.ODWorker("opendiscord:unpin-ticket-reason",0,async (instance,params,source) => {
|
||||||
const {ticket} = params
|
const {ticket} = params
|
||||||
|
|
||||||
instance.setCustomId("od:unpin-ticket-reason_"+ticket.id.value+"_"+source)
|
instance.setCustomId("od:unpin-ticket-reason_"+ticket.id.value+"_"+source)
|
||||||
|
|||||||
+24
-24
@@ -1,62 +1,62 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//ADD COMMAND
|
//ADD COMMAND
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerCommandResponders = async () => {
|
export const registerCommandResponders = async () => {
|
||||||
//ADD COMMAND RESPONDER
|
//ADD COMMAND RESPONDER
|
||||||
openticket.responders.commands.add(new api.ODCommandResponder("openticket:add",generalConfig.data.prefix,"add"))
|
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:add",generalConfig.data.prefix,"add"))
|
||||||
openticket.responders.commands.get("openticket:add").workers.add([
|
opendiscord.responders.commands.get("opendiscord:add").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.add
|
const permissionMode = generalConfig.data.system.permissions.add
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:add",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:add",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,19 +64,19 @@ export const registerCommandResponders = async () => {
|
|||||||
const reason = instance.options.getString("reason",false)
|
const reason = instance.options.getString("reason",false)
|
||||||
|
|
||||||
//return when user already added to ticket
|
//return when user already added to ticket
|
||||||
const participants = await openticket.tickets.getAllTicketParticipants(ticket)
|
const participants = await opendiscord.tickets.getAllTicketParticipants(ticket)
|
||||||
if (!participants || participants.find((p) => p.user.id == data.id)){
|
if (!participants || participants.find((p) => p.user.id == data.id)){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.add"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.add"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start adding user to ticket
|
//start adding user to ticket
|
||||||
await instance.defer(false)
|
await instance.defer(false)
|
||||||
await openticket.actions.get("openticket:add-ticket-user").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data})
|
await opendiscord.actions.get("opendiscord:add-ticket-user").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data})
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:add-message").build(source,{guild,channel,user,ticket,reason,data}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:add-message").build(source,{guild,channel,user,ticket,reason,data}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||||
openticket.log(instance.user.displayName+" used the 'add' command!","info",[
|
opendiscord.log(instance.user.displayName+" used the 'add' command!","info",[
|
||||||
{key:"user",value:instance.user.username},
|
{key:"user",value:instance.user.username},
|
||||||
{key:"userid",value:instance.user.id,hidden:true},
|
{key:"userid",value:instance.user.id,hidden:true},
|
||||||
{key:"channelid",value:instance.channel.id,hidden:true},
|
{key:"channelid",value:instance.channel.id,hidden:true},
|
||||||
|
|||||||
+32
-32
@@ -1,68 +1,68 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//AUTOCLOSE COMMAND
|
//AUTOCLOSE COMMAND
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerCommandResponders = async () => {
|
export const registerCommandResponders = async () => {
|
||||||
//AUTOCLOSE COMMAND RESPONDER
|
//AUTOCLOSE COMMAND RESPONDER
|
||||||
openticket.responders.commands.add(new api.ODCommandResponder("openticket:autoclose",generalConfig.data.prefix,/^autoclose/))
|
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:autoclose",generalConfig.data.prefix,/^autoclose/))
|
||||||
openticket.responders.commands.get("openticket:autoclose").workers.add([
|
opendiscord.responders.commands.get("opendiscord:autoclose").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.autoclose
|
const permissionMode = generalConfig.data.system.permissions.autoclose
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:autoclose",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:autoclose",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//return when already closed
|
//return when already closed
|
||||||
if (ticket.get("openticket:closed").value){
|
if (ticket.get("opendiscord:closed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,38 +71,38 @@ export const registerCommandResponders = async () => {
|
|||||||
|
|
||||||
if (scope == "disable"){
|
if (scope == "disable"){
|
||||||
const reason = instance.options.getString("reason",false)
|
const reason = instance.options.getString("reason",false)
|
||||||
ticket.get("openticket:autoclose-enabled").value = false
|
ticket.get("opendiscord:autoclose-enabled").value = false
|
||||||
ticket.get("openticket:autoclose-hours").value = 0
|
ticket.get("opendiscord:autoclose-hours").value = 0
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:autoclose-disable").build(source,{guild,channel,user,ticket,reason}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:autoclose-disable").build(source,{guild,channel,user,ticket,reason}))
|
||||||
|
|
||||||
}else if (scope == "enable"){
|
}else if (scope == "enable"){
|
||||||
const time = instance.options.getNumber("time",true)
|
const time = instance.options.getNumber("time",true)
|
||||||
const reason = instance.options.getString("reason",false)
|
const reason = instance.options.getString("reason",false)
|
||||||
ticket.get("openticket:autoclose-enabled").value = true
|
ticket.get("opendiscord:autoclose-enabled").value = true
|
||||||
ticket.get("openticket:autoclose-hours").value = time
|
ticket.get("opendiscord:autoclose-hours").value = time
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:autoclose-enable").build(source,{guild,channel,user,ticket,reason,time}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:autoclose-enable").build(source,{guild,channel,user,ticket,reason,time}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on autoclose "+scope+"!","error",[
|
opendiscord.log("Unable to edit ticket message on autoclose "+scope+"!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"messageid",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||||
const scope = instance.options.getSubCommand()
|
const scope = instance.options.getSubCommand()
|
||||||
const reason = instance.options.getString("reason",false)
|
const reason = instance.options.getString("reason",false)
|
||||||
openticket.log(instance.user.displayName+" used the 'autoclose "+scope+"' command!","info",[
|
opendiscord.log(instance.user.displayName+" used the 'autoclose "+scope+"' command!","info",[
|
||||||
{key:"user",value:instance.user.username},
|
{key:"user",value:instance.user.username},
|
||||||
{key:"userid",value:instance.user.id,hidden:true},
|
{key:"userid",value:instance.user.id,hidden:true},
|
||||||
{key:"channelid",value:instance.channel.id,hidden:true},
|
{key:"channelid",value:instance.channel.id,hidden:true},
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}))
|
||||||
|
}
|
||||||
+30
-30
@@ -1,63 +1,63 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//AUTODELETE COMMAND
|
//AUTODELETE COMMAND
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerCommandResponders = async () => {
|
export const registerCommandResponders = async () => {
|
||||||
//AUTODELETE COMMAND RESPONDER
|
//AUTODELETE COMMAND RESPONDER
|
||||||
openticket.responders.commands.add(new api.ODCommandResponder("openticket:autodelete",generalConfig.data.prefix,/^autodelete/))
|
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:autodelete",generalConfig.data.prefix,/^autodelete/))
|
||||||
openticket.responders.commands.get("openticket:autodelete").workers.add([
|
opendiscord.responders.commands.get("opendiscord:autodelete").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.autodelete
|
const permissionMode = generalConfig.data.system.permissions.autodelete
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:autodelete",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:autodelete",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,38 +66,38 @@ export const registerCommandResponders = async () => {
|
|||||||
|
|
||||||
if (scope == "disable"){
|
if (scope == "disable"){
|
||||||
const reason = instance.options.getString("reason",false)
|
const reason = instance.options.getString("reason",false)
|
||||||
ticket.get("openticket:autodelete-enabled").value = false
|
ticket.get("opendiscord:autodelete-enabled").value = false
|
||||||
ticket.get("openticket:autodelete-days").value = 0
|
ticket.get("opendiscord:autodelete-days").value = 0
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:autodelete-disable").build(source,{guild,channel,user,ticket,reason}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:autodelete-disable").build(source,{guild,channel,user,ticket,reason}))
|
||||||
|
|
||||||
}else if (scope == "enable"){
|
}else if (scope == "enable"){
|
||||||
const time = instance.options.getNumber("time",true)
|
const time = instance.options.getNumber("time",true)
|
||||||
const reason = instance.options.getString("reason",false)
|
const reason = instance.options.getString("reason",false)
|
||||||
ticket.get("openticket:autodelete-enabled").value = true
|
ticket.get("opendiscord:autodelete-enabled").value = true
|
||||||
ticket.get("openticket:autodelete-days").value = time
|
ticket.get("opendiscord:autodelete-days").value = time
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:autodelete-enable").build(source,{guild,channel,user,ticket,reason,time}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:autodelete-enable").build(source,{guild,channel,user,ticket,reason,time}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message
|
||||||
const ticketMessage = await openticket.tickets.getTicketMessage(ticket)
|
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
||||||
if (ticketMessage){
|
if (ticketMessage){
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
||||||
}catch(e){
|
}catch(e){
|
||||||
openticket.log("Unable to edit ticket message on autodelete "+scope+"!","error",[
|
opendiscord.log("Unable to edit ticket message on autodelete "+scope+"!","error",[
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"messageid",value:ticketMessage.id},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"option",value:ticket.option.id.value}
|
||||||
])
|
])
|
||||||
openticket.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||||
const scope = instance.options.getSubCommand()
|
const scope = instance.options.getSubCommand()
|
||||||
const reason = instance.options.getString("reason",false)
|
const reason = instance.options.getString("reason",false)
|
||||||
openticket.log(instance.user.displayName+" used the 'autodelete "+scope+"' command!","info",[
|
opendiscord.log(instance.user.displayName+" used the 'autodelete "+scope+"' command!","info",[
|
||||||
{key:"user",value:instance.user.username},
|
{key:"user",value:instance.user.username},
|
||||||
{key:"userid",value:instance.user.id,hidden:true},
|
{key:"userid",value:instance.user.id,hidden:true},
|
||||||
{key:"channelid",value:instance.channel.id,hidden:true},
|
{key:"channelid",value:instance.channel.id,hidden:true},
|
||||||
|
|||||||
+30
-30
@@ -1,71 +1,71 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//BLACKLIST COMMAND
|
//BLACKLIST COMMAND
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerCommandResponders = async () => {
|
export const registerCommandResponders = async () => {
|
||||||
//BLACKLIST COMMAND RESPONDER
|
//BLACKLIST COMMAND RESPONDER
|
||||||
openticket.responders.commands.add(new api.ODCommandResponder("openticket:blacklist",generalConfig.data.prefix,/^blacklist/))
|
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:blacklist",generalConfig.data.prefix,/^blacklist/))
|
||||||
openticket.responders.commands.get("openticket:blacklist").workers.add([
|
opendiscord.responders.commands.get("opendiscord:blacklist").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.blacklist
|
const permissionMode = generalConfig.data.system.permissions.blacklist
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:blacklist",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:blacklist",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build(source,{channel:instance.channel,user:instance.user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const scope = instance.options.getSubCommand()
|
const scope = instance.options.getSubCommand()
|
||||||
if (!scope || (scope != "add" && scope != "get" && scope != "remove" && scope != "view")) return
|
if (!scope || (scope != "add" && scope != "get" && scope != "remove" && scope != "view")) return
|
||||||
|
|
||||||
if (scope == "view"){
|
if (scope == "view"){
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:blacklist-view").build(source,{guild,channel,user}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:blacklist-view").build(source,{guild,channel,user}))
|
||||||
|
|
||||||
}else if (scope == "get"){
|
}else if (scope == "get"){
|
||||||
const data = instance.options.getUser("user",true)
|
const data = instance.options.getUser("user",true)
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:blacklist-get").build(source,{guild,channel,user,data}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:blacklist-get").build(source,{guild,channel,user,data}))
|
||||||
|
|
||||||
}else if (scope == "add"){
|
}else if (scope == "add"){
|
||||||
const data = instance.options.getUser("user",true)
|
const data = instance.options.getUser("user",true)
|
||||||
const reason = instance.options.getString("reason",false)
|
const reason = instance.options.getString("reason",false)
|
||||||
|
|
||||||
openticket.blacklist.add(new api.ODBlacklist(data.id,reason),true)
|
opendiscord.blacklist.add(new api.ODBlacklist(data.id,reason),true)
|
||||||
openticket.log(instance.user.displayName+" added "+data.displayName+" to blacklist!","info",[
|
opendiscord.log(instance.user.displayName+" added "+data.displayName+" to blacklist!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
@@ -74,17 +74,17 @@ export const registerCommandResponders = async () => {
|
|||||||
])
|
])
|
||||||
|
|
||||||
//manage stats
|
//manage stats
|
||||||
await openticket.stats.get("openticket:global").setStat("openticket:users-blacklisted",1,"increase")
|
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:users-blacklisted",1,"increase")
|
||||||
await openticket.stats.get("openticket:user").setStat("openticket:users-blacklisted",user.id,1,"increase")
|
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:users-blacklisted",user.id,1,"increase")
|
||||||
|
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:blacklist-add").build(source,{guild,channel,user,data,reason}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:blacklist-add").build(source,{guild,channel,user,data,reason}))
|
||||||
|
|
||||||
}else if (scope == "remove"){
|
}else if (scope == "remove"){
|
||||||
const data = instance.options.getUser("user",true)
|
const data = instance.options.getUser("user",true)
|
||||||
const reason = instance.options.getString("reason",false)
|
const reason = instance.options.getString("reason",false)
|
||||||
|
|
||||||
openticket.blacklist.remove(data.id)
|
opendiscord.blacklist.remove(data.id)
|
||||||
openticket.log(instance.user.displayName+" removed "+data.displayName+" from blacklist!","info",[
|
opendiscord.log(instance.user.displayName+" removed "+data.displayName+" from blacklist!","info",[
|
||||||
{key:"user",value:user.username},
|
{key:"user",value:user.username},
|
||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
@@ -92,10 +92,10 @@ export const registerCommandResponders = async () => {
|
|||||||
{key:"reason",value:reason ?? "/"}
|
{key:"reason",value:reason ?? "/"}
|
||||||
])
|
])
|
||||||
|
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:blacklist-remove").build(source,{guild,channel,user,data,reason}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:blacklist-remove").build(source,{guild,channel,user,data,reason}))
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild) return
|
if (!guild) return
|
||||||
|
|
||||||
@@ -107,16 +107,16 @@ export const registerCommandResponders = async () => {
|
|||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.blacklisting.logs){
|
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.blacklisting.logs){
|
||||||
const logChannel = openticket.posts.get("openticket:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await openticket.builders.messages.getSafe("openticket:blacklist-logs").build(source,{guild,channel,user,mode:scope,data,reason}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:blacklist-logs").build(source,{guild,channel,user,mode:scope,data,reason}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
if (generalConfig.data.system.messages.blacklisting.dm) await openticket.client.sendUserDm(user,await openticket.builders.messages.getSafe("openticket:blacklist-dm").build(source,{guild,channel,user,mode:scope,data,reason}))
|
if (generalConfig.data.system.messages.blacklisting.dm) await opendiscord.client.sendUserDm(user,await opendiscord.builders.messages.getSafe("opendiscord:blacklist-dm").build(source,{guild,channel,user,mode:scope,data,reason}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||||
const scope = instance.options.getSubCommand()
|
const scope = instance.options.getSubCommand()
|
||||||
openticket.log(instance.user.displayName+" used the 'blacklist "+scope+"' command!","info",[
|
opendiscord.log(instance.user.displayName+" used the 'blacklist "+scope+"' command!","info",[
|
||||||
{key:"user",value:instance.user.username},
|
{key:"user",value:instance.user.username},
|
||||||
{key:"userid",value:instance.user.id,hidden:true},
|
{key:"userid",value:instance.user.id,hidden:true},
|
||||||
{key:"channelid",value:instance.channel.id,hidden:true},
|
{key:"channelid",value:instance.channel.id,hidden:true},
|
||||||
|
|||||||
+44
-44
@@ -1,67 +1,67 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//CLAIM COMMAND
|
//CLAIM COMMAND
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerCommandResponders = async () => {
|
export const registerCommandResponders = async () => {
|
||||||
//CLAIM COMMAND RESPONDER
|
//CLAIM COMMAND RESPONDER
|
||||||
openticket.responders.commands.add(new api.ODCommandResponder("openticket:claim",generalConfig.data.prefix,"claim"))
|
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:claim",generalConfig.data.prefix,"claim"))
|
||||||
openticket.responders.commands.get("openticket:claim").workers.add([
|
opendiscord.responders.commands.get("opendiscord:claim").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.claim
|
const permissionMode = generalConfig.data.system.permissions.claim
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:claim",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:claim",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when already claimed
|
//return when already claimed
|
||||||
if (ticket.get("openticket:claimed").value){
|
if (ticket.get("opendiscord:claimed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,11 +70,11 @@ export const registerCommandResponders = async () => {
|
|||||||
|
|
||||||
//start claiming ticket
|
//start claiming ticket
|
||||||
await instance.defer(false)
|
await instance.defer(false)
|
||||||
await openticket.actions.get("openticket:claim-ticket").run(source,{guild,channel,user:claimUser,ticket,reason,sendMessage:false})
|
await opendiscord.actions.get("opendiscord:claim-ticket").run(source,{guild,channel,user:claimUser,ticket,reason,sendMessage:false})
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:claim-message").build(source,{guild,channel,user:claimUser,ticket,reason}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build(source,{guild,channel,user:claimUser,ticket,reason}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||||
openticket.log(instance.user.displayName+" used the 'claim' command!","info",[
|
opendiscord.log(instance.user.displayName+" used the 'claim' command!","info",[
|
||||||
{key:"user",value:instance.user.username},
|
{key:"user",value:instance.user.username},
|
||||||
{key:"userid",value:instance.user.id,hidden:true},
|
{key:"userid",value:instance.user.id,hidden:true},
|
||||||
{key:"channelid",value:instance.channel.id,hidden:true},
|
{key:"channelid",value:instance.channel.id,hidden:true},
|
||||||
@@ -86,51 +86,51 @@ export const registerCommandResponders = async () => {
|
|||||||
|
|
||||||
export const registerButtonResponders = async () => {
|
export const registerButtonResponders = async () => {
|
||||||
//CLAIM TICKET BUTTON RESPONDER
|
//CLAIM TICKET BUTTON RESPONDER
|
||||||
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:claim-ticket",/^od:claim-ticket/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:claim-ticket",/^od:claim-ticket/))
|
||||||
openticket.responders.buttons.get("openticket:claim-ticket").workers.add(
|
opendiscord.responders.buttons.get("opendiscord:claim-ticket").workers.add(
|
||||||
new api.ODWorker("openticket:claim-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:claim-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const originalSource = instance.interaction.customId.split("_")[1]
|
const originalSource = instance.interaction.customId.split("_")[1] as Exclude<api.ODActionManagerIds_Default["opendiscord:claim-ticket"]["source"],"slash"|"text">
|
||||||
if (originalSource != "ticket-message" && originalSource != "unclaim-message") return
|
|
||||||
|
|
||||||
if (originalSource == "ticket-message") await openticket.verifybars.get("openticket:claim-ticket-ticket-message").activate(instance)
|
if (originalSource == "ticket-message") await opendiscord.verifybars.get("opendiscord:claim-ticket-ticket-message").activate(instance)
|
||||||
else await openticket.verifybars.get("openticket:claim-ticket-unclaim-message").activate(instance)
|
else if (originalSource == "unclaim-message") await opendiscord.verifybars.get("opendiscord:claim-ticket-unclaim-message").activate(instance)
|
||||||
|
else await instance.defer("update",false)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerModalResponders = async () => {
|
export const registerModalResponders = async () => {
|
||||||
//CLAIM WITH REASON MODAL RESPONDER
|
//CLAIM WITH REASON MODAL RESPONDER
|
||||||
openticket.responders.modals.add(new api.ODModalResponder("openticket:claim-ticket-reason",/^od:claim-ticket-reason_/))
|
opendiscord.responders.modals.add(new api.ODModalResponder("opendiscord:claim-ticket-reason",/^od:claim-ticket-reason_/))
|
||||||
openticket.responders.modals.get("openticket:claim-ticket-reason").workers.add([
|
opendiscord.responders.modals.get("opendiscord:claim-ticket-reason").workers.add([
|
||||||
new api.ODWorker("openticket:claim-ticket-reason",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:claim-ticket-reason",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!channel) return
|
if (!channel) return
|
||||||
if (!guild){
|
if (!guild){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build(source,{channel,user:instance.user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(instance.interaction.customId.split("_")[1])
|
const ticket = opendiscord.tickets.get(instance.interaction.customId.split("_")[1])
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const originalSource = instance.interaction.customId.split("_")[2] as ("ticket-message"|"unclaim-message"|"other")
|
const originalSource = instance.interaction.customId.split("_")[2] as Exclude<api.ODActionManagerIds_Default["opendiscord:claim-ticket"]["source"],"slash"|"text">
|
||||||
const reason = instance.values.getTextField("reason",true)
|
const reason = instance.values.getTextField("reason",true)
|
||||||
|
|
||||||
//claim with reason
|
//claim with reason
|
||||||
if (originalSource == "ticket-message"){
|
if (originalSource == "ticket-message"){
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
|
await opendiscord.actions.get("opendiscord:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
}else if (originalSource == "unclaim-message"){
|
}else if (originalSource == "unclaim-message"){
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
|
await opendiscord.actions.get("opendiscord:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:claim-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
}else if (originalSource == "other"){
|
}else{
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
|
await opendiscord.actions.get("opendiscord:claim-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
+42
-43
@@ -1,81 +1,81 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//CLEAR COMMAND
|
//CLEAR COMMAND
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerCommandResponders = async () => {
|
export const registerCommandResponders = async () => {
|
||||||
//CLEAR COMMAND RESPONDER
|
//CLEAR COMMAND RESPONDER
|
||||||
openticket.responders.commands.add(new api.ODCommandResponder("openticket:clear",generalConfig.data.prefix,"clear"))
|
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:clear",generalConfig.data.prefix,"clear"))
|
||||||
openticket.responders.commands.get("openticket:clear").workers.add([
|
opendiscord.responders.commands.get("opendiscord:clear").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.clear
|
const permissionMode = generalConfig.data.system.permissions.clear
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
//only allow global admins (ticket admins aren't allowed to clear tickets)
|
//only allow global admins (ticket admins aren't allowed to clear tickets)
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild,{allowChannelUserScope:false,allowChannelRoleScope:false}))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild,{allowChannelUserScope:false,allowChannelRoleScope:false}))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:clear",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:clear",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild || channel.isDMBased()){
|
if (!guild || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
const tempFilter = instance.options.getString("filter",false)
|
const tempFilter = instance.options.getString("filter",false)
|
||||||
const filter = (tempFilter) ? tempFilter.toLowerCase() as api.ODTicketClearFilter : "all"
|
const filter = (tempFilter) ? tempFilter.toLowerCase() as api.ODTicketClearFilter : "all"
|
||||||
const list: string[] = []
|
const list: string[] = []
|
||||||
const ticketList = openticket.tickets.getAll().filter((ticket) => {
|
const ticketList = opendiscord.tickets.getAll().filter((ticket) => {
|
||||||
if (filter == "all") return true
|
if (filter == "all") return true
|
||||||
else if (filter == "open" && ticket.get("openticket:open").value) return true
|
else if (filter == "open" && ticket.get("opendiscord:open").value) return true
|
||||||
else if (filter == "closed" && ticket.get("openticket:closed").value) return true
|
else if (filter == "closed" && ticket.get("opendiscord:closed").value) return true
|
||||||
else if (filter == "claimed" && ticket.get("openticket:claimed").value) return true
|
else if (filter == "claimed" && ticket.get("opendiscord:claimed").value) return true
|
||||||
else if (filter == "pinned" && ticket.get("openticket:pinned").value) return true
|
else if (filter == "pinned" && ticket.get("opendiscord:pinned").value) return true
|
||||||
else if (filter == "unclaimed" && !ticket.get("openticket:claimed").value) return true
|
else if (filter == "unclaimed" && !ticket.get("opendiscord:claimed").value) return true
|
||||||
else if (filter == "unpinned" && !ticket.get("openticket:pinned").value) return true
|
else if (filter == "unpinned" && !ticket.get("opendiscord:pinned").value) return true
|
||||||
else if (filter == "autoclosed" && ticket.get("openticket:closed").value) return true
|
else if (filter == "autoclosed" && ticket.get("opendiscord:closed").value) return true
|
||||||
else return false
|
else return false
|
||||||
})
|
})
|
||||||
for (const ticket of ticketList){
|
for (const ticket of ticketList){
|
||||||
const ticketChannel = await openticket.tickets.getTicketChannel(ticket)
|
const ticketChannel = await opendiscord.tickets.getTicketChannel(ticket)
|
||||||
if (ticketChannel) list.push("#"+ticketChannel.name)
|
if (ticketChannel) list.push("#"+ticketChannel.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
//reply with clear verify
|
//reply with clear verify
|
||||||
await instance.defer(true)
|
await instance.defer(true)
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:clear-verify-message").build(source,{guild,channel,user,filter,list}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:clear-verify-message").build(source,{guild,channel,user,filter,list}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||||
openticket.log(instance.user.displayName+" used the 'clear' command!","info",[
|
opendiscord.log(instance.user.displayName+" used the 'clear' command!","info",[
|
||||||
{key:"user",value:instance.user.username},
|
{key:"user",value:instance.user.username},
|
||||||
{key:"userid",value:instance.user.id,hidden:true},
|
{key:"userid",value:instance.user.id,hidden:true},
|
||||||
{key:"channelid",value:instance.channel.id,hidden:true},
|
{key:"channelid",value:instance.channel.id,hidden:true},
|
||||||
@@ -87,36 +87,35 @@ export const registerCommandResponders = async () => {
|
|||||||
|
|
||||||
export const registerButtonResponders = async () => {
|
export const registerButtonResponders = async () => {
|
||||||
//CLEAR CONTINUE BUTTON RESPONDER
|
//CLEAR CONTINUE BUTTON RESPONDER
|
||||||
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:clear-continue",/^od:clear-continue_/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:clear-continue",/^od:clear-continue_/))
|
||||||
openticket.responders.buttons.get("openticket:clear-continue").workers.add(
|
opendiscord.responders.buttons.get("opendiscord:clear-continue").workers.add(
|
||||||
new api.ODWorker("openticket:clear-continue",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:clear-continue",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild || channel.isDMBased()) return
|
if (!guild || channel.isDMBased()) return
|
||||||
const originalSource = instance.interaction.customId.split("_")[1]
|
const originalSource = instance.interaction.customId.split("_")[1] as api.ODActionManagerIds_Default["opendiscord:clear-tickets"]["source"]
|
||||||
if (originalSource != "slash" && originalSource != "text" && originalSource != "other") return
|
|
||||||
const filter = instance.interaction.customId.split("_")[2] as api.ODTicketClearFilter
|
const filter = instance.interaction.customId.split("_")[2] as api.ODTicketClearFilter
|
||||||
|
|
||||||
//start ticket clear
|
//start ticket clear
|
||||||
instance.defer("update",true)
|
await instance.defer("update",true)
|
||||||
const list: string[] = []
|
const list: string[] = []
|
||||||
const ticketList = openticket.tickets.getAll().filter((ticket) => {
|
const ticketList = opendiscord.tickets.getAll().filter((ticket) => {
|
||||||
if (filter == "all") return true
|
if (filter == "all") return true
|
||||||
else if (filter == "open" && ticket.get("openticket:open").value) return true
|
else if (filter == "open" && ticket.get("opendiscord:open").value) return true
|
||||||
else if (filter == "closed" && ticket.get("openticket:closed").value) return true
|
else if (filter == "closed" && ticket.get("opendiscord:closed").value) return true
|
||||||
else if (filter == "claimed" && ticket.get("openticket:claimed").value) return true
|
else if (filter == "claimed" && ticket.get("opendiscord:claimed").value) return true
|
||||||
else if (filter == "pinned" && ticket.get("openticket:pinned").value) return true
|
else if (filter == "pinned" && ticket.get("opendiscord:pinned").value) return true
|
||||||
else if (filter == "unclaimed" && !ticket.get("openticket:claimed").value) return true
|
else if (filter == "unclaimed" && !ticket.get("opendiscord:claimed").value) return true
|
||||||
else if (filter == "unpinned" && !ticket.get("openticket:pinned").value) return true
|
else if (filter == "unpinned" && !ticket.get("opendiscord:pinned").value) return true
|
||||||
else if (filter == "autoclosed" && ticket.get("openticket:closed").value) return true
|
else if (filter == "autoclosed" && ticket.get("opendiscord:closed").value) return true
|
||||||
else return false
|
else return false
|
||||||
})
|
})
|
||||||
for (const ticket of ticketList){
|
for (const ticket of ticketList){
|
||||||
const ticketChannel = await openticket.tickets.getTicketChannel(ticket)
|
const ticketChannel = await opendiscord.tickets.getTicketChannel(ticket)
|
||||||
if (ticketChannel) list.push("#"+ticketChannel.name)
|
if (ticketChannel) list.push("#"+ticketChannel.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
await openticket.actions.get("openticket:clear-tickets").run(originalSource,{guild,channel,user,filter,list:ticketList})
|
await opendiscord.actions.get("opendiscord:clear-tickets").run(originalSource,{guild,channel,user,filter,list:ticketList})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:clear-message").build(originalSource,{guild,channel,user,filter,list}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:clear-message").build(originalSource,{guild,channel,user,filter,list}))
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
+57
-44
@@ -1,79 +1,92 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//CLOSE COMMAND
|
//CLOSE COMMAND
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
const lang = opendiscord.languages
|
||||||
|
|
||||||
export const registerCommandResponders = async () => {
|
export const registerCommandResponders = async () => {
|
||||||
//CLOSE COMMAND RESPONDER
|
//CLOSE COMMAND RESPONDER
|
||||||
openticket.responders.commands.add(new api.ODCommandResponder("openticket:close",generalConfig.data.prefix,"close"))
|
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:close",generalConfig.data.prefix,"close"))
|
||||||
openticket.responders.commands.get("openticket:close").workers.add([
|
opendiscord.responders.commands.get("opendiscord:close").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.close
|
const permissionMode = generalConfig.data.system.permissions.close
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:close",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:close",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when already closed
|
//return when already closed
|
||||||
if (ticket.get("openticket:closed").value){
|
if (ticket.get("opendiscord:closed").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
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 reason = instance.options.getString("reason",false)
|
||||||
|
|
||||||
//start closing ticket
|
//start closing ticket
|
||||||
await instance.defer(false)
|
await instance.defer(false)
|
||||||
await openticket.actions.get("openticket:close-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false})
|
await opendiscord.actions.get("opendiscord:close-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false})
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:close-message").build(source,{guild,channel,user,ticket,reason}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:close-message").build(source,{guild,channel,user,ticket,reason}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||||
openticket.log(instance.user.displayName+" used the 'close' command!","info",[
|
opendiscord.log(instance.user.displayName+" used the 'close' command!","info",[
|
||||||
{key:"user",value:instance.user.username},
|
{key:"user",value:instance.user.username},
|
||||||
{key:"userid",value:instance.user.id,hidden:true},
|
{key:"userid",value:instance.user.id,hidden:true},
|
||||||
{key:"channelid",value:instance.channel.id,hidden:true},
|
{key:"channelid",value:instance.channel.id,hidden:true},
|
||||||
@@ -85,51 +98,51 @@ export const registerCommandResponders = async () => {
|
|||||||
|
|
||||||
export const registerButtonResponders = async () => {
|
export const registerButtonResponders = async () => {
|
||||||
//CLOSE TICKET BUTTON RESPONDER
|
//CLOSE TICKET BUTTON RESPONDER
|
||||||
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:close-ticket",/^od:close-ticket_/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:close-ticket",/^od:close-ticket_/))
|
||||||
openticket.responders.buttons.get("openticket:close-ticket").workers.add(
|
opendiscord.responders.buttons.get("opendiscord:close-ticket").workers.add(
|
||||||
new api.ODWorker("openticket:close-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:close-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const originalSource = instance.interaction.customId.split("_")[1]
|
const originalSource = instance.interaction.customId.split("_")[1] as Exclude<api.ODActionManagerIds_Default["opendiscord:close-ticket"]["source"],"slash"|"text"|"autoclose">
|
||||||
if (originalSource != "ticket-message" && originalSource != "reopen-message") return
|
|
||||||
|
|
||||||
if (originalSource == "ticket-message") await openticket.verifybars.get("openticket:close-ticket-ticket-message").activate(instance)
|
if (originalSource == "ticket-message") await opendiscord.verifybars.get("opendiscord:close-ticket-ticket-message").activate(instance)
|
||||||
else await openticket.verifybars.get("openticket:close-ticket-reopen-message").activate(instance)
|
else if (originalSource == "reopen-message") await opendiscord.verifybars.get("opendiscord:close-ticket-reopen-message").activate(instance)
|
||||||
|
else await instance.defer("update",false)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerModalResponders = async () => {
|
export const registerModalResponders = async () => {
|
||||||
//CLOSE WITH REASON MODAL RESPONDER
|
//CLOSE WITH REASON MODAL RESPONDER
|
||||||
openticket.responders.modals.add(new api.ODModalResponder("openticket:close-ticket-reason",/^od:close-ticket-reason_/))
|
opendiscord.responders.modals.add(new api.ODModalResponder("opendiscord:close-ticket-reason",/^od:close-ticket-reason_/))
|
||||||
openticket.responders.modals.get("openticket:close-ticket-reason").workers.add([
|
opendiscord.responders.modals.get("opendiscord:close-ticket-reason").workers.add([
|
||||||
new api.ODWorker("openticket:close-ticket-reason",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:close-ticket-reason",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!channel) return
|
if (!channel) return
|
||||||
if (!guild){
|
if (!guild){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build(source,{channel,user:instance.user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(instance.interaction.customId.split("_")[1])
|
const ticket = opendiscord.tickets.get(instance.interaction.customId.split("_")[1])
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const originalSource = instance.interaction.customId.split("_")[2] as ("ticket-message"|"reopen-message"|"other")
|
const originalSource = instance.interaction.customId.split("_")[2] as Exclude<api.ODActionManagerIds_Default["opendiscord:close-ticket"]["source"],"slash"|"text"|"autoclose">
|
||||||
const reason = instance.values.getTextField("reason",true)
|
const reason = instance.values.getTextField("reason",true)
|
||||||
|
|
||||||
//close with reason
|
//close with reason
|
||||||
if (originalSource == "ticket-message"){
|
if (originalSource == "ticket-message"){
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
|
await opendiscord.actions.get("opendiscord:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
}else if (originalSource == "reopen-message"){
|
}else if (originalSource == "reopen-message"){
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
|
await opendiscord.actions.get("opendiscord:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:close-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:close-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
}else if (originalSource == "other"){
|
}else{
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
await openticket.actions.get("openticket:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
|
await opendiscord.actions.get("opendiscord:close-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true})
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
+70
-49
@@ -1,75 +1,96 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//DELETE COMMAND
|
//DELETE COMMAND
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
const lang = opendiscord.languages
|
||||||
|
|
||||||
export const registerCommandResponders = async () => {
|
export const registerCommandResponders = async () => {
|
||||||
//DELETE COMMAND RESPONDER
|
//DELETE COMMAND RESPONDER
|
||||||
openticket.responders.commands.add(new api.ODCommandResponder("openticket:delete",generalConfig.data.prefix,"delete"))
|
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:delete",generalConfig.data.prefix,"delete"))
|
||||||
openticket.responders.commands.get("openticket:delete").workers.add([
|
opendiscord.responders.commands.get("opendiscord:delete").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.delete
|
const permissionMode = generalConfig.data.system.permissions.delete
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:delete",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
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 reason = instance.options.getString("reason",false)
|
||||||
const withoutTranscript = instance.options.getBoolean("notranscript",false) ?? 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
|
//start deleting ticket
|
||||||
await instance.defer(false)
|
await instance.defer(false)
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:delete-message").build(source,{guild,channel,user,ticket,reason}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build(source,{guild,channel,user,ticket,reason}))
|
||||||
await openticket.actions.get("openticket:delete-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript})
|
await opendiscord.actions.get("opendiscord:delete-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript})
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||||
openticket.log(instance.user.displayName+" used the 'delete' command!","info",[
|
opendiscord.log(instance.user.displayName+" used the 'delete' command!","info",[
|
||||||
{key:"user",value:instance.user.username},
|
{key:"user",value:instance.user.username},
|
||||||
{key:"userid",value:instance.user.id,hidden:true},
|
{key:"userid",value:instance.user.id,hidden:true},
|
||||||
{key:"channelid",value:instance.channel.id,hidden:true},
|
{key:"channelid",value:instance.channel.id,hidden:true},
|
||||||
@@ -81,68 +102,68 @@ export const registerCommandResponders = async () => {
|
|||||||
|
|
||||||
export const registerButtonResponders = async () => {
|
export const registerButtonResponders = async () => {
|
||||||
//DELETE TICKET BUTTON RESPONDER
|
//DELETE TICKET BUTTON RESPONDER
|
||||||
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:delete-ticket",/^od:delete-ticket/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:delete-ticket",/^od:delete-ticket/))
|
||||||
openticket.responders.buttons.get("openticket:delete-ticket").workers.add(
|
opendiscord.responders.buttons.get("opendiscord:delete-ticket").workers.add(
|
||||||
new api.ODWorker("openticket:delete-ticket",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
||||||
const originalSource = instance.interaction.customId.split("_")[1]
|
const originalSource = instance.interaction.customId.split("_")[1] as Exclude<api.ODActionManagerIds_Default["opendiscord:delete-ticket"]["source"],"slash"|"text"|"autodelete"|"clear">
|
||||||
if (originalSource != "ticket-message" && originalSource != "reopen-message" && originalSource != "close-message" && originalSource != "autoclose-message") return
|
|
||||||
|
|
||||||
if (originalSource == "ticket-message") await openticket.verifybars.get("openticket:delete-ticket-ticket-message").activate(instance)
|
if (originalSource == "ticket-message") await opendiscord.verifybars.get("opendiscord:delete-ticket-ticket-message").activate(instance)
|
||||||
else if (originalSource == "close-message") await openticket.verifybars.get("openticket:delete-ticket-close-message").activate(instance)
|
else if (originalSource == "close-message") await opendiscord.verifybars.get("opendiscord:delete-ticket-close-message").activate(instance)
|
||||||
else if (originalSource == "reopen-message") await openticket.verifybars.get("openticket:delete-ticket-reopen-message").activate(instance)
|
else if (originalSource == "reopen-message") await opendiscord.verifybars.get("opendiscord:delete-ticket-reopen-message").activate(instance)
|
||||||
else if (originalSource == "autoclose-message") await openticket.verifybars.get("openticket:delete-ticket-autoclose-message").activate(instance)
|
else if (originalSource == "autoclose-message") await opendiscord.verifybars.get("opendiscord:delete-ticket-autoclose-message").activate(instance)
|
||||||
|
else await instance.defer("update",false)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerModalResponders = async () => {
|
export const registerModalResponders = async () => {
|
||||||
//REOPEN WITH REASON MODAL RESPONDER
|
//REOPEN WITH REASON MODAL RESPONDER
|
||||||
openticket.responders.modals.add(new api.ODModalResponder("openticket:delete-ticket-reason",/^od:delete-ticket-reason_/))
|
opendiscord.responders.modals.add(new api.ODModalResponder("opendiscord:delete-ticket-reason",/^od:delete-ticket-reason_/))
|
||||||
openticket.responders.modals.get("openticket:delete-ticket-reason").workers.add([
|
opendiscord.responders.modals.get("opendiscord:delete-ticket-reason").workers.add([
|
||||||
new api.ODWorker("openticket:delete-ticket-reason",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket-reason",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!channel) return
|
if (!channel) return
|
||||||
if (!guild){
|
if (!guild){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build(source,{channel,user:instance.user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build(source,{channel,user:instance.user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(instance.interaction.customId.split("_")[1])
|
const ticket = opendiscord.tickets.get(instance.interaction.customId.split("_")[1])
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const originalSource = instance.interaction.customId.split("_")[2] as ("ticket-message"|"reopen-message"|"close-message"|"autoclose-message"|"other")
|
const originalSource = instance.interaction.customId.split("_")[2] as Exclude<api.ODActionManagerIds_Default["opendiscord:delete-ticket"]["source"],"slash"|"text"|"autodelete"|"clear">
|
||||||
const reason = instance.values.getTextField("reason",true)
|
const reason = instance.values.getTextField("reason",true)
|
||||||
|
|
||||||
//delete with reason
|
//delete with reason
|
||||||
if (originalSource == "ticket-message"){
|
if (originalSource == "ticket-message"){
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
//don't await DELETE action => else it will update the message after the channel has been deleted
|
||||||
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true,withoutTranscript:false})
|
opendiscord.actions.get("opendiscord:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true,withoutTranscript:false})
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
||||||
ticket.get("openticket:for-deletion").value = true
|
ticket.get("opendiscord:for-deletion").value = true
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:ticket-message").build("other",{guild,channel,user,ticket}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
||||||
}else if (originalSource == "close-message"){
|
}else if (originalSource == "close-message"){
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
//don't await DELETE action => else it will update the message after the channel has been deleted
|
||||||
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false})
|
opendiscord.actions.get("opendiscord:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
}else if (originalSource == "reopen-message"){
|
}else if (originalSource == "reopen-message"){
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
//don't await DELETE action => else it will update the message after the channel has been deleted
|
||||||
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false})
|
opendiscord.actions.get("opendiscord:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
}else if (originalSource == "autoclose-message"){
|
}else if (originalSource == "autoclose-message"){
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
//don't await DELETE action => else it will update the message after the channel has been deleted
|
||||||
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false})
|
opendiscord.actions.get("opendiscord:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:false,withoutTranscript:false})
|
||||||
await instance.update(await openticket.builders.messages.getSafe("openticket:delete-message").build("other",{guild,channel,user,ticket,reason}))
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("other",{guild,channel,user,ticket,reason}))
|
||||||
}else if (originalSource == "other"){
|
}else{
|
||||||
await instance.defer("update",false)
|
await instance.defer("update",false)
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
//don't await DELETE action => else it will update the message after the channel has been deleted
|
||||||
openticket.actions.get("openticket:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true,withoutTranscript:false})
|
opendiscord.actions.get("opendiscord:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason,sendMessage:true,withoutTranscript:false})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|||||||
+28
-28
@@ -1,49 +1,49 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//HELP COMMAND
|
//HELP COMMAND
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerCommandResponders = async () => {
|
export const registerCommandResponders = async () => {
|
||||||
//HELP COMMAND RESPONDER
|
//HELP COMMAND RESPONDER
|
||||||
openticket.responders.commands.add(new api.ODCommandResponder("openticket:help",generalConfig.data.prefix,"help"))
|
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:help",generalConfig.data.prefix,"help"))
|
||||||
openticket.responders.commands.get("openticket:help").workers.add([
|
opendiscord.responders.commands.get("opendiscord:help").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.help
|
const permissionMode = generalConfig.data.system.permissions.help
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:help",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:help",0,async (instance,params,source,cancel) => {
|
||||||
const preferSlashOverText = generalConfig.data.system.preferSlashOverText
|
const preferSlashOverText = generalConfig.data.system.preferSlashOverText
|
||||||
|
|
||||||
let mode: "slash"|"text"
|
let mode: "slash"|"text"
|
||||||
@@ -53,10 +53,10 @@ export const registerCommandResponders = async () => {
|
|||||||
}else if (!generalConfig.data.slashCommands) mode = "text"
|
}else if (!generalConfig.data.slashCommands) mode = "text"
|
||||||
else mode = "slash"
|
else mode = "slash"
|
||||||
|
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:help-menu").build(source,{mode,page:0}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:help-menu").build(source,{mode,page:0}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||||
openticket.log(instance.user.displayName+" used the 'help' command!","info",[
|
opendiscord.log(instance.user.displayName+" used the 'help' command!","info",[
|
||||||
{key:"user",value:instance.user.username},
|
{key:"user",value:instance.user.username},
|
||||||
{key:"userid",value:instance.user.id,hidden:true},
|
{key:"userid",value:instance.user.id,hidden:true},
|
||||||
{key:"channelid",value:instance.channel.id,hidden:true},
|
{key:"channelid",value:instance.channel.id,hidden:true},
|
||||||
@@ -68,44 +68,44 @@ export const registerCommandResponders = async () => {
|
|||||||
|
|
||||||
export const registerButtonResponders = async () => {
|
export const registerButtonResponders = async () => {
|
||||||
//HELP MENU SWITCH BUTTON RESPONDER
|
//HELP MENU SWITCH BUTTON RESPONDER
|
||||||
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:help-menu-switch",/^od:help-menu-switch_(slash|text)/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:help-menu-switch",/^od:help-menu-switch_(slash|text)/))
|
||||||
openticket.responders.buttons.get("openticket:help-menu-switch").workers.add(
|
opendiscord.responders.buttons.get("opendiscord:help-menu-switch").workers.add(
|
||||||
new api.ODWorker("openticket:update-help-menu",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:update-help-menu",0,async (instance,params,source,cancel) => {
|
||||||
const mode = instance.interaction.customId.split("_")[1] as "slash"|"text"
|
const mode = instance.interaction.customId.split("_")[1] as "slash"|"text"
|
||||||
const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/)
|
const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/)
|
||||||
const currentPage = (pageButton && pageButton.customId) ? Number(pageButton.customId.split("_")[1]) : 0
|
const currentPage = (pageButton && pageButton.customId) ? Number(pageButton.customId.split("_")[1]) : 0
|
||||||
|
|
||||||
const newMode = (mode == "slash") ? "text" : "slash"
|
const newMode = (mode == "slash") ? "text" : "slash"
|
||||||
|
|
||||||
const msg = await openticket.builders.messages.getSafe("openticket:help-menu").build("button",{mode:newMode,page:currentPage})
|
const msg = await opendiscord.builders.messages.getSafe("opendiscord:help-menu").build("button",{mode:newMode,page:currentPage})
|
||||||
await instance.update(msg)
|
await instance.update(msg)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
//HELP MENU PREVIOUS BUTTON RESPONDER
|
//HELP MENU PREVIOUS BUTTON RESPONDER
|
||||||
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:help-menu-previous",/^od:help-menu-previous/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:help-menu-previous",/^od:help-menu-previous/))
|
||||||
openticket.responders.buttons.get("openticket:help-menu-previous").workers.add(
|
opendiscord.responders.buttons.get("opendiscord:help-menu-previous").workers.add(
|
||||||
new api.ODWorker("openticket:update-help-menu",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:update-help-menu",0,async (instance,params,source,cancel) => {
|
||||||
const switchButton = instance.getMessageComponent("button",/^od:help-menu-switch_(slash|text)/)
|
const switchButton = instance.getMessageComponent("button",/^od:help-menu-switch_(slash|text)/)
|
||||||
const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/)
|
const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/)
|
||||||
const currentPage = (pageButton && pageButton.customId) ? Number(pageButton.customId.split("_")[1]) : 0
|
const currentPage = (pageButton && pageButton.customId) ? Number(pageButton.customId.split("_")[1]) : 0
|
||||||
const currentMode = (switchButton && switchButton.customId) ? switchButton.customId.split("_")[1] as "text"|"slash" : "slash"
|
const currentMode = (switchButton && switchButton.customId) ? switchButton.customId.split("_")[1] as "text"|"slash" : "slash"
|
||||||
|
|
||||||
const msg = await openticket.builders.messages.getSafe("openticket:help-menu").build("button",{mode:currentMode,page:currentPage-1})
|
const msg = await opendiscord.builders.messages.getSafe("opendiscord:help-menu").build("button",{mode:currentMode,page:currentPage-1})
|
||||||
await instance.update(msg)
|
await instance.update(msg)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
//HELP MENU NEXT BUTTON RESPONDER
|
//HELP MENU NEXT BUTTON RESPONDER
|
||||||
openticket.responders.buttons.add(new api.ODButtonResponder("openticket:help-menu-next",/^od:help-menu-next/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:help-menu-next",/^od:help-menu-next/))
|
||||||
openticket.responders.buttons.get("openticket:help-menu-next").workers.add(
|
opendiscord.responders.buttons.get("opendiscord:help-menu-next").workers.add(
|
||||||
new api.ODWorker("openticket:update-help-menu",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:update-help-menu",0,async (instance,params,source,cancel) => {
|
||||||
const switchButton = instance.getMessageComponent("button",/^od:help-menu-switch_(slash|text)/)
|
const switchButton = instance.getMessageComponent("button",/^od:help-menu-switch_(slash|text)/)
|
||||||
const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/)
|
const pageButton = instance.getMessageComponent("button",/^od:help-menu-page_([0-9]+)/)
|
||||||
const currentPage = (pageButton && pageButton.customId) ? Number(pageButton.customId.split("_")[1]) : 0
|
const currentPage = (pageButton && pageButton.customId) ? Number(pageButton.customId.split("_")[1]) : 0
|
||||||
const currentMode = (switchButton && switchButton.customId) ? switchButton.customId.split("_")[1] as "text"|"slash" : "slash"
|
const currentMode = (switchButton && switchButton.customId) ? switchButton.customId.split("_")[1] as "text"|"slash" : "slash"
|
||||||
|
|
||||||
const msg = await openticket.builders.messages.getSafe("openticket:help-menu").build("button",{mode:currentMode,page:currentPage+1})
|
const msg = await opendiscord.builders.messages.getSafe("opendiscord:help-menu").build("button",{mode:currentMode,page:currentPage+1})
|
||||||
await instance.update(msg)
|
await instance.update(msg)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|||||||
+25
-25
@@ -1,87 +1,87 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//MOVE COMMAND
|
//MOVE COMMAND
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {openticket, api, utilities} from "../index"
|
import {opendiscord, api, utilities} from "../index"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = openticket.configs.get("openticket:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerCommandResponders = async () => {
|
export const registerCommandResponders = async () => {
|
||||||
//MOVE COMMAND RESPONDER
|
//MOVE COMMAND RESPONDER
|
||||||
openticket.responders.commands.add(new api.ODCommandResponder("openticket:move",generalConfig.data.prefix,"move"))
|
opendiscord.responders.commands.add(new api.ODCommandResponder("opendiscord:move",generalConfig.data.prefix,"move"))
|
||||||
openticket.responders.commands.get("openticket:move").workers.add([
|
opendiscord.responders.commands.get("opendiscord:move").workers.add([
|
||||||
new api.ODWorker("openticket:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.move
|
const permissionMode = generalConfig.data.system.permissions.move
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
if (permissionMode == "none"){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else if (permissionMode == "everyone") return
|
}else if (permissionMode == "everyone") return
|
||||||
else if (permissionMode == "admin"){
|
else if (permissionMode == "admin"){
|
||||||
if (!openticket.permissions.hasPermissions("support",await openticket.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}else{
|
}else{
|
||||||
if (!instance.guild || !instance.member){
|
if (!instance.guild || !instance.member){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
const role = await openticket.client.fetchGuildRole(instance.guild,permissionMode)
|
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
||||||
if (!role){
|
if (!role){
|
||||||
//error
|
//error
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
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()
|
return cancel()
|
||||||
}
|
}
|
||||||
if (!role.members.has(instance.member.id)){
|
if (!role.members.has(instance.member.id)){
|
||||||
//no permissions
|
//no permissions
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-no-permissions").build(source,{guild:instance.guild,channel:instance.channel,user:instance.user,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()
|
return cancel()
|
||||||
}else return
|
}else return
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:move",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:move",0,async (instance,params,source,cancel) => {
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
if (!guild){
|
if (!guild){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-not-in-guild").build("button",{channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
const ticket = openticket.tickets.get(channel.id)
|
const ticket = opendiscord.tickets.get(channel.id)
|
||||||
if (!ticket || channel.isDMBased()){
|
if (!ticket || channel.isDMBased()){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-unknown").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return when busy
|
//return when busy
|
||||||
if (ticket.get("openticket:busy").value){
|
if (ticket.get("opendiscord:busy").value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error-ticket-busy").build("button",{guild,channel,user}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
const id = instance.options.getString("id",true)
|
const id = instance.options.getString("id",true)
|
||||||
const reason = instance.options.getString("reason",false)
|
const reason = instance.options.getString("reason",false)
|
||||||
|
|
||||||
const option = openticket.options.get(id)
|
const option = opendiscord.options.get(id)
|
||||||
//return if unknown option
|
//return if unknown option
|
||||||
if (!option || !(option instanceof api.ODTicketOption)){
|
if (!option || !(option instanceof api.ODTicketOption)){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:openticket.languages.getTranslation("errors.titles.unknownOption"),layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.titles.unknownOption"),layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
//return if option is the same
|
//return if option is the same
|
||||||
if (ticket.option.id.value == option.id.value){
|
if (ticket.option.id.value == option.id.value){
|
||||||
instance.reply(await openticket.builders.messages.getSafe("openticket:error").build("button",{guild,channel,user,error:"This ticket is already the same as the chosen option!",layout:"simple"}))
|
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:"This ticket is already the same as the chosen option!",layout:"simple"}))
|
||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
//start moving ticket
|
//start moving ticket
|
||||||
await instance.defer(false)
|
await instance.defer(false)
|
||||||
await openticket.actions.get("openticket:move-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data:option})
|
await opendiscord.actions.get("opendiscord:move-ticket").run(source,{guild,channel,user,ticket,reason,sendMessage:false,data:option})
|
||||||
await instance.reply(await openticket.builders.messages.getSafe("openticket:move-message").build(source,{guild,channel,user,ticket,reason,data:option}))
|
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:move-message").build(source,{guild,channel,user,ticket,reason,data:option}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("openticket:logs",-1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,(instance,params,source,cancel) => {
|
||||||
openticket.log(instance.user.displayName+" used the 'move' command!","info",[
|
opendiscord.log(instance.user.displayName+" used the 'move' command!","info",[
|
||||||
{key:"user",value:instance.user.username},
|
{key:"user",value:instance.user.username},
|
||||||
{key:"userid",value:instance.user.id,hidden:true},
|
{key:"userid",value:instance.user.id,hidden:true},
|
||||||
{key:"channelid",value:instance.channel.id,hidden:true},
|
{key:"channelid",value:instance.channel.id,hidden:true},
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user