├── README.md ├── Schemas ├── TaskMessage.js ├── TaskVoice.js ├── Tasks.js ├── Users.js ├── messageGuild.js ├── messageGuildChannel.js ├── messageUser.js ├── messageUserChannel.js ├── voiceGuild.js ├── voiceGuildChannel.js ├── voiceJoinedAt.js ├── voiceUser.js ├── voiceUserChannel.js └── voiceUserParent.js ├── commands ├── message │ └── hata vermesindiye.txt ├── prefix │ ├── General │ │ ├── GorevVer.js │ │ ├── Gorevlerim.js │ │ ├── Stat.js │ │ ├── Top.Gorev.js │ │ └── Top.Stat.js │ └── Info │ │ └── ping.js ├── slash │ └── hata vermesindiye.txt └── user │ ├── General │ └── avatar.js │ └── Info │ └── user-info.js ├── config └── config.js ├── events ├── Client │ └── ready.js └── Guild │ ├── guildMemberAdd.js │ ├── interactionCreate.js │ ├── messageCreate.js │ ├── messageStats.js │ └── voiceStats.js ├── handlers ├── application_commands.js ├── events.js ├── modals.js ├── mongoose.js └── prefix.js ├── index.js ├── modals └── myModal.js ├── package-lock.json └── package.json /README.md: -------------------------------------------------------------------------------- 1 | # v14-stat-bot 2 | # Sizde Bi 10 15 Star Atarsınız Artık :) 3 | herkese selam istek üzerine yapmış olduğum stat botunu sizlerle paylaşıyorum İçinde Modallı Görev Sistemi Görevi Bitirince otomatik Rol atlatma topgörev topstat Stat görevver görevim komutları bulunuyor 4 | 5 | ![image](https://cdn.discordapp.com/attachments/1091833080869834884/1092556229848608908/image.png) 6 | ![image](https://cdn.discordapp.com/attachments/1091841270336454766/1092925981905404064/image.png) 7 | 8 | ![image](https://cdn.discordapp.com/attachments/1091833080869834884/1092556444487925780/image.png) 9 | 10 | ![image](https://cdn.discordapp.com/attachments/1091841270336454766/1092926423838232596/image.png) 11 | ![image](https://cdn.discordapp.com/attachments/1091833080869834884/1092556541133070426/image.png) 12 | ![image](https://cdn.discordapp.com/attachments/1091833080869834884/1092556766170066965/image.png) 13 | 14 | ![image](https://cdn.discordapp.com/attachments/1091841270336454766/1092925604640346264/image.png) 15 | ![image](https://cdn.discordapp.com/attachments/1091841270336454766/1092925641474719754/image.png) 16 | 17 | -------------------------------------------------------------------------------- /Schemas/TaskMessage.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: String, 5 | userID: String, 6 | topStat: { type: Number, default: 0 }, 7 | }); 8 | 9 | module.exports = model("TaskMessage", schema); 10 | -------------------------------------------------------------------------------- /Schemas/TaskVoice.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: String, 5 | userID: String, 6 | topStat: { type: Number, default: 0 }, 7 | }); 8 | 9 | module.exports = model("voiceUserTask", schema); 10 | -------------------------------------------------------------------------------- /Schemas/Tasks.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | 3 | const Tasks = mongoose.model('Tasks', new mongoose.Schema({ 4 | TaskRoleId: {type: String, default: "bos"}, 5 | Task: {type: String, default: "bos"}, 6 | TaskMembers: {type: Array }, 7 | TaskMessage: {type: String, default: "bos"}, 8 | TaskSure: {type: String, default: "bos"}, 9 | ComplatedTaskRoleUpId: {type: String, default: "bos"} 10 | })) 11 | 12 | module.exports = Tasks; -------------------------------------------------------------------------------- /Schemas/Users.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | 3 | const User = mongoose.model('Users', new mongoose.Schema({ 4 | userID: String, 5 | ActiveTask: { type: String, default: "Hayır" }, 6 | ComplatedTasks: Number, 7 | })) 8 | 9 | module.exports = User; -------------------------------------------------------------------------------- /Schemas/messageGuild.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: { type: String, default: "" }, 5 | topStat: { type: Number, default: 0 }, 6 | dailyStat: { type: Number, default: 0 }, 7 | weeklyStat: { type: Number, default: 0 }, 8 | twoWeeklyStat: { type: Number, default: 0 }, 9 | }); 10 | 11 | module.exports = model("messageGuild", schema); 12 | -------------------------------------------------------------------------------- /Schemas/messageGuildChannel.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: String, 5 | channelID: String, 6 | channelData: { type: Number, default: 0 }, 7 | }); 8 | 9 | module.exports = model("messageGuildChannel", schema); 10 | -------------------------------------------------------------------------------- /Schemas/messageUser.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: String, 5 | userID: String, 6 | topStat: { type: Number, default: 0 }, 7 | dailyStat: { type: Number, default: 0 }, 8 | weeklyStat: { type: Number, default: 0 }, 9 | twoWeeklyStat: { type: Number, default: 0 }, 10 | }); 11 | 12 | module.exports = model("messageUser", schema); 13 | -------------------------------------------------------------------------------- /Schemas/messageUserChannel.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: String, 5 | userID: String, 6 | channelID: String, 7 | channelData: { type: Number, default: 0 }, 8 | }); 9 | 10 | module.exports = model("messageUserChannel", schema); 11 | -------------------------------------------------------------------------------- /Schemas/voiceGuild.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: String, 5 | topStat: { type: Number, default: 0 }, 6 | dailyStat: { type: Number, default: 0 }, 7 | weeklyStat: { type: Number, default: 0 }, 8 | twoWeeklyStat: { type: Number, default: 0 }, 9 | }); 10 | 11 | module.exports = model("voiceGuild", schema); 12 | -------------------------------------------------------------------------------- /Schemas/voiceGuildChannel.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: String, 5 | channelID: String, 6 | channelData: { type: Number, default: 0 }, 7 | }); 8 | 9 | module.exports = model("voiceGuildChannel", schema); 10 | -------------------------------------------------------------------------------- /Schemas/voiceJoinedAt.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | userID: String, 5 | date: Number, 6 | }); 7 | 8 | module.exports = model("voiceJoinedAt", schema); 9 | -------------------------------------------------------------------------------- /Schemas/voiceUser.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: String, 5 | userID: String, 6 | topStat: { type: Number, default: 0 }, 7 | dailyStat: { type: Number, default: 0 }, 8 | weeklyStat: { type: Number, default: 0 }, 9 | twoWeeklyStat: { type: Number, default: 0 }, 10 | }); 11 | 12 | module.exports = model("voiceUser", schema); 13 | -------------------------------------------------------------------------------- /Schemas/voiceUserChannel.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: String, 5 | userID: String, 6 | channelID: String, 7 | channelData: { type: Number, default: 0 }, 8 | }); 9 | 10 | module.exports = model("voiceUserChannel", schema); 11 | -------------------------------------------------------------------------------- /Schemas/voiceUserParent.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: String, 5 | userID: String, 6 | parentID: String, 7 | parentData: { type: Number, default: 0 }, 8 | }); 9 | 10 | module.exports = model("voiceUserParent", schema); 11 | -------------------------------------------------------------------------------- /commands/message/hata vermesindiye.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shutjs/v14-stat-bot/325d5626efc7791c5123c98488d44635cbb21f0c/commands/message/hata vermesindiye.txt -------------------------------------------------------------------------------- /commands/prefix/General/GorevVer.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ModalBuilder, TextInputBuilder, TextInputStyle, StringSelectMenuBuilder, PermissionsBitField, Component} = require('discord.js'); 2 | const {Modal, TextInputComponent, showModal, SelectMenuComponent} = require("discord-modals") 3 | let {Guild} = require("../../../config/config") 4 | const Data = require(`../../../Schemas/Tasks`) 5 | const User = require(`../../../Schemas/Users`) 6 | module.exports = { 7 | config: { 8 | name: "görevver", 9 | description: "addtask", 10 | }, 11 | permissions: ['Administrator'], 12 | owner: false, 13 | run: async (client, message, args, prefix, config) => { 14 | 15 | let modal = new Modal() 16 | .setCustomId(`MyModal`) 17 | .setTitle('Görev Ver') 18 | .addComponents( 19 | new TextInputComponent() 20 | .setCustomId('roleidd') 21 | .setLabel('Görev Verilicek Rol') 22 | .setStyle('SHORT') 23 | .setPlaceholder('Lütfen Rol İdsi Giriniz') 24 | .setRequired(true), 25 | new TextInputComponent() 26 | .setCustomId('uprole') 27 | .setLabel('Görevi Bitince Atlıyacağı Rol') 28 | .setStyle('SHORT') 29 | .setPlaceholder('Lütfen Rol İdsi Giriniz') 30 | .setRequired(true), 31 | new TextInputComponent() 32 | .setCustomId('taskname') 33 | .setLabel('Verilicek Görev İsmi') 34 | .setStyle('SHORT') 35 | .setPlaceholder('Ses/Mesaj') 36 | .setRequired(true), 37 | new TextInputComponent() 38 | .setCustomId('sessure') 39 | .setLabel('Lütfen Ses Süresi Seçiniz') 40 | .setStyle('SHORT') 41 | .setPlaceholder('Örn: 1 Gün / 1 Saat / 1 Dakika [İstemiyorsan 0 yaz]') 42 | .setRequired(true), 43 | new TextInputComponent() 44 | .setCustomId('mesaj') 45 | .setLabel('Lütfen Mesaj Sayısı Seç') 46 | .setStyle('SHORT') 47 | .setPlaceholder('Örn: 500 [İstemiyorsan 0 yaz]') 48 | .setRequired(true), 49 | ); 50 | 51 | 52 | let buton = new ButtonBuilder() 53 | .setCustomId(`olustur`) 54 | .setLabel(`Görev Oluştur`) 55 | .setStyle(ButtonStyle.Primary) 56 | let buton2 = new ButtonBuilder() 57 | .setCustomId(`sure`) 58 | .setLabel(`Görevleri Berirle`) 59 | .setStyle(ButtonStyle.Primary) 60 | 61 | 62 | let row = new ActionRowBuilder().addComponents( 63 | buton 64 | ) 65 | let embed = new EmbedBuilder() 66 | .setTitle("Yetkili Paneline Hoşgeldin") 67 | .setDescription(`\`\`\`css\nAşşağıdaki Butona Tıklayarak Görev Oluşturabilirsin\`\`\``) 68 | .setThumbnail(message.guild.iconURL()) 69 | .setColor("2F3136") 70 | message.channel.send({embeds: [embed], components: [row]}) 71 | 72 | var filter = (component) => component.user.id === message.author.id; 73 | const collector = message.channel.createMessageComponentCollector({ filter, time: 30000 }) 74 | collector.on('collect', async (interaction) => { 75 | if (interaction.customId == "olustur") { 76 | showModal(modal, { 77 | client: client, // Client to show the Modal through the Discord API. 78 | interaction: interaction, // Show the modal with interaction data. 79 | }); 80 | 81 | } 82 | }) 83 | client.on('modalSubmit', async (modal) => { 84 | 85 | let name = modal.getTextInputValue('taskname') 86 | let roleid = modal.getTextInputValue('roleidd') 87 | let uprole = modal.getTextInputValue('uprole') 88 | 89 | let gorevsure = modal.getTextInputValue('sessure') 90 | let mesaj = modal.getTextInputValue('mesaj') 91 | let sureArr = gorevsure.split(' ') 92 | let miliseconds = 0; 93 | const rol = message.guild.roles.cache.get(roleid); 94 | const uyeler = rol.members.map(m => m.user.id); 95 | uyeler.forEach(async (userID) => { 96 | await User.findOneAndUpdate({ userID: userID }, { $set: { ActiveTask: "Aktif" } }, { upsert: true }); 97 | }); 98 | 99 | if(sureArr.includes('gün') || sureArr.includes('Gün')){ 100 | let index = sureArr.findIndex(x => x == 'gün' || x == 'Gün'); 101 | let value = sureArr[index - 1]; 102 | miliseconds = parseInt(value) * 24 * 60 * 60 * 1000; 103 | let newData = await Data.findOneAndUpdate({TaskRoleId:roleid }, {$set: {TaskMembers: uyeler, Task: name, TaskRoleId: roleid, TaskMessage: mesaj, TaskSure: miliseconds, ComplatedTaskRoleUpId: uprole }}, {upsert: true}).then(() => console.log("Görev eklendi!")).catch(err => console.log(err)); 104 | } 105 | 106 | let timeInMs = 0; 107 | if(sureArr.includes('saat') || sureArr.includes('Saat')){ 108 | let index = sureArr.findIndex(e => e === 'saat' || e === 'Saat') 109 | let hour = parseInt(sureArr[index-1]) 110 | timeInMs = hour * 3600 * 1000 111 | let newData = await Data.findOneAndUpdate({TaskRoleId:roleid }, {$set: {TaskMembers: uyeler, Task: name, TaskRoleId: roleid, TaskMessage: mesaj, TaskSure: timeInMs, ComplatedTaskRoleUpId: uprole }}, {upsert: true}).then(() => console.log("Görev eklendi!")).catch(err => console.log(err)); 112 | 113 | } 114 | 115 | let milisaniyeSure = 0; 116 | if(sureArr.includes('dakika') || sureArr.includes('Dakika')){ 117 | let index = sureArr.findIndex(e => e === 'dakika' || e === 'Dakika') 118 | let hour = parseInt(sureArr[index-1]) 119 | milisaniyeSure += hour * 60 * 1000; 120 | let newData = await Data.findOneAndUpdate({TaskRoleId:roleid }, {$set: {TaskMembers: uyeler, Task: name, TaskRoleId: roleid, TaskMessage: mesaj, TaskSure: milisaniyeSure, ComplatedTaskRoleUpId: uprole }}, {upsert: true}).then(() => console.log("Görev eklendi!")).catch(err => console.log(err)); 121 | 122 | } 123 | 124 | 125 | modal.reply({embeds: [new EmbedBuilder().setDescription(`**Başarılya Görev Verildi**`).setColor("2F3136").setThumbnail(message.guild.iconURL())]}) 126 | 127 | }) 128 | } 129 | } 130 | 131 | -------------------------------------------------------------------------------- /commands/prefix/General/Gorevlerim.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ModalBuilder, TextInputBuilder, TextInputStyle, StringSelectMenuBuilder, PermissionsBitField } = require('discord.js'); 2 | const Data = require(`../../../Schemas/Tasks`) 3 | const messageUserChannel = require("../../../Schemas/messageUserChannel"); 4 | const messageUser = require("../../../Schemas/messageUser"); 5 | const Taskmessage = require("../../../Schemas/TaskMessage"); 6 | const VoiceUser = require("../../../Schemas/voiceUser") 7 | const TaskVoicee = require("../../../Schemas/TaskVoice") 8 | module.exports = { 9 | config: { 10 | name: "görevlerim", 11 | description: "Görevlerini Gösterir", 12 | }, 13 | permissions: ['SendMessages'], 14 | owner: false, 15 | run: async (client, message, args, prefix, config) => { 16 | let user = message.author.id; 17 | let taskData = await Data.findOne({ TaskMembers: user }); 18 | let TaskMember = await Taskmessage.findOne({guildID: message.guild.id, userID: message.author.id}) 19 | let VoiceUserr = await VoiceUser.findOne({guildID: message.guild.id, userID: message.author.id}) 20 | let TaskVoice = await TaskVoicee.findOne({guildID: message.guild.id, userID: message.author.id}) 21 | let embed = new EmbedBuilder() 22 | .setDescription(`\`\`\`css\nAlt Tarafta Görevlerin Gözükmektedir. Lütfen Görevlerini Yap!\`\`\``) 23 | .setTitle("Selam Görev Menüsünüe hoşgeldin") 24 | .setThumbnail(message.guild.iconURL()) 25 | .setColor("2F3136") 26 | 27 | if (taskData && taskData.TaskSure > 0) { 28 | embed.addFields({ name: `Ses Görevi`, value: `\`${TaskVoice ? client.getTime(TaskVoice.topStat) : "`Veri bulunamadı!`"} / ${TaskVoice ? client.getTime(taskData.TaskSure): "`Veri Bulunamadı!`"} Sesli Süresi \`` }); 29 | } 30 | if(taskData && taskData.TaskMessage > 0){ 31 | embed.addFields({ name: `Mesaj Görevi`, value: `\`${TaskMember ? TaskMember.topStat : 0}/${taskData.TaskMessage} Mesaj\`` }); 32 | } 33 | else { 34 | embed.setDescription("Mevcut bir göreviniz yok."); 35 | } 36 | 37 | message.channel.send({ embeds: [embed] }); 38 | } 39 | } -------------------------------------------------------------------------------- /commands/prefix/General/Stat.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ModalBuilder, TextInputBuilder, TextInputStyle, StringSelectMenuBuilder, PermissionsBitField } = require('discord.js'); 2 | const moment = require('moment') 3 | require('moment-duration-format'); 4 | require('moment-timezone'); 5 | const messageUserChannel = require("../../../Schemas/messageUserChannel"); 6 | const messageUser = require("../../../Schemas/messageUser"); 7 | const VoiceUser = require("../../../Schemas/voiceUser") 8 | 9 | const voiceUserChannel = require("../../../Schemas/voiceGuildChannel") 10 | module.exports = { 11 | config: { 12 | name: "stat", 13 | description: "Stat Gösterir", 14 | }, 15 | permissions: ['SendMessages'], 16 | owner: false, 17 | run: async (client, message, args, prefix, config) => { 18 | let member = message.mentions.users.first() || message.guild.members.cache.get(args[0]) || message.member; 19 | 20 | const Active1 = await messageUserChannel.find({ guildID: message.guild.id, userID: member.id }).sort({ channelData: -1 }); 21 | 22 | const Active2 = await voiceUserChannel.find({ guildID: message.guild.id, userID: member.id }).sort({ channelData: -1 }); 23 | 24 | 25 | let sesVeri = Active2.length > 0 ? Active2.splice(0, 10).filter(x => message.guild.channels.cache.has(x.channelID)).map(x => `<#${x.channelID}>: \`${moment.duration(x.channelData).format("H [saat], m [dakika]")}\``).join("\n") : "Veri bulunmuyor."; 26 | let mesajVeri = Active1.length > 0 ? Active1.splice(0, 10).filter(x => message.guild.channels.cache.has(x.channelID)).map(x => `<#${x.channelID}>: \`${Number(x.channelData).toLocaleString()} mesaj\``).join("\n") : "Veri bulunmuyor"; 27 | const messageData = await messageUser.findOne({ guildID: message.guild.id, userID: member.id }); 28 | const voiceData = await VoiceUser.findOne({ guildID: message.guild.id, userID: member.id }); 29 | message.channel.send({embeds: [new EmbedBuilder() 30 | .setThumbnail(message.guild.iconURL({dynamic: true})) 31 | .setColor("2F3136") 32 | .setDescription(`**Merhaba ${member}, aşşağıda listelenmiş verileri inceleyip ses ve mesaj istatistiklerini öğrenebilirsin.** \n 33 | **Mesaj Kanallarının İstatistiği** \n ${mesajVeri} 34 | **Ses Kanallarının İstatistiği** \n ${sesVeri} 35 | `) 36 | 37 | .addFields( 38 | { name: `**Günlük Ses İstatistiği**`, value:`\`${moment.duration(voiceData ? voiceData.dailyStat : 0).format("H [saat], m [dakika]")}\``, inline: true }, 39 | { name: `**Haftalık Ses İstatistiği**`, value:`\`${moment.duration(voiceData ? voiceData.weeklyStat : 0).format("H [saat], m [dakika]")}\``, inline: true }, 40 | 41 | ) 42 | .setFooter({text: `Developed By Shut :)`}) 43 | 44 | 45 | ]} 46 | ); 47 | } 48 | } -------------------------------------------------------------------------------- /commands/prefix/General/Top.Gorev.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ModalBuilder, TextInputBuilder, TextInputStyle, StringSelectMenuBuilder, PermissionsBitField } = require('discord.js'); 2 | let Data = require("../../../Schemas/Users") 3 | module.exports = { 4 | config: { 5 | name: "topgörev", 6 | description: "Görev Sıralaması", 7 | }, 8 | permissions: ['SendMessages'], 9 | owner: false, 10 | run: async (client, message, args, prefix, config) => { 11 | const completedUsers = await Data.find({ ComplatedTasks: { $gt: 0 } }).sort({ ComplatedTasks: -1 }).limit(5); 12 | const messages = completedUsers.map((user, index) => `\`${index+1}.\` <@${user.userID}>: \`${user.ComplatedTasks}\` **Tamamlanmış görev**`).join('\n'); 13 | console.log(messages); 14 | let embed = new EmbedBuilder() 15 | .setDescription(`${messages}`) 16 | .setThumbnail(message.guild.iconURL()) 17 | .setColor("2F3136") 18 | .setTitle(`İşte Görevini Yapanlar!`) 19 | message.channel.send({embeds: [embed]}) 20 | } 21 | } -------------------------------------------------------------------------------- /commands/prefix/General/Top.Stat.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ModalBuilder, TextInputBuilder, TextInputStyle, StringSelectMenuBuilder, PermissionsBitField } = require('discord.js'); 2 | const voiceUser = require("../../../Schemas/voiceUser") 3 | 4 | const voiceGuild = require("../../../Schemas/voiceGuild") 5 | 6 | const messageUser = require("../../../Schemas/messageUser") 7 | 8 | const messageGuild = require("../../../Schemas/messageGuild") 9 | const moment = require('moment') 10 | require('moment-duration-format'); 11 | require('moment-timezone'); 12 | module.exports = { 13 | config: { 14 | name: "topstat", 15 | description: "Stat Sıralaması", 16 | }, 17 | permissions: ['SendMessages'], 18 | owner: false, 19 | run: async (client, message, args, prefix, config) => { 20 | let member = message.mentions.users.first() || message.guild.members.cache.get(args[0]) || message.member; 21 | const messageUsersData = await messageUser.find({ guildID: message.guild.id }).sort({ topStat: -1 }); 22 | const voiceUsersData = await voiceUser.find({ guildID: message.guild.id }).sort({ topStat: -1 }); 23 | const messageGuildData = await messageGuild.findOne({ guildID: message.guild.id }); 24 | const voiceGuildData = await voiceGuild.findOne({ guildID: message.guild.id }); 25 | const messageUsers = messageUsersData.splice(0, 15).map((x, index) => `\`${index == 0 ? `1.` : `${index+1}.`}\` <@${x.userID}>: \`${Number(x.topStat).toLocaleString()} mesaj\``).join(`\n`); 26 | const voiceUsers = voiceUsersData.splice(0, 15).map((x, index) => `\`${index == 0 ? `1.` : `${index+1}.`}\` <@${x.userID}>: \`${moment.duration(x.topStat).format("H [saat], m [dakika] s [saniye]")}\``).join(`\n`); 27 | const mesaj = `Toplam üye mesajları: \`${Number(messageGuildData ? messageGuildData.topStat : 0).toLocaleString()} mesaj\`\n\n${messageUsers.length > 0 ? messageUsers : "Veri Bulunmuyor."}`; 28 | const ses = `Toplam ses verileri: \`${moment.duration(voiceGuildData ? voiceGuildData.topStat : "Veri Bulunmuyor.").format("H [saat], m [dakika]")}\`\n\n${voiceUsers.length > 0 ? voiceUsers : "Veri Bulunmuyor."}` 29 | message.channel.send({ embeds: [new EmbedBuilder() 30 | .setThumbnail(message.guild.iconURL({ dynamic: true, size: 2048 })) 31 | .setColor("2F3136") 32 | .setDescription(`**Merhaba ${member}, aşşağıda listelenmiş verileri inceleyip ses ve mesaj istatistiklerini öğrenebilirsin.**\n 33 | **Ses Kanallarının İstatistikleri** \n ${ses} 34 | **Mesaj Kanallarının İstatistikleri** \n ${mesaj} 35 | `)] }) 36 | 37 | 38 | } 39 | } -------------------------------------------------------------------------------- /commands/prefix/Info/ping.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder } = require("discord.js"); 2 | 3 | module.exports = { 4 | config: { 5 | name: "ping", 6 | description: "Pong ile cevaplar!", 7 | }, 8 | permissions: ['SendMessages'], 9 | owner: false, 10 | run: async (client, message, args, prefix, config) => { 11 | 12 | message.reply({ embeds: [ 13 | new EmbedBuilder() 14 | .setDescription(`🏓 **Pong!** Client websocket ping: \`${client.ws.ping}\` ms.`) 15 | .setColor("Green") 16 | ] }) 17 | 18 | }, 19 | }; 20 | -------------------------------------------------------------------------------- /commands/slash/hata vermesindiye.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shutjs/v14-stat-bot/325d5626efc7791c5123c98488d44635cbb21f0c/commands/slash/hata vermesindiye.txt -------------------------------------------------------------------------------- /commands/user/General/avatar.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder } = require('discord.js'); 2 | 3 | module.exports = { 4 | name: "Avatar", 5 | type: 2, 6 | run: async (client, interaction, config) => { 7 | 8 | const user = interaction.guild.members.cache.get(interaction.targetId); 9 | 10 | 11 | return interaction.reply( 12 | { 13 | embeds: [ 14 | new EmbedBuilder() 15 | .setTitle(`${user.user.tag}`) 16 | .setImage(user.displayAvatarURL( 17 | { 18 | dynamic: true 19 | } 20 | )) 21 | ], 22 | ephemeral: true 23 | } 24 | ); 25 | 26 | }, 27 | }; 28 | -------------------------------------------------------------------------------- /commands/user/Info/user-info.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder, PermissionsBitField } = require('discord.js'); 2 | const moment = require('moment'); 3 | 4 | module.exports = { 5 | name: "Kullanıcı Bilgi", 6 | type: 2, 7 | run: async (client, interaction, config) => { 8 | 9 | const user = interaction.guild.members.cache.get(interaction.targetId); 10 | const joinedAgoCalculator = { 11 | fetch: { 12 | user(userInput, type) { 13 | if (!userInput) throw new ReferenceError('Kullanıcıya hesaplama yapmasını sağlamadınız.'); 14 | 15 | if (type === "discord") { 16 | 17 | const joinedDiscordTimestampInString = moment(userInput.user.createdAt).fromNow(); 18 | 19 | return joinedDiscordTimestampInString.toString(); 20 | } else if (type === "server") { 21 | 22 | const joinedServerTimestampInString = moment(userInput.joinedAt).fromNow(); 23 | 24 | return joinedServerTimestampInString.toString(); 25 | } else throw new ReferenceError('Geçersiz tür. Yalnızca "uyumsuzluk" veya "sunucu" kullanın.'); 26 | } 27 | } 28 | }; 29 | 30 | 31 | const bot = { 32 | true: "Evet", 33 | false: "Hayır" 34 | }; 35 | 36 | 37 | const acknowledgements = { 38 | fetch: { 39 | user(userInput) { 40 | let result; 41 | 42 | try { 43 | if (userInput.permissions.has(PermissionsBitField.ViewChannel)) result = "Sunucu Üyesi"; 44 | if (userInput.permissions.has(PermissionsBitField.KickMembers)) result = "Sunucu Moderatörü"; 45 | if (userInput.permissions.has(PermissionsBitField.ManageServer)) result = "Sunucu Yöneticisi"; 46 | if (userInput.permissions.has(PermissionsBitField.Administrator)) result = "Sunucu Yöneticisi"; 47 | if (userInput.id === interaction.guild.ownerId) result = "Sunucu Sahibi"; 48 | 49 | } catch (e) { 50 | result = "Sunucu Üyesi"; 51 | }; 52 | 53 | return result; 54 | } 55 | } 56 | }; 57 | 58 | 59 | return interaction.reply( 60 | { 61 | embeds: [ 62 | new EmbedBuilder() 63 | .setTitle(`${user.user.tag}'Bilgi:`) 64 | .setThumbnail(user.displayAvatarURL( 65 | { 66 | dynamic: true 67 | } 68 | )) 69 | .addFields( 70 | { 71 | name: "İsim", 72 | value: `${user.user.tag}`, 73 | inline: true 74 | }, 75 | { 76 | name: "İd", 77 | value: `\`${user.id}\``, 78 | inline: true 79 | }, 80 | { 81 | name: `Roller [${user.roles.cache.size - 1}]`, 82 | value: `${user.roles.cache.map((ROLE) => ROLE).join(' ').replace('@everyone', '') || "[Rol Yok]"}`, 83 | inline: true 84 | }, 85 | { 86 | name: "Sunucuya Katılma", 87 | value: `${new Date(user.joinedTimestamp).toLocaleString()}\n(${joinedAgoCalculator.fetch.user(user, "server")})`, 88 | inline: true 89 | }, 90 | { 91 | name: "Discorda Katılma", 92 | value: `${new Date(user.user.createdTimestamp).toLocaleString()}\n(${joinedAgoCalculator.fetch.user(user, "discord")})`, 93 | inline: true 94 | }, 95 | { 96 | name: "Bot mu?", 97 | value: `${bot[user.user.bot]}`, 98 | inline: true 99 | }, 100 | { 101 | name: "Kimlik", 102 | value: `${acknowledgements.fetch.user(user)}` 103 | } 104 | ) 105 | .setColor('Blue') 106 | ], 107 | ephemeral: true 108 | } 109 | ); 110 | 111 | }, 112 | }; 113 | -------------------------------------------------------------------------------- /config/config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | Guild:{ 3 | ID: "" 4 | }, 5 | Prefix: ".", 6 | 7 | Users: { 8 | OWNERS: ["669513018777796638"] 9 | }, 10 | 11 | Handlers: { 12 | MONGO: "" 13 | }, 14 | 15 | Client: { 16 | TOKEN: "", 17 | ID: "" 18 | }, 19 | 20 | } 21 | -------------------------------------------------------------------------------- /events/Client/ready.js: -------------------------------------------------------------------------------- 1 | const client = require("../../index"); 2 | const colors = require("colors"); 3 | const system = require("../../config/config") 4 | 5 | module.exports = { 6 | name: "ready.js" 7 | }; 8 | 9 | client.once('ready', async () => { 10 | setInterval(async () => { 11 | const voice = require("@discordjs/voice") 12 | 13 | /* if(channel){ 14 | voice.joinVoiceChannel({ 15 | channelId: channel.id, 16 | guildId: channel.guild.id, 17 | adapterCreator: channel.guild.voiceAdapterCreator, 18 | selfMute: true, 19 | }); 20 | } */ 21 | }, 1000 * 3) 22 | console.log("\n" + `[READY] ${client.user.tag} kalktı ve gitmeye hazır hadi uç`.brightGreen); 23 | }) -------------------------------------------------------------------------------- /events/Guild/guildMemberAdd.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, TextInputBuilder, TextInputStyle, StringSelectMenuBuilder, PermissionsBitField, ChannelType, SelectMenuBuilder, Component } = require('discord.js'); 2 | const client = require("../../index"); 3 | const config = require("../../config/config.js"); 4 | 5 | 6 | module.exports = { 7 | name: "guildMemberAdd" 8 | }; 9 | 10 | client.on('guildMemberAdd', async (member) => { 11 | 12 | 13 | }) -------------------------------------------------------------------------------- /events/Guild/interactionCreate.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder } = require("discord.js"); 2 | const client = require("../../index"); 3 | const config = require("../../config/config.js"); 4 | 5 | 6 | module.exports = { 7 | name: "interactionCreate" 8 | }; 9 | 10 | client.on('interactionCreate', async (interaction) => { 11 | 12 | if (interaction.isChatInputCommand()) { 13 | const command = client.slash_commands.get(interaction.commandName); 14 | 15 | if (!command) return; 16 | 17 | try { 18 | command.run(client, interaction, config); 19 | } catch (e) { 20 | console.error(e) 21 | }; 22 | }; 23 | 24 | if (interaction.isUserContextMenuCommand()) { 25 | const command = client.user_commands.get(interaction.commandName); 26 | 27 | if (!command) return; 28 | 29 | try { 30 | command.run(client, interaction, config); 31 | } catch (e) { 32 | console.error(e) 33 | }; 34 | }; 35 | 36 | if (interaction.isMessageContextMenuCommand()) { 37 | const command = client.message_commands.get(interaction.commandName); 38 | 39 | if (!command) return; 40 | 41 | try { 42 | command.run(client, interaction, config); 43 | } catch (e) { 44 | console.error(e) 45 | }; 46 | }; 47 | 48 | 49 | }); 50 | 51 | -------------------------------------------------------------------------------- /events/Guild/messageCreate.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder, PermissionsBitField, codeBlock } = require("discord.js"); 2 | const client = require("../../index"); 3 | const config = require("../../config/config"); 4 | 5 | 6 | module.exports = { 7 | name: "messageCreate" 8 | }; 9 | 10 | client.on('messageCreate', async (message) => { 11 | if (message.channel.type !== 0) return; 12 | if (message.author.bot) return; 13 | 14 | const prefix = (config.Prefix) 15 | 16 | 17 | if (!message.content.startsWith(prefix)) return; 18 | if (!message.guild) return; 19 | if (!message.member) message.member = await message.guild.fetchMember(message); 20 | 21 | const args = message.content.slice(prefix.length).trim().split(/ +/g); 22 | const cmd = args.shift().toLowerCase(); 23 | if (cmd.length == 0) return; 24 | 25 | let command = client.prefix_commands.get(cmd); 26 | 27 | if (!command) return; 28 | 29 | if (command) { 30 | if (command.permissions) { 31 | if (!message.member.permissions.has(PermissionsBitField.resolve(command.permissions || []))) return message.reply({ 32 | embeds: [ 33 | new EmbedBuilder() 34 | .setDescription(`Ne yazık ki, bu komutu kullanma yetkiniz yok.`) 35 | .setColor("Red") 36 | ] 37 | }) 38 | }; 39 | 40 | if (command.owner, command.owner == true) { 41 | if (config.Users?.OWNERS) { 42 | const allowedUsers = []; // New Array. 43 | 44 | config.Users.OWNERS.forEach(user => { 45 | const fetchedUser = message.guild.members.cache.get(user); 46 | if (!fetchedUser) return allowedUsers.push('*Unknown*'); 47 | allowedUsers.push(`${fetchedUser.user.tag}`); 48 | }) 49 | 50 | if (!config.Users.OWNERS.some(ID => message.member.id.includes(ID))) return message.reply({ 51 | embeds: [ 52 | new EmbedBuilder() 53 | .setDescription(`🚫 Üzgünüm ama sadece sahipler bu komutu kullanabilir! İzin verilen kullanıcılar:\n**${allowedUsers.join(", ")}**`) 54 | .setColor("Red") 55 | ] 56 | }) 57 | } 58 | }; 59 | 60 | try { 61 | command.run(client, message, args, prefix, config); 62 | } catch (error) { 63 | console.error(error); 64 | }; 65 | } 66 | }); 67 | -------------------------------------------------------------------------------- /events/Guild/messageStats.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder, PermissionsBitField, codeBlock } = require("discord.js"); 2 | const client = require("../../index"); 3 | const config = require("../../config/config"); 4 | let Data = require(`../../Schemas/Tasks`) 5 | const messageUser = require("../../Schemas/messageUser"); 6 | const messageGuild = require("../../Schemas/messageGuild"); 7 | const guildChannel = require("../../Schemas/messageGuildChannel"); 8 | const userChannel = require("../../Schemas/messageUserChannel"); 9 | const TaskMessage = require("../../Schemas/TaskMessage"); 10 | const User = require("../../Schemas/Users") 11 | module.exports = { 12 | name: "messageCreate" 13 | } 14 | 15 | client.on('messageCreate', async(message) => { 16 | if (message.author.bot) return; 17 | let userData = await Data.findOne({TaskMembers: message.author.id }) 18 | let user = await User.findOne({userID: message.author.id}) 19 | 20 | const messageData = await TaskMessage.findOne({ guildID: message.guild.id, userID: message.author.id }); 21 | if(user && user.ActiveTask == "Aktif"){ 22 | await TaskMessage.findOneAndUpdate({ guildID: message.guild.id, userID: message.author.id }, { $inc: { topStat: 1} }, { upsert: true }); 23 | } 24 | await messageUser.findOneAndUpdate({ guildID: message.guild.id, userID: message.author.id }, { $inc: { topStat: 1, dailyStat: 1, weeklyStat: 1, twoWeeklyStat: 1 } }, { upsert: true }); 25 | await messageGuild.findOneAndUpdate({ guildID: message.guild.id }, { $inc: { topStat: 1, dailyStat: 1, weeklyStat: 1, twoWeeklyStat: 1 } }, { upsert: true }); 26 | await guildChannel.findOneAndUpdate({ guildID: message.guild.id, channelID: message.channel.id }, { $inc: { channelData: 1 } }, { upsert: true }); 27 | await userChannel.findOneAndUpdate({ guildID: message.guild.id, userID: message.author.id, channelID: message.channel.id }, { $inc: { channelData: 1 } }, { upsert: true }); 28 | if(userData && userData.TaskMessage && messageData && messageData.topStat){ 29 | if(userData.TaskMessage == messageData.topStat){ 30 | await User.findOneAndUpdate({userID: message.author.id}, {$set:{ActiveTask: "Hayır", ComplatedTasks: 1}},{ upsert:true }) 31 | await message.member.roles.add(userData.ComplatedTaskRoleUpId) 32 | await message.member.roles.remove(userData.TaskRoleId) 33 | await Data.findOneAndUpdate({ TaskMembers: message.author.id }, { $pull: { TaskMembers: message.author.id } }); 34 | await TaskMessage.deleteOne({ guildID: message.guild.id, userID: message.author.id }) 35 | console.log("Görevi Silindi") 36 | } 37 | } 38 | else { 39 | 40 | } 41 | }) 42 | -------------------------------------------------------------------------------- /events/Guild/voiceStats.js: -------------------------------------------------------------------------------- 1 | 2 | const joinedAt = require("../../Schemas/voiceJoinedAt"); 3 | const voiceUser = require("../../Schemas/voiceUser"); 4 | const voiceGuild = require("../../Schemas/voiceGuild"); 5 | let Data = require(`../../Schemas/Tasks`) 6 | 7 | const guildChannel = require("../../Schemas/voiceGuildChannel"); 8 | const userChannel = require("../../Schemas/voiceUserChannel"); 9 | const userParent = require("../../Schemas/voiceUserParent"); 10 | const client = require("../../index"); 11 | const User = require("../../Schemas/Users") 12 | const TaskUserVoice = require("../../Schemas/TaskVoice") 13 | module.exports = { 14 | name: "voiceStateUpdate" 15 | } 16 | 17 | client.on('voiceStateUpdate', async(oldState, newState) =>{ 18 | 19 | if ((oldState.member && oldState.member.user.bot) || (newState.member && newState.member.user.bot)) return; 20 | let userData = await Data.findOne({TaskMembers: oldState.member.id }) 21 | const voiceData = await TaskUserVoice.findOne({ guildID: oldState.guild.id, userID: oldState.member.id }); 22 | 23 | if (!oldState.channelId && newState.channelId) await joinedAt.findOneAndUpdate({ userID: newState.id }, { $set: { date: Date.now() } }, { upsert: true }); 24 | let joinedAtData = await joinedAt.findOne({ userID: oldState.id }); 25 | if (!joinedAtData) await joinedAt.findOneAndUpdate({ userID: oldState.id }, { $set: { date: Date.now() } }, { upsert: true }); 26 | joinedAtData = await joinedAt.findOne({ userID: oldState.id }); 27 | const data = Date.now() - joinedAtData.date; 28 | 29 | if(userData && userData.TaskSure && voiceData && voiceData.topStat){ 30 | if(userData.TaskSure == voiceData.topStat || voiceData.topStat > userData.TaskSure){ 31 | await User.findOneAndUpdate({userID: oldState.member.id}, {$set:{ActiveTask: "Hayır", ComplatedTasks: 1}},{ upsert:true }) 32 | await oldState.member.roles.add(userData.ComplatedTaskRoleUpId) 33 | await oldState.member.roles.remove(userData.TaskRoleId) 34 | await Data.findOneAndUpdate({ TaskMembers: oldState.member.id }, { $pull: { TaskMembers: oldState.member.id } }); 35 | await voiceData.deleteOne({ guildID: oldState.guild.id, userID: oldState.member.id }) 36 | console.log("Görevi Silindi") 37 | } 38 | } 39 | 40 | 41 | if (oldState.channelId && !newState.channelId) { 42 | await saveData(oldState, oldState.channel, data); 43 | await joinedAt.deleteOne({ userID: oldState.id }); 44 | } else if (oldState.channelID && newState.channelID) { 45 | await saveData(oldState, oldState.channel, data); 46 | await joinedAt.findOneAndUpdate({ userID: oldState.id }, { $set: { date: Date.now() } }, { upsert: true }); 47 | } 48 | }) 49 | 50 | 51 | async function saveData(user, channel, data) { 52 | let users = await User.findOne({userID: user.id}) 53 | 54 | if(users && users.ActiveTask == "Aktif"){ 55 | 56 | await TaskUserVoice.findOneAndUpdate({ guildID: user.guild.id, userID: user.id }, { $inc: { topStat: data} }, { upsert: true }); 57 | } 58 | await voiceUser.findOneAndUpdate({ guildID: user.guild.id, userID: user.id }, { $inc: { topStat: data, dailyStat: data, weeklyStat: data, twoWeeklyStat: data } }, { upsert: true }); 59 | await voiceGuild.findOneAndUpdate({ guildID: user.guild.id }, { $inc: { topStat: data, dailyStat: data, weeklyStat: data, twoWeeklyStat: data } }, { upsert: true }); 60 | await guildChannel.findOneAndUpdate({ guildID: user.guild.id, channelID: channel.id }, { $inc: { channelData: data } }, { upsert: true }); 61 | await userChannel.findOneAndUpdate({ guildID: user.guild.id, userID: user.id, channelID: channel.id }, { $inc: { channelData: data } }, { upsert: true }); 62 | if (channel.parent) await userParent.findOneAndUpdate({ guildID: user.guild.id, userID: user.id, parentID: channel.parentID }, { $inc: { parentData: data } }, { upsert: true }); 63 | } 64 | 65 | 66 | -------------------------------------------------------------------------------- /handlers/application_commands.js: -------------------------------------------------------------------------------- 1 | const client = require("../index"); 2 | const { PermissionsBitField, Routes, REST, User } = require('discord.js'); 3 | const fs = require("fs"); 4 | 5 | module.exports = (client, config) => { 6 | console.log("Application commands Handler:".blue); 7 | 8 | let commands = []; 9 | 10 | 11 | fs.readdirSync('./commands/slash/').forEach((dir) => { 12 | console.log('[!] Started loading slash commands...'.yellow); 13 | const SlashCommands = fs.readdirSync(`./commands/slash/${dir}`).filter((file) => file.endsWith('.js')); 14 | 15 | for (let file of SlashCommands) { 16 | let pull = require(`../commands/slash/${dir}/${file}`); 17 | 18 | if (pull.name, pull.description, pull.type == 1) { 19 | client.slash_commands.set(pull.name, pull); 20 | console.log(`[HANDLER - SLASH] Dosya yüklenemedi: ${pull.name} (#${client.slash_commands.size})`.brightGreen); 21 | 22 | commands.push({ 23 | name: pull.name, 24 | description: pull.description, 25 | type: pull.type || 1, 26 | options: pull.options ? pull.options : null, 27 | default_permission: pull.permissions.DEFAULT_PERMISSIONS ? pull.permissions.DEFAULT_PERMISSIONS : null, 28 | default_member_permissions: pull.permissions.DEFAULT_MEMBER_PERMISSIONS ? PermissionsBitField.resolve(pull.permissions.DEFAULT_MEMBER_PERMISSIONS).toString() : null 29 | }); 30 | 31 | } else { 32 | console.log(`[HANDLER - SLASH] Dosya yüklenemedi ${file}, eksik modül adı değeri veya türü 2 değil.`.red) 33 | continue; 34 | }; 35 | }; 36 | }); 37 | 38 | 39 | fs.readdirSync('./commands/user/').forEach((dir) => { 40 | console.log('[!] Started loading user commands...'.yellow); 41 | const UserCommands = fs.readdirSync(`./commands/user/${dir}`).filter((file) => file.endsWith('.js')); 42 | 43 | for (let file of UserCommands) { 44 | let pull = require(`../commands/user/${dir}/${file}`); 45 | 46 | if (pull.name, pull.type == 2) { 47 | client.user_commands.set(pull.name, pull); 48 | console.log(`[HANDLER - USER] bir dosya yüklendi: ${pull.name} (#${client.user_commands.size})`.brightGreen); 49 | 50 | commands.push({ 51 | name: pull.name, 52 | type: pull.type || 2, 53 | }); 54 | 55 | } else { 56 | console.log(`[HANDLER - USER] dosya yüklenemedi ${file}, eksik modül adı değeri veya türü 2 değil`.red) 57 | continue; 58 | }; 59 | }; 60 | }); 61 | 62 | 63 | fs.readdirSync('./commands/message/').forEach((dir) => { 64 | console.log('[!] Started loading message commands...'.yellow); 65 | const UserCommands = fs.readdirSync(`./commands/message/${dir}`).filter((file) => file.endsWith('.js')); 66 | 67 | for (let file of UserCommands) { 68 | let pull = require(`../commands/message/${dir}/${file}`); 69 | 70 | if (pull.name, pull.type == 3) { 71 | client.message_commands.set(pull.name, pull); 72 | console.log(`[HANDLER - MESSAGE] bir dosya yüklendi: ${pull.name} (#${client.user_commands.size})`.brightGreen); 73 | 74 | commands.push({ 75 | name: pull.name, 76 | type: pull.type || 3, 77 | }); 78 | 79 | } else { 80 | console.log(`[HANDLER - MESSAGE] dosya yüklenemedi ${file}, eksik modül adı değeri veya türü 2 değil.`.red) 81 | continue; 82 | }; 83 | }; 84 | }); 85 | 86 | 87 | if (!config.Client.ID) { 88 | console.log("[CRASH] Bot kimliğinizi config.js'de sağlamanız gerekir!".red + "\n"); 89 | return process.exit(); 90 | }; 91 | 92 | const rest = new REST({ version: '10' }).setToken(config.Client.TOKEN); 93 | 94 | (async () => { 95 | console.log('[HANDLER] Tüm uygulama komutlarını kaydetmeye başladı.'.yellow); 96 | 97 | 98 | })(); 99 | }; 100 | -------------------------------------------------------------------------------- /handlers/events.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | 3 | 4 | module.exports = (client) => { 5 | console.log("Events Handler:".blue); 6 | 7 | fs.readdirSync('./events/').forEach(dir => { 8 | const commands = fs.readdirSync(`./events/${dir}`).filter(file => file.endsWith('.js')); 9 | for (let file of commands) { 10 | 11 | let pull = require(`../events/${dir}/${file}`); 12 | if (pull.name) { 13 | client.events.set(pull.name, pull); 14 | console.log(`[HANDLER - EVENTS] bir dosya yüklendi: ${pull.name}`.brightGreen) 15 | } else { 16 | console.log(`[HANDLER - EVENTS] dosya yüklenemedi ${file}. eksik ad veya takma adlar.`.red) 17 | continue; 18 | } 19 | 20 | } 21 | }); 22 | } -------------------------------------------------------------------------------- /handlers/modals.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | 3 | module.exports = (client, config) => { 4 | console.log("Modals Handler:".blue); 5 | 6 | const modals = fs.readdirSync(`./modals/`).filter(file => file.endsWith('.js')); 7 | 8 | for (let file of modals) { 9 | 10 | let pull = require(`../modals/${file}`); 11 | if (pull.id) { 12 | client.modals.set(pull.id, pull); 13 | console.log(`[HANDLER - MODALS] bir dosya yüklendi: ${file}`.brightGreen) 14 | } else { 15 | console.log(`[HANDLER - MODALS] dosya yüklenemedi ${file}. Modal kimlik eksik.`.red) 16 | continue; 17 | } 18 | } 19 | }; 20 | -------------------------------------------------------------------------------- /handlers/mongoose.js: -------------------------------------------------------------------------------- 1 | const config = require("../config/config.js"); 2 | const mongoose = require('mongoose'); 3 | const mongo = config.Handlers.MONGO; 4 | 5 | module.exports = (client) => { 6 | mongoose.set(`strictQuery`, true); 7 | mongoose.connect(mongo, { 8 | useNewUrlParser: true, 9 | useUnifiedTopology: true 10 | }).then(() => { 11 | setTimeout(() => { 12 | console.log(`[MongoDB]: Ağ ile bağlantı kuruldu.`) 13 | }, 3000); 14 | }).catch((err) => { 15 | console.log(`[MongoDB]: Bağlantı kurulamadı. Hata alındı!\n>> [HATA]: ${err}`) 16 | }); 17 | }; 18 | 19 | 20 | -------------------------------------------------------------------------------- /handlers/prefix.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const colors = require("colors"); 3 | 4 | module.exports = (client, config) => { 5 | console.log("Prefix Handler:".blue); 6 | 7 | fs.readdirSync('./commands/prefix/').forEach(dir => { 8 | const commands = fs.readdirSync(`./commands/prefix/${dir}`).filter(file => file.endsWith('.js')); 9 | for (let file of commands) { 10 | 11 | let pull = require(`../commands/prefix/${dir}/${file}`); 12 | if (pull.config.name) { 13 | client.prefix_commands.set(pull.config.name, pull); 14 | console.log(`[HANDLER - PREFIX] Bir Dosya Yüklendi: ${pull.config.name} (#${client.prefix_commands.size})`.brightGreen) 15 | } else { 16 | console.log(`[HANDLER - PREFIX] Dosya Yüklenemedi ${file}, Eksik Modül Adı Değeri.`.red) 17 | continue; 18 | }; 19 | 20 | }; 21 | }); 22 | }; 23 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { Client, Partials, Collection, GatewayIntentBits, IntentsBitField} = require('discord.js'); 2 | const Discord = require("discord.js") 3 | const config = require('./config/config'); 4 | let Data = require(`./Schemas/Tasks`) 5 | const { Guild } = require("./config/config") 6 | const { joinVoiceChannel } = require('@discordjs/voice'); 7 | const moment = require("moment") 8 | 9 | const client = new Client({ 10 | intents:[ 11 | Object.keys(IntentsBitField.Flags) 12 | ], 13 | partials:[ 14 | Object.keys(Partials) 15 | ], 16 | presence: { 17 | activities: [{ 18 | name: "Shut ❤️", 19 | type: 0 20 | }], 21 | status: 'idle' 22 | } 23 | }); 24 | 25 | const discordModals = require('discord-modals'); // Define the discord-modals package! 26 | discordModals(client); 27 | 28 | require('http').createServer((req, res) => res.end('Ready.')).listen(3000); 29 | 30 | 31 | const AuthenticationToken = config.Client.TOKEN; 32 | if (!AuthenticationToken) { 33 | console.warn("[HATA] Discord botu için Kimlik Doğrulama Jetonu gereklidir!".red) 34 | return process.exit(); 35 | }; 36 | 37 | 38 | 39 | client.prefix_commands = new Collection(); 40 | client.slash_commands = new Collection(); 41 | client.user_commands = new Collection(); 42 | client.message_commands = new Collection(); 43 | client.modals = new Collection(); 44 | client.events = new Collection(); 45 | 46 | module.exports = client; 47 | 48 | ["prefix", "application_commands", "modals", "events", "mongoose"].forEach((file) => { 49 | require(`./handlers/${file}`)(client, config); 50 | }); 51 | 52 | 53 | client.login(AuthenticationToken) 54 | .catch((err) => { 55 | console.error("[HATA] Botunuza bağlanırken bir sorun oluştu..."); 56 | console.error("[HATA] Discord API'sinden gelen hata:" + err); 57 | return process.exit(); 58 | }); 59 | 60 | 61 | process.on('unhandledRejection', async (err, promise) => { 62 | console.error(`[HATA] İşlenmemiş Reddetme: ${err}`.red); 63 | console.error(promise); 64 | }); 65 | 66 | 67 | 68 | Discord.Guild.prototype.kanalBul = function (chanelName) { 69 | let channel = this.channels.cache.find(k => k.name === chanelName) 70 | return channel; 71 | } 72 | Discord.Guild.prototype.emojiBul = function (content) { 73 | let emoji = this.emojis.cache.find(e => e.name === content) || this.emojis.cache.find(e => e.id === content) 74 | if (!emoji) return console.log(`${content} emojisi ${this.name} sunucusuna yüklenmediğinden kullanılamadı.`, "error"); 75 | return emoji; 76 | } 77 | Promise.prototype.sil = function (time) { 78 | if (this) this.then(message => { 79 | if (message.deletable) 80 | setTimeout(() => message.delete(), time * 1000) 81 | }); 82 | }; 83 | 84 | Array.prototype.random = function () { 85 | return this[Math.floor((Math.random() * this.length))]; 86 | }; 87 | 88 | 89 | client.getTime = (time) => { 90 | 91 | // if (!time) throw new ReferenceError("Time Is Not Defined"); 92 | if (isNaN(time) || time.toLocaleString().includes('-')) throw new TypeError("Invalid Argument : Time"); 93 | let date = moment.duration(time)._data; 94 | 95 | if (date.years) return `${date.years} yıl${date.months ? `, ${date.months} ay` : ``}${date.days ? `, ${date.days} gün` : ``}` 96 | if (date.months) return `${date.months} ay${date.days ? `, ${date.days} gün` : ``}${date.hours ? `, ${date.hours} saat` : ``}` 97 | if (date.days) return `${date.days} gün${date.hours ? `, ${date.hours} saat` : ``}${date.minutes ? `, ${date.minutes} dakika`: ``}`; 98 | if (date.hours) return `${date.hours} saat${date.minutes ? `, ${date.minutes} dakika` : ``}${date.seconds ? `, ${date.seconds} Saniye` : ``}`; 99 | if (date.minutes) return `${date.minutes} dakika${date.seconds ? `, ${date.seconds} Saniye` : ``}`; 100 | if (date.seconds) return `${date.seconds} Saniye`; 101 | 102 | // if (date.minutes) return date.minutes < 5 ? `Birkaç Dakika` : date.minutes > 45 ? `Yaklaşık 1 Saat` : `${date.minutes} Dakika`; 103 | // if (date.seconds) return date.seconds < 15 ? `Birkaç Saniye` : date.seconds > 45 ? `Yaklaşık 1 Dakika` : `${date.seconds} Saniye`; 104 | }; 105 | -------------------------------------------------------------------------------- /modals/myModal.js: -------------------------------------------------------------------------------- 1 | const { EmbedBuilder } = require("discord.js"); 2 | 3 | module.exports = { 4 | id: "myModal", 5 | run: async (client, interaction, config, db) => { 6 | 7 | return interaction.reply({ 8 | embeds: [ 9 | new EmbedBuilder() 10 | .setDescription('Modlar çalışıyor! İşte yazdıklarınız:' + interaction.fields.getTextInputValue('something')) 11 | ], 12 | ephemeral: true 13 | }); 14 | 15 | }, 16 | }; 17 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "shut", 3 | "version": "14.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "shut", 9 | "version": "14.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@discordjs/voice": "^0.14.0", 13 | "colors": "^1.4.0", 14 | "discord-api-types": "^0.36.2", 15 | "discord-modals": "^1.3.9", 16 | "discord.js": "^14.8.0", 17 | "mathjs": "^11.3.3", 18 | "moment": "^2.29.4", 19 | "moment-duration-format": "^2.3.2", 20 | "moment-timezone": "^0.5.43", 21 | "mongoose": "^7.0.0", 22 | "ms": "^2.1.3", 23 | "node-fetch": "^2.6.7", 24 | "pretty-ms": "^6.0.1", 25 | "super-djs": "^1.7.4" 26 | } 27 | }, 28 | "node_modules/@babel/runtime": { 29 | "version": "7.21.0", 30 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", 31 | "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", 32 | "dependencies": { 33 | "regenerator-runtime": "^0.13.11" 34 | }, 35 | "engines": { 36 | "node": ">=6.9.0" 37 | } 38 | }, 39 | "node_modules/@discordjs/builders": { 40 | "version": "1.6.1", 41 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.1.tgz", 42 | "integrity": "sha512-CCcLwn/8ANhlAbhlE18fcaN0hfXTen53/JiwZs1t9oE/Cqa9maA8ZRarkCIsXF4J7J/MYnd0J6IsxeKsq+f6mw==", 43 | "dependencies": { 44 | "@discordjs/formatters": "^0.3.0", 45 | "@discordjs/util": "^0.2.0", 46 | "@sapphire/shapeshift": "^3.8.1", 47 | "discord-api-types": "^0.37.37", 48 | "fast-deep-equal": "^3.1.3", 49 | "ts-mixer": "^6.0.3", 50 | "tslib": "^2.5.0" 51 | }, 52 | "engines": { 53 | "node": ">=16.9.0" 54 | } 55 | }, 56 | "node_modules/@discordjs/builders/node_modules/@discordjs/formatters": { 57 | "version": "0.3.0", 58 | "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.0.tgz", 59 | "integrity": "sha512-Fc4MomalbP8HMKEMor3qUiboAKDtR7PSBoPjwm7WYghVRwgJlj5WYvUsriLsxeKk8+Qq2oy+HJlGTUkGvX0YnA==", 60 | "dependencies": { 61 | "discord-api-types": "^0.37.37" 62 | }, 63 | "engines": { 64 | "node": ">=16.9.0" 65 | } 66 | }, 67 | "node_modules/@discordjs/builders/node_modules/discord-api-types": { 68 | "version": "0.37.37", 69 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.37.tgz", 70 | "integrity": "sha512-LDMBKzl/zbvHO/yCzno5hevuA6lFIXJwdKSJZQrB+1ToDpFfN9thK+xxgZNR4aVkI7GHRDja0p4Sl2oYVPnHYg==" 71 | }, 72 | "node_modules/@discordjs/collection": { 73 | "version": "1.5.0", 74 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.0.tgz", 75 | "integrity": "sha512-suyVndkEAAWrGxyw/CPGdtXoRRU6AUNkibtnbJevQzpelkJh3Q1gQqWDpqf5i39CnAn5+LrN0YS+cULeEjq2Yw==", 76 | "engines": { 77 | "node": ">=16.9.0" 78 | } 79 | }, 80 | "node_modules/@discordjs/formatters": { 81 | "version": "0.2.0", 82 | "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.2.0.tgz", 83 | "integrity": "sha512-vn4oMSXuMZUm8ITqVOtvE7/fMMISj4cI5oLsR09PEQXHKeKDAMLltG/DWeeIs7Idfy6V8Fk3rn1e69h7NfzuNA==", 84 | "dependencies": { 85 | "discord-api-types": "^0.37.35" 86 | }, 87 | "engines": { 88 | "node": ">=16.9.0" 89 | } 90 | }, 91 | "node_modules/@discordjs/formatters/node_modules/discord-api-types": { 92 | "version": "0.37.37", 93 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.37.tgz", 94 | "integrity": "sha512-LDMBKzl/zbvHO/yCzno5hevuA6lFIXJwdKSJZQrB+1ToDpFfN9thK+xxgZNR4aVkI7GHRDja0p4Sl2oYVPnHYg==" 95 | }, 96 | "node_modules/@discordjs/rest": { 97 | "version": "1.7.0", 98 | "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.0.tgz", 99 | "integrity": "sha512-r2HzmznRIo8IDGYBWqQfkEaGN1LrFfWQd3dSyC4tOpMU8nuVvFUEw6V/lwnG44jyOq+vgyDny2fxeUDMt9I4aQ==", 100 | "dependencies": { 101 | "@discordjs/collection": "^1.5.0", 102 | "@discordjs/util": "^0.2.0", 103 | "@sapphire/async-queue": "^1.5.0", 104 | "@sapphire/snowflake": "^3.4.0", 105 | "discord-api-types": "^0.37.37", 106 | "file-type": "^18.2.1", 107 | "tslib": "^2.5.0", 108 | "undici": "^5.21.0" 109 | }, 110 | "engines": { 111 | "node": ">=16.9.0" 112 | } 113 | }, 114 | "node_modules/@discordjs/rest/node_modules/discord-api-types": { 115 | "version": "0.37.37", 116 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.37.tgz", 117 | "integrity": "sha512-LDMBKzl/zbvHO/yCzno5hevuA6lFIXJwdKSJZQrB+1ToDpFfN9thK+xxgZNR4aVkI7GHRDja0p4Sl2oYVPnHYg==" 118 | }, 119 | "node_modules/@discordjs/util": { 120 | "version": "0.2.0", 121 | "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.2.0.tgz", 122 | "integrity": "sha512-/8qNbebFzLWKOOg+UV+RB8itp4SmU5jw0tBUD3ifElW6rYNOj1Ku5JaSW7lLl/WgjjxF01l/1uQPCzkwr110vg==", 123 | "engines": { 124 | "node": ">=16.9.0" 125 | } 126 | }, 127 | "node_modules/@discordjs/voice": { 128 | "version": "0.14.0", 129 | "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.14.0.tgz", 130 | "integrity": "sha512-/LV8LSFuJ1c4OEW1ubPg3al2QNpUpwX8ZL+KL+LORmnUFVCtehSaEh+38uDfWg1O/TgiGI5vOLj4ZKql43drcw==", 131 | "dependencies": { 132 | "@types/ws": "^8.5.3", 133 | "discord-api-types": "^0.37.20", 134 | "prism-media": "^1.3.4", 135 | "tslib": "^2.4.1", 136 | "ws": "^8.11.0" 137 | }, 138 | "engines": { 139 | "node": ">=16.9.0" 140 | } 141 | }, 142 | "node_modules/@discordjs/voice/node_modules/discord-api-types": { 143 | "version": "0.37.35", 144 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.35.tgz", 145 | "integrity": "sha512-iyKZ/82k7FX3lcmHiAvvWu5TmyfVo78RtghBV/YsehK6CID83k5SI03DKKopBcln+TiEIYw5MGgq7SJXSpNzMg==" 146 | }, 147 | "node_modules/@sapphire/async-queue": { 148 | "version": "1.5.0", 149 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", 150 | "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", 151 | "engines": { 152 | "node": ">=v14.0.0", 153 | "npm": ">=7.0.0" 154 | } 155 | }, 156 | "node_modules/@sapphire/shapeshift": { 157 | "version": "3.8.2", 158 | "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.2.tgz", 159 | "integrity": "sha512-NXpnJAsxN3/h9TqQPntOeVWZrpIuucqXI3IWF6tj2fWCoRLCuVK5wx7Dtg7pRrtkYfsMUbDqgKoX26vrC5iYfA==", 160 | "dependencies": { 161 | "fast-deep-equal": "^3.1.3", 162 | "lodash": "^4.17.21" 163 | }, 164 | "engines": { 165 | "node": ">=v14.0.0", 166 | "npm": ">=7.0.0" 167 | } 168 | }, 169 | "node_modules/@sapphire/snowflake": { 170 | "version": "3.4.0", 171 | "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", 172 | "integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==", 173 | "engines": { 174 | "node": ">=v14.0.0", 175 | "npm": ">=7.0.0" 176 | } 177 | }, 178 | "node_modules/@tokenizer/token": { 179 | "version": "0.3.0", 180 | "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", 181 | "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" 182 | }, 183 | "node_modules/@types/node": { 184 | "version": "18.14.6", 185 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", 186 | "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==" 187 | }, 188 | "node_modules/@types/webidl-conversions": { 189 | "version": "7.0.0", 190 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 191 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" 192 | }, 193 | "node_modules/@types/whatwg-url": { 194 | "version": "8.2.2", 195 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 196 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 197 | "dependencies": { 198 | "@types/node": "*", 199 | "@types/webidl-conversions": "*" 200 | } 201 | }, 202 | "node_modules/@types/ws": { 203 | "version": "8.5.4", 204 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", 205 | "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", 206 | "dependencies": { 207 | "@types/node": "*" 208 | } 209 | }, 210 | "node_modules/bson": { 211 | "version": "5.0.1", 212 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.0.1.tgz", 213 | "integrity": "sha512-y09gBGusgHtinMon/GVbv1J6FrXhnr/+6hqLlSmEFzkz6PodqF6TxjyvfvY3AfO+oG1mgUtbC86xSbOlwvM62Q==", 214 | "engines": { 215 | "node": ">=14.20.1" 216 | } 217 | }, 218 | "node_modules/busboy": { 219 | "version": "1.6.0", 220 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 221 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 222 | "dependencies": { 223 | "streamsearch": "^1.1.0" 224 | }, 225 | "engines": { 226 | "node": ">=10.16.0" 227 | } 228 | }, 229 | "node_modules/colors": { 230 | "version": "1.4.0", 231 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 232 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", 233 | "engines": { 234 | "node": ">=0.1.90" 235 | } 236 | }, 237 | "node_modules/complex.js": { 238 | "version": "2.1.1", 239 | "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", 240 | "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==", 241 | "engines": { 242 | "node": "*" 243 | }, 244 | "funding": { 245 | "type": "patreon", 246 | "url": "https://www.patreon.com/infusion" 247 | } 248 | }, 249 | "node_modules/debug": { 250 | "version": "4.3.4", 251 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 252 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 253 | "dependencies": { 254 | "ms": "2.1.2" 255 | }, 256 | "engines": { 257 | "node": ">=6.0" 258 | }, 259 | "peerDependenciesMeta": { 260 | "supports-color": { 261 | "optional": true 262 | } 263 | } 264 | }, 265 | "node_modules/debug/node_modules/ms": { 266 | "version": "2.1.2", 267 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 268 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 269 | }, 270 | "node_modules/decimal.js": { 271 | "version": "10.4.3", 272 | "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", 273 | "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" 274 | }, 275 | "node_modules/discord-api-types": { 276 | "version": "0.36.3", 277 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.36.3.tgz", 278 | "integrity": "sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg==" 279 | }, 280 | "node_modules/discord-modals": { 281 | "version": "1.3.9", 282 | "resolved": "https://registry.npmjs.org/discord-modals/-/discord-modals-1.3.9.tgz", 283 | "integrity": "sha512-Wa7iACmA9uMI7tmEDjYI/sqmBwnYqClowEeF/3FrJUva7r1vwTLDelRoSeBPeauh0GZ3zzBJ2nl9w1Gd+uJBtw==", 284 | "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", 285 | "peerDependencies": { 286 | "discord.js": "*" 287 | } 288 | }, 289 | "node_modules/discord.js": { 290 | "version": "14.8.0", 291 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.8.0.tgz", 292 | "integrity": "sha512-UOxYtc/YnV7jAJ2gISluJyYeBw4e+j8gWn+IoqG8unaHAVuvZ13DdYN0M1f9fbUgUvSarV798inIrYFtDNDjwQ==", 293 | "dependencies": { 294 | "@discordjs/builders": "^1.5.0", 295 | "@discordjs/collection": "^1.4.0", 296 | "@discordjs/formatters": "^0.2.0", 297 | "@discordjs/rest": "^1.6.0", 298 | "@discordjs/util": "^0.2.0", 299 | "@sapphire/snowflake": "^3.4.0", 300 | "@types/ws": "^8.5.4", 301 | "discord-api-types": "^0.37.35", 302 | "fast-deep-equal": "^3.1.3", 303 | "lodash.snakecase": "^4.1.1", 304 | "tslib": "^2.5.0", 305 | "undici": "^5.20.0", 306 | "ws": "^8.12.1" 307 | }, 308 | "engines": { 309 | "node": ">=16.9.0" 310 | } 311 | }, 312 | "node_modules/discord.js/node_modules/discord-api-types": { 313 | "version": "0.37.35", 314 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.35.tgz", 315 | "integrity": "sha512-iyKZ/82k7FX3lcmHiAvvWu5TmyfVo78RtghBV/YsehK6CID83k5SI03DKKopBcln+TiEIYw5MGgq7SJXSpNzMg==" 316 | }, 317 | "node_modules/escape-latex": { 318 | "version": "1.2.0", 319 | "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", 320 | "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" 321 | }, 322 | "node_modules/fast-deep-equal": { 323 | "version": "3.1.3", 324 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 325 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 326 | }, 327 | "node_modules/file-type": { 328 | "version": "18.2.1", 329 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.2.1.tgz", 330 | "integrity": "sha512-Yw5MtnMv7vgD2/6Bjmmuegc8bQEVA9GmAyaR18bMYWKqsWDG9wgYZ1j4I6gNMF5Y5JBDcUcjRQqNQx7Y8uotcg==", 331 | "dependencies": { 332 | "readable-web-to-node-stream": "^3.0.2", 333 | "strtok3": "^7.0.0", 334 | "token-types": "^5.0.1" 335 | }, 336 | "engines": { 337 | "node": ">=14.16" 338 | }, 339 | "funding": { 340 | "url": "https://github.com/sindresorhus/file-type?sponsor=1" 341 | } 342 | }, 343 | "node_modules/fraction.js": { 344 | "version": "4.2.0", 345 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", 346 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", 347 | "engines": { 348 | "node": "*" 349 | }, 350 | "funding": { 351 | "type": "patreon", 352 | "url": "https://www.patreon.com/infusion" 353 | } 354 | }, 355 | "node_modules/ieee754": { 356 | "version": "1.2.1", 357 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 358 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 359 | "funding": [ 360 | { 361 | "type": "github", 362 | "url": "https://github.com/sponsors/feross" 363 | }, 364 | { 365 | "type": "patreon", 366 | "url": "https://www.patreon.com/feross" 367 | }, 368 | { 369 | "type": "consulting", 370 | "url": "https://feross.org/support" 371 | } 372 | ] 373 | }, 374 | "node_modules/inherits": { 375 | "version": "2.0.4", 376 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 377 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 378 | }, 379 | "node_modules/ip": { 380 | "version": "2.0.0", 381 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 382 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 383 | }, 384 | "node_modules/javascript-natural-sort": { 385 | "version": "0.7.1", 386 | "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", 387 | "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" 388 | }, 389 | "node_modules/kareem": { 390 | "version": "2.5.1", 391 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", 392 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", 393 | "engines": { 394 | "node": ">=12.0.0" 395 | } 396 | }, 397 | "node_modules/lodash": { 398 | "version": "4.17.21", 399 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 400 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 401 | }, 402 | "node_modules/lodash.snakecase": { 403 | "version": "4.1.1", 404 | "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", 405 | "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" 406 | }, 407 | "node_modules/mathjs": { 408 | "version": "11.6.0", 409 | "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.6.0.tgz", 410 | "integrity": "sha512-6AAhoVvmCJSozTW+pc3XAwe9pLlAO5fYHnrHv4XWb0NQxjdz0DRnT3qneOPkKH6raTnlvHuX3XGLv8BmgXfiEg==", 411 | "dependencies": { 412 | "@babel/runtime": "^7.21.0", 413 | "complex.js": "^2.1.1", 414 | "decimal.js": "^10.4.3", 415 | "escape-latex": "^1.2.0", 416 | "fraction.js": "^4.2.0", 417 | "javascript-natural-sort": "^0.7.1", 418 | "seedrandom": "^3.0.5", 419 | "tiny-emitter": "^2.1.0", 420 | "typed-function": "^4.1.0" 421 | }, 422 | "bin": { 423 | "mathjs": "bin/cli.js" 424 | }, 425 | "engines": { 426 | "node": ">= 14" 427 | } 428 | }, 429 | "node_modules/memory-pager": { 430 | "version": "1.5.0", 431 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 432 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 433 | "optional": true 434 | }, 435 | "node_modules/moment": { 436 | "version": "2.29.4", 437 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 438 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 439 | "engines": { 440 | "node": "*" 441 | } 442 | }, 443 | "node_modules/moment-duration-format": { 444 | "version": "2.3.2", 445 | "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.3.2.tgz", 446 | "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" 447 | }, 448 | "node_modules/moment-timezone": { 449 | "version": "0.5.43", 450 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", 451 | "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", 452 | "dependencies": { 453 | "moment": "^2.29.4" 454 | }, 455 | "engines": { 456 | "node": "*" 457 | } 458 | }, 459 | "node_modules/mongodb": { 460 | "version": "5.1.0", 461 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz", 462 | "integrity": "sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==", 463 | "dependencies": { 464 | "bson": "^5.0.1", 465 | "mongodb-connection-string-url": "^2.6.0", 466 | "socks": "^2.7.1" 467 | }, 468 | "engines": { 469 | "node": ">=14.20.1" 470 | }, 471 | "optionalDependencies": { 472 | "saslprep": "^1.0.3" 473 | }, 474 | "peerDependencies": { 475 | "@aws-sdk/credential-providers": "^3.201.0", 476 | "mongodb-client-encryption": "^2.3.0", 477 | "snappy": "^7.2.2" 478 | }, 479 | "peerDependenciesMeta": { 480 | "@aws-sdk/credential-providers": { 481 | "optional": true 482 | }, 483 | "mongodb-client-encryption": { 484 | "optional": true 485 | }, 486 | "snappy": { 487 | "optional": true 488 | } 489 | } 490 | }, 491 | "node_modules/mongodb-connection-string-url": { 492 | "version": "2.6.0", 493 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", 494 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", 495 | "dependencies": { 496 | "@types/whatwg-url": "^8.2.1", 497 | "whatwg-url": "^11.0.0" 498 | } 499 | }, 500 | "node_modules/mongoose": { 501 | "version": "7.0.0", 502 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.0.0.tgz", 503 | "integrity": "sha512-U0YPURDld+k/nvvSG1mRClQSjZMRXwQKSU5yb9PslRnOmVz0UlBD7SjSnjUuGT0yk+7BH+kJNimsKqMxYAKkMA==", 504 | "dependencies": { 505 | "bson": "^5.0.1", 506 | "kareem": "2.5.1", 507 | "mongodb": "5.1.0", 508 | "mpath": "0.9.0", 509 | "mquery": "5.0.0", 510 | "ms": "2.1.3", 511 | "sift": "16.0.1" 512 | }, 513 | "engines": { 514 | "node": ">=14.0.0" 515 | }, 516 | "funding": { 517 | "type": "opencollective", 518 | "url": "https://opencollective.com/mongoose" 519 | } 520 | }, 521 | "node_modules/mpath": { 522 | "version": "0.9.0", 523 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 524 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", 525 | "engines": { 526 | "node": ">=4.0.0" 527 | } 528 | }, 529 | "node_modules/mquery": { 530 | "version": "5.0.0", 531 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 532 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 533 | "dependencies": { 534 | "debug": "4.x" 535 | }, 536 | "engines": { 537 | "node": ">=14.0.0" 538 | } 539 | }, 540 | "node_modules/ms": { 541 | "version": "2.1.3", 542 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 543 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 544 | }, 545 | "node_modules/node-fetch": { 546 | "version": "2.6.9", 547 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", 548 | "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", 549 | "dependencies": { 550 | "whatwg-url": "^5.0.0" 551 | }, 552 | "engines": { 553 | "node": "4.x || >=6.0.0" 554 | }, 555 | "peerDependencies": { 556 | "encoding": "^0.1.0" 557 | }, 558 | "peerDependenciesMeta": { 559 | "encoding": { 560 | "optional": true 561 | } 562 | } 563 | }, 564 | "node_modules/node-fetch/node_modules/tr46": { 565 | "version": "0.0.3", 566 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 567 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 568 | }, 569 | "node_modules/node-fetch/node_modules/webidl-conversions": { 570 | "version": "3.0.1", 571 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 572 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 573 | }, 574 | "node_modules/node-fetch/node_modules/whatwg-url": { 575 | "version": "5.0.0", 576 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 577 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 578 | "dependencies": { 579 | "tr46": "~0.0.3", 580 | "webidl-conversions": "^3.0.0" 581 | } 582 | }, 583 | "node_modules/parse-ms": { 584 | "version": "2.1.0", 585 | "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", 586 | "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", 587 | "engines": { 588 | "node": ">=6" 589 | } 590 | }, 591 | "node_modules/peek-readable": { 592 | "version": "5.0.0", 593 | "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", 594 | "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", 595 | "engines": { 596 | "node": ">=14.16" 597 | }, 598 | "funding": { 599 | "type": "github", 600 | "url": "https://github.com/sponsors/Borewit" 601 | } 602 | }, 603 | "node_modules/pretty-ms": { 604 | "version": "6.0.1", 605 | "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-6.0.1.tgz", 606 | "integrity": "sha512-ke4njoVmlotekHlHyCZ3wI/c5AMT8peuHs8rKJqekj/oR5G8lND2dVpicFlUz5cbZgE290vvkMuDwfj/OcW1kw==", 607 | "dependencies": { 608 | "parse-ms": "^2.1.0" 609 | }, 610 | "engines": { 611 | "node": ">=10" 612 | }, 613 | "funding": { 614 | "url": "https://github.com/sponsors/sindresorhus" 615 | } 616 | }, 617 | "node_modules/prism-media": { 618 | "version": "1.3.5", 619 | "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.5.tgz", 620 | "integrity": "sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA==", 621 | "peerDependencies": { 622 | "@discordjs/opus": ">=0.8.0 <1.0.0", 623 | "ffmpeg-static": "^5.0.2 || ^4.2.7 || ^3.0.0 || ^2.4.0", 624 | "node-opus": "^0.3.3", 625 | "opusscript": "^0.0.8" 626 | }, 627 | "peerDependenciesMeta": { 628 | "@discordjs/opus": { 629 | "optional": true 630 | }, 631 | "ffmpeg-static": { 632 | "optional": true 633 | }, 634 | "node-opus": { 635 | "optional": true 636 | }, 637 | "opusscript": { 638 | "optional": true 639 | } 640 | } 641 | }, 642 | "node_modules/punycode": { 643 | "version": "2.3.0", 644 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 645 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 646 | "engines": { 647 | "node": ">=6" 648 | } 649 | }, 650 | "node_modules/readable-stream": { 651 | "version": "3.6.2", 652 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 653 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 654 | "dependencies": { 655 | "inherits": "^2.0.3", 656 | "string_decoder": "^1.1.1", 657 | "util-deprecate": "^1.0.1" 658 | }, 659 | "engines": { 660 | "node": ">= 6" 661 | } 662 | }, 663 | "node_modules/readable-web-to-node-stream": { 664 | "version": "3.0.2", 665 | "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", 666 | "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", 667 | "dependencies": { 668 | "readable-stream": "^3.6.0" 669 | }, 670 | "engines": { 671 | "node": ">=8" 672 | }, 673 | "funding": { 674 | "type": "github", 675 | "url": "https://github.com/sponsors/Borewit" 676 | } 677 | }, 678 | "node_modules/regenerator-runtime": { 679 | "version": "0.13.11", 680 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", 681 | "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" 682 | }, 683 | "node_modules/safe-buffer": { 684 | "version": "5.2.1", 685 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 686 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 687 | "funding": [ 688 | { 689 | "type": "github", 690 | "url": "https://github.com/sponsors/feross" 691 | }, 692 | { 693 | "type": "patreon", 694 | "url": "https://www.patreon.com/feross" 695 | }, 696 | { 697 | "type": "consulting", 698 | "url": "https://feross.org/support" 699 | } 700 | ] 701 | }, 702 | "node_modules/saslprep": { 703 | "version": "1.0.3", 704 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 705 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 706 | "optional": true, 707 | "dependencies": { 708 | "sparse-bitfield": "^3.0.3" 709 | }, 710 | "engines": { 711 | "node": ">=6" 712 | } 713 | }, 714 | "node_modules/seedrandom": { 715 | "version": "3.0.5", 716 | "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", 717 | "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" 718 | }, 719 | "node_modules/sift": { 720 | "version": "16.0.1", 721 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", 722 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" 723 | }, 724 | "node_modules/smart-buffer": { 725 | "version": "4.2.0", 726 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 727 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 728 | "engines": { 729 | "node": ">= 6.0.0", 730 | "npm": ">= 3.0.0" 731 | } 732 | }, 733 | "node_modules/socks": { 734 | "version": "2.7.1", 735 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 736 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 737 | "dependencies": { 738 | "ip": "^2.0.0", 739 | "smart-buffer": "^4.2.0" 740 | }, 741 | "engines": { 742 | "node": ">= 10.13.0", 743 | "npm": ">= 3.0.0" 744 | } 745 | }, 746 | "node_modules/sparse-bitfield": { 747 | "version": "3.0.3", 748 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 749 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 750 | "optional": true, 751 | "dependencies": { 752 | "memory-pager": "^1.0.2" 753 | } 754 | }, 755 | "node_modules/streamsearch": { 756 | "version": "1.1.0", 757 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 758 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 759 | "engines": { 760 | "node": ">=10.0.0" 761 | } 762 | }, 763 | "node_modules/string_decoder": { 764 | "version": "1.3.0", 765 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 766 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 767 | "dependencies": { 768 | "safe-buffer": "~5.2.0" 769 | } 770 | }, 771 | "node_modules/strtok3": { 772 | "version": "7.0.0", 773 | "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", 774 | "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", 775 | "dependencies": { 776 | "@tokenizer/token": "^0.3.0", 777 | "peek-readable": "^5.0.0" 778 | }, 779 | "engines": { 780 | "node": ">=14.16" 781 | }, 782 | "funding": { 783 | "type": "github", 784 | "url": "https://github.com/sponsors/Borewit" 785 | } 786 | }, 787 | "node_modules/super-djs": { 788 | "version": "1.7.4", 789 | "resolved": "https://registry.npmjs.org/super-djs/-/super-djs-1.7.4.tgz", 790 | "integrity": "sha512-bpm7F073D8KsSC4TT8KvpbJtg3zG2gllHyJh2gJuAqL8bbeAedJTL5KbA1efLzMxR9UjY8ZtZ8laYsTNOyzm/g==", 791 | "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", 792 | "dependencies": { 793 | "ms": "^2.1.3" 794 | } 795 | }, 796 | "node_modules/tiny-emitter": { 797 | "version": "2.1.0", 798 | "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", 799 | "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" 800 | }, 801 | "node_modules/token-types": { 802 | "version": "5.0.1", 803 | "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", 804 | "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", 805 | "dependencies": { 806 | "@tokenizer/token": "^0.3.0", 807 | "ieee754": "^1.2.1" 808 | }, 809 | "engines": { 810 | "node": ">=14.16" 811 | }, 812 | "funding": { 813 | "type": "github", 814 | "url": "https://github.com/sponsors/Borewit" 815 | } 816 | }, 817 | "node_modules/tr46": { 818 | "version": "3.0.0", 819 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 820 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 821 | "dependencies": { 822 | "punycode": "^2.1.1" 823 | }, 824 | "engines": { 825 | "node": ">=12" 826 | } 827 | }, 828 | "node_modules/ts-mixer": { 829 | "version": "6.0.3", 830 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", 831 | "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==" 832 | }, 833 | "node_modules/tslib": { 834 | "version": "2.5.0", 835 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", 836 | "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" 837 | }, 838 | "node_modules/typed-function": { 839 | "version": "4.1.0", 840 | "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", 841 | "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", 842 | "engines": { 843 | "node": ">= 14" 844 | } 845 | }, 846 | "node_modules/undici": { 847 | "version": "5.21.0", 848 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", 849 | "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", 850 | "dependencies": { 851 | "busboy": "^1.6.0" 852 | }, 853 | "engines": { 854 | "node": ">=12.18" 855 | } 856 | }, 857 | "node_modules/util-deprecate": { 858 | "version": "1.0.2", 859 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 860 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 861 | }, 862 | "node_modules/webidl-conversions": { 863 | "version": "7.0.0", 864 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 865 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 866 | "engines": { 867 | "node": ">=12" 868 | } 869 | }, 870 | "node_modules/whatwg-url": { 871 | "version": "11.0.0", 872 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 873 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 874 | "dependencies": { 875 | "tr46": "^3.0.0", 876 | "webidl-conversions": "^7.0.0" 877 | }, 878 | "engines": { 879 | "node": ">=12" 880 | } 881 | }, 882 | "node_modules/ws": { 883 | "version": "8.12.1", 884 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", 885 | "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", 886 | "engines": { 887 | "node": ">=10.0.0" 888 | }, 889 | "peerDependencies": { 890 | "bufferutil": "^4.0.1", 891 | "utf-8-validate": ">=5.0.2" 892 | }, 893 | "peerDependenciesMeta": { 894 | "bufferutil": { 895 | "optional": true 896 | }, 897 | "utf-8-validate": { 898 | "optional": true 899 | } 900 | } 901 | } 902 | }, 903 | "dependencies": { 904 | "@babel/runtime": { 905 | "version": "7.21.0", 906 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", 907 | "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", 908 | "requires": { 909 | "regenerator-runtime": "^0.13.11" 910 | } 911 | }, 912 | "@discordjs/builders": { 913 | "version": "1.6.1", 914 | "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.1.tgz", 915 | "integrity": "sha512-CCcLwn/8ANhlAbhlE18fcaN0hfXTen53/JiwZs1t9oE/Cqa9maA8ZRarkCIsXF4J7J/MYnd0J6IsxeKsq+f6mw==", 916 | "requires": { 917 | "@discordjs/formatters": "^0.3.0", 918 | "@discordjs/util": "^0.2.0", 919 | "@sapphire/shapeshift": "^3.8.1", 920 | "discord-api-types": "^0.37.37", 921 | "fast-deep-equal": "^3.1.3", 922 | "ts-mixer": "^6.0.3", 923 | "tslib": "^2.5.0" 924 | }, 925 | "dependencies": { 926 | "@discordjs/formatters": { 927 | "version": "0.3.0", 928 | "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.0.tgz", 929 | "integrity": "sha512-Fc4MomalbP8HMKEMor3qUiboAKDtR7PSBoPjwm7WYghVRwgJlj5WYvUsriLsxeKk8+Qq2oy+HJlGTUkGvX0YnA==", 930 | "requires": { 931 | "discord-api-types": "^0.37.37" 932 | } 933 | }, 934 | "discord-api-types": { 935 | "version": "0.37.37", 936 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.37.tgz", 937 | "integrity": "sha512-LDMBKzl/zbvHO/yCzno5hevuA6lFIXJwdKSJZQrB+1ToDpFfN9thK+xxgZNR4aVkI7GHRDja0p4Sl2oYVPnHYg==" 938 | } 939 | } 940 | }, 941 | "@discordjs/collection": { 942 | "version": "1.5.0", 943 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.0.tgz", 944 | "integrity": "sha512-suyVndkEAAWrGxyw/CPGdtXoRRU6AUNkibtnbJevQzpelkJh3Q1gQqWDpqf5i39CnAn5+LrN0YS+cULeEjq2Yw==" 945 | }, 946 | "@discordjs/formatters": { 947 | "version": "0.2.0", 948 | "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.2.0.tgz", 949 | "integrity": "sha512-vn4oMSXuMZUm8ITqVOtvE7/fMMISj4cI5oLsR09PEQXHKeKDAMLltG/DWeeIs7Idfy6V8Fk3rn1e69h7NfzuNA==", 950 | "requires": { 951 | "discord-api-types": "^0.37.35" 952 | }, 953 | "dependencies": { 954 | "discord-api-types": { 955 | "version": "0.37.37", 956 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.37.tgz", 957 | "integrity": "sha512-LDMBKzl/zbvHO/yCzno5hevuA6lFIXJwdKSJZQrB+1ToDpFfN9thK+xxgZNR4aVkI7GHRDja0p4Sl2oYVPnHYg==" 958 | } 959 | } 960 | }, 961 | "@discordjs/rest": { 962 | "version": "1.7.0", 963 | "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.0.tgz", 964 | "integrity": "sha512-r2HzmznRIo8IDGYBWqQfkEaGN1LrFfWQd3dSyC4tOpMU8nuVvFUEw6V/lwnG44jyOq+vgyDny2fxeUDMt9I4aQ==", 965 | "requires": { 966 | "@discordjs/collection": "^1.5.0", 967 | "@discordjs/util": "^0.2.0", 968 | "@sapphire/async-queue": "^1.5.0", 969 | "@sapphire/snowflake": "^3.4.0", 970 | "discord-api-types": "^0.37.37", 971 | "file-type": "^18.2.1", 972 | "tslib": "^2.5.0", 973 | "undici": "^5.21.0" 974 | }, 975 | "dependencies": { 976 | "discord-api-types": { 977 | "version": "0.37.37", 978 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.37.tgz", 979 | "integrity": "sha512-LDMBKzl/zbvHO/yCzno5hevuA6lFIXJwdKSJZQrB+1ToDpFfN9thK+xxgZNR4aVkI7GHRDja0p4Sl2oYVPnHYg==" 980 | } 981 | } 982 | }, 983 | "@discordjs/util": { 984 | "version": "0.2.0", 985 | "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.2.0.tgz", 986 | "integrity": "sha512-/8qNbebFzLWKOOg+UV+RB8itp4SmU5jw0tBUD3ifElW6rYNOj1Ku5JaSW7lLl/WgjjxF01l/1uQPCzkwr110vg==" 987 | }, 988 | "@discordjs/voice": { 989 | "version": "0.14.0", 990 | "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.14.0.tgz", 991 | "integrity": "sha512-/LV8LSFuJ1c4OEW1ubPg3al2QNpUpwX8ZL+KL+LORmnUFVCtehSaEh+38uDfWg1O/TgiGI5vOLj4ZKql43drcw==", 992 | "requires": { 993 | "@types/ws": "^8.5.3", 994 | "discord-api-types": "^0.37.20", 995 | "prism-media": "^1.3.4", 996 | "tslib": "^2.4.1", 997 | "ws": "^8.11.0" 998 | }, 999 | "dependencies": { 1000 | "discord-api-types": { 1001 | "version": "0.37.35", 1002 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.35.tgz", 1003 | "integrity": "sha512-iyKZ/82k7FX3lcmHiAvvWu5TmyfVo78RtghBV/YsehK6CID83k5SI03DKKopBcln+TiEIYw5MGgq7SJXSpNzMg==" 1004 | } 1005 | } 1006 | }, 1007 | "@sapphire/async-queue": { 1008 | "version": "1.5.0", 1009 | "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", 1010 | "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" 1011 | }, 1012 | "@sapphire/shapeshift": { 1013 | "version": "3.8.2", 1014 | "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.2.tgz", 1015 | "integrity": "sha512-NXpnJAsxN3/h9TqQPntOeVWZrpIuucqXI3IWF6tj2fWCoRLCuVK5wx7Dtg7pRrtkYfsMUbDqgKoX26vrC5iYfA==", 1016 | "requires": { 1017 | "fast-deep-equal": "^3.1.3", 1018 | "lodash": "^4.17.21" 1019 | } 1020 | }, 1021 | "@sapphire/snowflake": { 1022 | "version": "3.4.0", 1023 | "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", 1024 | "integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==" 1025 | }, 1026 | "@tokenizer/token": { 1027 | "version": "0.3.0", 1028 | "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", 1029 | "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" 1030 | }, 1031 | "@types/node": { 1032 | "version": "18.14.6", 1033 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", 1034 | "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==" 1035 | }, 1036 | "@types/webidl-conversions": { 1037 | "version": "7.0.0", 1038 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 1039 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" 1040 | }, 1041 | "@types/whatwg-url": { 1042 | "version": "8.2.2", 1043 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 1044 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 1045 | "requires": { 1046 | "@types/node": "*", 1047 | "@types/webidl-conversions": "*" 1048 | } 1049 | }, 1050 | "@types/ws": { 1051 | "version": "8.5.4", 1052 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", 1053 | "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", 1054 | "requires": { 1055 | "@types/node": "*" 1056 | } 1057 | }, 1058 | "bson": { 1059 | "version": "5.0.1", 1060 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.0.1.tgz", 1061 | "integrity": "sha512-y09gBGusgHtinMon/GVbv1J6FrXhnr/+6hqLlSmEFzkz6PodqF6TxjyvfvY3AfO+oG1mgUtbC86xSbOlwvM62Q==" 1062 | }, 1063 | "busboy": { 1064 | "version": "1.6.0", 1065 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 1066 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 1067 | "requires": { 1068 | "streamsearch": "^1.1.0" 1069 | } 1070 | }, 1071 | "colors": { 1072 | "version": "1.4.0", 1073 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 1074 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" 1075 | }, 1076 | "complex.js": { 1077 | "version": "2.1.1", 1078 | "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", 1079 | "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==" 1080 | }, 1081 | "debug": { 1082 | "version": "4.3.4", 1083 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1084 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1085 | "requires": { 1086 | "ms": "2.1.2" 1087 | }, 1088 | "dependencies": { 1089 | "ms": { 1090 | "version": "2.1.2", 1091 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1092 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1093 | } 1094 | } 1095 | }, 1096 | "decimal.js": { 1097 | "version": "10.4.3", 1098 | "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", 1099 | "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" 1100 | }, 1101 | "discord-api-types": { 1102 | "version": "0.36.3", 1103 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.36.3.tgz", 1104 | "integrity": "sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg==" 1105 | }, 1106 | "discord-modals": { 1107 | "version": "1.3.9", 1108 | "resolved": "https://registry.npmjs.org/discord-modals/-/discord-modals-1.3.9.tgz", 1109 | "integrity": "sha512-Wa7iACmA9uMI7tmEDjYI/sqmBwnYqClowEeF/3FrJUva7r1vwTLDelRoSeBPeauh0GZ3zzBJ2nl9w1Gd+uJBtw==", 1110 | "requires": {} 1111 | }, 1112 | "discord.js": { 1113 | "version": "14.8.0", 1114 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.8.0.tgz", 1115 | "integrity": "sha512-UOxYtc/YnV7jAJ2gISluJyYeBw4e+j8gWn+IoqG8unaHAVuvZ13DdYN0M1f9fbUgUvSarV798inIrYFtDNDjwQ==", 1116 | "requires": { 1117 | "@discordjs/builders": "^1.5.0", 1118 | "@discordjs/collection": "^1.4.0", 1119 | "@discordjs/formatters": "^0.2.0", 1120 | "@discordjs/rest": "^1.6.0", 1121 | "@discordjs/util": "^0.2.0", 1122 | "@sapphire/snowflake": "^3.4.0", 1123 | "@types/ws": "^8.5.4", 1124 | "discord-api-types": "^0.37.35", 1125 | "fast-deep-equal": "^3.1.3", 1126 | "lodash.snakecase": "^4.1.1", 1127 | "tslib": "^2.5.0", 1128 | "undici": "^5.20.0", 1129 | "ws": "^8.12.1" 1130 | }, 1131 | "dependencies": { 1132 | "discord-api-types": { 1133 | "version": "0.37.35", 1134 | "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.35.tgz", 1135 | "integrity": "sha512-iyKZ/82k7FX3lcmHiAvvWu5TmyfVo78RtghBV/YsehK6CID83k5SI03DKKopBcln+TiEIYw5MGgq7SJXSpNzMg==" 1136 | } 1137 | } 1138 | }, 1139 | "escape-latex": { 1140 | "version": "1.2.0", 1141 | "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", 1142 | "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" 1143 | }, 1144 | "fast-deep-equal": { 1145 | "version": "3.1.3", 1146 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1147 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 1148 | }, 1149 | "file-type": { 1150 | "version": "18.2.1", 1151 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.2.1.tgz", 1152 | "integrity": "sha512-Yw5MtnMv7vgD2/6Bjmmuegc8bQEVA9GmAyaR18bMYWKqsWDG9wgYZ1j4I6gNMF5Y5JBDcUcjRQqNQx7Y8uotcg==", 1153 | "requires": { 1154 | "readable-web-to-node-stream": "^3.0.2", 1155 | "strtok3": "^7.0.0", 1156 | "token-types": "^5.0.1" 1157 | } 1158 | }, 1159 | "fraction.js": { 1160 | "version": "4.2.0", 1161 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", 1162 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" 1163 | }, 1164 | "ieee754": { 1165 | "version": "1.2.1", 1166 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1167 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 1168 | }, 1169 | "inherits": { 1170 | "version": "2.0.4", 1171 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1172 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1173 | }, 1174 | "ip": { 1175 | "version": "2.0.0", 1176 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 1177 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 1178 | }, 1179 | "javascript-natural-sort": { 1180 | "version": "0.7.1", 1181 | "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", 1182 | "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" 1183 | }, 1184 | "kareem": { 1185 | "version": "2.5.1", 1186 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", 1187 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==" 1188 | }, 1189 | "lodash": { 1190 | "version": "4.17.21", 1191 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1192 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1193 | }, 1194 | "lodash.snakecase": { 1195 | "version": "4.1.1", 1196 | "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", 1197 | "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" 1198 | }, 1199 | "mathjs": { 1200 | "version": "11.6.0", 1201 | "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.6.0.tgz", 1202 | "integrity": "sha512-6AAhoVvmCJSozTW+pc3XAwe9pLlAO5fYHnrHv4XWb0NQxjdz0DRnT3qneOPkKH6raTnlvHuX3XGLv8BmgXfiEg==", 1203 | "requires": { 1204 | "@babel/runtime": "^7.21.0", 1205 | "complex.js": "^2.1.1", 1206 | "decimal.js": "^10.4.3", 1207 | "escape-latex": "^1.2.0", 1208 | "fraction.js": "^4.2.0", 1209 | "javascript-natural-sort": "^0.7.1", 1210 | "seedrandom": "^3.0.5", 1211 | "tiny-emitter": "^2.1.0", 1212 | "typed-function": "^4.1.0" 1213 | } 1214 | }, 1215 | "memory-pager": { 1216 | "version": "1.5.0", 1217 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 1218 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 1219 | "optional": true 1220 | }, 1221 | "moment": { 1222 | "version": "2.29.4", 1223 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 1224 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" 1225 | }, 1226 | "moment-duration-format": { 1227 | "version": "2.3.2", 1228 | "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.3.2.tgz", 1229 | "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" 1230 | }, 1231 | "moment-timezone": { 1232 | "version": "0.5.43", 1233 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", 1234 | "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", 1235 | "requires": { 1236 | "moment": "^2.29.4" 1237 | } 1238 | }, 1239 | "mongodb": { 1240 | "version": "5.1.0", 1241 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz", 1242 | "integrity": "sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==", 1243 | "requires": { 1244 | "bson": "^5.0.1", 1245 | "mongodb-connection-string-url": "^2.6.0", 1246 | "saslprep": "^1.0.3", 1247 | "socks": "^2.7.1" 1248 | } 1249 | }, 1250 | "mongodb-connection-string-url": { 1251 | "version": "2.6.0", 1252 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", 1253 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", 1254 | "requires": { 1255 | "@types/whatwg-url": "^8.2.1", 1256 | "whatwg-url": "^11.0.0" 1257 | } 1258 | }, 1259 | "mongoose": { 1260 | "version": "7.0.0", 1261 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.0.0.tgz", 1262 | "integrity": "sha512-U0YPURDld+k/nvvSG1mRClQSjZMRXwQKSU5yb9PslRnOmVz0UlBD7SjSnjUuGT0yk+7BH+kJNimsKqMxYAKkMA==", 1263 | "requires": { 1264 | "bson": "^5.0.1", 1265 | "kareem": "2.5.1", 1266 | "mongodb": "5.1.0", 1267 | "mpath": "0.9.0", 1268 | "mquery": "5.0.0", 1269 | "ms": "2.1.3", 1270 | "sift": "16.0.1" 1271 | } 1272 | }, 1273 | "mpath": { 1274 | "version": "0.9.0", 1275 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 1276 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" 1277 | }, 1278 | "mquery": { 1279 | "version": "5.0.0", 1280 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 1281 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 1282 | "requires": { 1283 | "debug": "4.x" 1284 | } 1285 | }, 1286 | "ms": { 1287 | "version": "2.1.3", 1288 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1289 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1290 | }, 1291 | "node-fetch": { 1292 | "version": "2.6.9", 1293 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", 1294 | "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", 1295 | "requires": { 1296 | "whatwg-url": "^5.0.0" 1297 | }, 1298 | "dependencies": { 1299 | "tr46": { 1300 | "version": "0.0.3", 1301 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1302 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1303 | }, 1304 | "webidl-conversions": { 1305 | "version": "3.0.1", 1306 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1307 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1308 | }, 1309 | "whatwg-url": { 1310 | "version": "5.0.0", 1311 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1312 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1313 | "requires": { 1314 | "tr46": "~0.0.3", 1315 | "webidl-conversions": "^3.0.0" 1316 | } 1317 | } 1318 | } 1319 | }, 1320 | "parse-ms": { 1321 | "version": "2.1.0", 1322 | "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", 1323 | "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==" 1324 | }, 1325 | "peek-readable": { 1326 | "version": "5.0.0", 1327 | "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", 1328 | "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==" 1329 | }, 1330 | "pretty-ms": { 1331 | "version": "6.0.1", 1332 | "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-6.0.1.tgz", 1333 | "integrity": "sha512-ke4njoVmlotekHlHyCZ3wI/c5AMT8peuHs8rKJqekj/oR5G8lND2dVpicFlUz5cbZgE290vvkMuDwfj/OcW1kw==", 1334 | "requires": { 1335 | "parse-ms": "^2.1.0" 1336 | } 1337 | }, 1338 | "prism-media": { 1339 | "version": "1.3.5", 1340 | "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.5.tgz", 1341 | "integrity": "sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA==", 1342 | "requires": {} 1343 | }, 1344 | "punycode": { 1345 | "version": "2.3.0", 1346 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1347 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" 1348 | }, 1349 | "readable-stream": { 1350 | "version": "3.6.2", 1351 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 1352 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1353 | "requires": { 1354 | "inherits": "^2.0.3", 1355 | "string_decoder": "^1.1.1", 1356 | "util-deprecate": "^1.0.1" 1357 | } 1358 | }, 1359 | "readable-web-to-node-stream": { 1360 | "version": "3.0.2", 1361 | "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", 1362 | "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", 1363 | "requires": { 1364 | "readable-stream": "^3.6.0" 1365 | } 1366 | }, 1367 | "regenerator-runtime": { 1368 | "version": "0.13.11", 1369 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", 1370 | "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" 1371 | }, 1372 | "safe-buffer": { 1373 | "version": "5.2.1", 1374 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1375 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1376 | }, 1377 | "saslprep": { 1378 | "version": "1.0.3", 1379 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 1380 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 1381 | "optional": true, 1382 | "requires": { 1383 | "sparse-bitfield": "^3.0.3" 1384 | } 1385 | }, 1386 | "seedrandom": { 1387 | "version": "3.0.5", 1388 | "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", 1389 | "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" 1390 | }, 1391 | "sift": { 1392 | "version": "16.0.1", 1393 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", 1394 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" 1395 | }, 1396 | "smart-buffer": { 1397 | "version": "4.2.0", 1398 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1399 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" 1400 | }, 1401 | "socks": { 1402 | "version": "2.7.1", 1403 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 1404 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 1405 | "requires": { 1406 | "ip": "^2.0.0", 1407 | "smart-buffer": "^4.2.0" 1408 | } 1409 | }, 1410 | "sparse-bitfield": { 1411 | "version": "3.0.3", 1412 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1413 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 1414 | "optional": true, 1415 | "requires": { 1416 | "memory-pager": "^1.0.2" 1417 | } 1418 | }, 1419 | "streamsearch": { 1420 | "version": "1.1.0", 1421 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 1422 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" 1423 | }, 1424 | "string_decoder": { 1425 | "version": "1.3.0", 1426 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1427 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1428 | "requires": { 1429 | "safe-buffer": "~5.2.0" 1430 | } 1431 | }, 1432 | "strtok3": { 1433 | "version": "7.0.0", 1434 | "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", 1435 | "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", 1436 | "requires": { 1437 | "@tokenizer/token": "^0.3.0", 1438 | "peek-readable": "^5.0.0" 1439 | } 1440 | }, 1441 | "super-djs": { 1442 | "version": "1.7.4", 1443 | "resolved": "https://registry.npmjs.org/super-djs/-/super-djs-1.7.4.tgz", 1444 | "integrity": "sha512-bpm7F073D8KsSC4TT8KvpbJtg3zG2gllHyJh2gJuAqL8bbeAedJTL5KbA1efLzMxR9UjY8ZtZ8laYsTNOyzm/g==", 1445 | "requires": { 1446 | "ms": "^2.1.3" 1447 | } 1448 | }, 1449 | "tiny-emitter": { 1450 | "version": "2.1.0", 1451 | "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", 1452 | "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" 1453 | }, 1454 | "token-types": { 1455 | "version": "5.0.1", 1456 | "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", 1457 | "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", 1458 | "requires": { 1459 | "@tokenizer/token": "^0.3.0", 1460 | "ieee754": "^1.2.1" 1461 | } 1462 | }, 1463 | "tr46": { 1464 | "version": "3.0.0", 1465 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 1466 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 1467 | "requires": { 1468 | "punycode": "^2.1.1" 1469 | } 1470 | }, 1471 | "ts-mixer": { 1472 | "version": "6.0.3", 1473 | "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", 1474 | "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==" 1475 | }, 1476 | "tslib": { 1477 | "version": "2.5.0", 1478 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", 1479 | "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" 1480 | }, 1481 | "typed-function": { 1482 | "version": "4.1.0", 1483 | "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", 1484 | "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==" 1485 | }, 1486 | "undici": { 1487 | "version": "5.21.0", 1488 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", 1489 | "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", 1490 | "requires": { 1491 | "busboy": "^1.6.0" 1492 | } 1493 | }, 1494 | "util-deprecate": { 1495 | "version": "1.0.2", 1496 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1497 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1498 | }, 1499 | "webidl-conversions": { 1500 | "version": "7.0.0", 1501 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 1502 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" 1503 | }, 1504 | "whatwg-url": { 1505 | "version": "11.0.0", 1506 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 1507 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 1508 | "requires": { 1509 | "tr46": "^3.0.0", 1510 | "webidl-conversions": "^7.0.0" 1511 | } 1512 | }, 1513 | "ws": { 1514 | "version": "8.12.1", 1515 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", 1516 | "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", 1517 | "requires": {} 1518 | } 1519 | } 1520 | } 1521 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "shut", 3 | "version": "14.0.0", 4 | "description": "shut", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js" 8 | }, 9 | "keywords": [], 10 | "author": "Shut", 11 | "license": "ISC", 12 | "dependencies": { 13 | "@discordjs/voice": "^0.14.0", 14 | "colors": "^1.4.0", 15 | "discord-api-types": "^0.36.2", 16 | "discord-modals": "^1.3.9", 17 | "discord.js": "^14.8.0", 18 | "mathjs": "^11.3.3", 19 | "moment": "^2.29.4", 20 | "moment-duration-format": "^2.3.2", 21 | "moment-timezone": "^0.5.43", 22 | "mongoose": "^7.0.0", 23 | "ms": "^2.1.3", 24 | "node-fetch": "^2.6.7", 25 | "pretty-ms": "^6.0.1", 26 | "super-djs": "^1.7.4" 27 | } 28 | } 29 | --------------------------------------------------------------------------------