Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e1fd0266d | ||
|
|
91d09a9096 | ||
|
|
d54a922146 | ||
|
|
c27733b245 | ||
|
|
8a2fa0b4ff | ||
|
|
44561e2690 | ||
|
|
77ab113fc0 | ||
|
|
97a7a966c8 | ||
|
|
becf0ee50d | ||
|
|
1e66cf9917 | ||
|
|
2eb6d9e981 | ||
|
|
0245420313 | ||
|
|
6555f16012 | ||
|
|
7f3624bcee | ||
|
|
2e6fa61b4f | ||
|
|
849c688e56 | ||
|
|
6babc5e4b8 | ||
|
|
4606ddac3c | ||
|
|
e6ab09dbbd | ||
|
|
39427cdbea | ||
|
|
adfcb1c82f | ||
|
|
6c994f6f86 | ||
|
|
4cfde9f5c4 | ||
|
|
fd1e0d6bdb | ||
|
|
e7475af694 | ||
|
|
9da066e99e | ||
|
|
45f15a2df6 | ||
|
|
58a6bcde45 | ||
|
|
eb44f41d3a | ||
|
|
66c5bc4565 | ||
|
|
22d4caf03e | ||
|
|
77dde68edc | ||
|
|
c8c8a94d6f | ||
|
|
6c41aecfa7 | ||
|
|
c64220cad4 | ||
|
|
7f02dd5848 | ||
|
|
c442e50cb4 | ||
|
|
4af9b9e17f | ||
|
|
98d13c6569 | ||
|
|
345a64f51a | ||
|
|
45080ccd96 | ||
|
|
87c034d215 | ||
|
|
1b2e38f524 | ||
|
|
8f780992aa | ||
|
|
a28bcd4f8b | ||
|
|
a0b3aff661 | ||
|
|
9ca375ee2c | ||
|
|
0f9ae79d49 | ||
|
|
dd8d5a12d6 | ||
|
|
afd7f80b8d | ||
|
|
ca5faa3365 | ||
|
|
cf9ddf58d0 | ||
|
|
15ff345948 | ||
|
|
0c45a0ad6a | ||
|
|
e6f6aa1af4 | ||
|
|
1a530aae4c | ||
|
|
67f4417ee6 | ||
|
|
b5e15921ef | ||
|
|
cb8afdf9a6 | ||
|
|
7030b7011c | ||
|
|
7dd8a57a83 | ||
|
|
5763659900 | ||
|
|
65334a8a25 | ||
|
|
4be54399a6 | ||
|
|
1f9fa54344 | ||
|
|
e4b4acfd9f | ||
|
|
6bfa0e0f10 | ||
|
|
4eb9331bf4 | ||
|
|
10f5ae9d44 | ||
|
|
27a9f04d83 | ||
|
|
600419f763 | ||
|
|
a18b19da66 | ||
|
|
230ef70d86 | ||
|
|
2d9a9b42d4 | ||
|
|
50c7fc5e90 | ||
|
|
fa8bc0eb6c | ||
|
|
f42b70d1b9 | ||
|
|
4c2a617a51 | ||
|
|
a1198866f3 | ||
|
|
fe3f2d04a9 | ||
|
|
cb8139b8a0 | ||
|
|
ddae7b5e46 | ||
|
|
32c9a6b4f3 | ||
|
|
0ad24ba89f | ||
|
|
5412416166 | ||
|
|
78a937d4e9 | ||
|
|
5b45dc265b | ||
|
|
4b210fe793 | ||
|
|
8891320bdf | ||
|
|
8ccfd5c4eb | ||
|
|
44074004e4 | ||
|
|
2f1c885b4f | ||
|
|
c94867280d | ||
|
|
138f7fa2bb | ||
|
|
465eda1c24 | ||
|
|
c821e7dd6d | ||
|
|
f9ce496cc5 | ||
|
|
3989fb5f76 | ||
|
|
779efca39a | ||
|
|
4976aa3d45 | ||
|
|
9cdff2c1de | ||
|
|
2e29947ba5 | ||
|
|
0aa3dca63b |
@@ -0,0 +1,13 @@
|
|||||||
|
# Exclude local build artifacts — these are regenerated inside the container
|
||||||
|
node_modules/
|
||||||
|
dist/
|
||||||
|
.git/
|
||||||
|
.backup/
|
||||||
|
.vscode/
|
||||||
|
devconfig/
|
||||||
|
devdatabase/
|
||||||
|
build-docker
|
||||||
|
otdebug.txt
|
||||||
|
plugins/*
|
||||||
|
!plugins/example-plugin/
|
||||||
|
!plugins/example-plugin/**
|
||||||
@@ -1,328 +0,0 @@
|
|||||||
//@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")
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"$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": "../"
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
{
|
|
||||||
"_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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
{
|
|
||||||
"_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.2)",
|
|
||||||
"author": "support@dj-dj.be",
|
|
||||||
"description": "This is the official Pterodactyl egg for Open Ticket v4.1.2, 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.2)\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.2\"\r\n\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"[OT INSTALLER] \/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \"[OT INSTALLER] .git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"[OT INSTALLER] loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"[OT INSTALLER] files found with no git config\"\r\n echo -e \"[OT INSTALLER] closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"https:\/\/github.com\/open-discord-bots\/open-ticket.git\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"[OT INSTALLER] \/mnt\/server is empty.\"\r\n echo -e \"[OT INSTALLER] cloning files into repo.\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"[OT INSTALLER] cloning default branch\"\r\n git clone https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n else\r\n echo -e \"[OT INSTALLER] cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n fi\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing Open Ticket node.js packages.\"\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n \/usr\/local\/bin\/npm install --omit=dev\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing custom node.js packages.\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n \/usr\/local\/bin\/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\necho -e \"[OT INSTALLER] install complete!\"\r\nexit 0",
|
|
||||||
"container": "node:latest",
|
|
||||||
"entrypoint": "bash"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"variables": [
|
|
||||||
{
|
|
||||||
"name": "Additional Npm Packages",
|
|
||||||
"description": "Specify additional npm packages used by Open Ticket plugins. Use spaces to separate.",
|
|
||||||
"env_variable": "NODE_PACKAGES",
|
|
||||||
"default_value": "",
|
|
||||||
"user_viewable": false,
|
|
||||||
"user_editable": true,
|
|
||||||
"rules": "string|nullable",
|
|
||||||
"field_type": "text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Startup Flags",
|
|
||||||
"description": "Start the bot with additional Open Ticket flags. Separate using spaces.\r\nA full reference list can be found in the documentation.",
|
|
||||||
"env_variable": "NODE_FLAGS",
|
|
||||||
"default_value": "",
|
|
||||||
"user_viewable": false,
|
|
||||||
"user_editable": true,
|
|
||||||
"rules": "string|nullable",
|
|
||||||
"field_type": "text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Uninstall Npm Packages",
|
|
||||||
"description": "A list of npm packages to uninstall. Separate by spaces.",
|
|
||||||
"env_variable": "UNNODE_PACKAGES",
|
|
||||||
"default_value": "",
|
|
||||||
"user_viewable": false,
|
|
||||||
"user_editable": true,
|
|
||||||
"rules": "string|nullable",
|
|
||||||
"field_type": "text"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# Contributing Guidelines
|
# Contributing Guidelines
|
||||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket Logo" width="500px">
|
||||||
|
|
||||||
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.1.2) [](https://github.com/sponsors/DJj123dj)
|
[](https://discord.com/invite/26vT9wt3n3) [](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.2.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>
|
||||||
|
|||||||
+9
-10
@@ -19,17 +19,16 @@ This list will be updated on every release.
|
|||||||
|
|
||||||
| Version | Supported | Notes |
|
| Version | Supported | Notes |
|
||||||
|------------|-----------|---------------------------------------------------------------|
|
|------------|-----------|---------------------------------------------------------------|
|
||||||
| 4.2.0 | 🟦 | In Development |
|
| 4.2.x | 🟦 | In Development |
|
||||||
| 4.1.x | 🟦 | In Development |
|
| 4.2.2 | 🟦 | In Development |
|
||||||
| 4.1.2 | ✅ | |
|
| 4.2.1 | ✅ | |
|
||||||
| 4.1.1 | ✅ | Supported Until April 2026 (LTS) |
|
| 4.2.0 | ✅ | |
|
||||||
|
| 4.1.3 | ✅ | (LTS) Long-Term-Support, Until September 2026 |
|
||||||
|
| 4.1.2 | 🚧 | |
|
||||||
|
| 4.1.1 | 🚧 | |
|
||||||
| 4.1.0 | 🚧 | |
|
| 4.1.0 | 🚧 | |
|
||||||
| 4.0.7 | 🚧 | |
|
| 4.0.7 | 🟧 | Deprecated |
|
||||||
| 4.0.6 | 🚧 | |
|
| < 4.0.7 | ❌ | |
|
||||||
| 4.0.5 | 🟧 | Deprecated |
|
|
||||||
| 4.0.4 | 🟧 | Deprecated |
|
|
||||||
| < 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:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<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://discord.com/invite/26vT9wt3n3)
|
||||||
[](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.1.2)
|
[](https://github.com/open-discord-bots/open-ticket/releases/tag/v4.2.1)
|
||||||
[](https://github.com/sponsors/DJj123dj)
|
[](https://github.com/sponsors/DJj123dj)
|
||||||
[](.eggs/README.md)
|
[](.eggs/README.md)
|
||||||
|
|
||||||
@@ -20,6 +20,12 @@ It's recommended to provide at least `1GB` of **Memory/RAM** and `5GB` of **disk
|
|||||||
[**`openticket-egg-main.json` (Recommended)**](openticket-egg-main.json)
|
[**`openticket-egg-main.json` (Recommended)**](openticket-egg-main.json)
|
||||||
- This egg will use the `main` branch of Open Ticket.
|
- This egg will use the `main` branch of Open Ticket.
|
||||||
|
|
||||||
|
[**`openticket-egg-v4.2.0.json`**](openticket-egg-v4.2.0.json)
|
||||||
|
- This egg will always use Open Ticket `v4.2.0`. Open Ticket updates will not have an effect on this egg.
|
||||||
|
|
||||||
|
[**`openticket-egg-v4.1.3.json`**](openticket-egg-v4.1.3.json)
|
||||||
|
- This egg will always use Open Ticket `v4.1.3`. Open Ticket updates will not have an effect on this egg.
|
||||||
|
|
||||||
[**`openticket-egg-v4.1.2.json`**](openticket-egg-v4.1.2.json)
|
[**`openticket-egg-v4.1.2.json`**](openticket-egg-v4.1.2.json)
|
||||||
- This egg will always use Open Ticket `v4.1.2`. Open Ticket updates will not have an effect on this egg.
|
- This egg will always use Open Ticket `v4.1.2`. Open Ticket updates will not have an effect on this egg.
|
||||||
|
|
||||||
+3
-3
@@ -5,9 +5,9 @@
|
|||||||
"update_url": null
|
"update_url": null
|
||||||
},
|
},
|
||||||
"exported_at": "2025-03-16T18:10:18+01:00",
|
"exported_at": "2025-03-16T18:10:18+01:00",
|
||||||
"name": "Open Ticket (v4.0.7)",
|
"name": "Open Ticket (v4.1.3)",
|
||||||
"author": "support@dj-dj.be",
|
"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!",
|
"description": "This is the official Pterodactyl egg for Open Ticket v4.1.3, the most advanced & customisable discord ticket bot that you will ever find! You can customise up to 300+ variables! This includes Html Transcripts, Advanced Plugins, Custom Embeds, Questions\/Modals, Stats & more!",
|
||||||
"features": null,
|
"features": null,
|
||||||
"docker_images": {
|
"docker_images": {
|
||||||
"ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20"
|
"ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20"
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"installation": {
|
"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",
|
"script": "#!\/bin\/bash\r\n# Open Ticket Installation Script (v4.1.3)\r\n# Inspired by: Node.js Installation Script\r\n# \u00a9 DJdj Development\r\n\r\necho -e \"[OT INSTALLER] installing dependencies. please wait...\"\r\napt update\r\napt install -y git curl\r\n\r\necho -e \"[OT INSTALLER] updating npm. please wait...\"\r\nnpm install npm@latest --location=global\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nBRANCH=\"v4.1.3\"\r\n\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"[OT INSTALLER] \/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \"[OT INSTALLER] .git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"[OT INSTALLER] loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"[OT INSTALLER] files found with no git config\"\r\n echo -e \"[OT INSTALLER] closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"https:\/\/github.com\/open-discord-bots\/open-ticket.git\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"[OT INSTALLER] \/mnt\/server is empty.\"\r\n echo -e \"[OT INSTALLER] cloning files into repo.\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"[OT INSTALLER] cloning default branch\"\r\n git clone https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n else\r\n echo -e \"[OT INSTALLER] cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} https:\/\/github.com\/open-discord-bots\/open-ticket.git .\r\n fi\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing Open Ticket node.js packages.\"\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n \/usr\/local\/bin\/npm install --omit=dev\r\nfi\r\n\r\necho -e \"[OT INSTALLER] installing custom node.js packages.\"\r\nif [[ ! -z ${NODE_PACKAGES} ]]; then\r\n \/usr\/local\/bin\/npm install ${NODE_PACKAGES}\r\nfi\r\n\r\necho -e \"[OT INSTALLER] install complete!\"\r\nexit 0",
|
||||||
"container": "node:latest",
|
"container": "node:latest",
|
||||||
"entrypoint": "bash"
|
"entrypoint": "bash"
|
||||||
}
|
}
|
||||||
+3
-3
@@ -5,9 +5,9 @@
|
|||||||
"update_url": null
|
"update_url": null
|
||||||
},
|
},
|
||||||
"exported_at": "2025-03-16T18:10:18+01:00",
|
"exported_at": "2025-03-16T18:10:18+01:00",
|
||||||
"name": "Open Ticket (v4.1.0)",
|
"name": "Open Ticket (v4.2.0)",
|
||||||
"author": "support@dj-dj.be",
|
"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!",
|
"description": "This is the official Pterodactyl egg for Open Ticket v4.2.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,
|
"features": null,
|
||||||
"docker_images": {
|
"docker_images": {
|
||||||
"ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20"
|
"ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20"
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"installation": {
|
"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",
|
"script": "#!\/bin\/bash\r\n# Open Ticket Installation Script (v4.2.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.2.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",
|
"container": "node:latest",
|
||||||
"entrypoint": "bash"
|
"entrypoint": "bash"
|
||||||
}
|
}
|
||||||
+3
-3
@@ -5,9 +5,9 @@
|
|||||||
"update_url": null
|
"update_url": null
|
||||||
},
|
},
|
||||||
"exported_at": "2025-03-16T18:10:18+01:00",
|
"exported_at": "2025-03-16T18:10:18+01:00",
|
||||||
"name": "Open Ticket (v4.1.1)",
|
"name": "Open Ticket (v4.2.1)",
|
||||||
"author": "support@dj-dj.be",
|
"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!",
|
"description": "This is the official Pterodactyl egg for Open Ticket v4.2.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,
|
"features": null,
|
||||||
"docker_images": {
|
"docker_images": {
|
||||||
"ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20"
|
"ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20"
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"installation": {
|
"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",
|
"script": "#!\/bin\/bash\r\n# Open Ticket Installation Script (v4.2.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.2.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",
|
"container": "node:latest",
|
||||||
"entrypoint": "bash"
|
"entrypoint": "bash"
|
||||||
}
|
}
|
||||||
+7
-4
@@ -17,7 +17,10 @@ otdebug.txt
|
|||||||
*/*/*/.DS_Store
|
*/*/*/.DS_Store
|
||||||
**/.DS_Store
|
**/.DS_Store
|
||||||
|
|
||||||
.docs/*
|
.backup/*
|
||||||
!.docs/createDocs.js
|
.tools/*
|
||||||
!.docs/mergeTranslations.js
|
!.tools/createSponsors.ts
|
||||||
!.docs/typedoc-config.json
|
!.tools/createContributors.ts
|
||||||
|
!.tools/mergeTranslations.ts
|
||||||
|
!.tools/docker-compose.yml
|
||||||
|
!.tools/build-docker.sh
|
||||||
Executable
+37
@@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# build.sh — Build Open Ticket Docker images for all supported architectures.
|
||||||
|
#
|
||||||
|
# Usage: ./build.sh <image> [--no-push]
|
||||||
|
# image Full image name, e.g. djj123dj/open-ticket
|
||||||
|
#
|
||||||
|
# Example: ./build.sh djj123dj/open-ticket --no-push
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
cd "$(dirname "$0")/.."
|
||||||
|
echo "✅ Switched working directory to Open Ticket root"
|
||||||
|
pwd
|
||||||
|
|
||||||
|
IMAGE="${1:?Usage: ./build-docker.sh <image> [--no-push]}"
|
||||||
|
PLATFORMS="linux/amd64,linux/arm64" # linux/arm/v6,linux/arm/v7,linux/s390x are taking too long to build, so we'll skip them for now
|
||||||
|
VERSION=$(node -p "require('./package.json').version")
|
||||||
|
|
||||||
|
# Create a multi-arch builder if it doesn't exist yet
|
||||||
|
docker buildx inspect ot-builder &>/dev/null \
|
||||||
|
|| docker buildx create --name ot-builder --driver docker-container --bootstrap --use
|
||||||
|
docker buildx use ot-builder
|
||||||
|
|
||||||
|
PUSH_FLAG="--push"
|
||||||
|
[[ "${2:-}" == "--no-push" ]] && PUSH_FLAG=""
|
||||||
|
|
||||||
|
docker buildx build \
|
||||||
|
--platform "$PLATFORMS" \
|
||||||
|
--tag "${IMAGE}:v${VERSION}" \
|
||||||
|
--tag "${IMAGE}:latest" \
|
||||||
|
--load \
|
||||||
|
$PUSH_FLAG \
|
||||||
|
.
|
||||||
|
|
||||||
|
[[ -n "$PUSH_FLAG" ]] \
|
||||||
|
&& echo "✅ Pushed ${IMAGE}:v${VERSION} and ${IMAGE}:latest" \
|
||||||
|
|| echo "✅ Built ${IMAGE}:v${VERSION} (not pushed)"
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Docker Compose for Open Ticket
|
||||||
|
services:
|
||||||
|
openticket:
|
||||||
|
image: djj123dj/open-ticket:latest
|
||||||
|
volumes:
|
||||||
|
- config:/home/container/config
|
||||||
|
- database:/home/container/database
|
||||||
|
- plugins:/home/container/plugins
|
||||||
|
restart: unless-stopped
|
||||||
|
container_name: open-ticket
|
||||||
|
volumes:
|
||||||
|
config:
|
||||||
|
database:
|
||||||
|
plugins:
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
//@ts-check
|
/// <reference types="node"/>
|
||||||
const fjs = require("formatted-json-stringify")
|
import fjs from "formatted-json-stringify"
|
||||||
const fs = require("fs")
|
import fs from "fs"
|
||||||
|
|
||||||
const formatter = new fjs.ObjectFormatter(null,true,[
|
const formatter = new fjs.ObjectFormatter(null,true,[
|
||||||
new fjs.ObjectFormatter("_TRANSLATION",true,[
|
new fjs.ObjectFormatter("_TRANSLATION",true,[
|
||||||
new fjs.PropertyFormatter("otversion"),
|
new fjs.PropertyFormatter("otversion"),
|
||||||
@@ -123,6 +124,8 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("helpPage"),
|
new fjs.PropertyFormatter("helpPage"),
|
||||||
new fjs.PropertyFormatter("withReason"),
|
new fjs.PropertyFormatter("withReason"),
|
||||||
new fjs.PropertyFormatter("withoutTranscript"),
|
new fjs.PropertyFormatter("withoutTranscript"),
|
||||||
|
new fjs.PropertyFormatter("blacklistAdd"),
|
||||||
|
new fjs.PropertyFormatter("blacklistRemove"),
|
||||||
]),
|
]),
|
||||||
new fjs.ObjectFormatter("titles",true,[
|
new fjs.ObjectFormatter("titles",true,[
|
||||||
new fjs.PropertyFormatter("created"),
|
new fjs.PropertyFormatter("created"),
|
||||||
@@ -161,6 +164,7 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("prioritySet"),
|
new fjs.PropertyFormatter("prioritySet"),
|
||||||
new fjs.PropertyFormatter("priorityGet"),
|
new fjs.PropertyFormatter("priorityGet"),
|
||||||
new fjs.PropertyFormatter("transfer"),
|
new fjs.PropertyFormatter("transfer"),
|
||||||
|
new fjs.PropertyFormatter("transcripts"),
|
||||||
]),
|
]),
|
||||||
new fjs.ObjectFormatter("descriptions",true,[
|
new fjs.ObjectFormatter("descriptions",true,[
|
||||||
new fjs.PropertyFormatter("create"),
|
new fjs.PropertyFormatter("create"),
|
||||||
@@ -254,6 +258,8 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("prioritySetDm"),
|
new fjs.PropertyFormatter("prioritySetDm"),
|
||||||
new fjs.PropertyFormatter("roleUpdateLog"),
|
new fjs.PropertyFormatter("roleUpdateLog"),
|
||||||
new fjs.PropertyFormatter("roleUpdateDm"),
|
new fjs.PropertyFormatter("roleUpdateDm"),
|
||||||
|
new fjs.PropertyFormatter("topicSetLog"),
|
||||||
|
new fjs.PropertyFormatter("topicSetDm"),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
new fjs.ObjectFormatter("transcripts",true,[
|
new fjs.ObjectFormatter("transcripts",true,[
|
||||||
@@ -276,6 +282,8 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("backup"),
|
new fjs.PropertyFormatter("backup"),
|
||||||
new fjs.PropertyFormatter("error"),
|
new fjs.PropertyFormatter("error"),
|
||||||
new fjs.PropertyFormatter("title"),
|
new fjs.PropertyFormatter("title"),
|
||||||
|
new fjs.PropertyFormatter("noHistory"),
|
||||||
|
new fjs.PropertyFormatter("historyNotSupported"),
|
||||||
]),
|
]),
|
||||||
new fjs.ObjectFormatter("text",true,[
|
new fjs.ObjectFormatter("text",true,[
|
||||||
new fjs.PropertyFormatter("messagesTitle"),
|
new fjs.PropertyFormatter("messagesTitle"),
|
||||||
@@ -302,6 +310,7 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("unknownPanel"),
|
new fjs.PropertyFormatter("unknownPanel"),
|
||||||
new fjs.PropertyFormatter("notInGuild"),
|
new fjs.PropertyFormatter("notInGuild"),
|
||||||
new fjs.PropertyFormatter("channelRename"),
|
new fjs.PropertyFormatter("channelRename"),
|
||||||
|
new fjs.PropertyFormatter("channelCategory"),
|
||||||
new fjs.PropertyFormatter("busy"),
|
new fjs.PropertyFormatter("busy"),
|
||||||
new fjs.PropertyFormatter("permissionError"),
|
new fjs.PropertyFormatter("permissionError"),
|
||||||
]),
|
]),
|
||||||
@@ -325,11 +334,15 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("deprecatedTicket"),
|
new fjs.PropertyFormatter("deprecatedTicket"),
|
||||||
new fjs.PropertyFormatter("notInGuild"),
|
new fjs.PropertyFormatter("notInGuild"),
|
||||||
new fjs.PropertyFormatter("channelRename"),
|
new fjs.PropertyFormatter("channelRename"),
|
||||||
|
new fjs.PropertyFormatter("channelCategory"),
|
||||||
new fjs.PropertyFormatter("channelRenameSource"),
|
new fjs.PropertyFormatter("channelRenameSource"),
|
||||||
new fjs.PropertyFormatter("busy"),
|
new fjs.PropertyFormatter("busy"),
|
||||||
new fjs.PropertyFormatter("closeBeforeMessage"),
|
new fjs.PropertyFormatter("closeBeforeMessage"),
|
||||||
new fjs.PropertyFormatter("closeBeforeAdminMessage"),
|
new fjs.PropertyFormatter("closeBeforeAdminMessage"),
|
||||||
new fjs.PropertyFormatter("unableToCreateTicket"),
|
new fjs.PropertyFormatter("unableToCreateTicket"),
|
||||||
|
new fjs.PropertyFormatter("messageMissing"),
|
||||||
|
new fjs.PropertyFormatter("stateExpired"),
|
||||||
|
new fjs.PropertyFormatter("panelStateExpired"),
|
||||||
]),
|
]),
|
||||||
new fjs.ObjectFormatter("optionInvalidReasons",true,[
|
new fjs.ObjectFormatter("optionInvalidReasons",true,[
|
||||||
new fjs.PropertyFormatter("stringRegex"),
|
new fjs.PropertyFormatter("stringRegex"),
|
||||||
@@ -391,6 +404,8 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("syntax"),
|
new fjs.PropertyFormatter("syntax"),
|
||||||
new fjs.PropertyFormatter("originalName"),
|
new fjs.PropertyFormatter("originalName"),
|
||||||
new fjs.PropertyFormatter("newName"),
|
new fjs.PropertyFormatter("newName"),
|
||||||
|
new fjs.PropertyFormatter("originalCategory"),
|
||||||
|
new fjs.PropertyFormatter("newCategory"),
|
||||||
new fjs.PropertyFormatter("until"),
|
new fjs.PropertyFormatter("until"),
|
||||||
new fjs.PropertyFormatter("validOptions"),
|
new fjs.PropertyFormatter("validOptions"),
|
||||||
new fjs.PropertyFormatter("validPanels"),
|
new fjs.PropertyFormatter("validPanels"),
|
||||||
@@ -412,6 +427,8 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("participants"),
|
new fjs.PropertyFormatter("participants"),
|
||||||
new fjs.PropertyFormatter("yes"),
|
new fjs.PropertyFormatter("yes"),
|
||||||
new fjs.PropertyFormatter("no"),
|
new fjs.PropertyFormatter("no"),
|
||||||
|
new fjs.PropertyFormatter("accept"),
|
||||||
|
new fjs.PropertyFormatter("cancel"),
|
||||||
new fjs.PropertyFormatter("option"),
|
new fjs.PropertyFormatter("option"),
|
||||||
new fjs.PropertyFormatter("topic"),
|
new fjs.PropertyFormatter("topic"),
|
||||||
new fjs.PropertyFormatter("uptime"),
|
new fjs.PropertyFormatter("uptime"),
|
||||||
@@ -424,6 +441,7 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("admins"),
|
new fjs.PropertyFormatter("admins"),
|
||||||
new fjs.PropertyFormatter("roles"),
|
new fjs.PropertyFormatter("roles"),
|
||||||
new fjs.PropertyFormatter("size"),
|
new fjs.PropertyFormatter("size"),
|
||||||
|
|
||||||
]),
|
]),
|
||||||
new fjs.ObjectFormatter("lowercase",true,[
|
new fjs.ObjectFormatter("lowercase",true,[
|
||||||
new fjs.PropertyFormatter("text"),
|
new fjs.PropertyFormatter("text"),
|
||||||
@@ -443,6 +461,7 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("panelAutoUpdate"),
|
new fjs.PropertyFormatter("panelAutoUpdate"),
|
||||||
new fjs.PropertyFormatter("ticket"),
|
new fjs.PropertyFormatter("ticket"),
|
||||||
new fjs.PropertyFormatter("ticketId"),
|
new fjs.PropertyFormatter("ticketId"),
|
||||||
|
new fjs.PropertyFormatter("ticketOtherUser"),
|
||||||
new fjs.PropertyFormatter("close"),
|
new fjs.PropertyFormatter("close"),
|
||||||
new fjs.PropertyFormatter("delete"),
|
new fjs.PropertyFormatter("delete"),
|
||||||
new fjs.PropertyFormatter("deleteNoTranscript"),
|
new fjs.PropertyFormatter("deleteNoTranscript"),
|
||||||
@@ -509,6 +528,8 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("priorityList"),
|
new fjs.PropertyFormatter("priorityList"),
|
||||||
new fjs.PropertyFormatter("transfer"),
|
new fjs.PropertyFormatter("transfer"),
|
||||||
new fjs.PropertyFormatter("transferUser"),
|
new fjs.PropertyFormatter("transferUser"),
|
||||||
|
new fjs.PropertyFormatter("transcripts"),
|
||||||
|
new fjs.PropertyFormatter("transcriptsUser"),
|
||||||
]),
|
]),
|
||||||
new fjs.ObjectFormatter("helpMenu",true,[
|
new fjs.ObjectFormatter("helpMenu",true,[
|
||||||
new fjs.PropertyFormatter("help"),
|
new fjs.PropertyFormatter("help"),
|
||||||
@@ -599,6 +620,7 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
new fjs.PropertyFormatter("selectTicket"),
|
new fjs.PropertyFormatter("selectTicket"),
|
||||||
new fjs.PropertyFormatter("selectRole"),
|
new fjs.PropertyFormatter("selectRole"),
|
||||||
new fjs.PropertyFormatter("selectOption"),
|
new fjs.PropertyFormatter("selectOption"),
|
||||||
|
new fjs.PropertyFormatter("selectPriorityLevel"),
|
||||||
]),
|
]),
|
||||||
new fjs.ObjectFormatter("priorities",true,[
|
new fjs.ObjectFormatter("priorities",true,[
|
||||||
new fjs.PropertyFormatter("urgent"),
|
new fjs.PropertyFormatter("urgent"),
|
||||||
@@ -611,14 +633,14 @@ const formatter = new fjs.ObjectFormatter(null,true,[
|
|||||||
]),
|
]),
|
||||||
])
|
])
|
||||||
|
|
||||||
for (const language of fs.readdirSync(".docs/languages/")){
|
for (const language of fs.readdirSync(".tools/languages/")){
|
||||||
if (!fs.existsSync("./languages/"+language)){
|
if (!fs.existsSync("./languages/"+language)){
|
||||||
console.log("language:",language,"does not exist yet in the primary ./languages/ folder. Unable to merge!")
|
console.log("language:",language,"does not exist yet in the primary ./languages/ folder. Unable to merge!")
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
console.log("merging "+language+"...")
|
console.log("merging "+language+"...")
|
||||||
const original = JSON.parse(fs.readFileSync("./languages/"+language).toString())
|
const original = JSON.parse(fs.readFileSync("./languages/"+language).toString())
|
||||||
const newSentences = JSON.parse(fs.readFileSync(".docs/languages/"+language).toString())
|
const newSentences = JSON.parse(fs.readFileSync(".tools/languages/"+language).toString())
|
||||||
|
|
||||||
for (const key of Object.keys(newSentences)){
|
for (const key of Object.keys(newSentences)){
|
||||||
if (key.startsWith("_")) continue
|
if (key.startsWith("_")) continue
|
||||||
@@ -643,7 +665,7 @@ for (const language of fs.readdirSync(".docs/languages/")){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
original["_TRANSLATION"]["lastedited"] = new Date().toLocaleDateString("nl-BE",{day:"2-digit",month:"2-digit",year:"numeric"})
|
original["_TRANSLATION"]["lastedited"] = new Date().toLocaleDateString("nl-BE",{day:"2-digit",month:"2-digit",year:"numeric"})
|
||||||
original["_TRANSLATION"]["otversion"] = "v4.1.2"
|
original["_TRANSLATION"]["otversion"] = "v"+JSON.parse(fs.readFileSync("./package.json").toString()).version
|
||||||
const finalText = formatter.stringify(original)
|
const finalText = formatter.stringify(original)
|
||||||
fs.writeFileSync("./languages/"+language,finalText)
|
fs.writeFileSync("./languages/"+language,finalText)
|
||||||
}
|
}
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
# Docker File for Open Ticket
|
||||||
|
FROM node:22-alpine
|
||||||
|
|
||||||
|
# /home/container keeps Pterodactyl panel compatibility
|
||||||
|
# chown the workdir so node user can create/remove subdirectories
|
||||||
|
RUN mkdir -p /home/container && chown node:node /home/container
|
||||||
|
WORKDIR /home/container
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
COPY --chown=node:node package*.json ./
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
# Copy app source
|
||||||
|
COPY --chown=node:node . .
|
||||||
|
|
||||||
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
|
# Run as the built-in non-root node user
|
||||||
|
USER node
|
||||||
|
|
||||||
|
CMD ["node", "index.js"]
|
||||||
+1
-1
@@ -11,7 +11,7 @@
|
|||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 3, 29 June 2007
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
Copyright (C) 2026 DJdj Development. <https://www.dj-dj.be/>
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
|||||||
@@ -1,189 +1,175 @@
|
|||||||
> ### 📌 Open Ticket Quick Links
|
|
||||||
> - [⏱️ Quick Setup](#️-quick-setup-using-cli)
|
|
||||||
> - [📔 Documentation](https://otdocs.dj-dj.be)
|
|
||||||
> - [🧩 Available Plugins](#-plugins)
|
|
||||||
> - [📞 Discord Server](https://discord.dj-dj.be)
|
|
||||||
---
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket" width="650px">
|
<img src="https://apis.dj-dj.be/cdn/openticket/logo.png" alt="Open Ticket" width="650px"><br>
|
||||||
<br>Powered By<br>
|
<span align="center"><b>The most advanced self-hosted ticket bot for Discord</b></span><br>
|
||||||
<img src="https://apis.dj-dj.be/cdn/opendiscord/logo.png" alt="Open Ticket" width="170px"><br>
|
<sub align="center">Related Projects:</sub><br>
|
||||||
|
<a href="https://odplugins.dj-dj.be"><img src="https://apis.dj-dj.be/cdn/opendiscord/logo.png" alt="Open Discord" height="55px"></a><br><br>
|
||||||
<a href="https://discord.com/invite/26vT9wt3n3"><img alt="Discord Invite Link" src="https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord"></img></a>
|
<a href="https://discord.com/invite/26vT9wt3n3"><img alt="Discord Invite Link" src="https://img.shields.io/badge/discord-support%20server-5865F2.svg?style=flat-square&logo=discord"></img></a>
|
||||||
<a href="https://github.com/open-discord-bots/open-ticket/releases/tag/v4.1.2"><img alt="Open Ticket Version" src="https://img.shields.io/badge/version-4.1.2-brightgreen.svg?style=flat-square"></img></a>
|
<a href="https://github.com/open-discord-bots/open-ticket/releases/tag/v4.2.1"><img alt="Open Ticket Version" src="https://img.shields.io/badge/version-4.2.1-brightgreen.svg?style=flat-square"></img></a>
|
||||||
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Documentation" src="https://img.shields.io/badge/discord.js-v14-CB3837.svg?style=flat-square&logo=npm"></img></a>
|
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Documentation" src="https://img.shields.io/badge/discord.js-v14-CB3837.svg?style=flat-square&logo=npm"></img></a>
|
||||||
<a href="https://github.com/open-discord-bots/open-ticket/blob/main/LICENSE"><img alt="Open Ticket License" src="https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square"></img></a>
|
<a href="https://github.com/open-discord-bots/open-ticket/blob/main/LICENSE"><img alt="Open Ticket License" src="https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square"></img></a>
|
||||||
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Stars" src="https://img.shields.io/github/stars/djj123dj/open-ticket?color=yellow&label=stars&logo=github&style=flat-square"></img></a>
|
<a href="https://otdocs.dj-dj.be"><img alt="Open Ticket Stars" src="https://img.shields.io/github/stars/djj123dj/open-ticket?color=yellow&label=stars&logo=github&style=flat-square"></img></a>
|
||||||
<br>
|
|
||||||
<a href="https://github.com/sponsors/DJj123dj"><img alt="Sponsor DJj123dj" src="https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors"></img></a>
|
<a href="https://github.com/sponsors/DJj123dj"><img alt="Sponsor DJj123dj" src="https://img.shields.io/badge/sponsor-DJj123dj-ea4aaa?style=flat-square&logo=githubsponsors"></img></a>
|
||||||
<a href="https://hub.docker.com/repository/docker/djj123dj/open-ticket"><img alt="Open Ticket supports Docker!" src="https://img.shields.io/badge/docker-supported-2496ED?style=flat-square&logo=docker"></img></a>
|
<a href="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>
|
<a href=".github/pterodactyl-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 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!
|
Open Ticket is the most <b>advanced and customizable</b> Discord ticket bot available right now. It features more than <b>350+ configurable settings</b> to control almost every aspect of your ticket system.
|
||||||
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>!
|
From <code>HTML transcripts</code> and <code>Advanced Plugins</code> to <code>Claiming & Pinning</code>, <code>Modal Questions & Limits</code>, <code>Detailed Statistics</code>, and much more.
|
||||||
|
The bot is fully translated into <b>38+ languages</b> and has been battle-tested in large Discord servers. Need help or want to get involved? Feel free to join our <a href="https://discord.dj-dj.be"><b>Discord server</b></a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3 align="center"><b>⭐️ Help us grow by giving a star! ⭐️</b></h3>
|
<h3 align="center"><b>⭐️ Support Open Ticket’s growth by starring this repo! ⭐️</b></h3>
|
||||||
|
<p align="center"><sup>❤️ Love Open Ticket? <a href="https://github.com/sponsors/DJj123dj">Sponsorships</a> help fuel our HTML transcript servers and future features! ❤️</sup><br>
|
||||||
|
<img align="center" src="https://raw.githubusercontent.com/open-discord-bots/hall-of-fame/refs/heads/main/svg/SPONSORS_YELLOW.svg" alt="A list of Open Ticket Sponsors" width="800px">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
---
|
||||||
|
> **[-> Navigate to (⏱️ Quick Setup)](#️-quick-start)**
|
||||||
|
> **[-> Navigate to (📚 Documentation)](https://otdocs.dj-dj.be)**
|
||||||
|
> **[-> Navigate to (📞 Support Server)](https://discord.dj-dj.be)**
|
||||||
|
> **[-> Navigate to (🧩 Plugins/Addons)](https://odplugins.dj-dj.be)**
|
||||||
|
> **[-> Navigate to (🦇 Pterodactyl Eggs)](.github/pterodactyl-eggs/README.md)**
|
||||||
|
|
||||||
### 📌 Features
|
### 📌 Features
|
||||||
- **⏳ Quick Setup** - Using the interactive Quick Setup CLI, you can **configure Open Ticket in less than 5min!**
|
#### Core Features
|
||||||
- **🦇 Pterodactyl Support** - Open Ticket works perfect on Pterodactyl based panels. [(Download official eggs)](.eggs/README.md)
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/core-management.svg"></img> **Ticket Management** - Close, reopen, delete, claim or pin tickets with ease.
|
||||||
- **💩 No Credits** - Your bot won't contain any form of bloat or credits. It's all yours!
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/core-commands.svg"></img> **Powerful Commands** - Manage your support system with **30+ commands** for staff & users.
|
||||||
- **🔒 Private & Secure** - It has been battletested by thousands of servers and **respects security & privacy.**
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/core-questions.svg"></img> **Modal Questions** - Ask users **custom questions** before a ticket is created.
|
||||||
- **📈 Scalable** - Made to handle huge servers and has already been **tested in servers with 100k members.**
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/core-priorities.svg"></img> **Priorities** - Assign **priority levels** to tickets to highlight urgent requests.
|
||||||
- **📄 HTML Transcripts** - The **built-in HTML Transcripts Service** provides beautiful & easy-to-use transcripts.
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/core-participants.svg"></img> **Participants** - Add or remove participants & transfer ownership from one user to another.
|
||||||
- **✅ Ticket Status** - Close, reopen, delete, claim, pin, rename or move tickets in your server.
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/core-adjustments.svg"></img> **Adjustments** - Rename tickets, change ticket types or transfer ownership.
|
||||||
- **🇬🇧 Translation** - Every message has been translated in more than **36 languages** by our community.
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/core-blacklist.svg"></img> **Blacklist & Limits** - Prevent users from creating tickets and set per-user or global ticket limits.
|
||||||
- **🎨 Customisation** - More than **200+ settings** are related to customisation & advanced features.
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/core-customisable.svg"></img> **Highly Customisable** - Configure **350+ settings** covering appearance and behaviour.
|
||||||
- **🖥️ Interactions** - The bot has full support for buttons, dropdowns, slash/text commands & modals.
|
|
||||||
- **∞ Unlimited Possibilities** - Create an infinite amount of tickets, questions & panels.
|
|
||||||
- **📝 Advanced Plugins** - Create advanced plugins or use [**pre-made plugins**](#-plugins) by our community.
|
|
||||||
- **👥 Participants** - Add or remove participants & transfer ownership from one user to another.
|
|
||||||
- **📊 Detailed Statistics** - With more than **50+ statistics** for tickets, users & the server.
|
|
||||||
- **🚫 Blacklist** - Blacklist users to prevent them from creating new tickets.
|
|
||||||
- **🚨 Priorities** - Assign different **priority levels** to tickets to mark them as important.
|
|
||||||
- **❓ Modal Questions** - Give users the ability to **answer questions** in a modal before their ticket is created.
|
|
||||||
- **✨ Commands** - Manage all your tickets with more than 28+ commands.
|
|
||||||
- **🤖 Automation** - Automate ticket handling with **autoclose, autodelete** & slow mode.
|
|
||||||
- **😎 Additional Features** - For some weird reason, the bot also supports Reaction Role & URL Buttons.
|
|
||||||
|
|
||||||
#### And even more using [pre-made community plugins](#-plugins)!
|
#### Ticket Automation & Workflows
|
||||||
- **💬 Reviews** - Create & manage a support review system.
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/automation-unlimited.svg"></img> **Unlimited Possibilities** - Create unlimited tickets, panels & question flows.
|
||||||
- **📢 Feedback** - Collect feedback & create forms for users to answer.
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/automation-autoclose.svg"></img> **Autoclose Tickets** - Automatically **close tickets** after predefined conditions.
|
||||||
- **⏰ Reminders** - Create & manage customisable reminders.
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/automation-autodelete.svg"></img> **Autodelete Tickets** - Automatically **delete closed tickets** to keep channels clean.
|
||||||
- **🏷️ Tags** - Create tags & answer questions automatically using keywords.
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/automation-categories.svg"></img> **Category Routing** - Move tickets between categories based on claim or close state.
|
||||||
- **📝 Forms** - Create advanced forms and automatically ask for repetitive questions.
|
|
||||||
- **🔄 Channel Display** - Create a voice channel with realtime statistics from the ticket system.
|
|
||||||
- **💾 SQLite Database** - Use an `SQLite` database for increased performance.
|
|
||||||
- **🎉 Custom Embeds** - Create your own embeds and send them using a command.
|
|
||||||
- **🎨 Customisation** - Yep, you heard it right. Even more customisation!
|
|
||||||
- **😁 And so much more...**
|
|
||||||
|
|
||||||
> ### 📦 Resources
|
#### Transcripts & Insights
|
||||||
> These resources will help with configuration and usage of the bot:<br>
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/insights-transcripts.svg"></img> **HTML Transcripts** - Generate beautiful, easy-to-read **HTML transcripts** for every ticket.
|
||||||
> <!--<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>-->
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/insights-stats.svg"></img> **Detailed Statistics** - Track **50+ statistics** for tickets, users and server activity.
|
||||||
> <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>
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/insights-logs.svg"></img> **Ticket Logs** - Track **all ticket events** such as creation, closures, and staff actions.
|
||||||
> <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
|
#### User Experience
|
||||||
A big thanks to all our sponsors! Without them, it wouldn't be possible to create this project!
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/ux-translated.svg"></img> **Fully Translated** - Available in **38+ languages**, translated and maintained by the community.
|
||||||
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/ux-interactions.svg"></img> **Modern Interactions** - Full support for buttons, dropdowns, slash/text commands & modals.
|
||||||
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/ux-panels.svg"></img> **Panels** - Create messages with buttons or a dropdown for users to open tickets.
|
||||||
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/ux-sub-panels.svg"></img> **Sub-Panels** - One panel not enough? Use multiple panels to offer more choices.
|
||||||
|
|
||||||
<table>
|
#### Plugins & Ecosystem
|
||||||
<tr>
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/ecosystem-plugins.svg"></img> **Plugin System** - Use custom plugins to **add new features** or **modify existing behavior** of the bot.
|
||||||
<td><img src="https://github.com/guillee3.png" alt="Profile Picture" width="100px"></td>
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/ecosystem-community.svg"></img> **Community Plugins** - Use and share plugins built by the community.
|
||||||
<td><img src="https://github.com/yeeetSK.png" alt="Profile Picture" width="100px"></td>
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/ecosystem-api.svg"></img> **Advanced API** - Build advanced plugins with access to ticket events and internal systems.
|
||||||
</tr>
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/ecosystem-integrations.svg"></img> **Integrations** - Connect Open Ticket with external services to automate workflows across platforms.
|
||||||
<tr>
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/ecosystem-bonus.svg"></img> **Bonus Features** - Somehow, we included Reaction Roles and URL Button support as well.
|
||||||
<td align="center"><a href="https://github.com/guillee3"><b>guillee3</b></a></td>
|
|
||||||
<td align="center"><a href="https://github.com/yeeetSK"><b>yeeetSK</b></a></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
**Past Sponsors:**<br>
|
#### Deployment
|
||||||
<a href="https://github.com/sponsors/DJj123dj">
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/deployment-quick.svg"></img> **Quick Setup** - Easy **5-minute configuration** using the Interactive Setup CLI.
|
||||||
<img src="https://github.com/SpyEye2.png" alt="SpyEye" width="40px">
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/deployment-scale.svg"></img> **Scalable & Reliable** - Battle-tested in servers with **100k+ members**.
|
||||||
<img src="https://github.com/mods-hd.png" alt="Mods HD" width="40px">
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/deployment-secure.svg"></img> **Private & Secure** - Used by thousands of servers with respect for security & privacy.
|
||||||
<img src="https://github.com/DOSEV5.png" alt="DOSEV5" width="40px">
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/deployment-pterodactyl.svg"></img> **Pterodactyl Support** - 100% compatible with Pterodactyl panels. [(Download official eggs)](.eggs/README.md)
|
||||||
<img src="https://github.com/BENZORICH.png" alt="BENZORICH" width="40px">
|
- <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/deployment-docker.svg"></img> **Docker Support** - Deploy Open Ticket in minutes with Docker containers.
|
||||||
</a>
|
|
||||||
|
|
||||||
### ⏱️ Quick Setup (Using CLI)
|
#### Extend functionality even more with our [pre-made community plugins](https://github.com/open-discord-bots/plugins)!
|
||||||
> 1. Download the latest version of Open Ticket on [Github](https://github.com/open-discord-bots/open-ticket).
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/plugin-reviews.svg"></img> **Reviews** - Create and manage a support review system for tickets.
|
||||||
> 2. Make sure node.js & npm are installed using `node -v` (minimum `v20`).
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/plugin-tags.svg"></img> **Tags** - Define keywords that automatically trigger predefined responses.
|
||||||
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/plugin-reminders.svg"></img> **Reminders** - Create and manage custom reminders for users or staff.
|
||||||
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/plugin-ai.svg"></img> **AI Integrations** - Connect to AI providers such as ChatGPT, Claude, or Gemini.
|
||||||
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/plugin-display.svg"></img> **Channel Display** - Create voice channels that display real-time ticket system statistics.
|
||||||
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/plugin-forms.svg"></img> **Forms** - Build advanced forms for collecting structured information from users.
|
||||||
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/plugin-embeds.svg"></img> **Custom Embeds** - Create and send custom embeds via commands.
|
||||||
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/core-customisable.svg"></img> **Customization Tools** - Additional configuration options for advanced behavior and styling.
|
||||||
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/plugin-dashboard.svg"></img> **Web Dashboard** - Configure and manage the bot through a remote web dashboard.
|
||||||
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/plugin-feedback.svg"></img> **Feedback** - Collect user feedback after ticket deletion using forms.
|
||||||
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/plugin-sqlite.svg"></img> **SQLite Database** - Use an SQLite backend for improved performance and lightweight storage.
|
||||||
|
> - <img align="top" src="https://apis.dj-dj.be/cdn/openticket/readme-icons/plugin-more.svg"></img> **And more** - Additional community plugins are available and actively expanding.
|
||||||
|
|
||||||
|
## ⏱️ Quick Start
|
||||||
|
> 1. Download the [latest version of Open Ticket](https://github.com/open-discord-bots/open-ticket/releases/latest).
|
||||||
|
> 2. Make sure you have installed Node.js on your system (check using `node -v`, minimum `v20`).
|
||||||
> 3. Install any required dependencies using `npm install`.
|
> 3. Install any required dependencies using `npm install`.
|
||||||
> 4. Start the **Quick Setup CLI** using `npm run setup`.
|
> 4. Configure the bot in one of the following ways:
|
||||||
> 5. Click on `> ⏱️ Quick Setup` and follow the instructions.
|
> - Method 1 (Easy): Start the **Quick Setup CLI** using `npm run setup`.
|
||||||
|
> - Method 2 (Hard): Manual **JSON configuration** in `./config/...`
|
||||||
|
> 5. If using the **Quick Setup CLI**, click on `> ⏱️ Quick Setup` and follow the instructions.
|
||||||
> 6. Start the bot using `npm start` or `node index.js`
|
> 6. Start the bot using `npm start` or `node index.js`
|
||||||
> - The bot will let you know any existing config errors.
|
> - If any config errors occur, the bot will give you a report of how to solve them.
|
||||||
> - Fix these errors and restart the bot.
|
> - Follow the instructions and restart the bot.
|
||||||
> 7. Enjoy using Open Ticket!
|
> 7. Enjoy using Open Ticket!
|
||||||
> ### [📔 Visit Documentation](https://otdocs.dj-dj.be)
|
> 8. Install plugins from the [**Official Plugin Repository**](https://github.com/open-discord-bots/plugins)
|
||||||
>
|
>
|
||||||
> ### 🖥️ Recommended Hostings
|
> #### 🚦 Next Steps
|
||||||
|
> **[-> Navigate to (📚 Documentation)](https://otdocs.dj-dj.be)**
|
||||||
|
> **[-> Navigate to (📞 Support Server)](https://discord.dj-dj.be)**
|
||||||
|
> **[-> Navigate to (🧩 Plugins/Addons)](https://odplugins.dj-dj.be)**
|
||||||
|
> **[-> Navigate to (🦇 Pterodactyl Eggs)](.github/pterodactyl-eggs/README.md)**
|
||||||
|
>
|
||||||
|
> #### 🖥️ Recommended Hosting
|
||||||
|
> - **A VPS (Virtual Private Server)** - Extra customisation & more stability. Recommended for most servers.
|
||||||
> - **Any Pterodactyl-Based Panel** - Easy installation & configuration.
|
> - **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
|
## 📸 Previews
|
||||||
<img alt="An example of a panel." src="https://apis.dj-dj.be/cdn/openticket/preview-v4/panel-examples.png">
|
<img alt="Preview of: Advanced Ticket Management" src="https://apis.dj-dj.be/cdn/openticket/ot-previews/preview-1.png">
|
||||||
<img alt="An example of a ticket message." src="https://apis.dj-dj.be/cdn/openticket/preview-v4/ticket-example.png">
|
<img alt="Preview of: Customisable Ticket Panels" src="https://apis.dj-dj.be/cdn/openticket/ot-previews/preview-2.png">
|
||||||
<img alt="Examples of built-in commands." src="https://apis.dj-dj.be/cdn/openticket/preview-v4/command-examples.png">
|
<img alt="Preview of: Modal Questions & Forms" src="https://apis.dj-dj.be/cdn/openticket/ot-previews/preview-3.png">
|
||||||
|
<img alt="Preview of: Detailed Statistics & Insights" src="https://apis.dj-dj.be/cdn/openticket/ot-previews/preview-4.png">
|
||||||
|
<img alt="Preview of: 30+ Powerful Commands" src="https://apis.dj-dj.be/cdn/openticket/ot-previews/preview-5.png">
|
||||||
|
<img alt="Preview of: Buttons, Transcripts, Limits & More!" src="https://apis.dj-dj.be/cdn/openticket/ot-previews/preview-6.png">
|
||||||
|
|
||||||
## 🛠️ Contributors
|
## 💬 Translations
|
||||||
### 🖥️ Team & Contributors
|
With the amazing support of our translators, we've been able to translate Open Ticket in more than **38 languages**!
|
||||||
A list of people that contributed or provided the most support for Open Ticket.
|
#### Categories: 🟢 Available - 🤖 Partially Made Using AI - 🟠 Incomplete - 🔴 Unavailable/Outdated
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td align="center"><img src="https://github.com/DJj123dj.png" alt="Profile Picture" width="80px"></td>
|
|
||||||
<td align="center"><img src="https://github.com/smetsliam.png" alt="Profile Picture" width="80px"></td>
|
|
||||||
<td align="center"><img src="https://github.com/FrankVissers.png" alt="Profile Picture" width="80px"></td>
|
|
||||||
<td align="center"><img src="https://github.com/Sank34.png" alt="Profile Picture" width="80px"></td>
|
|
||||||
<td align="center"><img src="https://github.com/guillee3.png" alt="Profile Picture" width="80px"></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th><a href="https://github.com/DJj123dj">💻 DJj123dj</a></th>
|
|
||||||
<th><a href="https://github.com/smetsliam">💬 smetsliam</a></th>
|
|
||||||
<th><a href="https://github.com/FrankVissers">💬 Frank Vissers</a></th>
|
|
||||||
<th><a href="https://github.com/Sank34">💬 Sanke</a></th>
|
|
||||||
<th><a href="https://github.com/guillee3">🧩 Guillee3</a></th>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
### 💬 Translators
|
|🔍 |Languages (38) |Config Value |Maintainers (Github/Discord) |
|
||||||
With the amazing support of our translators, we've been able to translate Open Ticket in more than **36 languages**!
|
|----|----------------------|------------------------|--------------------------------|
|
||||||
#### Categories:
|
|🟢 |🇬🇧 English |`"english"` |djj123dj |
|
||||||
- **🟢 Available**
|
|🟢 |🇳🇱 Dutch |`"dutch"` |djj123dj |
|
||||||
- **⏳ In Progress (Incomplete)**
|
|🟢 |🇩🇪 German |`"german"` |benzorich |
|
||||||
- **🤖 Made Using AI**
|
|🟢 |🇫🇷 French |`"french"` |guillee.3 |
|
||||||
- **🟠 Incomplete**
|
|🟢 |🇪🇸 Spanish |`"spanish"` |Reddishye & josuens |
|
||||||
- **🔴 Unavailable/Outdated**
|
|🟢 |🇵🇹 Portuguese |`"portuguese"` |quiradon |
|
||||||
|
|🟢 |🇮🇹 Italian |`"italian"` |fraden1mvp. & imperatorix_17 |
|
||||||
|🔍 |Languages (36) |Maintainer (Github/Discord) |
|
|🟢 |🇸🇪 Swedish |`"swedish"` |NoOneNook |
|
||||||
|----|---------------------|--------------------------------|
|
|🟢 |🇳🇴 Norwegian |`"norwegian"` |NoOneNook |
|
||||||
|🟢 |🇬🇧 English |djj123dj |
|
|🟢 |🇹🇭 Thai |`"thai"` |modshd |
|
||||||
|🟢 |🇳🇱 Dutch |djj123dj |
|
|🟢 |🇮🇳 Hindi |`"hindi"` |challenger_nova |
|
||||||
|🟢 |❓ Catalan |guillee3 |
|
|🟢 |🇭🇺 Hungarian |`"hungarian"` |kornel0706 |
|
||||||
|🟢 |🇮🇩 Indonesian |erxg |
|
|🟢 |🇮🇩 Indonesian |`"indonesian"` |erxg |
|
||||||
|🟢 |🇮🇳 Hindi |challenger_nova |
|
|🟢 |🇱🇹 Lithuanian |`"lithuanian"` |tsgindrius |
|
||||||
|🟢 |🇩🇪 German |benzorich |
|
|🟢 |🇺🇦 Ukrainian |`"ukrainian"` |anderskiy |
|
||||||
|🟢⏳ |🇪🇸 Spanish |redactado & josuens |
|
|🟢 |🇨🇿 Czech |`"czech"` |spyeye_ |
|
||||||
|🟢⏳ |🇫🇷 French |guillee.3 |
|
|🟢 |🇷🇴 Romanian |`"romanian"` |sankedev |
|
||||||
|🟢⏳ |🇵🇹 Portuguese |quiradon |
|
|🟢 |🇩🇰 Danish |`"danish"` |the_gamer |
|
||||||
|🟢⏳ |🇨🇿 Czech |spyeye_ |
|
|🟢 |🇹🇷 Turkish |`"turkish"` |palestinian |
|
||||||
|🟢⏳ |🇭🇺 Hungarian |kornel0706 |
|
|🟢 |🇦🇪 Arabic |`"arabic"` |palestinian |
|
||||||
|🟢⏳ |🇷🇴 Romanian |sankedev |
|
|🟢 |🇵🇱 Polish |`"polish"` |danoglez |
|
||||||
|🟢⏳ |🇺🇦 Ukrainian |anderskiy |
|
|🟢 |🇮🇷 Persian |`"persian"` |dysashop & zhavis |
|
||||||
|🟢⏳ |🇮🇹 Italian |fraden1mvp. |
|
|🟢 |🇧🇩 Bengali |`"bengali"` |HanumeshGupta |
|
||||||
|🟢⏳ |🇩🇰 Danish |the_gamer |
|
|🟢 |❓ Catalan |`"catalan"` |guillee3 |
|
||||||
|🟢⏳ |🇹🇭 Thai |modshd |
|
|🟢 |🇨🇳 Traditional Chinese|`"traditional-chinese"` |me.october |
|
||||||
|🟢⏳ |🇹🇷 Turkish |palestinian |
|
|🟢 |🇰🇭 Khmer (Cambodia) |`"khmer"` |yuuslokrobjakkroval |
|
||||||
|🟢⏳ |🇦🇪 Arabic |palestinian |
|
|🤖 |🇪🇪 Estonian |`"estonian"` |iamnotmega |
|
||||||
|🟢⏳ |🇱🇹 Lithuanian |tsgindrius |
|
|🤖 |🇫🇮 Finnish |`"finnish"` |iamnotmega |
|
||||||
|🟢⏳ |🇵🇱 Polish |danoglez |
|
|🤖 |🇯🇵 Japanese |`"japanese"` |HanumeshGupta |
|
||||||
|🟢⏳ |🇳🇴 Norwegian |NoOneNook |
|
|🤖 |🇬🇷 Greek |`"greek"` |HanumeshGupta |
|
||||||
|🟢⏳ |🇸🇪 Swedish |NoOneNook |
|
|🤖 |🇸🇮 Slovenian |`"slovenian"` |HanumeshGupta |
|
||||||
|🟢⏳ |🇮🇷 Persian |dysashop & zhavis |
|
|🤖 |🇰🇷 Korean |`"korean"` |HanumeshGupta |
|
||||||
|🟢⏳ |🇧🇩 Bengali |HanumeshGupta |
|
|🤖 |🇮🇳 Tamil |`"tamil"` |HanumeshGupta |
|
||||||
|🤖 |🇪🇪 Estonian |iamnotmega |
|
|🤖 |❓ Kurdish |`"kurdish"` |HanumeshGupta |
|
||||||
|🤖 |🇫🇮 Finnish |iamnotmega |
|
|🤖 |🇷🇺 Russian |`"russian"` |NoOneNook |
|
||||||
|🤖 |🇯🇵 Japanese |HanumeshGupta |
|
|🤖 |🇱🇻 Latvian |`"latvian"` |NoOneNook |
|
||||||
|🤖 |🇬🇷 Greek |HanumeshGupta |
|
|🤖 |🇻🇳 Vietnamese |`"vietnamese"` |ngocdiep2006 |
|
||||||
|🤖 |🇸🇮 Slovenian |HanumeshGupta |
|
|🤖 |🇨🇳 Simplified Chinese |`"simplified-chinese"` |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) -->
|
<!--[⭐ Contribute!](.github/CONTRIBUTING.md) -->
|
||||||
|
|
||||||
|
## 😎 Hall Of Fame
|
||||||
|
<img alt="The full list of contributors for Open Ticket and Open Discord." src="https://raw.githubusercontent.com/open-discord-bots/hall-of-fame/refs/heads/main/svg/CONTRIBUTORS.svg">
|
||||||
|
|
||||||
## ⭐️ Star History
|
## ⭐️ Star History
|
||||||
If you enjoy using Open ticket, **consider starring** this repository.
|
If you enjoy using Open ticket, **consider starring** our repository.
|
||||||
This will help us grow and reach even more people!
|
This will help us grow and reach even more people!
|
||||||
|
|
||||||
<a href="https://star-history.com/#open-discord-bots/open-ticket&Date">
|
<a href="https://star-history.com/#open-discord-bots/open-ticket&Date">
|
||||||
@@ -194,64 +180,6 @@ This will help us grow and reach even more people!
|
|||||||
</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">
|
||||||
|
|
||||||
|
|||||||
@@ -1,125 +0,0 @@
|
|||||||
{
|
|
||||||
"_INFO":{
|
|
||||||
"support":"https://otdocs.dj-dj.be",
|
|
||||||
"discord":"https://discord.dj-dj.be",
|
|
||||||
"version":"open-ticket-v4.1.2"
|
|
||||||
},
|
|
||||||
|
|
||||||
"token":"insert your bot token here! (or leave empty when using 'tokenFromENV')",
|
|
||||||
"tokenFromENV":false,
|
|
||||||
|
|
||||||
"mainColor":"#f8ba00",
|
|
||||||
"language":"english",
|
|
||||||
"prefix":"!ticket ",
|
|
||||||
"serverId":"discord server id",
|
|
||||||
"globalAdmins":["discord role id"],
|
|
||||||
|
|
||||||
"slashCommands":true,
|
|
||||||
"textCommands":true,
|
|
||||||
|
|
||||||
"status":{
|
|
||||||
"enabled":true,
|
|
||||||
"type":"listening OR watching OR playing OR custom",
|
|
||||||
"mode":"online OR invisible OR idle OR dnd",
|
|
||||||
"text":"/help",
|
|
||||||
"state":"(additional text or leave empty)"
|
|
||||||
},
|
|
||||||
|
|
||||||
"system":{
|
|
||||||
"preferSlashOverText":true,
|
|
||||||
"sendErrorOnUnknownCommand":true,
|
|
||||||
"questionFieldsInCodeBlock":true,
|
|
||||||
"displayFieldsWithQuestions":false,
|
|
||||||
"showGlobalAdminsInPanelRoles":false,
|
|
||||||
"disableVerifyBars":false,
|
|
||||||
"useRedErrorEmbeds":true,
|
|
||||||
"alwaysShowReason":false,
|
|
||||||
"emojiStyle":"before (OR after OR double OR disabled)",
|
|
||||||
"pinEmoji":"📌",
|
|
||||||
|
|
||||||
"replyOnTicketCreation":true,
|
|
||||||
"replyOnReactionRole":true,
|
|
||||||
"askPriorityOnTicketCreation":false,
|
|
||||||
"removeParticipantsOnClose":false,
|
|
||||||
"disableAutocloseAfterReopen":true,
|
|
||||||
"autodeleteRequiresClosedTicket":true,
|
|
||||||
"adminOnlyDeleteWithoutTranscript":true,
|
|
||||||
"allowCloseBeforeMessage":false,
|
|
||||||
"allowCloseBeforeAdminMessage":true,
|
|
||||||
"useTranslatedConfigChecker":true,
|
|
||||||
"pinFirstTicketMessage":false,
|
|
||||||
|
|
||||||
"enableTicketClaimButtons":true,
|
|
||||||
"enableTicketCloseButtons":true,
|
|
||||||
"enableTicketPinButtons":true,
|
|
||||||
"enableTicketDeleteButtons":true,
|
|
||||||
"enableTicketActionWithReason":true,
|
|
||||||
"enableDeleteWithoutTranscript":true,
|
|
||||||
|
|
||||||
"logs":{
|
|
||||||
"enabled":false,
|
|
||||||
"channel":"discord channel id"
|
|
||||||
},
|
|
||||||
|
|
||||||
"limits":{
|
|
||||||
"enabled":true,
|
|
||||||
"globalMaximum":50,
|
|
||||||
"userMaximum":3
|
|
||||||
},
|
|
||||||
|
|
||||||
"channelTopic":{
|
|
||||||
"showOptionName":true,
|
|
||||||
"showOptionDescription":false,
|
|
||||||
"showOptionTopic":true,
|
|
||||||
"showPriority":false,
|
|
||||||
"showClosed":true,
|
|
||||||
"showClaimed":false,
|
|
||||||
"showPinned":false,
|
|
||||||
"showCreator":false,
|
|
||||||
"showParticipants":false
|
|
||||||
},
|
|
||||||
|
|
||||||
"permissions":{
|
|
||||||
"help":"everyone (OR admin OR none OR role id)",
|
|
||||||
"panel":"admin (OR everyone OR none OR role id)",
|
|
||||||
"ticket":"none (OR admin OR everyone OR role id)",
|
|
||||||
"close":"everyone (OR admin OR none OR role id)",
|
|
||||||
"delete":"admin (OR everyone OR none OR role id)",
|
|
||||||
"reopen":"everyone (OR admin OR none OR role id)",
|
|
||||||
"claim":"admin (OR everyone OR none OR role id)",
|
|
||||||
"unclaim":"admin (OR everyone OR none OR role id)",
|
|
||||||
"pin":"admin (OR everyone OR none OR role id)",
|
|
||||||
"unpin":"admin (OR everyone OR none OR role id)",
|
|
||||||
"move":"admin (OR everyone OR none OR role id)",
|
|
||||||
"rename":"admin (OR everyone OR none OR role id)",
|
|
||||||
"add":"admin (OR everyone OR none OR role id)",
|
|
||||||
"remove":"admin (OR everyone OR none OR role id)",
|
|
||||||
"blacklist":"admin (OR everyone OR none OR role id)",
|
|
||||||
"stats":"everyone (OR admin OR none OR role id)",
|
|
||||||
"clear":"admin (OR everyone OR none OR role id)",
|
|
||||||
"autoclose":"admin (OR everyone OR none OR role id)",
|
|
||||||
"autodelete":"admin (OR everyone OR none OR role id)",
|
|
||||||
"transfer":"admin (OR everyone OR none OR role id)",
|
|
||||||
"topic":"admin (OR everyone OR none OR role id)",
|
|
||||||
"priority":"admin (OR everyone OR none OR role id)"
|
|
||||||
},
|
|
||||||
|
|
||||||
"messages":{
|
|
||||||
"creation":{"dm":false,"logs":true},
|
|
||||||
"closing":{"dm":false,"logs":true},
|
|
||||||
"deleting":{"dm":false,"logs":true},
|
|
||||||
"reopening":{"dm":false,"logs":true},
|
|
||||||
"claiming":{"dm":false,"logs":true},
|
|
||||||
"pinning":{"dm":false,"logs":true},
|
|
||||||
"adding":{"dm":false,"logs":true},
|
|
||||||
"removing":{"dm":false,"logs":true},
|
|
||||||
"renaming":{"dm":false,"logs":true},
|
|
||||||
"moving":{"dm":false,"logs":true},
|
|
||||||
"blacklisting":{"dm":false,"logs":true},
|
|
||||||
"transferring":{"dm":false,"logs":true},
|
|
||||||
"topicChange":{"dm":false,"logs":true},
|
|
||||||
"priorityChange":{"dm":false,"logs":true},
|
|
||||||
"reactionRole":{"dm":false,"logs":true}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,175 @@
|
|||||||
|
/*
|
||||||
|
* Hi there! Thank you for installing Open Ticket.
|
||||||
|
* ----------------------------------------------
|
||||||
|
* If you need any assistance with configuring the bot,
|
||||||
|
* feel free to use the documentation or join our Discord server:
|
||||||
|
* https://otdocs.dj-dj.be
|
||||||
|
* https://discord.dj-dj.be
|
||||||
|
* ----------------------------------------------
|
||||||
|
* SETUP:
|
||||||
|
* 1. Install the required dependencies using the command: "npm install"
|
||||||
|
* 2. Configure the bot in one of the following ways:
|
||||||
|
* a. (easy) Using the Quick Setup CLI Tool
|
||||||
|
* b. (difficult) Using the JSON files in `./config/`
|
||||||
|
*
|
||||||
|
* Start the Quick Setup CLI Tool using the command: "npm run setup"
|
||||||
|
* After configuration, start the bot using the command: "npm start"
|
||||||
|
*
|
||||||
|
* Good luck! DJj123dj & contributors
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"_CONFIG_VERSION":"open-ticket-v4.2.1",
|
||||||
|
|
||||||
|
/* Load the bot token from .env or the "token" field below. Leave "token" empty if using "tokenFromENV". */
|
||||||
|
"token":"INSERT_BOT_TOKEN",
|
||||||
|
"tokenFromENV":false,
|
||||||
|
|
||||||
|
"mainColor":"#f8ba00", //Hex color used in most embeds
|
||||||
|
"language":"english", //Visit README.md for list
|
||||||
|
"prefix":"!ticket ", //Prefix used in text commands
|
||||||
|
"serverId":"DISCORD_SERVER_ID",
|
||||||
|
"globalAdmins":["DISCORD_ROLE_ID"], //Have access to all commands
|
||||||
|
|
||||||
|
/* Enable/disable text or slash commands. */
|
||||||
|
"slashCommands":true,
|
||||||
|
"textCommands":true,
|
||||||
|
|
||||||
|
/* Configure the status of the bot. */
|
||||||
|
"status":{
|
||||||
|
"enabled":true,
|
||||||
|
"type":"listening", //Choices: listening, watching, playing, custom
|
||||||
|
"mode":"online", //Choices: online, invisible, idle, dnd
|
||||||
|
"text":"/help",
|
||||||
|
"state":"" //Additional text (Leave empty to disable)
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Send ticket logs to a channel or in DM of the ticket creator. */
|
||||||
|
"logs":{
|
||||||
|
"enabled":false,
|
||||||
|
"channel":"DISCORD_CHANNEL_ID",
|
||||||
|
"logMessages":{
|
||||||
|
"creation":{"dm":false,"logs":true},
|
||||||
|
"closing":{"dm":false,"logs":true},
|
||||||
|
"deleting":{"dm":false,"logs":true},
|
||||||
|
"reopening":{"dm":false,"logs":true},
|
||||||
|
"claiming":{"dm":false,"logs":true},
|
||||||
|
"pinning":{"dm":false,"logs":true},
|
||||||
|
"adding":{"dm":false,"logs":true},
|
||||||
|
"removing":{"dm":false,"logs":true},
|
||||||
|
"renaming":{"dm":false,"logs":true},
|
||||||
|
"moving":{"dm":false,"logs":true},
|
||||||
|
"blacklisting":{"dm":false,"logs":true},
|
||||||
|
"transferring":{"dm":false,"logs":true},
|
||||||
|
"topicChange":{"dm":false,"logs":true},
|
||||||
|
"priorityChange":{"dm":false,"logs":true},
|
||||||
|
"reactionRole":{"dm":false,"logs":true}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* A large collection of settings for the ticket system. */
|
||||||
|
"ticketSystem":{
|
||||||
|
"preferSlashOverText":true, //Show slashcmds in help menu's
|
||||||
|
"sendErrorOnUnknownCommand":true, //Send error when command not found
|
||||||
|
"questionFieldsInCodeBlock":true, //Put question answers in code blocks
|
||||||
|
"displayFieldsWithQuestions":false, //Display embed fields together with question answers
|
||||||
|
"showGlobalAdminsInPanelRoles":false, //Include "globalAdmins" in panel admin lists
|
||||||
|
"disableVerifyBars":false, //Disable the (❌/✅) buttons
|
||||||
|
"useRedErrorEmbeds":true, //Make errors embeds always red
|
||||||
|
"alwaysShowReason":false, //Show reason even if none is provided
|
||||||
|
"emojiStyle":"before", //The style of emoji's in embeds. Choices: before, after, double, disabled
|
||||||
|
"pinEmoji":"📌", //Channel emoji of pinned tickets (Leave empty to disable)
|
||||||
|
"closeEmoji":"", //Channel emoji of closed tickets (Leave empty to disable)
|
||||||
|
|
||||||
|
"replyOnTicketCreation":true, //Reply with a msg when a ticket is created
|
||||||
|
"replyOnReactionRole":true, //Reply with a msg when a reaction role is used
|
||||||
|
"askPriorityOnTicketCreation":true, //Show a dropdown to select priority
|
||||||
|
"removeParticipantsOnClose":false, //Remove non-admins when ticket is closed
|
||||||
|
"disableAutocloseAfterReopen":true, //Disable autoclose after ticket got reopened
|
||||||
|
"autodeleteRequiresClosedTicket":true, //A ticket must be closed before autodelete works
|
||||||
|
"adminOnlyDeleteWithoutTranscript":true, //Only allow "globalAdmins" to delete a ticket without transcript
|
||||||
|
"allowCloseBeforeMessage":false, //Allow closing before a message is sent
|
||||||
|
"allowCloseBeforeAdminMessage":true, //Allow closing before an admin has sent a message
|
||||||
|
"useTranslatedConfigChecker":true, //Translate config errors in the console
|
||||||
|
"pinFirstTicketMessage":true, //Pin the ticket message to the channel
|
||||||
|
|
||||||
|
/* Enable/disable certain buttons & features of the bot. */
|
||||||
|
"enableTicketClaimButtons":true,
|
||||||
|
"enableTicketCloseButtons":true,
|
||||||
|
"enableTicketPinButtons":true,
|
||||||
|
"enableTicketDeleteButtons":true,
|
||||||
|
"enableTicketActionWithReason":true,
|
||||||
|
"enableDeleteWithoutTranscript":true, //Allow deleting tickets without transcript
|
||||||
|
"enableCreateTicketForOtherUser":true, //Allow creating tickets for other users
|
||||||
|
|
||||||
|
/* Set the maximum amount of simultaneous tickets. */
|
||||||
|
"limits":{
|
||||||
|
"enabled":true,
|
||||||
|
"globalMaximum":50,
|
||||||
|
"userMaximum":3
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Choose which data is shown in the channel topic. */
|
||||||
|
"channelTopic":{
|
||||||
|
"showOptionName":true,
|
||||||
|
"showOptionDescription":false,
|
||||||
|
"showOptionTopic":true,
|
||||||
|
"showPriority":false,
|
||||||
|
"showClosed":true,
|
||||||
|
"showClaimed":false,
|
||||||
|
"showPinned":false,
|
||||||
|
"showCreator":false,
|
||||||
|
"showParticipants":false
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Move closed tickets to a separate category. */
|
||||||
|
"closedCategory":{
|
||||||
|
"enabled":false,
|
||||||
|
"categoryId":"DISCORD_CATEGORY_ID"
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Create tickets in a backup category when the original category exceeds 50 channels. */
|
||||||
|
"backupCategory":{
|
||||||
|
"enabled":false,
|
||||||
|
"categoryId":"DISCORD_CATEGORY_ID"
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Move claimed tickets to a matching category of the user that claimed the ticket. Set to empty list [] to disable. */
|
||||||
|
"claimedCategories":[
|
||||||
|
{"user":"DISCORD_USER_ID","category":"DISCORD_CATEGORY_ID"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set permissions for each individual command, button or action.
|
||||||
|
* CHOICES:
|
||||||
|
* >> "none" -> Command disabled
|
||||||
|
* >> "everyone" -> Allowed for everyone
|
||||||
|
* >> "admin" -> Global & ticket admins only
|
||||||
|
* >> "DISCORD_ROLE_ID" -> Custom role only
|
||||||
|
*/
|
||||||
|
"permissions":{
|
||||||
|
"help":"everyone",
|
||||||
|
"panel":"admin",
|
||||||
|
"ticket":"none",
|
||||||
|
"close":"everyone",
|
||||||
|
"delete":"admin",
|
||||||
|
"reopen":"everyone",
|
||||||
|
"claim":"admin",
|
||||||
|
"unclaim":"admin",
|
||||||
|
"pin":"admin",
|
||||||
|
"unpin":"admin",
|
||||||
|
"move":"admin",
|
||||||
|
"rename":"admin",
|
||||||
|
"add":"admin",
|
||||||
|
"remove":"admin",
|
||||||
|
"blacklist":"admin",
|
||||||
|
"stats":"everyone",
|
||||||
|
"clear":"admin",
|
||||||
|
"autoclose":"admin",
|
||||||
|
"autodelete":"admin",
|
||||||
|
"transfer":"admin",
|
||||||
|
"topic":"admin",
|
||||||
|
"priority":"admin",
|
||||||
|
"transcripts":"admin"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id":"example-ticket",
|
|
||||||
"name":"Question",
|
|
||||||
"description":"Create this ticket if you have a question! (or leave empty)",
|
|
||||||
"type":"ticket",
|
|
||||||
|
|
||||||
"button":{
|
|
||||||
"emoji":"🎫 (or leave empty)",
|
|
||||||
"label":"question (or leave empty)",
|
|
||||||
"color":"gray OR red OR green OR blue"
|
|
||||||
},
|
|
||||||
|
|
||||||
"ticketAdmins":["discord role id"],
|
|
||||||
"readonlyAdmins":["discord role id"],
|
|
||||||
"allowCreationByBlacklistedUsers":false,
|
|
||||||
"questions":["example-question-1","example-question-2"],
|
|
||||||
|
|
||||||
"channel":{
|
|
||||||
"prefix":"question-",
|
|
||||||
"suffix":"user-name OR user-id OR random-number OR random-hex OR counter-dynamic OR counter-fixed",
|
|
||||||
"category":"category id (or leave empty)",
|
|
||||||
"closedCategory":"category id (or leave empty)",
|
|
||||||
"backupCategory":"category id (or leave empty)",
|
|
||||||
"claimedCategory":[
|
|
||||||
{"user":"user id","category":"category id"}
|
|
||||||
],
|
|
||||||
"topic":"This is the topic of this ticket channel and is visible to everyone! (or leave empty)"
|
|
||||||
},
|
|
||||||
|
|
||||||
"dmMessage":{
|
|
||||||
"enabled":false,
|
|
||||||
"text":"Thank you for creating a ticket in our server! (or leave empty)",
|
|
||||||
"embed":{
|
|
||||||
"enabled":false,
|
|
||||||
"title":"Embed Title! (or leave empty)",
|
|
||||||
"description":"Description (or leave empty)",
|
|
||||||
"customColor":"#f8ab00 (or leave empty)",
|
|
||||||
|
|
||||||
"image":"https://www.example.com/image.png (or leave empty)",
|
|
||||||
"thumbnail":"https://www.example.com/image.png (or leave empty)",
|
|
||||||
"fields":[
|
|
||||||
{"name":"field name","value":"field value","inline":false}
|
|
||||||
],
|
|
||||||
"timestamp":false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ticketMessage":{
|
|
||||||
"enabled":true,
|
|
||||||
"text":"",
|
|
||||||
"embed":{
|
|
||||||
"enabled":true,
|
|
||||||
"title":"Question Ticket",
|
|
||||||
"description":"Thank you for creating a 'Question' ticket in our server!\nOur support team will help you as soon as possible!",
|
|
||||||
"customColor":"#f8ab00 (or leave empty)",
|
|
||||||
|
|
||||||
"image":"https://www.example.com/image.png (or leave empty)",
|
|
||||||
"thumbnail":"https://www.example.com/image.png (or leave empty)",
|
|
||||||
"fields":[
|
|
||||||
{"name":"field name","value":"field value","inline":false}
|
|
||||||
],
|
|
||||||
"timestamp":false
|
|
||||||
},
|
|
||||||
"ping":{
|
|
||||||
"@here":true,
|
|
||||||
"@everyone":false,
|
|
||||||
"custom":["discord role id"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoclose":{
|
|
||||||
"enableInactiveHours":false,
|
|
||||||
"inactiveHours":24,
|
|
||||||
"enableUserLeave":false,
|
|
||||||
"disableOnClaim":false
|
|
||||||
},
|
|
||||||
"autodelete":{
|
|
||||||
"enableInactiveDays":false,
|
|
||||||
"inactiveDays":7,
|
|
||||||
"enableUserLeave":false,
|
|
||||||
"disableOnClaim":false
|
|
||||||
},
|
|
||||||
"cooldown":{
|
|
||||||
"enabled":false,
|
|
||||||
"cooldownMinutes":10
|
|
||||||
},
|
|
||||||
"limits":{
|
|
||||||
"enabled":false,
|
|
||||||
"globalMaximum":20,
|
|
||||||
"userMaximum":3
|
|
||||||
},
|
|
||||||
"slowMode":{
|
|
||||||
"enabled":false,
|
|
||||||
"slowModeSeconds":20
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id":"example-website",
|
|
||||||
"name":"Website",
|
|
||||||
"description":"Go to our website.",
|
|
||||||
"type":"website",
|
|
||||||
|
|
||||||
"button":{
|
|
||||||
"emoji":"😃",
|
|
||||||
"label":"Visit our website"
|
|
||||||
},
|
|
||||||
|
|
||||||
"url":"https://www.dj-dj.be"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id":"example-role",
|
|
||||||
"name":"Update Ping",
|
|
||||||
"description":"Click here to get notified on updates!",
|
|
||||||
"type":"role",
|
|
||||||
|
|
||||||
"button":{
|
|
||||||
"emoji":"📢",
|
|
||||||
"label":"Update Ping",
|
|
||||||
"color":"gray OR red OR green OR blue"
|
|
||||||
},
|
|
||||||
|
|
||||||
"roles":["discord role id"],
|
|
||||||
"mode":"add&remove OR remove OR add",
|
|
||||||
"removeRolesOnAdd":["discord role id"],
|
|
||||||
"addOnMemberJoin":false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -0,0 +1,165 @@
|
|||||||
|
/*
|
||||||
|
* OPEN TICKET BUTTON OPTIONS
|
||||||
|
* ----------------------------------------------
|
||||||
|
* Create customizable ticket, website, reaction-role or sub-panel button options.
|
||||||
|
* Up to 25 options can be added to each panel in (config/panels.jsonc)
|
||||||
|
* There are 4 types of options available: ticket, website, role, sub-panel
|
||||||
|
*
|
||||||
|
* TIP: Create new options by copying everything between and including the {...} brackets of an option. Paste it after the last option and make sure that they are seperated by a comma.
|
||||||
|
*/
|
||||||
|
[
|
||||||
|
{
|
||||||
|
/* A ticket option creates a button to open a ticket. */
|
||||||
|
"id":"example-ticket",
|
||||||
|
"name":"Question",
|
||||||
|
"description":"Want to tell us something? Create this ticket for general questions for our support team.", //Leave empty to disable
|
||||||
|
"type":"ticket",
|
||||||
|
|
||||||
|
"button":{
|
||||||
|
/* Configure the button style of this option. At least one of "emoji" or "label" must be provided. */
|
||||||
|
"emoji":"🎫",
|
||||||
|
"label":"Question",
|
||||||
|
"color":"gray" //Choices: gray, red, green, blue
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Add up to 5 modal questions IDs from (config/questions.jsonc). */
|
||||||
|
"questions":["example-question-1","example-question-2"],
|
||||||
|
|
||||||
|
"ticketAdmins":["DISCORD_ROLE_ID"],
|
||||||
|
"readonlyAdmins":["DISCORD_ROLE_ID"],
|
||||||
|
"allowCreationByBlacklistedUsers":false,
|
||||||
|
|
||||||
|
"channel":{
|
||||||
|
/* Configure the name, topic and category of the ticket option. */
|
||||||
|
"prefix":"question-",
|
||||||
|
"suffix":"user-name", //Choices: user-name, user-id, random-number, random-hex, counter-dynamic, counter-fixed
|
||||||
|
"category":"DISCORD_CATEGORY_ID", //Leave empty to disable
|
||||||
|
"topic":"The ticket topic shown in the channel." //Leave empty to disable
|
||||||
|
},
|
||||||
|
|
||||||
|
"dmMessage":{
|
||||||
|
/* Send a customisable message in DM when creating a ticket. */
|
||||||
|
"enabled":false,
|
||||||
|
"text":"", //Leave empty to disable
|
||||||
|
"embed":{
|
||||||
|
"enabled":false,
|
||||||
|
"title":"Question Ticket", //Leave empty to disable
|
||||||
|
"description":"Thank you for creating a ticket in our server. We will try to help you as soon as possible.", //Leave empty to disable
|
||||||
|
"customColor":"#f8ab00", //Leave empty to use default color
|
||||||
|
|
||||||
|
"image":"", //Image URL. Leave empty to disable
|
||||||
|
"thumbnail":"", //Image URL. Leave empty to disable
|
||||||
|
/* Embed fields. Set to empty list [] to disable. */
|
||||||
|
"fields":[
|
||||||
|
{"name":"FIELD_NAME","value":"FIELD_VALUE","inline":false}
|
||||||
|
],
|
||||||
|
"timestamp":false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ticketMessage":{
|
||||||
|
/* Send a customisable message in the ticket with close, claim, delete, ... buttons. */
|
||||||
|
"enabled":true,
|
||||||
|
"text":"", //Leave empty to disable
|
||||||
|
"embed":{
|
||||||
|
"enabled":true,
|
||||||
|
"title":"Question Ticket", //Leave empty to disable
|
||||||
|
"description":"Thank you for creating a ticket in our server.\nOur support team will assist you as soon as possible.", //Leave empty to disable
|
||||||
|
"customColor":"#f8ab00", //Leave empty to use default color
|
||||||
|
|
||||||
|
"image":"", //Image URL. Leave empty to disable
|
||||||
|
"thumbnail":"", //Image URL. Leave empty to disable
|
||||||
|
/* Embed fields. Set to empty list [] to disable. */
|
||||||
|
"fields":[
|
||||||
|
{"name":"FIELD_NAME","value":"FIELD_VALUE","inline":false}
|
||||||
|
],
|
||||||
|
"timestamp":false
|
||||||
|
},
|
||||||
|
"ping":{
|
||||||
|
/* Customise the user & role mentions of this ticket message. */
|
||||||
|
"@here":true,
|
||||||
|
"@everyone":false,
|
||||||
|
"custom":["DISCORD_ROLE_ID"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoclose":{
|
||||||
|
/* Autoclose this ticket after a period of inactivity or when the creator leaves the server. */
|
||||||
|
"enableInactiveHours":false,
|
||||||
|
"inactiveHours":24,
|
||||||
|
"enableUserLeave":false,
|
||||||
|
"disableOnClaim":false
|
||||||
|
},
|
||||||
|
"autodelete":{
|
||||||
|
/* Autodelete this ticket after a period of inactivity or when the creator leaves the server. */
|
||||||
|
"enableInactiveDays":false,
|
||||||
|
"inactiveDays":7,
|
||||||
|
"enableUserLeave":false,
|
||||||
|
"disableOnClaim":false
|
||||||
|
},
|
||||||
|
"cooldown":{
|
||||||
|
/* Users must wait a certain period before being able to create another ticket of this type. */
|
||||||
|
"enabled":false,
|
||||||
|
"cooldownMinutes":10
|
||||||
|
},
|
||||||
|
"limits":{
|
||||||
|
/* Set the maximum amount of simultaneous tickets of this option. */
|
||||||
|
"enabled":false,
|
||||||
|
"globalMaximum":20,
|
||||||
|
"userMaximum":3
|
||||||
|
},
|
||||||
|
"slowMode":{
|
||||||
|
/* Enable slow-mode in the ticket channel. */
|
||||||
|
"enabled":false,
|
||||||
|
"slowModeSeconds":20
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/* A website option creates a button with a URL to an external website. */
|
||||||
|
"id":"example-website",
|
||||||
|
"name":"Website",
|
||||||
|
"description":"Take a look at our amazing website.", //Leave empty to disable
|
||||||
|
"type":"website",
|
||||||
|
|
||||||
|
"button":{
|
||||||
|
/* Configure the button style of this option. At least one of "emoji" or "label" must be provided. */
|
||||||
|
"emoji":"😃",
|
||||||
|
"label":"Visit Website"
|
||||||
|
},
|
||||||
|
|
||||||
|
"url":"https://www.dj-dj.be"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/* A reaction-role option creates a button for members to choose roles. */
|
||||||
|
"id":"example-role",
|
||||||
|
"name":"Update Ping",
|
||||||
|
"description":"Receive notifications about updates in our server.", //Leave empty to disable
|
||||||
|
"type":"role",
|
||||||
|
|
||||||
|
"button":{
|
||||||
|
/* Configure the button style of this option. At least one of "emoji" or "label" must be provided. */
|
||||||
|
"emoji":"📢",
|
||||||
|
"label":"Update Ping",
|
||||||
|
"color":"gray" //Choices: gray, red, green, blue
|
||||||
|
},
|
||||||
|
|
||||||
|
"roles":["DISCORD_ROLE_ID"],
|
||||||
|
"mode":"add&remove OR remove OR add", //What to do with the roles. Choices: add&remove, add, remove
|
||||||
|
"removeRolesOnAdd":["DISCORD_ROLE_ID"], //Remove these old roles when new roles are added.
|
||||||
|
"addOnMemberJoin":false //Add these roles automatically when joining the server.
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/* A sub-panel option creates a button which sends another panel for additional options. */
|
||||||
|
"id":"example-sub-panel",
|
||||||
|
"name":"Example Sub-Panel",
|
||||||
|
"description":"This is an example of how to implement a sub-panel in Open Ticket.", //Leave empty to disable
|
||||||
|
"type":"sub-panel",
|
||||||
|
|
||||||
|
"button":{
|
||||||
|
/* Configure the button style of this option. At least one of "emoji" or "label" must be provided. */
|
||||||
|
"emoji":"📋",
|
||||||
|
"label":"Sub-Panel Example",
|
||||||
|
"color":"gray" //Choices: gray, red, green, blue
|
||||||
|
},
|
||||||
|
|
||||||
|
"subPanelId":"example-panel" //Choose a panel ID from (config/panels.jsonc)
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id":"example-embed",
|
|
||||||
"name":"Example Embed",
|
|
||||||
"dropdown":false,
|
|
||||||
"options":["example-ticket","example-website","example-role"],
|
|
||||||
|
|
||||||
"text":"",
|
|
||||||
"embed":{
|
|
||||||
"enabled":true,
|
|
||||||
"title":"Tickets:",
|
|
||||||
"description":"Create a ticket by clicking one of the buttons below!",
|
|
||||||
|
|
||||||
"customColor":"#f8ab00 (or leave empty)",
|
|
||||||
"url":"https://openticket.dj-dj.be (or leave empty)",
|
|
||||||
|
|
||||||
"image":"https://www.example.com/image.png (or leave empty)",
|
|
||||||
"thumbnail":"https://www.example.com/image.png (or leave empty)",
|
|
||||||
|
|
||||||
"footer":"Open Ticket v4.1.2 (or leave empty)",
|
|
||||||
"fields":[
|
|
||||||
{"name":"field name","value":"field value","inline":false}
|
|
||||||
],
|
|
||||||
"timestamp":false
|
|
||||||
},
|
|
||||||
"settings":{
|
|
||||||
"dropdownPlaceholder":"Create a ticket!",
|
|
||||||
|
|
||||||
"enableMaxTicketsWarningInText":false,
|
|
||||||
"enableMaxTicketsWarningInEmbed":true,
|
|
||||||
|
|
||||||
"describeOptionsLayout":"simple OR normal OR detailed",
|
|
||||||
"describeOptionsCustomTitle":"",
|
|
||||||
"describeOptionsInText":false,
|
|
||||||
"describeOptionsInEmbedFields":true,
|
|
||||||
"describeOptionsInEmbedDescription":false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* OPEN TICKET PANELS
|
||||||
|
* ----------------------------------------------
|
||||||
|
* Create customizable panel messages with buttons or a dropdown.
|
||||||
|
* Add up to 25 options to this panel from (config/options.jsonc)
|
||||||
|
* Panels can be customised with text, images, colors and more.
|
||||||
|
*
|
||||||
|
* Spawn the panel in Discord using: /panel <id>
|
||||||
|
*
|
||||||
|
* TIP: Create new panels by copying everything between and including the {...} brackets of an panel. Paste it after the last panel and make sure that they are seperated by a comma.
|
||||||
|
*/
|
||||||
|
[
|
||||||
|
{
|
||||||
|
/* A panel is creates a message with up to 25 options as buttons or dropdown. */
|
||||||
|
"id":"example-panel",
|
||||||
|
"name":"Example Panel",
|
||||||
|
"dropdown":false,
|
||||||
|
|
||||||
|
/* Add up to 5 option IDs from (config/options.jsonc). */
|
||||||
|
"options":["example-ticket","example-website","example-role"],
|
||||||
|
|
||||||
|
"text":"", //Leave empty to disable
|
||||||
|
"embed":{
|
||||||
|
"enabled":true,
|
||||||
|
"title":"Tickets:", //Leave empty to disable
|
||||||
|
"description":"Create a ticket by selecting one of the options below. Once selected, a private ticket will be created for you and our support team will be able to assist you directly.", //Leave empty to disable
|
||||||
|
|
||||||
|
"customColor":"#f8ab00", //Leave empty to use default color
|
||||||
|
"url":"", //URL. Leave empty to disable
|
||||||
|
|
||||||
|
"image":"", //Image URL. Leave empty to disable
|
||||||
|
"thumbnail":"", //Image URL. Leave empty to disable
|
||||||
|
|
||||||
|
"footer":"Open Ticket v4.2.1", //Leave empty to disable
|
||||||
|
/* Embed fields. Set to empty list [] to disable. */
|
||||||
|
"fields":[
|
||||||
|
{"name":"Field name","value":"Field value","inline":false}
|
||||||
|
],
|
||||||
|
"timestamp":false
|
||||||
|
},
|
||||||
|
"settings":{
|
||||||
|
"dropdownPlaceholder":"Create a ticket...", //Leave empty to use default.
|
||||||
|
"maximumButtonsPerRow":5,
|
||||||
|
|
||||||
|
/* Display the maximum amount of tickets per user. */
|
||||||
|
"enableMaxTicketsWarningInText":false,
|
||||||
|
"enableMaxTicketsWarningInEmbed":true,
|
||||||
|
|
||||||
|
/* Automatically generate option descriptions from (config/options.jsonc). */
|
||||||
|
"describeOptionsLayout":"normal", //Choices: simple, normal, detailed
|
||||||
|
"describeOptionsCustomTitle":"",
|
||||||
|
"describeOptionsInText":false,
|
||||||
|
"describeOptionsInEmbedFields":true,
|
||||||
|
"describeOptionsInEmbedDescription":false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id":"example-question-1",
|
|
||||||
"name":"Example Question 1",
|
|
||||||
"type":"short",
|
|
||||||
|
|
||||||
"required":true,
|
|
||||||
"placeholder":"Insert your short answer here!",
|
|
||||||
"length":{
|
|
||||||
"enabled":false,
|
|
||||||
"min":0,
|
|
||||||
"max":1000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id":"example-question-2",
|
|
||||||
"name":"Example Question 2",
|
|
||||||
"type":"paragraph",
|
|
||||||
|
|
||||||
"required":false,
|
|
||||||
"placeholder":"Insert your long answer here!",
|
|
||||||
"length":{
|
|
||||||
"enabled":false,
|
|
||||||
"min":0,
|
|
||||||
"max":1000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
* OPEN TICKET MODAL QUESTIONS
|
||||||
|
* ----------------------------------------------
|
||||||
|
* Create customizable modal questions that will be shown before creating a ticket.
|
||||||
|
* Each ticket option (config/options.jsonc) can contain a maximum of 5 questions.
|
||||||
|
* There are 6 types of questions available: short, paragraph, dropdown, radio-select, checkbox-select, text-display
|
||||||
|
*
|
||||||
|
* TIP: Create new questions by copying everything between and including the {...} brackets of a question. Paste it after the last question and make sure that they are seperated by a comma.
|
||||||
|
*/
|
||||||
|
[
|
||||||
|
{
|
||||||
|
/* A short text input modal question. */
|
||||||
|
"id":"example-question-1",
|
||||||
|
"name":"Example Question 1",
|
||||||
|
"description":"", //Leave empty to disable
|
||||||
|
"type":"short",
|
||||||
|
"required":true,
|
||||||
|
|
||||||
|
"placeholder":"Insert answer...",
|
||||||
|
"length":{
|
||||||
|
/* Configure length limits for the answer. */
|
||||||
|
"enabled":false,
|
||||||
|
"min":0,
|
||||||
|
"max":1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/* A paragraph text input modal question. */
|
||||||
|
"id":"example-question-2",
|
||||||
|
"name":"Example Question 2",
|
||||||
|
"description":"", //Leave empty to disable
|
||||||
|
"type":"paragraph",
|
||||||
|
"required":false,
|
||||||
|
|
||||||
|
"placeholder":"Insert answer...",
|
||||||
|
"length":{
|
||||||
|
/* Configure length limits for the answer. */
|
||||||
|
"enabled":false,
|
||||||
|
"min":0,
|
||||||
|
"max":1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/* A dropdown menu input modal question with up to 25 choices. "emoji" & "description" fields are optional. */
|
||||||
|
"id":"example-question-3",
|
||||||
|
"name":"Example Question 3",
|
||||||
|
"description":"This is a dropdown question.", //Leave empty to disable
|
||||||
|
"type":"dropdown",
|
||||||
|
"required":false,
|
||||||
|
|
||||||
|
"placeholder":"Choose your answer...",
|
||||||
|
"choices":[
|
||||||
|
{"title":"Choice A","description":"Apple","emoji":"🍎"},
|
||||||
|
{"title":"Choice B","description":"Banana","emoji":"🍌"},
|
||||||
|
{"title":"Choice C","description":"Orange","emoji":"🍊"},
|
||||||
|
{"title":"Choice D","description":"Kiwi","emoji":"🥝"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/* A radio select input modal question with up to 10 choices. */
|
||||||
|
"id":"example-question-4",
|
||||||
|
"name":"Example Question 4",
|
||||||
|
"description":"This is a radio select question.", //Leave empty to disable
|
||||||
|
"type":"radio-select",
|
||||||
|
"required":true,
|
||||||
|
|
||||||
|
"choices":[
|
||||||
|
{"title":"Choice A","description":"Up","selectedByDefault":false},
|
||||||
|
{"title":"Choice B","description":"Down","selectedByDefault":false},
|
||||||
|
{"title":"Choice C","description":"Left","selectedByDefault":false},
|
||||||
|
{"title":"Choice D","description":"Right","selectedByDefault":false}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/* A checkbox select input modal question with up to 10 choices. */
|
||||||
|
"id":"example-question-5",
|
||||||
|
"name":"Example Question 5",
|
||||||
|
"description":"This is a checkbox select question.", //Leave empty to disable
|
||||||
|
"type":"checkbox-select",
|
||||||
|
"required":true,
|
||||||
|
|
||||||
|
"limits":{
|
||||||
|
/* Configure checkbox amount limits for the answer. */
|
||||||
|
"enabled":false,
|
||||||
|
"min":0,
|
||||||
|
"max":10
|
||||||
|
},
|
||||||
|
"choices":[
|
||||||
|
{"title":"Choice A","description":"Happiness","selectedByDefault":false},
|
||||||
|
{"title":"Choice B","description":"Anger","selectedByDefault":false},
|
||||||
|
{"title":"Choice C","description":"Sadness","selectedByDefault":false},
|
||||||
|
{"title":"Choice D","description":"Fear","selectedByDefault":false}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/* Show text in a modal to provide extra details or explain questions. */
|
||||||
|
"id":"example-text-display",
|
||||||
|
"type":"text-display",
|
||||||
|
|
||||||
|
"textContents":"This is a text display. It isn't a question, but allows you to display additional details."
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
{
|
|
||||||
"general":{
|
|
||||||
"enabled":false,
|
|
||||||
|
|
||||||
"enableChannel":false,
|
|
||||||
"enableCreatorDM":false,
|
|
||||||
"enableParticipantDM":false,
|
|
||||||
"enableActiveAdminDM":false,
|
|
||||||
"enableEveryAdminDM":false,
|
|
||||||
|
|
||||||
"channel":"transcript channel id (or leave empty)",
|
|
||||||
"mode":"html OR text"
|
|
||||||
},
|
|
||||||
"embedSettings":{
|
|
||||||
"customColor":"#f8ab00 (or leave empty)",
|
|
||||||
"listAllParticipants":false,
|
|
||||||
"includeTicketStats":false
|
|
||||||
},
|
|
||||||
"textTranscriptStyle":{
|
|
||||||
"layout":"simple OR normal OR detailed",
|
|
||||||
"includeStats":true,
|
|
||||||
"includeIds":false,
|
|
||||||
"includeEmbeds":true,
|
|
||||||
"includeFiles":true,
|
|
||||||
"includeBotMessages":true,
|
|
||||||
|
|
||||||
"fileMode":"custom OR channel-name OR channel-id OR user-name OR user-id",
|
|
||||||
"customFileName":"this-is-a-transcript (or leave empty)"
|
|
||||||
},
|
|
||||||
"htmlTranscriptStyle":{
|
|
||||||
"background":{
|
|
||||||
"enableCustomBackground":false,
|
|
||||||
"backgroundColor":"#f8ba00 (or leave empty)",
|
|
||||||
"backgroundImage":"https://www.example.com/image.png (or leave empty)"
|
|
||||||
},
|
|
||||||
"header":{
|
|
||||||
"enableCustomHeader":false,
|
|
||||||
"backgroundColor":"#202225",
|
|
||||||
"decoColor":"#f8ba00",
|
|
||||||
"textColor":"#ffffff"
|
|
||||||
},
|
|
||||||
"stats":{
|
|
||||||
"enableCustomStats":false,
|
|
||||||
"backgroundColor":"#202225",
|
|
||||||
"keyTextColor":"#737373",
|
|
||||||
"valueTextColor":"#ffffff",
|
|
||||||
"hideBackgroundColor":"#40444a",
|
|
||||||
"hideTextColor":"#ffffff"
|
|
||||||
},
|
|
||||||
"favicon":{
|
|
||||||
"enableCustomFavicon":false,
|
|
||||||
"imageUrl":"https://t.dj-dj.be/favicon.png"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* OPEN TICKET TRANSCRIPTS
|
||||||
|
* ----------------------------------------------
|
||||||
|
* Enable transcript creation when tickets are deleted. There are 2 available transcript types: HTML & Text
|
||||||
|
*
|
||||||
|
* HTML Transcripts (recommended):
|
||||||
|
* Generate transcripts as HTML files to view in the browser. No server or domain required. HTML Transcripts use an external service to process and host the transcripts.
|
||||||
|
*
|
||||||
|
* Text Transcripts:
|
||||||
|
* Generate transcripts as simple .txt files with limited details. Processing happens fully local.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"general":{
|
||||||
|
"enabled":false,
|
||||||
|
|
||||||
|
/* Choose which users and channel get the generated transcript. */
|
||||||
|
"enableChannel":false,
|
||||||
|
"enableCreatorDM":false,
|
||||||
|
"enableParticipantDM":false,
|
||||||
|
"enableActiveAdminDM":false,
|
||||||
|
"enableEveryAdminDM":false,
|
||||||
|
|
||||||
|
"channel":"DISCORD_CHANNEL_ID", //Where to send transcripts. Leave empty when disabled.
|
||||||
|
"mode":"html" //The type of transcript to use. Choices: html, text
|
||||||
|
},
|
||||||
|
"embedSettings":{
|
||||||
|
/* Customise the embed which contains the generated transcript file or URL. */
|
||||||
|
"customColor":"#f8ab00", //Leave empty to use default color
|
||||||
|
"listAllParticipants":false,
|
||||||
|
"includeTicketStats":false
|
||||||
|
},
|
||||||
|
"textTranscriptStyle":{
|
||||||
|
/* Customise layout of the text transcripts. */
|
||||||
|
"layout":"normal", //Choices: simple, normal, detailed
|
||||||
|
"includeStats":true,
|
||||||
|
"includeIds":false,
|
||||||
|
"includeEmbeds":true,
|
||||||
|
"includeFiles":true,
|
||||||
|
"includeBotMessages":true,
|
||||||
|
|
||||||
|
"fileMode":"custom", //How to name the transcript file? Choices: custom, channel-name, channel-id, user-name, user-id
|
||||||
|
"customFileName":"transcript" //Custom filename without extension
|
||||||
|
},
|
||||||
|
"htmlTranscriptStyle":{
|
||||||
|
/* Customise layout of the HTML transcripts. */
|
||||||
|
"background":{
|
||||||
|
"enableCustomBackground":false,
|
||||||
|
"backgroundColor":"#f8ba00", //Leave empty to use Open Ticket color (#f8ba00)
|
||||||
|
"backgroundImage":"https://www.example.com/image.png" //Image URL to fill entire background. Leave empty to disable
|
||||||
|
},
|
||||||
|
"header":{
|
||||||
|
"enableCustomHeader":false,
|
||||||
|
"backgroundColor":"#202225",
|
||||||
|
"decoColor":"#f8ba00",
|
||||||
|
"textColor":"#ffffff"
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"enableCustomStats":false,
|
||||||
|
"backgroundColor":"#202225",
|
||||||
|
"keyTextColor":"#737373",
|
||||||
|
"valueTextColor":"#ffffff",
|
||||||
|
"hideBackgroundColor":"#40444a",
|
||||||
|
"hideTextColor":"#ffffff"
|
||||||
|
},
|
||||||
|
"favicon":{
|
||||||
|
"enableCustomFavicon":false,
|
||||||
|
"imageUrl":"https://t.dj-dj.be/favicon.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# Docker Compose for Open Ticket v4
|
|
||||||
version: '3'
|
|
||||||
services:
|
|
||||||
openticket:
|
|
||||||
build: .
|
|
||||||
volumes:
|
|
||||||
- openticket:/home/container
|
|
||||||
restart: no
|
|
||||||
container_name: open-ticket
|
|
||||||
volumes:
|
|
||||||
openticket:
|
|
||||||
-18
@@ -1,18 +0,0 @@
|
|||||||
# Docker File for Open Ticket v4
|
|
||||||
# Use the official Node.js 20 image from Docker Hub
|
|
||||||
FROM node:20-alpine
|
|
||||||
|
|
||||||
# Set pterodactyl working directory inside the container
|
|
||||||
WORKDIR /home/container
|
|
||||||
|
|
||||||
# Copy package.json and package-lock.json into the container
|
|
||||||
COPY package*.json ./
|
|
||||||
|
|
||||||
# Install dependencies
|
|
||||||
RUN npm install
|
|
||||||
|
|
||||||
# Copy the rest of your app's source code into the container
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
# Run the bot from index.js
|
|
||||||
CMD ["node", "index.js"]
|
|
||||||
@@ -4,7 +4,6 @@ const flags = [
|
|||||||
//PTERODACTYL PANEL
|
//PTERODACTYL PANEL
|
||||||
//add startup flags here (e.g. "--no-compile") when running via the panel
|
//add startup flags here (e.g. "--no-compile") when running via the panel
|
||||||
]
|
]
|
||||||
process.argv.push(...flags)
|
|
||||||
/////////////// STARTUP FLAGS ///////////////
|
/////////////// STARTUP FLAGS ///////////////
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -14,124 +13,19 @@ process.argv.push(...flags)
|
|||||||
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║
|
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║
|
||||||
╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║
|
╚██████╔╝██║ ███████╗██║ ╚████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║
|
||||||
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝
|
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝
|
||||||
v4.1.2 - Made by DJj123dj & Contributors
|
v4.2.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
|
||||||
Support Us: https://github.com/sponsors/DJj123dj/
|
Support Us: https://github.com/sponsors/DJj123dj/
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
////////// COMPILATION + STARTUP //////////
|
////////// COMPILATION + STARTUP //////////
|
||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
const fs = require("fs")
|
|
||||||
const ts = require("typescript")
|
|
||||||
const {createHash,Hash} = require("crypto")
|
|
||||||
const nodepath = require('path')
|
|
||||||
|
|
||||||
/** ## What is this?
|
import { frameworkStartup } from "@open-discord-bots/framework"
|
||||||
* This is a function which compares `./src/` with a hash stored in `./dist/hash.txt`.
|
frameworkStartup(flags,"openticket",async () => {
|
||||||
* The hash is based on the modified date & file metadata of all files in `./src/`.
|
await import("./dist/src/index.js")
|
||||||
*
|
})
|
||||||
* If the hash is different, the bot will automatically re-compile.
|
|
||||||
* This will help you save CPU resources because the bot shouldn't re-compile when nothing has been changed :)
|
|
||||||
*
|
|
||||||
* @param {string} dir
|
|
||||||
* @param {Hash|null} upperHash
|
|
||||||
*/
|
|
||||||
function computeSourceHash(dir,upperHash){
|
|
||||||
const hash = upperHash ? upperHash : createHash("sha256")
|
|
||||||
const info = fs.readdirSync(dir,{withFileTypes:true})
|
|
||||||
|
|
||||||
for (const file of info) {
|
|
||||||
const fullPath = nodepath.join(dir,file.name)
|
|
||||||
if (file.isFile() && [".js",".ts",".jsx",".tsx"].some((ext) => file.name.endsWith(ext))){
|
|
||||||
const statInfo = fs.statSync(fullPath)
|
|
||||||
//compute hash using file metadata
|
|
||||||
const fileInfo = `${fullPath}:${statInfo.size}:${statInfo.mtimeMs}`
|
|
||||||
hash.update(fileInfo)
|
|
||||||
|
|
||||||
}else if (file.isDirectory()){
|
|
||||||
//recursively compute all folders
|
|
||||||
computeSourceHash(fullPath,hash)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//return when not being called recursively
|
|
||||||
if (!upperHash) {
|
|
||||||
return hash.digest("hex")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function requiresCompilation(){
|
|
||||||
//check hashes when not using "--compile-only" flag
|
|
||||||
if (process.argv.includes("--compile-only")) return true
|
|
||||||
|
|
||||||
console.log("OT: Comparing prebuilds with source...")
|
|
||||||
const sourceHash = computeSourceHash("./src/")
|
|
||||||
const pluginHash = computeSourceHash("./plugins/")
|
|
||||||
const hash = sourceHash+":"+pluginHash
|
|
||||||
|
|
||||||
if (fs.existsSync("./dist/hash.txt")){
|
|
||||||
const distHash = fs.readFileSync("./dist/hash.txt").toString()
|
|
||||||
if (distHash === hash) return false
|
|
||||||
else return true
|
|
||||||
}else return true
|
|
||||||
}
|
|
||||||
function saveNewCompilationHash(){
|
|
||||||
const sourceHash = computeSourceHash("./src/")
|
|
||||||
const pluginHash = computeSourceHash("./plugins/")
|
|
||||||
const hash = sourceHash+":"+pluginHash
|
|
||||||
fs.writeFileSync("./dist/hash.txt",hash)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!process.argv.includes("--no-compile")){
|
|
||||||
if (requiresCompilation()){
|
|
||||||
console.log("OT: Compilation Required...")
|
|
||||||
|
|
||||||
//REMOVE EXISTING BUILDS
|
|
||||||
console.log("OT: Removing Prebuilds...")
|
|
||||||
fs.rmSync("./dist",{recursive:true,force:true})
|
|
||||||
|
|
||||||
//COMPILE TYPESCRIPT
|
|
||||||
console.log("OT: Compiling Typescript...")
|
|
||||||
const configPath = nodepath.resolve('./tsconfig.json')
|
|
||||||
const configFile = ts.readConfigFile(configPath,ts.sys.readFile)
|
|
||||||
|
|
||||||
//check for tsconfig errors
|
|
||||||
if (configFile.error){
|
|
||||||
const message = ts.formatDiagnosticsWithColorAndContext([configFile.error],ts.createCompilerHost({}))
|
|
||||||
console.error(message)
|
|
||||||
process.exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
//parse tsconfig file
|
|
||||||
const parsedConfig = ts.parseJsonConfigFileContent(configFile.config,ts.sys,nodepath.dirname(configPath))
|
|
||||||
|
|
||||||
//create program/compiler
|
|
||||||
const program = ts.createProgram({
|
|
||||||
rootNames:parsedConfig.fileNames,
|
|
||||||
options:parsedConfig.options
|
|
||||||
})
|
|
||||||
|
|
||||||
//emit all compiled files
|
|
||||||
const emitResult = program.emit()
|
|
||||||
|
|
||||||
//print emit errors/warnings (type errors)
|
|
||||||
const allDiagnostics = ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics)
|
|
||||||
const formattedDiagnostics = ts.formatDiagnosticsWithColorAndContext(allDiagnostics, ts.createCompilerHost(parsedConfig.options))
|
|
||||||
console.log(formattedDiagnostics)
|
|
||||||
|
|
||||||
if (emitResult.emitSkipped || allDiagnostics.find((d) => d.category == ts.DiagnosticCategory.Error || d.category == ts.DiagnosticCategory.Warning)){
|
|
||||||
console.log("OT: Compilation Failed!")
|
|
||||||
process.exit(1)
|
|
||||||
}
|
|
||||||
}else console.log("OT: No Compilation Required...")
|
|
||||||
|
|
||||||
//save new compilation hash
|
|
||||||
saveNewCompilationHash()
|
|
||||||
}
|
|
||||||
|
|
||||||
//START BOT
|
|
||||||
console.log("OT: Compilation Succeeded!")
|
|
||||||
if (process.argv.includes("--compile-only")) process.exit(0) //exit when only compile is required!
|
|
||||||
console.log("OT: Starting Bot!")
|
|
||||||
require("./dist/src/index.js")
|
|
||||||
+587
-437
File diff suppressed because it is too large
Load Diff
+569
-419
File diff suppressed because it is too large
Load Diff
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["guillee3"],
|
"translators":["guillee3"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Catalan",
|
"language":"Catalan",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"invalidButton":"Aquest botó ha de tenir almenys un {0} o {1}!",
|
"invalidButton":"Aquest botó ha de tenir almenys un {0} o {1}!",
|
||||||
"unusedOption":"L'opció {0} no s'utilitza enlloc!",
|
"unusedOption":"L'opció {0} no s'utilitza enlloc!",
|
||||||
"unusedQuestion":"La pregunta {0} no s'utilitza enlloc!",
|
"unusedQuestion":"La pregunta {0} no s'utilitza enlloc!",
|
||||||
"dropdownOption":"Un panell amb desplegable activat només pot contenir opcions del tipus 'ticket'!",
|
"dropdownOption":"Un panell amb desplegable només pot contenir opcions dels tipus: 'ticket', 'role' o 'sub-panel'.",
|
||||||
"customInvalidVersion":"La versió especificada a la teva configuració no coincideix! Assegura't d'haver actualitzat la configuració a la versió més recent!"
|
"customInvalidVersion":"La versió especificada a la teva configuració no coincideix! Assegura't d'haver actualitzat la configuració a la versió més recent!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"Veure Comandes de Text",
|
"helpSwitchText":"Veure Comandes de Text",
|
||||||
"helpPage":"Pàgina {0}",
|
"helpPage":"Pàgina {0}",
|
||||||
"withReason":"Amb Motiu",
|
"withReason":"Amb Motiu",
|
||||||
"withoutTranscript":"Sense Transcripció"
|
"withoutTranscript":"Sense Transcripció",
|
||||||
|
"blacklistAdd":"Afegir Usuari a la Llista Negra",
|
||||||
|
"blacklistRemove":"Alliberar Usuari"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket Creat",
|
"created":"Ticket Creat",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"Tema Canviat",
|
"topicSet":"Tema Canviat",
|
||||||
"prioritySet":"Prioritat Canviada",
|
"prioritySet":"Prioritat Canviada",
|
||||||
"priorityGet":"Prioritat del Ticket",
|
"priorityGet":"Prioritat del Ticket",
|
||||||
"transfer":"Ticket Transferit"
|
"transfer":"Ticket Transferit",
|
||||||
|
"transcripts":"Historial de Transcripcions"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"El teu ticket ha estat creat. Fes clic al botó a continuació per accedir-hi!",
|
"create":"El teu ticket ha estat creat. Fes clic al botó a continuació per accedir-hi!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"La prioritat d'aquest ticket ha estat canviada a {0} per {1}!",
|
"prioritySetLog":"La prioritat d'aquest ticket ha estat canviada a {0} per {1}!",
|
||||||
"prioritySetDm":"La prioritat del teu ticket ha estat canviada a {0} al nostre servidor!",
|
"prioritySetDm":"La prioritat del teu ticket ha estat canviada a {0} al nostre servidor!",
|
||||||
"roleUpdateLog":"{0} ha actualitzat els seus rols!",
|
"roleUpdateLog":"{0} ha actualitzat els seus rols!",
|
||||||
"roleUpdateDm":"Els teus rols al nostre servidor han estat actualitzats!"
|
"roleUpdateDm":"Els teus rols al nostre servidor han estat actualitzats!",
|
||||||
|
"topicSetLog":"La prioritat d'aquest tiquet ha estat establerta a {0} per {1}.",
|
||||||
|
"topicSetDm":"La prioritat del teu tiquet ha estat establerta a {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"continue":"Elimina Sense Transcripció",
|
"continue":"Elimina Sense Transcripció",
|
||||||
"backup":"Crea Transcripció de Backup",
|
"backup":"Crea Transcripció de Backup",
|
||||||
"error":"Alguna cosa ha anat malament mentre intentàvem crear la transcripció.\nQuè t'agradaria fer?\n\nAquest ticket no s'eliminarà fins que facis clic en un d'aquests botons.",
|
"error":"Alguna cosa ha anat malament mentre intentàvem crear la transcripció.\nQuè t'agradaria fer?\n\nAquest ticket no s'eliminarà fins que facis clic en un d'aquests botons.",
|
||||||
"title":"Error de transcripció"
|
"title":"Error de transcripció",
|
||||||
|
"noHistory":"Aquest usuari encara no té cap transcripció.",
|
||||||
|
"historyNotSupported":"L'historial de transcripcions només és compatible actualment amb HTML Transcripts.\nL'historial de transcripcions de text estarà disponible en futures versions."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"MISSATGES",
|
"messagesTitle":"MISSATGES",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"Panell Desconegut",
|
"unknownPanel":"Panell Desconegut",
|
||||||
"notInGuild":"No Ets Al Servidor",
|
"notInGuild":"No Ets Al Servidor",
|
||||||
"channelRename":"No Es Pot Canviar El Nom Del Canal",
|
"channelRename":"No Es Pot Canviar El Nom Del Canal",
|
||||||
|
"channelCategory":"No Es Pot Canviar la Categoria",
|
||||||
"busy":"El Ticket Està Ocupat",
|
"busy":"El Ticket Està Ocupat",
|
||||||
"permissionError":"Error de Permisos"
|
"permissionError":"Error de Permisos"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"El canal actual no és un ticket vàlid! Pot ser que fos un ticket d'una versió antiga de Open Ticket!",
|
"deprecatedTicket":"El canal actual no és un ticket vàlid! Pot ser que fos un ticket d'una versió antiga de Open Ticket!",
|
||||||
"notInGuild":"Aquest {0} no funciona en DM! Si us plau, torna a intentar-ho en un servidor!",
|
"notInGuild":"Aquest {0} no funciona en DM! Si us plau, torna a intentar-ho en un servidor!",
|
||||||
"channelRename":"Degut a les limitacions de discord, actualment és impossible per al bot canviar el nom del canal. El canal es canviarà automàticament en 10 minuts si el bot no es reinicia.",
|
"channelRename":"Degut a les limitacions de discord, actualment és impossible per al bot canviar el nom del canal. El canal es canviarà automàticament en 10 minuts si el bot no es reinicia.",
|
||||||
|
"channelCategory":"A causa dels límits de Discord, la categoria del canal no es pot canviar immediatament. Es canviarà automàticament en 10 minuts si el bot continua en línia.",
|
||||||
"channelRenameSource":"La font d'aquest error és: {0}",
|
"channelRenameSource":"La font d'aquest error és: {0}",
|
||||||
"busy":"No es pot utilitzar aquest {0}!\nEl ticket està sent processat pel bot.\n\nSi us plau, torna a intentar-ho en uns segons!",
|
"busy":"No es pot utilitzar aquest {0}!\nEl ticket està sent processat pel bot.\n\nSi us plau, torna a intentar-ho en uns segons!",
|
||||||
"closeBeforeMessage":"Aquest ticket no pot ser tancat/eliminat abans que un usuari hagi enviat un missatge.",
|
"closeBeforeMessage":"Aquest ticket no pot ser tancat/eliminat abans que un usuari hagi enviat un missatge.",
|
||||||
"closeBeforeAdminMessage":"Aquest ticket no pot ser tancat/eliminat abans que un administrador o membre de suport hagi enviat un missatge.",
|
"closeBeforeAdminMessage":"Aquest ticket no pot ser tancat/eliminat abans que un administrador o membre de suport hagi enviat un missatge.",
|
||||||
"unableToCreateTicket":"No pots crear cap ticket."
|
"unableToCreateTicket":"No pots crear cap ticket.",
|
||||||
|
"messageMissing":"No s'ha pogut localitzar el missatge de la interacció. Utilitza el comandament `{0}` en el seu lloc.",
|
||||||
|
"stateExpired":"Aquesta interacció ja no és vàlida o ha expirat. Utilitza el comandament `{0}` en el seu lloc. És normal rebre aquest error després d'una actualització important d'Open Ticket.",
|
||||||
|
"panelStateExpired":"Aquest panell ja no és vàlid o ha expirat. Crea un nou panell utilitzant `{0}` per solucionar el problema. És normal rebre aquest error després d'una actualització important d'Open Ticket."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"El valor no coincideix amb el patró!",
|
"stringRegex":"El valor no coincideix amb el patró!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"Sintaxi",
|
"syntax":"Sintaxi",
|
||||||
"originalName":"Nom Original",
|
"originalName":"Nom Original",
|
||||||
"newName":"Nom Nou",
|
"newName":"Nom Nou",
|
||||||
|
"originalCategory":"Categoria Original",
|
||||||
|
"newCategory":"Nova Categoria",
|
||||||
"until":"Fins a",
|
"until":"Fins a",
|
||||||
"validOptions":"Opcions Vàlides",
|
"validOptions":"Opcions Vàlides",
|
||||||
"validPanels":"Panells Vàlids",
|
"validPanels":"Panells Vàlids",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"Participants",
|
"participants":"Participants",
|
||||||
"yes":"Si",
|
"yes":"Si",
|
||||||
"no":"No",
|
"no":"No",
|
||||||
|
"accept":"Acceptar",
|
||||||
|
"cancel":"Cancel·lar",
|
||||||
"option":"Opció",
|
"option":"Opció",
|
||||||
"topic":"Tema",
|
"topic":"Tema",
|
||||||
"uptime":"Temps d'Activitat del Sistema",
|
"uptime":"Temps d'Activitat del Sistema",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Vols que aquest panell s'actualitzi automàticament quan s'edita?",
|
"panelAutoUpdate":"Vols que aquest panell s'actualitzi automàticament quan s'edita?",
|
||||||
"ticket":"Crea instantàniament un ticket.",
|
"ticket":"Crea instantàniament un ticket.",
|
||||||
"ticketId":"L'identificador del ticket que vols crear.",
|
"ticketId":"L'identificador del ticket que vols crear.",
|
||||||
|
"ticketOtherUser":"Crea un tiquet per a un altre usuari.",
|
||||||
"close":"Tanca un ticket.",
|
"close":"Tanca un ticket.",
|
||||||
"delete":"Elimina un ticket.",
|
"delete":"Elimina un ticket.",
|
||||||
"deleteNoTranscript":"Elimina aquest ticket sense crear una transcripció.",
|
"deleteNoTranscript":"Elimina aquest ticket sense crear una transcripció.",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"Obtenir la prioritat del ticket.",
|
"priorityGet":"Obtenir la prioritat del ticket.",
|
||||||
"priorityList":"Obté una llista de tots els tickets amb el seu estat de prioritat.",
|
"priorityList":"Obté una llista de tots els tickets amb el seu estat de prioritat.",
|
||||||
"transfer":"Transfereix la propietat del ticket d'un usuari a un altre.",
|
"transfer":"Transfereix la propietat del ticket d'un usuari a un altre.",
|
||||||
"transferUser":"L'usuari al qual transferir."
|
"transferUser":"L'usuari al qual transferir.",
|
||||||
|
"transcripts":"Veure l'historial de transcripcions de tiquets d'un usuari.",
|
||||||
|
"transcriptsUser":"L'usuari a visualitzar."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Obtingues una llista de totes les comandes disponibles.",
|
"help":"Obtingues una llista de totes les comandes disponibles.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"Selecciona el teu ticket",
|
"selectTicket":"Selecciona el teu ticket",
|
||||||
"selectRole":"Selecciona el teu rol",
|
"selectRole":"Selecciona el teu rol",
|
||||||
"selectOption":"Selecciona la teva opció"
|
"selectOption":"Selecciona la teva opció",
|
||||||
|
"selectPriorityLevel":"Selecciona el nivell de prioritat"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"Urgent",
|
"urgent":"Urgent",
|
||||||
|
|||||||
+342
-322
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["DJj123dj"],
|
"translators":["DJj123dj"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Custom",
|
"language":"Custom",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -13,94 +13,94 @@
|
|||||||
"typeWarning":"[WARNING]",
|
"typeWarning":"[WARNING]",
|
||||||
"typeInfo":"[INFO]",
|
"typeInfo":"[INFO]",
|
||||||
"headerConfigChecker":"CONFIG CHECKER",
|
"headerConfigChecker":"CONFIG CHECKER",
|
||||||
"headerDescription":"check for errors in your config files!",
|
"headerDescription":"Validating config files...",
|
||||||
"footerError":"the bot won't start until all {0}'s are fixed!",
|
"footerError":"The bot will not start until all {0}'s are resolved.",
|
||||||
"footerWarning":"it's recommended to fix all {0}'s before starting!",
|
"footerWarning":"The bot may behave unexpectedly until all {0}'s are resolved.",
|
||||||
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
|
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
|
||||||
"compactInformation":"use {0} for more information!",
|
"compactInformation":"Use {0} for a detailed config report.",
|
||||||
"dataPath":"path",
|
"dataPath":"path",
|
||||||
"dataDocs":"docs",
|
"dataDocs":"docs",
|
||||||
"dataMessages":"message"
|
"dataMessages":"message"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"stringTooShort":"This string can't be shorter than {0} characters!",
|
"stringTooShort":"Text must be at least {0} characters long",
|
||||||
"stringTooLong":"This string can't be longer than {0} characters!",
|
"stringTooLong":"Text must be no longer than {0} characters",
|
||||||
"stringLengthInvalid":"This string needs to be {0} characters long!",
|
"stringLengthInvalid":"Text must be exactly {0} characters long",
|
||||||
"stringStartsWith":"This string needs to start with {0}!",
|
"stringStartsWith":"Text must start with {0}",
|
||||||
"stringEndsWith":"This string needs to end with {0}!",
|
"stringEndsWith":"Text must end with {0}",
|
||||||
"stringContains":"This string needs to contain {0}!",
|
"stringContains":"Text must contain {0}",
|
||||||
"stringChoices":"This string can only be one of the following values: {0}!",
|
"stringChoices":"Text must be one of the following: {0}",
|
||||||
"stringRegex":"This string is invalid!",
|
"stringRegex":"Text does not match the required format",
|
||||||
"stringInvertedContains":"This string is not allowed to contain {0}!",
|
"stringInvertedContains":"Text must not contain {0}",
|
||||||
"stringLowercase":"This string must be written in lowercase only!",
|
"stringLowercase":"Text must be entirely lowercase",
|
||||||
"stringUppercase":"This string must be written in uppercase only!",
|
"stringUppercase":"Text must be entirely uppercase",
|
||||||
"stringSpecialCharacters":"This string is not allowed to contain any special characters! (a-z, 0-9 & space only)",
|
"stringSpecialCharacters":"Text must only contain letters (a–z), numbers (0–9), and spaces",
|
||||||
"stringNoSpaces":"This string is not allowed to contain spaces!",
|
"stringNoSpaces":"Text must not contain spaces",
|
||||||
"stringCapitalWord":"It's recommended that each word in this string starts with a capital letter!",
|
"stringCapitalWord":"Each word in this value should start with a capital letter",
|
||||||
"stringCapitalSentence":"It looks like some sentences in this string don't start with a capital letter!",
|
"stringCapitalSentence":"One or more sentences in this value do not start with a capital letter",
|
||||||
"stringPunctuation":"It looks like the sentence in this string doesn't end with a punctuation mark!",
|
"stringPunctuation":"The sentence in this value does not end with a punctuation mark",
|
||||||
|
|
||||||
"numberTooShort":"This number can't be shorter than {0} characters!",
|
"numberTooShort":"Number must be at least {0} digits long",
|
||||||
"numberTooLong":"This number can't be longer than {0} characters!",
|
"numberTooLong":"Number must be no longer than {0} digits",
|
||||||
"numberLengthInvalid":"This number needs to be {0} characters long!",
|
"numberLengthInvalid":"Number must be exactly {0} digits long",
|
||||||
"numberTooSmall":"This number needs to be at least {0}!",
|
"numberTooSmall":"Number must be at least {0}",
|
||||||
"numberTooLarge":"This number needs to be at most {0}!",
|
"numberTooLarge":"Number must be at most {0}",
|
||||||
"numberNotEqual":"This number needs to be {0}!",
|
"numberNotEqual":"Number must be exactly {0}",
|
||||||
"numberStep":"This number needs to be a multiple of {0}!",
|
"numberStep":"Number must be a multiple of {0}",
|
||||||
"numberStepOffset":"This number needs to be a multiple of {0} starting with {1}!",
|
"numberStepOffset":"Number must be a multiple of {0}, starting from {1}",
|
||||||
"numberStartsWith":"This number needs to start with {0}!",
|
"numberStartsWith":"Number must start with {0}",
|
||||||
"numberEndsWith":"This number needs to end with {0}!",
|
"numberEndsWith":"Number must end with {0}",
|
||||||
"numberContains":"This number needs to contain {0}!",
|
"numberContains":"Number must contain {0}",
|
||||||
"numberChoices":"This number can only be one of the following values: {0}!",
|
"numberChoices":"Number must be one of the following: {0}",
|
||||||
"numberFloat":"This number can't be a decimal!",
|
"numberFloat":"Number must be a whole number",
|
||||||
"numberNegative":"This number can't be negative!",
|
"numberNegative":"Number must be a positive number",
|
||||||
"numberPositive":"This number can't be positive!",
|
"numberPositive":"Number must be a negative number",
|
||||||
"numberZero":"This number can't be zero!",
|
"numberZero":"Number must not be zero",
|
||||||
"numberNan":"This number can't be NaN (Not A Number)!",
|
"numberNan":"Number must be a valid number",
|
||||||
"numberInvertedContains":"This number is not allowed to contain {0}!",
|
"numberInvertedContains":"Number must not contain {0}",
|
||||||
|
|
||||||
"booleanTrue":"This boolean can't be true!",
|
"booleanTrue":"Boolean must be false",
|
||||||
"booleanFalse":"This boolean can't be false!",
|
"booleanFalse":"Boolean must be true",
|
||||||
|
|
||||||
"arrayEmptyDisabled":"This array isn't allowed to be empty!",
|
"arrayEmptyDisabled":"List must not be empty",
|
||||||
"arrayEmptyRequired":"This array is required to be empty!",
|
"arrayEmptyRequired":"List must be empty",
|
||||||
"arrayTooShort":"This array needs to have a length of at least {0}!",
|
"arrayTooShort":"List must have at least {0} items",
|
||||||
"arrayTooLong":"This array needs to have a length of at most {0}!",
|
"arrayTooLong":"List must have at most {0} items",
|
||||||
"arrayLengthInvalid":"This array needs to have a length of {0}!",
|
"arrayLengthInvalid":"List must have exactly {0} items",
|
||||||
"arrayInvalidTypes":"This array can only contain the following types: {0}!",
|
"arrayInvalidTypes":"List may only contain the following types: {0}",
|
||||||
"arrayDouble":"This array doesn't allow the same value twice!",
|
"arrayDouble":"List must not contain duplicate values",
|
||||||
|
|
||||||
"discordInvalidId":"This is an invalid discord {0} id!",
|
"discordInvalidId":"Invalid Discord {0} ID",
|
||||||
"discordInvalidIdOptions":"This is an invalid discord {0} id! You can also use one of these: {1}!",
|
"discordInvalidIdOptions":"Invalid Discord {0} ID. Alternatively, use one of the following: {1}",
|
||||||
"discordInvalidToken":"This is an invalid discord token (syntactically)!",
|
"discordInvalidToken":"Invalid Discord token",
|
||||||
"colorInvalid":"This is an invalid hex color!",
|
"colorInvalid":"Invalid hex color",
|
||||||
"emojiTooShort":"This string needs to have at least {0} emoji's!",
|
"emojiTooShort":"Value must contain at least {0} emoji",
|
||||||
"emojiTooLong":"This string needs to have at most {0} emoji's!",
|
"emojiTooLong":"Value must contain at most {0} emoji",
|
||||||
"emojiCustom":"This emoji can't be a custom discord emoji!",
|
"emojiCustom":"Custom Discord emojis are not allowed here",
|
||||||
"emojiInvalid":"This is an invalid emoji!",
|
"emojiInvalid":"Invalid emoji",
|
||||||
"urlInvalid":"This url is invalid!",
|
"urlInvalid":"Invalid URL",
|
||||||
"urlInvalidHttp":"This url can only use the https:// protocol!",
|
"urlInvalidHttp":"URL must use the https:// protocol",
|
||||||
"urlInvalidProtocol":"This url can only use the http:// & https:// protocols!",
|
"urlInvalidProtocol":"URL must use the http:// or https:// protocol",
|
||||||
"urlInvalidHostname":"This url has a disallowed hostname!",
|
"urlInvalidHostname":"URL hostname is not allowed",
|
||||||
"urlInvalidExtension":"This url has an invalid extension! Choose between: {0}!",
|
"urlInvalidExtension":"Invalid URL extension. Allowed extensions: {0}",
|
||||||
"urlInvalidPath":"This url has an invalid path!",
|
"urlInvalidPath":"Invalid URL path",
|
||||||
"idNotUnique":"This id isn't unique, use another id instead!",
|
"idNotUnique":"This ID is already in use. Please choose a unique ID",
|
||||||
"idNonExistent":"The id {0} doesn't exist!",
|
"idNonExistent":"ID {0} does not exist",
|
||||||
|
|
||||||
"invalidType":"This property needs to be the type: {0}!",
|
"invalidType":"Property must be of type: {0}",
|
||||||
"propertyMissing":"The property {0} is missing from this object!",
|
"propertyMissing":"Required property {0} is missing from the object",
|
||||||
"propertyOptional":"The property {0} is optional in this object!",
|
"propertyOptional":"Property {0} is optional in the object",
|
||||||
"objectDisabled":"This object is disabled, enable it using {0}!",
|
"objectDisabled":"This object is disabled. Enable it using {0}",
|
||||||
"nullInvalid":"This property can't be null!",
|
"nullInvalid":"Property must not be null",
|
||||||
"switchInvalidType":"This needs to be one of the following types: {0}!",
|
"switchInvalidType":"Value must be one of the following types: {0}",
|
||||||
"objectSwitchInvalid":"This object needs to be one of the following types: {0}!",
|
"objectSwitchInvalid":"Object must be one of the following types: {0}",
|
||||||
|
|
||||||
"invalidLanguage":"This is an invalid language!",
|
"invalidLanguage":"Invalid language",
|
||||||
"invalidButton":"This button needs to have at least an {0} or {1}!",
|
"invalidButton":"Button must have at least an {0} or {1}",
|
||||||
"unusedOption":"The option {0} isn't used anywhere!",
|
"unusedOption":"Option {0} is not used anywhere",
|
||||||
"unusedQuestion":"The question {0} isn't used anywhere!",
|
"unusedQuestion":"Question {0} is not used anywhere",
|
||||||
"dropdownOption":"A panel with dropdown enabled can only contain options of the 'ticket' type!",
|
"dropdownOption":"A panel with dropdown can only contain options of the types: 'ticket', 'role' or 'sub-panel'.",
|
||||||
"customInvalidVersion":"The version specified in your config does not match! Make sure you have updated the config to the latest version!"
|
"customInvalidVersion":"Config version mismatch. Make sure to update your config to the latest version"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"View Text Commands",
|
"helpSwitchText":"View Text Commands",
|
||||||
"helpPage":"Page {0}",
|
"helpPage":"Page {0}",
|
||||||
"withReason":"With Reason",
|
"withReason":"With Reason",
|
||||||
"withoutTranscript":"Without Transcript"
|
"withoutTranscript":"Without Transcript",
|
||||||
|
"blacklistAdd":"Blacklist User",
|
||||||
|
"blacklistRemove":"Release User"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket Created",
|
"created":"Ticket Created",
|
||||||
@@ -156,122 +158,127 @@
|
|||||||
"topicSet":"Topic Changed",
|
"topicSet":"Topic Changed",
|
||||||
"prioritySet":"Priority Changed",
|
"prioritySet":"Priority Changed",
|
||||||
"priorityGet":"Ticket Priority",
|
"priorityGet":"Ticket Priority",
|
||||||
"transfer":"Ticket Transferred"
|
"transfer":"Ticket Transferred",
|
||||||
|
"transcripts":"Transcript History"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Your ticket has been created. Click the button below to access it!",
|
"create":"Your ticket is ready. Click the button below to view and continue.",
|
||||||
"close":"The ticket has been closed successfully!",
|
"close":"The ticket has been closed.",
|
||||||
"delete":"The ticket has been deleted successfully!",
|
"delete":"The ticket has been deleted.",
|
||||||
"reopen":"The ticket has been reopened successfully!",
|
"reopen":"The ticket has been reopened.",
|
||||||
"claim":"The ticket has been claimed successfully!",
|
"claim":"The ticket has been claimed.",
|
||||||
"unclaim":"The ticket has been unclaimed successfully!",
|
"unclaim":"The ticket has been unclaimed.",
|
||||||
"pin":"The ticket has been pinned successfully!",
|
"pin":"The ticket has been pinned.",
|
||||||
"unpin":"The ticket has been unpinned successfully!",
|
"unpin":"The ticket has been unpinned.",
|
||||||
"rename":"The ticket has been renamed to {0} successfully!",
|
"rename":"The ticket has been renamed to {0}.",
|
||||||
"move":"The ticket has been moved to {0} successfully!",
|
"move":"The ticket has been moved to {0}.",
|
||||||
"add":"{0} has been added to the ticket successfully!",
|
"add":"{0} has been added to the ticket.",
|
||||||
"remove":"{0} has been removed from the ticket successfully!",
|
"remove":"{0} has been removed from the ticket.",
|
||||||
|
|
||||||
"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 statistics have been reset.",
|
||||||
"statsError":"Unable to view ticket stats!\n{0} is not a ticket!",
|
"statsError":"Unable to retrieve ticket statistics.\n{0} is not a valid ticket.",
|
||||||
"blacklistAdd":"{0} has been blacklisted successfully!",
|
"blacklistAdd":"{0} has been blacklisted.",
|
||||||
"blacklistRemove":"{0} has been released successfully!",
|
"blacklistRemove":"{0} has been released.",
|
||||||
"blacklistGetSuccess":"{0} is currently blacklisted!",
|
"blacklistGetSuccess":"{0} is blacklisted!",
|
||||||
"blacklistGetEmpty":"{0} is currently not blacklisted!",
|
"blacklistGetEmpty":"{0} is not blacklisted!",
|
||||||
"blacklistViewEmpty":"No-one has been blacklisted yet!",
|
"blacklistViewEmpty":"No users have been blacklisted yet.",
|
||||||
"blacklistViewTip":"Use \"/blacklist add\" to blacklist a user!",
|
"blacklistViewTip":"Use \"/blacklist add\" to add a user to the blacklist.",
|
||||||
"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 cannot be undone.",
|
||||||
"clearReady":"{0} tickets have been deleted successfully!",
|
"clearReady":"{0} ticket(s) have been deleted.",
|
||||||
"rolesEmpty":"No roles have been updated!",
|
"rolesEmpty":"No roles were modified.",
|
||||||
|
|
||||||
"autocloseLeave":"This ticket has been autoclosed because the creator left the server!",
|
"autocloseLeave":"This ticket was automatically closed because its creator left the server.",
|
||||||
"autocloseTimeout":"This ticket has been autoclosed because it has been inactive for more than `{0}h`!",
|
"autocloseTimeout":"This ticket was automatically closed due to inactivity exceeding `{0}h`.",
|
||||||
"autodeleteLeave":"This ticket has been autodeleted because the creator left the server!",
|
"autodeleteLeave":"This ticket was automatically deleted because its creator left the server.",
|
||||||
"autodeleteTimeout":"This ticket has been autodeleted because it has been inactive for more than `{0} days`!",
|
"autodeleteTimeout":"This ticket was automatically deleted due to inactivity exceeding `{0} days`.",
|
||||||
"autocloseEnabled":"Autoclose has been enabled in this ticket!\nIt will be closed when it is inactive for more than `{0}h`!",
|
"autocloseEnabled":"Autoclose has been enabled for this ticket.\nIt will close after `{0}h` of inactivity.",
|
||||||
"autocloseDisabled":"Autoclose has been disabled in this ticket!\nIt won't be closed automatically anymore!",
|
"autocloseDisabled":"Autoclose has been disabled for this ticket.\nThis ticket will no longer close automatically.",
|
||||||
"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 for this ticket.\nIt will be deleted after `{0} days` of inactivity.",
|
||||||
"autodeleteDisabled":"Autodelete has been disabled in this ticket!\nIt won't be deleted automatically anymore!",
|
"autodeleteDisabled":"Autodelete has been disabled for this ticket.\nThis ticket will no longer be deleted automatically.",
|
||||||
|
|
||||||
"ticketMessageLimit":"You can only create {0} ticket(s) at the same time!",
|
"ticketMessageLimit":"You can only have {0} active ticket(s) at a time.",
|
||||||
"ticketMessageAutoclose":"This ticket will be autoclosed when inactive for {0}h!",
|
"ticketMessageAutoclose":"This ticket will automatically close after `{0}h` of inactivity.",
|
||||||
"ticketMessageAutodelete":"This ticket will be autodeleted when inactive for {0} days!",
|
"ticketMessageAutodelete":"This ticket will automatically be deleted after `{0} days` of inactivity.",
|
||||||
"panelReady":"The panel is available in the followup message!\nThis message can now be deleted!",
|
"panelReady":"The panel has been sent in the follow-up message.\nYou may now delete this message.",
|
||||||
|
|
||||||
"topicSet":"The channel topic has been changed by {0} successfully!",
|
"topicSet":"The channel topic has been changed by {0}.",
|
||||||
"prioritySet":"The ticket priority has been changed to {0} by {1} successfully!",
|
"prioritySet":"The ticket priority has been changed to {0} by {1}.",
|
||||||
"priorityGet":"The current priority of this ticket is {0}.",
|
"priorityGet":"The priority of this ticket is {0}.",
|
||||||
"transfer":"The ticket ownership has been transferred from {0} to {1} by {2} successfully!"
|
"transfer":"The ticket ownership has been transferred from {0} to {1} by {2}."
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder":"Why did you close this ticket?",
|
"closePlaceholder":"Why would you like to close this ticket?",
|
||||||
"deletePlaceholder":"Why did you delete this ticket?",
|
"deletePlaceholder":"Why would you like to delete this ticket?",
|
||||||
"reopenPlaceholder":"Why did you reopen this ticket?",
|
"reopenPlaceholder":"Why would you like to reopen this ticket?",
|
||||||
"claimPlaceholder":"Why did you claim this ticket?",
|
"claimPlaceholder":"Why would you like to claim this ticket?",
|
||||||
"unclaimPlaceholder":"Why did you unclaim this ticket?",
|
"unclaimPlaceholder":"Why would you like to unclaim this ticket?",
|
||||||
"pinPlaceholder":"Why did you pin this ticket?",
|
"pinPlaceholder":"Why would you like to pin this ticket?",
|
||||||
"unpinPlaceholder":"Why did you unpin this ticket?"
|
"unpinPlaceholder":"Why would you like to unpin this ticket?"
|
||||||
},
|
},
|
||||||
"logs":{
|
"logs":{
|
||||||
"createLog":"A new ticket got created by {0}!",
|
"createLog":"A new ticket got created by {0}.",
|
||||||
"closeLog":"This ticket has been closed by {0}!",
|
"closeLog":"This ticket has been closed by {0}.",
|
||||||
"closeDm":"Your ticket has been closed in our server!",
|
"closeDm":"Your ticket has been closed.",
|
||||||
"deleteLog":"This ticket has been deleted by {0}!",
|
"deleteLog":"This ticket has been deleted by {0}.",
|
||||||
"deleteDm":"Your ticket has been deleted in our server!",
|
"deleteDm":"Your ticket has been deleted.",
|
||||||
"reopenLog":"This ticket has been reopened by {0}!",
|
"reopenLog":"This ticket has been reopened by {0}.",
|
||||||
"reopenDm":"Your ticket has been reopened in our server!",
|
"reopenDm":"Your ticket has been reopened.",
|
||||||
"claimLog":"This ticket has been claimed by {0}!",
|
"claimLog":"This ticket has been claimed by {0}.",
|
||||||
"claimDm":"Your ticket has been claimed in our server!",
|
"claimDm":"Your ticket has been claimed.",
|
||||||
"unclaimLog":"This ticket has been unclaimed by {0}!",
|
"unclaimLog":"This ticket has been unclaimed by {0}.",
|
||||||
"unclaimDm":"Your ticket has been unclaimed in our server!",
|
"unclaimDm":"Your ticket has been unclaimed.",
|
||||||
"pinLog":"This ticket has been pinned by {0}!",
|
"pinLog":"This ticket has been pinned by {0}.",
|
||||||
"pinDm":"Your ticket has been pinned in our server!",
|
"pinDm":"Your ticket has been pinned.",
|
||||||
"unpinLog":"This ticket has been unpinned by {0}!",
|
"unpinLog":"This ticket has been unpinned by {0}.",
|
||||||
"unpinDm":"Your ticket has been unpinned in our server!",
|
"unpinDm":"Your ticket has been unpinned.",
|
||||||
"renameLog":"This ticket has been renamed to {0} by {1}!",
|
"renameLog":"This ticket has been renamed to {0} by {1}.",
|
||||||
"renameDm":"Your ticket has been renamed to {0} in our server!",
|
"renameDm":"Your ticket has been renamed to {0}.",
|
||||||
"moveLog":"This ticket has been moved to {0} by {1}!",
|
"moveLog":"This ticket has been moved to {0} by {1}.",
|
||||||
"moveDm":"Your ticket has been moved to {0} in our server!",
|
"moveDm":"Your ticket has been moved to {0}.",
|
||||||
"addLog":"{0} has been added to this ticket by {1}!",
|
"addLog":"{0} has been added to this ticket by {1}.",
|
||||||
"addDm":"{0} has been added to your ticket in our server!",
|
"addDm":"{0} has been added to your ticket.",
|
||||||
"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.",
|
||||||
|
|
||||||
"blacklistAddLog":"{0} was blacklisted by {1}!",
|
"blacklistAddLog":"{0} has been blacklisted by {1}.",
|
||||||
"blacklistRemoveLog":"{0} was removed from the blacklist by {1}!",
|
"blacklistRemoveLog":"{0} has been 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 from this server.\nYou are no longer able to create tickets.",
|
||||||
"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.\nYou can now create tickets again.",
|
||||||
"clearLog":"{0} tickets have been deleted by {1}!",
|
"clearLog":"{0} ticket(s) have been deleted by {1}.",
|
||||||
|
|
||||||
"transferLog":"The ownership of this ticket has been transferred from {0} to {1} by {2}!",
|
"transferLog":"Ticket ownership 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!",
|
"transferDm":"Ownership of your ticket has been transferred from {0} to {1}.",
|
||||||
"prioritySetLog":"The priority of this ticket has been changed to {0} by {1}!",
|
"prioritySetLog":"The priority of this ticket has been set to {0} by {1}.",
|
||||||
"prioritySetDm":"The priority of your ticket has been changed to {0} in our server!",
|
"prioritySetDm":"The priority of your ticket has been set to {0}.",
|
||||||
"roleUpdateLog":"{0} has updated their roles!",
|
"roleUpdateLog":"{0} has modified their roles.",
|
||||||
"roleUpdateDm":"Your roles in our server have been updated!"
|
"roleUpdateDm":"Your roles have been modified.",
|
||||||
|
"topicSetLog":"The priority of this ticket has been set to {0} by {1}.",
|
||||||
|
"topicSetDm":"The priority of your ticket has been set to {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
"success":{
|
"success":{
|
||||||
"visit":"Visit Transcript",
|
"visit":"Visit Transcript",
|
||||||
"ready":"Transcript Created",
|
"ready":"Transcript Created",
|
||||||
"textFileDescription":"This is the text transcript of a deleted ticket!",
|
"textFileDescription":"This is a text transcript of a deleted ticket.",
|
||||||
"htmlProgress":"Please wait while this html transcript is getting processed...",
|
"htmlProgress":"Please wait while the HTML transcript is being generated...",
|
||||||
|
|
||||||
"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 for a ticket you participated in.",
|
||||||
"createdActiveAdmin":"A new {0} transcript has been created in one of the tickets you participated as admin!",
|
"createdActiveAdmin":"A new {0} transcript has been created for a ticket you participated in as an admin.",
|
||||||
"createdEveryAdmin":"A new {0} transcript has been created in one of the tickets you were admin in!",
|
"createdEveryAdmin":"A new {0} transcript has been created for a ticket you managed as an admin.",
|
||||||
"createdOther":"A new {0} transcript has been created!"
|
"createdOther":"A new {0} transcript has been created."
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
"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 creating the transcript.\nWhat would you like to do?\n\nThis ticket will not be deleted until you select one of the options below.",
|
||||||
"title":"Transcript Error"
|
"title":"Transcript Error",
|
||||||
|
"noHistory":"This user does not yet have any transcripts.",
|
||||||
|
"historyNotSupported":"Transcript history is currently only supported with HTML Transcripts.\nText transcript history will be available in future versions."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"MESSAGES",
|
"messagesTitle":"MESSAGES",
|
||||||
@@ -279,7 +286,7 @@
|
|||||||
"fileTitle":"FILE",
|
"fileTitle":"FILE",
|
||||||
"fieldsTitle":"FIELDS",
|
"fieldsTitle":"FIELDS",
|
||||||
"reactionsTitle":"REACTIONS",
|
"reactionsTitle":"REACTIONS",
|
||||||
"statsTitle":"STATS",
|
"statsTitle":"STATISTICS",
|
||||||
"emptyContent":"<content is empty>",
|
"emptyContent":"<content is empty>",
|
||||||
"noTitle":"<no-title>",
|
"noTitle":"<no-title>",
|
||||||
"noDesc":"<no-description>"
|
"noDesc":"<no-description>"
|
||||||
@@ -298,72 +305,77 @@
|
|||||||
"unknownPanel":"Unknown Panel",
|
"unknownPanel":"Unknown Panel",
|
||||||
"notInGuild":"Not In Server",
|
"notInGuild":"Not In Server",
|
||||||
"channelRename":"Unable To Rename Channel",
|
"channelRename":"Unable To Rename Channel",
|
||||||
|
"channelCategory":"Unable To Change Category",
|
||||||
"busy":"Ticket Is Busy",
|
"busy":"Ticket Is Busy",
|
||||||
"permissionError":"Permission Error"
|
"permissionError":"Permission Error"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Contact the owner of this bot for more info!",
|
"askForInfo":"Please contact the bot owner for more information.",
|
||||||
"askForInfoResolve":"Contact the bot owner of this bot if this issue doesn't resolve after a few tries.",
|
"askForInfoResolve":"If the issue persists after a few attempts, please contact the bot owner.",
|
||||||
"internalError":"Failed to respond to this {0} due to an internal error!",
|
"internalError":"An internal error occurred while processing this {0}.",
|
||||||
"optionMissing":"A required parameter is missing in this command!",
|
"optionMissing":"A required parameter is missing for this command.",
|
||||||
"optionInvalid":"A parameter in this command is invalid!",
|
"optionInvalid":"One or more parameters provided for this command are invalid.",
|
||||||
"optionInvalidChoose":"Choose between",
|
"optionInvalidChoose":"Please choose between",
|
||||||
"unknownCommand":"Try visiting the help menu for more info!",
|
"unknownCommand":"Please use the help menu for more information.",
|
||||||
"noPermissions":"You are not allowed to use this {0}!",
|
"noPermissions":"You are not permitted to use this {0}.",
|
||||||
"noPermissionsList":"Required Permissions: (one of them)",
|
"noPermissionsList":"Required permissions (one of the following):",
|
||||||
"noPermissionsCooldown":"You are not allowed to use this {0} because you have a cooldown!",
|
"noPermissionsCooldown":"You cannot use this {0} while on cooldown.",
|
||||||
"noPermissionsBlacklist":"You are not allowed to use this {0} because you have been blacklisted!",
|
"noPermissionsBlacklist":"You cannot use this {0} because you are blacklisted.",
|
||||||
"noPermissionsLimitGlobal":"You are not allowed to create a ticket because the server reached the max tickets limit!",
|
"noPermissionsLimitGlobal":"You cannot create a ticket because the server has reached its maximum ticket limit.",
|
||||||
"noPermissionsLimitGlobalUser":"You are not allowed to create a ticket because you reached the max tickets limit!",
|
"noPermissionsLimitGlobalUser":"You cannot create a ticket because you have reached your maximum ticket limit.",
|
||||||
"noPermissionsLimitOption":"You are not allowed to create a ticket because the server reached the max tickets limit for this option!",
|
"noPermissionsLimitOption":"You cannot create a ticket because the server has reached the maximum ticket limit for this option.",
|
||||||
"noPermissionsLimitOptionUser":"You are not allowed to create a ticket because you reached the max tickets limit for this option!",
|
"noPermissionsLimitOptionUser":"You cannot create a ticket because you have reached the maximum ticket limit for this option.",
|
||||||
"unknownTicket":"Try this command again in a valid ticket!",
|
"unknownTicket":"Please run this command inside a valid ticket channel.",
|
||||||
"deprecatedTicket":"The current channel is not a valid ticket! It might have been a ticket from an old Open Ticket version!",
|
"deprecatedTicket":"This channel is not recognized as a valid ticket. It may have been created with an older version of the bot.",
|
||||||
"notInGuild":"This {0} doesn't work in DM! Please try it again in a server!",
|
"notInGuild":"This {0} cannot be used in direct messages. Please use it 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 rate limits, the channel could not be renamed immediately. It will be renamed automatically within 10 minutes if the bot remains online.",
|
||||||
"channelRenameSource":"The source of this error is: {0}",
|
"channelCategory":"Due to Discord rate limits, the channel category could not be changed immediately. It will be changed automatically within 10 minutes if the bot remains online.",
|
||||||
"busy":"Unable to use this {0}!\nThe ticket is currently being processed by the bot.\n\nPlease try again in a few seconds!",
|
"channelRenameSource":"Error source: {0}",
|
||||||
"closeBeforeMessage":"This ticket cannot be closed/deleted before a message has been sent by a user.",
|
"busy":"This {0} is currently unavailable.\nThe ticket is being processed by the bot.\n\nPlease try again in a few seconds.",
|
||||||
"closeBeforeAdminMessage":"This ticket cannot be closed/deleted before a message has been sent by a ticket admin or support member.",
|
"closeBeforeMessage":"This ticket cannot be closed or deleted before a user has sent a message.",
|
||||||
"unableToCreateTicket":"You are unable to create a ticket."
|
"closeBeforeAdminMessage":"This ticket cannot be closed or deleted before a support member or admin has sent a message.",
|
||||||
|
"unableToCreateTicket":"You are currently unable to create a ticket.",
|
||||||
|
"messageMissing":"Unable to locate message of interaction. Use the command `{0}` instead.",
|
||||||
|
"stateExpired":"This interaction is no longer valid or has expired. Use the command `{0}` instead. It is normal to receive this error after a major Open Ticket update.",
|
||||||
|
"panelStateExpired":"This panel is no longer valid or has expired. Create a new panel using `{0}` to solve the issue. It is normal to receive this error after a major Open Ticket update."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Value doesn't match pattern!",
|
"stringRegex":"The value does not match the required pattern.",
|
||||||
"stringMinLength":"Value needs to be at least {0} characters!",
|
"stringMinLength":"The value must be at least {0} characters long.",
|
||||||
"stringMaxLength":"Value needs to be at most {0} characters!",
|
"stringMaxLength":"The value must be at most {0} characters long.",
|
||||||
"numberInvalid":"Invalid number!",
|
"numberInvalid":"Invalid number provided.",
|
||||||
"numberMin":"Number needs to be at least {0}!",
|
"numberMin":"The number must be at least {0}.",
|
||||||
"numberMax":"Number needs to be at most {0}!",
|
"numberMax":"The number must be at most {0}.",
|
||||||
"numberDecimal":"Number is not allowed to be a decimal!",
|
"numberDecimal":"Decimals are not allowed.",
|
||||||
"numberNegative":"Number is not allowed to be negative!",
|
"numberNegative":"Negative numbers are not allowed.",
|
||||||
"numberPositive":"Number is not allowed to be positive!",
|
"numberPositive":"Positive numbers are not allowed.",
|
||||||
"numberZero":"Number is not allowed to be zero!",
|
"numberZero":"Zero is not allowed.",
|
||||||
"channelNotFound":"Unable to find channel!",
|
"channelNotFound":"Channel not found.",
|
||||||
"userNotFound":"Unable to find user!",
|
"userNotFound":"User not found.",
|
||||||
"roleNotFound":"Unable to find role!",
|
"roleNotFound":"Role not found.",
|
||||||
"memberNotFound":"Unable to find user!",
|
"memberNotFound":"Member not found.",
|
||||||
"mentionableNotFound":"Unable to find user or role!",
|
"mentionableNotFound":"User or role not found.",
|
||||||
"channelType":"Invalid channel type!",
|
"channelType":"Invalid channel type.",
|
||||||
"notInGuild":"This option requires you to be in a server!"
|
"notInGuild":"This option can only be used in a server."
|
||||||
},
|
},
|
||||||
"permissions":{
|
"permissions":{
|
||||||
"developer":"You need to be the developer of the bot.",
|
"developer":"This action is restricted to the bot developer.",
|
||||||
"owner":"You need to be the server owner.",
|
"owner":"You must be the server owner to use this.",
|
||||||
"admin":"You need to be a server admin.",
|
"admin":"You must have administrator permissions to use this.",
|
||||||
"moderator":"You need to be a moderator.",
|
"moderator":"You must be a moderator to use this.",
|
||||||
"support":"You need to be in the support team.",
|
"support":"You must be part of the support team to use this.",
|
||||||
"member":"You need to be a member.",
|
"member":"You must be a server member to use this.",
|
||||||
"discord-administrator":"You need to have the `ADMINISTRATOR` permission."
|
"discord-administrator":"You must have the `ADMINISTRATOR` permission."
|
||||||
},
|
},
|
||||||
"actionInvalid":{
|
"actionInvalid":{
|
||||||
"close":"Ticket is already closed!",
|
"close":"This ticket is already closed.",
|
||||||
"reopen":"Ticket is not closed yet!",
|
"reopen":"This ticket is not closed.",
|
||||||
"claim":"Ticket is already claimed!",
|
"claim":"This ticket is already claimed.",
|
||||||
"unclaim":"Ticket is not claimed yet!",
|
"unclaim":"This ticket is not claimed.",
|
||||||
"pin":"Ticket is already pinned!",
|
"pin":"This ticket is already pinned.",
|
||||||
"unpin":"Ticket is not pinned yet!",
|
"unpin":"This ticket is not pinned.",
|
||||||
"add":"This user is already able to access the ticket!",
|
"add":"This user already has access to this ticket.",
|
||||||
"remove":"Unable to remove this user from the ticket!"
|
"remove":"This user does not have access to this ticket."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"params":{
|
"params":{
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"Syntax",
|
"syntax":"Syntax",
|
||||||
"originalName":"Original Name",
|
"originalName":"Original Name",
|
||||||
"newName":"New Name",
|
"newName":"New Name",
|
||||||
|
"originalCategory":"Original Category",
|
||||||
|
"newCategory":"New Category",
|
||||||
"until":"Until",
|
"until":"Until",
|
||||||
"validOptions":"Valid Options",
|
"validOptions":"Valid Options",
|
||||||
"validPanels":"Valid Panels",
|
"validPanels":"Valid Panels",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"Participants",
|
"participants":"Participants",
|
||||||
"yes":"Yes",
|
"yes":"Yes",
|
||||||
"no":"No",
|
"no":"No",
|
||||||
|
"accept":"Accept",
|
||||||
|
"cancel":"Cancel",
|
||||||
"option":"Option",
|
"option":"Option",
|
||||||
"topic":"Topic",
|
"topic":"Topic",
|
||||||
"uptime":"System Uptime",
|
"uptime":"System Uptime",
|
||||||
@@ -432,107 +448,110 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"commands":{
|
"commands":{
|
||||||
"reason":"Specify an optional reason that will be visible in logs.",
|
"reason":"Optional reason shown in logs.",
|
||||||
"help":"Get a list of all the available commands.",
|
"help":"Display all available commands.",
|
||||||
"panel":"Spawn a message with a dropdown or buttons (for ticket creation).",
|
"panel":"Create a ticket panel (buttons or dropdown).",
|
||||||
"panelId":"The identifier of the panel that you want to spawn.",
|
"panelId":"ID of the panel to spawn.",
|
||||||
"panelAutoUpdate":"Do you want this panel to automatically update when edited?",
|
"panelAutoUpdate":"Automatically update this panel when edited.",
|
||||||
"ticket":"Instantly create a ticket.",
|
"ticket":"Create a ticket instantly.",
|
||||||
"ticketId":"The identifier of the ticket that you want to create.",
|
"ticketId":"ID of the ticket to create.",
|
||||||
"close":"Close a ticket.",
|
"ticketOtherUser":"Create a ticket for another user.",
|
||||||
"delete":"Delete a ticket.",
|
"close":"Close this ticket.",
|
||||||
"deleteNoTranscript":"Delete this ticket without creating a transcript.",
|
"delete":"Delete this ticket.",
|
||||||
"reopen":"Reopen a ticket.",
|
"deleteNoTranscript":"Delete ticket without saving a transcript.",
|
||||||
"claim":"Claim a ticket.",
|
"reopen":"Reopen a closed ticket.",
|
||||||
"claimUser":"Claim this ticket to someone else instead of yourself.",
|
"claim":"Claim this ticket.",
|
||||||
"unclaim":"Unclaim a ticket.",
|
"claimUser":"Claim the ticket for another user.",
|
||||||
"pin":"Pin a ticket.",
|
"unclaim":"Unclaim this ticket.",
|
||||||
"unpin":"Unpin a ticket.",
|
"pin":"Pin this ticket.",
|
||||||
|
"unpin":"Unpin this ticket.",
|
||||||
|
|
||||||
"move":"Move a ticket.",
|
"move":"Move ticket to another option.",
|
||||||
"moveId":"The identifier of the option that you want to move to.",
|
"moveId":"Target option ID.",
|
||||||
"rename":"Rename a ticket.",
|
"rename":"Rename this ticket.",
|
||||||
"renameName":"The new name for this ticket.",
|
"renameName":"New name for the ticket.",
|
||||||
"add":"Add a user to a ticket.",
|
"add":"Add a user to this ticket.",
|
||||||
"addUser":"The user to add.",
|
"addUser":"User to add.",
|
||||||
"remove":"Remove a user from a ticket.",
|
"remove":"Remove a user from this ticket.",
|
||||||
"removeUser":"The user to remove.",
|
"removeUser":"User to remove.",
|
||||||
|
|
||||||
"blacklist":"Manage the ticket blacklist.",
|
"blacklist":"Manage the blacklist.",
|
||||||
"blacklistView":"View a list of the current blacklist.",
|
"blacklistView":"View all blacklisted users.",
|
||||||
"blacklistAdd":"Add a user to the blacklist.",
|
"blacklistAdd":"Add a user to the blacklist.",
|
||||||
"blacklistRemove":"Remove a user from the blacklist.",
|
"blacklistRemove":"Remove a user from the blacklist.",
|
||||||
"blacklistGet":"Get the details from a blacklisted user.",
|
"blacklistGet":"View blacklist entry details.",
|
||||||
"blacklistGetUser":"The user to get details from.",
|
"blacklistGetUser":"User to look up.",
|
||||||
"stats":"View statistics from the bot, a member or a ticket.",
|
"stats":"View bot, user or ticket statistics.",
|
||||||
"statsReset":"Reset all the stats of the bot (and start counting from zero).",
|
"statsReset":"Reset all bot statistics.",
|
||||||
"statsGlobal":"View the global stats.",
|
"statsGlobal":"View global bot statistics.",
|
||||||
"statsUser":"View the stats from a user in the server.",
|
"statsUser":"View a user's statistics.",
|
||||||
"statsUserUser":"The user to view.",
|
"statsUserUser":"User to view.",
|
||||||
"statsTicket":"View the stats of a ticket in the server.",
|
"statsTicket":"View ticket statistics.",
|
||||||
"statsTicketTicket":"The ticket to view.",
|
"statsTicketTicket":"Ticket to view.",
|
||||||
|
|
||||||
"clear":"Delete multiple tickets at the same time.",
|
"clear":"Delete multiple tickets at once.",
|
||||||
"clearFilter":"The filter for clearing tickets.",
|
"clearFilter":"Filter used when clearing tickets.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
"all":"All",
|
"all":"All tickets",
|
||||||
"open":"Open",
|
"open":"Open tickets",
|
||||||
"close":"Closed",
|
"close":"Closed tickets",
|
||||||
"claim":"Claimed",
|
"claim":"Claimed tickets",
|
||||||
"unclaim":"Unclaimed",
|
"unclaim":"Unclaimed tickets",
|
||||||
"pin":"Pinned",
|
"pin":"Pinned tickets",
|
||||||
"unpin":"Unpinned",
|
"unpin":"Unpinned tickets",
|
||||||
"autoclose":"Autoclosed"
|
"autoclose":"Autoclosed tickets"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Manage autoclose in a ticket.",
|
"autoclose":"Manage ticket autoclose.",
|
||||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
"autocloseDisable":"Disable autoclose.",
|
||||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
"autocloseEnable":"Enable autoclose.",
|
||||||
"autocloseEnableTime":"The amount of hours this ticket needs to be inactive to close it.",
|
"autocloseEnableTime":"Hours of inactivity before closing.",
|
||||||
"autodelete":"Manage autodelete in a ticket.",
|
"autodelete":"Manage ticket autodelete.",
|
||||||
"autodeleteDisable":"Disable autodelete in this ticket.",
|
"autodeleteDisable":"Disable autodelete.",
|
||||||
"autodeleteEnable":"Enable autodelete in this ticket.",
|
"autodeleteEnable":"Enable autodelete.",
|
||||||
"autodeleteEnableTime":"The amount of days this ticket needs to be inactive to delete it.",
|
"autodeleteEnableTime":"Days of inactivity before deletion.",
|
||||||
|
|
||||||
"topic":"Manage the topic of the ticket channel.",
|
"topic":"Manage ticket channel topic.",
|
||||||
"topicSet":"Set the topic of the ticket channel.",
|
"topicSet":"Set the ticket channel topic.",
|
||||||
"topicValue":"The new topic of the channel.",
|
"topicValue":"New channel topic text.",
|
||||||
"topicList":"Get a list of all tickets with their topic and stats.",
|
"topicList":"List all ticket channel topics.",
|
||||||
"priority":"Manage the priority of the ticket.",
|
"priority":"Manage ticket priority.",
|
||||||
"prioritySet":"Set the priority of the ticket.",
|
"prioritySet":"Set ticket priority.",
|
||||||
"priorityValue":"The priority of the channel.",
|
"priorityValue":"Priority level.",
|
||||||
"priorityGet":"Get the priority of the ticket.",
|
"priorityGet":"View ticket priority.",
|
||||||
"priorityList":"Get a list of all tickets with their priority status.",
|
"priorityList":"List all ticket priorities.",
|
||||||
"transfer":"Transfer the ticket ownership from one user to another.",
|
"transfer":"Transfer ticket ownership.",
|
||||||
"transferUser":"The user to transfer to."
|
"transferUser":"User to transfer to.",
|
||||||
|
"transcripts":"View ticket transcript history of a user.",
|
||||||
|
"transcriptsUser":"The user to view."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Get a list of all the available commands.",
|
"help":"View all available commands.",
|
||||||
"ticket":"Instantly create a ticket.",
|
"ticket":"Create a ticket instantly.",
|
||||||
"close":"Close a ticket, this disables writing in this channel.",
|
"close":"Close this ticket and disable messaging in the channel.",
|
||||||
"delete":"Delete a ticket, this creates a transcript when enabled.",
|
"delete":"Delete this ticket (creates a transcript if enabled).",
|
||||||
"reopen":"Reopen a ticket, this enables writing in this channel again.",
|
"reopen":"Reopen a closed ticket and restore messaging.",
|
||||||
"pin":"Pin a ticket. This will move the ticket to the top and will add a '📌' emoij to the name.",
|
"pin":"Pin this ticket and move it to the top with '📌'.",
|
||||||
"unpin":"Unpin a ticket. The ticket will stay on it's position but will lose the '📌' emoij.",
|
"unpin":"Unpin this ticket and remove the '📌' emoji.",
|
||||||
"move":"Move a ticket. This will change the type of this ticket.",
|
"move":"Move this ticket to a different option or ticket type.",
|
||||||
"rename":"Rename a ticket. This will change the channel name of this ticket.",
|
"rename":"Rename this ticket channel.",
|
||||||
"claim":"Claim a ticket. With this, you can let your team know you are handling this ticket.",
|
"claim":"Claim this ticket to show you are handling it.",
|
||||||
"unclaim":"Unclaim a ticket. With this, you can let your team know that this ticket is free again.",
|
"unclaim":"Unclaim this ticket to mark it as available.",
|
||||||
"add":"Add a user to a ticket. This will allow the user to read & write in this ticket.",
|
"add":"Add a user to this ticket.",
|
||||||
"remove":"Remove a user from a ticket. This will remove the ability to read & write for a user in this ticket.",
|
"remove":"Remove a user's access from this ticket.",
|
||||||
"panel":"Spawn a message with a dropdown or buttons (for ticket creation).",
|
"panel":"Create a ticket panel with buttons or a dropdown.",
|
||||||
"blacklistView":"View a list of the current blacklist.",
|
"blacklistView":"View all blacklisted users.",
|
||||||
"blacklistAdd":"Add a user to the blacklist.",
|
"blacklistAdd":"Add a user to the blacklist.",
|
||||||
"blacklistRemove":"Remove a user from the blacklist.",
|
"blacklistRemove":"Remove a user from the blacklist.",
|
||||||
"blacklistGet":"Get the details from a blacklisted user.",
|
"blacklistGet":"View details of a blacklisted user.",
|
||||||
"statsGlobal":"View the global stats.",
|
"statsGlobal":"View global bot statistics.",
|
||||||
"statsTicket":"View the stats of a ticket in the server.",
|
"statsTicket":"View statistics for a ticket.",
|
||||||
"statsUser":"View the stats from a user in the server.",
|
"statsUser":"View statistics for a user.",
|
||||||
"statsReset":"Reset all the stats of the bot (and start counting from zero).",
|
"statsReset":"Reset all bot statistics.",
|
||||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
"autocloseDisable":"Disable autoclose for this ticket.",
|
||||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
"autocloseEnable":"Enable autoclose for this ticket.",
|
||||||
"autodeleteDisable":"Disable autodelete in this ticket.",
|
"autodeleteDisable":"Disable autodelete for this ticket.",
|
||||||
"autodeleteEnable":"Enable autodelete in this ticket.",
|
"autodeleteEnable":"Enable autodelete for this ticket.",
|
||||||
"categories":{
|
"categories":{
|
||||||
"general":"General Commands",
|
"general":"General Commands",
|
||||||
"basicTicket":"Basic Ticket Commands",
|
"basicTicket":"Basic Ticket Commands",
|
||||||
@@ -545,10 +564,10 @@
|
|||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
"global":"Global Stats",
|
"global":"Global Statistics",
|
||||||
"system":"System Stats",
|
"system":"System Statistics",
|
||||||
"user":"User Stats",
|
"user":"User Statistics",
|
||||||
"ticket":"Ticket Stats",
|
"ticket":"Ticket Statistics",
|
||||||
"participants":"Participants",
|
"participants":"Participants",
|
||||||
"messages":"Messages"
|
"messages":"Messages"
|
||||||
},
|
},
|
||||||
@@ -592,9 +611,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"Select your ticket",
|
"selectTicket":"Select a ticket",
|
||||||
"selectRole":"Select your role",
|
"selectRole":"Select a role",
|
||||||
"selectOption":"Select your option"
|
"selectOption":"Select an option",
|
||||||
|
"selectPriorityLevel":"Select priority level"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"Urgent",
|
"urgent":"Urgent",
|
||||||
|
|||||||
+167
-17
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["spyeye_"],
|
"translators":["spyeye_"],
|
||||||
"lastedited":"21/08/2024",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Czech",
|
"language":"Czech",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,6 +31,14 @@
|
|||||||
"stringContains":"Tento string musí obsahovat {0}!",
|
"stringContains":"Tento string musí obsahovat {0}!",
|
||||||
"stringChoices":"Tento string může být pouze jednou z následujících možností: {0}!",
|
"stringChoices":"Tento string může být pouze jednou z následujících možností: {0}!",
|
||||||
"stringRegex":"Tento string je neplatný!",
|
"stringRegex":"Tento string je neplatný!",
|
||||||
|
"stringInvertedContains":"Tento řetězec nesmí obsahovat {0}!",
|
||||||
|
"stringLowercase":"Tento řetězec musí být napsán pouze malými písmeny!",
|
||||||
|
"stringUppercase":"Tento řetězec musí být napsán pouze velkými písmeny!",
|
||||||
|
"stringSpecialCharacters":"Tento řetězec nesmí obsahovat žádné speciální znaky! (pouze a-z, 0-9 a mezery)",
|
||||||
|
"stringNoSpaces":"Tento řetězec nesmí obsahovat mezery!",
|
||||||
|
"stringCapitalWord":"Doporučuje se, aby každé slovo v tomto řetězci začínalo velkým písmenem!",
|
||||||
|
"stringCapitalSentence":"Zdá se, že některé věty v tomto řetězci nezačínají velkým písmenem!",
|
||||||
|
"stringPunctuation":"Zdá se, že věta v tomto řetězci nekončí interpunkčním znaménkem!",
|
||||||
|
|
||||||
"numberTooShort":"Toto číslo nesmí být kratší než {0} znaků!",
|
"numberTooShort":"Toto číslo nesmí být kratší než {0} znaků!",
|
||||||
"numberTooLong":"Toto číslo nesmí být delší než {0} znaků.!",
|
"numberTooLong":"Toto číslo nesmí být delší než {0} znaků.!",
|
||||||
@@ -48,6 +56,8 @@
|
|||||||
"numberNegative":"Toto číslo nemůže být záporné!",
|
"numberNegative":"Toto číslo nemůže být záporné!",
|
||||||
"numberPositive":"Toto číslo nemůže být kladné!",
|
"numberPositive":"Toto číslo nemůže být kladné!",
|
||||||
"numberZero":"Toto číslo nemůže být nula!",
|
"numberZero":"Toto číslo nemůže být nula!",
|
||||||
|
"numberNan":"Toto číslo nemůže být NaN (není číslo)!",
|
||||||
|
"numberInvertedContains":"Toto číslo nesmí obsahovat {0}!",
|
||||||
|
|
||||||
"booleanTrue":"Tento boolean nemůže být true!",
|
"booleanTrue":"Tento boolean nemůže být true!",
|
||||||
"booleanFalse":"Tento boolean nemůže být false!",
|
"booleanFalse":"Tento boolean nemůže být false!",
|
||||||
@@ -89,7 +99,8 @@
|
|||||||
"invalidButton":"Toto tlačítko musí mít alespoň {0} nebo {1}!",
|
"invalidButton":"Toto tlačítko musí mít alespoň {0} nebo {1}!",
|
||||||
"unusedOption":"Možnost {0} se nikde nepoužívá!",
|
"unusedOption":"Možnost {0} se nikde nepoužívá!",
|
||||||
"unusedQuestion":"Otázka {0} není nikde použita!",
|
"unusedQuestion":"Otázka {0} není nikde použita!",
|
||||||
"dropdownOption":"Panel s povoleným rozevíracím seznamem může obsahovat pouze možnosti typu „ticketu“!"
|
"dropdownOption":"Panel s rozbalovací nabídkou může obsahovat pouze možnosti typu: 'ticket', 'role' nebo 'sub-panel'.",
|
||||||
|
"customInvalidVersion":"Verze uvedená ve vaší konfiguraci neodpovídá! Ujistěte se, že jste konfiguraci aktualizovali na nejnovější verzi!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -107,7 +118,9 @@
|
|||||||
"helpSwitchText":"Zobrazit textové příkazy",
|
"helpSwitchText":"Zobrazit textové příkazy",
|
||||||
"helpPage":"Strana {0}",
|
"helpPage":"Strana {0}",
|
||||||
"withReason":"S důvodem",
|
"withReason":"S důvodem",
|
||||||
"withoutTranscript":"Bez důvodu"
|
"withoutTranscript":"Bez důvodu",
|
||||||
|
"blacklistAdd":"Přidat Uživatele na Blacklist",
|
||||||
|
"blacklistRemove":"Uvolnit Uživatele"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket vytvořen",
|
"created":"Ticket vytvořen",
|
||||||
@@ -132,6 +145,7 @@
|
|||||||
"blacklistAddDm":"Přidán na blacklistu",
|
"blacklistAddDm":"Přidán na blacklistu",
|
||||||
"blacklistRemoveDm":"Odebrán z blacklistu",
|
"blacklistRemoveDm":"Odebrán z blacklistu",
|
||||||
"clear":"Tickety vyčištěny",
|
"clear":"Tickety vyčištěny",
|
||||||
|
"clearTickets":"Vymazat tikety",
|
||||||
"roles":"Role aktualizovány",
|
"roles":"Role aktualizovány",
|
||||||
|
|
||||||
"autoclose":"Ticket automaticky uzavřen",
|
"autoclose":"Ticket automaticky uzavřen",
|
||||||
@@ -139,7 +153,13 @@
|
|||||||
"autocloseDisabled":"Automatické uzavření zakázáno",
|
"autocloseDisabled":"Automatické uzavření zakázáno",
|
||||||
"autodelete":"Ticket automaticky vymazán",
|
"autodelete":"Ticket automaticky vymazán",
|
||||||
"autodeleteEnabled":"Automatické mazání povoleno",
|
"autodeleteEnabled":"Automatické mazání povoleno",
|
||||||
"autodeleteDisabled":"Automatické mazání zakázáno"
|
"autodeleteDisabled":"Automatické mazání zakázáno",
|
||||||
|
|
||||||
|
"topicSet":"Téma změněno",
|
||||||
|
"prioritySet":"Priorita změněna",
|
||||||
|
"priorityGet":"Priorita tiketu",
|
||||||
|
"transfer":"Ticket přenesen",
|
||||||
|
"transcripts":"Historie Přepisů"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Tvůj ticket byl vytvořen. Klikni na tlačítko pod zprávou pro zobrazení!",
|
"create":"Tvůj ticket byl vytvořen. Klikni na tlačítko pod zprávou pro zobrazení!",
|
||||||
@@ -180,7 +200,12 @@
|
|||||||
"ticketMessageLimit":"Současně lze vytvořit pouze {0} ticketu!",
|
"ticketMessageLimit":"Současně lze vytvořit pouze {0} ticketu!",
|
||||||
"ticketMessageAutoclose":"Tento ticket se automaticky uzavře, pokud je neaktivní po dobu {0}h!",
|
"ticketMessageAutoclose":"Tento ticket se automaticky uzavře, pokud je neaktivní po dobu {0}h!",
|
||||||
"ticketMessageAutodelete":"Tento ticket bude automaticky smazán, pokud bude neaktivní po dobu {0} dnů!",
|
"ticketMessageAutodelete":"Tento ticket bude automaticky smazán, pokud bude neaktivní po dobu {0} dnů!",
|
||||||
"panelReady":"Panel najdete níže!\nTuto zprávu lze nyní smazat!"
|
"panelReady":"Panel je k dispozici ve zprávě následně!\nTato zpráva může být nyní smazána!",
|
||||||
|
|
||||||
|
"topicSet":"Téma kanálu bylo úspěšně změněno {0}!",
|
||||||
|
"prioritySet":"Priorita tiketu byla úspěšně změněna na {0} {1}!",
|
||||||
|
"priorityGet":"Aktuální priorita tohoto tiketu je {0}.",
|
||||||
|
"transfer":"Vlastnictví tiketu bylo úspěšně převedeno z {0} na {1} {2}!"
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder":"Proč jste tento ticket uzavřel?",
|
"closePlaceholder":"Proč jste tento ticket uzavřel?",
|
||||||
@@ -220,7 +245,16 @@
|
|||||||
"blacklistRemoveLog":"{0} byl odstraněn z blacklistu uživatelem {1}!",
|
"blacklistRemoveLog":"{0} byl odstraněn z blacklistu uživatelem {1}!",
|
||||||
"blacklistAddDm":"Byl jsi přidán na blacklist na našem serveru!\nOd teď nemůžeš vytvářet tickety!",
|
"blacklistAddDm":"Byl jsi přidán na blacklist na našem serveru!\nOd teď nemůžeš vytvářet tickety!",
|
||||||
"blacklistRemoveDm":"Byl jsi odstraněn z blacklistu na našem serveru!\nNyní můžeš opět vytvářet tickety!",
|
"blacklistRemoveDm":"Byl jsi odstraněn z blacklistu na našem serveru!\nNyní můžeš opět vytvářet tickety!",
|
||||||
"clearLog":"{0} ticketů bylo smazáno uživatelem {1}!"
|
"clearLog":"{0} ticketů bylo smazáno uživatelem {1}!",
|
||||||
|
|
||||||
|
"transferLog":"Vlastnictví tohoto tiketu bylo převedeno z {0} na {1} {2}!",
|
||||||
|
"transferDm":"Vlastnictví vašeho tiketu bylo převedeno z {0} na {1} na našem serveru!",
|
||||||
|
"prioritySetLog":"Priorita tohoto tiketu byla změněna na {0} {1}!",
|
||||||
|
"prioritySetDm":"Priorita vašeho tiketu byla změněna na {0} na našem serveru!",
|
||||||
|
"roleUpdateLog":"{0} aktualizoval své role!",
|
||||||
|
"roleUpdateDm":"Vaše role na našem serveru byly aktualizovány!",
|
||||||
|
"topicSetLog":"Priorita tohoto ticketu byla nastavena na {0} uživatelem {1}.",
|
||||||
|
"topicSetDm":"Priorita vašeho ticketu byla nastavena na {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -241,7 +275,21 @@
|
|||||||
"retry":"Zkusit Znovu",
|
"retry":"Zkusit Znovu",
|
||||||
"continue":"Vymazat bez přepisu",
|
"continue":"Vymazat bez přepisu",
|
||||||
"backup":"Vytvořit záložní přepis",
|
"backup":"Vytvořit záložní přepis",
|
||||||
"error":"Při pokusu o vytvoření přepisu se něco pokazilo.\nCo chcete udělat?\n\nTento ticket nebude smazán, dokud nekliknete na jedno z těchto tlačítek."
|
"error":"Při pokusu o vytvoření přepisu se něco pokazilo.\nCo chcete udělat?\n\nTento ticket nebude smazán, dokud nekliknete na jedno z těchto tlačítek.",
|
||||||
|
"title":"Chyba přepisu",
|
||||||
|
"noHistory":"Tento uživatel zatím nemá žádné přepisy.",
|
||||||
|
"historyNotSupported":"Historie přepisů je momentálně podporována pouze s HTML Transcripts.\nHistorie textových přepisů bude dostupná v budoucích verzích."
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"ZPRÁVY",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"SOUBOR",
|
||||||
|
"fieldsTitle":"POLE",
|
||||||
|
"reactionsTitle":"REAKCE",
|
||||||
|
"statsTitle":"STATISTIKY",
|
||||||
|
"emptyContent":"<obsah prázdný>",
|
||||||
|
"noTitle":"<bez názvu>",
|
||||||
|
"noDesc":"<bez popisu>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
@@ -257,7 +305,9 @@
|
|||||||
"unknownPanel":"Neznámý panel",
|
"unknownPanel":"Neznámý panel",
|
||||||
"notInGuild":"Nejsi na serveru",
|
"notInGuild":"Nejsi na serveru",
|
||||||
"channelRename":"Nepodařilo se přejmenovat kanál",
|
"channelRename":"Nepodařilo se přejmenovat kanál",
|
||||||
"busy":"Ticket je zaneprázdněn"
|
"channelCategory":"Nelze Změnit Kategorii",
|
||||||
|
"busy":"Ticket je zaneprázdněn",
|
||||||
|
"permissionError":"Chyba oprávnění"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Pro více informací kontaktuj vlastníka tohoto bota!",
|
"askForInfo":"Pro více informací kontaktuj vlastníka tohoto bota!",
|
||||||
@@ -279,8 +329,15 @@
|
|||||||
"deprecatedTicket":"Aktuální kanál není platný ticket! Může se jednat o ticket ze starší verze Open Ticketu!",
|
"deprecatedTicket":"Aktuální kanál není platný ticket! Může se jednat o ticket ze starší verze Open Ticketu!",
|
||||||
"notInGuild":"Tento {0} nefunguje v DM! Zkus to znovu na serveru!",
|
"notInGuild":"Tento {0} nefunguje v DM! Zkus to znovu na serveru!",
|
||||||
"channelRename":"Kvůli ratelimitům Discordu není momentálně možné, aby bot přejmenoval kanál. Kanál bude automaticky přejmenován do 10 minut, pokud nedojde k restartu bota.",
|
"channelRename":"Kvůli ratelimitům Discordu není momentálně možné, aby bot přejmenoval kanál. Kanál bude automaticky přejmenován do 10 minut, pokud nedojde k restartu bota.",
|
||||||
|
"channelCategory":"Kvůli omezením Discord rate limitů nebylo možné kategorii kanálu okamžitě změnit. Pokud bot zůstane online, bude automaticky změněna do 10 minut.",
|
||||||
"channelRenameSource":"Zdroj této chyby je: {0}",
|
"channelRenameSource":"Zdroj této chyby je: {0}",
|
||||||
"busy":"Nelze použít tento {0}!\nTicket je momentálně zpracováván botem.\n\nZkus to prosím znovu za několik sekund!"
|
"busy":"Nelze použít tento {0}!\nTicket je momentálně zpracováván botem.\n\nZkus to prosím znovu za několik sekund!",
|
||||||
|
"closeBeforeMessage":"Tento tiket nelze uzavřít/smazat, dokud uživatel neodešle zprávu.",
|
||||||
|
"closeBeforeAdminMessage":"Tento tiket nelze uzavřít/smazat, dokud admin tiketu nebo člen podpory neodešle zprávu.",
|
||||||
|
"unableToCreateTicket":"Nemůžete vytvořit tiket.",
|
||||||
|
"messageMissing":"Nepodařilo se najít zprávu interakce. Místo toho použijte příkaz `{0}`.",
|
||||||
|
"stateExpired":"Tato interakce již není platná nebo vypršela. Místo toho použijte příkaz `{0}`. Je normální obdržet tuto chybu po velké aktualizaci Open Ticket.",
|
||||||
|
"panelStateExpired":"Tento panel již není platný nebo vypršel. Vytvořte nový panel pomocí `{0}`, abyste problém vyřešili. Je normální obdržet tuto chybu po velké aktualizaci Open Ticket."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Hodnota neodpovídá vzoru!",
|
"stringRegex":"Hodnota neodpovídá vzoru!",
|
||||||
@@ -331,7 +388,6 @@
|
|||||||
"added":"Přidáno",
|
"added":"Přidáno",
|
||||||
"removed":"Odstraněno",
|
"removed":"Odstraněno",
|
||||||
"filter":"Filtr",
|
"filter":"Filtr",
|
||||||
"claimedBy":"Přiděleno uživatelem {0}",
|
|
||||||
"method":"Metoda",
|
"method":"Metoda",
|
||||||
"type":"Typ",
|
"type":"Typ",
|
||||||
"blacklisted":"Na blacklistu",
|
"blacklisted":"Na blacklistu",
|
||||||
@@ -343,6 +399,8 @@
|
|||||||
"syntax":"Syntaxe",
|
"syntax":"Syntaxe",
|
||||||
"originalName":"Původní jméno",
|
"originalName":"Původní jméno",
|
||||||
"newName":"Nové jméno",
|
"newName":"Nové jméno",
|
||||||
|
"originalCategory":"Původní Kategorie",
|
||||||
|
"newCategory":"Nová Kategorie",
|
||||||
"until":"Do",
|
"until":"Do",
|
||||||
"validOptions":"Platné možnosti",
|
"validOptions":"Platné možnosti",
|
||||||
"validPanels":"Platné panely",
|
"validPanels":"Platné panely",
|
||||||
@@ -352,10 +410,32 @@
|
|||||||
"version":"Verze",
|
"version":"Verze",
|
||||||
"name":"Jméno",
|
"name":"Jméno",
|
||||||
"role":"Role",
|
"role":"Role",
|
||||||
"status":"Stav",
|
"status":"STAV",
|
||||||
"claimed":"Přiděleno",
|
"claimed":"Přiděleno",
|
||||||
"pinned":"Připnuto",
|
"pinned":"Připnuto",
|
||||||
"creationDate":"Datum vytvoření"
|
"creationDate":"Datum vytvoření",
|
||||||
|
|
||||||
|
"noone":"Nikdo",
|
||||||
|
"open":"OTEVŘENO",
|
||||||
|
"closed":"UZAVŘENO",
|
||||||
|
"priority":"PRIORITA",
|
||||||
|
"participants":"ÚČASTNÍCI",
|
||||||
|
"yes":"Ano",
|
||||||
|
"no":"Ne",
|
||||||
|
"accept":"Přijmout",
|
||||||
|
"cancel":"Zrušit",
|
||||||
|
"option":"Možnost",
|
||||||
|
"topic":"Téma",
|
||||||
|
"uptime":"Doba provozu systému",
|
||||||
|
"messages":"Zprávy",
|
||||||
|
"embeds":"Embeds",
|
||||||
|
"files":"Soubory",
|
||||||
|
"components":"Komponenty",
|
||||||
|
"cooldown":"Cooldown",
|
||||||
|
"maxTickets":"Maximální tikety",
|
||||||
|
"admins":"Admini",
|
||||||
|
"roles":"Role",
|
||||||
|
"size":"Velikost"
|
||||||
},
|
},
|
||||||
"lowercase":{
|
"lowercase":{
|
||||||
"text":"text",
|
"text":"text",
|
||||||
@@ -375,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Chceš, aby se tento panel automaticky aktualizoval při úpravách?",
|
"panelAutoUpdate":"Chceš, aby se tento panel automaticky aktualizoval při úpravách?",
|
||||||
"ticket":"Okamžitě vytvoř ticket.",
|
"ticket":"Okamžitě vytvoř ticket.",
|
||||||
"ticketId":"Identifikátor ticketu, který chceš vytvořit.",
|
"ticketId":"Identifikátor ticketu, který chceš vytvořit.",
|
||||||
|
"ticketOtherUser":"Vytvořit ticket pro jiného uživatele.",
|
||||||
"close":"Uzavři ticket.",
|
"close":"Uzavři ticket.",
|
||||||
"delete":"Smaž ticket.",
|
"delete":"Smaž ticket.",
|
||||||
"deleteNoTranscript":"Smaž tento ticket bez vytvoření přepisu.",
|
"deleteNoTranscript":"Smaž tento ticket bez vytvoření přepisu.",
|
||||||
@@ -384,6 +465,7 @@
|
|||||||
"unclaim":"Odeber přidělení ticketu.",
|
"unclaim":"Odeber přidělení ticketu.",
|
||||||
"pin":"Připni ticket.",
|
"pin":"Připni ticket.",
|
||||||
"unpin":"Odepni ticket.",
|
"unpin":"Odepni ticket.",
|
||||||
|
|
||||||
"move":"Přesuň ticket.",
|
"move":"Přesuň ticket.",
|
||||||
"moveId":"Identifikátor možnost, na který chceš přesunout.",
|
"moveId":"Identifikátor možnost, na který chceš přesunout.",
|
||||||
"rename":"Přejmenuj ticket.",
|
"rename":"Přejmenuj ticket.",
|
||||||
@@ -392,6 +474,7 @@
|
|||||||
"addUser":"Uživatel k přidání.",
|
"addUser":"Uživatel k přidání.",
|
||||||
"remove":"Odstraň uživatele z ticketu.",
|
"remove":"Odstraň uživatele z ticketu.",
|
||||||
"removeUser":"Uživatel k odstranění.",
|
"removeUser":"Uživatel k odstranění.",
|
||||||
|
|
||||||
"blacklist":"Spravuj blacklist ticketů.",
|
"blacklist":"Spravuj blacklist ticketů.",
|
||||||
"blacklistView":"Zobraz seznam aktuálního blacklistu.",
|
"blacklistView":"Zobraz seznam aktuálního blacklistu.",
|
||||||
"blacklistAdd":"Přidej uživatele na blacklist.",
|
"blacklistAdd":"Přidej uživatele na blacklist.",
|
||||||
@@ -405,6 +488,7 @@
|
|||||||
"statsUserUser":"Uživatel, jehož statistiky chceš zobrazit.",
|
"statsUserUser":"Uživatel, jehož statistiky chceš zobrazit.",
|
||||||
"statsTicket":"Zobraz statistiky ticketu na serveru.",
|
"statsTicket":"Zobraz statistiky ticketu na serveru.",
|
||||||
"statsTicketTicket":"Ticket, jehož statistiky chceš zobrazit.",
|
"statsTicketTicket":"Ticket, jehož statistiky chceš zobrazit.",
|
||||||
|
|
||||||
"clear":"Smaž více ticketů najednou. Lze zadat volitelný filtr.",
|
"clear":"Smaž více ticketů najednou. Lze zadat volitelný filtr.",
|
||||||
"clearFilter":"Filtr pro vymazání tiketů.",
|
"clearFilter":"Filtr pro vymazání tiketů.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +501,7 @@
|
|||||||
"unpin":"Nepřipnuté",
|
"unpin":"Nepřipnuté",
|
||||||
"autoclose":"Automaticky uzavřené"
|
"autoclose":"Automaticky uzavřené"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Spravuj automatické uzavření ticketu.",
|
"autoclose":"Spravuj automatické uzavření ticketu.",
|
||||||
"autocloseDisable":"Deaktivuj automatické uzavření v tomto ticketu.",
|
"autocloseDisable":"Deaktivuj automatické uzavření v tomto ticketu.",
|
||||||
"autocloseEnable":"Aktivuj automatické uzavření v tomto ticketu.",
|
"autocloseEnable":"Aktivuj automatické uzavření v tomto ticketu.",
|
||||||
@@ -424,7 +509,21 @@
|
|||||||
"autodelete":"Spravuj automatické smazání ticketu.",
|
"autodelete":"Spravuj automatické smazání ticketu.",
|
||||||
"autodeleteDisable":"Deaktivuj automatické smazání v tomto ticketu.",
|
"autodeleteDisable":"Deaktivuj automatické smazání v tomto ticketu.",
|
||||||
"autodeleteEnable":"Aktivuj automatické smazání v tomto ticketu.",
|
"autodeleteEnable":"Aktivuj automatické smazání v tomto ticketu.",
|
||||||
"autodeleteEnableTime":"Počet dnů neaktivity, po kterých se ticket smaže."
|
"autodeleteEnableTime":"Počet dnů neaktivity, po kterých se ticket smaže.",
|
||||||
|
|
||||||
|
"topic":"Spravujte téma kanálu tiketu.",
|
||||||
|
"topicSet":"Nastavte téma kanálu tiketu.",
|
||||||
|
"topicValue":"Nové téma kanálu.",
|
||||||
|
"topicList":"Získejte seznam všech tiketů s jejich tématy a statistikami.",
|
||||||
|
"priority":"Spravujte prioritu tiketu.",
|
||||||
|
"prioritySet":"Nastavte prioritu tiketu.",
|
||||||
|
"priorityValue":"Priorita kanálu.",
|
||||||
|
"priorityGet":"Získejte prioritu tiketu.",
|
||||||
|
"priorityList":"Získejte seznam všech tiketů s jejich prioritou.",
|
||||||
|
"transfer":"Přeneste vlastnictví tiketu od jednoho uživatele k druhému.",
|
||||||
|
"transferUser":"Uživatel, na kterého se přenáší.",
|
||||||
|
"transcripts":"Zobrazit historii přepisů ticketů uživatele.",
|
||||||
|
"transcriptsUser":"Uživatel k zobrazení."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Získej seznam všech dostupných příkazů.",
|
"help":"Získej seznam všech dostupných příkazů.",
|
||||||
@@ -452,7 +551,16 @@
|
|||||||
"autocloseDisable":"Deaktivuj automatické uzavření v tomto ticketu.",
|
"autocloseDisable":"Deaktivuj automatické uzavření v tomto ticketu.",
|
||||||
"autocloseEnable":"Aktivuj automatické uzavření v tomto ticketu.",
|
"autocloseEnable":"Aktivuj automatické uzavření v tomto ticketu.",
|
||||||
"autodeleteDisable":"Deaktivuj automatické smazání v tomto ticketu.",
|
"autodeleteDisable":"Deaktivuj automatické smazání v tomto ticketu.",
|
||||||
"autodeleteEnable":"Aktivuj automatické smazání v tomto ticketu."
|
"autodeleteEnable":"Aktivuj automatické smazání v tomto ticketu.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Obecné příkazy",
|
||||||
|
"basicTicket":"Základní příkazy tiketu",
|
||||||
|
"advancedTicket":"Pokročilé příkazy tiketu",
|
||||||
|
"userTicket":"Příkazy uživatelského tiketu",
|
||||||
|
"admin":"Admin příkazy",
|
||||||
|
"advanced":"Pokročilé příkazy",
|
||||||
|
"extra":"Extra příkazy"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +568,8 @@
|
|||||||
"system":"Statistiky systému",
|
"system":"Statistiky systému",
|
||||||
"user":"Statistiky uživatele",
|
"user":"Statistiky uživatele",
|
||||||
"ticket":"Statistiky ticketu",
|
"ticket":"Statistiky ticketu",
|
||||||
"participants":"Účastníci"
|
"participants":"Účastníci",
|
||||||
|
"messages":"Zprávy"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Vytvořené tickety",
|
"ticketsCreated":"Vytvořené tickety",
|
||||||
@@ -472,7 +581,48 @@
|
|||||||
"ticketsPinned":"Připnuté tickety",
|
"ticketsPinned":"Připnuté tickety",
|
||||||
"ticketsMoved":"Přesunuté tickety",
|
"ticketsMoved":"Přesunuté tickety",
|
||||||
"usersBlacklisted":"Uživatelé na blacklistu",
|
"usersBlacklisted":"Uživatelé na blacklistu",
|
||||||
"transcriptsCreated":"Vytvořené přepisy"
|
"transcriptsCreated":"Vytvořené přepisy",
|
||||||
|
"ticketsAutodeleted":"Automaticky smazané tikety",
|
||||||
|
"ticketsTransferred":"Přenesené tikety",
|
||||||
|
"ticketVolume":"Objem tiketů",
|
||||||
|
"averageTickets":"Průměr tiketů/uživatel",
|
||||||
|
"currentTickets":"Aktuální tikety",
|
||||||
|
"age":"Věk tiketu",
|
||||||
|
"responseTime":"Doba odezvy",
|
||||||
|
"resolutionTime":"Doba vyřešení",
|
||||||
|
"createdOn":"Vytvořeno dne",
|
||||||
|
"createdBy":"Vytvořil",
|
||||||
|
"closedOn":"Uzavřeno dne",
|
||||||
|
"closedBy":"Uzavřel",
|
||||||
|
"claimedOn":"Převzato dne",
|
||||||
|
"claimedBy":"Převzal",
|
||||||
|
"pinnedOn":"Připnuto dne",
|
||||||
|
"pinnedBy":"Připnul",
|
||||||
|
"deletedOn":"Smazáno dne",
|
||||||
|
"deletedBy":"Smazal"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Vývojář",
|
||||||
|
"serverOwner":"Vlastník serveru",
|
||||||
|
"serverAdmin":"Server Admin",
|
||||||
|
"moderator":"Moderátorský tým",
|
||||||
|
"support":"Podpůrný tým",
|
||||||
|
"member":"Člen"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Vyberte svůj tiket",
|
||||||
|
"selectRole":"Vyberte svou roli",
|
||||||
|
"selectOption":"Vyberte svou možnost",
|
||||||
|
"selectPriorityLevel":"Vyberte úroveň priority"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Naléhavé",
|
||||||
|
"veryHigh":"Velmi vysoké",
|
||||||
|
"high":"Vysoké",
|
||||||
|
"normal":"Normální",
|
||||||
|
"low":"Nízké",
|
||||||
|
"veryLow":"Velmi nízké",
|
||||||
|
"none":"Žádné"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+584
-434
File diff suppressed because it is too large
Load Diff
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["DJj123dj"],
|
"translators":["DJj123dj"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Dutch",
|
"language":"Dutch",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"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 kan alleen opties bevatten van de types: 'ticket', 'role' of 'sub-panel'.",
|
||||||
"customInvalidVersion":"De versie gespecificeerd in u configbestand komt niet overeen! Zorg dat u het configbestand geüpdatet heeft naar de laatste versie!"
|
"customInvalidVersion":"De versie gespecificeerd in u configbestand komt niet overeen! Zorg dat u het configbestand geüpdatet heeft naar de laatste versie!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"Bekijk Text Commands",
|
"helpSwitchText":"Bekijk Text Commands",
|
||||||
"helpPage":"Pagina {0}",
|
"helpPage":"Pagina {0}",
|
||||||
"withReason":"Met Reden",
|
"withReason":"Met Reden",
|
||||||
"withoutTranscript":"Zonder Transcript"
|
"withoutTranscript":"Zonder Transcript",
|
||||||
|
"blacklistAdd":"Gebruiker Blacklisten",
|
||||||
|
"blacklistRemove":"Gebruiker Vrijgeven"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket Gecreëerd",
|
"created":"Ticket Gecreëerd",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"Onderwerp Veranderd",
|
"topicSet":"Onderwerp Veranderd",
|
||||||
"prioritySet":"Prioriteit Veranderd",
|
"prioritySet":"Prioriteit Veranderd",
|
||||||
"priorityGet":"Ticket Prioriteit",
|
"priorityGet":"Ticket Prioriteit",
|
||||||
"transfer":"Ticket Overgedragen"
|
"transfer":"Ticket Overgedragen",
|
||||||
|
"transcripts":"Transcript Geschiedenis"
|
||||||
},
|
},
|
||||||
"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!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"De prioriteit van dit ticket is veranderd naar {0} door {1}!",
|
"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!",
|
"prioritySetDm":"De prioriteit van u ticket is veranderd naar {0} in onze server!",
|
||||||
"roleUpdateLog":"{0} heeft zijn/haar rollen bewerkt!",
|
"roleUpdateLog":"{0} heeft zijn/haar rollen bewerkt!",
|
||||||
"roleUpdateDm":"U rollen in onze server zijn veranderd!"
|
"roleUpdateDm":"U rollen in onze server zijn veranderd!",
|
||||||
|
"topicSetLog":"De prioriteit van dit ticket is ingesteld op {0} door {1}.",
|
||||||
|
"topicSetDm":"De prioriteit van je ticket is ingesteld op {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"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"
|
"title":"Transcript Error",
|
||||||
|
"noHistory":"Deze gebruiker heeft nog geen transcripts.",
|
||||||
|
"historyNotSupported":"Transcriptgeschiedenis wordt momenteel alleen ondersteund met HTML Transcripts.\nGeschiedenis van teksttranscripts zal beschikbaar zijn in toekomstige versies."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"BERICHTEN",
|
"messagesTitle":"BERICHTEN",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"Onbekend Paneel",
|
"unknownPanel":"Onbekend Paneel",
|
||||||
"notInGuild":"Niet In Server",
|
"notInGuild":"Niet In Server",
|
||||||
"channelRename":"Kan Kanaal Niet Hernoemen",
|
"channelRename":"Kan Kanaal Niet Hernoemen",
|
||||||
|
"channelCategory":"Kan Categorie Niet Wijzigen",
|
||||||
"busy":"Ticket Is Bezig",
|
"busy":"Ticket Is Bezig",
|
||||||
"permissionError":"Permission Error"
|
"permissionError":"Permission Error"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"Het huidige kanaal is geen geldig ticket! Het is misschien een ticket van een oudere Open Ticket versie!",
|
"deprecatedTicket":"Het huidige kanaal is geen geldig ticket! Het is misschien een ticket van een oudere Open Ticket versie!",
|
||||||
"notInGuild":"Deze {0} werkt niet in DM! Probeer het opnieuw in een server!",
|
"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.",
|
||||||
|
"channelCategory":"Vanwege Discord rate limits kon de kanaalcategorie niet onmiddellijk worden gewijzigd. Deze wordt automatisch binnen 10 minuten gewijzigd als de bot online blijft.",
|
||||||
"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.",
|
"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.",
|
"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."
|
"unableToCreateTicket":"U kunt geen ticket aanmaken.",
|
||||||
|
"messageMissing":"Kan het bericht van de interactie niet vinden. Gebruik in plaats daarvan het commando `{0}`.",
|
||||||
|
"stateExpired":"Deze interactie is niet langer geldig of is verlopen. Gebruik in plaats daarvan het commando `{0}`. Het is normaal om deze fout te ontvangen na een grote Open Ticket-update.",
|
||||||
|
"panelStateExpired":"Dit paneel is niet langer geldig of is verlopen. Maak een nieuw paneel met `{0}` om het probleem op te lossen. Het is normaal om deze fout te ontvangen na een grote Open Ticket-update."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Waarde is niet gelijk aan het patroon!",
|
"stringRegex":"Waarde is niet gelijk aan het patroon!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"Syntax",
|
"syntax":"Syntax",
|
||||||
"originalName":"Originele Naam",
|
"originalName":"Originele Naam",
|
||||||
"newName":"Nieuwe Naam",
|
"newName":"Nieuwe Naam",
|
||||||
|
"originalCategory":"Originele Categorie",
|
||||||
|
"newCategory":"Nieuwe Categorie",
|
||||||
"until":"Tot",
|
"until":"Tot",
|
||||||
"validOptions":"Geldige Opties",
|
"validOptions":"Geldige Opties",
|
||||||
"validPanels":"Geldige Panelen",
|
"validPanels":"Geldige Panelen",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"Deelnemers",
|
"participants":"Deelnemers",
|
||||||
"yes":"Ja",
|
"yes":"Ja",
|
||||||
"no":"Nee",
|
"no":"Nee",
|
||||||
|
"accept":"Accepteren",
|
||||||
|
"cancel":"Annuleren",
|
||||||
"option":"Optie",
|
"option":"Optie",
|
||||||
"topic":"Onderwerp",
|
"topic":"Onderwerp",
|
||||||
"uptime":"Systeem Uptime",
|
"uptime":"Systeem Uptime",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Wil je dat dit paneel automatisch bijwerkt wanneer het aangepast wordt?",
|
"panelAutoUpdate":"Wil je dat dit paneel automatisch bijwerkt wanneer het aangepast wordt?",
|
||||||
"ticket":"Maak een instant ticket.",
|
"ticket":"Maak een instant ticket.",
|
||||||
"ticketId":"Het id van het ticket dat je wilt aanmaken.",
|
"ticketId":"Het id van het ticket dat je wilt aanmaken.",
|
||||||
|
"ticketOtherUser":"Maak een ticket aan voor een andere gebruiker.",
|
||||||
"close":"Sluit een ticket, dit schakelt schrijven in het kanaal uit.",
|
"close":"Sluit een ticket, dit schakelt schrijven in het kanaal uit.",
|
||||||
"delete":"Verwijder een ticket, dit maakt een transcript waneer ingeschakeld.",
|
"delete":"Verwijder een ticket, dit maakt een transcript waneer ingeschakeld.",
|
||||||
"deleteNoTranscript":"Verwijder dit ticket zonder een transcript aan te maken.",
|
"deleteNoTranscript":"Verwijder dit ticket zonder een transcript aan te maken.",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"Bekijk de prioriteit van een ticket.",
|
"priorityGet":"Bekijk de prioriteit van een ticket.",
|
||||||
"priorityList":"Bekijk een lijst van alle tickets met hun prioriteit.",
|
"priorityList":"Bekijk een lijst van alle tickets met hun prioriteit.",
|
||||||
"transfer":"Draag het ticket eigendom over van de ene naar de andere gebruiker.",
|
"transfer":"Draag het ticket eigendom over van de ene naar de andere gebruiker.",
|
||||||
"transferUser":"De user om naar over te dragen."
|
"transferUser":"De user om naar over te dragen.",
|
||||||
|
"transcripts":"Bekijk de ticket transcriptgeschiedenis van een gebruiker.",
|
||||||
|
"transcriptsUser":"De gebruiker om te bekijken."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Krijg een lijst van alle beschikbare commands.",
|
"help":"Krijg een lijst van alle beschikbare commands.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"Selecteer u ticket",
|
"selectTicket":"Selecteer u ticket",
|
||||||
"selectRole":"Selecteer u rol",
|
"selectRole":"Selecteer u rol",
|
||||||
"selectOption":"Selecteer u optie"
|
"selectOption":"Selecteer u optie",
|
||||||
|
"selectPriorityLevel":"Selecteer prioriteitsniveau"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"Urgent",
|
"urgent":"Urgent",
|
||||||
|
|||||||
+342
-322
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["DJj123dj"],
|
"translators":["DJj123dj"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"English",
|
"language":"English",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -13,94 +13,94 @@
|
|||||||
"typeWarning":"[WARNING]",
|
"typeWarning":"[WARNING]",
|
||||||
"typeInfo":"[INFO]",
|
"typeInfo":"[INFO]",
|
||||||
"headerConfigChecker":"CONFIG CHECKER",
|
"headerConfigChecker":"CONFIG CHECKER",
|
||||||
"headerDescription":"check for errors in your config files!",
|
"headerDescription":"Validating config files...",
|
||||||
"footerError":"the bot won't start until all {0}'s are fixed!",
|
"footerError":"The bot will not start until all {0}'s are resolved.",
|
||||||
"footerWarning":"it's recommended to fix all {0}'s before starting!",
|
"footerWarning":"The bot may behave unexpectedly until all {0}'s are resolved.",
|
||||||
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
|
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
|
||||||
"compactInformation":"use {0} for more information!",
|
"compactInformation":"Use {0} for a detailed config report.",
|
||||||
"dataPath":"path",
|
"dataPath":"path",
|
||||||
"dataDocs":"docs",
|
"dataDocs":"docs",
|
||||||
"dataMessages":"message"
|
"dataMessages":"message"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"stringTooShort":"This string can't be shorter than {0} characters!",
|
"stringTooShort":"Text must be at least {0} characters long",
|
||||||
"stringTooLong":"This string can't be longer than {0} characters!",
|
"stringTooLong":"Text must be no longer than {0} characters",
|
||||||
"stringLengthInvalid":"This string needs to be {0} characters long!",
|
"stringLengthInvalid":"Text must be exactly {0} characters long",
|
||||||
"stringStartsWith":"This string needs to start with {0}!",
|
"stringStartsWith":"Text must start with {0}",
|
||||||
"stringEndsWith":"This string needs to end with {0}!",
|
"stringEndsWith":"Text must end with {0}",
|
||||||
"stringContains":"This string needs to contain {0}!",
|
"stringContains":"Text must contain {0}",
|
||||||
"stringChoices":"This string can only be one of the following values: {0}!",
|
"stringChoices":"Text must be one of the following: {0}",
|
||||||
"stringRegex":"This string is invalid!",
|
"stringRegex":"Text does not match the required format",
|
||||||
"stringInvertedContains":"This string is not allowed to contain {0}!",
|
"stringInvertedContains":"Text must not contain {0}",
|
||||||
"stringLowercase":"This string must be written in lowercase only!",
|
"stringLowercase":"Text must be entirely lowercase",
|
||||||
"stringUppercase":"This string must be written in uppercase only!",
|
"stringUppercase":"Text must be entirely uppercase",
|
||||||
"stringSpecialCharacters":"This string is not allowed to contain any special characters! (a-z, 0-9 & space only)",
|
"stringSpecialCharacters":"Text must only contain letters (a–z), numbers (0–9), and spaces",
|
||||||
"stringNoSpaces":"This string is not allowed to contain spaces!",
|
"stringNoSpaces":"Text must not contain spaces",
|
||||||
"stringCapitalWord":"It's recommended that each word in this string starts with a capital letter!",
|
"stringCapitalWord":"Each word in this value should start with a capital letter",
|
||||||
"stringCapitalSentence":"It looks like some sentences in this string don't start with a capital letter!",
|
"stringCapitalSentence":"One or more sentences in this value do not start with a capital letter",
|
||||||
"stringPunctuation":"It looks like the sentence in this string doesn't end with a punctuation mark!",
|
"stringPunctuation":"The sentence in this value does not end with a punctuation mark",
|
||||||
|
|
||||||
"numberTooShort":"This number can't be shorter than {0} characters!",
|
"numberTooShort":"Number must be at least {0} digits long",
|
||||||
"numberTooLong":"This number can't be longer than {0} characters!",
|
"numberTooLong":"Number must be no longer than {0} digits",
|
||||||
"numberLengthInvalid":"This number needs to be {0} characters long!",
|
"numberLengthInvalid":"Number must be exactly {0} digits long",
|
||||||
"numberTooSmall":"This number needs to be at least {0}!",
|
"numberTooSmall":"Number must be at least {0}",
|
||||||
"numberTooLarge":"This number needs to be at most {0}!",
|
"numberTooLarge":"Number must be at most {0}",
|
||||||
"numberNotEqual":"This number needs to be {0}!",
|
"numberNotEqual":"Number must be exactly {0}",
|
||||||
"numberStep":"This number needs to be a multiple of {0}!",
|
"numberStep":"Number must be a multiple of {0}",
|
||||||
"numberStepOffset":"This number needs to be a multiple of {0} starting with {1}!",
|
"numberStepOffset":"Number must be a multiple of {0}, starting from {1}",
|
||||||
"numberStartsWith":"This number needs to start with {0}!",
|
"numberStartsWith":"Number must start with {0}",
|
||||||
"numberEndsWith":"This number needs to end with {0}!",
|
"numberEndsWith":"Number must end with {0}",
|
||||||
"numberContains":"This number needs to contain {0}!",
|
"numberContains":"Number must contain {0}",
|
||||||
"numberChoices":"This number can only be one of the following values: {0}!",
|
"numberChoices":"Number must be one of the following: {0}",
|
||||||
"numberFloat":"This number can't be a decimal!",
|
"numberFloat":"Number must be a whole number",
|
||||||
"numberNegative":"This number can't be negative!",
|
"numberNegative":"Number must be a positive number",
|
||||||
"numberPositive":"This number can't be positive!",
|
"numberPositive":"Number must be a negative number",
|
||||||
"numberZero":"This number can't be zero!",
|
"numberZero":"Number must not be zero",
|
||||||
"numberNan":"This number can't be NaN (Not A Number)!",
|
"numberNan":"Number must be a valid number",
|
||||||
"numberInvertedContains":"This number is not allowed to contain {0}!",
|
"numberInvertedContains":"Number must not contain {0}",
|
||||||
|
|
||||||
"booleanTrue":"This boolean can't be true!",
|
"booleanTrue":"Boolean must be false",
|
||||||
"booleanFalse":"This boolean can't be false!",
|
"booleanFalse":"Boolean must be true",
|
||||||
|
|
||||||
"arrayEmptyDisabled":"This array isn't allowed to be empty!",
|
"arrayEmptyDisabled":"List must not be empty",
|
||||||
"arrayEmptyRequired":"This array is required to be empty!",
|
"arrayEmptyRequired":"List must be empty",
|
||||||
"arrayTooShort":"This array needs to have a length of at least {0}!",
|
"arrayTooShort":"List must have at least {0} items",
|
||||||
"arrayTooLong":"This array needs to have a length of at most {0}!",
|
"arrayTooLong":"List must have at most {0} items",
|
||||||
"arrayLengthInvalid":"This array needs to have a length of {0}!",
|
"arrayLengthInvalid":"List must have exactly {0} items",
|
||||||
"arrayInvalidTypes":"This array can only contain the following types: {0}!",
|
"arrayInvalidTypes":"List may only contain the following types: {0}",
|
||||||
"arrayDouble":"This array doesn't allow the same value twice!",
|
"arrayDouble":"List must not contain duplicate values",
|
||||||
|
|
||||||
"discordInvalidId":"This is an invalid discord {0} id!",
|
"discordInvalidId":"Invalid Discord {0} ID",
|
||||||
"discordInvalidIdOptions":"This is an invalid discord {0} id! You can also use one of these: {1}!",
|
"discordInvalidIdOptions":"Invalid Discord {0} ID. Alternatively, use one of the following: {1}",
|
||||||
"discordInvalidToken":"This is an invalid discord token (syntactically)!",
|
"discordInvalidToken":"Invalid Discord token",
|
||||||
"colorInvalid":"This is an invalid hex color!",
|
"colorInvalid":"Invalid hex color",
|
||||||
"emojiTooShort":"This string needs to have at least {0} emoji's!",
|
"emojiTooShort":"Value must contain at least {0} emoji",
|
||||||
"emojiTooLong":"This string needs to have at most {0} emoji's!",
|
"emojiTooLong":"Value must contain at most {0} emoji",
|
||||||
"emojiCustom":"This emoji can't be a custom discord emoji!",
|
"emojiCustom":"Custom Discord emojis are not allowed here",
|
||||||
"emojiInvalid":"This is an invalid emoji!",
|
"emojiInvalid":"Invalid emoji",
|
||||||
"urlInvalid":"This url is invalid!",
|
"urlInvalid":"Invalid URL",
|
||||||
"urlInvalidHttp":"This url can only use the https:// protocol!",
|
"urlInvalidHttp":"URL must use the https:// protocol",
|
||||||
"urlInvalidProtocol":"This url can only use the http:// & https:// protocols!",
|
"urlInvalidProtocol":"URL must use the http:// or https:// protocol",
|
||||||
"urlInvalidHostname":"This url has a disallowed hostname!",
|
"urlInvalidHostname":"URL hostname is not allowed",
|
||||||
"urlInvalidExtension":"This url has an invalid extension! Choose between: {0}!",
|
"urlInvalidExtension":"Invalid URL extension. Allowed extensions: {0}",
|
||||||
"urlInvalidPath":"This url has an invalid path!",
|
"urlInvalidPath":"Invalid URL path",
|
||||||
"idNotUnique":"This id isn't unique, use another id instead!",
|
"idNotUnique":"This ID is already in use. Please choose a unique ID",
|
||||||
"idNonExistent":"The id {0} doesn't exist!",
|
"idNonExistent":"ID {0} does not exist",
|
||||||
|
|
||||||
"invalidType":"This property needs to be the type: {0}!",
|
"invalidType":"Property must be of type: {0}",
|
||||||
"propertyMissing":"The property {0} is missing from this object!",
|
"propertyMissing":"Required property {0} is missing from the object",
|
||||||
"propertyOptional":"The property {0} is optional in this object!",
|
"propertyOptional":"Property {0} is optional in the object",
|
||||||
"objectDisabled":"This object is disabled, enable it using {0}!",
|
"objectDisabled":"This object is disabled. Enable it using {0}",
|
||||||
"nullInvalid":"This property can't be null!",
|
"nullInvalid":"Property must not be null",
|
||||||
"switchInvalidType":"This needs to be one of the following types: {0}!",
|
"switchInvalidType":"Value must be one of the following types: {0}",
|
||||||
"objectSwitchInvalid":"This object needs to be one of the following types: {0}!",
|
"objectSwitchInvalid":"Object must be one of the following types: {0}",
|
||||||
|
|
||||||
"invalidLanguage":"This is an invalid language!",
|
"invalidLanguage":"Invalid language",
|
||||||
"invalidButton":"This button needs to have at least an {0} or {1}!",
|
"invalidButton":"Button must have at least an {0} or {1}",
|
||||||
"unusedOption":"The option {0} isn't used anywhere!",
|
"unusedOption":"Option {0} is not used anywhere",
|
||||||
"unusedQuestion":"The question {0} isn't used anywhere!",
|
"unusedQuestion":"Question {0} is not used anywhere",
|
||||||
"dropdownOption":"A panel with dropdown enabled can only contain options of the 'ticket' type!",
|
"dropdownOption":"A panel with dropdown can only contain options of the types: 'ticket', 'role' or 'sub-panel'.",
|
||||||
"customInvalidVersion":"The version specified in your config does not match! Make sure you have updated the config to the latest version!"
|
"customInvalidVersion":"Config version mismatch. Make sure to update your config to the latest version"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"View Text Commands",
|
"helpSwitchText":"View Text Commands",
|
||||||
"helpPage":"Page {0}",
|
"helpPage":"Page {0}",
|
||||||
"withReason":"With Reason",
|
"withReason":"With Reason",
|
||||||
"withoutTranscript":"Without Transcript"
|
"withoutTranscript":"Without Transcript",
|
||||||
|
"blacklistAdd":"Blacklist User",
|
||||||
|
"blacklistRemove":"Release User"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket Created",
|
"created":"Ticket Created",
|
||||||
@@ -156,122 +158,127 @@
|
|||||||
"topicSet":"Topic Changed",
|
"topicSet":"Topic Changed",
|
||||||
"prioritySet":"Priority Changed",
|
"prioritySet":"Priority Changed",
|
||||||
"priorityGet":"Ticket Priority",
|
"priorityGet":"Ticket Priority",
|
||||||
"transfer":"Ticket Transferred"
|
"transfer":"Ticket Transferred",
|
||||||
|
"transcripts":"Transcript History"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Your ticket has been created. Click the button below to access it!",
|
"create":"Your ticket is ready. Click the button below to view and continue.",
|
||||||
"close":"The ticket has been closed successfully!",
|
"close":"The ticket has been closed.",
|
||||||
"delete":"The ticket has been deleted successfully!",
|
"delete":"The ticket has been deleted.",
|
||||||
"reopen":"The ticket has been reopened successfully!",
|
"reopen":"The ticket has been reopened.",
|
||||||
"claim":"The ticket has been claimed successfully!",
|
"claim":"The ticket has been claimed.",
|
||||||
"unclaim":"The ticket has been unclaimed successfully!",
|
"unclaim":"The ticket has been unclaimed.",
|
||||||
"pin":"The ticket has been pinned successfully!",
|
"pin":"The ticket has been pinned.",
|
||||||
"unpin":"The ticket has been unpinned successfully!",
|
"unpin":"The ticket has been unpinned.",
|
||||||
"rename":"The ticket has been renamed to {0} successfully!",
|
"rename":"The ticket has been renamed to {0}.",
|
||||||
"move":"The ticket has been moved to {0} successfully!",
|
"move":"The ticket has been moved to {0}.",
|
||||||
"add":"{0} has been added to the ticket successfully!",
|
"add":"{0} has been added to the ticket.",
|
||||||
"remove":"{0} has been removed from the ticket successfully!",
|
"remove":"{0} has been removed from the ticket.",
|
||||||
|
|
||||||
"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 statistics have been reset.",
|
||||||
"statsError":"Unable to view ticket stats!\n{0} is not a ticket!",
|
"statsError":"Unable to retrieve ticket statistics.\n{0} is not a valid ticket.",
|
||||||
"blacklistAdd":"{0} has been blacklisted successfully!",
|
"blacklistAdd":"{0} has been blacklisted.",
|
||||||
"blacklistRemove":"{0} has been released successfully!",
|
"blacklistRemove":"{0} has been released.",
|
||||||
"blacklistGetSuccess":"{0} is currently blacklisted!",
|
"blacklistGetSuccess":"{0} is blacklisted!",
|
||||||
"blacklistGetEmpty":"{0} is currently not blacklisted!",
|
"blacklistGetEmpty":"{0} is not blacklisted!",
|
||||||
"blacklistViewEmpty":"No-one has been blacklisted yet!",
|
"blacklistViewEmpty":"No users have been blacklisted yet.",
|
||||||
"blacklistViewTip":"Use \"/blacklist add\" to blacklist a user!",
|
"blacklistViewTip":"Use \"/blacklist add\" to add a user to the blacklist.",
|
||||||
"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 cannot be undone.",
|
||||||
"clearReady":"{0} tickets have been deleted successfully!",
|
"clearReady":"{0} ticket(s) have been deleted.",
|
||||||
"rolesEmpty":"No roles have been updated!",
|
"rolesEmpty":"No roles were modified.",
|
||||||
|
|
||||||
"autocloseLeave":"This ticket has been autoclosed because the creator left the server!",
|
"autocloseLeave":"This ticket was automatically closed because its creator left the server.",
|
||||||
"autocloseTimeout":"This ticket has been autoclosed because it has been inactive for more than `{0}h`!",
|
"autocloseTimeout":"This ticket was automatically closed due to inactivity exceeding `{0}h`.",
|
||||||
"autodeleteLeave":"This ticket has been autodeleted because the creator left the server!",
|
"autodeleteLeave":"This ticket was automatically deleted because its creator left the server.",
|
||||||
"autodeleteTimeout":"This ticket has been autodeleted because it has been inactive for more than `{0} days`!",
|
"autodeleteTimeout":"This ticket was automatically deleted due to inactivity exceeding `{0} days`.",
|
||||||
"autocloseEnabled":"Autoclose has been enabled in this ticket!\nIt will be closed when it is inactive for more than `{0}h`!",
|
"autocloseEnabled":"Autoclose has been enabled for this ticket.\nIt will close after `{0}h` of inactivity.",
|
||||||
"autocloseDisabled":"Autoclose has been disabled in this ticket!\nIt won't be closed automatically anymore!",
|
"autocloseDisabled":"Autoclose has been disabled for this ticket.\nThis ticket will no longer close automatically.",
|
||||||
"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 for this ticket.\nIt will be deleted after `{0} days` of inactivity.",
|
||||||
"autodeleteDisabled":"Autodelete has been disabled in this ticket!\nIt won't be deleted automatically anymore!",
|
"autodeleteDisabled":"Autodelete has been disabled for this ticket.\nThis ticket will no longer be deleted automatically.",
|
||||||
|
|
||||||
"ticketMessageLimit":"You can only create {0} ticket(s) at the same time!",
|
"ticketMessageLimit":"You can only have {0} active ticket(s) at a time.",
|
||||||
"ticketMessageAutoclose":"This ticket will be autoclosed when inactive for {0}h!",
|
"ticketMessageAutoclose":"This ticket will automatically close after `{0}h` of inactivity.",
|
||||||
"ticketMessageAutodelete":"This ticket will be autodeleted when inactive for {0} days!",
|
"ticketMessageAutodelete":"This ticket will automatically be deleted after `{0} days` of inactivity.",
|
||||||
"panelReady":"The panel is available in the followup message!\nThis message can now be deleted!",
|
"panelReady":"The panel has been sent in the follow-up message.\nYou may now delete this message.",
|
||||||
|
|
||||||
"topicSet":"The channel topic has been changed by {0} successfully!",
|
"topicSet":"The channel topic has been changed by {0}.",
|
||||||
"prioritySet":"The ticket priority has been changed to {0} by {1} successfully!",
|
"prioritySet":"The ticket priority has been changed to {0} by {1}.",
|
||||||
"priorityGet":"The current priority of this ticket is {0}.",
|
"priorityGet":"The priority of this ticket is {0}.",
|
||||||
"transfer":"The ticket ownership has been transferred from {0} to {1} by {2} successfully!"
|
"transfer":"The ticket ownership has been transferred from {0} to {1} by {2}."
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder":"Why did you close this ticket?",
|
"closePlaceholder":"Why would you like to close this ticket?",
|
||||||
"deletePlaceholder":"Why did you delete this ticket?",
|
"deletePlaceholder":"Why would you like to delete this ticket?",
|
||||||
"reopenPlaceholder":"Why did you reopen this ticket?",
|
"reopenPlaceholder":"Why would you like to reopen this ticket?",
|
||||||
"claimPlaceholder":"Why did you claim this ticket?",
|
"claimPlaceholder":"Why would you like to claim this ticket?",
|
||||||
"unclaimPlaceholder":"Why did you unclaim this ticket?",
|
"unclaimPlaceholder":"Why would you like to unclaim this ticket?",
|
||||||
"pinPlaceholder":"Why did you pin this ticket?",
|
"pinPlaceholder":"Why would you like to pin this ticket?",
|
||||||
"unpinPlaceholder":"Why did you unpin this ticket?"
|
"unpinPlaceholder":"Why would you like to unpin this ticket?"
|
||||||
},
|
},
|
||||||
"logs":{
|
"logs":{
|
||||||
"createLog":"A new ticket got created by {0}!",
|
"createLog":"A new ticket got created by {0}.",
|
||||||
"closeLog":"This ticket has been closed by {0}!",
|
"closeLog":"This ticket has been closed by {0}.",
|
||||||
"closeDm":"Your ticket has been closed in our server!",
|
"closeDm":"Your ticket has been closed.",
|
||||||
"deleteLog":"This ticket has been deleted by {0}!",
|
"deleteLog":"This ticket has been deleted by {0}.",
|
||||||
"deleteDm":"Your ticket has been deleted in our server!",
|
"deleteDm":"Your ticket has been deleted.",
|
||||||
"reopenLog":"This ticket has been reopened by {0}!",
|
"reopenLog":"This ticket has been reopened by {0}.",
|
||||||
"reopenDm":"Your ticket has been reopened in our server!",
|
"reopenDm":"Your ticket has been reopened.",
|
||||||
"claimLog":"This ticket has been claimed by {0}!",
|
"claimLog":"This ticket has been claimed by {0}.",
|
||||||
"claimDm":"Your ticket has been claimed in our server!",
|
"claimDm":"Your ticket has been claimed.",
|
||||||
"unclaimLog":"This ticket has been unclaimed by {0}!",
|
"unclaimLog":"This ticket has been unclaimed by {0}.",
|
||||||
"unclaimDm":"Your ticket has been unclaimed in our server!",
|
"unclaimDm":"Your ticket has been unclaimed.",
|
||||||
"pinLog":"This ticket has been pinned by {0}!",
|
"pinLog":"This ticket has been pinned by {0}.",
|
||||||
"pinDm":"Your ticket has been pinned in our server!",
|
"pinDm":"Your ticket has been pinned.",
|
||||||
"unpinLog":"This ticket has been unpinned by {0}!",
|
"unpinLog":"This ticket has been unpinned by {0}.",
|
||||||
"unpinDm":"Your ticket has been unpinned in our server!",
|
"unpinDm":"Your ticket has been unpinned.",
|
||||||
"renameLog":"This ticket has been renamed to {0} by {1}!",
|
"renameLog":"This ticket has been renamed to {0} by {1}.",
|
||||||
"renameDm":"Your ticket has been renamed to {0} in our server!",
|
"renameDm":"Your ticket has been renamed to {0}.",
|
||||||
"moveLog":"This ticket has been moved to {0} by {1}!",
|
"moveLog":"This ticket has been moved to {0} by {1}.",
|
||||||
"moveDm":"Your ticket has been moved to {0} in our server!",
|
"moveDm":"Your ticket has been moved to {0}.",
|
||||||
"addLog":"{0} has been added to this ticket by {1}!",
|
"addLog":"{0} has been added to this ticket by {1}.",
|
||||||
"addDm":"{0} has been added to your ticket in our server!",
|
"addDm":"{0} has been added to your ticket.",
|
||||||
"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.",
|
||||||
|
|
||||||
"blacklistAddLog":"{0} was blacklisted by {1}!",
|
"blacklistAddLog":"{0} has been blacklisted by {1}.",
|
||||||
"blacklistRemoveLog":"{0} was removed from the blacklist by {1}!",
|
"blacklistRemoveLog":"{0} has been 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 from this server.\nYou are no longer able to create tickets.",
|
||||||
"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.\nYou can now create tickets again.",
|
||||||
"clearLog":"{0} tickets have been deleted by {1}!",
|
"clearLog":"{0} ticket(s) have been deleted by {1}.",
|
||||||
|
|
||||||
"transferLog":"The ownership of this ticket has been transferred from {0} to {1} by {2}!",
|
"transferLog":"Ticket ownership 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!",
|
"transferDm":"Ownership of your ticket has been transferred from {0} to {1}.",
|
||||||
"prioritySetLog":"The priority of this ticket has been changed to {0} by {1}!",
|
"prioritySetLog":"The priority of this ticket has been set to {0} by {1}.",
|
||||||
"prioritySetDm":"The priority of your ticket has been changed to {0} in our server!",
|
"prioritySetDm":"The priority of your ticket has been set to {0}.",
|
||||||
"roleUpdateLog":"{0} has updated their roles!",
|
"roleUpdateLog":"{0} has modified their roles.",
|
||||||
"roleUpdateDm":"Your roles in our server have been updated!"
|
"roleUpdateDm":"Your roles have been modified.",
|
||||||
|
"topicSetLog":"The priority of this ticket has been set to {0} by {1}.",
|
||||||
|
"topicSetDm":"The priority of your ticket has been set to {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
"success":{
|
"success":{
|
||||||
"visit":"Visit Transcript",
|
"visit":"Visit Transcript",
|
||||||
"ready":"Transcript Created",
|
"ready":"Transcript Created",
|
||||||
"textFileDescription":"This is the text transcript of a deleted ticket!",
|
"textFileDescription":"This is a text transcript of a deleted ticket.",
|
||||||
"htmlProgress":"Please wait while this html transcript is getting processed...",
|
"htmlProgress":"Please wait while the HTML transcript is being generated...",
|
||||||
|
|
||||||
"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 for a ticket you participated in.",
|
||||||
"createdActiveAdmin":"A new {0} transcript has been created in one of the tickets you participated as admin!",
|
"createdActiveAdmin":"A new {0} transcript has been created for a ticket you participated in as an admin.",
|
||||||
"createdEveryAdmin":"A new {0} transcript has been created in one of the tickets you were admin in!",
|
"createdEveryAdmin":"A new {0} transcript has been created for a ticket you managed as an admin.",
|
||||||
"createdOther":"A new {0} transcript has been created!"
|
"createdOther":"A new {0} transcript has been created."
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
"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 creating the transcript.\nWhat would you like to do?\n\nThis ticket will not be deleted until you select one of the options below.",
|
||||||
"title":"Transcript Error"
|
"title":"Transcript Error",
|
||||||
|
"noHistory":"This user does not yet have any transcripts.",
|
||||||
|
"historyNotSupported":"Transcript history is currently only supported with HTML Transcripts.\nText transcript history will be available in future versions."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"MESSAGES",
|
"messagesTitle":"MESSAGES",
|
||||||
@@ -279,7 +286,7 @@
|
|||||||
"fileTitle":"FILE",
|
"fileTitle":"FILE",
|
||||||
"fieldsTitle":"FIELDS",
|
"fieldsTitle":"FIELDS",
|
||||||
"reactionsTitle":"REACTIONS",
|
"reactionsTitle":"REACTIONS",
|
||||||
"statsTitle":"STATS",
|
"statsTitle":"STATISTICS",
|
||||||
"emptyContent":"<content is empty>",
|
"emptyContent":"<content is empty>",
|
||||||
"noTitle":"<no-title>",
|
"noTitle":"<no-title>",
|
||||||
"noDesc":"<no-description>"
|
"noDesc":"<no-description>"
|
||||||
@@ -298,72 +305,77 @@
|
|||||||
"unknownPanel":"Unknown Panel",
|
"unknownPanel":"Unknown Panel",
|
||||||
"notInGuild":"Not In Server",
|
"notInGuild":"Not In Server",
|
||||||
"channelRename":"Unable To Rename Channel",
|
"channelRename":"Unable To Rename Channel",
|
||||||
|
"channelCategory":"Unable To Change Category",
|
||||||
"busy":"Ticket Is Busy",
|
"busy":"Ticket Is Busy",
|
||||||
"permissionError":"Permission Error"
|
"permissionError":"Permission Error"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Contact the owner of this bot for more info!",
|
"askForInfo":"Please contact the bot owner for more information.",
|
||||||
"askForInfoResolve":"Contact the bot owner of this bot if this issue doesn't resolve after a few tries.",
|
"askForInfoResolve":"If the issue persists after a few attempts, please contact the bot owner.",
|
||||||
"internalError":"Failed to respond to this {0} due to an internal error!",
|
"internalError":"An internal error occurred while processing this {0}.",
|
||||||
"optionMissing":"A required parameter is missing in this command!",
|
"optionMissing":"A required parameter is missing for this command.",
|
||||||
"optionInvalid":"A parameter in this command is invalid!",
|
"optionInvalid":"One or more parameters provided for this command are invalid.",
|
||||||
"optionInvalidChoose":"Choose between",
|
"optionInvalidChoose":"Please choose between",
|
||||||
"unknownCommand":"Try visiting the help menu for more info!",
|
"unknownCommand":"Please use the help menu for more information.",
|
||||||
"noPermissions":"You are not allowed to use this {0}!",
|
"noPermissions":"You are not permitted to use this {0}.",
|
||||||
"noPermissionsList":"Required Permissions: (one of them)",
|
"noPermissionsList":"Required permissions (one of the following):",
|
||||||
"noPermissionsCooldown":"You are not allowed to use this {0} because you have a cooldown!",
|
"noPermissionsCooldown":"You cannot use this {0} while on cooldown.",
|
||||||
"noPermissionsBlacklist":"You are not allowed to use this {0} because you have been blacklisted!",
|
"noPermissionsBlacklist":"You cannot use this {0} because you are blacklisted.",
|
||||||
"noPermissionsLimitGlobal":"You are not allowed to create a ticket because the server reached the max tickets limit!",
|
"noPermissionsLimitGlobal":"You cannot create a ticket because the server has reached its maximum ticket limit.",
|
||||||
"noPermissionsLimitGlobalUser":"You are not allowed to create a ticket because you reached the max tickets limit!",
|
"noPermissionsLimitGlobalUser":"You cannot create a ticket because you have reached your maximum ticket limit.",
|
||||||
"noPermissionsLimitOption":"You are not allowed to create a ticket because the server reached the max tickets limit for this option!",
|
"noPermissionsLimitOption":"You cannot create a ticket because the server has reached the maximum ticket limit for this option.",
|
||||||
"noPermissionsLimitOptionUser":"You are not allowed to create a ticket because you reached the max tickets limit for this option!",
|
"noPermissionsLimitOptionUser":"You cannot create a ticket because you have reached the maximum ticket limit for this option.",
|
||||||
"unknownTicket":"Try this command again in a valid ticket!",
|
"unknownTicket":"Please run this command inside a valid ticket channel.",
|
||||||
"deprecatedTicket":"The current channel is not a valid ticket! It might have been a ticket from an old Open Ticket version!",
|
"deprecatedTicket":"This channel is not recognized as a valid ticket. It may have been created with an older version of the bot.",
|
||||||
"notInGuild":"This {0} doesn't work in DM! Please try it again in a server!",
|
"notInGuild":"This {0} cannot be used in direct messages. Please use it 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 rate limits, the channel could not be renamed immediately. It will be renamed automatically within 10 minutes if the bot remains online.",
|
||||||
"channelRenameSource":"The source of this error is: {0}",
|
"channelCategory":"Due to Discord rate limits, the channel category could not be changed immediately. It will be changed automatically within 10 minutes if the bot remains online.",
|
||||||
"busy":"Unable to use this {0}!\nThe ticket is currently being processed by the bot.\n\nPlease try again in a few seconds!",
|
"channelRenameSource":"Error source: {0}",
|
||||||
"closeBeforeMessage":"This ticket cannot be closed/deleted before a message has been sent by a user.",
|
"busy":"This {0} is currently unavailable.\nThe ticket is being processed by the bot.\n\nPlease try again in a few seconds.",
|
||||||
"closeBeforeAdminMessage":"This ticket cannot be closed/deleted before a message has been sent by a ticket admin or support member.",
|
"closeBeforeMessage":"This ticket cannot be closed or deleted before a user has sent a message.",
|
||||||
"unableToCreateTicket":"You are unable to create a ticket."
|
"closeBeforeAdminMessage":"This ticket cannot be closed or deleted before a support member or admin has sent a message.",
|
||||||
|
"unableToCreateTicket":"You are currently unable to create a ticket.",
|
||||||
|
"messageMissing":"Unable to locate message of interaction. Use the command `{0}` instead.",
|
||||||
|
"stateExpired":"This interaction is no longer valid or has expired. Use the command `{0}` instead. It is normal to receive this error after a major Open Ticket update.",
|
||||||
|
"panelStateExpired":"This panel is no longer valid or has expired. Create a new panel using `{0}` to solve the issue. It is normal to receive this error after a major Open Ticket update."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Value doesn't match pattern!",
|
"stringRegex":"The value does not match the required pattern.",
|
||||||
"stringMinLength":"Value needs to be at least {0} characters!",
|
"stringMinLength":"The value must be at least {0} characters long.",
|
||||||
"stringMaxLength":"Value needs to be at most {0} characters!",
|
"stringMaxLength":"The value must be at most {0} characters long.",
|
||||||
"numberInvalid":"Invalid number!",
|
"numberInvalid":"Invalid number provided.",
|
||||||
"numberMin":"Number needs to be at least {0}!",
|
"numberMin":"The number must be at least {0}.",
|
||||||
"numberMax":"Number needs to be at most {0}!",
|
"numberMax":"The number must be at most {0}.",
|
||||||
"numberDecimal":"Number is not allowed to be a decimal!",
|
"numberDecimal":"Decimals are not allowed.",
|
||||||
"numberNegative":"Number is not allowed to be negative!",
|
"numberNegative":"Negative numbers are not allowed.",
|
||||||
"numberPositive":"Number is not allowed to be positive!",
|
"numberPositive":"Positive numbers are not allowed.",
|
||||||
"numberZero":"Number is not allowed to be zero!",
|
"numberZero":"Zero is not allowed.",
|
||||||
"channelNotFound":"Unable to find channel!",
|
"channelNotFound":"Channel not found.",
|
||||||
"userNotFound":"Unable to find user!",
|
"userNotFound":"User not found.",
|
||||||
"roleNotFound":"Unable to find role!",
|
"roleNotFound":"Role not found.",
|
||||||
"memberNotFound":"Unable to find user!",
|
"memberNotFound":"Member not found.",
|
||||||
"mentionableNotFound":"Unable to find user or role!",
|
"mentionableNotFound":"User or role not found.",
|
||||||
"channelType":"Invalid channel type!",
|
"channelType":"Invalid channel type.",
|
||||||
"notInGuild":"This option requires you to be in a server!"
|
"notInGuild":"This option can only be used in a server."
|
||||||
},
|
},
|
||||||
"permissions":{
|
"permissions":{
|
||||||
"developer":"You need to be the developer of the bot.",
|
"developer":"This action is restricted to the bot developer.",
|
||||||
"owner":"You need to be the server owner.",
|
"owner":"You must be the server owner to use this.",
|
||||||
"admin":"You need to be a server admin.",
|
"admin":"You must have administrator permissions to use this.",
|
||||||
"moderator":"You need to be a moderator.",
|
"moderator":"You must be a moderator to use this.",
|
||||||
"support":"You need to be in the support team.",
|
"support":"You must be part of the support team to use this.",
|
||||||
"member":"You need to be a member.",
|
"member":"You must be a server member to use this.",
|
||||||
"discord-administrator":"You need to have the `ADMINISTRATOR` permission."
|
"discord-administrator":"You must have the `ADMINISTRATOR` permission."
|
||||||
},
|
},
|
||||||
"actionInvalid":{
|
"actionInvalid":{
|
||||||
"close":"Ticket is already closed!",
|
"close":"This ticket is already closed.",
|
||||||
"reopen":"Ticket is not closed yet!",
|
"reopen":"This ticket is not closed.",
|
||||||
"claim":"Ticket is already claimed!",
|
"claim":"This ticket is already claimed.",
|
||||||
"unclaim":"Ticket is not claimed yet!",
|
"unclaim":"This ticket is not claimed.",
|
||||||
"pin":"Ticket is already pinned!",
|
"pin":"This ticket is already pinned.",
|
||||||
"unpin":"Ticket is not pinned yet!",
|
"unpin":"This ticket is not pinned.",
|
||||||
"add":"This user is already able to access the ticket!",
|
"add":"This user already has access to this ticket.",
|
||||||
"remove":"Unable to remove this user from the ticket!"
|
"remove":"This user does not have access to this ticket."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"params":{
|
"params":{
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"Syntax",
|
"syntax":"Syntax",
|
||||||
"originalName":"Original Name",
|
"originalName":"Original Name",
|
||||||
"newName":"New Name",
|
"newName":"New Name",
|
||||||
|
"originalCategory":"Original Category",
|
||||||
|
"newCategory":"New Category",
|
||||||
"until":"Until",
|
"until":"Until",
|
||||||
"validOptions":"Valid Options",
|
"validOptions":"Valid Options",
|
||||||
"validPanels":"Valid Panels",
|
"validPanels":"Valid Panels",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"Participants",
|
"participants":"Participants",
|
||||||
"yes":"Yes",
|
"yes":"Yes",
|
||||||
"no":"No",
|
"no":"No",
|
||||||
|
"accept":"Accept",
|
||||||
|
"cancel":"Cancel",
|
||||||
"option":"Option",
|
"option":"Option",
|
||||||
"topic":"Topic",
|
"topic":"Topic",
|
||||||
"uptime":"System Uptime",
|
"uptime":"System Uptime",
|
||||||
@@ -432,107 +448,110 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"commands":{
|
"commands":{
|
||||||
"reason":"Specify an optional reason that will be visible in logs.",
|
"reason":"Optional reason shown in logs.",
|
||||||
"help":"Get a list of all the available commands.",
|
"help":"Display all available commands.",
|
||||||
"panel":"Spawn a message with a dropdown or buttons (for ticket creation).",
|
"panel":"Create a ticket panel (buttons or dropdown).",
|
||||||
"panelId":"The identifier of the panel that you want to spawn.",
|
"panelId":"ID of the panel to spawn.",
|
||||||
"panelAutoUpdate":"Do you want this panel to automatically update when edited?",
|
"panelAutoUpdate":"Automatically update this panel when edited.",
|
||||||
"ticket":"Instantly create a ticket.",
|
"ticket":"Create a ticket instantly.",
|
||||||
"ticketId":"The identifier of the ticket that you want to create.",
|
"ticketId":"ID of the ticket to create.",
|
||||||
"close":"Close a ticket.",
|
"ticketOtherUser":"Create a ticket for another user.",
|
||||||
"delete":"Delete a ticket.",
|
"close":"Close this ticket.",
|
||||||
"deleteNoTranscript":"Delete this ticket without creating a transcript.",
|
"delete":"Delete this ticket.",
|
||||||
"reopen":"Reopen a ticket.",
|
"deleteNoTranscript":"Delete ticket without saving a transcript.",
|
||||||
"claim":"Claim a ticket.",
|
"reopen":"Reopen a closed ticket.",
|
||||||
"claimUser":"Claim this ticket to someone else instead of yourself.",
|
"claim":"Claim this ticket.",
|
||||||
"unclaim":"Unclaim a ticket.",
|
"claimUser":"Claim the ticket for another user.",
|
||||||
"pin":"Pin a ticket.",
|
"unclaim":"Unclaim this ticket.",
|
||||||
"unpin":"Unpin a ticket.",
|
"pin":"Pin this ticket.",
|
||||||
|
"unpin":"Unpin this ticket.",
|
||||||
|
|
||||||
"move":"Move a ticket.",
|
"move":"Move ticket to another option.",
|
||||||
"moveId":"The identifier of the option that you want to move to.",
|
"moveId":"Target option ID.",
|
||||||
"rename":"Rename a ticket.",
|
"rename":"Rename this ticket.",
|
||||||
"renameName":"The new name for this ticket.",
|
"renameName":"New name for the ticket.",
|
||||||
"add":"Add a user to a ticket.",
|
"add":"Add a user to this ticket.",
|
||||||
"addUser":"The user to add.",
|
"addUser":"User to add.",
|
||||||
"remove":"Remove a user from a ticket.",
|
"remove":"Remove a user from this ticket.",
|
||||||
"removeUser":"The user to remove.",
|
"removeUser":"User to remove.",
|
||||||
|
|
||||||
"blacklist":"Manage the ticket blacklist.",
|
"blacklist":"Manage the blacklist.",
|
||||||
"blacklistView":"View a list of the current blacklist.",
|
"blacklistView":"View all blacklisted users.",
|
||||||
"blacklistAdd":"Add a user to the blacklist.",
|
"blacklistAdd":"Add a user to the blacklist.",
|
||||||
"blacklistRemove":"Remove a user from the blacklist.",
|
"blacklistRemove":"Remove a user from the blacklist.",
|
||||||
"blacklistGet":"Get the details from a blacklisted user.",
|
"blacklistGet":"View blacklist entry details.",
|
||||||
"blacklistGetUser":"The user to get details from.",
|
"blacklistGetUser":"User to look up.",
|
||||||
"stats":"View statistics from the bot, a member or a ticket.",
|
"stats":"View bot, user or ticket statistics.",
|
||||||
"statsReset":"Reset all the stats of the bot (and start counting from zero).",
|
"statsReset":"Reset all bot statistics.",
|
||||||
"statsGlobal":"View the global stats.",
|
"statsGlobal":"View global bot statistics.",
|
||||||
"statsUser":"View the stats from a user in the server.",
|
"statsUser":"View a user's statistics.",
|
||||||
"statsUserUser":"The user to view.",
|
"statsUserUser":"User to view.",
|
||||||
"statsTicket":"View the stats of a ticket in the server.",
|
"statsTicket":"View ticket statistics.",
|
||||||
"statsTicketTicket":"The ticket to view.",
|
"statsTicketTicket":"Ticket to view.",
|
||||||
|
|
||||||
"clear":"Delete multiple tickets at the same time.",
|
"clear":"Delete multiple tickets at once.",
|
||||||
"clearFilter":"The filter for clearing tickets.",
|
"clearFilter":"Filter used when clearing tickets.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
"all":"All",
|
"all":"All tickets",
|
||||||
"open":"Open",
|
"open":"Open tickets",
|
||||||
"close":"Closed",
|
"close":"Closed tickets",
|
||||||
"claim":"Claimed",
|
"claim":"Claimed tickets",
|
||||||
"unclaim":"Unclaimed",
|
"unclaim":"Unclaimed tickets",
|
||||||
"pin":"Pinned",
|
"pin":"Pinned tickets",
|
||||||
"unpin":"Unpinned",
|
"unpin":"Unpinned tickets",
|
||||||
"autoclose":"Autoclosed"
|
"autoclose":"Autoclosed tickets"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Manage autoclose in a ticket.",
|
"autoclose":"Manage ticket autoclose.",
|
||||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
"autocloseDisable":"Disable autoclose.",
|
||||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
"autocloseEnable":"Enable autoclose.",
|
||||||
"autocloseEnableTime":"The amount of hours this ticket needs to be inactive to close it.",
|
"autocloseEnableTime":"Hours of inactivity before closing.",
|
||||||
"autodelete":"Manage autodelete in a ticket.",
|
"autodelete":"Manage ticket autodelete.",
|
||||||
"autodeleteDisable":"Disable autodelete in this ticket.",
|
"autodeleteDisable":"Disable autodelete.",
|
||||||
"autodeleteEnable":"Enable autodelete in this ticket.",
|
"autodeleteEnable":"Enable autodelete.",
|
||||||
"autodeleteEnableTime":"The amount of days this ticket needs to be inactive to delete it.",
|
"autodeleteEnableTime":"Days of inactivity before deletion.",
|
||||||
|
|
||||||
"topic":"Manage the topic of the ticket channel.",
|
"topic":"Manage ticket channel topic.",
|
||||||
"topicSet":"Set the topic of the ticket channel.",
|
"topicSet":"Set the ticket channel topic.",
|
||||||
"topicValue":"The new topic of the channel.",
|
"topicValue":"New channel topic text.",
|
||||||
"topicList":"Get a list of all tickets with their topic and stats.",
|
"topicList":"List all ticket channel topics.",
|
||||||
"priority":"Manage the priority of the ticket.",
|
"priority":"Manage ticket priority.",
|
||||||
"prioritySet":"Set the priority of the ticket.",
|
"prioritySet":"Set ticket priority.",
|
||||||
"priorityValue":"The priority of the channel.",
|
"priorityValue":"Priority level.",
|
||||||
"priorityGet":"Get the priority of the ticket.",
|
"priorityGet":"View ticket priority.",
|
||||||
"priorityList":"Get a list of all tickets with their priority status.",
|
"priorityList":"List all ticket priorities.",
|
||||||
"transfer":"Transfer the ticket ownership from one user to another.",
|
"transfer":"Transfer ticket ownership.",
|
||||||
"transferUser":"The user to transfer to."
|
"transferUser":"User to transfer to.",
|
||||||
|
"transcripts":"View ticket transcript history of a user.",
|
||||||
|
"transcriptsUser":"The user to view."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Get a list of all the available commands.",
|
"help":"View all available commands.",
|
||||||
"ticket":"Instantly create a ticket.",
|
"ticket":"Create a ticket instantly.",
|
||||||
"close":"Close a ticket, this disables writing in this channel.",
|
"close":"Close this ticket and disable messaging in the channel.",
|
||||||
"delete":"Delete a ticket, this creates a transcript when enabled.",
|
"delete":"Delete this ticket (creates a transcript if enabled).",
|
||||||
"reopen":"Reopen a ticket, this enables writing in this channel again.",
|
"reopen":"Reopen a closed ticket and restore messaging.",
|
||||||
"pin":"Pin a ticket. This will move the ticket to the top and will add a '📌' emoij to the name.",
|
"pin":"Pin this ticket and move it to the top with '📌'.",
|
||||||
"unpin":"Unpin a ticket. The ticket will stay on it's position but will lose the '📌' emoij.",
|
"unpin":"Unpin this ticket and remove the '📌' emoji.",
|
||||||
"move":"Move a ticket. This will change the type of this ticket.",
|
"move":"Move this ticket to a different option or ticket type.",
|
||||||
"rename":"Rename a ticket. This will change the channel name of this ticket.",
|
"rename":"Rename this ticket channel.",
|
||||||
"claim":"Claim a ticket. With this, you can let your team know you are handling this ticket.",
|
"claim":"Claim this ticket to show you are handling it.",
|
||||||
"unclaim":"Unclaim a ticket. With this, you can let your team know that this ticket is free again.",
|
"unclaim":"Unclaim this ticket to mark it as available.",
|
||||||
"add":"Add a user to a ticket. This will allow the user to read & write in this ticket.",
|
"add":"Add a user to this ticket.",
|
||||||
"remove":"Remove a user from a ticket. This will remove the ability to read & write for a user in this ticket.",
|
"remove":"Remove a user's access from this ticket.",
|
||||||
"panel":"Spawn a message with a dropdown or buttons (for ticket creation).",
|
"panel":"Create a ticket panel with buttons or a dropdown.",
|
||||||
"blacklistView":"View a list of the current blacklist.",
|
"blacklistView":"View all blacklisted users.",
|
||||||
"blacklistAdd":"Add a user to the blacklist.",
|
"blacklistAdd":"Add a user to the blacklist.",
|
||||||
"blacklistRemove":"Remove a user from the blacklist.",
|
"blacklistRemove":"Remove a user from the blacklist.",
|
||||||
"blacklistGet":"Get the details from a blacklisted user.",
|
"blacklistGet":"View details of a blacklisted user.",
|
||||||
"statsGlobal":"View the global stats.",
|
"statsGlobal":"View global bot statistics.",
|
||||||
"statsTicket":"View the stats of a ticket in the server.",
|
"statsTicket":"View statistics for a ticket.",
|
||||||
"statsUser":"View the stats from a user in the server.",
|
"statsUser":"View statistics for a user.",
|
||||||
"statsReset":"Reset all the stats of the bot (and start counting from zero).",
|
"statsReset":"Reset all bot statistics.",
|
||||||
"autocloseDisable":"Disable autoclose in this ticket.",
|
"autocloseDisable":"Disable autoclose for this ticket.",
|
||||||
"autocloseEnable":"Enable autoclose in this ticket.",
|
"autocloseEnable":"Enable autoclose for this ticket.",
|
||||||
"autodeleteDisable":"Disable autodelete in this ticket.",
|
"autodeleteDisable":"Disable autodelete for this ticket.",
|
||||||
"autodeleteEnable":"Enable autodelete in this ticket.",
|
"autodeleteEnable":"Enable autodelete for this ticket.",
|
||||||
"categories":{
|
"categories":{
|
||||||
"general":"General Commands",
|
"general":"General Commands",
|
||||||
"basicTicket":"Basic Ticket Commands",
|
"basicTicket":"Basic Ticket Commands",
|
||||||
@@ -545,10 +564,10 @@
|
|||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
"global":"Global Stats",
|
"global":"Global Statistics",
|
||||||
"system":"System Stats",
|
"system":"System Statistics",
|
||||||
"user":"User Stats",
|
"user":"User Statistics",
|
||||||
"ticket":"Ticket Stats",
|
"ticket":"Ticket Statistics",
|
||||||
"participants":"Participants",
|
"participants":"Participants",
|
||||||
"messages":"Messages"
|
"messages":"Messages"
|
||||||
},
|
},
|
||||||
@@ -592,9 +611,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"Select your ticket",
|
"selectTicket":"Select a ticket",
|
||||||
"selectRole":"Select your role",
|
"selectRole":"Select a role",
|
||||||
"selectOption":"Select your option"
|
"selectOption":"Select an option",
|
||||||
|
"selectPriorityLevel":"Select priority level"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"Urgent",
|
"urgent":"Urgent",
|
||||||
|
|||||||
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["iamnotmega","ChatGPT"],
|
"translators":["iamnotmega","ChatGPT"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Estonian",
|
"language":"Estonian",
|
||||||
"automated":true
|
"automated":true
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"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":"Rippmenüüga paneel võib sisaldada ainult järgmisi valikuid: 'ticket', 'role' või 'sub-panel'.",
|
||||||
"customInvalidVersion":"Teie konfiguratsioonis määratud versioon ei ühti! Veenduge, et olete konfiguratsiooni uuendanud uusimale versioonile!"
|
"customInvalidVersion":"Teie konfiguratsioonis määratud versioon ei ühti! Veenduge, et olete konfiguratsiooni uuendanud uusimale versioonile!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"Vaadake tekstikäske",
|
"helpSwitchText":"Vaadake tekstikäske",
|
||||||
"helpPage":"Leht {0}",
|
"helpPage":"Leht {0}",
|
||||||
"withReason":"Põhjusega",
|
"withReason":"Põhjusega",
|
||||||
"withoutTranscript":"Ilma ärakirjata"
|
"withoutTranscript":"Ilma ärakirjata",
|
||||||
|
"blacklistAdd":"Lisa kasutaja musta nimekirja",
|
||||||
|
"blacklistRemove":"Vabasta kasutaja"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Pilet loodud",
|
"created":"Pilet loodud",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"Teema Muudetud",
|
"topicSet":"Teema Muudetud",
|
||||||
"prioritySet":"Prioriteet Muudetud",
|
"prioritySet":"Prioriteet Muudetud",
|
||||||
"priorityGet":"Pileti Prioriteet",
|
"priorityGet":"Pileti Prioriteet",
|
||||||
"transfer":"Pilet Üle Antud"
|
"transfer":"Pilet Üle Antud",
|
||||||
|
"transcripts":"Transkripti ajalugu"
|
||||||
},
|
},
|
||||||
"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!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"Selle pileti prioriteet on muudetud väärtuseks {0} kasutaja {1} poolt!",
|
"prioritySetLog":"Selle pileti prioriteet on muudetud väärtuseks {0} kasutaja {1} poolt!",
|
||||||
"prioritySetDm":"Teie pileti prioriteet on muudetud väärtuseks {0} meie serveris!",
|
"prioritySetDm":"Teie pileti prioriteet on muudetud väärtuseks {0} meie serveris!",
|
||||||
"roleUpdateLog":"{0} uuendas oma rolle!",
|
"roleUpdateLog":"{0} uuendas oma rolle!",
|
||||||
"roleUpdateDm":"Teie rolle meie serveris on uuendatud!"
|
"roleUpdateDm":"Teie rolle meie serveris on uuendatud!",
|
||||||
|
"topicSetLog":"Selle pileti prioriteedi määras {1} väärtusele {0}.",
|
||||||
|
"topicSetDm":"Sinu pileti prioriteet on seatud väärtusele {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"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"
|
"title":"Transkriptsiooniviga",
|
||||||
|
"noHistory":"Sellel kasutajal ei ole veel ühtegi transkripti.",
|
||||||
|
"historyNotSupported":"Transkripti ajalugu on praegu toetatud ainult HTML Transcriptsiga.\nTekstiliste transkriptide ajalugu on saadaval tulevastes versioonides."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"SÕNUMID",
|
"messagesTitle":"SÕNUMID",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"Tundmatu paneel",
|
"unknownPanel":"Tundmatu paneel",
|
||||||
"notInGuild":"Pole serveris",
|
"notInGuild":"Pole serveris",
|
||||||
"channelRename":"Kanalit ei saa ümber nimetada",
|
"channelRename":"Kanalit ei saa ümber nimetada",
|
||||||
|
"channelCategory":"Kategooriat ei saa muuta",
|
||||||
"busy":"Pilet on kinni",
|
"busy":"Pilet on kinni",
|
||||||
"permissionError":"Õiguste Viga"
|
"permissionError":"Õiguste Viga"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"Praegune kanal ei ole kehtiv pilet! See võis olla pilet vanast Open Ticketi versioonist!",
|
"deprecatedTicket":"Praegune kanal ei ole kehtiv pilet! See võis olla pilet vanast Open Ticketi versioonist!",
|
||||||
"notInGuild":"See {0} ei tööta DM-is! Palun proovi uuesti serveris!",
|
"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.",
|
||||||
|
"channelCategory":"Discordi kiiruspiirangute tõttu ei saanud kanali kategooriat kohe muuta. Kui bot jääb võrgus, muudetakse see automaatselt 10 minuti jooksul.",
|
||||||
"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.",
|
"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.",
|
"closeBeforeAdminMessage":"Seda piletit ei saa sulgeda/kustutada enne, kui piletihaldur või tugiliige on sõnumi saatnud.",
|
||||||
"unableToCreateTicket":"Te ei saa piletit luua."
|
"unableToCreateTicket":"Te ei saa piletit luua.",
|
||||||
|
"messageMissing":"Interaktsiooni sõnumit ei leitud. Kasuta selle asemel käsku `{0}`.",
|
||||||
|
"stateExpired":"See interaktsioon ei ole enam kehtiv või on aegunud. Kasuta selle asemel käsku `{0}`. See on tavaline pärast Open Ticket suurt uuendust.",
|
||||||
|
"panelStateExpired":"See paneel ei ole enam kehtiv või on aegunud. Loo uus paneel kasutades `{0}`, et probleem lahendada. See on tavaline pärast Open Ticket suurt uuendust."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Väärtus ei vasta mustrile!",
|
"stringRegex":"Väärtus ei vasta mustrile!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"Süntaks",
|
"syntax":"Süntaks",
|
||||||
"originalName":"Algne nimi",
|
"originalName":"Algne nimi",
|
||||||
"newName":"Uus nimi",
|
"newName":"Uus nimi",
|
||||||
|
"originalCategory":"Algne kategooria",
|
||||||
|
"newCategory":"Uus kategooria",
|
||||||
"until":"Kuni",
|
"until":"Kuni",
|
||||||
"validOptions":"Kehtivad valikud",
|
"validOptions":"Kehtivad valikud",
|
||||||
"validPanels":"Kehtivad paneelid",
|
"validPanels":"Kehtivad paneelid",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"Osalejad",
|
"participants":"Osalejad",
|
||||||
"yes":"Jah",
|
"yes":"Jah",
|
||||||
"no":"Ei",
|
"no":"Ei",
|
||||||
|
"accept":"Nõustu",
|
||||||
|
"cancel":"Tühista",
|
||||||
"option":"Valik",
|
"option":"Valik",
|
||||||
"topic":"Teema",
|
"topic":"Teema",
|
||||||
"uptime":"Süsteemi Töötamise Aeg",
|
"uptime":"Süsteemi Töötamise Aeg",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Kas soovite seda paneeli redigeerimisel automaatselt värskendada?",
|
"panelAutoUpdate":"Kas soovite seda paneeli redigeerimisel automaatselt värskendada?",
|
||||||
"ticket":"Looge pilet koheselt.",
|
"ticket":"Looge pilet koheselt.",
|
||||||
"ticketId":"Pileti identifikaator, mille soovite luua.",
|
"ticketId":"Pileti identifikaator, mille soovite luua.",
|
||||||
|
"ticketOtherUser":"Loo pilet teisele kasutajale.",
|
||||||
"close":"Sulgege pilet.",
|
"close":"Sulgege pilet.",
|
||||||
"delete":"Kustuta pilet.",
|
"delete":"Kustuta pilet.",
|
||||||
"deleteNoTranscript":"Kustutage see pilet ilma ärakirja loomata.",
|
"deleteNoTranscript":"Kustutage see pilet ilma ärakirja loomata.",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"Hangi pileti prioriteet.",
|
"priorityGet":"Hangi pileti prioriteet.",
|
||||||
"priorityList":"Hangi nimekiri kõigist piletitest ja nende prioriteedi olekust.",
|
"priorityList":"Hangi nimekiri kõigist piletitest ja nende prioriteedi olekust.",
|
||||||
"transfer":"Anna pileti omand üle ühelt kasutajalt teisele.",
|
"transfer":"Anna pileti omand üle ühelt kasutajalt teisele.",
|
||||||
"transferUser":"Kasutaja, kellele omand üle anda."
|
"transferUser":"Kasutaja, kellele omand üle anda.",
|
||||||
|
"transcripts":"Vaata kasutaja piletite transkripti ajalugu.",
|
||||||
|
"transcriptsUser":"Kasutaja, keda vaadata."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Hankige kõigi saadaolevate käskude loend.",
|
"help":"Hankige kõigi saadaolevate käskude loend.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"Vali oma pilet",
|
"selectTicket":"Vali oma pilet",
|
||||||
"selectRole":"Vali oma roll",
|
"selectRole":"Vali oma roll",
|
||||||
"selectOption":"Vali oma valik"
|
"selectOption":"Vali oma valik",
|
||||||
|
"selectPriorityLevel":"Vali prioriteeditase"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"Kiireloomuline",
|
"urgent":"Kiireloomuline",
|
||||||
|
|||||||
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["iamnotmega","ChatGPT"],
|
"translators":["iamnotmega","ChatGPT"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Finnish",
|
"language":"Finnish",
|
||||||
"automated":true
|
"automated":true
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"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":"Pudotusvalikollinen paneeli voi sisältää vain seuraavia vaihtoehtoja: 'ticket', 'role' tai 'sub-panel'.",
|
||||||
"customInvalidVersion":"Määritetty versio kokoonpanossasi ei vastaa! Varmista, että olet päivittänyt kokoonpanon uusimpaan versioon!"
|
"customInvalidVersion":"Määritetty versio kokoonpanossasi ei vastaa! Varmista, että olet päivittänyt kokoonpanon uusimpaan versioon!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"Näytä tekstikomennot",
|
"helpSwitchText":"Näytä tekstikomennot",
|
||||||
"helpPage":"Sivu {0}",
|
"helpPage":"Sivu {0}",
|
||||||
"withReason":"Syyllä",
|
"withReason":"Syyllä",
|
||||||
"withoutTranscript":"Ilman transkriptiota"
|
"withoutTranscript":"Ilman transkriptiota",
|
||||||
|
"blacklistAdd":"Lisää käyttäjä mustalle listalle",
|
||||||
|
"blacklistRemove":"Vapauta käyttäjä"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Lippu luotu",
|
"created":"Lippu luotu",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"Aihe Muutettu",
|
"topicSet":"Aihe Muutettu",
|
||||||
"prioritySet":"Prioriteetti Muutettu",
|
"prioritySet":"Prioriteetti Muutettu",
|
||||||
"priorityGet":"Tiketin Prioriteetti",
|
"priorityGet":"Tiketin Prioriteetti",
|
||||||
"transfer":"Tiketti Siirretty"
|
"transfer":"Tiketti Siirretty",
|
||||||
|
"transcripts":"Transkriptien historia"
|
||||||
},
|
},
|
||||||
"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!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"Tämän tiketin prioriteetti on vaihdettu arvoksi {0} käyttäjän {1} toimesta!",
|
"prioritySetLog":"Tämän tiketin prioriteetti on vaihdettu arvoksi {0} käyttäjän {1} toimesta!",
|
||||||
"prioritySetDm":"Tiketin prioriteetti on vaihdettu arvoksi {0} palvelimellamme!",
|
"prioritySetDm":"Tiketin prioriteetti on vaihdettu arvoksi {0} palvelimellamme!",
|
||||||
"roleUpdateLog":"{0} on päivittänyt roolinsa!",
|
"roleUpdateLog":"{0} on päivittänyt roolinsa!",
|
||||||
"roleUpdateDm":"Roolisi palvelimellamme on päivitetty!"
|
"roleUpdateDm":"Roolisi palvelimellamme on päivitetty!",
|
||||||
|
"topicSetLog":"Tämän tiketin prioriteetti asetettiin arvoon {0} käyttäjän {1} toimesta.",
|
||||||
|
"topicSetDm":"Tikettisi prioriteetti on asetettu arvoon {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"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"
|
"title":"Transkriptiovirhe",
|
||||||
|
"noHistory":"Tällä käyttäjällä ei ole vielä transkriptejä.",
|
||||||
|
"historyNotSupported":"Transkriptien historiaa tuetaan tällä hetkellä vain HTML Transcriptsilla.\nTekstimuotoinen transkriptien historia tulee saataville tulevissa versioissa."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"VIESTIT",
|
"messagesTitle":"VIESTIT",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"Tuntematon paneeli",
|
"unknownPanel":"Tuntematon paneeli",
|
||||||
"notInGuild":"Ei Palvelimessa",
|
"notInGuild":"Ei Palvelimessa",
|
||||||
"channelRename":"Kanavaa ei voi nimetä uudelleen",
|
"channelRename":"Kanavaa ei voi nimetä uudelleen",
|
||||||
|
"channelCategory":"Luokan Vaihto Ei Onnistu",
|
||||||
"busy":"Lippu on varattu",
|
"busy":"Lippu on varattu",
|
||||||
"permissionError":"Käyttöoikeusvirhe"
|
"permissionError":"Käyttöoikeusvirhe"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"Nykyinen kanava ei ole kelvollinen lippu! Se saattoi olla lippu vanhasta Open Ticket -versiosta!",
|
"deprecatedTicket":"Nykyinen kanava ei ole kelvollinen lippu! Se saattoi olla lippu vanhasta Open Ticket -versiosta!",
|
||||||
"notInGuild":"Tämä {0} ei toimi DM:ssä! Ole hyvä ja yritä uudelleen palvelimella!",
|
"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.",
|
||||||
|
"channelCategory":"Discordin nopeusrajoitusten vuoksi kanavan luokkaa ei voitu muuttaa heti. Se päivitetään automaattisesti 10 minuutin kuluessa, jos botti pysyy online-tilassa.",
|
||||||
"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.",
|
"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.",
|
"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ä."
|
"unableToCreateTicket":"Et voi luoda tikettiä.",
|
||||||
|
"messageMissing":"Vuorovaikutuksen viestiä ei löytynyt. Käytä sen sijaan komentoa `{0}`.",
|
||||||
|
"stateExpired":"Tämä vuorovaikutus ei ole enää voimassa tai on vanhentunut. Käytä sen sijaan komentoa `{0}`. Tämä on normaalia suuren Open Ticket -päivityksen jälkeen.",
|
||||||
|
"panelStateExpired":"Tämä paneeli ei ole enää voimassa tai on vanhentunut. Luo uusi paneeli käyttämällä `{0}` ongelman ratkaisemiseksi. Tämä on normaalia suuren Open Ticket -päivityksen jälkeen."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Arvo ei vastaa mallia!",
|
"stringRegex":"Arvo ei vastaa mallia!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"Syntaksi",
|
"syntax":"Syntaksi",
|
||||||
"originalName":"Alkuperäinen Nimi",
|
"originalName":"Alkuperäinen Nimi",
|
||||||
"newName":"Alkuperäinen Nimi",
|
"newName":"Alkuperäinen Nimi",
|
||||||
|
"originalCategory":"Alkuperäinen Kategoria",
|
||||||
|
"newCategory":"Uusi Kategoria",
|
||||||
"until":"Kunnes",
|
"until":"Kunnes",
|
||||||
"validOptions":"Kelvolliset vaihtoehdot",
|
"validOptions":"Kelvolliset vaihtoehdot",
|
||||||
"validPanels":"Kelvolliset paneelit",
|
"validPanels":"Kelvolliset paneelit",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"Osallistujat",
|
"participants":"Osallistujat",
|
||||||
"yes":"Kyllä",
|
"yes":"Kyllä",
|
||||||
"no":"Ei",
|
"no":"Ei",
|
||||||
|
"accept":"Hyväksy",
|
||||||
|
"cancel":"Peruuta",
|
||||||
"option":"Vaihtoehto",
|
"option":"Vaihtoehto",
|
||||||
"topic":"Aihe",
|
"topic":"Aihe",
|
||||||
"uptime":"Järjestelmän Käyttöaika",
|
"uptime":"Järjestelmän Käyttöaika",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Haluatko tämän paneelin päivittyvän automaattisesti, kun sitä muokataan?",
|
"panelAutoUpdate":"Haluatko tämän paneelin päivittyvän automaattisesti, kun sitä muokataan?",
|
||||||
"ticket":"Luo lippu välittömästi.",
|
"ticket":"Luo lippu välittömästi.",
|
||||||
"ticketId":"Sen lipun tunniste, jonka haluat luoda.",
|
"ticketId":"Sen lipun tunniste, jonka haluat luoda.",
|
||||||
|
"ticketOtherUser":"Luo tiketti toiselle käyttäjälle.",
|
||||||
"close":"Sulje lippu.",
|
"close":"Sulje lippu.",
|
||||||
"delete":"Poista lippu.",
|
"delete":"Poista lippu.",
|
||||||
"deleteNoTranscript":"Poista tämä lippu luomatta transkriptiota.",
|
"deleteNoTranscript":"Poista tämä lippu luomatta transkriptiota.",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"Hae tiketin prioriteetti.",
|
"priorityGet":"Hae tiketin prioriteetti.",
|
||||||
"priorityList":"Hae lista kaikista tiketeistä ja niiden prioriteettitilasta.",
|
"priorityList":"Hae lista kaikista tiketeistä ja niiden prioriteettitilasta.",
|
||||||
"transfer":"Siirrä tiketin omistus käyttäjältä toiselle.",
|
"transfer":"Siirrä tiketin omistus käyttäjältä toiselle.",
|
||||||
"transferUser":"Käyttäjä, jolle omistus siirretään."
|
"transferUser":"Käyttäjä, jolle omistus siirretään.",
|
||||||
|
"transcripts":"Näytä käyttäjän tikettien transkriptien historia.",
|
||||||
|
"transcriptsUser":"Käyttäjä, jota tarkastellaan."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Hanki luettelo kaikista käytettävissä olevista komennoista.",
|
"help":"Hanki luettelo kaikista käytettävissä olevista komennoista.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"Valitse tikettisi",
|
"selectTicket":"Valitse tikettisi",
|
||||||
"selectRole":"Valitse roolisi",
|
"selectRole":"Valitse roolisi",
|
||||||
"selectOption":"Valitse vaihtoehtosi"
|
"selectOption":"Valitse vaihtoehtosi",
|
||||||
|
"selectPriorityLevel":"Valitse prioriteettitaso"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"Kiireellinen",
|
"urgent":"Kiireellinen",
|
||||||
|
|||||||
+166
-16
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["guillee3"],
|
"translators":["guillee3"],
|
||||||
"lastedited":"04/12/2024",
|
"lastedited":"25/05/2026",
|
||||||
"language":"French",
|
"language":"French",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,6 +31,14 @@
|
|||||||
"stringContains":"Cette chaîne doit contenir {0}!",
|
"stringContains":"Cette chaîne doit contenir {0}!",
|
||||||
"stringChoices":"Cette chaîne ne peut être que l'une des valeurs suivantes : {0}!",
|
"stringChoices":"Cette chaîne ne peut être que l'une des valeurs suivantes : {0}!",
|
||||||
"stringRegex":"Cette chaîne est invalide!",
|
"stringRegex":"Cette chaîne est invalide!",
|
||||||
|
"stringInvertedContains":"Cette chaîne ne peut pas contenir {0}!",
|
||||||
|
"stringLowercase":"Cette chaîne doit être écrite uniquement en minuscules!",
|
||||||
|
"stringUppercase":"Cette chaîne doit être écrite uniquement en majuscules!",
|
||||||
|
"stringSpecialCharacters":"Cette chaîne ne peut pas contenir de caractères spéciaux! (a-z, 0-9 et espace uniquement)",
|
||||||
|
"stringNoSpaces":"Cette chaîne ne peut pas contenir d'espaces!",
|
||||||
|
"stringCapitalWord":"Il est recommandé que chaque mot de cette chaîne commence par une majuscule!",
|
||||||
|
"stringCapitalSentence":"Il semble que certaines phrases dans cette chaîne ne commencent pas par une majuscule!",
|
||||||
|
"stringPunctuation":"Il semble que la phrase dans cette chaîne ne se termine pas par un signe de ponctuation!",
|
||||||
|
|
||||||
"numberTooShort":"Ce nombre ne peut pas être plus court que {0} caractères!",
|
"numberTooShort":"Ce nombre ne peut pas être plus court que {0} caractères!",
|
||||||
"numberTooLong":"Ce nombre ne peut pas être plus long que {0} caractères!",
|
"numberTooLong":"Ce nombre ne peut pas être plus long que {0} caractères!",
|
||||||
@@ -48,6 +56,8 @@
|
|||||||
"numberNegative":"Ce nombre ne peut pas être négatif!",
|
"numberNegative":"Ce nombre ne peut pas être négatif!",
|
||||||
"numberPositive":"Ce nombre ne peut pas être positif!",
|
"numberPositive":"Ce nombre ne peut pas être positif!",
|
||||||
"numberZero":"Ce nombre ne peut pas être zéro!",
|
"numberZero":"Ce nombre ne peut pas être zéro!",
|
||||||
|
"numberNan":"Ce nombre ne peut pas être NaN (Not A Number)!",
|
||||||
|
"numberInvertedContains":"Ce nombre ne peut pas contenir {0}!",
|
||||||
|
|
||||||
"booleanTrue":"Ce booléen ne peut pas être vrai!",
|
"booleanTrue":"Ce booléen ne peut pas être vrai!",
|
||||||
"booleanFalse":"Ce booléen ne peut pas être faux!",
|
"booleanFalse":"Ce booléen ne peut pas être faux!",
|
||||||
@@ -89,7 +99,8 @@
|
|||||||
"invalidButton":"Ce bouton doit avoir au moins un {0} ou {1}!",
|
"invalidButton":"Ce bouton doit avoir au moins un {0} ou {1}!",
|
||||||
"unusedOption":"L'option {0} n'est utilisée nulle part!",
|
"unusedOption":"L'option {0} n'est utilisée nulle part!",
|
||||||
"unusedQuestion":"La question {0} n'est utilisée nulle part!",
|
"unusedQuestion":"La question {0} n'est utilisée nulle part!",
|
||||||
"dropdownOption":"Un panneau avec un menu déroulant activé ne peut contenir que des options du type 'ticket'!"
|
"dropdownOption":"Un panneau avec menu déroulant peut uniquement contenir des options des types : 'ticket', 'role' ou 'sub-panel'.",
|
||||||
|
"customInvalidVersion":"La version spécifiée dans votre config ne correspond pas! Assurez-vous d'avoir mis à jour la config vers la dernière version!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -107,7 +118,9 @@
|
|||||||
"helpSwitchText":"Voir les Commandes Textuelles",
|
"helpSwitchText":"Voir les Commandes Textuelles",
|
||||||
"helpPage":"Page {0}",
|
"helpPage":"Page {0}",
|
||||||
"withReason":"Avec Raison",
|
"withReason":"Avec Raison",
|
||||||
"withoutTranscript":"Sans Transcription"
|
"withoutTranscript":"Sans Transcription",
|
||||||
|
"blacklistAdd":"Mettre l'Utilisateur en Liste Noire",
|
||||||
|
"blacklistRemove":"Retirer l'Utilisateur"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket Créé",
|
"created":"Ticket Créé",
|
||||||
@@ -132,6 +145,7 @@
|
|||||||
"blacklistAddDm":"Ajouté à la Liste Noire",
|
"blacklistAddDm":"Ajouté à la Liste Noire",
|
||||||
"blacklistRemoveDm":"Retiré de la Liste Noire",
|
"blacklistRemoveDm":"Retiré de la Liste Noire",
|
||||||
"clear":"Tickets Supprimés",
|
"clear":"Tickets Supprimés",
|
||||||
|
"clearTickets":"Effacer les tickets",
|
||||||
"roles":"Rôles Mis à Jour",
|
"roles":"Rôles Mis à Jour",
|
||||||
|
|
||||||
"autoclose":"Ticket Fermé Automatiquement",
|
"autoclose":"Ticket Fermé Automatiquement",
|
||||||
@@ -139,7 +153,13 @@
|
|||||||
"autocloseDisabled":"Fermeture Automatique Désactivée",
|
"autocloseDisabled":"Fermeture Automatique Désactivée",
|
||||||
"autodelete":"Ticket Supprimé Automatiquement",
|
"autodelete":"Ticket Supprimé Automatiquement",
|
||||||
"autodeleteEnabled":"Suppression Automatique Activée",
|
"autodeleteEnabled":"Suppression Automatique Activée",
|
||||||
"autodeleteDisabled":"Suppression Automatique Désactivée"
|
"autodeleteDisabled":"Suppression Automatique Désactivée",
|
||||||
|
|
||||||
|
"topicSet":"Sujet modifié",
|
||||||
|
"prioritySet":"Priorité modifiée",
|
||||||
|
"priorityGet":"Priorité du ticket",
|
||||||
|
"transfer":"Ticket transféré",
|
||||||
|
"transcripts":"Historique des Transcriptions"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Votre ticket a été créé. Cliquez sur le bouton ci-dessous pour y accéder!",
|
"create":"Votre ticket a été créé. Cliquez sur le bouton ci-dessous pour y accéder!",
|
||||||
@@ -180,7 +200,12 @@
|
|||||||
"ticketMessageLimit":"Vous ne pouvez créer que {0} ticket(s) en même temps!",
|
"ticketMessageLimit":"Vous ne pouvez créer que {0} ticket(s) en même temps!",
|
||||||
"ticketMessageAutoclose":"Ce ticket sera fermé automatiquement après {0}h d'inactivité!",
|
"ticketMessageAutoclose":"Ce ticket sera fermé automatiquement après {0}h d'inactivité!",
|
||||||
"ticketMessageAutodelete":"Ce ticket sera supprimé automatiquement après {0} jours d'inactivité!",
|
"ticketMessageAutodelete":"Ce ticket sera supprimé automatiquement après {0} jours d'inactivité!",
|
||||||
"panelReady":"Vous pouvez trouver le panneau ci-dessous!\nCe message peut maintenant être supprimé!"
|
"panelReady":"Le panneau est disponible dans le message suivant!\nCe message peut maintenant être supprimé!",
|
||||||
|
|
||||||
|
"topicSet":"Le sujet du salon a été modifié par {0} avec succès!",
|
||||||
|
"prioritySet":"La priorité du ticket a été modifiée en {0} par {1} avec succès!",
|
||||||
|
"priorityGet":"La priorité actuelle de ce ticket est {0}.",
|
||||||
|
"transfer":"La propriété de ce ticket a été transférée de {0} à {1} par {2} avec succès!"
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder":"Pourquoi avez-vous fermé ce ticket?",
|
"closePlaceholder":"Pourquoi avez-vous fermé ce ticket?",
|
||||||
@@ -220,7 +245,16 @@
|
|||||||
"blacklistRemoveLog":"{0} a été retiré de la liste noire par {1}!",
|
"blacklistRemoveLog":"{0} a été retiré de la liste noire par {1}!",
|
||||||
"blacklistAddDm":"Vous avez été ajouté à la liste noire sur notre serveur!\nDésormais, vous ne pouvez pas créer de ticket!",
|
"blacklistAddDm":"Vous avez été ajouté à la liste noire sur notre serveur!\nDésormais, vous ne pouvez pas créer de ticket!",
|
||||||
"blacklistRemoveDm":"Vous avez été retiré de la liste noire sur notre serveur!\nVous pouvez désormais créer des tickets à nouveau!",
|
"blacklistRemoveDm":"Vous avez été retiré de la liste noire sur notre serveur!\nVous pouvez désormais créer des tickets à nouveau!",
|
||||||
"clearLog":"{0} tickets ont été supprimés par {1}!"
|
"clearLog":"{0} tickets ont été supprimés par {1}!",
|
||||||
|
|
||||||
|
"transferLog":"La propriété de ce ticket a été transférée de {0} à {1} par {2}!",
|
||||||
|
"transferDm":"La propriété de votre ticket a été transférée de {0} à {1} sur notre serveur!",
|
||||||
|
"prioritySetLog":"La priorité de ce ticket a été modifiée en {0} par {1}!",
|
||||||
|
"prioritySetDm":"La priorité de votre ticket a été modifiée en {0} sur notre serveur!",
|
||||||
|
"roleUpdateLog":"{0} a mis à jour ses rôles!",
|
||||||
|
"roleUpdateDm":"Vos rôles sur notre serveur ont été mis à jour!",
|
||||||
|
"topicSetLog":"La priorité de ce ticket a été définie sur {0} par {1}.",
|
||||||
|
"topicSetDm":"La priorité de votre ticket a été définie sur {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -241,7 +275,21 @@
|
|||||||
"retry":"Réessayer",
|
"retry":"Réessayer",
|
||||||
"continue":"Supprimer Sans Transcription",
|
"continue":"Supprimer Sans Transcription",
|
||||||
"backup":"Créer une Transcription de Sauvegarde",
|
"backup":"Créer une Transcription de Sauvegarde",
|
||||||
"error":"Une erreur s'est produite lors de la création de la transcription.\nQue souhaitez-vous faire?\n\nCe ticket ne sera pas supprimé tant que vous n'aurez pas cliqué sur l'un de ces boutons."
|
"error":"Une erreur s'est produite lors de la création de la transcription.\nQue souhaitez-vous faire?\n\nCe ticket ne sera pas supprimé tant que vous n'aurez pas cliqué sur l'un de ces boutons.",
|
||||||
|
"title":"Erreur de transcription",
|
||||||
|
"noHistory":"Cet utilisateur n'a pas encore de transcriptions.",
|
||||||
|
"historyNotSupported":"L'historique des transcriptions est actuellement uniquement pris en charge avec HTML Transcripts.\nL'historique des transcriptions texte sera disponible dans les prochaines versions."
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"MESSAGES",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"FICHIER",
|
||||||
|
"fieldsTitle":"CHAMPS",
|
||||||
|
"reactionsTitle":"RÉACTIONS",
|
||||||
|
"statsTitle":"STATS",
|
||||||
|
"emptyContent":"<contenu vide>",
|
||||||
|
"noTitle":"<sans-titre>",
|
||||||
|
"noDesc":"<sans-description>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
@@ -257,7 +305,9 @@
|
|||||||
"unknownPanel":"Panneau Inconnu",
|
"unknownPanel":"Panneau Inconnu",
|
||||||
"notInGuild":"Pas Dans le Serveur",
|
"notInGuild":"Pas Dans le Serveur",
|
||||||
"channelRename":"Impossible de Renommer le Canal",
|
"channelRename":"Impossible de Renommer le Canal",
|
||||||
"busy":"Ticket Occupé"
|
"channelCategory":"Impossible de Modifier la Catégorie",
|
||||||
|
"busy":"Ticket Occupé",
|
||||||
|
"permissionError":"Erreur de permission"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Contactez le propriétaire de ce bot pour plus d'informations!",
|
"askForInfo":"Contactez le propriétaire de ce bot pour plus d'informations!",
|
||||||
@@ -279,8 +329,15 @@
|
|||||||
"deprecatedTicket":"Le canal actuel n'est pas un ticket valide! Il pourrait s'agir d'un ticket provenant d'une ancienne version d'Open Ticket!",
|
"deprecatedTicket":"Le canal actuel n'est pas un ticket valide! Il pourrait s'agir d'un ticket provenant d'une ancienne version d'Open Ticket!",
|
||||||
"notInGuild":"Ce {0} ne fonctionne pas en DM! Veuillez réessayer dans un serveur!",
|
"notInGuild":"Ce {0} ne fonctionne pas en DM! Veuillez réessayer dans un serveur!",
|
||||||
"channelRename":"En raison des limitations de taux de Discord, il est actuellement impossible pour le bot de renommer le canal. Le canal sera automatiquement renommé après 10 minutes si le bot n'est pas redémarré.",
|
"channelRename":"En raison des limitations de taux de Discord, il est actuellement impossible pour le bot de renommer le canal. Le canal sera automatiquement renommé après 10 minutes si le bot n'est pas redémarré.",
|
||||||
|
"channelCategory":"En raison des limites de taux de Discord, la catégorie du salon n'a pas pu être modifiée immédiatement. Elle sera modifiée automatiquement dans les 10 minutes si le bot reste en ligne.",
|
||||||
"channelRenameSource":"La source de cette erreur est : {0}",
|
"channelRenameSource":"La source de cette erreur est : {0}",
|
||||||
"busy":"Impossible d'utiliser ce {0}!\nLe ticket est actuellement en cours de traitement par le bot.\n\nVeuillez réessayer dans quelques secondes!"
|
"busy":"Impossible d'utiliser ce {0}!\nLe ticket est actuellement en cours de traitement par le bot.\n\nVeuillez réessayer dans quelques secondes!",
|
||||||
|
"closeBeforeMessage":"Ce ticket ne peut pas être fermé/supprimé avant qu'un utilisateur ait envoyé un message.",
|
||||||
|
"closeBeforeAdminMessage":"Ce ticket ne peut pas être fermé/supprimé avant qu'un admin de ticket ou un membre du support ait envoyé un message.",
|
||||||
|
"unableToCreateTicket":"Vous ne pouvez pas créer de ticket.",
|
||||||
|
"messageMissing":"Impossible de localiser le message de l'interaction. Utilisez la commande `{0}` à la place.",
|
||||||
|
"stateExpired":"Cette interaction n'est plus valide ou a expiré. Utilisez la commande `{0}` à la place. Il est normal de recevoir cette erreur après une mise à jour majeure d'Open Ticket.",
|
||||||
|
"panelStateExpired":"Ce panneau n'est plus valide ou a expiré. Créez un nouveau panneau avec `{0}` pour résoudre le problème. Il est normal de recevoir cette erreur après une mise à jour majeure d'Open Ticket."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"La valeur ne correspond pas au modèle!",
|
"stringRegex":"La valeur ne correspond pas au modèle!",
|
||||||
@@ -331,7 +388,6 @@
|
|||||||
"added":"Ajouté",
|
"added":"Ajouté",
|
||||||
"removed":"Retiré",
|
"removed":"Retiré",
|
||||||
"filter":"Filtre",
|
"filter":"Filtre",
|
||||||
"claimedBy":"Pris en charge par {0}",
|
|
||||||
"method":"Méthode",
|
"method":"Méthode",
|
||||||
"type":"Type",
|
"type":"Type",
|
||||||
"blacklisted":"Liste Noire",
|
"blacklisted":"Liste Noire",
|
||||||
@@ -343,6 +399,8 @@
|
|||||||
"syntax":"Syntaxe",
|
"syntax":"Syntaxe",
|
||||||
"originalName":"Nom Original",
|
"originalName":"Nom Original",
|
||||||
"newName":"Nouveau Nom",
|
"newName":"Nouveau Nom",
|
||||||
|
"originalCategory":"Catégorie d'Origine",
|
||||||
|
"newCategory":"Nouvelle Catégorie",
|
||||||
"until":"Jusqu'à",
|
"until":"Jusqu'à",
|
||||||
"validOptions":"Options Valides",
|
"validOptions":"Options Valides",
|
||||||
"validPanels":"Panneaux Valides",
|
"validPanels":"Panneaux Valides",
|
||||||
@@ -355,7 +413,29 @@
|
|||||||
"status":"Statut",
|
"status":"Statut",
|
||||||
"claimed":"Pris en Charge",
|
"claimed":"Pris en Charge",
|
||||||
"pinned":"Épinglé",
|
"pinned":"Épinglé",
|
||||||
"creationDate":"Date de Création"
|
"creationDate":"Date de Création",
|
||||||
|
|
||||||
|
"noone":"Personne",
|
||||||
|
"open":"Ouvert",
|
||||||
|
"closed":"Fermé",
|
||||||
|
"priority":"Priorité",
|
||||||
|
"participants":"Participants",
|
||||||
|
"yes":"Oui",
|
||||||
|
"no":"Non",
|
||||||
|
"accept":"Accepter",
|
||||||
|
"cancel":"Annuler",
|
||||||
|
"option":"Option",
|
||||||
|
"topic":"Sujet",
|
||||||
|
"uptime":"Temps de fonctionnement",
|
||||||
|
"messages":"Messages",
|
||||||
|
"embeds":"Embeds",
|
||||||
|
"files":"Fichiers",
|
||||||
|
"components":"Composants",
|
||||||
|
"cooldown":"Délai",
|
||||||
|
"maxTickets":"Tickets max",
|
||||||
|
"admins":"Admins",
|
||||||
|
"roles":"Rôles",
|
||||||
|
"size":"Taille"
|
||||||
},
|
},
|
||||||
"lowercase":{
|
"lowercase":{
|
||||||
"text":"texte",
|
"text":"texte",
|
||||||
@@ -375,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Voulez-vous que ce panneau se mette à jour automatiquement lorsqu'il est modifié?",
|
"panelAutoUpdate":"Voulez-vous que ce panneau se mette à jour automatiquement lorsqu'il est modifié?",
|
||||||
"ticket":"Créez instantanément un ticket.",
|
"ticket":"Créez instantanément un ticket.",
|
||||||
"ticketId":"L'identifiant du ticket que vous souhaitez créer.",
|
"ticketId":"L'identifiant du ticket que vous souhaitez créer.",
|
||||||
|
"ticketOtherUser":"Créer un ticket pour un autre utilisateur.",
|
||||||
"close":"Fermez un ticket.",
|
"close":"Fermez un ticket.",
|
||||||
"delete":"Supprimez un ticket.",
|
"delete":"Supprimez un ticket.",
|
||||||
"deleteNoTranscript":"Supprimez ce ticket sans créer de transcription.",
|
"deleteNoTranscript":"Supprimez ce ticket sans créer de transcription.",
|
||||||
@@ -384,6 +465,7 @@
|
|||||||
"unclaim":"Libérer un ticket.",
|
"unclaim":"Libérer un ticket.",
|
||||||
"pin":"Épinglez un ticket.",
|
"pin":"Épinglez un ticket.",
|
||||||
"unpin":"Désépingler un ticket.",
|
"unpin":"Désépingler un ticket.",
|
||||||
|
|
||||||
"move":"Déplacez un ticket.",
|
"move":"Déplacez un ticket.",
|
||||||
"moveId":"L'identifiant de l'option vers laquelle vous souhaitez déplacer.",
|
"moveId":"L'identifiant de l'option vers laquelle vous souhaitez déplacer.",
|
||||||
"rename":"Renommez un ticket.",
|
"rename":"Renommez un ticket.",
|
||||||
@@ -392,6 +474,7 @@
|
|||||||
"addUser":"L'utilisateur à ajouter.",
|
"addUser":"L'utilisateur à ajouter.",
|
||||||
"remove":"Retirez un utilisateur d'un ticket.",
|
"remove":"Retirez un utilisateur d'un ticket.",
|
||||||
"removeUser":"L'utilisateur à retirer.",
|
"removeUser":"L'utilisateur à retirer.",
|
||||||
|
|
||||||
"blacklist":"Gérez la liste noire des tickets.",
|
"blacklist":"Gérez la liste noire des tickets.",
|
||||||
"blacklistView":"Voir la liste noire actuelle.",
|
"blacklistView":"Voir la liste noire actuelle.",
|
||||||
"blacklistAdd":"Ajoutez un utilisateur à la liste noire.",
|
"blacklistAdd":"Ajoutez un utilisateur à la liste noire.",
|
||||||
@@ -405,6 +488,7 @@
|
|||||||
"statsUserUser":"L'utilisateur à afficher.",
|
"statsUserUser":"L'utilisateur à afficher.",
|
||||||
"statsTicket":"Voir les statistiques d'un ticket dans le serveur.",
|
"statsTicket":"Voir les statistiques d'un ticket dans le serveur.",
|
||||||
"statsTicketTicket":"Le ticket à afficher.",
|
"statsTicketTicket":"Le ticket à afficher.",
|
||||||
|
|
||||||
"clear":"Supprimez plusieurs tickets en même temps.",
|
"clear":"Supprimez plusieurs tickets en même temps.",
|
||||||
"clearFilter":"Le filtre pour supprimer les tickets.",
|
"clearFilter":"Le filtre pour supprimer les tickets.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +501,7 @@
|
|||||||
"unpin":"Désépinglés",
|
"unpin":"Désépinglés",
|
||||||
"autoclose":"Fermés automatiquement"
|
"autoclose":"Fermés automatiquement"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Gérez la fermeture automatique dans un ticket.",
|
"autoclose":"Gérez la fermeture automatique dans un ticket.",
|
||||||
"autocloseDisable":"Désactivez la fermeture automatique dans ce ticket.",
|
"autocloseDisable":"Désactivez la fermeture automatique dans ce ticket.",
|
||||||
"autocloseEnable":"Activez la fermeture automatique dans ce ticket.",
|
"autocloseEnable":"Activez la fermeture automatique dans ce ticket.",
|
||||||
@@ -424,7 +509,21 @@
|
|||||||
"autodelete":"Gérez la suppression automatique dans un ticket.",
|
"autodelete":"Gérez la suppression automatique dans un ticket.",
|
||||||
"autodeleteDisable":"Désactivez la suppression automatique dans ce ticket.",
|
"autodeleteDisable":"Désactivez la suppression automatique dans ce ticket.",
|
||||||
"autodeleteEnable":"Activez la suppression automatique dans ce ticket.",
|
"autodeleteEnable":"Activez la suppression automatique dans ce ticket.",
|
||||||
"autodeleteEnableTime":"Le nombre de jours d'inactivité nécessaire pour supprimer ce ticket."
|
"autodeleteEnableTime":"Le nombre de jours d'inactivité nécessaire pour supprimer ce ticket.",
|
||||||
|
|
||||||
|
"topic":"Gérer le sujet du salon de ticket.",
|
||||||
|
"topicSet":"Définir le sujet du salon de ticket.",
|
||||||
|
"topicValue":"Le nouveau sujet du salon.",
|
||||||
|
"topicList":"Obtenir une liste de tous les tickets avec leur sujet et stats.",
|
||||||
|
"priority":"Gérer la priorité du ticket.",
|
||||||
|
"prioritySet":"Définir la priorité du ticket.",
|
||||||
|
"priorityValue":"La priorité du salon.",
|
||||||
|
"priorityGet":"Obtenir la priorité du ticket.",
|
||||||
|
"priorityList":"Obtenir une liste de tous les tickets avec leur statut de priorité.",
|
||||||
|
"transfer":"Transférer la propriété du ticket d'un utilisateur à un autre.",
|
||||||
|
"transferUser":"L'utilisateur vers lequel transférer.",
|
||||||
|
"transcripts":"Voir l'historique des transcriptions de tickets d'un utilisateur.",
|
||||||
|
"transcriptsUser":"L'utilisateur à afficher."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Obtenez une liste de toutes les commandes disponibles.",
|
"help":"Obtenez une liste de toutes les commandes disponibles.",
|
||||||
@@ -452,7 +551,16 @@
|
|||||||
"autocloseDisable":"Désactivez la fermeture automatique dans ce ticket.",
|
"autocloseDisable":"Désactivez la fermeture automatique dans ce ticket.",
|
||||||
"autocloseEnable":"Activez la fermeture automatique dans ce ticket.",
|
"autocloseEnable":"Activez la fermeture automatique dans ce ticket.",
|
||||||
"autodeleteDisable":"Désactivez la suppression automatique dans ce ticket.",
|
"autodeleteDisable":"Désactivez la suppression automatique dans ce ticket.",
|
||||||
"autodeleteEnable":"Activez la suppression automatique dans ce ticket."
|
"autodeleteEnable":"Activez la suppression automatique dans ce ticket.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Commandes générales",
|
||||||
|
"basicTicket":"Commandes de ticket basiques",
|
||||||
|
"advancedTicket":"Commandes de ticket avancées",
|
||||||
|
"userTicket":"Commandes de ticket utilisateur",
|
||||||
|
"admin":"Commandes admin",
|
||||||
|
"advanced":"Commandes avancées",
|
||||||
|
"extra":"Commandes extra"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +568,8 @@
|
|||||||
"system":"Statistiques Système",
|
"system":"Statistiques Système",
|
||||||
"user":"Statistiques Utilisateur",
|
"user":"Statistiques Utilisateur",
|
||||||
"ticket":"Statistiques Ticket",
|
"ticket":"Statistiques Ticket",
|
||||||
"participants":"Participants"
|
"participants":"Participants",
|
||||||
|
"messages":"Messages"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Tickets Créés",
|
"ticketsCreated":"Tickets Créés",
|
||||||
@@ -472,7 +581,48 @@
|
|||||||
"ticketsPinned":"Tickets Épinglés",
|
"ticketsPinned":"Tickets Épinglés",
|
||||||
"ticketsMoved":"Tickets Déplacés",
|
"ticketsMoved":"Tickets Déplacés",
|
||||||
"usersBlacklisted":"Utilisateurs en Liste Noire",
|
"usersBlacklisted":"Utilisateurs en Liste Noire",
|
||||||
"transcriptsCreated":"Transcriptions Créées"
|
"transcriptsCreated":"Transcriptions Créées",
|
||||||
|
"ticketsAutodeleted":"Tickets auto-supprimés",
|
||||||
|
"ticketsTransferred":"Tickets transférés",
|
||||||
|
"ticketVolume":"Volume de tickets",
|
||||||
|
"averageTickets":"Moyenne de tickets/utilisateur",
|
||||||
|
"currentTickets":"Tickets en cours",
|
||||||
|
"age":"Âge du ticket",
|
||||||
|
"responseTime":"Temps de réponse",
|
||||||
|
"resolutionTime":"Temps de résolution",
|
||||||
|
"createdOn":"Créé le",
|
||||||
|
"createdBy":"Créé par",
|
||||||
|
"closedOn":"Fermé le",
|
||||||
|
"closedBy":"Fermé par",
|
||||||
|
"claimedOn":"Pris en charge le",
|
||||||
|
"claimedBy":"Pris en charge par",
|
||||||
|
"pinnedOn":"Épinglé le",
|
||||||
|
"pinnedBy":"Épinglé par",
|
||||||
|
"deletedOn":"Supprimé le",
|
||||||
|
"deletedBy":"Supprimé par"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Développeur",
|
||||||
|
"serverOwner":"Propriétaire du serveur",
|
||||||
|
"serverAdmin":"Admin du serveur",
|
||||||
|
"moderator":"Équipe de modération",
|
||||||
|
"support":"Équipe de support",
|
||||||
|
"member":"Membre"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Sélectionnez votre ticket",
|
||||||
|
"selectRole":"Sélectionnez votre rôle",
|
||||||
|
"selectOption":"Sélectionnez votre option",
|
||||||
|
"selectPriorityLevel":"Sélectionner le niveau de priorité"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Urgent",
|
||||||
|
"veryHigh":"Très élevée",
|
||||||
|
"high":"Élevée",
|
||||||
|
"normal":"Normale",
|
||||||
|
"low":"Faible",
|
||||||
|
"veryLow":"Très faible",
|
||||||
|
"none":"Aucune"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+32
-12
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["benzorich"],
|
"translators":["benzorich"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"German",
|
"language":"German",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -14,8 +14,8 @@
|
|||||||
"typeInfo":"[INFO]",
|
"typeInfo":"[INFO]",
|
||||||
"headerConfigChecker":"CONFIG CHECKER",
|
"headerConfigChecker":"CONFIG CHECKER",
|
||||||
"headerDescription":"Prüfen Sie auf Fehler in Ihrer Konfigurationsdateien!",
|
"headerDescription":"Prüfen Sie auf Fehler in Ihrer Konfigurationsdateien!",
|
||||||
"footerError":"Der Bot wird nicht starten, bis alle {0}'s repariert sind!",
|
"footerError":"Der Bot wird nicht starten, bis alle {0}en repariert sind!",
|
||||||
"footerWarning":"Es wird empfohlen, vor dem Start alle {0}'s zu korrigieren!",
|
"footerWarning":"Es wird empfohlen, vor dem Start alle {0}en zu korrigieren!",
|
||||||
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
|
"footerSupport":"SUPPORT: {0} - DOCS: {1}",
|
||||||
"compactInformation":"Verwenden Sie {0} für weitere Informationen!",
|
"compactInformation":"Verwenden Sie {0} für weitere Informationen!",
|
||||||
"dataPath":"Pfad",
|
"dataPath":"Pfad",
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"invalidButton":"Dieser Button muss mindestens eine {0} oder {1} enthalten!",
|
"invalidButton":"Dieser Button muss mindestens eine {0} oder {1} enthalten!",
|
||||||
"unusedOption":"Die Option {0} wird nirgends verwendet!",
|
"unusedOption":"Die Option {0} wird nirgends verwendet!",
|
||||||
"unusedQuestion":"Die Frage {0} wird nirgends verwendet!",
|
"unusedQuestion":"Die Frage {0} wird nirgends verwendet!",
|
||||||
"dropdownOption":"Ein Panel mit aktiviertem Dropdown kann nur Optionen vom Typ 'Ticket' enthalten!",
|
"dropdownOption":"Ein Panel mit Dropdown kann nur Optionen der Typen 'ticket', 'role' oder 'sub-panel' enthalten.",
|
||||||
"customInvalidVersion":"Die in deiner Konfiguration angegebene Version stimmt nicht überein! Stelle sicher, dass du die Konfiguration auf die neueste Version aktualisiert hast!"
|
"customInvalidVersion":"Die in deiner Konfiguration angegebene Version stimmt nicht überein! Stelle sicher, dass du die Konfiguration auf die neueste Version aktualisiert hast!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"Textbefehle anzeigen",
|
"helpSwitchText":"Textbefehle anzeigen",
|
||||||
"helpPage":"Seite {0}",
|
"helpPage":"Seite {0}",
|
||||||
"withReason":"Mit Grund",
|
"withReason":"Mit Grund",
|
||||||
"withoutTranscript":"Ohne Transkription"
|
"withoutTranscript":"Ohne Transkription",
|
||||||
|
"blacklistAdd":"Benutzer Blacklisten",
|
||||||
|
"blacklistRemove":"Benutzer Freigeben"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket erstellt",
|
"created":"Ticket erstellt",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"Thema Geändert",
|
"topicSet":"Thema Geändert",
|
||||||
"prioritySet":"Priorität Geändert",
|
"prioritySet":"Priorität Geändert",
|
||||||
"priorityGet":"Ticket-Priorität",
|
"priorityGet":"Ticket-Priorität",
|
||||||
"transfer":"Ticket Übertragen"
|
"transfer":"Ticket Übertragen",
|
||||||
|
"transcripts":"Transkriptverlauf"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Ihr Ticket wurde bereits erstellt. Klicken Sie auf die Button unten, um es zu öffnen!",
|
"create":"Ihr Ticket wurde bereits erstellt. Klicken Sie auf die Button unten, um es zu öffnen!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"Die Priorität dieses Tickets wurde von {1} auf {0} geändert!",
|
"prioritySetLog":"Die Priorität dieses Tickets wurde von {1} auf {0} geändert!",
|
||||||
"prioritySetDm":"Die Priorität deines Tickets wurde auf unserem Server auf {0} geändert!",
|
"prioritySetDm":"Die Priorität deines Tickets wurde auf unserem Server auf {0} geändert!",
|
||||||
"roleUpdateLog":"{0} hat seine Rollen aktualisiert!",
|
"roleUpdateLog":"{0} hat seine Rollen aktualisiert!",
|
||||||
"roleUpdateDm":"Deine Rollen auf unserem Server wurden aktualisiert!"
|
"roleUpdateDm":"Deine Rollen auf unserem Server wurden aktualisiert!",
|
||||||
|
"topicSetLog":"Die Priorität dieses Tickets wurde von {1} auf {0} gesetzt.",
|
||||||
|
"topicSetDm":"Die Priorität deines Tickets wurde auf {0} gesetzt."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"continue":"Löschen ohne Transkript",
|
"continue":"Löschen ohne Transkript",
|
||||||
"backup":"Sicherungstranskript erstellen",
|
"backup":"Sicherungstranskript erstellen",
|
||||||
"error":"Beim Versuch, das Transkript zu erstellen, ist etwas schief gelaufen.\nWas möchten Sie tun?\n\nDieses Ticket wird erst gelöscht, wenn Sie auf eine der folgenden Buttons klicken.",
|
"error":"Beim Versuch, das Transkript zu erstellen, ist etwas schief gelaufen.\nWas möchten Sie tun?\n\nDieses Ticket wird erst gelöscht, wenn Sie auf eine der folgenden Buttons klicken.",
|
||||||
"title":"Transkript-Fehler"
|
"title":"Transkript-Fehler",
|
||||||
|
"noHistory":"Dieser Benutzer hat noch keine Transkripte.",
|
||||||
|
"historyNotSupported":"Der Transkriptverlauf wird derzeit nur mit HTML Transcripts unterstützt.\nDer Verlauf von Texttranskripten wird in zukünftigen Versionen verfügbar sein."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"NACHRICHTEN",
|
"messagesTitle":"NACHRICHTEN",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"Unbekanntes Panel",
|
"unknownPanel":"Unbekanntes Panel",
|
||||||
"notInGuild":"Nicht auf dem Server",
|
"notInGuild":"Nicht auf dem Server",
|
||||||
"channelRename":"Kanal kann nicht umbenannt werden",
|
"channelRename":"Kanal kann nicht umbenannt werden",
|
||||||
|
"channelCategory":"Kategorie Kann Nicht Geändert Werden",
|
||||||
"busy":"Ticket ist besetzt",
|
"busy":"Ticket ist besetzt",
|
||||||
"permissionError":"Berechtigungsfehler"
|
"permissionError":"Berechtigungsfehler"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"Der aktuelle Kanal ist kein gültiges Ticket! Es könnte sich um ein Ticket aus einer alten Open Ticket Version handeln!",
|
"deprecatedTicket":"Der aktuelle Kanal ist kein gültiges Ticket! Es könnte sich um ein Ticket aus einer alten Open Ticket Version handeln!",
|
||||||
"notInGuild":"{0} funktioniert nicht in DM! Bitte versuchen Sie es erneut auf einem Server!",
|
"notInGuild":"{0} funktioniert nicht in DM! Bitte versuchen Sie es erneut auf einem Server!",
|
||||||
"channelRename":"Aufgrund von Discord-Ratelimits ist es dem Bot derzeit nicht möglich, den Channel umzubenennen. Der Channel wird nach 10 Minuten automatisch umbenannt, wenn der Bot nicht neu gestartet wird.",
|
"channelRename":"Aufgrund von Discord-Ratelimits ist es dem Bot derzeit nicht möglich, den Channel umzubenennen. Der Channel wird nach 10 Minuten automatisch umbenannt, wenn der Bot nicht neu gestartet wird.",
|
||||||
|
"channelCategory":"Aufgrund von Discord-Rate-Limits konnte die Kanalkategorie nicht sofort geändert werden. Sie wird automatisch innerhalb von 10 Minuten geändert, sofern der Bot online bleibt.",
|
||||||
"channelRenameSource":"Die Quelle dieses Fehlers ist: {0}",
|
"channelRenameSource":"Die Quelle dieses Fehlers ist: {0}",
|
||||||
"busy":"{0} kann nicht verwendet werden!\nDas Ticket wird derzeit vom Bot bearbeitet.\n\nBitte versuchen Sie es in ein paar Sekunden erneut!",
|
"busy":"{0} kann nicht verwendet werden!\nDas Ticket wird derzeit vom Bot bearbeitet.\n\nBitte versuchen Sie es in ein paar Sekunden erneut!",
|
||||||
"closeBeforeMessage":"Dieses Ticket kann nicht geschlossen/gelöscht werden, bevor eine Nachricht von einem Benutzer gesendet wurde.",
|
"closeBeforeMessage":"Dieses Ticket kann nicht geschlossen/gelöscht werden, bevor eine Nachricht von einem Benutzer gesendet wurde.",
|
||||||
"closeBeforeAdminMessage":"Dieses Ticket kann nicht geschlossen/gelöscht werden, bevor eine Nachricht von einem Ticket-Admin oder Support-Mitglied gesendet wurde.",
|
"closeBeforeAdminMessage":"Dieses Ticket kann nicht geschlossen/gelöscht werden, bevor eine Nachricht von einem Ticket-Admin oder Support-Mitglied gesendet wurde.",
|
||||||
"unableToCreateTicket":"Du kannst kein Ticket erstellen."
|
"unableToCreateTicket":"Du kannst kein Ticket erstellen.",
|
||||||
|
"messageMissing":"Die Nachricht der Interaktion konnte nicht gefunden werden. Verwende stattdessen den Befehl `{0}`.",
|
||||||
|
"stateExpired":"Diese Interaktion ist nicht mehr gültig oder abgelaufen. Verwende stattdessen den Befehl `{0}`. Es ist normal, diesen Fehler nach einem größeren Open Ticket-Update zu erhalten.",
|
||||||
|
"panelStateExpired":"Dieses Panel ist nicht mehr gültig oder abgelaufen. Erstelle ein neues Panel mit `{0}`, um das Problem zu beheben. Es ist normal, diesen Fehler nach einem größeren Open Ticket-Update zu erhalten."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Wert stimmt nicht mit Muster überein!",
|
"stringRegex":"Wert stimmt nicht mit Muster überein!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"Syntax",
|
"syntax":"Syntax",
|
||||||
"originalName":"Ursprünglicher Name",
|
"originalName":"Ursprünglicher Name",
|
||||||
"newName":"Neuer Name",
|
"newName":"Neuer Name",
|
||||||
|
"originalCategory":"Originalkategorie",
|
||||||
|
"newCategory":"Neue Kategorie",
|
||||||
"until":"Bis",
|
"until":"Bis",
|
||||||
"validOptions":"Gültige Optionen",
|
"validOptions":"Gültige Optionen",
|
||||||
"validPanels":"Gültige Panels",
|
"validPanels":"Gültige Panels",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"Teilnehmer",
|
"participants":"Teilnehmer",
|
||||||
"yes":"Ja",
|
"yes":"Ja",
|
||||||
"no":"Nein",
|
"no":"Nein",
|
||||||
|
"accept":"Akzeptieren",
|
||||||
|
"cancel":"Abbrechen",
|
||||||
"option":"Option",
|
"option":"Option",
|
||||||
"topic":"Thema",
|
"topic":"Thema",
|
||||||
"uptime":"System-Laufzeit",
|
"uptime":"System-Laufzeit",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Möchten Sie, dass dieses Feld bei der Bearbeitung automatisch aktualisiert wird?",
|
"panelAutoUpdate":"Möchten Sie, dass dieses Feld bei der Bearbeitung automatisch aktualisiert wird?",
|
||||||
"ticket":"Erstellen Sie sofort ein Ticket.",
|
"ticket":"Erstellen Sie sofort ein Ticket.",
|
||||||
"ticketId":"Der Kennung des Panels, das Sie erzeugen wollen.",
|
"ticketId":"Der Kennung des Panels, das Sie erzeugen wollen.",
|
||||||
|
"ticketOtherUser":"Ein Ticket für einen anderen Benutzer erstellen.",
|
||||||
"close":"Schließen Sie ein Ticket.",
|
"close":"Schließen Sie ein Ticket.",
|
||||||
"delete":"Ein Ticket löschen.",
|
"delete":"Ein Ticket löschen.",
|
||||||
"deleteNoTranscript":"Löschen Sie dieses Ticket, ohne ein Transkript zu erstellen.",
|
"deleteNoTranscript":"Löschen Sie dieses Ticket, ohne ein Transkript zu erstellen.",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"Zeige die Priorität des Tickets an.",
|
"priorityGet":"Zeige die Priorität des Tickets an.",
|
||||||
"priorityList":"Zeige eine Liste aller Tickets mit ihrem Prioritätsstatus an.",
|
"priorityList":"Zeige eine Liste aller Tickets mit ihrem Prioritätsstatus an.",
|
||||||
"transfer":"Übertrage das Ticket von einem Benutzer an einen anderen.",
|
"transfer":"Übertrage das Ticket von einem Benutzer an einen anderen.",
|
||||||
"transferUser":"Der Benutzer, an den übertragen werden soll."
|
"transferUser":"Der Benutzer, an den übertragen werden soll.",
|
||||||
|
"transcripts":"Den Ticket-Transkriptverlauf eines Benutzers anzeigen.",
|
||||||
|
"transcriptsUser":"Der anzuzeigende Benutzer."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Erhalten Sie eine Liste mit allen verfügbaren Befehlen.",
|
"help":"Erhalten Sie eine Liste mit allen verfügbaren Befehlen.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"Wähle dein Ticket",
|
"selectTicket":"Wähle dein Ticket",
|
||||||
"selectRole":"Wähle deine Rolle",
|
"selectRole":"Wähle deine Rolle",
|
||||||
"selectOption":"Wähle deine Option"
|
"selectOption":"Wähle deine Option",
|
||||||
|
"selectPriorityLevel":"Prioritätsstufe auswählen"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"Dringend",
|
"urgent":"Dringend",
|
||||||
|
|||||||
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["HanumeshGupta","ChatGPT"],
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Greek",
|
"language":"Greek",
|
||||||
"automated":true
|
"automated":true
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"invalidButton":"Αυτό το κουμπί πρέπει να έχει τουλάχιστον ένα {0} ή {1}!",
|
"invalidButton":"Αυτό το κουμπί πρέπει να έχει τουλάχιστον ένα {0} ή {1}!",
|
||||||
"unusedOption":"Η επιλογή {0} δεν χρησιμοποιείται πουθενά!",
|
"unusedOption":"Η επιλογή {0} δεν χρησιμοποιείται πουθενά!",
|
||||||
"unusedQuestion":"Η ερώτηση {0} δεν χρησιμοποιείται πουθενά!",
|
"unusedQuestion":"Η ερώτηση {0} δεν χρησιμοποιείται πουθενά!",
|
||||||
"dropdownOption":"Ένα πάνελ με ενεργοποιημένο dropdown μπορεί να περιέχει μόνο επιλογές τύπου 'ticket'!",
|
"dropdownOption":"Ένα πάνελ με αναπτυσσόμενο μενού μπορεί να περιέχει μόνο επιλογές των τύπων: 'ticket', 'role' ή 'sub-panel'.",
|
||||||
"customInvalidVersion":"Η έκδοση που καθορίστηκε στο config σας δεν ταιριάζει! Βεβαιωθείτε ότι έχετε ενημερώσει το config στην πιο πρόσφατη έκδοση!"
|
"customInvalidVersion":"Η έκδοση που καθορίστηκε στο config σας δεν ταιριάζει! Βεβαιωθείτε ότι έχετε ενημερώσει το config στην πιο πρόσφατη έκδοση!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"Προβολή Εντολών Κειμένου",
|
"helpSwitchText":"Προβολή Εντολών Κειμένου",
|
||||||
"helpPage":"Σελίδα {0}",
|
"helpPage":"Σελίδα {0}",
|
||||||
"withReason":"Με Λόγο",
|
"withReason":"Με Λόγο",
|
||||||
"withoutTranscript":"Χωρίς Αντίγραφο"
|
"withoutTranscript":"Χωρίς Αντίγραφο",
|
||||||
|
"blacklistAdd":"Προσθήκη Χρήστη στη Μαύρη Λίστα",
|
||||||
|
"blacklistRemove":"Απελευθέρωση Χρήστη"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Δημιουργήθηκε Εισιτήριο",
|
"created":"Δημιουργήθηκε Εισιτήριο",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"Το Θέμα Αλλάχθηκε",
|
"topicSet":"Το Θέμα Αλλάχθηκε",
|
||||||
"prioritySet":"Η Προτεραιότητα Αλλάχθηκε",
|
"prioritySet":"Η Προτεραιότητα Αλλάχθηκε",
|
||||||
"priorityGet":"Προτεραιότητα Ticket",
|
"priorityGet":"Προτεραιότητα Ticket",
|
||||||
"transfer":"Το Ticket Μεταφέρθηκε"
|
"transfer":"Το Ticket Μεταφέρθηκε",
|
||||||
|
"transcripts":"Ιστορικό Μεταγραφών"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Το εισιτήριό σας δημιουργήθηκε. Κάντε κλικ στο παρακάτω κουμπί για να το προσπελάσετε!",
|
"create":"Το εισιτήριό σας δημιουργήθηκε. Κάντε κλικ στο παρακάτω κουμπί για να το προσπελάσετε!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"Η προτεραιότητα αυτού του ticket άλλαξε σε {0} από τον/την {1}!",
|
"prioritySetLog":"Η προτεραιότητα αυτού του ticket άλλαξε σε {0} από τον/την {1}!",
|
||||||
"prioritySetDm":"Η προτεραιότητα του ticket σας άλλαξε σε {0} στον server μας!",
|
"prioritySetDm":"Η προτεραιότητα του ticket σας άλλαξε σε {0} στον server μας!",
|
||||||
"roleUpdateLog":"Ο/Η {0} ενημέρωσε τους ρόλους του/της!",
|
"roleUpdateLog":"Ο/Η {0} ενημέρωσε τους ρόλους του/της!",
|
||||||
"roleUpdateDm":"Οι ρόλοι σας στον server μας έχουν ενημερωθεί!"
|
"roleUpdateDm":"Οι ρόλοι σας στον server μας έχουν ενημερωθεί!",
|
||||||
|
"topicSetLog":"Η προτεραιότητα αυτού του ticket ορίστηκε σε {0} από τον/την {1}.",
|
||||||
|
"topicSetDm":"Η προτεραιότητα του ticket σας ορίστηκε σε {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"continue":"Διαγραφή Χωρίς Αντίγραφο",
|
"continue":"Διαγραφή Χωρίς Αντίγραφο",
|
||||||
"backup":"Δημιουργία Αντιγράφου Ασφαλείας",
|
"backup":"Δημιουργία Αντιγράφου Ασφαλείας",
|
||||||
"error":"Κάτι πήγε στραβά κατά τη δημιουργία του αντιγράφου.\nΤι θα θέλατε να κάνετε;\n\nΑυτό το εισιτήριο δεν θα διαγραφεί μέχρι να κάνετε κλικ σε ένα από αυτά τα κουμπιά.",
|
"error":"Κάτι πήγε στραβά κατά τη δημιουργία του αντιγράφου.\nΤι θα θέλατε να κάνετε;\n\nΑυτό το εισιτήριο δεν θα διαγραφεί μέχρι να κάνετε κλικ σε ένα από αυτά τα κουμπιά.",
|
||||||
"title":"Σφάλμα Transcript"
|
"title":"Σφάλμα Transcript",
|
||||||
|
"noHistory":"Αυτός ο χρήστης δεν έχει ακόμη κανένα ιστορικό μεταγραφών.",
|
||||||
|
"historyNotSupported":"Το ιστορικό μεταγραφών υποστηρίζεται προς το παρόν μόνο με HTML Transcripts.\nΤο ιστορικό κειμενικών μεταγραφών θα είναι διαθέσιμο σε μελλοντικές εκδόσεις."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"ΜΗΝΥΜΑΤΑ",
|
"messagesTitle":"ΜΗΝΥΜΑΤΑ",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"Άγνωστο Πάνελ",
|
"unknownPanel":"Άγνωστο Πάνελ",
|
||||||
"notInGuild":"Δεν Είστε σε Server",
|
"notInGuild":"Δεν Είστε σε Server",
|
||||||
"channelRename":"Αδυναμία Μετονομασίας Κανάλι",
|
"channelRename":"Αδυναμία Μετονομασίας Κανάλι",
|
||||||
|
"channelCategory":"Αδυναμία Αλλαγής Κατηγορίας",
|
||||||
"busy":"Το Εισιτήριο Είναι Απασχολημένο",
|
"busy":"Το Εισιτήριο Είναι Απασχολημένο",
|
||||||
"permissionError":"Σφάλμα Δικαιωμάτων"
|
"permissionError":"Σφάλμα Δικαιωμάτων"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"Το τρέχον κανάλι δεν είναι έγκυρο εισιτήριο! Μπορεί να ήταν εισιτήριο από παλιά έκδοση του Open Ticket!",
|
"deprecatedTicket":"Το τρέχον κανάλι δεν είναι έγκυρο εισιτήριο! Μπορεί να ήταν εισιτήριο από παλιά έκδοση του Open Ticket!",
|
||||||
"notInGuild":"Αυτό το {0} δεν λειτουργεί σε DM! Παρακαλώ δοκιμάστε ξανά σε έναν server!",
|
"notInGuild":"Αυτό το {0} δεν λειτουργεί σε DM! Παρακαλώ δοκιμάστε ξανά σε έναν server!",
|
||||||
"channelRename":"Λόγω discord ratelimits, είναι αδύνατο για το bot να μετονομάσει το κανάλι. Το κανάλι θα μετονομαστεί αυτόματα σε 10 λεπτά αν το bot δεν επανεκκινηθεί.",
|
"channelRename":"Λόγω discord ratelimits, είναι αδύνατο για το bot να μετονομάσει το κανάλι. Το κανάλι θα μετονομαστεί αυτόματα σε 10 λεπτά αν το bot δεν επανεκκινηθεί.",
|
||||||
|
"channelCategory":"Λόγω περιορισμών ρυθμού του Discord, η κατηγορία καναλιού δεν μπορεί να αλλάξει άμεσα. Θα αλλάξει αυτόματα μέσα σε 10 λεπτά αν το bot παραμείνει online.",
|
||||||
"channelRenameSource":"Η πηγή αυτού του σφάλματος είναι: {0}",
|
"channelRenameSource":"Η πηγή αυτού του σφάλματος είναι: {0}",
|
||||||
"busy":"Αδυναμία χρήσης αυτού του {0}!\nΤο εισιτήριο είναι αυτή τη στιγμή σε επεξεργασία από το bot.\n\nΠαρακαλώ δοκιμάστε ξανά σε λίγα δευτερόλεπτα!",
|
"busy":"Αδυναμία χρήσης αυτού του {0}!\nΤο εισιτήριο είναι αυτή τη στιγμή σε επεξεργασία από το bot.\n\nΠαρακαλώ δοκιμάστε ξανά σε λίγα δευτερόλεπτα!",
|
||||||
"closeBeforeMessage":"Αυτό το ticket δεν μπορεί να κλείσει/διαγραφεί πριν σταλεί ένα μήνυμα από έναν χρήστη.",
|
"closeBeforeMessage":"Αυτό το ticket δεν μπορεί να κλείσει/διαγραφεί πριν σταλεί ένα μήνυμα από έναν χρήστη.",
|
||||||
"closeBeforeAdminMessage":"Αυτό το ticket δεν μπορεί να κλείσει/διαγραφεί πριν σταλεί μήνυμα από έναν ticket admin ή μέλος υποστήριξης.",
|
"closeBeforeAdminMessage":"Αυτό το ticket δεν μπορεί να κλείσει/διαγραφεί πριν σταλεί μήνυμα από έναν ticket admin ή μέλος υποστήριξης.",
|
||||||
"unableToCreateTicket":"Δεν μπορείτε να δημιουργήσετε ticket."
|
"unableToCreateTicket":"Δεν μπορείτε να δημιουργήσετε ticket.",
|
||||||
|
"messageMissing":"Δεν ήταν δυνατός ο εντοπισμός του μηνύματος αλληλεπίδρασης. Χρησιμοποιήστε την εντολή `{0}` αντί αυτού.",
|
||||||
|
"stateExpired":"Αυτή η αλληλεπίδραση δεν είναι πλέον έγκυρη ή έχει λήξει. Χρησιμοποιήστε την εντολή `{0}` αντί αυτού. Είναι φυσιολογικό μετά από μεγάλη ενημέρωση του Open Ticket.",
|
||||||
|
"panelStateExpired":"Αυτό το πάνελ δεν είναι πλέον έγκυρο ή έχει λήξει. Δημιουργήστε νέο πάνελ χρησιμοποιώντας `{0}` για να επιλύσετε το πρόβλημα. Είναι φυσιολογικό μετά από μεγάλη ενημέρωση του Open Ticket."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Η τιμή δεν ταιριάζει με το μοτίβο!",
|
"stringRegex":"Η τιμή δεν ταιριάζει με το μοτίβο!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"Σύνταξη",
|
"syntax":"Σύνταξη",
|
||||||
"originalName":"Αρχικό Όνομα",
|
"originalName":"Αρχικό Όνομα",
|
||||||
"newName":"Νέο Όνομα",
|
"newName":"Νέο Όνομα",
|
||||||
|
"originalCategory":"Αρχική Κατηγορία",
|
||||||
|
"newCategory":"Νέα Κατηγορία",
|
||||||
"until":"Μέχρι",
|
"until":"Μέχρι",
|
||||||
"validOptions":"Έγκυρες Επιλογές",
|
"validOptions":"Έγκυρες Επιλογές",
|
||||||
"validPanels":"Έγκυρα Πάνελ",
|
"validPanels":"Έγκυρα Πάνελ",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"Συμμετέχοντες",
|
"participants":"Συμμετέχοντες",
|
||||||
"yes":"Ναι",
|
"yes":"Ναι",
|
||||||
"no":"Όχι",
|
"no":"Όχι",
|
||||||
|
"accept":"Αποδοχή",
|
||||||
|
"cancel":"Ακύρωση",
|
||||||
"option":"Επιλογή",
|
"option":"Επιλογή",
|
||||||
"topic":"Θέμα",
|
"topic":"Θέμα",
|
||||||
"uptime":"Χρόνος Λειτουργίας Συστήματος",
|
"uptime":"Χρόνος Λειτουργίας Συστήματος",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Θέλετε αυτό το πάνελ να ενημερώνεται αυτόματα όταν επεξεργαστεί;",
|
"panelAutoUpdate":"Θέλετε αυτό το πάνελ να ενημερώνεται αυτόματα όταν επεξεργαστεί;",
|
||||||
"ticket":"Δημιουργία εισιτηρίου αμέσως.",
|
"ticket":"Δημιουργία εισιτηρίου αμέσως.",
|
||||||
"ticketId":"Το αναγνωριστικό του εισιτηρίου που θέλετε να δημιουργήσετε.",
|
"ticketId":"Το αναγνωριστικό του εισιτηρίου που θέλετε να δημιουργήσετε.",
|
||||||
|
"ticketOtherUser":"Δημιουργήστε ένα ticket για άλλον χρήστη.",
|
||||||
"close":"Κλείσιμο εισιτηρίου.",
|
"close":"Κλείσιμο εισιτηρίου.",
|
||||||
"delete":"Διαγραφή εισιτηρίου.",
|
"delete":"Διαγραφή εισιτηρίου.",
|
||||||
"deleteNoTranscript":"Διαγραφή αυτού του εισιτηρίου χωρίς δημιουργία μεταγραφής.",
|
"deleteNoTranscript":"Διαγραφή αυτού του εισιτηρίου χωρίς δημιουργία μεταγραφής.",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"Λάβετε την προτεραιότητα του ticket.",
|
"priorityGet":"Λάβετε την προτεραιότητα του ticket.",
|
||||||
"priorityList":"Λάβετε μια λίστα όλων των tickets με την κατάσταση προτεραιότητάς τους.",
|
"priorityList":"Λάβετε μια λίστα όλων των tickets με την κατάσταση προτεραιότητάς τους.",
|
||||||
"transfer":"Μεταφέρετε την ιδιοκτησία του ticket από έναν χρήστη σε άλλον.",
|
"transfer":"Μεταφέρετε την ιδιοκτησία του ticket από έναν χρήστη σε άλλον.",
|
||||||
"transferUser":"Ο χρήστης στον οποίο θα γίνει η μεταφορά."
|
"transferUser":"Ο χρήστης στον οποίο θα γίνει η μεταφορά.",
|
||||||
|
"transcripts":"Προβολή ιστορικού μεταγραφών ticket ενός χρήστη.",
|
||||||
|
"transcriptsUser":"Ο χρήστης προς προβολή."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Λήψη λίστας όλων των διαθέσιμων εντολών.",
|
"help":"Λήψη λίστας όλων των διαθέσιμων εντολών.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"Επιλέξτε το ticket σας",
|
"selectTicket":"Επιλέξτε το ticket σας",
|
||||||
"selectRole":"Επιλέξτε τον ρόλο σας",
|
"selectRole":"Επιλέξτε τον ρόλο σας",
|
||||||
"selectOption":"Επιλέξτε την επιλογή σας"
|
"selectOption":"Επιλέξτε την επιλογή σας",
|
||||||
|
"selectPriorityLevel":"Επιλέξτε επίπεδο προτεραιότητας"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"Επείγον",
|
"urgent":"Επείγον",
|
||||||
|
|||||||
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["challenger_nova"],
|
"translators":["challenger_nova"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Hindi",
|
"language":"Hindi",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"invalidButton":"इस बटन पर कम से कम {0} या {1} होना आवश्यक है!",
|
"invalidButton":"इस बटन पर कम से कम {0} या {1} होना आवश्यक है!",
|
||||||
"unusedOption":"विकल्प {0} का उपयोग कहीं भी नहीं किया जाता है!",
|
"unusedOption":"विकल्प {0} का उपयोग कहीं भी नहीं किया जाता है!",
|
||||||
"unusedQuestion":"प्रश्न {0} का प्रयोग कहीं भी नहीं किया गया है!",
|
"unusedQuestion":"प्रश्न {0} का प्रयोग कहीं भी नहीं किया गया है!",
|
||||||
"dropdownOption":"ड्रॉपडाउन सक्षम पैनल में केवल 'टिकट' प्रकार के विकल्प हो सकते हैं!",
|
"dropdownOption":"ड्रॉपडाउन वाला पैनल केवल इन प्रकारों के विकल्प रख सकता है: 'ticket', 'role' या 'sub-panel'.",
|
||||||
"customInvalidVersion":"आपके कॉन्फ़िग में निर्दिष्ट संस्करण मेल नहीं खाता! कृपया सुनिश्चित करें कि आपने कॉन्फ़िग को नवीनतम संस्करण में अपडेट किया है!"
|
"customInvalidVersion":"आपके कॉन्फ़िग में निर्दिष्ट संस्करण मेल नहीं खाता! कृपया सुनिश्चित करें कि आपने कॉन्फ़िग को नवीनतम संस्करण में अपडेट किया है!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"टेक्स्ट कमांड देखें",
|
"helpSwitchText":"टेक्स्ट कमांड देखें",
|
||||||
"helpPage":"पेज {0}",
|
"helpPage":"पेज {0}",
|
||||||
"withReason":"कारण के साथ",
|
"withReason":"कारण के साथ",
|
||||||
"withoutTranscript":"प्रतिलेख के बिना"
|
"withoutTranscript":"प्रतिलेख के बिना",
|
||||||
|
"blacklistAdd":"उपयोगकर्ता को ब्लैकलिस्ट करें",
|
||||||
|
"blacklistRemove":"उपयोगकर्ता को रिलीज़ करें"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"टिकट बनाया गया",
|
"created":"टिकट बनाया गया",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"विषय बदला गया",
|
"topicSet":"विषय बदला गया",
|
||||||
"prioritySet":"प्राथमिकता बदली गई",
|
"prioritySet":"प्राथमिकता बदली गई",
|
||||||
"priorityGet":"टिकट प्राथमिकता",
|
"priorityGet":"टिकट प्राथमिकता",
|
||||||
"transfer":"टिकट स्थानांतरित किया गया"
|
"transfer":"टिकट स्थानांतरित किया गया",
|
||||||
|
"transcripts":"ट्रांसक्रिप्ट इतिहास"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"आपका टिकट बन गया है. ",
|
"create":"आपका टिकट बन गया है. ",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"इस टिकट की प्राथमिकता {1} द्वारा {0} में बदल दी गई है!",
|
"prioritySetLog":"इस टिकट की प्राथमिकता {1} द्वारा {0} में बदल दी गई है!",
|
||||||
"prioritySetDm":"आपके टिकट की प्राथमिकता हमारे सर्वर में {0} में बदल दी गई है!",
|
"prioritySetDm":"आपके टिकट की प्राथमिकता हमारे सर्वर में {0} में बदल दी गई है!",
|
||||||
"roleUpdateLog":"{0} ने अपनी भूमिकाएँ अपडेट की हैं!",
|
"roleUpdateLog":"{0} ने अपनी भूमिकाएँ अपडेट की हैं!",
|
||||||
"roleUpdateDm":"आपकी भूमिकाएँ हमारे सर्वर में अपडेट कर दी गई हैं!"
|
"roleUpdateDm":"आपकी भूमिकाएँ हमारे सर्वर में अपडेट कर दी गई हैं!",
|
||||||
|
"topicSetLog":"इस टिकट की प्राथमिकता {1} द्वारा {0} पर सेट की गई है।",
|
||||||
|
"topicSetDm":"आपके टिकट की प्राथमिकता {0} पर सेट की गई है।"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"continue":"प्रतिलेख के बिना हटाएँ",
|
"continue":"प्रतिलेख के बिना हटाएँ",
|
||||||
"backup":"बैकअप ट्रांस्क्रिप्ट बनाएं",
|
"backup":"बैकअप ट्रांस्क्रिप्ट बनाएं",
|
||||||
"error":"प्रतिलेख बनाने का प्रयास करते समय कुछ गलत हो गया।\n",
|
"error":"प्रतिलेख बनाने का प्रयास करते समय कुछ गलत हो गया।\n",
|
||||||
"title":"ट्रांसक्रिप्ट त्रुटि"
|
"title":"ट्रांसक्रिप्ट त्रुटि",
|
||||||
|
"noHistory":"इस उपयोगकर्ता के पास अभी तक कोई ट्रांसक्रिप्ट नहीं है।",
|
||||||
|
"historyNotSupported":"ट्रांसक्रिप्ट इतिहास वर्तमान में केवल HTML Transcripts के साथ समर्थित है।\nटेक्स्ट ट्रांसक्रिप्ट इतिहास भविष्य के संस्करणों में उपलब्ध होगा।"
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"संदेश",
|
"messagesTitle":"संदेश",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"अज्ञात पैनल",
|
"unknownPanel":"अज्ञात पैनल",
|
||||||
"notInGuild":"सर्वर में नहीं",
|
"notInGuild":"सर्वर में नहीं",
|
||||||
"channelRename":"चैनल का नाम बदलने में असमर्थ",
|
"channelRename":"चैनल का नाम बदलने में असमर्थ",
|
||||||
|
"channelCategory":"श्रेणी बदलने में असमर्थ",
|
||||||
"busy":"टिकट व्यस्त है",
|
"busy":"टिकट व्यस्त है",
|
||||||
"permissionError":"अनुमति त्रुटि"
|
"permissionError":"अनुमति त्रुटि"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"वर्तमान चैनल वैध टिकट नहीं है! ",
|
"deprecatedTicket":"वर्तमान चैनल वैध टिकट नहीं है! ",
|
||||||
"notInGuild":"यह {0} डीएम में काम नहीं करता! ",
|
"notInGuild":"यह {0} डीएम में काम नहीं करता! ",
|
||||||
"channelRename":"विवाद की दर सीमा के कारण, वर्तमान में बॉट के लिए चैनल का नाम बदलना असंभव है। ",
|
"channelRename":"विवाद की दर सीमा के कारण, वर्तमान में बॉट के लिए चैनल का नाम बदलना असंभव है। ",
|
||||||
|
"channelCategory":"Discord rate limits के कारण चैनल श्रेणी तुरंत नहीं बदली जा सकी। यदि बॉट ऑनलाइन रहता है तो यह 10 मिनट के भीतर स्वतः बदल दी जाएगी।",
|
||||||
"channelRenameSource":"इस त्रुटि का स्रोत है: {0}",
|
"channelRenameSource":"इस त्रुटि का स्रोत है: {0}",
|
||||||
"busy":"इस {0} का उपयोग करने में असमर्थ!\n",
|
"busy":"इस {0} का उपयोग करने में असमर्थ!\n",
|
||||||
"closeBeforeMessage":"किसी उपयोगकर्ता द्वारा संदेश भेजे जाने से पहले इस टिकट को बंद/हटाया नहीं जा सकता।",
|
"closeBeforeMessage":"किसी उपयोगकर्ता द्वारा संदेश भेजे जाने से पहले इस टिकट को बंद/हटाया नहीं जा सकता।",
|
||||||
"closeBeforeAdminMessage":"टिकट एडमिन या सपोर्ट सदस्य द्वारा संदेश भेजे जाने से पहले इस टिकट को बंद/हटाया नहीं जा सकता।",
|
"closeBeforeAdminMessage":"टिकट एडमिन या सपोर्ट सदस्य द्वारा संदेश भेजे जाने से पहले इस टिकट को बंद/हटाया नहीं जा सकता।",
|
||||||
"unableToCreateTicket":"आप टिकट बनाने में असमर्थ हैं।"
|
"unableToCreateTicket":"आप टिकट बनाने में असमर्थ हैं।",
|
||||||
|
"messageMissing":"इंटरैक्शन का संदेश नहीं मिल सका। इसके बजाय `{0}` कमांड का उपयोग करें।",
|
||||||
|
"stateExpired":"यह इंटरैक्शन अब मान्य नहीं है या समाप्त हो चुका है। इसके बजाय `{0}` कमांड का उपयोग करें। Open Ticket के बड़े अपडेट के बाद यह त्रुटि मिलना सामान्य है।",
|
||||||
|
"panelStateExpired":"यह पैनल अब मान्य नहीं है या समाप्त हो चुका है। समस्या हल करने के लिए `{0}` का उपयोग करके नया पैनल बनाएं। Open Ticket के बड़े अपडेट के बाद यह त्रुटि मिलना सामान्य है।"
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"मान पैटर्न से मेल नहीं खाता!",
|
"stringRegex":"मान पैटर्न से मेल नहीं खाता!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"सिंटेक्स",
|
"syntax":"सिंटेक्स",
|
||||||
"originalName":"मूल नाम",
|
"originalName":"मूल नाम",
|
||||||
"newName":"नया नाम",
|
"newName":"नया नाम",
|
||||||
|
"originalCategory":"मूल श्रेणी",
|
||||||
|
"newCategory":"नई श्रेणी",
|
||||||
"until":"जब तक",
|
"until":"जब तक",
|
||||||
"validOptions":"वैध विकल्प",
|
"validOptions":"वैध विकल्प",
|
||||||
"validPanels":"वैध पैनल",
|
"validPanels":"वैध पैनल",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"प्रतिभागी",
|
"participants":"प्रतिभागी",
|
||||||
"yes":"हाँ",
|
"yes":"हाँ",
|
||||||
"no":"नहीं",
|
"no":"नहीं",
|
||||||
|
"accept":"स्वीकार करें",
|
||||||
|
"cancel":"रद्द करें",
|
||||||
"option":"विकल्प",
|
"option":"विकल्प",
|
||||||
"topic":"विषय",
|
"topic":"विषय",
|
||||||
"uptime":"सिस्टम अपटाइम",
|
"uptime":"सिस्टम अपटाइम",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"क्या आप चाहते हैं कि संपादित होने पर यह पैनल स्वचालित रूप से अपडेट हो जाए?",
|
"panelAutoUpdate":"क्या आप चाहते हैं कि संपादित होने पर यह पैनल स्वचालित रूप से अपडेट हो जाए?",
|
||||||
"ticket":"तुरंत टिकट बनाएं.",
|
"ticket":"तुरंत टिकट बनाएं.",
|
||||||
"ticketId":"उस टिकट का पहचानकर्ता जिसे आप बनाना चाहते हैं.",
|
"ticketId":"उस टिकट का पहचानकर्ता जिसे आप बनाना चाहते हैं.",
|
||||||
|
"ticketOtherUser":"किसी अन्य उपयोगकर्ता के लिए टिकट बनाएं।",
|
||||||
"close":"एक टिकट बंद करें.",
|
"close":"एक टिकट बंद करें.",
|
||||||
"delete":"एक टिकट हटाएँ.",
|
"delete":"एक टिकट हटाएँ.",
|
||||||
"deleteNoTranscript":"प्रतिलेख बनाए बिना इस टिकट को हटा दें।",
|
"deleteNoTranscript":"प्रतिलेख बनाए बिना इस टिकट को हटा दें।",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"टिकट की प्राथमिकता प्राप्त करें।",
|
"priorityGet":"टिकट की प्राथमिकता प्राप्त करें।",
|
||||||
"priorityList":"सभी टिकटों की प्राथमिकता स्थिति की सूची प्राप्त करें।",
|
"priorityList":"सभी टिकटों की प्राथमिकता स्थिति की सूची प्राप्त करें।",
|
||||||
"transfer":"टिकट का स्वामित्व एक उपयोगकर्ता से दूसरे को स्थानांतरित करें।",
|
"transfer":"टिकट का स्वामित्व एक उपयोगकर्ता से दूसरे को स्थानांतरित करें।",
|
||||||
"transferUser":"जिस उपयोगकर्ता को स्थानांतरित करना है।"
|
"transferUser":"जिस उपयोगकर्ता को स्थानांतरित करना है।",
|
||||||
|
"transcripts":"किसी उपयोगकर्ता का टिकट ट्रांसक्रिप्ट इतिहास देखें।",
|
||||||
|
"transcriptsUser":"देखने के लिए उपयोगकर्ता।"
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"सभी उपलब्ध आदेशों की सूची प्राप्त करें.",
|
"help":"सभी उपलब्ध आदेशों की सूची प्राप्त करें.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"अपना टिकट चुनें",
|
"selectTicket":"अपना टिकट चुनें",
|
||||||
"selectRole":"अपनी भूमिका चुनें",
|
"selectRole":"अपनी भूमिका चुनें",
|
||||||
"selectOption":"अपना विकल्प चुनें"
|
"selectOption":"अपना विकल्प चुनें",
|
||||||
|
"selectPriorityLevel":"प्राथमिकता स्तर चुनें"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"अत्यावश्यक",
|
"urgent":"अत्यावश्यक",
|
||||||
|
|||||||
+167
-17
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["Kornel0706"],
|
"translators":["Kornel0706"],
|
||||||
"lastedited":"22/08/2024",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Hungarian",
|
"language":"Hungarian",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,6 +31,14 @@
|
|||||||
"stringContains":"Ennek a karakterláncnak tartalmaznia kell {0}-t!",
|
"stringContains":"Ennek a karakterláncnak tartalmaznia kell {0}-t!",
|
||||||
"stringChoices":"Ez a karakterlánc csak a következő értékek egyike lehet: {0}!",
|
"stringChoices":"Ez a karakterlánc csak a következő értékek egyike lehet: {0}!",
|
||||||
"stringRegex":"Ez a karakterlánc érvénytelen!",
|
"stringRegex":"Ez a karakterlánc érvénytelen!",
|
||||||
|
"stringInvertedContains":"Ez a szöveg nem tartalmazhatja a(z) {0} elemet!",
|
||||||
|
"stringLowercase":"Ez a szöveg csak kisbetűvel írható!",
|
||||||
|
"stringUppercase":"Ez a szöveg csak nagybetűvel írható!",
|
||||||
|
"stringSpecialCharacters":"Ez a szöveg nem tartalmazhat különleges karaktereket! (csak a-z, 0-9 és szóköz)",
|
||||||
|
"stringNoSpaces":"Ez a szöveg nem tartalmazhat szóközt!",
|
||||||
|
"stringCapitalWord":"Ajánlott, hogy minden szó nagybetűvel kezdődjön!",
|
||||||
|
"stringCapitalSentence":"Úgy tűnik, néhány mondat ebben a szövegben nem nagybetűvel kezdődik!",
|
||||||
|
"stringPunctuation":"Úgy tűnik, ez a mondat nem ponttal vagy más írásjellel végződik!",
|
||||||
|
|
||||||
"numberTooShort":"Ez a szám nem lehet rövidebb, mint {0} karakter!",
|
"numberTooShort":"Ez a szám nem lehet rövidebb, mint {0} karakter!",
|
||||||
"numberTooLong":"Ez a szám nem lehet hosszabb, mint {0} karakter!",
|
"numberTooLong":"Ez a szám nem lehet hosszabb, mint {0} karakter!",
|
||||||
@@ -48,6 +56,8 @@
|
|||||||
"numberNegative":"Ez a szám nem lehet negatív!",
|
"numberNegative":"Ez a szám nem lehet negatív!",
|
||||||
"numberPositive":"Ez a szám nem lehet pozitív!",
|
"numberPositive":"Ez a szám nem lehet pozitív!",
|
||||||
"numberZero":"Ez a szám nem lehet nulla!",
|
"numberZero":"Ez a szám nem lehet nulla!",
|
||||||
|
"numberNan":"Ez a szám nem lehet NaN (Nem szám)!",
|
||||||
|
"numberInvertedContains":"Ez a szám nem tartalmazhatja a(z) {0} elemet!",
|
||||||
|
|
||||||
"booleanTrue":"Ez a logikai érték nem lehet igaz!",
|
"booleanTrue":"Ez a logikai érték nem lehet igaz!",
|
||||||
"booleanFalse":"Ez a logikai érték nem lehet hamis!",
|
"booleanFalse":"Ez a logikai érték nem lehet hamis!",
|
||||||
@@ -89,7 +99,8 @@
|
|||||||
"invalidButton":"Ennek a gombnak legalább egy {0} vagy {1} kell, hogy tartalmazzon!",
|
"invalidButton":"Ennek a gombnak legalább egy {0} vagy {1} kell, hogy tartalmazzon!",
|
||||||
"unusedOption":"Az opció {0} nincs használatban sehol!",
|
"unusedOption":"Az opció {0} nincs használatban sehol!",
|
||||||
"unusedQuestion":"A kérdés {0} nincs használatban sehol!",
|
"unusedQuestion":"A kérdés {0} nincs használatban sehol!",
|
||||||
"dropdownOption":"Egy legördülő menüvel rendelkező panel csak a 'jegy' típusú opciókat tartalmazhat!"
|
"dropdownOption":"A legördülő menüvel rendelkező panel csak a következő típusú opciókat tartalmazhatja: 'ticket', 'role' vagy 'sub-panel'.",
|
||||||
|
"customInvalidVersion":"A konfigurációban megadott verzió nem egyezik! Győződjön meg róla, hogy a konfiguráció a legfrissebb verzióra van frissítve!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -107,7 +118,9 @@
|
|||||||
"helpSwitchText":"Szöveges parancsok megtekintése",
|
"helpSwitchText":"Szöveges parancsok megtekintése",
|
||||||
"helpPage":"Oldal {0}",
|
"helpPage":"Oldal {0}",
|
||||||
"withReason":"Indoklással",
|
"withReason":"Indoklással",
|
||||||
"withoutTranscript":"Átirat nélkül"
|
"withoutTranscript":"Átirat nélkül",
|
||||||
|
"blacklistAdd":"Felhasználó Tiltólistára Helyezése",
|
||||||
|
"blacklistRemove":"Felhasználó Feloldása"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Jegy létrehozva",
|
"created":"Jegy létrehozva",
|
||||||
@@ -132,6 +145,7 @@
|
|||||||
"blacklistAddDm":"Felvéve a tiltólistára",
|
"blacklistAddDm":"Felvéve a tiltólistára",
|
||||||
"blacklistRemoveDm":"Eltávolítva a tiltólistáról",
|
"blacklistRemoveDm":"Eltávolítva a tiltólistáról",
|
||||||
"clear":"Jegyek törölve",
|
"clear":"Jegyek törölve",
|
||||||
|
"clearTickets":"Jegyek törlése",
|
||||||
"roles":"Szerepek frissítve",
|
"roles":"Szerepek frissítve",
|
||||||
|
|
||||||
"autoclose":"Jegy automatikusan bezárva",
|
"autoclose":"Jegy automatikusan bezárva",
|
||||||
@@ -139,7 +153,13 @@
|
|||||||
"autocloseDisabled":"Automatikus bezárás letiltva",
|
"autocloseDisabled":"Automatikus bezárás letiltva",
|
||||||
"autodelete":"Jegy automatikusan törölve",
|
"autodelete":"Jegy automatikusan törölve",
|
||||||
"autodeleteEnabled":"Automatikus törlés engedélyezve",
|
"autodeleteEnabled":"Automatikus törlés engedélyezve",
|
||||||
"autodeleteDisabled":"Automatikus törlés letiltva"
|
"autodeleteDisabled":"Automatikus törlés letiltva",
|
||||||
|
|
||||||
|
"topicSet":"Téma megváltoztatva",
|
||||||
|
"prioritySet":"Prioritás megváltoztatva",
|
||||||
|
"priorityGet":"Jegy prioritása",
|
||||||
|
"transfer":"Jegy átvitele",
|
||||||
|
"transcripts":"Átirat Előzmények"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"A jegyed létrejött. Kattints az alábbi gombra, hogy hozzáférj!",
|
"create":"A jegyed létrejött. Kattints az alábbi gombra, hogy hozzáférj!",
|
||||||
@@ -180,7 +200,12 @@
|
|||||||
"ticketMessageLimit":"Egyszerre csak {0} jegyet hozhatsz létre!",
|
"ticketMessageLimit":"Egyszerre csak {0} jegyet hozhatsz létre!",
|
||||||
"ticketMessageAutoclose":"Ez a jegy automatikusan bezáródik, ha inaktív marad {0}h ideig!",
|
"ticketMessageAutoclose":"Ez a jegy automatikusan bezáródik, ha inaktív marad {0}h ideig!",
|
||||||
"ticketMessageAutodelete":"Ez a jegy automatikusan törlődik, ha inaktív marad {0} nap ideig!",
|
"ticketMessageAutodelete":"Ez a jegy automatikusan törlődik, ha inaktív marad {0} nap ideig!",
|
||||||
"panelReady":"Az alábbi panelben megtalálod!\nEz az üzenet most törölhető!"
|
"panelReady":"A panel elérhető a követő üzenetben!\nEz az üzenet most törölhető!",
|
||||||
|
|
||||||
|
"topicSet":"A csatorna témáját sikeresen megváltoztatta: {0}!",
|
||||||
|
"prioritySet":"A jegy prioritása sikeresen {1}-re változott: {0}!",
|
||||||
|
"priorityGet":"Ennek a jegynek a jelenlegi prioritása: {0}.",
|
||||||
|
"transfer":"A jegy tulajdonjoga sikeresen átkerült {0}-tól {1}-hez {2} által!"
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder":"Miért zártad be ezt a jegyet?",
|
"closePlaceholder":"Miért zártad be ezt a jegyet?",
|
||||||
@@ -220,7 +245,16 @@
|
|||||||
"blacklistRemoveLog":"{0} eltávolította a tiltólistáról {1}!",
|
"blacklistRemoveLog":"{0} eltávolította a tiltólistáról {1}!",
|
||||||
"blacklistAddDm":"Tiltólistára kerültél a szerverünkön!\nEzentúl nem hozhatsz létre jegyet!",
|
"blacklistAddDm":"Tiltólistára kerültél a szerverünkön!\nEzentúl nem hozhatsz létre jegyet!",
|
||||||
"blacklistRemoveDm":"Eltávolításra kerültél a szerverünk tiltólistájáról!\nMost újra létrehozhatsz jegyeket!",
|
"blacklistRemoveDm":"Eltávolításra kerültél a szerverünk tiltólistájáról!\nMost újra létrehozhatsz jegyeket!",
|
||||||
"clearLog":"{0} jegyek törlésre kerültek {1} által!"
|
"clearLog":"{0} jegyek törlésre kerültek {1} által!",
|
||||||
|
|
||||||
|
"transferLog":"A jegy tulajdonjoga {2} által {0}-ról {1}-re lett átvive!",
|
||||||
|
"transferDm":"A jegy tulajdonjoga át lett helyezve {0}-tól {1}-hez a szerverünkön!",
|
||||||
|
"prioritySetLog":"A jegy prioritása {1} által {0}-re változott!",
|
||||||
|
"prioritySetDm":"A jegy prioritása a szerverünkön {0}-re változott!",
|
||||||
|
"roleUpdateLog":"{0} frissítette a szerepköreit!",
|
||||||
|
"roleUpdateDm":"A szerepköreit frissítették a szerverünkön!",
|
||||||
|
"topicSetLog":"A jegy prioritását {1} {0} értékre állította.",
|
||||||
|
"topicSetDm":"A jegyed prioritása {0} értékre lett állítva."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -241,7 +275,21 @@
|
|||||||
"retry":"Újra",
|
"retry":"Újra",
|
||||||
"continue":"Törlés átirat nélkül",
|
"continue":"Törlés átirat nélkül",
|
||||||
"backup":"Biztonsági átirat létrehozása",
|
"backup":"Biztonsági átirat létrehozása",
|
||||||
"error":"Valami hiba történt az átirat létrehozása közben.\nMit szeretnél tenni?\n\nEz a jegy nem kerül törlésre, amíg nem kattintasz az egyik gombra."
|
"error":"Valami hiba történt az átirat létrehozása közben.\nMit szeretnél tenni?\n\nEz a jegy nem kerül törlésre, amíg nem kattintasz az egyik gombra.",
|
||||||
|
"title":"Átirat hiba",
|
||||||
|
"noHistory":"Ennek a felhasználónak még nincsenek átiratai.",
|
||||||
|
"historyNotSupported":"Az átirat előzmények jelenleg csak HTML Transcripts használatával támogatottak.\nA szöveges átirat előzmények a jövőbeli verziókban lesznek elérhetők."
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"ÜZENETEK",
|
||||||
|
"embedTitle":"BEÁGYAZÁS",
|
||||||
|
"fileTitle":"FÁJL",
|
||||||
|
"fieldsTitle":"MEZŐK",
|
||||||
|
"reactionsTitle":"REAKCIÓK",
|
||||||
|
"statsTitle":"STATS",
|
||||||
|
"emptyContent":"<tartalom üres>",
|
||||||
|
"noTitle":"<cím nélkül>",
|
||||||
|
"noDesc":"<leírás nélkül>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
@@ -257,7 +305,9 @@
|
|||||||
"unknownPanel":"Ismeretlen Panel",
|
"unknownPanel":"Ismeretlen Panel",
|
||||||
"notInGuild":"Nem a Szerveren",
|
"notInGuild":"Nem a Szerveren",
|
||||||
"channelRename":"Nem sikerült átnevezni a csatornát",
|
"channelRename":"Nem sikerült átnevezni a csatornát",
|
||||||
"busy":"A Jegy Elfoglalt"
|
"channelCategory":"A Kategória Nem Módosítható",
|
||||||
|
"busy":"A Jegy Elfoglalt",
|
||||||
|
"permissionError":"Engedély hiba"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Lépj kapcsolatba a bot tulajdonosával további információkért!",
|
"askForInfo":"Lépj kapcsolatba a bot tulajdonosával további információkért!",
|
||||||
@@ -279,8 +329,15 @@
|
|||||||
"deprecatedTicket":"Az aktuális csatorna nem egy érvényes jegy! Lehet, hogy ez egy régi Open Ticket verzióból származó jegy volt!",
|
"deprecatedTicket":"Az aktuális csatorna nem egy érvényes jegy! Lehet, hogy ez egy régi Open Ticket verzióból származó jegy volt!",
|
||||||
"notInGuild":"Ez a {0} nem működik DM-ben! Próbáld újra egy szerveren!",
|
"notInGuild":"Ez a {0} nem működik DM-ben! Próbáld újra egy szerveren!",
|
||||||
"channelRename":"A discord korlátai miatt jelenleg nem lehet átnevezni a csatornát. A csatorna automatikusan átnevezésre kerül 10 perc múlva, ha a bot nincs újraindítva.",
|
"channelRename":"A discord korlátai miatt jelenleg nem lehet átnevezni a csatornát. A csatorna automatikusan átnevezésre kerül 10 perc múlva, ha a bot nincs újraindítva.",
|
||||||
|
"channelCategory":"A Discord sebességkorlátai miatt a csatorna kategóriája nem módosítható azonnal. Automatikusan módosul 10 percen belül, ha a bot online marad.",
|
||||||
"channelRenameSource":"A hiba forrása: {0}",
|
"channelRenameSource":"A hiba forrása: {0}",
|
||||||
"busy":"Nem lehet használni ezt a {0}-t!\nA jegy jelenleg a bot által van feldolgozás alatt.\n\nPróbáld meg néhány másodperc múlva!"
|
"busy":"Nem lehet használni ezt a {0}-t!\nA jegy jelenleg a bot által van feldolgozás alatt.\n\nPróbáld meg néhány másodperc múlva!",
|
||||||
|
"closeBeforeMessage":"Ezt a jegyet nem lehet lezárni/törölni, amíg egy felhasználó nem küldött üzenetet.",
|
||||||
|
"closeBeforeAdminMessage":"Ezt a jegyet nem lehet lezárni/törölni, amíg a jegy adminja vagy a támogatói csapat tagja nem küldött üzenetet.",
|
||||||
|
"unableToCreateTicket":"Nem tud jegyet létrehozni.",
|
||||||
|
"messageMissing":"Nem található az interakció üzenete. Használd helyette a(z) `{0}` parancsot.",
|
||||||
|
"stateExpired":"Ez az interakció már nem érvényes vagy lejárt. Használd helyette a(z) `{0}` parancsot. Ez a hiba normális egy nagyobb Open Ticket frissítés után.",
|
||||||
|
"panelStateExpired":"Ez a panel már nem érvényes vagy lejárt. Hozz létre egy új panelt a(z) `{0}` használatával a probléma megoldásához. Ez a hiba normális egy nagyobb Open Ticket frissítés után."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Az érték nem felel meg a mintának!",
|
"stringRegex":"Az érték nem felel meg a mintának!",
|
||||||
@@ -331,7 +388,6 @@
|
|||||||
"added":"Hozzáadva",
|
"added":"Hozzáadva",
|
||||||
"removed":"Eltávolítva",
|
"removed":"Eltávolítva",
|
||||||
"filter":"Szűrő",
|
"filter":"Szűrő",
|
||||||
"claimedBy":"Igényelte {0}",
|
|
||||||
"method":"Módszer",
|
"method":"Módszer",
|
||||||
"type":"Típus",
|
"type":"Típus",
|
||||||
"blacklisted":"Tiltólistás",
|
"blacklisted":"Tiltólistás",
|
||||||
@@ -343,6 +399,8 @@
|
|||||||
"syntax":"Szintaxis",
|
"syntax":"Szintaxis",
|
||||||
"originalName":"Eredeti Név",
|
"originalName":"Eredeti Név",
|
||||||
"newName":"Új Név",
|
"newName":"Új Név",
|
||||||
|
"originalCategory":"Eredeti Kategória",
|
||||||
|
"newCategory":"Új Kategória",
|
||||||
"until":"Amíg",
|
"until":"Amíg",
|
||||||
"validOptions":"Érvényes Opciók",
|
"validOptions":"Érvényes Opciók",
|
||||||
"validPanels":"Érvényes Panelek",
|
"validPanels":"Érvényes Panelek",
|
||||||
@@ -352,10 +410,32 @@
|
|||||||
"version":"Verzió",
|
"version":"Verzió",
|
||||||
"name":"Név",
|
"name":"Név",
|
||||||
"role":"Szerep",
|
"role":"Szerep",
|
||||||
"status":"Státusz",
|
"status":"Állapot",
|
||||||
"claimed":"Igényelt",
|
"claimed":"Igényelt",
|
||||||
"pinned":"Rögzített",
|
"pinned":"Rögzített",
|
||||||
"creationDate":"Létrehozás Dátuma"
|
"creationDate":"Létrehozás Dátuma",
|
||||||
|
|
||||||
|
"noone":"Senki",
|
||||||
|
"open":"Nyitott",
|
||||||
|
"closed":"Zárt",
|
||||||
|
"priority":"Prioritás",
|
||||||
|
"participants":"Résztvevők",
|
||||||
|
"yes":"Igen",
|
||||||
|
"no":"Nem",
|
||||||
|
"accept":"Elfogadás",
|
||||||
|
"cancel":"Mégse",
|
||||||
|
"option":"Opció",
|
||||||
|
"topic":"Téma",
|
||||||
|
"uptime":"Rendszer üzemidő",
|
||||||
|
"messages":"Üzenetek",
|
||||||
|
"embeds":"Beágyazások",
|
||||||
|
"files":"Fájlok",
|
||||||
|
"components":"Komponensek",
|
||||||
|
"cooldown":"Leállási idő",
|
||||||
|
"maxTickets":"Max jegyek",
|
||||||
|
"admins":"Adminok",
|
||||||
|
"roles":"Szerepkörök",
|
||||||
|
"size":"Méret"
|
||||||
},
|
},
|
||||||
"lowercase":{
|
"lowercase":{
|
||||||
"text":"szöveg",
|
"text":"szöveg",
|
||||||
@@ -375,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Szeretnéd, hogy ez a panel automatikusan frissüljön szerkesztéskor?",
|
"panelAutoUpdate":"Szeretnéd, hogy ez a panel automatikusan frissüljön szerkesztéskor?",
|
||||||
"ticket":"Azonnal hozz létre egy jegyet.",
|
"ticket":"Azonnal hozz létre egy jegyet.",
|
||||||
"ticketId":"Az azonosítója annak a jegynek, amelyet létre szeretnél hozni.",
|
"ticketId":"Az azonosítója annak a jegynek, amelyet létre szeretnél hozni.",
|
||||||
|
"ticketOtherUser":"Jegy létrehozása egy másik felhasználó számára.",
|
||||||
"close":"Zárjon be egy jegyet.",
|
"close":"Zárjon be egy jegyet.",
|
||||||
"delete":"Jegy törlése.",
|
"delete":"Jegy törlése.",
|
||||||
"deleteNoTranscript":"Töröld ezt a jegyet átirat nélkül.",
|
"deleteNoTranscript":"Töröld ezt a jegyet átirat nélkül.",
|
||||||
@@ -384,6 +465,7 @@
|
|||||||
"unclaim":"Jegy feloldása.",
|
"unclaim":"Jegy feloldása.",
|
||||||
"pin":"Jegy rögzítése.",
|
"pin":"Jegy rögzítése.",
|
||||||
"unpin":"Jegy rögzítésének feloldása.",
|
"unpin":"Jegy rögzítésének feloldása.",
|
||||||
|
|
||||||
"move":"Jegy áthelyezése.",
|
"move":"Jegy áthelyezése.",
|
||||||
"moveId":"Annak a opció az azonosítója, amelyet áthelyezni szeretnél.",
|
"moveId":"Annak a opció az azonosítója, amelyet áthelyezni szeretnél.",
|
||||||
"rename":"Jegy átnevezése.",
|
"rename":"Jegy átnevezése.",
|
||||||
@@ -392,6 +474,7 @@
|
|||||||
"addUser":"A felhasználó, akit hozzá szeretnél adni.",
|
"addUser":"A felhasználó, akit hozzá szeretnél adni.",
|
||||||
"remove":"Felhasználó eltávolítása a jegyből.",
|
"remove":"Felhasználó eltávolítása a jegyből.",
|
||||||
"removeUser":"A felhasználó, akit el szeretnél távolítani.",
|
"removeUser":"A felhasználó, akit el szeretnél távolítani.",
|
||||||
|
|
||||||
"blacklist":"Jegy tiltólista kezelése.",
|
"blacklist":"Jegy tiltólista kezelése.",
|
||||||
"blacklistView":"A jelenlegi tiltólista megtekintése.",
|
"blacklistView":"A jelenlegi tiltólista megtekintése.",
|
||||||
"blacklistAdd":"Felhasználó hozzáadása a tiltólistához.",
|
"blacklistAdd":"Felhasználó hozzáadása a tiltólistához.",
|
||||||
@@ -405,6 +488,7 @@
|
|||||||
"statsUserUser":"A felhasználó, akinek a statisztikáit meg szeretnéd tekinteni.",
|
"statsUserUser":"A felhasználó, akinek a statisztikáit meg szeretnéd tekinteni.",
|
||||||
"statsTicket":"Jegy statisztikáinak megtekintése a szerveren.",
|
"statsTicket":"Jegy statisztikáinak megtekintése a szerveren.",
|
||||||
"statsTicketTicket":"A jegy, amelynek a statisztikáit meg szeretnéd tekinteni.",
|
"statsTicketTicket":"A jegy, amelynek a statisztikáit meg szeretnéd tekinteni.",
|
||||||
|
|
||||||
"clear":"Több jegy egyidejű törlése. Opcionális szűrő adható meg.",
|
"clear":"Több jegy egyidejű törlése. Opcionális szűrő adható meg.",
|
||||||
"clearFilter":"A szűrő a jegyek törléséhez.",
|
"clearFilter":"A szűrő a jegyek törléséhez.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +501,7 @@
|
|||||||
"unpin":"Feloldott",
|
"unpin":"Feloldott",
|
||||||
"autoclose":"Automatikusan Bezárt"
|
"autoclose":"Automatikusan Bezárt"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Automatikus bezárás kezelése egy jegyben.",
|
"autoclose":"Automatikus bezárás kezelése egy jegyben.",
|
||||||
"autocloseDisable":"Automatikus bezárás letiltása ebben a jegyben.",
|
"autocloseDisable":"Automatikus bezárás letiltása ebben a jegyben.",
|
||||||
"autocloseEnable":"Automatikus bezárás engedélyezése ebben a jegyben.",
|
"autocloseEnable":"Automatikus bezárás engedélyezése ebben a jegyben.",
|
||||||
@@ -424,7 +509,21 @@
|
|||||||
"autodelete":"Automatikus törlés kezelése egy jegyben.",
|
"autodelete":"Automatikus törlés kezelése egy jegyben.",
|
||||||
"autodeleteDisable":"Automatikus törlés letiltása ebben a jegyben.",
|
"autodeleteDisable":"Automatikus törlés letiltása ebben a jegyben.",
|
||||||
"autodeleteEnable":"Automatikus törlés engedélyezése ebben a jegyben.",
|
"autodeleteEnable":"Automatikus törlés engedélyezése ebben a jegyben.",
|
||||||
"autodeleteEnableTime":"A napok száma, amely inaktívvá kell, hogy váljon ez a jegy a törléshez."
|
"autodeleteEnableTime":"A napok száma, amely inaktívvá kell, hogy váljon ez a jegy a törléshez.",
|
||||||
|
|
||||||
|
"topic":"Kezelje a jegy csatorna témáját.",
|
||||||
|
"topicSet":"Állítsa be a jegy csatorna témáját.",
|
||||||
|
"topicValue":"A csatorna új témája.",
|
||||||
|
"topicList":"Az összes jegy listája a témájukkal és statisztikáikkal.",
|
||||||
|
"priority":"Kezelje a jegy prioritását.",
|
||||||
|
"prioritySet":"Állítsa be a jegy prioritását.",
|
||||||
|
"priorityValue":"A csatorna prioritása.",
|
||||||
|
"priorityGet":"Kapja meg a jegy prioritását.",
|
||||||
|
"priorityList":"Az összes jegy listája a prioritásukkal.",
|
||||||
|
"transfer":"Átadja a jegy tulajdonjogát egyik felhasználótól a másikhoz.",
|
||||||
|
"transferUser":"A felhasználó, akinek át kell adni.",
|
||||||
|
"transcripts":"Egy felhasználó jegy átirat előzményeinek megtekintése.",
|
||||||
|
"transcriptsUser":"A megtekintendő felhasználó."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Parancsok listájának megtekintése.",
|
"help":"Parancsok listájának megtekintése.",
|
||||||
@@ -452,7 +551,16 @@
|
|||||||
"autocloseDisable":"Automatikus bezárás letiltása ebben a jegyben.",
|
"autocloseDisable":"Automatikus bezárás letiltása ebben a jegyben.",
|
||||||
"autocloseEnable":"Automatikus bezárás engedélyezése ebben a jegyben.",
|
"autocloseEnable":"Automatikus bezárás engedélyezése ebben a jegyben.",
|
||||||
"autodeleteDisable":"Automatikus törlés letiltása ebben a jegyben.",
|
"autodeleteDisable":"Automatikus törlés letiltása ebben a jegyben.",
|
||||||
"autodeleteEnable":"Automatikus törlés engedélyezése ebben a jegyben."
|
"autodeleteEnable":"Automatikus törlés engedélyezése ebben a jegyben.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Általános parancsok",
|
||||||
|
"basicTicket":"Alap jegy parancsok",
|
||||||
|
"advancedTicket":"Speciális jegy parancsok",
|
||||||
|
"userTicket":"Felhasználói jegy parancsok",
|
||||||
|
"admin":"Admin parancsok",
|
||||||
|
"advanced":"Speciális parancsok",
|
||||||
|
"extra":"Extra parancsok"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +568,8 @@
|
|||||||
"system":"Rendszer Statisztikák",
|
"system":"Rendszer Statisztikák",
|
||||||
"user":"Felhasználói Statisztikák",
|
"user":"Felhasználói Statisztikák",
|
||||||
"ticket":"Jegy Statisztikák",
|
"ticket":"Jegy Statisztikák",
|
||||||
"participants":"Résztvevők"
|
"participants":"Résztvevők",
|
||||||
|
"messages":"Üzenetek"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Létrehozott Jegyek",
|
"ticketsCreated":"Létrehozott Jegyek",
|
||||||
@@ -472,7 +581,48 @@
|
|||||||
"ticketsPinned":"Rögzített Jegyek",
|
"ticketsPinned":"Rögzített Jegyek",
|
||||||
"ticketsMoved":"Áthelyezett Jegyek",
|
"ticketsMoved":"Áthelyezett Jegyek",
|
||||||
"usersBlacklisted":"Tiltólistás Felhasználók",
|
"usersBlacklisted":"Tiltólistás Felhasználók",
|
||||||
"transcriptsCreated":"Létrehozott Átiratok"
|
"transcriptsCreated":"Létrehozott Átiratok",
|
||||||
|
"ticketsAutodeleted":"Automatikusan törölt jegyek",
|
||||||
|
"ticketsTransferred":"Átadott jegyek",
|
||||||
|
"ticketVolume":"Jegy mennyiség",
|
||||||
|
"averageTickets":"Átlag jegyek/felhasználó",
|
||||||
|
"currentTickets":"Jelenlegi jegyek",
|
||||||
|
"age":"Jegy kora",
|
||||||
|
"responseTime":"Válaszidő",
|
||||||
|
"resolutionTime":"Megoldási idő",
|
||||||
|
"createdOn":"Létrehozva",
|
||||||
|
"createdBy":"Létrehozta",
|
||||||
|
"closedOn":"Lezárva",
|
||||||
|
"closedBy":"Lezárta",
|
||||||
|
"claimedOn":"Átvéve",
|
||||||
|
"claimedBy":"Átvette",
|
||||||
|
"pinnedOn":"Kitűzve",
|
||||||
|
"pinnedBy":"Kitűzte",
|
||||||
|
"deletedOn":"Törölve",
|
||||||
|
"deletedBy":"Törölte"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Fejlesztő",
|
||||||
|
"serverOwner":"Szerver tulajdonos",
|
||||||
|
"serverAdmin":"Szerver admin",
|
||||||
|
"moderator":"Moderátor csapat",
|
||||||
|
"support":"Támogató csapat",
|
||||||
|
"member":"Tag"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Válassza ki a jegyét",
|
||||||
|
"selectRole":"Válassza ki a szerepkörét",
|
||||||
|
"selectOption":"Válassza ki a lehetőségét",
|
||||||
|
"selectPriorityLevel":"Prioritási szint kiválasztása"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Sürgős",
|
||||||
|
"veryHigh":"Nagyon magas",
|
||||||
|
"high":"Magas",
|
||||||
|
"normal":"Normál",
|
||||||
|
"low":"Alacsony",
|
||||||
|
"veryLow":"Nagyon alacsony",
|
||||||
|
"none":"Nincs"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["erxg"],
|
"translators":["erxg"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Indonesian",
|
"language":"Indonesian",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"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 dropdown hanya dapat berisi opsi dengan tipe: 'ticket', 'role' atau 'sub-panel'.",
|
||||||
"customInvalidVersion":"Versi yang ditetapkan dalam konfigurasi tidak sesuai! Pastikan konfigurasi Anda telah diperbarui ke versi terbaru!"
|
"customInvalidVersion":"Versi yang ditetapkan dalam konfigurasi tidak sesuai! Pastikan konfigurasi Anda telah diperbarui ke versi terbaru!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"Lihat Perintah Teks",
|
"helpSwitchText":"Lihat Perintah Teks",
|
||||||
"helpPage":"Halaman {0}",
|
"helpPage":"Halaman {0}",
|
||||||
"withReason":"Dengan Alasan",
|
"withReason":"Dengan Alasan",
|
||||||
"withoutTranscript":"Tanpa Transkrip"
|
"withoutTranscript":"Tanpa Transkrip",
|
||||||
|
"blacklistAdd":"Masukkan Pengguna ke Daftar Hitam",
|
||||||
|
"blacklistRemove":"Lepaskan Pengguna"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Tiket Dibuat",
|
"created":"Tiket Dibuat",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"Topik Diganti",
|
"topicSet":"Topik Diganti",
|
||||||
"prioritySet":"Prioritas Berganti",
|
"prioritySet":"Prioritas Berganti",
|
||||||
"priorityGet":"Prioritas Tiket",
|
"priorityGet":"Prioritas Tiket",
|
||||||
"transfer":"Tiket Ditransfer"
|
"transfer":"Tiket Ditransfer",
|
||||||
|
"transcripts":"Riwayat Transkrip"
|
||||||
},
|
},
|
||||||
"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!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"Prioritas tiket ini telah diubah menjadi {0} oleh {1}!",
|
"prioritySetLog":"Prioritas tiket ini telah diubah menjadi {0} oleh {1}!",
|
||||||
"prioritySetDm":"Prioritas tiket kamu telah diubah menjadi {0} di server kami!",
|
"prioritySetDm":"Prioritas tiket kamu telah diubah menjadi {0} di server kami!",
|
||||||
"roleUpdateLog":"{0} telah memperbarui status mereka!",
|
"roleUpdateLog":"{0} telah memperbarui status mereka!",
|
||||||
"roleUpdateDm":"Status kamu di server kami telah diperbarui!"
|
"roleUpdateDm":"Status kamu di server kami telah diperbarui!",
|
||||||
|
"topicSetLog":"Prioritas tiket ini telah diatur ke {0} oleh {1}.",
|
||||||
|
"topicSetDm":"Prioritas tiket Anda telah diatur ke {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"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"
|
"title":"Kesalahan Dalam Pembuatan Transkrip",
|
||||||
|
"noHistory":"Pengguna ini belum memiliki transkrip.",
|
||||||
|
"historyNotSupported":"Riwayat transkrip saat ini hanya didukung dengan HTML Transcripts.\nRiwayat transkrip teks akan tersedia di versi mendatang."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"PESAN",
|
"messagesTitle":"PESAN",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"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",
|
||||||
|
"channelCategory":"Tidak Dapat Mengubah Kategori",
|
||||||
"busy":"Tidak Sedang Sibuk",
|
"busy":"Tidak Sedang Sibuk",
|
||||||
"permissionError":"Terjadi Kesalahan Hak Akses"
|
"permissionError":"Terjadi Kesalahan Hak Akses"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"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.",
|
||||||
|
"channelCategory":"Karena batas rate Discord, kategori channel tidak dapat diubah segera. Kategori akan diubah secara otomatis dalam 10 menit jika bot tetap online.",
|
||||||
"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.",
|
"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.",
|
"closeBeforeAdminMessage":"Tiket ini tidak dapat ditutup ataupun dihapus sebelum admin tiket atau anggota tim dukungan mengirimkan pesan.",
|
||||||
"unableToCreateTicket":"Anda tidak dapat membuat tiket.."
|
"unableToCreateTicket":"Anda tidak dapat membuat tiket..",
|
||||||
|
"messageMissing":"Tidak dapat menemukan pesan interaksi. Gunakan perintah `{0}` sebagai gantinya.",
|
||||||
|
"stateExpired":"Interaksi ini sudah tidak valid atau telah kedaluwarsa. Gunakan perintah `{0}` sebagai gantinya. Kesalahan ini normal terjadi setelah pembaruan besar Open Ticket.",
|
||||||
|
"panelStateExpired":"Panel ini sudah tidak valid atau telah kedaluwarsa. Buat panel baru menggunakan `{0}` untuk menyelesaikan masalah. Kesalahan ini normal terjadi setelah pembaruan besar Open Ticket."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Nilai tidak sesuai pola!",
|
"stringRegex":"Nilai tidak sesuai pola!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"Sintaks",
|
"syntax":"Sintaks",
|
||||||
"originalName":"Nama asli",
|
"originalName":"Nama asli",
|
||||||
"newName":"Nama Yang Baru",
|
"newName":"Nama Yang Baru",
|
||||||
|
"originalCategory":"Kategori Asli",
|
||||||
|
"newCategory":"Kategori Baru",
|
||||||
"until":"Hingga",
|
"until":"Hingga",
|
||||||
"validOptions":"Opsi Yang Valid",
|
"validOptions":"Opsi Yang Valid",
|
||||||
"validPanels":"Panel Yang Valid",
|
"validPanels":"Panel Yang Valid",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"Para Partisipan",
|
"participants":"Para Partisipan",
|
||||||
"yes":"Ya",
|
"yes":"Ya",
|
||||||
"no":"Tidak",
|
"no":"Tidak",
|
||||||
|
"accept":"Terima",
|
||||||
|
"cancel":"Batal",
|
||||||
"option":"Opsi",
|
"option":"Opsi",
|
||||||
"topic":"Topik",
|
"topic":"Topik",
|
||||||
"uptime":"Waktu Aktif Sistem",
|
"uptime":"Waktu Aktif Sistem",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Apa Anda ingin panel ini diperbarui secara otomatis ketika diubah?",
|
"panelAutoUpdate":"Apa Anda ingin panel ini diperbarui secara otomatis ketika diubah?",
|
||||||
"ticket":"Buat tiket secara instan.",
|
"ticket":"Buat tiket secara instan.",
|
||||||
"ticketId":"Penanda tiket yang ingin anda buat.",
|
"ticketId":"Penanda tiket yang ingin anda buat.",
|
||||||
|
"ticketOtherUser":"Buat tiket untuk pengguna lain.",
|
||||||
"close":"Tutup tiket.",
|
"close":"Tutup tiket.",
|
||||||
"delete":"Hapus tiket.",
|
"delete":"Hapus tiket.",
|
||||||
"deleteNoTranscript":"Hapus tiket tanpa membuat transkrip.",
|
"deleteNoTranscript":"Hapus tiket tanpa membuat transkrip.",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"Dapatkan prioritas tiket.",
|
"priorityGet":"Dapatkan prioritas tiket.",
|
||||||
"priorityList":"Dapatkan daftar semua tiket beserta status prioritasnya.",
|
"priorityList":"Dapatkan daftar semua tiket beserta status prioritasnya.",
|
||||||
"transfer":"Alihkan kepemilikan tiket dari satu pengguna ke pengguna lain..",
|
"transfer":"Alihkan kepemilikan tiket dari satu pengguna ke pengguna lain..",
|
||||||
"transferUser":"Pengguna yang akan ditransferkan."
|
"transferUser":"Pengguna yang akan ditransferkan.",
|
||||||
|
"transcripts":"Lihat riwayat transkrip tiket pengguna.",
|
||||||
|
"transcriptsUser":"Pengguna yang ingin dilihat."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Dapatkan daftar perintah yang tersedia.",
|
"help":"Dapatkan daftar perintah yang tersedia.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"Pilih tiket kamu",
|
"selectTicket":"Pilih tiket kamu",
|
||||||
"selectRole":"Pilih status kamu",
|
"selectRole":"Pilih status kamu",
|
||||||
"selectOption":"Pilih opsi kamu"
|
"selectOption":"Pilih opsi kamu",
|
||||||
|
"selectPriorityLevel":"Pilih tingkat prioritas"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"Sangat Penting",
|
"urgent":"Sangat Penting",
|
||||||
|
|||||||
+167
-17
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["fraden1mvp."],
|
"translators":["fraden1mvp.","imperatorix_17"],
|
||||||
"lastedited":"08/10/2024",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Italian",
|
"language":"Italian",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,6 +31,14 @@
|
|||||||
"stringContains":"Questa stringa deve contenere {0}!",
|
"stringContains":"Questa stringa deve contenere {0}!",
|
||||||
"stringChoices":"Questa stringa può essere solo uno dei seguenti valori: {0}!",
|
"stringChoices":"Questa stringa può essere solo uno dei seguenti valori: {0}!",
|
||||||
"stringRegex":"Questa stringa non è valida!",
|
"stringRegex":"Questa stringa non è valida!",
|
||||||
|
"stringInvertedContains":"Questa stringa non può contenere {0}!",
|
||||||
|
"stringLowercase":"Questa stringa deve essere scritta solo in minuscolo!",
|
||||||
|
"stringUppercase":"Questa stringa deve essere scritta solo in maiuscolo!",
|
||||||
|
"stringSpecialCharacters":"Questa stringa non può contenere caratteri speciali! (solo a-z, 0-9 e spazio consentiti)",
|
||||||
|
"stringNoSpaces":"Questa stringa non può contenere spazi!",
|
||||||
|
"stringCapitalWord":"È consigliato che ogni parola in questa stringa inizi con una lettera maiuscola!",
|
||||||
|
"stringCapitalSentence":"Sembra che alcune frasi in questa stringa non inizino con una lettera maiuscola!",
|
||||||
|
"stringPunctuation":"Sembra che la frase in questa stringa non termini con un segno di punteggiatura!",
|
||||||
|
|
||||||
"numberTooShort":"Questo numero non può essere più corto di {0} caratteri!",
|
"numberTooShort":"Questo numero non può essere più corto di {0} caratteri!",
|
||||||
"numberTooLong":"Questo numero non può essere più lungo di {0} caratteri!",
|
"numberTooLong":"Questo numero non può essere più lungo di {0} caratteri!",
|
||||||
@@ -48,6 +56,8 @@
|
|||||||
"numberNegative":"Questo numero non può essere negativo!",
|
"numberNegative":"Questo numero non può essere negativo!",
|
||||||
"numberPositive":"Questo numero non può essere positivo!",
|
"numberPositive":"Questo numero non può essere positivo!",
|
||||||
"numberZero":"Questo numero non può essere zero!",
|
"numberZero":"Questo numero non può essere zero!",
|
||||||
|
"numberNan":"Questo numero non può essere NaN (Non Un Numero)!",
|
||||||
|
"numberInvertedContains":"Questo numero non può contenere {0}!",
|
||||||
|
|
||||||
"booleanTrue":"Questo booleano non può essere vero!",
|
"booleanTrue":"Questo booleano non può essere vero!",
|
||||||
"booleanFalse":"Questo booleano non può essere falso!",
|
"booleanFalse":"Questo booleano non può essere falso!",
|
||||||
@@ -89,7 +99,8 @@
|
|||||||
"invalidButton":"Questo pulsante deve avere almeno un {0} o {1}!",
|
"invalidButton":"Questo pulsante deve avere almeno un {0} o {1}!",
|
||||||
"unusedOption":"L'opzione {0} non è utilizzata da nessuna parte!",
|
"unusedOption":"L'opzione {0} non è utilizzata da nessuna parte!",
|
||||||
"unusedQuestion":"La domanda {0} non è utilizzata da nessuna parte!",
|
"unusedQuestion":"La domanda {0} non è utilizzata da nessuna parte!",
|
||||||
"dropdownOption":"Un pannello con il dropdown attivato può contenere solo opzioni di tipo 'ticket'!"
|
"dropdownOption":"Un pannello con menu a discesa può contenere solo opzioni dei tipi: 'ticket', 'role' o 'sub-panel'.",
|
||||||
|
"customInvalidVersion":"La versione specificata nella tua configurazione non corrisponde! Assicurati di aver aggiornato la configurazione all'ultima versione!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -107,7 +118,9 @@
|
|||||||
"helpSwitchText":"Visualizza Comandi Testo",
|
"helpSwitchText":"Visualizza Comandi Testo",
|
||||||
"helpPage":"Pagina {0}",
|
"helpPage":"Pagina {0}",
|
||||||
"withReason":"Con Motivo",
|
"withReason":"Con Motivo",
|
||||||
"withoutTranscript":"Senza Trascrizione"
|
"withoutTranscript":"Senza Trascrizione",
|
||||||
|
"blacklistAdd":"Metti Utente in Blacklist",
|
||||||
|
"blacklistRemove":"Rilascia Utente"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket Creato",
|
"created":"Ticket Creato",
|
||||||
@@ -132,6 +145,7 @@
|
|||||||
"blacklistAddDm":"Aggiunto alla Blacklist",
|
"blacklistAddDm":"Aggiunto alla Blacklist",
|
||||||
"blacklistRemoveDm":"Rimosso dalla Blacklist",
|
"blacklistRemoveDm":"Rimosso dalla Blacklist",
|
||||||
"clear":"Tickets Cancellati",
|
"clear":"Tickets Cancellati",
|
||||||
|
"clearTickets":"Pulisci Ticket",
|
||||||
"roles":"Ruoli Aggiornati",
|
"roles":"Ruoli Aggiornati",
|
||||||
|
|
||||||
"autoclose":"Ticket Autochiuso",
|
"autoclose":"Ticket Autochiuso",
|
||||||
@@ -139,7 +153,13 @@
|
|||||||
"autocloseDisabled":"Autochiusura Disabilitata",
|
"autocloseDisabled":"Autochiusura Disabilitata",
|
||||||
"autodelete":"Ticket Autocancellato",
|
"autodelete":"Ticket Autocancellato",
|
||||||
"autodeleteEnabled":"Autocancellazione Abilitata",
|
"autodeleteEnabled":"Autocancellazione Abilitata",
|
||||||
"autodeleteDisabled":"Autocancellazione Disabilitata"
|
"autodeleteDisabled":"Autocancellazione Disabilitata",
|
||||||
|
|
||||||
|
"topicSet":"Argomento Cambiato",
|
||||||
|
"prioritySet":"Priorità Cambiata",
|
||||||
|
"priorityGet":"Priorità Ticket",
|
||||||
|
"transfer":"Ticket Trasferito",
|
||||||
|
"transcripts":"Cronologia Trascrizioni"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Il tuo ticket è stato creato. Clicca il pulsante qui sotto per accedervi!",
|
"create":"Il tuo ticket è stato creato. Clicca il pulsante qui sotto per accedervi!",
|
||||||
@@ -180,7 +200,12 @@
|
|||||||
"ticketMessageLimit":"Puoi creare solo {0} ticket contemporaneamente!",
|
"ticketMessageLimit":"Puoi creare solo {0} ticket contemporaneamente!",
|
||||||
"ticketMessageAutoclose":"Questo ticket sarà autochiuso quando sarà inattivo per {0}h!",
|
"ticketMessageAutoclose":"Questo ticket sarà autochiuso quando sarà inattivo per {0}h!",
|
||||||
"ticketMessageAutodelete":"Questo ticket sarà autocancellato quando sarà inattivo per {0} giorni!",
|
"ticketMessageAutodelete":"Questo ticket sarà autocancellato quando sarà inattivo per {0} giorni!",
|
||||||
"panelReady":"Puoi trovare il pannello qui sotto!\nQuesto messaggio può ora essere eliminato!"
|
"panelReady":"Il pannello è disponibile nel messaggio successivo!\nQuesto messaggio ora può essere eliminato!",
|
||||||
|
|
||||||
|
"topicSet":"L’argomento del canale è stato cambiato con successo da {0}!",
|
||||||
|
"prioritySet":"La priorità del ticket è stata cambiata in {0} da {1} con successo!",
|
||||||
|
"priorityGet":"La priorità attuale di questo ticket è {0}.",
|
||||||
|
"transfer":"La proprietà del ticket è stata trasferita da {0} a {1} da {2} con successo!"
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder":"Perché hai chiuso questo ticket?",
|
"closePlaceholder":"Perché hai chiuso questo ticket?",
|
||||||
@@ -220,7 +245,16 @@
|
|||||||
"blacklistRemoveLog":"{0} è stato rimosso dalla blacklist da {1}!",
|
"blacklistRemoveLog":"{0} è stato rimosso dalla blacklist da {1}!",
|
||||||
"blacklistAddDm":"Sei stato aggiunto alla blacklist nel nostro server!\nD'ora in poi, non puoi creare ticket!",
|
"blacklistAddDm":"Sei stato aggiunto alla blacklist nel nostro server!\nD'ora in poi, non puoi creare ticket!",
|
||||||
"blacklistRemoveDm":"Sei stato rimosso dalla blacklist nel nostro server!\nOra puoi creare ticket di nuovo!",
|
"blacklistRemoveDm":"Sei stato rimosso dalla blacklist nel nostro server!\nOra puoi creare ticket di nuovo!",
|
||||||
"clearLog":"{0} tickets sono stati eliminati da {1}!"
|
"clearLog":"{0} tickets sono stati eliminati da {1}!",
|
||||||
|
|
||||||
|
"transferLog":"La proprietà di questo ticket è stata trasferita da {0} a {1} da {2}!",
|
||||||
|
"transferDm":"La proprietà del tuo ticket è stata trasferita da {0} a {1} nel nostro server!",
|
||||||
|
"prioritySetLog":"La priorità di questo ticket è stata cambiata in {0} da {1}!",
|
||||||
|
"prioritySetDm":"La priorità del tuo ticket è stata cambiata in {0} nel nostro server!",
|
||||||
|
"roleUpdateLog":"{0} ha aggiornato i propri ruoli!",
|
||||||
|
"roleUpdateDm":"I tuoi ruoli nel nostro server sono stati aggiornati!",
|
||||||
|
"topicSetLog":"La priorità di questo ticket è stata impostata su {0} da {1}.",
|
||||||
|
"topicSetDm":"La priorità del tuo ticket è stata impostata su {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -241,7 +275,21 @@
|
|||||||
"retry":"Riprova",
|
"retry":"Riprova",
|
||||||
"continue":"Elimina Senza Trascrizione",
|
"continue":"Elimina Senza Trascrizione",
|
||||||
"backup":"Crea Trascrizione di Backup",
|
"backup":"Crea Trascrizione di Backup",
|
||||||
"error":"Qualcosa è andato storto durante la creazione della trascrizione.\nCosa vuoi fare?\n\nQuesto ticket non sarà eliminato finché non clicchi su uno di questi pulsanti."
|
"error":"Qualcosa è andato storto durante la creazione della trascrizione.\nCosa vuoi fare?\n\nQuesto ticket non sarà eliminato finché non clicchi su uno di questi pulsanti.",
|
||||||
|
"title":"Errore nel Transcript",
|
||||||
|
"noHistory":"Questo utente non ha ancora alcuna trascrizione.",
|
||||||
|
"historyNotSupported":"La cronologia delle trascrizioni è attualmente supportata solo con HTML Transcripts.\nLa cronologia delle trascrizioni testuali sarà disponibile nelle versioni future."
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"MESSAGGI",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"FILE",
|
||||||
|
"fieldsTitle":"CAMPI",
|
||||||
|
"reactionsTitle":"REAZIONI",
|
||||||
|
"statsTitle":"STATISTICHE",
|
||||||
|
"emptyContent":"<il contenuto è vuoto>",
|
||||||
|
"noTitle":"<no-titolo>",
|
||||||
|
"noDesc":"<no-descrizione>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
@@ -257,7 +305,9 @@
|
|||||||
"unknownPanel":"Pannello Sconosciuto",
|
"unknownPanel":"Pannello Sconosciuto",
|
||||||
"notInGuild":"Non nel Server",
|
"notInGuild":"Non nel Server",
|
||||||
"channelRename":"Impossibile Rinominare il Canale",
|
"channelRename":"Impossibile Rinominare il Canale",
|
||||||
"busy":"Ticket Occupato"
|
"channelCategory":"Impossibile Cambiare Categoria",
|
||||||
|
"busy":"Ticket Occupato",
|
||||||
|
"permissionError":"Errore di Permesso"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Contatta il proprietario di questo bot per ulteriori informazioni!",
|
"askForInfo":"Contatta il proprietario di questo bot per ulteriori informazioni!",
|
||||||
@@ -279,8 +329,15 @@
|
|||||||
"deprecatedTicket":"Il canale attuale non è un ticket valido! Potrebbe essere un ticket di una vecchia versione di Open Ticket!",
|
"deprecatedTicket":"Il canale attuale non è un ticket valido! Potrebbe essere un ticket di una vecchia versione di Open Ticket!",
|
||||||
"notInGuild":"Questo {0} non funziona in DM! Riprova in un server!",
|
"notInGuild":"Questo {0} non funziona in DM! Riprova in un server!",
|
||||||
"channelRename":"A causa dei limiti di Discord, al momento non è possibile rinominare il canale. Il canale verrà automaticamente rinominato in oltre 10 minuti se il bot non viene riavviato.",
|
"channelRename":"A causa dei limiti di Discord, al momento non è possibile rinominare il canale. Il canale verrà automaticamente rinominato in oltre 10 minuti se il bot non viene riavviato.",
|
||||||
|
"channelCategory":"A causa dei limiti di frequenza di Discord, la categoria del canale non può essere modificata immediatamente. Verrà modificata automaticamente entro 10 minuti se il bot rimane online.",
|
||||||
"channelRenameSource":"La fonte di questo errore è: {0}",
|
"channelRenameSource":"La fonte di questo errore è: {0}",
|
||||||
"busy":"Impossibile utilizzare questo {0}!\nIl ticket è attualmente in fase di elaborazione dal bot.\n\nPer favore riprova tra pochi secondi!"
|
"busy":"Impossibile utilizzare questo {0}!\nIl ticket è attualmente in fase di elaborazione dal bot.\n\nPer favore riprova tra pochi secondi!",
|
||||||
|
"closeBeforeMessage":"Questo ticket non può essere chiuso/eliminato prima che un messaggio sia stato inviato da un utente.",
|
||||||
|
"closeBeforeAdminMessage":"Questo ticket non può essere chiuso/eliminato prima che un messaggio sia stato inviato da un admin del ticket o da un membro del supporto.",
|
||||||
|
"unableToCreateTicket":"Non puoi creare un ticket.",
|
||||||
|
"messageMissing":"Impossibile trovare il messaggio dell'interazione. Usa invece il comando `{0}`.",
|
||||||
|
"stateExpired":"Questa interazione non è più valida o è scaduta. Usa invece il comando `{0}`. È normale ricevere questo errore dopo un importante aggiornamento di Open Ticket.",
|
||||||
|
"panelStateExpired":"Questo pannello non è più valido o è scaduto. Crea un nuovo pannello usando `{0}` per risolvere il problema. È normale ricevere questo errore dopo un importante aggiornamento di Open Ticket."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Il valore non corrisponde al modello!",
|
"stringRegex":"Il valore non corrisponde al modello!",
|
||||||
@@ -331,7 +388,6 @@
|
|||||||
"added":"Aggiunto",
|
"added":"Aggiunto",
|
||||||
"removed":"Rimosso",
|
"removed":"Rimosso",
|
||||||
"filter":"Filtro",
|
"filter":"Filtro",
|
||||||
"claimedBy":"Rivendicato Da {0}",
|
|
||||||
"method":"Metodo",
|
"method":"Metodo",
|
||||||
"type":"Tipo",
|
"type":"Tipo",
|
||||||
"blacklisted":"Blacklistato",
|
"blacklisted":"Blacklistato",
|
||||||
@@ -343,6 +399,8 @@
|
|||||||
"syntax":"Sintassi",
|
"syntax":"Sintassi",
|
||||||
"originalName":"Nome Originale",
|
"originalName":"Nome Originale",
|
||||||
"newName":"Nuovo Nome",
|
"newName":"Nuovo Nome",
|
||||||
|
"originalCategory":"Categoria Originale",
|
||||||
|
"newCategory":"Nuova Categoria",
|
||||||
"until":"Fino a",
|
"until":"Fino a",
|
||||||
"validOptions":"Opzioni Valide",
|
"validOptions":"Opzioni Valide",
|
||||||
"validPanels":"Pannelli Validi",
|
"validPanels":"Pannelli Validi",
|
||||||
@@ -355,7 +413,29 @@
|
|||||||
"status":"Stato",
|
"status":"Stato",
|
||||||
"claimed":"Rivendicato",
|
"claimed":"Rivendicato",
|
||||||
"pinned":"Fissato",
|
"pinned":"Fissato",
|
||||||
"creationDate":"Data di Creazione"
|
"creationDate":"Data di Creazione",
|
||||||
|
|
||||||
|
"noone":"No-One",
|
||||||
|
"open":"Aperto",
|
||||||
|
"closed":"Chiuso",
|
||||||
|
"priority":"Priorità",
|
||||||
|
"participants":"Partecipanti",
|
||||||
|
"yes":"Si",
|
||||||
|
"no":"No",
|
||||||
|
"accept":"Accetta",
|
||||||
|
"cancel":"Annulla",
|
||||||
|
"option":"Opzione",
|
||||||
|
"topic":"Argomento",
|
||||||
|
"uptime":"Uptime Sistema",
|
||||||
|
"messages":"Messaggi",
|
||||||
|
"embeds":"Embeds",
|
||||||
|
"files":"Files",
|
||||||
|
"components":"Componenti",
|
||||||
|
"cooldown":"Cooldown",
|
||||||
|
"maxTickets":"Max Tickets",
|
||||||
|
"admins":"Admins",
|
||||||
|
"roles":"Ruoli",
|
||||||
|
"size":"Dimensione"
|
||||||
},
|
},
|
||||||
"lowercase":{
|
"lowercase":{
|
||||||
"text":"testo",
|
"text":"testo",
|
||||||
@@ -375,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Vuoi che questo pannello si aggiorni automaticamente quando viene modificato?",
|
"panelAutoUpdate":"Vuoi che questo pannello si aggiorni automaticamente quando viene modificato?",
|
||||||
"ticket":"Crea istantaneamente un ticket.",
|
"ticket":"Crea istantaneamente un ticket.",
|
||||||
"ticketId":"L'identificatore del ticket che vuoi creare.",
|
"ticketId":"L'identificatore del ticket che vuoi creare.",
|
||||||
|
"ticketOtherUser":"Crea un ticket per un altro utente.",
|
||||||
"close":"Chiudi un ticket.",
|
"close":"Chiudi un ticket.",
|
||||||
"delete":"Elimina un ticket.",
|
"delete":"Elimina un ticket.",
|
||||||
"deleteNoTranscript":"Elimina questo ticket senza creare una trascrizione.",
|
"deleteNoTranscript":"Elimina questo ticket senza creare una trascrizione.",
|
||||||
@@ -384,6 +465,7 @@
|
|||||||
"unclaim":"Rimuovi la rivendicazione di un ticket.",
|
"unclaim":"Rimuovi la rivendicazione di un ticket.",
|
||||||
"pin":"Fissa un ticket.",
|
"pin":"Fissa un ticket.",
|
||||||
"unpin":"Sblocca un ticket.",
|
"unpin":"Sblocca un ticket.",
|
||||||
|
|
||||||
"move":"Sposta un ticket.",
|
"move":"Sposta un ticket.",
|
||||||
"moveId":"L'identificatore dell'opzione a cui vuoi spostare.",
|
"moveId":"L'identificatore dell'opzione a cui vuoi spostare.",
|
||||||
"rename":"Rinomina un ticket.",
|
"rename":"Rinomina un ticket.",
|
||||||
@@ -392,6 +474,7 @@
|
|||||||
"addUser":"L'utente da aggiungere.",
|
"addUser":"L'utente da aggiungere.",
|
||||||
"remove":"Rimuovi un utente da un ticket.",
|
"remove":"Rimuovi un utente da un ticket.",
|
||||||
"removeUser":"L'utente da rimuovere.",
|
"removeUser":"L'utente da rimuovere.",
|
||||||
|
|
||||||
"blacklist":"Gestisci la blacklist del ticket.",
|
"blacklist":"Gestisci la blacklist del ticket.",
|
||||||
"blacklistView":"Visualizza un elenco della blacklist attuale.",
|
"blacklistView":"Visualizza un elenco della blacklist attuale.",
|
||||||
"blacklistAdd":"Aggiungi un utente alla blacklist.",
|
"blacklistAdd":"Aggiungi un utente alla blacklist.",
|
||||||
@@ -405,6 +488,7 @@
|
|||||||
"statsUserUser":"L'utente di cui visualizzare le statistiche.",
|
"statsUserUser":"L'utente di cui visualizzare le statistiche.",
|
||||||
"statsTicket":"Visualizza le statistiche di un ticket nel server.",
|
"statsTicket":"Visualizza le statistiche di un ticket nel server.",
|
||||||
"statsTicketTicket":"Il ticket da visualizzare.",
|
"statsTicketTicket":"Il ticket da visualizzare.",
|
||||||
|
|
||||||
"clear":"Elimina più ticket contemporaneamente.",
|
"clear":"Elimina più ticket contemporaneamente.",
|
||||||
"clearFilter":"Il filtro per eliminare ticket.",
|
"clearFilter":"Il filtro per eliminare ticket.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +501,7 @@
|
|||||||
"unpin":"Non Fissati",
|
"unpin":"Non Fissati",
|
||||||
"autoclose":"Chiusura Automatica"
|
"autoclose":"Chiusura Automatica"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Gestisci la chiusura automatica in un ticket.",
|
"autoclose":"Gestisci la chiusura automatica in un ticket.",
|
||||||
"autocloseDisable":"Disabilita la chiusura automatica in questo ticket.",
|
"autocloseDisable":"Disabilita la chiusura automatica in questo ticket.",
|
||||||
"autocloseEnable":"Abilita la chiusura automatica in questo ticket.",
|
"autocloseEnable":"Abilita la chiusura automatica in questo ticket.",
|
||||||
@@ -424,7 +509,21 @@
|
|||||||
"autodelete":"Gestisci la cancellazione automatica in un ticket.",
|
"autodelete":"Gestisci la cancellazione automatica in un ticket.",
|
||||||
"autodeleteDisable":"Disabilita la cancellazione automatica in questo ticket.",
|
"autodeleteDisable":"Disabilita la cancellazione automatica in questo ticket.",
|
||||||
"autodeleteEnable":"Abilita la cancellazione automatica in questo ticket.",
|
"autodeleteEnable":"Abilita la cancellazione automatica in questo ticket.",
|
||||||
"autodeleteEnableTime":"Il numero di giorni in cui questo ticket deve essere inattivo per eliminarlo."
|
"autodeleteEnableTime":"Il numero di giorni in cui questo ticket deve essere inattivo per eliminarlo.",
|
||||||
|
|
||||||
|
"topic":"Gestisci l'argomento del canale ticket.",
|
||||||
|
"topicSet":"Inserisci l'argomento del canale ticket.",
|
||||||
|
"topicValue":"Il nuovo argomento del canale ticket.",
|
||||||
|
"topicList":"Ottieni una lista di tutti i ticket con i loro argomenti e statistiche.",
|
||||||
|
"priority":"Gestisci la priorità del ticket.",
|
||||||
|
"prioritySet":"Inserisci la priorità del ticket.",
|
||||||
|
"priorityValue":"La priorità del canale.",
|
||||||
|
"priorityGet":"Ottieni la priorità del ticket.",
|
||||||
|
"priorityList":"Ottieni una lista di tutti i ticket con il loro stato di priorità.",
|
||||||
|
"transfer":"Trasferisci la proprietà da un utente ad un'altro.",
|
||||||
|
"transferUser":"L'utente al quale trasferire.",
|
||||||
|
"transcripts":"Visualizza la cronologia delle trascrizioni dei ticket di un utente.",
|
||||||
|
"transcriptsUser":"L'utente da visualizzare."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Ottieni un elenco di tutti i comandi disponibili.",
|
"help":"Ottieni un elenco di tutti i comandi disponibili.",
|
||||||
@@ -452,7 +551,16 @@
|
|||||||
"autocloseDisable":"Disabilita la chiusura automatica in questo ticket.",
|
"autocloseDisable":"Disabilita la chiusura automatica in questo ticket.",
|
||||||
"autocloseEnable":"Abilita la chiusura automatica in questo ticket.",
|
"autocloseEnable":"Abilita la chiusura automatica in questo ticket.",
|
||||||
"autodeleteDisable":"Disabilita la cancellazione automatica in questo ticket.",
|
"autodeleteDisable":"Disabilita la cancellazione automatica in questo ticket.",
|
||||||
"autodeleteEnable":"Abilita la cancellazione automatica in questo ticket."
|
"autodeleteEnable":"Abilita la cancellazione automatica in questo ticket.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Comandi generali",
|
||||||
|
"basicTicket":"Comandi basici ticket",
|
||||||
|
"advancedTicket":"Comandi avanzati ticket",
|
||||||
|
"userTicket":"Comandi ticket utente",
|
||||||
|
"admin":"Comandi admin",
|
||||||
|
"advanced":"Comandi avanzati",
|
||||||
|
"extra":"Comandi extra"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +568,8 @@
|
|||||||
"system":"Statistiche di Sistema",
|
"system":"Statistiche di Sistema",
|
||||||
"user":"Statistiche Utente",
|
"user":"Statistiche Utente",
|
||||||
"ticket":"Statistiche Ticket",
|
"ticket":"Statistiche Ticket",
|
||||||
"participants":"Partecipanti"
|
"participants":"Partecipanti",
|
||||||
|
"messages":"Messaggi"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Ticket Creati",
|
"ticketsCreated":"Ticket Creati",
|
||||||
@@ -472,7 +581,48 @@
|
|||||||
"ticketsPinned":"Ticket Fissati",
|
"ticketsPinned":"Ticket Fissati",
|
||||||
"ticketsMoved":"Ticket Spostati",
|
"ticketsMoved":"Ticket Spostati",
|
||||||
"usersBlacklisted":"Utenti Blacklistati",
|
"usersBlacklisted":"Utenti Blacklistati",
|
||||||
"transcriptsCreated":"Trascrizioni Create"
|
"transcriptsCreated":"Trascrizioni Create",
|
||||||
|
"ticketsAutodeleted":"Tickets Autoeliminati",
|
||||||
|
"ticketsTransferred":"Tickets Trasferiti",
|
||||||
|
"ticketVolume":"Volume dei Ticket",
|
||||||
|
"averageTickets":"Ticket medi/Utente",
|
||||||
|
"currentTickets":"Ticket Attuali",
|
||||||
|
"age":"Età Ticket",
|
||||||
|
"responseTime":"Tempo di Risposta",
|
||||||
|
"resolutionTime":"Tempo di Risoluzione",
|
||||||
|
"createdOn":"Creato il",
|
||||||
|
"createdBy":"Creato da",
|
||||||
|
"closedOn":"Chiuso il",
|
||||||
|
"closedBy":"Chiuso da",
|
||||||
|
"claimedOn":"Claimato il",
|
||||||
|
"claimedBy":"Claimato da",
|
||||||
|
"pinnedOn":"Fissato il",
|
||||||
|
"pinnedBy":"Fissato da",
|
||||||
|
"deletedOn":"Eliminato il",
|
||||||
|
"deletedBy":"Eliminato da"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Developer",
|
||||||
|
"serverOwner":"Proprietario Server",
|
||||||
|
"serverAdmin":"Admin Server",
|
||||||
|
"moderator":"Team di Moderazione",
|
||||||
|
"support":"Team di Supporto",
|
||||||
|
"member":"Membro"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Seleziona il tuo Ticket",
|
||||||
|
"selectRole":"Seleziona il tuo ruolo",
|
||||||
|
"selectOption":"Seleziona la tua opzione",
|
||||||
|
"selectPriorityLevel":"Seleziona livello di priorità"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Urgente",
|
||||||
|
"veryHigh":"Molto Alto",
|
||||||
|
"high":"Alto",
|
||||||
|
"normal":"Normale",
|
||||||
|
"low":"Basso",
|
||||||
|
"veryLow":"Molto Basso",
|
||||||
|
"none":"Nullo"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["HanumeshGupta","ChatGPT"],
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Japanese",
|
"language":"Japanese",
|
||||||
"automated":true
|
"automated":true
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"invalidButton":"このボタンには少なくとも「{0}」または「{1}」が必要です!",
|
"invalidButton":"このボタンには少なくとも「{0}」または「{1}」が必要です!",
|
||||||
"unusedOption":"オプション「{0}」はどこでも使用されていません!",
|
"unusedOption":"オプション「{0}」はどこでも使用されていません!",
|
||||||
"unusedQuestion":"質問「{0}」はどこでも使用されていません!",
|
"unusedQuestion":"質問「{0}」はどこでも使用されていません!",
|
||||||
"dropdownOption":"ドロップダウンが有効なパネルには「ticket」タイプのオプションのみ含めることができます!",
|
"dropdownOption":"ドロップダウン付きパネルには次の種類のオプションのみ含めることができます:'ticket'、'role'、または'sub-panel'。",
|
||||||
"customInvalidVersion":"設定ファイルに指定されたバージョンが一致しません! 設定を最新バージョンに更新してください!"
|
"customInvalidVersion":"設定ファイルに指定されたバージョンが一致しません! 設定を最新バージョンに更新してください!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"テキストコマンドを表示",
|
"helpSwitchText":"テキストコマンドを表示",
|
||||||
"helpPage":"ページ {0}",
|
"helpPage":"ページ {0}",
|
||||||
"withReason":"理由を付ける",
|
"withReason":"理由を付ける",
|
||||||
"withoutTranscript":"トランスクリプトなし"
|
"withoutTranscript":"トランスクリプトなし",
|
||||||
|
"blacklistAdd":"ユーザーをブラックリストに追加",
|
||||||
|
"blacklistRemove":"ユーザーのブラックリスト解除"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"チケットが作成されました",
|
"created":"チケットが作成されました",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"トピックが変更されました",
|
"topicSet":"トピックが変更されました",
|
||||||
"prioritySet":"優先度が変更されました",
|
"prioritySet":"優先度が変更されました",
|
||||||
"priorityGet":"チケットの優先度",
|
"priorityGet":"チケットの優先度",
|
||||||
"transfer":"チケットが転送されました"
|
"transfer":"チケットが転送されました",
|
||||||
|
"transcripts":"トランスクリプト履歴"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"チケットが作成されました。下のボタンをクリックしてアクセスしてください!",
|
"create":"チケットが作成されました。下のボタンをクリックしてアクセスしてください!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"このチケットの優先度は {1} により {0} に変更されました!",
|
"prioritySetLog":"このチケットの優先度は {1} により {0} に変更されました!",
|
||||||
"prioritySetDm":"あなたのチケットの優先度はサーバー内で {0} に変更されました!",
|
"prioritySetDm":"あなたのチケットの優先度はサーバー内で {0} に変更されました!",
|
||||||
"roleUpdateLog":"{0} がロールを更新しました!",
|
"roleUpdateLog":"{0} がロールを更新しました!",
|
||||||
"roleUpdateDm":"サーバー内のあなたのロールが更新されました!"
|
"roleUpdateDm":"サーバー内のあなたのロールが更新されました!",
|
||||||
|
"topicSetLog":"このチケットの優先度は {1} により {0} に設定されました。",
|
||||||
|
"topicSetDm":"あなたのチケットの優先度は {0} に設定されました。"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"continue":"トランスクリプトなしで削除",
|
"continue":"トランスクリプトなしで削除",
|
||||||
"backup":"バックアップトランスクリプトを作成",
|
"backup":"バックアップトランスクリプトを作成",
|
||||||
"error":"トランスクリプトの作成中にエラーが発生しました。\nどうしますか?\n\nいずれかのボタンをクリックするまでチケットは削除されません。",
|
"error":"トランスクリプトの作成中にエラーが発生しました。\nどうしますか?\n\nいずれかのボタンをクリックするまでチケットは削除されません。",
|
||||||
"title":"トランスクリプトエラー"
|
"title":"トランスクリプトエラー",
|
||||||
|
"noHistory":"このユーザーにはまだトランスクリプトがありません。",
|
||||||
|
"historyNotSupported":"トランスクリプト履歴は現在HTML Transcriptsのみ対応しています。\nテキストトランスクリプト履歴は今後のバージョンで利用可能になります。"
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"メッセージ",
|
"messagesTitle":"メッセージ",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"不明なパネル",
|
"unknownPanel":"不明なパネル",
|
||||||
"notInGuild":"サーバー内にいません",
|
"notInGuild":"サーバー内にいません",
|
||||||
"channelRename":"チャンネル名を変更できません",
|
"channelRename":"チャンネル名を変更できません",
|
||||||
|
"channelCategory":"カテゴリを変更できません",
|
||||||
"busy":"チケットは使用中です",
|
"busy":"チケットは使用中です",
|
||||||
"permissionError":"権限エラー"
|
"permissionError":"権限エラー"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"現在のチャンネルは有効なチケットではありません!旧バージョンのチケットかもしれません!",
|
"deprecatedTicket":"現在のチャンネルは有効なチケットではありません!旧バージョンのチケットかもしれません!",
|
||||||
"notInGuild":"この{0}はDMでは動作しません!サーバー内で再試行してください!",
|
"notInGuild":"この{0}はDMでは動作しません!サーバー内で再試行してください!",
|
||||||
"channelRename":"Discordのレートリミットにより、現在チャンネル名を変更できません。10分以内に自動的に変更されます。",
|
"channelRename":"Discordのレートリミットにより、現在チャンネル名を変更できません。10分以内に自動的に変更されます。",
|
||||||
|
"channelCategory":"Discordのレート制限のため、チャンネルカテゴリをすぐに変更できません。ボットがオンラインであれば10分以内に自動で変更されます。",
|
||||||
"channelRenameSource":"エラーの原因:{0}",
|
"channelRenameSource":"エラーの原因:{0}",
|
||||||
"busy":"この{0}は使用できません!\nチケットは現在処理中です。\n\n数秒後にもう一度お試しください!",
|
"busy":"この{0}は使用できません!\nチケットは現在処理中です。\n\n数秒後にもう一度お試しください!",
|
||||||
"closeBeforeMessage":"ユーザーがメッセージを送信する前に、このチケットを閉じたり削除したりすることはできません。",
|
"closeBeforeMessage":"ユーザーがメッセージを送信する前に、このチケットを閉じたり削除したりすることはできません。",
|
||||||
"closeBeforeAdminMessage":"チケット管理者またはサポートメンバーがメッセージを送信する前に、このチケットを閉じたり削除したりすることはできません。",
|
"closeBeforeAdminMessage":"チケット管理者またはサポートメンバーがメッセージを送信する前に、このチケットを閉じたり削除したりすることはできません。",
|
||||||
"unableToCreateTicket":"チケットを作成することはできません。"
|
"unableToCreateTicket":"チケットを作成することはできません。",
|
||||||
|
"messageMissing":"インタラクションのメッセージを見つけられませんでした。代わりにコマンド `{0}` を使用してください。",
|
||||||
|
"stateExpired":"このインタラクションは無効または期限切れです。代わりにコマンド `{0}` を使用してください。Open Ticketの大規模アップデート後にはこのエラーは正常です。",
|
||||||
|
"panelStateExpired":"このパネルは無効または期限切れです。問題を解決するには `{0}` を使用して新しいパネルを作成してください。Open Ticketの大規模アップデート後にはこのエラーは正常です。"
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"値がパターンに一致しません!",
|
"stringRegex":"値がパターンに一致しません!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"構文",
|
"syntax":"構文",
|
||||||
"originalName":"元の名前",
|
"originalName":"元の名前",
|
||||||
"newName":"新しい名前",
|
"newName":"新しい名前",
|
||||||
|
"originalCategory":"元のカテゴリ",
|
||||||
|
"newCategory":"新しいカテゴリ",
|
||||||
"until":"期限",
|
"until":"期限",
|
||||||
"validOptions":"有効なオプション",
|
"validOptions":"有効なオプション",
|
||||||
"validPanels":"有効なパネル",
|
"validPanels":"有効なパネル",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"参加者",
|
"participants":"参加者",
|
||||||
"yes":"はい",
|
"yes":"はい",
|
||||||
"no":"いいえ",
|
"no":"いいえ",
|
||||||
|
"accept":"承認",
|
||||||
|
"cancel":"キャンセル",
|
||||||
"option":"オプション",
|
"option":"オプション",
|
||||||
"topic":"トピック",
|
"topic":"トピック",
|
||||||
"uptime":"システム稼働時間",
|
"uptime":"システム稼働時間",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"編集時にこのパネルを自動更新しますか?",
|
"panelAutoUpdate":"編集時にこのパネルを自動更新しますか?",
|
||||||
"ticket":"すぐにチケットを作成します。",
|
"ticket":"すぐにチケットを作成します。",
|
||||||
"ticketId":"作成したいチケットの識別子。",
|
"ticketId":"作成したいチケットの識別子。",
|
||||||
|
"ticketOtherUser":"別のユーザーのチケットを作成します。",
|
||||||
"close":"チケットを閉じます。",
|
"close":"チケットを閉じます。",
|
||||||
"delete":"チケットを削除します。",
|
"delete":"チケットを削除します。",
|
||||||
"deleteNoTranscript":"トランスクリプトを作成せずにチケットを削除します。",
|
"deleteNoTranscript":"トランスクリプトを作成せずにチケットを削除します。",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"チケットの優先度を取得します。",
|
"priorityGet":"チケットの優先度を取得します。",
|
||||||
"priorityList":"すべてのチケットを優先度ステータス付きで一覧表示します。",
|
"priorityList":"すべてのチケットを優先度ステータス付きで一覧表示します。",
|
||||||
"transfer":"チケットの所有権を別のユーザーに転送します。",
|
"transfer":"チケットの所有権を別のユーザーに転送します。",
|
||||||
"transferUser":"転送先のユーザー。"
|
"transferUser":"転送先のユーザー。",
|
||||||
|
"transcripts":"ユーザーのチケットトランスクリプト履歴を表示します。",
|
||||||
|
"transcriptsUser":"表示するユーザー。"
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"利用可能なすべてのコマンドのリストを表示します。",
|
"help":"利用可能なすべてのコマンドのリストを表示します。",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"チケットを選択してください",
|
"selectTicket":"チケットを選択してください",
|
||||||
"selectRole":"ロールを選択してください",
|
"selectRole":"ロールを選択してください",
|
||||||
"selectOption":"オプションを選択してください"
|
"selectOption":"オプションを選択してください",
|
||||||
|
"selectPriorityLevel":"優先度レベルを選択"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"緊急",
|
"urgent":"緊急",
|
||||||
|
|||||||
@@ -0,0 +1,628 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.2.1",
|
||||||
|
"translators":["yuuslokrobjakkroval"],
|
||||||
|
"lastedited":"25/05/2026",
|
||||||
|
"language":"Khmer",
|
||||||
|
"automated":false
|
||||||
|
},
|
||||||
|
"checker":{
|
||||||
|
"system":{
|
||||||
|
"typeError":"[កំហុស]",
|
||||||
|
"headerOpenTicket":"OPEN TICKET",
|
||||||
|
"typeWarning":"[ព្រមាន]",
|
||||||
|
"typeInfo":"[ព័ត៌មាន]",
|
||||||
|
"headerConfigChecker":"CONFIG CHECKER",
|
||||||
|
"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":"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":"ខ្សែអក្សរនេះត្រូវការ emoji យ៉ាងហោចណាស់ {0}!",
|
||||||
|
"emojiTooLong":"ខ្សែអក្សរនេះត្រូវការ emoji ច្រើនបំផុត {0}!",
|
||||||
|
"emojiCustom":"Emoji នេះមិនអាចជា custom discord emoji!",
|
||||||
|
"emojiInvalid":"នេះជា emoji មិនត្រឹមត្រូវ!",
|
||||||
|
"urlInvalid":"URL នេះមិនត្រឹមត្រូវ!",
|
||||||
|
"urlInvalidHttp":"URL នេះអាចប្រើតែ https:// protocol ប៉ុណ្ណោះ!",
|
||||||
|
"urlInvalidProtocol":"URL នេះអាចប្រើតែ http:// និង https:// protocols ប៉ុណ្ណោះ!",
|
||||||
|
"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":"ផ្ទាំងដែលមានម៉ឺនុយទម្លាក់ចុះអាចមានតែជម្រើសប្រភេទ៖ 'ticket', 'role' ឬ 'sub-panel' ប៉ុណ្ណោះ។",
|
||||||
|
"customInvalidVersion":"កំណែដែលបានបញ្ជាក់ក្នុង config របស់អ្នកមិនត្រូវគ្នា! សូមប្រាកដថាអ្នកបានធ្វើបច្ចុប្បន្នភាព config ទៅកំណែថ្មីបំផុត!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions":{
|
||||||
|
"buttons":{
|
||||||
|
"create":"ចូលមើលសំបុត្រ",
|
||||||
|
"close":"បិទសំបុត្រ",
|
||||||
|
"delete":"លុបសំបុត្រ",
|
||||||
|
"reopen":"បើកសំបុត្រឡើងវិញ",
|
||||||
|
"claim":"ទទួលសំបុត្រ",
|
||||||
|
"unclaim":"លែងទទួលសំបុត្រ",
|
||||||
|
"pin":"ដាក់ម្ជុលសំបុត្រ",
|
||||||
|
"unpin":"ដកម្ជុលសំបុត្រ",
|
||||||
|
"clear":"លុបសំបុត្រទាំងអស់",
|
||||||
|
"helpSwitchSlash":"មើលពាក្យបញ្ជា Slash",
|
||||||
|
"helpSwitchText":"មើលពាក្យបញ្ជាអក្សរ",
|
||||||
|
"helpPage":"ទំព័រ {0}",
|
||||||
|
"withReason":"ជាមួយហេតុផល",
|
||||||
|
"withoutTranscript":"គ្មាន Transcript",
|
||||||
|
"blacklistAdd":"បញ្ចូលអ្នកប្រើទៅក្នុងបញ្ជីខ្មៅ",
|
||||||
|
"blacklistRemove":"ដោះលែងអ្នកប្រើ"
|
||||||
|
},
|
||||||
|
"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":"បានបើក Autoclose",
|
||||||
|
"autocloseDisabled":"បានបិទ Autoclose",
|
||||||
|
"autodelete":"សំបុត្របានលុបដោយស្វ័យប្រវត្តិ",
|
||||||
|
"autodeleteEnabled":"បានបើក Autodelete",
|
||||||
|
"autodeleteDisabled":"បានបិទ Autodelete",
|
||||||
|
|
||||||
|
"topicSet":"បានប្តូរប្រធានបទ",
|
||||||
|
"prioritySet":"បានប្តូរអាទិភាព",
|
||||||
|
"priorityGet":"អាទិភាពសំបុត្រ",
|
||||||
|
"transfer":"បានផ្ទេរសំបុត្រ",
|
||||||
|
"transcripts":"ប្រវត្តិ Transcript"
|
||||||
|
},
|
||||||
|
"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}h`!",
|
||||||
|
"autodeleteLeave":"សំបុត្រនេះត្រូវបានលុបដោយស្វ័យប្រវត្តិ ដោយសារអ្នកបង្កើតបានចាកចេញពីម៉ាស៊ីនបម្រើ!",
|
||||||
|
"autodeleteTimeout":"សំបុត្រនេះត្រូវបានលុបដោយស្វ័យប្រវត្តិ ដោយសារវាមិនសកម្មលើសពី `{0} ថ្ងៃ`!",
|
||||||
|
"autocloseEnabled":"Autoclose ត្រូវបានបើកក្នុងសំបុត្រនេះ!\nវានឹងត្រូវបានបិទនៅពេលមិនសកម្មលើសពី `{0}h`!",
|
||||||
|
"autocloseDisabled":"Autoclose ត្រូវបានបិទក្នុងសំបុត្រនេះ!\nវានឹងមិនត្រូវបានបិទដោយស្វ័យប្រវត្តិទៀតទេ!",
|
||||||
|
"autodeleteEnabled":"Autodelete ត្រូវបានបើកក្នុងសំបុត្រនេះ!\nវានឹងត្រូវបានលុបនៅពេលមិនសកម្មលើសពី `{0} ថ្ងៃ`!",
|
||||||
|
"autodeleteDisabled":"Autodelete ត្រូវបានបិទក្នុងសំបុត្រនេះ!\nវានឹងមិនត្រូវបានលុបដោយស្វ័យប្រវត្តិទៀតទេ!",
|
||||||
|
|
||||||
|
"ticketMessageLimit":"អ្នកអាចបង្កើតសំបុត្រ {0} ក្នុងពេលតែមួយ!",
|
||||||
|
"ticketMessageAutoclose":"សំបុត្រនេះនឹងត្រូវបានបិទដោយស្វ័យប្រវត្តិ នៅពេលមិនសកម្ម {0}h!",
|
||||||
|
"ticketMessageAutodelete":"សំបុត្រនេះនឹងត្រូវបានលុបដោយស្វ័យប្រវត្តិ នៅពេលមិនសកម្ម {0} ថ្ងៃ!",
|
||||||
|
"panelReady":"Panel មាននៅក្នុងសារបន្ត!\nសារនេះអាចលុបបានហើយ!",
|
||||||
|
|
||||||
|
"topicSet":"ប្រធានបទបណ្តាញត្រូវបានប្តូរដោយ {0} ដោយជោគជ័យ!",
|
||||||
|
"prioritySet":"អាទិភាពសំបុត្រត្រូវបានប្តូរទៅ {0} ដោយ {1} ដោយជោគជ័យ!",
|
||||||
|
"priorityGet":"អាទិភាពបច្ចុប្បន្នរបស់សំបុត្រនេះគឺ {0}។",
|
||||||
|
"transfer":"ភាពជាម្ចាស់សំបុត្រត្រូវបានផ្ទេរពី {0} ទៅ {1} ដោយ {2} ដោយជោគជ័យ!"
|
||||||
|
},
|
||||||
|
"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}!",
|
||||||
|
|
||||||
|
"transferLog":"ភាពជាម្ចាស់សំបុត្រនេះត្រូវបានផ្ទេរពី {0} ទៅ {1} ដោយ {2}!",
|
||||||
|
"transferDm":"ភាពជាម្ចាស់សំបុត្ររបស់អ្នកត្រូវបានផ្ទេរពី {0} ទៅ {1} នៅក្នុងម៉ាស៊ីនបម្រើរបស់យើង!",
|
||||||
|
"prioritySetLog":"អាទិភាពសំបុត្រនេះត្រូវបានប្តូរទៅ {0} ដោយ {1}!",
|
||||||
|
"prioritySetDm":"អាទិភាពសំបុត្ររបស់អ្នកត្រូវបានប្តូរទៅ {0} នៅក្នុងម៉ាស៊ីនបម្រើរបស់យើង!",
|
||||||
|
"roleUpdateLog":"{0} បានធ្វើបច្ចុប្បន្នភាពតួនាទីរបស់ខ្លួន!",
|
||||||
|
"roleUpdateDm":"តួនាទីរបស់អ្នកក្នុងម៉ាស៊ីនបម្រើរបស់យើងត្រូវបានធ្វើបច្ចុប្បន្នភាព!",
|
||||||
|
"topicSetLog":"អាទិភាពសំបុត្រនេះត្រូវបានកំណត់ទៅ {0} ដោយ {1}។",
|
||||||
|
"topicSetDm":"អាទិភាពសំបុត្ររបស់អ្នកត្រូវបានកំណត់ទៅ {0}។"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"success":{
|
||||||
|
"visit":"ចូលមើល Transcript",
|
||||||
|
"ready":"Transcript ត្រូវបានបង្កើត",
|
||||||
|
"textFileDescription":"នេះជា transcript អក្សររបស់សំបុត្រដែលបានលុប!",
|
||||||
|
"htmlProgress":"សូមរង់ចាំ ខណៈ html transcript កំពុងត្រូវបានដំណើរការ...",
|
||||||
|
|
||||||
|
"createdChannel":"transcript {0} ថ្មីត្រូវបានបង្កើតក្នុងម៉ាស៊ីនបម្រើ!",
|
||||||
|
"createdCreator":"transcript {0} ថ្មីត្រូវបានបង្កើតសម្រាប់សំបុត្ររបស់អ្នក!",
|
||||||
|
"createdParticipant":"transcript {0} ថ្មីត្រូវបានបង្កើតក្នុងសំបុត្រដែលអ្នកបានចូលរួម!",
|
||||||
|
"createdActiveAdmin":"transcript {0} ថ្មីត្រូវបានបង្កើតក្នុងសំបុត្រដែលអ្នកបានចូលរួមជាអ្នកគ្រប់គ្រង!",
|
||||||
|
"createdEveryAdmin":"transcript {0} ថ្មីត្រូវបានបង្កើតក្នុងសំបុត្រដែលអ្នកជាអ្នកគ្រប់គ្រង!",
|
||||||
|
"createdOther":"transcript {0} ថ្មីត្រូវបានបង្កើត!"
|
||||||
|
},
|
||||||
|
"errors":{
|
||||||
|
"retry":"ព្យាយាមម្តងទៀត",
|
||||||
|
"continue":"លុបដោយគ្មាន Transcript",
|
||||||
|
"backup":"បង្កើត Transcript បម្រុង",
|
||||||
|
"error":"មានបញ្ហាខ្លះក្នុងការបង្កើត transcript។\nអ្នកចង់ធ្វើអ្វី?\n\nសំបុត្រនេះនឹងមិនត្រូវបានលុបទេ រហូតអ្នកចុចប៊ូតុងណាមួយ។",
|
||||||
|
"title":"កំហុស Transcript",
|
||||||
|
"noHistory":"អ្នកប្រើនេះមិនទាន់មាន transcript ទេ។",
|
||||||
|
"historyNotSupported":"ប្រវត្តិ transcript បច្ចុប្បន្នគាំទ្រតែ HTML Transcripts ប៉ុណ្ណោះ។\nប្រវត្តិ transcript អត្ថបទនឹងមាននៅក្នុងកំណែអនាគត។"
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"សារ",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"ឯកសារ",
|
||||||
|
"fieldsTitle":"វាល",
|
||||||
|
"reactionsTitle":"ប្រតិកម្ម",
|
||||||
|
"statsTitle":"ស្ថិតិ",
|
||||||
|
"emptyContent":"<មាតិកាទទេ>",
|
||||||
|
"noTitle":"<គ្មានចំណងជើង>",
|
||||||
|
"noDesc":"<គ្មានការពិពណ៌នា>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors":{
|
||||||
|
"titles":{
|
||||||
|
"internalError":"កំហុសផ្ទៃក្នុង",
|
||||||
|
"optionMissing":"ជម្រើសពាក្យបញ្ជាបាត់",
|
||||||
|
"optionInvalid":"ជម្រើសពាក្យបញ្ជាមិនត្រឹមត្រូវ",
|
||||||
|
"unknownCommand":"ពាក្យបញ្ជាមិនស្គាល់",
|
||||||
|
"noPermissions":"គ្មានសិទ្ធិ",
|
||||||
|
"unknownTicket":"សំបុត្រមិនស្គាល់",
|
||||||
|
"deprecatedTicket":"សំបុត្រហួសសម័យ",
|
||||||
|
"unknownOption":"ជម្រើសមិនស្គាល់",
|
||||||
|
"unknownPanel":"Panel មិនស្គាល់",
|
||||||
|
"notInGuild":"មិននៅក្នុងម៉ាស៊ីនបម្រើ",
|
||||||
|
"channelRename":"មិនអាចប្តូរឈ្មោះបណ្តាញ",
|
||||||
|
"channelCategory":"មិនអាចប្តូរប្រភេទបាន",
|
||||||
|
"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":"ដោយសារ discord ratelimits, វាមិនអាចទៅបានសម្រាប់បូតក្នុងការប្តូរឈ្មោះបណ្តាញ។ បណ្តាញនឹងត្រូវបានប្តូរឈ្មោះដោយស្វ័យប្រវត្តិ ក្នុងរយៈពេល 10 នាទី ប្រសិនបើបូតមិនបានចាប់ផ្តើមឡើងវិញ។",
|
||||||
|
"channelCategory":"ដោយសារកំណត់អត្រារបស់ Discord មិនអាចប្តូរប្រភេទឆានែលភ្លាមៗបានទេ។ វានឹងត្រូវបានប្តូរដោយស្វ័យប្រវត្តិក្នុងរយៈពេល 10 នាទី ប្រសិនបើ bot នៅតែអនឡាញ។",
|
||||||
|
"channelRenameSource":"ប្រភពកំហុសនេះគឺ: {0}",
|
||||||
|
"busy":"មិនអាចប្រើ {0} នេះ!\nសំបុត្រកំពុងត្រូវបានដំណើរការដោយបូត។\n\nសូមព្យាយាមម្តងទៀតក្នុងពីរបីវិនាទី!",
|
||||||
|
"closeBeforeMessage":"សំបុត្រនេះមិនអាចបិទ/លុបមុនមានសារពីអ្នកប្រើ។",
|
||||||
|
"closeBeforeAdminMessage":"សំបុត្រនេះមិនអាចបិទ/លុបមុនមានសារពីអ្នកគ្រប់គ្រងសំបុត្រ ឬសមាជិកជំនួយ។",
|
||||||
|
"unableToCreateTicket":"អ្នកមិនអាចបង្កើតសំបុត្រ។",
|
||||||
|
"messageMissing":"មិនអាចរកសារ interaction បានទេ។ សូមប្រើពាក្យបញ្ជា `{0}` ជំនួស។",
|
||||||
|
"stateExpired":"Interaction នេះមិនមានសុពលភាពទៀតទេ ឬបានផុតកំណត់។ សូមប្រើពាក្យបញ្ជា `{0}` ជំនួស។ វាជារឿងធម្មតាក្រោយការអាប់ដេតធំរបស់ Open Ticket។",
|
||||||
|
"panelStateExpired":"ផ្ទាំងនេះមិនមានសុពលភាពទៀតទេ ឬបានផុតកំណត់។ សូមបង្កើតផ្ទាំងថ្មីដោយប្រើ `{0}` ដើម្បីដោះស្រាយបញ្ហា។ វាជារឿងធម្មតាក្រោយការអាប់ដេតធំរបស់ Open Ticket។"
|
||||||
|
},
|
||||||
|
"optionInvalidReasons":{
|
||||||
|
"stringRegex":"តម្លៃមិនត្រូវនឹងលំនាំ!",
|
||||||
|
"stringMinLength":"តម្លៃត្រូវការយ៉ាងហោចណាស់ {0} តួអក្សរ!",
|
||||||
|
"stringMaxLength":"តម្លៃត្រូវការច្រើនបំផុត {0} តួអក្សរ!",
|
||||||
|
"numberInvalid":"លេខមិនត្រឹមត្រូវ!",
|
||||||
|
"numberMin":"លេខត្រូវការយ៉ាងហោចណាស់ {0}!",
|
||||||
|
"numberMax":"លេខត្រូវការច្រើនបំផុត {0}!",
|
||||||
|
"numberDecimal":"លេខមិនត្រូវបានអនុញ្ញាតជាទសភាគ!",
|
||||||
|
"numberNegative":"លេខមិនត្រូវបានអនុញ្ញាតជាអវិជ្ជមាន!",
|
||||||
|
"numberPositive":"លេខមិនត្រូវបានអនុញ្ញាតជាវិជ្ជមាន!",
|
||||||
|
"numberZero":"លេខមិនត្រូវបានអនុញ្ញាតជាសូន្យ!",
|
||||||
|
"channelNotFound":"រកបណ្តាញមិនឃើញ!",
|
||||||
|
"userNotFound":"រកអ្នកប្រើប្រាស់មិនឃើញ!",
|
||||||
|
"roleNotFound":"រកតួនាទីមិនឃើញ!",
|
||||||
|
"memberNotFound":"រកអ្នកប្រើប្រាស់មិនឃើញ!",
|
||||||
|
"mentionableNotFound":"រកអ្នកប្រើប្រាស់ ឬតួនាទីមិនឃើញ!",
|
||||||
|
"channelType":"ប្រភេទបណ្តាញមិនត្រឹមត្រូវ!",
|
||||||
|
"notInGuild":"ជម្រើសនេះទាមទារឱ្យអ្នកនៅក្នុងម៉ាស៊ីនបម្រើ!"
|
||||||
|
},
|
||||||
|
"permissions":{
|
||||||
|
"developer":"អ្នកត្រូវជា developer របស់បូត។",
|
||||||
|
"owner":"អ្នកត្រូវជាម្ចាស់ម៉ាស៊ីនបម្រើ។",
|
||||||
|
"admin":"អ្នកត្រូវជា 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":"Panel",
|
||||||
|
"command":"ពាក្យបញ្ជា",
|
||||||
|
"system":"ប្រព័ន្ធ",
|
||||||
|
"true":"ពិត",
|
||||||
|
"false":"មិនពិត",
|
||||||
|
"syntax":"វាក្យសម្ព័ន្ធ",
|
||||||
|
"originalName":"ឈ្មោះដើម",
|
||||||
|
"newName":"ឈ្មោះថ្មី",
|
||||||
|
"originalCategory":"ប្រភេទដើម",
|
||||||
|
"newCategory":"ប្រភេទថ្មី",
|
||||||
|
"until":"រហូតដល់",
|
||||||
|
"validOptions":"ជម្រើសត្រឹមត្រូវ",
|
||||||
|
"validPanels":"Panel ត្រឹមត្រូវ",
|
||||||
|
"autoclose":"Autoclose",
|
||||||
|
"autodelete":"Autodelete",
|
||||||
|
"startupDate":"កាលបរិច្ឆេទចាប់ផ្តើម",
|
||||||
|
"version":"កំណែ",
|
||||||
|
"name":"ឈ្មោះ",
|
||||||
|
"role":"តួនាទី",
|
||||||
|
"status":"ស្ថានភាព",
|
||||||
|
"claimed":"ទទួលហើយ",
|
||||||
|
"pinned":"ដាក់ម្ជុលហើយ",
|
||||||
|
"creationDate":"កាលបរិច្ឆេទបង្កើត",
|
||||||
|
|
||||||
|
"noone":"គ្មាននរណា",
|
||||||
|
"open":"បើក",
|
||||||
|
"closed":"បិទ",
|
||||||
|
"priority":"អាទិភាព",
|
||||||
|
"participants":"អ្នកចូលរួម",
|
||||||
|
"yes":"បាទ/ចាស",
|
||||||
|
"no":"ទេ",
|
||||||
|
"accept":"យល់ព្រម",
|
||||||
|
"cancel":"បោះបង់",
|
||||||
|
"option":"ជម្រើស",
|
||||||
|
"topic":"ប្រធានបទ",
|
||||||
|
"uptime":"ពេលដំណើរការប្រព័ន្ធ",
|
||||||
|
"messages":"សារ",
|
||||||
|
"embeds":"Embeds",
|
||||||
|
"files":"ឯកសារ",
|
||||||
|
"components":"ធាតុ",
|
||||||
|
"cooldown":"រយៈពេលត្រជាក់",
|
||||||
|
"maxTickets":"សំបុត្រច្រើនបំផុត",
|
||||||
|
"admins":"អ្នកគ្រប់គ្រង",
|
||||||
|
"roles":"តួនាទី",
|
||||||
|
"size":"ទំហំ"
|
||||||
|
},
|
||||||
|
"lowercase":{
|
||||||
|
"text":"អក្សរ",
|
||||||
|
"html":"html",
|
||||||
|
"command":"ពាក្យបញ្ជា",
|
||||||
|
"modal":"modal",
|
||||||
|
"button":"ប៊ូតុង",
|
||||||
|
"dropdown":"dropdown",
|
||||||
|
"method":"វិធីសាស្ត្រ"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"reason":"បញ្ជាក់មូលហេតុស្រេចចិត្តដែលនឹងបង្ហាញក្នុង logs។",
|
||||||
|
"help":"ទទួលបានបញ្ជីពាក្យបញ្ជាដែលមាន។",
|
||||||
|
"panel":"បង្ហាញសារជាមួយ dropdown ឬ buttons (សម្រាប់ការបង្កើតសំបុត្រ)។",
|
||||||
|
"panelId":"អ្នកកំណត់អត្តសញ្ញាណ panel ដែលអ្នកចង់បង្ហាញ។",
|
||||||
|
"panelAutoUpdate":"តើអ្នកចង់ panel នេះធ្វើបច្ចុប្បន្នភាពដោយស្វ័យប្រវត្តិ នៅពេលកែប្រែ?",
|
||||||
|
"ticket":"បង្កើតសំបុត្រភ្លាមៗ។",
|
||||||
|
"ticketId":"អ្នកកំណត់អត្តសញ្ញាណសំបុត្រដែលអ្នកចង់បង្កើត។",
|
||||||
|
"ticketOtherUser":"បង្កើតសំបុត្រសម្រាប់អ្នកប្រើផ្សេងទៀត។",
|
||||||
|
"close":"បិទសំបុត្រ។",
|
||||||
|
"delete":"លុបសំបុត្រ។",
|
||||||
|
"deleteNoTranscript":"លុបសំបុត្រនេះដោយគ្មានការបង្កើត transcript។",
|
||||||
|
"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":"គ្រប់គ្រង autoclose ក្នុងសំបុត្រ។",
|
||||||
|
"autocloseDisable":"បិទ autoclose ក្នុងសំបុត្រនេះ។",
|
||||||
|
"autocloseEnable":"បើក autoclose ក្នុងសំបុត្រនេះ។",
|
||||||
|
"autocloseEnableTime":"ចំនួនម៉ោងដែលសំបុត្រនេះត្រូវមិនសកម្ម ដើម្បីបិទ។",
|
||||||
|
"autodelete":"គ្រប់គ្រង autodelete ក្នុងសំបុត្រ។",
|
||||||
|
"autodeleteDisable":"បិទ autodelete ក្នុងសំបុត្រនេះ។",
|
||||||
|
"autodeleteEnable":"បើក autodelete ក្នុងសំបុត្រនេះ។",
|
||||||
|
"autodeleteEnableTime":"ចំនួនថ្ងៃដែលសំបុត្រនេះត្រូវមិនសកម្ម ដើម្បីលុប។",
|
||||||
|
|
||||||
|
"topic":"គ្រប់គ្រងប្រធានបទបណ្តាញសំបុត្រ។",
|
||||||
|
"topicSet":"កំណត់ប្រធានបទបណ្តាញសំបុត្រ។",
|
||||||
|
"topicValue":"ប្រធានបទថ្មីរបស់បណ្តាញ។",
|
||||||
|
"topicList":"ទទួលបានបញ្ជីសំបុត្រទាំងអស់ ជាមួយប្រធានបទ និងស្ថិតិ។",
|
||||||
|
"priority":"គ្រប់គ្រងអាទិភាពសំបុត្រ។",
|
||||||
|
"prioritySet":"កំណត់អាទិភាពសំបុត្រ។",
|
||||||
|
"priorityValue":"អាទិភាពរបស់បណ្តាញ។",
|
||||||
|
"priorityGet":"ទទួលបានអាទិភាពសំបុត្រ។",
|
||||||
|
"priorityList":"ទទួលបានបញ្ជីសំបុត្រទាំងអស់ ជាមួយស្ថានភាពអាទិភាព។",
|
||||||
|
"transfer":"ផ្ទេរភាពជាម្ចាស់សំបុត្រពីអ្នកប្រើប្រាស់ម្នាក់ទៅម្នាក់ទៀត។",
|
||||||
|
"transferUser":"អ្នកប្រើប្រាស់ដែលត្រូវផ្ទេរទៅ។",
|
||||||
|
"transcripts":"មើលប្រវត្តិ transcript សំបុត្ររបស់អ្នកប្រើ។",
|
||||||
|
"transcriptsUser":"អ្នកប្រើដែលត្រូវមើល។"
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"help":"ទទួលបានបញ្ជីពាក្យបញ្ជាដែលមាន។",
|
||||||
|
"ticket":"បង្កើតសំបុត្រភ្លាមៗ។",
|
||||||
|
"close":"បិទសំបុត្រ, វិធីនេះបិទការសរសេរក្នុងបណ្តាញ។",
|
||||||
|
"delete":"លុបសំបុត្រ, វិធីនេះបង្កើត transcript នៅពេលបើក។",
|
||||||
|
"reopen":"បើកសំបុត្រឡើងវិញ, វិធីនេះបើកការសរសេរក្នុងបណ្តាញម្តងទៀត។",
|
||||||
|
"pin":"ដាក់ម្ជុលសំបុត្រ។ វានឹងផ្លាស់សំបុត្រទៅខាងលើ ហើយបន្ថែម '📌' ទៅឈ្មោះ។",
|
||||||
|
"unpin":"ដកម្ជុលសំបុត្រ។ សំបុត្រនឹងនៅតំណែងដដែល ប៉ុន្តែនឹងបាត់ '📌'។",
|
||||||
|
"move":"ផ្លាស់ប្តូរសំបុត្រ។ វានឹងប្តូរប្រភេទរបស់សំបុត្រ។",
|
||||||
|
"rename":"ប្តូរឈ្មោះសំបុត្រ។ វានឹងប្តូរឈ្មោះបណ្តាញរបស់សំបុត្រ។",
|
||||||
|
"claim":"ទទួលសំបុត្រ។ ដោយវិធីនេះ អ្នកអាចប្រាប់ក្រុមរបស់អ្នកថាអ្នកកំពុងដោះស្រាយសំបុត្រនេះ។",
|
||||||
|
"unclaim":"លែងទទួលសំបុត្រ។ ដោយវិធីនេះ អ្នកអាចប្រាប់ក្រុមរបស់អ្នកថាសំបុត្រនេះទំនេរ។",
|
||||||
|
"add":"បន្ថែមអ្នកប្រើប្រាស់ទៅសំបុត្រ។ វានឹងអនុញ្ញាតឱ្យអ្នកប្រើប្រាស់អាននិងសរសេរក្នុងសំបុត្រ។",
|
||||||
|
"remove":"ដកអ្នកប្រើប្រាស់ចេញពីសំបុត្រ។ វានឹងដកសិទ្ធិអាននិងសរសេររបស់អ្នកប្រើប្រាស់ក្នុងសំបុត្រ។",
|
||||||
|
"panel":"បង្ហាញសារជាមួយ dropdown ឬ buttons (សម្រាប់ការបង្កើតសំបុត្រ)។",
|
||||||
|
"blacklistView":"មើលបញ្ជីបញ្ជីខ្មៅបច្ចុប្បន្ន។",
|
||||||
|
"blacklistAdd":"បន្ថែមអ្នកប្រើប្រាស់ទៅបញ្ជីខ្មៅ។",
|
||||||
|
"blacklistRemove":"ដកអ្នកប្រើប្រាស់ចេញពីបញ្ជីខ្មៅ។",
|
||||||
|
"blacklistGet":"ទទួលបានព័ត៌មានលម្អិតពីអ្នកប្រើប្រាស់ក្នុងបញ្ជីខ្មៅ។",
|
||||||
|
"statsGlobal":"មើលស្ថិតិសរុប។",
|
||||||
|
"statsTicket":"មើលស្ថិតិពីសំបុត្រក្នុងម៉ាស៊ីនបម្រើ។",
|
||||||
|
"statsUser":"មើលស្ថិតិពីអ្នកប្រើប្រាស់ក្នុងម៉ាស៊ីនបម្រើ។",
|
||||||
|
"statsReset":"កំណត់ស្ថិតិបូតទាំងអស់ឡើងវិញ (ចាប់ផ្តើមរាប់ពីសូន្យ)។",
|
||||||
|
"autocloseDisable":"បិទ autoclose ក្នុងសំបុត្រនេះ។",
|
||||||
|
"autocloseEnable":"បើក autoclose ក្នុងសំបុត្រនេះ។",
|
||||||
|
"autodeleteDisable":"បិទ autodelete ក្នុងសំបុត្រនេះ។",
|
||||||
|
"autodeleteEnable":"បើក autodelete ក្នុងសំបុត្រនេះ។",
|
||||||
|
"categories":{
|
||||||
|
"general":"ពាក្យបញ្ជាទូទៅ",
|
||||||
|
"basicTicket":"ពាក្យបញ្ជាសំបុត្រមូលដ្ឋាន",
|
||||||
|
"advancedTicket":"ពាក្យបញ្ជាសំបុត្រកម្រិតខ្ពស់",
|
||||||
|
"userTicket":"ពាក្យបញ្ជាសំបុត្រអ្នកប្រើប្រាស់",
|
||||||
|
"admin":"ពាក្យបញ្ជា Admin",
|
||||||
|
"advanced":"ពាក្យបញ្ជាកម្រិតខ្ពស់",
|
||||||
|
"extra":"ពាក្យបញ្ជាបន្ថែម"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"scopes":{
|
||||||
|
"global":"ស្ថិតិសរុប",
|
||||||
|
"system":"ស្ថិតិប្រព័ន្ធ",
|
||||||
|
"user":"ស្ថិតិអ្នកប្រើប្រាស់",
|
||||||
|
"ticket":"ស្ថិតិសំបុត្រ",
|
||||||
|
"participants":"អ្នកចូលរួម",
|
||||||
|
"messages":"សារ"
|
||||||
|
},
|
||||||
|
"properties":{
|
||||||
|
"ticketsCreated":"សំបុត្របានបង្កើត",
|
||||||
|
"ticketsClosed":"សំបុត្របានបិទ",
|
||||||
|
"ticketsDeleted":"សំបុត្របានលុប",
|
||||||
|
"ticketsReopened":"សំបុត្របានបើកឡើងវិញ",
|
||||||
|
"ticketsAutoclosed":"សំបុត្របានបិទដោយស្វ័យប្រវត្តិ",
|
||||||
|
"ticketsClaimed":"សំបុត្របានទទួល",
|
||||||
|
"ticketsPinned":"សំបុត្របានដាក់ម្ជុល",
|
||||||
|
"ticketsMoved":"សំបុត្របានផ្លាស់ប្តូរ",
|
||||||
|
"usersBlacklisted":"អ្នកប្រើប្រាស់ក្នុងបញ្ជីខ្មៅ",
|
||||||
|
"transcriptsCreated":"Transcript បានបង្កើត",
|
||||||
|
"ticketsAutodeleted":"សំបុត្របានលុបដោយស្វ័យប្រវត្តិ",
|
||||||
|
"ticketsTransferred":"សំបុត្របានផ្ទេរ",
|
||||||
|
"ticketVolume":"ចំនួនសំបុត្រ",
|
||||||
|
"averageTickets":"ចំនួនសំបុត្រជាមធ្យម/អ្នកប្រើ",
|
||||||
|
"currentTickets":"សំបុត្របច្ចុប្បន្ន",
|
||||||
|
"age":"អាយុសំបុត្រ",
|
||||||
|
"responseTime":"ពេលឆ្លើយតប",
|
||||||
|
"resolutionTime":"ពេលដោះស្រាយ",
|
||||||
|
"createdOn":"បង្កើតនៅ",
|
||||||
|
"createdBy":"បង្កើតដោយ",
|
||||||
|
"closedOn":"បិទនៅ",
|
||||||
|
"closedBy":"បិទដោយ",
|
||||||
|
"claimedOn":"ទទួលនៅ",
|
||||||
|
"claimedBy":"ទទួលដោយ",
|
||||||
|
"pinnedOn":"ដាក់ម្ជុលនៅ",
|
||||||
|
"pinnedBy":"ដាក់ម្ជុលដោយ",
|
||||||
|
"deletedOn":"លុបនៅ",
|
||||||
|
"deletedBy":"លុបដោយ"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Developer",
|
||||||
|
"serverOwner":"ម្ចាស់ម៉ាស៊ីនបម្រើ",
|
||||||
|
"serverAdmin":"Admin ម៉ាស៊ីនបម្រើ",
|
||||||
|
"moderator":"ក្រុមអ្នកសម្រុះសម្រួល",
|
||||||
|
"support":"ក្រុមជំនួយ",
|
||||||
|
"member":"សមាជិក"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"ជ្រើសរើសសំបុត្ររបស់អ្នក",
|
||||||
|
"selectRole":"ជ្រើសរើសតួនាទីរបស់អ្នក",
|
||||||
|
"selectOption":"ជ្រើសរើសជម្រើសរបស់អ្នក",
|
||||||
|
"selectPriorityLevel":"ជ្រើសរើសកម្រិតអាទិភាព"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"បន្ទាន់ខ្លាំង",
|
||||||
|
"veryHigh":"ខ្ពស់ណាស់",
|
||||||
|
"high":"ខ្ពស់",
|
||||||
|
"normal":"ធម្មតា",
|
||||||
|
"low":"ទាប",
|
||||||
|
"veryLow":"ទាបណាស់",
|
||||||
|
"none":"គ្មាន"
|
||||||
|
}
|
||||||
|
}
|
||||||
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["HanumeshGupta","ChatGPT"],
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Korean",
|
"language":"Korean",
|
||||||
"automated":true
|
"automated":true
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"invalidButton":"이 버튼은 최소한 {0} 또는 {1}을(를) 가지고 있어야 합니다!",
|
"invalidButton":"이 버튼은 최소한 {0} 또는 {1}을(를) 가지고 있어야 합니다!",
|
||||||
"unusedOption":"옵션 {0}은(는) 어디에서도 사용되지 않습니다!",
|
"unusedOption":"옵션 {0}은(는) 어디에서도 사용되지 않습니다!",
|
||||||
"unusedQuestion":"질문 {0}은(는) 어디에서도 사용되지 않습니다!",
|
"unusedQuestion":"질문 {0}은(는) 어디에서도 사용되지 않습니다!",
|
||||||
"dropdownOption":"드롭다운이 활성화된 패널은 'ticket' 유형의 옵션만 포함할 수 있습니다!",
|
"dropdownOption":"드롭다운이 있는 패널에는 'ticket', 'role' 또는 'sub-panel' 유형의 옵션만 포함할 수 있습니다.",
|
||||||
"customInvalidVersion":"구성 파일에 지정된 버전이 일치하지 않습니다! 구성 파일을 최신 버전으로 업데이트했는지 확인하세요!"
|
"customInvalidVersion":"구성 파일에 지정된 버전이 일치하지 않습니다! 구성 파일을 최신 버전으로 업데이트했는지 확인하세요!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"텍스트 명령어 보기",
|
"helpSwitchText":"텍스트 명령어 보기",
|
||||||
"helpPage":"페이지 {0}",
|
"helpPage":"페이지 {0}",
|
||||||
"withReason":"이유와 함께",
|
"withReason":"이유와 함께",
|
||||||
"withoutTranscript":"기록 없이"
|
"withoutTranscript":"기록 없이",
|
||||||
|
"blacklistAdd":"사용자 블랙리스트 추가",
|
||||||
|
"blacklistRemove":"사용자 해제"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"티켓 생성됨",
|
"created":"티켓 생성됨",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"주제가 변경됨",
|
"topicSet":"주제가 변경됨",
|
||||||
"prioritySet":"우선순위 변경됨",
|
"prioritySet":"우선순위 변경됨",
|
||||||
"priorityGet":"티켓 우선순위",
|
"priorityGet":"티켓 우선순위",
|
||||||
"transfer":"티켓이 전송됨"
|
"transfer":"티켓이 전송됨",
|
||||||
|
"transcripts":"전사 기록"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"티켓이 생성되었습니다. 아래 버튼을 클릭하여 접근하세요!",
|
"create":"티켓이 생성되었습니다. 아래 버튼을 클릭하여 접근하세요!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"이 티켓의 우선순위가 {1}에 의해 {0}(으)로 변경되었습니다!",
|
"prioritySetLog":"이 티켓의 우선순위가 {1}에 의해 {0}(으)로 변경되었습니다!",
|
||||||
"prioritySetDm":"귀하의 티켓 우선순위가 서버에서 {0}(으)로 변경되었습니다!",
|
"prioritySetDm":"귀하의 티켓 우선순위가 서버에서 {0}(으)로 변경되었습니다!",
|
||||||
"roleUpdateLog":"{0}님이 자신의 역할을 업데이트했습니다!",
|
"roleUpdateLog":"{0}님이 자신의 역할을 업데이트했습니다!",
|
||||||
"roleUpdateDm":"서버에서 귀하의 역할이 업데이트되었습니다!"
|
"roleUpdateDm":"서버에서 귀하의 역할이 업데이트되었습니다!",
|
||||||
|
"topicSetLog":"이 티켓의 우선순위가 {1}에 의해 {0}으로 설정되었습니다.",
|
||||||
|
"topicSetDm":"귀하의 티켓 우선순위가 {0}으로 설정되었습니다."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"continue":"기록 없이 삭제",
|
"continue":"기록 없이 삭제",
|
||||||
"backup":"백업 기록 생성",
|
"backup":"백업 기록 생성",
|
||||||
"error":"기록 생성 중 오류가 발생했습니다.\n어떻게 하시겠습니까?\n\n아래 버튼 중 하나를 클릭할 때까지 이 티켓은 삭제되지 않습니다.",
|
"error":"기록 생성 중 오류가 발생했습니다.\n어떻게 하시겠습니까?\n\n아래 버튼 중 하나를 클릭할 때까지 이 티켓은 삭제되지 않습니다.",
|
||||||
"title":"기록 오류"
|
"title":"기록 오류",
|
||||||
|
"noHistory":"이 사용자는 아직 전사 기록이 없습니다.",
|
||||||
|
"historyNotSupported":"전사 기록은 현재 HTML Transcripts에서만 지원됩니다.\n텍스트 전사 기록은 향후 버전에서 제공될 예정입니다."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"메시지",
|
"messagesTitle":"메시지",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"알 수 없는 패널",
|
"unknownPanel":"알 수 없는 패널",
|
||||||
"notInGuild":"서버에 없음",
|
"notInGuild":"서버에 없음",
|
||||||
"channelRename":"채널 이름 변경 불가",
|
"channelRename":"채널 이름 변경 불가",
|
||||||
|
"channelCategory":"카테고리 변경 불가",
|
||||||
"busy":"티켓 사용 중",
|
"busy":"티켓 사용 중",
|
||||||
"permissionError":"권한 오류"
|
"permissionError":"권한 오류"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"현재 채널은 유효한 티켓이 아닙니다! 이전 Open Ticket 버전의 티켓일 수 있습니다!",
|
"deprecatedTicket":"현재 채널은 유효한 티켓이 아닙니다! 이전 Open Ticket 버전의 티켓일 수 있습니다!",
|
||||||
"notInGuild":"이 {0}은(는) DM에서 작동하지 않습니다! 서버에서 다시 시도하세요!",
|
"notInGuild":"이 {0}은(는) DM에서 작동하지 않습니다! 서버에서 다시 시도하세요!",
|
||||||
"channelRename":"디스코드 속도 제한으로 인해 현재 채널 이름을 변경할 수 없습니다. 봇이 재시작되지 않으면 10분 내에 자동으로 변경됩니다.",
|
"channelRename":"디스코드 속도 제한으로 인해 현재 채널 이름을 변경할 수 없습니다. 봇이 재시작되지 않으면 10분 내에 자동으로 변경됩니다.",
|
||||||
|
"channelCategory":"Discord 속도 제한으로 인해 채널 카테고리를 즉시 변경할 수 없습니다. 봇이 온라인 상태를 유지하면 10분 이내에 자동으로 변경됩니다.",
|
||||||
"channelRenameSource":"오류 원인: {0}",
|
"channelRenameSource":"오류 원인: {0}",
|
||||||
"busy":"이 {0}을(를) 사용할 수 없습니다!\n티켓이 현재 봇에 의해 처리 중입니다.\n\n몇 초 후에 다시 시도하세요!",
|
"busy":"이 {0}을(를) 사용할 수 없습니다!\n티켓이 현재 봇에 의해 처리 중입니다.\n\n몇 초 후에 다시 시도하세요!",
|
||||||
"closeBeforeMessage":"사용자가 메시지를 보내기 전에는 이 티켓을 닫거나 삭제할 수 없습니다.",
|
"closeBeforeMessage":"사용자가 메시지를 보내기 전에는 이 티켓을 닫거나 삭제할 수 없습니다.",
|
||||||
"closeBeforeAdminMessage":"티켓 관리자 또는 지원 팀원이 메시지를 보내기 전에는 이 티켓을 닫거나 삭제할 수 없습니다.",
|
"closeBeforeAdminMessage":"티켓 관리자 또는 지원 팀원이 메시지를 보내기 전에는 이 티켓을 닫거나 삭제할 수 없습니다.",
|
||||||
"unableToCreateTicket":"티켓을 생성할 수 없습니다."
|
"unableToCreateTicket":"티켓을 생성할 수 없습니다.",
|
||||||
|
"messageMissing":"상호작용 메시지를 찾을 수 없습니다. 대신 `{0}` 명령을 사용하세요.",
|
||||||
|
"stateExpired":"이 상호작용은 더 이상 유효하지 않거나 만료되었습니다. 대신 `{0}` 명령을 사용하세요. Open Ticket의 주요 업데이트 이후 이 오류는 정상입니다.",
|
||||||
|
"panelStateExpired":"이 패널은 더 이상 유효하지 않거나 만료되었습니다. 문제를 해결하려면 `{0}`을 사용하여 새 패널을 생성하세요. Open Ticket의 주요 업데이트 이후 이 오류는 정상입니다."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"값이 패턴과 일치하지 않습니다!",
|
"stringRegex":"값이 패턴과 일치하지 않습니다!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"구문",
|
"syntax":"구문",
|
||||||
"originalName":"원래 이름",
|
"originalName":"원래 이름",
|
||||||
"newName":"새 이름",
|
"newName":"새 이름",
|
||||||
|
"originalCategory":"원래 카테고리",
|
||||||
|
"newCategory":"새 카테고리",
|
||||||
"until":"까지",
|
"until":"까지",
|
||||||
"validOptions":"유효한 옵션",
|
"validOptions":"유효한 옵션",
|
||||||
"validPanels":"유효한 패널",
|
"validPanels":"유효한 패널",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"참가자",
|
"participants":"참가자",
|
||||||
"yes":"예",
|
"yes":"예",
|
||||||
"no":"아니오",
|
"no":"아니오",
|
||||||
|
"accept":"수락",
|
||||||
|
"cancel":"취소",
|
||||||
"option":"옵션",
|
"option":"옵션",
|
||||||
"topic":"주제",
|
"topic":"주제",
|
||||||
"uptime":"시스템 가동 시간",
|
"uptime":"시스템 가동 시간",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"이 패널을 편집 시 자동으로 업데이트하시겠습니까?",
|
"panelAutoUpdate":"이 패널을 편집 시 자동으로 업데이트하시겠습니까?",
|
||||||
"ticket":"즉시 티켓을 생성하세요.",
|
"ticket":"즉시 티켓을 생성하세요.",
|
||||||
"ticketId":"생성하려는 티켓의 식별자입니다.",
|
"ticketId":"생성하려는 티켓의 식별자입니다.",
|
||||||
|
"ticketOtherUser":"다른 사용자에게 티켓 생성",
|
||||||
"close":"티켓을 닫으세요.",
|
"close":"티켓을 닫으세요.",
|
||||||
"delete":"티켓을 삭제하세요.",
|
"delete":"티켓을 삭제하세요.",
|
||||||
"deleteNoTranscript":"기록 없이 이 티켓을 삭제하세요.",
|
"deleteNoTranscript":"기록 없이 이 티켓을 삭제하세요.",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"티켓의 우선순위를 가져옵니다.",
|
"priorityGet":"티켓의 우선순위를 가져옵니다.",
|
||||||
"priorityList":"모든 티켓의 우선순위 상태를 목록으로 가져옵니다.",
|
"priorityList":"모든 티켓의 우선순위 상태를 목록으로 가져옵니다.",
|
||||||
"transfer":"티켓 소유권을 다른 사용자에게 전송합니다.",
|
"transfer":"티켓 소유권을 다른 사용자에게 전송합니다.",
|
||||||
"transferUser":"전송할 사용자입니다."
|
"transferUser":"전송할 사용자입니다.",
|
||||||
|
"transcripts":"사용자의 티켓 전사 기록 보기",
|
||||||
|
"transcriptsUser":"조회할 사용자"
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"사용 가능한 모든 명령어 목록을 확인하세요.",
|
"help":"사용 가능한 모든 명령어 목록을 확인하세요.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"티켓을 선택하세요",
|
"selectTicket":"티켓을 선택하세요",
|
||||||
"selectRole":"역할을 선택하세요",
|
"selectRole":"역할을 선택하세요",
|
||||||
"selectOption":"옵션을 선택하세요"
|
"selectOption":"옵션을 선택하세요",
|
||||||
|
"selectPriorityLevel":"우선순위 수준 선택"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"긴급",
|
"urgent":"긴급",
|
||||||
|
|||||||
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["HanumeshGupta","ChatGPT"],
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Kurdish",
|
"language":"Kurdish",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"invalidButton":"Ev bişkok divê bi qasî {0} an {1} hebe!",
|
"invalidButton":"Ev bişkok divê bi qasî {0} an {1} hebe!",
|
||||||
"unusedOption":"Vebijarka {0} li ku derê nayê bikar anîn!",
|
"unusedOption":"Vebijarka {0} li ku derê nayê bikar anîn!",
|
||||||
"unusedQuestion":"Pirsiyara {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!",
|
"dropdownOption":"Panela ku drop-down heye tenê dikare vebijêrkên celebên 'ticket', 'role' an 'sub-panel' hebe.",
|
||||||
"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!"
|
"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!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"Fermana Nivîsê Bibînin",
|
"helpSwitchText":"Fermana Nivîsê Bibînin",
|
||||||
"helpPage":"Rûpel {0}",
|
"helpPage":"Rûpel {0}",
|
||||||
"withReason":"Bi Sedem",
|
"withReason":"Bi Sedem",
|
||||||
"withoutTranscript":"Bê Transcript"
|
"withoutTranscript":"Bê Transcript",
|
||||||
|
"blacklistAdd":"Bikarhênerê Lîsteya Reş Zêde Bike",
|
||||||
|
"blacklistRemove":"Bikarhêner Azad Bike"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Tiket Hate Afirandin",
|
"created":"Tiket Hate Afirandin",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"Mijar Guherî",
|
"topicSet":"Mijar Guherî",
|
||||||
"prioritySet":"Pêşî Guherî",
|
"prioritySet":"Pêşî Guherî",
|
||||||
"priorityGet":"Pêşîya Ticket",
|
"priorityGet":"Pêşîya Ticket",
|
||||||
"transfer":"Ticket Veguhastin"
|
"transfer":"Ticket Veguhastin",
|
||||||
|
"transcripts":"Dîroka Transkriptan"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Tiketa we hate afirandin. Ji bo têketinê bişkoka jêrîn bikar bînin!",
|
"create":"Tiketa we hate afirandin. Ji bo têketinê bişkoka jêrîn bikar bînin!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"Pêşîya vê ticketê ji {1} bo {0} hate guhertin!",
|
"prioritySetLog":"Pêşîya vê ticketê ji {1} bo {0} hate guhertin!",
|
||||||
"prioritySetDm":"Pêşîya ticketê te di serverê me de hate guhertin bo {0}!",
|
"prioritySetDm":"Pêşîya ticketê te di serverê me de hate guhertin bo {0}!",
|
||||||
"roleUpdateLog":"{0} rolên xwe nûve kir!",
|
"roleUpdateLog":"{0} rolên xwe nûve kir!",
|
||||||
"roleUpdateDm":"Rolên te di serverê me de nûve kirin!"
|
"roleUpdateDm":"Rolên te di serverê me de nûve kirin!",
|
||||||
|
"topicSetLog":"Pêşengiya vê ticketê ji hêla {1} ve wek {0} hate danîn.",
|
||||||
|
"topicSetDm":"Pêşengiya ticketê te wek {0} hate danîn."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"continue":"Bê Transcript Jê Bike",
|
"continue":"Bê Transcript Jê Bike",
|
||||||
"backup":"Transcripta Backupê Afirîne",
|
"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.",
|
"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ê"
|
"title":"Xeletiya Transkriptê",
|
||||||
|
"noHistory":"Ev bikarhêner hêj tu transkriptên tune ye.",
|
||||||
|
"historyNotSupported":"Dîroka transkriptan niha tenê bi HTML Transcripts tê piştgirî kirin.\nDîroka transkriptên nivîsê di guhertoyên pêşerojê de dê hebin."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"PEYAMAN",
|
"messagesTitle":"PEYAMAN",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"Panela Nenas",
|
"unknownPanel":"Panela Nenas",
|
||||||
"notInGuild":"Ne Di Serverê De",
|
"notInGuild":"Ne Di Serverê De",
|
||||||
"channelRename":"Nikare Qenalê Nav Lê Bike",
|
"channelRename":"Nikare Qenalê Nav Lê Bike",
|
||||||
|
"channelCategory":"Nekare Kategorî Biguherîne",
|
||||||
"busy":"Tiketê Şixul E",
|
"busy":"Tiketê Şixul E",
|
||||||
"permissionError":"Xeletiya Destûrê"
|
"permissionError":"Xeletiya Destûrê"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"Qenala niha tiketeke derbasdar nîne! Dibe ku ji versiyonek kevn a Open Ticketê be!",
|
"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!",
|
"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.",
|
"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.",
|
||||||
|
"channelCategory":"Ji ber sînorkirinên leza Discord, kategorîya kanalê nayê guhertin bi rastî. Heke bot online bimîne, di 10 deqîqan de wê bixweber were guhertin.",
|
||||||
"channelRenameSource":"Çavkaniya vê xetê: {0}",
|
"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!",
|
"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.",
|
"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.",
|
"closeBeforeAdminMessage":"Ev ticket nikare were girtin/jêbirin berî ku adminê ticket an endamê piştgirî peyamê şandibe.",
|
||||||
"unableToCreateTicket":"Tu nikarî ticket çê bikî."
|
"unableToCreateTicket":"Tu nikarî ticket çê bikî.",
|
||||||
|
"messageMissing":"Nikarî mesajê têkildarê peywendiyê bibîne. Li şûna wê fermanê `{0}` bikar bîne.",
|
||||||
|
"stateExpired":"Ev peywendî êdî ne derbasdar e an qediya ye. Li şûna wê fermanê `{0}` bikar bîne. Ev çewtî piştî nûvekirina mezin a Open Ticket normal e.",
|
||||||
|
"panelStateExpired":"Ev panel êdî ne derbasdar e an qediya ye. Ji bo çareserkirina pirsgirêkê panelê nû bi `{0}` biafirîne. Ev çewtî piştî nûvekirina mezin a Open Ticket normal e."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Nirx li şablonê nagire!",
|
"stringRegex":"Nirx li şablonê nagire!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"Sîntaks",
|
"syntax":"Sîntaks",
|
||||||
"originalName":"Navê Orjînal",
|
"originalName":"Navê Orjînal",
|
||||||
"newName":"Navê Nû",
|
"newName":"Navê Nû",
|
||||||
|
"originalCategory":"Kategoriya Bingehîn",
|
||||||
|
"newCategory":"Kategoriya Nû",
|
||||||
"until":"Heta",
|
"until":"Heta",
|
||||||
"validOptions":"Vebijarkên Derbasdar",
|
"validOptions":"Vebijarkên Derbasdar",
|
||||||
"validPanels":"Panelên Derbasdar",
|
"validPanels":"Panelên Derbasdar",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"Beşdar",
|
"participants":"Beşdar",
|
||||||
"yes":"Erê",
|
"yes":"Erê",
|
||||||
"no":"Na",
|
"no":"Na",
|
||||||
|
"accept":"Qebûl Bike",
|
||||||
|
"cancel":"Betal Bike",
|
||||||
"option":"Vebijêrk",
|
"option":"Vebijêrk",
|
||||||
"topic":"Mijar",
|
"topic":"Mijar",
|
||||||
"uptime":"Demjimêra Sistêmê",
|
"uptime":"Demjimêra Sistêmê",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Ma hûn dixwazin ev panel xweber were nûvekirin dema ku hate guhertin?",
|
"panelAutoUpdate":"Ma hûn dixwazin ev panel xweber were nûvekirin dema ku hate guhertin?",
|
||||||
"ticket":"Bilez tîketek çêbike.",
|
"ticket":"Bilez tîketek çêbike.",
|
||||||
"ticketId":"Nasnameya tîketê ku hûn dixwazin çêbikin.",
|
"ticketId":"Nasnameya tîketê ku hûn dixwazin çêbikin.",
|
||||||
|
"ticketOtherUser":"Ji bo bikarhênerek din ticket çêbike.",
|
||||||
"close":"Tîketek bigire.",
|
"close":"Tîketek bigire.",
|
||||||
"delete":"Tîketek jê bike.",
|
"delete":"Tîketek jê bike.",
|
||||||
"deleteNoTranscript":"Vê tîketê bêyî çêkirina transcriptê jê bike.",
|
"deleteNoTranscript":"Vê tîketê bêyî çêkirina transcriptê jê bike.",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"Pêşîya ticketê bistînin.",
|
"priorityGet":"Pêşîya ticketê bistînin.",
|
||||||
"priorityList":"Lîsteya hemû ticketan bi rewşa pêşîyan 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.",
|
"transfer":"Mulkê ticketê ji yek bikarhêner bo yê din veguherîn.",
|
||||||
"transferUser":"Bikarhêner ku divê veguherîn."
|
"transferUser":"Bikarhêner ku divê veguherîn.",
|
||||||
|
"transcripts":"Dîroka transkriptên ticketên bikarhêner bibîne.",
|
||||||
|
"transcriptsUser":"Bikarhênerê ku were nîşandan."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Lîsteyê hemû fermanên berdest bistînin.",
|
"help":"Lîsteyê hemû fermanên berdest bistînin.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"Ticketê xwe hilbijêrin",
|
"selectTicket":"Ticketê xwe hilbijêrin",
|
||||||
"selectRole":"Rolê xwe hilbijêrin",
|
"selectRole":"Rolê xwe hilbijêrin",
|
||||||
"selectOption":"Vebijêrka xwe hilbijêrin"
|
"selectOption":"Vebijêrka xwe hilbijêrin",
|
||||||
|
"selectPriorityLevel":"Asta pêşengiyê hilbijêre"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"Zû",
|
"urgent":"Zû",
|
||||||
|
|||||||
+587
-437
File diff suppressed because it is too large
Load Diff
+166
-16
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["TsgIndrius"],
|
"translators":["TsgIndrius"],
|
||||||
"lastedited":"26/01/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Lithuanian",
|
"language":"Lithuanian",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,6 +31,14 @@
|
|||||||
"stringContains":"Šita eilutė turi turėti {0}!",
|
"stringContains":"Šita eilutė turi turėti {0}!",
|
||||||
"stringChoices":"Ši eilutė gali būti tik viena iš šių pasirinkimų: {0}!",
|
"stringChoices":"Ši eilutė gali būti tik viena iš šių pasirinkimų: {0}!",
|
||||||
"stringRegex":"Šita eilutė nėra teisinga!",
|
"stringRegex":"Šita eilutė nėra teisinga!",
|
||||||
|
"stringInvertedContains":"Šioje eilutėje neleidžiama naudoti šito {0}!",
|
||||||
|
"stringLowercase":"Ši eilutė turi būti rašoma tik mažosiomis raidėmis!",
|
||||||
|
"stringUppercase":"Ši eilutė turi būti rašoma tik didžiosiomis raidėmis!",
|
||||||
|
"stringSpecialCharacters":"Šioje eilutėje negali būti jokių specialiųjų simbolių! (tik a–z, 0–9 ir tarpai)",
|
||||||
|
"stringNoSpaces":"Šioje eilutėje negali būti tarpų!",
|
||||||
|
"stringCapitalWord":"Rekomenduojama, kad kiekvienas šios eilutės žodis prasidėtų didžiąja raide!",
|
||||||
|
"stringCapitalSentence":"Panašu, kad kai kurie sakiniai šioje eilutėje neprasideda didžiąja raide!",
|
||||||
|
"stringPunctuation":"Panašu, kad sakinys šioje eilutėje nesibaigia skyrybos ženklu!",
|
||||||
|
|
||||||
"numberTooShort":"Šis skaičius negali būti trumpesnis nei {0} raidžių!",
|
"numberTooShort":"Šis skaičius negali būti trumpesnis nei {0} raidžių!",
|
||||||
"numberTooLong":"Šis skaičius negali būti ilgesnis nei {0} raidžių!",
|
"numberTooLong":"Šis skaičius negali būti ilgesnis nei {0} raidžių!",
|
||||||
@@ -48,6 +56,8 @@
|
|||||||
"numberNegative":"Šitas numeris negali būti neigiamas!",
|
"numberNegative":"Šitas numeris negali būti neigiamas!",
|
||||||
"numberPositive":"Šitas numeris negali būti teigiamas!",
|
"numberPositive":"Šitas numeris negali būti teigiamas!",
|
||||||
"numberZero":"Šitas numeris negali būti nulinis!",
|
"numberZero":"Šitas numeris negali būti nulinis!",
|
||||||
|
"numberNan":"Šis skaičius negali būti nulis (ne skaičius)!",
|
||||||
|
"numberInvertedContains":"Šiame skaičiuje negali būti {0}!",
|
||||||
|
|
||||||
"booleanTrue":"Šis boolean negali būti tiesa!",
|
"booleanTrue":"Šis boolean negali būti tiesa!",
|
||||||
"booleanFalse":"Šis boolean negali būti neteisingas!",
|
"booleanFalse":"Šis boolean negali būti neteisingas!",
|
||||||
@@ -89,7 +99,8 @@
|
|||||||
"invalidButton":"Šis mygtukas turi turėti bent {0} arba {1}!",
|
"invalidButton":"Šis mygtukas turi turėti bent {0} arba {1}!",
|
||||||
"unusedOption":"Šis pasirinkimas {0} nėra naudojamas!",
|
"unusedOption":"Šis pasirinkimas {0} nėra naudojamas!",
|
||||||
"unusedQuestion":"Klausimas {0} nėra naudojamas niekur!",
|
"unusedQuestion":"Klausimas {0} nėra naudojamas niekur!",
|
||||||
"dropdownOption":"Pasirinkimas su įjungtu išskleidžiamuoju meniu gali būti tik „bilieto“ tipo parinktys!"
|
"dropdownOption":"Skydelis su išskleidžiamuoju meniu gali turėti tik šių tipų parinktis: 'ticket', 'role' arba 'sub-panel'.",
|
||||||
|
"customInvalidVersion":"Jūsų nustatymuose nurodyta versija nesutampa! Įsitikinkite, kad atnaujinote nustatymus į naujausią versiją.!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -107,7 +118,9 @@
|
|||||||
"helpSwitchText":"Peržiūrėti Teksto Komandas ",
|
"helpSwitchText":"Peržiūrėti Teksto Komandas ",
|
||||||
"helpPage":"Puslapis {0}",
|
"helpPage":"Puslapis {0}",
|
||||||
"withReason":"Su Priežastimi",
|
"withReason":"Su Priežastimi",
|
||||||
"withoutTranscript":"Be Išrašo"
|
"withoutTranscript":"Be Išrašo",
|
||||||
|
"blacklistAdd":"Įtraukti Vartotoją į Juodąjį Sąrašą",
|
||||||
|
"blacklistRemove":"Atlaisvinti Vartotoją"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Bilietas Sukurtas",
|
"created":"Bilietas Sukurtas",
|
||||||
@@ -132,6 +145,7 @@
|
|||||||
"blacklistAddDm":"Žmogus buvo užblokuotas",
|
"blacklistAddDm":"Žmogus buvo užblokuotas",
|
||||||
"blacklistRemoveDm":"Pašalino užblokavima",
|
"blacklistRemoveDm":"Pašalino užblokavima",
|
||||||
"clear":"Bilietai išvalyti",
|
"clear":"Bilietai išvalyti",
|
||||||
|
"clearTickets":"Išvalyti Bilietus",
|
||||||
"roles":"Roles Atnaujinti",
|
"roles":"Roles Atnaujinti",
|
||||||
|
|
||||||
"autoclose":"Bilietas automatiškai uždarytas",
|
"autoclose":"Bilietas automatiškai uždarytas",
|
||||||
@@ -139,7 +153,13 @@
|
|||||||
"autocloseDisabled":"Automatinis uždarymas išjungtas",
|
"autocloseDisabled":"Automatinis uždarymas išjungtas",
|
||||||
"autodelete":"Bilietas automatiškai ištrintas",
|
"autodelete":"Bilietas automatiškai ištrintas",
|
||||||
"autodeleteEnabled":"Bilieto automatinis ištrynimas įjungtas",
|
"autodeleteEnabled":"Bilieto automatinis ištrynimas įjungtas",
|
||||||
"autodeleteDisabled":"Bilieto automatinis ištrynimas išjungtas"
|
"autodeleteDisabled":"Bilieto automatinis ištrynimas išjungtas",
|
||||||
|
|
||||||
|
"topicSet":"Tema pakeista",
|
||||||
|
"prioritySet":"Prilioritetas pakeistas",
|
||||||
|
"priorityGet":"Bilieto prilioritetas",
|
||||||
|
"transfer":"Bilietas perkeltas",
|
||||||
|
"transcripts":"Transkriptų Istorija"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Jūsų bilietas sukurtas. Spustelėkite toliau esantį mygtuką, kad jį pasiektumėte!",
|
"create":"Jūsų bilietas sukurtas. Spustelėkite toliau esantį mygtuką, kad jį pasiektumėte!",
|
||||||
@@ -180,7 +200,12 @@
|
|||||||
"ticketMessageLimit":"Tu gali sukurti tik {0} bilietus tuo pačiu metu!",
|
"ticketMessageLimit":"Tu gali sukurti tik {0} bilietus tuo pačiu metu!",
|
||||||
"ticketMessageAutoclose":"Šis bilietas bus automatiškai uždarytas, kai bus neaktyvus {0}h!",
|
"ticketMessageAutoclose":"Šis bilietas bus automatiškai uždarytas, kai bus neaktyvus {0}h!",
|
||||||
"ticketMessageAutodelete":"Šis bilietas bus automatiškai ištrintas, kai neaktyvus {0} dienas!",
|
"ticketMessageAutodelete":"Šis bilietas bus automatiškai ištrintas, kai neaktyvus {0} dienas!",
|
||||||
"panelReady":"Žemiau rasite skydelį!\nŠį pranešimą dabar galima ištrinti!"
|
"panelReady":"Skydelis pasiekiamas tolesniame pranešime!\nŠią žinutę dabar galima ištrinti!",
|
||||||
|
|
||||||
|
"topicSet":"Kanalo temą sėkmingai pakeitė {0}!",
|
||||||
|
"prioritySet":"Bilieto prioritetas sėkmingai pakeistas į {0}, naudotojo {1}!",
|
||||||
|
"priorityGet":"Dabartinis šio bilieto prioritetas yra {0}.",
|
||||||
|
"transfer":"Bilieto nuosavybė sėkmingai perduota iš {0} į {1}, naudotojo {2}!"
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder":"Kodėl tu uždarei šį bilieta?",
|
"closePlaceholder":"Kodėl tu uždarei šį bilieta?",
|
||||||
@@ -220,7 +245,16 @@
|
|||||||
"blacklistRemoveLog":"{0} buvo atblokuotas nuo {1}!",
|
"blacklistRemoveLog":"{0} buvo atblokuotas nuo {1}!",
|
||||||
"blacklistAddDm":"Jūs buvote užblokuotas!\nNuo šiol negalite sukurti bilieto!",
|
"blacklistAddDm":"Jūs buvote užblokuotas!\nNuo šiol negalite sukurti bilieto!",
|
||||||
"blacklistRemoveDm":"Jūs buvote pašalinti iš juodojo sąrašo mūsų serveryje!\nDabar vėl galite kurti bilietus!",
|
"blacklistRemoveDm":"Jūs buvote pašalinti iš juodojo sąrašo mūsų serveryje!\nDabar vėl galite kurti bilietus!",
|
||||||
"clearLog":"{0} bilietai buvo pašalinti nuo {1}!"
|
"clearLog":"{0} bilietai buvo pašalinti nuo {1}!",
|
||||||
|
|
||||||
|
"transferLog":"Šio bilieto nuosavybė buvo perleista iš {0} {1}, naudotojo {2}!",
|
||||||
|
"transferDm":"Jūsų bilieto nuosavybė mūsų serveryje buvo perduota iš {0} į {1}!",
|
||||||
|
"prioritySetLog":"Šio bilieto prioritetas buvo pakeistas į {0}, autorius {1}!",
|
||||||
|
"prioritySetDm":"Jūsų bilieto prioritetas mūsų serveryje pakeistas į {0}!",
|
||||||
|
"roleUpdateLog":"{0} atnaujino savo roles!",
|
||||||
|
"roleUpdateDm":"Jūsų rolės mūsų serveryje buvo atnaujinti!",
|
||||||
|
"topicSetLog":"Šio bilieto prioritetas buvo nustatytas į {0} naudotojo {1}.",
|
||||||
|
"topicSetDm":"Jūsų bilieto prioritetas buvo nustatytas į {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -241,7 +275,21 @@
|
|||||||
"retry":"Bandyk Iš naujo",
|
"retry":"Bandyk Iš naujo",
|
||||||
"continue":"Ištrinti be išrašo",
|
"continue":"Ištrinti be išrašo",
|
||||||
"backup":"Sukurti Atsarginį išraša",
|
"backup":"Sukurti Atsarginį išraša",
|
||||||
"error":"Kažkas nepavyko bandant sukurti išraša.\nKą norėtumėte daryti?\n\nŠis bilietas nebus ištrintas, kol spustelėsite vieną iš šių mygtukų."
|
"error":"Kažkas nepavyko bandant sukurti išraša.\nKą norėtumėte daryti?\n\nŠis bilietas nebus ištrintas, kol spustelėsite vieną iš šių mygtukų.",
|
||||||
|
"title":"Nuorašo klaida",
|
||||||
|
"noHistory":"Šis vartotojas dar neturi jokių transkriptų.",
|
||||||
|
"historyNotSupported":"Transkriptų istorija šiuo metu palaikoma tik su HTML Transcripts.\nTekstinių transkriptų istorija bus prieinama ateities versijose."
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"ŽINUTĖS",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"FAILAI",
|
||||||
|
"fieldsTitle":"FIELDS",
|
||||||
|
"reactionsTitle":"Jaustukai",
|
||||||
|
"statsTitle":"STATISTIKA",
|
||||||
|
"emptyContent":"<Kontantas yra tusčias>",
|
||||||
|
"noTitle":"<Nėra pavadinimo>",
|
||||||
|
"noDesc":"<Nėra aprašymo>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
@@ -257,7 +305,9 @@
|
|||||||
"unknownPanel":"Nepažystama skydelis",
|
"unknownPanel":"Nepažystama skydelis",
|
||||||
"notInGuild":"Nera serveryje",
|
"notInGuild":"Nera serveryje",
|
||||||
"channelRename":"Negaliu pervadyti kanalo",
|
"channelRename":"Negaliu pervadyti kanalo",
|
||||||
"busy":"Bilietas yra užimtas"
|
"channelCategory":"Nepavyko Pakeisti Kategorijos",
|
||||||
|
"busy":"Bilietas yra užimtas",
|
||||||
|
"permissionError":"Leidimų klaida"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Susisiek su savininku šito bilieto del daigiau informacijos!",
|
"askForInfo":"Susisiek su savininku šito bilieto del daigiau informacijos!",
|
||||||
@@ -279,8 +329,15 @@
|
|||||||
"deprecatedTicket":"Dabartinis kanalas negalioja! Tai galėjo būti bilietas iš senos Open Ticket versijos!",
|
"deprecatedTicket":"Dabartinis kanalas negalioja! Tai galėjo būti bilietas iš senos Open Ticket versijos!",
|
||||||
"notInGuild":"Šis {0} neveikia DM! Bandykite dar kartą serveryje!",
|
"notInGuild":"Šis {0} neveikia DM! Bandykite dar kartą serveryje!",
|
||||||
"channelRename":"Dėl discord'o greičio apribojimų, šiuo metu robotas negali pervardyti kanalo. Kanalas bus automatiškai pervardytas per 10 minučių, jei robotas nebus paleistas iš naujo.",
|
"channelRename":"Dėl discord'o greičio apribojimų, šiuo metu robotas negali pervardyti kanalo. Kanalas bus automatiškai pervardytas per 10 minučių, jei robotas nebus paleistas iš naujo.",
|
||||||
|
"channelCategory":"Dėl Discord dažnio apribojimų kanalo kategorijos nepavyko pakeisti iš karto. Ji bus automatiškai pakeista per 10 minučių, jei botas liks prisijungęs.",
|
||||||
"channelRenameSource":"Šios klaidos šaltinis yra: {0}",
|
"channelRenameSource":"Šios klaidos šaltinis yra: {0}",
|
||||||
"busy":"Neįmanoma naudoti šio {0}!\nBilietą šiuo metu apdoroja botas.\n\nBandykite dar kartą po kelių sekundžių!"
|
"busy":"Neįmanoma naudoti šio {0}!\nBilietą šiuo metu apdoroja botas.\n\nBandykite dar kartą po kelių sekundžių!",
|
||||||
|
"closeBeforeMessage":"Šios užklausos negalima uždaryti / ištrinti, kol vartotojas neišsiuntė pranešimo..",
|
||||||
|
"closeBeforeAdminMessage":"Šios užklausos negalima uždaryti / ištrinti, kol užklausos administratorius arba palaikymo komandos narys neišsiuntė pranešimo..",
|
||||||
|
"unableToCreateTicket":"Kažkas atsitiko jūs negalite sukurti bilieto.",
|
||||||
|
"messageMissing":"Nepavyko rasti sąveikos žinutės. Vietoje to naudokite komandą `{0}`.",
|
||||||
|
"stateExpired":"Ši sąveika nebegalioja arba jos galiojimas baigėsi. Vietoje to naudokite komandą `{0}`. Normalu gauti šią klaidą po didelio Open Ticket atnaujinimo.",
|
||||||
|
"panelStateExpired":"Šis skydelis nebegalioja arba jo galiojimas baigėsi. Sukurkite naują skydelį naudodami `{0}`, kad išspręstumėte problemą. Normalu gauti šią klaidą po didelio Open Ticket atnaujinimo."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Vertė neatitinka šablono!",
|
"stringRegex":"Vertė neatitinka šablono!",
|
||||||
@@ -331,7 +388,6 @@
|
|||||||
"added":"Pridėta",
|
"added":"Pridėta",
|
||||||
"removed":"Pašalinta",
|
"removed":"Pašalinta",
|
||||||
"filter":"Filteris",
|
"filter":"Filteris",
|
||||||
"claimedBy":"Claimed nuo {0}",
|
|
||||||
"method":"Metodas",
|
"method":"Metodas",
|
||||||
"type":"Tipas",
|
"type":"Tipas",
|
||||||
"blacklisted":"Užblokuotas",
|
"blacklisted":"Užblokuotas",
|
||||||
@@ -343,6 +399,8 @@
|
|||||||
"syntax":"Sintaksė",
|
"syntax":"Sintaksė",
|
||||||
"originalName":"Orginalus Pavadinimas",
|
"originalName":"Orginalus Pavadinimas",
|
||||||
"newName":"Naujas pavadinimas",
|
"newName":"Naujas pavadinimas",
|
||||||
|
"originalCategory":"Originali Kategorija",
|
||||||
|
"newCategory":"Nauja Kategorija",
|
||||||
"until":"Iki",
|
"until":"Iki",
|
||||||
"validOptions":"Galiojančios parinktys",
|
"validOptions":"Galiojančios parinktys",
|
||||||
"validPanels":"Galiojančios Skydeliai",
|
"validPanels":"Galiojančios Skydeliai",
|
||||||
@@ -355,7 +413,29 @@
|
|||||||
"status":"Statusas",
|
"status":"Statusas",
|
||||||
"claimed":"Claimed",
|
"claimed":"Claimed",
|
||||||
"pinned":"Prisegta",
|
"pinned":"Prisegta",
|
||||||
"creationDate":"Sukūrimo data"
|
"creationDate":"Sukūrimo data",
|
||||||
|
|
||||||
|
"noone":"Niekas",
|
||||||
|
"open":"Atidarytas",
|
||||||
|
"closed":"Uždarytas",
|
||||||
|
"priority":"Prioritetas",
|
||||||
|
"participants":"Dalyviai",
|
||||||
|
"yes":"Taip",
|
||||||
|
"no":"Ne",
|
||||||
|
"accept":"Priimti",
|
||||||
|
"cancel":"Atšaukti",
|
||||||
|
"option":"Pasirinkimai",
|
||||||
|
"topic":"Tema",
|
||||||
|
"uptime":"Sistemos Buvimo laikas",
|
||||||
|
"messages":"Žinutės",
|
||||||
|
"embeds":"Embeds",
|
||||||
|
"files":"Failai",
|
||||||
|
"components":"Komponentai",
|
||||||
|
"cooldown":"Letasis Režimas",
|
||||||
|
"maxTickets":"Maksimalus Bilietai",
|
||||||
|
"admins":"Adminai",
|
||||||
|
"roles":"Rolės",
|
||||||
|
"size":"Dydis"
|
||||||
},
|
},
|
||||||
"lowercase":{
|
"lowercase":{
|
||||||
"text":"tekstas",
|
"text":"tekstas",
|
||||||
@@ -375,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Ar norite, kad šis skydelis būtų automatiškai atnaujintas redaguojant?",
|
"panelAutoUpdate":"Ar norite, kad šis skydelis būtų automatiškai atnaujintas redaguojant?",
|
||||||
"ticket":"Iškart sukurkite bilietą.",
|
"ticket":"Iškart sukurkite bilietą.",
|
||||||
"ticketId":"Bilieto, kurį norite sukurti, identifikatorius.",
|
"ticketId":"Bilieto, kurį norite sukurti, identifikatorius.",
|
||||||
|
"ticketOtherUser":"Sukurti bilietą kitam vartotojui.",
|
||||||
"close":"Uždaryti bilieta.",
|
"close":"Uždaryti bilieta.",
|
||||||
"delete":"Ištrinti bilieta.",
|
"delete":"Ištrinti bilieta.",
|
||||||
"deleteNoTranscript":"Ištrinti šita bilieta nesukuriant išrašo.",
|
"deleteNoTranscript":"Ištrinti šita bilieta nesukuriant išrašo.",
|
||||||
@@ -384,6 +465,7 @@
|
|||||||
"unclaim":"Unclaim bilieta.",
|
"unclaim":"Unclaim bilieta.",
|
||||||
"pin":"Prisegti bilieta.",
|
"pin":"Prisegti bilieta.",
|
||||||
"unpin":"Atsegti bilieta.",
|
"unpin":"Atsegti bilieta.",
|
||||||
|
|
||||||
"move":"Perkelti bilieta.",
|
"move":"Perkelti bilieta.",
|
||||||
"moveId":"Parinkties, į kurią norite pereiti, identifikatorius.",
|
"moveId":"Parinkties, į kurią norite pereiti, identifikatorius.",
|
||||||
"rename":"Pervadinti bilieta.",
|
"rename":"Pervadinti bilieta.",
|
||||||
@@ -392,6 +474,7 @@
|
|||||||
"addUser":"Asmuo kurį norite pridėti.",
|
"addUser":"Asmuo kurį norite pridėti.",
|
||||||
"remove":"Pašalinti naudotoja iš bilieto.",
|
"remove":"Pašalinti naudotoja iš bilieto.",
|
||||||
"removeUser":"Pašalinti asmuo iš bilieto.",
|
"removeUser":"Pašalinti asmuo iš bilieto.",
|
||||||
|
|
||||||
"blacklist":"Tvarkykite bilietų užblokavimo sąrašą.",
|
"blacklist":"Tvarkykite bilietų užblokavimo sąrašą.",
|
||||||
"blacklistView":"Peržiūrėkite dabartinio užblokavimo sąrašą.",
|
"blacklistView":"Peržiūrėkite dabartinio užblokavimo sąrašą.",
|
||||||
"blacklistAdd":"Pridėk asmenį i užblokuoti saraša.",
|
"blacklistAdd":"Pridėk asmenį i užblokuoti saraša.",
|
||||||
@@ -405,6 +488,7 @@
|
|||||||
"statsUserUser":"Asmuo kuri norite peržiūrėti.",
|
"statsUserUser":"Asmuo kuri norite peržiūrėti.",
|
||||||
"statsTicket":"Peržiūrėkite bilieto statistiką serveryje.",
|
"statsTicket":"Peržiūrėkite bilieto statistiką serveryje.",
|
||||||
"statsTicketTicket":"Pamatyti Bilieta.",
|
"statsTicketTicket":"Pamatyti Bilieta.",
|
||||||
|
|
||||||
"clear":"Ištrinkite kelis bilietus vienu metu.",
|
"clear":"Ištrinkite kelis bilietus vienu metu.",
|
||||||
"clearFilter":"Bilietų išvalymo filtras.",
|
"clearFilter":"Bilietų išvalymo filtras.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +501,7 @@
|
|||||||
"unpin":"Atsegtus",
|
"unpin":"Atsegtus",
|
||||||
"autoclose":"Automatinius uždarymus"
|
"autoclose":"Automatinius uždarymus"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Tvarkykite automatinį uždarymą biliete.",
|
"autoclose":"Tvarkykite automatinį uždarymą biliete.",
|
||||||
"autocloseDisable":"Išjungti automatinį uždarymą šiame biliete.",
|
"autocloseDisable":"Išjungti automatinį uždarymą šiame biliete.",
|
||||||
"autocloseEnable":"Įgalinti automatinį uždarymą šiame biliete.",
|
"autocloseEnable":"Įgalinti automatinį uždarymą šiame biliete.",
|
||||||
@@ -424,7 +509,21 @@
|
|||||||
"autodelete":"Tvarkykite automatinį ištrynimą biliete.",
|
"autodelete":"Tvarkykite automatinį ištrynimą biliete.",
|
||||||
"autodeleteDisable":"Išjungti automatinį ištrynimą šiame biliete.",
|
"autodeleteDisable":"Išjungti automatinį ištrynimą šiame biliete.",
|
||||||
"autodeleteEnable":"Įgalinti automatinį ištrynimą šiame biliete.",
|
"autodeleteEnable":"Įgalinti automatinį ištrynimą šiame biliete.",
|
||||||
"autodeleteEnableTime":"Kiek dienų šis bilietas turi būti neaktyvus, kad jį būtų galima ištrinti."
|
"autodeleteEnableTime":"Kiek dienų šis bilietas turi būti neaktyvus, kad jį būtų galima ištrinti.",
|
||||||
|
|
||||||
|
"topic":"Tvarkyti bilietų kanalo temą.",
|
||||||
|
"topicSet":"Nustatykite bilietų kanalo temą.",
|
||||||
|
"topicValue":"Nauja kanalo tema.",
|
||||||
|
"topicList":"Gaukite visų bilietų sąrašą su jų tema ir statistika.",
|
||||||
|
"priority":"Tvarkykite bilieto prioritetą.",
|
||||||
|
"prioritySet":"Nustatykite bilieto prioritetą.",
|
||||||
|
"priorityValue":"Kanalo prioritetas.",
|
||||||
|
"priorityGet":"Gaukite bilieto prioritetą.",
|
||||||
|
"priorityList":"Gaukite visų bilietų sąrašą su jų prioriteto būsena.",
|
||||||
|
"transfer":"Perduoti bilieto nuosavybę iš vieno vartotojo kitam.",
|
||||||
|
"transferUser":"Vartotojas, kuriam reikia perkelti.",
|
||||||
|
"transcripts":"Peržiūrėti vartotojo bilietų transkriptų istoriją.",
|
||||||
|
"transcriptsUser":"Vartotojas peržiūrai."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Gauk saraša galimų komandų.",
|
"help":"Gauk saraša galimų komandų.",
|
||||||
@@ -452,7 +551,16 @@
|
|||||||
"autocloseDisable":"Išjungti automatinį uždarymą šiame biliete.",
|
"autocloseDisable":"Išjungti automatinį uždarymą šiame biliete.",
|
||||||
"autocloseEnable":"Įgalinti automatinį uždarymą šiame biliete.",
|
"autocloseEnable":"Įgalinti automatinį uždarymą šiame biliete.",
|
||||||
"autodeleteDisable":"Išjungti automatinį ištrynimą šiame biliete.",
|
"autodeleteDisable":"Išjungti automatinį ištrynimą šiame biliete.",
|
||||||
"autodeleteEnable":"Įgalinti automatinį ištrynimą šiame biliete."
|
"autodeleteEnable":"Įgalinti automatinį ištrynimą šiame biliete.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Generaliniai Komandos",
|
||||||
|
"basicTicket":"Paparasti bilieto komandos",
|
||||||
|
"advancedTicket":"Geresnės bilieto komandos",
|
||||||
|
"userTicket":"Naudotojo bilieto komandos",
|
||||||
|
"admin":"Administratoriaus komandos",
|
||||||
|
"advanced":"Išplėstinės komandos",
|
||||||
|
"extra":"Daugiau komandų"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +568,8 @@
|
|||||||
"system":"Sisteminė statistika",
|
"system":"Sisteminė statistika",
|
||||||
"user":"Naudotojo statistika",
|
"user":"Naudotojo statistika",
|
||||||
"ticket":"Bilieto statistika",
|
"ticket":"Bilieto statistika",
|
||||||
"participants":"Dalyviai"
|
"participants":"Dalyviai",
|
||||||
|
"messages":"Žinutės"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Bilietai Sukurti",
|
"ticketsCreated":"Bilietai Sukurti",
|
||||||
@@ -472,7 +581,48 @@
|
|||||||
"ticketsPinned":"Bilietai Prisegti",
|
"ticketsPinned":"Bilietai Prisegti",
|
||||||
"ticketsMoved":"Bilietai Perkelti",
|
"ticketsMoved":"Bilietai Perkelti",
|
||||||
"usersBlacklisted":"Naudojas Užblokuotas",
|
"usersBlacklisted":"Naudojas Užblokuotas",
|
||||||
"transcriptsCreated":"Išrašai sukurti"
|
"transcriptsCreated":"Išrašai sukurti",
|
||||||
|
"ticketsAutodeleted":"Bilietas buvo ištrintas automatiškai",
|
||||||
|
"ticketsTransferred":"Bilietas perkeltas",
|
||||||
|
"ticketVolume":"Bilieto Balsas",
|
||||||
|
"averageTickets":"Vidutinis bilietų skaičius vienam vartotojui",
|
||||||
|
"currentTickets":"Dabartiniai bilietai",
|
||||||
|
"age":"Bilieto Amžius",
|
||||||
|
"responseTime":"Atsiliepimo Laikas",
|
||||||
|
"resolutionTime":"Rezoliucijos laikas",
|
||||||
|
"createdOn":"Sukurta",
|
||||||
|
"createdBy":"Sukurta nuo",
|
||||||
|
"closedOn":"Uždaryta",
|
||||||
|
"closedBy":"Uždarė",
|
||||||
|
"claimedOn":"Tvarkyti pradėjo",
|
||||||
|
"claimedBy":"Tvarkytojas",
|
||||||
|
"pinnedOn":"Prisegta",
|
||||||
|
"pinnedBy":"Prisegė",
|
||||||
|
"deletedOn":"Ištrinta",
|
||||||
|
"deletedBy":"Ištrynė"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Developeris",
|
||||||
|
"serverOwner":"Serverio Savininkas",
|
||||||
|
"serverAdmin":"Serverio administratorius",
|
||||||
|
"moderator":"Moderatorius ",
|
||||||
|
"support":"Pagalbos narys",
|
||||||
|
"member":"Narys"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Pasirink Bilieta",
|
||||||
|
"selectRole":"Pasirink Role",
|
||||||
|
"selectOption":"Pasirinkite savo parinktį",
|
||||||
|
"selectPriorityLevel":"Pasirinkite prioriteto lygį"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Skubiai",
|
||||||
|
"veryHigh":"Labai greitai",
|
||||||
|
"high":"Greitai",
|
||||||
|
"normal":"Normaliai",
|
||||||
|
"low":"Paprastai",
|
||||||
|
"veryLow":"Silpnai",
|
||||||
|
"none":"Nėra"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+587
-437
File diff suppressed because it is too large
Load Diff
+528
-378
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["dysashop","zhavis"],
|
"translators":["dysashop","zhavis"],
|
||||||
"lastedited":"28/05/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Persian",
|
"language":"Persian",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,6 +31,14 @@
|
|||||||
"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} کاراکتر باشد!",
|
||||||
@@ -38,441 +46,583 @@
|
|||||||
"numberTooSmall":"این عدد باید حداقل {0} باشد!",
|
"numberTooSmall":"این عدد باید حداقل {0} باشد!",
|
||||||
"numberTooLarge":"این عدد باید حداکثر {0} باشد!",
|
"numberTooLarge":"این عدد باید حداکثر {0} باشد!",
|
||||||
"numberNotEqual":"این عدد باید برابر با {0} باشد!",
|
"numberNotEqual":"این عدد باید برابر با {0} باشد!",
|
||||||
"numberStep": "این عدد باید مضربی از {0} باشد!",
|
"numberStep":"این عدد باید مضربی از {0} باشد!",
|
||||||
"numberStepOffset": "این عدد باید مضربی از {0} باشد و با {1} شروع شود!",
|
"numberStepOffset":"این عدد باید مضربی از {0} باشد و با {1} شروع شود!",
|
||||||
"numberStartsWith": "این عدد باید با {0} شروع شود!",
|
"numberStartsWith":"این عدد باید با {0} شروع شود!",
|
||||||
"numberEndsWith": "این عدد باید با {0} پایان یابد!",
|
"numberEndsWith":"این عدد باید با {0} پایان یابد!",
|
||||||
"numberContains": "این عدد باید شامل {0} باشد!",
|
"numberContains":"این عدد باید شامل {0} باشد!",
|
||||||
"numberChoices": "این عدد فقط میتواند یکی از مقادیر زیر باشد: {0}!",
|
"numberChoices":"این عدد فقط میتواند یکی از مقادیر زیر باشد: {0}!",
|
||||||
"numberFloat": "این عدد نمیتواند اعشاری باشد!",
|
"numberFloat":"این عدد نمیتواند اعشاری باشد!",
|
||||||
"numberNegative": "این عدد نمیتواند منفی باشد!",
|
"numberNegative":"این عدد نمیتواند منفی باشد!",
|
||||||
"numberPositive": "این عدد نمیتواند مثبت باشد!",
|
"numberPositive":"این عدد نمیتواند مثبت باشد!",
|
||||||
"numberZero": "این عدد نمیتواند صفر باشد!",
|
"numberZero":"این عدد نمیتواند صفر باشد!",
|
||||||
|
"numberNan":"این عدد نمیتواند NaN (عدد نیست) باشد!",
|
||||||
|
"numberInvertedContains":"این عدد نباید شامل {0} باشد!",
|
||||||
|
|
||||||
"booleanTrue": "این مقدار بولین نمیتواند درست (true) باشد!",
|
"booleanTrue":"این مقدار بولین نمیتواند درست (true) باشد!",
|
||||||
"booleanFalse": "این مقدار بولین نمیتواند نادرست (false) باشد!",
|
"booleanFalse":"این مقدار بولین نمیتواند نادرست (false) باشد!",
|
||||||
|
|
||||||
"arrayEmptyDisabled": "این آرایه نمیتواند خالی باشد!",
|
"arrayEmptyDisabled":"این آرایه نمیتواند خالی باشد!",
|
||||||
"arrayEmptyRequired": "این آرایه باید خالی باشد!",
|
"arrayEmptyRequired":"این آرایه باید خالی باشد!",
|
||||||
"arrayTooShort": "طول این آرایه باید حداقل {0} باشد!",
|
"arrayTooShort":"طول این آرایه باید حداقل {0} باشد!",
|
||||||
"arrayTooLong": "طول این آرایه باید حداکثر {0} باشد!",
|
"arrayTooLong":"طول این آرایه باید حداکثر {0} باشد!",
|
||||||
"arrayLengthInvalid": "طول این آرایه باید دقیقاً {0} باشد!",
|
"arrayLengthInvalid":"طول این آرایه باید دقیقاً {0} باشد!",
|
||||||
"arrayInvalidTypes": "این آرایه فقط میتواند شامل انواع زیر باشد: {0}!",
|
"arrayInvalidTypes":"این آرایه فقط میتواند شامل انواع زیر باشد: {0}!",
|
||||||
"arrayDouble": "این آرایه نمیتواند مقادیر تکراری داشته باشد!",
|
"arrayDouble":"این آرایه نمیتواند مقادیر تکراری داشته باشد!",
|
||||||
|
|
||||||
"discordInvalidId": "این شناسه دیسکورد {0} نامعتبر است!",
|
"discordInvalidId":"این شناسه دیسکورد {0} نامعتبر است!",
|
||||||
"discordInvalidIdOptions": "این شناسه دیسکورد {0} نامعتبر است! میتوانید از یکی از این موارد استفاده کنید: {1}!",
|
"discordInvalidIdOptions":"این شناسه دیسکورد {0} نامعتبر است! میتوانید از یکی از این موارد استفاده کنید: {1}!",
|
||||||
"discordInvalidToken": "این توکن دیسکورد از نظر ساختاری نامعتبر است!",
|
"discordInvalidToken":"این توکن دیسکورد از نظر ساختاری نامعتبر است!",
|
||||||
"colorInvalid": "این کد رنگ هگزادسیمال نامعتبر است!",
|
"colorInvalid":"این کد رنگ هگزادسیمال نامعتبر است!",
|
||||||
"emojiTooShort": "این رشته باید حداقل {0} ایموجی داشته باشد!",
|
"emojiTooShort":"این رشته باید حداقل {0} ایموجی داشته باشد!",
|
||||||
"emojiTooLong": "این رشته باید حداکثر {0} ایموجی داشته باشد!",
|
"emojiTooLong":"این رشته باید حداکثر {0} ایموجی داشته باشد!",
|
||||||
"emojiCustom": "این ایموجی نمیتواند یک ایموجی سفارشی دیسکورد باشد!",
|
"emojiCustom":"این ایموجی نمیتواند یک ایموجی سفارشی دیسکورد باشد!",
|
||||||
"emojiInvalid": "این ایموجی نامعتبر است!",
|
"emojiInvalid":"این ایموجی نامعتبر است!",
|
||||||
"urlInvalid": "این آدرس URL نامعتبر است!",
|
"urlInvalid":"این آدرس URL نامعتبر است!",
|
||||||
"urlInvalidHttp": "این آدرس URL فقط میتواند از پروتکل https:// استفاده کند!",
|
"urlInvalidHttp":"این آدرس URL فقط میتواند از پروتکل https:// استفاده کند!",
|
||||||
"urlInvalidProtocol": "این آدرس URL فقط میتواند از پروتکلهای http:// و https:// استفاده کند!",
|
"urlInvalidProtocol":"این آدرس URL فقط میتواند از پروتکلهای http:// و https:// استفاده کند!",
|
||||||
"urlInvalidHostname": "این آدرس URL دارای نام میزبان غیرمجازی است!",
|
"urlInvalidHostname":"این آدرس URL دارای نام میزبان غیرمجازی است!",
|
||||||
"urlInvalidExtension": "این آدرس URL دارای پسوند نامعتبر است! یکی از موارد زیر را انتخاب کنید: {0}!",
|
"urlInvalidExtension":"این آدرس URL دارای پسوند نامعتبر است! یکی از موارد زیر را انتخاب کنید: {0}!",
|
||||||
"urlInvalidPath": "این آدرس URL دارای مسیر نامعتبر است!",
|
"urlInvalidPath":"این آدرس URL دارای مسیر نامعتبر است!",
|
||||||
"idNotUnique": "این شناسه یکتا نیست، لطفاً از شناسه دیگری استفاده کنید!",
|
"idNotUnique":"این شناسه یکتا نیست، لطفاً از شناسه دیگری استفاده کنید!",
|
||||||
"idNonExistent": "شناسه {0} وجود ندارد!",
|
"idNonExistent":"شناسه {0} وجود ندارد!",
|
||||||
|
|
||||||
"invalidType": "این ویژگی باید از نوع {0} باشد!",
|
"invalidType":"این ویژگی باید از نوع {0} باشد!",
|
||||||
"propertyMissing": "ویژگی {0} در این شیء وجود ندارد!",
|
"propertyMissing":"ویژگی {0} در این شیء وجود ندارد!",
|
||||||
"propertyOptional": "ویژگی {0} در این شیء اختیاری است!",
|
"propertyOptional":"ویژگی {0} در این شیء اختیاری است!",
|
||||||
"objectDisabled": "این شیء غیرفعال است، آن را با استفاده از {0} فعال کنید!",
|
"objectDisabled":"این شیء غیرفعال است، آن را با استفاده از {0} فعال کنید!",
|
||||||
"nullInvalid": "این ویژگی نمیتواند null باشد!",
|
"nullInvalid":"این ویژگی نمیتواند null باشد!",
|
||||||
"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":"یک پنل با منوی کشویی فقط میتواند شامل گزینههایی از نوع: 'ticket'، 'role' یا 'sub-panel' باشد.",
|
||||||
|
"customInvalidVersion":"نسخه مشخص شده در پیکربندی شما مطابقت ندارد! اطمینان حاصل کنید که پیکربندی به آخرین نسخه بهروزرسانی شده است!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"create": "بازدید از تیکت",
|
"create":"بازدید از تیکت",
|
||||||
"close": "بستن تیکت",
|
"close":"بستن تیکت",
|
||||||
"delete": "حذف تیکت",
|
"delete":"حذف تیکت",
|
||||||
"reopen": "بازگشایی تیکت",
|
"reopen":"بازگشایی تیکت",
|
||||||
"claim": "اختصاص تیکت",
|
"claim":"اختصاص تیکت",
|
||||||
"unclaim": "لغو اختصاص تیکت",
|
"unclaim":"لغو اختصاص تیکت",
|
||||||
"pin": "پین کردن تیکت",
|
"pin":"پین کردن تیکت",
|
||||||
"unpin": "لغو پین تیکت",
|
"unpin":"لغو پین تیکت",
|
||||||
"clear": "حذف تیکتها",
|
"clear":"حذف تیکتها",
|
||||||
"helpSwitchSlash": "مشاهده دستورات اسلش",
|
"helpSwitchSlash":"مشاهده دستورات اسلش",
|
||||||
"helpSwitchText": "مشاهده دستورات متنی",
|
"helpSwitchText":"مشاهده دستورات متنی",
|
||||||
"helpPage": "صفحه {0}",
|
"helpPage":"صفحه {0}",
|
||||||
"withReason": "با دلیل",
|
"withReason":"با دلیل",
|
||||||
"withoutTranscript": "بدون رونوشت"
|
"withoutTranscript":"بدون رونوشت",
|
||||||
|
"blacklistAdd":"افزودن کاربر به لیست سیاه",
|
||||||
|
"blacklistRemove":"آزادسازی کاربر"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created": "تیکت ایجاد شد",
|
"created":"تیکت ایجاد شد",
|
||||||
"close": "تیکت بسته شد",
|
"close":"تیکت بسته شد",
|
||||||
"delete": "تیکت حذف شد",
|
"delete":"تیکت حذف شد",
|
||||||
"reopen": "تیکت بازگشایی شد",
|
"reopen":"تیکت بازگشایی شد",
|
||||||
"claim": "تیکت اختصاص یافت",
|
"claim":"تیکت اختصاص یافت",
|
||||||
"unclaim": "اختصاص تیکت لغو شد",
|
"unclaim":"اختصاص تیکت لغو شد",
|
||||||
"pin": "تیکت پین شد",
|
"pin":"تیکت پین شد",
|
||||||
"unpin": "پین تیکت لغو شد",
|
"unpin":"پین تیکت لغو شد",
|
||||||
"rename": "نام تیکت تغییر یافت",
|
"rename":"نام تیکت تغییر یافت",
|
||||||
"move": "تیکت منتقل شد",
|
"move":"تیکت منتقل شد",
|
||||||
"add": "کاربر به تیکت اضافه شد",
|
"add":"کاربر به تیکت اضافه شد",
|
||||||
"remove": "کاربر از تیکت حذف شد",
|
"remove":"کاربر از تیکت حذف شد",
|
||||||
|
|
||||||
"help": "دستورات موجود",
|
"help":"دستورات موجود",
|
||||||
"statsReset": "بازنشانی آمار",
|
"statsReset":"بازنشانی آمار",
|
||||||
"blacklistAdd": "کاربر به لیست سیاه اضافه شد",
|
"blacklistAdd":"کاربر به لیست سیاه اضافه شد",
|
||||||
"blacklistRemove": "کاربر از لیست سیاه آزاد شد",
|
"blacklistRemove":"کاربر از لیست سیاه آزاد شد",
|
||||||
"blacklistGet": "کاربر لیست سیاه",
|
"blacklistGet":"کاربر لیست سیاه",
|
||||||
"blacklistView": "لیست سیاه کنونی",
|
"blacklistView":"لیست سیاه کنونی",
|
||||||
"blacklistAddDm": "به لیست سیاه اضافه شد",
|
"blacklistAddDm":"به لیست سیاه اضافه شد",
|
||||||
"blacklistRemoveDm": "از لیست سیاه حذف شد",
|
"blacklistRemoveDm":"از لیست سیاه حذف شد",
|
||||||
"clear": "تیکتها پاکسازی شدند",
|
"clear":"تیکتها پاکسازی شدند",
|
||||||
"roles": "نقشها بهروزرسانی شدند",
|
"clearTickets":"پاک کردن تیکتها",
|
||||||
|
"roles":"نقشها بهروزرسانی شدند",
|
||||||
|
|
||||||
"autoclose": "تیکت بهصورت خودکار بسته شد",
|
"autoclose":"تیکت بهصورت خودکار بسته شد",
|
||||||
"autocloseEnabled": "بسته شدن خودکار فعال شد",
|
"autocloseEnabled":"بسته شدن خودکار فعال شد",
|
||||||
"autocloseDisabled": "بسته شدن خودکار غیرفعال شد",
|
"autocloseDisabled":"بسته شدن خودکار غیرفعال شد",
|
||||||
"autodelete": "تیکت بهصورت خودکار حذف شد",
|
"autodelete":"تیکت بهصورت خودکار حذف شد",
|
||||||
"autodeleteEnabled": "حذف خودکار فعال شد",
|
"autodeleteEnabled":"حذف خودکار فعال شد",
|
||||||
"autodeleteDisabled": "حذف خودکار غیرفعال شد"
|
"autodeleteDisabled":"حذف خودکار غیرفعال شد",
|
||||||
|
|
||||||
|
"topicSet":"موضوع تغییر یافت",
|
||||||
|
"prioritySet":"اولویت تغییر یافت",
|
||||||
|
"priorityGet":"اولویت تیکت",
|
||||||
|
"transfer":"تیکت منتقل شد",
|
||||||
|
"transcripts":"تاریخچه رونوشتها"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create": "تیکت شما با موفقیت ایجاد شد. برای دسترسی به آن، روی دکمه زیر کلیک کنید!",
|
"create":"تیکت شما با موفقیت ایجاد شد. برای دسترسی به آن، روی دکمه زیر کلیک کنید!",
|
||||||
"close": "تیکت با موفقیت بسته شد!",
|
"close":"تیکت با موفقیت بسته شد!",
|
||||||
"delete": "تیکت با موفقیت حذف شد!",
|
"delete":"تیکت با موفقیت حذف شد!",
|
||||||
"reopen": "تیکت با موفقیت دوباره باز شد!",
|
"reopen":"تیکت با موفقیت دوباره باز شد!",
|
||||||
"claim": "تیکت با موفقیت به شما اختصاص یافت!",
|
"claim":"تیکت با موفقیت به شما اختصاص یافت!",
|
||||||
"unclaim": "تیکت با موفقیت از حالت اختصاصیافته خارج شد!",
|
"unclaim":"تیکت با موفقیت از حالت اختصاصیافته خارج شد!",
|
||||||
"pin": "تیکت با موفقیت پین شد!",
|
"pin":"تیکت با موفقیت پین شد!",
|
||||||
"unpin": "تیکت با موفقیت از حالت پین خارج شد!",
|
"unpin":"تیکت با موفقیت از حالت پین خارج شد!",
|
||||||
"rename": "نام تیکت با موفقیت به {0} تغییر یافت!",
|
"rename":"نام تیکت با موفقیت به {0} تغییر یافت!",
|
||||||
"move": "تیکت با موفقیت به {0} منتقل شد!",
|
"move":"تیکت با موفقیت به {0} منتقل شد!",
|
||||||
"add": "کاربر {0} با موفقیت به تیکت اضافه شد!",
|
"add":"کاربر {0} با موفقیت به تیکت اضافه شد!",
|
||||||
"remove": "کاربر {0} با موفقیت از تیکت حذف شد!",
|
"remove":"کاربر {0} با موفقیت از تیکت حذف شد!",
|
||||||
|
|
||||||
"helpExplanation": "`<name>`: پارامتر اجباری\n`[name]`: پارامتر اختیاری",
|
"helpExplanation":"`<name>`: پارامتر اجباری\n`[name]`: پارامتر اختیاری",
|
||||||
"statsReset": "آمار ربات با موفقیت بازنشانی شد!",
|
"statsReset":"آمار ربات با موفقیت بازنشانی شد!",
|
||||||
"statsError": "امکان مشاهده آمار تیکت وجود ندارد!\n{0} یک تیکت معتبر نیست!",
|
"statsError":"امکان مشاهده آمار تیکت وجود ندارد!\n{0} یک تیکت معتبر نیست!",
|
||||||
"blacklistAdd": "کاربر {0} با موفقیت به لیست سیاه اضافه شد!",
|
"blacklistAdd":"کاربر {0} با موفقیت به لیست سیاه اضافه شد!",
|
||||||
"blacklistRemove": "کاربر {0} با موفقیت از لیست سیاه آزاد شد!",
|
"blacklistRemove":"کاربر {0} با موفقیت از لیست سیاه آزاد شد!",
|
||||||
"blacklistGetSuccess": "کاربر {0} در حال حاضر در لیست سیاه قرار دارد!",
|
"blacklistGetSuccess":"کاربر {0} در حال حاضر در لیست سیاه قرار دارد!",
|
||||||
"blacklistGetEmpty": "کاربر {0} در حال حاضر در لیست سیاه نیست!",
|
"blacklistGetEmpty":"کاربر {0} در حال حاضر در لیست سیاه نیست!",
|
||||||
"blacklistViewEmpty": "هنوز هیچ کاربری به لیست سیاه اضافه نشده است!",
|
"blacklistViewEmpty":"هنوز هیچ کاربری به لیست سیاه اضافه نشده است!",
|
||||||
"blacklistViewTip": "برای افزودن کاربر به لیست سیاه از دستور `/blacklist add` استفاده کنید!",
|
"blacklistViewTip":"برای افزودن کاربر به لیست سیاه از دستور `/blacklist add` استفاده کنید!",
|
||||||
"clearVerify": "آیا مطمئن هستید که میخواهید چندین تیکت را حذف کنید؟\nاین اقدام قابل بازگشت نیست!",
|
"clearVerify":"آیا مطمئن هستید که میخواهید چندین تیکت را حذف کنید؟\nاین اقدام قابل بازگشت نیست!",
|
||||||
"clearReady": "{0} تیکت با موفقیت حذف شدند!",
|
"clearReady":"{0} تیکت با موفقیت حذف شدند!",
|
||||||
"rolesEmpty": "هیچ نقشی بهروزرسانی نشد!",
|
"rolesEmpty":"هیچ نقشی بهروزرسانی نشد!",
|
||||||
|
|
||||||
"autocloseLeave": "این تیکت بهطور خودکار بسته شد زیرا ایجادکننده آن سرور را ترک کرده است!",
|
"autocloseLeave":"این تیکت بهطور خودکار بسته شد زیرا ایجادکننده آن سرور را ترک کرده است!",
|
||||||
"autocloseTimeout": "این تیکت بهطور خودکار بسته شد زیرا بیش از {0} ساعت غیرفعال بوده است!",
|
"autocloseTimeout":"این تیکت بهطور خودکار بسته شد زیرا بیش از {0} ساعت غیرفعال بوده است!",
|
||||||
"autodeleteLeave": "این تیکت بهطور خودکار حذف شد زیرا ایجادکننده آن سرور را ترک کرده است!",
|
"autodeleteLeave":"این تیکت بهطور خودکار حذف شد زیرا ایجادکننده آن سرور را ترک کرده است!",
|
||||||
"autodeleteTimeout": "این تیکت بهطور خودکار حذف شد زیرا بیش از {0} روز غیرفعال بوده است!",
|
"autodeleteTimeout":"این تیکت بهطور خودکار حذف شد زیرا بیش از {0} روز غیرفعال بوده است!",
|
||||||
"autocloseEnabled": "قابلیت بسته شدن خودکار برای این تیکت فعال شد!\nتیکت پس از {0} ساعت غیرفعال بودن بسته خواهد شد!",
|
"autocloseEnabled":"قابلیت بسته شدن خودکار برای این تیکت فعال شد!\nتیکت پس از {0} ساعت غیرفعال بودن بسته خواهد شد!",
|
||||||
"autocloseDisabled": "قابلیت بسته شدن خودکار برای این تیکت غیرفعال شد!\nتیکت دیگر بهصورت خودکار بسته نخواهد شد!",
|
"autocloseDisabled":"قابلیت بسته شدن خودکار برای این تیکت غیرفعال شد!\nتیکت دیگر بهصورت خودکار بسته نخواهد شد!",
|
||||||
"autodeleteEnabled": "قابلیت حذف خودکار برای این تیکت فعال شد!\nتیکت پس از {0} روز غیرفعال بودن حذف خواهد شد!",
|
"autodeleteEnabled":"قابلیت حذف خودکار برای این تیکت فعال شد!\nتیکت پس از {0} روز غیرفعال بودن حذف خواهد شد!",
|
||||||
"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":"چرا این تیکت را بستید؟",
|
||||||
"deletePlaceholder": "چرا این تیکت را حذف کردید؟",
|
"deletePlaceholder":"چرا این تیکت را حذف کردید؟",
|
||||||
"reopenPlaceholder": "چرا این تیکت را دوباره باز کردید؟",
|
"reopenPlaceholder":"چرا این تیکت را دوباره باز کردید؟",
|
||||||
"claimPlaceholder": "چرا این تیکت را به خود اختصاص دادید؟",
|
"claimPlaceholder":"چرا این تیکت را به خود اختصاص دادید؟",
|
||||||
"unclaimPlaceholder": "چرا اختصاص این تیکت را لغو کردید؟",
|
"unclaimPlaceholder":"چرا اختصاص این تیکت را لغو کردید؟",
|
||||||
"pinPlaceholder": "چرا این تیکت را پین کردید؟",
|
"pinPlaceholder":"چرا این تیکت را پین کردید؟",
|
||||||
"unpinPlaceholder": "چرا پین این تیکت را لغو کردید؟"
|
"unpinPlaceholder":"چرا پین این تیکت را لغو کردید؟"
|
||||||
},
|
},
|
||||||
"logs":{
|
"logs":{
|
||||||
"createLog": "تیکت جدیدی توسط {0} ایجاد شد!",
|
"createLog":"تیکت جدیدی توسط {0} ایجاد شد!",
|
||||||
"closeLog": "این تیکت توسط {0} بسته شد!",
|
"closeLog":"این تیکت توسط {0} بسته شد!",
|
||||||
"closeDm": "تیکت شما در سرور ما بسته شد!",
|
"closeDm":"تیکت شما در سرور ما بسته شد!",
|
||||||
"deleteLog": "این تیکت توسط {0} حذف شد!",
|
"deleteLog":"این تیکت توسط {0} حذف شد!",
|
||||||
"deleteDm": "تیکت شما در سرور ما حذف شد!",
|
"deleteDm":"تیکت شما در سرور ما حذف شد!",
|
||||||
"reopenLog": "این تیکت توسط {0} دوباره باز شد!",
|
"reopenLog":"این تیکت توسط {0} دوباره باز شد!",
|
||||||
"reopenDm": "تیکت شما در سرور ما دوباره باز شد!",
|
"reopenDm":"تیکت شما در سرور ما دوباره باز شد!",
|
||||||
"claimLog": "این تیکت توسط {0} اختصاص یافت!",
|
"claimLog":"این تیکت توسط {0} اختصاص یافت!",
|
||||||
"claimDm": "تیکت شما در سرور ما اختصاص یافت!",
|
"claimDm":"تیکت شما در سرور ما اختصاص یافت!",
|
||||||
"unclaimLog": "اختصاص این تیکت توسط {0} لغو شد!",
|
"unclaimLog":"اختصاص این تیکت توسط {0} لغو شد!",
|
||||||
"unclaimDm": "اختصاص تیکت شما در سرور ما لغو شد!",
|
"unclaimDm":"اختصاص تیکت شما در سرور ما لغو شد!",
|
||||||
"pinLog": "این تیکت توسط {0} پین شد!",
|
"pinLog":"این تیکت توسط {0} پین شد!",
|
||||||
"pinDm": "تیکت شما در سرور ما پین شد!",
|
"pinDm":"تیکت شما در سرور ما پین شد!",
|
||||||
"unpinLog": "پین این تیکت توسط {0} لغو شد!",
|
"unpinLog":"پین این تیکت توسط {0} لغو شد!",
|
||||||
"unpinDm": "پین تیکت شما در سرور ما لغو شد!",
|
"unpinDm":"پین تیکت شما در سرور ما لغو شد!",
|
||||||
"renameLog": "این تیکت توسط {1} به {0} تغییر نام یافت!",
|
"renameLog":"این تیکت توسط {1} به {0} تغییر نام یافت!",
|
||||||
"renameDm": "تیکت شما در سرور ما به {0} تغییر نام یافت!",
|
"renameDm":"تیکت شما در سرور ما به {0} تغییر نام یافت!",
|
||||||
"moveLog": "این تیکت توسط {1} به {0} منتقل شد!",
|
"moveLog":"این تیکت توسط {1} به {0} منتقل شد!",
|
||||||
"moveDm": "تیکت شما در سرور ما به {0} منتقل شد!",
|
"moveDm":"تیکت شما در سرور ما به {0} منتقل شد!",
|
||||||
"addLog": "کاربر {0} توسط {1} به این تیکت اضافه شد!",
|
"addLog":"کاربر {0} توسط {1} به این تیکت اضافه شد!",
|
||||||
"addDm": "کاربر {0} به تیکت شما در سرور ما اضافه شد!",
|
"addDm":"کاربر {0} به تیکت شما در سرور ما اضافه شد!",
|
||||||
"removeLog": "کاربر {0} توسط {1} از این تیکت حذف شد!",
|
"removeLog":"کاربر {0} توسط {1} از این تیکت حذف شد!",
|
||||||
"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":"نقشهای شما در سرور ما بهروزرسانی شد!",
|
||||||
|
"topicSetLog":"اولویت این تیکت توسط {1} به {0} تنظیم شد.",
|
||||||
|
"topicSetDm":"اولویت تیکت شما به {0} تنظیم شد."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
"success":{
|
"success":{
|
||||||
"visit": "بازدید از رونوشت",
|
"visit":"بازدید از رونوشت",
|
||||||
"ready": "رونوشت ایجاد شد",
|
"ready":"رونوشت ایجاد شد",
|
||||||
"textFileDescription": "این فایل متنی، رونوشت یک تیکت حذفشده است!",
|
"textFileDescription":"این فایل متنی، رونوشت یک تیکت حذفشده است!",
|
||||||
"htmlProgress": "لطفاً صبر کنید تا این رونوشت HTML پردازش شود...",
|
"htmlProgress":"لطفاً صبر کنید تا این رونوشت HTML پردازش شود...",
|
||||||
|
|
||||||
"createdChannel": "یک رونوشت {0} جدید در سرور ایجاد شد!",
|
"createdChannel":"یک رونوشت {0} جدید در سرور ایجاد شد!",
|
||||||
"createdCreator": "یک رونوشت {0} جدید برای یکی از تیکتهای شما ایجاد شد!",
|
"createdCreator":"یک رونوشت {0} جدید برای یکی از تیکتهای شما ایجاد شد!",
|
||||||
"createdParticipant": "یک رونوشت {0} جدید در یکی از تیکتهایی که در آن مشارکت داشتید ایجاد شد!",
|
"createdParticipant":"یک رونوشت {0} جدید در یکی از تیکتهایی که در آن مشارکت داشتید ایجاد شد!",
|
||||||
"createdActiveAdmin": "یک رونوشت {0} جدید در یکی از تیکتهایی که بهعنوان مدیر در آن مشارکت داشتید ایجاد شد!",
|
"createdActiveAdmin":"یک رونوشت {0} جدید در یکی از تیکتهایی که بهعنوان مدیر در آن مشارکت داشتید ایجاد شد!",
|
||||||
"createdEveryAdmin": "یک رونوشت {0} جدید در یکی از تیکتهایی که شما مدیر آن بودید ایجاد شد!",
|
"createdEveryAdmin":"یک رونوشت {0} جدید در یکی از تیکتهایی که شما مدیر آن بودید ایجاد شد!",
|
||||||
"createdOther": "یک رونوشت {0} جدید ایجاد شد!"
|
"createdOther":"یک رونوشت {0} جدید ایجاد شد!"
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
"retry": "دوباره تلاش کنید",
|
"retry":"دوباره تلاش کنید",
|
||||||
"continue": "حذف بدون رونوشت",
|
"continue":"حذف بدون رونوشت",
|
||||||
"backup": "ایجاد رونوشت پشتیبان",
|
"backup":"ایجاد رونوشت پشتیبان",
|
||||||
"error": "مشکلی در هنگام ایجاد رونوشت رخ داد.\nمیخواهید چه کاری انجام دهید؟\n\nاین تیکت تا زمانی که یکی از این دکمهها را کلیک نکنید حذف نخواهد شد."
|
"error":"مشکلی در هنگام ایجاد رونوشت رخ داد.\nمیخواهید چه کاری انجام دهید؟\n\nاین تیکت تا زمانی که یکی از این دکمهها را کلیک نکنید حذف نخواهد شد.",
|
||||||
|
"title":"خطای رونوشت",
|
||||||
|
"noHistory":"این کاربر هنوز هیچ رونوشت (transcript) ندارد.",
|
||||||
|
"historyNotSupported":"تاریخچه رونوشتها در حال حاضر فقط با HTML Transcripts پشتیبانی میشود.\nتاریخچه رونوشت متنی در نسخههای آینده در دسترس خواهد بود."
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"پیامها",
|
||||||
|
"embedTitle":"امبد",
|
||||||
|
"fileTitle":"فایل",
|
||||||
|
"fieldsTitle":"فیلدها",
|
||||||
|
"reactionsTitle":"واکنشها",
|
||||||
|
"statsTitle":"آمار",
|
||||||
|
"emptyContent":"<محتوا خالی است>",
|
||||||
|
"noTitle":"<بدون عنوان>",
|
||||||
|
"noDesc":"<بدون توضیح>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
"titles":{
|
"titles":{
|
||||||
"internalError": "خطای داخلی",
|
"internalError":"خطای داخلی",
|
||||||
"optionMissing": "گزینه دستور غایب است",
|
"optionMissing":"گزینه دستور غایب است",
|
||||||
"optionInvalid": "گزینه دستور نامعتبر است",
|
"optionInvalid":"گزینه دستور نامعتبر است",
|
||||||
"unknownCommand": "دستور ناشناخته",
|
"unknownCommand":"دستور ناشناخته",
|
||||||
"noPermissions": "بدون مجوز",
|
"noPermissions":"بدون مجوز",
|
||||||
"unknownTicket": "تیکت ناشناخته",
|
"unknownTicket":"تیکت ناشناخته",
|
||||||
"deprecatedTicket": "تیکت منسوخشده",
|
"deprecatedTicket":"تیکت منسوخشده",
|
||||||
"unknownOption": "گزینه ناشناخته",
|
"unknownOption":"گزینه ناشناخته",
|
||||||
"unknownPanel": "پنل ناشناخته",
|
"unknownPanel":"پنل ناشناخته",
|
||||||
"notInGuild": "خارج از سرور",
|
"notInGuild":"خارج از سرور",
|
||||||
"channelRename": "عدم امکان تغییر نام کانال",
|
"channelRename":"عدم امکان تغییر نام کانال",
|
||||||
"busy": "تیکت مشغول است"
|
"channelCategory":"تغییر دستهبندی ممکن نیست",
|
||||||
|
"busy":"تیکت مشغول است",
|
||||||
|
"permissionError":"خطای دسترسی"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo": "برای اطلاعات بیشتر با صاحب این ربات تماس بگیرید!",
|
"askForInfo":"برای اطلاعات بیشتر با صاحب این ربات تماس بگیرید!",
|
||||||
"askForInfoResolve": "اگر این مشکل پس از چند بار تلاش برطرف نشد، با صاحب این ربات تماس بگیرید.",
|
"askForInfoResolve":"اگر این مشکل پس از چند بار تلاش برطرف نشد، با صاحب این ربات تماس بگیرید.",
|
||||||
"internalError": "به دلیل خطای داخلی، امکان پاسخ به این {0} وجود نداشت!",
|
"internalError":"به دلیل خطای داخلی، امکان پاسخ به این {0} وجود نداشت!",
|
||||||
"optionMissing": "یک پارامتر ضروری در این دستور وجود ندارد!",
|
"optionMissing":"یک پارامتر ضروری در این دستور وجود ندارد!",
|
||||||
"optionInvalid": "یک پارامتر در این دستور نامعتبر است!",
|
"optionInvalid":"یک پارامتر در این دستور نامعتبر است!",
|
||||||
"optionInvalidChoose": "یکی از موارد زیر را انتخاب کنید:",
|
"optionInvalidChoose":"یکی از موارد زیر را انتخاب کنید:",
|
||||||
"unknownCommand": "برای اطلاعات بیشتر، منوی راهنما را بررسی کنید!",
|
"unknownCommand":"برای اطلاعات بیشتر، منوی راهنما را بررسی کنید!",
|
||||||
"noPermissions": "شما اجازه استفاده از این {0} را ندارید!",
|
"noPermissions":"شما اجازه استفاده از این {0} را ندارید!",
|
||||||
"noPermissionsList": "مجوزهای مورد نیاز: (یکی از آنها)",
|
"noPermissionsList":"مجوزهای مورد نیاز: (یکی از آنها)",
|
||||||
"noPermissionsCooldown": "به دلیل وجود محدودیت زمانی، اجازه استفاده از این {0} را ندارید!",
|
"noPermissionsCooldown":"به دلیل وجود محدودیت زمانی، اجازه استفاده از این {0} را ندارید!",
|
||||||
"noPermissionsBlacklist": "چون در لیست سیاه قرار دارید، اجازه استفاده از این {0} را ندارید!",
|
"noPermissionsBlacklist":"چون در لیست سیاه قرار دارید، اجازه استفاده از این {0} را ندارید!",
|
||||||
"noPermissionsLimitGlobal": "به دلیل رسیدن سرور به حداکثر تعداد تیکت، نمیتوانید تیکت ایجاد کنید!",
|
"noPermissionsLimitGlobal":"به دلیل رسیدن سرور به حداکثر تعداد تیکت، نمیتوانید تیکت ایجاد کنید!",
|
||||||
"noPermissionsLimitGlobalUser": "به دلیل رسیدن شما به حداکثر تعداد تیکت، نمیتوانید تیکت ایجاد کنید!",
|
"noPermissionsLimitGlobalUser":"به دلیل رسیدن شما به حداکثر تعداد تیکت، نمیتوانید تیکت ایجاد کنید!",
|
||||||
"noPermissionsLimitOption": "به دلیل رسیدن سرور به حداکثر تعداد تیکت برای این گزینه، نمیتوانید تیکت ایجاد کنید!",
|
"noPermissionsLimitOption":"به دلیل رسیدن سرور به حداکثر تعداد تیکت برای این گزینه، نمیتوانید تیکت ایجاد کنید!",
|
||||||
"noPermissionsLimitOptionUser": "به دلیل رسیدن شما به حداکثر تعداد تیکت برای این گزینه، نمیتوانید تیکت ایجاد کنید!",
|
"noPermissionsLimitOptionUser":"به دلیل رسیدن شما به حداکثر تعداد تیکت برای این گزینه، نمیتوانید تیکت ایجاد کنید!",
|
||||||
"unknownTicket": "این دستور را دوباره در یک تیکت معتبر امتحان کنید!",
|
"unknownTicket":"این دستور را دوباره در یک تیکت معتبر امتحان کنید!",
|
||||||
"deprecatedTicket": "کانال کنونی یک تیکت معتبر نیست! ممکن است این تیکت از نسخه قدیمی Open Ticket باشد!",
|
"deprecatedTicket":"کانال کنونی یک تیکت معتبر نیست! ممکن است این تیکت از نسخه قدیمی Open Ticket باشد!",
|
||||||
"notInGuild": "این {0} در پیامهای مستقیم (DM) کار نمیکند! لطفاً دوباره در یک سرور امتحان کنید!",
|
"notInGuild":"این {0} در پیامهای مستقیم (DM) کار نمیکند! لطفاً دوباره در یک سرور امتحان کنید!",
|
||||||
"channelRename": "به دلیل محدودیتهای نرخ دیسکورد، ربات در حال حاضر نمیتواند نام کانال را تغییر دهد. اگر ربات ریاستارت نشود، نام کانال ظرف 10 دقیقه بهطور خودکار تغییر خواهد کرد.",
|
"channelRename":"به دلیل محدودیتهای نرخ دیسکورد، ربات در حال حاضر نمیتواند نام کانال را تغییر دهد. اگر ربات ریاستارت نشود، نام کانال ظرف 10 دقیقه بهطور خودکار تغییر خواهد کرد.",
|
||||||
"channelRenameSource": "منبع این خطا: {0}",
|
"channelCategory":"به دلیل محدودیتهای نرخ Discord، دستهبندی کانال فوراً قابل تغییر نیست. اگر ربات آنلاین بماند، طی 10 دقیقه بهصورت خودکار تغییر خواهد کرد.",
|
||||||
"busy": "امکان استفاده از این {0} وجود ندارد!\nتیکت در حال پردازش توسط ربات است.\n\nلطفاً چند ثانیه دیگر دوباره امتحان کنید!"
|
"channelRenameSource":"منبع این خطا: {0}",
|
||||||
|
"busy":"امکان استفاده از این {0} وجود ندارد!\nتیکت در حال پردازش توسط ربات است.\n\nلطفاً چند ثانیه دیگر دوباره امتحان کنید!",
|
||||||
|
"closeBeforeMessage":"این تیکت نمیتواند قبل از ارسال پیام توسط یک کاربر بسته/حذف شود.",
|
||||||
|
"closeBeforeAdminMessage":"این تیکت نمیتواند قبل از ارسال پیام توسط مدیر تیکت یا عضو پشتیبانی بسته/حذف شود.",
|
||||||
|
"unableToCreateTicket":"شما نمیتوانید تیکت ایجاد کنید.",
|
||||||
|
"messageMissing":"امکان یافتن پیام تعامل وجود ندارد. بهجای آن از دستور `{0}` استفاده کنید.",
|
||||||
|
"stateExpired":"این تعامل دیگر معتبر نیست یا منقضی شده است. بهجای آن از دستور `{0}` استفاده کنید. دریافت این خطا پس از بهروزرسانی بزرگ Open Ticket طبیعی است.",
|
||||||
|
"panelStateExpired":"این پنل دیگر معتبر نیست یا منقضی شده است. برای رفع مشکل، یک پنل جدید با استفاده از `{0}` ایجاد کنید. دریافت این خطا پس از بهروزرسانی بزرگ Open Ticket طبیعی است."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex": "مقدار با الگوی مورد نظر مطابقت ندارد!",
|
"stringRegex":"مقدار با الگوی مورد نظر مطابقت ندارد!",
|
||||||
"stringMinLength": "مقدار باید حداقل {0} کاراکتر باشد!",
|
"stringMinLength":"مقدار باید حداقل {0} کاراکتر باشد!",
|
||||||
"stringMaxLength": "مقدار باید حداکثر {0} کاراکتر باشد!",
|
"stringMaxLength":"مقدار باید حداکثر {0} کاراکتر باشد!",
|
||||||
"numberInvalid": "عدد نامعتبر است!",
|
"numberInvalid":"عدد نامعتبر است!",
|
||||||
"numberMin": "عدد باید حداقل {0} باشد!",
|
"numberMin":"عدد باید حداقل {0} باشد!",
|
||||||
"numberMax": "عدد باید حداکثر {0} باشد!",
|
"numberMax":"عدد باید حداکثر {0} باشد!",
|
||||||
"numberDecimal": "عدد نمیتواند اعشاری باشد!",
|
"numberDecimal":"عدد نمیتواند اعشاری باشد!",
|
||||||
"numberNegative": "عدد نمیتواند منفی باشد!",
|
"numberNegative":"عدد نمیتواند منفی باشد!",
|
||||||
"numberPositive": "عدد نمیتواند مثبت باشد!",
|
"numberPositive":"عدد نمیتواند مثبت باشد!",
|
||||||
"numberZero": "عدد نمیتواند صفر باشد!",
|
"numberZero":"عدد نمیتواند صفر باشد!",
|
||||||
"channelNotFound": "کانال یافت نشد!",
|
"channelNotFound":"کانال یافت نشد!",
|
||||||
"userNotFound": "کاربر یافت نشد!",
|
"userNotFound":"کاربر یافت نشد!",
|
||||||
"roleNotFound": "نقش یافت نشد!",
|
"roleNotFound":"نقش یافت نشد!",
|
||||||
"memberNotFound": "کاربر یافت نشد!",
|
"memberNotFound":"کاربر یافت نشد!",
|
||||||
"mentionableNotFound": "کاربر یا نقش یافت نشد!",
|
"mentionableNotFound":"کاربر یا نقش یافت نشد!",
|
||||||
"channelType": "نوع کانال نامعتبر است!",
|
"channelType":"نوع کانال نامعتبر است!",
|
||||||
"notInGuild": "این گزینه نیازمند حضور شما در یک سرور است!"
|
"notInGuild":"این گزینه نیازمند حضور شما در یک سرور است!"
|
||||||
},
|
},
|
||||||
"permissions":{
|
"permissions":{
|
||||||
"developer": "شما باید توسعهدهنده این ربات باشید.",
|
"developer":"شما باید توسعهدهنده این ربات باشید.",
|
||||||
"owner": "شما باید صاحب سرور باشید.",
|
"owner":"شما باید صاحب سرور باشید.",
|
||||||
"admin": "شما باید مدیر سرور باشید.",
|
"admin":"شما باید مدیر سرور باشید.",
|
||||||
"moderator": "شما باید ناظم (مدراتور) باشید.",
|
"moderator":"شما باید ناظم (مدراتور) باشید.",
|
||||||
"support": "شما باید عضو تیم پشتیبانی باشید.",
|
"support":"شما باید عضو تیم پشتیبانی باشید.",
|
||||||
"member": "شما باید عضو سرور باشید.",
|
"member":"شما باید عضو سرور باشید.",
|
||||||
"discord-administrator": "شما باید مجوز `ADMINISTRATOR` را داشته باشید."
|
"discord-administrator":"شما باید مجوز `ADMINISTRATOR` را داشته باشید."
|
||||||
},
|
},
|
||||||
"actionInvalid":{
|
"actionInvalid":{
|
||||||
"close": "تیکت قبلاً بسته شده است!",
|
"close":"تیکت قبلاً بسته شده است!",
|
||||||
"reopen": "تیکت هنوز بسته نشده است!",
|
"reopen":"تیکت هنوز بسته نشده است!",
|
||||||
"claim": "تیکت قبلاً اختصاص یافته است!",
|
"claim":"تیکت قبلاً اختصاص یافته است!",
|
||||||
"unclaim": "تیکت هنوز اختصاص نیافته است!",
|
"unclaim":"تیکت هنوز اختصاص نیافته است!",
|
||||||
"pin": "تیکت قبلاً پین شده است!",
|
"pin":"تیکت قبلاً پین شده است!",
|
||||||
"unpin": "تیکت هنوز پین نشده است!",
|
"unpin":"تیکت هنوز پین نشده است!",
|
||||||
"add": "این کاربر قبلاً به تیکت دسترسی دارد!",
|
"add":"این کاربر قبلاً به تیکت دسترسی دارد!",
|
||||||
"remove": "امکان حذف این کاربر از تیکت وجود ندارد!"
|
"remove":"امکان حذف این کاربر از تیکت وجود ندارد!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"params":{
|
"params":{
|
||||||
"uppercase":{
|
"uppercase":{
|
||||||
"ticket": "تیکت",
|
"ticket":"تیکت",
|
||||||
"tickets": "تیکتها",
|
"tickets":"تیکتها",
|
||||||
"reason": "دلیل",
|
"reason":"دلیل",
|
||||||
"creator": "ایجادکننده",
|
"creator":"ایجادکننده",
|
||||||
"remaining": "زمان باقیمانده",
|
"remaining":"زمان باقیمانده",
|
||||||
"added": "اضافهشده",
|
"added":"اضافهشده",
|
||||||
"removed": "حذفشده",
|
"removed":"حذفشده",
|
||||||
"filter": "فیلتر",
|
"filter":"فیلتر",
|
||||||
"claimedBy": "اختصاصیافته به {0}",
|
"method":"روش",
|
||||||
"method": "روش",
|
"type":"نوع",
|
||||||
"type": "نوع",
|
"blacklisted":"در لیست سیاه",
|
||||||
"blacklisted": "در لیست سیاه",
|
"panel":"پنل",
|
||||||
"panel": "پنل",
|
"command":"دستور",
|
||||||
"command": "دستور",
|
"system":"سیستم",
|
||||||
"system": "سیستم",
|
"true":"درست",
|
||||||
"true": "درست",
|
"false":"نادرست",
|
||||||
"false": "نادرست",
|
"syntax":"نحوه نگارش",
|
||||||
"syntax": "نحوه نگارش",
|
"originalName":"نام اصلی",
|
||||||
"originalName": "نام اصلی",
|
"newName":"نام جدید",
|
||||||
"newName": "نام جدید",
|
"originalCategory":"دستهبندی اصلی",
|
||||||
"until": "تا",
|
"newCategory":"دستهبندی جدید",
|
||||||
"validOptions": "گزینههای معتبر",
|
"until":"تا",
|
||||||
"validPanels": "پنلهای معتبر",
|
"validOptions":"گزینههای معتبر",
|
||||||
"autoclose": "بسته شدن خودکار",
|
"validPanels":"پنلهای معتبر",
|
||||||
"autodelete": "حذف خودکار",
|
"autoclose":"بسته شدن خودکار",
|
||||||
"startupDate": "تاریخ راهاندازی",
|
"autodelete":"حذف خودکار",
|
||||||
"version": "نسخه",
|
"startupDate":"تاریخ راهاندازی",
|
||||||
"name": "نام",
|
"version":"نسخه",
|
||||||
"role": "نقش",
|
"name":"نام",
|
||||||
"status": "وضعیت",
|
"role":"نقش",
|
||||||
"claimed": "اختصاصیافته",
|
"status":"وضعیت",
|
||||||
"pinned": "پینشده",
|
"claimed":"اختصاصیافته",
|
||||||
"creationDate": "تاریخ ایجاد"
|
"pinned":"پینشده",
|
||||||
|
"creationDate":"تاریخ ایجاد",
|
||||||
|
|
||||||
|
"noone":"هیچکس",
|
||||||
|
"open":"باز",
|
||||||
|
"closed":"بسته",
|
||||||
|
"priority":"اولویت",
|
||||||
|
"participants":"شرکتکنندگان",
|
||||||
|
"yes":"بله",
|
||||||
|
"no":"خیر",
|
||||||
|
"accept":"پذیرفتن",
|
||||||
|
"cancel":"لغو",
|
||||||
|
"option":"گزینه",
|
||||||
|
"topic":"موضوع",
|
||||||
|
"uptime":"زمان کار سیستم",
|
||||||
|
"messages":"پیامها",
|
||||||
|
"embeds":"امبدها",
|
||||||
|
"files":"فایلها",
|
||||||
|
"components":"کامپوننتها",
|
||||||
|
"cooldown":"زمان انتظار",
|
||||||
|
"maxTickets":"حداکثر تیکتها",
|
||||||
|
"admins":"مدیران",
|
||||||
|
"roles":"نقشها",
|
||||||
|
"size":"اندازه"
|
||||||
},
|
},
|
||||||
"lowercase":{
|
"lowercase":{
|
||||||
"text": "متن",
|
"text":"متن",
|
||||||
"html": "اچتیامال",
|
"html":"اچتیامال",
|
||||||
"command": "دستور",
|
"command":"دستور",
|
||||||
"modal": "پنجره بازشو",
|
"modal":"پنجره بازشو",
|
||||||
"button": "دکمه",
|
"button":"دکمه",
|
||||||
"dropdown": "منوی کشویی",
|
"dropdown":"منوی کشویی",
|
||||||
"method": "روش"
|
"method":"روش"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"commands":{
|
"commands":{
|
||||||
"reason": "یک دلیل اختیاری مشخص کنید که در لاگها قابل مشاهده خواهد بود.",
|
"reason":"یک دلیل اختیاری مشخص کنید که در لاگها قابل مشاهده خواهد بود.",
|
||||||
"help": "لیستی از تمام دستورات موجود را دریافت کنید.",
|
"help":"لیستی از تمام دستورات موجود را دریافت کنید.",
|
||||||
"panel": "یک پیام با منوی کشویی یا دکمهها ایجاد کنید (برای ساخت تیکت).",
|
"panel":"یک پیام با منوی کشویی یا دکمهها ایجاد کنید (برای ساخت تیکت).",
|
||||||
"panelId": "شناسه پنلی که میخواهید ایجاد کنید.",
|
"panelId":"شناسه پنلی که میخواهید ایجاد کنید.",
|
||||||
"panelAutoUpdate": "آیا میخواهید این پنل هنگام ویرایش بهصورت خودکار بهروزرسانی شود؟",
|
"panelAutoUpdate":"آیا میخواهید این پنل هنگام ویرایش بهصورت خودکار بهروزرسانی شود؟",
|
||||||
"ticket": "فوراً یک تیکت ایجاد کنید.",
|
"ticket":"فوراً یک تیکت ایجاد کنید.",
|
||||||
"ticketId": "شناسه تیکتی که میخواهید ایجاد کنید.",
|
"ticketId":"شناسه تیکتی که میخواهید ایجاد کنید.",
|
||||||
"close": "یک تیکت را ببندید.",
|
"ticketOtherUser":"برای کاربر دیگری یک تیکت ایجاد کنید.",
|
||||||
"delete": "یک تیکت را حذف کنید.",
|
"close":"یک تیکت را ببندید.",
|
||||||
"deleteNoTranscript": "این تیکت را بدون ایجاد رونوشت حذف کنید.",
|
"delete":"یک تیکت را حذف کنید.",
|
||||||
"reopen": "یک تیکت را دوباره باز کنید.",
|
"deleteNoTranscript":"این تیکت را بدون ایجاد رونوشت حذف کنید.",
|
||||||
"claim": "یک تیکت را به خود اختصاص دهید.",
|
"reopen":"یک تیکت را دوباره باز کنید.",
|
||||||
"claimUser": "این تیکت را به جای خودتان به شخص دیگری اختصاص دهید.",
|
"claim":"یک تیکت را به خود اختصاص دهید.",
|
||||||
"unclaim": "اختصاص یک تیکت را لغو کنید.",
|
"claimUser":"این تیکت را به جای خودتان به شخص دیگری اختصاص دهید.",
|
||||||
"pin": "یک تیکت را پین کنید.",
|
"unclaim":"اختصاص یک تیکت را لغو کنید.",
|
||||||
"unpin": "پین یک تیکت را لغو کنید.",
|
"pin":"یک تیکت را پین کنید.",
|
||||||
"move": "یک تیکت را منتقل کنید.",
|
"unpin":"پین یک تیکت را لغو کنید.",
|
||||||
"moveId": "شناسه گزینهای که میخواهید تیکت به آن منتقل شود.",
|
|
||||||
"rename": "نام یک تیکت را تغییر دهید.",
|
"move":"یک تیکت را منتقل کنید.",
|
||||||
"renameName": "نام جدید برای این تیکت.",
|
"moveId":"شناسه گزینهای که میخواهید تیکت به آن منتقل شود.",
|
||||||
"add": "یک کاربر را به تیکت اضافه کنید.",
|
"rename":"نام یک تیکت را تغییر دهید.",
|
||||||
"addUser": "کاربری که میخواهید اضافه کنید.",
|
"renameName":"نام جدید برای این تیکت.",
|
||||||
"remove": "یک کاربر را از تیکت حذف کنید.",
|
"add":"یک کاربر را به تیکت اضافه کنید.",
|
||||||
"removeUser": "کاربری که میخواهید حذف کنید.",
|
"addUser":"کاربری که میخواهید اضافه کنید.",
|
||||||
"blacklist": "لیست سیاه تیکتها را مدیریت کنید.",
|
"remove":"یک کاربر را از تیکت حذف کنید.",
|
||||||
"blacklistView": "لیستی از لیست سیاه کنونی را مشاهده کنید.",
|
"removeUser":"کاربری که میخواهید حذف کنید.",
|
||||||
"blacklistAdd": "یک کاربر را به لیست سیاه اضافه کنید.",
|
|
||||||
"blacklistRemove": "یک کاربر را از لیست سیاه حذف کنید.",
|
"blacklist":"لیست سیاه تیکتها را مدیریت کنید.",
|
||||||
"blacklistGet": "جزئیات یک کاربر در لیست سیاه را دریافت کنید.",
|
"blacklistView":"لیستی از لیست سیاه کنونی را مشاهده کنید.",
|
||||||
"blacklistGetUser": "کاربری که میخواهید جزئیاتش را دریافت کنید.",
|
"blacklistAdd":"یک کاربر را به لیست سیاه اضافه کنید.",
|
||||||
"stats": "آمار ربات، یک عضو یا یک تیکت را مشاهده کنید.",
|
"blacklistRemove":"یک کاربر را از لیست سیاه حذف کنید.",
|
||||||
"statsReset": "تمام آمار ربات را بازنشانی کنید (و شمارش را از صفر شروع کنید).",
|
"blacklistGet":"جزئیات یک کاربر در لیست سیاه را دریافت کنید.",
|
||||||
"statsGlobal": "آمار کلی را مشاهده کنید.",
|
"blacklistGetUser":"کاربری که میخواهید جزئیاتش را دریافت کنید.",
|
||||||
"statsUser": "آمار یک کاربر در سرور را مشاهده کنید.",
|
"stats":"آمار ربات، یک عضو یا یک تیکت را مشاهده کنید.",
|
||||||
"statsUserUser": "کاربری که میخواهید آمارش را مشاهده کنید.",
|
"statsReset":"تمام آمار ربات را بازنشانی کنید (و شمارش را از صفر شروع کنید).",
|
||||||
"statsTicket": "آمار یک تیکت در سرور را مشاهده کنید.",
|
"statsGlobal":"آمار کلی را مشاهده کنید.",
|
||||||
"statsTicketTicket": "تیکتی که میخواهید آمارش را مشاهده کنید.",
|
"statsUser":"آمار یک کاربر در سرور را مشاهده کنید.",
|
||||||
"clear": "چندین تیکت را بهصورت همزمان حذف کنید.",
|
"statsUserUser":"کاربری که میخواهید آمارش را مشاهده کنید.",
|
||||||
"clearFilter": "فیلتر برای حذف تیکتها.",
|
"statsTicket":"آمار یک تیکت در سرور را مشاهده کنید.",
|
||||||
"clearFilters": {
|
"statsTicketTicket":"تیکتی که میخواهید آمارش را مشاهده کنید.",
|
||||||
"all": "همه",
|
|
||||||
"open": "باز",
|
"clear":"چندین تیکت را بهصورت همزمان حذف کنید.",
|
||||||
"close": "بسته",
|
"clearFilter":"فیلتر برای حذف تیکتها.",
|
||||||
"claim": "اختصاصیافته",
|
"clearFilters":{
|
||||||
"unclaim": "بدون اختصاص",
|
"all":"همه",
|
||||||
"pin": "پینشده",
|
"open":"باز",
|
||||||
"unpin": "بدون پین",
|
"close":"بسته",
|
||||||
"autoclose": "بستهشده خودکار"
|
"claim":"اختصاصیافته",
|
||||||
|
"unclaim":"بدون اختصاص",
|
||||||
|
"pin":"پینشده",
|
||||||
|
"unpin":"بدون پین",
|
||||||
|
"autoclose":"بستهشده خودکار"
|
||||||
},
|
},
|
||||||
"autoclose": "مدیریت بسته شدن خودکار در یک تیکت.",
|
|
||||||
"autocloseDisable": "غیرفعال کردن بسته شدن خودکار در این تیکت.",
|
"autoclose":"مدیریت بسته شدن خودکار در یک تیکت.",
|
||||||
"autocloseEnable": "فعال کردن بسته شدن خودکار در این تیکت.",
|
"autocloseDisable":"غیرفعال کردن بسته شدن خودکار در این تیکت.",
|
||||||
"autocloseEnableTime": "تعداد ساعاتی که این تیکت باید غیرفعال باشد تا بسته شود.",
|
"autocloseEnable":"فعال کردن بسته شدن خودکار در این تیکت.",
|
||||||
"autodelete": "مدیریت حذف خودکار در یک تیکت.",
|
"autocloseEnableTime":"تعداد ساعاتی که این تیکت باید غیرفعال باشد تا بسته شود.",
|
||||||
"autodeleteDisable": "غیرفعال کردن حذف خودکار در این تیکت.",
|
"autodelete":"مدیریت حذف خودکار در یک تیکت.",
|
||||||
"autodeleteEnable": "فعال کردن حذف خودکار در این تیکت.",
|
"autodeleteDisable":"غیرفعال کردن حذف خودکار در این تیکت.",
|
||||||
"autodeleteEnableTime": "تعداد روزهایی که این تیکت باید غیرفعال باشد تا حذف شود."
|
"autodeleteEnable":"فعال کردن حذف خودکار در این تیکت.",
|
||||||
|
"autodeleteEnableTime":"تعداد روزهایی که این تیکت باید غیرفعال باشد تا حذف شود.",
|
||||||
|
|
||||||
|
"topic":"مدیریت موضوع کانال تیکت.",
|
||||||
|
"topicSet":"تنظیم موضوع کانال تیکت.",
|
||||||
|
"topicValue":"موضوع جدید کانال.",
|
||||||
|
"topicList":"دریافت لیست تمام تیکتها همراه با موضوع و آمار آنها.",
|
||||||
|
"priority":"مدیریت اولویت تیکت.",
|
||||||
|
"prioritySet":"تنظیم اولویت تیکت.",
|
||||||
|
"priorityValue":"اولویت کانال.",
|
||||||
|
"priorityGet":"دریافت اولویت تیکت.",
|
||||||
|
"priorityList":"دریافت لیست تمام تیکتها همراه با وضعیت اولویت آنها.",
|
||||||
|
"transfer":"انتقال مالکیت تیکت از یک کاربر به کاربر دیگر.",
|
||||||
|
"transferUser":"کاربری که باید به او منتقل شود.",
|
||||||
|
"transcripts":"مشاهده تاریخچه رونوشت تیکتهای یک کاربر.",
|
||||||
|
"transcriptsUser":"کاربر برای مشاهده."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help": "لیستی از تمام دستورات موجود را دریافت کنید.",
|
"help":"لیستی از تمام دستورات موجود را دریافت کنید.",
|
||||||
"ticket": "فوراً یک تیکت ایجاد کنید.",
|
"ticket":"فوراً یک تیکت ایجاد کنید.",
|
||||||
"close": "یک تیکت را ببندید، این کار نوشتن در این کانال را غیرفعال میکند.",
|
"close":"یک تیکت را ببندید، این کار نوشتن در این کانال را غیرفعال میکند.",
|
||||||
"delete": "یک تیکت را حذف کنید، این کار در صورت فعال بودن، یک رونوشت ایجاد میکند.",
|
"delete":"یک تیکت را حذف کنید، این کار در صورت فعال بودن، یک رونوشت ایجاد میکند.",
|
||||||
"reopen": "یک تیکت را دوباره باز کنید، این کار نوشتن در این کانال را دوباره فعال میکند.",
|
"reopen":"یک تیکت را دوباره باز کنید، این کار نوشتن در این کانال را دوباره فعال میکند.",
|
||||||
"pin": "یک تیکت را پین کنید. این کار تیکت را به بالای لیست منتقل میکند و ایموجی '📌' به نام آن اضافه میشود.",
|
"pin":"یک تیکت را پین کنید. این کار تیکت را به بالای لیست منتقل میکند و ایموجی '📌' به نام آن اضافه میشود.",
|
||||||
"unpin": "پین یک تیکت را لغو کنید. تیکت در جایگاه فعلی خود باقی میماند اما ایموجی '📌' از نام آن حذف میشود.",
|
"unpin":"پین یک تیکت را لغو کنید. تیکت در جایگاه فعلی خود باقی میماند اما ایموجی '📌' از نام آن حذف میشود.",
|
||||||
"move": "یک تیکت را منتقل کنید. این کار نوع تیکت را تغییر میدهد.",
|
"move":"یک تیکت را منتقل کنید. این کار نوع تیکت را تغییر میدهد.",
|
||||||
"rename": "نام یک تیکت را تغییر دهید. این کار نام کانال تیکت را تغییر میدهد.",
|
"rename":"نام یک تیکت را تغییر دهید. این کار نام کانال تیکت را تغییر میدهد.",
|
||||||
"claim": "یک تیکت را به خود اختصاص دهید. با این کار به تیم خود اطلاع میدهید که شما این تیکت را مدیریت میکنید.",
|
"claim":"یک تیکت را به خود اختصاص دهید. با این کار به تیم خود اطلاع میدهید که شما این تیکت را مدیریت میکنید.",
|
||||||
"unclaim": "اختصاص یک تیکت را لغو کنید. با این کار به تیم خود اطلاع میدهید که این تیکت دوباره آزاد است.",
|
"unclaim":"اختصاص یک تیکت را لغو کنید. با این کار به تیم خود اطلاع میدهید که این تیکت دوباره آزاد است.",
|
||||||
"add": "یک کاربر را به تیکت اضافه کنید. این کار به کاربر امکان خواندن و نوشتن در تیکت را میدهد.",
|
"add":"یک کاربر را به تیکت اضافه کنید. این کار به کاربر امکان خواندن و نوشتن در تیکت را میدهد.",
|
||||||
"remove": "یک کاربر را از تیکت حذف کنید. این کار امکان خواندن و نوشتن کاربر در تیکت را حذف میکند.",
|
"remove":"یک کاربر را از تیکت حذف کنید. این کار امکان خواندن و نوشتن کاربر در تیکت را حذف میکند.",
|
||||||
"panel": "یک پیام با منوی کشویی یا دکمهها ایجاد کنید (برای ساخت تیکت).",
|
"panel":"یک پیام با منوی کشویی یا دکمهها ایجاد کنید (برای ساخت تیکت).",
|
||||||
"blacklistView": "لیستی از لیست سیاه کنونی را مشاهده کنید.",
|
"blacklistView":"لیستی از لیست سیاه کنونی را مشاهده کنید.",
|
||||||
"blacklistAdd": "یک کاربر را به لیست سیاه اضافه کنید.",
|
"blacklistAdd":"یک کاربر را به لیست سیاه اضافه کنید.",
|
||||||
"blacklistRemove": "یک کاربر را از لیست سیاه حذف کنید.",
|
"blacklistRemove":"یک کاربر را از لیست سیاه حذف کنید.",
|
||||||
"blacklistGet": "جزئیات یک کاربر در لیست سیاه را دریافت کنید.",
|
"blacklistGet":"جزئیات یک کاربر در لیست سیاه را دریافت کنید.",
|
||||||
"statsGlobal": "آمار کلی را مشاهده کنید.",
|
"statsGlobal":"آمار کلی را مشاهده کنید.",
|
||||||
"statsTicket": "آمار یک تیکت در سرور را مشاهده کنید.",
|
"statsTicket":"آمار یک تیکت در سرور را مشاهده کنید.",
|
||||||
"statsUser": "آمار یک کاربر در سرور را مشاهده کنید.",
|
"statsUser":"آمار یک کاربر در سرور را مشاهده کنید.",
|
||||||
"statsReset": "تمام آمار ربات را بازنشانی کنید (و شمارش را از صفر شروع کنید).",
|
"statsReset":"تمام آمار ربات را بازنشانی کنید (و شمارش را از صفر شروع کنید).",
|
||||||
"autocloseDisable": "بسته شدن خودکار را در این تیکت غیرفعال کنید.",
|
"autocloseDisable":"بسته شدن خودکار را در این تیکت غیرفعال کنید.",
|
||||||
"autocloseEnable": "بسته شدن خودکار را در این تیکت فعال کنید.",
|
"autocloseEnable":"بسته شدن خودکار را در این تیکت فعال کنید.",
|
||||||
"autodeleteDisable": "حذف خودکار را در این تیکت غیرفعال کنید.",
|
"autodeleteDisable":"حذف خودکار را در این تیکت غیرفعال کنید.",
|
||||||
"autodeleteEnable": "حذف خودکار را در این تیکت فعال کنید."
|
"autodeleteEnable":"حذف خودکار را در این تیکت فعال کنید.",
|
||||||
|
"categories":{
|
||||||
|
"general":"دستورات عمومی",
|
||||||
|
"basicTicket":"دستورات پایه تیکت",
|
||||||
|
"advancedTicket":"دستورات پیشرفته تیکت",
|
||||||
|
"userTicket":"دستورات تیکت کاربر",
|
||||||
|
"admin":"دستورات مدیر",
|
||||||
|
"advanced":"دستورات پیشرفته",
|
||||||
|
"extra":"دستورات اضافی"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
"global": "آمار کلی",
|
"global":"آمار کلی",
|
||||||
"system": "آمار سیستم",
|
"system":"آمار سیستم",
|
||||||
"user": "آمار کاربر",
|
"user":"آمار کاربر",
|
||||||
"ticket": "آمار تیکت",
|
"ticket":"آمار تیکت",
|
||||||
"participants": "مشارکتکنندگان"
|
"participants":"مشارکتکنندگان",
|
||||||
|
"messages":"پیامها"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated": "تیکتهای ایجادشده",
|
"ticketsCreated":"تیکتهای ایجادشده",
|
||||||
"ticketsClosed": "تیکتهای بستهشده",
|
"ticketsClosed":"تیکتهای بستهشده",
|
||||||
"ticketsDeleted": "تیکتهای حذفشده",
|
"ticketsDeleted":"تیکتهای حذفشده",
|
||||||
"ticketsReopened": "تیکتهای دوباره بازشده",
|
"ticketsReopened":"تیکتهای دوباره بازشده",
|
||||||
"ticketsAutoclosed": "تیکتهای بستهشده خودکار",
|
"ticketsAutoclosed":"تیکتهای بستهشده خودکار",
|
||||||
"ticketsClaimed": "تیکتهای اختصاص یافته",
|
"ticketsClaimed":"تیکتهای اختصاص یافته",
|
||||||
"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":"گزینه خود را انتخاب کنید",
|
||||||
|
"selectPriorityLevel":"انتخاب سطح اولویت"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"فوری",
|
||||||
|
"veryHigh":"خیلی بالا",
|
||||||
|
"high":"بالا",
|
||||||
|
"normal":"معمولی",
|
||||||
|
"low":"پایین",
|
||||||
|
"veryLow":"خیلی پایین",
|
||||||
|
"none":"هیچ"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+480
-330
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["DanoGlez"],
|
"translators":["DanoGlez"],
|
||||||
"lastedited":"28/01/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Polish",
|
"language":"Polish",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,6 +31,14 @@
|
|||||||
"stringContains":"Ten tekst musi zawierać {0}!",
|
"stringContains":"Ten tekst musi zawierać {0}!",
|
||||||
"stringChoices":"Ten tekst może być tylko jednym z następujących wartości: {0}!",
|
"stringChoices":"Ten tekst może być tylko jednym z następujących wartości: {0}!",
|
||||||
"stringRegex":"Ten tekst jest nieprawidłowy!",
|
"stringRegex":"Ten tekst jest nieprawidłowy!",
|
||||||
|
"stringInvertedContains":"Ten ciąg nie może zawierać {0}!",
|
||||||
|
"stringLowercase":"Ten ciąg musi być napisany wyłącznie małymi literami!",
|
||||||
|
"stringUppercase":"Ten ciąg musi być napisany wyłącznie wielkimi literami!",
|
||||||
|
"stringSpecialCharacters":"Ten ciąg nie może zawierać znaków specjalnych! (tylko a-z, 0-9 i spacja)",
|
||||||
|
"stringNoSpaces":"Ten ciąg nie może zawierać spacji!",
|
||||||
|
"stringCapitalWord":"Zaleca się, aby każde słowo w tym ciągu zaczynało się wielką literą!",
|
||||||
|
"stringCapitalSentence":"Wygląda na to, że niektóre zdania w tym ciągu nie zaczynają się wielką literą!",
|
||||||
|
"stringPunctuation":"Wygląda na to, że zdanie w tym ciągu nie kończy się znakiem interpunkcyjnym!",
|
||||||
|
|
||||||
"numberTooShort":"Ta liczba nie może być krótsza niż {0} znaków!",
|
"numberTooShort":"Ta liczba nie może być krótsza niż {0} znaków!",
|
||||||
"numberTooLong":"Ta liczba nie może być dłuższa niż {0} znaków!",
|
"numberTooLong":"Ta liczba nie może być dłuższa niż {0} znaków!",
|
||||||
@@ -48,6 +56,8 @@
|
|||||||
"numberNegative":"Ta liczba nie może być ujemna!",
|
"numberNegative":"Ta liczba nie może być ujemna!",
|
||||||
"numberPositive":"Ta liczba nie może być dodatnia!",
|
"numberPositive":"Ta liczba nie może być dodatnia!",
|
||||||
"numberZero":"Ta liczba nie może wynosić zero!",
|
"numberZero":"Ta liczba nie może wynosić zero!",
|
||||||
|
"numberNan":"Ta liczba nie może być NaN (nie liczba)!",
|
||||||
|
"numberInvertedContains":"Ta liczba nie może zawierać {0}!",
|
||||||
|
|
||||||
"booleanTrue":"Ta wartość logiczna nie może być prawdziwa!",
|
"booleanTrue":"Ta wartość logiczna nie może być prawdziwa!",
|
||||||
"booleanFalse":"Ta wartość logiczna nie może być fałszywa!",
|
"booleanFalse":"Ta wartość logiczna nie może być fałszywa!",
|
||||||
@@ -89,7 +99,8 @@
|
|||||||
"invalidButton":"Ten przycisk musi zawierać co najmniej {0} lub {1}!",
|
"invalidButton":"Ten przycisk musi zawierać co najmniej {0} lub {1}!",
|
||||||
"unusedOption":"Opcja {0} nie jest nigdzie używana!",
|
"unusedOption":"Opcja {0} nie jest nigdzie używana!",
|
||||||
"unusedQuestion":"Pytanie {0} nie jest nigdzie używane!",
|
"unusedQuestion":"Pytanie {0} nie jest nigdzie używane!",
|
||||||
"dropdownOption":"Panel z włączonym rozwijanym menu może zawierać tylko opcje typu 'ticket'!"
|
"dropdownOption":"Panel z rozwijanym menu może zawierać tylko opcje typu: 'ticket', 'role' lub 'sub-panel'.",
|
||||||
|
"customInvalidVersion":"Wersja określona w konfiguracji nie pasuje! Upewnij się, że zaktualizowałeś konfigurację do najnowszej wersji!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -107,7 +118,9 @@
|
|||||||
"helpSwitchText":"Pokaż Komendy Tekstowe",
|
"helpSwitchText":"Pokaż Komendy Tekstowe",
|
||||||
"helpPage":"Strona {0}",
|
"helpPage":"Strona {0}",
|
||||||
"withReason":"Z Powodem",
|
"withReason":"Z Powodem",
|
||||||
"withoutTranscript":"Bez Transkrypcji"
|
"withoutTranscript":"Bez Transkrypcji",
|
||||||
|
"blacklistAdd":"Dodaj Użytkownika do Czarnej Listy",
|
||||||
|
"blacklistRemove":"Zwolnij Użytkownika"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket Utworzony",
|
"created":"Ticket Utworzony",
|
||||||
@@ -132,6 +145,7 @@
|
|||||||
"blacklistAddDm":"Dodano do Listy Zablokowanych",
|
"blacklistAddDm":"Dodano do Listy Zablokowanych",
|
||||||
"blacklistRemoveDm":"Usunięto z Listy Zablokowanych",
|
"blacklistRemoveDm":"Usunięto z Listy Zablokowanych",
|
||||||
"clear":"Tickety Usunięte",
|
"clear":"Tickety Usunięte",
|
||||||
|
"clearTickets":"Wyczyść Tiki",
|
||||||
"roles":"Role Zaktualizowane",
|
"roles":"Role Zaktualizowane",
|
||||||
|
|
||||||
"autoclose":"Ticket Automatycznie Zamknięty",
|
"autoclose":"Ticket Automatycznie Zamknięty",
|
||||||
@@ -139,340 +153,476 @@
|
|||||||
"autocloseDisabled":"Automatyczne Zamknięcie Wyłączone",
|
"autocloseDisabled":"Automatyczne Zamknięcie Wyłączone",
|
||||||
"autodelete":"Ticket Automatycznie Usunięty",
|
"autodelete":"Ticket Automatycznie Usunięty",
|
||||||
"autodeleteEnabled":"Automatyczne Usuwanie Włączone",
|
"autodeleteEnabled":"Automatyczne Usuwanie Włączone",
|
||||||
"autodeleteDisabled":"Automatyczne Usuwanie Wyłączone"
|
"autodeleteDisabled":"Automatyczne Usuwanie Wyłączone",
|
||||||
|
|
||||||
|
"topicSet":"Temat Zmieniony",
|
||||||
|
"prioritySet":"Priorytet Zmieniony",
|
||||||
|
"priorityGet":"Priorytet Tiku",
|
||||||
|
"transfer":"Tik przeniesiony",
|
||||||
|
"transcripts":"Historia Transkrypcji"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Twój ticket został utworzony. Kliknij poniższy przycisk, aby go otworzyć!",
|
"create":"Twój ticket został utworzony. Kliknij poniższy przycisk, aby go otworzyć!",
|
||||||
"close":"Ticket został pomyślnie zamknięty!",
|
"close":"Ticket został pomyślnie zamknięty!",
|
||||||
"delete":"Ticket został pomyślnie usunięty!",
|
"delete":"Ticket został pomyślnie usunięty!",
|
||||||
"reopen":"Ticket został pomyślnie ponownie otwarty!",
|
"reopen":"Ticket został pomyślnie ponownie otwarty!",
|
||||||
"claim":"Ticket został pomyślnie przypisany!",
|
"claim":"Ticket został pomyślnie przypisany!",
|
||||||
"unclaim":"Ticket został pomyślnie odpisany!",
|
"unclaim":"Ticket został pomyślnie odpisany!",
|
||||||
"pin":"Ticket został pomyślnie przypięty!",
|
"pin":"Ticket został pomyślnie przypięty!",
|
||||||
"unpin":"Ticket został pomyślnie odpięty!",
|
"unpin":"Ticket został pomyślnie odpięty!",
|
||||||
"rename":"Ticket został pomyślnie przemianowany na {0}!",
|
"rename":"Ticket został pomyślnie przemianowany na {0}!",
|
||||||
"move":"Ticket został pomyślnie przeniesiony do {0}!",
|
"move":"Ticket został pomyślnie przeniesiony do {0}!",
|
||||||
"add":"{0} został pomyślnie dodany do ticketa!",
|
"add":"{0} został pomyślnie dodany do ticketa!",
|
||||||
"remove":"{0} został pomyślnie usunięty z ticketa!",
|
"remove":"{0} został pomyślnie usunięty z ticketa!",
|
||||||
|
|
||||||
"helpExplanation":"`<name>` => wymagany parametr\n`[name]` => opcjonalny parametr",
|
"helpExplanation":"`<name>` => wymagany parametr\n`[name]` => opcjonalny parametr",
|
||||||
"statsReset":"Statystyki bota zostały pomyślnie zresetowane!",
|
"statsReset":"Statystyki bota zostały pomyślnie zresetowane!",
|
||||||
"statsError":"Nie można wyświetlić statystyk ticketa!\n{0} nie jest ticketem!",
|
"statsError":"Nie można wyświetlić statystyk ticketa!\n{0} nie jest ticketem!",
|
||||||
"blacklistAdd":"{0} został pomyślnie dodany do czarnej listy!",
|
"blacklistAdd":"{0} został pomyślnie dodany do czarnej listy!",
|
||||||
"blacklistRemove":"{0} został pomyślnie usunięty z czarnej listy!",
|
"blacklistRemove":"{0} został pomyślnie usunięty z czarnej listy!",
|
||||||
"blacklistGetSuccess":"{0} jest obecnie na czarnej liście!",
|
"blacklistGetSuccess":"{0} jest obecnie na czarnej liście!",
|
||||||
"blacklistGetEmpty":"{0} nie znajduje się obecnie na czarnej liście!",
|
"blacklistGetEmpty":"{0} nie znajduje się obecnie na czarnej liście!",
|
||||||
"blacklistViewEmpty":"Nikt nie został jeszcze dodany do czarnej listy!",
|
"blacklistViewEmpty":"Nikt nie został jeszcze dodany do czarnej listy!",
|
||||||
"blacklistViewTip":"Użyj \"/blacklist add\", aby dodać użytkownika do czarnej listy!",
|
"blacklistViewTip":"Użyj \"/blacklist add\", aby dodać użytkownika do czarnej listy!",
|
||||||
"clearVerify":"Czy na pewno chcesz usunąć wiele ticketów?\nTej operacji nie można cofnąć!",
|
"clearVerify":"Czy na pewno chcesz usunąć wiele ticketów?\nTej operacji nie można cofnąć!",
|
||||||
"clearReady":"{0} ticketów zostało pomyślnie usuniętych!",
|
"clearReady":"{0} ticketów zostało pomyślnie usuniętych!",
|
||||||
"rolesEmpty":"Nie zaktualizowano żadnych ról!",
|
"rolesEmpty":"Nie zaktualizowano żadnych ról!",
|
||||||
|
|
||||||
"autocloseLeave":"Ten ticket został automatycznie zamknięty, ponieważ jego twórca opuścił serwer!",
|
"autocloseLeave":"Ten ticket został automatycznie zamknięty, ponieważ jego twórca opuścił serwer!",
|
||||||
"autocloseTimeout":"Ten ticket został automatycznie zamknięty z powodu braku aktywności przez więcej niż `{0}h`!",
|
"autocloseTimeout":"Ten ticket został automatycznie zamknięty z powodu braku aktywności przez więcej niż `{0}h`!",
|
||||||
"autodeleteLeave":"Ten ticket został automatycznie usunięty, ponieważ jego twórca opuścił serwer!",
|
"autodeleteLeave":"Ten ticket został automatycznie usunięty, ponieważ jego twórca opuścił serwer!",
|
||||||
"autodeleteTimeout":"Ten ticket został automatycznie usunięty z powodu braku aktywności przez więcej niż `{0} dni`!",
|
"autodeleteTimeout":"Ten ticket został automatycznie usunięty z powodu braku aktywności przez więcej niż `{0} dni`!",
|
||||||
"autocloseEnabled":"Autoczynność została włączona w tym tickecie!\nZostanie on zamknięty, jeśli będzie nieaktywny przez więcej niż `{0}h`!",
|
"autocloseEnabled":"Autoczynność została włączona w tym tickecie!\nZostanie on zamknięty, jeśli będzie nieaktywny przez więcej niż `{0}h`!",
|
||||||
"autocloseDisabled":"Autoczynność została wyłączona w tym tickecie!\nNie będzie on już zamykany automatycznie!",
|
"autocloseDisabled":"Autoczynność została wyłączona w tym tickecie!\nNie będzie on już zamykany automatycznie!",
|
||||||
"autodeleteEnabled":"Autousuwanie zostało włączone w tym tickecie!\nZostanie on usunięty, jeśli będzie nieaktywny przez więcej niż `{0} dni`!",
|
"autodeleteEnabled":"Autousuwanie zostało włączone w tym tickecie!\nZostanie on usunięty, jeśli będzie nieaktywny przez więcej niż `{0} dni`!",
|
||||||
"autodeleteDisabled":"Autousuwanie zostało wyłączone w tym tickecie!\nNie będzie on już usuwany automatycznie!",
|
"autodeleteDisabled":"Autousuwanie zostało wyłączone w tym tickecie!\nNie będzie on już usuwany automatycznie!",
|
||||||
|
|
||||||
"ticketMessageLimit":"Możesz utworzyć maksymalnie {0} ticket(y) jednocześnie!",
|
"ticketMessageLimit":"Możesz utworzyć maksymalnie {0} ticket(y) jednocześnie!",
|
||||||
"ticketMessageAutoclose":"Ten ticket zostanie automatycznie zamknięty, jeśli będzie nieaktywny przez {0}h!",
|
"ticketMessageAutoclose":"Ten ticket zostanie automatycznie zamknięty, jeśli będzie nieaktywny przez {0}h!",
|
||||||
"ticketMessageAutodelete":"Ten ticket zostanie automatycznie usunięty, jeśli będzie nieaktywny przez {0} dni!",
|
"ticketMessageAutodelete":"Ten ticket zostanie automatycznie usunięty, jeśli będzie nieaktywny przez {0} dni!",
|
||||||
"panelReady":"Panel znajduje się poniżej!\nTeraz możesz usunąć tę wiadomość!"
|
"panelReady":"Panel jest dostępny w wiadomości następczej!\nTa wiadomość może teraz zostać usunięta!",
|
||||||
},
|
|
||||||
"modal":{
|
|
||||||
"closePlaceholder":"Dlaczego zamknąłeś ten ticket?",
|
|
||||||
"deletePlaceholder":"Dlaczego usunąłeś ten ticket?",
|
|
||||||
"reopenPlaceholder":"Dlaczego ponownie otworzyłeś ten ticket?",
|
|
||||||
"claimPlaceholder":"Dlaczego przypisałeś ten ticket?",
|
|
||||||
"unclaimPlaceholder":"Dlaczego odpisano ten ticket?",
|
|
||||||
"pinPlaceholder":"Dlaczego przypiąłeś ten ticket?",
|
|
||||||
"unpinPlaceholder":"Dlaczego odpiąłeś ten ticket?"
|
|
||||||
},
|
|
||||||
"logs":{
|
|
||||||
"createLog":"Nowy ticket został utworzony przez {0}!",
|
|
||||||
"closeLog":"Ten ticket został zamknięty przez {0}!",
|
|
||||||
"closeDm":"Twój ticket został zamknięty na naszym serwerze!",
|
|
||||||
"deleteLog":"Ten ticket został usunięty przez {0}!",
|
|
||||||
"deleteDm":"Twój ticket został usunięty na naszym serwerze!",
|
|
||||||
"reopenLog":"Ten ticket został ponownie otwarty przez {0}!",
|
|
||||||
"reopenDm":"Twój ticket został ponownie otwarty na naszym serwerze!",
|
|
||||||
"claimLog":"Ten ticket został przypisany przez {0}!",
|
|
||||||
"claimDm":"Twój ticket został przypisany na naszym serwerze!",
|
|
||||||
"unclaimLog":"Ten ticket został odpisany przez {0}!",
|
|
||||||
"unclaimDm":"Twój ticket został odpisany na naszym serwerze!",
|
|
||||||
"pinLog":"Ten ticket został przypięty przez {0}!",
|
|
||||||
"pinDm":"Twój ticket został przypięty na naszym serwerze!",
|
|
||||||
"unpinLog":"Ten ticket został odpięty przez {0}!",
|
|
||||||
"unpinDm":"Twój ticket został odpięty na naszym serwerze!",
|
|
||||||
"renameLog":"Ten ticket został przemianowany na {0} przez {1}!",
|
|
||||||
"renameDm":"Twój ticket został przemianowany na {0} na naszym serwerze!",
|
|
||||||
"moveLog":"Ten ticket został przeniesiony do {0} przez {1}!",
|
|
||||||
"moveDm":"Twój ticket został przeniesiony do {0} na naszym serwerze!",
|
|
||||||
"addLog":"{0} został dodany do tego ticketa przez {1}!",
|
|
||||||
"addDm":"{0} został dodany do twojego ticketa na naszym serwerze!",
|
|
||||||
"removeLog":"{0} został usunięty z tego ticketa przez {1}!",
|
|
||||||
"removeDm":"{0} został usunięty z twojego ticketa na naszym serwerze!",
|
|
||||||
|
|
||||||
"blacklistAddLog":"{0} został dodany do czarnej listy przez {1}!",
|
"topicSet":"Temat kanału został pomyślnie zmieniony przez {0}!",
|
||||||
"blacklistRemoveLog":"{0} został usunięty z czarnej listy przez {1}!",
|
"prioritySet":"Priorytet tiku został pomyślnie zmieniony na {0} przez {1}!",
|
||||||
"blacklistAddDm":"Zostałeś dodany do czarnej listy na naszym serwerze!\nOd teraz nie możesz tworzyć ticketów!",
|
"priorityGet":"Aktualny priorytet tego tiku to {0}.",
|
||||||
"blacklistRemoveDm":"Zostałeś usunięty z czarnej listy na naszym serwerze!\nTeraz możesz ponownie tworzyć tickety!",
|
"transfer":"Własność tiku została pomyślnie przeniesiona z {0} do {1} przez {2}!"
|
||||||
"clearLog":"{0} ticketów zostało usuniętych przez {1}!"
|
},
|
||||||
}
|
"modal":{
|
||||||
|
"closePlaceholder":"Dlaczego zamknąłeś ten ticket?",
|
||||||
|
"deletePlaceholder":"Dlaczego usunąłeś ten ticket?",
|
||||||
|
"reopenPlaceholder":"Dlaczego ponownie otworzyłeś ten ticket?",
|
||||||
|
"claimPlaceholder":"Dlaczego przypisałeś ten ticket?",
|
||||||
|
"unclaimPlaceholder":"Dlaczego odpisano ten ticket?",
|
||||||
|
"pinPlaceholder":"Dlaczego przypiąłeś ten ticket?",
|
||||||
|
"unpinPlaceholder":"Dlaczego odpiąłeś ten ticket?"
|
||||||
|
},
|
||||||
|
"logs":{
|
||||||
|
"createLog":"Nowy ticket został utworzony przez {0}!",
|
||||||
|
"closeLog":"Ten ticket został zamknięty przez {0}!",
|
||||||
|
"closeDm":"Twój ticket został zamknięty na naszym serwerze!",
|
||||||
|
"deleteLog":"Ten ticket został usunięty przez {0}!",
|
||||||
|
"deleteDm":"Twój ticket został usunięty na naszym serwerze!",
|
||||||
|
"reopenLog":"Ten ticket został ponownie otwarty przez {0}!",
|
||||||
|
"reopenDm":"Twój ticket został ponownie otwarty na naszym serwerze!",
|
||||||
|
"claimLog":"Ten ticket został przypisany przez {0}!",
|
||||||
|
"claimDm":"Twój ticket został przypisany na naszym serwerze!",
|
||||||
|
"unclaimLog":"Ten ticket został odpisany przez {0}!",
|
||||||
|
"unclaimDm":"Twój ticket został odpisany na naszym serwerze!",
|
||||||
|
"pinLog":"Ten ticket został przypięty przez {0}!",
|
||||||
|
"pinDm":"Twój ticket został przypięty na naszym serwerze!",
|
||||||
|
"unpinLog":"Ten ticket został odpięty przez {0}!",
|
||||||
|
"unpinDm":"Twój ticket został odpięty na naszym serwerze!",
|
||||||
|
"renameLog":"Ten ticket został przemianowany na {0} przez {1}!",
|
||||||
|
"renameDm":"Twój ticket został przemianowany na {0} na naszym serwerze!",
|
||||||
|
"moveLog":"Ten ticket został przeniesiony do {0} przez {1}!",
|
||||||
|
"moveDm":"Twój ticket został przeniesiony do {0} na naszym serwerze!",
|
||||||
|
"addLog":"{0} został dodany do tego ticketa przez {1}!",
|
||||||
|
"addDm":"{0} został dodany do twojego ticketa na naszym serwerze!",
|
||||||
|
"removeLog":"{0} został usunięty z tego ticketa przez {1}!",
|
||||||
|
"removeDm":"{0} został usunięty z twojego ticketa na naszym serwerze!",
|
||||||
|
|
||||||
|
"blacklistAddLog":"{0} został dodany do czarnej listy przez {1}!",
|
||||||
|
"blacklistRemoveLog":"{0} został usunięty z czarnej listy przez {1}!",
|
||||||
|
"blacklistAddDm":"Zostałeś dodany do czarnej listy na naszym serwerze!\nOd teraz nie możesz tworzyć ticketów!",
|
||||||
|
"blacklistRemoveDm":"Zostałeś usunięty z czarnej listy na naszym serwerze!\nTeraz możesz ponownie tworzyć tickety!",
|
||||||
|
"clearLog":"{0} ticketów zostało usuniętych przez {1}!",
|
||||||
|
|
||||||
|
"transferLog":"Własność tego tiku została przeniesiona z {0} do {1} przez {2}!",
|
||||||
|
"transferDm":"Własność twojego tiku została przeniesiona z {0} do {1} na naszym serwerze!",
|
||||||
|
"prioritySetLog":"Priorytet tego tiku został zmieniony na {0} przez {1}!",
|
||||||
|
"prioritySetDm":"Priorytet twojego tiku został zmieniony na {0} na naszym serwerze!",
|
||||||
|
"roleUpdateLog":"{0} zaktualizował swoje role!",
|
||||||
|
"roleUpdateDm":"Twoje role na naszym serwerze zostały zaktualizowane!",
|
||||||
|
"topicSetLog":"Priorytet tego zgłoszenia został ustawiony na {0} przez {1}.",
|
||||||
|
"topicSetDm":"Priorytet Twojego zgłoszenia został ustawiony na {0}."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
"success":{
|
"success":{
|
||||||
"visit":"Otwórz transkrypt",
|
"visit":"Otwórz transkrypt",
|
||||||
"ready":"Transkrypt został utworzony",
|
"ready":"Transkrypt został utworzony",
|
||||||
"textFileDescription":"To jest tekstowy transkrypt usuniętego ticketa!",
|
"textFileDescription":"To jest tekstowy transkrypt usuniętego ticketa!",
|
||||||
"htmlProgress":"Proszę czekać, trwa przetwarzanie tego transkryptu w formacie HTML...",
|
"htmlProgress":"Proszę czekać, trwa przetwarzanie tego transkryptu w formacie HTML...",
|
||||||
|
|
||||||
"createdChannel":"Nowy transkrypt {0} został utworzony na serwerze!",
|
"createdChannel":"Nowy transkrypt {0} został utworzony na serwerze!",
|
||||||
"createdCreator":"Nowy transkrypt {0} został utworzony dla jednego z twoich ticketów!",
|
"createdCreator":"Nowy transkrypt {0} został utworzony dla jednego z twoich ticketów!",
|
||||||
"createdParticipant":"Nowy transkrypt {0} został utworzony w jednym z ticketów, w których brałeś udział!",
|
"createdParticipant":"Nowy transkrypt {0} został utworzony w jednym z ticketów, w których brałeś udział!",
|
||||||
"createdActiveAdmin":"Nowy transkrypt {0} został utworzony w jednym z ticketów, w których brałeś udział jako administrator!",
|
"createdActiveAdmin":"Nowy transkrypt {0} został utworzony w jednym z ticketów, w których brałeś udział jako administrator!",
|
||||||
"createdEveryAdmin":"Nowy transkrypt {0} został utworzony w jednym z ticketów, w których byłeś administratorem!",
|
"createdEveryAdmin":"Nowy transkrypt {0} został utworzony w jednym z ticketów, w których byłeś administratorem!",
|
||||||
"createdOther":"Nowy transkrypt {0} został utworzony!"
|
"createdOther":"Nowy transkrypt {0} został utworzony!"
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
"retry":"Spróbuj ponownie",
|
"retry":"Spróbuj ponownie",
|
||||||
"continue":"Usuń bez transkryptu",
|
"continue":"Usuń bez transkryptu",
|
||||||
"backup":"Utwórz kopię zapasową transkryptu",
|
"backup":"Utwórz kopię zapasową transkryptu",
|
||||||
"error":"Coś poszło nie tak podczas próby utworzenia transkryptu.\nCo chciałbyś zrobić?\n\nTen ticket nie zostanie usunięty, dopóki nie klikniesz jednego z tych przycisków."
|
"error":"Coś poszło nie tak podczas próby utworzenia transkryptu.\nCo chciałbyś zrobić?\n\nTen ticket nie zostanie usunięty, dopóki nie klikniesz jednego z tych przycisków.",
|
||||||
}
|
"title":"Błąd Transkrypcji",
|
||||||
},
|
"noHistory":"Ten użytkownik nie ma jeszcze żadnych transkrypcji.",
|
||||||
"errors":{
|
"historyNotSupported":"Historia transkrypcji jest obecnie obsługiwana tylko z HTML Transcripts.\nHistoria tekstowych transkrypcji będzie dostępna w przyszłych wersjach."
|
||||||
"titles":{
|
},
|
||||||
"internalError":"Błąd wewnętrzny",
|
"text":{
|
||||||
"optionMissing":"Brakująca opcja polecenia",
|
"messagesTitle":"WIADOMOŚCI",
|
||||||
"optionInvalid":"Nieprawidłowa opcja polecenia",
|
"embedTitle":"EMBED",
|
||||||
"unknownCommand":"Nieznane polecenie",
|
"fileTitle":"PLIK",
|
||||||
"noPermissions":"Brak uprawnień",
|
"fieldsTitle":"POLA",
|
||||||
"unknownTicket":"Nieznany ticket",
|
"reactionsTitle":"REAKCJE",
|
||||||
"deprecatedTicket":"Przestarzały ticket",
|
"statsTitle":"STATYSTYKI",
|
||||||
"unknownOption":"Nieznana opcja",
|
"emptyContent":"<zawartość pusta>",
|
||||||
"unknownPanel":"Nieznany panel",
|
"noTitle":"<brak tytułu>",
|
||||||
"notInGuild":"Nie na serwerze",
|
"noDesc":"<brak opisu>"
|
||||||
"channelRename":"Nie można zmienić nazwy kanału",
|
}
|
||||||
"busy":"Ticket jest zajęty"
|
|
||||||
},
|
|
||||||
"descriptions":{
|
|
||||||
"askForInfo":"Skontaktuj się z właścicielem tego bota, aby uzyskać więcej informacji!",
|
|
||||||
"askForInfoResolve":"Skontaktuj się z właścicielem bota, jeśli problem nie rozwiąże się po kilku próbach.",
|
|
||||||
"internalError":"Nie udało się odpowiedzieć na to {0} z powodu błędu wewnętrznego!",
|
|
||||||
"optionMissing":"Brak wymaganego parametru w tym poleceniu!",
|
|
||||||
"optionInvalid":"Parametr w tym poleceniu jest nieprawidłowy!",
|
|
||||||
"optionInvalidChoose":"Wybierz spośród",
|
|
||||||
"unknownCommand":"Spróbuj odwiedzić menu pomocy, aby uzyskać więcej informacji!",
|
|
||||||
"noPermissions":"Nie masz uprawnień do użycia tego {0}!",
|
|
||||||
"noPermissionsList":"Wymagane uprawnienia: (jedno z nich)",
|
|
||||||
"noPermissionsCooldown":"Nie możesz użyć tego {0}, ponieważ masz nałożone ograniczenie czasowe!",
|
|
||||||
"noPermissionsBlacklist":"Nie możesz użyć tego {0}, ponieważ jesteś na czarnej liście!",
|
|
||||||
"noPermissionsLimitGlobal":"Nie możesz utworzyć ticketa, ponieważ serwer osiągnął maksymalny limit ticketów!",
|
|
||||||
"noPermissionsLimitGlobalUser":"Nie możesz utworzyć ticketa, ponieważ osiągnąłeś maksymalny limit ticketów!",
|
|
||||||
"noPermissionsLimitOption":"Nie możesz utworzyć ticketa, ponieważ serwer osiągnął maksymalny limit ticketów dla tej opcji!",
|
|
||||||
"noPermissionsLimitOptionUser":"Nie możesz utworzyć ticketa, ponieważ osiągnąłeś maksymalny limit ticketów dla tej opcji!",
|
|
||||||
"unknownTicket":"Spróbuj ponownie użyć tego polecenia w prawidłowym tickecie!",
|
|
||||||
"deprecatedTicket":"Obecny kanał nie jest prawidłowym ticketem! Może to być ticket z starej wersji Open Ticket!",
|
|
||||||
"notInGuild":"To {0} nie działa w DM! Spróbuj ponownie na serwerze!",
|
|
||||||
"channelRename":"Z powodu ograniczeń Discorda obecnie niemożliwe jest, aby bot zmienił nazwę kanału. Kanał zostanie automatycznie przemianowany w ciągu 10 minut, jeśli bot nie zostanie zrestartowany.",
|
|
||||||
"channelRenameSource":"Źródło tego błędu: {0}",
|
|
||||||
"busy":"Nie można użyć tego {0}!\nTicket jest obecnie przetwarzany przez bota.\n\nSpróbuj ponownie za kilka sekund!"
|
|
||||||
},
|
|
||||||
"optionInvalidReasons":{
|
|
||||||
"stringRegex":"Wartość nie pasuje do wzorca!",
|
|
||||||
"stringMinLength":"Wartość musi mieć co najmniej {0} znaków!",
|
|
||||||
"stringMaxLength":"Wartość może mieć maksymalnie {0} znaków!",
|
|
||||||
"numberInvalid":"Nieprawidłowa liczba!",
|
|
||||||
"numberMin":"Liczba musi wynosić co najmniej {0}!",
|
|
||||||
"numberMax":"Liczba może wynosić maksymalnie {0}!",
|
|
||||||
"numberDecimal":"Liczba nie może być dziesiętna!",
|
|
||||||
"numberNegative":"Liczba nie może być ujemna!",
|
|
||||||
"numberPositive":"Liczba nie może być dodatnia!",
|
|
||||||
"numberZero":"Liczba nie może wynosić zero!",
|
|
||||||
"channelNotFound":"Nie można znaleźć kanału!",
|
|
||||||
"userNotFound":"Nie można znaleźć użytkownika!",
|
|
||||||
"roleNotFound":"Nie można znaleźć roli!",
|
|
||||||
"memberNotFound":"Nie można znaleźć użytkownika!",
|
|
||||||
"mentionableNotFound":"Nie można znaleźć użytkownika ani roli!",
|
|
||||||
"channelType":"Nieprawidłowy typ kanału!",
|
|
||||||
"notInGuild":"Ta opcja wymaga, abyś był na serwerze!"
|
|
||||||
},
|
|
||||||
"permissions":{
|
|
||||||
"developer":"Musisz być deweloperem bota.",
|
|
||||||
"owner":"Musisz być właścicielem serwera.",
|
|
||||||
"admin":"Musisz być administratorem serwera.",
|
|
||||||
"moderator":"Musisz być moderatorem.",
|
|
||||||
"support":"Musisz należeć do zespołu wsparcia.",
|
|
||||||
"member":"Musisz być członkiem.",
|
|
||||||
"discord-administrator":"Musisz mieć uprawnienie `ADMINISTRATOR`."
|
|
||||||
},
|
|
||||||
"actionInvalid":{
|
|
||||||
"close":"Ticket jest już zamknięty!",
|
|
||||||
"reopen":"Ticket nie jest jeszcze zamknięty!",
|
|
||||||
"claim":"Ticket jest już przypisany!",
|
|
||||||
"unclaim":"Ticket nie jest jeszcze przypisany!",
|
|
||||||
"pin":"Ticket jest już przypięty!",
|
|
||||||
"unpin":"Ticket nie jest przypięty!",
|
|
||||||
"add":"Ten użytkownik już ma dostęp do ticketa!",
|
|
||||||
"remove":"Nie można usunąć tego użytkownika z ticketa!"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"params":{
|
|
||||||
"uppercase":{
|
|
||||||
"ticket":"Ticket",
|
|
||||||
"tickets":"Tickety",
|
|
||||||
"reason":"Powód",
|
|
||||||
"creator":"Twórca",
|
|
||||||
"remaining":"Pozostały czas",
|
|
||||||
"added":"Dodano",
|
|
||||||
"removed":"Usunięto",
|
|
||||||
"filter":"Filtr",
|
|
||||||
"claimedBy":"Przypisane przez {0}",
|
|
||||||
"method":"Metoda",
|
|
||||||
"type":"Typ",
|
|
||||||
"blacklisted":"Na czarnej liście",
|
|
||||||
"panel":"Panel",
|
|
||||||
"command":"Polecenie",
|
|
||||||
"system":"System",
|
|
||||||
"true":"Prawda",
|
|
||||||
"false":"Fałsz",
|
|
||||||
"syntax":"Składnia",
|
|
||||||
"originalName":"Oryginalna nazwa",
|
|
||||||
"newName":"Nowa nazwa",
|
|
||||||
"until":"Do",
|
|
||||||
"validOptions":"Prawidłowe opcje",
|
|
||||||
"validPanels":"Prawidłowe panele",
|
|
||||||
"autoclose":"Automatyczne zamknięcie",
|
|
||||||
"autodelete":"Automatyczne usunięcie",
|
|
||||||
"startupDate":"Data uruchomienia",
|
|
||||||
"version":"Wersja",
|
|
||||||
"name":"Nazwa",
|
|
||||||
"role":"Rola",
|
|
||||||
"status":"Status",
|
|
||||||
"claimed":"Przypisane",
|
|
||||||
"pinned":"Przypięte",
|
|
||||||
"creationDate":"Data utworzenia"
|
|
||||||
},
|
|
||||||
"lowercase":{
|
|
||||||
"text":"tekst",
|
|
||||||
"html":"html",
|
|
||||||
"command":"polecenie",
|
|
||||||
"modal":"modal",
|
|
||||||
"button":"przycisk",
|
|
||||||
"dropdown":"rozwijane menu",
|
|
||||||
"method":"metoda"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"commands":{
|
|
||||||
"reason":"Określ opcjonalny powód, który będzie widoczny w logach.",
|
|
||||||
"help":"Uzyskaj listę wszystkich dostępnych poleceń.",
|
|
||||||
"panel":"Wyślij wiadomość z rozwijanym menu lub przyciskami (do tworzenia ticketów).",
|
|
||||||
"panelId":"Identyfikator panelu, który chcesz wyświetlić.",
|
|
||||||
"panelAutoUpdate":"Czy chcesz, aby ten panel automatycznie aktualizował się po edycji?",
|
|
||||||
"ticket":"Natychmiast utwórz ticket.",
|
|
||||||
"ticketId":"Identyfikator ticketa, który chcesz utworzyć.",
|
|
||||||
"close":"Zamknij ticket.",
|
|
||||||
"delete":"Usuń ticket.",
|
|
||||||
"deleteNoTranscript":"Usuń ten ticket bez tworzenia transkryptu.",
|
|
||||||
"reopen":"Ponownie otwórz ticket.",
|
|
||||||
"claim":"Przypisz ticket.",
|
|
||||||
"claimUser":"Przypisz ten ticket innej osobie zamiast sobie.",
|
|
||||||
"unclaim":"Odpowiedz ticket.",
|
|
||||||
"pin":"Przypnij ticket.",
|
|
||||||
"unpin":"Odepnij ticket.",
|
|
||||||
"move":"Przenieś ticket.",
|
|
||||||
"moveId":"Identyfikator opcji, do której chcesz przenieść ticket.",
|
|
||||||
"rename":"Zmień nazwę ticketa.",
|
|
||||||
"renameName":"Nowa nazwa dla tego ticketa.",
|
|
||||||
"add":"Dodaj użytkownika do ticketa.",
|
|
||||||
"addUser":"Użytkownik do dodania.",
|
|
||||||
"remove":"Usuń użytkownika z ticketa.",
|
|
||||||
"removeUser":"Użytkownik do usunięcia.",
|
|
||||||
"blacklist":"Zarządzaj czarną listą ticketów.",
|
|
||||||
"blacklistView":"Wyświetl listę obecnej czarnej listy.",
|
|
||||||
"blacklistAdd":"Dodaj użytkownika do czarnej listy.",
|
|
||||||
"blacklistRemove":"Usuń użytkownika z czarnej listy.",
|
|
||||||
"blacklistGet":"Uzyskaj szczegóły użytkownika na czarnej liście.",
|
|
||||||
"blacklistGetUser":"Użytkownik do uzyskania szczegółów.",
|
|
||||||
"stats":"Wyświetl statystyki bota, użytkownika lub ticketa.",
|
|
||||||
"statsReset":"Zresetuj wszystkie statystyki bota (i zacznij liczyć od zera).",
|
|
||||||
"statsGlobal":"Wyświetl globalne statystyki.",
|
|
||||||
"statsUser":"Wyświetl statystyki użytkownika na serwerze.",
|
|
||||||
"statsUserUser":"Użytkownik do wyświetlenia.",
|
|
||||||
"statsTicket":"Wyświetl statystyki ticketa na serwerze.",
|
|
||||||
"statsTicketTicket":"Ticket do wyświetlenia.",
|
|
||||||
"clear":"Usuń wiele ticketów jednocześnie.",
|
|
||||||
"clearFilter":"Filtr do usuwania ticketów.",
|
|
||||||
"clearFilters":{
|
|
||||||
"all":"Wszystkie",
|
|
||||||
"open":"Otwarte",
|
|
||||||
"close":"Zamknięte",
|
|
||||||
"claim":"Przypisane",
|
|
||||||
"unclaim":"Nieprzypisane",
|
|
||||||
"pin":"Przypięte",
|
|
||||||
"unpin":"Nieprzypięte",
|
|
||||||
"autoclose":"Automatycznie zamknięte"
|
|
||||||
},
|
|
||||||
"autoclose":"Zarządzaj automatycznym zamknięciem ticketa.",
|
|
||||||
"autocloseDisable":"Wyłącz automatyczne zamknięcie w tym tickecie.",
|
|
||||||
"autocloseEnable":"Włącz automatyczne zamknięcie w tym tickecie.",
|
|
||||||
"autocloseEnableTime":"Liczba godzin braku aktywności potrzebna do zamknięcia ticketa.",
|
|
||||||
"autodelete":"Zarządzaj automatycznym usunięciem ticketa.",
|
|
||||||
"autodeleteDisable":"Wyłącz automatyczne usunięcie w tym tickecie.",
|
|
||||||
"autodeleteEnable":"Włącz automatyczne usunięcie w tym tickecie.",
|
|
||||||
"autodeleteEnableTime":"Liczba dni braku aktywności potrzebna do usunięcia ticketa."
|
|
||||||
},
|
|
||||||
"helpMenu":{
|
|
||||||
"help":"Uzyskaj listę wszystkich dostępnych poleceń.",
|
|
||||||
"ticket":"Natychmiast utwórz ticket.",
|
|
||||||
"close":"Zamknij ticket, wyłączając możliwość pisania na tym kanale.",
|
|
||||||
"delete":"Usuń ticket, tworząc transkrypt, jeśli jest włączony.",
|
|
||||||
"reopen":"Ponownie otwórz ticket, włączając możliwość pisania na tym kanale.",
|
|
||||||
"pin":"Przypnij ticket. To przeniesie ticket na górę i doda emoji '📌' do nazwy.",
|
|
||||||
"unpin":"Odepnij ticket. Ticket pozostanie na swojej pozycji, ale straci emoji '📌'.",
|
|
||||||
"move":"Przenieś ticket. To zmieni typ tego ticketa.",
|
|
||||||
"rename":"Zmień nazwę ticketa. To zmieni nazwę kanału tego ticketa.",
|
|
||||||
"claim":"Przypisz ticket. Dzięki temu możesz poinformować zespół, że zajmujesz się tym ticketem.",
|
|
||||||
"unclaim":"Odpowiedz ticket. Dzięki temu możesz poinformować zespół, że ticket jest ponownie dostępny.",
|
|
||||||
"add":"Dodaj użytkownika do ticketa. Pozwoli to użytkownikowi na odczyt i pisanie w tym tickecie.",
|
|
||||||
"remove":"Usuń użytkownika z ticketa. To odbierze użytkownikowi możliwość odczytu i pisania w tym tickecie.",
|
|
||||||
"panel":"Wyślij wiadomość z rozwijanym menu lub przyciskami (do tworzenia ticketów).",
|
|
||||||
"blacklistView":"Wyświetl listę obecnej czarnej listy.",
|
|
||||||
"blacklistAdd":"Dodaj użytkownika do czarnej listy.",
|
|
||||||
"blacklistRemove":"Usuń użytkownika z czarnej listy.",
|
|
||||||
"blacklistGet":"Uzyskaj szczegóły użytkownika na czarnej liście.",
|
|
||||||
"statsGlobal":"Wyświetl globalne statystyki.",
|
|
||||||
"statsTicket":"Wyświetl statystyki ticketa na serwerze.",
|
|
||||||
"statsUser":"Wyświetl statystyki użytkownika na serwerze.",
|
|
||||||
"statsReset":"Zresetuj wszystkie statystyki bota (i zacznij liczyć od zera).",
|
|
||||||
"autocloseDisable":"Wyłącz automatyczne zamknięcie w tym tickecie.",
|
|
||||||
"autocloseEnable":"Włącz automatyczne zamknięcie w tym tickecie.",
|
|
||||||
"autodeleteDisable":"Wyłącz automatyczne usunięcie w tym tickecie.",
|
|
||||||
"autodeleteEnable":"Włącz automatyczne usunięcie w tym tickecie."
|
|
||||||
},
|
|
||||||
"stats":{
|
|
||||||
"scopes":{
|
|
||||||
"global":"Globalne statystyki",
|
|
||||||
"system":"Statystyki systemu",
|
|
||||||
"user":"Statystyki użytkownika",
|
|
||||||
"ticket":"Statystyki ticketa",
|
|
||||||
"participants":"Uczestnicy"
|
|
||||||
},
|
},
|
||||||
"properties":{
|
"errors":{
|
||||||
"ticketsCreated":"Tickety utworzone",
|
"titles":{
|
||||||
"ticketsClosed":"Tickety zamknięte",
|
"internalError":"Błąd wewnętrzny",
|
||||||
"ticketsDeleted":"Tickety usunięte",
|
"optionMissing":"Brakująca opcja polecenia",
|
||||||
"ticketsReopened":"Tickety ponownie otwarte",
|
"optionInvalid":"Nieprawidłowa opcja polecenia",
|
||||||
"ticketsAutoclosed":"Tickety automatycznie zamknięte",
|
"unknownCommand":"Nieznane polecenie",
|
||||||
"ticketsClaimed":"Tickety przypisane",
|
"noPermissions":"Brak uprawnień",
|
||||||
"ticketsPinned":"Tickety przypięte",
|
"unknownTicket":"Nieznany ticket",
|
||||||
"ticketsMoved":"Tickety przeniesione",
|
"deprecatedTicket":"Przestarzały ticket",
|
||||||
"usersBlacklisted":"Użytkownicy na czarnej liście",
|
"unknownOption":"Nieznana opcja",
|
||||||
"transcriptsCreated":"Transkrypty utworzone"
|
"unknownPanel":"Nieznany panel",
|
||||||
}
|
"notInGuild":"Nie na serwerze",
|
||||||
}
|
"channelRename":"Nie można zmienić nazwy kanału",
|
||||||
|
"channelCategory":"Nie Można Zmienić Kategorii",
|
||||||
|
"busy":"Ticket jest zajęty",
|
||||||
|
"permissionError":"Błąd uprawnień"
|
||||||
|
},
|
||||||
|
"descriptions":{
|
||||||
|
"askForInfo":"Skontaktuj się z właścicielem tego bota, aby uzyskać więcej informacji!",
|
||||||
|
"askForInfoResolve":"Skontaktuj się z właścicielem bota, jeśli problem nie rozwiąże się po kilku próbach.",
|
||||||
|
"internalError":"Nie udało się odpowiedzieć na to {0} z powodu błędu wewnętrznego!",
|
||||||
|
"optionMissing":"Brak wymaganego parametru w tym poleceniu!",
|
||||||
|
"optionInvalid":"Parametr w tym poleceniu jest nieprawidłowy!",
|
||||||
|
"optionInvalidChoose":"Wybierz spośród",
|
||||||
|
"unknownCommand":"Spróbuj odwiedzić menu pomocy, aby uzyskać więcej informacji!",
|
||||||
|
"noPermissions":"Nie masz uprawnień do użycia tego {0}!",
|
||||||
|
"noPermissionsList":"Wymagane uprawnienia: (jedno z nich)",
|
||||||
|
"noPermissionsCooldown":"Nie możesz użyć tego {0}, ponieważ masz nałożone ograniczenie czasowe!",
|
||||||
|
"noPermissionsBlacklist":"Nie możesz użyć tego {0}, ponieważ jesteś na czarnej liście!",
|
||||||
|
"noPermissionsLimitGlobal":"Nie możesz utworzyć ticketa, ponieważ serwer osiągnął maksymalny limit ticketów!",
|
||||||
|
"noPermissionsLimitGlobalUser":"Nie możesz utworzyć ticketa, ponieważ osiągnąłeś maksymalny limit ticketów!",
|
||||||
|
"noPermissionsLimitOption":"Nie możesz utworzyć ticketa, ponieważ serwer osiągnął maksymalny limit ticketów dla tej opcji!",
|
||||||
|
"noPermissionsLimitOptionUser":"Nie możesz utworzyć ticketa, ponieważ osiągnąłeś maksymalny limit ticketów dla tej opcji!",
|
||||||
|
"unknownTicket":"Spróbuj ponownie użyć tego polecenia w prawidłowym tickecie!",
|
||||||
|
"deprecatedTicket":"Obecny kanał nie jest prawidłowym ticketem! Może to być ticket z starej wersji Open Ticket!",
|
||||||
|
"notInGuild":"To {0} nie działa w DM! Spróbuj ponownie na serwerze!",
|
||||||
|
"channelRename":"Z powodu ograniczeń Discorda obecnie niemożliwe jest, aby bot zmienił nazwę kanału. Kanał zostanie automatycznie przemianowany w ciągu 10 minut, jeśli bot nie zostanie zrestartowany.",
|
||||||
|
"channelCategory":"Z powodu limitów szybkości Discorda nie można było natychmiast zmienić kategorii kanału. Zostanie ona zmieniona automatycznie w ciągu 10 minut, jeśli bot pozostanie online.",
|
||||||
|
"channelRenameSource":"Źródło tego błędu: {0}",
|
||||||
|
"busy":"Nie można użyć tego {0}!\nTicket jest obecnie przetwarzany przez bota.\n\nSpróbuj ponownie za kilka sekund!",
|
||||||
|
"closeBeforeMessage":"Nie można zamknąć/usunąć tego tiku zanim użytkownik wyśle wiadomość.",
|
||||||
|
"closeBeforeAdminMessage":"Nie można zamknąć/usunąć tego tiku zanim administrator lub członek wsparcia wyśle wiadomość.",
|
||||||
|
"unableToCreateTicket":"Nie możesz utworzyć tiku.",
|
||||||
|
"messageMissing":"Nie można odnaleźć wiadomości interakcji. Zamiast tego użyj komendy `{0}`.",
|
||||||
|
"stateExpired":"Ta interakcja nie jest już ważna lub wygasła. Zamiast tego użyj komendy `{0}`. Otrzymanie tego błędu po dużej aktualizacji Open Ticket jest normalne.",
|
||||||
|
"panelStateExpired":"Ten panel nie jest już ważny lub wygasł. Utwórz nowy panel za pomocą `{0}`, aby rozwiązać problem. Otrzymanie tego błędu po dużej aktualizacji Open Ticket jest normalne."
|
||||||
|
},
|
||||||
|
"optionInvalidReasons":{
|
||||||
|
"stringRegex":"Wartość nie pasuje do wzorca!",
|
||||||
|
"stringMinLength":"Wartość musi mieć co najmniej {0} znaków!",
|
||||||
|
"stringMaxLength":"Wartość może mieć maksymalnie {0} znaków!",
|
||||||
|
"numberInvalid":"Nieprawidłowa liczba!",
|
||||||
|
"numberMin":"Liczba musi wynosić co najmniej {0}!",
|
||||||
|
"numberMax":"Liczba może wynosić maksymalnie {0}!",
|
||||||
|
"numberDecimal":"Liczba nie może być dziesiętna!",
|
||||||
|
"numberNegative":"Liczba nie może być ujemna!",
|
||||||
|
"numberPositive":"Liczba nie może być dodatnia!",
|
||||||
|
"numberZero":"Liczba nie może wynosić zero!",
|
||||||
|
"channelNotFound":"Nie można znaleźć kanału!",
|
||||||
|
"userNotFound":"Nie można znaleźć użytkownika!",
|
||||||
|
"roleNotFound":"Nie można znaleźć roli!",
|
||||||
|
"memberNotFound":"Nie można znaleźć użytkownika!",
|
||||||
|
"mentionableNotFound":"Nie można znaleźć użytkownika ani roli!",
|
||||||
|
"channelType":"Nieprawidłowy typ kanału!",
|
||||||
|
"notInGuild":"Ta opcja wymaga, abyś był na serwerze!"
|
||||||
|
},
|
||||||
|
"permissions":{
|
||||||
|
"developer":"Musisz być deweloperem bota.",
|
||||||
|
"owner":"Musisz być właścicielem serwera.",
|
||||||
|
"admin":"Musisz być administratorem serwera.",
|
||||||
|
"moderator":"Musisz być moderatorem.",
|
||||||
|
"support":"Musisz należeć do zespołu wsparcia.",
|
||||||
|
"member":"Musisz być członkiem.",
|
||||||
|
"discord-administrator":"Musisz mieć uprawnienie `ADMINISTRATOR`."
|
||||||
|
},
|
||||||
|
"actionInvalid":{
|
||||||
|
"close":"Ticket jest już zamknięty!",
|
||||||
|
"reopen":"Ticket nie jest jeszcze zamknięty!",
|
||||||
|
"claim":"Ticket jest już przypisany!",
|
||||||
|
"unclaim":"Ticket nie jest jeszcze przypisany!",
|
||||||
|
"pin":"Ticket jest już przypięty!",
|
||||||
|
"unpin":"Ticket nie jest przypięty!",
|
||||||
|
"add":"Ten użytkownik już ma dostęp do ticketa!",
|
||||||
|
"remove":"Nie można usunąć tego użytkownika z ticketa!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"params":{
|
||||||
|
"uppercase":{
|
||||||
|
"ticket":"Ticket",
|
||||||
|
"tickets":"Tickety",
|
||||||
|
"reason":"Powód",
|
||||||
|
"creator":"Twórca",
|
||||||
|
"remaining":"Pozostały czas",
|
||||||
|
"added":"Dodano",
|
||||||
|
"removed":"Usunięto",
|
||||||
|
"filter":"Filtr",
|
||||||
|
"method":"Metoda",
|
||||||
|
"type":"Typ",
|
||||||
|
"blacklisted":"Na czarnej liście",
|
||||||
|
"panel":"Panel",
|
||||||
|
"command":"Polecenie",
|
||||||
|
"system":"System",
|
||||||
|
"true":"Prawda",
|
||||||
|
"false":"Fałsz",
|
||||||
|
"syntax":"Składnia",
|
||||||
|
"originalName":"Oryginalna nazwa",
|
||||||
|
"newName":"Nowa nazwa",
|
||||||
|
"originalCategory":"Oryginalna Kategoria",
|
||||||
|
"newCategory":"Nowa Kategoria",
|
||||||
|
"until":"Do",
|
||||||
|
"validOptions":"Prawidłowe opcje",
|
||||||
|
"validPanels":"Prawidłowe panele",
|
||||||
|
"autoclose":"Automatyczne zamknięcie",
|
||||||
|
"autodelete":"Automatyczne usunięcie",
|
||||||
|
"startupDate":"Data uruchomienia",
|
||||||
|
"version":"Wersja",
|
||||||
|
"name":"Nazwa",
|
||||||
|
"role":"Rola",
|
||||||
|
"status":"STATUS",
|
||||||
|
"claimed":"Przypisane",
|
||||||
|
"pinned":"Przypięte",
|
||||||
|
"creationDate":"Data utworzenia",
|
||||||
|
|
||||||
|
"noone":"Nikt",
|
||||||
|
"open":"OTWARTY",
|
||||||
|
"closed":"ZAMKNIĘTY",
|
||||||
|
"priority":"PRIORYTET",
|
||||||
|
"participants":"UCZESTNICY",
|
||||||
|
"yes":"Tak",
|
||||||
|
"no":"Nie",
|
||||||
|
"accept":"Akceptuj",
|
||||||
|
"cancel":"Anuluj",
|
||||||
|
"option":"Opcja",
|
||||||
|
"topic":"Temat",
|
||||||
|
"uptime":"Czas działania systemu",
|
||||||
|
"messages":"Wiadomości",
|
||||||
|
"embeds":"Embeds",
|
||||||
|
"files":"Pliki",
|
||||||
|
"components":"Komponenty",
|
||||||
|
"cooldown":"Czas odnowienia",
|
||||||
|
"maxTickets":"Maks. Tiki",
|
||||||
|
"admins":"Administratorzy",
|
||||||
|
"roles":"Role",
|
||||||
|
"size":"Rozmiar"
|
||||||
|
},
|
||||||
|
"lowercase":{
|
||||||
|
"text":"tekst",
|
||||||
|
"html":"html",
|
||||||
|
"command":"polecenie",
|
||||||
|
"modal":"modal",
|
||||||
|
"button":"przycisk",
|
||||||
|
"dropdown":"rozwijane menu",
|
||||||
|
"method":"metoda"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commands":{
|
||||||
|
"reason":"Określ opcjonalny powód, który będzie widoczny w logach.",
|
||||||
|
"help":"Uzyskaj listę wszystkich dostępnych poleceń.",
|
||||||
|
"panel":"Wyślij wiadomość z rozwijanym menu lub przyciskami (do tworzenia ticketów).",
|
||||||
|
"panelId":"Identyfikator panelu, który chcesz wyświetlić.",
|
||||||
|
"panelAutoUpdate":"Czy chcesz, aby ten panel automatycznie aktualizował się po edycji?",
|
||||||
|
"ticket":"Natychmiast utwórz ticket.",
|
||||||
|
"ticketId":"Identyfikator ticketa, który chcesz utworzyć.",
|
||||||
|
"ticketOtherUser":"Utwórz zgłoszenie dla innego użytkownika.",
|
||||||
|
"close":"Zamknij ticket.",
|
||||||
|
"delete":"Usuń ticket.",
|
||||||
|
"deleteNoTranscript":"Usuń ten ticket bez tworzenia transkryptu.",
|
||||||
|
"reopen":"Ponownie otwórz ticket.",
|
||||||
|
"claim":"Przypisz ticket.",
|
||||||
|
"claimUser":"Przypisz ten ticket innej osobie zamiast sobie.",
|
||||||
|
"unclaim":"Odpowiedz ticket.",
|
||||||
|
"pin":"Przypnij ticket.",
|
||||||
|
"unpin":"Odepnij ticket.",
|
||||||
|
|
||||||
|
"move":"Przenieś ticket.",
|
||||||
|
"moveId":"Identyfikator opcji, do której chcesz przenieść ticket.",
|
||||||
|
"rename":"Zmień nazwę ticketa.",
|
||||||
|
"renameName":"Nowa nazwa dla tego ticketa.",
|
||||||
|
"add":"Dodaj użytkownika do ticketa.",
|
||||||
|
"addUser":"Użytkownik do dodania.",
|
||||||
|
"remove":"Usuń użytkownika z ticketa.",
|
||||||
|
"removeUser":"Użytkownik do usunięcia.",
|
||||||
|
|
||||||
|
"blacklist":"Zarządzaj czarną listą ticketów.",
|
||||||
|
"blacklistView":"Wyświetl listę obecnej czarnej listy.",
|
||||||
|
"blacklistAdd":"Dodaj użytkownika do czarnej listy.",
|
||||||
|
"blacklistRemove":"Usuń użytkownika z czarnej listy.",
|
||||||
|
"blacklistGet":"Uzyskaj szczegóły użytkownika na czarnej liście.",
|
||||||
|
"blacklistGetUser":"Użytkownik do uzyskania szczegółów.",
|
||||||
|
"stats":"Wyświetl statystyki bota, użytkownika lub ticketa.",
|
||||||
|
"statsReset":"Zresetuj wszystkie statystyki bota (i zacznij liczyć od zera).",
|
||||||
|
"statsGlobal":"Wyświetl globalne statystyki.",
|
||||||
|
"statsUser":"Wyświetl statystyki użytkownika na serwerze.",
|
||||||
|
"statsUserUser":"Użytkownik do wyświetlenia.",
|
||||||
|
"statsTicket":"Wyświetl statystyki ticketa na serwerze.",
|
||||||
|
"statsTicketTicket":"Ticket do wyświetlenia.",
|
||||||
|
|
||||||
|
"clear":"Usuń wiele ticketów jednocześnie.",
|
||||||
|
"clearFilter":"Filtr do usuwania ticketów.",
|
||||||
|
"clearFilters":{
|
||||||
|
"all":"Wszystkie",
|
||||||
|
"open":"Otwarte",
|
||||||
|
"close":"Zamknięte",
|
||||||
|
"claim":"Przypisane",
|
||||||
|
"unclaim":"Nieprzypisane",
|
||||||
|
"pin":"Przypięte",
|
||||||
|
"unpin":"Nieprzypięte",
|
||||||
|
"autoclose":"Automatycznie zamknięte"
|
||||||
|
},
|
||||||
|
|
||||||
|
"autoclose":"Zarządzaj automatycznym zamknięciem ticketa.",
|
||||||
|
"autocloseDisable":"Wyłącz automatyczne zamknięcie w tym tickecie.",
|
||||||
|
"autocloseEnable":"Włącz automatyczne zamknięcie w tym tickecie.",
|
||||||
|
"autocloseEnableTime":"Liczba godzin braku aktywności potrzebna do zamknięcia ticketa.",
|
||||||
|
"autodelete":"Zarządzaj automatycznym usunięciem ticketa.",
|
||||||
|
"autodeleteDisable":"Wyłącz automatyczne usunięcie w tym tickecie.",
|
||||||
|
"autodeleteEnable":"Włącz automatyczne usunięcie w tym tickecie.",
|
||||||
|
"autodeleteEnableTime":"Liczba dni braku aktywności potrzebna do usunięcia ticketa.",
|
||||||
|
|
||||||
|
"topic":"Zarządzaj tematem kanału tiku.",
|
||||||
|
"topicSet":"Ustaw temat kanału tiku.",
|
||||||
|
"topicValue":"Nowy temat kanału.",
|
||||||
|
"topicList":"Pobierz listę wszystkich tików z ich tematami i statystykami.",
|
||||||
|
"priority":"Zarządzaj priorytetem tiku.",
|
||||||
|
"prioritySet":"Ustaw priorytet tiku.",
|
||||||
|
"priorityValue":"Priorytet kanału.",
|
||||||
|
"priorityGet":"Pobierz priorytet tiku.",
|
||||||
|
"priorityList":"Pobierz listę wszystkich tików z ich priorytetem.",
|
||||||
|
"transfer":"Przenieś własność tiku od jednego użytkownika do drugiego.",
|
||||||
|
"transferUser":"Użytkownik, do którego przenieść.",
|
||||||
|
"transcripts":"Wyświetl historię transkrypcji zgłoszeń użytkownika.",
|
||||||
|
"transcriptsUser":"Użytkownik do wyświetlenia."
|
||||||
|
},
|
||||||
|
"helpMenu":{
|
||||||
|
"help":"Uzyskaj listę wszystkich dostępnych poleceń.",
|
||||||
|
"ticket":"Natychmiast utwórz ticket.",
|
||||||
|
"close":"Zamknij ticket, wyłączając możliwość pisania na tym kanale.",
|
||||||
|
"delete":"Usuń ticket, tworząc transkrypt, jeśli jest włączony.",
|
||||||
|
"reopen":"Ponownie otwórz ticket, włączając możliwość pisania na tym kanale.",
|
||||||
|
"pin":"Przypnij ticket. To przeniesie ticket na górę i doda emoji '📌' do nazwy.",
|
||||||
|
"unpin":"Odepnij ticket. Ticket pozostanie na swojej pozycji, ale straci emoji '📌'.",
|
||||||
|
"move":"Przenieś ticket. To zmieni typ tego ticketa.",
|
||||||
|
"rename":"Zmień nazwę ticketa. To zmieni nazwę kanału tego ticketa.",
|
||||||
|
"claim":"Przypisz ticket. Dzięki temu możesz poinformować zespół, że zajmujesz się tym ticketem.",
|
||||||
|
"unclaim":"Odpowiedz ticket. Dzięki temu możesz poinformować zespół, że ticket jest ponownie dostępny.",
|
||||||
|
"add":"Dodaj użytkownika do ticketa. Pozwoli to użytkownikowi na odczyt i pisanie w tym tickecie.",
|
||||||
|
"remove":"Usuń użytkownika z ticketa. To odbierze użytkownikowi możliwość odczytu i pisania w tym tickecie.",
|
||||||
|
"panel":"Wyślij wiadomość z rozwijanym menu lub przyciskami (do tworzenia ticketów).",
|
||||||
|
"blacklistView":"Wyświetl listę obecnej czarnej listy.",
|
||||||
|
"blacklistAdd":"Dodaj użytkownika do czarnej listy.",
|
||||||
|
"blacklistRemove":"Usuń użytkownika z czarnej listy.",
|
||||||
|
"blacklistGet":"Uzyskaj szczegóły użytkownika na czarnej liście.",
|
||||||
|
"statsGlobal":"Wyświetl globalne statystyki.",
|
||||||
|
"statsTicket":"Wyświetl statystyki ticketa na serwerze.",
|
||||||
|
"statsUser":"Wyświetl statystyki użytkownika na serwerze.",
|
||||||
|
"statsReset":"Zresetuj wszystkie statystyki bota (i zacznij liczyć od zera).",
|
||||||
|
"autocloseDisable":"Wyłącz automatyczne zamknięcie w tym tickecie.",
|
||||||
|
"autocloseEnable":"Włącz automatyczne zamknięcie w tym tickecie.",
|
||||||
|
"autodeleteDisable":"Wyłącz automatyczne usunięcie w tym tickecie.",
|
||||||
|
"autodeleteEnable":"Włącz automatyczne usunięcie w tym tickecie.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Ogólne komendy",
|
||||||
|
"basicTicket":"Podstawowe komendy tiku",
|
||||||
|
"advancedTicket":"Zaawansowane komendy tiku",
|
||||||
|
"userTicket":"Komendy użytkownika tiku",
|
||||||
|
"admin":"Komendy administratora",
|
||||||
|
"advanced":"Zaawansowane komendy",
|
||||||
|
"extra":"Dodatkowe komendy"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stats":{
|
||||||
|
"scopes":{
|
||||||
|
"global":"Globalne statystyki",
|
||||||
|
"system":"Statystyki systemu",
|
||||||
|
"user":"Statystyki użytkownika",
|
||||||
|
"ticket":"Statystyki ticketa",
|
||||||
|
"participants":"Uczestnicy",
|
||||||
|
"messages":"Wiadomości"
|
||||||
|
},
|
||||||
|
"properties":{
|
||||||
|
"ticketsCreated":"Tickety utworzone",
|
||||||
|
"ticketsClosed":"Tickety zamknięte",
|
||||||
|
"ticketsDeleted":"Tickety usunięte",
|
||||||
|
"ticketsReopened":"Tickety ponownie otwarte",
|
||||||
|
"ticketsAutoclosed":"Tickety automatycznie zamknięte",
|
||||||
|
"ticketsClaimed":"Tickety przypisane",
|
||||||
|
"ticketsPinned":"Tickety przypięte",
|
||||||
|
"ticketsMoved":"Tickety przeniesione",
|
||||||
|
"usersBlacklisted":"Użytkownicy na czarnej liście",
|
||||||
|
"transcriptsCreated":"Transkrypty utworzone",
|
||||||
|
"ticketsAutodeleted":"Tiki automatycznie usunięte",
|
||||||
|
"ticketsTransferred":"Tiki przeniesione",
|
||||||
|
"ticketVolume":"Objętość tików",
|
||||||
|
"averageTickets":"Średnia tików/użytkownik",
|
||||||
|
"currentTickets":"Aktualne tiki",
|
||||||
|
"age":"Wiek tiku",
|
||||||
|
"responseTime":"Czas odpowiedzi",
|
||||||
|
"resolutionTime":"Czas rozwiązania",
|
||||||
|
"createdOn":"Utworzono",
|
||||||
|
"createdBy":"Utworzył",
|
||||||
|
"closedOn":"Zamknięto",
|
||||||
|
"closedBy":"Zamknął",
|
||||||
|
"claimedOn":"Przejęto",
|
||||||
|
"claimedBy":"Przejął",
|
||||||
|
"pinnedOn":"Przypięto",
|
||||||
|
"pinnedBy":"Przypiął",
|
||||||
|
"deletedOn":"Usunięto",
|
||||||
|
"deletedBy":"Usunął"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Deweloper",
|
||||||
|
"serverOwner":"Właściciel serwera",
|
||||||
|
"serverAdmin":"Administrator serwera",
|
||||||
|
"moderator":"Zespół moderatorów",
|
||||||
|
"support":"Zespół wsparcia",
|
||||||
|
"member":"Użytkownik"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Wybierz swój tik",
|
||||||
|
"selectRole":"Wybierz swoją rolę",
|
||||||
|
"selectOption":"Wybierz opcję",
|
||||||
|
"selectPriorityLevel":"Wybierz poziom priorytetu"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Pilny",
|
||||||
|
"veryHigh":"Bardzo wysoki",
|
||||||
|
"high":"Wysoki",
|
||||||
|
"normal":"Normalny",
|
||||||
|
"low":"Niski",
|
||||||
|
"veryLow":"Bardzo niski",
|
||||||
|
"none":"Brak"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+510
-360
@@ -1,113 +1,126 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["quiradon"],
|
"translators":["quiradon"],
|
||||||
"lastedited":"20/08/2024",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Portuguese",
|
"language":"Portuguese",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
"checker":{
|
"checker":{
|
||||||
"system":{
|
"system":{
|
||||||
"typeError": "[ERRO]",
|
"typeError":"[ERRO]",
|
||||||
"headerOpenTicket": "ABRIR TICKET",
|
"headerOpenTicket":"ABRIR TICKET",
|
||||||
"typeWarning": "[AVISO]",
|
"typeWarning":"[AVISO]",
|
||||||
"typeInfo": "[INFORMAÇÃO]",
|
"typeInfo":"[INFORMAÇÃO]",
|
||||||
"headerConfigChecker": "Verificador de Configuração",
|
"headerConfigChecker":"Verificador de Configuração",
|
||||||
"headerDescription": "verifique erros nos seus arquivos de configuração!",
|
"headerDescription":"verifique erros nos seus arquivos de configuração!",
|
||||||
"footerError": "o bot não iniciará até que todos os {0} sejam corrigidos!",
|
"footerError":"o bot não iniciará até que todos os {0} sejam corrigidos!",
|
||||||
"footerWarning": "é recomendado corrigir todos os {0} antes de iniciar!",
|
"footerWarning":"é recomendado corrigir todos os {0} antes de iniciar!",
|
||||||
"footerSupport": "SUPORTE: {0} - DOCS: {1}",
|
"footerSupport":"SUPORTE: {0} - DOCS: {1}",
|
||||||
"compactInformation": "use {0} para mais informações!",
|
"compactInformation":"use {0} para mais informações!",
|
||||||
"dataPath": "caminho",
|
"dataPath":"caminho",
|
||||||
"dataDocs": "documentos",
|
"dataDocs":"documentos",
|
||||||
"dataMessages": "mensagem"
|
"dataMessages":"mensagem"
|
||||||
},
|
},
|
||||||
"messages":{
|
"messages":{
|
||||||
"stringTooShort": "Esta string não pode ter menos de {0} caracteres!",
|
"stringTooShort":"Esta string não pode ter menos de {0} caracteres!",
|
||||||
"stringTooLong": "Esta string não pode ter mais de {0} caracteres!",
|
"stringTooLong":"Esta string não pode ter mais de {0} caracteres!",
|
||||||
"stringLengthInvalid": "Esta string precisa ter {0} caracteres!",
|
"stringLengthInvalid":"Esta string precisa ter {0} caracteres!",
|
||||||
"stringStartsWith": "Esta string precisa começar com {0}!",
|
"stringStartsWith":"Esta string precisa começar com {0}!",
|
||||||
"stringEndsWith": "Esta string precisa terminar com {0}!",
|
"stringEndsWith":"Esta string precisa terminar com {0}!",
|
||||||
"stringContains": "Esta string precisa conter {0}!",
|
"stringContains":"Esta string precisa conter {0}!",
|
||||||
"stringChoices": "Esta string só pode ser um dos seguintes valores: {0}!",
|
"stringChoices":"Esta string só pode ser um dos seguintes valores: {0}!",
|
||||||
"stringRegex": "Esta string é inválida!",
|
"stringRegex":"Esta string é inválida!",
|
||||||
|
"stringInvertedContains":"Esta string não pode conter {0}!",
|
||||||
|
"stringLowercase":"Esta string deve ser escrita apenas em letras minúsculas!",
|
||||||
|
"stringUppercase":"Esta string deve ser escrita apenas em letras maiúsculas!",
|
||||||
|
"stringSpecialCharacters":"Esta string não pode conter caracteres especiais! (apenas a-z, 0-9 e espaço)",
|
||||||
|
"stringNoSpaces":"Esta string não pode conter espaços!",
|
||||||
|
"stringCapitalWord":"É recomendado que cada palavra nesta string comece com letra maiúscula!",
|
||||||
|
"stringCapitalSentence":"Parece que algumas frases nesta string não começam com letra maiúscula!",
|
||||||
|
"stringPunctuation":"Parece que a frase nesta string não termina com pontuação!",
|
||||||
|
|
||||||
"numberTooShort": "Este número não pode ter menos de {0} caracteres!",
|
"numberTooShort":"Este número não pode ter menos de {0} caracteres!",
|
||||||
"numberTooLong": "Este número não pode ter mais de {0} caracteres!",
|
"numberTooLong":"Este número não pode ter mais de {0} caracteres!",
|
||||||
"numberLengthInvalid": "Este número precisa ter {0} caracteres!",
|
"numberLengthInvalid":"Este número precisa ter {0} caracteres!",
|
||||||
"numberTooSmall": "Este número precisa ser pelo menos {0}!",
|
"numberTooSmall":"Este número precisa ser pelo menos {0}!",
|
||||||
"numberTooLarge": "Este número precisa ser no máximo {0}!",
|
"numberTooLarge":"Este número precisa ser no máximo {0}!",
|
||||||
"numberNotEqual": "Este número precisa ser {0}!",
|
"numberNotEqual":"Este número precisa ser {0}!",
|
||||||
"numberStep": "Este número precisa ser um múltiplo de {0}!",
|
"numberStep":"Este número precisa ser um múltiplo de {0}!",
|
||||||
"numberStepOffset": "Este número precisa ser um múltiplo de {0} começando com {1}!",
|
"numberStepOffset":"Este número precisa ser um múltiplo de {0} começando com {1}!",
|
||||||
"numberStartsWith": "Este número precisa começar com {0}!",
|
"numberStartsWith":"Este número precisa começar com {0}!",
|
||||||
"numberEndsWith": "Este número precisa terminar com {0}!",
|
"numberEndsWith":"Este número precisa terminar com {0}!",
|
||||||
"numberContains": "Este número precisa conter {0}!",
|
"numberContains":"Este número precisa conter {0}!",
|
||||||
"numberChoices": "Este número só pode ser um dos seguintes valores: {0}!",
|
"numberChoices":"Este número só pode ser um dos seguintes valores: {0}!",
|
||||||
"numberFloat": "Este número não pode ser decimal!",
|
"numberFloat":"Este número não pode ser decimal!",
|
||||||
"numberNegative": "Este número não pode ser negativo!",
|
"numberNegative":"Este número não pode ser negativo!",
|
||||||
"numberPositive": "Este número não pode ser positivo!",
|
"numberPositive":"Este número não pode ser positivo!",
|
||||||
"numberZero": "Este número não pode ser zero!",
|
"numberZero":"Este número não pode ser zero!",
|
||||||
|
"numberNan":"Este número não pode ser NaN (Não é um número)!",
|
||||||
|
"numberInvertedContains":"Este número não pode conter {0}!",
|
||||||
|
|
||||||
"booleanTrue": "Este booleano não pode ser verdadeiro!",
|
"booleanTrue":"Este booleano não pode ser verdadeiro!",
|
||||||
"booleanFalse": "Este booleano não pode ser falso!",
|
"booleanFalse":"Este booleano não pode ser falso!",
|
||||||
|
|
||||||
"arrayEmptyDisabled": "Este array não pode estar vazio!",
|
"arrayEmptyDisabled":"Este array não pode estar vazio!",
|
||||||
"arrayEmptyRequired": "Este array deve estar vazio!",
|
"arrayEmptyRequired":"Este array deve estar vazio!",
|
||||||
"arrayTooShort": "Este array precisa ter um comprimento de pelo menos {0}!",
|
"arrayTooShort":"Este array precisa ter um comprimento de pelo menos {0}!",
|
||||||
"arrayTooLong": "Este array precisa ter um comprimento de no máximo {0}!",
|
"arrayTooLong":"Este array precisa ter um comprimento de no máximo {0}!",
|
||||||
"arrayLengthInvalid": "Este array precisa ter um comprimento de {0}!",
|
"arrayLengthInvalid":"Este array precisa ter um comprimento de {0}!",
|
||||||
"arrayInvalidTypes": "Este array só pode conter os seguintes tipos: {0}!",
|
"arrayInvalidTypes":"Este array só pode conter os seguintes tipos: {0}!",
|
||||||
"arrayDouble": "Este array não permite o mesmo valor duas vezes!",
|
"arrayDouble":"Este array não permite o mesmo valor duas vezes!",
|
||||||
|
|
||||||
"discordInvalidId": "Este é um ID do Discord inválido {0}!",
|
"discordInvalidId":"Este é um ID do Discord inválido {0}!",
|
||||||
"discordInvalidIdOptions": "Este é um ID do Discord inválido {0}! Você também pode usar um destes: {1}!",
|
"discordInvalidIdOptions":"Este é um ID do Discord inválido {0}! Você também pode usar um destes: {1}!",
|
||||||
"discordInvalidToken": "Este é um token do Discord inválido (sintaticamente)!",
|
"discordInvalidToken":"Este é um token do Discord inválido (sintaticamente)!",
|
||||||
"colorInvalid": "Esta é uma cor hexadecimal inválida!",
|
"colorInvalid":"Esta é uma cor hexadecimal inválida!",
|
||||||
"emojiTooShort": "Esta string precisa ter pelo menos {0} emojis!",
|
"emojiTooShort":"Esta string precisa ter pelo menos {0} emojis!",
|
||||||
"emojiTooLong": "Esta string precisa ter no máximo {0} emojis!",
|
"emojiTooLong":"Esta string precisa ter no máximo {0} emojis!",
|
||||||
"emojiCustom": "Este emoji não pode ser um emoji personalizado do Discord!",
|
"emojiCustom":"Este emoji não pode ser um emoji personalizado do Discord!",
|
||||||
"emojiInvalid": "Este é um emoji inválido!",
|
"emojiInvalid":"Este é um emoji inválido!",
|
||||||
"urlInvalid": "Esta URL é inválida!",
|
"urlInvalid":"Esta URL é inválida!",
|
||||||
"urlInvalidHttp": "Esta URL só pode usar o protocolo https://!",
|
"urlInvalidHttp":"Esta URL só pode usar o protocolo https://!",
|
||||||
"urlInvalidProtocol": "Esta URL só pode usar os protocolos http:// e https://!",
|
"urlInvalidProtocol":"Esta URL só pode usar os protocolos http:// e https://!",
|
||||||
"urlInvalidHostname": "Esta URL tem um hostname não permitido!",
|
"urlInvalidHostname":"Esta URL tem um hostname não permitido!",
|
||||||
"urlInvalidExtension": "Esta URL tem uma extensão inválida! Escolha entre: {0}!",
|
"urlInvalidExtension":"Esta URL tem uma extensão inválida! Escolha entre: {0}!",
|
||||||
"urlInvalidPath": "Esta URL tem um caminho inválido!",
|
"urlInvalidPath":"Esta URL tem um caminho inválido!",
|
||||||
"idNotUnique": "Este ID não é único, use outro ID!",
|
"idNotUnique":"Este ID não é único, use outro ID!",
|
||||||
"idNonExistent": "O ID {0} não existe!",
|
"idNonExistent":"O ID {0} não existe!",
|
||||||
|
|
||||||
"invalidType": "Esta propriedade precisa ser do tipo: {0}!",
|
"invalidType":"Esta propriedade precisa ser do tipo: {0}!",
|
||||||
"propertyMissing": "A propriedade {0} está faltando neste objeto!",
|
"propertyMissing":"A propriedade {0} está faltando neste objeto!",
|
||||||
"propertyOptional": "A propriedade {0} é opcional neste objeto!",
|
"propertyOptional":"A propriedade {0} é opcional neste objeto!",
|
||||||
"objectDisabled": "Este objeto está desabilitado, habilite-o usando {0}!",
|
"objectDisabled":"Este objeto está desabilitado, habilite-o usando {0}!",
|
||||||
"nullInvalid": "Esta propriedade não pode ser nula!",
|
"nullInvalid":"Esta propriedade não pode ser nula!",
|
||||||
"switchInvalidType": "Isso precisa ser um dos seguintes tipos: {0}!",
|
"switchInvalidType":"Isso precisa ser um dos seguintes tipos: {0}!",
|
||||||
"objectSwitchInvalid": "Este objeto precisa ser um dos seguintes tipos: {0}!",
|
"objectSwitchInvalid":"Este objeto precisa ser um dos seguintes tipos: {0}!",
|
||||||
|
|
||||||
"invalidLanguage": "Este é um idioma inválido!",
|
"invalidLanguage":"Este é um idioma inválido!",
|
||||||
"invalidButton": "Este botão precisa ter pelo menos um {0} ou {1}!",
|
"invalidButton":"Este botão precisa ter pelo menos um {0} ou {1}!",
|
||||||
"unusedOption": "A opção {0} não é usada em nenhum lugar!",
|
"unusedOption":"A opção {0} não é usada em nenhum lugar!",
|
||||||
"unusedQuestion": "A pergunta {0} não é usada em nenhum lugar!",
|
"unusedQuestion":"A pergunta {0} não é usada em nenhum lugar!",
|
||||||
"dropdownOption": "Um painel com dropdown habilitado só pode conter opções do tipo 'ticket'!"
|
"dropdownOption":"Um painel com menu suspenso só pode conter opções dos tipos: 'ticket', 'role' ou 'sub-panel'.",
|
||||||
|
"customInvalidVersion":"A versão especificada na sua configuração não corresponde! Certifique-se de ter atualizado a configuração para a versão mais recente!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
"buttons":{
|
"buttons":{
|
||||||
"create": "Visitar Ticket",
|
"create":"Visitar Ticket",
|
||||||
"close": "Fechar Ticket",
|
"close":"Fechar Ticket",
|
||||||
"delete": "Excluir Ticket",
|
"delete":"Excluir Ticket",
|
||||||
"reopen": "Reabrir Ticket",
|
"reopen":"Reabrir Ticket",
|
||||||
"claim": "Reivindicar Ticket",
|
"claim":"Reivindicar Ticket",
|
||||||
"unclaim": "Desreivindicar Ticket",
|
"unclaim":"Desreivindicar Ticket",
|
||||||
"pin": "Fixar Ticket",
|
"pin":"Fixar Ticket",
|
||||||
"unpin": "Desfixar Ticket",
|
"unpin":"Desfixar Ticket",
|
||||||
"clear": "Excluir Tickets",
|
"clear":"Excluir Tickets",
|
||||||
"helpSwitchSlash": "Ver Comandos Slash",
|
"helpSwitchSlash":"Ver Comandos Slash",
|
||||||
"helpSwitchText": "Ver Comandos de Texto",
|
"helpSwitchText":"Ver Comandos de Texto",
|
||||||
"helpPage": "Página {0}",
|
"helpPage":"Página {0}",
|
||||||
"withReason": "Com Motivo",
|
"withReason":"Com Motivo",
|
||||||
"withoutTranscript": "Sem Transcrição"
|
"withoutTranscript":"Sem Transcrição",
|
||||||
|
"blacklistAdd":"Colocar Usuário na Lista Negra",
|
||||||
|
"blacklistRemove":"Liberar Usuário"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket Criado",
|
"created":"Ticket Criado",
|
||||||
@@ -132,28 +145,35 @@
|
|||||||
"blacklistAddDm":"Adicionado a Blacklist",
|
"blacklistAddDm":"Adicionado a Blacklist",
|
||||||
"blacklistRemoveDm":"Removido da Blacklist",
|
"blacklistRemoveDm":"Removido da Blacklist",
|
||||||
"clear":"Tickets Limpos",
|
"clear":"Tickets Limpos",
|
||||||
|
"clearTickets":"Limpar Tickets",
|
||||||
"roles":"Cargos Atualizados",
|
"roles":"Cargos Atualizados",
|
||||||
|
|
||||||
"autoclose": "Ticket Fechado Automaticamente",
|
"autoclose":"Ticket Fechado Automaticamente",
|
||||||
"autocloseEnabled": "Fechamento Automático Habilitado",
|
"autocloseEnabled":"Fechamento Automático Habilitado",
|
||||||
"autocloseDisabled": "Fechamento Automático Desabilitado",
|
"autocloseDisabled":"Fechamento Automático Desabilitado",
|
||||||
"autodelete": "Ticket Excluído Automaticamente",
|
"autodelete":"Ticket Excluído Automaticamente",
|
||||||
"autodeleteEnabled": "Exclusão Automática Habilitada",
|
"autodeleteEnabled":"Exclusão Automática Habilitada",
|
||||||
"autodeleteDisabled": "Exclusão Automática Desabilitada"
|
"autodeleteDisabled":"Exclusão Automática Desabilitada",
|
||||||
|
|
||||||
|
"topicSet":"Tópico Alterado",
|
||||||
|
"prioritySet":"Prioridade Alterada",
|
||||||
|
"priorityGet":"Prioridade do Ticket",
|
||||||
|
"transfer":"Ticket Transferido",
|
||||||
|
"transcripts":"Histórico de Transcrições"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create": "Seu ticket foi criado. Clique no botão abaixo para acessá-lo!",
|
"create":"Seu ticket foi criado. Clique no botão abaixo para acessá-lo!",
|
||||||
"close": "O ticket foi fechado com sucesso!",
|
"close":"O ticket foi fechado com sucesso!",
|
||||||
"delete": "O ticket foi excluído com sucesso!",
|
"delete":"O ticket foi excluído com sucesso!",
|
||||||
"reopen": "O ticket foi reaberto com sucesso!",
|
"reopen":"O ticket foi reaberto com sucesso!",
|
||||||
"claim": "O ticket foi reivindicado com sucesso!",
|
"claim":"O ticket foi reivindicado com sucesso!",
|
||||||
"unclaim": "O ticket foi desreivindicado com sucesso!",
|
"unclaim":"O ticket foi desreivindicado com sucesso!",
|
||||||
"pin": "O ticket foi fixado com sucesso!",
|
"pin":"O ticket foi fixado com sucesso!",
|
||||||
"unpin": "O ticket foi desfixado com sucesso!",
|
"unpin":"O ticket foi desfixado com sucesso!",
|
||||||
"rename": "O ticket foi renomeado para {0} com sucesso!",
|
"rename":"O ticket foi renomeado para {0} com sucesso!",
|
||||||
"move": "O ticket foi movido para {0} com sucesso!",
|
"move":"O ticket foi movido para {0} com sucesso!",
|
||||||
"add": "{0} foi adicionado ao ticket com sucesso!",
|
"add":"{0} foi adicionado ao ticket com sucesso!",
|
||||||
"remove": "{0} foi removido do ticket com sucesso!",
|
"remove":"{0} foi removido do ticket com sucesso!",
|
||||||
|
|
||||||
"helpExplanation":"`<nome>` => parâmetro obrigatório\n`[nome]` => parâmetro opcional",
|
"helpExplanation":"`<nome>` => parâmetro obrigatório\n`[nome]` => parâmetro opcional",
|
||||||
"statsReset":"As estatísticas do bot foram redefinidas com sucesso!",
|
"statsReset":"As estatísticas do bot foram redefinidas com sucesso!",
|
||||||
@@ -168,195 +188,255 @@
|
|||||||
"clearReady":"{0} tickets foram excluídos com sucesso!",
|
"clearReady":"{0} tickets foram excluídos com sucesso!",
|
||||||
"rolesEmpty":"Nenhum cargo foi atualizado!",
|
"rolesEmpty":"Nenhum cargo foi atualizado!",
|
||||||
|
|
||||||
"autocloseLeave": "Este ticket foi fechado automaticamente porque o criador saiu do servidor!",
|
"autocloseLeave":"Este ticket foi fechado automaticamente porque o criador saiu do servidor!",
|
||||||
"autocloseTimeout": "Este ticket foi fechado automaticamente porque ficou inativo por mais de `{0}h`!",
|
"autocloseTimeout":"Este ticket foi fechado automaticamente porque ficou inativo por mais de `{0}h`!",
|
||||||
"autodeleteLeave": "Este ticket foi excluído automaticamente porque o criador saiu do servidor!",
|
"autodeleteLeave":"Este ticket foi excluído automaticamente porque o criador saiu do servidor!",
|
||||||
"autodeleteTimeout": "Este ticket foi excluído automaticamente porque ficou inativo por mais de `{0} dias`!",
|
"autodeleteTimeout":"Este ticket foi excluído automaticamente porque ficou inativo por mais de `{0} dias`!",
|
||||||
"autocloseEnabled": "O fechamento automático foi habilitado neste ticket!\nEle será fechado quando ficar inativo por mais de `{0}h`!",
|
"autocloseEnabled":"O fechamento automático foi habilitado neste ticket!\nEle será fechado quando ficar inativo por mais de `{0}h`!",
|
||||||
"autocloseDisabled": "O fechamento automático foi desabilitado neste ticket!\nEle não será mais fechado automaticamente!",
|
"autocloseDisabled":"O fechamento automático foi desabilitado neste ticket!\nEle não será mais fechado automaticamente!",
|
||||||
"autodeleteEnabled": "A exclusão automática foi habilitada neste ticket!\nEle será excluído quando ficar inativo por mais de `{0} dias`!",
|
"autodeleteEnabled":"A exclusão automática foi habilitada neste ticket!\nEle será excluído quando ficar inativo por mais de `{0} dias`!",
|
||||||
"autodeleteDisabled": "A exclusão automática foi desabilitada neste ticket!\nEle não será mais excluído automaticamente!",
|
"autodeleteDisabled":"A exclusão automática foi desabilitada neste ticket!\nEle não será mais excluído automaticamente!",
|
||||||
|
|
||||||
"ticketMessageLimit": "Você só pode criar {0} ticket(s) ao mesmo tempo!",
|
"ticketMessageLimit":"Você só pode criar {0} ticket(s) ao mesmo tempo!",
|
||||||
"ticketMessageAutoclose": "Este ticket será fechado automaticamente quando inativo por {0}h!",
|
"ticketMessageAutoclose":"Este ticket será fechado automaticamente quando inativo por {0}h!",
|
||||||
"ticketMessageAutodelete": "Este ticket será excluído automaticamente quando inativo por {0} dias!",
|
"ticketMessageAutodelete":"Este ticket será excluído automaticamente quando inativo por {0} dias!",
|
||||||
"panelReady": "Você pode encontrar o painel abaixo!\nEsta mensagem agora pode ser excluída!"
|
"panelReady":"O painel está disponível na mensagem de acompanhamento!\nEsta mensagem pode ser excluída agora!",
|
||||||
|
|
||||||
|
"topicSet":"O tópico do canal foi alterado com sucesso por {0}!",
|
||||||
|
"prioritySet":"A prioridade do ticket foi alterada para {0} por {1} com sucesso!",
|
||||||
|
"priorityGet":"A prioridade atual deste ticket é {0}.",
|
||||||
|
"transfer":"A propriedade deste ticket foi transferida de {0} para {1} por {2} com sucesso!"
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder": "Por que você fechou este ticket?",
|
"closePlaceholder":"Por que você fechou este ticket?",
|
||||||
"deletePlaceholder": "Por que você excluiu este ticket?",
|
"deletePlaceholder":"Por que você excluiu este ticket?",
|
||||||
"reopenPlaceholder": "Por que você reabriu este ticket?",
|
"reopenPlaceholder":"Por que você reabriu este ticket?",
|
||||||
"claimPlaceholder": "Por que você reivindicou este ticket?",
|
"claimPlaceholder":"Por que você reivindicou este ticket?",
|
||||||
"unclaimPlaceholder": "Por que você desreivindicou este ticket?",
|
"unclaimPlaceholder":"Por que você desreivindicou este ticket?",
|
||||||
"pinPlaceholder": "Por que você fixou este ticket?",
|
"pinPlaceholder":"Por que você fixou este ticket?",
|
||||||
"unpinPlaceholder": "Por que você desfixou este ticket?"
|
"unpinPlaceholder":"Por que você desfixou este ticket?"
|
||||||
},
|
},
|
||||||
"logs":{
|
"logs":{
|
||||||
"createLog": "Um novo ticket foi criado por {0}!",
|
"createLog":"Um novo ticket foi criado por {0}!",
|
||||||
"closeLog": "Este ticket foi fechado por {0}!",
|
"closeLog":"Este ticket foi fechado por {0}!",
|
||||||
"closeDm": "Seu ticket foi fechado em nosso servidor!",
|
"closeDm":"Seu ticket foi fechado em nosso servidor!",
|
||||||
"deleteLog": "Este ticket foi excluído por {0}!",
|
"deleteLog":"Este ticket foi excluído por {0}!",
|
||||||
"deleteDm": "Seu ticket foi excluído em nosso servidor!",
|
"deleteDm":"Seu ticket foi excluído em nosso servidor!",
|
||||||
"reopenLog": "Este ticket foi reaberto por {0}!",
|
"reopenLog":"Este ticket foi reaberto por {0}!",
|
||||||
"reopenDm": "Seu ticket foi reaberto em nosso servidor!",
|
"reopenDm":"Seu ticket foi reaberto em nosso servidor!",
|
||||||
"claimLog": "Este ticket foi reivindicado por {0}!",
|
"claimLog":"Este ticket foi reivindicado por {0}!",
|
||||||
"claimDm": "Seu ticket foi reivindicado em nosso servidor!",
|
"claimDm":"Seu ticket foi reivindicado em nosso servidor!",
|
||||||
"unclaimLog": "Este ticket foi desreivindicado por {0}!",
|
"unclaimLog":"Este ticket foi desreivindicado por {0}!",
|
||||||
"unclaimDm": "Seu ticket foi desreivindicado em nosso servidor!",
|
"unclaimDm":"Seu ticket foi desreivindicado em nosso servidor!",
|
||||||
"pinLog": "Este ticket foi fixado por {0}!",
|
"pinLog":"Este ticket foi fixado por {0}!",
|
||||||
"pinDm": "Seu ticket foi fixado em nosso servidor!",
|
"pinDm":"Seu ticket foi fixado em nosso servidor!",
|
||||||
"unpinLog": "Este ticket foi desfixado por {0}!",
|
"unpinLog":"Este ticket foi desfixado por {0}!",
|
||||||
"unpinDm": "Seu ticket foi desfixado em nosso servidor!",
|
"unpinDm":"Seu ticket foi desfixado em nosso servidor!",
|
||||||
"renameLog": "Este ticket foi renomeado para {0} por {1}!",
|
"renameLog":"Este ticket foi renomeado para {0} por {1}!",
|
||||||
"renameDm": "Seu ticket foi renomeado para {0} em nosso servidor!",
|
"renameDm":"Seu ticket foi renomeado para {0} em nosso servidor!",
|
||||||
"moveLog": "Este ticket foi movido para {0} por {1}!",
|
"moveLog":"Este ticket foi movido para {0} por {1}!",
|
||||||
"moveDm": "Seu ticket foi movido para {0} em nosso servidor!",
|
"moveDm":"Seu ticket foi movido para {0} em nosso servidor!",
|
||||||
"addLog": "{0} foi adicionado a este ticket por {1}!",
|
"addLog":"{0} foi adicionado a este ticket por {1}!",
|
||||||
"addDm": "{0} foi adicionado ao seu ticket em nosso servidor!",
|
"addDm":"{0} foi adicionado ao seu ticket em nosso servidor!",
|
||||||
"removeLog": "{0} foi removido deste ticket por {1}!",
|
"removeLog":"{0} foi removido deste ticket por {1}!",
|
||||||
"removeDm": "{0} foi removido do seu ticket em nosso servidor!",
|
"removeDm":"{0} foi removido do seu ticket em nosso servidor!",
|
||||||
|
|
||||||
"blacklistAddLog": "{0} foi adicionado à lista negra por {1}!",
|
"blacklistAddLog":"{0} foi adicionado à lista negra por {1}!",
|
||||||
"blacklistRemoveLog": "{0} foi removido da lista negra por {1}!",
|
"blacklistRemoveLog":"{0} foi removido da lista negra por {1}!",
|
||||||
"blacklistAddDm": "Você foi adicionado à lista negra em nosso servidor!\nA partir de agora, você não pode criar um ticket!",
|
"blacklistAddDm":"Você foi adicionado à lista negra em nosso servidor!\nA partir de agora, você não pode criar um ticket!",
|
||||||
"blacklistRemoveDm": "Você foi removido da lista negra em nosso servidor!\nAgora você pode criar tickets novamente!",
|
"blacklistRemoveDm":"Você foi removido da lista negra em nosso servidor!\nAgora você pode criar tickets novamente!",
|
||||||
"clearLog": "{0} tickets foram excluídos por {1}!"
|
"clearLog":"{0} tickets foram excluídos por {1}!",
|
||||||
|
|
||||||
|
"transferLog":"A propriedade deste ticket foi transferida de {0} para {1} por {2}!",
|
||||||
|
"transferDm":"A propriedade do seu ticket foi transferida de {0} para {1} no nosso servidor!",
|
||||||
|
"prioritySetLog":"A prioridade deste ticket foi alterada para {0} por {1}!",
|
||||||
|
"prioritySetDm":"A prioridade do seu ticket foi alterada para {0} no nosso servidor!",
|
||||||
|
"roleUpdateLog":"{0} atualizou suas funções!",
|
||||||
|
"roleUpdateDm":"Suas funções no nosso servidor foram atualizadas!",
|
||||||
|
"topicSetLog":"A prioridade deste ticket foi definida para {0} por {1}.",
|
||||||
|
"topicSetDm":"A prioridade do seu ticket foi definida para {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
"success":{
|
"success":{
|
||||||
"visit": "Visitar Transcrição",
|
"visit":"Visitar Transcrição",
|
||||||
"ready": "Transcrição Criada",
|
"ready":"Transcrição Criada",
|
||||||
"textFileDescription": "Esta é a transcrição em texto de um ticket excluído!",
|
"textFileDescription":"Esta é a transcrição em texto de um ticket excluído!",
|
||||||
"htmlProgress": "Por favor, aguarde enquanto esta transcrição em HTML está sendo processada...",
|
"htmlProgress":"Por favor, aguarde enquanto esta transcrição em HTML está sendo processada...",
|
||||||
|
|
||||||
"createdChannel": "Uma nova transcrição de {0} foi criada no servidor!",
|
"createdChannel":"Uma nova transcrição de {0} foi criada no servidor!",
|
||||||
"createdCreator": "Uma nova transcrição de {0} foi criada para um dos seus tickets!",
|
"createdCreator":"Uma nova transcrição de {0} foi criada para um dos seus tickets!",
|
||||||
"createdParticipant": "Uma nova transcrição de {0} foi criada em um dos tickets em que você participou!",
|
"createdParticipant":"Uma nova transcrição de {0} foi criada em um dos tickets em que você participou!",
|
||||||
"createdActiveAdmin": "Uma nova transcrição de {0} foi criada em um dos tickets em que você participou como administrador!",
|
"createdActiveAdmin":"Uma nova transcrição de {0} foi criada em um dos tickets em que você participou como administrador!",
|
||||||
"createdEveryAdmin": "Uma nova transcrição de {0} foi criada em um dos tickets em que você era administrador!",
|
"createdEveryAdmin":"Uma nova transcrição de {0} foi criada em um dos tickets em que você era administrador!",
|
||||||
"createdOther": "Uma nova transcrição de {0} foi criada!"
|
"createdOther":"Uma nova transcrição de {0} foi criada!"
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
"retry": "Tentar Novamente",
|
"retry":"Tentar Novamente",
|
||||||
"continue": "Excluir Sem Transcrição",
|
"continue":"Excluir Sem Transcrição",
|
||||||
"backup": "Criar Transcrição de Backup",
|
"backup":"Criar Transcrição de Backup",
|
||||||
"error": "Algo deu errado ao tentar criar a transcrição.\nO que você gostaria de fazer?\n\nEste ticket não será excluído até que você clique em um desses botões."
|
"error":"Algo deu errado ao tentar criar a transcrição.\nO que você gostaria de fazer?\n\nEste ticket não será excluído até que você clique em um desses botões.",
|
||||||
|
"title":"Erro de Transcrição",
|
||||||
|
"noHistory":"Este usuário ainda não possui transcrições.",
|
||||||
|
"historyNotSupported":"O histórico de transcrições atualmente é suportado apenas com HTML Transcripts.\nO histórico de transcrições em texto estará disponível em versões futuras."
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"MENSAGENS",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"ARQUIVO",
|
||||||
|
"fieldsTitle":"CAMPOS",
|
||||||
|
"reactionsTitle":"REAÇÕES",
|
||||||
|
"statsTitle":"ESTATÍSTICAS",
|
||||||
|
"emptyContent":"<conteúdo vazio>",
|
||||||
|
"noTitle":"<sem-título>",
|
||||||
|
"noDesc":"<sem-descrição>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
"titles":{
|
"titles":{
|
||||||
"internalError": "Erro Interno",
|
"internalError":"Erro Interno",
|
||||||
"optionMissing": "Opção de Comando Ausente",
|
"optionMissing":"Opção de Comando Ausente",
|
||||||
"optionInvalid": "Opção de Comando Inválida",
|
"optionInvalid":"Opção de Comando Inválida",
|
||||||
"unknownCommand": "Comando Desconhecido",
|
"unknownCommand":"Comando Desconhecido",
|
||||||
"noPermissions": "Sem Permissões",
|
"noPermissions":"Sem Permissões",
|
||||||
"unknownTicket": "Ticket Desconhecido",
|
"unknownTicket":"Ticket Desconhecido",
|
||||||
"deprecatedTicket": "Ticket Obsoleto",
|
"deprecatedTicket":"Ticket Obsoleto",
|
||||||
"unknownOption": "Opção Desconhecida",
|
"unknownOption":"Opção Desconhecida",
|
||||||
"unknownPanel": "Painel Desconhecido",
|
"unknownPanel":"Painel Desconhecido",
|
||||||
"notInGuild": "Não Está no Servidor",
|
"notInGuild":"Não Está no Servidor",
|
||||||
"channelRename": "Incapaz de Renomear Canal",
|
"channelRename":"Incapaz de Renomear Canal",
|
||||||
"busy": "Ticket Está Ocupado"
|
"channelCategory":"Não Foi Possível Alterar a Categoria",
|
||||||
|
"busy":"Ticket Está Ocupado",
|
||||||
|
"permissionError":"Erro de Permissão"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo": "Entre em contato com o proprietário deste bot para mais informações!",
|
"askForInfo":"Entre em contato com o proprietário deste bot para mais informações!",
|
||||||
"askForInfoResolve": "Entre em contato com o proprietário deste bot se este problema não for resolvido após algumas tentativas.",
|
"askForInfoResolve":"Entre em contato com o proprietário deste bot se este problema não for resolvido após algumas tentativas.",
|
||||||
"internalError": "Falha ao responder a este {0} devido a um erro interno!",
|
"internalError":"Falha ao responder a este {0} devido a um erro interno!",
|
||||||
"optionMissing": "Um parâmetro obrigatório está faltando neste comando!",
|
"optionMissing":"Um parâmetro obrigatório está faltando neste comando!",
|
||||||
"optionInvalid": "Um parâmetro neste comando é inválido!",
|
"optionInvalid":"Um parâmetro neste comando é inválido!",
|
||||||
"optionInvalidChoose": "Escolha entre",
|
"optionInvalidChoose":"Escolha entre",
|
||||||
"unknownCommand": "Tente visitar o menu de ajuda para mais informações!",
|
"unknownCommand":"Tente visitar o menu de ajuda para mais informações!",
|
||||||
"noPermissions": "Você não tem permissão para usar este {0}!",
|
"noPermissions":"Você não tem permissão para usar este {0}!",
|
||||||
"noPermissionsList": "Permissões Necessárias: (uma delas)",
|
"noPermissionsList":"Permissões Necessárias: (uma delas)",
|
||||||
"noPermissionsCooldown": "Você não tem permissão para usar este {0} porque você está em período de cooldown!",
|
"noPermissionsCooldown":"Você não tem permissão para usar este {0} porque você está em período de cooldown!",
|
||||||
"noPermissionsBlacklist": "Você não tem permissão para usar este {0} porque você foi colocado na lista negra!",
|
"noPermissionsBlacklist":"Você não tem permissão para usar este {0} porque você foi colocado na lista negra!",
|
||||||
"noPermissionsLimitGlobal": "Você não tem permissão para criar um ticket porque o servidor atingiu o limite máximo de tickets!",
|
"noPermissionsLimitGlobal":"Você não tem permissão para criar um ticket porque o servidor atingiu o limite máximo de tickets!",
|
||||||
"noPermissionsLimitGlobalUser": "Você não tem permissão para criar um ticket porque você atingiu o limite máximo de tickets!",
|
"noPermissionsLimitGlobalUser":"Você não tem permissão para criar um ticket porque você atingiu o limite máximo de tickets!",
|
||||||
"noPermissionsLimitOption": "Você não tem permissão para criar um ticket porque o servidor atingiu o limite máximo de tickets para esta opção!",
|
"noPermissionsLimitOption":"Você não tem permissão para criar um ticket porque o servidor atingiu o limite máximo de tickets para esta opção!",
|
||||||
"noPermissionsLimitOptionUser": "Você não tem permissão para criar um ticket porque você atingiu o limite máximo de tickets para esta opção!",
|
"noPermissionsLimitOptionUser":"Você não tem permissão para criar um ticket porque você atingiu o limite máximo de tickets para esta opção!",
|
||||||
"unknownTicket": "Tente este comando novamente em um ticket válido!",
|
"unknownTicket":"Tente este comando novamente em um ticket válido!",
|
||||||
"deprecatedTicket": "O canal atual não é um ticket válido! Pode ter sido um ticket de uma versão antiga do Open Ticket!",
|
"deprecatedTicket":"O canal atual não é um ticket válido! Pode ter sido um ticket de uma versão antiga do Open Ticket!",
|
||||||
"notInGuild": "Este {0} não funciona em DM! Por favor, tente novamente em um servidor!",
|
"notInGuild":"Este {0} não funciona em DM! Por favor, tente novamente em um servidor!",
|
||||||
"channelRename": "Devido aos limites de taxa do Discord, atualmente é impossível para o bot renomear o canal. O canal será renomeado automaticamente em 10 minutos se o bot não for reiniciado.",
|
"channelRename":"Devido aos limites de taxa do Discord, atualmente é impossível para o bot renomear o canal. O canal será renomeado automaticamente em 10 minutos se o bot não for reiniciado.",
|
||||||
"channelRenameSource": "A fonte deste erro é: {0}",
|
"channelCategory":"Devido aos limites de taxa do Discord, a categoria do canal não pôde ser alterada imediatamente. Ela será alterada automaticamente dentro de 10 minutos se o bot permanecer online.",
|
||||||
"busy": "Não é possível usar este {0}!\nO ticket está sendo processado pelo bot no momento.\n\nPor favor, tente novamente em alguns segundos!"
|
"channelRenameSource":"A fonte deste erro é: {0}",
|
||||||
|
"busy":"Não é possível usar este {0}!\nO ticket está sendo processado pelo bot no momento.\n\nPor favor, tente novamente em alguns segundos!",
|
||||||
|
"closeBeforeMessage":"Este ticket não pode ser fechado/excluído antes de uma mensagem ser enviada por um usuário.",
|
||||||
|
"closeBeforeAdminMessage":"Este ticket não pode ser fechado/excluído antes de uma mensagem ser enviada por um administrador ou membro do suporte.",
|
||||||
|
"unableToCreateTicket":"Você não pode criar um ticket.",
|
||||||
|
"messageMissing":"Não foi possível localizar a mensagem da interação. Use o comando `{0}` em vez disso.",
|
||||||
|
"stateExpired":"Esta interação não é mais válida ou expirou. Use o comando `{0}` em vez disso. É normal receber este erro após uma grande atualização do Open Ticket.",
|
||||||
|
"panelStateExpired":"Este painel não é mais válido ou expirou. Crie um novo painel usando `{0}` para resolver o problema. É normal receber este erro após uma grande atualização do Open Ticket."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex": "O valor não corresponde ao padrão!",
|
"stringRegex":"O valor não corresponde ao padrão!",
|
||||||
"stringMinLength": "O valor precisa ter pelo menos {0} caracteres!",
|
"stringMinLength":"O valor precisa ter pelo menos {0} caracteres!",
|
||||||
"stringMaxLength": "O valor precisa ter no máximo {0} caracteres!",
|
"stringMaxLength":"O valor precisa ter no máximo {0} caracteres!",
|
||||||
"numberInvalid": "Número inválido!",
|
"numberInvalid":"Número inválido!",
|
||||||
"numberMin": "O número precisa ser pelo menos {0}!",
|
"numberMin":"O número precisa ser pelo menos {0}!",
|
||||||
"numberMax": "O número precisa ser no máximo {0}!",
|
"numberMax":"O número precisa ser no máximo {0}!",
|
||||||
"numberDecimal": "Não é permitido que o número seja decimal!",
|
"numberDecimal":"Não é permitido que o número seja decimal!",
|
||||||
"numberNegative": "Não é permitido que o número seja negativo!",
|
"numberNegative":"Não é permitido que o número seja negativo!",
|
||||||
"numberPositive": "Não é permitido que o número seja positivo!",
|
"numberPositive":"Não é permitido que o número seja positivo!",
|
||||||
"numberZero": "Não é permitido que o número seja zero!",
|
"numberZero":"Não é permitido que o número seja zero!",
|
||||||
"channelNotFound": "Não foi possível encontrar o canal!",
|
"channelNotFound":"Não foi possível encontrar o canal!",
|
||||||
"userNotFound": "Não foi possível encontrar o usuário!",
|
"userNotFound":"Não foi possível encontrar o usuário!",
|
||||||
"roleNotFound": "Não foi possível encontrar o cargo!",
|
"roleNotFound":"Não foi possível encontrar o cargo!",
|
||||||
"memberNotFound": "Não foi possível encontrar o usuário!",
|
"memberNotFound":"Não foi possível encontrar o usuário!",
|
||||||
"mentionableNotFound": "Não foi possível encontrar o usuário ou cargo!",
|
"mentionableNotFound":"Não foi possível encontrar o usuário ou cargo!",
|
||||||
"channelType": "Tipo de canal inválido!",
|
"channelType":"Tipo de canal inválido!",
|
||||||
"notInGuild": "Esta opção requer que você esteja em um servidor!"
|
"notInGuild":"Esta opção requer que você esteja em um servidor!"
|
||||||
},
|
},
|
||||||
"permissions": {
|
"permissions":{
|
||||||
"developer": "Você precisa ser o desenvolvedor do bot.",
|
"developer":"Você precisa ser o desenvolvedor do bot.",
|
||||||
"owner": "Você precisa ser o dono do servidor.",
|
"owner":"Você precisa ser o dono do servidor.",
|
||||||
"admin": "Você precisa ser um administrador do servidor.",
|
"admin":"Você precisa ser um administrador do servidor.",
|
||||||
"moderator": "Você precisa ser um moderador.",
|
"moderator":"Você precisa ser um moderador.",
|
||||||
"support": "Você precisa estar na equipe de suporte.",
|
"support":"Você precisa estar na equipe de suporte.",
|
||||||
"member": "Você precisa ser um membro.",
|
"member":"Você precisa ser um membro.",
|
||||||
"discord-administrator": "Você precisa ter a permissão `ADMINISTRATOR`."
|
"discord-administrator":"Você precisa ter a permissão `ADMINISTRATOR`."
|
||||||
},
|
},
|
||||||
"actionInvalid":{
|
"actionInvalid":{
|
||||||
"close": "O ticket já está fechado!",
|
"close":"O ticket já está fechado!",
|
||||||
"reopen": "O ticket ainda não está fechado!",
|
"reopen":"O ticket ainda não está fechado!",
|
||||||
"claim": "O ticket já está reivindicado!",
|
"claim":"O ticket já está reivindicado!",
|
||||||
"unclaim": "O ticket ainda não está reivindicado!",
|
"unclaim":"O ticket ainda não está reivindicado!",
|
||||||
"pin": "O ticket já está fixado!",
|
"pin":"O ticket já está fixado!",
|
||||||
"unpin": "O ticket ainda não está fixado!",
|
"unpin":"O ticket ainda não está fixado!",
|
||||||
"add": "Este usuário já pode acessar o ticket!",
|
"add":"Este usuário já pode acessar o ticket!",
|
||||||
"remove": "Não foi possível remover este usuário do ticket!"
|
"remove":"Não foi possível remover este usuário do ticket!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"params":{
|
"params":{
|
||||||
"uppercase":{
|
"uppercase":{
|
||||||
"ticket":"Ticket",
|
"ticket":"Ticket",
|
||||||
"tickets":"Tickets",
|
"tickets":"Tickets",
|
||||||
"reason":"Motivo",
|
"reason":"Motivo",
|
||||||
"creator":"Criador",
|
"creator":"Criador",
|
||||||
"remaining":"Tempo Restante",
|
"remaining":"Tempo Restante",
|
||||||
"added":"Adicionado",
|
"added":"Adicionado",
|
||||||
"removed":"Removido",
|
"removed":"Removido",
|
||||||
"filter":"Filtro",
|
"filter":"Filtro",
|
||||||
"claimedBy":"Reivindicado por {0}",
|
"method":"Método",
|
||||||
"method":"Método",
|
"type":"Tipo",
|
||||||
"type":"Tipo",
|
"blacklisted":"Na Lista Negra",
|
||||||
"blacklisted":"Na Lista Negra",
|
"panel":"Painel",
|
||||||
"panel":"Painel",
|
"command":"Comando",
|
||||||
"command":"Comando",
|
"system":"Sistema",
|
||||||
"system":"Sistema",
|
"true":"Verdadeiro",
|
||||||
"true":"Verdadeiro",
|
"false":"Falso",
|
||||||
"false":"Falso",
|
"syntax":"Sintaxe",
|
||||||
"syntax":"Sintaxe",
|
"originalName":"Nome Original",
|
||||||
"originalName":"Nome Original",
|
"newName":"Novo Nome",
|
||||||
"newName":"Novo Nome",
|
"originalCategory":"Categoria Original",
|
||||||
"until":"Até",
|
"newCategory":"Nova Categoria",
|
||||||
"validOptions":"Opções Válidas",
|
"until":"Até",
|
||||||
"validPanels":"Painéis Válidos",
|
"validOptions":"Opções Válidas",
|
||||||
"autoclose":"Auto-fechar",
|
"validPanels":"Painéis Válidos",
|
||||||
"autodelete":"Auto-deletar",
|
"autoclose":"Auto-fechar",
|
||||||
"startupDate":"Data de Início",
|
"autodelete":"Auto-deletar",
|
||||||
"version":"Versão",
|
"startupDate":"Data de Início",
|
||||||
"name":"Nome",
|
"version":"Versão",
|
||||||
"role":"Cargo",
|
"name":"Nome",
|
||||||
"status":"Status",
|
"role":"Cargo",
|
||||||
"claimed":"Reivindicado",
|
"status":"STATUS",
|
||||||
"pinned":"Fixado",
|
"claimed":"Reivindicado",
|
||||||
"creationDate":"Data de Criação"
|
"pinned":"Fixado",
|
||||||
},
|
"creationDate":"Data de Criação",
|
||||||
|
|
||||||
|
"noone":"Ninguém",
|
||||||
|
"open":"ABERTO",
|
||||||
|
"closed":"FECHADO",
|
||||||
|
"priority":"PRIORIDADE",
|
||||||
|
"participants":"PARTICIPANTES",
|
||||||
|
"yes":"Sim",
|
||||||
|
"no":"Não",
|
||||||
|
"accept":"Aceitar",
|
||||||
|
"cancel":"Cancelar",
|
||||||
|
"option":"Opção",
|
||||||
|
"topic":"Tópico",
|
||||||
|
"uptime":"Tempo de Atividade do Sistema",
|
||||||
|
"messages":"Mensagens",
|
||||||
|
"embeds":"Embeds",
|
||||||
|
"files":"Arquivos",
|
||||||
|
"components":"Componentes",
|
||||||
|
"cooldown":"Tempo de Espera",
|
||||||
|
"maxTickets":"Máx. Tickets",
|
||||||
|
"admins":"Administradores",
|
||||||
|
"roles":"Funções",
|
||||||
|
"size":"Tamanho"
|
||||||
|
},
|
||||||
"lowercase":{
|
"lowercase":{
|
||||||
"text":"texto",
|
"text":"texto",
|
||||||
"html":"html",
|
"html":"html",
|
||||||
@@ -368,99 +448,128 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"commands":{
|
"commands":{
|
||||||
"reason": "Especifique um motivo opcional que será visível nos logs.",
|
"reason":"Especifique um motivo opcional que será visível nos logs.",
|
||||||
"help": "Obtenha uma lista de todos os comandos disponíveis.",
|
"help":"Obtenha uma lista de todos os comandos disponíveis.",
|
||||||
"panel": "Gerar uma mensagem com um dropdown ou botões (para criação de tickets).",
|
"panel":"Gerar uma mensagem com um dropdown ou botões (para criação de tickets).",
|
||||||
"panelId": "O identificador do painel que você deseja gerar.",
|
"panelId":"O identificador do painel que você deseja gerar.",
|
||||||
"panelAutoUpdate": "Você quer que este painel atualize automaticamente quando editado?",
|
"panelAutoUpdate":"Você quer que este painel atualize automaticamente quando editado?",
|
||||||
"ticket": "Crie um ticket instantaneamente.",
|
"ticket":"Crie um ticket instantaneamente.",
|
||||||
"ticketId": "O identificador do ticket que você deseja criar.",
|
"ticketId":"O identificador do ticket que você deseja criar.",
|
||||||
"close": "Feche um ticket.",
|
"ticketOtherUser":"Criar um ticket para outro usuário.",
|
||||||
"delete": "Exclua um ticket.",
|
"close":"Feche um ticket.",
|
||||||
"deleteNoTranscript": "Exclua este ticket sem criar uma transcrição.",
|
"delete":"Exclua um ticket.",
|
||||||
"reopen": "Reabra um ticket.",
|
"deleteNoTranscript":"Exclua este ticket sem criar uma transcrição.",
|
||||||
"claim": "Assuma um ticket.",
|
"reopen":"Reabra um ticket.",
|
||||||
"claimUser": "Assuma este ticket para outra pessoa em vez de você mesmo.",
|
"claim":"Assuma um ticket.",
|
||||||
"unclaim": "Desassuma um ticket.",
|
"claimUser":"Assuma este ticket para outra pessoa em vez de você mesmo.",
|
||||||
"pin": "Fixe um ticket.",
|
"unclaim":"Desassuma um ticket.",
|
||||||
"unpin": "Desfixe um ticket.",
|
"pin":"Fixe um ticket.",
|
||||||
"move": "Mova um ticket.",
|
"unpin":"Desfixe um ticket.",
|
||||||
"moveId": "O identificador do opção para o qual você deseja mover.",
|
|
||||||
"rename": "Renomeie um ticket.",
|
"move":"Mova um ticket.",
|
||||||
"renameName": "O novo nome para este ticket.",
|
"moveId":"O identificador do opção para o qual você deseja mover.",
|
||||||
"add": "Adicione um usuário a um ticket.",
|
"rename":"Renomeie um ticket.",
|
||||||
"addUser": "O usuário a ser adicionado.",
|
"renameName":"O novo nome para este ticket.",
|
||||||
"remove": "Remover um usuário de um ticket.",
|
"add":"Adicione um usuário a um ticket.",
|
||||||
"removeUser": "O usuário a ser removido.",
|
"addUser":"O usuário a ser adicionado.",
|
||||||
"blacklist": "Gerenciar a lista negra de tickets.",
|
"remove":"Remover um usuário de um ticket.",
|
||||||
"blacklistView": "Ver uma lista da blacklist atual.",
|
"removeUser":"O usuário a ser removido.",
|
||||||
"blacklistAdd": "Adicionar um usuário à blacklist.",
|
|
||||||
"blacklistRemove": "Remover um usuário da blacklist.",
|
"blacklist":"Gerenciar a lista negra de tickets.",
|
||||||
"blacklistGet": "Obter os detalhes de um usuário na blacklist.",
|
"blacklistView":"Ver uma lista da blacklist atual.",
|
||||||
"blacklistGetUser": "O usuário para obter detalhes.",
|
"blacklistAdd":"Adicionar um usuário à blacklist.",
|
||||||
"stats": "Ver estatísticas do bot, de um membro ou de um ticket.",
|
"blacklistRemove":"Remover um usuário da blacklist.",
|
||||||
"statsReset": "Redefinir todas as estatísticas do bot (e começar a contar do zero).",
|
"blacklistGet":"Obter os detalhes de um usuário na blacklist.",
|
||||||
"statsGlobal": "Ver as estatísticas globais.",
|
"blacklistGetUser":"O usuário para obter detalhes.",
|
||||||
"statsUser": "Ver as estatísticas de um usuário no servidor.",
|
"stats":"Ver estatísticas do bot, de um membro ou de um ticket.",
|
||||||
"statsUserUser": "O usuário para visualizar.",
|
"statsReset":"Redefinir todas as estatísticas do bot (e começar a contar do zero).",
|
||||||
"statsTicket": "Ver as estatísticas de um ticket no servidor.",
|
"statsGlobal":"Ver as estatísticas globais.",
|
||||||
"statsTicketTicket": "O ticket para visualizar.",
|
"statsUser":"Ver as estatísticas de um usuário no servidor.",
|
||||||
"clear": "Excluir vários tickets ao mesmo tempo. Um filtro opcional pode ser especificado.",
|
"statsUserUser":"O usuário para visualizar.",
|
||||||
"clearFilter": "O filtro para limpar tickets.",
|
"statsTicket":"Ver as estatísticas de um ticket no servidor.",
|
||||||
"clearFilters": {
|
"statsTicketTicket":"O ticket para visualizar.",
|
||||||
"all": "Todos",
|
|
||||||
"open": "Aberto",
|
"clear":"Excluir vários tickets ao mesmo tempo. Um filtro opcional pode ser especificado.",
|
||||||
"close": "Fechado",
|
"clearFilter":"O filtro para limpar tickets.",
|
||||||
"claim": "Reivindicado",
|
"clearFilters":{
|
||||||
"unclaim": "Não Reivindicado",
|
"all":"Todos",
|
||||||
"pin": "Fixado",
|
"open":"Aberto",
|
||||||
"unpin": "Desfixado",
|
"close":"Fechado",
|
||||||
"autoclose": "Fechado Automaticamente"
|
"claim":"Reivindicado",
|
||||||
|
"unclaim":"Não Reivindicado",
|
||||||
|
"pin":"Fixado",
|
||||||
|
"unpin":"Desfixado",
|
||||||
|
"autoclose":"Fechado Automaticamente"
|
||||||
},
|
},
|
||||||
"autoclose": "Gerenciar fechamento automático em um ticket.",
|
|
||||||
"autocloseDisable": "Desabilitar fechamento automático neste ticket.",
|
"autoclose":"Gerenciar fechamento automático em um ticket.",
|
||||||
"autocloseEnable": "Habilitar fechamento automático neste ticket.",
|
"autocloseDisable":"Desabilitar fechamento automático neste ticket.",
|
||||||
"autocloseEnableTime": "A quantidade de horas que este ticket precisa estar inativo para ser fechado.",
|
"autocloseEnable":"Habilitar fechamento automático neste ticket.",
|
||||||
"autodelete": "Gerenciar exclusão automática em um ticket.",
|
"autocloseEnableTime":"A quantidade de horas que este ticket precisa estar inativo para ser fechado.",
|
||||||
"autodeleteDisable": "Desabilitar exclusão automática neste ticket.",
|
"autodelete":"Gerenciar exclusão automática em um ticket.",
|
||||||
"autodeleteEnable": "Habilitar exclusão automática neste ticket.",
|
"autodeleteDisable":"Desabilitar exclusão automática neste ticket.",
|
||||||
"autodeleteEnableTime": "A quantidade de dias que este ticket precisa estar inativo para ser excluído."
|
"autodeleteEnable":"Habilitar exclusão automática neste ticket.",
|
||||||
|
"autodeleteEnableTime":"A quantidade de dias que este ticket precisa estar inativo para ser excluído.",
|
||||||
|
|
||||||
|
"topic":"Gerenciar o tópico do canal do ticket.",
|
||||||
|
"topicSet":"Definir o tópico do canal do ticket.",
|
||||||
|
"topicValue":"O novo tópico do canal.",
|
||||||
|
"topicList":"Obter uma lista de todos os tickets com seus tópicos e estatísticas.",
|
||||||
|
"priority":"Gerenciar a prioridade do ticket.",
|
||||||
|
"prioritySet":"Definir a prioridade do ticket.",
|
||||||
|
"priorityValue":"Prioridade do canal.",
|
||||||
|
"priorityGet":"Obter a prioridade do ticket.",
|
||||||
|
"priorityList":"Obter uma lista de todos os tickets com seu status de prioridade.",
|
||||||
|
"transfer":"Transferir a propriedade do ticket de um usuário para outro.",
|
||||||
|
"transferUser":"O usuário para transferir.",
|
||||||
|
"transcripts":"Ver o histórico de transcrições de tickets de um usuário.",
|
||||||
|
"transcriptsUser":"O usuário para visualizar."
|
||||||
},
|
},
|
||||||
"helpMenu": {
|
"helpMenu":{
|
||||||
"help": "Obtenha uma lista de todos os comandos disponíveis.",
|
"help":"Obtenha uma lista de todos os comandos disponíveis.",
|
||||||
"ticket": "Crie um ticket instantaneamente.",
|
"ticket":"Crie um ticket instantaneamente.",
|
||||||
"close": "Feche um ticket, isso desabilita a escrita neste canal.",
|
"close":"Feche um ticket, isso desabilita a escrita neste canal.",
|
||||||
"delete": "Exclua um ticket, isso cria uma transcrição quando habilitado.",
|
"delete":"Exclua um ticket, isso cria uma transcrição quando habilitado.",
|
||||||
"reopen": "Reabra um ticket, isso habilita a escrita neste canal novamente.",
|
"reopen":"Reabra um ticket, isso habilita a escrita neste canal novamente.",
|
||||||
"pin": "Fixe um ticket. Isso moverá o ticket para o topo e adicionará um emoji '📌' ao nome.",
|
"pin":"Fixe um ticket. Isso moverá o ticket para o topo e adicionará um emoji '📌' ao nome.",
|
||||||
"unpin": "Desfixe um ticket. O ticket permanecerá na sua posição, mas perderá o emoji '📌'.",
|
"unpin":"Desfixe um ticket. O ticket permanecerá na sua posição, mas perderá o emoji '📌'.",
|
||||||
"move": "Mova um ticket. Isso mudará o tipo deste ticket.",
|
"move":"Mova um ticket. Isso mudará o tipo deste ticket.",
|
||||||
"rename": "Renomeie um ticket. Isso mudará o nome do canal deste ticket.",
|
"rename":"Renomeie um ticket. Isso mudará o nome do canal deste ticket.",
|
||||||
"claim": "Assuma um ticket. Com isso, você pode informar à sua equipe que está lidando com este ticket.",
|
"claim":"Assuma um ticket. Com isso, você pode informar à sua equipe que está lidando com este ticket.",
|
||||||
"unclaim": "Desassuma um ticket. Com isso, você pode informar à sua equipe que este ticket está livre novamente.",
|
"unclaim":"Desassuma um ticket. Com isso, você pode informar à sua equipe que este ticket está livre novamente.",
|
||||||
"add": "Adicione um usuário a um ticket. Isso permitirá que o usuário leia e escreva neste ticket.",
|
"add":"Adicione um usuário a um ticket. Isso permitirá que o usuário leia e escreva neste ticket.",
|
||||||
"remove": "Remova um usuário de um ticket. Isso removerá a capacidade de ler e escrever para um usuário neste ticket.",
|
"remove":"Remova um usuário de um ticket. Isso removerá a capacidade de ler e escrever para um usuário neste ticket.",
|
||||||
"panel": "Gere uma mensagem com um dropdown ou botões (para criação de tickets).",
|
"panel":"Gere uma mensagem com um dropdown ou botões (para criação de tickets).",
|
||||||
"blacklistView": "Veja uma lista da blacklist atual.",
|
"blacklistView":"Veja uma lista da blacklist atual.",
|
||||||
"blacklistAdd": "Adicione um usuário à blacklist.",
|
"blacklistAdd":"Adicione um usuário à blacklist.",
|
||||||
"blacklistRemove": "Remova um usuário da blacklist.",
|
"blacklistRemove":"Remova um usuário da blacklist.",
|
||||||
"blacklistGet": "Obtenha os detalhes de um usuário na blacklist.",
|
"blacklistGet":"Obtenha os detalhes de um usuário na blacklist.",
|
||||||
"statsGlobal": "Veja as estatísticas globais.",
|
"statsGlobal":"Veja as estatísticas globais.",
|
||||||
"statsTicket": "Veja as estatísticas de um ticket no servidor.",
|
"statsTicket":"Veja as estatísticas de um ticket no servidor.",
|
||||||
"statsUser": "Veja as estatísticas de um usuário no servidor.",
|
"statsUser":"Veja as estatísticas de um usuário no servidor.",
|
||||||
"statsReset": "Redefina todas as estatísticas do bot (e comece a contar do zero).",
|
"statsReset":"Redefina todas as estatísticas do bot (e comece a contar do zero).",
|
||||||
"autocloseDisable": "Desabilite o fechamento automático neste ticket.",
|
"autocloseDisable":"Desabilite o fechamento automático neste ticket.",
|
||||||
"autocloseEnable": "Habilite o fechamento automático neste ticket.",
|
"autocloseEnable":"Habilite o fechamento automático neste ticket.",
|
||||||
"autodeleteDisable": "Desabilite a exclusão automática neste ticket.",
|
"autodeleteDisable":"Desabilite a exclusão automática neste ticket.",
|
||||||
"autodeleteEnable": "Habilite a exclusão automática neste ticket."
|
"autodeleteEnable":"Habilite a exclusão automática neste ticket.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Comandos Gerais",
|
||||||
|
"basicTicket":"Comandos Básicos de Ticket",
|
||||||
|
"advancedTicket":"Comandos Avançados de Ticket",
|
||||||
|
"userTicket":"Comandos de Ticket de Usuário",
|
||||||
|
"admin":"Comandos de Administrador",
|
||||||
|
"advanced":"Comandos Avançados",
|
||||||
|
"extra":"Comandos Extras"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes": {
|
"scopes":{
|
||||||
"global": "Status Global",
|
"global":"Status Global",
|
||||||
"system": "Status do Sistema",
|
"system":"Status do Sistema",
|
||||||
"user": "Status do Usuário",
|
"user":"Status do Usuário",
|
||||||
"ticket": "Status do Ticket",
|
"ticket":"Status do Ticket",
|
||||||
"participants": "Participantes"
|
"participants":"Participantes",
|
||||||
|
"messages":"Mensagens"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Tickets Criados",
|
"ticketsCreated":"Tickets Criados",
|
||||||
@@ -472,7 +581,48 @@
|
|||||||
"ticketsPinned":"Tickets Fixados",
|
"ticketsPinned":"Tickets Fixados",
|
||||||
"ticketsMoved":"Tickets Movidos",
|
"ticketsMoved":"Tickets Movidos",
|
||||||
"usersBlacklisted":"Usuários na Blacklist",
|
"usersBlacklisted":"Usuários na Blacklist",
|
||||||
"transcriptsCreated":"Transcrição Criada"
|
"transcriptsCreated":"Transcrição Criada",
|
||||||
|
"ticketsAutodeleted":"Tickets Autodeletados",
|
||||||
|
"ticketsTransferred":"Tickets Transferidos",
|
||||||
|
"ticketVolume":"Volume de Tickets",
|
||||||
|
"averageTickets":"Média de Tickets/Usuário",
|
||||||
|
"currentTickets":"Tickets Atuais",
|
||||||
|
"age":"Idade do Ticket",
|
||||||
|
"responseTime":"Tempo de Resposta",
|
||||||
|
"resolutionTime":"Tempo de Resolução",
|
||||||
|
"createdOn":"Criado em",
|
||||||
|
"createdBy":"Criado por",
|
||||||
|
"closedOn":"Fechado em",
|
||||||
|
"closedBy":"Fechado por",
|
||||||
|
"claimedOn":"Reivindicado em",
|
||||||
|
"claimedBy":"Reivindicado por",
|
||||||
|
"pinnedOn":"Fixado em",
|
||||||
|
"pinnedBy":"Fixado por",
|
||||||
|
"deletedOn":"Excluído em",
|
||||||
|
"deletedBy":"Excluído por"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Desenvolvedor",
|
||||||
|
"serverOwner":"Proprietário do Servidor",
|
||||||
|
"serverAdmin":"Administrador do Servidor",
|
||||||
|
"moderator":"Equipe de Moderadores",
|
||||||
|
"support":"Equipe de Suporte",
|
||||||
|
"member":"Membro"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Selecione seu ticket",
|
||||||
|
"selectRole":"Selecione sua função",
|
||||||
|
"selectOption":"Selecione sua opção",
|
||||||
|
"selectPriorityLevel":"Selecionar nível de prioridade"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Urgente",
|
||||||
|
"veryHigh":"Muito Alta",
|
||||||
|
"high":"Alta",
|
||||||
|
"normal":"Normal",
|
||||||
|
"low":"Baixa",
|
||||||
|
"veryLow":"Muito Baixa",
|
||||||
|
"none":"Nenhuma"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+167
-17
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["SankeDev"],
|
"translators":["SankeDev"],
|
||||||
"lastedited":"27/08/2024",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Romanian",
|
"language":"Romanian",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,6 +31,14 @@
|
|||||||
"stringContains":"Acest string trebuie sa contina {0}!",
|
"stringContains":"Acest string trebuie sa contina {0}!",
|
||||||
"stringChoices":"Acest string poate fi doar una dintre urmatoarele optiuni: {0}!",
|
"stringChoices":"Acest string poate fi doar una dintre urmatoarele optiuni: {0}!",
|
||||||
"stringRegex":"String invalid!",
|
"stringRegex":"String invalid!",
|
||||||
|
"stringInvertedContains":"Acest șir nu are voie să conțină {0}!",
|
||||||
|
"stringLowercase":"Acest șir trebuie scris doar cu litere mici!",
|
||||||
|
"stringUppercase":"Acest șir trebuie scris doar cu litere mari!",
|
||||||
|
"stringSpecialCharacters":"Acest șir nu are voie să conțină caractere speciale! (doar a-z, 0-9 și spațiu)",
|
||||||
|
"stringNoSpaces":"Acest șir nu are voie să conțină spații!",
|
||||||
|
"stringCapitalWord":"Este recomandat ca fiecare cuvânt din acest șir să înceapă cu literă mare!",
|
||||||
|
"stringCapitalSentence":"Se pare că unele propoziții din acest șir nu încep cu literă mare!",
|
||||||
|
"stringPunctuation":"Se pare că propoziția din acest șir nu se termină cu un semn de punctuație!",
|
||||||
|
|
||||||
"numberTooShort":"Acest numar nu poate fi mai scurt de {0} caractere!",
|
"numberTooShort":"Acest numar nu poate fi mai scurt de {0} caractere!",
|
||||||
"numberTooLong":"Acest numar nu poate fi mai lung de {0} caractere!",
|
"numberTooLong":"Acest numar nu poate fi mai lung de {0} caractere!",
|
||||||
@@ -48,6 +56,8 @@
|
|||||||
"numberNegative":"Acest numar nu poate fi negativ!",
|
"numberNegative":"Acest numar nu poate fi negativ!",
|
||||||
"numberPositive":"Acest numar nu poate fi pozitiv!",
|
"numberPositive":"Acest numar nu poate fi pozitiv!",
|
||||||
"numberZero":"Acest numar nu poate sa fie 0!",
|
"numberZero":"Acest numar nu poate sa fie 0!",
|
||||||
|
"numberNan":"Acest număr nu poate fi NaN (Not A Number)!",
|
||||||
|
"numberInvertedContains":"Acest număr nu are voie să conțină {0}!",
|
||||||
|
|
||||||
"booleanTrue":"Aceasta valoare boolean nu poate sa fie adevarata!",
|
"booleanTrue":"Aceasta valoare boolean nu poate sa fie adevarata!",
|
||||||
"booleanFalse":"Aceasta valoare boolean nu poate sa fie falsa!",
|
"booleanFalse":"Aceasta valoare boolean nu poate sa fie falsa!",
|
||||||
@@ -89,7 +99,8 @@
|
|||||||
"invalidButton":"Acest buton trebuie sa aiba cel putin un {0} sau {1}!",
|
"invalidButton":"Acest buton trebuie sa aiba cel putin un {0} sau {1}!",
|
||||||
"unusedOption":"Optiunea {0} nu este folosita nicaieri!",
|
"unusedOption":"Optiunea {0} nu este folosita nicaieri!",
|
||||||
"unusedQuestion":"Intrebarea {0} nu este folosita nicaieri!",
|
"unusedQuestion":"Intrebarea {0} nu este folosita nicaieri!",
|
||||||
"dropdownOption":"Un meniul cu dropdown activat poate contine doar valori din categoria 'ticket'!"
|
"dropdownOption":"Un panou cu meniu derulant poate conține doar opțiuni de tipurile: 'ticket', 'role' sau 'sub-panel'.",
|
||||||
|
"customInvalidVersion":"Versiunea specificată în configurația ta nu corespunde! Asigură-te că ai actualizat configurația la cea mai recentă versiune!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -107,7 +118,9 @@
|
|||||||
"helpSwitchText":"Vezi Text Commands",
|
"helpSwitchText":"Vezi Text Commands",
|
||||||
"helpPage":"Pagina {0}",
|
"helpPage":"Pagina {0}",
|
||||||
"withReason":"Cu motiv",
|
"withReason":"Cu motiv",
|
||||||
"withoutTranscript":"Fara Transcript"
|
"withoutTranscript":"Fara Transcript",
|
||||||
|
"blacklistAdd":"Adaugă Utilizatorul pe Lista Neagră",
|
||||||
|
"blacklistRemove":"Eliberează Utilizatorul"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket Creat",
|
"created":"Ticket Creat",
|
||||||
@@ -132,6 +145,7 @@
|
|||||||
"blacklistAddDm":"Adaugat la Blacklist",
|
"blacklistAddDm":"Adaugat la Blacklist",
|
||||||
"blacklistRemoveDm":"Sters din Blacklist",
|
"blacklistRemoveDm":"Sters din Blacklist",
|
||||||
"clear":"Tickets Curatate",
|
"clear":"Tickets Curatate",
|
||||||
|
"clearTickets":"Ștergere Tichete",
|
||||||
"roles":"Roluri Actualizate",
|
"roles":"Roluri Actualizate",
|
||||||
|
|
||||||
"autoclose":"Ticket Inchis Automat",
|
"autoclose":"Ticket Inchis Automat",
|
||||||
@@ -139,7 +153,13 @@
|
|||||||
"autocloseDisabled":"Inchidere Automata Dezactivata",
|
"autocloseDisabled":"Inchidere Automata Dezactivata",
|
||||||
"autodelete":"Ticket Sters Automat",
|
"autodelete":"Ticket Sters Automat",
|
||||||
"autodeleteEnabled":"Stergere Automata Activata",
|
"autodeleteEnabled":"Stergere Automata Activata",
|
||||||
"autodeleteDisabled":"Stergere Automata Dezactivata"
|
"autodeleteDisabled":"Stergere Automata Dezactivata",
|
||||||
|
|
||||||
|
"topicSet":"Subiect Modificat",
|
||||||
|
"prioritySet":"Prioritate Modificată",
|
||||||
|
"priorityGet":"Prioritate Tichet",
|
||||||
|
"transfer":"Tichet Transferat",
|
||||||
|
"transcripts":"Istoric Transcrieri"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Ticket-ul tau a fost creat cu succes! Apasa pe butonul de mai jos pentru a-l vizualiza!",
|
"create":"Ticket-ul tau a fost creat cu succes! Apasa pe butonul de mai jos pentru a-l vizualiza!",
|
||||||
@@ -180,7 +200,12 @@
|
|||||||
"ticketMessageLimit":"Poti creea doar {0} tickete in acelasi timp!",
|
"ticketMessageLimit":"Poti creea doar {0} tickete in acelasi timp!",
|
||||||
"ticketMessageAutoclose":"Acest ticket va fi inchis automat cand va deveni inactiv de mai mult de {0}h!",
|
"ticketMessageAutoclose":"Acest ticket va fi inchis automat cand va deveni inactiv de mai mult de {0}h!",
|
||||||
"ticketMessageAutodelete":"Acest ticket va fi sters automat cand va deveni inactiv de mai mult de {0} zile!",
|
"ticketMessageAutodelete":"Acest ticket va fi sters automat cand va deveni inactiv de mai mult de {0} zile!",
|
||||||
"panelReady":"Panelul poate fi gasit mai jos!\nAcest mesaj poate fi sters acum."
|
"panelReady":"Panoul este disponibil în mesajul următor!\nAcest mesaj poate fi șters acum!",
|
||||||
|
|
||||||
|
"topicSet":"Subiectul canalului a fost modificat cu succes de {0}!",
|
||||||
|
"prioritySet":"Prioritatea tichetului a fost modificată la {0} de către {1} cu succes!",
|
||||||
|
"priorityGet":"Prioritatea curentă a acestui tichet este {0}.",
|
||||||
|
"transfer":"Proprietatea tichetului a fost transferată de la {0} la {1} de către {2} cu succes!"
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder":"De ce inchizi acest ticket?",
|
"closePlaceholder":"De ce inchizi acest ticket?",
|
||||||
@@ -220,7 +245,16 @@
|
|||||||
"blacklistRemoveLog":"{0} a fost eliminat din blacklist de {1}!",
|
"blacklistRemoveLog":"{0} a fost eliminat din blacklist de {1}!",
|
||||||
"blacklistAddDm":"Ai fost adaugat in blacklist pe serverul nostru!\nNu mai poti creea tickete!",
|
"blacklistAddDm":"Ai fost adaugat in blacklist pe serverul nostru!\nNu mai poti creea tickete!",
|
||||||
"blacklistRemoveDm":"Ai fost scos din blacklist pe serverul nostru!\nPoti sa creezi tickete din nou!",
|
"blacklistRemoveDm":"Ai fost scos din blacklist pe serverul nostru!\nPoti sa creezi tickete din nou!",
|
||||||
"clearLog":"{0} tickete au fost sterse de {1}!"
|
"clearLog":"{0} tickete au fost sterse de {1}!",
|
||||||
|
|
||||||
|
"transferLog":"Proprietatea acestui tichet a fost transferată de la {0} la {1} de către {2}!",
|
||||||
|
"transferDm":"Proprietatea tichetului tău a fost transferată de la {0} la {1} pe serverul nostru!",
|
||||||
|
"prioritySetLog":"Prioritatea acestui tichet a fost modificată la {0} de către {1}!",
|
||||||
|
"prioritySetDm":"Prioritatea tichetului tău a fost modificată la {0} pe serverul nostru!",
|
||||||
|
"roleUpdateLog":"{0} și-a actualizat rolurile!",
|
||||||
|
"roleUpdateDm":"Rolurile tale pe serverul nostru au fost actualizate!",
|
||||||
|
"topicSetLog":"Prioritatea acestui tichet a fost setată la {0} de către {1}.",
|
||||||
|
"topicSetDm":"Prioritatea tichetului tău a fost setată la {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -241,7 +275,21 @@
|
|||||||
"retry":"Reincearca",
|
"retry":"Reincearca",
|
||||||
"continue":"Sterge fara Transcript",
|
"continue":"Sterge fara Transcript",
|
||||||
"backup":"Creeaza un Transcript de Backup",
|
"backup":"Creeaza un Transcript de Backup",
|
||||||
"error":"Ceva nu a mers bine cand s-a incercat creearea transcriptului.\nCum doresti sa continui?\n\nAcest ticket nu va fi modificat pana cand nu apesi pe unul dintre butoane."
|
"error":"Ceva nu a mers bine cand s-a incercat creearea transcriptului.\nCum doresti sa continui?\n\nAcest ticket nu va fi modificat pana cand nu apesi pe unul dintre butoane.",
|
||||||
|
"title":"Eroare Transcriere",
|
||||||
|
"noHistory":"Acest utilizator nu are încă nicio transcriere.",
|
||||||
|
"historyNotSupported":"Istoricul transcrierilor este momentan suportat doar cu HTML Transcripts.\nIstoricul transcrierilor text va fi disponibil în versiunile viitoare."
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"MESAJE",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"FIȘIER",
|
||||||
|
"fieldsTitle":"CÂMPURI",
|
||||||
|
"reactionsTitle":"REACȚII",
|
||||||
|
"statsTitle":"STATISTICI",
|
||||||
|
"emptyContent":"<conținutul este gol>",
|
||||||
|
"noTitle":"<fără-titlu>",
|
||||||
|
"noDesc":"<fără-descriere>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
@@ -257,7 +305,9 @@
|
|||||||
"unknownPanel":"Panel Necunoscut",
|
"unknownPanel":"Panel Necunoscut",
|
||||||
"notInGuild":"Nu este in server",
|
"notInGuild":"Nu este in server",
|
||||||
"channelRename":"Nu se poate redenumi canalul",
|
"channelRename":"Nu se poate redenumi canalul",
|
||||||
"busy":"Ticket ocupat"
|
"channelCategory":"Categoria Nu Poate Fi Schimbată",
|
||||||
|
"busy":"Ticket ocupat",
|
||||||
|
"permissionError":"Eroare de Permisiune"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Contacteaza ownerul botului pentru mai multe informatii.",
|
"askForInfo":"Contacteaza ownerul botului pentru mai multe informatii.",
|
||||||
@@ -279,8 +329,15 @@
|
|||||||
"deprecatedTicket":"Acest ticket este deprecat si nu mai poate fi folosit! Posibil sa fie dintr-o versiune veche Open Ticket!",
|
"deprecatedTicket":"Acest ticket este deprecat si nu mai poate fi folosit! Posibil sa fie dintr-o versiune veche Open Ticket!",
|
||||||
"notInGuild":"Aceasta {0} poate fi folosita doar in server!",
|
"notInGuild":"Aceasta {0} poate fi folosita doar in server!",
|
||||||
"channelRename":"Nu s-a putut redenumi canalul din cauza unor limitari Discord! Canalul va fi redenumit in 10 minute daca botul nu va fi repornit.",
|
"channelRename":"Nu s-a putut redenumi canalul din cauza unor limitari Discord! Canalul va fi redenumit in 10 minute daca botul nu va fi repornit.",
|
||||||
|
"channelCategory":"Din cauza limitelor de rată Discord, categoria canalului nu a putut fi schimbată imediat. Va fi schimbată automat în 10 minute dacă botul rămâne online.",
|
||||||
"channelRenameSource":"Sursa acestei erori este: {0}",
|
"channelRenameSource":"Sursa acestei erori este: {0}",
|
||||||
"busy":"Nu se poate executa {0}!\nTicketul este in curs de procesare.\n\nTe rugam sa incerci din nou in cateva minute!"
|
"busy":"Nu se poate executa {0}!\nTicketul este in curs de procesare.\n\nTe rugam sa incerci din nou in cateva minute!",
|
||||||
|
"closeBeforeMessage":"Acest tichet nu poate fi închis/șters înainte ca un mesaj să fi fost trimis de un utilizator.",
|
||||||
|
"closeBeforeAdminMessage":"Acest tichet nu poate fi închis/șters înainte ca un mesaj să fi fost trimis de un administrator de tichete sau un membru al echipei de suport.",
|
||||||
|
"unableToCreateTicket":"Nu poți crea un tichet.",
|
||||||
|
"messageMissing":"Nu s-a putut găsi mesajul interacțiunii. Folosește comanda `{0}` în schimb.",
|
||||||
|
"stateExpired":"Această interacțiune nu mai este validă sau a expirat. Folosește comanda `{0}` în schimb. Este normal să primești această eroare după o actualizare majoră Open Ticket.",
|
||||||
|
"panelStateExpired":"Acest panou nu mai este valid sau a expirat. Creează un nou panou folosind `{0}` pentru a rezolva problema. Este normal să primești această eroare după o actualizare majoră Open Ticket."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Valoarea nu respecta formatul necesar!",
|
"stringRegex":"Valoarea nu respecta formatul necesar!",
|
||||||
@@ -331,7 +388,6 @@
|
|||||||
"added":"Adaugat",
|
"added":"Adaugat",
|
||||||
"removed":"Sters",
|
"removed":"Sters",
|
||||||
"filter":"Filtru",
|
"filter":"Filtru",
|
||||||
"claimedBy":"Revendicat de {0}",
|
|
||||||
"method":"Metoda",
|
"method":"Metoda",
|
||||||
"type":"Tip",
|
"type":"Tip",
|
||||||
"blacklisted":"Blacklistat",
|
"blacklisted":"Blacklistat",
|
||||||
@@ -343,6 +399,8 @@
|
|||||||
"syntax":"Sintaxa",
|
"syntax":"Sintaxa",
|
||||||
"originalName":"Nume Original",
|
"originalName":"Nume Original",
|
||||||
"newName":"Nume Nou",
|
"newName":"Nume Nou",
|
||||||
|
"originalCategory":"Categoria Originală",
|
||||||
|
"newCategory":"Categorie Nouă",
|
||||||
"until":"Pana",
|
"until":"Pana",
|
||||||
"validOptions":"Optiuni Valide",
|
"validOptions":"Optiuni Valide",
|
||||||
"validPanels":"Panels Valide",
|
"validPanels":"Panels Valide",
|
||||||
@@ -352,10 +410,32 @@
|
|||||||
"version":"Versiune",
|
"version":"Versiune",
|
||||||
"name":"Nume",
|
"name":"Nume",
|
||||||
"role":"Rol",
|
"role":"Rol",
|
||||||
"status":"Status",
|
"status":"STARE",
|
||||||
"claimed":"Revendicat",
|
"claimed":"Revendicat",
|
||||||
"pinned":"Fixat",
|
"pinned":"Fixat",
|
||||||
"creationDate":"Data Crearii"
|
"creationDate":"Data Crearii",
|
||||||
|
|
||||||
|
"noone":"NIMENI",
|
||||||
|
"open":"DESCHIS",
|
||||||
|
"closed":"ÎNCHIS",
|
||||||
|
"priority":"PRIORITATE",
|
||||||
|
"participants":"PARTICIPANȚI",
|
||||||
|
"yes":"DA",
|
||||||
|
"no":"NU",
|
||||||
|
"accept":"Acceptă",
|
||||||
|
"cancel":"Anulează",
|
||||||
|
"option":"OPȚIUNE",
|
||||||
|
"topic":"SUBIECT",
|
||||||
|
"uptime":"TIM P FUNCȚIONARE SISTEM",
|
||||||
|
"messages":"MESAJE",
|
||||||
|
"embeds":"EMBEDURI",
|
||||||
|
"files":"FIȘIERE",
|
||||||
|
"components":"COMPONENTE",
|
||||||
|
"cooldown":"COOLDOWN",
|
||||||
|
"maxTickets":"MAX TICHETE",
|
||||||
|
"admins":"ADMINI",
|
||||||
|
"roles":"ROLURI",
|
||||||
|
"size":"DIMENSIUNE"
|
||||||
},
|
},
|
||||||
"lowercase":{
|
"lowercase":{
|
||||||
"text":"text",
|
"text":"text",
|
||||||
@@ -375,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Activeaza sau dezactiveaza actualizarea automata a panelului.",
|
"panelAutoUpdate":"Activeaza sau dezactiveaza actualizarea automata a panelului.",
|
||||||
"ticket":"Creeaza instant un ticket.",
|
"ticket":"Creeaza instant un ticket.",
|
||||||
"ticketId":"Id-ul ticketului pe care vrei sa il folosesti.",
|
"ticketId":"Id-ul ticketului pe care vrei sa il folosesti.",
|
||||||
|
"ticketOtherUser":"Creează un tichet pentru alt utilizator.",
|
||||||
"close":"Inchide un ticket.",
|
"close":"Inchide un ticket.",
|
||||||
"delete":"Sterge un ticket.",
|
"delete":"Sterge un ticket.",
|
||||||
"deleteNoTranscript":"Sterge un ticket fara a crea un transcript.",
|
"deleteNoTranscript":"Sterge un ticket fara a crea un transcript.",
|
||||||
@@ -384,6 +465,7 @@
|
|||||||
"unclaim":"Elibereaza un ticket.",
|
"unclaim":"Elibereaza un ticket.",
|
||||||
"pin":"Fixeaza un ticket.",
|
"pin":"Fixeaza un ticket.",
|
||||||
"unpin":"Defixeaza un ticket.",
|
"unpin":"Defixeaza un ticket.",
|
||||||
|
|
||||||
"move":"Muta un ticket.",
|
"move":"Muta un ticket.",
|
||||||
"moveId":"Id-ul tipului de optiune in care vrei sa muti acest ticket.",
|
"moveId":"Id-ul tipului de optiune in care vrei sa muti acest ticket.",
|
||||||
"rename":"Redenumeste un ticket.",
|
"rename":"Redenumeste un ticket.",
|
||||||
@@ -392,6 +474,7 @@
|
|||||||
"addUser":"Userul pe care vrei sa il adaugi.",
|
"addUser":"Userul pe care vrei sa il adaugi.",
|
||||||
"remove":"Sterge un user dintr-un ticket.",
|
"remove":"Sterge un user dintr-un ticket.",
|
||||||
"removeUser":"Userul pe care vrei sa il stergi.",
|
"removeUser":"Userul pe care vrei sa il stergi.",
|
||||||
|
|
||||||
"blacklist":"Gestioneaza blacklist-ul in server.",
|
"blacklist":"Gestioneaza blacklist-ul in server.",
|
||||||
"blacklistView":"Vezi o lista cu toti userii blacklisted.",
|
"blacklistView":"Vezi o lista cu toti userii blacklisted.",
|
||||||
"blacklistAdd":"Adauga un user in blacklist.",
|
"blacklistAdd":"Adauga un user in blacklist.",
|
||||||
@@ -405,6 +488,7 @@
|
|||||||
"statsUserUser":"Userul pe care vrei sa il vezi.",
|
"statsUserUser":"Userul pe care vrei sa il vezi.",
|
||||||
"statsTicket":"Vezi statisticile unui ticket in server.",
|
"statsTicket":"Vezi statisticile unui ticket in server.",
|
||||||
"statsTicketTicket":"Ticketul pe care vrei sa il vezi.",
|
"statsTicketTicket":"Ticketul pe care vrei sa il vezi.",
|
||||||
|
|
||||||
"clear":"Sterge mai multe tickete in acelasi timp.",
|
"clear":"Sterge mai multe tickete in acelasi timp.",
|
||||||
"clearFilter":"Filtrul pentru ștergerea biletelor.",
|
"clearFilter":"Filtrul pentru ștergerea biletelor.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +501,7 @@
|
|||||||
"unpin":"Nefixat",
|
"unpin":"Nefixat",
|
||||||
"autoclose":"Inchis Automat"
|
"autoclose":"Inchis Automat"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Gestioneaza inchiderea automata a unui ticket.",
|
"autoclose":"Gestioneaza inchiderea automata a unui ticket.",
|
||||||
"autocloseDisable":"Dezactiveaza inchiderea automata in acest ticket.",
|
"autocloseDisable":"Dezactiveaza inchiderea automata in acest ticket.",
|
||||||
"autocloseEnable":"Activeaza inchiderea automata in acest ticket.",
|
"autocloseEnable":"Activeaza inchiderea automata in acest ticket.",
|
||||||
@@ -424,7 +509,21 @@
|
|||||||
"autodelete":"Gestioneaza stergerea automata a unui ticket.",
|
"autodelete":"Gestioneaza stergerea automata a unui ticket.",
|
||||||
"autodeleteDisable":"Dezactiveaza stergerea automata in acest ticket.",
|
"autodeleteDisable":"Dezactiveaza stergerea automata in acest ticket.",
|
||||||
"autodeleteEnable":"Activeaza stergerea automata in acest ticket.",
|
"autodeleteEnable":"Activeaza stergerea automata in acest ticket.",
|
||||||
"autodeleteEnableTime":"Numarul de zile in care acest ticket trebuie sa fie inactiv pentru a fi sters."
|
"autodeleteEnableTime":"Numarul de zile in care acest ticket trebuie sa fie inactiv pentru a fi sters.",
|
||||||
|
|
||||||
|
"topic":"Gestionează subiectul canalului de tichet.",
|
||||||
|
"topicSet":"Setează subiectul canalului de tichet.",
|
||||||
|
"topicValue":"Noul subiect al canalului.",
|
||||||
|
"topicList":"Obține o listă cu toate tichetele, împreună cu subiectul și statisticile lor.",
|
||||||
|
"priority":"Gestionează prioritatea tichetului.",
|
||||||
|
"prioritySet":"Setează prioritatea tichetului.",
|
||||||
|
"priorityValue":"Prioritatea canalului.",
|
||||||
|
"priorityGet":"Obține prioritatea tichetului.",
|
||||||
|
"priorityList":"Obține o listă cu toate tichetele și starea priorității lor.",
|
||||||
|
"transfer":"Transferă proprietatea tichetului de la un utilizator la altul.",
|
||||||
|
"transferUser":"Utilizatorul către care se face transferul.",
|
||||||
|
"transcripts":"Vezi istoricul transcrierilor tichetelor unui utilizator.",
|
||||||
|
"transcriptsUser":"Utilizatorul de vizualizat."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Afiseaza o lista cu toate comenzile disponibile.",
|
"help":"Afiseaza o lista cu toate comenzile disponibile.",
|
||||||
@@ -452,7 +551,16 @@
|
|||||||
"autocloseDisable":"Dezactiveaza inchiderea automata in acest ticket.",
|
"autocloseDisable":"Dezactiveaza inchiderea automata in acest ticket.",
|
||||||
"autocloseEnable":"Activeaza inchiderea automata in acest ticket.",
|
"autocloseEnable":"Activeaza inchiderea automata in acest ticket.",
|
||||||
"autodeleteDisable":"Dezactiveaza stergerea automata in acest ticket.",
|
"autodeleteDisable":"Dezactiveaza stergerea automata in acest ticket.",
|
||||||
"autodeleteEnable":"Activeaza stergerea automata in acest ticket."
|
"autodeleteEnable":"Activeaza stergerea automata in acest ticket.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Comenzi Generale",
|
||||||
|
"basicTicket":"Comenzi de Bază pentru Tichete",
|
||||||
|
"advancedTicket":"Comenzi Avansate pentru Tichete",
|
||||||
|
"userTicket":"Comenzi pentru Tichete Utilizator",
|
||||||
|
"admin":"Comenzi Administrator",
|
||||||
|
"advanced":"Comenzi Avansate",
|
||||||
|
"extra":"Comenzi Extra"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +568,8 @@
|
|||||||
"system":"Statistici Sistem",
|
"system":"Statistici Sistem",
|
||||||
"user":"Statistici User",
|
"user":"Statistici User",
|
||||||
"ticket":"Statistici Ticket",
|
"ticket":"Statistici Ticket",
|
||||||
"participants":"Participanti"
|
"participants":"Participanti",
|
||||||
|
"messages":"Mesaje"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Tickete Create",
|
"ticketsCreated":"Tickete Create",
|
||||||
@@ -472,7 +581,48 @@
|
|||||||
"ticketsPinned":"Tickete Fixate",
|
"ticketsPinned":"Tickete Fixate",
|
||||||
"ticketsMoved":"Tickete Mutate",
|
"ticketsMoved":"Tickete Mutate",
|
||||||
"usersBlacklisted":"Useri Blacklisted",
|
"usersBlacklisted":"Useri Blacklisted",
|
||||||
"transcriptsCreated":"Transcripturi Create"
|
"transcriptsCreated":"Transcripturi Create",
|
||||||
|
"ticketsAutodeleted":"Tichete Șterse Automat",
|
||||||
|
"ticketsTransferred":"Tichete Transferate",
|
||||||
|
"ticketVolume":"Volum Tichete",
|
||||||
|
"averageTickets":"Medie Tichete/Utilizator",
|
||||||
|
"currentTickets":"Tichete Curente",
|
||||||
|
"age":"Vechime Tichet",
|
||||||
|
"responseTime":"Timp de Răspuns",
|
||||||
|
"resolutionTime":"Timp de Rezolvare",
|
||||||
|
"createdOn":"Creat La",
|
||||||
|
"createdBy":"Creat De",
|
||||||
|
"closedOn":"Închis La",
|
||||||
|
"closedBy":"Închis De",
|
||||||
|
"claimedOn":"Preluat La",
|
||||||
|
"claimedBy":"Preluat De",
|
||||||
|
"pinnedOn":"Fixat La",
|
||||||
|
"pinnedBy":"Fixat De",
|
||||||
|
"deletedOn":"Șters La",
|
||||||
|
"deletedBy":"Șters De"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Dezvoltator",
|
||||||
|
"serverOwner":"Proprietar Server",
|
||||||
|
"serverAdmin":"Administrator Server",
|
||||||
|
"moderator":"Echipă Moderare",
|
||||||
|
"support":"Echipă Suport",
|
||||||
|
"member":"Membru"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Selectează tichetul tău",
|
||||||
|
"selectRole":"Selectează rolul tău",
|
||||||
|
"selectOption":"Selectează opțiunea ta",
|
||||||
|
"selectPriorityLevel":"Selectează nivelul de prioritate"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Urgent",
|
||||||
|
"veryHigh":"Foarte Ridicată",
|
||||||
|
"high":"Ridicată",
|
||||||
|
"normal":"Normală",
|
||||||
|
"low":"Scăzută",
|
||||||
|
"veryLow":"Foarte Scăzută",
|
||||||
|
"none":"Niciuna"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+600
-437
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["HanumeshGupta","ChatGPT"],
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Simplified Chainese",
|
"language":"Simplified Chainese",
|
||||||
"automated":true
|
"automated":true
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"invalidButton":"此按钮必须至少有一个{0}或{1}!",
|
"invalidButton":"此按钮必须至少有一个{0}或{1}!",
|
||||||
"unusedOption":"选项{0}未在任何地方使用!",
|
"unusedOption":"选项{0}未在任何地方使用!",
|
||||||
"unusedQuestion":"问题{0}未在任何地方使用!",
|
"unusedQuestion":"问题{0}未在任何地方使用!",
|
||||||
"dropdownOption":"启用下拉菜单的面板只能包含“ticket”类型的选项!",
|
"dropdownOption":"带下拉菜单的面板只能包含以下类型的选项:'ticket'、'role' 或 'sub-panel'。",
|
||||||
"customInvalidVersion":"配置文件中指定的版本不匹配!请确保您已将配置更新至最新版本!"
|
"customInvalidVersion":"配置文件中指定的版本不匹配!请确保您已将配置更新至最新版本!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"查看文本命令",
|
"helpSwitchText":"查看文本命令",
|
||||||
"helpPage":"第{0}页",
|
"helpPage":"第{0}页",
|
||||||
"withReason":"带原因",
|
"withReason":"带原因",
|
||||||
"withoutTranscript":"不带记录"
|
"withoutTranscript":"不带记录",
|
||||||
|
"blacklistAdd":"添加用户至黑名单",
|
||||||
|
"blacklistRemove":"释放用户"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"工单已创建",
|
"created":"工单已创建",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"主题已更改",
|
"topicSet":"主题已更改",
|
||||||
"prioritySet":"优先级已更改",
|
"prioritySet":"优先级已更改",
|
||||||
"priorityGet":"工单优先级",
|
"priorityGet":"工单优先级",
|
||||||
"transfer":"工单已转移"
|
"transfer":"工单已转移",
|
||||||
|
"transcripts":"记录历史"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"您的工单已创建。点击下方按钮访问!",
|
"create":"您的工单已创建。点击下方按钮访问!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"此工单的优先级已由 {1} 更改为 {0}!",
|
"prioritySetLog":"此工单的优先级已由 {1} 更改为 {0}!",
|
||||||
"prioritySetDm":"您在服务器中的工单优先级已更改为 {0}!",
|
"prioritySetDm":"您在服务器中的工单优先级已更改为 {0}!",
|
||||||
"roleUpdateLog":"{0} 已更新其角色!",
|
"roleUpdateLog":"{0} 已更新其角色!",
|
||||||
"roleUpdateDm":"您在服务器中的角色已更新!"
|
"roleUpdateDm":"您在服务器中的角色已更新!",
|
||||||
|
"topicSetLog":"此工单的优先级已由 {1} 设置为 {0}。",
|
||||||
|
"topicSetDm":"你的工单优先级已设置为 {0}。"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"continue":"删除无记录",
|
"continue":"删除无记录",
|
||||||
"backup":"创建备份记录",
|
"backup":"创建备份记录",
|
||||||
"error":"创建记录时出错。\n您想怎么做?\n\n在您点击以下按钮之前,此工单不会被删除。",
|
"error":"创建记录时出错。\n您想怎么做?\n\n在您点击以下按钮之前,此工单不会被删除。",
|
||||||
"title":"记录错误"
|
"title":"记录错误",
|
||||||
|
"noHistory":"该用户目前没有任何记录。",
|
||||||
|
"historyNotSupported":"目前仅支持 HTML Transcripts 的记录历史。\n文本记录历史将在未来版本中提供。"
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"消息",
|
"messagesTitle":"消息",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"未知面板",
|
"unknownPanel":"未知面板",
|
||||||
"notInGuild":"不在服务器中",
|
"notInGuild":"不在服务器中",
|
||||||
"channelRename":"无法重命名频道",
|
"channelRename":"无法重命名频道",
|
||||||
|
"channelCategory":"无法更改分类",
|
||||||
"busy":"工单繁忙",
|
"busy":"工单繁忙",
|
||||||
"permissionError":"权限错误"
|
"permissionError":"权限错误"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"当前频道不是有效工单!可能是旧版Open Ticket的工单!",
|
"deprecatedTicket":"当前频道不是有效工单!可能是旧版Open Ticket的工单!",
|
||||||
"notInGuild":"此{0}在私信中无效!请在服务器中重试!",
|
"notInGuild":"此{0}在私信中无效!请在服务器中重试!",
|
||||||
"channelRename":"由于Discord速率限制,机器人目前无法重命名频道。如果机器人未重启,频道将在10分钟后自动重命名。",
|
"channelRename":"由于Discord速率限制,机器人目前无法重命名频道。如果机器人未重启,频道将在10分钟后自动重命名。",
|
||||||
|
"channelCategory":"由于 Discord 速率限制,频道分类无法立即更改。如果机器人保持在线,将在 10 分钟内自动更改。",
|
||||||
"channelRenameSource":"此错误的来源是:{0}",
|
"channelRenameSource":"此错误的来源是:{0}",
|
||||||
"busy":"无法使用此{0}!\n工单当前正在被机器人处理。\n\n请几秒后重试!",
|
"busy":"无法使用此{0}!\n工单当前正在被机器人处理。\n\n请几秒后重试!",
|
||||||
"closeBeforeMessage":"用户发送消息之前,无法关闭或删除此工单。",
|
"closeBeforeMessage":"用户发送消息之前,无法关闭或删除此工单。",
|
||||||
"closeBeforeAdminMessage":"工单管理员或支持成员发送消息之前,无法关闭或删除此工单。",
|
"closeBeforeAdminMessage":"工单管理员或支持成员发送消息之前,无法关闭或删除此工单。",
|
||||||
"unableToCreateTicket":"您无法创建工单。"
|
"unableToCreateTicket":"您无法创建工单。",
|
||||||
|
"messageMissing":"无法找到交互消息。请改用命令 `{0}`。",
|
||||||
|
"stateExpired":"此交互已无效或已过期。请改用命令 `{0}`。在 Open Ticket 大版本更新后出现此错误是正常的。",
|
||||||
|
"panelStateExpired":"此面板已无效或已过期。请使用 `{0}` 创建新面板以解决问题。在 Open Ticket 大版本更新后出现此错误是正常的。"
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"值不符合模式!",
|
"stringRegex":"值不符合模式!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"语法",
|
"syntax":"语法",
|
||||||
"originalName":"原名称",
|
"originalName":"原名称",
|
||||||
"newName":"新名称",
|
"newName":"新名称",
|
||||||
|
"originalCategory":"原始分类",
|
||||||
|
"newCategory":"新分类",
|
||||||
"until":"直到",
|
"until":"直到",
|
||||||
"validOptions":"有效选项",
|
"validOptions":"有效选项",
|
||||||
"validPanels":"有效面板",
|
"validPanels":"有效面板",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"参与者",
|
"participants":"参与者",
|
||||||
"yes":"是",
|
"yes":"是",
|
||||||
"no":"否",
|
"no":"否",
|
||||||
|
"accept":"接受",
|
||||||
|
"cancel":"取消",
|
||||||
"option":"选项",
|
"option":"选项",
|
||||||
"topic":"主题",
|
"topic":"主题",
|
||||||
"uptime":"系统运行时间",
|
"uptime":"系统运行时间",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"您希望此面板在编辑时自动更新吗?",
|
"panelAutoUpdate":"您希望此面板在编辑时自动更新吗?",
|
||||||
"ticket":"立即创建一个工单。",
|
"ticket":"立即创建一个工单。",
|
||||||
"ticketId":"您想要创建的工单的标识符。",
|
"ticketId":"您想要创建的工单的标识符。",
|
||||||
|
"ticketOtherUser":"为其他用户创建工单。",
|
||||||
"close":"关闭一个工单。",
|
"close":"关闭一个工单。",
|
||||||
"delete":"删除一个工单。",
|
"delete":"删除一个工单。",
|
||||||
"deleteNoTranscript":"删除此工单而不创建记录。",
|
"deleteNoTranscript":"删除此工单而不创建记录。",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"获取工单的优先级。",
|
"priorityGet":"获取工单的优先级。",
|
||||||
"priorityList":"获取所有工单的优先级状态列表。",
|
"priorityList":"获取所有工单的优先级状态列表。",
|
||||||
"transfer":"将工单所有权从一位用户转移至另一位用户。",
|
"transfer":"将工单所有权从一位用户转移至另一位用户。",
|
||||||
"transferUser":"要转移给的用户。"
|
"transferUser":"要转移给的用户。",
|
||||||
|
"transcripts":"查看用户的工单记录历史。",
|
||||||
|
"transcriptsUser":"要查看的用户。"
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"获取所有可用命令的列表。",
|
"help":"获取所有可用命令的列表。",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"选择您的工单",
|
"selectTicket":"选择您的工单",
|
||||||
"selectRole":"选择您的角色",
|
"selectRole":"选择您的角色",
|
||||||
"selectOption":"选择您的选项"
|
"selectOption":"选择您的选项",
|
||||||
|
"selectPriorityLevel":"选择优先级"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"紧急",
|
"urgent":"紧急",
|
||||||
|
|||||||
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["HanumeshGupta","ChatGPT"],
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Solvenian",
|
"language":"Solvenian",
|
||||||
"automated":true
|
"automated":true
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"invalidButton":"Ta gumb mora imeti vsaj {0} ali {1}!",
|
"invalidButton":"Ta gumb mora imeti vsaj {0} ali {1}!",
|
||||||
"unusedOption":"Možnost {0} se ne uporablja nikjer!",
|
"unusedOption":"Možnost {0} se ne uporablja nikjer!",
|
||||||
"unusedQuestion":"Vprašanje {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'!",
|
"dropdownOption":"Plošča z spustnim menijem lahko vsebuje samo možnosti tipov: 'ticket', 'role' ali 'sub-panel'.",
|
||||||
"customInvalidVersion":"Različica, navedena v vaši konfiguraciji, se ne ujema! Prepričajte se, da ste konfiguracijo posodobili na najnovejšo različico!"
|
"customInvalidVersion":"Različica, navedena v vaši konfiguraciji, se ne ujema! Prepričajte se, da ste konfiguracijo posodobili na najnovejšo različico!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"Prikaži Besedilne Ukaze",
|
"helpSwitchText":"Prikaži Besedilne Ukaze",
|
||||||
"helpPage":"Stran {0}",
|
"helpPage":"Stran {0}",
|
||||||
"withReason":"Z Razlogom",
|
"withReason":"Z Razlogom",
|
||||||
"withoutTranscript":"Brez Prepisa"
|
"withoutTranscript":"Brez Prepisa",
|
||||||
|
"blacklistAdd":"Dodaj uporabnika na črno listo",
|
||||||
|
"blacklistRemove":"Sprosti uporabnika"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Vstopnica Ustvarjena",
|
"created":"Vstopnica Ustvarjena",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"Tema spremenjena",
|
"topicSet":"Tema spremenjena",
|
||||||
"prioritySet":"Prioriteta spremenjena",
|
"prioritySet":"Prioriteta spremenjena",
|
||||||
"priorityGet":"Prioriteta zahtevka",
|
"priorityGet":"Prioriteta zahtevka",
|
||||||
"transfer":"Zahtevek prenesen"
|
"transfer":"Zahtevek prenesen",
|
||||||
|
"transcripts":"Zgodovina prepisov"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Vaša vstopnica je bila ustvarjena. Kliknite spodnji gumb za dostop do nje!",
|
"create":"Vaša vstopnica je bila ustvarjena. Kliknite spodnji gumb za dostop do nje!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"Prioriteta tega zahtevka je bila spremenjena v {0} s strani {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!",
|
"prioritySetDm":"Prioriteta vašega zahtevka je bila spremenjena v {0} v našem strežniku!",
|
||||||
"roleUpdateLog":"{0} je posodobil svoje vloge!",
|
"roleUpdateLog":"{0} je posodobil svoje vloge!",
|
||||||
"roleUpdateDm":"Vaše vloge v našem strežniku so bile posodobljene!"
|
"roleUpdateDm":"Vaše vloge v našem strežniku so bile posodobljene!",
|
||||||
|
"topicSetLog":"Prioriteta tega zahtevka je bila nastavljena na {0} s strani {1}.",
|
||||||
|
"topicSetDm":"Prioriteta vašega zahtevka je bila nastavljena na {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"continue":"Izbriši Brez Prepisa",
|
"continue":"Izbriši Brez Prepisa",
|
||||||
"backup":"Ustvarili Varnostni Prepis",
|
"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.",
|
"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"
|
"title":"Napaka v prepisu",
|
||||||
|
"noHistory":"Ta uporabnik še nima nobenih prepisov.",
|
||||||
|
"historyNotSupported":"Zgodovina prepisov je trenutno podprta samo z HTML Transcripts.\nZgodovina besedilnih prepisov bo na voljo v prihodnjih različicah."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"SPOROČILA",
|
"messagesTitle":"SPOROČILA",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"Neznan Panel",
|
"unknownPanel":"Neznan Panel",
|
||||||
"notInGuild":"Ni na Strežniku",
|
"notInGuild":"Ni na Strežniku",
|
||||||
"channelRename":"Ni mogoče Preimenovati Kanala",
|
"channelRename":"Ni mogoče Preimenovati Kanala",
|
||||||
|
"channelCategory":"Ni mogoče spremeniti kategorije",
|
||||||
"busy":"Vstopnica je Zasedena",
|
"busy":"Vstopnica je Zasedena",
|
||||||
"permissionError":"Napaka dovoljenj"
|
"permissionError":"Napaka dovoljenj"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"Trenutni kanal ni veljavna vstopnica! Morda je vstopnica iz starejše različice Open Ticket!",
|
"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!",
|
"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.",
|
"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.",
|
||||||
|
"channelCategory":"Zaradi Discord omejitev hitrosti kategorije kanala ni bilo mogoče takoj spremeniti. Če bot ostane na spletu, bo samodejno spremenjena v 10 minutah.",
|
||||||
"channelRenameSource":"Vir te napake je: {0}",
|
"channelRenameSource":"Vir te napake je: {0}",
|
||||||
"busy":"Ni mogoče uporabiti tega {0}!\nVstopnica je trenutno v obdelavi.\n\nPoskusite znova čez nekaj sekund!",
|
"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.",
|
"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.",
|
"closeBeforeAdminMessage":"Tega zahtevka ni mogoče zapreti/izbrisati, preden skrbnik zahtevkov ali član podpore ne pošlje sporočila.",
|
||||||
"unableToCreateTicket":"Ne morete ustvariti zahtevka."
|
"unableToCreateTicket":"Ne morete ustvariti zahtevka.",
|
||||||
|
"messageMissing":"Sporočila interakcije ni bilo mogoče najti. Namesto tega uporabite ukaz `{0}`.",
|
||||||
|
"stateExpired":"Ta interakcija ni več veljavna ali je potekla. Namesto tega uporabite ukaz `{0}`. To je normalno po večji posodobitvi Open Ticket.",
|
||||||
|
"panelStateExpired":"Ta plošča ni več veljavna ali je potekla. Ustvarite novo ploščo z uporabo `{0}` za rešitev težave. To je normalno po večji posodobitvi Open Ticket."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Vrednost se ne ujema z vzorcem!",
|
"stringRegex":"Vrednost se ne ujema z vzorcem!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"Sintaksa",
|
"syntax":"Sintaksa",
|
||||||
"originalName":"Prvotno ime",
|
"originalName":"Prvotno ime",
|
||||||
"newName":"Novo ime",
|
"newName":"Novo ime",
|
||||||
|
"originalCategory":"Izvirna kategorija",
|
||||||
|
"newCategory":"Nova kategorija",
|
||||||
"until":"Do",
|
"until":"Do",
|
||||||
"validOptions":"Veljavne možnosti",
|
"validOptions":"Veljavne možnosti",
|
||||||
"validPanels":"Veljavni paneli",
|
"validPanels":"Veljavni paneli",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"Udeleženci",
|
"participants":"Udeleženci",
|
||||||
"yes":"Da",
|
"yes":"Da",
|
||||||
"no":"Ne",
|
"no":"Ne",
|
||||||
|
"accept":"Sprejmi",
|
||||||
|
"cancel":"Prekliči",
|
||||||
"option":"Možnost",
|
"option":"Možnost",
|
||||||
"topic":"Tema",
|
"topic":"Tema",
|
||||||
"uptime":"Čas delovanja sistema",
|
"uptime":"Čas delovanja sistema",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Ali želite, da se ta panel samodejno posodobi, ko ga uredite?",
|
"panelAutoUpdate":"Ali želite, da se ta panel samodejno posodobi, ko ga uredite?",
|
||||||
"ticket":"Takoj ustvari vstopnico.",
|
"ticket":"Takoj ustvari vstopnico.",
|
||||||
"ticketId":"Identifikator vstopnice, ki jo želite ustvariti.",
|
"ticketId":"Identifikator vstopnice, ki jo želite ustvariti.",
|
||||||
|
"ticketOtherUser":"Ustvari zahtevek za drugega uporabnika.",
|
||||||
"close":"Zapri vstopnico.",
|
"close":"Zapri vstopnico.",
|
||||||
"delete":"Izbriši vstopnico.",
|
"delete":"Izbriši vstopnico.",
|
||||||
"deleteNoTranscript":"Izbriši to vstopnico brez ustvarjanja prepisa.",
|
"deleteNoTranscript":"Izbriši to vstopnico brez ustvarjanja prepisa.",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"Pridobite prioriteto zahtevka.",
|
"priorityGet":"Pridobite prioriteto zahtevka.",
|
||||||
"priorityList":"Pridobite seznam vseh zahtevkov z njihovim prioritetnim statusom.",
|
"priorityList":"Pridobite seznam vseh zahtevkov z njihovim prioritetnim statusom.",
|
||||||
"transfer":"Prenesite lastništvo zahtevka z enega uporabnika na drugega.",
|
"transfer":"Prenesite lastništvo zahtevka z enega uporabnika na drugega.",
|
||||||
"transferUser":"Uporabnik, na katerega želite prenesti."
|
"transferUser":"Uporabnik, na katerega želite prenesti.",
|
||||||
|
"transcripts":"Prikaži zgodovino prepisov zahtevkov uporabnika.",
|
||||||
|
"transcriptsUser":"Uporabnik za prikaz."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Pridobite seznam vseh razpoložljivih ukazov.",
|
"help":"Pridobite seznam vseh razpoložljivih ukazov.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"Izberite svoj zahtevek",
|
"selectTicket":"Izberite svoj zahtevek",
|
||||||
"selectRole":"Izberite svojo vlogo",
|
"selectRole":"Izberite svojo vlogo",
|
||||||
"selectOption":"Izberite svojo možnost"
|
"selectOption":"Izberite svojo možnost",
|
||||||
|
"selectPriorityLevel":"Izberi raven prioritete"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"Nujno",
|
"urgent":"Nujno",
|
||||||
|
|||||||
+169
-19
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["Redactado","Josuens"],
|
"translators":["Redactado","Josuens"],
|
||||||
"lastedited":"22/08/2024",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Spanish",
|
"language":"Spanish",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,6 +31,14 @@
|
|||||||
"stringContains":"¡Esta cadena necesita contener {0}!",
|
"stringContains":"¡Esta cadena necesita contener {0}!",
|
||||||
"stringChoices":"¡Esta cadena no puede ser uno de los siguientes valores: {0}!",
|
"stringChoices":"¡Esta cadena no puede ser uno de los siguientes valores: {0}!",
|
||||||
"stringRegex":"¡La cadena no es válida!",
|
"stringRegex":"¡La cadena no es válida!",
|
||||||
|
"stringInvertedContains":"¡Esta cadena no puede contener {0}!",
|
||||||
|
"stringLowercase":"¡Esta cadena debe escribirse solo en minúsculas!",
|
||||||
|
"stringUppercase":"¡Esta cadena debe escribirse solo en mayúsculas!",
|
||||||
|
"stringSpecialCharacters":"¡Esta cadena no puede contener caracteres especiales! (solo a-z, 0-9 y espacio)",
|
||||||
|
"stringNoSpaces":"¡Esta cadena no puede contener espacios!",
|
||||||
|
"stringCapitalWord":"¡Se recomienda que cada palabra de esta cadena comience con mayúscula!",
|
||||||
|
"stringCapitalSentence":"¡Parece que algunas oraciones de esta cadena no comienzan con mayúscula!",
|
||||||
|
"stringPunctuation":"¡Parece que la oración de esta cadena no termina con un signo de puntuación!",
|
||||||
|
|
||||||
"numberTooShort":"¡Este número no puede ser menor que {0}!",
|
"numberTooShort":"¡Este número no puede ser menor que {0}!",
|
||||||
"numberTooLong":"¡Este número no puede ser mayor que {0}!",
|
"numberTooLong":"¡Este número no puede ser mayor que {0}!",
|
||||||
@@ -48,6 +56,8 @@
|
|||||||
"numberNegative":"¡Este número no puede ser negativo!",
|
"numberNegative":"¡Este número no puede ser negativo!",
|
||||||
"numberPositive":"¡Este número no puede ser positivo!",
|
"numberPositive":"¡Este número no puede ser positivo!",
|
||||||
"numberZero":"¡Este número no puede ser cero!",
|
"numberZero":"¡Este número no puede ser cero!",
|
||||||
|
"numberNan":"¡Este número no puede ser NaN (Not A Number)!",
|
||||||
|
"numberInvertedContains":"¡Este número no puede contener {0}!",
|
||||||
|
|
||||||
"booleanTrue":"¡Este valor no puede ser positivo!",
|
"booleanTrue":"¡Este valor no puede ser positivo!",
|
||||||
"booleanFalse":"¡Este valor no puede ser negativo!",
|
"booleanFalse":"¡Este valor no puede ser negativo!",
|
||||||
@@ -69,8 +79,8 @@
|
|||||||
"emojiCustom":"¡Este emoji no puede ser un emoji personalizado de discord!",
|
"emojiCustom":"¡Este emoji no puede ser un emoji personalizado de discord!",
|
||||||
"emojiInvalid":"¡Este es un emoji inválido!",
|
"emojiInvalid":"¡Este es un emoji inválido!",
|
||||||
"urlInvalid":"¡Esta URL es inválida!",
|
"urlInvalid":"¡Esta URL es inválida!",
|
||||||
"urlInvalidHttp":"¡Esta URL solo puede usar el protocolo https:/\/!",
|
"urlInvalidHttp":"¡Esta URL solo puede usar el protocolo https://!",
|
||||||
"urlInvalidProtocol":"¡Esta URL solo puede usar los protocolos http:// y https:/\/!",
|
"urlInvalidProtocol":"¡Esta URL solo puede usar los protocolos http:// y https://!",
|
||||||
"urlInvalidHostname":"¡Esta URL tiene un nombre de host no permitido!",
|
"urlInvalidHostname":"¡Esta URL tiene un nombre de host no permitido!",
|
||||||
"urlInvalidExtension":"¡Esta URL tiene una extensión inválida! Elige entre: {0}!",
|
"urlInvalidExtension":"¡Esta URL tiene una extensión inválida! Elige entre: {0}!",
|
||||||
"urlInvalidPath":"¡Esta URL tiene una ruta inválida!",
|
"urlInvalidPath":"¡Esta URL tiene una ruta inválida!",
|
||||||
@@ -89,7 +99,8 @@
|
|||||||
"invalidButton":"¡Este botón necesita al menos un {0} o un {1}!",
|
"invalidButton":"¡Este botón necesita al menos un {0} o un {1}!",
|
||||||
"unusedOption":"¡La opción {0} no se usa en ningún lugar!",
|
"unusedOption":"¡La opción {0} no se usa en ningún lugar!",
|
||||||
"unusedQuestion":"¡La pregunta {0} no se usa en ningún lugar!",
|
"unusedQuestion":"¡La pregunta {0} no se usa en ningún lugar!",
|
||||||
"dropdownOption":"¡Este panel de botóns solo puede contener opciones de tipo 'ticket'!"
|
"dropdownOption":"Un panel con menú desplegable solo puede contener opciones de los tipos: 'ticket', 'role' o 'sub-panel'.",
|
||||||
|
"customInvalidVersion":"¡La versión especificada en tu configuración no coincide! ¡Asegúrate de haber actualizado la configuración a la versión más reciente!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -107,7 +118,9 @@
|
|||||||
"helpSwitchText":"Ver los Comandos de Texto",
|
"helpSwitchText":"Ver los Comandos de Texto",
|
||||||
"helpPage":"Página {0}",
|
"helpPage":"Página {0}",
|
||||||
"withReason":"Con razón",
|
"withReason":"Con razón",
|
||||||
"withoutTranscript":"Sin transcripción"
|
"withoutTranscript":"Sin transcripción",
|
||||||
|
"blacklistAdd":"Añadir Usuario a la Lista Negra",
|
||||||
|
"blacklistRemove":"Liberar Usuario"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Ticket Creado",
|
"created":"Ticket Creado",
|
||||||
@@ -132,6 +145,7 @@
|
|||||||
"blacklistAddDm":"Agregado a la Lista Negra",
|
"blacklistAddDm":"Agregado a la Lista Negra",
|
||||||
"blacklistRemoveDm":"Eliminado de la Lista Negra",
|
"blacklistRemoveDm":"Eliminado de la Lista Negra",
|
||||||
"clear":"Tickets Limpiados",
|
"clear":"Tickets Limpiados",
|
||||||
|
"clearTickets":"Limpiar Tickets",
|
||||||
"roles":"Roles Actualizados",
|
"roles":"Roles Actualizados",
|
||||||
|
|
||||||
"autoclose":"Ticket Cerrado Automáticamente",
|
"autoclose":"Ticket Cerrado Automáticamente",
|
||||||
@@ -139,7 +153,13 @@
|
|||||||
"autocloseDisabled":"Cierre Automático Deshabilitado",
|
"autocloseDisabled":"Cierre Automático Deshabilitado",
|
||||||
"autodelete":"Ticket Eliminado Automáticamente",
|
"autodelete":"Ticket Eliminado Automáticamente",
|
||||||
"autodeleteEnabled":"Eliminación Automática Habilitada",
|
"autodeleteEnabled":"Eliminación Automática Habilitada",
|
||||||
"autodeleteDisabled":"Eliminación Automática Deshabilitada"
|
"autodeleteDisabled":"Eliminación Automática Deshabilitada",
|
||||||
|
|
||||||
|
"topicSet":"Tema Cambiado",
|
||||||
|
"prioritySet":"Prioridad Cambiada",
|
||||||
|
"priorityGet":"Prioridad del Ticket",
|
||||||
|
"transfer":"Ticket Transferido",
|
||||||
|
"transcripts":"Historial de Transcripciones"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"¡Tu ticket ha sido creado! Haz click en el botón abajo para verlo!",
|
"create":"¡Tu ticket ha sido creado! Haz click en el botón abajo para verlo!",
|
||||||
@@ -180,7 +200,12 @@
|
|||||||
"ticketMessageLimit":"¡Solo puedes crear {0} ticket(s) al mismo tiempo!",
|
"ticketMessageLimit":"¡Solo puedes crear {0} ticket(s) al mismo tiempo!",
|
||||||
"ticketMessageAutoclose":"¡Este ticket se cerrará automáticamente cuando esté inactivo durante {0}h!",
|
"ticketMessageAutoclose":"¡Este ticket se cerrará automáticamente cuando esté inactivo durante {0}h!",
|
||||||
"ticketMessageAutodelete":"¡Este ticket se eliminará automáticamente cuando esté inactivo durante {0} días!",
|
"ticketMessageAutodelete":"¡Este ticket se eliminará automáticamente cuando esté inactivo durante {0} días!",
|
||||||
"panelReady":"¡Puedes encontrar el panel a continuación!\n¡Este mensaje ahora puede ser eliminado!"
|
"panelReady":"¡El panel está disponible en el mensaje siguiente!\n¡Este mensaje ahora puede ser eliminado!",
|
||||||
|
|
||||||
|
"topicSet":"¡El tema del canal ha sido cambiado correctamente por {0}!",
|
||||||
|
"prioritySet":"¡La prioridad del ticket ha sido cambiada a {0} por {1} correctamente!",
|
||||||
|
"priorityGet":"La prioridad actual de este ticket es {0}.",
|
||||||
|
"transfer":"¡La propiedad del ticket ha sido transferida de {0} a {1} por {2} correctamente!"
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder":"¿Por qué cerraste este ticket?",
|
"closePlaceholder":"¿Por qué cerraste este ticket?",
|
||||||
@@ -220,7 +245,16 @@
|
|||||||
"blacklistRemoveLog":"{0} fue eliminado de la lista negra por {1}!",
|
"blacklistRemoveLog":"{0} fue eliminado de la lista negra por {1}!",
|
||||||
"blacklistAddDm":"¡Has sido incluido en la lista negra en nuestro servidor!\n¡A partir de ahora, no puedes crear un ticket!",
|
"blacklistAddDm":"¡Has sido incluido en la lista negra en nuestro servidor!\n¡A partir de ahora, no puedes crear un ticket!",
|
||||||
"blacklistRemoveDm":"¡Has sido eliminado de la lista negra en nuestro servidor!\n¡Ahora puedes volver a crear tickets!",
|
"blacklistRemoveDm":"¡Has sido eliminado de la lista negra en nuestro servidor!\n¡Ahora puedes volver a crear tickets!",
|
||||||
"clearLog":"¡{0} tickets han sido eliminados por {1}!"
|
"clearLog":"¡{0} tickets han sido eliminados por {1}!",
|
||||||
|
|
||||||
|
"transferLog":"¡La propiedad de este ticket ha sido transferida de {0} a {1} por {2}!",
|
||||||
|
"transferDm":"¡La propiedad de tu ticket ha sido transferida de {0} a {1} en nuestro servidor!",
|
||||||
|
"prioritySetLog":"¡La prioridad de este ticket ha sido cambiada a {0} por {1}!",
|
||||||
|
"prioritySetDm":"¡La prioridad de tu ticket ha sido cambiada a {0} en nuestro servidor!",
|
||||||
|
"roleUpdateLog":"¡{0} ha actualizado sus roles!",
|
||||||
|
"roleUpdateDm":"¡Tus roles en nuestro servidor han sido actualizados!",
|
||||||
|
"topicSetLog":"La prioridad de este ticket ha sido establecida en {0} por {1}.",
|
||||||
|
"topicSetDm":"La prioridad de tu ticket ha sido establecida en {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -241,7 +275,21 @@
|
|||||||
"retry":"Reintentar",
|
"retry":"Reintentar",
|
||||||
"continue":"Eliminar sin transcripción",
|
"continue":"Eliminar sin transcripción",
|
||||||
"backup":"Crear respaldo de la transcripción",
|
"backup":"Crear respaldo de la transcripción",
|
||||||
"error":"Algo salió mal al intentar subir la transcripción.\n¿Qué desearías hacer?\n\nEste ticket no será eliminado hasta que presiones uno de los botones."
|
"error":"Algo salió mal al intentar subir la transcripción.\n¿Qué desearías hacer?\n\nEste ticket no será eliminado hasta que presiones uno de los botones.",
|
||||||
|
"title":"Error de Transcripción",
|
||||||
|
"noHistory":"Este usuario todavía no tiene transcripciones.",
|
||||||
|
"historyNotSupported":"El historial de transcripciones actualmente solo es compatible con HTML Transcripts.\nEl historial de transcripciones de texto estará disponible en futuras versiones."
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"MENSAJES",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"ARCHIVO",
|
||||||
|
"fieldsTitle":"CAMPOS",
|
||||||
|
"reactionsTitle":"REACCIONES",
|
||||||
|
"statsTitle":"ESTADÍSTICAS",
|
||||||
|
"emptyContent":"<el contenido está vacío>",
|
||||||
|
"noTitle":"<sin-título>",
|
||||||
|
"noDesc":"<sin-descripción>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
@@ -257,7 +305,9 @@
|
|||||||
"unknownPanel":"Panel Desconocido",
|
"unknownPanel":"Panel Desconocido",
|
||||||
"notInGuild":"No está en el Servidor",
|
"notInGuild":"No está en el Servidor",
|
||||||
"channelRename":"No es posible renombrar el canal",
|
"channelRename":"No es posible renombrar el canal",
|
||||||
"busy":"El ticket está siendo procesado"
|
"channelCategory":"No Se Puede Cambiar la Categoría",
|
||||||
|
"busy":"El ticket está siendo procesado",
|
||||||
|
"permissionError":"Error de Permisos"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"¡Contacta al propietario de este bot para obtener más información!",
|
"askForInfo":"¡Contacta al propietario de este bot para obtener más información!",
|
||||||
@@ -279,8 +329,15 @@
|
|||||||
"deprecatedTicket":"¡El canal actual no es un ticket válido! ¡Podría haber sido un ticket de una versión antigua de Open Ticket!",
|
"deprecatedTicket":"¡El canal actual no es un ticket válido! ¡Podría haber sido un ticket de una versión antigua de Open Ticket!",
|
||||||
"notInGuild":"¡Este {0} no funciona en DM! ¡Por favor, inténtalo de nuevo en un servidor!",
|
"notInGuild":"¡Este {0} no funciona en DM! ¡Por favor, inténtalo de nuevo en un servidor!",
|
||||||
"channelRename":"Debido a los límites de velocidad de discord, actualmente es imposible para el bot renombrar el canal. El canal se renombrará automáticamente en 10 minutos si el bot no se reinicia.",
|
"channelRename":"Debido a los límites de velocidad de discord, actualmente es imposible para el bot renombrar el canal. El canal se renombrará automáticamente en 10 minutos si el bot no se reinicia.",
|
||||||
|
"channelCategory":"Debido a los límites de tasa de Discord, la categoría del canal no pudo cambiarse inmediatamente. Se cambiará automáticamente dentro de 10 minutos si el bot permanece en línea.",
|
||||||
"channelRenameSource":"La fuente de este error es: {0}",
|
"channelRenameSource":"La fuente de este error es: {0}",
|
||||||
"busy":"¡No se puede usar este {0}!\nEl ticket está siendo procesado actualmente por el bot.\n\n¡Por favor, inténtalo de nuevo en unos segundos!"
|
"busy":"¡No se puede usar este {0}!\nEl ticket está siendo procesado actualmente por el bot.\n\n¡Por favor, inténtalo de nuevo en unos segundos!",
|
||||||
|
"closeBeforeMessage":"Este ticket no puede cerrarse/eliminarse antes de que un usuario haya enviado un mensaje.",
|
||||||
|
"closeBeforeAdminMessage":"Este ticket no puede cerrarse/eliminarse antes de que un administrador de tickets o miembro del equipo de soporte haya enviado un mensaje.",
|
||||||
|
"unableToCreateTicket":"No puedes crear un ticket.",
|
||||||
|
"messageMissing":"No se pudo localizar el mensaje de la interacción. Usa el comando `{0}` en su lugar.",
|
||||||
|
"stateExpired":"Esta interacción ya no es válida o ha expirado. Usa el comando `{0}` en su lugar. Es normal recibir este error después de una actualización importante de Open Ticket.",
|
||||||
|
"panelStateExpired":"Este panel ya no es válido o ha expirado. Crea un nuevo panel usando `{0}` para solucionar el problema. Es normal recibir este error después de una actualización importante de Open Ticket."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"¡El valor no coincide con el patrón!",
|
"stringRegex":"¡El valor no coincide con el patrón!",
|
||||||
@@ -331,7 +388,6 @@
|
|||||||
"added":"Agregado",
|
"added":"Agregado",
|
||||||
"removed":"Eliminado",
|
"removed":"Eliminado",
|
||||||
"filter":"Filtrar",
|
"filter":"Filtrar",
|
||||||
"claimedBy":"Reclamado Por {0}",
|
|
||||||
"method":"Método",
|
"method":"Método",
|
||||||
"type":"Tipo",
|
"type":"Tipo",
|
||||||
"blacklisted":"En La Lista Negra",
|
"blacklisted":"En La Lista Negra",
|
||||||
@@ -343,6 +399,8 @@
|
|||||||
"syntax":"Sintaxis",
|
"syntax":"Sintaxis",
|
||||||
"originalName":"Nombre Original",
|
"originalName":"Nombre Original",
|
||||||
"newName":"Nuevo Nombre",
|
"newName":"Nuevo Nombre",
|
||||||
|
"originalCategory":"Categoría Original",
|
||||||
|
"newCategory":"Nueva Categoría",
|
||||||
"until":"Hasta",
|
"until":"Hasta",
|
||||||
"validOptions":"Operaciones Válidas",
|
"validOptions":"Operaciones Válidas",
|
||||||
"validPanels":"Paneles Válidos",
|
"validPanels":"Paneles Válidos",
|
||||||
@@ -352,10 +410,32 @@
|
|||||||
"version":"Versión",
|
"version":"Versión",
|
||||||
"name":"Nombre",
|
"name":"Nombre",
|
||||||
"role":"Rol",
|
"role":"Rol",
|
||||||
"status":"Estado",
|
"status":"ESTADO",
|
||||||
"claimed":"Reclamado",
|
"claimed":"Reclamado",
|
||||||
"pinned":"Anclado",
|
"pinned":"Anclado",
|
||||||
"creationDate":"Fecha De Creación"
|
"creationDate":"Fecha De Creación",
|
||||||
|
|
||||||
|
"noone":"NADIE",
|
||||||
|
"open":"ABIERTO",
|
||||||
|
"closed":"CERRADO",
|
||||||
|
"priority":"PRIORIDAD",
|
||||||
|
"participants":"PARTICIPANTES",
|
||||||
|
"yes":"SÍ",
|
||||||
|
"no":"NO",
|
||||||
|
"accept":"Aceptar",
|
||||||
|
"cancel":"Cancelar",
|
||||||
|
"option":"OPCIÓN",
|
||||||
|
"topic":"TEMA",
|
||||||
|
"uptime":"TIEMPO DE ACTIVIDAD DEL SISTEMA",
|
||||||
|
"messages":"MENSAJES",
|
||||||
|
"embeds":"EMBEDS",
|
||||||
|
"files":"ARCHIVOS",
|
||||||
|
"components":"COMPONENTES",
|
||||||
|
"cooldown":"COOLDOWN",
|
||||||
|
"maxTickets":"MÁX TICKETS",
|
||||||
|
"admins":"ADMINS",
|
||||||
|
"roles":"ROLES",
|
||||||
|
"size":"TAMAÑO"
|
||||||
},
|
},
|
||||||
"lowercase":{
|
"lowercase":{
|
||||||
"text":"texto",
|
"text":"texto",
|
||||||
@@ -375,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"¿Quieres que este panel se actualice automáticamente cuando se edite?",
|
"panelAutoUpdate":"¿Quieres que este panel se actualice automáticamente cuando se edite?",
|
||||||
"ticket":"Crea un ticket instantáneamente.",
|
"ticket":"Crea un ticket instantáneamente.",
|
||||||
"ticketId":"El identificador del ticket que quieres crear.",
|
"ticketId":"El identificador del ticket que quieres crear.",
|
||||||
|
"ticketOtherUser":"Crear un ticket para otro usuario.",
|
||||||
"close":"Cierra un ticket.",
|
"close":"Cierra un ticket.",
|
||||||
"delete":"Elimina un ticket.",
|
"delete":"Elimina un ticket.",
|
||||||
"deleteNoTranscript":"Elimina este ticket sin crear una transcripción.",
|
"deleteNoTranscript":"Elimina este ticket sin crear una transcripción.",
|
||||||
@@ -384,6 +465,7 @@
|
|||||||
"unclaim":"Libera un ticket.",
|
"unclaim":"Libera un ticket.",
|
||||||
"pin":"Ancla un ticket.",
|
"pin":"Ancla un ticket.",
|
||||||
"unpin":"Desancla un ticket.",
|
"unpin":"Desancla un ticket.",
|
||||||
|
|
||||||
"move":"Mueve un ticket.",
|
"move":"Mueve un ticket.",
|
||||||
"moveId":"El identificador del opción al que quieres mover.",
|
"moveId":"El identificador del opción al que quieres mover.",
|
||||||
"rename":"Renombra un ticket.",
|
"rename":"Renombra un ticket.",
|
||||||
@@ -392,6 +474,7 @@
|
|||||||
"addUser":"El usuario a añadir.",
|
"addUser":"El usuario a añadir.",
|
||||||
"remove":"Elimina un usuario de un ticket.",
|
"remove":"Elimina un usuario de un ticket.",
|
||||||
"removeUser":"El usuario a eliminar.",
|
"removeUser":"El usuario a eliminar.",
|
||||||
|
|
||||||
"blacklist":"Administra la lista negra de tickets.",
|
"blacklist":"Administra la lista negra de tickets.",
|
||||||
"blacklistView":"Ver una lista de la lista negra actual.",
|
"blacklistView":"Ver una lista de la lista negra actual.",
|
||||||
"blacklistAdd":"Añade un usuario a la lista negra.",
|
"blacklistAdd":"Añade un usuario a la lista negra.",
|
||||||
@@ -405,6 +488,7 @@
|
|||||||
"statsUserUser":"El usuario a ver.",
|
"statsUserUser":"El usuario a ver.",
|
||||||
"statsTicket":"Ver las estadísticas de un ticket en el servidor.",
|
"statsTicket":"Ver las estadísticas de un ticket en el servidor.",
|
||||||
"statsTicketTicket":"El ticket a ver.",
|
"statsTicketTicket":"El ticket a ver.",
|
||||||
|
|
||||||
"clear":"Eliminar varios tickets al mismo tiempo. Se puede especificar un filtro opcional.",
|
"clear":"Eliminar varios tickets al mismo tiempo. Se puede especificar un filtro opcional.",
|
||||||
"clearFilter":"valor",
|
"clearFilter":"valor",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +501,7 @@
|
|||||||
"unpin":"Desanclado",
|
"unpin":"Desanclado",
|
||||||
"autoclose":"Cerrado automáticamente"
|
"autoclose":"Cerrado automáticamente"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Administra el cierre automático en un ticket.",
|
"autoclose":"Administra el cierre automático en un ticket.",
|
||||||
"autocloseDisable":"Desactiva el cierre automático en este ticket.",
|
"autocloseDisable":"Desactiva el cierre automático en este ticket.",
|
||||||
"autocloseEnable":"Activa el cierre automático en este ticket.",
|
"autocloseEnable":"Activa el cierre automático en este ticket.",
|
||||||
@@ -424,7 +509,21 @@
|
|||||||
"autodelete":"Administra la eliminación automática en un ticket.",
|
"autodelete":"Administra la eliminación automática en un ticket.",
|
||||||
"autodeleteDisable":"Desactiva la eliminación automática en este ticket.",
|
"autodeleteDisable":"Desactiva la eliminación automática en este ticket.",
|
||||||
"autodeleteEnable":"Activa la eliminación automática en este ticket.",
|
"autodeleteEnable":"Activa la eliminación automática en este ticket.",
|
||||||
"autodeleteEnableTime":"La cantidad de días que este ticket necesita estar inactivo para eliminarlo."
|
"autodeleteEnableTime":"La cantidad de días que este ticket necesita estar inactivo para eliminarlo.",
|
||||||
|
|
||||||
|
"topic":"Gestiona el tema del canal del ticket.",
|
||||||
|
"topicSet":"Establece el tema del canal del ticket.",
|
||||||
|
"topicValue":"El nuevo tema del canal.",
|
||||||
|
"topicList":"Obtén una lista de todos los tickets con su tema y estadísticas.",
|
||||||
|
"priority":"Gestiona la prioridad del ticket.",
|
||||||
|
"prioritySet":"Establece la prioridad del ticket.",
|
||||||
|
"priorityValue":"La prioridad del canal.",
|
||||||
|
"priorityGet":"Obtén la prioridad del ticket.",
|
||||||
|
"priorityList":"Obtén una lista de todos los tickets con su estado de prioridad.",
|
||||||
|
"transfer":"Transfiere la propiedad del ticket de un usuario a otro.",
|
||||||
|
"transferUser":"El usuario al que transferir.",
|
||||||
|
"transcripts":"Ver el historial de transcripciones de tickets de un usuario.",
|
||||||
|
"transcriptsUser":"El usuario a visualizar."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Obtén una lista de todos los comandos disponibles.",
|
"help":"Obtén una lista de todos los comandos disponibles.",
|
||||||
@@ -452,7 +551,16 @@
|
|||||||
"autocloseDisable":"Desactiva el cierre automático en este ticket.",
|
"autocloseDisable":"Desactiva el cierre automático en este ticket.",
|
||||||
"autocloseEnable":"Activa el cierre automático en este ticket.",
|
"autocloseEnable":"Activa el cierre automático en este ticket.",
|
||||||
"autodeleteDisable":"Desactiva la eliminación automática en este ticket.",
|
"autodeleteDisable":"Desactiva la eliminación automática en este ticket.",
|
||||||
"autodeleteEnable":"Activa la eliminación automática en este ticket."
|
"autodeleteEnable":"Activa la eliminación automática en este ticket.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Comandos Generales",
|
||||||
|
"basicTicket":"Comandos Básicos de Tickets",
|
||||||
|
"advancedTicket":"Comandos Avanzados de Tickets",
|
||||||
|
"userTicket":"Comandos de Tickets de Usuario",
|
||||||
|
"admin":"Comandos de Administrador",
|
||||||
|
"advanced":"Comandos Avanzados",
|
||||||
|
"extra":"Comandos Extra"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +568,8 @@
|
|||||||
"system":"Estadisticas del Sistema",
|
"system":"Estadisticas del Sistema",
|
||||||
"user":"Estadísticas del Usuario",
|
"user":"Estadísticas del Usuario",
|
||||||
"ticket":"Ticket Stats",
|
"ticket":"Ticket Stats",
|
||||||
"participants":"Participantes"
|
"participants":"Participantes",
|
||||||
|
"messages":"Mensajes"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Tickets Creados",
|
"ticketsCreated":"Tickets Creados",
|
||||||
@@ -472,7 +581,48 @@
|
|||||||
"ticketsPinned":"Tickets Anclados",
|
"ticketsPinned":"Tickets Anclados",
|
||||||
"ticketsMoved":"Tickets Movidos",
|
"ticketsMoved":"Tickets Movidos",
|
||||||
"usersBlacklisted":"Usuarios En Lista Negra",
|
"usersBlacklisted":"Usuarios En Lista Negra",
|
||||||
"transcriptsCreated":"Transcripciones Creadas"
|
"transcriptsCreated":"Transcripciones Creadas",
|
||||||
|
"ticketsAutodeleted":"Tickets Eliminados Automáticamente",
|
||||||
|
"ticketsTransferred":"Tickets Transferidos",
|
||||||
|
"ticketVolume":"Volumen de Tickets",
|
||||||
|
"averageTickets":"Promedio de Tickets/Usuario",
|
||||||
|
"currentTickets":"Tickets Actuales",
|
||||||
|
"age":"Antigüedad del Ticket",
|
||||||
|
"responseTime":"Tiempo de Respuesta",
|
||||||
|
"resolutionTime":"Tiempo de Resolución",
|
||||||
|
"createdOn":"Creado El",
|
||||||
|
"createdBy":"Creado Por",
|
||||||
|
"closedOn":"Cerrado El",
|
||||||
|
"closedBy":"Cerrado Por",
|
||||||
|
"claimedOn":"Reclamado El",
|
||||||
|
"claimedBy":"Reclamado Por",
|
||||||
|
"pinnedOn":"Fijado El",
|
||||||
|
"pinnedBy":"Fijado Por",
|
||||||
|
"deletedOn":"Eliminado El",
|
||||||
|
"deletedBy":"Eliminado Por"
|
||||||
|
},
|
||||||
|
"roles":{
|
||||||
|
"developer":"Desarrollador",
|
||||||
|
"serverOwner":"Propietario del Servidor",
|
||||||
|
"serverAdmin":"Administrador del Servidor",
|
||||||
|
"moderator":"Equipo de Moderación",
|
||||||
|
"support":"Equipo de Soporte",
|
||||||
|
"member":"Miembro"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"panel":{
|
||||||
|
"selectTicket":"Selecciona tu ticket",
|
||||||
|
"selectRole":"Selecciona tu rol",
|
||||||
|
"selectOption":"Selecciona tu opción",
|
||||||
|
"selectPriorityLevel":"Seleccionar nivel de prioridad"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Urgente",
|
||||||
|
"veryHigh":"Muy Alta",
|
||||||
|
"high":"Alta",
|
||||||
|
"normal":"Normal",
|
||||||
|
"low":"Baja",
|
||||||
|
"veryLow":"Muy Baja",
|
||||||
|
"none":"Ninguna"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+586
-436
File diff suppressed because it is too large
Load Diff
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["HanumeshGupta","ChatGPT"],
|
"translators":["HanumeshGupta","ChatGPT"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Tamil",
|
"language":"Tamil",
|
||||||
"automated":true
|
"automated":true
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"invalidButton":"இந்த பொத்தானில் குறைந்தது {0} அல்லது {1} இருக்க வேண்டும்!",
|
"invalidButton":"இந்த பொத்தானில் குறைந்தது {0} அல்லது {1} இருக்க வேண்டும்!",
|
||||||
"unusedOption":"{0} விருப்பம் எங்கும் பயன்படுத்தப்படவில்லை!",
|
"unusedOption":"{0} விருப்பம் எங்கும் பயன்படுத்தப்படவில்லை!",
|
||||||
"unusedQuestion":"{0} கேள்வி எங்கும் பயன்படுத்தப்படவில்லை!",
|
"unusedQuestion":"{0} கேள்வி எங்கும் பயன்படுத்தப்படவில்லை!",
|
||||||
"dropdownOption":"டிராப்புடவ்ன் இயக்கப்பட்ட பேனலில் 'டிக்கெட்' வகையின் விருப்பங்கள் மட்டுமே இருக்க முடியும்!",
|
"dropdownOption":"டிராப்-டவுன் கொண்ட பேனலில் 'ticket', 'role' அல்லது 'sub-panel' வகை விருப்பங்களே இருக்க முடியும்.",
|
||||||
"customInvalidVersion":"உங்கள் கான்பிக் குறிப்பிடும் பதிப்பு பொருந்தவில்லை! கான்பிகை புதிய பதிப்புக்கு புதுப்பித்தீர்களா என்பதை சரிபார்க்கவும்!"
|
"customInvalidVersion":"உங்கள் கான்பிக் குறிப்பிடும் பதிப்பு பொருந்தவில்லை! கான்பிகை புதிய பதிப்புக்கு புதுப்பித்தீர்களா என்பதை சரிபார்க்கவும்!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"உரை கட்டளைகள் பார்க்க",
|
"helpSwitchText":"உரை கட்டளைகள் பார்க்க",
|
||||||
"helpPage":"பக்கம் {0}",
|
"helpPage":"பக்கம் {0}",
|
||||||
"withReason":"காரணத்துடன்",
|
"withReason":"காரணத்துடன்",
|
||||||
"withoutTranscript":"டிரான்ஸ்கிரிப்ட் இல்லாமல்"
|
"withoutTranscript":"டிரான்ஸ்கிரிப்ட் இல்லாமல்",
|
||||||
|
"blacklistAdd":"பயனரை கருப்புப் பட்டியலில் சேர்க்கவும்",
|
||||||
|
"blacklistRemove":"பயனரை விடுவிக்கவும்"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"டிக்கெட் உருவாக்கப்பட்டது",
|
"created":"டிக்கெட் உருவாக்கப்பட்டது",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"தலைப்பு மாற்றப்பட்டது",
|
"topicSet":"தலைப்பு மாற்றப்பட்டது",
|
||||||
"prioritySet":"முன்னுரிமை மாற்றப்பட்டது",
|
"prioritySet":"முன்னுரிமை மாற்றப்பட்டது",
|
||||||
"priorityGet":"டிக்கெட் முன்னுரிமை",
|
"priorityGet":"டிக்கெட் முன்னுரிமை",
|
||||||
"transfer":"டிக்கெட் மாற்றப்பட்டது"
|
"transfer":"டிக்கெட் மாற்றப்பட்டது",
|
||||||
|
"transcripts":"பதிவுகள் வரலாறு"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"உங்கள் டிக்கெட் உருவாக்கப்பட்டது. அதை அணுக கீழே உள்ள பொத்தானை கிளிக் செய்யவும்!",
|
"create":"உங்கள் டிக்கெட் உருவாக்கப்பட்டது. அதை அணுக கீழே உள்ள பொத்தானை கிளிக் செய்யவும்!",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"இந்த டிக்கெட் முன்னுரிமை {1} மூலம் {0} ஆக மாற்றப்பட்டது!",
|
"prioritySetLog":"இந்த டிக்கெட் முன்னுரிமை {1} மூலம் {0} ஆக மாற்றப்பட்டது!",
|
||||||
"prioritySetDm":"உங்கள் டிக்கெட் முன்னுரிமை நமது சர்வரில் {0} ஆக மாற்றப்பட்டது!",
|
"prioritySetDm":"உங்கள் டிக்கெட் முன்னுரிமை நமது சர்வரில் {0} ஆக மாற்றப்பட்டது!",
|
||||||
"roleUpdateLog":"{0} அவர்களது பங்களிப்புகளை புதுப்பித்துள்ளார்!",
|
"roleUpdateLog":"{0} அவர்களது பங்களிப்புகளை புதுப்பித்துள்ளார்!",
|
||||||
"roleUpdateDm":"நமது சர்வரில் உங்கள் பங்களிப்புகள் புதுப்பிக்கப்பட்டுள்ளன!"
|
"roleUpdateDm":"நமது சர்வரில் உங்கள் பங்களிப்புகள் புதுப்பிக்கப்பட்டுள்ளன!",
|
||||||
|
"topicSetLog":"இந்த டிக்கெட்டின் முன்னுரிமை {1} ஆல் {0} ஆக அமைக்கப்பட்டது.",
|
||||||
|
"topicSetDm":"உங்கள் டிக்கெட்டின் முன்னுரிமை {0} ஆக அமைக்கப்பட்டது."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"continue":"டிரான்ஸ்கிரிப்ட் இல்லாமல் நீக்கு",
|
"continue":"டிரான்ஸ்கிரிப்ட் இல்லாமல் நீக்கு",
|
||||||
"backup":"காப்பு டிரான்ஸ்கிரிப்ட் உருவாக்கு",
|
"backup":"காப்பு டிரான்ஸ்கிரிப்ட் உருவாக்கு",
|
||||||
"error":"டிரான்ஸ்கிரிப்ட் உருவாக்க முயற்சிக்கும் போது ஏதோ தவறு நடந்தது.\nநீங்கள் என்ன செய்ய விரும்புகிறீர்கள்?\n\nஇந்த டிக்கெட் நீங்கள் இந்த பொத்தான்களில் ஒன்றை கிளிக் செய்யும் வரை நீக்கப்படாது.",
|
"error":"டிரான்ஸ்கிரிப்ட் உருவாக்க முயற்சிக்கும் போது ஏதோ தவறு நடந்தது.\nநீங்கள் என்ன செய்ய விரும்புகிறீர்கள்?\n\nஇந்த டிக்கெட் நீங்கள் இந்த பொத்தான்களில் ஒன்றை கிளிக் செய்யும் வரை நீக்கப்படாது.",
|
||||||
"title":"மொழிப்பெயர்ப்பு பிழை"
|
"title":"மொழிப்பெயர்ப்பு பிழை",
|
||||||
|
"noHistory":"இந்த பயனருக்கு இன்னும் எந்த பதிவுகளும் இல்லை.",
|
||||||
|
"historyNotSupported":"பதிவுகள் வரலாறு தற்போது HTML Transcripts உடன் மட்டுமே ஆதரிக்கப்படுகிறது.\nஉரை பதிவுகள் வரலாறு எதிர்கால பதிப்புகளில் கிடைக்கும்."
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"செய்திகள்",
|
"messagesTitle":"செய்திகள்",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"தெரியாத பேனல்",
|
"unknownPanel":"தெரியாத பேனல்",
|
||||||
"notInGuild":"சேவையில் இல்லை",
|
"notInGuild":"சேவையில் இல்லை",
|
||||||
"channelRename":"சேனலை மறுபெயரிட முடியவில்லை",
|
"channelRename":"சேனலை மறுபெயரிட முடியவில்லை",
|
||||||
|
"channelCategory":"வகையை மாற்ற முடியவில்லை",
|
||||||
"busy":"டிக்கெட் பிஸியாக உள்ளது",
|
"busy":"டிக்கெட் பிஸியாக உள்ளது",
|
||||||
"permissionError":"அனுமதி பிழை"
|
"permissionError":"அனுமதி பிழை"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"தற்போதைய சேனல் ஒரு சரியான டிக்கெட் அல்ல! இது பழைய ஓபன் டிக்கெட் பதிப்பிலிருந்து ஒரு டிக்கெட் ஆக இருக்கலாம்!",
|
"deprecatedTicket":"தற்போதைய சேனல் ஒரு சரியான டிக்கெட் அல்ல! இது பழைய ஓபன் டிக்கெட் பதிப்பிலிருந்து ஒரு டிக்கெட் ஆக இருக்கலாம்!",
|
||||||
"notInGuild":"இந்த {0} DM இல் வேலை செய்யாது! தயவு செய்து ஒரு சேவையில் மீண்டும் முயற்சிக்கவும்!",
|
"notInGuild":"இந்த {0} DM இல் வேலை செய்யாது! தயவு செய்து ஒரு சேவையில் மீண்டும் முயற்சிக்கவும்!",
|
||||||
"channelRename":"டிஸ்கார்ட் ரேட்லிமிட்கள் காரணமாக, போட் சேனலை மறுபெயரிடுவது தற்போது சாத்தியமில்லை. போட் ரீபூட் செய்யப்படாவிட்டால் சேனல் 10 நிமிடங்களுக்குள் தானாக மறுபெயரிடப்படும்.",
|
"channelRename":"டிஸ்கார்ட் ரேட்லிமிட்கள் காரணமாக, போட் சேனலை மறுபெயரிடுவது தற்போது சாத்தியமில்லை. போட் ரீபூட் செய்யப்படாவிட்டால் சேனல் 10 நிமிடங்களுக்குள் தானாக மறுபெயரிடப்படும்.",
|
||||||
|
"channelCategory":"Discord வீத வரம்புகளால் சேனல் வகையை உடனடியாக மாற்ற முடியவில்லை. பாட்டு ஆன்லைனில் இருந்தால் 10 நிமிடங்களில் தானாக மாற்றப்படும்.",
|
||||||
"channelRenameSource":"இந்த பிழையின் மூலம்: {0}",
|
"channelRenameSource":"இந்த பிழையின் மூலம்: {0}",
|
||||||
"busy":"இந்த {0} ஐ பயன்படுத்த முடியவில்லை!\nடிக்கெட் தற்போது போட் மூலம் செயலாக்கப்படுகிறது.\n\nதயவு செய்து சில விநாடிகள் காத்திருக்கவும்!",
|
"busy":"இந்த {0} ஐ பயன்படுத்த முடியவில்லை!\nடிக்கெட் தற்போது போட் மூலம் செயலாக்கப்படுகிறது.\n\nதயவு செய்து சில விநாடிகள் காத்திருக்கவும்!",
|
||||||
"closeBeforeMessage":"பயனர் ஒரு செய்தியை அனுப்பும் முன் இந்த டிக்கெட் மூடப்பட முடியாது/நீக்கப்பட முடியாது.",
|
"closeBeforeMessage":"பயனர் ஒரு செய்தியை அனுப்பும் முன் இந்த டிக்கெட் மூடப்பட முடியாது/நீக்கப்பட முடியாது.",
|
||||||
"closeBeforeAdminMessage":"டிக்கெட் நிர்வாகி அல்லது ஆதரவு உறுப்பினர் ஒரு செய்தி அனுப்பும் முன் இந்த டிக்கெட் மூடப்பட முடியாது/நீக்கப்பட முடியாது.",
|
"closeBeforeAdminMessage":"டிக்கெட் நிர்வாகி அல்லது ஆதரவு உறுப்பினர் ஒரு செய்தி அனுப்பும் முன் இந்த டிக்கெட் மூடப்பட முடியாது/நீக்கப்பட முடியாது.",
|
||||||
"unableToCreateTicket":"நீங்கள் டிக்கெட் உருவாக்க முடியாது."
|
"unableToCreateTicket":"நீங்கள் டிக்கெட் உருவாக்க முடியாது.",
|
||||||
|
"messageMissing":"இணைப்பு செய்தியை கண்டுபிடிக்க முடியவில்லை. பதிலாக `{0}` கட்டளையை பயன்படுத்தவும்.",
|
||||||
|
"stateExpired":"இந்த இணைப்பு இனி செல்லுபடியாகாது அல்லது காலாவதியானது. பதிலாக `{0}` கட்டளையை பயன்படுத்தவும். Open Ticket பெரிய புதுப்பிப்புக்குப் பிறகு இது சாதாரணம்.",
|
||||||
|
"panelStateExpired":"இந்த பேனல் இனி செல்லுபடியாகாது அல்லது காலாவதியானது. பிரச்சினையை தீர்க்க `{0}` பயன்படுத்தி புதிய பேனலை உருவாக்கவும். Open Ticket பெரிய புதுப்பிப்புக்குப் பிறகு இது சாதாரணம்."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"மதிப்பு மாதிரியுடன் பொருந்தவில்லை!",
|
"stringRegex":"மதிப்பு மாதிரியுடன் பொருந்தவில்லை!",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"தொடரியல்",
|
"syntax":"தொடரியல்",
|
||||||
"originalName":"அசல் பெயர்",
|
"originalName":"அசல் பெயர்",
|
||||||
"newName":"புதிய பெயர்",
|
"newName":"புதிய பெயர்",
|
||||||
|
"originalCategory":"மூல வகை",
|
||||||
|
"newCategory":"புதிய வகை",
|
||||||
"until":"வரை",
|
"until":"வரை",
|
||||||
"validOptions":"சரியான விருப்பங்கள்",
|
"validOptions":"சரியான விருப்பங்கள்",
|
||||||
"validPanels":"சரியான பேனல்கள்",
|
"validPanels":"சரியான பேனல்கள்",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"பங்கேற்பாளர்கள்",
|
"participants":"பங்கேற்பாளர்கள்",
|
||||||
"yes":"ஆம்",
|
"yes":"ஆம்",
|
||||||
"no":"இல்லை",
|
"no":"இல்லை",
|
||||||
|
"accept":"ஏற்கவும்",
|
||||||
|
"cancel":"ரத்து செய்",
|
||||||
"option":"விருப்பம்",
|
"option":"விருப்பம்",
|
||||||
"topic":"தலைப்பு",
|
"topic":"தலைப்பு",
|
||||||
"uptime":"சிஸ்டம் இயங்கும் நேரம்",
|
"uptime":"சிஸ்டம் இயங்கும் நேரம்",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"இந்த பேனல் திருத்தப்படும் போது தானாகவே புதுப்பிக்க விரும்புகிறீர்களா?",
|
"panelAutoUpdate":"இந்த பேனல் திருத்தப்படும் போது தானாகவே புதுப்பிக்க விரும்புகிறீர்களா?",
|
||||||
"ticket":"உடனடியாக ஒரு டிக்கெட்டை உருவாக்கவும்.",
|
"ticket":"உடனடியாக ஒரு டிக்கெட்டை உருவாக்கவும்.",
|
||||||
"ticketId":"நீங்கள் உருவாக்க விரும்பும் டிக்கெட்டின் அடையாளம்.",
|
"ticketId":"நீங்கள் உருவாக்க விரும்பும் டிக்கெட்டின் அடையாளம்.",
|
||||||
|
"ticketOtherUser":"மற்றொரு பயனருக்காக டிக்கெட் உருவாக்கவும்.",
|
||||||
"close":"ஒரு டிக்கெட்டை மூடவும்.",
|
"close":"ஒரு டிக்கெட்டை மூடவும்.",
|
||||||
"delete":"ஒரு டிக்கெட்டை நீக்கவும்.",
|
"delete":"ஒரு டிக்கெட்டை நீக்கவும்.",
|
||||||
"deleteNoTranscript":"பதிவு இல்லாமல் இந்த டிக்கெட்டை நீக்கவும்.",
|
"deleteNoTranscript":"பதிவு இல்லாமல் இந்த டிக்கெட்டை நீக்கவும்.",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"டிக்கெட் முன்னுரிமையைப் பெறவும்.",
|
"priorityGet":"டிக்கெட் முன்னுரிமையைப் பெறவும்.",
|
||||||
"priorityList":"அனைத்து டிக்கெட்டுகளின் முன்னுரிமை நிலையைப் பெறுங்கள்.",
|
"priorityList":"அனைத்து டிக்கெட்டுகளின் முன்னுரிமை நிலையைப் பெறுங்கள்.",
|
||||||
"transfer":"ஒரு பயனரிடமிருந்து மற்றொரு பயனருக்கு டிக்கெட் உரிமையை மாற்றவும்.",
|
"transfer":"ஒரு பயனரிடமிருந்து மற்றொரு பயனருக்கு டிக்கெட் உரிமையை மாற்றவும்.",
|
||||||
"transferUser":"மாற்ற வேண்டிய பயனர்."
|
"transferUser":"மாற்ற வேண்டிய பயனர்.",
|
||||||
|
"transcripts":"பயனரின் டிக்கெட் பதிவுகள் வரலாற்றைக் காண்க.",
|
||||||
|
"transcriptsUser":"காண வேண்டிய பயனர்."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"கிடைக்கக்கூடிய அனைத்து கட்டளைகளின் பட்டியலைப் பெறவும்.",
|
"help":"கிடைக்கக்கூடிய அனைத்து கட்டளைகளின் பட்டியலைப் பெறவும்.",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"உங்கள் டிக்கெட்டை தேர்ந்தெடுக்கவும்",
|
"selectTicket":"உங்கள் டிக்கெட்டை தேர்ந்தெடுக்கவும்",
|
||||||
"selectRole":"உங்கள் பங்கைக் தேர்ந்தெடுக்கவும்",
|
"selectRole":"உங்கள் பங்கைக் தேர்ந்தெடுக்கவும்",
|
||||||
"selectOption":"உங்கள் விருப்பத்தை தேர்ந்தெடுக்கவும்"
|
"selectOption":"உங்கள் விருப்பத்தை தேர்ந்தெடுக்கவும்",
|
||||||
|
"selectPriorityLevel":"முன்னுரிமை நிலையைத் தேர்ந்தெடுக்கவும்"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"அவசரம்",
|
"urgent":"அவசரம்",
|
||||||
|
|||||||
+30
-10
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["modshd"],
|
"translators":["modshd"],
|
||||||
"lastedited":"03/12/2025",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Thai",
|
"language":"Thai",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
"invalidButton":"ปุ่มนี้ต้องมีอย่างน้อย {0} หรือ {1}",
|
"invalidButton":"ปุ่มนี้ต้องมีอย่างน้อย {0} หรือ {1}",
|
||||||
"unusedOption":"ตัวเลือก {0} ไม่ได้ใช้งานที่ไหนเลย",
|
"unusedOption":"ตัวเลือก {0} ไม่ได้ใช้งานที่ไหนเลย",
|
||||||
"unusedQuestion":"คำถาม {0} ไม่ได้ใช้งานที่ไหนเลย",
|
"unusedQuestion":"คำถาม {0} ไม่ได้ใช้งานที่ไหนเลย",
|
||||||
"dropdownOption":"แผงที่เปิดใช้งานตัวเลือกแบบเลื่อนลงสามารถประกอบด้วยตัวเลือกประเภท 'ticket' เท่านั้น",
|
"dropdownOption":"แผงที่มีเมนูดรอปดาวน์สามารถมีตัวเลือกประเภท: 'ticket', 'role' หรือ 'sub-panel' เท่านั้น",
|
||||||
"customInvalidVersion":"เวอร์ชันที่ระบุในไฟล์ config ของคุณไม่ตรงกัน ตรวจสอบให้แน่ใจว่าคุณได้อัปเดตไฟล์ config เป็นเวอร์ชันล่าสุดแล้ว"
|
"customInvalidVersion":"เวอร์ชันที่ระบุในไฟล์ config ของคุณไม่ตรงกัน ตรวจสอบให้แน่ใจว่าคุณได้อัปเดตไฟล์ config เป็นเวอร์ชันล่าสุดแล้ว"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,7 +118,9 @@
|
|||||||
"helpSwitchText":"ดูคำสั่งแบบข้อความ",
|
"helpSwitchText":"ดูคำสั่งแบบข้อความ",
|
||||||
"helpPage":"หน้า {0}",
|
"helpPage":"หน้า {0}",
|
||||||
"withReason":"ด้วยเหตุผล",
|
"withReason":"ด้วยเหตุผล",
|
||||||
"withoutTranscript":"ไม่มีบันทึกการสนทนา"
|
"withoutTranscript":"ไม่มีบันทึกการสนทนา",
|
||||||
|
"blacklistAdd":"เพิ่มผู้ใช้ในบัญชีดำ",
|
||||||
|
"blacklistRemove":"ปลดผู้ใช้ออกจากบัญชีดำ"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"สร้างห้องติดต่อแล้ว",
|
"created":"สร้างห้องติดต่อแล้ว",
|
||||||
@@ -156,7 +158,8 @@
|
|||||||
"topicSet":"เปลี่ยนหัวข้อแล้ว",
|
"topicSet":"เปลี่ยนหัวข้อแล้ว",
|
||||||
"prioritySet":"เปลี่ยนลำดับความสำคัญแล้ว",
|
"prioritySet":"เปลี่ยนลำดับความสำคัญแล้ว",
|
||||||
"priorityGet":"ลำดับความสำคัญของห้องติดต่อ",
|
"priorityGet":"ลำดับความสำคัญของห้องติดต่อ",
|
||||||
"transfer":"โอนห้องติดต่อแล้ว"
|
"transfer":"โอนห้องติดต่อแล้ว",
|
||||||
|
"transcripts":"ประวัติทรานสคริปต์"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"ห้องติดต่อของคุณถูกสร้างแล้ว คลิกปุ่มด้านล่างเพื่อไปยังห้องติดต่อ",
|
"create":"ห้องติดต่อของคุณถูกสร้างแล้ว คลิกปุ่มด้านล่างเพื่อไปยังห้องติดต่อ",
|
||||||
@@ -249,7 +252,9 @@
|
|||||||
"prioritySetLog":"ลำดับความสำคัญของห้องติดต่อนี้ถูกเปลี่ยนเป็น {0} โดย {1}",
|
"prioritySetLog":"ลำดับความสำคัญของห้องติดต่อนี้ถูกเปลี่ยนเป็น {0} โดย {1}",
|
||||||
"prioritySetDm":"ลำดับความสำคัญของห้องติดต่อของคุณถูกเปลี่ยนเป็น {0} ในเซิร์ฟเวอร์ของเรา",
|
"prioritySetDm":"ลำดับความสำคัญของห้องติดต่อของคุณถูกเปลี่ยนเป็น {0} ในเซิร์ฟเวอร์ของเรา",
|
||||||
"roleUpdateLog":"{0} ได้อัปเดตบทบาทของพวกเขาแล้ว",
|
"roleUpdateLog":"{0} ได้อัปเดตบทบาทของพวกเขาแล้ว",
|
||||||
"roleUpdateDm":"บทบาทของคุณในเซิร์ฟเวอร์ของเราได้รับการอัปเดตแล้ว"
|
"roleUpdateDm":"บทบาทของคุณในเซิร์ฟเวอร์ของเราได้รับการอัปเดตแล้ว",
|
||||||
|
"topicSetLog":"ลำดับความสำคัญของตั๋วนี้ถูกตั้งเป็น {0} โดย {1}",
|
||||||
|
"topicSetDm":"ลำดับความสำคัญของตั๋วของคุณถูกตั้งเป็น {0}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -271,7 +276,9 @@
|
|||||||
"continue":"ลบโดยไม่สร้างตัวเก็บประวัติข้อความ",
|
"continue":"ลบโดยไม่สร้างตัวเก็บประวัติข้อความ",
|
||||||
"backup":"สร้างสำรองตัวเก็บประวัติข้อความ",
|
"backup":"สร้างสำรองตัวเก็บประวัติข้อความ",
|
||||||
"error":"เกิดข้อผิดพลาดขณะพยายามสร้างตัวเก็บประวัติข้อความ\nคุณต้องการทำอย่างไรต่อไป?\n\nห้องติดต่อนี้จะไม่ถูกลบจนกว่าคุณจะคลิกปุ่มใดปุ่มหนึ่ง",
|
"error":"เกิดข้อผิดพลาดขณะพยายามสร้างตัวเก็บประวัติข้อความ\nคุณต้องการทำอย่างไรต่อไป?\n\nห้องติดต่อนี้จะไม่ถูกลบจนกว่าคุณจะคลิกปุ่มใดปุ่มหนึ่ง",
|
||||||
"title":"ข้อผิดพลาดในการบันทึกบทสนทนา"
|
"title":"ข้อผิดพลาดในการบันทึกบทสนทนา",
|
||||||
|
"noHistory":"ผู้ใช้นี้ยังไม่มีทรานสคริปต์",
|
||||||
|
"historyNotSupported":"ขณะนี้ประวัติทรานสคริปต์รองรับเฉพาะ HTML Transcripts เท่านั้น\nประวัติทรานสคริปต์แบบข้อความจะพร้อมใช้งานในเวอร์ชันถัดไป"
|
||||||
},
|
},
|
||||||
"text":{
|
"text":{
|
||||||
"messagesTitle":"ข้อความ",
|
"messagesTitle":"ข้อความ",
|
||||||
@@ -298,6 +305,7 @@
|
|||||||
"unknownPanel":"แผงควบคุมที่ไม่รู้จัก",
|
"unknownPanel":"แผงควบคุมที่ไม่รู้จัก",
|
||||||
"notInGuild":"ไม่ได้อยู่ในเซิร์ฟเวอร์",
|
"notInGuild":"ไม่ได้อยู่ในเซิร์ฟเวอร์",
|
||||||
"channelRename":"ไม่สามารถเปลี่ยนชื่อช่องได้",
|
"channelRename":"ไม่สามารถเปลี่ยนชื่อช่องได้",
|
||||||
|
"channelCategory":"ไม่สามารถเปลี่ยนหมวดหมู่ได้",
|
||||||
"busy":"ห้องติดต่อยุ่งอยู่",
|
"busy":"ห้องติดต่อยุ่งอยู่",
|
||||||
"permissionError":"ข้อผิดพลาดด้านสิทธิ์"
|
"permissionError":"ข้อผิดพลาดด้านสิทธิ์"
|
||||||
},
|
},
|
||||||
@@ -321,11 +329,15 @@
|
|||||||
"deprecatedTicket":"ช่องนี้ไม่ใช่ห้องติดต่อที่ถูกต้อง อาจเป็นห้องติดต่อจากเวอร์ชันเก่าของ Open Ticket",
|
"deprecatedTicket":"ช่องนี้ไม่ใช่ห้องติดต่อที่ถูกต้อง อาจเป็นห้องติดต่อจากเวอร์ชันเก่าของ Open Ticket",
|
||||||
"notInGuild":"คำสั่ง {0} นี้ใช้ไม่ได้ใน DM กรุณาลองใหม่ในเซิร์ฟเวอร์",
|
"notInGuild":"คำสั่ง {0} นี้ใช้ไม่ได้ใน DM กรุณาลองใหม่ในเซิร์ฟเวอร์",
|
||||||
"channelRename":"เนื่องจากข้อจำกัดของ Discord การเปลี่ยนชื่อช่องไม่สามารถทำได้ในขณะนี้ ช่องจะถูกเปลี่ยนชื่อโดยอัตโนมัติในเวลา 10 นาทีหากบอทไม่ถูกรีบูต",
|
"channelRename":"เนื่องจากข้อจำกัดของ Discord การเปลี่ยนชื่อช่องไม่สามารถทำได้ในขณะนี้ ช่องจะถูกเปลี่ยนชื่อโดยอัตโนมัติในเวลา 10 นาทีหากบอทไม่ถูกรีบูต",
|
||||||
|
"channelCategory":"เนื่องจากข้อจำกัดอัตราการใช้งานของ Discord หมวดหมู่ของช่องจึงไม่สามารถเปลี่ยนได้ทันที ระบบจะเปลี่ยนให้อัตโนมัติภายใน 10 นาทีหากบอทยังคงออนไลน์อยู่",
|
||||||
"channelRenameSource":"แหล่งที่มาของข้อผิดพลาดนี้คือ: {0}",
|
"channelRenameSource":"แหล่งที่มาของข้อผิดพลาดนี้คือ: {0}",
|
||||||
"busy":"ไม่สามารถใช้ {0} นี้ได้\nห้องติดต่อกกำลังถูกประมวลผลโดยบอท\n\nกรุณาลองใหม่ในอีกไม่กี่วินาที",
|
"busy":"ไม่สามารถใช้ {0} นี้ได้\nห้องติดต่อกกำลังถูกประมวลผลโดยบอท\n\nกรุณาลองใหม่ในอีกไม่กี่วินาที",
|
||||||
"closeBeforeMessage":"ไม่สามารถปิด/ลบห้องติดต่อนี้ได้ก่อนที่ผู้ใช้จะส่งข้อความ",
|
"closeBeforeMessage":"ไม่สามารถปิด/ลบห้องติดต่อนี้ได้ก่อนที่ผู้ใช้จะส่งข้อความ",
|
||||||
"closeBeforeAdminMessage":"ไม่สามารถปิด/ลบห้องติดต่อนี้ได้ก่อนที่ผู้ดูแลห้องติดต่อหรือสมาชิกฝ่ายสนับสนุนจะส่งข้อความ",
|
"closeBeforeAdminMessage":"ไม่สามารถปิด/ลบห้องติดต่อนี้ได้ก่อนที่ผู้ดูแลห้องติดต่อหรือสมาชิกฝ่ายสนับสนุนจะส่งข้อความ",
|
||||||
"unableToCreateTicket":"คุณไม่สามารถสร้างห้องติดต่อได้"
|
"unableToCreateTicket":"คุณไม่สามารถสร้างห้องติดต่อได้",
|
||||||
|
"messageMissing":"ไม่สามารถค้นหาข้อความของการโต้ตอบได้ โปรดใช้คำสั่ง `{0}` แทน",
|
||||||
|
"stateExpired":"การโต้ตอบนี้ไม่ถูกต้องอีกต่อไปหรือหมดอายุแล้ว โปรดใช้คำสั่ง `{0}` แทน เป็นเรื่องปกติที่จะพบข้อผิดพลาดนี้หลังจากการอัปเดต Open Ticket ครั้งใหญ่",
|
||||||
|
"panelStateExpired":"แผงนี้ไม่ถูกต้องอีกต่อไปหรือหมดอายุแล้ว สร้างแผงใหม่โดยใช้ `{0}` เพื่อแก้ไขปัญหา เป็นเรื่องปกติที่จะพบข้อผิดพลาดนี้หลังจากการอัปเดต Open Ticket ครั้งใหญ่"
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"ค่าที่ระบุไม่ตรงกับรูปแบบ",
|
"stringRegex":"ค่าที่ระบุไม่ตรงกับรูปแบบ",
|
||||||
@@ -387,6 +399,8 @@
|
|||||||
"syntax":"ไวยากรณ์",
|
"syntax":"ไวยากรณ์",
|
||||||
"originalName":"ชื่อเดิม",
|
"originalName":"ชื่อเดิม",
|
||||||
"newName":"ชื่อใหม่",
|
"newName":"ชื่อใหม่",
|
||||||
|
"originalCategory":"หมวดหมู่เดิม",
|
||||||
|
"newCategory":"หมวดหมู่ใหม่",
|
||||||
"until":"จนถึง",
|
"until":"จนถึง",
|
||||||
"validOptions":"ตัวเลือกที่ถูกต้อง",
|
"validOptions":"ตัวเลือกที่ถูกต้อง",
|
||||||
"validPanels":"แผงควบคุมที่ถูกต้อง",
|
"validPanels":"แผงควบคุมที่ถูกต้อง",
|
||||||
@@ -408,6 +422,8 @@
|
|||||||
"participants":"ผู้มีส่วนร่วม",
|
"participants":"ผู้มีส่วนร่วม",
|
||||||
"yes":"ใช่",
|
"yes":"ใช่",
|
||||||
"no":"ไม่",
|
"no":"ไม่",
|
||||||
|
"accept":"ยอมรับ",
|
||||||
|
"cancel":"ยกเลิก",
|
||||||
"option":"ตัวเลือก",
|
"option":"ตัวเลือก",
|
||||||
"topic":"หัวข้อ",
|
"topic":"หัวข้อ",
|
||||||
"uptime":"เวลาทำงานของระบบ",
|
"uptime":"เวลาทำงานของระบบ",
|
||||||
@@ -439,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"คุณต้องการให้แผงนี้อัปเดตอัตโนมัติเมื่อมีการแก้ไขหรือไม่?",
|
"panelAutoUpdate":"คุณต้องการให้แผงนี้อัปเดตอัตโนมัติเมื่อมีการแก้ไขหรือไม่?",
|
||||||
"ticket":"สร้างห้องติดต่อทันที",
|
"ticket":"สร้างห้องติดต่อทันที",
|
||||||
"ticketId":"ตัวระบุของห้องติดต่อที่คุณต้องการสร้าง",
|
"ticketId":"ตัวระบุของห้องติดต่อที่คุณต้องการสร้าง",
|
||||||
|
"ticketOtherUser":"สร้างตั๋วสำหรับผู้ใช้อื่น",
|
||||||
"close":"ปิดห้องติดต่อ",
|
"close":"ปิดห้องติดต่อ",
|
||||||
"delete":"ลบห้องติดต่อ",
|
"delete":"ลบห้องติดต่อ",
|
||||||
"deleteNoTranscript":"ลบห้องติดต่อนี้โดยไม่สร้างตัวเก็บข้อความ",
|
"deleteNoTranscript":"ลบห้องติดต่อนี้โดยไม่สร้างตัวเก็บข้อความ",
|
||||||
@@ -504,7 +521,9 @@
|
|||||||
"priorityGet":"รับลำดับความสำคัญของห้องติดต่อ",
|
"priorityGet":"รับลำดับความสำคัญของห้องติดต่อ",
|
||||||
"priorityList":"รายการห้องติดต่อทั้งหมดพร้อมสถานะลำดับความสำคัญ",
|
"priorityList":"รายการห้องติดต่อทั้งหมดพร้อมสถานะลำดับความสำคัญ",
|
||||||
"transfer":"โอนความเป็นเจ้าของห้องติดต่อจากผู้ใช้หนึ่งไปยังอีกคนหนึ่ง",
|
"transfer":"โอนความเป็นเจ้าของห้องติดต่อจากผู้ใช้หนึ่งไปยังอีกคนหนึ่ง",
|
||||||
"transferUser":"ผู้ใช้ที่จะโอนไป"
|
"transferUser":"ผู้ใช้ที่จะโอนไป",
|
||||||
|
"transcripts":"ดูประวัติทรานสคริปต์ตั๋วของผู้ใช้",
|
||||||
|
"transcriptsUser":"ผู้ใช้ที่ต้องการดู"
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"รับรายชื่อคำสั่งทั้งหมดที่มี",
|
"help":"รับรายชื่อคำสั่งทั้งหมดที่มี",
|
||||||
@@ -594,7 +613,8 @@
|
|||||||
"panel":{
|
"panel":{
|
||||||
"selectTicket":"เลือกห้องติดต่อของคุณ",
|
"selectTicket":"เลือกห้องติดต่อของคุณ",
|
||||||
"selectRole":"เลือกบทบาทของคุณ",
|
"selectRole":"เลือกบทบาทของคุณ",
|
||||||
"selectOption":"เลือกตัวเลือกของคุณ"
|
"selectOption":"เลือกตัวเลือกของคุณ",
|
||||||
|
"selectPriorityLevel":"เลือกระดับความสำคัญ"
|
||||||
},
|
},
|
||||||
"priorities":{
|
"priorities":{
|
||||||
"urgent":"เร่งด่วน",
|
"urgent":"เร่งด่วน",
|
||||||
|
|||||||
@@ -0,0 +1,628 @@
|
|||||||
|
{
|
||||||
|
"_TRANSLATION":{
|
||||||
|
"otversion":"v4.2.1",
|
||||||
|
"translators":["me.october"],
|
||||||
|
"lastedited":"25/05/2026",
|
||||||
|
"language":"Traditional Chinese",
|
||||||
|
"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":"此字符串無效!",
|
||||||
|
"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'、'role' 或 'sub-panel'。",
|
||||||
|
"customInvalidVersion":"配置文件中指定的版本不匹配!請確保您已將配置更新至最新版本!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions":{
|
||||||
|
"buttons":{
|
||||||
|
"create":"訪問工單",
|
||||||
|
"close":"關閉工單",
|
||||||
|
"delete":"刪除工單",
|
||||||
|
"reopen":"重新開啟工單",
|
||||||
|
"claim":"認領工單",
|
||||||
|
"unclaim":"取消認領工單",
|
||||||
|
"pin":"置頂工單",
|
||||||
|
"unpin":"取消置頂工單",
|
||||||
|
"clear":"刪除工單",
|
||||||
|
"helpSwitchSlash":"檢視斜杠命令",
|
||||||
|
"helpSwitchText":"檢視文本命令",
|
||||||
|
"helpPage":"第{0}頁",
|
||||||
|
"withReason":"帶原因",
|
||||||
|
"withoutTranscript":"不帶記錄",
|
||||||
|
"blacklistAdd":"加入黑名單使用者",
|
||||||
|
"blacklistRemove":"解除使用者封鎖"
|
||||||
|
},
|
||||||
|
"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":"工單已轉移",
|
||||||
|
"transcripts":"轉錄歷史"
|
||||||
|
},
|
||||||
|
"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":"您在服務器中的角色已更新!",
|
||||||
|
"topicSetLog":"此工單的優先級已由 {1} 設為 {0}。",
|
||||||
|
"topicSetDm":"你的工單優先級已設為 {0}。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transcripts":{
|
||||||
|
"success":{
|
||||||
|
"visit":"檢視記錄",
|
||||||
|
"ready":"記錄已創建",
|
||||||
|
"textFileDescription":"這是已刪除工單的文本記錄!",
|
||||||
|
"htmlProgress":"請等待此HTML記錄處理完成...",
|
||||||
|
|
||||||
|
"createdChannel":"服務器中已創建一個新的{0}記錄!",
|
||||||
|
"createdCreator":"已為您的工單創建一個新的{0}記錄!",
|
||||||
|
"createdParticipant":"您參與的工單中已創建一個新的{0}記錄!",
|
||||||
|
"createdActiveAdmin":"您作為管理員參與的工單中已創建一個新的{0}記錄!",
|
||||||
|
"createdEveryAdmin":"您曾擔任管理員的工單中已創建一個新的{0}記錄!",
|
||||||
|
"createdOther":"已創建一個新的{0}記錄!"
|
||||||
|
},
|
||||||
|
"errors":{
|
||||||
|
"retry":"重試",
|
||||||
|
"continue":"刪除無記錄",
|
||||||
|
"backup":"創建備份記錄",
|
||||||
|
"error":"創建記錄時出錯。\n您想怎麼做?\n\n在您點選以下按鈕之前,此工單不會被刪除。",
|
||||||
|
"title":"記錄錯誤",
|
||||||
|
"noHistory":"此使用者目前沒有任何轉錄記錄。",
|
||||||
|
"historyNotSupported":"目前僅支援 HTML Transcripts 的轉錄歷史。\n文字轉錄歷史將在未來版本提供。"
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"消息",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"文件",
|
||||||
|
"fieldsTitle":"字段",
|
||||||
|
"reactionsTitle":"反應",
|
||||||
|
"statsTitle":"統計",
|
||||||
|
"emptyContent":"<內容為空>",
|
||||||
|
"noTitle":"<無標題>",
|
||||||
|
"noDesc":"<無描述>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors":{
|
||||||
|
"titles":{
|
||||||
|
"internalError":"內部錯誤",
|
||||||
|
"optionMissing":"命令選項缺失",
|
||||||
|
"optionInvalid":"命令選項無效",
|
||||||
|
"unknownCommand":"未知命令",
|
||||||
|
"noPermissions":"無權限",
|
||||||
|
"unknownTicket":"未知工單",
|
||||||
|
"deprecatedTicket":"過時工單",
|
||||||
|
"unknownOption":"未知選項",
|
||||||
|
"unknownPanel":"未知麵闆",
|
||||||
|
"notInGuild":"不在服務器中",
|
||||||
|
"channelRename":"無法重命名頻道",
|
||||||
|
"channelCategory":"無法更改分類",
|
||||||
|
"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分鍾後自動重命名。",
|
||||||
|
"channelCategory":"由於 Discord 速率限制,頻道分類無法立即更改。如果機器人保持在線,將在10分鐘內自動更新。",
|
||||||
|
"channelRenameSource":"此錯誤的來源是:{0}",
|
||||||
|
"busy":"無法使用此{0}!\n工單當前正在被機器人處理。\n\n請幾秒後重試!",
|
||||||
|
"closeBeforeMessage":"用戶發送消息之前,無法關閉或刪除此工單。",
|
||||||
|
"closeBeforeAdminMessage":"工單管理員或支援成員發送消息之前,無法關閉或刪除此工單。",
|
||||||
|
"unableToCreateTicket":"您無法創建工單。",
|
||||||
|
"messageMissing":"無法找到互動訊息。請改用指令 `{0}`。",
|
||||||
|
"stateExpired":"此互動已無效或已過期。請改用指令 `{0}`。在 Open Ticket 大型更新後出現此錯誤是正常的。",
|
||||||
|
"panelStateExpired":"此面板已無效或已過期。請使用 `{0}` 建立新面板以解決問題。在 Open Ticket 大型更新後出現此錯誤是正常的。"
|
||||||
|
},
|
||||||
|
"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":"新名稱",
|
||||||
|
"originalCategory":"原始分類",
|
||||||
|
"newCategory":"新分類",
|
||||||
|
"until":"直到",
|
||||||
|
"validOptions":"有效選項",
|
||||||
|
"validPanels":"有效麵闆",
|
||||||
|
"autoclose":"自動關閉",
|
||||||
|
"autodelete":"自動刪除",
|
||||||
|
"startupDate":"啟動日期",
|
||||||
|
"version":"版本",
|
||||||
|
"name":"名稱",
|
||||||
|
"role":"角色",
|
||||||
|
"status":"狀態",
|
||||||
|
"claimed":"已認領",
|
||||||
|
"pinned":"已置頂",
|
||||||
|
"creationDate":"創建日期",
|
||||||
|
|
||||||
|
"noone":"無人",
|
||||||
|
"open":"開啟",
|
||||||
|
"closed":"關閉",
|
||||||
|
"priority":"優先級",
|
||||||
|
"participants":"參與者",
|
||||||
|
"yes":"是",
|
||||||
|
"no":"否",
|
||||||
|
"accept":"接受",
|
||||||
|
"cancel":"取消",
|
||||||
|
"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":"您想要創建的工單的標識符。",
|
||||||
|
"ticketOtherUser":"為其他使用者建立工單。",
|
||||||
|
"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":"要轉移給的用戶。",
|
||||||
|
"transcripts":"查看使用者的工單轉錄歷史。",
|
||||||
|
"transcriptsUser":"要查看的使用者。"
|
||||||
|
},
|
||||||
|
"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":"選擇您的選項",
|
||||||
|
"selectPriorityLevel":"選擇優先級"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"緊急",
|
||||||
|
"veryHigh":"非常高",
|
||||||
|
"high":"高",
|
||||||
|
"normal":"普通",
|
||||||
|
"low":"低",
|
||||||
|
"veryLow":"非常低",
|
||||||
|
"none":"無"
|
||||||
|
}
|
||||||
|
}
|
||||||
+587
-436
File diff suppressed because it is too large
Load Diff
+176
-26
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"_TRANSLATION":{
|
"_TRANSLATION":{
|
||||||
"otversion":"v4.1.2",
|
"otversion":"v4.2.1",
|
||||||
"translators":["Anderskiy"],
|
"translators":["Anderskiy"],
|
||||||
"lastedited":"31/08/2024",
|
"lastedited":"25/05/2026",
|
||||||
"language":"Ukrainian",
|
"language":"Ukrainian",
|
||||||
"automated":false
|
"automated":false
|
||||||
},
|
},
|
||||||
@@ -31,6 +31,14 @@
|
|||||||
"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} символів!",
|
||||||
@@ -48,17 +56,19 @@
|
|||||||
"numberNegative":"Це число не може бути від'ємним!",
|
"numberNegative":"Це число не може бути від'ємним!",
|
||||||
"numberPositive":"Це число не може бути додатнім!",
|
"numberPositive":"Це число не може бути додатнім!",
|
||||||
"numberZero":"Це число не може дорівнювати нулю!",
|
"numberZero":"Це число не може дорівнювати нулю!",
|
||||||
|
"numberNan":"Це число не може бути NaN (не число)!",
|
||||||
|
"numberInvertedContains":"Це число не може містити {0}!",
|
||||||
|
|
||||||
"booleanTrue": "Цей булевий вираз не може бути істинним!",
|
"booleanTrue":"Цей булевий вираз не може бути істинним!",
|
||||||
"booleanFalse": "Цей булевий вираз не може бути хибним!",
|
"booleanFalse":"Цей булевий вираз не може бути хибним!",
|
||||||
|
|
||||||
"arrayEmptyDisabled": "Цей масив не може бути порожнім!",
|
"arrayEmptyDisabled":"Цей масив не може бути порожнім!",
|
||||||
"arrayEmptyRequired": "Цей масив повинен бути порожнім!",
|
"arrayEmptyRequired":"Цей масив повинен бути порожнім!",
|
||||||
"arrayTooShort": "Цей масив повинен мати довжину не менше {0}!",
|
"arrayTooShort":"Цей масив повинен мати довжину не менше {0}!",
|
||||||
"arrayTooLong": "Цей масив повинен мати довжину не більше {0}!",
|
"arrayTooLong":"Цей масив повинен мати довжину не більше {0}!",
|
||||||
"arrayLengthInvalid": "Цей масив повинен мати довжину {0}!",
|
"arrayLengthInvalid":"Цей масив повинен мати довжину {0}!",
|
||||||
"arrayInvalidTypes": "Цей масив може містити тільки такі типи: {0}!",
|
"arrayInvalidTypes":"Цей масив може містити тільки такі типи: {0}!",
|
||||||
"arrayDouble": "Цей масив не допускає повторення одного й того ж значення двічі!",
|
"arrayDouble":"Цей масив не допускає повторення одного й того ж значення двічі!",
|
||||||
|
|
||||||
"discordInvalidId":"Це недійсний ідентифікатор discord {0}!",
|
"discordInvalidId":"Це недійсний ідентифікатор discord {0}!",
|
||||||
"discordInvalidIdOptions":"Це недійсний ідентифікатор discord {0}! Але ви також можете використати один з цих: {1}!",
|
"discordInvalidIdOptions":"Це недійсний ідентифікатор discord {0}! Але ви також можете використати один з цих: {1}!",
|
||||||
@@ -89,7 +99,8 @@
|
|||||||
"invalidButton":"Ця кнопка повинна мати принаймні {0} або {1}!",
|
"invalidButton":"Ця кнопка повинна мати принаймні {0} або {1}!",
|
||||||
"unusedOption":"Опція {0} ніде не використовується!",
|
"unusedOption":"Опція {0} ніде не використовується!",
|
||||||
"unusedQuestion":"Питання {0} ніде не використовується!",
|
"unusedQuestion":"Питання {0} ніде не використовується!",
|
||||||
"dropdownOption":"Панель з увімкненим випадаючим списком може містити лише опції типу «тікет»!"
|
"dropdownOption":"Панель із випадаючим списком може містити лише опції типів: 'ticket', 'role' або 'sub-panel'.",
|
||||||
|
"customInvalidVersion":"Вказана версія у вашій конфігурації не збігається! Переконайтеся, що ви оновили конфігурацію до останньої версії!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions":{
|
"actions":{
|
||||||
@@ -107,7 +118,9 @@
|
|||||||
"helpSwitchText":"Перевірити текстові команди",
|
"helpSwitchText":"Перевірити текстові команди",
|
||||||
"helpPage":"Cторінка {0}",
|
"helpPage":"Cторінка {0}",
|
||||||
"withReason":"З причиною",
|
"withReason":"З причиною",
|
||||||
"withoutTranscript":"Без транскрипції"
|
"withoutTranscript":"Без транскрипції",
|
||||||
|
"blacklistAdd":"Додати Користувача до Чорного Списку",
|
||||||
|
"blacklistRemove":"Звільнити Користувача"
|
||||||
},
|
},
|
||||||
"titles":{
|
"titles":{
|
||||||
"created":"Тікет створений",
|
"created":"Тікет створений",
|
||||||
@@ -132,6 +145,7 @@
|
|||||||
"blacklistAddDm":"Додати до чорного списку",
|
"blacklistAddDm":"Додати до чорного списку",
|
||||||
"blacklistRemoveDm":"Видалити з чорного списку",
|
"blacklistRemoveDm":"Видалити з чорного списку",
|
||||||
"clear":"Тікети відалено",
|
"clear":"Тікети відалено",
|
||||||
|
"clearTickets":"Очистити Тікети",
|
||||||
"roles":"Ролі оновлено",
|
"roles":"Ролі оновлено",
|
||||||
|
|
||||||
"autoclose":"Тікет автоматично закрито",
|
"autoclose":"Тікет автоматично закрито",
|
||||||
@@ -139,7 +153,13 @@
|
|||||||
"autocloseDisabled":"Автозакриття відключено",
|
"autocloseDisabled":"Автозакриття відключено",
|
||||||
"autodelete":"Тікет автовидаленно",
|
"autodelete":"Тікет автовидаленно",
|
||||||
"autodeleteEnabled":"Автовидалення увімкнено",
|
"autodeleteEnabled":"Автовидалення увімкнено",
|
||||||
"autodeleteDisabled":"Автовидалення відключено"
|
"autodeleteDisabled":"Автовидалення відключено",
|
||||||
|
|
||||||
|
"topicSet":"Тему змінено",
|
||||||
|
"prioritySet":"Пріоритет змінено",
|
||||||
|
"priorityGet":"Пріоритет Тікету",
|
||||||
|
"transfer":"Тікет передано",
|
||||||
|
"transcripts":"Історія Транскриптів"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"create":"Ваш тікет був створений. Натисніть кнопку нижче, щоб отримати доступ до нього!",
|
"create":"Ваш тікет був створений. Натисніть кнопку нижче, щоб отримати доступ до нього!",
|
||||||
@@ -180,7 +200,12 @@
|
|||||||
"ticketMessageLimit":"Одночасно можна створити лише {0} тікетів!",
|
"ticketMessageLimit":"Одночасно можна створити лише {0} тікетів!",
|
||||||
"ticketMessageAutoclose":"Цей тикет буде автоматично закрито, якщо він буде неактивним протягом {0}ч!",
|
"ticketMessageAutoclose":"Цей тикет буде автоматично закрито, якщо він буде неактивним протягом {0}ч!",
|
||||||
"ticketMessageAutodelete":"Цей тикет буде автоматично видалено, якщо він буде неактивним протягом {0} днів!",
|
"ticketMessageAutodelete":"Цей тикет буде автоматично видалено, якщо він буде неактивним протягом {0} днів!",
|
||||||
"panelReady":"Панель можна знайти нижче!\nЦе повідомлення буде видалено!"
|
"panelReady":"Панель доступна у наступному повідомленні!\nЦе повідомлення тепер можна видалити!",
|
||||||
|
|
||||||
|
"topicSet":"Тему каналу успішно змінив {0}!",
|
||||||
|
"prioritySet":"Пріоритет тікету успішно змінено на {0} користувачем {1}!",
|
||||||
|
"priorityGet":"Поточний пріоритет цього тікету: {0}.",
|
||||||
|
"transfer":"Власність тікету успішно передано від {0} до {1} користувачем {2}!"
|
||||||
},
|
},
|
||||||
"modal":{
|
"modal":{
|
||||||
"closePlaceholder":"Чому ви закрили тікет?",
|
"closePlaceholder":"Чому ви закрили тікет?",
|
||||||
@@ -220,7 +245,16 @@
|
|||||||
"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":"Пріоритет цього тікету змінено на {0} користувачем {1}!",
|
||||||
|
"prioritySetDm":"Пріоритет вашого тікету змінено на {0} на нашому сервері!",
|
||||||
|
"roleUpdateLog":"{0} оновив свої ролі!",
|
||||||
|
"roleUpdateDm":"Ваші ролі на нашому сервері оновлено!",
|
||||||
|
"topicSetLog":"Пріоритет цього тікета було встановлено на {0} користувачем {1}.",
|
||||||
|
"topicSetDm":"Пріоритет вашого тікета було встановлено на {0}."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"transcripts":{
|
"transcripts":{
|
||||||
@@ -241,7 +275,21 @@
|
|||||||
"retry":"Спробуйте ще раз.",
|
"retry":"Спробуйте ще раз.",
|
||||||
"continue":"Видалення без транскрипції",
|
"continue":"Видалення без транскрипції",
|
||||||
"backup":"Створити резервну копію транскрипту",
|
"backup":"Створити резервну копію транскрипту",
|
||||||
"error":"Під час спроби створити транскрипт щось пішло не так.\n\nЩо ви хочете зробити?\n\nЦей тікет не буде видалено, доки ви не натиснете одну з цих кнопок."
|
"error":"Під час спроби створити транскрипт щось пішло не так.\n\nЩо ви хочете зробити?\n\nЦей тікет не буде видалено, доки ви не натиснете одну з цих кнопок.",
|
||||||
|
"title":"Помилка транскрипта",
|
||||||
|
"noHistory":"Цей користувач ще не має жодних транскриптів.",
|
||||||
|
"historyNotSupported":"Історія транскриптів наразі підтримується лише з HTML Transcripts.\nІсторія текстових транскриптів буде доступна в майбутніх версіях."
|
||||||
|
},
|
||||||
|
"text":{
|
||||||
|
"messagesTitle":"ПОВІДОМЛЕННЯ",
|
||||||
|
"embedTitle":"EMBED",
|
||||||
|
"fileTitle":"ФАЙЛ",
|
||||||
|
"fieldsTitle":"ПОЛЯ",
|
||||||
|
"reactionsTitle":"РЕАКЦІЇ",
|
||||||
|
"statsTitle":"СТАТИСТИКА",
|
||||||
|
"emptyContent":"<контент порожній>",
|
||||||
|
"noTitle":"<немає заголовка>",
|
||||||
|
"noDesc":"<немає опису>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors":{
|
"errors":{
|
||||||
@@ -257,7 +305,9 @@
|
|||||||
"unknownPanel":"Невідома панель",
|
"unknownPanel":"Невідома панель",
|
||||||
"notInGuild":"Відсутний на сервері",
|
"notInGuild":"Відсутний на сервері",
|
||||||
"channelRename":"Неможливо перейменовати канал",
|
"channelRename":"Неможливо перейменовати канал",
|
||||||
"busy":"Тікет зайнято"
|
"channelCategory":"Неможливо Змінити Категорію",
|
||||||
|
"busy":"Тікет зайнято",
|
||||||
|
"permissionError":"Помилка дозволу"
|
||||||
},
|
},
|
||||||
"descriptions":{
|
"descriptions":{
|
||||||
"askForInfo":"Зв'яжіться з власником цього бота для отримання додаткової інформації!",
|
"askForInfo":"Зв'яжіться з власником цього бота для отримання додаткової інформації!",
|
||||||
@@ -279,8 +329,15 @@
|
|||||||
"deprecatedTicket":"Поточний канал не є дійсним тікетом! Можливо, це тікет зі старої версії Open Ticket!",
|
"deprecatedTicket":"Поточний канал не є дійсним тікетом! Можливо, це тікет зі старої версії Open Ticket!",
|
||||||
"notInGuild":"Це {0} не працює у ПП! Будь ласка, спробуйте ще раз на сервері!",
|
"notInGuild":"Це {0} не працює у ПП! Будь ласка, спробуйте ще раз на сервері!",
|
||||||
"channelRename":"Через обмеження швидкості дискорду бот наразі не може перейменувати канал. Канал буде автоматично перейменовано через 10 хвилин, якщо бота не буде перезавантажено.",
|
"channelRename":"Через обмеження швидкості дискорду бот наразі не може перейменувати канал. Канал буде автоматично перейменовано через 10 хвилин, якщо бота не буде перезавантажено.",
|
||||||
|
"channelCategory":"Через обмеження Discord на частоту запитів категорію каналу не вдалося змінити одразу. Вона буде автоматично змінена протягом 10 хвилин, якщо бот залишатиметься онлайн.",
|
||||||
"channelRenameSource":"Джерело цієї помилки: {0}",
|
"channelRenameSource":"Джерело цієї помилки: {0}",
|
||||||
"busy":"Неможливо використати цей {0}!\nТікет наразі обробляється ботом.\n\nБудь ласка, повторіть спробу через кілька секунд!"
|
"busy":"Неможливо використати цей {0}!\nТікет наразі обробляється ботом.\n\nБудь ласка, повторіть спробу через кілька секунд!",
|
||||||
|
"closeBeforeMessage":"Цей тікет не можна закрити/видалити до того, як користувач надішле повідомлення.",
|
||||||
|
"closeBeforeAdminMessage":"Цей тікет не можна закрити/видалити до того, як адміністратор тікетів або член підтримки надішле повідомлення.",
|
||||||
|
"unableToCreateTicket":"Ви не можете створити тікет.",
|
||||||
|
"messageMissing":"Не вдалося знайти повідомлення взаємодії. Використайте команду `{0}` замість цього.",
|
||||||
|
"stateExpired":"Ця взаємодія більше не є дійсною або термін її дії закінчився. Використайте команду `{0}` замість цього. Нормально отримувати цю помилку після великого оновлення Open Ticket.",
|
||||||
|
"panelStateExpired":"Ця панель більше не є дійсною або термін її дії закінчився. Створіть нову панель за допомогою `{0}`, щоб вирішити проблему. Нормально отримувати цю помилку після великого оновлення Open Ticket."
|
||||||
},
|
},
|
||||||
"optionInvalidReasons":{
|
"optionInvalidReasons":{
|
||||||
"stringRegex":"Значення не відповідає шаблону!",
|
"stringRegex":"Значення не відповідає шаблону!",
|
||||||
@@ -331,7 +388,6 @@
|
|||||||
"added":"Додано",
|
"added":"Додано",
|
||||||
"removed":"Видалено",
|
"removed":"Видалено",
|
||||||
"filter":"Фільтер",
|
"filter":"Фільтер",
|
||||||
"claimedBy":"Запрошено {0}",
|
|
||||||
"method":"Метод",
|
"method":"Метод",
|
||||||
"type":"Тип",
|
"type":"Тип",
|
||||||
"blacklisted":"У ЧС",
|
"blacklisted":"У ЧС",
|
||||||
@@ -343,6 +399,8 @@
|
|||||||
"syntax":"Синтаксіс",
|
"syntax":"Синтаксіс",
|
||||||
"originalName":"Оригінальне ім'я",
|
"originalName":"Оригінальне ім'я",
|
||||||
"newName":"Нове ім'я",
|
"newName":"Нове ім'я",
|
||||||
|
"originalCategory":"Оригінальна Категорія",
|
||||||
|
"newCategory":"Нова Категорія",
|
||||||
"until":"Доки",
|
"until":"Доки",
|
||||||
"validOptions":"Дійсні параметри",
|
"validOptions":"Дійсні параметри",
|
||||||
"validPanels":"Дійсні панелі",
|
"validPanels":"Дійсні панелі",
|
||||||
@@ -352,10 +410,32 @@
|
|||||||
"version":"Версія",
|
"version":"Версія",
|
||||||
"name":"Ім'я",
|
"name":"Ім'я",
|
||||||
"role":"Роль",
|
"role":"Роль",
|
||||||
"status":"Статус",
|
"status":"СТАТУС",
|
||||||
"claimed":"Запрошено",
|
"claimed":"Запрошено",
|
||||||
"pinned":"Закріплено",
|
"pinned":"Закріплено",
|
||||||
"creationDate":"Дата створення"
|
"creationDate":"Дата створення",
|
||||||
|
|
||||||
|
"noone":"Ніхто",
|
||||||
|
"open":"ВІДКРИТИЙ",
|
||||||
|
"closed":"ЗАКРИТО",
|
||||||
|
"priority":"ПРІОРИТЕТ",
|
||||||
|
"participants":"УЧАСНИКИ",
|
||||||
|
"yes":"Так",
|
||||||
|
"no":"Ні",
|
||||||
|
"accept":"Прийняти",
|
||||||
|
"cancel":"Скасувати",
|
||||||
|
"option":"ВАРІАНТ",
|
||||||
|
"topic":"ТЕМА",
|
||||||
|
"uptime":"Час роботи системи",
|
||||||
|
"messages":"ПОВІДОМЛЕННЯ",
|
||||||
|
"embeds":"EMBED",
|
||||||
|
"files":"ФАЙЛИ",
|
||||||
|
"components":"КОМПОНЕНТИ",
|
||||||
|
"cooldown":"Затримка",
|
||||||
|
"maxTickets":"Макс. тікетів",
|
||||||
|
"admins":"АДМІНИ",
|
||||||
|
"roles":"РОЛІ",
|
||||||
|
"size":"РОЗМІР"
|
||||||
},
|
},
|
||||||
"lowercase":{
|
"lowercase":{
|
||||||
"text":"текст",
|
"text":"текст",
|
||||||
@@ -375,6 +455,7 @@
|
|||||||
"panelAutoUpdate":"Ви хочете, щоб ця панель автоматично оновлювалася при редагуванні?",
|
"panelAutoUpdate":"Ви хочете, щоб ця панель автоматично оновлювалася при редагуванні?",
|
||||||
"ticket":"Миттєве створення тікета.",
|
"ticket":"Миттєве створення тікета.",
|
||||||
"ticketId":"Ідентифікатор тікету, який ви хочете створити.",
|
"ticketId":"Ідентифікатор тікету, який ви хочете створити.",
|
||||||
|
"ticketOtherUser":"Створити тікет для іншого користувача.",
|
||||||
"close":"Закрийте тікет.",
|
"close":"Закрийте тікет.",
|
||||||
"delete":"Видалити квиток.",
|
"delete":"Видалити квиток.",
|
||||||
"deleteNoTranscript":"Видаліть цей тікет без створення стенограми.",
|
"deleteNoTranscript":"Видаліть цей тікет без створення стенограми.",
|
||||||
@@ -384,6 +465,7 @@
|
|||||||
"unclaim":"Відмовитися від тікету.",
|
"unclaim":"Відмовитися від тікету.",
|
||||||
"pin":"Закріпіть тікет.",
|
"pin":"Закріпіть тікет.",
|
||||||
"unpin":"Відкріпіть тікет.",
|
"unpin":"Відкріпіть тікет.",
|
||||||
|
|
||||||
"move":"Перемістіть тікет.",
|
"move":"Перемістіть тікет.",
|
||||||
"moveId":"Ідентифікатор параметр, на який ви хочете перейти.",
|
"moveId":"Ідентифікатор параметр, на який ви хочете перейти.",
|
||||||
"rename":"Перейменувати тікет.",
|
"rename":"Перейменувати тікет.",
|
||||||
@@ -392,6 +474,7 @@
|
|||||||
"addUser":"Учасник, якого потрібно додати.",
|
"addUser":"Учасник, якого потрібно додати.",
|
||||||
"remove":"Видалити учасника з тікета.",
|
"remove":"Видалити учасника з тікета.",
|
||||||
"removeUser":"Учасник, якого потрібно видалити",
|
"removeUser":"Учасник, якого потрібно видалити",
|
||||||
|
|
||||||
"blacklist":"Керування чорним списком тікетів.",
|
"blacklist":"Керування чорним списком тікетів.",
|
||||||
"blacklistView":"Переглянути список поточного чорного списку.",
|
"blacklistView":"Переглянути список поточного чорного списку.",
|
||||||
"blacklistAdd":"Додати учасника до чорного списку.",
|
"blacklistAdd":"Додати учасника до чорного списку.",
|
||||||
@@ -405,6 +488,7 @@
|
|||||||
"statsUserUser":"Учасник для перегляду.",
|
"statsUserUser":"Учасник для перегляду.",
|
||||||
"statsTicket":"Перегляд статистики тікета на сервері.",
|
"statsTicket":"Перегляд статистики тікета на сервері.",
|
||||||
"statsTicketTicket":"Тікет для перегляду.",
|
"statsTicketTicket":"Тікет для перегляду.",
|
||||||
|
|
||||||
"clear":"Видалення декількох тікетів одночасно.",
|
"clear":"Видалення декількох тікетів одночасно.",
|
||||||
"clearFilter":"Фільтр для очищення квитків.",
|
"clearFilter":"Фільтр для очищення квитків.",
|
||||||
"clearFilters":{
|
"clearFilters":{
|
||||||
@@ -417,6 +501,7 @@
|
|||||||
"unpin":"Відкріплені",
|
"unpin":"Відкріплені",
|
||||||
"autoclose":"Авто-закриті"
|
"autoclose":"Авто-закриті"
|
||||||
},
|
},
|
||||||
|
|
||||||
"autoclose":"Керуйте автозакриттям у тікеті.",
|
"autoclose":"Керуйте автозакриттям у тікеті.",
|
||||||
"autocloseDisable":"Вимкніть автозакриття в цьому тікеті.",
|
"autocloseDisable":"Вимкніть автозакриття в цьому тікеті.",
|
||||||
"autocloseEnable":"Увімкніть автозакриття в цьому тикеті.",
|
"autocloseEnable":"Увімкніть автозакриття в цьому тикеті.",
|
||||||
@@ -424,7 +509,21 @@
|
|||||||
"autodelete":"Керуйте автовидаленням у тікеті.",
|
"autodelete":"Керуйте автовидаленням у тікеті.",
|
||||||
"autodeleteDisable":"Вимкніть автовидалення в цьому тікеті.",
|
"autodeleteDisable":"Вимкніть автовидалення в цьому тікеті.",
|
||||||
"autodeleteEnable":"Ввімкніть автовидалення в цьому тікеті.",
|
"autodeleteEnable":"Ввімкніть автовидалення в цьому тікеті.",
|
||||||
"autodeleteEnableTime":"Кількість днів."
|
"autodeleteEnableTime":"Кількість днів.",
|
||||||
|
|
||||||
|
"topic":"Керування темою каналу тікету.",
|
||||||
|
"topicSet":"Встановити тему каналу тікету.",
|
||||||
|
"topicValue":"Нова тема каналу.",
|
||||||
|
"topicList":"Отримати список усіх тікетів з їхніми темами та статистикою.",
|
||||||
|
"priority":"Керування пріоритетом тікету.",
|
||||||
|
"prioritySet":"Встановити пріоритет тікету.",
|
||||||
|
"priorityValue":"Пріоритет каналу.",
|
||||||
|
"priorityGet":"Отримати пріоритет тікету.",
|
||||||
|
"priorityList":"Отримати список усіх тікетів з їхнім пріоритетом.",
|
||||||
|
"transfer":"Передати власність тікету від одного користувача іншому.",
|
||||||
|
"transferUser":"Користувач, якому передати.",
|
||||||
|
"transcripts":"Переглянути історію транскриптів тікетів користувача.",
|
||||||
|
"transcriptsUser":"Користувач для перегляду."
|
||||||
},
|
},
|
||||||
"helpMenu":{
|
"helpMenu":{
|
||||||
"help":"Отримайте список усіх доступних команд.",
|
"help":"Отримайте список усіх доступних команд.",
|
||||||
@@ -452,7 +551,16 @@
|
|||||||
"autocloseDisable":"Вимкніть автозакриття в цьому тікеті.",
|
"autocloseDisable":"Вимкніть автозакриття в цьому тікеті.",
|
||||||
"autocloseEnable":"Ввімкніть автозакриття в цьому тікеті.",
|
"autocloseEnable":"Ввімкніть автозакриття в цьому тікеті.",
|
||||||
"autodeleteDisable":"Вимкніть автовидалення в цьому тікеті.",
|
"autodeleteDisable":"Вимкніть автовидалення в цьому тікеті.",
|
||||||
"autodeleteEnable":"Ввімкніть автовидалення в цьому тікеті."
|
"autodeleteEnable":"Ввімкніть автовидалення в цьому тікеті.",
|
||||||
|
"categories":{
|
||||||
|
"general":"Загальні команди",
|
||||||
|
"basicTicket":"Базові команди тікету",
|
||||||
|
"advancedTicket":"Розширені команди тікету",
|
||||||
|
"userTicket":"Команди користувача тікету",
|
||||||
|
"admin":"Адмінські команди",
|
||||||
|
"advanced":"Розширені команди",
|
||||||
|
"extra":"Додаткові команди"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"stats":{
|
"stats":{
|
||||||
"scopes":{
|
"scopes":{
|
||||||
@@ -460,7 +568,8 @@
|
|||||||
"system":"Системна статистика",
|
"system":"Системна статистика",
|
||||||
"user":"Статистика учасника",
|
"user":"Статистика учасника",
|
||||||
"ticket":"Статистика тікета",
|
"ticket":"Статистика тікета",
|
||||||
"participants":"Учасники"
|
"participants":"Учасники",
|
||||||
|
"messages":"Повідомлення"
|
||||||
},
|
},
|
||||||
"properties":{
|
"properties":{
|
||||||
"ticketsCreated":"Тікетів створено",
|
"ticketsCreated":"Тікетів створено",
|
||||||
@@ -472,7 +581,48 @@
|
|||||||
"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":"Виберіть ваш варіант",
|
||||||
|
"selectPriorityLevel":"Виберіть рівень пріоритету"
|
||||||
|
},
|
||||||
|
"priorities":{
|
||||||
|
"urgent":"Терміново",
|
||||||
|
"veryHigh":"Дуже високий",
|
||||||
|
"high":"Високий",
|
||||||
|
"normal":"Звичайний",
|
||||||
|
"low":"Низький",
|
||||||
|
"veryLow":"Дуже низький",
|
||||||
|
"none":"Немає"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+582
-420
File diff suppressed because it is too large
Load Diff
+10
-9
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "open-ticket",
|
"name": "open-ticket",
|
||||||
"author": "DJdj Development",
|
"author": "DJdj Development",
|
||||||
"version": "4.1.2",
|
"version": "4.2.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",
|
||||||
@@ -19,20 +19,21 @@
|
|||||||
"test": "node index.js --dev-config --dev-database --soft-plugins",
|
"test": "node index.js --dev-config --dev-database --soft-plugins",
|
||||||
"testsetup": "node index.js --cli --dev-config --dev-database --soft-plugins",
|
"testsetup": "node index.js --cli --dev-config --dev-database --soft-plugins",
|
||||||
"testnc": "node index.js --no-compile --dev-config --dev-database --soft-plugins",
|
"testnc": "node index.js --no-compile --dev-config --dev-database --soft-plugins",
|
||||||
"docs": "npx typedoc --options .docs/typedoc-config.json && node .docs/createDocs.js",
|
"tools:mergelang": "bun run .tools/mergeTranslations.js",
|
||||||
"mergelang": "node .docs/mergeTranslations.js"
|
"docker:build": ".tools/build-docker.sh djj123dj/open-ticket --no-push"
|
||||||
},
|
},
|
||||||
"type": "commonjs",
|
"type": "module",
|
||||||
"license": "GPL-3.0-only",
|
"license": "GPL-3.0-only",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@discordjs/rest": "^2.6.0",
|
"@discordjs/rest": "^2.6.1",
|
||||||
|
"@open-discord-bots/framework": "^2.0.6",
|
||||||
"@types/node": "^22.5.0",
|
"@types/node": "^22.5.0",
|
||||||
"@types/terminal-kit": "^2.5.7",
|
"@types/terminal-kit": "^2.5.7",
|
||||||
"ansis": "^4.2.0",
|
"ansis": "^4.2.0",
|
||||||
"discord.js": "^14.24.2",
|
"discord.js": "^14.26.4",
|
||||||
"formatted-json-stringify": "^1.2.1",
|
"formatted-json-stringify": "^1.3.2",
|
||||||
"terminal-kit": "^3.1.2",
|
"terminal-kit": "^3.1.2",
|
||||||
"typescript": "^5.9.3"
|
"typescript": "^6.0.3"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -45,7 +46,7 @@
|
|||||||
"homepage": "https://openticket.dj-dj.be",
|
"homepage": "https://openticket.dj-dj.be",
|
||||||
"imports": {
|
"imports": {
|
||||||
"#opendiscord": "./dist/src/index.js",
|
"#opendiscord": "./dist/src/index.js",
|
||||||
"#opendiscord-types": "./dist/src/core/api/api.js"
|
"#opendiscord-types": "./dist/src/core/api.js"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"type": "individual",
|
"type": "individual",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Example Plugin
|
# Example Plugin
|
||||||
A simple example of an Open Ticket v4 plugin!
|
A basic example plugin for developers that want to create their own plugin.
|
||||||
|
|
||||||
> Use this plugin as a starter template for all your custom plugins!
|
> Use this plugin as a starter template for all your custom plugins!
|
||||||
@@ -1,46 +1,68 @@
|
|||||||
import {api, opendiscord, utilities} from "#opendiscord"
|
import {api, opendiscord, utilities} from "#opendiscord"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
if (opendiscord.project != "openticket") throw new api.ODPluginError("This plugin only works in Open Ticket.")
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/** ============= Warning! =============
|
||||||
//// This plugin is not enabled yet! ////
|
*
|
||||||
//// Enable it in the plugin.json file! ////
|
* This plugin is not yet enabled and will not run by default.
|
||||||
/////////////////////////////////////////////
|
* Please enable this plugin in the "plugin.json" file!
|
||||||
|
*
|
||||||
|
* =====================================
|
||||||
|
*/
|
||||||
|
|
||||||
if (utilities.project != "openticket") throw new api.ODPluginError("This plugin only works in Open Ticket!")
|
|
||||||
|
|
||||||
//Add Typescript autocomplete support for plugin data. (!!!OPTIONAL!!!)
|
//Add optional Typescript type-safety. This improves the developer experience.
|
||||||
declare module "#opendiscord-types" {
|
declare module "#opendiscord-types" {
|
||||||
export interface ODPluginManagerIds_Default {
|
export interface ODPluginManagerIdMappings {
|
||||||
"example-plugin":api.ODPlugin
|
"example-plugin":api.ODPlugin
|
||||||
}
|
}
|
||||||
export interface ODConfigManagerIds_Default {
|
export interface ODConfigManagerIdMappings {
|
||||||
"example-plugin:config":api.ODJsonConfig
|
"example-plugin:config":api.ODJsonConfig<{testVariable1:boolean,testVariable2:number,testVariable3:string}>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Let's register the example config. This way it's available for all plugins & systems.
|
//REGISTER CONFIG
|
||||||
opendiscord.events.get("onConfigLoad").listen((configManager) => {
|
opendiscord.events.get("onConfigLoad").listen((configs) => {
|
||||||
configManager.add(new api.ODJsonConfig("example-plugin:config","config.json","./plugins/example-plugin/"))
|
//Let's register our example config. The plugin, all systems and even other plugins can access it.
|
||||||
/*===== What did we do? =====
|
configs.add(new api.ODJsonConfig("example-plugin:config","config.json","./plugins/example-plugin/"))
|
||||||
- "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.
|
/* ===== What did we do? =====
|
||||||
- "config.json" Is the FILE of this config. It is just the filename.
|
* "example-plugin:config" --> Is the ID of this config. It will be used throughout the code to access this config file.
|
||||||
- "./plugins/example-plugin/" Is the DIRECTORY of this config. By default it's "./config/", but we want to change it to point at the plugin directory.
|
* "config.json" --> Is the FILENAME of this config with extension.
|
||||||
|
* "./plugins/example-plugin/" --> Is the DIRECTORY of this config. It is set to "./config/" by default, but we want to change it to our plugin directory.
|
||||||
*/
|
*/
|
||||||
|
})
|
||||||
|
|
||||||
//Let's also log it to the console to let us know it worked!
|
//CONFIG READY FOR USAGE
|
||||||
const ourConfig = configManager.get("example-plugin:config")
|
opendiscord.events.get("afterConfigsInitiated").listen((configs) => {
|
||||||
|
//After the "afterConfigsInitiated" event is fired, configs can be read without problems.
|
||||||
|
//Almost all events happen after this one, so you don't need to worry about it.
|
||||||
|
|
||||||
|
const ourConfig = configs.get("example-plugin:config")
|
||||||
opendiscord.log("The example config loaded successfully!","plugin",[
|
opendiscord.log("The example config loaded successfully!","plugin",[
|
||||||
{key:"var-1",value:ourConfig.data.testVariable1},
|
{key:"test-property-1",value:ourConfig.data.testVariable1.toString()},
|
||||||
{key:"var-2",value:ourConfig.data.testVariable2.toString()},
|
{key:"test-property-2",value:ourConfig.data.testVariable2.toString()},
|
||||||
{key:"var-3",value:ourConfig.data.testVariable3.toString()}
|
{key:"test-property-3",value:ourConfig.data.testVariable3.toString()}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
//LISTEN FOR TICKET EVENTS
|
||||||
opendiscord.events.get("onTicketCreate").listen((creator) => {
|
opendiscord.events.get("onTicketCreate").listen((creator) => {
|
||||||
//This is logged before the ticket is created (after the button is pressed)
|
//Do something before a ticket is created (just after the button press)
|
||||||
opendiscord.log("Ticket is getting created...","plugin")
|
opendiscord.log("Ticket is getting created...","plugin")
|
||||||
})
|
})
|
||||||
opendiscord.events.get("afterTicketCreated").listen((ticket,creator,channel) => {
|
opendiscord.events.get("afterTicketCreated").listen((ticket,creator,channel) => {
|
||||||
//This is logged after the ticket is created
|
//Do something after a ticket is created and ready for usage
|
||||||
opendiscord.log("Ticket ready!","plugin")
|
opendiscord.log("Ticket ready!","plugin")
|
||||||
})
|
})
|
||||||
|
opendiscord.events.get("onTicketClose").listen((ticket,closer,channel,reason) => {
|
||||||
|
//Do something when a ticket will be closed
|
||||||
|
opendiscord.log("Ticket is getting closed...","plugin")
|
||||||
|
})
|
||||||
|
|
||||||
|
//MODIFY BUILT-IN OPEN TICKET MESSAGES
|
||||||
|
opendiscord.events.get("afterEmbedBuildersLoaded").listen((embeds) => {
|
||||||
|
//Let's modify the close message to include a URL in the embed.
|
||||||
|
embeds.get("opendiscord:close-message").workers.add(new api.ODWorker("example-plugin:testing",0,(instance,params,origin,cancel) => {
|
||||||
|
instance.setUrl("https://example.com")
|
||||||
|
}))
|
||||||
|
})
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
"id":"example-plugin",
|
"id":"example-plugin",
|
||||||
"version":"1.0.0",
|
"version":"1.0.0",
|
||||||
"startFile":"index.ts",
|
"startFile":"index.ts",
|
||||||
|
"supportedVersions":["OTv4.2.x"],
|
||||||
|
|
||||||
"enabled":false,
|
"enabled":false,
|
||||||
"priority":0,
|
"priority":0,
|
||||||
@@ -14,8 +15,9 @@
|
|||||||
|
|
||||||
"details":{
|
"details":{
|
||||||
"author":"DJj123dj",
|
"author":"DJj123dj",
|
||||||
"shortDescription":"A simple template for an Open Ticket v4 plugin!",
|
"contributors":[],
|
||||||
"longDescription":"A simple example of an Open Ticket v4 plugin!",
|
"shortDescription":"A basic example plugin for developers that want to create their own plugin.",
|
||||||
|
"longDescription":"A basic example plugin for developers that want to create their own plugin.",
|
||||||
"imageUrl":"",
|
"imageUrl":"",
|
||||||
"projectUrl":"",
|
"projectUrl":"",
|
||||||
"tags":["template","example","default"]
|
"tags":["template","example","default"]
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET ADD USER SYSTEM
|
//TICKET ADD USER SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:add-ticket-user"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:add-ticket-user"))
|
||||||
opendiscord.actions.get("opendiscord:add-ticket-user").workers.add([
|
opendiscord.actions.get("opendiscord:add-ticket-user").workers.add([
|
||||||
new api.ODWorker("opendiscord:add-ticket-user",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:add-ticket-user",2,async (instance,params,origin,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!")
|
||||||
|
|
||||||
@@ -34,44 +34,31 @@ export const registerActions = async () => {
|
|||||||
opendiscord.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 (no await)
|
||||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
if (ticketMessage){
|
|
||||||
try{
|
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
|
||||||
}catch(e){
|
|
||||||
opendiscord.log("Unable to edit ticket message on ticket user adding!","error",[
|
|
||||||
{key:"channel",value:"#"+channel.name},
|
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
|
||||||
{key:"messageid",value:ticketMessage.id},
|
|
||||||
{key:"option",value:ticket.option.id.value,hidden:true}
|
|
||||||
])
|
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:add-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:add-message").build(origin,{guild,channel,user,ticket,reason,data})).message)
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketUserAdded").emit([ticket,user,data,channel,reason])
|
await opendiscord.events.get("afterTicketUserAdded").emit([ticket,user,data,channel,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
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) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.adding.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.adding.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
|
if (creator && generalConfig.data.logs.logMessages.adding.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"add",reason,additionalData:data}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket,data} = params
|
const {guild,channel,user,ticket,data} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" added "+data.displayName+" to a ticket!","info",[
|
opendiscord.log(user.displayName+" added "+data.displayName+" to a ticket!","info",[
|
||||||
@@ -80,7 +67,7 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -0,0 +1,129 @@
|
|||||||
|
///////////////////////////////////////
|
||||||
|
//CALCULATE TICKET CATEGORY SYSTEM
|
||||||
|
///////////////////////////////////////
|
||||||
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
|
export async function registerActions(){
|
||||||
|
opendiscord.actions.add(new api.ODAction("opendiscord:calculate-ticket-category"))
|
||||||
|
opendiscord.actions.get("opendiscord:calculate-ticket-category").workers.add([
|
||||||
|
new api.ODWorker("opendiscord:default-category",2,async (instance,params,origin,cancel) => {
|
||||||
|
//handle default category
|
||||||
|
const {guild,user,channel,option,ticket,currentCategoryId} = params
|
||||||
|
|
||||||
|
const defaultCategoryId = option.get("opendiscord:channel-category").value
|
||||||
|
if (!defaultCategoryId){
|
||||||
|
//default category is disabled
|
||||||
|
instance.newCategoryId = null
|
||||||
|
instance.newCategoryMode = null
|
||||||
|
instance.newCategory = null
|
||||||
|
instance.shouldChangeCategory = (instance.newCategoryId !== currentCategoryId)
|
||||||
|
}else{
|
||||||
|
const defaultCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,defaultCategoryId)
|
||||||
|
if (defaultCategory){
|
||||||
|
//default category is enabled
|
||||||
|
instance.newCategoryId = defaultCategoryId
|
||||||
|
instance.newCategoryMode = "default"
|
||||||
|
instance.newCategory = defaultCategory
|
||||||
|
instance.shouldChangeCategory = (instance.newCategoryId !== currentCategoryId)
|
||||||
|
}else{
|
||||||
|
//default category is not found (do not switch categories)
|
||||||
|
opendiscord.log("Unable to find ticket category '"+defaultCategoryId+"' #1","error",[
|
||||||
|
{key:"categoryid",value:defaultCategoryId},
|
||||||
|
{key:"type",value:"default"}
|
||||||
|
])
|
||||||
|
instance.newCategoryId = null
|
||||||
|
instance.newCategoryMode = null
|
||||||
|
instance.newCategory = null
|
||||||
|
instance.shouldChangeCategory = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
new api.ODWorker("opendiscord:close-category",1,async (instance,params,origin,cancel) => {
|
||||||
|
//handle close category
|
||||||
|
const {guild,user,channel,option,ticket,currentCategoryId} = params
|
||||||
|
if (!ticket) return
|
||||||
|
if (!ticket.get("opendiscord:closed").value) return
|
||||||
|
if (!generalConfig.data.ticketSystem.closedCategory.enabled) return
|
||||||
|
|
||||||
|
const closeCategoryId = generalConfig.data.ticketSystem.closedCategory.categoryId
|
||||||
|
if (!closeCategoryId) return
|
||||||
|
const closeCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,closeCategoryId)
|
||||||
|
if (closeCategory){
|
||||||
|
//close category is enabled
|
||||||
|
instance.newCategoryId = closeCategoryId
|
||||||
|
instance.newCategoryMode = "close"
|
||||||
|
instance.newCategory = closeCategory
|
||||||
|
instance.shouldChangeCategory = (instance.newCategoryId !== currentCategoryId)
|
||||||
|
}else{
|
||||||
|
//close category is not found (do not switch categories)
|
||||||
|
opendiscord.log("Unable to find ticket category '"+closeCategoryId+"' #2","error",[
|
||||||
|
{key:"categoryid",value:closeCategoryId},
|
||||||
|
{key:"type",value:"close"}
|
||||||
|
])
|
||||||
|
instance.newCategoryId = null
|
||||||
|
instance.newCategoryMode = null
|
||||||
|
instance.newCategory = null
|
||||||
|
instance.shouldChangeCategory = false
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
new api.ODWorker("opendiscord:claim-category",0,async (instance,params,origin,cancel) => {
|
||||||
|
//handle claim category
|
||||||
|
const {guild,user,channel,option,ticket,currentCategoryId} = params
|
||||||
|
if (!ticket) return
|
||||||
|
if (!ticket.get("opendiscord:claimed").value) return
|
||||||
|
|
||||||
|
const claimedCategoryIds = generalConfig.data.ticketSystem.claimedCategories
|
||||||
|
const claimCategoryId = claimedCategoryIds.find((c) => c.user == user.id)?.category
|
||||||
|
if (!claimCategoryId) return
|
||||||
|
const claimCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,claimCategoryId)
|
||||||
|
if (claimCategory){
|
||||||
|
//claim category is enabled
|
||||||
|
instance.newCategoryId = claimCategoryId
|
||||||
|
instance.newCategoryMode = "claim"
|
||||||
|
instance.newCategory = claimCategory
|
||||||
|
instance.shouldChangeCategory = (instance.newCategoryId !== currentCategoryId)
|
||||||
|
}else{
|
||||||
|
//claim category is not found (do not switch categories)
|
||||||
|
opendiscord.log("Unable to find ticket category '"+claimCategoryId+"' #3","error",[
|
||||||
|
{key:"categoryid",value:claimCategoryId},
|
||||||
|
{key:"type",value:"claim"}
|
||||||
|
])
|
||||||
|
instance.newCategoryId = null
|
||||||
|
instance.newCategoryMode = null
|
||||||
|
instance.newCategory = null
|
||||||
|
instance.shouldChangeCategory = false
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
new api.ODWorker("opendiscord:backup-category",-100,async (instance,params,origin,cancel) => {
|
||||||
|
//handle backup category
|
||||||
|
const {guild,user,channel,option,ticket,currentCategoryId} = params
|
||||||
|
if (!instance.newCategory || !instance.newCategoryId || !instance.shouldChangeCategory) return
|
||||||
|
if (instance.newCategory.children.cache.size < 50) return
|
||||||
|
if (!generalConfig.data.ticketSystem.backupCategory.enabled) return
|
||||||
|
|
||||||
|
const backupCategoryId = generalConfig.data.ticketSystem.backupCategory.categoryId
|
||||||
|
if (!backupCategoryId) return
|
||||||
|
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,backupCategoryId)
|
||||||
|
if (backupCategory){
|
||||||
|
//backup category is enabled
|
||||||
|
instance.newCategoryId = backupCategoryId
|
||||||
|
instance.newCategoryMode = "backup"
|
||||||
|
instance.newCategory = backupCategory
|
||||||
|
instance.shouldChangeCategory = (instance.newCategoryId !== currentCategoryId)
|
||||||
|
}else{
|
||||||
|
//backup category is not found (do not switch categories)
|
||||||
|
opendiscord.log("Unable to find ticket category '"+backupCategoryId+"' #4","error",[
|
||||||
|
{key:"categoryid",value:backupCategoryId},
|
||||||
|
{key:"type",value:"backup"}
|
||||||
|
])
|
||||||
|
instance.newCategoryId = null
|
||||||
|
instance.newCategoryMode = null
|
||||||
|
instance.newCategory = null
|
||||||
|
instance.shouldChangeCategory = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
])
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
///////////////////////////////////////
|
||||||
|
//CALCULATE TICKET NAME SYSTEM
|
||||||
|
///////////////////////////////////////
|
||||||
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
|
export async function registerActions(){
|
||||||
|
opendiscord.actions.add(new api.ODAction("opendiscord:calculate-ticket-name"))
|
||||||
|
opendiscord.actions.get("opendiscord:calculate-ticket-name").workers.add([
|
||||||
|
new api.ODWorker("opendiscord:calculate-ticket-name",0,async (instance,params,origin,cancel) => {
|
||||||
|
const {guild,user,channel,option,ticket,currentChannelName} = params
|
||||||
|
|
||||||
|
//calculate base channel name
|
||||||
|
const channelPrefix = option.get("opendiscord:channel-prefix").value
|
||||||
|
const channelSuffix = (ticket) ? ticket.get("opendiscord:channel-suffix").value : (await opendiscord.options.suffix.getSuffixFromOption(option,user,guild) ?? "unknown")
|
||||||
|
const channelRenamed = (ticket && ticket.exists("opendiscord:channel-renamed")) ? ticket.get("opendiscord:channel-renamed").value : null
|
||||||
|
const baseChannelName = (channelRenamed) ? channelRenamed : channelPrefix+channelSuffix
|
||||||
|
|
||||||
|
//calculate status emojis
|
||||||
|
const pinEmoji = (ticket && ticket.get("opendiscord:pinned").value) ? generalConfig.data.ticketSystem.pinEmoji : ""
|
||||||
|
const closeEmoji = (ticket && ticket.get("opendiscord:closed").value) ? generalConfig.data.ticketSystem.closeEmoji : ""
|
||||||
|
const priorityEmoji = (ticket) ? (opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? "") : ""
|
||||||
|
|
||||||
|
instance.newChannelName = pinEmoji+closeEmoji+priorityEmoji+baseChannelName
|
||||||
|
instance.newChannelSuffix = channelSuffix
|
||||||
|
instance.shouldChangeName = (instance.newChannelName !== currentChannelName)
|
||||||
|
})
|
||||||
|
])
|
||||||
|
}
|
||||||
+39
-219
@@ -1,15 +1,16 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET CLAIMING SYSTEM
|
//TICKET CLAIMING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
const interactiveMsgState = opendiscord.states.get("opendiscord:interactive-message")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:claim-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:claim-ticket"))
|
||||||
opendiscord.actions.get("opendiscord:claim-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:claim-ticket").workers.add([
|
||||||
new api.ODWorker("opendiscord:claim-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:claim-ticket",2,async (instance,params,origin,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!")
|
||||||
|
|
||||||
@@ -22,67 +23,66 @@ export const registerActions = async () => {
|
|||||||
ticket.get("opendiscord:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-claimed",1,"increase")
|
await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-claimed",1,"increase")
|
||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-claimed",user.id,1,"increase")
|
await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-claimed",user.id,1,"increase")
|
||||||
|
|
||||||
//update category
|
//calculate & update category
|
||||||
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
||||||
const rawClaimCategory = ticket.option.get("opendiscord:channel-categories-claimed").value.find((c) => c.user == user.id)
|
const categoryResult = await opendiscord.actions.get("opendiscord:calculate-ticket-category").run("claim-ticket",{guild,user,option:ticket.option,channel,ticket,currentCategoryId:channel.parentId})
|
||||||
const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null
|
if (categoryResult && categoryResult.shouldChangeCategory && typeof categoryResult.newCategoryId !== "undefined" && typeof categoryResult.newCategoryMode !== "undefined" && typeof categoryResult.newCategory !== "undefined"){
|
||||||
if (claimCategory){
|
const originalCategoryName = channel.parent?.name ?? "<unknown>"
|
||||||
try {
|
const newCategoryName = categoryResult.newCategory?.name ?? "<unknown>"
|
||||||
channel.setParent(claimCategory,{lockPermissions:false})
|
try{
|
||||||
ticket.get("opendiscord:category-mode").value = "claimed"
|
await utilities.timedAwait(channel.setParent(categoryResult.newCategoryId,{lockPermissions:false}),3000,(err) => {
|
||||||
ticket.get("opendiscord:category").value = claimCategory
|
process.emit("uncaughtException",new Error("Error: Unable to change channel parent: "+err))
|
||||||
}catch(e){
|
})
|
||||||
opendiscord.log("Unable to move ticket to 'claimed category'!","error",[
|
ticket.get("opendiscord:category-mode").value = categoryResult.newCategoryMode
|
||||||
|
ticket.get("opendiscord:category").value = categoryResult.newCategoryId
|
||||||
|
}catch(err){
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-category").build("ticket-claim",{guild,channel,user,originalCategory:originalCategoryName,newCategory:newCategoryName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
|
opendiscord.log("Unable to move ticket to claimed 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:claimCategory}
|
{key:"categoryid",value:categoryResult.newCategoryId ?? "/"}
|
||||||
])
|
])
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message (no await)
|
||||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
if (ticketMessage){
|
|
||||||
try{
|
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
|
||||||
}catch(e){
|
|
||||||
opendiscord.log("Unable to edit ticket message on ticket claiming!","error",[
|
|
||||||
{key:"channel",value:"#"+channel.name},
|
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
|
||||||
{key:"messageid",value:ticketMessage.id},
|
|
||||||
{key:"option",value:ticket.option.id.value}
|
|
||||||
])
|
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage){
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build(origin,{guild,channel,user,ticket,reason})).message)
|
||||||
|
if (sentMsg) await interactiveMsgState.setMsgState({channel,message:sentMsg},{
|
||||||
|
messageType:"claim-message",
|
||||||
|
messageOrigin:"other",
|
||||||
|
messageAuthor:user.id,
|
||||||
|
messageReason:reason
|
||||||
|
},false)
|
||||||
|
}
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketClaimed").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("afterTicketClaimed").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
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) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.claiming.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.claiming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
|
if (creator && generalConfig.data.logs.logMessages.claiming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"claim",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" claimed a ticket!","info",[
|
opendiscord.log(user.displayName+" claimed a ticket!","info",[
|
||||||
@@ -91,7 +91,7 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
@@ -100,183 +100,3 @@ export const registerActions = async () => {
|
|||||||
params.ticket.get("opendiscord:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
|
||||||
//CLAIM TICKET TICKET MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:claim-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:claim-ticket-ticket-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
|
||||||
const permissionMode = generalConfig.data.system.permissions.claim
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:claim-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when already claimed
|
|
||||||
if (ticket.get("opendiscord:claimed").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start claiming ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//claim with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:claim-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//claim without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:claim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:claim-ticket-ticket-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
//CLAIM TICKET UNCLAIM MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:claim-ticket-unclaim-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-unclaim-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:claim-ticket-unclaim-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
|
||||||
const permissionMode = generalConfig.data.system.permissions.claim
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:claim-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when already claimed
|
|
||||||
if (ticket.get("opendiscord:claimed").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.claim"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start claiming ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//claim with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:claim-ticket-reason").build("unclaim-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//claim without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:claim-ticket").run("unclaim-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build("unclaim-message",{guild,channel,user,ticket,reason:null}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:claim-ticket-unclaim-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-unclaim-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
const {verifybarMessage} = params
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unclaim-message").build("other",{guild,channel,user,ticket,reason}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
}
|
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//CLEAR TICKETS SYSTEM
|
//CLEAR TICKETS SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:clear-tickets"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:clear-tickets"))
|
||||||
opendiscord.actions.get("opendiscord:clear-tickets").workers.add([
|
opendiscord.actions.get("opendiscord:clear-tickets").workers.add([
|
||||||
new api.ODWorker("opendiscord:clear-tickets",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:clear-tickets",2,async (instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,filter,list} = params
|
const {guild,channel,user,filter,list} = params
|
||||||
|
|
||||||
await opendiscord.events.get("onTicketsClear").emit([list,user,channel,filter])
|
await opendiscord.events.get("onTicketsClear").emit([list,user,channel,filter])
|
||||||
@@ -43,21 +43,21 @@ export const registerActions = async () => {
|
|||||||
instance.list = nameList
|
instance.list = nameList
|
||||||
await opendiscord.events.get("afterTicketsCleared").emit([list,user,channel,filter])
|
await opendiscord.events.get("afterTicketsCleared").emit([list,user,channel,filter])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.deleting.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:clear-logs").build(source,{guild,channel,user,filter,list:instance.list ?? []}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:clear-logs").build(origin,{guild,channel,user,filter,list:instance.list ?? []}))
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,user,filter,list} = params
|
const {guild,user,filter,list} = params
|
||||||
opendiscord.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:origin},
|
||||||
{key:"filter",value:filter}
|
{key:"filter",value:filter}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|||||||
+60
-208
@@ -1,16 +1,17 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET CLOSING SYSTEM
|
//TICKET CLOSING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
const lang = opendiscord.languages
|
const lang = opendiscord.languages
|
||||||
|
const interactiveMsgState = opendiscord.states.get("opendiscord:interactive-message")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:close-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:close-ticket"))
|
||||||
opendiscord.actions.get("opendiscord:close-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:close-ticket").workers.add([
|
||||||
new api.ODWorker("opendiscord:close-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:close-ticket",2,async (instance,params,origin,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!")
|
||||||
|
|
||||||
@@ -25,33 +26,57 @@ export const registerActions = async () => {
|
|||||||
ticket.get("opendiscord:reopened-by").value = null
|
ticket.get("opendiscord:reopened-by").value = null
|
||||||
ticket.get("opendiscord:reopened-on").value = null
|
ticket.get("opendiscord:reopened-on").value = null
|
||||||
|
|
||||||
if (source == "autoclose") ticket.get("opendiscord:autoclosed").value = true
|
if (origin == "autoclose") ticket.get("opendiscord:autoclosed").value = true
|
||||||
ticket.get("opendiscord:open").value = false
|
ticket.get("opendiscord:open").value = false
|
||||||
ticket.get("opendiscord:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-closed",1,"increase")
|
await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-closed",1,"increase")
|
||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-closed",user.id,1,"increase")
|
await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-closed",user.id,1,"increase")
|
||||||
|
|
||||||
//update category
|
//calculate & update category
|
||||||
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
||||||
const closeCategory = ticket.option.get("opendiscord:channel-category-closed").value
|
const categoryResult = await opendiscord.actions.get("opendiscord:calculate-ticket-category").run("close-ticket",{guild,user,option:ticket.option,channel,ticket,currentCategoryId:channel.parentId})
|
||||||
if (closeCategory !== ""){
|
if (categoryResult && categoryResult.shouldChangeCategory && typeof categoryResult.newCategoryId !== "undefined" && typeof categoryResult.newCategoryMode !== "undefined" && typeof categoryResult.newCategory !== "undefined"){
|
||||||
try {
|
const originalCategoryName = channel.parent?.name ?? "<unknown>"
|
||||||
channel.setParent(closeCategory,{lockPermissions:false})
|
const newCategoryName = categoryResult.newCategory?.name ?? "<unknown>"
|
||||||
ticket.get("opendiscord:category-mode").value = "closed"
|
try{
|
||||||
ticket.get("opendiscord:category").value = closeCategory
|
await utilities.timedAwait(channel.setParent(categoryResult.newCategoryId,{lockPermissions:false}),3000,(err) => {
|
||||||
}catch(e){
|
process.emit("uncaughtException",new Error("Error: Unable to change channel parent: "+err))
|
||||||
opendiscord.log("Unable to move ticket to 'closed category'!","error",[
|
})
|
||||||
|
ticket.get("opendiscord:category-mode").value = categoryResult.newCategoryMode
|
||||||
|
ticket.get("opendiscord:category").value = categoryResult.newCategoryId
|
||||||
|
}catch(err){
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-category").build("ticket-close",{guild,channel,user,originalCategory:originalCategoryName,newCategory:newCategoryName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
|
opendiscord.log("Unable to move ticket to closed 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:closeCategory}
|
{key:"categoryid",value:categoryResult.newCategoryId ?? "/"}
|
||||||
])
|
])
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//calculate channel name
|
||||||
|
const channelNameResult = await opendiscord.actions.get("opendiscord:calculate-ticket-name").run("close-ticket",{guild,user,option:ticket.option,channel,ticket,currentChannelName:channel.name})
|
||||||
|
if (channelNameResult && channelNameResult.shouldChangeName && typeof channelNameResult.newChannelName !== "undefined"){
|
||||||
|
const originalName = channel.name
|
||||||
|
const newName = channelNameResult.newChannelName
|
||||||
|
try{
|
||||||
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
|
opendiscord.log("Failed to rename channel on ticket close","error")
|
||||||
|
})
|
||||||
|
}catch(err){
|
||||||
|
opendiscord.log("Unable to rename channel while closing ticket! Waiting until ratelimit expires...","warning",[
|
||||||
|
{key:"oldName",value:originalName},
|
||||||
|
{key:"newName",value:newName}
|
||||||
|
])
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-close",{guild,channel,user,originalName,newName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//update permissions (non-staff => readonly)
|
//update permissions (non-staff => readonly)
|
||||||
const permissions: discord.OverwriteResolvable[] = [{
|
const permissions: discord.OverwriteResolvable[] = [{
|
||||||
type:discord.OverwriteType.Role,
|
type:discord.OverwriteType.Role,
|
||||||
@@ -93,7 +118,7 @@ export const registerActions = async () => {
|
|||||||
ticket.get("opendiscord: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.ticketSystem.removeParticipantsOnClose) permissions.push({
|
||||||
type:discord.OverwriteType.Member,
|
type:discord.OverwriteType.Member,
|
||||||
id:participant.id,
|
id:participant.id,
|
||||||
allow:[],
|
allow:[],
|
||||||
@@ -109,44 +134,39 @@ export const registerActions = async () => {
|
|||||||
})
|
})
|
||||||
channel.permissionOverwrites.set(permissions)
|
channel.permissionOverwrites.set(permissions)
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message (no await)
|
||||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
if (ticketMessage){
|
|
||||||
try{
|
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
|
||||||
}catch(e){
|
|
||||||
opendiscord.log("Unable to edit ticket message on ticket closing!","error",[
|
|
||||||
{key:"channel",value:"#"+channel.name},
|
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
|
||||||
{key:"messageid",value:ticketMessage.id},
|
|
||||||
{key:"option",value:ticket.option.id.value}
|
|
||||||
])
|
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:close-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage){
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:close-message").build(origin,{guild,channel,user,ticket,reason})).message)
|
||||||
|
if (sentMsg) await interactiveMsgState.setMsgState({channel,message:sentMsg},{
|
||||||
|
messageType:"close-message",
|
||||||
|
messageOrigin:"other",
|
||||||
|
messageAuthor:user.id,
|
||||||
|
messageReason:reason
|
||||||
|
},false)
|
||||||
|
}
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketClosed").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("afterTicketClosed").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
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) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.closing.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.closing.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
|
if (creator && generalConfig.data.logs.logMessages.closing.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"close",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" closed a ticket!","info",[
|
opendiscord.log(user.displayName+" closed a ticket!","info",[
|
||||||
@@ -155,7 +175,7 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
@@ -164,171 +184,3 @@ export const registerActions = async () => {
|
|||||||
params.ticket.get("opendiscord:busy").value = false
|
params.ticket.get("opendiscord:busy").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
|
||||||
//CLOSE TICKET TICKET MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:close-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:close-ticket-ticket-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:close-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {user,member,channel,guild} = instance
|
|
||||||
|
|
||||||
//check permissions
|
|
||||||
const permsResult = await opendiscord.permissions.checkCommandPerms(generalConfig.data.system.permissions.close,"support",user,member,channel,guild)
|
|
||||||
if (!permsResult.hasPerms){
|
|
||||||
if (permsResult.reason == "not-in-server") await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
else await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild,channel,user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//check is in guild/server
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//check if ticket exists
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when already closed
|
|
||||||
if (ticket.get("opendiscord:closed").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:lang.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when not allowed because of missing messages
|
|
||||||
if (!permsResult.isAdmin && (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage)){
|
|
||||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//start closing ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//close with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:close-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//close without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:close-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:close-ticket-ticket-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
//CLOSE TICKET REOPEN MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:close-ticket-reopen-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:close-ticket-reopen-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:close-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {user,member,channel,guild} = instance
|
|
||||||
|
|
||||||
//check permissions
|
|
||||||
const permsResult = await opendiscord.permissions.checkCommandPerms(generalConfig.data.system.permissions.close,"support",user,member,channel,guild)
|
|
||||||
if (!permsResult.hasPerms){
|
|
||||||
if (permsResult.reason == "not-in-server") await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
else await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild,channel,user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//check is in guild/server
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//check if ticket exists
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when already closed
|
|
||||||
if (ticket.get("opendiscord:closed").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:lang.getTranslation("errors.actionInvalid.close"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when not allowed because of missing messages
|
|
||||||
if (!permsResult.isAdmin && (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage)){
|
|
||||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//start closing ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//close with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:close-ticket-reason").build("reopen-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//close without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:close-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:close-message").build("reopen-message",{guild,channel,user,ticket,reason:null}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:close-ticket-reopen-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-reopen-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
const {verifybarMessage} = params
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("other",{guild,channel,user,ticket,reason}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
}
|
|
||||||
+60
-68
@@ -1,63 +1,36 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET CREATION SYSTEM
|
//TICKET CREATION SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
const lang = opendiscord.languages
|
const lang = opendiscord.languages
|
||||||
|
const interactiveMsgState = opendiscord.states.get("opendiscord:interactive-message")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:create-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:create-ticket"))
|
||||||
opendiscord.actions.get("opendiscord:create-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:create-ticket").workers.add([
|
||||||
new api.ODWorker("opendiscord:create-ticket",3,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:create-ticket",3,async (instance,params,origin,cancel) => {
|
||||||
const {guild,user,answers,option} = params
|
const {guild,user,answers,option} = params
|
||||||
|
|
||||||
await opendiscord.events.get("onTicketCreate").emit([user])
|
await opendiscord.events.get("onTicketCreate").emit([user])
|
||||||
await opendiscord.events.get("onTicketChannelCreation").emit([option,user])
|
await opendiscord.events.get("onTicketChannelCreation").emit([option,user])
|
||||||
|
|
||||||
//get channel properties
|
//get channel properties
|
||||||
const channelPrefix = option.get("opendiscord:channel-prefix").value
|
|
||||||
const channelCategory = option.get("opendiscord:channel-category").value
|
|
||||||
const channelBackupCategory = option.get("opendiscord:channel-category-backup").value
|
|
||||||
const channelTopicText = option.get("opendiscord:channel-topic").value
|
const channelTopicText = option.get("opendiscord:channel-topic").value
|
||||||
const channelSuffix = await opendiscord.options.suffix.getSuffixFromOption(option,user,guild)
|
|
||||||
const channelName = channelPrefix+channelSuffix
|
|
||||||
|
|
||||||
//handle category
|
//calculate channel name
|
||||||
let category: string|null = null
|
const channelNameResult = await opendiscord.actions.get("opendiscord:calculate-ticket-name").run("create-ticket",{guild,user,option,channel:null,ticket:null,currentChannelName:null})
|
||||||
let categoryMode: "backup"|"normal"|null = null
|
if (!channelNameResult) return opendiscord.log("Ticket Creation Error: Unable to calculate ticket name.","error")
|
||||||
if (channelCategory != ""){
|
const channelName = (channelNameResult.shouldChangeName && typeof channelNameResult.newChannelName !== "undefined") ? channelNameResult.newChannelName : "ot-unnamed-ticket"
|
||||||
//category enabled
|
const channelSuffix = (typeof channelNameResult.newChannelSuffix !== "undefined") ? channelNameResult.newChannelSuffix : "unknown"
|
||||||
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
|
||||||
if (!normalCategory){
|
//calculate category
|
||||||
//default category was not found
|
const categoryResult = await opendiscord.actions.get("opendiscord:calculate-ticket-category").run("create-ticket",{guild,user,option,channel:null,ticket:null,currentCategoryId:null})
|
||||||
opendiscord.log("Ticket Creation Error: Unable to find category! #1","error",[
|
if (!categoryResult) return opendiscord.log("Ticket Creation Error: Unable to calculate ticket category.","error")
|
||||||
{key:"categoryid",value:channelCategory},
|
const ticketCategoryId = (categoryResult.shouldChangeCategory && typeof categoryResult.newCategoryId !== "undefined") ? categoryResult.newCategoryId : undefined
|
||||||
{key:"backup",value:"false"}
|
const ticketCategoryMode = (categoryResult.shouldChangeCategory && typeof categoryResult.newCategoryMode !== "undefined") ? categoryResult.newCategoryMode : undefined
|
||||||
])
|
|
||||||
}else{
|
|
||||||
//default category was found
|
|
||||||
if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){
|
|
||||||
//use backup category
|
|
||||||
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
|
||||||
if (!backupCategory){
|
|
||||||
//default category was not found
|
|
||||||
opendiscord.log("Ticket Creation Error: Unable to find category! #2","error",[
|
|
||||||
{key:"categoryid",value:channelBackupCategory},
|
|
||||||
{key:"backup",value:"true"}
|
|
||||||
])
|
|
||||||
}else{
|
|
||||||
category = backupCategory.id
|
|
||||||
categoryMode = "backup"
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
//use default category
|
|
||||||
category = normalCategory.id
|
|
||||||
categoryMode = "normal"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//handle permissions
|
//handle permissions
|
||||||
const permissions: discord.OverwriteResolvable[] = [{
|
const permissions: discord.OverwriteResolvable[] = [{
|
||||||
@@ -118,15 +91,15 @@ export const registerActions = async () => {
|
|||||||
|
|
||||||
//handle channel topic
|
//handle channel topic
|
||||||
const channelTopics: string[] = []
|
const channelTopics: string[] = []
|
||||||
if (generalConfig.data.system.channelTopic.showOptionName) channelTopics.push(option.get("opendiscord:name").value)
|
if (generalConfig.data.ticketSystem.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.ticketSystem.channelTopic.showOptionDescription) channelTopics.push(option.get("opendiscord:description").value)
|
||||||
if (generalConfig.data.system.channelTopic.showOptionTopic) channelTopics.push(channelTopicText)
|
if (generalConfig.data.ticketSystem.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.ticketSystem.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.ticketSystem.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.ticketSystem.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.ticketSystem.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.ticketSystem.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(", "))
|
if (generalConfig.data.ticketSystem.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
|
//create channel
|
||||||
const channel = await guild.channels.create({
|
const channel = await guild.channels.create({
|
||||||
@@ -134,7 +107,7 @@ export const registerActions = async () => {
|
|||||||
name:channelName,
|
name:channelName,
|
||||||
nsfw:false,
|
nsfw:false,
|
||||||
topic:(channelTopics.length > 0) ? channelTopics.join(" • ") : undefined,
|
topic:(channelTopics.length > 0) ? channelTopics.join(" • ") : undefined,
|
||||||
parent:category,
|
parent:ticketCategoryId,
|
||||||
reason:"Ticket Created By "+user.displayName,
|
reason:"Ticket Created By "+user.displayName,
|
||||||
permissionOverwrites:permissions,
|
permissionOverwrites:permissions,
|
||||||
rateLimitPerUser:slowMode
|
rateLimitPerUser:slowMode
|
||||||
@@ -148,6 +121,7 @@ export const registerActions = async () => {
|
|||||||
new api.ODTicketData("opendiscord:ticket-message",null),
|
new api.ODTicketData("opendiscord:ticket-message",null),
|
||||||
new api.ODTicketData("opendiscord:participants",participants),
|
new api.ODTicketData("opendiscord:participants",participants),
|
||||||
new api.ODTicketData("opendiscord:channel-suffix",channelSuffix),
|
new api.ODTicketData("opendiscord:channel-suffix",channelSuffix),
|
||||||
|
new api.ODTicketData("opendiscord:channel-renamed",null),
|
||||||
new api.ODTicketData("opendiscord:previous-creators",[]),
|
new api.ODTicketData("opendiscord:previous-creators",[]),
|
||||||
|
|
||||||
new api.ODTicketData("opendiscord:open",true),
|
new api.ODTicketData("opendiscord:open",true),
|
||||||
@@ -167,8 +141,8 @@ export const registerActions = async () => {
|
|||||||
new api.ODTicketData("opendiscord:pinned-on",null),
|
new api.ODTicketData("opendiscord:pinned-on",null),
|
||||||
new api.ODTicketData("opendiscord:for-deletion",false),
|
new api.ODTicketData("opendiscord:for-deletion",false),
|
||||||
|
|
||||||
new api.ODTicketData("opendiscord:category",category),
|
new api.ODTicketData("opendiscord:category",ticketCategoryId ?? null),
|
||||||
new api.ODTicketData("opendiscord:category-mode",categoryMode),
|
new api.ODTicketData("opendiscord:category-mode",ticketCategoryMode ?? null),
|
||||||
|
|
||||||
new api.ODTicketData("opendiscord:autoclose-enabled",option.get("opendiscord:autoclose-enable-hours").value),
|
new api.ODTicketData("opendiscord:autoclose-enabled",option.get("opendiscord:autoclose-enable-hours").value),
|
||||||
new api.ODTicketData("opendiscord:autoclose-hours",(option.get("opendiscord:autoclose-enable-hours").value ? option.get("opendiscord:autoclose-hours").value : 0)),
|
new api.ODTicketData("opendiscord:autoclose-hours",(option.get("opendiscord:autoclose-enable-hours").value ? option.get("opendiscord:autoclose-hours").value : 0)),
|
||||||
@@ -184,8 +158,8 @@ export const registerActions = async () => {
|
|||||||
])
|
])
|
||||||
|
|
||||||
//manage stats
|
//manage stats
|
||||||
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-created",1,"increase")
|
await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-created",1,"increase")
|
||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-created",user.id,1,"increase")
|
await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-created",user.id,1,"increase")
|
||||||
|
|
||||||
//manage bot permissions
|
//manage bot permissions
|
||||||
await opendiscord.events.get("onTicketPermissionsCreated").emit([option,opendiscord.permissions,channel,user])
|
await opendiscord.events.get("onTicketPermissionsCreated").emit([option,opendiscord.permissions,channel,user])
|
||||||
@@ -197,7 +171,7 @@ export const registerActions = async () => {
|
|||||||
instance.ticket = ticket
|
instance.ticket = ticket
|
||||||
opendiscord.tickets.add(ticket)
|
opendiscord.tickets.add(ticket)
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:send-ticket-message",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:send-ticket-message",2,async (instance,params,origin,cancel) => {
|
||||||
const {guild,user,answers,option} = params
|
const {guild,user,answers,option} = params
|
||||||
const {ticket,channel} = instance
|
const {ticket,channel} = instance
|
||||||
|
|
||||||
@@ -207,17 +181,33 @@ export const registerActions = async () => {
|
|||||||
//check if ticket message is enabled
|
//check if ticket message is enabled
|
||||||
if (!option.get("opendiscord:ticket-message-enabled").value) return
|
if (!option.get("opendiscord:ticket-message-enabled").value) return
|
||||||
try {
|
try {
|
||||||
const msg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build(source,{guild,channel,user,ticket})).message)
|
const ticketMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build(origin,{guild,channel,user,ticket})).message)
|
||||||
|
|
||||||
ticket.get("opendiscord:ticket-message").value = msg.id
|
if (ticketMsg) await interactiveMsgState.setMsgState({channel,message:ticketMsg},{
|
||||||
|
messageType:"ticket-message",
|
||||||
|
messageOrigin:"other",
|
||||||
|
messageAuthor:user.id
|
||||||
|
},false)
|
||||||
|
|
||||||
|
ticket.get("opendiscord:ticket-message").value = ticketMsg.id
|
||||||
|
|
||||||
//pin ticket message (if required)
|
//pin ticket message (if required)
|
||||||
if (generalConfig.data.system.pinFirstTicketMessage && msg.pinnable) await msg.pin("Ticket Message")
|
if (generalConfig.data.ticketSystem.pinFirstTicketMessage && ticketMsg.pinnable) await ticketMsg.pin("Ticket Message")
|
||||||
|
|
||||||
|
//send modal file upload answers in separate message to prevent deletion after 72h
|
||||||
|
const attachments = answers
|
||||||
|
.filter((answer) => answer.type == "file-upload")
|
||||||
|
.map((answer) => answer.files).flat()
|
||||||
|
.map((file) => new discord.AttachmentBuilder(file.url,{
|
||||||
|
name:file.name,
|
||||||
|
description:file.description ?? undefined
|
||||||
|
}))
|
||||||
|
if (attachments.length > 0) await channel.send({files:attachments})
|
||||||
|
|
||||||
//manage stats
|
//manage stats
|
||||||
await opendiscord.stats.get("opendiscord:ticket").setStat("opendiscord:messages-sent",ticket.id.value,1,"increase")
|
await opendiscord.statistics.get("opendiscord:ticket").setStat("opendiscord:messages-sent",ticket.id.value,2,"increase")
|
||||||
|
|
||||||
await opendiscord.events.get("afterTicketMainMessageCreated").emit([ticket,msg,channel,user])
|
await opendiscord.events.get("afterTicketMainMessageCreated").emit([ticket,ticketMsg,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
|
||||||
@@ -225,20 +215,22 @@ export const registerActions = async () => {
|
|||||||
}
|
}
|
||||||
await opendiscord.events.get("afterTicketCreated").emit([ticket,user,channel])
|
await opendiscord.events.get("afterTicketCreated").emit([ticket,user,channel])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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 opendiscord.log("Ticket Creation Error: Unable to send ticket message. Previous worker failed!","error")
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && generalConfig.data.system.messages.creation.logs){
|
if (generalConfig.data.logs.enabled && generalConfig.data.logs.logMessages.creation.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-created-logs").build(source,{guild,channel,user,ticket}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-created-logs").build(origin,{guild,channel,user,ticket}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
if (generalConfig.data.system.messages.creation.dm) await opendiscord.client.sendUserDm(user,await opendiscord.builders.messages.getSafe("opendiscord:ticket-created-dm").build(source,{guild,channel,user,ticket}))
|
if (generalConfig.data.logs.logMessages.creation.dm) await opendiscord.client.sendUserDm(user,await opendiscord.builders.messages.getSafe("opendiscord:ticket-created-dm").build(origin,{guild,channel,user,ticket}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,user,answers,option} = params
|
const {guild,user,answers,option} = params
|
||||||
const {ticket,channel} = instance
|
const {ticket,channel} = instance
|
||||||
|
|
||||||
@@ -249,7 +241,7 @@ export const registerActions = async () => {
|
|||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{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:"method",value:source},
|
{key:"method",value:origin},
|
||||||
{key:"option",value:option.id.value}
|
{key:"option",value:option.id.value}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET CREATION SYSTEM
|
//TICKET CREATION SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:create-ticket-permissions"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:create-ticket-permissions"))
|
||||||
opendiscord.actions.get("opendiscord:create-ticket-permissions").workers.add([
|
opendiscord.actions.get("opendiscord:create-ticket-permissions").workers.add([
|
||||||
new api.ODWorker("opendiscord:check-blacklist",4,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:check-blacklist",4,(instance,params,origin,cancel) => {
|
||||||
if (!params.option.get("opendiscord:allow-blacklisted-users").value && opendiscord.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"
|
||||||
@@ -19,7 +19,7 @@ export const registerActions = async () => {
|
|||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:check-cooldown",3,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:check-cooldown",3,(instance,params,origin,cancel) => {
|
||||||
const cooldown = opendiscord.cooldowns.get("opendiscord: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
|
||||||
@@ -36,16 +36,16 @@ export const registerActions = async () => {
|
|||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:check-global-limits",2,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:check-global-limits",2,(instance,params,origin,cancel) => {
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
if (!generalConfig.data.system.limits.enabled) return
|
if (!generalConfig.data.ticketSystem.limits.enabled) return
|
||||||
|
|
||||||
const allTickets = opendiscord.tickets.getAll()
|
const allTickets = opendiscord.tickets.getAll()
|
||||||
const globalTicketCount = allTickets.length
|
const globalTicketCount = allTickets.length
|
||||||
const userTickets = opendiscord.tickets.getFiltered((ticket) => ticket.exists("opendiscord:opened-by") && (ticket.get("opendiscord:opened-by").value == params.user.id))
|
const 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.ticketSystem.limits.globalMaximum){
|
||||||
instance.valid = false
|
instance.valid = false
|
||||||
instance.reason = "global-limit"
|
instance.reason = "global-limit"
|
||||||
opendiscord.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",[
|
||||||
@@ -55,7 +55,7 @@ export const registerActions = async () => {
|
|||||||
{key:"limit",value:"global"}
|
{key:"limit",value:"global"}
|
||||||
])
|
])
|
||||||
return cancel()
|
return cancel()
|
||||||
}else if (userTicketCount >= generalConfig.data.system.limits.userMaximum){
|
}else if (userTicketCount >= generalConfig.data.ticketSystem.limits.userMaximum){
|
||||||
instance.valid = false
|
instance.valid = false
|
||||||
instance.reason = "global-user-limit"
|
instance.reason = "global-user-limit"
|
||||||
opendiscord.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",[
|
||||||
@@ -67,7 +67,7 @@ export const registerActions = async () => {
|
|||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:check-option-limits",1,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:check-option-limits",1,(instance,params,origin,cancel) => {
|
||||||
if (!params.option.exists("opendiscord:limits-enabled") || !params.option.get("opendiscord:limits-enabled").value) return
|
if (!params.option.exists("opendiscord:limits-enabled") || !params.option.get("opendiscord:limits-enabled").value) return
|
||||||
|
|
||||||
const allTickets = opendiscord.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value)
|
const allTickets = opendiscord.tickets.getFiltered((ticket) => ticket.option.id.value == params.option.id.value)
|
||||||
@@ -97,7 +97,7 @@ export const registerActions = async () => {
|
|||||||
return cancel()
|
return cancel()
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:valid",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:valid",0,(instance,params,origin,cancel) => {
|
||||||
instance.valid = true
|
instance.valid = true
|
||||||
instance.reason = null
|
instance.reason = null
|
||||||
cancel()
|
cancel()
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TRANSCRIPT CREATION SYSTEM
|
//TRANSCRIPT CREATION SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const transcriptConfig = opendiscord.configs.get("opendiscord:transcripts")
|
const transcriptConfig = opendiscord.configs.get("opendiscord:transcripts")
|
||||||
|
const transcriptDatabase = opendiscord.databases.get("opendiscord:transcripts")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:create-transcript"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:create-transcript"))
|
||||||
opendiscord.actions.get("opendiscord:create-transcript").workers.add([
|
opendiscord.actions.get("opendiscord:create-transcript").workers.add([
|
||||||
new api.ODWorker("opendiscord:select-compiler",4,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:select-compiler",4,async (instance,params,origin,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()
|
||||||
@@ -29,10 +30,15 @@ export const registerActions = async () => {
|
|||||||
if (transcriptConfig.data.general.mode == "text") instance.compiler = opendiscord.transcripts.get("opendiscord: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 = opendiscord.transcripts.get("opendiscord:html-compiler")
|
else if (transcriptConfig.data.general.mode == "html") instance.compiler = opendiscord.transcripts.get("opendiscord:html-compiler")
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:init-transcript",3,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:init-transcript",3,async (instance,params,origin,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()
|
||||||
|
if (!instance.compiler){
|
||||||
|
instance.success = false
|
||||||
|
cancel()
|
||||||
|
throw new api.ODSystemError("ODAction(ot:create-transcript):ODWorker(ot:init-transcript) => Instance is missing transcript compiler!")
|
||||||
|
}
|
||||||
|
|
||||||
//run transcript compiler init()
|
//run transcript compiler init()
|
||||||
await opendiscord.events.get("onTranscriptInit").emit([opendiscord.transcripts,ticket,channel,user])
|
await opendiscord.events.get("onTranscriptInit").emit([opendiscord.transcripts,ticket,channel,user])
|
||||||
@@ -63,7 +69,7 @@ export const registerActions = async () => {
|
|||||||
}
|
}
|
||||||
await opendiscord.events.get("afterTranscriptInitiated").emit([opendiscord.transcripts,ticket,channel,user])
|
await opendiscord.events.get("afterTranscriptInitiated").emit([opendiscord.transcripts,ticket,channel,user])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:compile-transcript",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:compile-transcript",2,async (instance,params,origin,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){
|
||||||
@@ -71,6 +77,11 @@ export const registerActions = async () => {
|
|||||||
cancel()
|
cancel()
|
||||||
throw new api.ODSystemError("ODAction(ot:create-transcript):ODWorker(ot:compile-transcript) => Instance is missing transcript compiler!")
|
throw new api.ODSystemError("ODAction(ot:create-transcript):ODWorker(ot:compile-transcript) => Instance is missing transcript compiler!")
|
||||||
}
|
}
|
||||||
|
if (typeof instance.initData == "undefined"){
|
||||||
|
instance.success = false
|
||||||
|
cancel()
|
||||||
|
throw new api.ODSystemError("ODAction(ot:create-transcript):ODWorker(ot:compile-transcript) => Instance is missing transcript initData!")
|
||||||
|
}
|
||||||
|
|
||||||
//run transcript compiler compile()
|
//run transcript compiler compile()
|
||||||
await opendiscord.events.get("onTranscriptCompile").emit([opendiscord.transcripts,ticket,channel,user])
|
await opendiscord.events.get("onTranscriptCompile").emit([opendiscord.transcripts,ticket,channel,user])
|
||||||
@@ -93,25 +104,54 @@ export const registerActions = async () => {
|
|||||||
}
|
}
|
||||||
await opendiscord.events.get("afterTranscriptCompiled").emit([opendiscord.transcripts,ticket,channel,user])
|
await opendiscord.events.get("afterTranscriptCompiled").emit([opendiscord.transcripts,ticket,channel,user])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:ready-transcript",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:ready-transcript",1,async (instance,params,origin,cancel) => {
|
||||||
|
if (!instance.compiler){
|
||||||
|
instance.success = false
|
||||||
|
cancel()
|
||||||
|
throw new api.ODSystemError("ODAction(ot:create-transcript):ODWorker(ot:ready-transcript) => Instance is missing transcript compiler! (1)")
|
||||||
|
}
|
||||||
if (!instance.result){
|
if (!instance.result){
|
||||||
instance.success = false
|
instance.success = false
|
||||||
cancel()
|
cancel()
|
||||||
throw new api.ODSystemError("ODAction(ot:create-transcript):ODWorker(ot:ready-transcript) => Instance is missing transcript result!")
|
throw new api.ODSystemError("ODAction(ot:create-transcript):ODWorker(ot:ready-transcript) => Instance is missing transcript result! (1)")
|
||||||
}
|
}
|
||||||
|
|
||||||
//run transcript compiler ready()
|
//run transcript compiler ready()
|
||||||
utilities.runAsync(async () => {
|
utilities.runAsync(async () => {
|
||||||
await opendiscord.events.get("onTranscriptReady").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
|
if (!instance.compiler){
|
||||||
|
instance.success = false
|
||||||
|
cancel()
|
||||||
|
throw new api.ODSystemError("ODAction(ot:create-transcript):ODWorker(ot:ready-transcript) => Instance is missing transcript compiler! (2)")
|
||||||
|
}
|
||||||
|
if (!instance.result){
|
||||||
|
instance.success = false
|
||||||
|
cancel()
|
||||||
|
throw new api.ODSystemError("ODAction(ot:create-transcript):ODWorker(ot:ready-transcript) => Instance is missing transcript result! (2)")
|
||||||
|
}
|
||||||
|
const result = instance.result as api.ODTranscriptCompilerCompileResult<{url:string,availableUntil:Date}|{contents:string}>
|
||||||
|
|
||||||
|
const historyData: api.ODTranscriptHistoryData = {
|
||||||
|
ticketId:result.channel.id,
|
||||||
|
ticketName:"#"+result.channel.name,
|
||||||
|
ticketCreatorId:result.user.id,
|
||||||
|
ticketCreatedDate:result.ticket.get("opendiscord:opened-on").value,
|
||||||
|
ticketDeletedDate:Date.now(),
|
||||||
|
transcriptType:(result.data && "contents" in result.data) ? "localContents" : "remoteUrl",
|
||||||
|
transcriptContents:(result.data && "contents" in result.data) ? result.data.contents : null,
|
||||||
|
transcriptUrl:(result.data && "url" in result.data) ? result.data.url : null,
|
||||||
|
}
|
||||||
|
transcriptDatabase.set("opendiscord:transcript","C:"+result.channel.id+",U:"+result.user.id,historyData)
|
||||||
|
|
||||||
|
await opendiscord.events.get("onTranscriptReady").emit([opendiscord.transcripts,result.ticket,result.channel,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(result)
|
||||||
|
|
||||||
//send channel message
|
//send channel message
|
||||||
if (transcriptConfig.data.general.enableChannel && channelMessage){
|
if (transcriptConfig.data.general.enableChannel && channelMessage){
|
||||||
if (instance.pendingMessage && instance.pendingMessage.message && instance.pendingMessage.success){
|
if (instance.pendingMessage && instance.pendingMessage.success){
|
||||||
//edit "pending" message to be the "ready" message
|
//edit "pending" message to be the "ready" message
|
||||||
instance.pendingMessage.message.edit(channelMessage.message)
|
instance.pendingMessage.message.edit(utilities.getMessageFromBuildResult(channelMessage,"message"))
|
||||||
}else{
|
}else{
|
||||||
//send ready message to channel
|
//send ready message to channel
|
||||||
const post = opendiscord.posts.get("opendiscord:transcripts")
|
const post = opendiscord.posts.get("opendiscord:transcripts")
|
||||||
@@ -128,7 +168,7 @@ export const registerActions = async () => {
|
|||||||
}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 opendiscord.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 && result.success && result.messages && result.messages.some((msg) => msg.author.id == p.user.id) && activeAdminDmMessage){
|
||||||
//send active admin dm message
|
//send active admin dm message
|
||||||
await opendiscord.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){
|
||||||
@@ -145,15 +185,15 @@ 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 opendiscord.events.get("afterTranscriptReady").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
|
await opendiscord.events.get("afterTranscriptReady").emit([opendiscord.transcripts,result.ticket,result.channel,result.user])
|
||||||
})
|
})
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:transcripts-created",1,"increase")
|
await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:transcripts-created",1,"increase")
|
||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:transcripts-created",params.user.id,1,"increase")
|
await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:transcripts-created",params.user.id,1,"increase")
|
||||||
await opendiscord.events.get("afterTranscriptCreated").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
|
await opendiscord.events.get("afterTranscriptCreated").emit([opendiscord.transcripts,instance.result.ticket,instance.result.channel,instance.result.user])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {user,channel,ticket} = params
|
const {user,channel,ticket} = params
|
||||||
opendiscord.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},
|
||||||
@@ -161,8 +201,8 @@ export const registerActions = async () => {
|
|||||||
{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:"option",value:ticket.option.id.value},
|
{key:"option",value:ticket.option.id.value},
|
||||||
{key:"method",value:source,hidden:true},
|
{key:"method",value:origin,hidden:true},
|
||||||
{key:"compiler",value:instance.compiler.id.value},
|
{key:"compiler",value:instance.compiler?.id.value ?? "<unknown-compiler>"},
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|||||||
+17
-383
@@ -1,16 +1,16 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET DELETION SYSTEM
|
//TICKET DELETION SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
const lang = opendiscord.languages
|
const lang = opendiscord.languages
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:delete-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:delete-ticket"))
|
||||||
opendiscord.actions.get("opendiscord:delete-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:delete-ticket").workers.add([
|
||||||
new api.ODWorker("opendiscord:delete-ticket",3,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket",3,async (instance,params,origin,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!")
|
||||||
|
|
||||||
@@ -20,31 +20,18 @@ export const registerActions = async () => {
|
|||||||
ticket.get("opendiscord:for-deletion").value = true
|
ticket.get("opendiscord:for-deletion").value = true
|
||||||
ticket.get("opendiscord:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message (no await)
|
||||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
if (ticketMessage){
|
|
||||||
try{
|
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
|
||||||
}catch(e){
|
|
||||||
opendiscord.log("Unable to edit ticket message on ticket deletion!","error",[
|
|
||||||
{key:"channel",value:"#"+channel.name},
|
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
|
||||||
{key:"messageid",value:ticketMessage.id},
|
|
||||||
{key:"option",value:ticket.option.id.value}
|
|
||||||
])
|
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build(origin,{guild,channel,user,ticket,reason})).message)
|
||||||
|
|
||||||
//create transcript
|
//create transcript
|
||||||
if (!params.withoutTranscript){
|
if (!params.withoutTranscript){
|
||||||
const transcriptRes = await opendiscord.actions.get("opendiscord:create-transcript").run(source,{guild,channel,user,ticket})
|
const transcriptRes = await opendiscord.actions.get("opendiscord:create-transcript").run(origin,{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 opendiscord.builders.messages.getSafe("opendiscord: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(origin,{guild,channel,user,ticket,compiler,reason:transcriptRes.errorReason ?? null})).message)
|
||||||
.catch((reason) => opendiscord.log("Unable to send transcript failure to ticket channel!","error",[{key:"id",value:channel.id}]))
|
.catch((reason) => opendiscord.log("Unable to send transcript failure to ticket channel!","error",[{key:"id",value:channel.id}]))
|
||||||
|
|
||||||
//undo deletion
|
//undo deletion
|
||||||
@@ -59,8 +46,8 @@ export const registerActions = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-deleted",1,"increase")
|
await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-deleted",1,"increase")
|
||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-deleted",user.id,1,"increase")
|
await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-deleted",user.id,1,"increase")
|
||||||
|
|
||||||
//delete ticket from manager
|
//delete ticket from manager
|
||||||
opendiscord.tickets.remove(ticket.id)
|
opendiscord.tickets.remove(ticket.id)
|
||||||
@@ -68,21 +55,21 @@ export const registerActions = async () => {
|
|||||||
//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("opendiscord:discord-logs",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",2,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.deleting.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.deleting.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
|
if (creator && generalConfig.data.logs.logMessages.deleting.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"delete",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:delete-channel",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-channel",1,async (instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason} = params
|
const {guild,channel,user,ticket,reason} = params
|
||||||
//delete channel & events
|
//delete channel & events
|
||||||
await opendiscord.events.get("onTicketChannelDeletion").emit([ticket,channel,user])
|
await opendiscord.events.get("onTicketChannelDeletion").emit([ticket,channel,user])
|
||||||
@@ -94,7 +81,7 @@ export const registerActions = async () => {
|
|||||||
|
|
||||||
await opendiscord.events.get("afterTicketDeleted").emit([ticket,user,reason])
|
await opendiscord.events.get("afterTicketDeleted").emit([ticket,user,reason])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" deleted a ticket!","info",[
|
opendiscord.log(user.displayName+" deleted a ticket!","info",[
|
||||||
@@ -103,7 +90,7 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source},
|
{key:"method",value:origin},
|
||||||
{key:"transcript",value:(!params.withoutTranscript).toString()},
|
{key:"transcript",value:(!params.withoutTranscript).toString()},
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
@@ -114,356 +101,3 @@ export const registerActions = async () => {
|
|||||||
params.ticket.get("opendiscord:for-deletion").value = false
|
params.ticket.get("opendiscord:for-deletion").value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
|
||||||
//DELETE TICKET TICKET MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:delete-ticket-ticket-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {user,member,channel,guild} = instance
|
|
||||||
|
|
||||||
//check permissions
|
|
||||||
const permsResult = await opendiscord.permissions.checkCommandPerms(generalConfig.data.system.permissions.delete,"support",user,member,channel,guild)
|
|
||||||
if (!permsResult.hasPerms){
|
|
||||||
if (permsResult.reason == "not-in-server") await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
else await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild,channel,user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//check is in guild/server
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//check if ticket exists
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when not allowed because of missing messages
|
|
||||||
if (!permsResult.isAdmin && (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage)){
|
|
||||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//start deleting ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//delete with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//delete without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
|
||||||
opendiscord.actions.get("opendiscord:delete-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true,withoutTranscript:(params.data == "no-transcript")})
|
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
|
||||||
ticket.get("opendiscord:for-deletion").value = true
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:delete-ticket-ticket-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
//DELETE TICKET CLOSE MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-close-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:delete-ticket-close-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {user,member,channel,guild} = instance
|
|
||||||
|
|
||||||
//check permissions
|
|
||||||
const permsResult = await opendiscord.permissions.checkCommandPerms(generalConfig.data.system.permissions.delete,"support",user,member,channel,guild)
|
|
||||||
if (!permsResult.hasPerms){
|
|
||||||
if (permsResult.reason == "not-in-server") await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
else await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild,channel,user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//check is in guild/server
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//check if ticket exists
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when not allowed because of missing messages
|
|
||||||
if (!permsResult.isAdmin && (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage)){
|
|
||||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//start deleting ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//delete with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("close-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//delete without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
|
||||||
opendiscord.actions.get("opendiscord:delete-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
|
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
|
||||||
ticket.get("opendiscord:for-deletion").value = true
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("close-message",{guild,channel,user,ticket,reason:null}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:delete-ticket-close-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-close-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
const {verifybarMessage} = params
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:close-message").build("other",{guild,channel,user,ticket,reason}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
//DELETE TICKET REOPEN MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-reopen-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-reopen-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:delete-ticket-reopen-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {user,member,channel,guild} = instance
|
|
||||||
|
|
||||||
//check permissions
|
|
||||||
const permsResult = await opendiscord.permissions.checkCommandPerms(generalConfig.data.system.permissions.delete,"support",user,member,channel,guild)
|
|
||||||
if (!permsResult.hasPerms){
|
|
||||||
if (permsResult.reason == "not-in-server") await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
else await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild,channel,user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//check is in guild/server
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//check if ticket exists
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when not allowed because of missing messages
|
|
||||||
if (!permsResult.isAdmin && (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage)){
|
|
||||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//start deleting ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//delete with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("reopen-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//delete without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
|
||||||
opendiscord.actions.get("opendiscord:delete-ticket").run("reopen-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
|
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
|
||||||
ticket.get("opendiscord:for-deletion").value = true
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("reopen-message",{guild,channel,user,ticket,reason:null}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:delete-ticket-reopen-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-reopen-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
const {verifybarMessage} = params
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("other",{guild,channel,user,ticket,reason}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
//DELETE TICKET AUTOCLOSE MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:delete-ticket-autoclose-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:delete-ticket-autoclose-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {user,member,channel,guild} = instance
|
|
||||||
|
|
||||||
//check permissions
|
|
||||||
const permsResult = await opendiscord.permissions.checkCommandPerms(generalConfig.data.system.permissions.delete,"support",user,member,channel,guild)
|
|
||||||
if (!permsResult.hasPerms){
|
|
||||||
if (permsResult.reason == "not-in-server") await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
else await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild,channel,user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//check is in guild/server
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//check if ticket exists
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when not allowed because of missing messages
|
|
||||||
if (!permsResult.isAdmin && (!generalConfig.data.system.allowCloseBeforeMessage || !generalConfig.data.system.allowCloseBeforeAdminMessage)){
|
|
||||||
const analysis = await opendiscord.transcripts.collector.ticketUserMessagesAnalysis(ticket,guild,channel)
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeMessage && analysis.totalMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (analysis && !generalConfig.data.system.allowCloseBeforeAdminMessage && analysis.adminMessages < 1){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:lang.getTranslation("errors.descriptions.closeBeforeAdminMessage"),customTitle:lang.getTranslation("errors.titles.noPermissions")}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//start deleting ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//delete with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:delete-ticket-reason").build("autoclose-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//delete without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
//don't await DELETE action => else it will update the message after the channel has been deleted
|
|
||||||
opendiscord.actions.get("opendiscord:delete-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false,withoutTranscript:(params.data == "no-transcript")})
|
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
|
||||||
ticket.get("opendiscord:for-deletion").value = true
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("autoclose-message",{guild,channel,user,ticket,reason:null}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:delete-ticket-autoclose-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-autoclose-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
const {verifybarMessage} = params
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:autoclose-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
}
|
|
||||||
@@ -1,76 +1,43 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TRANSCRIPT ERROR SYSTEM
|
//TRANSCRIPT ERROR SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerButtonResponders = async () => {
|
export async function registerButtonResponders(){
|
||||||
//TRANSCRIPT ERROR RETRY
|
//TRANSCRIPT ERROR RETRY
|
||||||
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:transcript-error-retry",/^od:transcript-error-retry_([^_]+)/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:transcript-error-retry",/^od:transcript-error-retry_([^_]+)/))
|
||||||
opendiscord.responders.buttons.get("opendiscord:transcript-error-retry").workers.add([
|
opendiscord.responders.buttons.get("opendiscord:transcript-error-retry").workers.add([
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,origin,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.delete
|
const {guild,channel,user,member} = instance
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
//responder checks
|
||||||
//no permissions
|
const hasPerms = await openticketUtils.replyHasPermissions(instance,origin,"delete")
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
if (!hasPerms) return cancel()
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
const originalSource = instance.interaction.customId.split("_")[1] as api.ODActionManagerIds_Default["opendiscord:delete-ticket"]["source"]
|
|
||||||
|
|
||||||
if (!guild){
|
const isInGuild = await openticketUtils.replyIsInGuild(instance,origin)
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
if (!isInGuild || !guild || channel.isDMBased()) return cancel()
|
||||||
return cancel()
|
|
||||||
}
|
const ticket = await openticketUtils.replyIsTicket(instance,origin)
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
if (!ticket) return cancel()
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
const isAvailable = await openticketUtils.replyTicketIsAvailable(instance,origin,ticket)
|
||||||
return cancel()
|
if (!isAvailable) return cancel()
|
||||||
}
|
|
||||||
//return when busy
|
//fetch data
|
||||||
if (ticket.get("opendiscord:busy").value){
|
const originalOrigin = instance.interaction.customId.split("_")[1] as api.ODActionManagerIdMappings["opendiscord:delete-ticket"]["origin"]
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
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
|
||||||
opendiscord.actions.get("opendiscord:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Retried)",sendMessage:false,withoutTranscript:false})
|
opendiscord.actions.get("opendiscord:delete-ticket").run(originalOrigin,{guild,channel,user,ticket,reason:"Transcript Error (Retried)",sendMessage:false,withoutTranscript:false})
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
|
||||||
ticket.get("opendiscord:for-deletion").value = true
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Retried)"}))
|
|
||||||
|
|
||||||
|
ticket.get("opendiscord:for-deletion").value = true //disable ticket message buttons
|
||||||
|
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:delete-message").build("other",{guild,channel,user,ticket,reason:"Transcript Error (Retried)"}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",-1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,async (instance,params,origin,cancel) => {
|
||||||
const {user,channel} = instance
|
const {user,channel} = instance
|
||||||
if (channel.isDMBased()) return
|
if (channel.isDMBased()) return
|
||||||
opendiscord.log(user.displayName+" retried deleting a ticket with transcript!","info",[
|
opendiscord.log(user.displayName+" retried deleting a ticket with transcript!","info",[
|
||||||
@@ -78,7 +45,7 @@ export const registerButtonResponders = async () => {
|
|||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{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:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
@@ -86,68 +53,35 @@ export const registerButtonResponders = async () => {
|
|||||||
//TRANSCRIPT ERROR CONTINUE
|
//TRANSCRIPT ERROR CONTINUE
|
||||||
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:transcript-error-continue",/^od:transcript-error-continue_([^_]+)/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:transcript-error-continue",/^od:transcript-error-continue_([^_]+)/))
|
||||||
opendiscord.responders.buttons.get("opendiscord:transcript-error-continue").workers.add([
|
opendiscord.responders.buttons.get("opendiscord:transcript-error-continue").workers.add([
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,origin,cancel) => {
|
||||||
const permissionMode = generalConfig.data.system.permissions.delete
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:delete-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
const {guild,channel,user} = instance
|
||||||
const originalSource = instance.interaction.customId.split("_")[1] as api.ODActionManagerIds_Default["opendiscord:delete-ticket"]["source"]
|
|
||||||
|
|
||||||
if (!guild){
|
//responder checks
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
const hasPerms = await openticketUtils.replyHasPermissions(instance,origin,"delete")
|
||||||
return cancel()
|
if (!hasPerms) return cancel()
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start deleting ticket (without reason)
|
const isInGuild = await openticketUtils.replyIsInGuild(instance,origin)
|
||||||
|
if (!isInGuild || !guild || channel.isDMBased()) return cancel()
|
||||||
|
|
||||||
|
const ticket = await openticketUtils.replyIsTicket(instance,origin)
|
||||||
|
if (!ticket) return cancel()
|
||||||
|
|
||||||
|
const isAvailable = await openticketUtils.replyTicketIsAvailable(instance,origin,ticket)
|
||||||
|
if (!isAvailable) return cancel()
|
||||||
|
|
||||||
|
//fetch data
|
||||||
|
const originalOrigin = instance.interaction.customId.split("_")[1] as api.ODActionManagerIdMappings["opendiscord:delete-ticket"]["origin"]
|
||||||
|
|
||||||
|
//start deleting ticket (without reason & without transcript)
|
||||||
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
|
||||||
opendiscord.actions.get("opendiscord:delete-ticket").run(originalSource,{guild,channel,user,ticket,reason:"Transcript Error (Continued)",sendMessage:false,withoutTranscript:true})
|
opendiscord.actions.get("opendiscord:delete-ticket").run(originalOrigin,{guild,channel,user,ticket,reason:"Transcript Error (Continued)",sendMessage:false,withoutTranscript:true})
|
||||||
//update ticket (for ticket message) => no-await doesn't wait for the action to set this variable
|
|
||||||
ticket.get("opendiscord:for-deletion").value = true
|
ticket.get("opendiscord:for-deletion").value = true //disable ticket message buttons
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord: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("opendiscord:logs",-1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",-1,async (instance,params,origin,cancel) => {
|
||||||
const {user,channel} = instance
|
const {user,channel} = instance
|
||||||
if (channel.isDMBased()) return
|
if (channel.isDMBased()) return
|
||||||
opendiscord.log(user.displayName+" continued deleting a ticket without transcript!","info",[
|
opendiscord.log(user.displayName+" continued deleting a ticket without transcript!","info",[
|
||||||
@@ -155,7 +89,7 @@ export const registerButtonResponders = async () => {
|
|||||||
{key:"userid",value:user.id,hidden:true},
|
{key:"userid",value:user.id,hidden:true},
|
||||||
{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:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -1,32 +1,22 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//VERIFYBAR SYSTEM
|
//VERIFYBAR SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
export const registerButtonResponders = async () => {
|
export async function registerButtonResponders(){
|
||||||
//VERIFYBAR SUCCESS
|
//HANDLE VERIFYBAR BUTTON
|
||||||
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:verifybar-success",/^od:verifybar-success_([^_]+)/))
|
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:verifybar-button",/^od:verifybar\|([^|]+)\|([^|]+)/))
|
||||||
opendiscord.responders.buttons.get("opendiscord:verifybar-success").workers.add(
|
opendiscord.responders.buttons.get("opendiscord:verifybar-button").workers.add(
|
||||||
new api.ODWorker("opendiscord:handle-verifybar",0,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:handle-verifybar",0,async (instance,params,origin,cancel) => {
|
||||||
const id = instance.interaction.customId.split("_")[1]
|
const match = /^od:verifybar\|([^|]+)\|([^|]+)/.exec(instance.interaction.customId)
|
||||||
const customData = instance.interaction.customId.split("_")[2] as string|undefined
|
if (!match) return cancel()
|
||||||
|
const verifyBarId = match[1]
|
||||||
|
const verifyButtonId = match[2]
|
||||||
|
|
||||||
const verifybar = opendiscord.verifybars.get(id)
|
const verifybar = opendiscord.verifybars.get(verifyBarId)
|
||||||
if (!verifybar) return
|
if (!verifybar) return
|
||||||
if (verifybar.success) await verifybar.success.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message})
|
await verifybar.activate(instance,verifyButtonId)
|
||||||
})
|
|
||||||
)
|
|
||||||
|
|
||||||
//VERIFYBAR FAILURE
|
|
||||||
opendiscord.responders.buttons.add(new api.ODButtonResponder("opendiscord:verifybar-failure",/^od:verifybar-failure_([^_]+)/))
|
|
||||||
opendiscord.responders.buttons.get("opendiscord:verifybar-failure").workers.add(
|
|
||||||
new api.ODWorker("opendiscord:handle-verifybar",0,async (instance,params,source,cancel) => {
|
|
||||||
const id = instance.interaction.customId.split("_")[1]
|
|
||||||
const customData = instance.interaction.customId.split("_")[2] as string|undefined
|
|
||||||
|
|
||||||
const verifybar = opendiscord.verifybars.get(id)
|
|
||||||
if (!verifybar) return
|
|
||||||
if (verifybar.failure) await verifybar.failure.executeWorkers(instance,"verifybar",{data:customData ?? null,verifybarMessage:instance.message})
|
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
+47
-102
@@ -1,15 +1,15 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET MOVING SYSTEM
|
//TICKET MOVING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:move-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:move-ticket"))
|
||||||
opendiscord.actions.get("opendiscord:move-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:move-ticket").workers.add([
|
||||||
new api.ODWorker("opendiscord:move-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:move-ticket",2,async (instance,params,origin,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!")
|
||||||
|
|
||||||
@@ -17,78 +17,31 @@ export const registerActions = async () => {
|
|||||||
ticket.option = data
|
ticket.option = data
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-moved",1,"increase")
|
await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-moved",1,"increase")
|
||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-moved",user.id,1,"increase")
|
await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-moved",user.id,1,"increase")
|
||||||
|
|
||||||
//get new channel properties
|
//calculate & update category
|
||||||
const channelPrefix = ticket.option.get("opendiscord:channel-prefix").value
|
const categoryResult = await opendiscord.actions.get("opendiscord:calculate-ticket-category").run("move-ticket",{guild,user,option:ticket.option,channel,ticket,currentCategoryId:channel.parentId})
|
||||||
const channelSuffix = ticket.get("opendiscord:channel-suffix").value
|
if (categoryResult && categoryResult.shouldChangeCategory && typeof categoryResult.newCategoryId !== "undefined" && typeof categoryResult.newCategoryMode !== "undefined" && typeof categoryResult.newCategory !== "undefined"){
|
||||||
const channelCategory = ticket.option.get("opendiscord:channel-category").value
|
const originalCategoryName = channel.parent?.name ?? "<unknown>"
|
||||||
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
|
const newCategoryName = categoryResult.newCategory?.name ?? "<unknown>"
|
||||||
const rawClaimCategory = ticket.option.get("opendiscord:channel-categories-claimed").value.find((c) => c.user == user.id)
|
try{
|
||||||
const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null
|
await utilities.timedAwait(channel.setParent(categoryResult.newCategoryId,{lockPermissions:false}),3000,(err) => {
|
||||||
const closeCategory = ticket.option.get("opendiscord:channel-category-closed").value
|
process.emit("uncaughtException",new Error("Error: Unable to change channel parent: "+err))
|
||||||
const channelTopic = ticket.option.get("opendiscord:channel-topic").value
|
})
|
||||||
|
ticket.get("opendiscord:category-mode").value = categoryResult.newCategoryMode
|
||||||
//handle category
|
ticket.get("opendiscord:category").value = categoryResult.newCategoryId
|
||||||
let category: string|null = null
|
}catch(err){
|
||||||
let categoryMode: "backup"|"normal"|"closed"|"claimed"|null = null
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-category").build("ticket-move",{guild,channel,user,originalCategory:originalCategoryName,newCategory:newCategoryName})).message)
|
||||||
if (claimCategory){
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
//use claim category
|
opendiscord.log("Unable to move ticket to moved category.","error",[
|
||||||
category = claimCategory
|
{key:"channel",value:"#"+channel.name},
|
||||||
categoryMode = "claimed"
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
}else if (closeCategory != "" && ticket.get("opendiscord:closed").value){
|
{key:"categoryid",value:categoryResult.newCategoryId ?? "/"}
|
||||||
//use close category
|
|
||||||
category = closeCategory
|
|
||||||
categoryMode = "closed"
|
|
||||||
}else if (channelCategory != ""){
|
|
||||||
//category enabled
|
|
||||||
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
|
||||||
if (!normalCategory){
|
|
||||||
//default category was not found
|
|
||||||
opendiscord.log("Ticket Move Error: Unable to find category! #1","error",[
|
|
||||||
{key:"categoryid",value:channelCategory},
|
|
||||||
{key:"backup",value:"false"}
|
|
||||||
])
|
])
|
||||||
}else{
|
|
||||||
//default category was found
|
|
||||||
if (normalCategory.children.cache.size >= 50 && channelBackupCategory != ""){
|
|
||||||
//use backup category
|
|
||||||
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
|
||||||
if (!backupCategory){
|
|
||||||
//default category was not found
|
|
||||||
opendiscord.log("Ticket Move Error: Unable to find category! #2","error",[
|
|
||||||
{key:"categoryid",value:channelBackupCategory},
|
|
||||||
{key:"backup",value:"true"}
|
|
||||||
])
|
|
||||||
}else{
|
|
||||||
category = backupCategory.id
|
|
||||||
categoryMode = "backup"
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
//use default category
|
|
||||||
category = normalCategory.id
|
|
||||||
categoryMode = "normal"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
//only move category when not the same.
|
|
||||||
if (channel.parentId != category) await utilities.timedAwait(channel.setParent(category,{lockPermissions:false}),2500,(err) => {
|
|
||||||
opendiscord.log("Failed to change channel category on ticket move","error")
|
|
||||||
})
|
|
||||||
ticket.get("opendiscord:category-mode").value = categoryMode
|
|
||||||
ticket.get("opendiscord:category").value = category
|
|
||||||
}catch(e){
|
|
||||||
opendiscord.log("Unable to move ticket to 'moved category'!","error",[
|
|
||||||
{key:"channel",value:"#"+channel.name},
|
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
|
||||||
{key:"categoryid",value:category ?? "/"}
|
|
||||||
])
|
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
|
||||||
|
|
||||||
//handle permissions
|
//handle permissions
|
||||||
const permissions: discord.OverwriteResolvable[] = [{
|
const permissions: discord.OverwriteResolvable[] = [{
|
||||||
type:discord.OverwriteType.Role,
|
type:discord.OverwriteType.Role,
|
||||||
@@ -153,58 +106,50 @@ export const registerActions = async () => {
|
|||||||
ticket.get("opendiscord:participants").value = participants
|
ticket.get("opendiscord:participants").value = participants
|
||||||
ticket.get("opendiscord:participants").refreshDatabase()
|
ticket.get("opendiscord:participants").refreshDatabase()
|
||||||
|
|
||||||
//rename channel (and give error when crashed)
|
//calculate channel name
|
||||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
const channelNameResult = await opendiscord.actions.get("opendiscord:calculate-ticket-name").run("move-ticket",{guild,user,option:ticket.option,channel,ticket,currentChannelName:channel.name})
|
||||||
const priorityEmoji = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? ""
|
if (channelNameResult && channelNameResult.shouldChangeName && typeof channelNameResult.newChannelName !== "undefined"){
|
||||||
|
const originalName = channel.name
|
||||||
const originalName = channel.name
|
const newName = channelNameResult.newChannelName
|
||||||
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 move","error")
|
|
||||||
})
|
|
||||||
}catch(err){
|
|
||||||
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-move",{guild,channel,user,originalName,newName:newName})).message)
|
|
||||||
}
|
|
||||||
|
|
||||||
//update ticket message
|
|
||||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
|
||||||
if (ticketMessage){
|
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
}catch(e){
|
opendiscord.log("Failed to rename channel on ticket move","error")
|
||||||
opendiscord.log("Unable to edit ticket message on ticket moving!","error",[
|
})
|
||||||
{key:"channel",value:"#"+channel.name},
|
}catch(err){
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
opendiscord.log("Unable to rename channel while moving ticket! Waiting until ratelimit expires...","warning",[
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"oldName",value:originalName},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"newName",value:newName}
|
||||||
])
|
])
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-move",{guild,channel,user,originalName,newName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//update ticket message (no await)
|
||||||
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:move-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:move-message").build(origin,{guild,channel,user,ticket,reason,data})).message)
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketMoved").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("afterTicketMoved").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
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) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.moving.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.moving.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
|
if (creator && generalConfig.data.logs.logMessages.moving.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"move",reason,additionalData:data}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" moved a ticket!","info",[
|
opendiscord.log(user.displayName+" moved a ticket!","info",[
|
||||||
@@ -213,7 +158,7 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|||||||
+38
-221
@@ -1,15 +1,16 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET PINNING SYSTEM
|
//TICKET PINNING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
const interactiveMsgState = opendiscord.states.get("opendiscord:interactive-message")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:pin-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:pin-ticket"))
|
||||||
opendiscord.actions.get("opendiscord:pin-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:pin-ticket").workers.add([
|
||||||
new api.ODWorker("opendiscord:pin-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:pin-ticket",2,async (instance,params,origin,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!")
|
||||||
|
|
||||||
@@ -22,66 +23,66 @@ export const registerActions = async () => {
|
|||||||
ticket.get("opendiscord:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-pinned",1,"increase")
|
await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-pinned",1,"increase")
|
||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-pinned",user.id,1,"increase")
|
await opendiscord.statistics.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){
|
||||||
await channel.setPosition(0,{reason:"Ticket Pinned!"})
|
await channel.setPosition(0,{reason:"Ticket Pinned!"})
|
||||||
}
|
}
|
||||||
|
|
||||||
//rename channel (and give error when crashed)
|
//calculate channel name
|
||||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
const channelNameResult = await opendiscord.actions.get("opendiscord:calculate-ticket-name").run("pin-ticket",{guild,user,option:ticket.option,channel,ticket,currentChannelName:channel.name})
|
||||||
const priorityEmoji = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? ""
|
if (channelNameResult && channelNameResult.shouldChangeName && typeof channelNameResult.newChannelName !== "undefined"){
|
||||||
|
const originalName = channel.name
|
||||||
const originalName = channel.name
|
const newName = channelNameResult.newChannelName
|
||||||
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(channel.name)
|
|
||||||
try{
|
|
||||||
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
|
||||||
opendiscord.log("Failed to rename channel on ticket pin","error")
|
|
||||||
})
|
|
||||||
}catch(err){
|
|
||||||
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-pin",{guild,channel,user,originalName,newName})).message)
|
|
||||||
}
|
|
||||||
|
|
||||||
//update ticket message
|
|
||||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
|
||||||
if (ticketMessage){
|
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
}catch(e){
|
opendiscord.log("Failed to rename channel on ticket pin","error")
|
||||||
opendiscord.log("Unable to edit ticket message on ticket pinning!","error",[
|
})
|
||||||
{key:"channel",value:"#"+channel.name},
|
}catch(err){
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
opendiscord.log("Unable to rename channel while pinning ticket! Waiting until ratelimit expires...","warning",[
|
||||||
{key:"message",value:ticketMessage.id},
|
{key:"oldName",value:originalName},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"newName",value:newName}
|
||||||
])
|
])
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-pin",{guild,channel,user,originalName,newName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//update ticket message (no await)
|
||||||
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:pin-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage){
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:pin-message").build(origin,{guild,channel,user,ticket,reason})).message)
|
||||||
|
if (sentMsg) await interactiveMsgState.setMsgState({channel,message:sentMsg},{
|
||||||
|
messageType:"pin-message",
|
||||||
|
messageOrigin:"other",
|
||||||
|
messageAuthor:user.id,
|
||||||
|
messageReason:reason
|
||||||
|
},false)
|
||||||
|
}
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketPinned").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("afterTicketPinned").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
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) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.pinning.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.pinning.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
|
if (creator && generalConfig.data.logs.logMessages.pinning.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"pin",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" pinned a ticket!","info",[
|
opendiscord.log(user.displayName+" pinned a ticket!","info",[
|
||||||
@@ -90,192 +91,8 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
|
||||||
//PIN TICKET TICKET MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:pin-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:pin-ticket-ticket-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
|
||||||
const permissionMode = generalConfig.data.system.permissions.pin
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:pin-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when already pinned
|
|
||||||
if (ticket.get("opendiscord:pinned").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start pinning ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//pin with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:pin-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//pin without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:pin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:pin-ticket-ticket-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
//PIN TICKET UNPIN MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:pin-ticket-unpin-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-unpin-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:pin-ticket-unpin-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
|
||||||
const permissionMode = generalConfig.data.system.permissions.pin
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:pin-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when already pinned
|
|
||||||
if (ticket.get("opendiscord:pinned").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.pin"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start pinning ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//pin with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:pin-ticket-reason").build("unpin-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//pin without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:pin-ticket").run("unpin-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:pin-message").build("unpin-message",{guild,channel,user,ticket,reason:null}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:pin-ticket-unpin-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-unpin-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
const {verifybarMessage} = params
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unpin-message").build("other",{guild,channel,user,ticket,reason}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.actions.get("opendiscord:pin-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
|
||||||
//set busy to false in case of crash or cancel
|
|
||||||
params.ticket.get("opendiscord:busy").value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//REACTION ROLE SYSTEM
|
//REACTION ROLE SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:reaction-role"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:reaction-role"))
|
||||||
opendiscord.actions.get("opendiscord:reaction-role").workers.add([
|
opendiscord.actions.get("opendiscord:reaction-role").workers.add([
|
||||||
new api.ODWorker("opendiscord:reaction-role",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:reaction-role",2,async (instance,params,origin,cancel) => {
|
||||||
const {guild,user,option,overwriteMode} = params
|
const {guild,user,option,overwriteMode} = params
|
||||||
const role = opendiscord.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)")
|
||||||
@@ -83,25 +83,25 @@ export const registerActions = async () => {
|
|||||||
instance.result = result
|
instance.result = result
|
||||||
await opendiscord.events.get("afterRolesUpdated").emit([user,role])
|
await opendiscord.events.get("afterRolesUpdated").emit([user,role])
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,cancel) => {
|
||||||
const {guild,user,option,overwriteMode} = params
|
const {guild,user,option,overwriteMode} = params
|
||||||
if (!instance.role || !instance.result) return
|
if (!instance.role || !instance.result) return
|
||||||
|
|
||||||
//to logs
|
//to logs
|
||||||
if (generalConfig.data.system.logs.enabled && (generalConfig.data.system.messages.reactionRole.logs)){
|
if (generalConfig.data.logs.enabled && (generalConfig.data.logs.logMessages.reactionRole.logs)){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord: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}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:reaction-role-logs").build(origin,{guild,user,role:instance.role,result:instance.result}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//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}))
|
if (generalConfig.data.logs.logMessages.reactionRole.dm) await opendiscord.client.sendUserDm(user,await opendiscord.builders.messages.getSafe("opendiscord:reaction-role-dm").build(origin,{guild,user,role:instance.role,result:instance.result}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,user,option} = params
|
const {guild,user,option} = params
|
||||||
opendiscord.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:origin},
|
||||||
{key:"option",value:option.id.value}
|
{key:"option",value:option.id.value}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET REMOVE USER SYSTEM
|
//TICKET REMOVE USER SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:remove-ticket-user"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:remove-ticket-user"))
|
||||||
opendiscord.actions.get("opendiscord:remove-ticket-user").workers.add([
|
opendiscord.actions.get("opendiscord:remove-ticket-user").workers.add([
|
||||||
new api.ODWorker("opendiscord:remove-ticket-user",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:remove-ticket-user",2,async (instance,params,origin,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!")
|
||||||
|
|
||||||
@@ -29,43 +29,31 @@ export const registerActions = async () => {
|
|||||||
opendiscord.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 (no await)
|
||||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
if (ticketMessage){
|
|
||||||
try{
|
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
|
||||||
}catch(e){
|
|
||||||
opendiscord.log("Unable to edit ticket message on ticket user removal!","error",[
|
|
||||||
{key:"channel",value:channel.id},
|
|
||||||
{key:"message",value:ticketMessage.id},
|
|
||||||
{key:"option",value:ticket.option.id.value}
|
|
||||||
])
|
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:remove-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:remove-message").build(origin,{guild,channel,user,ticket,reason,data})).message)
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketUserRemoved").emit([ticket,user,data,channel,reason])
|
await opendiscord.events.get("afterTicketUserRemoved").emit([ticket,user,data,channel,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
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) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.removing.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.removing.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
|
if (creator && generalConfig.data.logs.logMessages.removing.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"remove",reason,additionalData:data}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket,data} = params
|
const {guild,channel,user,ticket,data} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" removed "+data.displayName+" from a ticket!","info",[
|
opendiscord.log(user.displayName+" removed "+data.displayName+" from a ticket!","info",[
|
||||||
@@ -74,7 +62,7 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|||||||
+29
-34
@@ -1,72 +1,67 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET RENAMING SYSTEM
|
//TICKET RENAMING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:rename-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:rename-ticket"))
|
||||||
opendiscord.actions.get("opendiscord:rename-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:rename-ticket").workers.add([
|
||||||
new api.ODWorker("opendiscord:rename-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:rename-ticket",2,async (instance,params,origin,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 opendiscord.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)
|
//update ticket
|
||||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
ticket.get("opendiscord:channel-renamed").value = data
|
||||||
const priorityEmoji = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? ""
|
|
||||||
|
|
||||||
const originalName = channel.name
|
//calculate channel name
|
||||||
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(data)
|
const channelNameResult = await opendiscord.actions.get("opendiscord:calculate-ticket-name").run("rename-ticket",{guild,user,option:ticket.option,channel,ticket,currentChannelName:channel.name})
|
||||||
try{
|
if (channelNameResult && channelNameResult.shouldChangeName && typeof channelNameResult.newChannelName !== "undefined"){
|
||||||
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
const originalName = channel.name
|
||||||
opendiscord.log("Failed to rename channel on ticket rename","error")
|
const newName = channelNameResult.newChannelName
|
||||||
})
|
|
||||||
}catch(err){
|
|
||||||
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-rename",{guild,channel,user,originalName,newName:data})).message)
|
|
||||||
}
|
|
||||||
|
|
||||||
//update ticket message
|
|
||||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
|
||||||
if (ticketMessage){
|
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
}catch(e){
|
opendiscord.log("Failed to rename channel on ticket rename","error")
|
||||||
opendiscord.log("Unable to edit ticket message on ticket renaming!","error",[
|
})
|
||||||
{key:"channel",value:"#"+channel.name},
|
}catch(err){
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
opendiscord.log("Unable to rename channel while renaming ticket! Waiting until ratelimit expires...","warning",[
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"oldName",value:originalName},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"newName",value:newName}
|
||||||
])
|
])
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-rename",{guild,channel,user,originalName,newName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//update ticket message (no await)
|
||||||
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:rename-message").build(source,{guild,channel,user,ticket,reason,data})).message)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:rename-message").build(origin,{guild,channel,user,ticket,reason,data})).message)
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketRenamed").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("afterTicketRenamed").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
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) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.renaming.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.renaming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
|
if (creator && generalConfig.data.logs.logMessages.renaming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"rename",reason,additionalData:data}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" renamed a ticket!","info",[
|
opendiscord.log(user.displayName+" renamed a ticket!","info",[
|
||||||
@@ -75,7 +70,7 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|||||||
+59
-344
@@ -1,15 +1,16 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET REOPENING SYSTEM
|
//TICKET REOPENING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
const interactiveMsgState = opendiscord.states.get("opendiscord:interactive-message")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:reopen-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:reopen-ticket"))
|
||||||
opendiscord.actions.get("opendiscord:reopen-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:reopen-ticket").workers.add([
|
||||||
new api.ODWorker("opendiscord:reopen-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:reopen-ticket",2,async (instance,params,origin,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!")
|
||||||
|
|
||||||
@@ -28,65 +29,56 @@ export const registerActions = async () => {
|
|||||||
ticket.get("opendiscord:open").value = true
|
ticket.get("opendiscord:open").value = true
|
||||||
ticket.get("opendiscord:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
if (generalConfig.data.system.disableAutocloseAfterReopen){
|
if (generalConfig.data.ticketSystem.disableAutocloseAfterReopen){
|
||||||
//disable autoclose after reopen
|
//disable autoclose after reopen
|
||||||
ticket.get("opendiscord:autoclose-enabled").value = false
|
ticket.get("opendiscord:autoclose-enabled").value = false
|
||||||
ticket.get("opendiscord:autoclose-hours").value = 0
|
ticket.get("opendiscord:autoclose-hours").value = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-reopened",1,"increase")
|
await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-reopened",1,"increase")
|
||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-reopened",user.id,1,"increase")
|
await opendiscord.statistics.get("opendiscord:user").setStat("opendiscord:tickets-reopened",user.id,1,"increase")
|
||||||
|
|
||||||
//update category
|
//calculate & update category
|
||||||
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
||||||
const channelCategory = ticket.option.get("opendiscord:channel-category").value
|
const categoryResult = await opendiscord.actions.get("opendiscord:calculate-ticket-category").run("reopen-ticket",{guild,user,option:ticket.option,channel,ticket,currentCategoryId:channel.parentId})
|
||||||
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
|
if (categoryResult && categoryResult.shouldChangeCategory && typeof categoryResult.newCategoryId !== "undefined" && typeof categoryResult.newCategoryMode !== "undefined" && typeof categoryResult.newCategory !== "undefined"){
|
||||||
if (channelCategory !== ""){
|
const originalCategoryName = channel.parent?.name ?? "<unknown>"
|
||||||
//category enabled
|
const newCategoryName = categoryResult.newCategory?.name ?? "<unknown>"
|
||||||
try {
|
try{
|
||||||
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
await utilities.timedAwait(channel.setParent(categoryResult.newCategoryId,{lockPermissions:false}),3000,(err) => {
|
||||||
if (!normalCategory){
|
process.emit("uncaughtException",new Error("Error: Unable to change channel parent: "+err))
|
||||||
//default category was not found
|
})
|
||||||
opendiscord.log("Ticket Reopening Error: Unable to find category! #1","error",[
|
ticket.get("opendiscord:category-mode").value = categoryResult.newCategoryMode
|
||||||
{key:"categoryid",value:channelCategory},
|
ticket.get("opendiscord:category").value = categoryResult.newCategoryId
|
||||||
{key:"backup",value:"false"}
|
}catch(err){
|
||||||
])
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-category").build("ticket-reopen",{guild,channel,user,originalCategory:originalCategoryName,newCategory:newCategoryName})).message)
|
||||||
}else{
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
//default category was found
|
opendiscord.log("Unable to move ticket to reopened category.","error",[
|
||||||
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
|
|
||||||
//use backup category
|
|
||||||
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
|
||||||
if (!backupCategory){
|
|
||||||
//default category was not found
|
|
||||||
opendiscord.log("Ticket Reopening Error: Unable to find category! #2","error",[
|
|
||||||
{key:"categoryid",value:channelBackupCategory},
|
|
||||||
{key:"backup",value:"true"}
|
|
||||||
])
|
|
||||||
}else{
|
|
||||||
//use backup category
|
|
||||||
channel.setParent(backupCategory,{lockPermissions:false})
|
|
||||||
ticket.get("opendiscord:category-mode").value = "backup"
|
|
||||||
ticket.get("opendiscord:category").value = backupCategory.id
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
//use default category
|
|
||||||
channel.setParent(normalCategory,{lockPermissions:false})
|
|
||||||
ticket.get("opendiscord:category-mode").value = "normal"
|
|
||||||
ticket.get("opendiscord:category").value = normalCategory.id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}catch(e){
|
|
||||||
opendiscord.log("Unable to move ticket to 'reopened category'!","error",[
|
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
|
{key:"categoryid",value:categoryResult.newCategoryId ?? "/"}
|
||||||
])
|
])
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
}
|
||||||
}else{
|
}
|
||||||
channel.setParent(null,{lockPermissions:false})
|
}
|
||||||
ticket.get("opendiscord:category-mode").value = null
|
|
||||||
ticket.get("opendiscord:category").value = null
|
//calculate channel name
|
||||||
|
const channelNameResult = await opendiscord.actions.get("opendiscord:calculate-ticket-name").run("reopen-ticket",{guild,user,option:ticket.option,channel,ticket,currentChannelName:channel.name})
|
||||||
|
if (channelNameResult && channelNameResult.shouldChangeName && typeof channelNameResult.newChannelName !== "undefined"){
|
||||||
|
const originalName = channel.name
|
||||||
|
const newName = channelNameResult.newChannelName
|
||||||
|
try{
|
||||||
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
|
opendiscord.log("Failed to rename channel on ticket reopen","error")
|
||||||
|
})
|
||||||
|
}catch(err){
|
||||||
|
opendiscord.log("Unable to rename channel while reopening ticket! Waiting until ratelimit expires...","warning",[
|
||||||
|
{key:"oldName",value:originalName},
|
||||||
|
{key:"newName",value:newName}
|
||||||
|
])
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-reopen",{guild,channel,user,originalName,newName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,43 +133,38 @@ export const registerActions = async () => {
|
|||||||
})
|
})
|
||||||
channel.permissionOverwrites.set(permissions)
|
channel.permissionOverwrites.set(permissions)
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message (no await)
|
||||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
if (ticketMessage){
|
|
||||||
try{
|
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
|
||||||
}catch(e){
|
|
||||||
opendiscord.log("Unable to edit ticket message on ticket reopening!","error",[
|
|
||||||
{key:"channel",value:"#"+channel.name},
|
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
|
||||||
{key:"messageid",value:ticketMessage.id},
|
|
||||||
{key:"option",value:ticket.option.id.value}
|
|
||||||
])
|
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage){
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build(origin,{guild,channel,user,ticket,reason})).message)
|
||||||
|
if (sentMsg) await interactiveMsgState.setMsgState({channel,message:sentMsg},{
|
||||||
|
messageType:"reopen-message",
|
||||||
|
messageOrigin:"other",
|
||||||
|
messageAuthor:user.id,
|
||||||
|
messageReason:reason
|
||||||
|
},false)
|
||||||
|
}
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketReopened").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("afterTicketReopened").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
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) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.reopening.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.reopening.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
|
if (creator && generalConfig.data.logs.logMessages.reopening.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"reopen",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" reopened a ticket!","info",[
|
opendiscord.log(user.displayName+" reopened a ticket!","info",[
|
||||||
@@ -186,280 +173,8 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
|
||||||
//REOPEN TICKET TICKET MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:reopen-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:reopen-ticket-ticket-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
|
||||||
const permissionMode = generalConfig.data.system.permissions.reopen
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:reopen-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when not closed
|
|
||||||
if (!ticket.get("opendiscord:closed").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start reopening ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//reopen with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:reopen-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//reopen without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:reopen-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:reopen-ticket-ticket-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
//REOPEN TICKET CLOSE MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:reopen-ticket-close-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-close-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:reopen-ticket-close-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
|
||||||
const permissionMode = generalConfig.data.system.permissions.reopen
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:reopen-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when not closed
|
|
||||||
if (!ticket.get("opendiscord:closed").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start reopening ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//reopen with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:reopen-ticket-reason").build("close-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//reopen without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:reopen-ticket").run("close-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("close-message",{guild,channel,user,ticket,reason:null}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:reopen-ticket-close-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-close-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
const {verifybarMessage} = params
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:close-message").build("other",{guild,channel,user,ticket,reason}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
//REOPEN TICKET AUTOCLOSE MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:reopen-ticket-autoclose-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-autoclose-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:reopen-ticket-autoclose-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
|
||||||
const permissionMode = generalConfig.data.system.permissions.reopen
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:reopen-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when not closed
|
|
||||||
if (!ticket.get("opendiscord:closed").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.reopen"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start reopening ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//reopen with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:reopen-ticket-reason").build("autoclose-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//reopen without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:reopen-ticket").run("autoclose-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:reopen-message").build("autoclose-message",{guild,channel,user,ticket,reason:null}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:reopen-ticket-autoclose-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-autoclose-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
const {verifybarMessage} = params
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:autoclose-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.actions.get("opendiscord:reopen-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
|
||||||
//set busy to false in case of crash or cancel
|
|
||||||
params.ticket.get("opendiscord:busy").value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET TRANSFER SYSTEM
|
//TICKET TRANSFER SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:transfer-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:transfer-ticket"))
|
||||||
opendiscord.actions.get("opendiscord:transfer-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:transfer-ticket").workers.add([
|
||||||
new api.ODWorker("opendiscord:transfer-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:transfer-ticket",2,async (instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket,reason,newCreator} = params
|
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!")
|
if (channel.isThread()) throw new api.ODSystemError("Unable to transfer ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
@@ -33,12 +33,8 @@ export const registerActions = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//update stats
|
//update stats
|
||||||
await opendiscord.stats.get("opendiscord:global").setStat("opendiscord:tickets-transferred",1,"increase")
|
await opendiscord.statistics.get("opendiscord:global").setStat("opendiscord:tickets-transferred",1,"increase")
|
||||||
await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-transferred",user.id,1,"increase")
|
await opendiscord.statistics.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
|
//handle permissions
|
||||||
const permissions: discord.OverwriteResolvable[] = [{
|
const permissions: discord.OverwriteResolvable[] = [{
|
||||||
@@ -93,48 +89,56 @@ export const registerActions = async () => {
|
|||||||
opendiscord.log("Failed to reset channel permissions on ticket transfer!","error")
|
opendiscord.log("Failed to reset channel permissions on ticket transfer!","error")
|
||||||
}
|
}
|
||||||
|
|
||||||
//rename channel (and give error when crashed)
|
//calculate channel name
|
||||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
const channelNameResult = await opendiscord.actions.get("opendiscord:calculate-ticket-name").run("transfer-ticket",{guild,user,option:ticket.option,channel,ticket,currentChannelName:channel.name})
|
||||||
const priorityEmoji = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? ""
|
if (channelNameResult && channelNameResult.shouldChangeName && typeof channelNameResult.newChannelName !== "undefined"){
|
||||||
|
const originalName = channel.name
|
||||||
const originalName = channel.name
|
const newName = channelNameResult.newChannelName
|
||||||
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{
|
try{
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
}catch(e){
|
opendiscord.log("Failed to rename channel on ticket transfer","error")
|
||||||
opendiscord.log("Unable to edit ticket message on ticket transferring!","error",[
|
})
|
||||||
{key:"channel",value:"#"+channel.name},
|
}catch(err){
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
opendiscord.log("Unable to rename channel while transferring ticket! Waiting until ratelimit expires...","warning",[
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"oldName",value:originalName},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"newName",value:newName}
|
||||||
])
|
])
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-transfer",{guild,channel,user,originalName,newName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//update ticket message (no await)
|
||||||
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
|
|
||||||
//reply with new message
|
//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)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:transfer-message").build(origin,{guild,channel,user,ticket,oldCreator,newCreator,reason})).message)
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketTransferred").emit([ticket,user,channel,oldCreator,newCreator,reason])
|
await opendiscord.events.get("afterTicketTransferred").emit([ticket,user,channel,oldCreator,newCreator,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
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) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket,newCreator,reason} = params
|
const {guild,channel,user,ticket,newCreator,reason} = params
|
||||||
|
|
||||||
|
const lastCreatorId = ticket.get("opendiscord:previous-creators").value.at(-1)
|
||||||
|
if (!lastCreatorId) return
|
||||||
|
const lastCreator = await opendiscord.client.fetchUser(lastCreatorId)
|
||||||
|
if (!lastCreator) return
|
||||||
|
|
||||||
|
//to logs
|
||||||
|
if (generalConfig.data.logs.enabled && generalConfig.data.logs.logMessages.transferring.logs){
|
||||||
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"transfer",reason,additionalData:lastCreator,additionalData2:newCreator}))
|
||||||
|
}
|
||||||
|
|
||||||
|
//to dm
|
||||||
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
|
if (creator && generalConfig.data.logs.logMessages.transferring.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"transfer",reason,additionalData:lastCreator,additionalData2:newCreator}))
|
||||||
|
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket,newCreator} = params
|
const {guild,channel,user,ticket,newCreator} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" transferred a ticket to '"+newCreator.displayName+"'!","info",[
|
opendiscord.log(user.displayName+" transferred a ticket to '"+newCreator.displayName+"'!","info",[
|
||||||
@@ -143,7 +147,7 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|||||||
+38
-255
@@ -1,15 +1,16 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET UNCLAIMING SYSTEM
|
//TICKET UNCLAIMING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
const interactiveMsgState = opendiscord.states.get("opendiscord:interactive-message")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:unclaim-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:unclaim-ticket"))
|
||||||
opendiscord.actions.get("opendiscord:unclaim-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:unclaim-ticket").workers.add([
|
||||||
new api.ODWorker("opendiscord:unclaim-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:unclaim-ticket",2,async (instance,params,origin,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!")
|
||||||
|
|
||||||
@@ -21,97 +22,63 @@ export const registerActions = async () => {
|
|||||||
ticket.get("opendiscord:claimed-on").value = null
|
ticket.get("opendiscord:claimed-on").value = null
|
||||||
ticket.get("opendiscord:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//update category
|
//calculate & update category
|
||||||
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
if (typeof params.allowCategoryChange == "boolean" ? params.allowCategoryChange : true){
|
||||||
const channelCategory = ticket.option.get("opendiscord:channel-category").value
|
const categoryResult = await opendiscord.actions.get("opendiscord:calculate-ticket-category").run("unclaim-ticket",{guild,user,option:ticket.option,channel,ticket,currentCategoryId:channel.parentId})
|
||||||
const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value
|
if (categoryResult && categoryResult.shouldChangeCategory && typeof categoryResult.newCategoryId !== "undefined" && typeof categoryResult.newCategoryMode !== "undefined" && typeof categoryResult.newCategory !== "undefined"){
|
||||||
if (channelCategory !== ""){
|
const originalCategoryName = channel.parent?.name ?? "<unknown>"
|
||||||
//category enabled
|
const newCategoryName = categoryResult.newCategory?.name ?? "<unknown>"
|
||||||
try {
|
try{
|
||||||
const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory)
|
await utilities.timedAwait(channel.setParent(categoryResult.newCategoryId,{lockPermissions:false}),3000,(err) => {
|
||||||
if (!normalCategory){
|
process.emit("uncaughtException",new Error("Error: Unable to change channel parent: "+err))
|
||||||
//default category was not found
|
})
|
||||||
opendiscord.log("Ticket Unclaiming Error: Unable to find category! #1","error",[
|
ticket.get("opendiscord:category-mode").value = categoryResult.newCategoryMode
|
||||||
{key:"categoryid",value:channelCategory},
|
ticket.get("opendiscord:category").value = categoryResult.newCategoryId
|
||||||
{key:"backup",value:"false"}
|
}catch(err){
|
||||||
])
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-category").build("ticket-unclaim",{guild,channel,user,originalCategory:originalCategoryName,newCategory:newCategoryName})).message)
|
||||||
}else{
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
//default category was found
|
opendiscord.log("Unable to move ticket to unclaimed category.","error",[
|
||||||
if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){
|
|
||||||
//use backup category
|
|
||||||
const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory)
|
|
||||||
if (!backupCategory){
|
|
||||||
//default category was not found
|
|
||||||
opendiscord.log("Ticket Unclaiming Error: Unable to find category! #2","error",[
|
|
||||||
{key:"categoryid",value:channelBackupCategory},
|
|
||||||
{key:"backup",value:"true"}
|
|
||||||
])
|
|
||||||
}else{
|
|
||||||
//use backup category
|
|
||||||
channel.setParent(backupCategory,{lockPermissions:false})
|
|
||||||
ticket.get("opendiscord:category-mode").value = "backup"
|
|
||||||
ticket.get("opendiscord:category").value = backupCategory.id
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
//use default category
|
|
||||||
channel.setParent(normalCategory,{lockPermissions:false})
|
|
||||||
ticket.get("opendiscord:category-mode").value = "normal"
|
|
||||||
ticket.get("opendiscord:category").value = normalCategory.id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}catch(e){
|
|
||||||
opendiscord.log("Unable to move ticket to 'unclaimed category'!","error",[
|
|
||||||
{key:"channel",value:"#"+channel.name},
|
{key:"channel",value:"#"+channel.name},
|
||||||
{key:"channelid",value:channel.id,hidden:true}
|
{key:"channelid",value:channel.id,hidden:true},
|
||||||
|
{key:"categoryid",value:categoryResult.newCategoryId ?? "/"}
|
||||||
])
|
])
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
}
|
||||||
}else{
|
|
||||||
channel.setParent(null,{lockPermissions:false})
|
|
||||||
ticket.get("opendiscord:category-mode").value = null
|
|
||||||
ticket.get("opendiscord:category").value = null
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//update ticket message
|
//update ticket message (no await)
|
||||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
if (ticketMessage){
|
|
||||||
try{
|
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
|
||||||
}catch(e){
|
|
||||||
opendiscord.log("Unable to edit ticket message on ticket unclaiming!","error",[
|
|
||||||
{key:"channel",value:"#"+channel.name},
|
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
|
||||||
{key:"messageid",value:ticketMessage.id},
|
|
||||||
{key:"option",value:ticket.option.id.value}
|
|
||||||
])
|
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:unclaim-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage){
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:unclaim-message").build(origin,{guild,channel,user,ticket,reason})).message)
|
||||||
|
if (sentMsg) await interactiveMsgState.setMsgState({channel,message:sentMsg},{
|
||||||
|
messageType:"unclaim-message",
|
||||||
|
messageOrigin:"other",
|
||||||
|
messageAuthor:user.id,
|
||||||
|
messageReason:reason
|
||||||
|
},false)
|
||||||
|
}
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketUnclaimed").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("afterTicketUnclaimed").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
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) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.claiming.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.claiming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
|
if (creator && generalConfig.data.logs.logMessages.claiming.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"unclaim",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" unclaimed a ticket!","info",[
|
opendiscord.log(user.displayName+" unclaimed a ticket!","info",[
|
||||||
@@ -120,192 +87,8 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
|
||||||
//UNCLAIM TICKET TICKET MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unclaim-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:unclaim-ticket-ticket-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
|
||||||
const permissionMode = generalConfig.data.system.permissions.unclaim
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:unclaim-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when not claimed
|
|
||||||
if (!ticket.get("opendiscord:claimed").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start unclaiming ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//unclaim with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unclaim-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//unclaim without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:unclaim-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:unclaim-ticket-ticket-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
//UNCLAIM TICKET CLAIM MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unclaim-ticket-claim-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-claim-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:unclaim-ticket-claim-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
|
||||||
const permissionMode = generalConfig.data.system.permissions.unclaim
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:unclaim-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when not claimed
|
|
||||||
if (!ticket.get("opendiscord:claimed").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unclaim"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start unclaiming ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//unclaim with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unclaim-ticket-reason").build("claim-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//unclaim without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:unclaim-ticket").run("claim-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unclaim-message").build("claim-message",{guild,channel,user,ticket,reason:null}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:unclaim-ticket-claim-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-claim-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
const {verifybarMessage} = params
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:claim-message").build("other",{guild,channel,user,ticket,reason}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.actions.get("opendiscord:unclaim-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
|
||||||
//set busy to false in case of crash or cancel
|
|
||||||
params.ticket.get("opendiscord:busy").value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
+36
-219
@@ -1,15 +1,16 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET UNPINNING SYSTEM
|
//TICKET UNPINNING SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
const interactiveMsgState = opendiscord.states.get("opendiscord:interactive-message")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:unpin-ticket"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:unpin-ticket"))
|
||||||
opendiscord.actions.get("opendiscord:unpin-ticket").workers.add([
|
opendiscord.actions.get("opendiscord:unpin-ticket").workers.add([
|
||||||
new api.ODWorker("opendiscord:unpin-ticket",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:unpin-ticket",2,async (instance,params,origin,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!")
|
||||||
|
|
||||||
@@ -21,58 +22,58 @@ export const registerActions = async () => {
|
|||||||
ticket.get("opendiscord:pinned-on").value = null
|
ticket.get("opendiscord:pinned-on").value = null
|
||||||
ticket.get("opendiscord:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
|
|
||||||
//rename channel (and give error when crashed)
|
//calculate channel name
|
||||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
const channelNameResult = await opendiscord.actions.get("opendiscord:calculate-ticket-name").run("unpin-ticket",{guild,user,option:ticket.option,channel,ticket,currentChannelName:channel.name})
|
||||||
const priorityEmoji = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? ""
|
if (channelNameResult && channelNameResult.shouldChangeName && typeof channelNameResult.newChannelName !== "undefined"){
|
||||||
|
const originalName = channel.name
|
||||||
const originalName = channel.name
|
const newName = channelNameResult.newChannelName
|
||||||
const newName = pinEmoji+priorityEmoji+utilities.trimEmojis(channel.name)
|
|
||||||
try{
|
|
||||||
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
|
||||||
opendiscord.log("Failed to rename channel on ticket unpin","error")
|
|
||||||
})
|
|
||||||
}catch(err){
|
|
||||||
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-unpin",{guild,channel,user,originalName,newName})).message)
|
|
||||||
}
|
|
||||||
|
|
||||||
//update ticket message
|
|
||||||
const ticketMessage = await opendiscord.tickets.getTicketMessage(ticket)
|
|
||||||
if (ticketMessage){
|
|
||||||
try{
|
try{
|
||||||
ticketMessage.edit((await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket})).message)
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
}catch(e){
|
opendiscord.log("Failed to rename channel on ticket unpin","error")
|
||||||
opendiscord.log("Unable to edit ticket message on ticket unpinning!","error",[
|
})
|
||||||
{key:"channel",value:"#"+channel.name},
|
}catch(err){
|
||||||
{key:"channelid",value:channel.id,hidden:true},
|
opendiscord.log("Unable to rename channel while unpinning ticket! Waiting until ratelimit expires...","warning",[
|
||||||
{key:"messageid",value:ticketMessage.id},
|
{key:"oldName",value:originalName},
|
||||||
{key:"option",value:ticket.option.id.value}
|
{key:"newName",value:newName}
|
||||||
])
|
])
|
||||||
opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException"))
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-unpin",{guild,channel,user,originalName,newName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//update ticket message (no await)
|
||||||
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
|
|
||||||
//reply with new message
|
//reply with new message
|
||||||
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:unpin-message").build(source,{guild,channel,user,ticket,reason})).message)
|
if (params.sendMessage){
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:unpin-message").build(origin,{guild,channel,user,ticket,reason})).message)
|
||||||
|
if (sentMsg) await interactiveMsgState.setMsgState({channel,message:sentMsg},{
|
||||||
|
messageType:"unpin-message",
|
||||||
|
messageOrigin:"other",
|
||||||
|
messageAuthor:user.id,
|
||||||
|
messageReason:reason
|
||||||
|
},false)
|
||||||
|
}
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketUnpinned").emit([ticket,user,channel,reason])
|
await opendiscord.events.get("afterTicketUnpinned").emit([ticket,user,channel,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
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) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,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.logs.enabled && generalConfig.data.logs.logMessages.pinning.logs){
|
||||||
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
|
||||||
}
|
}
|
||||||
|
|
||||||
//to dm
|
//to dm
|
||||||
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
if (creator && generalConfig.data.system.messages.pinning.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(source,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
|
if (creator && generalConfig.data.logs.logMessages.pinning.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"unpin",reason,additionalData:null}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" unpinned a ticket!","info",[
|
opendiscord.log(user.displayName+" unpinned a ticket!","info",[
|
||||||
@@ -81,192 +82,8 @@ export const registerActions = async () => {
|
|||||||
{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:"reason",value:params.reason ?? "/"},
|
{key:"reason",value:params.reason ?? "/"},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
export const registerVerifyBars = async () => {
|
|
||||||
//UNPIN TICKET TICKET MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unpin-ticket-ticket-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-ticket-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:unpin-ticket-ticket-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
|
||||||
const permissionMode = generalConfig.data.system.permissions.unpin
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:unpin-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when not pinned
|
|
||||||
if (!ticket.get("opendiscord:pinned").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start unpining ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//unpin with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unpin-ticket-reason").build("ticket-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//unpin without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:unpin-ticket").run("ticket-message",{guild,channel,user,ticket,reason:null,sendMessage:true})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:unpin-ticket-ticket-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-ticket-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:ticket-message").build("other",{guild,channel,user,ticket}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
//UNPIN TICKET PIN MESSAGE
|
|
||||||
opendiscord.verifybars.add(new api.ODVerifyBar("opendiscord:unpin-ticket-pin-message",opendiscord.builders.messages.getSafe("opendiscord:verifybar-pin-message"),!generalConfig.data.system.disableVerifyBars))
|
|
||||||
opendiscord.verifybars.get("opendiscord:unpin-ticket-pin-message").success.add([
|
|
||||||
new api.ODWorker("opendiscord:permissions",1,async (instance,params,source,cancel) => {
|
|
||||||
const permissionMode = generalConfig.data.system.permissions.unpin
|
|
||||||
|
|
||||||
if (permissionMode == "none"){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else if (permissionMode == "everyone") return
|
|
||||||
else if (permissionMode == "admin"){
|
|
||||||
if (!opendiscord.permissions.hasPermissions("support",await opendiscord.permissions.getPermissions(instance.user,instance.channel,instance.guild))){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:["support"]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}else{
|
|
||||||
if (!instance.guild || !instance.member){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #1",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const role = await opendiscord.client.fetchGuildRole(instance.guild,permissionMode)
|
|
||||||
if (!role){
|
|
||||||
//error
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,error:"Permission Error: Not in Server #2",layout:"advanced"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
if (!role.members.has(instance.member.id)){
|
|
||||||
//no permissions
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-no-permissions").build("button",{guild:instance.guild,channel:instance.channel,user:instance.user,permissions:[]}))
|
|
||||||
return cancel()
|
|
||||||
}else return
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new api.ODWorker("opendiscord:unpin-ticket",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when not pinned
|
|
||||||
if (!ticket.get("opendiscord:pinned").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,error:opendiscord.languages.getTranslation("errors.actionInvalid.unpin"),layout:"simple"}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
//return when busy
|
|
||||||
if (ticket.get("opendiscord:busy").value){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-busy").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
//start unpinning ticket
|
|
||||||
if (params.data == "reason"){
|
|
||||||
//unpin with reason
|
|
||||||
instance.modal(await opendiscord.builders.modals.getSafe("opendiscord:unpin-ticket-reason").build("pin-message",{guild,channel,user,ticket}))
|
|
||||||
}else{
|
|
||||||
//unpin without reason
|
|
||||||
await instance.defer("update",false)
|
|
||||||
await opendiscord.actions.get("opendiscord:unpin-ticket").run("pin-message",{guild,channel,user,ticket,reason:null,sendMessage:false})
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:unpin-message").build("pin-message",{guild,channel,user,ticket,reason:null}))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.verifybars.get("opendiscord:unpin-ticket-pin-message").failure.add([
|
|
||||||
new api.ODWorker("opendiscord:back-to-pin-message",0,async (instance,params,source,cancel) => {
|
|
||||||
const {guild,channel,user} = instance
|
|
||||||
const {verifybarMessage} = params
|
|
||||||
if (!guild){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-not-in-guild").build("button",{channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
const ticket = opendiscord.tickets.get(channel.id)
|
|
||||||
if (!ticket || channel.isDMBased()){
|
|
||||||
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error-ticket-unknown").build("button",{guild,channel,user}))
|
|
||||||
return cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawReason = (verifybarMessage && verifybarMessage.embeds[0] && verifybarMessage.embeds[0].fields[0]) ? verifybarMessage.embeds[0].fields[0].value : null
|
|
||||||
const reason = (rawReason == null) ? null : rawReason.substring(3,rawReason.length-3)
|
|
||||||
|
|
||||||
await instance.update(await opendiscord.builders.messages.getSafe("opendiscord:pin-message").build("other",{guild,channel,user,ticket,reason}))
|
|
||||||
})
|
|
||||||
])
|
|
||||||
opendiscord.actions.get("opendiscord:unpin-ticket").workers.backupWorker = new api.ODWorker("opendiscord:cancel-busy",0,(instance,params) => {
|
|
||||||
//set busy to false in case of crash or cancel
|
|
||||||
params.ticket.get("opendiscord:busy").value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET TOPIC SYSTEM
|
//TICKET TOPIC SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:update-ticket-priority"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:update-ticket-priority"))
|
||||||
opendiscord.actions.get("opendiscord:update-ticket-priority").workers.add([
|
opendiscord.actions.get("opendiscord:update-ticket-priority").workers.add([
|
||||||
new api.ODWorker("opendiscord:update-ticket-priority",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:update-ticket-priority",2,async (instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket,newPriority,reason} = params
|
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!")
|
if (channel.isThread() || !(channel instanceof discord.TextChannel)) throw new api.ODSystemError("Unable to set priority of ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
@@ -20,32 +20,52 @@ export const registerActions = async () => {
|
|||||||
ticket.get("opendiscord:busy").value = true
|
ticket.get("opendiscord:busy").value = true
|
||||||
if (newPriority) ticket.get("opendiscord:priority").value = newPriority.priority
|
if (newPriority) ticket.get("opendiscord:priority").value = newPriority.priority
|
||||||
|
|
||||||
//rename channel (and give error when crashed)
|
//calculate channel name
|
||||||
const pinEmoji = ticket.get("opendiscord:pinned").value ? generalConfig.data.system.pinEmoji : ""
|
const channelNameResult = await opendiscord.actions.get("opendiscord:calculate-ticket-name").run("priority-change",{guild,user,option:ticket.option,channel,ticket,currentChannelName:channel.name})
|
||||||
const priorityEmoji = newPriority.channelEmoji ?? ""
|
if (channelNameResult && channelNameResult.shouldChangeName && typeof channelNameResult.newChannelName !== "undefined"){
|
||||||
|
const originalName = channel.name
|
||||||
const originalName = channel.name
|
const newName = channelNameResult.newChannelName
|
||||||
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) => {
|
opendiscord.log("Failed to rename channel on priority change","error")
|
||||||
opendiscord.log("Failed to rename channel on ticket priority update","error")
|
})
|
||||||
})
|
}catch(err){
|
||||||
}catch(err){
|
opendiscord.log("Unable to rename channel while updating ticket priority! Waiting until ratelimit expires...","warning",[
|
||||||
await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-priority",{guild,channel,user,originalName,newName})).message)
|
{key:"oldName",value:originalName},
|
||||||
|
{key:"newName",value:newName}
|
||||||
|
])
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-priority",{guild,channel,user,originalName,newName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reply with new 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)
|
if (params.sendMessage) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:priority-set").build(origin,{guild,channel,user,ticket,priority:newPriority,reason})).message)
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
await opendiscord.events.get("afterTicketPriorityChanged").emit([ticket,user,channel,oldPriority,newPriority,reason])
|
await opendiscord.events.get("afterTicketPriorityChanged").emit([ticket,user,channel,oldPriority,newPriority,reason])
|
||||||
|
|
||||||
//update channel topic
|
//update channel topic
|
||||||
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
|
||||||
|
|
||||||
|
//update ticket message (no await)
|
||||||
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket,reason,newPriority} = params
|
||||||
|
|
||||||
|
const renderedPriority = newPriority.renderDisplayName()
|
||||||
|
|
||||||
|
//to logs
|
||||||
|
if (generalConfig.data.logs.enabled && generalConfig.data.logs.logMessages.priorityChange.logs){
|
||||||
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"priority",reason,additionalData:renderedPriority}))
|
||||||
|
}
|
||||||
|
|
||||||
|
//to dm
|
||||||
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
|
if (creator && generalConfig.data.logs.logMessages.priorityChange.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"priority",reason,additionalData:renderedPriority}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket,newPriority} = params
|
const {guild,channel,user,ticket,newPriority} = params
|
||||||
|
|
||||||
opendiscord.log(user.displayName+" changed the priority of a ticket!","info",[
|
opendiscord.log(user.displayName+" changed the priority of a ticket!","info",[
|
||||||
@@ -54,7 +74,7 @@ export const registerActions = async () => {
|
|||||||
{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:"priority",value:newPriority.id.value},
|
{key:"priority",value:newPriority.id.value},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
//TICKET TOPIC SYSTEM
|
//TICKET TOPIC SYSTEM
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
import {opendiscord, api, utilities} from "../index"
|
import {opendiscord, api, utilities, openticketUtils} from "../index.js"
|
||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
|
|
||||||
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
const generalConfig = opendiscord.configs.get("opendiscord:general")
|
||||||
const lang = opendiscord.languages
|
const lang = opendiscord.languages
|
||||||
|
|
||||||
export const registerActions = async () => {
|
export async function registerActions(){
|
||||||
opendiscord.actions.add(new api.ODAction("opendiscord:update-ticket-topic"))
|
opendiscord.actions.add(new api.ODAction("opendiscord:update-ticket-topic"))
|
||||||
opendiscord.actions.get("opendiscord:update-ticket-topic").workers.add([
|
opendiscord.actions.get("opendiscord:update-ticket-topic").workers.add([
|
||||||
new api.ODWorker("opendiscord:update-ticket-topic",2,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:update-ticket-topic",2,async (instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket,newTopic} = params
|
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!")
|
if (channel.isThread() || !(channel instanceof discord.TextChannel)) throw new api.ODSystemError("Unable to set topic of ticket! Open Ticket doesn't support threads!")
|
||||||
|
|
||||||
@@ -29,28 +29,43 @@ export const registerActions = async () => {
|
|||||||
|
|
||||||
//handle channel topic
|
//handle channel topic
|
||||||
const channelTopics: string[] = []
|
const channelTopics: string[] = []
|
||||||
if (generalConfig.data.system.channelTopic.showOptionName) channelTopics.push(ticket.option.get("opendiscord:name").value)
|
if (generalConfig.data.ticketSystem.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.ticketSystem.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.ticketSystem.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.ticketSystem.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.ticketSystem.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.ticketSystem.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.ticketSystem.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.ticketSystem.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(", "))
|
if (generalConfig.data.ticketSystem.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
|
//update channel
|
||||||
channel.setTopic(channelTopics.join(" • "),"Topic Changed")
|
channel.setTopic(channelTopics.join(" • "),"Topic Changed")
|
||||||
|
|
||||||
//reply with new message
|
//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)
|
if (params.sendMessage && newTopic) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:topic-set").build(origin,{guild,channel,user,ticket,topic:newTopic})).message)
|
||||||
ticket.get("opendiscord:busy").value = false
|
ticket.get("opendiscord:busy").value = false
|
||||||
if (newTopic) await opendiscord.events.get("afterTicketTopicChanged").emit([ticket,user,channel,oldTopic,newTopic])
|
if (newTopic) await opendiscord.events.get("afterTicketTopicChanged").emit([ticket,user,channel,oldTopic,newTopic])
|
||||||
|
|
||||||
|
//update ticket message (no await)
|
||||||
|
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket} = params
|
const {guild,channel,user,ticket,newTopic} = params
|
||||||
|
|
||||||
|
if (!newTopic) return //only log when topic actually changed
|
||||||
|
|
||||||
|
//to logs
|
||||||
|
if (generalConfig.data.logs.enabled && generalConfig.data.logs.logMessages.topicChange.logs){
|
||||||
|
const logChannel = opendiscord.posts.get("opendiscord:logs")
|
||||||
|
if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build("topic-message",{guild,channel,user,ticket,mode:"topic",reason:null,additionalData:newTopic}))
|
||||||
|
}
|
||||||
|
|
||||||
|
//to dm
|
||||||
|
const creator = await opendiscord.tickets.getTicketUser(ticket,"creator")
|
||||||
|
if (creator && generalConfig.data.logs.logMessages.topicChange.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build("topic-message",{guild,channel,user,ticket,mode:"topic",reason:null,additionalData:newTopic}))
|
||||||
}),
|
}),
|
||||||
new api.ODWorker("opendiscord:logs",0,(instance,params,source,cancel) => {
|
new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => {
|
||||||
const {guild,channel,user,ticket,newTopic} = params
|
const {guild,channel,user,ticket,newTopic} = params
|
||||||
|
|
||||||
if (newTopic) opendiscord.log(user.displayName+" changed the topic of a ticket!","info",[
|
if (newTopic) opendiscord.log(user.displayName+" changed the topic of a ticket!","info",[
|
||||||
@@ -59,7 +74,7 @@ export const registerActions = async () => {
|
|||||||
{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:"topic",value:newTopic},
|
{key:"topic",value:newTopic},
|
||||||
{key:"method",value:source}
|
{key:"method",value:origin}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user