v3.3 push 7 (added autoclose)
This commit is contained in:
+2
-2
@@ -44,7 +44,7 @@ module.exports = () => {
|
||||
}
|
||||
})
|
||||
|
||||
require("../core/ticketActions/ticketCloser").NEWcloseTicket(msg.member,msg.channel,prefix,"close",reason,true)
|
||||
require("../core/ticketActions/ticketCloser").closeManager(msg.member,msg.channel,prefix,"close",reason,true)
|
||||
|
||||
log("command","someone used the 'close' command",[{key:"user",value:msg.author.tag}])
|
||||
APIEvents.onCommand("close",true,msg.author,msg.channel,msg.guild,new Date())
|
||||
@@ -84,7 +84,7 @@ module.exports = () => {
|
||||
}
|
||||
})
|
||||
|
||||
require("../core/ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"close",false,true)
|
||||
require("../core/ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"close",false,true)
|
||||
|
||||
log("command","someone used the 'close' command",[{key:"user",value:interaction.user.tag}])
|
||||
APIEvents.onCommand("close",true,interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
|
||||
+2
-2
@@ -38,7 +38,7 @@ module.exports = () => {
|
||||
}
|
||||
})
|
||||
|
||||
require("../core/ticketActions/ticketCloser").NEWcloseTicket(msg.member,msg.channel,prefix,"delete",false,true)
|
||||
require("../core/ticketActions/ticketCloser").closeManager(msg.member,msg.channel,prefix,"delete",false,true)
|
||||
|
||||
log("command","someone used the 'delete' command",[{key:"user",value:msg.author.tag}])
|
||||
APIEvents.onCommand("delete",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||
@@ -76,7 +76,7 @@ module.exports = () => {
|
||||
}
|
||||
})
|
||||
|
||||
require("../core/ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"delete",false,true)
|
||||
require("../core/ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"delete",false,true)
|
||||
|
||||
log("command","someone used the 'delete' command",[{key:"user",value:interaction.user.tag}])
|
||||
APIEvents.onCommand("delete",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
|
||||
+17
-4
@@ -38,9 +38,16 @@ module.exports = () => {
|
||||
storage.set("claimData",interaction.channel.id,"false")
|
||||
|
||||
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||
.setFooter(null)
|
||||
.setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
|
||||
|
||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||
if (ticketData && ticketData.autoclose.enable){
|
||||
const footerText = l.commands.autocloseTitle.replace("{0}",ticketData.autoclose.inactiveHours+"h")
|
||||
newEmbed.setFooter({text:footerText})
|
||||
}else{
|
||||
newEmbed.setFooter(null)
|
||||
}
|
||||
|
||||
if (!firstmsg.components[0].components[1].disabled){
|
||||
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormal],embeds:[newEmbed]})
|
||||
|
||||
@@ -53,7 +60,7 @@ module.exports = () => {
|
||||
log("command","someone used the 'unclaim' command",[{key:"user",value:msg.author.tag}])
|
||||
log("system","user unclaimed from ticket",[{key:"user",value:msg.author.tag},{key:"ticket",value:msg.channel.name},{key:"unclaimed_user",value:unclaimuser}])
|
||||
|
||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||
|
||||
APIEvents.onTicketUnclaim(msg.author,msg.channel,msg.guild,new Date(),{status:"open",name:msg.channel.name,ticketOptions:ticketData})
|
||||
APIEvents.onCommand("unclaim",permsChecker.command(msg.author.id,msg.guild.id),msg.author,msg.channel,msg.guild,new Date())
|
||||
})
|
||||
@@ -87,9 +94,16 @@ module.exports = () => {
|
||||
storage.set("claimData",interaction.channel.id,"false")
|
||||
|
||||
const newEmbed = new embed(firstmsg.embeds[0].data)
|
||||
.setFooter(null)
|
||||
.setDescription(hdraw.description+bot.hiddenData.writeHiddenData(hiddendata.type,hiddendata.data))
|
||||
|
||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||
if (ticketData && ticketData.autoclose.enable){
|
||||
const footerText = l.commands.autocloseTitle.replace("{0}",ticketData.autoclose.inactiveHours+"h")
|
||||
newEmbed.setFooter({text:footerText})
|
||||
}else{
|
||||
newEmbed.setFooter(null)
|
||||
}
|
||||
|
||||
if (!firstmsg.components[0].components[1].disabled){
|
||||
firstmsg.edit({components:[bot.buttons.firstmsg.firstmsgRowNormal],embeds:[newEmbed]})
|
||||
|
||||
@@ -102,7 +116,6 @@ module.exports = () => {
|
||||
log("command","someone used the 'unclaim' command",[{key:"user",value:interaction.user.tag}])
|
||||
log("system","user unclaimed from ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"unclaimed_user",value:unclaimuser}])
|
||||
|
||||
const ticketData = require("../core/utils/configParser").getTicketById(ticketId,true)
|
||||
APIEvents.onTicketUnclaim(interaction.user,interaction.channel,interaction.guild,new Date(),{status:"open",name:interaction.channel.name,ticketOptions:ticketData})
|
||||
APIEvents.onCommand("unclaim",permsChecker.command(interaction.user.id,interaction.guild.id),interaction.user,interaction.channel,interaction.guild,new Date())
|
||||
})
|
||||
|
||||
@@ -58,6 +58,11 @@
|
||||
"closedCategory":{
|
||||
"enable":false,
|
||||
"id":"category id"
|
||||
},
|
||||
|
||||
"autoclose":{
|
||||
"enable":false,
|
||||
"inactiveHours":24
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
@@ -261,6 +261,14 @@ exports.checker = async () => {
|
||||
createError("'"+path+"/closedCategory' | there is no closedCategory object!")
|
||||
}
|
||||
|
||||
//autoclose
|
||||
if (option.autoclose){
|
||||
checkType(option.autoclose.enable,"boolean",path/"/autoclose/enable")
|
||||
checkType(option.autoclose.inactiveHours,"number",path/"/autoclose/id")
|
||||
}else{
|
||||
createError("'"+path+"/autoclose' | there is no autoclose object!")
|
||||
}
|
||||
|
||||
}else if (type == "website"){
|
||||
//url
|
||||
checkType(option.url,"string",path+"/url")
|
||||
|
||||
@@ -47,6 +47,17 @@ exports.get = (category,key) => {
|
||||
const result = tempresult ? tempresult.value : false
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {String} category
|
||||
* @returns {[{key:String,value:String}]|false}
|
||||
*/
|
||||
exports.getCategory = (category) => {
|
||||
const currentData = getData()
|
||||
const result = currentData.filter((v) => v.category == category)
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {String} category
|
||||
* @param {String} key
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
/**
|
||||
==================================================================
|
||||
ALL DATABASE FILES NEED TO EXPORT THE FOLLOWING FUNCTIONS:
|
||||
- get(category:String,key:String) => String (value)
|
||||
- set(category:String,key:String,value:String) => Boolean (success)
|
||||
- delete(category:String,key:String) => Boolean (success)
|
||||
- getCategory(category:String) => Array[{key:String,value:String}] (key,value)
|
||||
==================================================================
|
||||
*/
|
||||
|
||||
try {
|
||||
var db = require("./dynamicfiles/database")
|
||||
}catch(err){
|
||||
|
||||
@@ -53,6 +53,21 @@ exports.closeEmbed = (closer,description) => {
|
||||
return embd
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {discord.User} closer
|
||||
* @param {Number} time
|
||||
* @returns {discord.EmbedBuilder}
|
||||
*/
|
||||
exports.autocloseSignalEmbed = (closer,time) => {
|
||||
const embd = new embed()
|
||||
.setTitle("⏰ This ticket got closed by Autoclose!")
|
||||
.setColor(mc)
|
||||
.setFooter({text:closer.tag,iconURL:closer.displayAvatarURL()})
|
||||
.setDescription("This ticket has been inactive for `"+time+"h`!")
|
||||
return embd
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {discord.User} deleter
|
||||
|
||||
@@ -43,7 +43,6 @@ module.exports = () => {
|
||||
}
|
||||
if (interaction.message.pinned && interaction.message.author.id == client.user.id){
|
||||
const claimdata = storage.get("claimData",interaction.channel.id)
|
||||
console.log(claimdata)
|
||||
if (claimdata && claimdata != "false"){
|
||||
interaction.message.edit({components:[bot.buttons.firstmsg.firstmsgRowDisabledNoClaim]})
|
||||
}else{
|
||||
@@ -67,7 +66,7 @@ module.exports = () => {
|
||||
})
|
||||
|
||||
interaction.channel.send({embeds:[bot.embeds.commands.closeEmbed(interaction.user)],components:[bot.buttons.close.closeCommandRow]})
|
||||
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"close",false,true)
|
||||
await require("../../../ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"close",false,true)
|
||||
closeTicketButtonChecker = false
|
||||
})
|
||||
}
|
||||
@@ -93,7 +93,7 @@ module.exports = () => {
|
||||
})
|
||||
|
||||
//interaction.channel.send({embeds:[bot.embeds.commands.closeEmbed(interaction.user)],components:[bot.buttons.close.closeCommandRow]})
|
||||
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"close",reason,true)
|
||||
await require("../../../ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"close",reason,true)
|
||||
closeTicketButtonChecker = false
|
||||
})
|
||||
}
|
||||
@@ -52,7 +52,7 @@ module.exports = () => {
|
||||
|
||||
await interaction.message.edit({components:[bot.buttons.close.openRowDisabled]})
|
||||
await interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
||||
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"delete",false,true)
|
||||
await require("../../../ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"delete",false,true)
|
||||
deleteTicketButtonChecker = false
|
||||
})
|
||||
|
||||
@@ -92,7 +92,7 @@ module.exports = () => {
|
||||
|
||||
await interaction.message.edit({components:[bot.buttons.close.closeCommandRowDisabled]})
|
||||
await interaction.channel.send({embeds:[bot.embeds.commands.deleteEmbed(interaction.user)]})
|
||||
await require("../../../ticketActions/ticketCloser").NEWcloseTicket(interaction.member,interaction.channel,prefix,"delete",false,true)
|
||||
await require("../../../ticketActions/ticketCloser").closeManager(interaction.member,interaction.channel,prefix,"delete",false,true)
|
||||
deleteTicketButtonChecker1 = false
|
||||
|
||||
})
|
||||
|
||||
@@ -33,7 +33,17 @@ module.exports = () => {
|
||||
try {
|
||||
interaction.deferUpdate()
|
||||
} catch{}
|
||||
|
||||
if (interaction.message.pinned && interaction.message.author.id == client.user.id){
|
||||
const claimdata = storage.get("claimData",interaction.channel.id)
|
||||
if (claimdata && claimdata != "false"){
|
||||
interaction.message.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim]})
|
||||
}else{
|
||||
interaction.message.edit({components:[bot.buttons.firstmsg.firstmsgRowNormal]})
|
||||
}
|
||||
}else{
|
||||
interaction.message.edit({components:[bot.buttons.close.openRowNormal]})
|
||||
}
|
||||
})
|
||||
|
||||
//DELETE
|
||||
@@ -54,7 +64,17 @@ module.exports = () => {
|
||||
try {
|
||||
interaction.deferUpdate()
|
||||
} catch{}
|
||||
|
||||
if (interaction.message.pinned && interaction.message.author.id == client.user.id){
|
||||
const claimdata = storage.get("claimData",interaction.channel.id)
|
||||
if (claimdata && claimdata != "false"){
|
||||
interaction.message.edit({components:[bot.buttons.firstmsg.firstmsgRowNormalNoClaim]})
|
||||
}else{
|
||||
interaction.message.edit({components:[bot.buttons.firstmsg.firstmsgRowNormal]})
|
||||
}
|
||||
}else{
|
||||
interaction.message.edit({components:[bot.buttons.close.openRowNormal]})
|
||||
}
|
||||
})
|
||||
|
||||
//DELETE NO TRANSCRIPT
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
const discord = require('discord.js')
|
||||
const bot = require('../../index')
|
||||
const client = bot.client
|
||||
const config = bot.config
|
||||
const log = bot.errorLog.log
|
||||
const l = bot.language
|
||||
const storage = bot.storage
|
||||
|
||||
module.exports = () => {
|
||||
setInterval(async () => {
|
||||
const tickets = storage.getCategory("autocloseTickets")
|
||||
if (!tickets) return
|
||||
tickets.forEach(async (t) => {
|
||||
if (t.value == "false" || t.value == 0 || typeof t.value != "number") return
|
||||
const channel = await client.channels.fetch(t.key,{cache:true})
|
||||
if (!channel || !channel.isTextBased()) return
|
||||
|
||||
const message = (await channel.messages.fetch({limit:10})).first()
|
||||
if (!message) return
|
||||
|
||||
const secondsSLM = Math.round((new Date().getTime() - message.createdTimestamp)/1000)
|
||||
const hoursSLM = secondsSLM/3600
|
||||
|
||||
if (hoursSLM > t.value){
|
||||
/**@type {discord.Guild|false} */
|
||||
const guild = client.guilds.cache.find((g) => g.id == channel.guild.id)
|
||||
if (!guild) return
|
||||
const clientMember = guild.members.cache.find((m) => m.id == client.user.id)
|
||||
if (!clientMember) return
|
||||
|
||||
var name = channel.name
|
||||
var prefix = ""
|
||||
const tickets = config.options
|
||||
tickets.forEach((ticket) => {
|
||||
if (name.startsWith(ticket.channelprefix)){
|
||||
prefix = ticket.channelprefix
|
||||
}
|
||||
})
|
||||
|
||||
require("./ticketCloser").closeManager(clientMember,channel,prefix,"close","OTautoclose",true)
|
||||
storage.delete("autocloseTickets",channel.id)
|
||||
|
||||
channel.send({embeds:[bot.embeds.commands.autocloseSignalEmbed(client.user,t.value)],components:[bot.buttons.close.closeCommandRow]})
|
||||
}
|
||||
})
|
||||
|
||||
},2000)
|
||||
}
|
||||
@@ -18,7 +18,7 @@ const pendingDelete = []
|
||||
* @param {Boolean} nomessage
|
||||
* @param {String} reason only when closing, not when deleting!
|
||||
*/
|
||||
exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) => {
|
||||
exports.closeManager = async (member,channel,prefix,mode,reason,nomessage) => {
|
||||
const guild = channel.guild
|
||||
const user = member.user
|
||||
const chalk = await (await import("chalk")).default
|
||||
@@ -69,6 +69,8 @@ exports.NEWcloseTicket = async (member,channel,prefix,mode,reason,nomessage) =>
|
||||
if (!isDatabaseError) storage.set("amountOfUserTickets",getuserID,Number(storage.get("amountOfUserTickets",getuserID)) - 1)
|
||||
storage.delete("userFromChannel",channel.id)
|
||||
storage.delete("claimData",channel.id)
|
||||
storage.delete("autocloseTickets",channel.id)
|
||||
if (Number(storage.get("amountOfUserTickets",getuserID)) < 0) storage.set("amountOfUserTickets",getuserID,0)
|
||||
|
||||
//getID & send DM & send api event
|
||||
await channel.messages.fetchPinned().then(async msglist => {
|
||||
|
||||
@@ -53,13 +53,13 @@ module.exports = () => {
|
||||
|
||||
if (interaction.isButton()){
|
||||
try {
|
||||
if (config.system.answerInEphemeralOnOpen) interaction.deferReply({ephemeral:true})
|
||||
if (config.system.answerInEphemeralOnOpen) await interaction.deferReply({ephemeral:true})
|
||||
} catch{}
|
||||
}else if (interaction.isChatInputCommand()){
|
||||
interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpen})
|
||||
await interaction.deferReply({ephemeral:config.system.answerInEphemeralOnOpen})
|
||||
}else if (interaction.isStringSelectMenu()){
|
||||
try {
|
||||
interaction.deferUpdate()
|
||||
await interaction.deferUpdate()
|
||||
} catch{}
|
||||
}
|
||||
|
||||
@@ -163,6 +163,7 @@ module.exports = () => {
|
||||
|
||||
}).then((ticketChannel) => {
|
||||
storage.set("userFromChannel",ticketChannel.id,interaction.member.id)
|
||||
if (currentTicketOptions.autoclose.enable) storage.set("autocloseTickets",ticketChannel.id,currentTicketOptions.autoclose.inactiveHours)
|
||||
|
||||
const hiddendata = bot.hiddenData.writeHiddenData("ticketdata",[{key:"type",value:currentTicketOptions.id},{key:"openerid",value:interaction.user.id},{key:"createdms",value:new Date().getTime()}])
|
||||
|
||||
@@ -171,6 +172,11 @@ module.exports = () => {
|
||||
.setColor(config.color)
|
||||
.setTitle(currentTicketOptions.name)
|
||||
//.setFooter({text:"Ticket Type: "+currentTicketOptions.id})
|
||||
if (currentTicketOptions.autoclose.enable){
|
||||
const footerText = l.commands.autocloseTitle.replace("{0}",currentTicketOptions.autoclose.inactiveHours+"h")
|
||||
ticketEmbed.setFooter({text:footerText})
|
||||
}
|
||||
|
||||
if (currentTicketOptions.ticketmessage.length > 0){
|
||||
ticketEmbed.setDescription(currentTicketOptions.ticketmessage+hiddendata)
|
||||
}else{
|
||||
|
||||
@@ -30,11 +30,11 @@ exports.createTranscript = async (messagecollection,channel,backup) => {
|
||||
if (msg.content){
|
||||
var content = msg.content
|
||||
}else if (msg.embeds.length > 0 && msg.attachments.length > 0){
|
||||
var content = "*this message only has embeds & files**"
|
||||
var content = "*this message only has embeds & files*"
|
||||
}else if (msg.embeds.length > 0){
|
||||
var content = "*this message only has embeds**"
|
||||
var content = "*this message only has embeds*"
|
||||
}else if (msg.attachments.length > 0){
|
||||
var content = "*this message only has files**"
|
||||
var content = "*this message only has files*"
|
||||
}else{
|
||||
var content = "*empty message*"
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ const l = bot.language
|
||||
//==================
|
||||
|
||||
//OTTicketOptions
|
||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color: "red"|"green"|"blue"|"gray",adminroles: String[],channelprefix: String,category: String,message: String,enableDmOnOpen: Boolean,ticketmessage: String, thumbnail:{enable:Boolean,url:String}, image:{enable:Boolean,url:String}, closedCategory:{enable:Boolean,id:String}}} OTTicketOptions */
|
||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color: "red"|"green"|"blue"|"gray",adminroles: String[],channelprefix: String,category: String,message: String,enableDmOnOpen: Boolean,ticketmessage: String, thumbnail:{enable:Boolean,url:String}, image:{enable:Boolean,url:String}, closedCategory:{enable:Boolean,id:String}, autoclose:{enable:Boolean,inactiveHours:Number} }} OTTicketOptions */
|
||||
|
||||
//OTRoleOptions
|
||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color:"red"|"green"|"blue"|"gray"|"none",roles:String[],mode:"add&remove"|"remove"|"add",enableDmOnOpen:Boolean}} OTRoleOptions */
|
||||
@@ -19,7 +19,7 @@ const l = bot.language
|
||||
/**@typedef {{id: string, name: string, description: string, dropdown: boolean, enableFooter: boolean, footer: string, enableThumbnail: boolean, thumbnail: string, enableCustomColor: boolean, color: string, options: string[], other:{enableTicketExplaination: boolean, enableMaxTicketsWarning: boolean, customDropdownPlaceholder:{enable:Boolean,text:String}, customCategoryText:{enable:Boolean,text:String}, embedTitleURL:{enable:Boolean,url:String} } }} OTConfigMessage*/
|
||||
|
||||
//OTAllOptions
|
||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color:"red"|"green"|"blue"|"gray"|"none",roles:String[],mode:"add&remove"|"remove"|"add",adminroles: String[],channelprefix: String,category: String,message: String,enableDmOnOpen: Boolean,ticketmessage: String, thumbnail:{enable:Boolean,url:String}, image:{enable:Boolean,url:String}, url:String, closedCategory:{enable:Boolean,id:String}}} OTAllOptions */
|
||||
/**@typedef {{id: String,name: String,description: String,icon: String,label: String,type: "ticket"|"role"|"website",color:"red"|"green"|"blue"|"gray"|"none",roles:String[],mode:"add&remove"|"remove"|"add",adminroles: String[],channelprefix: String,category: String,message: String,enableDmOnOpen: Boolean,ticketmessage: String, thumbnail:{enable:Boolean,url:String}, image:{enable:Boolean,url:String}, url:String, closedCategory:{enable:Boolean,id:String}, autoclose:{enable:Boolean,inactiveHours:Number}}} OTAllOptions */
|
||||
|
||||
//StringOptions
|
||||
/**@typedef {"id"|"name"|"description"|"icon"|"label"|"type"|"color"|"adminroles"|"channelprefix"|"category"|"message"|"enableDmOnOpen"|"ticketmessage"|"thumbnail"|"image"|"closedCategory"} OTTicketStringOptions */
|
||||
|
||||
@@ -300,6 +300,7 @@ if (process.argv[2] && process.argv[2].startsWith("slash")){
|
||||
//core
|
||||
require('./core/ticketActions/ticketOpener')()
|
||||
require("./core/reactionRoles")()
|
||||
require("./core/ticketActions/ticketAutoclose")()
|
||||
|
||||
this.errorLog.log("debug","LOADING INTERACTION HANDLERS")
|
||||
//InteractionHandlers
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"deleteTitle":"Deleting this ticket...",
|
||||
"reopenTitle":"Re-Opened this ticket!",
|
||||
|
||||
"claimTitle":"This ticket is now claimed to {0}",
|
||||
"claimTitle":"This ticket is claimed to {0}",
|
||||
"unclaimTitle":"This ticket isn't claimed anymore!",
|
||||
"changeTitle":"Changed ticket type to {0}!",
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"deleteTitle":"Deleting this ticket...",
|
||||
"reopenTitle":"Re-Opened this ticket!",
|
||||
|
||||
"claimTitle":"This ticket is now claimed to {0}",
|
||||
"claimTitle":"This ticket is claimed to {0}",
|
||||
"unclaimTitle":"This ticket isn't claimed anymore!",
|
||||
"changeTitle":"Changed ticket type to {0}!",
|
||||
|
||||
|
||||
+15
-15
@@ -25,16 +25,16 @@
|
||||
"deleteTitle":"Suppression de ce ticket...",
|
||||
"reopenTitle":"A rouvert ce ticket!",
|
||||
|
||||
"claimTitle":"This ticket is now claimed to {0}",
|
||||
"unclaimTitle":"This ticket isn't claimed anymore!",
|
||||
"changeTitle":"Changed ticket type to {0}!",
|
||||
"claimTitle":"Ce ticket est maintenant réclamé à {0}",
|
||||
"unclaimTitle":"Ce ticket n'est pas réclamé!",
|
||||
"changeTitle":"Modification du type de ticket en {0}!",
|
||||
|
||||
"statsTitle":"Here are the stats for {0}!",
|
||||
"autocloseTitle":"This ticket will be closed automatically after {0}!",
|
||||
"autocloseRejectTitle":"This ticket will no longer be closed automatically!",
|
||||
"autocloseWarn":"This only affects inactive tickets!",
|
||||
"statsTitle":"Voici les statistiques pour {0}!",
|
||||
"autocloseTitle":"Ce ticket sera automatiquement clôturé après {0}!",
|
||||
"autocloseRejectTitle":"Ce ticket ne sera plus clôturé automatiquement!",
|
||||
"autocloseWarn":"Cela n'affecte que les tickets inactifs!",
|
||||
|
||||
"goToTicket":"go to ticket",
|
||||
"goToTicket":"Aller au ticket",
|
||||
"ticketWarning":"L'intégration est dans le message ci-dessous!",
|
||||
"maxTicketWarning":"**Attention :** _Vous ne pouvez créer que {0} ticket(s) à la fois !_"
|
||||
},
|
||||
@@ -50,11 +50,11 @@
|
||||
"addCmd":"Ajouter un utilisateur au ticket.",
|
||||
"removeCmd":"Supprimer un utilisateur du ticket.",
|
||||
"reopenCmd":"Rouvrir un ticket après sa clôture.",
|
||||
"changeCmd":"Change ticket type.",
|
||||
"claimCmd":"Claim a ticket.",
|
||||
"unclaimCmd":"Unclaim a ticket.",
|
||||
"statsCmd":"View ticket stats.",
|
||||
"autocloseCmd":"Set timer to automatically close ticket"
|
||||
"changeCmd":"Changer le type de ticket.",
|
||||
"claimCmd":"Réclamer un billet",
|
||||
"unclaimCmd":"Annuler la réclamation d'un ticket.",
|
||||
"statsCmd":"Afficher les statistiques des tickets.",
|
||||
"autocloseCmd":"Définir une minuterie pour fermer automatiquement le ticket"
|
||||
},
|
||||
"buttons":{
|
||||
"close":"Fermer le ticket",
|
||||
@@ -80,8 +80,8 @@
|
||||
|
||||
"none":"rien",
|
||||
"reason":"raison",
|
||||
"createdat":"created at",
|
||||
"openedby":"opened by",
|
||||
"createdat":"Créé à",
|
||||
"openedby":"Ouvert par",
|
||||
"deletedby":"supprimé par",
|
||||
"closedby":"fermé par",
|
||||
|
||||
|
||||
Reference in New Issue
Block a user