diff --git a/README.md b/README.md index 30aef22..014ec09 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ make a ticket in our server to start! *if you translate, you will come in the credits* # open-ticket -[![discord](https://img.shields.io/badge/discord-join%20our%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![version](https://img.shields.io/badge/version-2.3.1%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v2.3.1) [![npm](https://img.shields.io/badge/npm-external%20libraries%20needed-CB3837.svg?style=flat-square&logo=npm)](#packages) [![license](https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) +[![discord](https://img.shields.io/badge/discord-join%20our%20server-5865F2.svg?style=flat-square&logo=discord)](https://discord.com/invite/26vT9wt3n3) [![version](https://img.shields.io/badge/version-2.3.2%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v2.3.2) [![npm](https://img.shields.io/badge/npm-external%20libraries%20needed-CB3837.svg?style=flat-square&logo=npm)](#packages) [![license](https://img.shields.io/badge/license-GPL%203.0-important.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/blob/main/LICENSE) This is an open-source discord ticket bot, you can configure it and it comes with cool features like transcripts & custom options! @@ -62,7 +62,7 @@ if there are any errors, you can open an **issue on github** or **contact me in ### config Our config documentation is moved to another file: -[click here to view](https://www.github.com/DJj123dj/open-ticket/wiki/config-v2.3.1) +[click here to view](https://www.github.com/DJj123dj/open-ticket/wiki/config-v2.3.2) ### intents & permissions In the discord developer portal in the "bot" panel you will find 3 switches under the title "Gateaway Intents". The following switches should always be turned on @@ -74,11 +74,8 @@ You can also configure your own permissions ## information -_v2.3.1 stable_ +_v2.3.2 stable_ changelog: [click here](https://www.github.com/DJj123dj/open-ticket/wiki/Changelog) -© 2022 - DJdj Development | [website](https://www.dj-dj.be) | [discord](https://discord.com/invite/26vT9wt3n3) - -### large announcement: -[![open moderation](./openmod.png)](https://www.dj-dj.be/projects/open-moderation) \ No newline at end of file +© 2022 - DJdj Development | [website](https://www.dj-dj.be) | [discord](https://discord.com/invite/26vT9wt3n3) \ No newline at end of file diff --git a/commands/add.js b/commands/add.js index b34f8e7..08d9fb3 100644 --- a/commands/add.js +++ b/commands/add.js @@ -12,7 +12,11 @@ module.exports = () => { 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") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ - return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + try { + return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) + }catch{ + return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + } } msg.channel.messages.fetchPinned().then(msglist => { diff --git a/commands/delete.js b/commands/delete.js index a1a1bf9..91e5bfa 100644 --- a/commands/delete.js +++ b/commands/delete.js @@ -10,7 +10,11 @@ module.exports = () => { 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]}) + try { + return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) + }catch{ + return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + } } msg.channel.messages.fetchPinned().then(msglist => { diff --git a/commands/remove.js b/commands/remove.js index 2fcf35d..002e29d 100644 --- a/commands/remove.js +++ b/commands/remove.js @@ -12,7 +12,11 @@ module.exports = () => { 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") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ - return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + try { + return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) + }catch{ + return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + } } msg.channel.messages.fetchPinned().then(msglist => { diff --git a/commands/rename.js b/commands/rename.js index d957e1a..45bc168 100644 --- a/commands/rename.js +++ b/commands/rename.js @@ -15,7 +15,11 @@ module.exports = () => { 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") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ - return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + try { + return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) + }catch{ + return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + } } var newname = msg.content.split(config.prefix+"rename")[1].substring(1) diff --git a/commands/ticket.js b/commands/ticket.js index 5980784..530e0f5 100644 --- a/commands/ticket.js +++ b/commands/ticket.js @@ -17,7 +17,11 @@ module.exports = () => { if (msg.content.startsWith(config.prefix+"msg"||config.prefix+"message")){ 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]}) + try { + return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) + }catch{ + 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 diff --git a/config.json b/config.json index 3f36002..5cc3bb5 100644 --- a/config.json +++ b/config.json @@ -77,9 +77,9 @@ { "id":"1", "name":"Choose Your Ticket", - "description":"You can click one of the buttons below!\nYou can also customize all the embeds now!", - "enableFooter":true, - "footer":"Open Ticket v2.3.1 - I'm a footer!", + "description":"You can click one of the buttons below!", + "enableFooter":false, + "footer":"Open Ticket v2.3.2 - I'm a footer!", "enableThumbnail":false, "thumbnail":"https://www.example.com/catmemes/cat.png", "color":"#ffffff", diff --git a/core/checker.js b/core/checker.js index 37aa14d..4a31ebd 100644 --- a/core/checker.js +++ b/core/checker.js @@ -342,6 +342,4 @@ exports.checker = async () => { console.log("=> "+chalk.bgYellow("if you ignore warns, some things may work differently than expected!")) } -} - -this.checker() \ No newline at end of file +} \ No newline at end of file diff --git a/core/closebuttons.js b/core/closebuttons.js index 06643c1..c48dd52 100644 --- a/core/closebuttons.js +++ b/core/closebuttons.js @@ -140,8 +140,11 @@ module.exports = () => { 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 + try { + return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) + }catch{ + return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + } } } @@ -171,8 +174,11 @@ module.exports = () => { 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 + try { + return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]}) + }catch{ + return interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + } } } @@ -230,8 +236,11 @@ module.exports = () => { 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 + try { + return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]}) + }catch{ + return interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + } } /** @@ -276,8 +285,11 @@ module.exports = () => { 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 + try { + return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]}) + }catch{ + return interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + } } /** diff --git a/core/reactionRoles.js b/core/reactionRoles.js index 651d2d5..83c0bf9 100644 --- a/core/reactionRoles.js +++ b/core/reactionRoles.js @@ -21,42 +21,43 @@ module.exports = async () => { interaction.reply({embeds:[bot.errorLog.serverError(l.errors.roleDoesntExist)]}) return } - } - try { - const option = require("./utils/getButton").getOption(optionid) - /**@type {"add"|"remove"|"add&remove"} */ - const mode = option.mode - const user = interaction.member - - if (mode == "add"){ - option.roles.forEach((role) => { - interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role) + try { - log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}]) - }) - }else if (mode == "remove"){ - option.roles.forEach((role) => { - interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role) + const option = require("./utils/getButton").getOption(optionid) + /**@type {"add"|"remove"|"add&remove"} */ + const mode = option.mode + const user = interaction.member - log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}]) - }) - }else if (mode == "add&remove"){ - option.roles.forEach((role) => { - if (interaction.guild.members.cache.find(u => u.id == user.id).roles.cache.has(role)){ - interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role) - - log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}]) - }else { - interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role) - - log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}]) + if (mode == "add"){ + option.roles.forEach((role) => { + interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role) + + log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}]) + }) + }else if (mode == "remove"){ + option.roles.forEach((role) => { + interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role) + + log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}]) + }) + }else if (mode == "add&remove"){ + option.roles.forEach((role) => { + if (interaction.guild.members.cache.find(u => u.id == user.id).roles.cache.has(role)){ + interaction.guild.members.cache.find(u => u.id == user.id).roles.remove(role) + + log("system","added role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}]) + }else { + interaction.guild.members.cache.find(u => u.id == user.id).roles.add(role) + + log("system","removed role (reaction roles)",[{key:"user",value:interaction.user.tag},{key:"role",value:role}]) + } + }) } - }) - } - - }catch{ - interaction.replyinteraction.channel.send({embeds:[bot.errorLog.serverError(l.errors.somethingWentWrong)]}) + + }catch{ + interaction.channel.send({embeds:[bot.errorLog.serverError(l.errors.somethingWentWrong)]}) + } } }) } \ No newline at end of file diff --git a/core/ticketCloser.js b/core/ticketCloser.js index ec99f11..4bb2aca 100755 --- a/core/ticketCloser.js +++ b/core/ticketCloser.js @@ -46,8 +46,11 @@ exports.closeTicket = async (interaction,prefix,mode) => { 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 + try { + return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]}) + }catch{ + return interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + } } deleteRequired = true interaction.channel.send({content:"**"+l.messages.gettingdeleted+"**"}) @@ -79,8 +82,11 @@ exports.closeTicket = async (interaction,prefix,mode) => { 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 + try { + return interaction.member.send({embeds:[bot.errorLog.noPermsMessage]}) + }catch{ + return interaction.channel.send({embeds:[bot.errorLog.noPermsMessage]}) + } } } @@ -228,6 +234,10 @@ exports.closeTicket = async (interaction,prefix,mode) => { } if (deleteRequired){ + const timer = () => {return new Promise((resolve,reject) => { + setTimeout(() => {resolve(true)},7000) + })} + await timer() interaction.channel.delete() } } diff --git a/core/ticketReopener.js b/core/ticketReopener.js index 4e57739..55d002d 100755 --- a/core/ticketReopener.js +++ b/core/ticketReopener.js @@ -244,4 +244,46 @@ module.exports = () => { catch{log("system","can't send DM to member, member doesn't allow dm's")} }) }) + + //DASHBOARD (comming soon!) + /** + * + * @param {discord.Guild} guild + * @param {discord.TextBasedChannel} channel + * @param {discord.User} user + * @returns + */ + const reopenTicket = (guild,channel,user) => { + log("system","re-opened a ticket",[{key:"ticket",value:channel.name},{key:"user",value:user.tag}]) + + var permissionsArray = [] + + //set everyone allowed + if (config.system['has@everyoneaccess']){ + var everyoneAllowPerms = [pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel] + var everyoneDenyPerms = [] + }else{ + var everyoneAllowPerms = [] + var everyoneDenyPerms = [pfb.ViewChannel] + } + permissionsArray.push({ + id:guild.roles.everyone, + type:"role", + allow:everyoneAllowPerms, + deny:everyoneDenyPerms + }) + + channel.permissionOverwrites.cache.forEach((p) => { + if (p.type == "member"){ + permissionsArray.push({ + id:p.id, + type:"member", + allow:[pfb.AddReactions,pfb.AttachFiles,pfb.EmbedLinks,pfb.SendMessages,pfb.ViewChannel], + deny:[] + }) + } + }) + + channel.permissionOverwrites.set(permissionsArray) + } } \ No newline at end of file diff --git a/language/arabic.json b/language/arabic.json index 9d30d8b..b48c61e 100644 --- a/language/arabic.json +++ b/language/arabic.json @@ -14,8 +14,8 @@ "anotherOption":"هذا الخيار ليس تذكرة بل نوع آخر!", "maxAmountTitle":"بلغ الحد الأقصى!", "maxAmountDescription":"لقد وصلت إلى الحد الأقصى لعدد التذاكر المسموح بها!\nلذلك لا يمكنك إنشاء واحدة جديدة!", - "somethingWentWrong":"هناك خطأ ما!**\nالرجاء المحاولة مرة أخرى!", - "somethingWentWrongTranscript":"حدث خطأ ما أثناء كتابة النص!**\nالرجاء المحاولة مرة أخرى!" + "somethingWentWrong":"**هناك خطأ ما!**\nالرجاء المحاولة مرة أخرى!", + "somethingWentWrongTranscript":"**حدث خطأ ما أثناء كتابة النص!**\nالرجاء المحاولة مرة أخرى!" }, "commands":{ "userAddedTitle":"تمت إضافة المستخدم!", @@ -75,6 +75,6 @@ "hereIsTheTranscript":"هذا هو النص:", "chooseCategory":"اختر فئة:", - "gettingdeleted":"Ticket is getting deleted..." + "gettingdeleted":"...يتم حذف التذكرة" } } \ No newline at end of file diff --git a/language/custom.json b/language/custom.json index 963520c..530d5bf 100644 --- a/language/custom.json +++ b/language/custom.json @@ -14,7 +14,7 @@ "anotherOption":"This option is not a ticket but another type!", "maxAmountTitle":"Max amount reached!", "maxAmountDescription":"You reached the maximum number of tickets allowed!\nSo you can't create a new one!", - "somethingWentWrong":"Something went wrong!**\nPlease try again another time!", + "somethingWentWrong":"**Something went wrong!**\nPlease try again another time!", "somethingWentWrongTranscript":"Something went wrong while making the transcript!**\nPlease try again another time!" }, "commands":{ diff --git a/language/dutch.json b/language/dutch.json index 42e3ffc..952ec39 100644 --- a/language/dutch.json +++ b/language/dutch.json @@ -14,7 +14,7 @@ "anotherOption":"Deze optie is geen ticket maar een ander type!", "maxAmountTitle":"Max aantal bereikt!", "maxAmountDescription":"Je hebt het maximum aantal openstaande ticket bereikt!\nDus je kan er geen nieuwe maken!", - "somethingWentWrong":"Iets ging fout!**\nProbeer een andere keer opnieuw!", + "somethingWentWrong":"**Iets ging fout!**\nProbeer een andere keer opnieuw!", "somethingWentWrongTranscript":"Iets ging fout bij het maken van het transcript!**\nProbeer een andere keer opnieuw!" }, "commands":{ diff --git a/language/english.json b/language/english.json index 963520c..530d5bf 100644 --- a/language/english.json +++ b/language/english.json @@ -14,7 +14,7 @@ "anotherOption":"This option is not a ticket but another type!", "maxAmountTitle":"Max amount reached!", "maxAmountDescription":"You reached the maximum number of tickets allowed!\nSo you can't create a new one!", - "somethingWentWrong":"Something went wrong!**\nPlease try again another time!", + "somethingWentWrong":"**Something went wrong!**\nPlease try again another time!", "somethingWentWrongTranscript":"Something went wrong while making the transcript!**\nPlease try again another time!" }, "commands":{ diff --git a/language/french.json b/language/french.json index 5b10cdb..d8843e3 100644 --- a/language/french.json +++ b/language/french.json @@ -14,7 +14,7 @@ "anotherOption":"Cette option n'est pas un ticket mais un autre type !", "maxAmountTitle":"Montant max atteint !", "maxAmountDescription":"Vous avez atteint le nombre maximum de tickets autorisés !\nVous ne pouvez donc pas en créer un nouveau !", - "somethingWentWrong":"Une erreur s'est produite !**\nVeuillez réessayer une autre fois !", + "somethingWentWrong":"**Une erreur s'est produite !**\nVeuillez réessayer une autre fois !", "somethingWentWrongTranscript":"Une erreur s'est produite lors de la création de la transcription !**\nVeuillez réessayer une autre fois !" }, "commands":{ diff --git a/language/german.json b/language/german.json index 7086bf3..f4b99b2 100644 --- a/language/german.json +++ b/language/german.json @@ -14,7 +14,7 @@ "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!", + "somethingWentWrong":"**Etwas ist schief gelaufen!**\nBitte versuchen Sie es ein anderes Mal!", "somethingWentWrongTranscript":"Bei der Erstellung der Transcript ist etwas schief gelaufen!**\nBitte versuchen Sie es ein anderes Mal!" }, "commands":{ diff --git a/openmod.png b/openmod.png deleted file mode 100644 index 9217e72..0000000 Binary files a/openmod.png and /dev/null differ diff --git a/package.json b/package.json index 5db266b..1d7e479 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-ticket", - "version": "2.3.1", + "version": "2.3.2", "description": "This is an open-source discord ticket bot, you can configure it and it comes with cool features like a transcript.", "main": "index.js", "scripts": {