diff --git a/LISENCE b/LISENCE new file mode 100644 index 0000000..d6d94db --- /dev/null +++ b/LISENCE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2022, Sobhan-SRZA(Mr.SIN RE#1528) & Persian Caesar +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git "a/commands/Help \360\237\206\230/help.js" "b/commands/Help \360\237\206\230/help.js" index d7de4b8..a33829f 100644 --- "a/commands/Help \360\237\206\230/help.js" +++ "b/commands/Help \360\237\206\230/help.js" @@ -30,12 +30,12 @@ module.exports = { .setColor(client.colors.none) .setDescription(`**this embed show you bot commands and categorys.**`) .addField(`Commands[\`${client.commands.size}\`] & SlashCommands[\`${client.slashCommands.size}\`] Categories `,`${'**' + client.categories.map(i => '`' + i + '`').join(' , ') + '**'}`,false) - .addField(`Help 🆘 [${client.commands.filter(c => c.category === 'Help 🆘').size}]`,`This category of commands is to request help from bot founders and see all bot commands.`,false) - .addField(`Infos 📊 [${client.commands.filter(c => c.category === 'Infos 📊').size}]`,`Using these commands, you can get the information you want about the bot.`,false) - .addField(`Setup 💻 [${client.commands.filter(c => c.category === 'Setup 💻').size}]`,`Using these bot commands, you can configure the bot on your server.\nThese commands are for server admins only.`,false) - .addField(`Ticket 🎫 [${client.commands.filter(c => c.category === 'Ticket 🎫').size}]`,`With these bot commands, you can create private channels to communicate with admins and other important people, which we call these channels, channel tickets. These commands are all related to ticket channels.`,false) - .addField(`VIP 💎 [${client.commands.filter(c => c.category === 'VIP 💎').size}]`,`This batch of bot commands is for important people who have purchased bot premium.\nIn order to use these commands, you need to buy the bot insurance premium to become one of the special people.\n(These commands are locked for others)`,false) - .addField(`Owner 👑 [${client.commands.filter(c => c.category === 'Owner 👑').size}]`,`This category of bot commands is only for founders and cannot be used by other people.\nThese commands are for editing the bot and setting it up.`,false) + .addField(`Help 🆘 [${client.commands.filter(c => c.category === 'Help 🆘').size}]`,`This category of commands is to request help from bot founders and see all bot commands.`,true) + .addField(`Infos 📊 [${client.commands.filter(c => c.category === 'Infos 📊').size}]`,`Using these commands, you can get the information you want about the bot.`,true) + .addField(`Setup 💻 [${client.commands.filter(c => c.category === 'Setup 💻').size}]`,`Using these bot commands, you can configure the bot on your server.\nThese commands are for server admins only.`,true) + .addField(`Ticket 🎫 [${client.commands.filter(c => c.category === 'Ticket 🎫').size}]`,`With these bot commands, you can create private channels to communicate with admins and other important people, which we call these channels, channel tickets. These commands are all related to ticket channels.`,true) + .addField(`VIP 💎 [${client.commands.filter(c => c.category === 'VIP 💎').size}]`,`This batch of bot commands is for important people who have purchased bot premium.\nIn order to use these commands, you need to buy the bot insurance premium to become one of the special people.\n(These commands are locked for others)`,true) + .addField(`Owner 👑 [${client.commands.filter(c => c.category === 'Owner 👑').size}]`,`This category of bot commands is only for founders and cannot be used by other people.\nThese commands are for editing the bot and setting it up.`,true) .setThumbnail(client.user.displayAvatarURL({ dynamic: true })) .setTimestamp() .addField('Important Links', `**[Invite Me](${client.config.discord.invite}) | [Support Server](${client.config.discord.server_support||"https://discord.gg/5GYNec4urW"})**`,false) diff --git "a/commands/Help \360\237\206\230/report.js" "b/commands/Help \360\237\206\230/report.js" index 52b3a8e..5dc4049 100644 --- "a/commands/Help \360\237\206\230/report.js" +++ "b/commands/Help \360\237\206\230/report.js" @@ -68,11 +68,11 @@ const choice = args.slice().join(" "); } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/commands/Infos \360\237\223\212/about.js" "b/commands/Infos \360\237\223\212/about.js" index b428797..55fced0 100644 --- "a/commands/Infos \360\237\223\212/about.js" +++ "b/commands/Infos \360\237\223\212/about.js" @@ -50,7 +50,7 @@ let infoEmbed = new Discord.MessageEmbed() .addField(`${bot.emotes.id}| ID:`,`${bot.emotes.reply}** User Id: ${bot.user.id}**`,true) .addField(`${bot.emotes.tag}| Tag:`, `${bot.emotes.reply}**${bot.user.tag}**`,true) .addField(bot.emotes.ping+"| Ping",`**${bot.emotes.reply} User Ping Is: \`${Math.round(bot.ws.ping)}MS\`**`,true) - .addField(bot.emotes.uptime+"| Uptime", `${bot.emotes.reply}** Time Of Bot Online: \`${days} days, ${hours} hours, ${minutes} minutes, ${seconds} seconds\`** || ** _ / / _**`,true) + .addField(bot.emotes.uptime+"| Uptime", `${bot.emotes.reply}** Time Of Bot Online: / _**`,true) .addField(`${bot.emotes.status}| Status:`,`${bot.emotes.reply}** Bot Status Is: ${statuses[bot.user.presence.status]} ${bot.user.presence.status}**`,true) .addField(bot.emotes.activity+'| Activity:',`${bot.emotes.reply}** Bot Activity Is: ${userstatus}**`,true) .addField(`${bot.emotes.date}| Date of Join Discord:`,`${bot.emotes.reply}** Time Of Bot Created: **`,true) @@ -60,17 +60,16 @@ let infoEmbed = new Discord.MessageEmbed() .addField(bot.emotes.guild+"| Servers",`${bot.emotes.reply}** Count Of Bot Servers Is: \`${bot.guilds.cache.size}\`**`, true) .addField(bot.emotes.voice_channel+"| Voice Channels", `${bot.emotes.reply}** Count Of Bot Voice Channel Is: \`${bot.channels.cache.filter((ch) => ch.type === "GUILD_VOICE").size}\`**`,true) .addField(bot.emotes.text_channel+"| Text Channels", `${bot.emotes.reply}** Count Of Bot Text Channel Is: \`${bot.channels.cache.filter((ch) => ch.type === "GUILD_TEXT").size}\`**`,true) - .addField(bot.emotes.connect+"| Connected Channels", `${bot.emotes.reply}** Count Of Bot Joined Voices Is: \`${connectedchannelsamount}\`**`,true) - .addField(bot.emotes.version+"Version",`${bot.emotes.reply}** Bot Version Is: \`${require("../../package.json").version}\`**`,true) + .addField(bot.emotes.version+"Version",`${bot.emotes.reply}** Bot Version Is: \`${require(`${process.cwd()}/package.json`).version}\`**`,true) .addField(bot.emotes.disJS+"Discord.js",`${bot.emotes.reply}** Bot Usage Discord.js Version Is: \`Version ${Discord.version}\`**`,true) .addField(bot.emotes.node+"Node.js",`${bot.emotes.reply}** Bot Usage Node.js Version Is: \`Version ${process.version}\`**`,true) .addField(bot.emotes.cpu+"| CPU", `${bot.emotes.reply}** Bot Usage CPU Model Is: \`\`\`js\nModel: ${os.cpus().map((i) => `${i.model}`)[0]}\`\`\`\n CPU Usages: \`${percent.toFixed(2)}%\`**`,true) - .addField(bot.emotes.shard+"| Shards", `${bot.emotes.reply}>** Bot Shards Percent Is: \`${bot.ws.shards.size}%\`**`,true) + .addField(bot.emotes.shard+"| Shards", `${bot.emotes.reply}** Bot Shards Percent Is: \`${bot.ws.shards.size}%\`**`,true) .addField(bot.emotes.cros+"| Cores", `${bot.emotes.reply}** Bot Cores Percent Is: \`${os.cpus().length}%\`**`,true) .addField(bot.emotes.arch+"| Architecture", `${bot.emotes.reply}** Bot Architecture Is: \`${os.arch()}\`**`,true) .addField(bot.emotes.platform+"| Platform", `${bot.emotes.reply}** Bot Usage Platform Is: \`${os.platform()}\`**`,true) - .addField(`${bot.emotes.commands}| Commands Count`, `${bot.emotes.reply}** Bot Commands Count Is: \`${bot.commands.size}\`**`,true) - .addField(`${bot.emotes.category}| Category Count:`, `${bot.emotes.reply}** Bot Category Count Is: \`${(bot.categories.size)}\`**`,true) +.addField(`${bot.emotes.commands}| Commands Count`, `${bot.emotes.reply}** Bot Commands Count Is: Commands[\`${bot.commands.size}\`] & SlashCommands[\`${bot.slashCommands.size}\`]**`,true) + .addField(`${bot.emotes.category}| Category Count:`, `${bot.emotes.reply}** Bot Category Count Is: \`${(bot.categories.length)}\`**`,true) .setTimestamp() message.reply({embeds:[infoEmbed]}) }) @@ -80,11 +79,11 @@ let infoEmbed = new Discord.MessageEmbed() } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/commands/Infos \360\237\223\212/invite.js" "b/commands/Infos \360\237\223\212/invite.js" index 06f148a..2679598 100644 --- "a/commands/Infos \360\237\223\212/invite.js" +++ "b/commands/Infos \360\237\223\212/invite.js" @@ -40,11 +40,11 @@ let inviteEmbed = new MessageEmbed() } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/commands/Infos \360\237\223\212/ping.js" "b/commands/Infos \360\237\223\212/ping.js" index 9ca9a4e..cbd4991 100644 --- "a/commands/Infos \360\237\223\212/ping.js" +++ "b/commands/Infos \360\237\223\212/ping.js" @@ -81,11 +81,11 @@ module.exports = { } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/commands/Infos \360\237\223\212/prefix.js" "b/commands/Infos \360\237\223\212/prefix.js" index f1fc83c..2bfac71 100644 --- "a/commands/Infos \360\237\223\212/prefix.js" +++ "b/commands/Infos \360\237\223\212/prefix.js" @@ -7,4 +7,13 @@ module.exports = { cooldown: 10, run: async function(bot, message, args, prefix){ } -} \ No newline at end of file +} +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info + */ \ No newline at end of file diff --git "a/commands/Owner \360\237\221\221/say.js" "b/commands/Owner \360\237\221\221/say.js" index 9b5ad4e..f2f60c2 100644 --- "a/commands/Owner \360\237\221\221/say.js" +++ "b/commands/Owner \360\237\221\221/say.js" @@ -57,11 +57,11 @@ run: async function(bot, message, args, prefix){ } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/commands/Owner \360\237\221\221/serverlist.js" "b/commands/Owner \360\237\221\221/serverlist.js" index a8a6cb3..699f166 100644 --- "a/commands/Owner \360\237\221\221/serverlist.js" +++ "b/commands/Owner \360\237\221\221/serverlist.js" @@ -39,137 +39,17 @@ run: async function(bot, message, args, prefix){ ] }) - let i0 = 0; - let i1 = 10; - let page = 1; - - let description = - `Total Servers - ${bot.guilds.cache.size}\n\n` + - bot.guilds.cache - .sort((a, b) => b.memberCount - a.memberCount) - .map(r => r) - .map((r, i) => `**${i + 1}** - ${r.name} | ${r.memberCount} Members\nID - ${r.id}`) - .slice(0, 10) - .join("\n"); - - let embed = new MessageEmbed() - .setAuthor({ - name: message.author.tag, - iconURL: message.author.displayAvatarURL({ dynamic: true }) - }) - .setColor(bot.colors.none) - .setFooter(bot.user.username) - .setTitle(`Page - ${page}/${Math.ceil(bot.guilds.cache.size / 10)}`) - .setDescription(description); - - let msg = await message.reply({ - embeds:[embed] - }); - await msg.react("⬅"); - await msg.react("➡"); - await msg.react("❌"); - - let collector = msg.createReactionCollector( - (reaction, user) => user.id === message.author.id - ); - - collector.on("collect", async (reaction, user) => { - if (reaction.emoji.name === "⬅") { - // Updates variables - i0 = i0 - 10; - i1 = i1 - 10; - page = page - 1; - - // if there is no guild to display, delete the message - if (i0 + 1 < 0) { - console.log(i0) - return msg.delete(); - } - if (!i0 || !i1) { - return msg.delete(); - } - - description = - `Total Servers - ${bot.guilds.cache.size}\n\n` + - bot.guilds.cache - .sort((a, b) => b.memberCount - a.memberCount) - .map(r => r) - .map( - (r, i) => `**${i + 1}** - ${r.name} | ${r.memberCount} Members` - ) - .slice(i0, i1) - .join("\n"); - - - // Update the embed with new informations - embed - .setTitle( - `Page - ${page}/${Math.round(bot.guilds.cache.size / 10 + 1)}` - ) - .setDescription(description); - - // Edit the message - msg.edit(embed); - } - - if (reaction.emoji.name === "➡") { - // Updates variables - i0 = i0 + 10; - i1 = i1 + 10; - page = page + 1; - - // if there is no guild to display, delete the message - if (i1 > bot.guilds.cache.size + 10) { - return msg.delete(); - } - if (!i0 || !i1) { - return msg.delete(); - } - - description = - `Total Servers - ${bot.guilds.cache.size}\n\n` + - bot.guilds.cache - .sort((a, b) => b.memberCount - a.memberCount) - .map(r => r) - .map( - (r, i) => `**${i + 1}** - ${r.name} | ${r.memberCount} Members` - ) - .slice(i0, i1) - .join("\n"); - - // Update the embed with new informations - embed - .setTitle( - `Page - ${page}/${Math.round(bot.guilds.cache.size / 10 + 1)}` - ) - .setDescription(description); - - // Edit the message - msg.edit(embed); - } - - if (reaction.emoji.name === "❌") { - return msg.delete(); - } - - // Remove the reaction when the user react to the message - await reaction.users.remove(message.author.id); - }); + const Guilds = bot.guilds.cache.array().map((G, I) => `${I + 1}. **${G.name}** - **${G.id}**`).join("\n"); + if (!Guilds) return message.reply("No Guild"); + return message.reply(Guilds, { split: { char: "\n" } }); } } /** - * - const Guilds = bot.guilds.cache.array().map((G, I) => `${I + 1}. **${G.name}** - **${G.id}**`).join("\n"); - if (!Guilds) return message.channel.send("No Guild"); - return message.channel.send(Guilds, { split: { char: "\n" } }); - - */ -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/commands/Setup \360\237\222\273/set-admin.js" "b/commands/Setup \360\237\222\273/set-admin.js" new file mode 100644 index 0000000..8a052d2 --- /dev/null +++ "b/commands/Setup \360\237\222\273/set-admin.js" @@ -0,0 +1,99 @@ +const { + MessageActionRow, + MessageButton, + MessageEmbed, + Permissions + } = require("discord.js"); +const fs = require("fs"); +const db = require("quick.db"); +module.exports = { + name: 'setadmin', + aliases: ['adminrole', 'admin', 'role'], + category: 'Setup 💻', + description: "setup ticket admin role in guild.", + cooldown: 6, + run: async function(client, message, args, prefix, logsChannel){ + let role = message.mentions.roles.first() || message.guild.roles.cache.find(r => r.id == args[1]) || message.guild.roles.cache.find(r => r.name == args[1]); + if(!message.member.permissions.has(Permissions.FLAGS.MANAGE_ROLES)) return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_ROLES\" \n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true))], + ephemeral: true, + }) + + if(!role) + return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription(" please mention some role to setup server ticket admin. ") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true))], + }); + +if(message.guild.roles.cache.find(c => c.id === db.fetch(`TicketAdminRole_${message.guild.id}`))) return message.reply({ + ephemeral: true, + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ${message.author.tag}`, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription(`**My Friend, you just have a setup your ticket mod roles befor it to ${message.guild.roles.cache.find(c => c.id === db.fetch(`TicketAdminRole_${message.guild.id}`))}.**`) + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })] + }) + + message.reply({ + embeds: [new MessageEmbed().setTitle('☑️| ** Process Is Successfuly**').setColor(client.colors.green).setDescription(`\n I just setup your ticket admin role to ${role}.`).setFooter({text: `Successfuly • Requested By ${message.author.tag} `, iconURL: message.guild.iconURL({dynamic:true})}).setThumbnail(message.author.displayAvatarURL({dynamic:true}))], + ephemeral: true, + }) + db.set(`TicketAdminRole_${message.guild.id}`, role.id) + if(db.fetch(`modlog_${message.guild.id}`)){ + message.guild.channels.cache.find(c => c.id === db.fetch(`modlog_${message.guild.id}`)).send({ + embeds: [new MessageEmbed().setTitle(client.emotes.tick+'| ** Process Is Successfuly**').setColor(client.colors.none).setDescription(`I just setup ticket admin role to ${role} in this guild.`).setFooter({text: `Logs Setuped | Requested By ${message.author.tag} `, iconURL: message.guild.iconURL({dynamic:true})}).setThumbnail(message.author.displayAvatarURL({dynamic:true}))] + }) + } + } +} +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info + */ \ No newline at end of file diff --git "a/commands/Setup \360\237\222\273/set-logs.js" "b/commands/Setup \360\237\222\273/set-logs.js" index 448f3a4..1e5158c 100644 --- "a/commands/Setup \360\237\222\273/set-logs.js" +++ "b/commands/Setup \360\237\222\273/set-logs.js" @@ -6,61 +6,120 @@ const { } = require("discord.js"); const fs = require("fs"); const db = require("quick.db"); -const { - errorEmbed, - epochDateNow, - successEmbed, - logsEmbed -} = require("../../functions/functions"); module.exports = { name: 'setlogs', aliases: ['logs', 'channel', 'log'], category: 'Setup 💻', description: "Sets A Channel Where The Bot Can Send Moderation Logs!", cooldown: 6, - run: async function(bot, message, args, prefix, logsChannel){ - if(!message.member.permissions.has(Permissions.FLAGS.MANAGE_GUILD||Permissions.FLAGS.ADMINISTRATOR)) - return message.reply({ - embeds: [errorEmbed(message, "my friend you are don't have this permissions: `\"MANAGE_GUILD\" or \"ADMINISTRATOR\"`.",bot)] - }); - - let channel = message.mentions.channels.first(); - if(!channel) - return message.reply({ - embeds: [errorEmbed(message, "please mention some channel befor.",bot)] - }); + run: async function(client, message, args, prefix, logsChannel){ + if(!message.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true))], + }) - let channelFetched = message.guild.channels.cache.find(c => c.id === channel.id); - if(!channelFetched || channelFetched.type !== "GUILD_TEXT") - return message.reply({ - embeds: [errorEmbed(message, "please mention some valid channel to setup server logs.\nvalid channel: `\"GUILD_TEXT\"`",bot)] - }); - db.set(`logs_${message.guild.id}`, channelFetched); - channelFetched.send({ - content: message.author, - embeds: [logsEmbed( - message, - "Logs Channel Successfuly Setuped", - "logs channel is successfuly setuped.", - bot.emotes.tick, - bot, - channelFetched, - "setup logs channel" - )] - }); - message.reply({ - embeds: [successEmbed(message, `successfuly logs channel setuped in **${channelFetched}**.`,bot)] - }); + + let mentionCH = message.mentions.channels.first()|| client.channels.cache.get(args[0]) || message.guild.channels.cache.find(c => c.name == args[0]); + if(!mentionCH) + return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\n please mention some channel befor.\n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true))], + }); + let channel = message.guild.channels.cache.find(c => c.id === mentionCH.id); + + if(!channel || channel.type !== "GUILD_TEXT") + return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription(" please mention some valid channel to setup server logs.\n valid channel: `\"GUILD_TEXT\"`") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true))], + }); + +if(message.guild.channels.cache.find(c => c.id === db.fetch(`modlog_${message.guild.id}`))){ + return message.reply({ + ephemeral: true, + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription(`⛔️| **My Friend, you just have a logs channel befor it to ${message.guild.channels.cache.find(c => c.id === db.fetch(`modlog_${message.guild.id}`))}.**`) + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })] + }) +}else { + message.reply({ + embeds: [new MessageEmbed().setTitle('✅| ** Process Is Successfuly**').setColor(client.colors.green).setDescription(`process is successfuly.\n I just setup your ticket logs channel to ${channel}.`).setFooter({text: `Successfuly • Requested By ${message.author.tag} `, iconURL: message.guild.iconURL({dynamic:true})}).setThumbnail(message.author.displayAvatarURL({dynamic:true}))], + ephemeral: true, + }) + db.set(`modlog_${message.guild.id}`, channel.id) + channel.send({ + embeds: [new MessageEmbed().setColor(client.colors.none).setDescription(`just now here is ticket logs channel for send members tickets information setupped to ${channel}.`).setTitle('✅| ** Process Is Successfuly**').setFooter({text: `Logs Setuped • Requested By ${message.author.tag} `, iconURL: message.guild.iconURL({dynamic:true})}).setThumbnail(message.author.displayAvatarURL({dynamic:true}))] + }) +} } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/commands/Setup \360\237\222\273/set-prefix.js" "b/commands/Setup \360\237\222\273/set-prefix.js" index 5ba45d6..346e2fb 100644 --- "a/commands/Setup \360\237\222\273/set-prefix.js" +++ "b/commands/Setup \360\237\222\273/set-prefix.js" @@ -22,11 +22,11 @@ module.exports = { .setTitle(bot.emotes.entry+'| **We Got An Error**') .setColor(bot.colors.none) .setFooter({ - text: `Error | ${bot.embed.footerText}`, + text: `Error • ${bot.embed.footerText}`, iconURL: message.guild.iconURL({ dynamic: true }) }) - if(!message.author.permissions.has(Permissions.FLAGS.MANAGE_GUILD)||!message.author.permissions.has(Permissions.FLAGS.ADMINISTRATOR)){ + if(!message.author.permissions.has(Permissions.FLAGS.MANAGE_GUILD)){ error_embed.setDescription("my friend you are don't have this permissions: `\"MANAGE_GUILD\" or \"ADMINISTRATOR\"`.") return message.reply({ embeds: [error_embed], @@ -42,7 +42,7 @@ module.exports = { } var newPrefix = args.slice().join(' ') if (!newPrefix) { - db.set(`prefix_${message.guild.id}`, bot.prefix); + db.set(`prefix_${message.guild.id}`, `${bot.prefix}`); message.reply({ embeds: [new MessageEmbed() .setAuthor({ @@ -95,9 +95,10 @@ module.exports = { } ) .setFooter({ - text: "Logs Information | created by Mr.SIN RE#1528", - iconURL: `https://cdn.discordapp.com/attachments/902034619791196221/905054458793312327/2GU.gif` - })] + text: "Logs Information • "+client.embed.footerText, + iconURL: client.embed.footerIcon + }) + ] }); } else if (newPrefix) { if (newPrefix.length > 7) { @@ -114,7 +115,7 @@ module.exports = { ] }) } - db.set(`prefix_${message.guild.id}`, newPrefix); + db.set(`prefix_${message.guild.id}`, `${newPrefix}`); message.reply({ embeds: [new MessageEmbed() .setAuthor({ @@ -178,11 +179,11 @@ module.exports = { } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/commands/Setup \360\237\222\273/set-ticket.js" "b/commands/Setup \360\237\222\273/set-ticket.js" index 20f717a..e096f74 100644 --- "a/commands/Setup \360\237\222\273/set-ticket.js" +++ "b/commands/Setup \360\237\222\273/set-ticket.js" @@ -19,70 +19,105 @@ module.exports = { description: "Setup ticket channel", category: 'Setup 💻', usage: "[channel mention | channel ID | channel name]", - run: async function(bot, message, args, prefix, logsChannel){ + run: async function(client, message, args, prefix, logsChannel){ try { - var ticketChannel = message.mentions.channels.first() || bot.channels.cache.get(args[0]) || message.guild.channels.cache.find(c => c.name == args[0]) || message.channel; - var adminRole = message.mentions.roles.first() || message.guild.roles.cache.find(r => r.id == args[1]) || message.guild.roles.cache.find(r => r.name == args[1]); - var title = message.content.split(' ').slice(3).join(' ') || 'Create Ticket'; - if (!adminRole) { - message.reply({ - embeds: [errorEmbed( - message, - "for setup ticket system you have to mention **ticket channel** and mention **admin role**, like the example:\n```js\n"+prefix+"setup ```" - )], - }) - return - } - if(logsChannel){ - logsChannel.send({ - embeds: [logsEmbed( - message, - "Ticket System Setup", - "setup the ticket system in this server `"+message.guild.name+"` is successfuly.", - bot.emotes.system, - bot, - ticketChannel, - 'setup ticket system' - )] - }) - } - message.reply({ - embeds: [successEmbed( - message, - "setup the ticket system at this server `"+message.guild.name+"` in this channel **"+ticketChannel+"** is successfuly.", - bot - )] + var channel = message.mentions.channels.first() || client.channels.cache.get(args[0]) || message.guild.channels.cache.find(c => c.name == args[0]) || message.channel; + // var adminRole = message.mentions.roles.first() || message.guild.roles.cache.find(r => r.id == args[1]) || message.guild.roles.cache.find(r => r.name == args[1]); + // var title = message.content.split(' ').slice(3).join(' ') || 'Create Ticket'; + if(!message.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) + return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) }) - .then(m => m.react(bot.emotes.tick)) - .then(message.react(bot.emotes.setup)); - ticketChannel.send({ - embed: { - color: bot.colors.none, - description: '```js\nFor Creating A Ticket Click Button Right Onther This Message.'+bot.emotes.ticket+'```', - title: title - }, - components: [new MessageActionRow() - .addComponents( - [new MessageButton() - .setStyle("SUCCESS") - .setLabel("Create Ticket") - .setEmoji(bot.emotes.ticket) - .setCustomId("createTicket")] - )] - }).then(async function() { - bot.db.set(`TicketAdminRole_${message.guild.id}`, adminRole.id); + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true))] + }) + + if(!channel) + return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\n please mention or paste some channel id from behind of the command. \n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true))] + }) + + message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle(client.emotes.success + '| **Menu Is Successfuly Setuped**') + .setColor(client.colors.none) + .setDescription(`**setup server ticket menu in ${channel} is successfully setuped.**`) + .setFooter({ + text: "Successfuly • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) }) + ] + }) + + channel.send({ + embeds: [new MessageEmbed() + .setTitle(`${client.emotes.ticket}| Ticket System`) + .addField(`${client.emotes.reason}Description:`,`Do you need help ?? we are here!! This channel is for making tickets and communicating with the admin team. To make a ticket, select your reason from the menu below to address your problem. For guidance, asking questions, reporting members, etc., you can open a ticket by Be in touch with the admin team. Also, after clicking the button below, select the reason for opening your ticket correctly, otherwise your ticket will not be processed. All tickets will be saved, so please stop opening tickets without any reason and in violation of server rules. Avoid tickets, otherwise you will be banned from making tickets`) + .setColor(client.colors.none) + ], + components: [new MessageActionRow() + .addComponents([new MessageButton() + .setCustomId('create_ticket') + .setEmoji(client.emotes.ticket) + .setLabel("Create Ticket") + .setStyle('SUCCESS')]),new MessageActionRow() + .addComponents([new MessageButton() + .setStyle("LINK") + .setEmoji(client.emotes.support) + .setLabel("Support") + .setURL(client.config.discord.server_support) + ]) + ] + }) + } catch (err) { return; } } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/commands/Ticket \360\237\216\253/close.js" "b/commands/Ticket \360\237\216\253/close.js" index 0623a82..124d22a 100644 --- "a/commands/Ticket \360\237\216\253/close.js" +++ "b/commands/Ticket \360\237\216\253/close.js" @@ -4,50 +4,93 @@ const { MessageEmbed, Permissions } = require("discord.js"); -const { - CustomErrorEmbed, - errorEmbed -} = require("../../functions/functions"); +const db = require('quick.db'); module.exports = { name: "close", aliases: ['c','cl'], cooldown: 5, - description: "close the ticket channel for user", + description: "close the ticket channel for user.", category: 'Ticket 🎫', usage: "", - run: async function(bot, message, args, prefix, logsChannel){ - if (!message.channel.name.includes("ticket-")) { - message.reply({ - embeds: [errorEmbed( - message, - bot.emotes.entry+"| **My Friend, This channel it dosen't ticket channel.\nI can't close ticket in this channel for you because here is another channel.\nAlso you can create a ticket.**", - bot - )] - }) - return - } else { - message.reply({ - embeds: [CustomErrorEmbed( - message, - "Request To Close Ticket", - "request to close the ticket channel for you, Are sure?\nif you sure react to `\""+bot.emotes.close+"\"` for close your ticket esle react this.`\""+bot.emotes.x+"\"`", - bot.emotes.close, - bot - )] - }) - .then(m =>{ - m.react(bot.emotes.close) - m.react(bot.emotes.x) - }); - } + run: async function(client, message, args, prefix, logsChannel){ + if(message.channel.name.startsWith(`${client.emotes.help}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.exchange}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.report}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.admin}︱ticket-`)||message.channel.name === db.get(`ticketName_${message.author.id}_${message.guild.id}`)){ + message.reply({ + embeds: [new MessageEmbed() + .setColor(client.colors.none) + .setTitle(`${client.emotes.close}| Close Ticket`) + .setDescription(`Dear friend, you requested for closing ${message.guild.members.cache.find(c => c.id === db.get(`TicketControl_${message.channel.id}`))} ticket, are you sure for close here??`) + ], + components: [new MessageActionRow() + .addComponents([new MessageButton() + .setStyle("DANGER") + .setCustomId("cancel") + .setEmoji(client.emotes.x) + .setLabel("Don't Close") + ],[new MessageButton() + .setStyle("SECONDARY") + .setCustomId("configTicket") + .setEmoji(client.emotes.close) + .setLabel("Close It") + ])] + }).then((msg)=>{ + if(msg.embeds[0].title === `${client.emotes.close}| Close Ticket`){ + + setTimeout(() => { + msg.edit({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyour time for close the ticket channel is ended.⏰\n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) + }, 1000 * 50) + } + }) + }else{ + message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription(`**My Friend, here is not a ticket channel please use this command in other channel**`) + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true))] + }) + } } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/commands/Ticket \360\237\216\253/create.js" "b/commands/Ticket \360\237\216\253/create.js" new file mode 100644 index 0000000..5765f0b --- /dev/null +++ "b/commands/Ticket \360\237\216\253/create.js" @@ -0,0 +1,88 @@ +const { + MessageActionRow, + MessageButton, + MessageEmbed, + Permissions +} = require("discord.js"); +const db = require("quick.db"); +module.exports = { + name: "ticket", + aliases: ["createticket", "create", "t", "cr", "tc"], + cooldown: 5, + description: "for creating the ticket channel for user in server.", + category: 'Ticket 🎫', + usage: "", + run: async function(bot, message, args, prefix){ + + let embed = new MessageEmbed() + .setTitle(`${bot.emotes.ticket}| **Request To Create Ticket**`) + .setColor(bot.colors.none) + .setTimestamp() + .setDescription('**your ticket channel will be created but are you sure to do this??\nif your ticket created please wait the moderators or admins to speek there.**') + .addField(bot.emotes.reason+'| INFOS','if you want to create a ticket channel for yourself, you have to click to this emoji: `"'+bot.emotes.ticket+'"` or else click to `"'+bot.emotes.x+'"`.') + .setURL(bot.config.discord.server_support) + .setFooter({ + text: `Request To Create Ticket • ${bot.embed.footerText}`, + iconURL: message.guild.iconURL({ dynamic: true }) + }) + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + + message.reply({ + embeds: [embed], + components: [new MessageActionRow() + .addComponents( + [new MessageButton() + .setCustomId('create') + .setEmoji(bot.emotes.ticket) + .setLabel("Create Ticket") + .setStyle('SUCCESS')], + [new MessageButton() + .setCustomId('dont_do') + .setEmoji(bot.emotes.x) + .setLabel('Cancel Process') + .setStyle("DANGER") + ]) + ] + }).then(msg=>{ + db.set(`CreateTicketMSG_${message.guild.id}_${message.author.id}`, msg.id) + setTimeout(()=>{ + if(msg.embeds[0].title === `${bot.emotes.ticket}| **Request To Create Ticket**`){ + embed.setFooter({ + text: `The Time Is Up • for use again: ${prefix}ticket`, + iconURL: message.guild.iconURL({ dynamic: true }) + }) + msg.edit({ + embeds: [embed], + components: [new MessageActionRow() + .addComponents( + [new MessageButton() + .setCustomId('create') + .setEmoji(bot.emotes.ticket) + .setLabel("Create Ticket") + .setStyle('SUCCESS') + .setDisabled(true)], + [new MessageButton() + .setCustomId('dont_do') + .setEmoji(bot.emotes.x) + .setLabel('Cancel Process') + .setStyle("DANGER") + .setDisabled(true)]) + ] + }) + } + },60*1000) + }) + } +} +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info + */ \ No newline at end of file diff --git "a/commands/Ticket \360\237\216\253/delete.js" "b/commands/Ticket \360\237\216\253/delete.js" index 85c0de7..00bf9aa 100644 --- "a/commands/Ticket \360\237\216\253/delete.js" +++ "b/commands/Ticket \360\237\216\253/delete.js" @@ -5,12 +5,6 @@ const { Permissions } = require("discord.js"); const db = require("quick.db"); -const { - epochDateNow, - errorEmbed, - CustomErrorEmbed, - logsEmbed -} = require("../../functions/functions"); module.exports = { name: "delete", aliases: ['del','remove'], @@ -18,47 +12,111 @@ module.exports = { description: "remove and delete the ticket channel for user in server.", category: 'Ticket 🎫', usage: "", - run: async function(bot, message, args, prefix, logsChannel){ + run: async function(client, message, args, prefix, logsChannel){ - let support = message.guild.roles.cache.find(r => r.id === db.fetch(`TicketAdminRole_${message.guild.id}`)); - if (!message.channel.name.includes("ticket-")) { - if(support){ - if(!message.member.roles.cache.has(support)||!message.member.permissions.has(Permissions.FLAGS.MANAGE_GUILD||Permissions.FLAGS.ADMINISTRATOR)) - return message.reply({ - embeds: [errorEmbed(message, "my friend you are don't have this permissions: `\"MANAGE_GUILD\" or \"ADMINISTRATOR\"`.",bot)] - }); - } - message.reply({ - embeds: [errorEmbed( - message, - bot.emotes.entry+"| **My Friend, This channel it dosen't ticket channel.\nI can't delete ticket in this channel for you because here is another channel.\nAlso you can create a ticket.**", - bot - )] - }) - return - } else { - message.reply({ - embeds: [CustomErrorEmbed( - message, - "Request To Delete Ticket", - "request to delete the ticket channel for you, Are sure?\nif you sure react to `\""+bot.emotes.close+"\"` for close your ticket esle react this.`\""+bot.emotes.x+"\"`", - bot.emotes.trash, - bot - )] - }) - .then(m =>{ - m.react(bot.emotes.trash) - m.react(bot.emotes.x) - }); - } + if(message.channel.name.startsWith(`${client.emotes.help}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.exchange}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.report}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.admin}︱ticket-`)||message.channel.name === db.get(`ticketName_${message.author.id}_${message.guild.id}`)){ + if(!message.member.roles.cache.has(db.get(`TicketAdminRole_${message.guild.id}`))&&!message.member.permissions.has([Permissions.FLAGS.MANAGE_CHANNELS])&&!message.member.permissions.has([Permissions.FLAGS.ADMINISTRATOR])) return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) +let embed = new MessageEmbed() + .setColor(client.colors.none) + .setTitle(`${client.emotes.trash}| Delete Ticket`) + .setDescription(`Dear friend, you requested for delete ${message.guild.members.cache.find(c => c.id === db.get(`TicketControl_${message.channel.id}`))} ticket, are you sure for delete here??`) + + message.reply({ + embeds: [embed], + components: [new MessageActionRow() + .addComponents([new MessageButton() + .setStyle("SECONDARY") + .setCustomId("cancel") + .setEmoji(client.emotes.x) + .setLabel("Don't Delete") + ],[new MessageButton() + .setStyle("DANGER") + .setCustomId("deleteTicket") + .setEmoji(client.emotes.trash) + .setLabel("Delete It") + ]) + ] + }).then((msg)=>{ + if(msg.embeds[0].title === `${client.emotes.trash}| Delete Ticket`){ + + setTimeout(() => { + msg.edit({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyour time for delete the ticket channel is ended.⏰\n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) + }, 1000 * 50) + + } + }) + }else { + message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription(`**My Friend, here is not a ticket channel please use this command in other channel**`) + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true)) + ] + }) + } } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/commands/Ticket \360\237\216\253/invite.js" "b/commands/Ticket \360\237\216\253/invite.js" new file mode 100644 index 0000000..fd9e97e --- /dev/null +++ "b/commands/Ticket \360\237\216\253/invite.js" @@ -0,0 +1,157 @@ +const { + MessageActionRow, + MessageButton, + MessageEmbed, + Permissions + } = require("discord.js"); +const db = require("quick.db"); +module.exports = { + name: "add-user", + aliases: ['add','get-in','invite-ticket','invite ticket','ticket invite'], + cooldown: 5, + description: "adding some people in user ticket channel.", + category: 'Ticket 🎫', + usage: "[ Mention-user | ID | Name ]", + run: async function(client, message, args, prefix, logsChannel){ + +if(message.channel.name.startsWith(`${client.emotes.help}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.exchange}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.report}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.admin}︱ticket-`)||message.channel.name === db.get(`ticketName_${message.author.id}_${message.guild.id}`)){ + if(!message.member.roles.cache.has(db.get(`TicketAdminRole_${message.guild.id}`))&&!message.member.permissions.has([Permissions.FLAGS.MANAGE_CHANNELS])&&!message.member.permissions.has([Permissions.FLAGS.ADMINISTRATOR])) return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) + + var member = message.mentions.members.first() || message.guild.members.cache.find(u =>{ u.id == args[0] || u.user.username == args[0] || u.nickname == args[0] }); + + if (!member) { +return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("**for adding people to ticket, you have got mention it to me.\nplease mention or write your target member right behind the command.**") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) + } + + message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('📇| **Request To Adding People To Ticket**') + .setColor(client.colors.none) + .setDescription("are you sure to add some one in to this ticket channel??") + .setFooter({ + text: "Adding People • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [ + new MessageActionRow() + .addComponents( + [new MessageButton() + .setStyle("SUCCESS") + .setEmoji(client.emotes.plus) + .setLabel("Add Member") + .setCustomId("addmemberTicket") + ], + [new MessageButton() + .setStyle("DANGER") + .setEmoji(client.emotes.x) + .setLabel("Cancel") + .setCustomId("canceladdmemberTicket") + ] + )] + }).then(msg=>{ + db.set(`TicketControlNewMember_${message.channel.id}`, member.user.id) + setTimeout(() => { +if(msg.embeds.length === 1 && msg.embeds[0].title === '📇| **Request To Adding People To Ticket**'){ + msg.edit({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyour time for adding people in to the ticket channel is ended.⏰\n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) + db.delete(`TicketControlNewMember_${message.channel.id}`) +} + }, 1000 * 50) + }) + }else { + message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription(`**My Friend, here is not a ticket channel please use this command in other channel**`) + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) + } + } +} +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info + */ \ No newline at end of file diff --git "a/commands/Ticket \360\237\216\253/open.js" "b/commands/Ticket \360\237\216\253/open.js" new file mode 100644 index 0000000..6e7275b --- /dev/null +++ "b/commands/Ticket \360\237\216\253/open.js" @@ -0,0 +1,117 @@ +const { + MessageActionRow, + MessageButton, + MessageEmbed, + Permissions +} = require("discord.js"); +const db = require('quick.db'); +module.exports = { + name: "open", + aliases: ['open-ticket','ticket open',"op","opt"], + cooldown: 5, + description: "open the user ticket channel.", + category: 'Ticket 🎫', + usage: "", + run: async function(client, message, args, prefix, logsChannel){ + if(message.channel.name.startsWith(`${client.emotes.help}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.exchange}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.report}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.admin}︱ticket-`)||message.channel.name === db.get(`ticketName_${message.author.id}_${message.guild.id}`)){ + if(!message.member.roles.cache.has(db.get(`TicketAdminRole_${message.guild.id}`))&&!message.member.permissions.has([Permissions.FLAGS.MANAGE_CHANNELS])&&!message.member.permissions.has([Permissions.FLAGS.ADMINISTRATOR])) return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true))] + }) +let embed = new MessageEmbed() + .setColor(client.colors.none) + .setTitle(`${client.emotes.open}| Open Ticket`) + .setDescription(`Dear friend, you requested for openning ${message.guild.members.cache.find(c => c.id === db.get(`TicketControl_${message.channel.id}`))} ticket, are you sure for open here??`) + + message.reply({ + embeds: [embed], + components: [new MessageActionRow() + .addComponents([new MessageButton() + .setStyle("DANGER") + .setCustomId("cancel") + .setEmoji(client.emotes.x) + .setLabel("Don't Open") + ],[new MessageButton() + .setStyle("SUCCESS") + .setCustomId("reopenTicket") + .setEmoji(client.emotes.open) + .setLabel("Open It") + ])] + }).then((msg)=>{ + setTimeout(() => { +if(msg.embeds[0].title === `${client.emotes.open}| Open Ticket`){ + msg.edit({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyour time for openning the ticket channel is ended.⏰\n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) +} + }, 1000 * 50) + }) + }else { + message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription(`**My Friend, here is not a ticket channel please use this command in other channel**`) + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true))] + }) + } + } +} +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info + */ \ No newline at end of file diff --git "a/commands/Ticket \360\237\216\253/rename.js" "b/commands/Ticket \360\237\216\253/rename.js" index c1f52a5..88d0fa6 100644 --- "a/commands/Ticket \360\237\216\253/rename.js" +++ "b/commands/Ticket \360\237\216\253/rename.js" @@ -5,13 +5,6 @@ const { Permissions } = require("discord.js"); const db = require("quick.db"); -const { - errorEmbed, - CustomErrorEmbed, - successEmbed, - logsEmbed, - NeedHelpButtons -} = require("../../functions/functions"); module.exports = { name: "rename", aliases: ['re','name','ren'], @@ -19,70 +12,151 @@ module.exports = { description: "rename the ticket channel for user in server.", category: 'Ticket 🎫', usage: "[ name | text ]", - run: async function(bot, message, args, prefix){ + run: async function(client, message, args, prefix, logsChannel){ try { - var renameMessage = args[0]; - if (!message.channel.name.includes("ticket-")) { - message.reply({ - embed: errorEmbed( - message, - bot.emotes.entry+"| **My Friend, This channel it dosen't ticket channel.\nI can't rename the ticket in this channel for you because here is another channel.\nAlso you can create a ticket.**", - bot - ) - }) - return - } - let support = message.guild.roles.cache.find(r => r.id === bot.db.fetch(`TicketAdminRole_${message.guild.id}`).id); - if (!message.channel.name.includes("ticket-")) { - if(support){ - if(!message.member.roles.cache.has(support)||!message.member.permissions.has(Permissions.FLAGS.MANAGE_GUILD||Permissions.FLAGS.ADMINISTRATOR)) message.reply({ - embed: errorEmbed(message, "```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```",bot) - }) - return - } - } - if (!renameMessage) { - message.reply({ - embed: errorEmbed(message, '**for changing the ticket name you have got tell me it.\nplease write your target name right behind the command.**',bot) - }) - return - } - message.channel.send({ - embed: CustomErrorEmbed(message,'Request To Change Ticket Name','are you sure to change your ticket channel name??',bot.emotes.error,bot), - component: [ - new MessageActionRow() - .addComponents( - [new MessageButton() - .setStyle("SUCCESS") - .setEmoji("✅") - .setLabel("Change Name") - .setID("renameTicketTrue") - ], - [new MessageButton() - .setStyle("DANGER") - .setEmoji("⛔") - .setLabel("Cancel") - .setID("renameTicketFalse") - ] - )] - }).then(async function(msg) { - setTimeout(() => { - msg.edit({embed:errorEmbed(message,'your time for changing the ticket channel name is ended.☹')}).catch(err => { return }) - }, 1000 * 50); - db.set(`RenameTicket_${message.channel.id}`, renameMessage) - db.set(`DeleteRenameMessage_${message.channel.id}`, msg.id) - }) +if(message.channel.name.startsWith(`${client.emotes.help}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.exchange}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.report}︱ticket-`)||message.channel.name.startsWith(`${client.emotes.admin}︱ticket-`)||message.channel.name === db.get(`ticketName_${message.author.id}_${message.guild.id}`)){ + let ticketName = args.split(1); + if(!ticketName){ + message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\n please proved a channel name. \n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) + } + if(!message.member.roles.cache.has(db.get(`TicketAdminRole_${message.guild.id}`))&&!message.member.permissions.has([Permissions.FLAGS.MANAGE_CHANNELS])&&!message.member.permissions.has([Permissions.FLAGS.ADMINISTRATOR])) return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) +let embed = new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle(client.emotes.rename+'| **Request To Change Ticket Name**') + .setColor(client.colors.none) + .setDescription("are you sure to change your ticket channel name??") + .setFooter({ + text: "Change Name • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + }) + message.reply({ + embeds: [embed], + components: [ + new MessageActionRow() + .addComponents( + [new MessageButton() + .setStyle("SUCCESS") + .setEmoji(client.emotes.rename) + .setLabel("Change Name") + .setCustomId("renameTicketTrue") + ], + [new MessageButton() + .setStyle("DANGER") + .setEmoji(client.emotes.x) + .setLabel("Cancel") + .setCustomId("cancel") + ] + )] + }).then((msg)=>{ + db.set(`RenameTicket_${message.channel.id}`, ticketName) + if(msg.embeds[0].title === client.emotes.rename+'| **Request To Change Ticket Name**'){ + embed.setFooter({ + text: `The Time Is Up • for use again: ${prefix}rename`, + iconURL: message.guild.iconURL({ dynamic: true }) + }) + setTimeout(() => { + msg.edit({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyour time for changing the ticket channel name is ended.⏰\n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) +db.delete(`RenameTicket_${message.channel.id}`) + }, 1000 * 50) + } + }) + }else{ +return message.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + message.author.tag, + iconURL: message.author.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription(`**My Friend, here is not a ticket channel please use this command in other channel**`) + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: message.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) + } }catch(e) { console.log(e) } } } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/dashboard/index.js b/dashboard/index.js new file mode 100644 index 0000000..a5dc11c --- /dev/null +++ b/dashboard/index.js @@ -0,0 +1,322 @@ +const express = require("express"); +const app = express(); +const session = require(`express-session`); +const MemoryStore = require("memorystore")(session); +const http = require(`http`).createServer(app); +const url = require(`url`); +const clc = require('cli-color'); +const path = require(`path`); +const { Permissions } = require("discord.js"); +const ejs = require("ejs"); +const fs = require("fs") +const passport = require(`passport`); +const bodyParser = require("body-parser"); +const Strategy = require(`passport-discord`).Strategy; +require('dotenv').config() +/** + * STARTING THE WEBSITE + * @param {*} client THE DISCORD BOT CLIENT + */ +module.exports = (bot) => { + var client = bot + //Start teh website + console.log(clc.greenBright("Loading DashBoard settings")) + const settings = client.config.source; + + /** + * @INFO - Initial the Discord Login Setup! + */ + passport.serializeUser((user, done) => done(null, user)); + passport.deserializeUser((obj, done) => done(null, obj)); + passport.use(new Strategy({ + clientID: settings.client_id, + clientSecret: settings.secret, + callbackURL: settings.callback, + scope: [`identify`, `guilds`, `guilds.join`] + }, + (accessToken, refreshToken, profile, done) => { + process.nextTick(() => done(null, profile)); + })); + + + /** + * @INFO - ADD A SESSION SAVER + */ + app.use(session({ + store: new MemoryStore({ checkPeriod: 86400000 }), + secret: `#@%#&^$^$%@$^$&%#$%@#$%$^%&$%^#$%@#$%#E%#%@$FEErfgr3g#%GT%536c53cc6%5%tv%4y4hrgrggrgrgf4n`, + resave: false, + saveUninitialized: false, + })); + + // initialize passport middleware. + app.use(passport.initialize()); + app.use(passport.session()); + + + app.set('view engine', 'ejs'); + app.set('views', path.join(__dirname, './views')) + + + //Those for app.use(s) are for the input of the post method (updateing settings) + app.use(bodyParser.json()); + app.use(bodyParser.urlencoded({ + extended: true + })); + app.use(express.json()); + app.use(express.urlencoded({ + extended: true + })); + + //LOAD THE ASSETS + app.use(express.static(path.join(__dirname, './public'))); + //Load .well-known (if available) + app.use(express.static(path.join(__dirname, '/'), {dotfiles: 'allow'})); + + // We declare a checkAuth function middleware to check if an user is logged in or not, and if not redirect him. + const checkAuth = (req, res, next) => { + if (req.isAuthenticated()) return next(); + req.session.backURL = req.url; + res.redirect("/login"); + }; + + //Login endpoint + app.get(`/login`, (req, res, next) => { + if (req.session.backURL) { + req.session.backURL = req.session.backURL; + } else if (req.headers.referer) { + const parsed = url.parse(req.headers.referer); + if (parsed.hostname === app.locals.domain) { + req.session.backURL = parsed.path; + } + } else { + req.session.backURL = `/`; + } + next(); + }, passport.authenticate(`discord`, { prompt: `none` }) + ); + + + //Callback endpoint for the login data + app.get(`/callback`, passport.authenticate(`discord`, { failureRedirect: "/" }), async (req, res) => { + let banned = false // req.user.id + if(banned) { + req.session.destroy(() => { + res.json({ login: false, message: `You have been blocked from the Dashboard.`, logout: true }) + req.logout(); + }); + } else { + res.redirect(`/dashboard`) + } + }); + + + + //When the website is loaded on the main page, render the main page + with those variables + app.get("/", (req, res) => { + res.render("index", { + req: req, + user: req.isAuthenticated() ? req.user : null, + //guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.callback, + categories: client.categories, + commands: client.commands, + BotConfig: client.config, + BotFilters: client.config.filters, + BotEmojis: client.config.emojis, + }); + }) + + + // When the commands page is loaded, render it with those settings + app.get("/commands", (req, res) => { + res.render("commands", { + req: req, + user: req.isAuthenticated() ? req.user : null, + //guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.callback, + categories: client.categories, + commands: client.commands, + BotConfig: client.config, + BotEmojis: client.config.emojis, + }) + }) + + + //Logout the user and move him back to the main page + app.get(`/logout`, function (req, res) { + req.session.destroy(() => { + req.logout(); + res.redirect(`/`); + }); + }); + + // Dashboard endpoint. + app.get("/dashboard", checkAuth, async (req,res) => { + if(!req.isAuthenticated() || !req.user) + return res.redirect("/?error=" + encodeURIComponent("Login First!")); + if(!req.user.guilds) + return res.redirect("/?error=" + encodeURIComponent("Unable to get your Guilds!")); + res.render("dashboard", { + req: req, + user: req.isAuthenticated() ? req.user : null, + //guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.callback, + categories: client.categories, + commands: client.commands, + BotConfig: client.config, + BotEmojis: client.config.emojis, + }); + }) + + // Settings endpoint. + app.get("/dashboard/:guildID", checkAuth, async (req, res) => { + // We validate the request, check if guild exists, member is in guild and if member has minimum permissions, if not, we redirect it back. + const guild = client.guilds.cache.get(req.params.guildID); + if (!guild) return res.redirect("/dashboard?error=" + encodeURIComponent("Can't get Guild Information Data")); + let member = guild.members.cache.get(req.user.id); + if (!member) { + try { + member = await guild.members.fetch(req.user.id); + } catch (err) { + console.error(`Couldn't fetch ${req.user.id} in ${guild.name}: ${err}`); + } + } + if (!member) return res.redirect("/dashboard?error=" + encodeURIComponent("Unable to fetch you, sorry!")); + if (!member.permissions.has(Permissions.FLAGS.MANAGE_GUILD)) { + return res.redirect("/dashboard?error=" + encodeURIComponent("You are not allowed to do that!")); + } + client.settings.ensure(guild.id, { + prefix: client.config.prefix, + defaultvolume: 50, + defaultautoplay: false, + defaultfilters: [`bassboost6`, `clear`], + djroles: [], + botchannel: [] + }) + // We render template using the absolute path of the template and the merged default data with the additional data provided. + res.render("settings", { + req: req, + user: req.isAuthenticated() ? req.user : null, + guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.callback, + categories: client.categories, + commands: client.commands, + BotConfig: client.config, + BotEmojis: client.config.emojis, + } + ); + }); + // Settings endpoint. + app.post("/dashboard/:guildID", checkAuth, async (req, res) => { + // We validate the request, check if guild exists, member is in guild and if member has minimum permissions, if not, we redirect it back. + const guild = client.guilds.cache.get(req.params.guildID); + if (!guild) return res.redirect("/dashboard?error=" + encodeURIComponent("Can't get Guild Information Data!")); + let member = guild.members.cache.get(req.user.id); + if (!member) { + try { + member = await guild.members.fetch(req.user.id); + } catch (err) { + console.error(`Couldn't fetch ${req.user.id} in ${guild.name}: ${err}`); + } + } + if (!member) return res.redirect("/dashboard?error=" + encodeURIComponent("Can't Information Data about you!")); + if (!member.permissions.has("MANAGE_GUILD")) { + return res.redirect("/dashboard?error=" + encodeURIComponent("You are not allowed to do that!")); + } + if(req.body.prefix) client.settings.set(guild.id, String(req.body.prefix).split(" ")[0], "prefix") + if(req.body.defaultvolume) client.settings.set(guild.id, Number(req.body.defaultvolume), "defaultvolume") + //if autoplay is enabled set it to true + if(req.body.defaultautoplay) client.settings.set(guild.id, true, "defaultautoplay") + //otherwise not + else client.settings.set(guild.id, false, "defaultautoplay") + + //if there are new defaultfilters, set them + if(req.body.defaultfilters) client.settings.set(guild.id, req.body.defaultfilters, "defaultfilters") + if(req.body.djroles) client.settings.set(guild.id, req.body.djroles, "djroles") + if(req.body.botchannel) client.settings.set(guild.id, req.body.botchannel, "botchannel") + // We render template using the absolute path of the template and the merged default data with the additional data provided. + res.render("settings", { + req: req, + user: req.isAuthenticated() ? req.user : null, + guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + + Permissions: Permissions, + bot: settings.website, + callback: settings.config.callback, + categories: client.categories, + commands: client.commands, + BotConfig: client.config, + BotFilters: client.config.filters, + BotEmojis: client.config.emojis, + } + ); + }); + // Queue Dash + app.get("/queue/:guildID", async (req,res) => { + res.render("queue", { + req: req, + user: req.isAuthenticated() ? req.user : null, + guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.config.callback, + categories: client.categories, + commands: client.commands, + BotConfig: client.config, + BotFilters: client.config.filters, + BotEmojis: client.config.emojis, + }); + }) + //Queue Dashes + app.get("/queuedashboard", checkAuth, async (req,res) => { + if(!req.isAuthenticated() || !req.user) + return res.redirect("/?error=" + encodeURIComponent("Login First!")); + if(!req.user.guilds) + return res.redirect("/?error=" + encodeURIComponent("Unable to get your Guilds!")); + res.render("queuedashboard", { + req: req, + user: req.isAuthenticated() ? req.user : null, + //guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.callback, + categories: client.categories, + commands: client.commands, + BotConfig: client.config, + BotFilters: client.config.filters, + BotEmojis: client.config.emojis, + }); + }) + /** + * @START THE WEBSITE + */ + //START THE WEBSITE ON THE DEFAULT PORT (80) + http.listen(settings.port, () => { + console.log(`[${settings.callback}]: HTTP-Website running on ${settings.port} port.`) + }); +} +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info + */ \ No newline at end of file diff --git a/dashboard/public/commands.css b/dashboard/public/commands.css new file mode 100644 index 0000000..09a0b0b --- /dev/null +++ b/dashboard/public/commands.css @@ -0,0 +1,107 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap'); + + +body { + background: #23272A +} +h1 { + text-align: center; +} +p { + text-align: center; +} +a { + color: #5663F7; + text-decoration: none; + transition: all 0.2s ease; +} +a:hover { + color: #0062ff +} +section { + margin-top: 10px; + margin-bottom: 30px; +} + +.command_head { + padding-top: 50px; + padding-bottom: 50px; + color: white; +} + +#category { + border-radius: 5px; + padding-bottom: 50px; +} + +#category a { + background-color: #151f2e; + color: white; +} +#category a.active { + background-color: #5663F7; + border-color: #5663F7; +} + +.accordion-item { + background-color: #151f2e; + color: #9fadbd; +} + +.accordion-button { + color: white; +} + +.accordion-button:not(.collapsed) { + color: white; + background-color: #5663F7; +} + +/* .accordion-button:not(.collapsed)::after { + background-image: url(https://cdn3.iconfinder.com/data/icons/faticons/32/arrow-up-01-512.png); + transform: rotate(180deg); + filter: invert(100%) +} +.accordion-button::after { + background-image: url(https://cdn3.iconfinder.com/data/icons/faticons/32/arrow-up-01-512.png); +} */ + +.accordion-button:focus { + z-index: 0; + border-color: transparent; + outline: 0; + box-shadow: 0 0 0 0.25rem transparent; +} + +.accordion-item:first-of-type { + border-top-left-radius: .25rem; + border-top-right-radius: .25rem; +} + + +.accordion-item:last-of-type { + border-bottom-left-radius: .25rem; + border-bottom-right-radius: .25rem; +} + +#commands_menu { + font-family: 'Poppins', sans-serif; +} + + +/* ANIMATION */ + +.slide-up-fade-in{ + animation: slide-up-fade-in ease 1.5s; +} + +@keyframes slide-up-fade-in{ + 0% { + opacity:0; + transform: translate(0px,40px) ; + } + 100% { + opacity:1; + transform: translate(0px,0px) ; + } +} \ No newline at end of file diff --git a/dashboard/public/index.css b/dashboard/public/index.css new file mode 100644 index 0000000..179ef0a --- /dev/null +++ b/dashboard/public/index.css @@ -0,0 +1,332 @@ +body { + background: #23272A; + color: white; + height: 100%; +} +.btn-outline-success { + border-radius: 5px; + zoom: 2; + margin-right: 5%; + background-color: #5663f7; + border: solid 1px #5663f7; + color: #ffffff; + transition: all 0.2s ease; +} +.btn-outline-success:hover{ + border-radius: 15px; + background-color: #57F287; + border: solid 1px #57F287; +} +.navbar-brand img { + width: 80px; + border-radius: 5px; +} +.nav-item { + padding-left: 30px; + font-size: 30px; +} +.nav-item a{ + text-decoration: none; + color: #cacaca; +} +.nav-item a:hover{ + color: #ffffff; +} +.nav-item b{ + text-decoration: none; + color: #41cf48!important; +} +.nav-item b:hover{ + color: #56ff8e!important; +} +.nav-item button { + border-radius: 10px; + height: 80px; + font-size: 40px; + transition: all 0.2s ease; +} +.nav-item button:hover { + border-radius: 20px; + height: 80px; + font-size: 40px; +} + +form.d-flex button { + background-color: #5663F7; + color: white; + outline: none; + border: none; +} + +form.d-flex button:hover { + background-color: #5663F7; +} + +/* MAIN BODY */ + +.head { + padding-top: 260px; + color: white; + line-height: 1.3; + text-align: center; +} + +.subtext { + padding-bottom: 330px; + color: rgb(255, 255, 255, .55); + line-height: 1.3; + text-align: center; + +} + +.container { + max-width: 1300px; +} + +.pt-10 { + padding-top: 10rem!important; +} + +.pt-16 { + padding-top: 20rem!important; +} + +.custom-1 img { + float: right; + border-radius: 10px; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +} + +.custom-1 h3 { + padding-top: 60px; +} + +.custom-1 p { + color: rgb(255, 255, 255, .55); + width: 40%; +} + +.custom-2 img { + float: left; + border-radius: 10px; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +} + +.custom-2 h3 { + padding-top: 60px; + float: right; + width: 40%; +} + +.custom-2 p { + float: right; + width: 40%; + color: rgb(255, 255, 255, .55); +} + + +/* MEDIA */ + +@media screen and (max-width: 967px) { + .custom-1 img { + float: none; + display: block; + margin-left: auto; + margin-right: auto; + height: auto; + } + + .pt-10 { + padding-top: 5rem!important; + } + .pt-16 { + padding-top: 2rem!important; + } + + .custom-1 p { + text-align: center; + width: 100%; + } + + .custom-1 h3 { + text-align: center; + } + + .custom-2 p { + text-align: center; + float: none; + width: 100%; + } + + .custom-2 h3 { + float: none; + text-align: center; + width: 100%; + } + + .custom-2 img { + float: none; + display: block; + margin-left: auto; + margin-right: auto; + height: auto; + } + +} + + + +.card { + max-width: 18rem; + margin: 2rem; + min-width: 10em; + background: #23272A; +} + + + + +.form-holder { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + min-height: 100vh; +} + +.form-holder .form-content { + position: relative; + text-align: center; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-justify-content: center; + justify-content: center; + -webkit-align-items: center; + align-items: center; + padding: 60px; +} + +.form-content .form-items { + border: 3px solid #fff; + padding: 40px; + display: inline-block; + width: 100%; + min-width: 540px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + text-align: left; + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +.form-content h3 { + color: #fff; + text-align: left; + font-size: 28px; + font-weight: 600; + margin-bottom: 5px; +} + +.form-content h3.form-title { + margin-bottom: 30px; +} + +.form-content p { + color: #fff; + text-align: left; + font-size: 17px; + font-weight: 300; + line-height: 20px; + margin-bottom: 30px; +} + + +.form-content label, .was-validated .form-check-input:invalid~.form-check-label, .was-validated .form-check-input:valid~.form-check-label{ + color: #fff; +} + +.form-content input[type=text], .form-content input[type=password], .form-content input[type=email], .form-content select { + width: 100%; + padding: 9px 20px; + text-align: left; + border: 0; + outline: 0; + border-radius: 6px; + background-color: #fff; + font-size: 15px; + font-weight: 300; + color: #292929; + -webkit-transition: all 0.3s ease; + transition: all 0.3s ease; + margin-top: 16px; +} + + +.form-content textarea { + position: static !important; + width: 100%; + padding: 8px 20px; + border-radius: 6px; + text-align: left; + background-color: #fff; + border: 0; + font-size: 15px; + font-weight: 300; + color: #292929; + outline: none; + resize: none; + height: 120px; + -webkit-transition: none; + transition: none; + margin-bottom: 14px; +} + +.form-content textarea:hover, .form-content textarea:focus { + border: 0; + background-color: #ebeff8; + color: #292929; +} + +.mv-up{ + margin-top: -9px !important; + margin-bottom: 8px !important; +} + +.invalid-feedback{ + color: #ff606e; +} + +.valid-feedback{ + color: #2acc80; +} +.bootstrap-select.btn-group .dropdown-menu li a:hover { + color: whitesmoke !important; + background: #bf5279 !important; +} +select { + height: 40px!important; + margin-top: -10px; +} +.form-control { + height: 40px!important; + margin-top: -10px; +} +.selectpicker { + height: 40px!important; + margin-top: -10px; +} +.current-song { + margin-top: -20%; + min-height: 100vh; /* minimum height = screen height */ + display: flex; + justify-content: center; + align-items: center; +} +.current-song img { + border-radius: 15px; +} \ No newline at end of file diff --git a/dashboard/views/commands.ejs b/dashboard/views/commands.ejs new file mode 100644 index 0000000..b18699c --- /dev/null +++ b/dashboard/views/commands.ejs @@ -0,0 +1,90 @@ +<%- include('header'); -%> + + + + + + + + + <%= bot.name %> + + + + +
+
+ +
+

Bot Commands

+

+ + Invite me with Slash Commands Permissions, cause all of my Commands are available as Slash Commands too

+ + +
+
+
+
+ <% categories.forEach((category, i) => { %> + <%= category %> + <% }) %> +
+
+
+
+ <% categories.forEach((category, k) => { %> +
+
+ <% commands.filter((cmd) => cmd.category === category).forEach((cmd, i) => { %> +
+

+ +

+
+
+ Description : <%= cmd.description %>
+ Aliases : <% cmd.aliases && cmd.aliases.length > 0 ? cmd.aliases.forEach(a => { %> + [+<%= a %>] + <% }) : "NO" %>
+ Usage : <%= cmd.usage %>
+
+
+
+ <% }) %> +
+
+ <% }) %> +
+
+
+
+
+ + +
+ +
+ + + \ No newline at end of file diff --git a/dashboard/views/dashboard.ejs b/dashboard/views/dashboard.ejs new file mode 100644 index 0000000..6c6c83e --- /dev/null +++ b/dashboard/views/dashboard.ejs @@ -0,0 +1,81 @@ +<%- include('header'); -%> + + + + + + + + + <%= bot.name %> + + + + + +
+
+

DASHBOARD

+
+
+

With the Dashboard you can manage the Settings of each single Guild individually!
Only if you have the Manage Server Setting, cause that's needed for that Command!

+
+ <% if(user && user.id){ %> +
+ <% user.guilds + .filter((guild) => { + const permsOnGuild = new Permissions(guild.permissions_new); + if(permsOnGuild.has(Permissions.FLAGS.MANAGE_GUILD)) return guild; + }) + .sort((a, b) => { + return (botClient.guilds.cache.get(a.id) === botClient.guilds.cache.get(b.id)) ? 0 : a ? -1 : 1; + }) + .forEach(guild => { + %> +
+ <%- guild.icon ? `` : `` %> +
+
<%= guild.name %>
+ <% if (botClient.guilds.cache.get(guild.id)) { %> +

Edit <%= guild.name %>'s Settings via the Dashboard by clicking the Button below!

+ Edit Settings + <% } else { %> +

Invite me to <%= guild.name %> in order to view their guild's Settings via the Dashboard by clicking the button below!

+ Invite Bot + <% } %> +
+
+ <% + }); + %> +
+ <% + } else { + %> +

Please login First!

+ <% + } + %> +
+ +
+ +
+ + + + + diff --git a/dashboard/views/header.ejs b/dashboard/views/header.ejs new file mode 100644 index 0000000..67e28a3 --- /dev/null +++ b/dashboard/views/header.ejs @@ -0,0 +1,52 @@ + + + + + + + \ No newline at end of file diff --git a/dashboard/views/index.ejs b/dashboard/views/index.ejs new file mode 100644 index 0000000..665b178 --- /dev/null +++ b/dashboard/views/index.ejs @@ -0,0 +1,108 @@ + +<%- include('header'); -%> + + + + + + + + + + <%= bot.name %> + + + + + +
+
+

+ <%= botClient.user.username %> | Advanced Ticket System Experience +

+
+
+

The Best Ticket Bot with the Best!

+
+
+ +
+ +
+
+
+
+
+
+
All needed Commands for your Server
+

Are you sick of having a Ticket Bot with thousands Commands? Ticker Boy has all Commands needed in just one Single Bot!
Tho they don't see like "much" you can use our Command structures to add one of the

+
+
+
+
+
+ + +
+
+
+
+
+
+

We are using FFMPEG, to give you the highest Audio Quality possible! As a matter of fact, we spawn them instantly and have no lag at all!

+
+
+
+
+
+ + +
+
+
+
+
+
+
Spotify, Soundcloud, Youtube, and 1100+ Other Links Supported!
+

We Support everything you listen to! + INCLUDING PLAYLISTS AND 20 PREDEFINED, optimized, PLAYLISTS! (mix)

+
+
+
+
+
+ + +
+
+
+
+
+
+
Clear Interface, with Logs and instant Buttons!
+

So that you can get all you want instantly from the Bot, and see everything what/who happened!

+
+
+
+
+
+ +
+ +
+ +
+ + + + + diff --git a/dashboard/views/queue.ejs b/dashboard/views/queue.ejs new file mode 100644 index 0000000..9a8b158 --- /dev/null +++ b/dashboard/views/queue.ejs @@ -0,0 +1,200 @@ +<%- include('header'); -%> + + + + + + + + + <%= guild.name %> + + + + + + <% + const nFormatter = function(num, digits = 2) { + const lookup = [ + { value: 1, symbol: "" }, + { value: 1e3, symbol: "k" }, + { value: 1e6, symbol: "M" }, + { value: 1e9, symbol: "G" }, + { value: 1e12, symbol: "T" }, + { value: 1e15, symbol: "P" }, + { value: 1e18, symbol: "E" } + ]; + const rx = /\.0+$|(\.[0-9]*[1-9])0+$/; + var item = lookup.slice().reverse().find(function(item) { + return num >= item.value; + }); + return item ? (num / item.value).toFixed(digits).replace(rx, "$1") + item.symbol : "0"; + } + %> + + +
+

+ <% if(botClient.distube.getQueue(guild.id) && botClient.distube.getQueue(guild.id).songs && botClient.distube.getQueue(guild.id).songs.length > 0){ let current = botClient.distube.getQueue(guild.id).songs[0] %> + +
+

Current Song:

+
+ +
+ +
+
+ <%= String(current.name).substr(0, 50) %> +
+ +
+
+
+
+ <%= botClient.distube.getQueue(guild.id).formattedCurrentTime %><%= current.formattedDuration %> +
+

<%= String(current.name).length > 70 ? String(current.name).substr(0, 69) + " ..." : String(current.name) %>

+

+ + Requested by: <%= current.user.username %>#<%= current.user.discriminator %> +

+

+ + <%= nFormatter(current.views, 2) %> +

+

+ + <%= nFormatter(current.likes, 2) %> +

+

+ + <%= nFormatter(current.dislikes, 2) %> +

+

+ + Duration: <%= current.formattedDuration %> | <%= current.duration %> Seconds +

+
+
+ + +
+
+
+
+ +
+

Show the Music Queue [ <%= botClient.distube.getQueue(guild.id) && botClient.distube.getQueue(guild.id).songs ? botClient.distube.getQueue(guild.id).songs.length : 0 %> Songs ]

+
+
+
+ Card image cap +
+
0. <%= current.name %>
+

Requested by: <%= current.user.tag %>

+

Duration: <%= botClient.distube.getQueue(guild.id).formattedCurrentTime + " / " + current.formattedDuration %>

+
+
+ <% botClient.distube.getQueue(guild.id).songs.forEach((song, i) => { if(i>0){ %> +
+ Card image cap +
+
<%= i + 1%>. <%= song.name %>
+

Requested by: <%= song.user.tag %>

+

Duration: <%= song.formattedDuration %>

+
+
+ <% }}) %> +
+ <% }else{ %> +
+

Currently there is nothing Playing

+
+ <% } %> +
+ +
+ +
+ + + + + + + diff --git a/dashboard/views/settings.ejs b/dashboard/views/settings.ejs new file mode 100644 index 0000000..5682c6d --- /dev/null +++ b/dashboard/views/settings.ejs @@ -0,0 +1,159 @@ +<%- include('header'); -%> + + + + + + + + + <%= guild.name %> + + + + + + + + + +
+
+

<%= guild.name %> | Dashboard

+
+
+
+
+
+
+

Server Settings

+

Change the Server Settings of <%= botClient.user.username %> in <%= guild.name %>.

+
+
Prefix:
+

The prefix that is added to discord messages in order to invoke commands.

+ + +

+
Default Autoplay:
+

If the Autoplay should be enabled on the Queue Initialisation.

+
+    > + + + +
+ +

+
Default Volume:
+

The Volume to be set on the Queue Initialisation.

+ + Current Volume: <%= botClient.settings.get(guild.id, 'defaultvolume')%>% + + +

+
Dj-Roles:
+

All Users with the Selected-Roles/Song-Requester are allowed to use Queue / Song Manipulation Commands. | Pick no Role, to disable!

+ + + +

+
Whitelisted Bot-Channels:
+

All Bot Channels which are Whitelisted! | The Bot will only responde to Commands in one of those Channels!

+ + + + +

+
Default Filters:
+

Filters to be added to the Queue before starting to play!

+ + +

+ +
+
+
+
+
+ +
+

Show the Music Queue [ <%= botClient.distube.getQueue(guild.id) && botClient.distube.getQueue(guild.id).songs ? botClient.distube.getQueue(guild.id).songs.length : 0 %> Songs]

+ + +
+
+ + +
+ +
+ + + + + + diff --git a/events/button/interactionCreate.js b/events/button/interactionCreate.js index dda0164..2206409 100644 --- a/events/button/interactionCreate.js +++ b/events/button/interactionCreate.js @@ -126,14 +126,14 @@ if (interaction.customId == 'create') { ]) ] }) - setTimeout(()=>{ +/* setTimeout(()=>{ embed.setFooter({ text: `The Time Is Up • for use again: ${prefix}ticket`, iconURL: interaction.guild.iconURL({ dynamic: true }) }) menu.setDisabled(true) cancel.setDisabled(true) - interaction.update({ + interaction.editReply({ embeds: [embed], components: [new MessageActionRow() .addComponents([menu]),new MessageActionRow() @@ -146,7 +146,72 @@ if (interaction.customId == 'create') { ] }) },61*1000) + */ } + +if(interaction.customId == "create_ticket"){ + let embed = new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setTitle(client.emotes.ticket + '| **Create Ticket**') + .setColor(client.colors.none) + .addField(`${client.emotes.reason}Description:`,`Dear friend, you have made a request to make a ticket. If you agree to make your ticket, click on the menu below the message and specify the reason for making your ticket, but if you disagree, click on the red button, be successful and victorious.😎`) + .setFooter({ + text: "Create Ticket • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + }) + + let menu = new MessageSelectMenu() + .setPlaceholder(`${client.emotes.ticket}| Select Your Ticket Reason`) + .setOptions([ + { + label: 'Need Help', + value: 'need_help', + emoji: client.emotes.help, + }, + { + label: 'Report Bot/Admin/Member', + value: 'report_bam', + emoji: client.emotes.report + }, + { + label: 'Exchange', + value: 'exchange', + emoji: client.emotes.exchange + }, + { + label: 'Admin Program', + value: 'admin', + emoji: client.emotes.admin + } + ]) + .setMinValues(1) + .setMaxValues(1) + .setCustomId("ticket_menu") + + let cancel = new MessageButton() + .setStyle("DANGER") + .setLabel("Canceled") + .setCustomId("dont_do") + .setEmoji(client.emotes.x) + + return interaction.reply({ + ephemeral: true, + embeds: [embed], + components: [new MessageActionRow() + .addComponents([menu]),new MessageActionRow() + .addComponents([cancel],[new MessageButton() + .setStyle("LINK") + .setEmoji(client.emotes.support) + .setLabel("Support") + .setURL(client.config.discord.server_support) + ]) + ] + }) +} + if (interaction.customId == 'create_need_help_ticket') { if (!interaction.guild.channels.cache.find(x => x.name === ticketName)) { interaction.guild.channels.create(`${client.emotes.help}︱ticket-${interaction.user.tag}`, { @@ -1099,7 +1164,7 @@ your ticket channel created and ready.\nplease wait the moderators or admins to if(!interaction.member.roles.cache.has(db.get(`TicketAdminRole_${interaction.guild.id}`))&&!interaction.member.permissions.has([Permissions.FLAGS.MANAGE_CHANNELS])&&!interaction.member.permissions.has([Permissions.FLAGS.ADMINISTRATOR])) return interaction.reply({ embeds: [new MessageEmbed() .setAuthor({ - name: `Requested by ` + interaction.user.username, + name: `Requested by ` + interaction.user.tag, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) .setTitle('⛔️| **We Got An Error**') @@ -1399,7 +1464,7 @@ your ticket channel created and ready.\nplease wait the moderators or admins to interaction.update({ embeds: [new MessageEmbed() .setAuthor({ - name: `Requested by ` + interaction.user.name, + name: `Requested by ` + interaction.user.tag, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) .setTitle(client.emotes.x + '| **Canceling The Adding People To Ticket**') diff --git a/events/client/disconnect.js b/events/client/disconnect.js index a3f50d5..9ddf7df 100644 --- a/events/client/disconnect.js +++ b/events/client/disconnect.js @@ -1,13 +1,20 @@ let clc = require('cli-color'); module.exports = async (client) => { - client.logger(clc.redBright(`You have been disconnected at ${new Date()}.`)); + client.logger(clc.redBright(`You have been disconnected at ${new Date()}.`)); + setInterval(() => { + if(!client || !client.user) { + console.log("The Client Didn't Login Proccesing Kill 1") + process.kill(1); + } else { + } + }, 10000);  } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/client/error.js b/events/client/error.js index 058c17c..f0efab3 100644 --- a/events/client/error.js +++ b/events/client/error.js @@ -3,12 +3,12 @@ module.exports = (client, error) => { client.on("error",() => clc.redBright(console.error())); console.log(clc.redBright(String(error))) } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/client/rateLimit.js b/events/client/rateLimit.js index de91bbc..fd3c45b 100644 --- a/events/client/rateLimit.js +++ b/events/client/rateLimit.js @@ -2,12 +2,12 @@ let clc = require('cli-color'); module.exports = async (client, rateLimitData) => { client.logger(clc.cyanBright(JSON.stringify(rateLimitData))); } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/client/ready.js b/events/client/ready.js index 1ec06a8..df49189 100644 --- a/events/client/ready.js +++ b/events/client/ready.js @@ -2,8 +2,10 @@ var clc = require("cli-color"); var Discord = require('discord.js') module.exports = async (client) => { setInterval(function Activitys() { - let totalUsers = client.guilds.cache.reduce((acc, value) => acc + value.memberCount, 0) - + let totalUsers = client.guilds.cache.map(guild => guild.memberCount).reduce((a, b) => a + b, 0); + if(totalUsers > 5000){ + totalUsers = (client.guilds.cache.map(guild => guild.memberCount).reduce((a, b) => a + b, 0) / 1000).toString().slice(0, -2)+"k"; + } let Presence = [ "dnd", "idle", "online" ]; //can be: online | dnd | idle | offline let PresencePower = Presence[Math.floor(Math.random() * Presence.length)] let Activity = [`${client.prefix}help`, `${client.prefix}ticket` , `${client.guilds.cache.size} Servers`, `${totalUsers} Users`]; @@ -13,23 +15,7 @@ module.exports = async (client) => { let URL = [ `https://www.twitch.tv/sobhan_srza` ]; let URLPower = URL[Math.floor(Math.random() * URL.length)]; client.user.setPresence({ status: PresencePower }) - client.user.setActivity({ type: DisplayPower, name: ActivityPower, url: URLPower }); - /* - client.user.setPresence({ status: "online" }) - client.user.setActivity({ type: "WATCHING", name: `${totalUsers} Users` }); - setTimeout(()=>{ - client.user.setPresence({ status: "idle" }) - client.user.setActivity({ type: "PLAYING", name: `${client.guilds.cache.size} Servers` }); - },5000) - setTimeout(()=>{ - client.user.setPresence({ status: "dnd" }) - client.user.setActivity({ type: "COMPETING", name: `${client.prefix}help` }); - },10000) - setTimeout(()=>{ - client.user.setPresence({ status: "dnd" }) - client.user.setActivity({ type: "COMPETING", name: `${client.prefix}ticket` }); - },15000) - */ + client.user.setActivity({ type: DisplayPower, name: ActivityPower, url: URLPower }); }, 10000) try{ @@ -44,7 +30,7 @@ try{ console.log("\n") client.logger( clc.blueBright(`Working Guilds: `) + clc.greenBright(`${client.guilds.cache.size} Servers`) + `\n` + - clc.blueBright(`Watching Members: `) + clc.greenBright(`${client.guilds.cache.reduce((a, b) => a + b.memberCount, 0)} Members`) + `\n` + + clc.blueBright(`Watching Users: `) + clc.greenBright(`${client.guilds.cache.map(guild => guild.memberCount).reduce((a, b) => a + b, 0)} Users`) + `\n` + clc.blueBright(`Commands: `) + clc.greenBright(`${client.commands.size}`) + `\n` + clc.blueBright(`Slash Commands: `) + clc.greenBright(`${client.slashCommands.size}`) + `\n` + clc.blueBright(`Discord.js: `) + clc.greenBright(`v${Discord.version}`) + `\n` + @@ -54,12 +40,12 @@ try{ ); }catch{ /* */ } } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/client/reconnecting.js b/events/client/reconnecting.js index bc5411e..1d94d9d 100644 --- a/events/client/reconnecting.js +++ b/events/client/reconnecting.js @@ -1,13 +1,20 @@ let clc = require('cli-color'); module.exports = async (client) => { - client.logger(clc.bgYellowBright(`Reconnceting at ${new Date()}.`)); + client.logger(clc.bgYellowBright(`Reconnceting at ${new Date()}.`)); + setInterval(() => { + if(!client || !client.user) { + console.log("The Client Didn't Login Proccesing Kill 1") + process.kill(1); + } else { + } + }, 10000);  } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/client/warn.js b/events/client/warn.js index 4b55923..683b729 100644 --- a/events/client/warn.js +++ b/events/client/warn.js @@ -3,12 +3,12 @@ module.exports = (client, error) => { client.on("warn", (info) => console.log(info)); console.log(clc.redBright(String(error))) } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/guild/guildCreate.js b/events/guild/guildCreate.js index dfdcfe8..f960fd6 100644 --- a/events/guild/guildCreate.js +++ b/events/guild/guildCreate.js @@ -26,17 +26,17 @@ module.exports = async (client, guild) => { channel.send({ embeds: [embed] }) - if(!guild.id==="901877002926174279"&&guild.memberCount < 90){ +/* if(!guild.id==="901877002926174279"&&guild.memberCount < 90){ owner.send("Hi I left on your server because the number of members of your server is less than 100") guild.leave() - } + }*/ } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/guild/guildDelete.js b/events/guild/guildDelete.js index 39007ae..0dd3fc9 100644 --- a/events/guild/guildDelete.js +++ b/events/guild/guildDelete.js @@ -3,10 +3,11 @@ const { } = require('discord.js'); module.exports = async (client, guild) => { let channel = client.channels.cache.get(client.config.discord.server_channel_status); - let invite = await guild.channels?.cache.filter(x => x.type === 'GUILD_TEXT')?.random(1)[0]?.createInvite({ + /* let invite = await guild.channels?.cache.filter(x => x.type === 'GUILD_TEXT')?.random(1)[0]?.createInvite({ maxAge: 0, maxUses: 5 }) + */ const owner = await guild.members.cache.get(guild.ownerId); const embed = new MessageEmbed() .setAuthor({ @@ -27,12 +28,12 @@ module.exports = async (client, guild) => { embeds: [embed] }) } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/interaction/interactionCreate.js b/events/interaction/interactionCreate.js index 4b97a78..01b5f4e 100644 --- a/events/interaction/interactionCreate.js +++ b/events/interaction/interactionCreate.js @@ -4,21 +4,13 @@ const { Permissions } = require("discord.js"); var clc = require("cli-color"); -const { - slashCommandsCoolDown -} = require('../../functions/functions.js'); module.exports = async (client, interaction) => { try { - if(!interaction.guild.me.permissions.has(Permissions.FLAGS.SEND_MESSAGES)) return; + if(!interaction.guild.me.permissions.has(Permissions.FLAGS.SEND_MESSAGES)) return interaction.user.send({content: `${client.emotes.off}| I am missing the Permission to \`SEND_MESSAGES\` at ${interaction.channel}`,}) if(!interaction.guild.me.permissions.has(Permissions.FLAGS.USE_EXTERNAL_EMOJIS)) - return interaction.reply({content: `${client.emotes.off}| I am missing the Permission to \`USE_EXTERNAL_EMOJIS\`` }) + return interaction.reply({content: `${client.emotes.off}| I am missing the Permission to \`USE_EXTERNAL_EMOJIS\``, ephemeral: true }) if(!interaction.guild.me.permissions.has(Permissions.FLAGS.EMBED_LINKS)) - return interaction.reply({content: `${client.emotes.error}| I am missing the Permission to \`EMBED_LINKS\`` }) - /*if(!interaction.guild.me.permissions.has(Permissions.FLAGS.ADD_REACTIONS)) - return interaction.reply({embeds: [new MessageEmbed() - .setColor(client.colors.red) - .setTitle(`${client.emotes.entry}| I am missing the Permission to \`ADD_REACTIONS\``)]}) - */ + return interaction.reply({content: `${client.emotes.error}| I am missing the Permission to \`EMBED_LINKS\``, ephemeral: true }) if (interaction.isCommand()) { const command = client.slashCommands.get(interaction.commandName); @@ -39,7 +31,8 @@ try { embeds: [new MessageEmbed() .setTitle(`${client.emotes.badage}| **That Command Has Been Disabled By The Developers! Please Try Later.**`) .setColor(client.colors.red) - ] + ], + ephemeral: true }).catch((e) => { console.log(e) }); @@ -55,7 +48,7 @@ try { }); if (!interaction.guild.me.permissions.has(command.botPermissions || [])) return await interaction.reply({ embeds: [new MessageEmbed() - .setDescription(`${client.allEmojis.x}| **I do not have \`${command.botPermissions.join(", ")}\` permission to use \`${command.name}\` command!**`) + .setDescription(`${client.emotes.x}| **I do not have \`${command.botPermissions.join(", ")}\` permission to use \`${command.name}\` command!**`) .setColor(client.colors.orange) ], ephemeral: true @@ -64,7 +57,29 @@ try { }); //======== Slash Command Cooldown ======== - slashCommandsCoolDown(client, interaction, command) + if (!client.cooldowns.has(command.name)) { + client.cooldowns.set(command.name, new Collection()); + } + const now = Date.now(); + const timestamps = client.cooldowns.get(command.name); + const cooldownAmount = (command.cooldown || 5) * 1000; + + if (timestamps.has(interaction.user.id)) { + const expirationTime = timestamps.get(interaction.user.id) + cooldownAmount; + + if (now < expirationTime) { + const timeLeft = (expirationTime - now) / 1000; + return interaction.reply({ + embeds: [new MessageEmbed() + .setColor(client.colors.none) + .setDescription(`**${client.emotes.alert}| Please wait \`${Math.round(timeLeft)}\` more second(s) before reusing the \`${command.name}\` command!**`) + ], + ephemeral: true + }) + } + } + timestamps.set(interaction.user.id, now); + setTimeout(() => timestamps.delete(interaction.user.id), cooldownAmount); //======== Slash Command Handler ======== command.run(client, interaction, args); @@ -82,12 +97,12 @@ try { console.log(err) } } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/menu/interactionCreate.js b/events/menu/interactionCreate.js index 8166c56..0ba51ff 100644 --- a/events/menu/interactionCreate.js +++ b/events/menu/interactionCreate.js @@ -43,8 +43,9 @@ module.exports = async (client, interaction) => { } } if(interaction.customId === "ticket_menu"){ + let time = 3*1000;//this is for timeout t if(interaction.values[0] === 'need_help'){ - await interaction.reply({ + interaction.update({ components: [new MessageActionRow() .addComponents([new MessageButton() .setDisabled(true) @@ -58,15 +59,13 @@ module.exports = async (client, interaction) => { .setColor(client.colors.none) .setTitle(`🔃| Process Is Loading...`) ], - ephemeral: true - }) - interaction.editReply({ - content: ` `, + }).then((m)=>{ + setTimeout(()=>{ + interaction.editReply({ embeds: [new MessageEmbed() .setColor(client.colors.none) .setTitle(`${client.emotes.tickets}| Create Ticket`) - .addField(`Language: PER:flag_ir:`,`دوست عزیز شما درخواستی برای ساخت یک تیکت برای **ساپورت و کمک** را داده اید. اگر موافق ساخت تیکت خود هستید در زیر پیام به دکمه سبز رنگ کلیک کنید و در صورت مخالف بودن به دکمه قرمز رنگ کلیک کنید، موفق و پیروز باشید.😎`) - .addField(`Language: EN:flag_us:`,`Dear friend, you have requested to make a ticket for **support and help**. If you agree to make your ticket, click on the green button below the message, and if you disagree, click on the red button, good luck. 😎`) + .addField(`${client.emotes.reason}Description:`,`Dear friend, you have requested to make a ticket for **support and help**. If you agree to make your ticket, click on the green button below the message, and if you disagree, click on the red button, good luck. 😎`) ], components: [new MessageActionRow() .addComponents([new MessageButton() @@ -81,10 +80,11 @@ module.exports = async (client, interaction) => { .setLabel("Create It") ]) ], - ephemeral: true }) + },time) + }) } else if(interaction.values[0] === "report_bam"){ - await interaction.reply({ + interaction.update({ components: [new MessageActionRow() .addComponents([new MessageButton() .setDisabled(true) @@ -98,15 +98,13 @@ module.exports = async (client, interaction) => { .setColor(client.colors.none) .setTitle(`🔃| Process Is Loading...`) ], - ephemeral: true - }) + }).then((m)=>{ + setTimeout(()=>{ interaction.editReply({ - content: ` `, embeds: [new MessageEmbed() .setColor(client.colors.none) .setTitle(`${client.emotes.tickets}| Create Ticket`) - .addField(`Language: PER:flag_ir:`,`دوست عزیز شما درخواستی برای ساخت یک تیکت برای **گزارش ادمین ، بات یا ممبر ها** را داده اید. اگر موافق ساخت تیکت خود هستید در زیر پیام به دکمه سبز رنگ کلیک کنید و در صورت مخالف بودن به دکمه قرمز رنگ کلیک کنید، موفق و پیروز باشید.😎`) - .addField(`Language: EN:flag_us:`,`Dear friend, you have requested to make a ticket for **report admins, bots or members**. If you agree to make your ticket, click on the green button below the message, and if you disagree, click on the red button, good luck. 😎`) + .addField(`${client.emotes.reason}Description:`,`Dear friend, you have requested to make a ticket for **report admins, bots or members**. If you agree to make your ticket, click on the green button below the message, and if you disagree, click on the red button, good luck. 😎`) ], components: [new MessageActionRow() .addComponents([new MessageButton() @@ -121,10 +119,11 @@ module.exports = async (client, interaction) => { .setLabel("Create It") ]) ], - ephemeral: true }) + },time) + }) } else if(interaction.values[0] === "exchange"){ - await interaction.reply({ + interaction.update({ components: [new MessageActionRow() .addComponents([new MessageButton() .setDisabled(true) @@ -138,15 +137,13 @@ module.exports = async (client, interaction) => { .setColor(client.colors.none) .setTitle(`🔃| Process Is Loading...`) ], - ephemeral: true - }) - interaction.editReply({ - content: ` `, + }).then((m)=>{ + setTimeout(()=>{ + interaction.editReply({ embeds: [new MessageEmbed() .setColor(client.colors.none) .setTitle(`${client.emotes.tickets}| Create Ticket`) - .addField(`Language: PER:flag_ir:`,`دوست عزیز شما درخواستی برای ساخت یک تیکت برای **اکسچنج و تبادل** را داده اید. اگر موافق ساخت تیکت خود هستید در زیر پیام به دکمه سبز رنگ کلیک کنید و در صورت مخالف بودن به دکمه قرمز رنگ کلیک کنید، موفق و پیروز باشید.😎`) - .addField(`Language: EN:flag_us:`,`Dear friend, you have requested to make a ticket for **exchange**. If you agree to make your ticket, click on the green button below the message, and if you disagree, click on the red button, good luck. 😎`) + .addField(`${client.emotes.reason}Description:`,`Dear friend, you have requested to make a ticket for **exchange**. If you agree to make your ticket, click on the green button below the message, and if you disagree, click on the red button, good luck. 😎`) ], components: [new MessageActionRow() .addComponents([new MessageButton() @@ -161,14 +158,14 @@ module.exports = async (client, interaction) => { .setLabel("Create It") ]) ], - ephemeral: true }) + },time) + }) } else if(interaction.values[0] === "admin"){ let embed = new MessageEmbed() .setColor(client.colors.none) .setTitle(`${client.emotes.tickets}| Create Ticket`) - .addField(`Language: PER:flag_ir:`,`دوست عزیز شما درخواستی برای ساخت یک تیکت برای **ثبت نام برای ادمینی** را داده اید. اگر موافق ساخت تیکت خود هستید در زیر پیام به دکمه سبز رنگ کلیک کنید و در صورت مخالف بودن به دکمه قرمز رنگ کلیک کنید، موفق و پیروز باشید.😎`) - .addField(`Language: EN:flag_us:`,`Dear friend, you have requested to make a ticket for **register for admin**. If you agree to make your ticket, click on the green button below the message, and if you disagree, click on the red button, good luck. 😎`) + .addField(`${client.emotes.reason}Description:`,`Dear friend, you have requested to make a ticket for **register for admin**. If you agree to make your ticket, click on the green button below the message, and if you disagree, click on the red button, good luck. 😎`) let buttons = new MessageActionRow() .addComponents([new MessageButton() @@ -182,7 +179,7 @@ module.exports = async (client, interaction) => { .setEmoji(client.emotes.ticket) .setLabel("Create It") ]) - interaction.reply({ + interaction.update({ components: [new MessageActionRow() .addComponents([new MessageButton() .setDisabled(true) @@ -196,26 +193,24 @@ module.exports = async (client, interaction) => { .setColor(client.colors.none) .setTitle(`🔃| Process Is Loading...`) ], - ephemeral: true }).then((m)=>{ - setTimeout(()=>{ + setTimeout(()=>{ interaction.editReply({ embeds: [embed], components: [buttons] }) - },1000) + },time) }) - } } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/message/messageCreate.js b/events/message/messageCreate.js index 320807e..0c3a2b8 100644 --- a/events/message/messageCreate.js +++ b/events/message/messageCreate.js @@ -3,15 +3,15 @@ const { MessageActionRow, MessageButton, Collection, - + Permissions } = require("discord.js"); const db = require('quick.db'); module.exports = async (client, message) => { - if(message.channel.type === 'DM'){ + if(message.channel.type === "DM"){//a direct message between users if(message.author.bot) return; if(message.content.includes('@'))return message.channel.send(client.emotes.entry+"| **you can't mention someone.**") - const sizarTMserver = client.guilds.cache.get(client.config.discord.server_id); - const channelbug = sizarTMserver.channels.cache.get(client.config.discord.server_channel_report); + const server = client.guilds.cache.get(client.config.discord.server_id); + const channelbug = server.channels.cache.get(client.config.discord.server_channel_report); const embed = new MessageEmbed() .setColor(client.colors.none) .setAuthor({ @@ -44,8 +44,8 @@ module.exports = async (client, message) => { }; //======== Command for shows the prefix ======== - if (message.author.bot || message.channel.type === 'DM') return; - let logsChannel = message.guild.channels.cache.find(c => c.id === db.get(`logs_${message.guild.id}`)); + if (message.author.bot || message.channel.type === 1) return;//a direct message between users + let logsChannel = message.guild.channels.cache.find(c => c.id === db.get(`modlog_${message.guild.id}`)); if (message.content === `<@!${client.user.id}>` || message.content === `<@${client.user.id}>` || message.content === `${client.prefix}prefix`) { let errorprefixEmbed = new MessageEmbed() .setColor(client.colors.none) @@ -81,7 +81,14 @@ if(commandName.length > 0){ return //message.reply(`**${client.emotes.error}| It seems like \`${commandName}\` is not a valid command! Please try Again!**`) } } - + +//======== Check Perms ========= + if(!message.guild.me.permissions.has(Permissions.FLAGS.SEND_MESSAGES)) return message.author.send({content: `${client.emotes.off}| I am missing the Permission to \`SEND_MESSAGES\` in ${message.channel}`,}) + if(!message.guild.me.permissions.has(Permissions.FLAGS.USE_EXTERNAL_EMOJIS)) + return message.reply({content: `${client.emotes.off}| I am missing the Permission to \`USE_EXTERNAL_EMOJIS\``}) + if(!message.guild.me.permissions.has(Permissions.FLAGS.EMBED_LINKS)) + return message.reply({content: `${client.emotes.error}| I am missing the Permission to \`EMBED_LINKS\``}) + //======== Command Cooldown ======== if (!client.cooldowns.has(command.name)) { client.cooldowns.set(command.name, new Collection()); @@ -110,16 +117,16 @@ if(commandName.length > 0){ try{ if (command) command.run(client, message, args, prefix, logsChannel); } catch (error) { - console.error(error); + //console.error(error); //message.reply(`${client.emotes.error}| There was an error executing that command.`).catch(console.error); } }; /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/message/messageUpdate.js b/events/message/messageUpdate.js new file mode 100644 index 0000000..3d41259 --- /dev/null +++ b/events/message/messageUpdate.js @@ -0,0 +1,96 @@ +const { + MessageEmbed, + MessageActionRow, + MessageButton, + Collection, + Permissions +} = require("discord.js"); +const db = require('quick.db'); +module.exports = async (client, oldmessage, newmessage) => { +//======== Command for shows the prefix ======== + if (newmessage.author.bot || newmessage.channel.type === 1) return;//a direct message between users + let logsChannel = newmessage.guild.channels.cache.find(c => c.id === db.get(`modlog_${newmessage.guild.id}`)); + if (newmessage.content === `<@!${client.user.id}>` || newmessage.content === `<@${client.user.id}>` || newmessage.content === `${client.prefix}prefix`) { + let errorprefixEmbed = new MessageEmbed() + .setColor(client.colors.none) + .setThumbnail(client.user.displayAvatarURL()) + .setTimestamp(Date.now()) + .setDescription(`My prefix in this guild is "**${require('quick.db').fetch(`prefix_${newmessage.guild.id}`)||client.prefix}**". `) + .setAuthor({ + name: `prefix of ${client.user.tag} shows👌🏻`, + iconURL: client.user.displayAvatarURL() + }) + .setFooter({ + text: `prefix shows to ${newmessage.author.tag} |`, + iconURL: newmessage.author.displayAvatarURL({ dynamic: true }) + }) + newmessage.reply({ + embeds: [errorprefixEmbed] + }) + } + +//======== Command Prefix & args ======== + const Tprefix = await db.fetch(`prefix_${newmessage.guild.id}`)||client.prefix; + const escapeRegex = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + const prefixRegex = new RegExp(`^(<@!?${client.user.id}>|${escapeRegex(Tprefix)})\\s*`); + if (!prefixRegex.test(newmessage.content)) return; + + const [ prefix] = newmessage.content.match(prefixRegex); + if (newmessage.content.indexOf(prefix) !== 0) return; + const args = newmessage.content.slice(prefix.length).trim().split(/ +/g); + const commandName = args.shift().toLowerCase(); + const command = client.commands.get(commandName) || client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)); +if(commandName.length > 0){ + if (!command||!command.name||!command.aliases) { + return //newmessage.reply(`**${client.emotes.error}| It seems like \`${commandName}\` is not a valid command! Please try Again!**`) + } +} + +//======== Check Perms ========= + if(!newmessage.guild.me.permissions.has(Permissions.FLAGS.SEND_MESSAGES)) return newmessage.author.send({content: `${client.emotes.off}| I am missing the Permission to \`SEND_MESSAGES\` at ${newmessage.guild.name}`,}) + if(!newmessage.guild.me.permissions.has(Permissions.FLAGS.USE_EXTERNAL_EMOJIS)) + return newmessage.reply({content: `${client.emotes.off}| I am missing the Permission to \`USE_EXTERNAL_EMOJIS\``}) + if(!newmessage.guild.me.permissions.has(Permissions.FLAGS.EMBED_LINKS)) + return newmessage.reply({content: `${client.emotes.error}| I am missing the Permission to \`EMBED_LINKS\``}) + +//======== Command Cooldown ======== + if (!client.cooldowns.has(command.name)) { + client.cooldowns.set(command.name, new Collection()); + } + const now = Date.now(); + const timestamps = client.cooldowns.get(command.name); + const cooldownAmount = (command.cooldown || 5) * 1000; + + if (timestamps.has(newmessage.author.id)) { + const expirationTime = timestamps.get(newmessage.author.id) + cooldownAmount; + + if (now < expirationTime) { + const timeLeft = (expirationTime - now) / 1000; + return newmessage.reply({ + embeds: [new MessageEmbed() + .setColor(client.colors.none) + .setDescription(`**${client.emotes.alert}| Please wait \`${Math.round(timeLeft)}\` more second(s) before reusing the \`${command.name}\` command!**`) + ] + }) + } + } + timestamps.set(newmessage.author.id, now); + setTimeout(() => timestamps.delete(newmessage.author.id), cooldownAmount); + +//======== Command Handler ======== +try{ + if (command) command.run(client, newmessage, args, prefix, logsChannel); + } catch (error) { + //console.error(error); + //newmessage.reply(`${client.emotes.error}| There was an error executing that command.`).catch(console.error); + } +}; +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info + */ \ No newline at end of file diff --git a/events/shard/shardDisconnect.js b/events/shard/shardDisconnect.js index a3f0ab8..5203d1a 100644 --- a/events/shard/shardDisconnect.js +++ b/events/shard/shardDisconnect.js @@ -1,13 +1,20 @@ let clc = require('cli-color'); module.exports = async (client, event, id) => { - client.logger(clc.redBright(`Shard #${id} Disconnected`)); + client.logger(clc.redBright(`Shard #${id} Disconnected`)); + setInterval(() => { + if(!client || !client.user) { + console.log("The Client Didn't Login Proccesing Kill 1") + process.kill(1); + } else { + } + }, 10000);  } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/shard/shardError.js b/events/shard/shardError.js index 799f722..f83b5ea 100644 --- a/events/shard/shardError.js +++ b/events/shard/shardError.js @@ -1,6 +1,13 @@ let clc = require('cli-color'); module.exports = async (client, error, id) => { - client.logger(clc.redBright(`Shard #${id} Errored`)); + client.logger(clc.redBright(`Shard #${id} Errored`)); + setInterval(() => { + if(!client || !client.user) { + console.log("The Client Didn't Login Proccesing Kill 1") + process.kill(1); + } else { + } + }, 10000);  } /** * @INFO diff --git a/events/shard/shardReady.js b/events/shard/shardReady.js index 2f4dc98..bcdb029 100644 --- a/events/shard/shardReady.js +++ b/events/shard/shardReady.js @@ -4,12 +4,12 @@ module.exports = async (client, id) => { client.logger(clc.greenBright(`Shard #${id} Ready`)); } catch { /* */ } } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/shard/shardReconnecting.js b/events/shard/shardReconnecting.js index 43d20e4..a1cde93 100644 --- a/events/shard/shardReconnecting.js +++ b/events/shard/shardReconnecting.js @@ -1,13 +1,20 @@ let clc = require('cli-color'); module.exports = async (client, id) => { - client.logger(clc.magentaBright(`Shard #${id} Reconnecting`)); + client.logger(clc.magentaBright(`Shard #${id} Reconnecting`)); + setInterval(() => { + if(!client || !client.user) { + console.log("The Client Didn't Login Proccesing Kill 1") + process.kill(1); + } else { + } + }, 10000);  } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/shard/shardResume.js b/events/shard/shardResume.js index 62130a8..1419846 100644 --- a/events/shard/shardResume.js +++ b/events/shard/shardResume.js @@ -1,13 +1,21 @@ let clc = require('cli-color'); module.exports = async (client, id, replayedEvents) => { - client.logger(clc.green(`Shard #${id} Resumed`)) + client.logger(clc.green(`Shard #${id} Resumed`)) + setInterval(() => { + if(!client || !client.user) { + console.log("The Client Didn't Login Proccesing Kill 1") + process.kill(1); + } else { + } + }, 10000);  + } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/events/thread/threadCreate.js b/events/thread/threadCreate.js index cb7bec5..9ff39e8 100644 --- a/events/thread/threadCreate.js +++ b/events/thread/threadCreate.js @@ -1,19 +1,17 @@ let clc = require('cli-color'); module.exports = async (client, thread) => { -if(thread.joinable){ - try{ - await thread.join(); - }catch (error){ - console.log(clc.redBright(error)) - } + try{ + await thread.join(); + }catch (error){ + console.log(clc.redBright(error)) } } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/functions/functions.js b/functions/functions.js index 18e3db5..6c6a0ea 100644 --- a/functions/functions.js +++ b/functions/functions.js @@ -87,7 +87,7 @@ module.exports = { ],[new MessageButton() .setStyle('LINK') .setLabel('Support Server!') - .setEmoji(clinet.emotes.help) + .setEmoji(client.emotes.help) .setURL(`${client.config.discord.server_support}`) ]) ] @@ -115,36 +115,13 @@ module.exports = { randomRange: async function (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }, - slashCommandsCoolDown: async function (client, interaction, command) { - if (!client.cooldowns.has(client.slashCommands.cooldown)) { - client.cooldowns.set(client.slashCommands.name, client.slashCommands); - } - const now = Date.now(); - const timestamps = client.cooldowns.get(client.slashCommands.name); - const cooldownAmount = (client.slashCommands.cooldown || 5) * 1000; - if (timestamps.has(interaction.member.id)) { - const expirationTime = timestamps.get(interaction.member.id) + cooldownAmount; - if (now < expirationTime) { - const timeLeft = (expirationTime - now) / 1000; - return await interaction.reply({ - embeds: [new MessageEmbed() - .setColor(client.colors.none) - .setDescription(`**${client.emotes.alert}| Please wait \`${Math.round(timeLeft)}\` more second(s) before reusing the \`${command.name}\` command!**`) - ], - ephemeral: true - }); - } - } - timestamps.set(interaction.member.id, now); - setTimeout(() => timestamps.delete(interaction.member.id), cooldownAmount); - }, } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/handlers/antiCrash.js b/handlers/antiCrash.js index 95f9167..94dfa90 100644 --- a/handlers/antiCrash.js +++ b/handlers/antiCrash.js @@ -25,12 +25,12 @@ module.exports = async (client) => { client.logger(clc.greenBright(`AntiCrash Started`)); console.log("\n") }; -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/handlers/app/index.html b/handlers/app/index.html new file mode 100644 index 0000000..fb4871f --- /dev/null +++ b/handlers/app/index.html @@ -0,0 +1,49 @@ + + + + + + +

Hosting Active

+

+ + Make sure to add the repl.co URL to UPTIME ROBOT to make Bot 24/7 Online! +

+ +

Persian Czar

+ + Discord Server 😎 | + +
+
💖 + + +
+
SUPPORT US | Persian Czar +

+ You can always Support me by inviting one of my own Discord Bots

+ + Persian Czar | S.R.Z.A Gamer + + + \ No newline at end of file diff --git a/handlers/extraEvents.js b/handlers/extraEvents.js index 4c80402..6040574 100644 --- a/handlers/extraEvents.js +++ b/handlers/extraEvents.js @@ -14,12 +14,12 @@ client.logger = (data) => { } }; } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/handlers/keepAlive.js b/handlers/keepAlive.js index 4df77cf..f0cba63 100644 --- a/handlers/keepAlive.js +++ b/handlers/keepAlive.js @@ -7,7 +7,8 @@ let port = client.config.source.port; app.use(express.static("public")); app.get("/", (req, res) => { res.setHeader('Content-Type', 'text/html'); - res.send(__dirname + `/app/index.html`); + res.write(__dirname + `/app/index.html`); + res.end() }); const listener = app.listen(port, () =>{ @@ -28,11 +29,11 @@ const listener = app.listen(port, () =>{ }); } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/handlers/slashCommandHandler.js b/handlers/slashCommandHandler.js index 676245a..264c18d 100644 --- a/handlers/slashCommandHandler.js +++ b/handlers/slashCommandHandler.js @@ -6,10 +6,10 @@ module.exports = async (bot) => { try { let amount = 0; const slashCommandsArray = []; - readdirSync("./slashCommands/").forEach((dir) => { - const slashCommands = readdirSync(`./slashCommands/${dir}/`).filter((file) => file.endsWith(".js")); + readdirSync(`${process.cwd()}/slashCommands/`).forEach((dir) => { + const slashCommands = readdirSync(`${process.cwd()}/slashCommands/${dir}/`).filter((file) => file.endsWith(".js")); for (let file of slashCommands) { - const pull = require(`../slashCommands/${dir}/${file}`); + const pull = require(`${process.cwd()}/slashCommands/${dir}/${file}`); if (pull.name) { bot.slashCommands.set(pull.name, pull); if (["MESSAGE", "USER"].includes(pull.type)) delete pull.description; @@ -37,7 +37,7 @@ module.exports = async (bot) => { bot.on("ready", async () => { try { // For 1 Server Only👇🏻 - // await bot.guilds.cache.get("server_id"||bot.config.discord.server_id).commands.set(slashCommandsArray); + // await bot.guilds.cache.get(bot.config.discord.support_server_id).commands.set(slashCommandsArray); // For Global Server👇🏻 await bot.application.commands.set(slashCommandsArray); } catch (error) { @@ -48,12 +48,12 @@ module.exports = async (bot) => { console.log(e.message); } } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/index.js b/index.js index b91e04a..6b8e29e 100644 --- a/index.js +++ b/index.js @@ -6,12 +6,12 @@ const { Intents, Collection } = require('discord.js'); -const config = require('./storage/config.js'); -const status = require("./storage/status.json"); +const config = require(`${process.cwd()}/storage/config.js`); +const status = require(`${process.cwd()}/storage/status.json`); const clc = require("cli-color"); const fs = require('fs'); const client = new Client({ - intents: new Intents(32767), // 32767 == full intents, calculated from intent calculator + intents: [new Intents(32767)], // 32767 == full intents, calculated from intent calculator shards: 'auto', allowedMentions: { parse: ["roles", "users", "everyone"],//mentions disable @@ -36,20 +36,20 @@ const client = new Client({ client.config = config; client.prefix = client.config.discord.prefix; client.token = client.config.discord.token; -client.emotes = require("./storage/emotes.json"); -client.colors = require("./storage/colors.json"); -client.embed = require("./storage/embed.json"); -client.categories = fs.readdirSync(`./commands`); +client.emotes = require(`${process.cwd()}/storage/emotes.json`); +client.colors = require(`${process.cwd()}/storage/colors.json`); +client.embed = require(`${process.cwd()}/storage/embed.json`); +client.categories = fs.readdirSync(`${process.cwd()}/commands`); client.commands = new Collection(); client.slashCommands = new Collection(); client.cooldowns = new Collection(); //===========================================================================================================// //======== Loading Starts ========= -var starts = fs.readdirSync('./start').filter(file => file.endsWith('.js')); +var starts = fs.readdirSync(`${process.cwd()}/start`).filter(file => file.endsWith('.js')); start = new Map(); starts.forEach((file) => { - require(`./start/${file}`)(client); + require(`${process.cwd()}/start/${file}`)(client); start.set(file); }); try { @@ -76,18 +76,17 @@ if(client.token){ //========== Replit Alive setInterval(() => { if(!client || !client.user) { - console.log("The Client Didn't Login Proccesing Kill 1") + console.log("The Client Didn't Login Proccesing Kill 1") process.kill(1); } else { } }, 10000);  - /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/json.sqlite b/json.sqlite new file mode 100644 index 0000000..0606384 Binary files /dev/null and b/json.sqlite differ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..76e5fba --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3065 @@ +{ + "name": "ticker-boy", + "version": "1.1.2", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "ticker-boy", + "version": "1.1.2", + "license": "BSD", + "dependencies": { + "body-parser": "^1.20.0", + "cli-color": "^2.0.2", + "cpu-stat": "^2.0.1", + "discord.js": "^13.7.0", + "dotenv": "^16.0.1", + "ejs": "^3.1.8", + "express": "^4.18.1", + "express-session": "^1.17.3", + "fs": "^0.0.1-security", + "memorystore": "^1.6.7", + "moment": "^2.29.3", + "ms": "^2.1.3", + "os": "^0.1.2", + "passport": "^0.6.0", + "passport-discord": "^0.1.4", + "quick.db": "^7.1.3" + } + }, + "node_modules/@discordjs/builders": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.16.0.tgz", + "integrity": "sha512-9/NCiZrLivgRub2/kBc0Vm5pMBE5AUdYbdXsLu/yg9ANgvnaJ0bZKTY8yYnLbsEc/LYUP79lEIdC73qEYhWq7A==", + "deprecated": "no longer supported", + "dependencies": { + "@sapphire/shapeshift": "^3.5.1", + "discord-api-types": "^0.36.2", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/builders/node_modules/discord-api-types": { + "version": "0.36.3", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.36.3.tgz", + "integrity": "sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg==" + }, + "node_modules/@discordjs/collection": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.7.0.tgz", + "integrity": "sha512-R5i8Wb8kIcBAFEPLLf7LVBQKBDYUL+ekb23sOgpkpyGT+V4P7V83wTxcsqmX+PbqHt4cEHn053uMWfRqh/Z/nA==", + "deprecated": "no longer supported", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.6.0.tgz", + "integrity": "sha512-tu2WLRdo5wotHRvsCkspg3qMiP6ETC3Q1dns1Q5V6zKUki+1itq6AbhMwohF9ZcLoYqg+Y8LkgRRtVxxTQVTBQ==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash.uniqwith": "^4.5.0" + }, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@types/node": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.6.tgz", + "integrity": "sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/better-sqlite3": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-7.6.2.tgz", + "integrity": "sha512-S5zIU1Hink2AH4xPsN0W43T1/AJ5jrPh7Oy07ocuW/AKYYY02GWzz9NH0nbSMn/gw6fDZ5jZ1QsHt1BXAwJ6Lg==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.0" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/cli-color": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", + "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cpu-stat": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cpu-stat/-/cpu-stat-2.0.1.tgz", + "integrity": "sha512-bC4ts/0IjYfNV6Dc7F2NauWM0tip0fneZjRek8HqX2ZERC4oSt6dmV+GTN1mfE9OKbLAppv58M2PVzKLGB731w==" + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/discord-api-types": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.33.5.tgz", + "integrity": "sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg==" + }, + "node_modules/discord.js": { + "version": "13.10.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.10.3.tgz", + "integrity": "sha512-cIARuxfpQDeqA9Zw3fz4IL20xAhtMsjwJIf7/K82R3n2xROG9/fAx+7qjX8ysp9BfflYqMu2ZskyWq1EAmL5BA==", + "dependencies": { + "@discordjs/builders": "^0.16.0", + "@discordjs/collection": "^0.7.0", + "@sapphire/async-queue": "^1.5.0", + "@types/node-fetch": "^2.6.2", + "@types/ws": "^8.5.3", + "discord-api-types": "^0.33.3", + "form-data": "^4.0.0", + "node-fetch": "^2.6.7", + "ws": "^8.8.1" + }, + "engines": { + "node": ">=16.6.0", + "npm": ">=7.0.0" + } + }, + "node_modules/discord.js/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/dotenv": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", + "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-session": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", + "dependencies": { + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.uniqwith": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz", + "integrity": "sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==" + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/memorystore": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/memorystore/-/memorystore-1.6.7.tgz", + "integrity": "sha512-OZnmNY/NDrKohPQ+hxp0muBcBKrzKNtHr55DbqSx9hLsYVNnomSAMRAtI7R64t3gf3ID7tHQA7mG4oL3Hu9hdw==", + "dependencies": { + "debug": "^4.3.0", + "lru-cache": "^4.0.3" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/memorystore/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/memorystore/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/node-abi": { + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.24.0.tgz", + "integrity": "sha512-YPG3Co0luSu6GwOBsmIdGW6Wx0NyNDLg/hriIyDllVsNwnI6UeqaWShxC3lbH4LtEQUgoLP3XR1ndXiDAWvmRw==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/os": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz", + "integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/passport": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", + "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1", + "utils-merge": "^1.0.1" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-discord": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/passport-discord/-/passport-discord-0.1.4.tgz", + "integrity": "sha512-VJWPYqSOmh7SaCLw/C+k1ZqCzJnn2frrmQRx1YrcPJ3MQ+Oa31XclbbmqFICSvl8xv3Fqd6YWQ4H4p1MpIN9rA==", + "dependencies": { + "passport-oauth2": "^1.5.0" + } + }, + "node_modules/passport-oauth2": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", + "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", + "dependencies": { + "base64url": "3.x.x", + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quick.db": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/quick.db/-/quick.db-7.1.3.tgz", + "integrity": "sha512-0S1fVb9OAZGhkI4ZIc5Oe4yWMwhz20xSsziwd6+yGWKKMsPt+XOfj/gD5CesGxd2WdqBkZFBiP8ZqWDu55HLHA==", + "dependencies": { + "better-sqlite3": "^7.1.1", + "lodash": "^4.17.20" + } + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-mixer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", + "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + } + }, + "dependencies": { + "@discordjs/builders": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.16.0.tgz", + "integrity": "sha512-9/NCiZrLivgRub2/kBc0Vm5pMBE5AUdYbdXsLu/yg9ANgvnaJ0bZKTY8yYnLbsEc/LYUP79lEIdC73qEYhWq7A==", + "requires": { + "@sapphire/shapeshift": "^3.5.1", + "discord-api-types": "^0.36.2", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.1", + "tslib": "^2.4.0" + }, + "dependencies": { + "discord-api-types": { + "version": "0.36.3", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.36.3.tgz", + "integrity": "sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg==" + } + } + }, + "@discordjs/collection": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.7.0.tgz", + "integrity": "sha512-R5i8Wb8kIcBAFEPLLf7LVBQKBDYUL+ekb23sOgpkpyGT+V4P7V83wTxcsqmX+PbqHt4cEHn053uMWfRqh/Z/nA==" + }, + "@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" + }, + "@sapphire/shapeshift": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.6.0.tgz", + "integrity": "sha512-tu2WLRdo5wotHRvsCkspg3qMiP6ETC3Q1dns1Q5V6zKUki+1itq6AbhMwohF9ZcLoYqg+Y8LkgRRtVxxTQVTBQ==", + "requires": { + "fast-deep-equal": "^3.1.3", + "lodash.uniqwith": "^4.5.0" + } + }, + "@types/node": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.6.tgz", + "integrity": "sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==" + }, + "@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "better-sqlite3": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-7.6.2.tgz", + "integrity": "sha512-S5zIU1Hink2AH4xPsN0W43T1/AJ5jrPh7Oy07ocuW/AKYYY02GWzz9NH0nbSMn/gw6fDZ5jZ1QsHt1BXAwJ6Lg==", + "requires": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.0" + } + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "cli-color": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", + "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "cpu-stat": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cpu-stat/-/cpu-stat-2.0.1.tgz", + "integrity": "sha512-bC4ts/0IjYfNV6Dc7F2NauWM0tip0fneZjRek8HqX2ZERC4oSt6dmV+GTN1mfE9OKbLAppv58M2PVzKLGB731w==" + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, + "discord-api-types": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.33.5.tgz", + "integrity": "sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg==" + }, + "discord.js": { + "version": "13.10.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.10.3.tgz", + "integrity": "sha512-cIARuxfpQDeqA9Zw3fz4IL20xAhtMsjwJIf7/K82R3n2xROG9/fAx+7qjX8ysp9BfflYqMu2ZskyWq1EAmL5BA==", + "requires": { + "@discordjs/builders": "^0.16.0", + "@discordjs/collection": "^0.7.0", + "@sapphire/async-queue": "^1.5.0", + "@types/node-fetch": "^2.6.2", + "@types/ws": "^8.5.3", + "discord-api-types": "^0.33.3", + "form-data": "^4.0.0", + "node-fetch": "^2.6.7", + "ws": "^8.8.1" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "dotenv": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", + "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "requires": { + "jake": "^10.8.5" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "express-session": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", + "requires": { + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "dependencies": { + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + } + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.uniqwith": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz", + "integrity": "sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==" + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "requires": { + "es5-ext": "~0.10.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "memorystore": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/memorystore/-/memorystore-1.6.7.tgz", + "integrity": "sha512-OZnmNY/NDrKohPQ+hxp0muBcBKrzKNtHr55DbqSx9hLsYVNnomSAMRAtI7R64t3gf3ID7tHQA7mG4oL3Hu9hdw==", + "requires": { + "debug": "^4.3.0", + "lru-cache": "^4.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-abi": { + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.24.0.tgz", + "integrity": "sha512-YPG3Co0luSu6GwOBsmIdGW6Wx0NyNDLg/hriIyDllVsNwnI6UeqaWShxC3lbH4LtEQUgoLP3XR1ndXiDAWvmRw==", + "requires": { + "semver": "^7.3.5" + } + }, + "oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "os": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz", + "integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "passport": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", + "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1", + "utils-merge": "^1.0.1" + } + }, + "passport-discord": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/passport-discord/-/passport-discord-0.1.4.tgz", + "integrity": "sha512-VJWPYqSOmh7SaCLw/C+k1ZqCzJnn2frrmQRx1YrcPJ3MQ+Oa31XclbbmqFICSvl8xv3Fqd6YWQ4H4p1MpIN9rA==", + "requires": { + "passport-oauth2": "^1.5.0" + } + }, + "passport-oauth2": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", + "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", + "requires": { + "base64url": "3.x.x", + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, + "prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "quick.db": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/quick.db/-/quick.db-7.1.3.tgz", + "integrity": "sha512-0S1fVb9OAZGhkI4ZIc5Oe4yWMwhz20xSsziwd6+yGWKKMsPt+XOfj/gD5CesGxd2WdqBkZFBiP8ZqWDu55HLHA==", + "requires": { + "better-sqlite3": "^7.1.1", + "lodash": "^4.17.20" + } + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "requires": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "ts-mixer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", + "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, + "uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "ws": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "requires": {} + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + } + } +} diff --git a/package.json b/package.json index 33b140a..de0e5cf 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,17 @@ { "name": "ticker-boy", "main": "index.js", - "author": "Mr.SIN RE#1528 | Persian Carsar", - "version": "1.1.0", - "description": "this is wonderful ticket bot with slash commands & buttons. | Build by Persian Carsar", - "license": "ISC", + "author": "Mr.SIN RE#1528 | Persian Caesar", + "version": "1.1.2", + "description": "this is wonderful ticket bot with slash commands & buttons. | Build by Persian Caesar", + "license": "BSD", "repository": { "type": "git", - "url": "git+https://github.com/Sobhan-SRZA/Discord-Reaction-Ticket-Bot.git" + "url": "git+https://github.com/Persian-Caesar/Ticker-Boy.git" }, "bugs": { - "server": "https://dsc.gg/Persian-Caesar", - "url": "https://github.com/Persian-Caesar/Ticker-Boy/ issues" + "server": "https://dsc.gg/persian-caesar", + "url": "https://github.com/Persian-Caesar/Ticker-Boy/issues" }, "homepage": "https://github.com/Persian-Caesar/Ticker-Boy#readme", "keywords": [ @@ -20,7 +20,8 @@ "advanced ticket bot", "advanced ticket system", "buttons ticket system", - "ticker boy" + "ticker boy", + "persian caesar" ], "scripts": { "start": "node index.js", diff --git a/replit_zip_error_log (1).txt b/replit_zip_error_log (1).txt new file mode 100644 index 0000000..48a2329 --- /dev/null +++ b/replit_zip_error_log (1).txt @@ -0,0 +1,6 @@ +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/ejs","time":"2022-12-25T07:32:34Z"} +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/jake","time":"2022-12-25T07:32:34Z"} +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/mime","time":"2022-12-25T07:32:34Z"} +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/prebuild-install","time":"2022-12-25T07:32:34Z"} +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/rc","time":"2022-12-25T07:32:34Z"} +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/semver","time":"2022-12-25T07:32:34Z"} diff --git a/replit_zip_error_log.txt b/replit_zip_error_log.txt new file mode 100644 index 0000000..979d70d --- /dev/null +++ b/replit_zip_error_log.txt @@ -0,0 +1,6 @@ +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/ejs","time":"2022-09-12T23:21:24Z"} +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/jake","time":"2022-09-12T23:21:24Z"} +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/mime","time":"2022-09-12T23:21:24Z"} +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/prebuild-install","time":"2022-09-12T23:21:24Z"} +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/rc","time":"2022-09-12T23:21:24Z"} +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file node_modules/.bin/semver","time":"2022-09-12T23:21:24Z"} diff --git "a/slashCommands/Help \360\237\206\230/help.js" "b/slashCommands/Help \360\237\206\230/help.js" index e45eedc..894b09e 100644 --- "a/slashCommands/Help \360\237\206\230/help.js" +++ "b/slashCommands/Help \360\237\206\230/help.js" @@ -7,14 +7,14 @@ const { const db = require("quick.db"); const { HelpCategoryEmbed -} = require('../../functions/functions.js'); +} = require(`${process.cwd()}/functions/functions.js`); module.exports = { name: 'help', description: 'this shows you bot commands and categorys to help you.', category: 'Help 🆘', cooldown: 1, - userPermissions: [""], - botPermissions: [""], + botPermissions: ["SEND_MESSAGES"], + botPermissions: ["EMBED_LINKS","SEND_MESSAGES"], options: [{ name: "report_message", description: "for report bot bugs to developers. | please provide the report message.", @@ -44,7 +44,7 @@ let help = new MessageEmbed() name: `Requested by ${interaction.user.tag}`, iconURL: interaction.member.displayAvatarURL({ dynamic: true }) }) - .setColor(clienr.colors.none) + .setColor(client.colors.none) .setDescription(`**this embed show you bot commands and categorys.**`) .addField(`Commands[\`${client.commands.size}\`] & SlashCommands[\`${client.slashCommands.size}\`] Categories `,`${'**' + client.categories.map(i => '`' + i + '`').join(' , ') + '**'}`,false) .addField(`Help 🆘 [${client.commands.filter(c => c.category === 'Help 🆘').size}]`,`This category of commands is to request help from bot founders and see all bot commands.`,true) @@ -225,11 +225,11 @@ if (!interaction.options.getString("report_message"||"command_name")){ } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/slashCommands/Infos \360\237\223\212/about.js" "b/slashCommands/Infos \360\237\223\212/about.js" index 1f018ec..83e529d 100644 --- "a/slashCommands/Infos \360\237\223\212/about.js" +++ "b/slashCommands/Infos \360\237\223\212/about.js" @@ -7,8 +7,8 @@ module.exports = { description: 'send info of bot for know about bot.', category: 'Infos 📊', cooldown: 1, - userPermissions: [""], - botPermissions: [""], + userPermissions: ["SEND_MESSAGES"], + botPermissions: ["EMBED_LINKS","SEND_MESSAGES"], run: async (client, interaction, args) => { try{ @@ -52,7 +52,7 @@ let infoEmbed = new Discord.MessageEmbed() .addField(`${client.emotes.id}| ID:`,`${client.emotes.reply}** User Id: ${client.user.id}**`,true) .addField(`${client.emotes.tag}| Tag:`, `${client.emotes.reply}**${client.user.tag}**`,true) .addField(client.emotes.ping+"| Ping",`**${client.emotes.reply} User Ping Is: \`${Math.round(client.ws.ping)}MS\`**`,true) - .addField(client.emotes.uptime+"| Uptime", `${client.emotes.reply}** Time Of Bot Online: \`${days} days, ${hours} hours, ${minutes} minutes, ${seconds} seconds\`** || ** _ / / _**`,true) + .addField(client.emotes.uptime+"| Uptime", `${client.emotes.reply}** Time Of Bot Online: / _**`,true) .addField(`${client.emotes.status}| Status:`,`${client.emotes.reply}** Bot Status Is: ${statuses[client.user.presence.status]} ${client.user.presence.status}**`,true) .addField(client.emotes.activity+'| Activity:',`${client.emotes.reply}** Bot Activity Is: ${userstatus}**`,true) .addField(`${client.emotes.date}| Date of Join Discord:`,`${client.emotes.reply}** Time Of Bot Created: **`,true) @@ -62,17 +62,16 @@ let infoEmbed = new Discord.MessageEmbed() .addField(client.emotes.guild+"| Servers",`${client.emotes.reply}** Count Of Bot Servers Is: \`${client.guilds.cache.size}\`**`, true) .addField(client.emotes.voice_channel+"| Voice Channels", `${client.emotes.reply}** Count Of Bot Voice Channel Is: \`${client.channels.cache.filter((ch) => ch.type === "GUILD_VOICE").size}\`**`,true) .addField(client.emotes.text_channel+"| Text Channels", `${client.emotes.reply}** Count Of Bot Text Channel Is: \`${client.channels.cache.filter((ch) => ch.type === "GUILD_TEXT").size}\`**`,true) - .addField(client.emotes.connect+"| Connected Channels", `${client.emotes.reply}** Count Of Bot Joined Voices Is: \`${connectedchannelsamount}\`**`,true) - .addField(client.emotes.version+"Version",`${client.emotes.reply}** Bot Version Is: \`${require("../../package.json").version}\`**`,true) + .addField(client.emotes.version+"Version",`${client.emotes.reply}** Bot Version Is: \`^${require(`${process.cwd()}/package.json`).version}\`**`,true) .addField(client.emotes.disJS+"Discord.js",`${client.emotes.reply}** Bot Usage Discord.js Version Is: \`Version ${Discord.version}\`**`,true) .addField(client.emotes.node+"Node.js",`${client.emotes.reply}** Bot Usage Node.js Version Is: \`Version ${process.version}\`**`,true) .addField(client.emotes.cpu+"| CPU", `${client.emotes.reply}** Bot Usage CPU Model Is: \`\`\`js\nModel: ${os.cpus().map((i) => `${i.model}`)[0]}\`\`\`\n CPU Usages: \`${percent.toFixed(2)}%\`**`,true) - .addField(client.emotes.shard+"| Shards", `${client.emotes.reply}>** Bot Shards Percent Is: \`${client.ws.shards.size}%\`**`,true) + .addField(client.emotes.shard+"| Shards", `${client.emotes.reply}** Bot Shards Percent Is: \`${client.ws.shards.size}%\`**`,true) .addField(client.emotes.cros+"| Cores", `${client.emotes.reply}** Bot Cores Percent Is: \`${os.cpus().length}%\`**`,true) .addField(client.emotes.arch+"| Architecture", `${client.emotes.reply}** Bot Architecture Is: \`${os.arch()}\`**`,true) .addField(client.emotes.platform+"| Platform", `${client.emotes.reply}** Bot Usage Platform Is: \`${os.platform()}\`**`,true) - .addField(`${client.emotes.commands}| Commands Count`, `${client.emotes.reply}** Bot Commands Count Is: \`${client.commands.size}\`**`,true) - .addField(`${client.emotes.category}| Category Count:`, `${client.emotes.reply}** Bot Category Count Is: \`${(client.categories.size)}\`**`,true) + .addField(`${client.emotes.commands}| Commands Count`, `${client.emotes.reply}** Bot Commands Count Is: Commands[\`${client.commands.size}\`] & SlashCommands[\`${client.slashCommands.size}\`]**`,true) + .addField(`${client.emotes.category}| Category Count:`, `${client.emotes.reply}** Bot Category Count Is: \`${(client.categories.length)}\`**`,true) .setTimestamp() interaction.reply({embeds:[infoEmbed]}) }) @@ -80,4 +79,13 @@ let infoEmbed = new Discord.MessageEmbed() console.log(e) } } -} \ No newline at end of file +} +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info + */ \ No newline at end of file diff --git "a/slashCommands/Infos \360\237\223\212/ping.js" "b/slashCommands/Infos \360\237\223\212/ping.js" index d5dbceb..147ec75 100644 --- "a/slashCommands/Infos \360\237\223\212/ping.js" +++ "b/slashCommands/Infos \360\237\223\212/ping.js" @@ -51,7 +51,8 @@ module.exports = { interaction.reply({ embeds: [pingingEmbed], - components: [new MessageActionRow().addComponents([pingButton])] + components: [new MessageActionRow().addComponents([pingButton])], + ephemeral: true }).then((m)=>{ wait(50) pingingEmbed.setDescription('**Pinging.**') @@ -83,4 +84,13 @@ module.exports = { }) } -} \ No newline at end of file +} +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info + */ \ No newline at end of file diff --git "a/slashCommands/Owner \360\237\221\221/post.js" "b/slashCommands/Owner \360\237\221\221/post.js" new file mode 100644 index 0000000..07ef892 --- /dev/null +++ "b/slashCommands/Owner \360\237\221\221/post.js" @@ -0,0 +1,428 @@ +const { + MessageButton, + MessageActionRow, + MessageSelectMenu, + MessageEmbed, + Permissions +} = require('discord.js'); +module.exports = { + name: 'post', + category: 'Owner 👑', + cooldown: 1, + userPermissions: [""], + description: "post owner words.", + botPermissions: [""], + options: [{ + name: 'channel', + type: "SUB_COMMAND", + description: "post text or embed in channel.", + options: [{ + name: "text", + type: "STRING", + description: "some text here", + required: false + },{ + name: "image_url", + type: "STRING", + description: "some link here", + required: false + },{ + name: "description", + type: "STRING", + description: "some description here for embed", + required: false + },{ + name: "footer_text", + type: "STRING", + description: "some text here", + required: false + },{ + name: "footer_iconurl", + type: "STRING", + description: "some link here", + required: false + },{ + name: "author_text", + type: "STRING", + description: "some text here", + required: false + },{ + name: "author_iconurl", + type: "STRING", + description: "some link here", + required: false + },{ + name: "title", + type: "STRING", + description: "some title here for embed", + required: false + },{ + name: "timestamp", + type: "BOOLEAN", + description: "show sending message time in embed (true or false)", + required: false + },{ + name: "color", + type: "STRING", + description: "paste here some hex code color", + required: false + },{ + name: "channel", + description: "Select a channel to setupping server args.", + type: "CHANNEL", + channelTypes: ["GUILD_TEXT"], + required: false + }], + },{ + name: 'dm', + type: "SUB_COMMAND", + description: "post text or embed in target member dm.", + options: [{ + name: "member", + description: "Select a member to sends owner words.", + type: "USER", + required: true + },{ + name: "text", + type: "STRING", + description: "some text here", + required: false + },{ + name: "description", + type: "STRING", + description: "some description here for embed", + required: false + },{ + name: "image_url", + type: "STRING", + description: "some link here", + required: false + },{ + name: "footer_text", + type: "STRING", + description: "some text here", + required: false + },{ + name: "footer_iconurl", + type: "STRING", + description: "some link here", + required: false + },{ + name: "author_text", + type: "STRING", + description: "some text here", + required: false + },{ + name: "author_iconurl", + type: "STRING", + description: "some link here", + required: false + },{ + name: "title", + type: "STRING", + description: "some title here for embed", + required: false + },{ + name: "color", + type: "STRING", + description: "paste here some hex code color", + required: false + },{ + name: "timestamp", + type: "BOOLEAN", + description: "show sending message time in embed (true or false)", + required: false + }], + }], + + run: async (client, interaction) => { + try{ + if (!client.config.owner.some(r => r.includes(interaction.user.id))) + return interaction.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.username, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setDescription(`> You are not allowed to run this Command\n\n> **You need to be one of those guys: ${client.config.owner.map(id => `<@${id}>`)}**`) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setFooter({ + text: "Error •"+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true)) + ] + }) + switch (interaction.options.getSubcommand()) { + case "channel": { + let text = interaction.options.getString("text"); + let channel = interaction.options.getChannel("channel")||interaction.channel; + let description = interaction.options.getString("description"); + let color = interaction.options.getString("color"); + let title = interaction.options.getString("title"); + let image = interaction.options.getString("image_url"); + let footer_text = interaction.options.getString("footer_text"); + let footer_iconURL = interaction.options.getString("footer_iconurl"); + let author_text = interaction.options.getString("author_text"); + let author_iconURL = interaction.options.getString("author_iconurl"); + let timestamp = interaction.options.getBoolean("timestamp"); + let embed = new MessageEmbed() + try{ + + if(color){ + embed.setColor(color.toUpperCase()) + } + if(description){ + embed.setDescription(description) + } + if(image){ + embed.setImage(image) + } + if(timestamp === true){ + embed.setTimestamp(new Date()) + } + if(title){ + embed.setTitle(title) + } + if(author_text){ + embed.setAuthor({ + name: author_text + }) + } + if(author_iconURL && author_text){ + embed.setAuthor({ + iconURL: author_iconURL, + name: author_text + }) + } + if(footer_text){ + embed.setFooter({ + text: footer_text + }) + } + if(footer_iconURL && footer_text){ + embed.setFooter({ + iconURL: footer_iconURL, + text: footer_text + }) + } + let embeds = embed?.description || embed?.title || embed?.author || embed?.footer || embed?.image; + if(embeds && text){ + interaction.reply({ + content: `**✅| successfully post your embed and text in${channel}**`, + ephemeral: true, + }) + channel.send({ + content: text, + embeds: [embed] + }) + }else if(embeds && !text){ + interaction.reply({ + content: `**✅| successfully post your embed in${channel}**`, + ephemeral: true, + }) + channel.send({ + embeds: [embed] + }) + }else if(!embeds && text){ + interaction.reply({ + content: `**✅| successfully post your text in${channel}**`, + ephemeral: true, + }) + channel.send({ + content: text + }) + }else if(!embeds && !text){ + interaction.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor("RED") + .setDescription("```js\nPlese for post some text and embed, you have to fill \"text\" or fill the embed arrays.\n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + }) + ], + components: [new MessageActionRow().addComponents(new MessageButton().setStyle("DANGER").setLabel("Error").setEmoji("⚠️").setCustomId("error").setDisabled(true))], + ephemeral: true, + }) + } + }catch (e){ + interaction.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor("RED") + .setDescription(`\`\`\`js\n${e}\n\`\`\``) + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + }) + ], + components: [new MessageActionRow().addComponents(new MessageButton().setStyle("DANGER").setLabel("Error").setEmoji("⚠️").setCustomId("error").setDisabled(true))], + ephemeral: true, + }) + } + }break; + case "dm":{ + let channel = interaction.options.getUser("member"); + let text = interaction.options.getString("text"); + let description = interaction.options.getString("description"); + let color = interaction.options.getString("color"); + let title = interaction.options.getString("title"); + let image = interaction.options.getString("image_url"); + let footer_text = interaction.options.getString("footer_text"); + let footer_iconURL = interaction.options.getString("footer_iconurl"); + let author_text = interaction.options.getString("author_text"); + let author_iconURL = interaction.options.getString("author_iconurl"); + let timestamp = interaction.options.getBoolean("timestamp"); + let embed = new MessageEmbed() + try{ + + if(color){ + embed.setColor(color.toUpperCase()) + } + if(description){ + embed.setDescription(description) + } + if(image){ + embed.setImage(image) + } + if(timestamp === true){ + embed.setTimestamp(new Date()) + } + if(title){ + embed.setTitle(title) + } + if(author_text){ + embed.setAuthor({ + name: author_text + }) + } + if(author_iconURL && author_text){ + embed.setAuthor({ + iconURL: author_iconURL, + name: author_text + }) + } + if(footer_text){ + embed.setFooter({ + text: footer_text + }) + } + if(footer_iconURL && footer_text){ + embed.setFooter({ + iconURL: footer_iconURL, + text: footer_text + }) + } + let embeds = embed?.description || embed?.title || embed?.author || embed?.footer || embed?.image; + if(embeds && text){ + interaction.reply({ + content: `**✅| successfully post your embed and text in${channel}**`, + ephemeral: true, + }) + channel.send({ + content: text, + embeds: [embed] + }) + }else if(embeds && !text){ + interaction.reply({ + content: `**✅| successfully post your embed in${channel}**`, + ephemeral: true, + }) + channel.send({ + embeds: [embed] + }) + }else if(!embeds && text){ + interaction.reply({ + content: `**✅| successfully post your text in${channel}**`, + ephemeral: true, + }) + channel.send({ + content: text + }) + }else if(!embeds && !text){ + interaction.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor("RED") + .setDescription("```js\nPlese for post some text and embed, you have to fill \"text\" or fill the embed arrays.\n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + }) + ], + components: [new MessageActionRow().addComponents(new MessageButton().setStyle("DANGER").setLabel("Error").setEmoji("⚠️").setCustomId("error").setDisabled(true))], + ephemeral: true, + }) + } + }catch (e){ + interaction.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor("RED") + .setDescription(`\`\`\`js\n${e}\n\`\`\``) + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + }) + ], + components: [new MessageActionRow().addComponents(new MessageButton().setStyle("DANGER").setLabel("Error").setEmoji("⚠️").setCustomId("error").setDisabled(true))], + ephemeral: true, + }) + } + }break; + } + }catch (e){ + interaction.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor("RED") + .setDescription(`\`\`\`js\n${e}\n\`\`\``) + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + }) + ], + components: [new MessageActionRow().addComponents(new MessageButton().setStyle("DANGER").setLabel("Error").setEmoji("⚠️").setCustomId("error").setDisabled(true))], + ephemeral: true, + }) + } + } +} +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info + */ \ No newline at end of file diff --git "a/slashCommands/Owner \360\237\221\221/server.js" "b/slashCommands/Owner \360\237\221\221/server.js" index 1309713..f37d72d 100644 --- "a/slashCommands/Owner \360\237\221\221/server.js" +++ "b/slashCommands/Owner \360\237\221\221/server.js" @@ -18,32 +18,32 @@ module.exports = { options: [], }], run: async (client, interaction) => { +try{ + if (!client.config.owner.some(r => r.includes(interaction.user.id))) + return interaction.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.username, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setDescription(`> You are not allowed to run this Command\n\n> **You need to be one of those guys: ${client.config.owner.map(id => `<@${id}>`)}**`) + .setTitle('⛔️| **We Got An Error**') + .setColor(client.colors.none) + .setFooter({ + text: "Error •"+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji("⚠️") + .setCustomId("error") + .setDisabled(true)) + ] + }) switch (interaction.options.getSubcommand()) { case "list": { - if (!client.config.owner.some(r => r.includes(interaction.user.id))) - return interaction.reply({ - embeds: [new MessageEmbed() - .setAuthor({ - name: `Requested by ` + interaction.user.username, - iconURL: interaction.user.displayAvatarURL({ dynamic: true }) - }) - .setDescription(`> You are not allowed to run this Command\n\n> **You need to be one of those guys: ${client.config.owner.map(id => `<@${id}>`)}**`) - .setTitle('⛔️| **We Got An Error**') - .setColor(client.colors.none) - .setFooter({ - text: "Error | created by Mr.SIN RE#1528", - iconURL: interaction.guild.iconURL({ dynamic: true }) - })], - components: [new MessageActionRow() - .addComponents(new MessageButton() - .setStyle("DANGER") - .setLabel("Error") - .setEmoji("⚠️") - .setCustomId("error") - .setDisabled(true)) - ] - }) - let i0 = 0; let i1 = 10; let page = 1; @@ -161,15 +161,34 @@ module.exports = { await reaction.users.remove(interaction.user.id); }); } - } + } + }catch (e){ + interaction.reply({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⛔️| **We Got An Error**') + .setColor("RED") + .setDescription(`\`\`\`js\n${e}\n\`\`\``) + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + }) + ], + components: [new MessageActionRow().addComponents(new MessageButton().setStyle("DANGER").setLabel("Error").setEmoji("⚠️").setCustomId("error").setDisabled(true))], + ephemeral: true, + }) + } } } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/slashCommands/Setup \360\237\222\273/setup.js" "b/slashCommands/Setup \360\237\222\273/setup.js" index a7e6dcc..1d67ab7 100644 --- "a/slashCommands/Setup \360\237\222\273/setup.js" +++ "b/slashCommands/Setup \360\237\222\273/setup.js" @@ -10,9 +10,9 @@ module.exports = { name: 'setup', category: 'Setup 💻', cooldown: 1, - userPermissions: ["MANAGE_CHANNELS","MANAGE_ROLES"], + userPermissions: [""], description: "setup system in target server.", - botPermissions: ["MANAGE_CHANNELS","MANAGE_ROLES","ADMINISTRATOR"], + botPermissions: [""], options: [{ name: "logs", description: "setup ticket log channel.", @@ -63,7 +63,7 @@ let Sub = interaction.options.getSubcommand(); switch (Sub) { case "prefix": { try { - let logsChannel = interaction.guild.channels.cache.find(c => c.id === db.get(`logs_${interaction.guild.id}`)); + let logsChannel = interaction.guild.channels.cache.find(c => c.id === db.get(`modlog_${interaction.guild.id}`)); let newPrefix = interaction.options.getString('prefix_text') let error_embed = new MessageEmbed() .setAuthor({ @@ -73,11 +73,11 @@ let Sub = interaction.options.getSubcommand(); .setTitle('⛔️| **We Got An Error**') .setColor(client.colors.none) .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) }) - if(!interaction.user.permissions.has(Permissions.FLAGS.MANAGE_GUILD)||!interaction.user.permissions.has(Permissions.FLAGS.ADMINISTRATOR)){ + if(!interaction.user.permissions.has(Permissions.FLAGS.MANAGE_GUILD)){ error_embed.setDescription("my friend you are don't have this permissions: `\"MANAGE_GUILD\" or \"ADMINISTRATOR\"`.") return interaction.reply({ embeds: [error_embed], @@ -92,7 +92,7 @@ let Sub = interaction.options.getSubcommand(); }); } if (newPrefix === client.prefix) { - db.set(`prefix_${interaction.guild.id}`, client.prefix); + db.set(`prefix_${interaction.guild.id}`, `${client.prefix}`); interaction.reply({ embeds: [new MessageEmbed() .setAuthor({ @@ -145,8 +145,8 @@ let Sub = interaction.options.getSubcommand(); } ) .setFooter({ - text: "Logs Information | created by Mr.SIN RE#1528", - iconURL: `https://media.discordapp.net/attachments/880347850666545182/915858409738350602/image0-1_1.gif` + text: "Logs Information • "+client.embed.footerText, + iconURL: client.embed.footerIcon }) ] }); @@ -165,7 +165,7 @@ let Sub = interaction.options.getSubcommand(); ] }) } - db.set(`prefix_${interaction.guild.id}`, newPrefix); + db.set(`prefix_${interaction.guild.id}`, `${newPrefix}`); interaction.reply({ embeds: [new MessageEmbed() .setAuthor({ @@ -218,8 +218,8 @@ let Sub = interaction.options.getSubcommand(); } ) .setFooter({ - text: "Logs Information | created by Mr.SIN RE#1528", - iconURL: `https://cdn.discordapp.com/attachments/902034619791196221/905054458793312327/2GU.gif` + text: "Logs Information • "+client.embed.footerText, + iconURL: client.embed.footerIcon })] }); } @@ -230,7 +230,7 @@ let Sub = interaction.options.getSubcommand(); case "ticket": { let channel = interaction.options.getChannel("channel")||interaction.channel; - if(!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)||!interaction.member.permissions.has(Permissions.FLAGS.ADMINISTRATOR)) + if(!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) return interaction.reply({ embeds: [new MessageEmbed() .setAuthor({ @@ -241,7 +241,7 @@ let Sub = interaction.options.getSubcommand(); .setColor(client.colors.none) .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -261,9 +261,9 @@ let Sub = interaction.options.getSubcommand(); }) .setTitle(client.emotes.success + '| **Menu Is Successfuly Setuped**') .setColor(client.colors.none) - .setDescription(`**setup server information menu in ${channel} is successfully setuped.**`) + .setDescription(`**setup server ticket menu in ${channel} is successfully setuped.**`) .setFooter({ - text: "Successfuly | created by Mr.SIN RE#1528", + text: "Successfuly • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) }) ], @@ -273,50 +273,26 @@ let Sub = interaction.options.getSubcommand(); channel.send({ embeds: [new MessageEmbed() .setTitle(`${client.emotes.ticket}| Ticket System`) - .addField(`Language: PER:flag_ir:`,`نیاز به کمک دارید؟؟ ما اینجا هستیم!! این چنل برای ساخت تیکت و ارتباط با تیم ادمینی میباشد برای ساخت تیکت از منوی زیر دلیل خودتون رو انتخاب کنید تا به مشکل شما رسیدگی شود جهت گرفتن راهنمایی، پرسش سوال، ریپورت کردن ممبر ها و... میتونید با باز کردن یک تیکت با تیم ادمینی در ارتباط باشید همچنین پس از زدن روی دکمه زیر دلیل باز کردن تیکتتون رو به درستی انتخاب کنید وگرنه به تیکت شما رسیدگی نمی شود تمامی تیکت ها ذخیره می شوند پس لطفا از باز کردن تیکت های بی دلیل و الکی و نقض قوانین سرور در تیکت ها خودداری کنید وگرنه از ساخت تیکت محروم می شوید`) - .addField(`Language: EN:flag_us:`,`Do you need help ?? we are here!! This channel is for making tickets and communicating with the admin team. To make a ticket, select your reason from the menu below to address your problem. For guidance, asking questions, reporting members, etc., you can open a ticket by Be in touch with the admin team. Also, after clicking the button below, select the reason for opening your ticket correctly, otherwise your ticket will not be processed. All tickets will be saved, so please stop opening tickets without any reason and in violation of server rules. Avoid tickets, otherwise you will be banned from making tickets`) + .addField(`${client.emotes.reason}Description:`,`Do you need help ?? we are here!! This channel is for making tickets and communicating with the admin team. To make a ticket, select your reason from the menu below to address your problem. For guidance, asking questions, reporting members, etc., you can open a ticket by Be in touch with the admin team. Also, after clicking the button below, select the reason for opening your ticket correctly, otherwise your ticket will not be processed. All tickets will be saved, so please stop opening tickets without any reason and in violation of server rules. Avoid tickets, otherwise you will be banned from making tickets`) .setColor(client.colors.none) ], components: [new MessageActionRow() - .addComponents([new MessageSelectMenu() - .setPlaceholder(`${client.emotes.ticket}| Select Your Ticket Reason`) - .setOptions([ - { - label: 'Need Help', - value: 'need_help', - emoji: client.emotes.help, - }, - { - label: 'Report Bot/Admin/Member', - value: 'report_bam', - emoji: client.emotes.report - }, - { - label: 'Exchange', - value: 'exchange', - emoji: client.emotes.exchange - }, - { - label: 'Admin Program', - value: 'admin', - emoji: client.emotes.admin - } - ]) - .setMinValues(1) - .setMaxValues(1) - .setCustomId("ticket_menu") - ]),new MessageActionRow() + .addComponents([new MessageButton() + .setCustomId('create_ticket') + .setEmoji(client.emotes.ticket) + .setLabel("Create Ticket") + .setStyle('SUCCESS')]),new MessageActionRow() .addComponents([new MessageButton() .setStyle("LINK") .setEmoji(client.emotes.support) .setLabel("Support") - .setURL("https://dsc.gg/sizar-team") + .setURL(client.config.discord.server_support) ]) ] }) }break; case "logs": { - if(!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)||!interaction.member.permissions.has(Permissions.FLAGS.ADMINISTRATOR)) return interaction.reply({ + if(!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) return interaction.reply({ embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -326,7 +302,7 @@ let Sub = interaction.options.getSubcommand(); .setColor(client.colors.none) .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -349,26 +325,26 @@ if(interaction.guild.channels.cache.find(c => c.id === db.fetch(`modlog_${intera }) .setTitle('⚠️| **We Got An Error**') .setColor(client.colors.none) - .setDescription(`⛔️| **My Friend, you just have a logs channel befor it to ${interaction.guild.channels.cache.find(c => c.id === db.fetch(`modlog_${interaction.guild.id}`))}.**`) + .setDescription(`**My Friend, you just have a logs channel befor it to ${interaction.guild.channels.cache.find(c => c.id === db.fetch(`modlog_${interaction.guild.id}`))}.**`) .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })] }) }else { interaction.reply({ - embeds: [new MessageEmbed().setTitle('✅| ** Process Is Successfuly**').setColor(client.colors.green).setDescription(`process is successfuly.\n I just setup your ticket logs channel to ${channel}.`).setFooter({text: `Successfuly | Requested By ${interaction.user.tag} `, iconURL: interaction.guild.iconURL({dynamic:true})}).setThumbnail(interaction.user.displayAvatarURL({dynamic:true}))], + embeds: [new MessageEmbed().setTitle('✅| ** Process Is Successfuly**').setColor(client.colors.green).setDescription(`process is successfuly.\n I just setup your ticket logs channel to ${channel}.`).setFooter({text: `Successfuly • Requested By ${interaction.user.tag} `, iconURL: interaction.guild.iconURL({dynamic:true})}).setThumbnail(interaction.user.displayAvatarURL({dynamic:true}))], ephemeral: true, }) db.set(`modlog_${interaction.guild.id}`, channel.id) channel.send({ - embeds: [new MessageEmbed().setColor(client.colors.none).setDescription(`just now here is ticket logs channel for send members tickets information setupped to ${channel}.`).setTitle('✅| ** Process Is Successfuly**').setFooter({text: `Logs Setuped | Requested By ${interaction.user.tag} `, iconURL: interaction.guild.iconURL({dynamic:true})}).setThumbnail(interaction.user.displayAvatarURL({dynamic:true}))] + embeds: [new MessageEmbed().setColor(client.colors.none).setDescription(`just now here is ticket logs channel for send members tickets information setupped to ${channel}.`).setTitle('✅| ** Process Is Successfuly**').setFooter({text: `Logs Setuped • Requested By ${interaction.user.tag} `, iconURL: interaction.guild.iconURL({dynamic:true})}).setThumbnail(interaction.user.displayAvatarURL({dynamic:true}))] }) } }break; case "admin": { let role = interaction.options.getRole("role") - if(!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_ROLES)||!interaction.member.permissions.has(Permissions.FLAGS.ADMINISTRATOR)) return interaction.reply({ + if(!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_ROLES)) return interaction.reply({ embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -378,7 +354,7 @@ if(interaction.guild.channels.cache.find(c => c.id === db.fetch(`modlog_${intera .setColor(client.colors.none) .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_ROLES\" \n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -399,21 +375,21 @@ if(interaction.guild.roles.cache.find(c => c.id === db.fetch(`TicketAdminRole_${ }) .setTitle('⚠️| **We Got An Error**') .setColor(client.colors.none) - .setDescription(`⛔️| **My Friend, you just have a setup your ticket mod roles befor it to ${interaction.guild.roles.cache.find(c => c.id === db.fetch(`TicketAdminRole_${interaction.guild.id}`))}.**`) + .setDescription(`**My Friend, you just have a setup your ticket mod roles befor it to ${interaction.guild.roles.cache.find(c => c.id === db.fetch(`TicketAdminRole_${interaction.guild.id}`))}.**`) .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })] }) interaction.reply({ - embeds: [new MessageEmbed().setTitle('☑️| ** Process Is Successfuly**').setColor(client.colors.green).setDescription(`\n I just setup your ticket admin role to ${role}.`).setFooter({text: `Successfuly | Requested By ${interaction.user.tag} `, iconURL: interaction.guild.iconURL({dynamic:true})}).setThumbnail(interaction.user.displayAvatarURL({dynamic:true}))], + embeds: [new MessageEmbed().setTitle('☑️| ** Process Is Successfuly**').setColor(client.colors.green).setDescription(`\n I just setup your ticket admin role to ${role}.`).setFooter({text: `Successfuly • Requested By ${interaction.user.tag} `, iconURL: interaction.guild.iconURL({dynamic:true})}).setThumbnail(interaction.user.displayAvatarURL({dynamic:true}))], ephemeral: true, }) db.set(`TicketAdminRole_${interaction.guild.id}`, role.id) if(db.fetch(`modlog_${interaction.guild.id}`)){ interaction.guild.channels.cache.find(c => c.id === db.fetch(`modlog_${interaction.guild.id}`)).send({ - embeds: [new MessageEmbed().setTitle('☑️| ** Process Is Successfuly**').setColor(client.colors.none).setDescription(`I just setup ticket admin role to ${role} in this guild.`).setFooter({text: `Logs Setuped | Requested By ${interaction.user.tag} `, iconURL: interaction.guild.iconURL({dynamic:true})}).setThumbnail(interaction.user.displayAvatarURL({dynamic:true}))] + embeds: [new MessageEmbed().setTitle('☑️| ** Process Is Successfuly**').setColor(client.colors.none).setDescription(`I just setup ticket admin role to ${role} in this guild.`).setFooter({text: `Logs Setuped • Requested By ${interaction.user.tag} `, iconURL: interaction.guild.iconURL({dynamic:true})}).setThumbnail(interaction.user.displayAvatarURL({dynamic:true}))] }) } @@ -422,11 +398,11 @@ if(interaction.guild.roles.cache.find(c => c.id === db.fetch(`TicketAdminRole_${ } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/slashCommands/Setup \360\237\222\273/unsetup.js" "b/slashCommands/Setup \360\237\222\273/unsetup.js" index 0418c46..7a1c018 100644 --- "a/slashCommands/Setup \360\237\222\273/unsetup.js" +++ "b/slashCommands/Setup \360\237\222\273/unsetup.js" @@ -27,7 +27,7 @@ module.exports = { let Sub = interaction.options.getSubcommand(); switch (Sub) { case "logs": { - if(!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)||!interaction.member.permissions.has(Permissions.FLAGS.ADMINISTRATOR)) return interaction.reply({ + if(!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) return interaction.reply({ embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -37,7 +37,7 @@ let Sub = interaction.options.getSubcommand(); .setColor(client.colors.none) .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error •"+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -60,7 +60,7 @@ return interaction.reply({ .setColor(client.colors.none) .setDescription("```js\nin this guild admin role dose not setuped. I can't delete it befor setup\n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error •"+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -80,7 +80,7 @@ return interaction.reply({ db.delete(`modlog_${interaction.guild.id}`) }break; case "admin": { - if(!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_ROLES)||!interaction.member.permissions.has(Permissions.FLAGS.ADMINISTRATOR)) return interaction.reply({ + if(!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_ROLES)) return interaction.reply({ embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -90,7 +90,7 @@ return interaction.reply({ .setColor(client.colors.none) .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_ROLES\" \n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error •"+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -112,7 +112,7 @@ if(!interaction.guild.roles.cache.find(c => c.id === db.fetch(`TicketAdminRole_$ .setColor(client.colors.none) .setDescription("```js\nin this guild admin role dose not setuped. I can't delete it befor setup\n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error •"+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -135,11 +135,11 @@ if(!interaction.guild.roles.cache.find(c => c.id === db.fetch(`TicketAdminRole_$ } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git "a/slashCommands/Ticket \360\237\216\253/ticket.js" "b/slashCommands/Ticket \360\237\216\253/ticket.js" index c8c41c9..fb9c0c1 100644 --- "a/slashCommands/Ticket \360\237\216\253/ticket.js" +++ "b/slashCommands/Ticket \360\237\216\253/ticket.js" @@ -57,56 +57,48 @@ module.exports = { let Sub = interaction.options.getSubcommand(); switch (Sub) { case "create": { - - interaction.reply({ - ephemeral: true, - embeds: [new MessageEmbed() - .setTitle(`${client.emotes.ticket}| Ticket System`) - .addField(`Language: PER:flag_ir:`,`نیاز به کمک دارید؟؟ ما اینجا هستیم!! این چنل برای ساخت تیکت و ارتباط با تیم ادمینی میباشد برای ساخت تیکت از منوی زیر دلیل خودتون رو انتخاب کنید تا به مشکل شما رسیدگی شود جهت گرفتن راهنمایی، پرسش سوال، ریپورت کردن ممبر ها و... میتونید با باز کردن یک تیکت با تیم ادمینی در ارتباط باشید همچنین پس از زدن روی دکمه زیر دلیل باز کردن تیکتتون رو به درستی انتخاب کنید وگرنه به تیکت شما رسیدگی نمی شود تمامی تیکت ها ذخیره می شوند پس لطفا از باز کردن تیکت های بی دلیل و الکی و نقض قوانین سرور در تیکت ها خودداری کنید وگرنه از ساخت تیکت محروم می شوید`) - .addField(`Language: EN:flag_us:`,`Do you need help ?? we are here!! This channel is for making tickets and communicating with the admin team. To make a ticket, select your reason from the menu below to address your problem. For guidance, asking questions, reporting members, etc., you can open a ticket by Be in touch with the admin team. Also, after clicking the button below, select the reason for opening your ticket correctly, otherwise your ticket will not be processed. All tickets will be saved, so please stop opening tickets without any reason and in violation of server rules. Avoid tickets, otherwise you will be banned from making tickets`) - .setColor(client.colors.none) - ], - components: [new MessageActionRow() - .addComponents([new MessageSelectMenu() - .setPlaceholder(`${client.emotes.ticket}| Select Your Ticket Reason`) - .setOptions([ - { - label: 'Need Help', - value: 'need_help', - emoji: client.emotes.help, - }, - { - label: 'Report Bot/Admin/Member', - value: 'report_bam', - emoji: client.emotes.report - }, - { - label: 'Exchange', - value: 'exchange', - emoji: client.emotes.exchange - }, - { - label: 'Admin Program', - value: 'admin', - emoji: client.emotes.admin - } - ]) - .setMinValues(1) - .setMaxValues(1) - .setCustomId("ticket_menu") - ]),new MessageActionRow() - .addComponents([new MessageButton() - .setStyle("LINK") - .setEmoji(client.emotes.support) - .setLabel("Support") - .setURL("https://dsc.gg/sizar-team") - ]) - ] + let embed = new MessageEmbed() + .setTitle(`${client.emotes.ticket}| **Request To Create Ticket**`) + .setColor(client.colors.none) + .setTimestamp() + .setDescription('**your ticket channel will be created but are you sure to do this??\nif your ticket created please wait the moderators or admins to speek there.**') + .addField(client.emotes.reason+'| INFOS','if you want to create a ticket channel for yourself, you have to click to this emoji: `"'+client.emotes.ticket+'"` or else click to `"'+client.emotes.x+'"`.') + .setURL(client.config.discord.server_support) + .setFooter({ + text: `Request To Create Ticket • ${client.embed.footerText}`, + iconURL: interaction.guild.iconURL({ dynamic: true }) + }) + .setAuthor({ + name: `Requested by ` + interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) + + interaction.reply({ + ephemeral: true, + embeds: [embed], + components: [new MessageActionRow() + .addComponents( + [new MessageButton() + .setCustomId('create') + .setEmoji(client.emotes.ticket) + .setLabel("Create Ticket") + .setStyle('SUCCESS')], + [new MessageButton() + .setCustomId('dont_do') + .setEmoji(client.emotes.x) + .setLabel('Cancel Process') + .setStyle("DANGER") + ]) + ] + }).then(msg=>{ + db.set(`CreateTicketMSG_${interaction.guild.id}_${interaction.user.id}`, msg.id) + }) + }break; case "close": { if(interaction.channel.name.startsWith(`${client.emotes.help}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.exchange}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.report}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.admin}︱ticket-`)||interaction.channel.name === db.get(`ticketName_${interaction.user.id}_${interaction.guild.id}`)){ - interaction.reply({ + + let msg = await interaction.channel.send({ embeds: [new MessageEmbed() .setColor(client.colors.none) .setTitle(`${client.emotes.close}| Close Ticket`) @@ -124,7 +116,35 @@ let Sub = interaction.options.getSubcommand(); .setEmoji(client.emotes.close) .setLabel("Close It") ])] + }) + interaction.reply({ content: `done👌🏻`, ephemeral: true, }) + + + setTimeout(() => { +if(msg.embeds[0].title === `${client.emotes.close}| Close Ticket`){ + msg.edit({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyour time for close the ticket channel is ended.⏰\n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] }) +} + }, 1000 * 50) }else{ interaction.reply({ embeds: [new MessageEmbed() @@ -134,9 +154,9 @@ let Sub = interaction.options.getSubcommand(); }) .setTitle('⚠️| **We Got An Error**') .setColor(client.colors.none) - .setDescription(`️**My Friend, here is not a ticket channel please use this command in other channel**`) + .setDescription(`**My Friend, here is not a ticket channel please use this command in other channel**`) .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -151,7 +171,8 @@ let Sub = interaction.options.getSubcommand(); }break; case "open": { if(interaction.channel.name.startsWith(`${client.emotes.help}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.exchange}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.report}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.admin}︱ticket-`)||interaction.channel.name === db.get(`ticketName_${interaction.user.id}_${interaction.guild.id}`)){ - if(!interaction.member.roles.cache.has(db.get(`TicketAdminRole_${interaction.guild.id}`))&&!interaction.member.permissions.has([Permissions.FLAGS.MANAGE_CHANNELS])&&!interaction.member.permissions.has([Permissions.FLAGS.ADMINISTRATOR])) return interaction.reply({ + if(!interaction.member.roles.cache.has(db.get(`TicketAdminRole_${interaction.guild.id}`))||!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) return interaction.reply({ + ephemeral: true, embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -161,7 +182,7 @@ let Sub = interaction.options.getSubcommand(); .setColor(client.colors.none) .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -172,7 +193,7 @@ let Sub = interaction.options.getSubcommand(); .setCustomId("error") .setDisabled(true))] }) - interaction.reply({ + let msg = await interaction.channel.send({ embeds: [new MessageEmbed() .setColor(client.colors.none) .setTitle(`${client.emotes.open}| Open Ticket`) @@ -187,12 +208,41 @@ let Sub = interaction.options.getSubcommand(); ],[new MessageButton() .setStyle("SUCCESS") .setCustomId("reopenTicket") - .setEmoji(client.emotes.open) + .setEmoji(client.emotes.open) .setLabel("Open It") ])] + }) + interaction.reply({ content: `done👌🏻`, ephemeral: true, }) + + + setTimeout(() => { +if(msg.embeds[0].title === `${client.emotes.open}| Open Ticket`){ + msg.edit({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyour time for delete the ticket channel is ended.⏰\n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] }) +} + }, 1000 * 50) }else { interaction.reply({ + ephemeral: true, embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -200,9 +250,9 @@ let Sub = interaction.options.getSubcommand(); }) .setTitle('⚠️| **We Got An Error**') .setColor(client.colors.none) - .setDescription(`️**My Friend, here is not a ticket channel please use this command in other channel**`) + .setDescription(`**My Friend, here is not a ticket channel please use this command in other channel**`) .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -217,7 +267,7 @@ let Sub = interaction.options.getSubcommand(); }break; case "delete": { if(interaction.channel.name.startsWith(`${client.emotes.help}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.exchange}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.report}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.admin}︱ticket-`)||interaction.channel.name === db.get(`ticketName_${interaction.user.id}_${interaction.guild.id}`)){ - if(!interaction.member.roles.cache.has(db.get(`TicketAdminRole_${interaction.guild.id}`))&&!interaction.member.permissions.has([Permissions.FLAGS.MANAGE_CHANNELS])&&!interaction.member.permissions.has([Permissions.FLAGS.ADMINISTRATOR])) return interaction.reply({ + if(!interaction.member.roles.cache.has(db.get(`TicketAdminRole_${interaction.guild.id}`))||!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) return interaction.reply({ embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -227,7 +277,7 @@ let Sub = interaction.options.getSubcommand(); .setColor(client.colors.none) .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -239,7 +289,7 @@ let Sub = interaction.options.getSubcommand(); .setDisabled(true))] }) - interaction.reply({ + let msg = await interaction.channel.send({ embeds: [new MessageEmbed() .setColor(client.colors.none) .setTitle(`${client.emotes.trash}| Delete Ticket`) @@ -257,7 +307,35 @@ let Sub = interaction.options.getSubcommand(); .setEmoji(client.emotes.trash) .setLabel("Delete It") ])] - }) + }) + interaction.reply({ content: `done👌🏻`, ephemeral: true, }) + + + setTimeout(() => { +if(msg.embeds[0].title === `${client.emotes.trash}| Delete Ticket`){ + msg.edit({ + embeds: [new MessageEmbed() + .setAuthor({ + name: `Requested by ` + interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }) + }) + .setTitle('⚠️| **We Got An Error**') + .setColor(client.colors.none) + .setDescription("```js\nyour time for delete the ticket channel is ended.⏰\n```") + .setFooter({ + text: "Error • "+client.embed.footerText, + iconURL: interaction.guild.iconURL({ dynamic: true }) + })], + components: [new MessageActionRow() + .addComponents(new MessageButton() + .setStyle("DANGER") + .setLabel("Error") + .setEmoji(client.emotes.error) + .setCustomId("error") + .setDisabled(true))] + }) +} + }, 1000 * 50) }else { interaction.reply({ embeds: [new MessageEmbed() @@ -267,9 +345,9 @@ let Sub = interaction.options.getSubcommand(); }) .setTitle('⚠️| **We Got An Error**') .setColor(client.colors.none) - .setDescription(`️**My Friend, here is not a ticket channel please use this command in other channel**`) + .setDescription(`**My Friend, here is not a ticket channel please use this command in other channel**`) .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -285,7 +363,7 @@ let Sub = interaction.options.getSubcommand(); case "rename": { if(interaction.channel.name.startsWith(`${client.emotes.help}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.exchange}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.report}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.admin}︱ticket-`)||interaction.channel.name === db.get(`ticketName_${interaction.user.id}_${interaction.guild.id}`)){ let ticketName = interaction.options.getString("name"); - if(!interaction.member.roles.cache.has(db.get(`TicketAdminRole_${interaction.guild.id}`))&&!interaction.member.permissions.has([Permissions.FLAGS.MANAGE_CHANNELS])&&!interaction.member.permissions.has([Permissions.FLAGS.ADMINISTRATOR])) return interaction.reply({ + if(!interaction.member.roles.cache.has(db.get(`TicketAdminRole_${interaction.guild.id}`))||!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) return interaction.reply({ embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -295,7 +373,7 @@ let Sub = interaction.options.getSubcommand(); .setColor(client.colors.none) .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -317,7 +395,7 @@ let Sub = interaction.options.getSubcommand(); .setColor(client.colors.none) .setDescription("are you sure to change your ticket channel name??") .setFooter({ - text: "Change Name | created by Mr.SIN RE#1528", + text: "Change Name • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [ @@ -338,8 +416,16 @@ let Sub = interaction.options.getSubcommand(); )] }) db.set(`RenameTicket_${interaction.channel.id}`, ticketName) + interaction.reply({ content: `done👌🏻`, ephemeral: true, }) + let msg = await interaction.channel.send({ + content: `${interaction.user}`, + embeds: [embed], + components: [button] + }) + setTimeout(() => { - interaction.editReply({ +if(msg.embeds[0].title === client.emotes.rename+'| **Request To Change Ticket Name**'){ + msg.edit({ embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -349,7 +435,7 @@ let Sub = interaction.options.getSubcommand(); .setColor(client.colors.none) .setDescription("```js\nyour time for changing the ticket channel name is ended.⏰\n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -361,6 +447,7 @@ let Sub = interaction.options.getSubcommand(); .setDisabled(true))] }) db.delete(`RenameTicket_${interaction.channel.id}`) +} }, 1000 * 50) }else{ return interaction.reply({ @@ -371,9 +458,9 @@ return interaction.reply({ }) .setTitle('⚠️| **We Got An Error**') .setColor(client.colors.none) - .setDescription(`️**My Friend, here is not a ticket channel please use this command in other channel**`) + .setDescription(`**My Friend, here is not a ticket channel please use this command in other channel**`) .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -382,14 +469,15 @@ return interaction.reply({ .setLabel("Error") .setEmoji(client.emotes.error) .setCustomId("error") - .setDisabled(true))] + .setDisabled(true))], + ephemeral: true, }) } }break; case "invite": { if(interaction.channel.name.startsWith(`${client.emotes.help}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.exchange}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.report}︱ticket-`)||interaction.channel.name.startsWith(`${client.emotes.admin}︱ticket-`)||interaction.channel.name === db.get(`ticketName_${interaction.user.id}_${interaction.guild.id}`)){ let member = interaction.options.getMember('member'); - if(!interaction.member.roles.cache.has(db.get(`TicketAdminRole_${interaction.guild.id}`))&&!interaction.member.permissions.has([Permissions.FLAGS.MANAGE_CHANNELS])&&!interaction.member.permissions.has([Permissions.FLAGS.ADMINISTRATOR])) return interaction.reply({ + if(!interaction.member.roles.cache.has(db.get(`TicketAdminRole_${interaction.guild.id}`))||!interaction.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) return interaction.reply({ embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -399,7 +487,7 @@ return interaction.reply({ .setColor(client.colors.none) .setDescription("```js\nyou are not have permissions for use this.\nPermissions Need: \"MANAGE_CHANNELS\" \n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -408,41 +496,45 @@ return interaction.reply({ .setLabel("Error") .setEmoji(client.emotes.error) .setCustomId("error") - .setDisabled(true))] + .setDisabled(true))], + ephemeral: true, }) - interaction.reply({ - embeds: [new MessageEmbed() +let embed = new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, iconURL: interaction.user.displayAvatarURL({ dynamic: true }) }) - .setTitle('📇| **Request To Adding People To Ticket**') + .setTitle(client.emotes.print+'| **Request To Adding People To Ticket**') .setColor(client.colors.none) - .setDescription("are you sure to change your ticket channel name??") + .setDescription("are you sure to add some one in to this ticket channel??") .setFooter({ - text: "Change Name | created by Mr.SIN RE#1528", + text: "Adding People • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) - })], - components: [ - new MessageActionRow() - .addComponents( - [new MessageButton() + }) + +let button = new MessageActionRow() + .addComponents([new MessageButton() .setStyle("SUCCESS") .setEmoji(client.emotes.plus) .setLabel("Add Member") .setCustomId("addmemberTicket") - ], - [new MessageButton() + ],[new MessageButton() .setStyle("DANGER") .setEmoji(client.emotes.x) .setLabel("Cancel") .setCustomId("canceladdmemberTicket") - ] - )] - }) + ]) + interaction.reply({ content: `done👌🏻`, ephemeral: true, }) + let msg = await interaction.channel.send({ + content: `${interaction.user}`, + embeds: [embed], + components: [button] + }) + db.set(`TicketControlNewMember_${interaction.channel.id}`, member.id) setTimeout(() => { - interaction.editReply({ +if(msg.embeds[0].title === client.emotes.print+'| **Request To Adding People To Ticket**'){ + msg.edit({ embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -450,9 +542,9 @@ return interaction.reply({ }) .setTitle('⚠️| **We Got An Error**') .setColor(client.colors.none) - .setDescription("```js\nyour time for changing the ticket channel name is ended.⏰\n```") + .setDescription("```js\nyour time for adding people in to the ticket channel is ended.⏰\n```") .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -464,9 +556,11 @@ return interaction.reply({ .setDisabled(true))] }) db.delete(`TicketControlNewMember_${interaction.channel.id}`) + } }, 1000 * 50) + }else { - interaction.reply({ + interaction.reply({ ephemeral: true, embeds: [new MessageEmbed() .setAuthor({ name: `Requested by ` + interaction.user.tag, @@ -474,9 +568,9 @@ return interaction.reply({ }) .setTitle('⚠️| **We Got An Error**') .setColor(client.colors.none) - .setDescription(`️**My Friend, here is not a ticket channel please use this command in other channel**`) + .setDescription(`**My Friend, here is not a ticket channel please use this command in other channel**`) .setFooter({ - text: "Error | created by Mr.SIN RE#1528", + text: "Error • "+client.embed.footerText, iconURL: interaction.guild.iconURL({ dynamic: true }) })], components: [new MessageActionRow() @@ -493,11 +587,11 @@ return interaction.reply({ } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for SIZAR Team | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/start/1-events.js b/start/1-events.js index d029e6e..18baecf 100644 --- a/start/1-events.js +++ b/start/1-events.js @@ -4,17 +4,17 @@ module.exports = async (bot) => { try{ bot.events = new Map(); const stringlength = 69; - fs.readdirSync('./events').forEach(dirs => { - const events = fs.readdirSync(`./events/${dirs}`).filter(files => files.endsWith('.js')); + fs.readdirSync(`${process.cwd()}/events`).forEach(dirs => { + const events = fs.readdirSync(`${process.cwd()}/events/${dirs}`).filter(files => files.endsWith('.js')); for (const file of events) { - const event = require(`./../events/${dirs}/${file}`); + const event = require(`${process.cwd()}/events/${dirs}/${file}`); bot.events.set(event); bot.on(file.split(".")[0], event.bind(null, bot)); }; }); - /*const events = fs.readdirSync('./events').filter(file => file.endsWith('.js')); + /*const events = fs.readdirSync(`${process.cwd()}/events`).filter(file => file.endsWith('.js')); for (const file of events) { - const event = require(`./../events/${file}`); + const event = require(`${process.cwd()}/events/${file}`); bot.events.set(event); bot.on(file.split(".")[0], event.bind(null, bot)); };*/ @@ -55,11 +55,11 @@ try { } } /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/start/2-commands.js b/start/2-commands.js index 2839532..cfcdcc8 100644 --- a/start/2-commands.js +++ b/start/2-commands.js @@ -1,10 +1,10 @@ const fs = require('fs'); var clc = require("cli-color"); module.exports = async (client) => { -fs.readdirSync('./commands').forEach(dirs => { - const commands = fs.readdirSync(`./commands/${dirs}`).filter(files => files.endsWith('.js')); +fs.readdirSync(`${process.cwd()}/commands`).forEach(dirs => { + const commands = fs.readdirSync(`${process.cwd()}/commands/${dirs}`).filter(files => files.endsWith('.js')); for (const file of commands) { - const command = require(`./../commands/${dirs}/${file}`); + const command = require(`${process.cwd()}/commands/${dirs}/${file}`); client.commands.set(command.name, command); }; }); @@ -19,12 +19,12 @@ try { console.log("\n") } catch { /* */ } } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/start/3-handlers.js b/start/3-handlers.js index 3589ad7..1755a54 100644 --- a/start/3-handlers.js +++ b/start/3-handlers.js @@ -7,7 +7,7 @@ var Files = [ "slashCommandHandler.js",client.config.source.keep_alive ? "keepA Files .filter(Boolean) .forEach((handler) => { - require(`./../handlers/${handler}`)(client); + require(`${process.cwd()}/handlers/${handler}`)(client); handlers.set(handler); }); try { @@ -21,12 +21,12 @@ try { console.log("\n") } catch { /* */ } } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/start/4-dashboard.js b/start/4-dashboard.js index 91c332e..07bceb2 100644 --- a/start/4-dashboard.js +++ b/start/4-dashboard.js @@ -1,11 +1,11 @@ var clc = require("cli-color"); module.exports = async (client) => { //======== Loading Dashboard ========= -let Files = [ client.config.source.dashboard ? "../dashboard/index.js" : null ] +let Files = [ client.config.source.dashboard ? `${process.cwd()}/dashboard/index.js` : null ] Files .filter(Boolean) .forEach((dashboard) => { - require(`./../dashboard/${dashboard}`)(client); + require(`${process.cwd()}/dashboard/${dashboard}`)(client); try { const stringlength = 69; console.log("\n") @@ -18,12 +18,12 @@ try { } catch { /* */ } }); } -/** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://discord.gg/rsQGcSfyJs - * @INFO - * Work for SIZAR Team | https://discord.gg/rsQGcSfyJs - * @INFO - * Please Mention Us SIZAR Team, When Using This Code! - * @INFO +/** + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info */ \ No newline at end of file diff --git a/storage/config.js b/storage/config.js index 5ef55e0..0bb6595 100644 --- a/storage/config.js +++ b/storage/config.js @@ -3,21 +3,21 @@ module.exports = { source: { website : { support: "https://discord.gg/at5Q72HNAx", - domain: "https://Ticker-Boy.your_replit_name.repl.co"//you need get your repl.co link in replit with keepAlive code, then replace the link + domain: "https://Ticker-Boy.sobhansrza.repl.co"//you need get your repl.co link in replit with keepAlive code, then replace the link }, anti_crash: true,//turn on or off the antiCrash file keep_alive: true,//turn on or off the keepAlive file dashboard: false,//turn on or off the bot dashboard website port: 1528,//don't need to touch or changed - callback: 'https://Ticker-Boy.your_replit_name.repl.co/callback',//you need get your repl.co link in replit with keepAlive code, then replace the link right behind of /callback + callback: 'https://Ticker-Boy.sobhansrza.repl.co/callback',//you need get your repl.co link in replit with keepAlive code, then replace the link right behind of /callback secret: process.env.USER_SECRET_ID,//bot secret id, you can get it in discord developer portal client_id: process.env.CLIENT_ID,//bot client id, you can get it in discord server or in discord developer portal }, discord: { token: process.env.TOKEN, prefix: process.env.PREFIX, - invite: `https://discord.com/oauth2/authorize?client_id=${process.env.CLIENT_ID}&scope=bot+applications.commands+identify+guilds+applications.commands.permissions.update&permissions=2080374975`, - server_support: "https://discord.gg/at5Q72HNAx", + invite: `https://discord.com/oauth2/authorize?client_id=${process.env.CLIENT_ID}&scope=bot+applications.commands&permissions=2080374975`, + server_support: "https://discord.gg/aaahv3Ua", server_id: "912596015075455016", server_channel_report: "988020418612961322", server_channel_status: "988020102186303608", @@ -31,11 +31,11 @@ module.exports = { ], }; /** - * @INFO - * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/sizar-team - * @INFO - * Work for Persian Czar | https://dsc.gg/sizar-team - * @INFO - * Please Mention Us Persian Czar, When Using This Code! - * @INFO - */ + * @Info + * Bot Coded by Mr.SIN RE#1528 :) | https://dsc.gg/persian-caesar + * @Info + * Work for Persian Caesar | https://dsc.gg/persian-caesar + * @Info + * Please Mention Us "Persian Caesar", When Have Problem With Using This Code! + * @Info + */ \ No newline at end of file diff --git a/storage/emotes.json b/storage/emotes.json index b75ddaf..bd43247 100644 --- a/storage/emotes.json +++ b/storage/emotes.json @@ -20,6 +20,7 @@ "invite": "💌", "help": "🧰", "info": "📁", + "print": "📇", "plus": "➕", "exchange": "💸", "hurt": "💕",