From 6b32fc9d5d2e65288b13be094b2580314c55fb67 Mon Sep 17 00:00:00 2001 From: DJj123dj <80536295+DJj123dj@users.noreply.github.com> Date: Tue, 26 Jul 2022 12:25:33 +0200 Subject: [PATCH] v2.4.0 push 1 --- README.md | 6 +-- commands/add.js | 21 +++++---- commands/close.js | 3 ++ commands/delete.js | 21 +++++---- commands/remove.js | 21 +++++---- commands/rename.js | 19 ++++---- commands/reopen.js | 3 ++ commands/ticket.js | 19 ++++---- config.json | 2 +- core/utils/permisssionChecker.js | 76 ++++++++++++++++++++++++++++++++ package.json | 2 +- 11 files changed, 134 insertions(+), 59 deletions(-) create mode 100644 core/utils/permisssionChecker.js diff --git a/README.md b/README.md index 9a9fe41..ef34e4c 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.3%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v2.3.3) [![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.4.0%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v2.4.0) [![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.3) +[click here to view](https://www.github.com/DJj123dj/open-ticket/wiki/config-v2.4.0) ### 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,7 +74,7 @@ You can also configure your own permissions ## information -_v2.3.3 stable_ +_v2.4.0 stable_ changelog: [click here](https://www.github.com/DJj123dj/open-ticket/wiki/Changelog) diff --git a/commands/add.js b/commands/add.js index 8bdccd5..b4232f3 100644 --- a/commands/add.js +++ b/commands/add.js @@ -4,6 +4,7 @@ const client = bot.client const config = bot.config const log = bot.errorLog.log const l = bot.language +const permsChecker = require("../core/utils/permisssionChecker") module.exports = () => { client.on("messageCreate",msg => { @@ -11,12 +12,9 @@ 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("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ - try { - return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) - }catch{ - return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) - } + if (!msg.guild) return + if (!permsChecker.command(msg.author.id,msg.guild.id)){ + permsChecker.sendUserNoPerms(msg.author) } msg.channel.messages.fetchPinned().then(msglist => { @@ -39,11 +37,12 @@ module.exports = () => { if (interaction.commandName != "add") return 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 permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("ManageGuild")){ - interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) - return - } + if (!interaction.guild) return + if (!permsChecker.command(interaction.user.id,interaction.guild.id)){ + permsChecker.sendUserNoPerms(interaction.user) + } + + interaction.deferReply() interaction.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() diff --git a/commands/close.js b/commands/close.js index be19429..81be348 100644 --- a/commands/close.js +++ b/commands/close.js @@ -4,6 +4,7 @@ const client = bot.client const config = bot.config const log = bot.errorLog.log const l = bot.language +const permsChecker = require("../core/utils/permisssionChecker") module.exports = () => { client.on("messageCreate",msg => { @@ -37,6 +38,8 @@ module.exports = () => { if (!interaction.isChatInputCommand()) return if (interaction.commandName != "close") return + interaction.deferReply() + interaction.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() diff --git a/commands/delete.js b/commands/delete.js index 199f678..5b9f603 100644 --- a/commands/delete.js +++ b/commands/delete.js @@ -4,17 +4,15 @@ const client = bot.client const config = bot.config const log = bot.errorLog.log const l = bot.language +const permsChecker = require("../core/utils/permisssionChecker") module.exports = () => { client.on("messageCreate",msg => { if (!msg.content.startsWith(config.prefix+"delete")) return - if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ - try { - return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) - }catch{ - return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) - } + if (!msg.guild) return + if (!permsChecker.command(msg.author.id,msg.guild.id)){ + permsChecker.sendUserNoPerms(msg.author) } msg.channel.messages.fetchPinned().then(msglist => { @@ -44,11 +42,12 @@ module.exports = () => { if (!interaction.isChatInputCommand()) 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("ManageGuild")){ - interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) - return - } + interaction.deferReply() + + if (!interaction.guild) return + if (!permsChecker.command(interaction.user.id,interaction.guild.id)){ + permsChecker.sendUserNoPerms(interaction.user) + } interaction.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() diff --git a/commands/remove.js b/commands/remove.js index ce38a4f..8754dab 100644 --- a/commands/remove.js +++ b/commands/remove.js @@ -4,6 +4,7 @@ const client = bot.client const config = bot.config const log = bot.errorLog.log const l = bot.language +const permsChecker = require("../core/utils/permisssionChecker") module.exports = () => { client.on("messageCreate",msg => { @@ -11,14 +12,13 @@ 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("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ - try { - return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) - }catch{ - return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) - } + if (!msg.guild) return + if (!permsChecker.command(msg.author.id,msg.guild.id)){ + permsChecker.sendUserNoPerms(msg.author) } + interaction.deferReply() + msg.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() @@ -40,11 +40,10 @@ module.exports = () => { if (interaction.commandName != "remove") return 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 permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("ManageGuild")){ - interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) - return - } + if (!interaction.guild) return + if (!permsChecker.command(interaction.user.id,interaction.guild.id)){ + permsChecker.sendUserNoPerms(interaction.user) + } diff --git a/commands/rename.js b/commands/rename.js index 370d0e4..0509ceb 100644 --- a/commands/rename.js +++ b/commands/rename.js @@ -4,6 +4,7 @@ const client = bot.client const config = bot.config const log = bot.errorLog.log const l = bot.language +const permsChecker = require("../core/utils/permisssionChecker") module.exports = () => { client.on("messageCreate",msg => { @@ -14,12 +15,9 @@ module.exports = () => { if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) - if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ - try { - return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) - }catch{ - return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) - } + if (!msg.guild) return + if (!permsChecker.command(msg.author.id,msg.guild.id)){ + permsChecker.sendUserNoPerms(msg.author) } var newname = msg.content.split(config.prefix+"rename")[1].substring(1) @@ -52,15 +50,16 @@ module.exports = () => { if (!interaction.isChatInputCommand()) return if (interaction.commandName != "rename") return + interaction.deferReply() + interaction.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() 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 permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("ManageGuild")){ - interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) - return + if (!interaction.guild) return + if (!permsChecker.command(interaction.user.id,interaction.guild.id)){ + permsChecker.sendUserNoPerms(interaction.user) } var newname = interaction.options.getString("name") diff --git a/commands/reopen.js b/commands/reopen.js index b1af86a..3940182 100644 --- a/commands/reopen.js +++ b/commands/reopen.js @@ -4,6 +4,7 @@ const client = bot.client const config = bot.config const log = bot.errorLog.log const l = bot.language +const permsChecker = require("../core/utils/permisssionChecker") module.exports = () => { var reopenCommandBar = new discord.ActionRowBuilder() @@ -35,6 +36,8 @@ module.exports = () => { if (!interaction.isChatInputCommand()) return if (interaction.commandName != "reopen") return + interaction.deferReply() + interaction.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() diff --git a/commands/ticket.js b/commands/ticket.js index 1586d28..a381ee3 100644 --- a/commands/ticket.js +++ b/commands/ticket.js @@ -4,6 +4,7 @@ const client = bot.client const config = bot.config const log = bot.errorLog.log const l = bot.language +const permsChecker = require("../core/utils/permisssionChecker") module.exports = () => { /**@type {String[]} */ @@ -16,12 +17,9 @@ module.exports = () => { client.on("messageCreate", msg => { if (msg.content.startsWith(config.prefix+"msg"||config.prefix+"message")){ - if (!msg.member.permissions.has("ManageChannels") && !msg.member.permissions.has("Administrator") && config.main_adminroles.some((item)=>{return msg.member.roles.cache.has(item)}) == false){ - try { - return msg.member.send({embeds:[bot.errorLog.noPermsMessage]}) - }catch{ - return msg.channel.send({embeds:[bot.errorLog.noPermsMessage]}) - } + if (!msg.guild) return + if (!permsChecker.command(msg.author.id,msg.guild.id)){ + permsChecker.sendUserNoPerms(msg.author) } const id = msg.content.split(config.prefix+"msg")[1].substring(1) ? msg.content.split(config.prefix+"msg")[1].substring(1) : false @@ -42,11 +40,10 @@ module.exports = () => { if (!interaction.isChatInputCommand()) 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 permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("ManageGuild")){ - interaction.reply({embeds:[bot.errorLog.noPermsMessage],ephemeral:true}) - return - } + if (!interaction.guild) return + if (!permsChecker.command(interaction.user.id,interaction.guild.id)){ + permsChecker.sendUserNoPerms(interaction.user) + } const id = interaction.options.getString("id") diff --git a/config.json b/config.json index e4465fd..9dd5158 100644 --- a/config.json +++ b/config.json @@ -79,7 +79,7 @@ "name":"Choose Your Ticket", "description":"You can click one of the buttons below!", "enableFooter":false, - "footer":"Open Ticket v2.3.3 - I'm a footer!", + "footer":"Open Ticket v2.4.0 - I'm a footer!", "enableThumbnail":false, "thumbnail":"https://www.example.com/catmemes/cat.png", "color":"#ffffff", diff --git a/core/utils/permisssionChecker.js b/core/utils/permisssionChecker.js new file mode 100644 index 0000000..7ae2d02 --- /dev/null +++ b/core/utils/permisssionChecker.js @@ -0,0 +1,76 @@ +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 + +/** + * + * @param {String} memberid + * @param {String} guildid + * @returns {Boolean} has permissions? + */ +exports.command = (memberid,guildid) => { + const permsmember = client.guilds.cache.find(g => g.id == guildid).members.cache.find(m => m.id == memberid) + if (config.main_adminroles.some((item)=>{return permsmember.roles.cache.has(item)}) == false && !permsmember.permissions.has("Administrator") && !permsmember.permissions.has("ManageGuild")){ + return false + }else {return true} +} + +/** + * + * @param {discord.User} user + * @returns {Boolean} + */ +exports.sendUserNoPerms = (user) => { + try { + user.send({embeds:[bot.errorLog.noPermsMessage]}) + return true + }catch{ + return false + } +} + +/** + * + * @param {discord.User} user + * @returns {Boolean} + */ + exports.sendUserNoTicket = (user) => { + try { + user.send({embeds:[bot.errorLog.notInATicket]}) + return true + }catch{ + return false + } +} + +/** + * + * @param {discord.TextChannel} channel + * @returns {Boolean} + */ + exports.sendChannelNoPerms = (channel) => { + try { + channel.send({embeds:[bot.errorLog.noPermsMessage]}) + return true + }catch{ + return false + } +} + +/** + * + * @param {discord.TextChannel} channel + * @returns {Boolean} + */ + exports.sendChannelNoTicket = (channel) => { + try { + channel.send({embeds:[bot.errorLog.notInATicket]}) + return true + }catch{ + return false + } +} diff --git a/package.json b/package.json index b9a475c..7d41951 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-ticket", - "version": "2.3.3", + "version": "2.4.0", "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": {