diff --git a/.gitignore b/.gitignore index 2c3ca30..53a2790 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,4 @@ storage/.DS_Store .vscode/ livestatus.json test.js -testtsconfig.json \ No newline at end of file +devtsconfig.json \ No newline at end of file diff --git a/commands/help.js b/commands/help.js index 03b6215..ad78252 100644 --- a/commands/help.js +++ b/commands/help.js @@ -19,7 +19,7 @@ module.exports = () => { .setTitle("❔ "+l.helpMenu.title) const header = config.system.ticket_channel ? l.helpMenu.header1.replace("{0}","<#"+config.system.ticket_channel+">") : l.helpMenu.header2 - helpEmbed.setDescription(header+"`"+prefix+msgName+" ` ➜ _"+l.helpMenu.msgCmd+"_\n\n`"+prefix+"rename ` ➜ _"+l.helpMenu.renameCmd+"_\n`"+prefix+"close` ➜ _"+l.helpMenu.closeCmd+"_\n`"+prefix+"delete` ➜ _"+l.helpMenu.deleteCmd+"_\n`"+prefix+"reopen` ➜ _"+l.helpMenu.reopenCmd+"_\n\n`"+prefix+"add ` ➜ _"+l.helpMenu.addCmd+"_\n`"+prefix+"remove ` ➜ _"+l.helpMenu.removeCmd+"_") + helpEmbed.setDescription(header+"`"+prefix+msgName+" ` ➜ _"+l.helpMenu.msgCmd+"_\n\n`"+prefix+"rename ` ➜ _"+l.helpMenu.renameCmd+"_\n`"+prefix+"close` ➜ _"+l.helpMenu.closeCmd+"_\n`"+prefix+"delete` ➜ _"+l.helpMenu.deleteCmd+"_\n`"+prefix+"reopen` ➜ _"+l.helpMenu.reopenCmd+"_\n\n`"+prefix+"add ` ➜ _"+l.helpMenu.addCmd+"_\n`"+prefix+"remove ` ➜ _"+l.helpMenu.removeCmd+"_\n\n`"+prefix+"change ` ➜ _Change ticket type._") var otherprefix = prefix.endsWith(" ") ? prefix.substring(0,prefix.length-1) : prefix diff --git a/core/checker.js b/core/checker.js index 32311f5..91fbe0b 100644 --- a/core/checker.js +++ b/core/checker.js @@ -114,7 +114,7 @@ exports.checker = async () => { }) } } - /**@param {String} value @param {"string"|"boolean"|"number"} type */ + /**@param {String} value @param {"string"|"boolean"|"number"|"array"|"object"} type */ const checkType = (value,type,path) => { if (type == "boolean"){ if (typeof value != "boolean"){ @@ -128,6 +128,14 @@ exports.checker = async () => { if (typeof value != "string"){ createError("'"+path+"' | invalid type, this must be a string!") } + }else if (type == "array"){ + if (!Array.isArray(value)){ + createError("'"+path+"' | invalid type, this must be an array!") + } + }else if (type == "object"){ + if (typeof value != "object"){ + createError("'"+path+"' | invalid type, this must be an object!") + } } } @@ -197,6 +205,7 @@ exports.checker = async () => { checkButtonColor(option.color,path+"/color") //adminroles + checkType(option.adminroles,"array",path+"/adminroles") checkDiscordArray("roleid",option.adminroles,path+"/adminroles") //channelprefix @@ -221,14 +230,22 @@ exports.checker = async () => { checkType(option.ticketmessage,"string",path+"/ticketmessage") //thumbnail - checkType(option.thumbnail.enable,"boolean",path/"/thumbnail/enable") - checkType(option.thumbnail.url,"string",path/"/thumbnail/url") + if (option.thumbnail){ + checkType(option.thumbnail.enable,"boolean",path+"/thumbnail/enable") + checkType(option.thumbnail.url,"string",path+"/thumbnail/url") + }else{ + createError("'"+path+"/thumbnail' | there is no thumbnail object!") + } //closedCategory - checkType(option.closedCategory.enable,"boolean",path/"/closedCategory/enable") - checkType(option.closedCategory.id,"string",path/"/closedCategory/id") - if (option.closedCategory.enable){ - checkDiscord("roleid",option.closedCategory.id,path+"/closedCategory/id") + if (option.closedCategory){ + checkType(option.closedCategory.enable,"boolean",path/"/closedCategory/enable") + checkType(option.closedCategory.id,"string",path/"/closedCategory/id") + if (option.closedCategory.enable){ + checkDiscord("roleid",option.closedCategory.id,path+"/closedCategory/id") + } + }else{ + createError("'"+path+"/closedCategory' | there is no closedCategory object!") } }else if (type == "website"){ @@ -380,6 +397,7 @@ exports.checker = async () => { if (!require("./api/api.json").disable.checkerjs.token) checkToken(config.auth_token) + checkType(config.main_adminroles,"array","/main_adminroles") checkDiscordArray("roleid",config.main_adminroles,"main_adminroles") checkString(config.prefix,1,15,"prefix","prefix") //languagefile @@ -404,19 +422,31 @@ exports.checker = async () => { //system: + //ticket channel if (config.system.ticket_channel){ if (config.system.ticket_channel.length < 16 || config.system.ticket_channel.length > 20 || !/^\d+$/.test(config.system.ticket_channel)){ createError("'system/ticket_channel' | this channel id is invalid") } }else createWarn("'"+path+"' | you have no ticket channel selected!") + + //max tickets checkType(config.system.max_allowed_tickets,"number","system/max_allowed_tickets") + + //enableDMmessages checkType(config.system.enable_DM_Messages,"boolean","system/enable_DM_Messages") + + //has@everyoneaccess checkType(config.system["has@everyoneaccess"],"boolean","system/has@everyoneaccess") + + //member_role + checkType(config.system.member_role,"string","system/member_role") if (config.system.member_role != "" && config.system.member_role != " " && config.system.member_role != "false" && config.system.member_role != "null" && config.system.member_role != "0"){ checkDiscord("roleid",config.system.member_role,"system/member_role") }else{ createWarn("'system/member_role' | You don't have a member role, but it's recommended!") } + + //closemode checkType(config.system.closeMode,"string","system/closeMode") if (!["normal","adminonly"].includes(config.system.closeMode)){ createError("'system/closeMode' | the close mode must be adminonly or normal") @@ -436,29 +466,6 @@ exports.checker = async () => { }) - //discord check - /** - const discord = require("discord.js") - const {GatewayIntentBits,Partials} = discord - const client = new discord.Client({ - intents:[ - GatewayIntentBits.DirectMessages, - GatewayIntentBits.GuildInvites, - GatewayIntentBits.GuildMembers, - GatewayIntentBits.GuildMessages, - GatewayIntentBits.Guilds, - GatewayIntentBits.MessageContent - ], - partials:[Partials.Channel,Partials.Message] - }) - await client.guilds.fetch() - if (!client.guilds.cache.find(g => g.id == config.server_id)){ - createError("'server_id' | i'm not in a server with this id!") - } - */ - - - //the end if (errorList.length > 0 || warnList.length > 0){ console.log("REPORT:\n===========================") diff --git a/core/ticketActions/ticketOpener.js b/core/ticketActions/ticketOpener.js index 9af64eb..ede9a75 100755 --- a/core/ticketActions/ticketOpener.js +++ b/core/ticketActions/ticketOpener.js @@ -156,12 +156,13 @@ module.exports = () => { if (config.system.member_role != "" && config.system.member_role != " " && config.system.member_role != "false" && config.system.member_role != "null" && config.system.member_role != "0"){ try { const userrole = guild.roles.cache.find(r => r.id == config.system.member_role) - if (!userrole) return - permissionsArray.push({ - id:userrole, - type:"role", - deny:[pfb.ViewChannel] - }) + if (userrole){ + permissionsArray.push({ + id:userrole, + type:"role", + deny:[pfb.ViewChannel] + }) + } }catch{ log("system","invalid role! At 'config.json => system/member_role") } diff --git a/core/transcriptSystem/communication/compileJson.js b/core/transcriptSystem/communication/compileJson.js index 6aa1ba4..7218495 100644 --- a/core/transcriptSystem/communication/compileJson.js +++ b/core/transcriptSystem/communication/compileJson.js @@ -69,7 +69,7 @@ exports.compile = (guild,channel,user,messagesInv,data) => { author:{ name:msg.author.tag, id:Number(msg.author.id), - color:msg.author.hexAccentColor || "#ffffff", + color:msg.member.displayHexColor || "#ffffff", pfp:msg.author.displayAvatarURL() }, content:msg.content || "", diff --git a/core/transcriptSystem/embeds.js b/core/transcriptSystem/embeds.js index 37dd540..4b08efc 100644 --- a/core/transcriptSystem/embeds.js +++ b/core/transcriptSystem/embeds.js @@ -45,9 +45,13 @@ exports.tsready = (name,id,url,user) => { .setColor(config.main_color) .setAuthor({name:user.tag,iconURL:user.displayAvatarURL()}) .setFooter({text:name}) - .setURL(url) - .setDescription("\n["+l.transcripts.available+"]("+url+")\n") + if (url){ + embed.setURL(url) + embed.setDescription("\n["+l.transcripts.available+"]("+url+")\n") + }else{ + embed.setDescription("\n"+l.transcripts.available+"\n") + } return embed } diff --git a/core/transcriptSystem/manager.js b/core/transcriptSystem/manager.js index 0b7179e..4cc3bbd 100644 --- a/core/transcriptSystem/manager.js +++ b/core/transcriptSystem/manager.js @@ -12,6 +12,7 @@ const tsdb = require("./tsdb") const checkAvailability = async () => { + if (process.argv.some((v) => v == "--tsoffline")) return true const axios = require("axios").default const res = await axios.get("https://transcripts.dj-dj.be/status.txt") if (!res || !(res.status == 200) || !res.data) return false @@ -48,90 +49,102 @@ module.exports = async (messages,guild,channel,user,reason) => { const ticketopener = client.users.cache.find(u => u.id == id) - - const JSONDATA = require("./communication/compileJson").compile(guild,channel,user,messages,{ - style:{ - titleColor:tsconfig.style.titleColor, - enableCustomBackground:tsconfig.style.background.enableCustomBackground, - backgroundModus:tsconfig.style.background.backgroundModus, - backgroundData:tsconfig.style.background.backgroundData - }, - bot:{ - name:client.user.username, - id:client.user.id, - pfp:client.user.displayAvatarURL() - }, - ticket:{ - creatorid:ticketopener.id, - creatorname:ticketopener.tag, - openedtime:opentime.getTime(), - closedtime:new Date().getTime() - } - }) - - if (!await checkAvailability()){ - const attachment = await require("./oldTranscript").createTranscript(messages,channel) - const errembed = tsembeds.tserror(chName,chId,user) - - if (tsconfig.sendTranscripts.enableChannel){ - /**@type {discord.TextChannel|undefined} */ - const tc = guild.channels.cache.find((c) => c.id == tsconfig.sendTranscripts.channel) - - if (!tc) return - tc.send({embeds:[errembed],files:[attachment]}) - } - return - } - - const TSdata = await require("./communication/index").upload(JSONDATA) - if (!TSdata) return false - - if (TSdata.status == "success"){ - const url = "https://transcripts.dj-dj.be/t/"+TSdata.time+"_"+TSdata.id+".html" - - //calculate estimated time - const lastDumpTime = (new Date(TSdata.estimated.lastdump).getTime()) - const dumpLoopTime = 15000 - const nextDump = new Date(lastDumpTime+dumpLoopTime) - const processtime = TSdata.estimated.processtime+6000 //6sec extra time for overflow - - const finaltime = new Date(nextDump.getTime()+processtime) - const duration = finaltime.getTime()-new Date().getTime() - - //waiting - if (tsconfig.sendTranscripts.enableChannel){ - /**@type {discord.TextChannel|undefined} */ - const tc = guild.channels.cache.find((c) => c.id == tsconfig.sendTranscripts.channel) - - if (!tc) return - const embed = tsembeds.beingprocessed(chName,chId,finaltime,user) - var msg = await tc.send({embeds:[embed]}) - }else {var msg = false} - - //ready - setTimeout(() => { - if (msg){ - msg.edit({embeds:[tsembeds.tsready(chName,chId,url,user)]}) + if (tsconfig.sendTranscripts.useHTMLtranscripts){ + const JSONDATA = require("./communication/compileJson").compile(guild,channel,user,messages,{ + style:{ + titleColor:tsconfig.style.titleColor, + enableCustomBackground:tsconfig.style.background.enableCustomBackground, + backgroundModus:tsconfig.style.background.backgroundModus, + backgroundData:tsconfig.style.background.backgroundData + }, + bot:{ + name:client.user.username, + id:client.user.id, + pfp:client.user.displayAvatarURL() + }, + ticket:{ + creatorid:ticketopener.id, + creatorname:ticketopener.tag, + openedtime:opentime.getTime(), + closedtime:new Date().getTime() } + }) - if (tsconfig.sendTranscripts.enableDM){ - if (!user) return - const embed = tsembeds.tsready(chName,chId,url,user) - try { - user.send({embeds:[embed]}) - }catch{} + if (!await checkAvailability()){ + const attachment = await require("./oldTranscript").createTranscript(messages,channel) + const errembed = tsembeds.tserror(chName,chId,user) + + if (tsconfig.sendTranscripts.enableChannel){ + /**@type {discord.TextChannel|undefined} */ + const tc = guild.channels.cache.find((c) => c.id == tsconfig.sendTranscripts.channel) + + if (!tc) return + tc.send({embeds:[errembed],files:[attachment]}) } - },duration) + return + } + + const TSdata = await require("./communication/index").upload(JSONDATA) + if (!TSdata) return false + + if (TSdata.status == "success"){ + const url = "https://transcripts.dj-dj.be/t/"+TSdata.time+"_"+TSdata.id+".html" + + //calculate estimated time + const lastDumpTime = (new Date(TSdata.estimated.lastdump).getTime()) + const dumpLoopTime = 15000 + const nextDump = new Date(lastDumpTime+dumpLoopTime) + const processtime = TSdata.estimated.processtime+6000 //6sec extra time for overflow + + const finaltime = new Date(nextDump.getTime()+processtime) + const duration = finaltime.getTime()-new Date().getTime() + + //waiting + if (tsconfig.sendTranscripts.enableChannel){ + /**@type {discord.TextChannel|undefined} */ + const tc = guild.channels.cache.find((c) => c.id == tsconfig.sendTranscripts.channel) + + if (!tc) return + const embed = tsembeds.beingprocessed(chName,chId,finaltime,user) + var msg = await tc.send({embeds:[embed]}) + }else {var msg = false} + + //ready + setTimeout(() => { + if (msg){ + msg.edit({embeds:[tsembeds.tsready(chName,chId,url,user)]}) + } + + if (tsconfig.sendTranscripts.enableDM){ + if (!user) return + const embed = tsembeds.tsready(chName,chId,url,user) + try { + user.send({embeds:[embed]}) + }catch{} + } + },duration) + }else{ + const attachment = await require("./oldTranscript").createTranscript(messages,channel) + const errembed = tsembeds.tserror(chName,chId,user,"`error type: transcript API error`") + + if (tsconfig.sendTranscripts.enableChannel){ + /**@type {discord.TextChannel|undefined} */ + const tc = guild.channels.cache.find((c) => c.id == tsconfig.sendTranscripts.channel) + + if (!tc) return + tc.send({embeds:[errembed],files:[attachment]}) + } + } }else{ const attachment = await require("./oldTranscript").createTranscript(messages,channel) - const errembed = tsembeds.tserror(chName,chId,user,"`error type: transcript API error`") + const embed = tsembeds.tsready(chName,chId,false,user) if (tsconfig.sendTranscripts.enableChannel){ /**@type {discord.TextChannel|undefined} */ const tc = guild.channels.cache.find((c) => c.id == tsconfig.sendTranscripts.channel) if (!tc) return - tc.send({embeds:[errembed],files:[attachment]}) + tc.send({embeds:[embed],files:[attachment]}) } } } diff --git a/core/transcriptSystem/oldTranscript.js b/core/transcriptSystem/oldTranscript.js index 7459480..c33e6d0 100755 --- a/core/transcriptSystem/oldTranscript.js +++ b/core/transcriptSystem/oldTranscript.js @@ -7,15 +7,19 @@ const l = bot.language /** * * @param {discord.Message[]} messagecollection + * @param {discord.TextChannel} channel + * @param {Boolean} backup * @returns new `discord.attachmentBuilder` */ -exports.createTranscript = async (messagecollection) => { +exports.createTranscript = async (messagecollection,channel,backup) => { try { const cd = new Date() const months = ["January","February","March","April","May","June","July","August","September","October","November","December"] const dateString = cd.getDate()+" "+months[cd.getMonth()-1]+" "+cd.getFullYear()+" - "+cd.getHours()+":"+cd.getMinutes()+":"+cd.getSeconds() - const filearray = ["BACKUP TRANSCRIPT:\n"] + let backuptitle = backup ? "BACKUP " : "" + let backupfilename = backup ? "backup" : "" + const filearray = [backuptitle+"TRANSCRIPT:\n"] messagecollection.reverse() @@ -23,15 +27,20 @@ exports.createTranscript = async (messagecollection) => { const timestamp = new Date(msg.createdTimestamp) if (msg.content){var content = msg.content}else{var content = "*empty message*"} - + const fileurls = [] + const rawfiles = Array.from(msg.attachments) + rawfiles.forEach((file) => { + fileurls.push("attachment: "+file[1].url) + }) + const filestring = fileurls.length > 0 ? fileurls.join("\n")+"\n" : "" const msgstats = "files: "+msg.attachments.size+", embeds: "+msg.embeds.length - filearray.push("["+timestamp.getDate()+"/"+timestamp.getMonth()+"/"+timestamp.getFullYear()+", "+timestamp.getHours()+":"+timestamp.getMinutes()+":"+timestamp.getSeconds()+"|"+msg.author.tag+"] ["+msgstats+"]\n"+content+"\n") + filearray.push("["+timestamp.getDate()+"/"+timestamp.getMonth()+"/"+timestamp.getFullYear()+", "+timestamp.getHours()+":"+timestamp.getMinutes()+":"+timestamp.getSeconds()+"|"+msg.author.tag+"] ["+msgstats+"]\n"+content+"\n"+filestring) }) if (filearray.length < 2) filearray.push("transcript is empty") const filestring = filearray.join("\n") const filebuff = Buffer.from(filestring,"utf-8") - return new discord.AttachmentBuilder(filebuff,{name:"backuptranscript.txt",description:"Open Ticket transcript"}) + return new discord.AttachmentBuilder(filebuff,{name:backupfilename+"transcript.txt",description:"Open Ticket transcript"}) }catch{ return false } diff --git a/core/utils/getEmbed.js b/core/utils/getEmbed.js index 85de281..2b22e7f 100644 --- a/core/utils/getEmbed.js +++ b/core/utils/getEmbed.js @@ -46,7 +46,7 @@ exports.createEmbed = (id) => { embed.setColor(config.main_color) } - if (data.other.embedTitleURL.enable) embed.setURL(data.other.embedTitleURL) + if (data.other.embedTitleURL.enable) embed.setURL(data.other.embedTitleURL.url) var description = data.description if (data.other.enableTicketExplaination){ diff --git a/index.js b/index.js index d072fa9..5f53f01 100644 --- a/index.js +++ b/index.js @@ -56,6 +56,12 @@ if (process.argv.some((v) => v == "--nochecker")){ console.log(chalk.blue("[FLAGS] => disabled checker.js")) }; logFLAGS() } +if (process.argv.some((v) => v == "--tsoffline")){ + async function logFLAGS(){ + const chalk = await (await import("chalk")).default + console.log(chalk.blue("[FLAGS] => offline check for html transcripts disabled!")) + }; logFLAGS() +} if (process.argv.some((v) => v == "--debug")){ async function logFLAGS(){ const chalk = await (await import("chalk")).default @@ -73,7 +79,7 @@ if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded const config = tempconfig exports.config = config -const tsconfig = require("./transcriptconfig.json") +const tsconfig = isDevConfig ? require("./devtsconfig.json") : require("./transcriptconfig.json") exports.tsconfig = tsconfig if (process.argv.some((v) => v == "--debug")) console.log("[TEMP_DEBUG]","loaded config") diff --git a/language/german.json b/language/german.json index 46e9149..db79d33 100644 --- a/language/german.json +++ b/language/german.json @@ -1,87 +1,88 @@ -{ - "errors":{ - "missingArgsTitle":"Ungültiges Argument!", - "missingArgsDescription":"Fehlendes Argument!", - "noPermsTitle":"Du hast keine Rechte!", - "noPermsDescription":"Sie haben nicht die richtigen Rollen, um diesen Befehl auszuführen!\nSie benötigen die `ADMINISTRATOR` Erlaubnis oder in der Liste der erlaubten Rollen sein!", - "noPermsDelete":"Only admins can delete a ticket!", - "chooseFromListTitle":"Ungültige ID", - "chooseFromListDescription":"Wählen Sie eine der folgenden ID:", - "boterror":"Bot Fehler!", - "notInTicketTitle":"Du bist ein kein Ticket!", - "notInTicketDescription":"Der Befehl funktioniert nicht außerhalb eines Tickets!", - "ticketDoesntExist":"Das Ticket Exisitert nicht mehr!", - "roleDoesntExist":"Die Rolle Exisitiert nicht mehr!", - "anotherOption":"Diese Option ist kein Ticket, sondern eine andere Art!", - "maxAmountTitle":"Das Limit wurde erreicht!", - "maxAmountDescription":"Sie haben die maximal zulässige Anzahl von Tickets erreicht!\nSie können also keine neue erstellen.!", - "somethingWentWrong":"Etwas ist schief gelaufen!**\nBitte versuchen Sie es ein anderes Mal!" - }, - "commands":{ - "userAddedTitle":"User geaddet!", - "userRemovedTitle":"User entfernt!", - "renameTitle":"Der Name wurde geändert!", - "closeTitle":"Dieses Ticket schließen!", - "deleteTitle":"Löschen Sie dieses Ticket!", - "reopenTitle":"Öffne dieses Ticket erneut!", - "claimTitle":"This ticket is now claimed to {0}", - "unclaimTitle":"This ticket isn't claimed anymore!", - "changeTitle":"Changed ticket type to {0}!", - - "ticketWarning":"Die Einbettung befindet sich in der Nachricht unten!", - "maxTicketWarning":"**Warnung:** _Sie können nur {0} ticket(s) erstellen zu einer Zeit!_" - }, - "helpMenu":{ - "title":"Hilfe Menu:", - "header1":"**Gehe zu {0} um ein Ticket zu erstellen!**\n\n", - "header2":"**Führen Sie den Befehl `/new` oder `/ticket` um ein Ticket zu erstellen!**\n\n", - - "msgCmd":"Eine Einbettung mit Schaltflächen erzeugen. (nur admins)", - "renameCmd":"Ein Ticket umbenennen. (keine Leerzeichen)", - "closeCmd":"Schließen Sie ein Ticket.", - "deleteCmd":"Ein Ticket löschen.", - "addCmd":"Fügen Sie dem Ticket einen Benutzer hinzu.", - "removeCmd":"Entfernen eines Benutzers aus dem Ticket.", - "reopenCmd":"Öffnen Sie ein Ticket erneut, nachdem es geschlossen wurde." - }, - "buttons":{ - "close":"Ticket schließen", - "delete":"Ticket löschen", - "reopen":"Ticket wieder öffnen", - "closeWithReason":"Geschlossen mit dem Grund" - }, - "messages":{ - "reopenTitle":"Dieses Ticket wiedereröffnet!", - "reopenDescription":"Sie können gerne weiterreden!", - "closedTitle":"Dieses Ticket geschlossen!", - "closedDescription":"Nur Admins können jetzt in diesem Ticket sprechen!\n\n*Klicken Sie auf die Schaltfläche unten, um dieses Ticket zu löschen oder erneut zu öffnen!*", - "createdTitle":"Ticket erstellt!", - "createdDescription":"Ihr Ticket ist erstellt, Sie können es durch einen Ping erkennen!", - - "newTicketDmTitle":"Neues Ticket!", - "closedTicketDmTitle":"Ticket schließen!", - "deletedTicketDmTitle":"Ticket löschen!", - "closedTicketDmDescription":"Ihr Ticket ist geschlossen!", - "deletedTicketDmDescription":"Ihr Ticket ist gelöscht!", - "reopenTicketDmTitle":"Ticket Re-opened!", - "reopenTicketDmDescription":"Your ticket is re-opened!", - - "chooseCategory":"Wähle eine Kategorie:", - "gettingdeleted":"Ticket is getting deleted...", - - "none":"keiner", - "reason":"Grund", - - "deletedby":"Gelöscht von", - "closedby":"Geschlossen von", - "modalreason":"Was ist der Grund?", - "chooseATicket": "Wähle ein Ticket" - }, - "transcripts":{ - "title":"Transcript", - "processed":"This transcript is being processed", - "wait":"Please wait!", - "estimated":"Estimated time", - "available":"The transcript is available here" - } -} \ No newline at end of file +```json +{ + "errors":{ + "missingArgsTitle":"Ungültiges Argument!", + "missingArgsDescription":"Fehlendes Argument!", + "noPermsTitle":"Du hast keine Rechte!", + "noPermsDescription":"Du benötigst die `ADMINISTRATOR` Rechte oder die erlaubte Rolle", + "noPermsDelete":"Nur Administratoren können ein Ticket löschen!", + "chooseFromListTitle":"Ungültige ID", + "chooseFromListDescription":"Wählen Sie eine der folgenden ID's:", + "boterror":"Bot Fehler!", + "notInTicketTitle":"Du bist in keinem Ticket!", + "notInTicketDescription":"Der Befehl funktioniert außerhalb eines Tickets nicht!", + "ticketDoesntExist":"Das Ticket exisitert nicht mehr!", + "roleDoesntExist":"Die Rolle exisitiert nicht mehr!", + "anotherOption":"Diese Option ist kein Ticket, sondern eine andere Art!", + "maxAmountTitle":"Das Limit wurde erreicht!", + "maxAmountDescription":"Sie haben die maximal zulässige Anzahl von Tickets erreicht!\nSie können also keine neuen erstellen.!", + "somethingWentWrong":"**Etwas ist schief gelaufen!**\nBitte versuchen Sie es ein anderes Mal!", + }, + "commands":{ + "userAddedTitle":"User geaddet!", + "userRemovedTitle":"User entfernt!", + "renameTitle":"Der Name wurde geändert!", + "closeTitle":"Dieses Ticket schließen!", + "deleteTitle":"Löschen Sie dieses Ticket!", + "reopenTitle":"Öffne dieses Ticket erneut!", + "claimTitle":"Das Ticket wurde beansprucht von {0}", + "unclaimTitle":"Das Ticket wrid nicht mehr beansprucht", + "changeTitle":"Ticket Typ wurde geändert auf {0}!", + + "ticketWarning":"Die Einbettung befindet sich in der Nachricht unten!", + "maxTicketWarning":"**Warnung:** _Sie können nur {0} ticket(s) erstellen zu einer Zeit!_" + }, + "helpMenu":{ + "title":"Hilfe Menu:", + "header1":"**Gehe zu {0} um ein Ticket zu erstellen!**\n\n", + "header2":"**Führen Sie den Befehl `/new` oder `/ticket` um ein Ticket zu erstellen!**\n\n", + + "msgCmd":"Eine Einbettung mit Schaltflächen erzeugen. (nur admins)", + "renameCmd":"Ein Ticket umbenennen. (keine Leerzeichen)", + "closeCmd":"Schließen Sie ein Ticket.", + "deleteCmd":"Ein Ticket löschen.", + "addCmd":"Fügen Sie dem Ticket einen Benutzer hinzu.", + "removeCmd":"Entfernen eines Benutzers aus dem Ticket.", + "reopenCmd":"Öffnen Sie ein Ticket erneut, nachdem es geschlossen wurde." + }, + "buttons":{ + "close":"Ticket schließen", + "delete":"Ticket löschen", + "reopen":"Ticket wieder öffnen", + "closeWithReason":"Geschlossen mit dem Grund" + }, + "messages":{ + "reopenTitle":"Dieses Ticket wiedereröffnet!", + "reopenDescription":"Sie können gerne weiterreden!", + "closedTitle":"Dieses Ticket geschlossen!", + "closedDescription":"Nur Admins können jetzt in diesem Ticket sprechen!\n\n*Klicken Sie auf die Schaltfläche unten, um dieses Ticket zu löschen oder erneut zu öffnen!*", + "createdTitle":"Ticket erstellt!", + "createdDescription":"Ihr Ticket ist erstellt, Sie können es durch einen Ping erkennen!", + + "newTicketDmTitle":"Neues Ticket!", + "closedTicketDmTitle":"Ticket schließen!", + "deletedTicketDmTitle":"Ticket löschen!", + "closedTicketDmDescription":"Ihr Ticket ist geschlossen!", + "deletedTicketDmDescription":"Ihr Ticket ist gelöscht!", + "newTranscriptTitle":"Eine neue Transcript finden Sie hier!", + "hereIsTheTranscript":"Hier ist das Transcript:", + + "chooseCategory":"Wähle eine Kategorie:", + "gettingdeleted":"Ticket wird gelöscht...", + + "none":"none", + "reason":"Grund", + + "deletedby":"Gelöscht von", + "closedby":"Geschlossen von", + "modalreason":"Was ist der Grund?", + "chooseATicket": "Wähle ein passendes Thema!" + }, + "transcripts":{ + "title":"Transcript", + "processed":"Das Transcript wird erstellt", + "wait":"Bitte warten!", + "estimated":"Verbleibende Zeit", + "available":"Das Transcript ist hier verfügbar" + } +}``` \ No newline at end of file diff --git a/language/italian.json b/language/italian.json index f24fc7f..243ba05 100644 --- a/language/italian.json +++ b/language/italian.json @@ -1,87 +1,87 @@ -{ - "errors":{ - "missingArgsTitle":"Argomenti non validi!", - "missingArgsDescription":"Argomento mancante", - "noPermsTitle":"Permessi mancanti!", - "noPermsDescription":"Hai bisogno del permesso `ADMINISTRATOR` e essere nella lista dei ruoli accettati!", - "noPermsDelete":"Solo gli amministratori possono chiudere un ticket!", - "chooseFromListTitle":"ID non valido", - "chooseFromListDescription":"Scegli uno degli ID sotto:", - "boterror":"Errore del bot!", - "notInTicketTitle":"Non sei in un ticket!", - "notInTicketDescription":"Questo comando non funziona fuori da un ticket!", - "ticketDoesntExist":"Questo ticket non esiste più!", - "roleDoesntExist":"Questo ruolo non esiste più!", - "anotherOption":"Questa opzione non è di un ticket!", - "maxAmountTitle":"Massimo numero raggiunto!", - "maxAmountDescription":"Hai raggiunto il massimo numero di ticket consentiti!\nNon puoi crearne altri!", - "somethingWentWrong":"**Qualcosa è andato storto!**\nPerfavore riprova un'altra volta!" - }, - "commands":{ - "userAddedTitle":"Aggiunto {0} al ticket!", - "userRemovedTitle":"Rimosso {0} da questo ticket!", - "renameTitle":"Cambia il nome in {0}!", - "closeTitle":"Chiudo questo ticket!", - "deleteTitle":"Eliminando questo ticket...", - "reopenTitle":"Ri-Aperto questo ticket!", - "claimTitle":"This ticket is now claimed to {0}", - "unclaimTitle":"This ticket isn't claimed anymore!", - "changeTitle":"Changed ticket type to {0}!", - - "ticketWarning":"L'embed è nel messaggio sotto!", - "maxTicketWarning":"**Attenzione:** _Tu puoi creare solo {0} ticket(s) per volta!_" - }, - "helpMenu":{ - "title":"Comandi disponibili:", - "header1":"**Vai a {0} per creare un ticket!**\n\n", - "header2":"**Esegui il comando `/new` o `/ticket` per creare un ticket!**\n\n", - - "msgCmd":"Crea un embed con pulsanti. (solo amministratori)", - "renameCmd":"Rinomina un ticket. (senza spazi)", - "closeCmd":"Chiudi un ticket.", - "deleteCmd":"Elimina un ticket.", - "addCmd":"Aggiungi un membro al ticket.", - "removeCmd":"Rimuovi un membro dal ticket.", - "reopenCmd":"Riapri un ticket dopo averlo chiuso." - }, - "buttons":{ - "close":"Chiudi il ticket", - "delete":"Elimina il ticket", - "reopen":"Riapri il ticket", - "closeWithReason":"chiudi con un motivo" - }, - "messages":{ - "reopenTitle":"Riaperto questo ticket!", - "reopenDescription":"Sentiti libero di parlare di nuovo!", - "closedTitle":"Chiudo questo ticket!", - "closedDescription":"Solo gli amministratori possono parlare in questo ticket ora!\n\n*Clicca sul bottone sotto per chiudere o riaprire questo ticket!*", - "createdTitle":"Ticket creato!", - "createdDescription":"Il tuo ticket è stato creato, puoi capirlo dal ping!", - - "newTicketDmTitle":"Nuovo ticket!", - "closedTicketDmTitle":"Ticket chiuso!", - "deletedTicketDmTitle":"Ticket eliminato!", - "closedTicketDmDescription":"Il tuo ticket è chiuso!", - "deletedTicketDmDescription":"Il tuo ticket è stato eliminato!", - "reopenTicketDmTitle":"Ticket riaperto!", - "reopenTicketDmDescription":"Il tuo ticket è stato riaperto!", - - "chooseCategory":"scegli una categoria:", - "gettingdeleted":"Il ticket sta per essere chiuso...", - - "none":"nessuno", - "reason":"motivo", - - "deletedby":"eliminato da", - "closedby":"chiuso da", - "modalreason":"Quale'è il motivo per chiudere il ticket?", - "chooseATicket": "Scegli un ticket" - }, - "transcripts":{ - "title":"Transcript", - "processed":"This transcript is being processed", - "wait":"Please wait!", - "estimated":"Estimated time", - "available":"The transcript is available here" - } +{ + "errors":{ + "missingArgsTitle":"Argomenti non validi!", + "missingArgsDescription":"Argomenti mancanti", + "noPermsTitle":"Non hai i permessi sufficienti!", + "noPermsDescription":"Hai bisogno del permesso `ADMINISTRATOR` o essere nella lista dei ruoli consentiti!", + "noPermsDelete":"Solo gli amministratori possono eliminare i ticket!", + "chooseFromListTitle":"ID non valido", + "chooseFromListDescription":"Scegli uno degli id sottostanti:", + "boterror":"Errore del bot!", + "notInTicketTitle":"Non sei in un ticket!", + "notInTicketDescription":"Questo comando non funziona al di fuori di un ticket!", + "ticketDoesntExist":"Questo ticket non esiste!", + "roleDoesntExist":"Questo ruolo non esiste!", + "anotherOption":"Questa opzione non è un ticket ma un'altra!", + "maxAmountTitle":"Massimo ammontare raggiunto!", + "maxAmountDescription":"Hai raggiunto il massimo di ticket aperti!\nNon puoi creare altri!", + "somethingWentWrong":"*Qualcosa è andato storto!*\nPerfavore riprova un'altra volta!" + }, + "commands":{ + "userAddedTitle":"Aggiunti {0} a questo ticket!", + "userRemovedTitle":"Rimossi {0} da questo ticket!", + "renameTitle":"Cambiato il nome a {0}!", + "closeTitle":"Ticket chiuso!", + "deleteTitle":"Eliminando questo ticket...", + "reopenTitle":"Ri-aperto questo ticket!", + "claimTitle":"Questo ticket è ora gestito da {0}", + "unclaimTitle":"Questo ticket non è più gestito!", + "changeTitle":"Cambiato il tipo di ticket in {0}!", + + "ticketWarning":"L'embed è nel messaggio sotto!", + "maxTicketWarning":"*Attenzione:* Tu puoi creare solo {0} ticket alla volta!" + }, + "helpMenu":{ + "title":"Comandi disponibili:", + "header1":"*Vai a {0} per creare un ticket!*\n\n", + "header2":"*Esegui il comando `/new` o `/ticket` per creare un ticket!*\n\n", + + "msgCmd":"Crea un embed con bottoni. (solo amministratori)", + "renameCmd":"Rinomina un ticket. (senza spazi)", + "closeCmd":"Chiudi un ticket.", + "deleteCmd":"Elimina un ticket.", + "addCmd":"Aggiungi un utente al ticket.", + "removeCmd":"Rimuovi un utente da un ticket.", + "reopenCmd":"Ri-apri un ticket dopo averlo chiuso." + }, + "buttons":{ + "close":"Chiudi", + "delete":"Elimini", + "reopen":"Ri-apri un ticket", + "closeWithReason":"chiudi con motivo" + }, + "messages":{ + "reopenTitle":"Ticket ri-aperto!", + "reopenDescription":"Sentiti libero di parlare nuovamente!", + "closedTitle":"Ticket chiuso!", + "closedDescription":"Solo gli amministratori possono parlare in questo ticket ora!\n\n*Clicca sul pulsante sotto per eliminare o ri-aprire questo ticket!*", + "createdTitle":"Ticket creato!", + "createdDescription":"Il tuo ticket è stato creato, puoi capirlo dal ping!", + + "newTicketDmTitle":"Nuovo ticket!", + "closedTicketDmTitle":"Ticket chiuso!", + "deletedTicketDmTitle":"Ticket eliminato!", + "closedTicketDmDescription":"Il tuo ticket è chiuso!", + "deletedTicketDmDescription":"Il tuo ticket è eliminato!", + "reopenTicketDmTitle":"Ticket ri-aperto!", + "reopenTicketDmDescription":"Il tuo ticket è stato ri-aperto!", + + "chooseCategory":"scegli una categoria:", + "gettingdeleted":"Il ticket sta per essere chiuso...", + + "none":"nessuno", + "reason":"motivo", + + "deletedby":"eliminato da", + "closedby":"chiuso da", + "modalreason":"Quale è il motivo per chiudere questo ticket?", + "chooseATicket": "Scegli un ticket" + }, + "transcripts":{ + "title":"Trascrizione", + "processed":"Questo ticket sta per essere processato", + "wait":"Perfavore attendi!", + "estimated":"Tempo estimato", + "available":"La trascrizione è disponibile qui" + } } \ No newline at end of file diff --git a/language/spanish.json b/language/spanish.json index 04b6cd6..3eb617f 100644 --- a/language/spanish.json +++ b/language/spanish.json @@ -1,87 +1,87 @@ -{ - "errors":{ - "missingArgsTitle":"¡Argumentos inválidos!", - "missingArgsDescription":"Argumento faltante.", - "noPermsTitle":"¡Sin permisos!", - "noPermsDescription":"Necesitas el permiso de `ADMINISTRADOR` o estar en la lista de roles permitidos!", - "noPermsDelete":"Solo los administradores pueden eliminar un ticket.!", - "chooseFromListTitle":"ID Invalida", - "chooseFromListDescription":"Elije una de las ID de abajo:", - "boterror":"¡Error del bot!", - "notInTicketTitle":"¡No te encuentras en un ticket!", - "notInTicketDescription":"¡Este comando no funciona fuera de los tickets!", - "ticketDoesntExist":"¡Este ticket no existe!", - "roleDoesntExist":"¡Este rol no existe!", - "anotherOption":"¡Esta opción no es un ticket, si no otra cosa!", - "maxAmountTitle":"¡Máxima cantidad alcanzada!", - "maxAmountDescription":"¡Has alcanzado la máxima cantidad de tickets permitida!\n¡Por lo que no puedes crear otro!", - "somethingWentWrong":"**¡Algo salió mal!**\n¡Prueba dentro de un rato!" - }, - "commands":{ - "userAddedTitle":"Se agregó {0} al ticket!", - "userRemovedTitle":"Se eliminó {0} del ticket!", - "renameTitle":"Cambió el nombre a {0}!", - "closeTitle":"Cerró este ticket!", - "deleteTitle":"Eliminando este ticket...", - "reopenTitle":"Re-abrió este boleto!", - "claimTitle":"This ticket is now claimed to {0}", - "unclaimTitle":"This ticket isn't claimed anymore!", - "changeTitle":"Changed ticket type to {0}!", - - "ticketWarning":"La inserción está en el mensaje a continuación!", - "maxTicketWarning":"**Advertencia:** _Solo puedes crear {0} ticket(s) a la vez!_" - }, - "helpMenu":{ - "title":"Comandos disponibles:", - "header1":"**¡Dirígete a {0} para crear un nuevo ticket!**\n\n", - "header2":"**¡Ejecuta el comando `/new` o `/ticket` para crear un ticket!**\n\n", - - "msgCmd":"Generar un embed con botones. (Solo admins)", - "renameCmd":"Renombrar un ticket. (Sin espacios)", - "closeCmd":"Cerrar un ticket.", - "deleteCmd":"Eliminar un ticket.", - "addCmd":"Agregar un usuario al ticket.", - "removeCmd":"Eliminar un usuario del ticket.", - "reopenCmd":"Re-Abre un ticket después de que este se vea cerrado." - }, - "buttons":{ - "close":"Cerrar ticket.", - "delete":"Eliminar ticket", - "reopen":"Re-Abrir ticket", - "closeWithReason":"cerrar con razón" - }, - "messages":{ - "reopenTitle":"¡Ticket Re-Abierto!", - "reopenDescription":"¡Siéntete libre de hablar de nuevo!", - "closedTitle":"¡Ticket cerrado!", - "closedDescription":"¡Solo admins pueden hablar ahora en este ticket!\n\n*¡Presiona en el botón de abajo para eliminar o re-abrir el ticket!*", - "createdTitle":"¡Ticket creado!", - "createdDescription":"¡Ticket creado, también te he mencionado en él!", - - "newTicketDmTitle":"¡Nuevo ticket!", - "closedTicketDmTitle":"¡Ticket cerrado!", - "deletedTicketDmTitle":"¡Ticket eliminado!", - "closedTicketDmDescription":"¡Tu ticket fué cerrado!", - "deletedTicketDmDescription":"¡Tu ticket fué eliminado!", - "reopenTicketDmTitle":"¡Ticket re-abierto!", - "reopenTicketDmDescription":"¡Tu ticket se vió abierto de nuevo!", - - "chooseCategory":"Elije una categoría:", - "gettingdeleted":"El ticket se está viendo eliminado...", - - "none":"Ninguna.", - "reason":"Razón", - - "deletedby":"eliminado por", - "closedby":"cerrado por", - "modalreason":"Cúal es la razón para cerrar este ticket?", - "chooseATicket": "Elije un ticket" - }, - "transcripts":{ - "title":"Transcript", - "processed":"This transcript is being processed", - "wait":"Please wait!", - "estimated":"Estimated time", - "available":"The transcript is available here" - } +{ + "errors":{ + "missingArgsTitle":"¡Argumentos inválidos!", + "missingArgsDescription":"Argumento faltante.", + "noPermsTitle":"¡Sin permisos!", + "noPermsDescription":"Necesitas el permiso de `ADMINISTRADOR` o estar en la lista de roles permitidos!", + "noPermsDelete":"Solo los administradores pueden eliminar un ticket.!", + "chooseFromListTitle":"ID Invalida", + "chooseFromListDescription":"Elije una de las ID de abajo:", + "boterror":"¡Error del bot!", + "notInTicketTitle":"¡No te encuentras en un ticket!", + "notInTicketDescription":"¡Este comando no funciona fuera de los tickets!", + "ticketDoesntExist":"¡Este ticket no existe!", + "roleDoesntExist":"¡Este rol no existe!", + "anotherOption":"¡Esta opción no es un ticket, si no otra cosa!", + "maxAmountTitle":"¡Máxima cantidad alcanzada!", + "maxAmountDescription":"¡Has alcanzado la máxima cantidad de tickets permitida!\n¡Por lo que no puedes crear otro!", + "somethingWentWrong":"**¡Algo salió mal!**\n¡Prueba dentro de un rato!" + }, + "commands":{ + "userAddedTitle":"Se agregó {0} al ticket!", + "userRemovedTitle":"Se eliminó {0} del ticket!", + "renameTitle":"Cambió el nombre a {0}!", + "closeTitle":"Cerró este ticket!", + "deleteTitle":"Eliminando este ticket...", + "reopenTitle":"Re-abrió este boleto!", + "claimTitle":"Este ticket será atendido por {0}", + "unclaimTitle":"¡Este ticket ya no está reservado!", + "changeTitle":"¡Cambiando el tipo de ticket a {0}!", + + "ticketWarning":"La inserción está en el mensaje a continuación!", + "maxTicketWarning":"**Advertencia:** _Solo puedes crear {0} ticket(s) a la vez!_" + }, + "helpMenu":{ + "title":"Comandos disponibles:", + "header1":"**¡Dirígete a {0} para crear un nuevo ticket!**\n\n", + "header2":"**¡Ejecuta el comando `/new` o `/ticket` para crear un ticket!**\n\n", + + "msgCmd":"Generar un embed con botones. (Solo admins)", + "renameCmd":"Renombrar un ticket. (Sin espacios)", + "closeCmd":"Cerrar un ticket.", + "deleteCmd":"Eliminar un ticket.", + "addCmd":"Agregar un usuario al ticket.", + "removeCmd":"Eliminar un usuario del ticket.", + "reopenCmd":"Re-Abre un ticket después de que este se vea cerrado." + }, + "buttons":{ + "close":"Cerrar ticket.", + "delete":"Eliminar ticket", + "reopen":"Re-Abrir ticket", + "closeWithReason":"cerrar con razón" + }, + "messages":{ + "reopenTitle":"¡Ticket Re-Abierto!", + "reopenDescription":"¡Siéntete libre de hablar de nuevo!", + "closedTitle":"¡Ticket cerrado!", + "closedDescription":"¡Solo admins pueden hablar ahora en este ticket!\n\n*¡Presiona en el botón de abajo para eliminar o re-abrir el ticket!*", + "createdTitle":"¡Ticket creado!", + "createdDescription":"¡Ticket creado, también te he mencionado en él!", + + "newTicketDmTitle":"¡Nuevo ticket!", + "closedTicketDmTitle":"¡Ticket cerrado!", + "deletedTicketDmTitle":"¡Ticket eliminado!", + "closedTicketDmDescription":"¡Tu ticket fué cerrado!", + "deletedTicketDmDescription":"¡Tu ticket fué eliminado!", + "reopenTicketDmTitle":"¡Ticket re-abierto!", + "reopenTicketDmDescription":"¡Tu ticket se vió abierto de nuevo!", + + "chooseCategory":"Elije una categoría:", + "gettingdeleted":"El ticket se está viendo eliminado...", + + "none":"Ninguna.", + "reason":"Razón", + + "deletedby":"eliminado por", + "closedby":"cerrado por", + "modalreason":"Cúal es la razón para cerrar este ticket?", + "chooseATicket": "Elije un ticket" + }, + "transcripts":{ + "title":"Transcripción", + "processed":"La transcripción del ticket está siendo procesada...", + "wait":"¡Por favor, espere!", + "estimated":"Tiempo estimado", + "available":"La transcripción estará disponible aquí" + } } \ No newline at end of file diff --git a/transcriptconfig.json b/transcriptconfig.json index 9fd2f33..c7c536b 100644 --- a/transcriptconfig.json +++ b/transcriptconfig.json @@ -2,6 +2,7 @@ "sendTranscripts":{ "enableChannel":false, "channel":"transcript channel id", + "useHTMLtranscripts":true, "enableDM":false },