diff --git a/README.md b/README.md index aa1dcf8..d751cd1 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.2.0%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v2.2.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) +[![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.0%20stable-brightgreen.svg?style=flat-square)](https://github.com/DJj123dj/open-ticket/releases/tag/v2.3.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! @@ -61,7 +61,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.2.0) +[click here to view](https://www.github.com/DJj123dj/open-ticket/wiki/config-v2.3.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 @@ -73,7 +73,7 @@ You can also configure your own permissions ## information -_v2.2.0 stable_ +_v2.3.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 6d59abd..b34f8e7 100644 --- a/commands/add.js +++ b/commands/add.js @@ -31,7 +31,7 @@ module.exports = () => { }) client.on("interactionCreate",(interaction) => { - if (!interaction.isCommand()) return + if (!interaction.isChatInputCommand()) return if (interaction.commandName != "add") return const user = interaction.options.getUser("user") @@ -41,7 +41,6 @@ module.exports = () => { return } - interaction.channel.messages.fetchPinned().then(msglist => { var firstmsg = msglist.last() diff --git a/commands/close.js b/commands/close.js index 1a4eb0a..be19429 100644 --- a/commands/close.js +++ b/commands/close.js @@ -15,12 +15,12 @@ module.exports = () => { if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) - const closebutton = new discord.MessageActionRow() + const closebutton = new discord.ActionRowBuilder() .addComponents([ - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("closeTicketTrue1") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("🔒") ]) @@ -34,7 +34,7 @@ module.exports = () => { }) client.on("interactionCreate",(interaction) => { - if (!interaction.isCommand()) return + if (!interaction.isChatInputCommand()) return if (interaction.commandName != "close") return interaction.channel.messages.fetchPinned().then(msglist => { @@ -42,12 +42,12 @@ module.exports = () => { if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]}) - const closebutton = new discord.MessageActionRow() + const closebutton = new discord.ActionRowBuilder() .addComponents([ - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("closeTicketTrue1") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("🔒") ]) diff --git a/commands/delete.js b/commands/delete.js index e3d8dc5..a1a1bf9 100644 --- a/commands/delete.js +++ b/commands/delete.js @@ -18,12 +18,12 @@ module.exports = () => { if (firstmsg == undefined || firstmsg.author.id != client.user.id) return msg.channel.send({embeds:[bot.errorLog.notInATicket]}) - const closebutton = new discord.MessageActionRow() + const closebutton = new discord.ActionRowBuilder() .addComponents([ - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicketTrue") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("❌") ]) @@ -37,7 +37,7 @@ module.exports = () => { }) client.on("interactionCreate",(interaction) => { - if (!interaction.isCommand()) return + 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) @@ -51,12 +51,12 @@ module.exports = () => { if (firstmsg == undefined || firstmsg.author.id != client.user.id) return interaction.reply({embeds:[bot.errorLog.notInATicket]}) - const closebutton = new discord.MessageActionRow() + const closebutton = new discord.ActionRowBuilder() .addComponents([ - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicketTrue") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("❌") ]) diff --git a/commands/help.js b/commands/help.js index 50e06ab..5c925b0 100644 --- a/commands/help.js +++ b/commands/help.js @@ -6,7 +6,7 @@ const log = bot.errorLog.log const l = bot.language module.exports = () => { - const helpEmbed = new discord.MessageEmbed() + const helpEmbed = new discord.EmbedBuilder() .setColor(config.main_color) .setTitle(l.helpMenu.title) @@ -35,7 +35,7 @@ module.exports = () => { }) client.on("interactionCreate",(interaction) => { - if (!interaction.isCommand()) return + if (!interaction.isChatInputCommand()) return if (interaction.commandName != "help") return interaction.reply({embeds:[helpEmbed]}) diff --git a/commands/remove.js b/commands/remove.js index a60d9d1..2fcf35d 100644 --- a/commands/remove.js +++ b/commands/remove.js @@ -32,7 +32,7 @@ module.exports = () => { }) client.on("interactionCreate",(interaction) => { - if (!interaction.isCommand()) return + if (!interaction.isChatInputCommand()) return if (interaction.commandName != "remove") return const user = interaction.options.getUser("user") diff --git a/commands/rename.js b/commands/rename.js index 364ee1c..d957e1a 100644 --- a/commands/rename.js +++ b/commands/rename.js @@ -45,7 +45,7 @@ module.exports = () => { }) client.on("interactionCreate",(interaction) => { - if (!interaction.isCommand()) return + if (!interaction.isChatInputCommand()) return if (interaction.commandName != "rename") return interaction.channel.messages.fetchPinned().then(msglist => { diff --git a/commands/reopen.js b/commands/reopen.js index 87273a0..b1af86a 100644 --- a/commands/reopen.js +++ b/commands/reopen.js @@ -6,12 +6,12 @@ const log = bot.errorLog.log const l = bot.language module.exports = () => { - var reopenCommandBar = new discord.MessageActionRow() + var reopenCommandBar = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("reopenTicket1") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("🔓") ) @@ -32,7 +32,7 @@ module.exports = () => { }) client.on("interactionCreate",(interaction) => { - if (!interaction.isCommand()) return + if (!interaction.isChatInputCommand()) return if (interaction.commandName != "reopen") return interaction.channel.messages.fetchPinned().then(msglist => { diff --git a/commands/ticket.js b/commands/ticket.js index d175368..5980784 100644 --- a/commands/ticket.js +++ b/commands/ticket.js @@ -35,7 +35,7 @@ module.exports = () => { }) client.on("interactionCreate", (interaction) => { - if (!interaction.isCommand()) return + 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) diff --git a/config.json b/config.json index 4108d9f..eea4dab 100644 --- a/config.json +++ b/config.json @@ -79,7 +79,7 @@ "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.2.0 - I'm a footer!", + "footer":"Open Ticket v2.3.0 - 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 131f7d2..37aa14d 100644 --- a/core/checker.js +++ b/core/checker.js @@ -252,14 +252,8 @@ exports.checker = async () => { } }) - - checkType(config.bot_name,"string","bot_name") - if (config.main_color.startsWith("#")){ - checkHexColor(config.main_color,"main_color") - }else{ - checkEmbedColor(config.main_color,"main_color") - } + checkHexColor(config.main_color,"main_color") checkDiscord("serverid",config.server_id,"server_id") checkToken(config.auth_token) checkDiscordArray("roleid",config.main_adminroles,"main_adminroles") @@ -267,7 +261,7 @@ exports.checker = async () => { //languagefile checkType(config.languagefile,"string","languagefile") const lf = config.languagefile - if (!lf.startsWith("custom") && !lf.startsWith("english") && !lf.startsWith("dutch") && !lf.startsWith("romanian") && !lf.startsWith("german") && !lf.startsWith("arabic")){ + if (!lf.startsWith("custom") && !lf.startsWith("english") && !lf.startsWith("dutch") && !lf.startsWith("romanian") && !lf.startsWith("german") && !lf.startsWith("arabic") && !lf.startsWith("spanish")){ createError("'languagefile' | invalid language, more info in the wiki") } diff --git a/core/closebuttons.js b/core/closebuttons.js index cec9b40..06643c1 100644 --- a/core/closebuttons.js +++ b/core/closebuttons.js @@ -7,109 +7,109 @@ const l = bot.language module.exports = () => { //closebar - var closeBar = new discord.MessageActionRow() + var closeBar = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("closeTicketTrue") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("✅") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("closeTicketFalse") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("❌") ) - var deleteBar = new discord.MessageActionRow() + var deleteBar = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicketTrue") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("✅") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicketFalse") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("❌") ) - var deleteBar1 = new discord.MessageActionRow() + var deleteBar1 = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicketTrue1") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("✅") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicketFalse1") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("❌") ) //closebutton - var closeRowNormal = new discord.MessageActionRow() + var closeRowNormal = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("closeTicket") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setLabel(l.buttons.close) .setEmoji("🔒") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicket") .setDisabled(false) - .setStyle("DANGER") + .setStyle(discord.ButtonStyle.Danger) .setLabel(l.buttons.delete) .setEmoji("✖️") ) - var closeRowClosed = new discord.MessageActionRow() + var closeRowClosed = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicket1") .setDisabled(false) - .setStyle("DANGER") + .setStyle(discord.ButtonStyle.Danger) .setLabel(l.buttons.delete) .setEmoji("✖️") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("sendTranscript") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setLabel(l.buttons.sendTranscript) .setEmoji("📄") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("reopenTicket") .setDisabled(false) - .setStyle("SUCCESS") + .setStyle(discord.ButtonStyle.Success) .setLabel(l.buttons.reopen) .setEmoji("✔") ) - var closeRowDisabled = new discord.MessageActionRow() + var closeRowDisabled = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("closeTicket") .setDisabled(true) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setLabel(l.buttons.close) .setEmoji("🔒") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicket") .setDisabled(true) - .setStyle("DANGER") + .setStyle(discord.ButtonStyle.Danger) .setLabel(l.buttons.delete) .setEmoji("✖️") ) @@ -176,12 +176,12 @@ module.exports = () => { } } - const closedButtonDisabled = new discord.MessageActionRow() + const closedButtonDisabled = new discord.ActionRowBuilder() .addComponents([ - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("closeTicketTrue1") .setDisabled(true) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("🔒") ]) interaction.message.edit({components:[closedButtonDisabled]}) diff --git a/core/errorLogSystem.js b/core/errorLogSystem.js index c9476f9..8fa8833 100644 --- a/core/errorLogSystem.js +++ b/core/errorLogSystem.js @@ -7,17 +7,18 @@ const l = bot.language const loadChalk = async () => { return await (await import("chalk")).default } -const embed = discord.MessageEmbed +const embed = discord.EmbedBuilder +const c = discord.Colors exports.noPermsMessage = new embed() - .setColor("RED") + .setColor(c.Red) .setTitle(":x: "+l.errors.noPermsTitle+" :x:") .setDescription(l.errors.noPermsDescription) /**@param {String} message */ exports.invalidArgsMessage = (message) => { var x = new embed() - .setColor("RED") + .setColor(c.Red) .setTitle(":x: "+l.errors.missingArgsTitle+" :x:") .setDescription(message) @@ -27,7 +28,7 @@ exports.invalidArgsMessage = (message) => { /**@param {String} message */ exports.serverError = (message) => { var x = new embed() - .setColor("ORANGE") + .setColor(c.Orange) .setTitle(":warning: "+l.errors.boterror+" :warning:") .setDescription(message) @@ -37,14 +38,14 @@ exports.serverError = (message) => { /**@param {String[]} list */ exports.invalidIdChooseFromList = (list) => { var x = new embed() - .setColor("RED") + .setColor(c.Red) .setTitle(":x: "+l.errors.chooseFromListTitle+" :x:") .setDescription(l.errors.chooseFromListDescription+"\n`"+list.join("`\n`")+"`") return x } exports.notInATicket = new embed() - .setColor("RED") + .setColor(c.Red) .setTitle(":x: "+l.errors.notInTicketTitle+" :x:") .setDescription(l.errors.notInTicketDescription) @@ -62,7 +63,7 @@ exports.success = (title,message) => { /**@param {String} message @param {String} title */ exports.warning = (title,message) => { var x = new embed() - .setColor("ORANGE") + .setColor(c.Orange) .setTitle(":warning: "+title+" :warning:") .setDescription(message) diff --git a/core/languageManager.js b/core/languageManager.js index f1f59f9..9e5f103 100644 --- a/core/languageManager.js +++ b/core/languageManager.js @@ -13,6 +13,7 @@ else if (config.languagefile.startsWith("german")) localLanguage = require("../l else if (config.languagefile.startsWith("french")) localLanguage = require("../language/french.json") else if (config.languagefile.startsWith("romanian")) localLanguage = require("../language/romanian.json") else if (config.languagefile.startsWith("arabic")) localLanguage = require("../language/arabic.json") +else if (config.languagefile.startsWith("spanish")) localLanguage = require("../language/spanish.json") const errorLog = async () => { const chalk = await (await import("chalk")).default diff --git a/core/slashSystem/slashDisable.js b/core/slashSystem/slashDisable.js index e89a254..6ed3fda 100644 --- a/core/slashSystem/slashDisable.js +++ b/core/slashSystem/slashDisable.js @@ -9,7 +9,7 @@ module.exports = async () => { console.log(chalk.red("\nINSTRUCTIONS:\n\n1: Run the command you want to delete in discord.\n2: You get the message 'This command is now deleted!'\n3: There is also a message in the console that says the command is deleted.\n4: reload your discord.")) client.on("interactionCreate",(interaction) => { - if (!interaction.isCommand()) return console.log("this isn't a command!") + if (!interaction.isChatInputCommand()) return console.log("this isn't a command!") interaction.reply({content:"This command is now deleted!"}) diff --git a/core/slashSystem/slashEnable.js b/core/slashSystem/slashEnable.js index 446de3d..2fa1510 100644 --- a/core/slashSystem/slashEnable.js +++ b/core/slashSystem/slashEnable.js @@ -4,6 +4,9 @@ const client = require("../../index").client const config = bot.config const getoptions = require("../getoptions") +const act = discord.ApplicationCommandType +const acot = discord.ApplicationCommandOptionType + module.exports = async () => { const chalk = (await import("chalk")).default const sid = config.server_id @@ -42,10 +45,10 @@ module.exports = async () => { name:"ticket", description:"Create a ticket!", defaultPermission:true, - type:"CHAT_INPUT", + type:act.ChatInput, options:[ { - type:"STRING", + type:acot.String, name:"type", description:"The type of ticket.", required:true, @@ -61,10 +64,10 @@ module.exports = async () => { name:"new", description:"Create a ticket!", defaultPermission:true, - type:"CHAT_INPUT", + type:act.ChatInput, options:[ { - type:"STRING", + type:acot.String, name:"type", description:"The type of ticket.", required:true, @@ -81,7 +84,7 @@ module.exports = async () => { name:"help", description:"The help menu", defaultPermission:true, - type:"CHAT_INPUT" + type:act.ChatInput },sid).then(() => { readystats++ @@ -92,7 +95,7 @@ module.exports = async () => { name:"close", description:"Close the current ticket.", defaultPermission:true, - type:"CHAT_INPUT" + type:act.ChatInput },sid).then(() => { readystats++ }) @@ -102,7 +105,7 @@ module.exports = async () => { name:"delete", description:"Delete the current ticket.", defaultPermission:true, - type:"CHAT_INPUT" + type:act.ChatInput },sid).then(() => { readystats++ }) @@ -112,14 +115,15 @@ module.exports = async () => { name:"message", description:"Create a ticket message.", defaultPermission:true, - type:"CHAT_INPUT", + type:act.ChatInput, options:[ { - type:"STRING", + type:acot.String, name:"id", description:"The message id.", required:true, - choices:msgchoices + choices:msgchoices, + max_length:30 } ] @@ -132,10 +136,10 @@ module.exports = async () => { name:"add", description:"Add people to this ticket.", defaultPermission:true, - type:"CHAT_INPUT", + type:act.ChatInput, options:[ { - type:"USER", + type:acot.User, name:"user", description:"The user to add.", required:true @@ -150,10 +154,10 @@ module.exports = async () => { name:"remove", description:"Remove people from this ticket.", defaultPermission:true, - type:"CHAT_INPUT", + type:act.ChatInput, options:[ { - type:"USER", + type:acot.User, name:"user", description:"The user to remove.", required:true @@ -168,10 +172,10 @@ module.exports = async () => { name:"rename", description:"Rename this ticket.", defaultPermission:true, - type:"CHAT_INPUT", + type:act.ChatInput, options:[ { - type:"STRING", + type:acot.String, name:"name", description:"The new name (without prefix).", required:true @@ -186,7 +190,7 @@ module.exports = async () => { name:"reopen", description:"Reopen this ticket.", defaultPermission:true, - type:"CHAT_INPUT" + type:act.ChatInput },sid).then(() => { readystats++ }) diff --git a/core/ticketCloser.js b/core/ticketCloser.js index 8a8baa4..140a151 100644 --- a/core/ticketCloser.js +++ b/core/ticketCloser.js @@ -100,33 +100,33 @@ exports.closeTicket = async (interaction,prefix,mode) => { interaction.channel.permissionOverwrites.set(permissionArray) //message - var closeButtonRow = new discord.MessageActionRow() + var closeButtonRow = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicket1") .setDisabled(false) - .setStyle("DANGER") + .setStyle(discord.ButtonStyle.Danger) .setLabel(l.buttons.delete) .setEmoji("✖️") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("sendTranscript") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setLabel(l.buttons.sendTranscript) .setEmoji("📄") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("reopenTicket") .setDisabled(false) - .setStyle("SUCCESS") + .setStyle(discord.ButtonStyle.Success) .setLabel(l.buttons.reopen) .setEmoji("✔") ) - const embed = new discord.MessageEmbed() + const embed = new discord.EmbedBuilder() .setColor(config.main_color) .setTitle(":lock: "+l.messages.closedTitle+" :lock:") .setDescription(l.messages.closedDescription) @@ -186,6 +186,7 @@ exports.closeTicket = async (interaction,prefix,mode) => { }) } + if (enableTranscript == true && mode != "deletenotranscript"){ if (config.system.enable_transcript || config.system.enable_DM_transcript){ @@ -195,7 +196,7 @@ exports.closeTicket = async (interaction,prefix,mode) => { } if (config.system.enable_transcript){ - const transcriptEmbed = new discord.MessageEmbed() + const transcriptEmbed = new discord.EmbedBuilder() .setColor(config.main_color) .setTitle(l.messages.newTranscriptTitle) .setAuthor({name:interaction.user.username,iconURL:interaction.user.displayAvatarURL({format:"png"})}) @@ -209,7 +210,7 @@ exports.closeTicket = async (interaction,prefix,mode) => { } if (config.system.enable_DM_transcript){ - const transcriptEmbed = new discord.MessageEmbed() + const transcriptEmbed = new discord.EmbedBuilder() .setColor(config.main_color) .setTitle(l.messages.newTranscriptTitle) .setDescription(l.messages.newTranscriptDescription) diff --git a/core/ticketMessageEmbed.js b/core/ticketMessageEmbed.js index ea9b3c3..d1e0e8b 100644 --- a/core/ticketMessageEmbed.js +++ b/core/ticketMessageEmbed.js @@ -8,7 +8,7 @@ const l = bot.language /** * * @param {String} id the id from an open-ticket embed - * @returns {{embed:discord.MessageEmbed,componentRows:discord.MessageActionRow[]}} discord embed + * @returns {{embed:discord.EmbedBuilder,componentRows:discord.MessageActionRow[]}} discord embed */ @@ -17,7 +17,7 @@ exports.createEmbed = (id) => { //----------------------------------- //general importing const data = require("./utils/getTicketMessages").getTicketMessage(id) - /**@type {discord.MessageButton[]}*/ + /**@type {discord.ButtonBuilder[]}*/ var buttons = [] /**@type {getButton.rawButtonData[]} */ var buttonData = [] @@ -32,7 +32,7 @@ exports.createEmbed = (id) => { //----------------------------------- //create the embed - const embed = new discord.MessageEmbed() + const embed = new discord.EmbedBuilder() .setColor(data.color) .setTitle(data.name) if (data.enableFooter) embed.setFooter({text:data.footer}) @@ -70,7 +70,7 @@ exports.createEmbed = (id) => { for (let i = AmountOfRows; i > 0; i--){ - componentRows.push(new discord.MessageActionRow()) + componentRows.push(new discord.ActionRowBuilder()) } buttons.forEach((button,index) => { @@ -86,7 +86,7 @@ exports.createEmbed = (id) => { //return everything /** - * @type {{embed:discord.MessageEmbed,componentRows:discord.MessageActionRow[]}} + * @type {{embed:discord.EmbedBuilder,componentRows:discord.MessageActionRow[]}} */ const returnedData = {embed:embed,componentRows:componentRows} return returnedData diff --git a/core/ticketOpener.js b/core/ticketOpener.js index 82ade6b..29d71bd 100644 --- a/core/ticketOpener.js +++ b/core/ticketOpener.js @@ -9,27 +9,27 @@ const getconfigoptions = require("./getoptions") const storage = bot.storage module.exports = () => { - var closeButton = new discord.MessageActionRow() + var closeButton = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("closeTicket") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setLabel(l.buttons.close) .setEmoji("🔒") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicket") .setDisabled(false) - .setStyle("DANGER") + .setStyle(discord.ButtonStyle.Danger) .setLabel(l.buttons.delete) .setEmoji("✖️") ) //ticket button click / create ticket client.on("interactionCreate",(interaction) => { - if (interaction.isCommand() && (interaction.commandName == "new" || interaction.commandName == "ticket")){ + if (interaction.isChatInputCommand() && (interaction.commandName == "new" || interaction.commandName == "ticket")){ var customId = "newT"+interaction.options.getString("type") }else if (interaction.isButton()){ var customId = interaction.customId @@ -54,7 +54,7 @@ module.exports = () => { if (interaction.isButton()){ interaction.deferUpdate() - }else if (interaction.isCommand()){ + }else if (interaction.isChatInputCommand()){ interaction.reply({embeds:[bot.errorLog.success(l.messages.createdTitle,l.messages.createdDescription)]}) } @@ -152,7 +152,7 @@ module.exports = () => { }).then((ticketChannel) => { storage.set("userTicketStorage",ticketChannel.id,interaction.member.id) - var ticketEmbed = new discord.MessageEmbed() + var ticketEmbed = new discord.EmbedBuilder() .setAuthor({name:interaction.user.id}) .setColor(config.main_color) .setTitle(currentTicketOptions.name) diff --git a/core/ticketReopener.js b/core/ticketReopener.js index af7a886..3af7c04 100644 --- a/core/ticketReopener.js +++ b/core/ticketReopener.js @@ -7,88 +7,88 @@ const l = bot.language const storage = bot.storage module.exports = () => { - var closeRowNormal = new discord.MessageActionRow() + var closeRowNormal = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("closeTicket") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setLabel(l.buttons.close) .setEmoji("🔒") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicket") .setDisabled(false) - .setStyle("DANGER") + .setStyle(discord.ButtonStyle.Danger) .setLabel(l.buttons.delete) .setEmoji("✖️") ) - var closeRowClosed = new discord.MessageActionRow() + var closeRowClosed = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("deleteTicket1") .setDisabled(false) - .setStyle("DANGER") + .setStyle(discord.ButtonStyle.Danger) .setLabel(l.buttons.delete) .setEmoji("✖️") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("sendTranscript") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setLabel(l.buttons.sendTranscript) .setEmoji("📄") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("reopenTicket") .setDisabled(false) - .setStyle("SUCCESS") + .setStyle(discord.ButtonStyle.Success) .setLabel(l.buttons.reopen) .setEmoji("✔") ) - var reopenBar = new discord.MessageActionRow() + var reopenBar = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("reopenTicketTrue") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("✅") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("reopenTicketFalse") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("❌") ) - var reopenBar1 = new discord.MessageActionRow() + var reopenBar1 = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("reopenTicketTrue1") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("✅") ) .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("reopenTicketFalse1") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("❌") ) - var reopenCommandBar = new discord.MessageActionRow() + var reopenCommandBar = new discord.ActionRowBuilder() .addComponents( - new discord.MessageButton() + new discord.ButtonBuilder() .setCustomId("reopenTicket1") .setDisabled(false) - .setStyle("SECONDARY") + .setStyle(discord.ButtonStyle.Secondary) .setEmoji("🔓") ) @@ -117,7 +117,7 @@ module.exports = () => { interaction.deferUpdate() - const embed = new discord.MessageEmbed() + const embed = new discord.EmbedBuilder() .setColor(config.main_color) .setTitle(":unlock: "+l.messages.reopenTitle+" :unlock:") .setDescription(l.messages.reopenDescription) @@ -184,7 +184,7 @@ module.exports = () => { interaction.deferUpdate() - const embed = new discord.MessageEmbed() + const embed = new discord.EmbedBuilder() .setColor(config.main_color) .setTitle(":unlock: "+l.messages.reopenTitle+" :unlock:") .setDescription(l.messages.reopenDescription) diff --git a/core/utils/getButton.js b/core/utils/getButton.js index 2223414..31ec447 100644 --- a/core/utils/getButton.js +++ b/core/utils/getButton.js @@ -6,19 +6,20 @@ const l = bot.language /**@returns {"DANGER"|"SUCCESS"|"PRIMARY"|"SECONDARY"} */ const getColor = (color) => { + const b = discord.ButtonStyle if (color.toLowerCase() == "red"){ - return "DANGER" + return b.Danger }else if (color.toLowerCase() == "green"){ - return "SUCCESS" + return b.Success }else if (color.toLowerCase() == "blue" || color.toLowerCase() == "blurple"){ - return "PRIMARY" + return b.Primary }else if (color.toLowerCase() == "black" || color.toLowerCase() == "gray" || color.toLowerCase() == "grey"){ - return "SECONDARY" + return b.Secondary }else if (color == "DANGER" || color == "SECONDARY" || color == "SUCCESS" || color == "PRIMARY"){ return color }else if (color.toLowerCase() == "none" || color.toLowerCase() == "false" || color.toLowerCase() == ""){ - return "SECONDARY" - }else return "SECONDARY" + return b.Secondary + }else return b.Secondary } const getOption = (id) => { @@ -29,13 +30,13 @@ exports.getOption = getOption /** * * @param {String} id - * @returns {discord.MessageButton|false} + * @returns {discord.ButtonBuilder|false} */ exports.getButton = (id) => { const option = getOption(id) if (!option) return false if (option.type == "ticket"){ - var button = new discord.MessageButton() + var button = new discord.ButtonBuilder() .setCustomId("newT"+option.id) .setDisabled(false) .setStyle(getColor(option.color)) @@ -45,9 +46,9 @@ exports.getButton = (id) => { if (!option.label && !option.icon){button.setLabel("no label or emoji")} }else if (option.type == "website"){ - var button = new discord.MessageButton() + var button = new discord.ButtonBuilder() .setDisabled(false) - .setStyle("LINK") + .setStyle(discord.ButtonStyle.Link) .setURL(option.url) if (option.label){button.setLabel(option.label)} @@ -55,7 +56,7 @@ exports.getButton = (id) => { if (!option.label && !option.icon){button.setLabel("no label or emoji")} }else if (option.type == "role"){ - var button = new discord.MessageButton() + var button = new discord.ButtonBuilder() .setCustomId("newR"+option.id) .setDisabled(false) .setStyle(getColor(option.color)) diff --git a/index.js b/index.js index 24c0863..7d42019 100644 --- a/index.js +++ b/index.js @@ -12,8 +12,18 @@ const discord = require('discord.js') const fs = require('fs') -const intents = discord.Intents -const client = new discord.Client({intents:[intents.FLAGS.GUILDS,intents.FLAGS.GUILD_MESSAGES,intents.FLAGS.GUILD_MEMBERS],partials:["CHANNEL"]}) +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] +}) exports.client = client client.setMaxListeners(30) @@ -42,6 +52,20 @@ exports.errorLog = require("./core/errorLogSystem") const log = this.errorLog.log client.on('ready',async () => { + var statusSet = false + const setStatus = (type,text) => { + if (statusSet == true) return + const getTypeEnum = (text) => { + if (text.toLowerCase() == "playing") return discord.ActivityType.Playing + else if (text.toLowerCase() == "listening") return discord.ActivityType.Listening + else if (text.toLowerCase() == "watching") return discord.ActivityType.Watching + else return discord.ActivityType.Listening + } + client.user.setActivity(text,{type:getTypeEnum(type)}) + statusSet = true + log("system","loaded status",[{key:"type",value:type},{key:"text",value:text}]) + } + const chalk = await (await import("chalk")).default if (!process.argv[2]){ @@ -50,7 +74,7 @@ client.on('ready',async () => { console.log(chalk.blue("\n\nlogs:")+"\n============") if (config.status.enabled){ - client.user.setActivity(config.status.text,{type:config.status.type}) + setStatus(config.status.type,config.status.text) } log("system","bot logged in!") @@ -59,13 +83,19 @@ client.on('ready',async () => { return } + if (process.argv[2] == "d"){ + if (config.status.enabled){ + setStatus(config.status.type,config.status.text) + } + } + if (!process.argv[2].startsWith("slash")){ console.log(chalk.red("WELCOME TO OPEN TICKET!")) log("info","open ticket ready",[{key:"version",value:require("./package.json").version},{key:"language",value:config.languagefile}]) console.log(chalk.blue("\n\nlogs:")+"\n============") if (config.status.enabled){ - client.user.setActivity(config.status.text,{type:config.status.type}) + setStatus(config.status.type,config.status.text) } log("system","bot logged in!") diff --git a/language/spanish.json b/language/spanish.json new file mode 100644 index 0000000..127c510 --- /dev/null +++ b/language/spanish.json @@ -0,0 +1,79 @@ +{ + "errors":{ + "missingArgsTitle":"¡Argumentos inválidos!", + "missingArgsDescription":"Argumento faltante.", + "noPermsTitle":"¡Sin permisos!", + "noPermsDescription":"¡No tienes permiso para usar este comando.!\n¡Necesitas el permiso `ADMINISTRATOR` permiso o tener uno de los roles permitidos!", + "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!", + "somethingWentWrongTranscript":"**¡Algo salió mal al hacer el transcript!**\n¡Prueba en otro momento!" + }, + "commands":{ + "userAddedTitle":"¡Usuario agregado!", + "userAddedDescription":"¡{0} fué agregado al ticket!", + "userRemovedTitle":"¡Usuario eliminado!", + "userRemovedDescription":"¡{0} fué eliminado del ticket!", + + "renameTitle":"¡El nombre fué cambiado!", + "renameWarning":"Aviso: Solo puedes cambiar el nombre 2 veces por minuto.\n(Esto es por limitaciones de Discord)", + + "closeTitle":"¡Cierra el ticket!", + "closeDescription":"¡Puedes cerrar el ticket con el botón de abajo!", + "deleteTitle":"¡Elimina el ticket!", + "deleteDescription":"¡Puedes eliminar el ticket con el botón de abajo!", + "reopenTitle":"¡Re-Abre el ticket!", + "reopenDescription":"¡Puedes re-abrir el ticket con el botón de abajo!", + + "ticketWarning":"¡El emblema está en el mensaje de abajo!", + "maxTicketWarning":"**Aviso:** _Solo puedes poseer {0} ticket(s) al mismo tiempo!_" + }, + "helpMenu":{ + "title":"Menú de ayuda:", + "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", + "sendTranscript":"Obtener transcript." + }, + "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!", + "newTranscriptTitle":"¡Un nuevo transcript está aquí!", + "newTranscriptDescription":"¡Puedes encontrar el transcript en el archivo de texto que se muestra arriba!", + "hereIsTheTranscript":"Aquí está el transcript:", + + "chooseCategory":"elije una categoría:" + } +} \ No newline at end of file diff --git a/package.json b/package.json index 45c8e37..ee2b307 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-ticket", - "version": "2.2.0", + "version": "2.3.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": { @@ -14,7 +14,7 @@ "license": "ISC", "dependencies": { "chalk": "^5.0.1", - "discord.js": "13.8.0", + "discord.js": "^14.0.2", "express": "^4.17.1", "node": "^16.10.0", "node-localstorage": "^2.2.1"