diff --git a/commands/add.js b/commands/add.js index 0b37e29..6d59abd 100644 --- a/commands/add.js +++ b/commands/add.js @@ -11,7 +11,7 @@ module.exports = () => { var user = msg.mentions.users.first() if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"add `")]}) - if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR")){ + if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) } @@ -36,8 +36,8 @@ module.exports = () => { const user = interaction.options.getUser("user") const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return interaction.guild.members.cache.find((m) => m.id == interaction.member.id).roles.cache.has(item)}) == false && permsmember.permissions.has("ADMINISTRATOR")){ - interaction.reply({embeds:[bot.errorLog.noPermsMessage]}) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) return } diff --git a/commands/delete.js b/commands/delete.js index 706581a..e3d8dc5 100644 --- a/commands/delete.js +++ b/commands/delete.js @@ -9,6 +9,9 @@ module.exports = () => { client.on("messageCreate",msg => { if (!msg.content.startsWith(config.prefix+"delete")) return + if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ + return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + } msg.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() @@ -37,6 +40,12 @@ module.exports = () => { if (!interaction.isCommand()) return if (interaction.commandName != "delete") return + const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) + return + } + interaction.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() diff --git a/commands/remove.js b/commands/remove.js index 737a614..a60d9d1 100644 --- a/commands/remove.js +++ b/commands/remove.js @@ -11,7 +11,7 @@ module.exports = () => { var user = msg.mentions.users.first() if (!user) return msg.channel.send({embeds:[bot.errorLog.invalidArgsMessage(l.errors.missingArgsDescription+" ``:\n`"+config.prefix+"remove `")]}) - if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR")){ + if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) } @@ -37,8 +37,8 @@ module.exports = () => { const user = interaction.options.getUser("user") const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return interaction.guild.members.cache.find((m) => m.id == interaction.member.id).roles.cache.has(item)}) == false && permsmember.permissions.has("ADMINISTRATOR")){ - interaction.reply({embeds:[bot.errorLog.noPermsMessage]}) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) return } diff --git a/commands/rename.js b/commands/rename.js index 84f3cd5..364ee1c 100644 --- a/commands/rename.js +++ b/commands/rename.js @@ -13,9 +13,8 @@ module.exports = () => { var firstmsg = msglist.last() if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) - - if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR")){ + if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) } @@ -55,8 +54,8 @@ module.exports = () => { if (firstmsg == undefined || firstmsg.author.id != client.user.id)return interaction.reply({embeds:[bot.errorLog.notInATicket]}) const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return interaction.guild.members.cache.find((m) => m.id == interaction.member.id).roles.cache.has(item)}) == false && permsmember.permissions.has("ADMINISTRATOR")){ - interaction.reply({embeds:[bot.errorLog.noPermsMessage]}) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) return } diff --git a/commands/ticket.js b/commands/ticket.js index 5f31171..d175368 100644 --- a/commands/ticket.js +++ b/commands/ticket.js @@ -15,9 +15,9 @@ module.exports = () => { client.on("messageCreate", msg => { if (msg.content.startsWith(config.prefix+"msg"||config.prefix+"message")){ - if (config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ - msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) - return + + if (!msg.member.permissions.has("MANAGE_CHANNELS") && !msg.member.permissions.has("ADMINISTRATOR") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ + return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) } const id = msg.content.split(config.prefix+"msg")[1].substring(1) ? msg.content.split(config.prefix+"msg")[1].substring(1) : false @@ -38,11 +38,11 @@ module.exports = () => { if (!interaction.isCommand()) return if (interaction.commandName != "message") return - const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) - if (config.main_adminroles.some((item)=>{return interaction.guild.members.cache.find((m) => m.id == interaction.member.id).roles.cache.has(item)}) == false && permsmember.permissions.has("ADMINISTRATOR")){ - interaction.reply({embeds:[bot.errorLog.noPermsMessage]}) - return - } + const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) + return + } const id = interaction.options.getString("id") diff --git a/config.json b/config.json index 31ed4dd..2c1fa3e 100644 --- a/config.json +++ b/config.json @@ -21,6 +21,7 @@ "has@everyoneaccess":false, "member_role":"member role (doesn't have access to tickets)", + "closeMode":"adminonly|normal", "enable_transcript":false, "enable_DM_transcript":false, diff --git a/core/checker.js b/core/checker.js index 51bd22f..e74dae8 100644 --- a/core/checker.js +++ b/core/checker.js @@ -188,7 +188,9 @@ exports.checker = async () => { //category checkType(option.category,"string",path+"/category") - checkDiscord("categoryid",option.category,path+"/category") + if (option.category.length > 0){ + checkDiscord("categoryid",option.category,path+"/category") + } //message checkType(option.message,"string",path+"/message") diff --git a/core/closebuttons.js b/core/closebuttons.js index 100e496..cec9b40 100644 --- a/core/closebuttons.js +++ b/core/closebuttons.js @@ -136,6 +136,15 @@ module.exports = () => { if (interaction.customId != "closeTicketTrue") return interaction.deferUpdate() + + if (config.system.closeMode == "adminonly"){ + const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + return + } + } + interaction.message.edit({components:[closeRowDisabled]}) /** @@ -158,6 +167,15 @@ module.exports = () => { if (interaction.customId != "closeTicketTrue1") return interaction.deferUpdate() + + if (config.system.closeMode == "adminonly"){ + const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + return + } + } + const closedButtonDisabled = new discord.MessageActionRow() .addComponents([ new discord.MessageButton() @@ -210,6 +228,12 @@ module.exports = () => { interaction.deferUpdate() + const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + return + } + /** * @type {String} */ @@ -250,6 +274,12 @@ module.exports = () => { interaction.deferUpdate() + const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + return + } + /** * @type {String} */ diff --git a/core/ticketCloser.js b/core/ticketCloser.js index 468a74f..8a8baa4 100644 --- a/core/ticketCloser.js +++ b/core/ticketCloser.js @@ -15,6 +15,7 @@ const storage = bot.storage exports.closeTicket = async (interaction,prefix,mode) => { const chalk = await (await import("chalk")).default const channelmessages = await interaction.channel.messages.fetch() + const channel = interaction.channel channelmessages.sweep((msgSweep) => { return msgSweep.author.id == client.user.id @@ -42,11 +43,46 @@ exports.closeTicket = async (interaction,prefix,mode) => { var enableTranscript = true if (mode == "delete"){ + const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + return + } + interaction.channel.delete() log("system","deleted a ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name}]) if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1) + + //getID & send DM + interaction.channel.messages.fetchPinned().then(msglist => { + var firstmsg = msglist.last() + + if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false + + if (!firstmsg.embeds[0].author) return false + const id = firstmsg.embeds[0].author.name + + if (!id) return false + + try{ + if (config.system.enable_DM_Messages){ + interaction.member.send({embeds:[bot.errorLog.custom(l.messages.deletedTicketDmTitle,l.messages.deletedTicketDmDescription,":ticket:",config.main_color)]}) + } + } + catch{log("system","can't send DM to member, member doesn't allow dm's")} + }) + }else if (mode == "close"){ + + if (config.system.closeMode == "adminonly"){ + const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + return + } + } + var permissionArray = [] if (!isDatabaseError) permissionArray.push({ id:getusernameStep1.id, @@ -98,18 +134,62 @@ exports.closeTicket = async (interaction,prefix,mode) => { log("system","closed a ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name}]) + //getID & send DM + interaction.channel.messages.fetchPinned().then(msglist => { + var firstmsg = msglist.last() + + if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false + + const id = firstmsg.embeds[0].author.name + + if (!id) return false + + try{ + if (config.system.enable_DM_Messages){ + interaction.member.send({embeds:[bot.errorLog.custom(l.messages.closedTicketDmTitle,l.messages.closedTicketDmDescription,":ticket:",config.main_color)]}) + } + } + catch{log("system","can't send DM to member, member doesn't allow dm's")} + }) + + }else if (mode == "deletenotranscript"){ + + const permsmember = client.guilds.cache.find(g => g.id == interaction.guild.id).members.cache.find(m => m.id == interaction.member.id) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("ADMINISTRATOR") && !permsmember.permissions.has("MANAGE_GUILD")){ + interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + return + } + enableTranscript = false interaction.channel.delete() log("system","deleted a ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name}]) if (!isDatabaseError) storage.set("ticketStorage",getuserID,Number(storage.get("ticketStorage",getuserID)) - 1) + + //getID & send DM + interaction.channel.messages.fetchPinned().then(msglist => { + var firstmsg = msglist.last() + + if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false + + const id = firstmsg.embeds[0].author.name + + if (!id) return false + + try{ + if (config.system.enable_DM_Messages){ + interaction.member.send({embeds:[bot.errorLog.custom(l.messages.deletedTicketDmTitle,l.messages.deletedTicketDmDescription,":ticket:",config.main_color)]}) + } + } + catch{log("system","can't send DM to member, member doesn't allow dm's")} + }) } if (enableTranscript == true && mode != "deletenotranscript"){ if (config.system.enable_transcript || config.system.enable_DM_transcript){ - var fileattachment = await require("./transcript").createTranscript(channelmessages) + var fileattachment = await require("./transcript").createTranscript(channelmessages,channel) if (fileattachment == false){log("system","internal error: transcript is not created!");return} } @@ -156,7 +236,7 @@ exports.runThis = () => { return msgSweep.author.id == client.user.id }) - var fileattachment = await require("./transcript").createTranscript(channelmessages) + var fileattachment = await require("./transcript").createTranscript(channelmessages,interaction.channel) if (fileattachment == false){ log("system","internal error: transcript is not created!") diff --git a/core/ticketOpener.js b/core/ticketOpener.js index 3cf050d..f7438a8 100644 --- a/core/ticketOpener.js +++ b/core/ticketOpener.js @@ -151,6 +151,7 @@ module.exports = () => { storage.set("userTicketStorage",ticketChannel.id,interaction.member.id) var ticketEmbed = new discord.MessageEmbed() + .setAuthor({name:interaction.user.id}) .setColor(config.main_color) .setTitle(currentTicketOptions.name) if (currentTicketOptions.ticketmessage.length > 0) ticketEmbed.setDescription(currentTicketOptions.ticketmessage) diff --git a/core/ticketReopener.js b/core/ticketReopener.js index 755ab09..af7a886 100644 --- a/core/ticketReopener.js +++ b/core/ticketReopener.js @@ -223,7 +223,23 @@ module.exports = () => { }) interaction.channel.permissionOverwrites.set(permissionsArray) + + //getID & send DM + interaction.channel.messages.fetchPinned().then(msglist => { + var firstmsg = msglist.last() + + if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false + + const id = firstmsg.embeds[0].author.name + + if (!id) return false + + try{ + if (config.system.enable_DM_Messages){ + interaction.member.send({embeds:[bot.errorLog.custom(l.messages.reopenTicketDmTitle,l.messages.reopenTicketDmDescription,":ticket:",config.main_color)]}) + } + } + catch{log("system","can't send DM to member, member doesn't allow dm's")} + }) }) - - } \ No newline at end of file diff --git a/core/transcript.js b/core/transcript.js index 1ffe463..e1a9308 100644 --- a/core/transcript.js +++ b/core/transcript.js @@ -4,19 +4,54 @@ const client = bot.client const config = bot.config const l = bot.language +/** @param {discord.TextBasedChannel} channel @returns {Promise<{ticketname:String,ticketopener:{discordjsuser:discord.User,name:String,id:String}>} */ +const getUserInfo = (channel) => { + return new Promise((promiseresolve,reject) => { + //getID + var result = { + ticketopener:{ + discordjsuser:"", + id:"/", + name:"/" + }, + ticketname:"/" + } + channel.messages.fetchPinned().then(msglist => { + var firstmsg = msglist.last() + + if (firstmsg == undefined || firstmsg.author.id != client.user.id) return false + + const id = firstmsg.embeds[0].author.name ? firstmsg.embeds[0].author.name : false + + result.ticketopener.id = id + + const ticketopener = client.users.cache.find(u => u.id == id) + const name = ticketopener.tag + + const channelname = channel.name + + promiseresolve({ticketname:channelname,ticketopener:{discordjsuser:ticketopener,name:name,id:id}}) + }) + }) +} + /** * * @param {discord.Message[]} messagecollection + * @param {discord.Channel} channel * @returns new `discord.messageAttachment` */ -exports.createTranscript = async (messagecollection) => { +exports.createTranscript = async (messagecollection,channel) => { + const ticketuserdata = await getUserInfo(channel) try { - const filearray = ["TRANSCRIPT START:"] + 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.getSeconds()+":"+cd.getMinutes()+":"+cd.getHours() + const filearray = ["open ticket transcript:\ntranscript creation: "+dateString+"\nticket name: "+ticketuserdata.ticketname+"\nticket opener: "+ticketuserdata.ticketopener.name,"\nTRANSCRIPT START:"] messagecollection.reverse() - messagecollection.forEach((msg) => { const timestamp = new Date(msg.createdTimestamp) @@ -29,7 +64,7 @@ exports.createTranscript = async (messagecollection) => { if (filearray.length < 2) filearray.push("transcript is empty") const filestring = filearray.join("\n") const filebuff = Buffer.from(filestring,"utf-8") - return new discord.MessageAttachment(filebuff,"transcript.txt") + return new discord.MessageAttachment(filebuff,"transcript_"+ticketuserdata.ticketname+".txt") }catch(err){ console.log("[error] "+err) return false diff --git a/language/custom.json b/language/custom.json index 4109f2b..2816d86 100644 --- a/language/custom.json +++ b/language/custom.json @@ -64,6 +64,10 @@ "createdDescription":"Your ticket is created, you can detect it by a ping!", "newTicketDmTitle":"New Ticket!", + "closedTicketDmTitle":"Ticket Closed!", + "deletedTicketDmTitle":"Ticket Deleted!", + "closedTicketDmDescription":"Your ticket is closed!", + "deletedTicketDmDescription":"Your ticket is deleted!", "newTranscriptTitle":"A new transcript is here!", "newTranscriptDescription":"You can find the transcript in the text file above!", "hereIsTheTranscript":"Here is the transcript:", diff --git a/language/dutch.json b/language/dutch.json index 6d61cf3..2604cc5 100644 --- a/language/dutch.json +++ b/language/dutch.json @@ -30,7 +30,7 @@ "closeDescription":"Je kan dit ticket sluiten door op de knop hier onder te duwen!", "deleteTitle":"Verwijder dit ticket!", "deleteDescription":"Je kan dit ticket verwijderen door op de knop hier onder te duwen!", - "reopenTitle":"Heropen dit ticket ticket!", + "reopenTitle":"Heropen dit ticket!", "reopenDescription":"Je kan dit ticket heropenen door op de knop hier onder te duwen!", "ticketWarning":"De embed is in het bericht hier onder!", @@ -64,6 +64,12 @@ "createdDescription":"Je ticket is gemaakt, je kan het detecteren bij een ping!", "newTicketDmTitle":"Nieuw Ticket!", + "closedTicketDmTitle":"Ticket Gesloten!", + "deletedTicketDmTitle":"Ticket Verwijderd!", + "closedTicketDmDescription":"Je ticket is gesloten!", + "deletedTicketDmDescription":"Je ticket is verwijderd!", + "reopenTicketDmTitle":"Ticket Heropend!", + "reopenTicketDmDescription":"Je ticket is heropend!", "newTranscriptTitle":"Een nieuw transcript is hier!", "newTranscriptDescription":"Je kan het transcript vinden in het bestand hierboven!", "hereIsTheTranscript":"Hier is het transcript:", diff --git a/language/english.json b/language/english.json index 4109f2b..7c36997 100644 --- a/language/english.json +++ b/language/english.json @@ -64,6 +64,12 @@ "createdDescription":"Your ticket is created, you can detect it by a ping!", "newTicketDmTitle":"New Ticket!", + "closedTicketDmTitle":"Ticket Closed!", + "deletedTicketDmTitle":"Ticket Deleted!", + "closedTicketDmDescription":"Your ticket is closed!", + "deletedTicketDmDescription":"Your ticket is deleted!", + "reopenTicketDmTitle":"Ticket Re-opened!", + "reopenTicketDmDescription":"Your ticket is re-opened!", "newTranscriptTitle":"A new transcript is here!", "newTranscriptDescription":"You can find the transcript in the text file above!", "hereIsTheTranscript":"Here is the transcript:", diff --git a/language/romanian.json b/language/romanian.json index dc0cec2..a33d6a5 100644 --- a/language/romanian.json +++ b/language/romanian.json @@ -41,8 +41,8 @@ "header1":"**Deschide {0} pentru a creea un ticket!**\n\n", "header2":"**Ruleaza comanda `/new` ori `/ticket` pentru a creea un ticket!**\n\n", - "msgCmd":"Afiseaza embed-ul cu tickete. (admins only)", - "renameCmd":"Redenumeste un ticket. (no spaces)", + "msgCmd":"Afiseaza embed-ul cu tickete. (doar administratorii)", + "renameCmd":"Redenumeste un ticket. (fara spatii)", "closeCmd":"Redenumeste un ticket ticket.", "deleteCmd":"Sterge un ticket a ticket.", "addCmd":"adauga un utilizator la ticket.", @@ -64,6 +64,12 @@ "createdDescription":"Ticket-ul tau a fost creat, il poti vedea dupa mentionarea ta!", "newTicketDmTitle":"Ticket Nou!", + "closedTicketDmTitle":"Ticket închis!", + "deletedTicketDmTitle":"Ticket șters!", + "closedTicketDmDescription":"Ticket-ul tau este închis!", + "deletedTicketDmDescription":"Ticket-ul tau este șters!", + "reopenTicketDmTitle":"Ticket Re-deschis!", + "reopenTicketDmDescription":"Ticket-ul tau este re-deschis!", "newTranscriptTitle":"O noua copie a ticket-ului este aici!", "newTranscriptDescription":"Poti vedea copia ticket-ului in fisierul .txt de mai sus!", "hereIsTheTranscript":"Aceasta este copia ticket-ului:",