From 4dced819a3a3f511a19b5cb387339f61cc9711dc Mon Sep 17 00:00:00 2001 From: DJj123dj <80536295+DJj123dj@users.noreply.github.com> Date: Sun, 19 Mar 2023 12:29:24 +0100 Subject: [PATCH] v3.3 push 7 (added autoclose) --- commands/close.js | 4 +- commands/delete.js | 4 +- commands/unclaim.js | 21 ++++++-- config.json | 5 ++ core/checker.js | 8 ++++ core/dynamicdatabase/dynamicfiles/database.js | 11 +++++ core/dynamicdatabase/storage.js | 10 ++++ core/interactionHandlers/embeds/commands.js | 15 ++++++ .../handlers/accepted/closing.js | 3 +- .../handlers/accepted/closingReason.js | 2 +- .../handlers/accepted/deleting.js | 4 +- .../handlers/verifyBars.js | 24 +++++++++- core/ticketActions/ticketAutoclose.js | 48 +++++++++++++++++++ core/ticketActions/ticketCloser.js | 4 +- core/ticketActions/ticketOpener.js | 12 +++-- core/transcriptSystem/oldTranscript.js | 6 +-- core/utils/configParser.js | 4 +- index.js | 1 + language/custom.json | 2 +- language/english.json | 2 +- language/french.json | 30 ++++++------ 21 files changed, 179 insertions(+), 41 deletions(-) create mode 100644 core/ticketActions/ticketAutoclose.js diff --git a/commands/close.js b/commands/close.js index 419bf59..5c8d43a 100644 --- a/commands/close.js +++ b/commands/close.js @@ -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()) diff --git a/commands/delete.js b/commands/delete.js index 47debfd..018b69a 100644 --- a/commands/delete.js +++ b/commands/delete.js @@ -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()) diff --git a/commands/unclaim.js b/commands/unclaim.js index f031916..e6821ea 100644 --- a/commands/unclaim.js +++ b/commands/unclaim.js @@ -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()) }) diff --git a/config.json b/config.json index baeb94f..a2ec616 100644 --- a/config.json +++ b/config.json @@ -58,6 +58,11 @@ "closedCategory":{ "enable":false, "id":"category id" + }, + + "autoclose":{ + "enable":false, + "inactiveHours":24 } }, diff --git a/core/checker.js b/core/checker.js index 397a577..23f48be 100644 --- a/core/checker.js +++ b/core/checker.js @@ -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") diff --git a/core/dynamicdatabase/dynamicfiles/database.js b/core/dynamicdatabase/dynamicfiles/database.js index d0b167a..866ef67 100644 --- a/core/dynamicdatabase/dynamicfiles/database.js +++ b/core/dynamicdatabase/dynamicfiles/database.js @@ -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 diff --git a/core/dynamicdatabase/storage.js b/core/dynamicdatabase/storage.js index dcc4060..9d150be 100644 --- a/core/dynamicdatabase/storage.js +++ b/core/dynamicdatabase/storage.js @@ -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){ diff --git a/core/interactionHandlers/embeds/commands.js b/core/interactionHandlers/embeds/commands.js index f785e47..9b8c5ec 100644 --- a/core/interactionHandlers/embeds/commands.js +++ b/core/interactionHandlers/embeds/commands.js @@ -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 diff --git a/core/interactionHandlers/handlers/accepted/closing.js b/core/interactionHandlers/handlers/accepted/closing.js index 38517d1..ba5bddc 100644 --- a/core/interactionHandlers/handlers/accepted/closing.js +++ b/core/interactionHandlers/handlers/accepted/closing.js @@ -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 }) } \ No newline at end of file diff --git a/core/interactionHandlers/handlers/accepted/closingReason.js b/core/interactionHandlers/handlers/accepted/closingReason.js index 8cf57bc..5aa3bdd 100644 --- a/core/interactionHandlers/handlers/accepted/closingReason.js +++ b/core/interactionHandlers/handlers/accepted/closingReason.js @@ -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 }) } \ No newline at end of file diff --git a/core/interactionHandlers/handlers/accepted/deleting.js b/core/interactionHandlers/handlers/accepted/deleting.js index 1ebcf5f..2cfdbc0 100644 --- a/core/interactionHandlers/handlers/accepted/deleting.js +++ b/core/interactionHandlers/handlers/accepted/deleting.js @@ -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 }) diff --git a/core/interactionHandlers/handlers/verifyBars.js b/core/interactionHandlers/handlers/verifyBars.js index 3780b94..d02dc9d 100644 --- a/core/interactionHandlers/handlers/verifyBars.js +++ b/core/interactionHandlers/handlers/verifyBars.js @@ -33,7 +33,17 @@ module.exports = () => { try { interaction.deferUpdate() } catch{} - interaction.message.edit({components:[bot.buttons.close.openRowNormal]}) + + 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{} - interaction.message.edit({components:[bot.buttons.close.openRowNormal]}) + + 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 diff --git a/core/ticketActions/ticketAutoclose.js b/core/ticketActions/ticketAutoclose.js new file mode 100644 index 0000000..62e6e4f --- /dev/null +++ b/core/ticketActions/ticketAutoclose.js @@ -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) +} \ No newline at end of file diff --git a/core/ticketActions/ticketCloser.js b/core/ticketActions/ticketCloser.js index a5241ae..ffeddef 100755 --- a/core/ticketActions/ticketCloser.js +++ b/core/ticketActions/ticketCloser.js @@ -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 => { diff --git a/core/ticketActions/ticketOpener.js b/core/ticketActions/ticketOpener.js index 9799f2d..80910af 100755 --- a/core/ticketActions/ticketOpener.js +++ b/core/ticketActions/ticketOpener.js @@ -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{ diff --git a/core/transcriptSystem/oldTranscript.js b/core/transcriptSystem/oldTranscript.js index eb4fc1f..1d1861e 100755 --- a/core/transcriptSystem/oldTranscript.js +++ b/core/transcriptSystem/oldTranscript.js @@ -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*" } diff --git a/core/utils/configParser.js b/core/utils/configParser.js index dd9b4bd..9e68d31 100644 --- a/core/utils/configParser.js +++ b/core/utils/configParser.js @@ -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 */ diff --git a/index.js b/index.js index 9abfca5..ccc8472 100644 --- a/index.js +++ b/index.js @@ -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 diff --git a/language/custom.json b/language/custom.json index 9282e7a..ef296d2 100644 --- a/language/custom.json +++ b/language/custom.json @@ -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}!", diff --git a/language/english.json b/language/english.json index 295b127..9dcfa45 100644 --- a/language/english.json +++ b/language/english.json @@ -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}!", diff --git a/language/french.json b/language/french.json index 2c99628..6b7c3e8 100644 --- a/language/french.json +++ b/language/french.json @@ -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",