diff --git a/commands/reopen.js b/commands/reopen.js new file mode 100644 index 0000000..05b5fcf --- /dev/null +++ b/commands/reopen.js @@ -0,0 +1,60 @@ +const discord = require('discord.js') +const bot = require('../index') +const client = bot.client +const config = bot.config +const log = bot.errorLog.log + +module.exports = () => { + var reopenCommandBar = new discord.MessageActionRow() + .addComponents( + new discord.MessageButton() + .setCustomId("reopenTicket1") + .setDisabled(false) + .setStyle("SECONDARY") + .setEmoji("🔓") + ) + + client.on("messageCreate",msg => { + if (!msg.content.startsWith(config.prefix+"reopen")) return + + msg.channel.messages.fetchPinned().then(msglist => { + var firstmsg = msglist.last() + + if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) + + msg.channel.send({embeds:[bot.errorLog.success("Re-Open this ticket!","You can re-open this ticket by clicking on the button below!")],components:[reopenCommandBar]}) + + + log("command","someone used the 'reopen' command",[{key:"user",value:msg.author.tag}]) + }) + + }) + + client.on("interactionCreate",(interaction) => { + if (!interaction.isCommand()) return + 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 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 + } + + + 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]}) + + interaction.channel.permissionOverwrites.create(user.id, { VIEW_CHANNEL:true, ADD_REACTIONS:true,ATTACH_FILES:true, EMBED_LINKS:true, SEND_MESSAGES:true}) + interaction.reply({embeds:[bot.errorLog.success("User Added!",user.tag+" is added to this ticket")]}) + + var loguser = user + log("command","someone used the 'add' command",[{key:"user",value:interaction.user.tag}]) + log("system","user added to ticket",[{key:"user",value:interaction.user.tag},{key:"ticket",value:interaction.channel.name},{key:"added_user",value:loguser.tag}]) + }) + + + }) +} \ No newline at end of file diff --git a/core/slashSystem/slashEnable.js b/core/slashSystem/slashEnable.js index bef52fe..5fd1a48 100644 --- a/core/slashSystem/slashEnable.js +++ b/core/slashSystem/slashEnable.js @@ -26,11 +26,11 @@ module.exports = async () => { var readystats = 0 - process.stdout.write("[status] there are "+chalk.blue("0 out of 9")+" commands ready! (this can take up to 40 seconds)") + process.stdout.write("[status] there are "+chalk.blue("0 out of 10")+" commands ready! (this can take up to 40 seconds)") setInterval(() => { process.stdout.cursorTo(0) process.stdout.write("[status] there are "+chalk.blue(readystats+" out of 9")+" commands ready! (this can take up to 40 seconds)") - if (readystats >= 9){ + if (readystats >= 10){ console.log(chalk.green("\nready!")) console.log(chalk.bgBlue("you can now start the bot with 'npm start'!")) process.exit(1) @@ -181,4 +181,14 @@ module.exports = async () => { readystats++ }) + //rename + client.application.commands.create({ + name:"reopen", + description:"Reopen this ticket.", + defaultPermission:true, + type:"CHAT_INPUT" + },sid).then(() => { + readystats++ + }) + } \ No newline at end of file diff --git a/core/ticketReopener.js b/core/ticketReopener.js index 5e8b31b..26aa440 100644 --- a/core/ticketReopener.js +++ b/core/ticketReopener.js @@ -66,6 +66,33 @@ module.exports = () => { .setStyle("SECONDARY") .setEmoji("❌") ) + + var reopenBar1 = new discord.MessageActionRow() + .addComponents( + new discord.MessageButton() + .setCustomId("reopenTicketTrue1") + .setDisabled(false) + .setStyle("SECONDARY") + .setEmoji("✅") + ) + .addComponents( + new discord.MessageButton() + .setCustomId("reopenTicketFalse1") + .setDisabled(false) + .setStyle("SECONDARY") + .setEmoji("❌") + ) + + var reopenCommandBar = new discord.MessageActionRow() + .addComponents( + new discord.MessageButton() + .setCustomId("reopenTicket1") + .setDisabled(false) + .setStyle("SECONDARY") + .setEmoji("🔓") + ) + + //NORMAL WAY client.on("interactionCreate",(interaction) => { if (!interaction.isButton()) return if (interaction.customId != "reopenTicket") return @@ -98,5 +125,105 @@ module.exports = () => { interaction.message.edit({embeds:[embed],components:[closeRowNormal]}) log("system","re-opened a ticket",[{key:"ticket",value:interaction.channel.name},{key:"user",value:interaction.user.tag}]) + + + var permissionsArray = [] + + //set everyone allowed + if (config.system['has@everyoneaccess']){ + var everyoneAllowPerms = ["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"] + var everyoneDenyPerms = [] + }else{ + var everyoneAllowPerms = [] + var everyoneDenyPerms = ["VIEW_CHANNEL"] + } + permissionsArray.push({ + id:interaction.guild.id, + type:"role", + allow:everyoneAllowPerms, + deny:everyoneDenyPerms + }) + + interaction.channel.permissionOverwrites.cache.forEach((p) => { + if (p.type == "member"){ + permissionsArray.push({ + id:p.id, + type:"member", + allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"], + deny:[] + }) + } + }) + + interaction.channel.permissionOverwrites.set(permissionsArray) }) + + + //COMMAND WAY + client.on("interactionCreate",(interaction) => { + if (!interaction.isButton()) return + if (interaction.customId != "reopenTicket1") return + + interaction.deferUpdate() + interaction.message.edit({components:[reopenBar1]}) + + }) + + client.on("interactionCreate",(interaction) => { + if (!interaction.isButton()) return + if (interaction.customId != "reopenTicketFalse1") return + + interaction.deferUpdate() + interaction.message.edit({components:[reopenCommandBar]}) + + }) + + client.on("interactionCreate",(interaction) => { + if (!interaction.isButton()) return + if (interaction.customId != "reopenTicketTrue1") return + + interaction.deferUpdate() + + const embed = new discord.MessageEmbed() + .setColor(config.main_color) + .setTitle(":unlock: Re-Opened this ticket! :unlock:") + .setDescription("Feel free to talk again!") + + interaction.message.edit({content:null,embeds:[embed],components:[closeRowNormal]}) + + log("system","re-opened a ticket",[{key:"ticket",value:interaction.channel.name},{key:"user",value:interaction.user.tag}]) + + + var permissionsArray = [] + + //set everyone allowed + if (config.system['has@everyoneaccess']){ + var everyoneAllowPerms = ["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"] + var everyoneDenyPerms = [] + }else{ + var everyoneAllowPerms = [] + var everyoneDenyPerms = ["VIEW_CHANNEL"] + } + permissionsArray.push({ + id:interaction.guild.id, + type:"role", + allow:everyoneAllowPerms, + deny:everyoneDenyPerms + }) + + interaction.channel.permissionOverwrites.cache.forEach((p) => { + if (p.type == "member"){ + permissionsArray.push({ + id:p.id, + type:"member", + allow:["ADD_REACTIONS","ATTACH_FILES","EMBED_LINKS","SEND_MESSAGES","VIEW_CHANNEL"], + deny:[] + }) + } + }) + + interaction.channel.permissionOverwrites.set(permissionsArray) + }) + + } \ No newline at end of file diff --git a/index.js b/index.js index 5af9262..b4cd986 100644 --- a/index.js +++ b/index.js @@ -4,7 +4,7 @@ const intents = discord.Intents const client = new discord.Client({intents:[intents.FLAGS.GUILDS,intents.FLAGS.GUILD_MESSAGES,intents.FLAGS.GUILD_MEMBERS],partials:["CHANNEL"]}) exports.client = client -client.setMaxListeners(20) +client.setMaxListeners(25) if (process.argv[2]){ if (process.argv[2].endsWith("d")){ @@ -75,6 +75,7 @@ if (process.argv[2] && !process.argv[2].startsWith("slash")){ require("./commands/rename")() require("./commands/add")() require("./commands/remove")() + require("./commands/reopen")() //core require('./core/ticketOpener')()