├── .eslintrc.js ├── .github └── workflows │ └── test.yml ├── .gitignore ├── .prettierrc ├── LICENSE ├── README.en.md ├── README.md ├── package.json ├── src ├── commands │ ├── coin.js │ ├── coinSystem.js │ ├── eval.js │ ├── help.js │ ├── perm.js │ ├── rank.js │ ├── role.js │ ├── senkronize.js │ ├── stat.js │ ├── tagaldır.js │ ├── task.js │ ├── tasks.js │ ├── top.js │ └── ystat.js ├── configs │ ├── config.json │ ├── ranks.json │ └── settings.json ├── events │ ├── commandHandler.js │ ├── deleteStats.js │ ├── interactionCreate.js │ ├── messageStats.js │ ├── modalSubmit.js │ └── voiceStats.js ├── schemas │ ├── coin.js │ ├── messageGuild.js │ ├── messageGuildChannel.js │ ├── messageUser.js │ ├── messageUserChannel.js │ ├── taggeds.js │ ├── task.js │ ├── voiceGuild.js │ ├── voiceGuildChannel.js │ ├── voiceJoinedAt.js │ ├── voiceUser.js │ ├── voiceUserChannel.js │ └── voiceUserParent.js ├── theark.js └── util │ ├── helpers │ ├── commandHandler.js │ ├── eventHandler.js │ └── mongoHandler.js │ └── util.js └── yarn.lock /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | node: true, 4 | es2021: true 5 | }, 6 | extends: "eslint:recommended", 7 | parserOptions: { 8 | ecmaVersion: 12 9 | }, 10 | ignorePatterns: ["/node_modules", "eval.js"], 11 | rules: { 12 | semi: ["error", "always"], 13 | quotes: ["error", "double"], 14 | eqeqeq: ["error", "always"], 15 | camelcase: "error", 16 | "key-spacing": "error", 17 | "keyword-spacing": "error", 18 | "no-mixed-spaces-and-tabs": "error", 19 | "no-multiple-empty-lines": "error", 20 | "prefer-arrow-callback": "error", 21 | "no-use-before-define": ["error", { functions: false, classes: true }], 22 | "no-else-return": ["error", { allowElseIf: false }], 23 | "prefer-const": ["error", { destructuring: "any", ignoreReadBeforeAssign: false }], 24 | "no-unused-vars": ["error", { vars: "all", args: "after-used", ignoreRestSiblings: false }] 25 | } 26 | }; 27 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | install_and_build: 7 | runs-on: ubuntu-latest 8 | strategy: 9 | matrix: 10 | node-version: [16.x] 11 | steps: 12 | - uses: actions/checkout@v3 13 | - name: Setup Environment for Node ${{ matrix.node-version }} 14 | uses: actions/setup-node@v3 15 | with: 16 | node-version: ${{ matrix.node-version }} 17 | 18 | - name: Install Dependencies 19 | run: npm install 20 | 21 | - name: Start the bot 22 | run: timeout 10 npm run start || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | package-lock.json 3 | /node_modules 4 | .idea 5 | .vscode 6 | yarn.lock -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 200, 3 | "tabWidth": 2, 4 | "useTabs": true, 5 | "semi": true, 6 | "singleQuote": false, 7 | "trailingComma": "none", 8 | "bracketSpacing": true 9 | } 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Theark 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.en.md: -------------------------------------------------------------------------------- 1 | # Discord Advanced Stat Bot 2 | 3 | An advanced and simple statistics bot that you can use on Discord servers. 4 | 5 | [![GitHub license](https://img.shields.io/github/license/thearkxd/discord-advanced-stat-bot)](https://github.com/thearkxd/discord-advanced-stat-bot/blob/master/LICENSE.md) 6 | [![Actions Status](https://github.com/thearkxd/discord-advanced-stat-bot/actions/workflows/test.yml/badge.svg)](https://github.com/thearkxd/discord-advanced-stat-bot/actions) 7 | [![GitHub issues](https://img.shields.io/github/issues/thearkxd/discord-advanced-stat-bot)](https://github.com/thearkxd/discord-advanced-stat-bot/issues) 8 | 9 | - [Discord Advanced Stat Bot](#discord-advanced-stat-bot) 10 | - [Content](#content) 11 | - [Setup](#setup) 12 | - [FAQ (Frequently Asked Questions)](#faq-frequently-asked-questions) 13 | - [Images](#images) 14 | - [Contact](#contact) 15 | 16 | ### 🌏 [Turkish](https://github.com/thearkxd/discord-advanced-stat-bot/blob/master/README.md) 17 | 18 | # Content 19 | These are the features of the bot. If there is a tick next to it, it means it has been added, otherwise it means it will be added. 20 | 21 | - [x] **Statistics system** 22 | * Shows voice and message data of all members on the server. 23 | * `stat`, `role`, `top` 24 | 25 | - [x] **Authorized statistics system** 26 | * Shows the voice and message data of the authorities on the server, and also allows them to bypass the authority by adding points. 27 | * `ystat` 28 | 29 | - [x] **Quest system** 30 | * It allows them to give tasks to the officials on the server and earn more points. 31 | * `task` 32 | 33 | - [ ] **Badge system** 34 | * Gives members the roles that are determined when they set specific voice and message goals and reach that goal. 35 | 36 | # Setup 37 | 38 | - First, download the [Node JS](https://nodejs.org/en/). 39 | - Then, create a [MongoDB](http://mongodb.com) account and get the connection url. 40 | - Download this project and extract. 41 | - Then go into the `configs` folder in the `src` folder and first fill in the information in the `settings.json` file. 42 | 43 | - `token`: Your bot's token. 44 | 45 | - `prefix`: The prefix of your bot. 46 | 47 | - `mongoUrl`: Your Mongo connection link. 48 | 49 | - `owners`: Discord IDs of bot owners. 50 | 51 | - Now fill the information inside the `config.json` file in the same folder. 52 | 53 | - `​publicParents:`​ The public voice category of the server. 54 | 55 | - `​registerParents:`​ The recording voice category of the server. 56 | 57 | - `​solvingParents:`​ The server's problem-solving sound category. 58 | 59 | - `​privateParents:`​ The private voice category of the server. 60 | 61 | - `​aloneParents:`​ The solo voice category of the server. 62 | 63 | - `ignoreChannels:` Channels that you do not want coins to be issued. 64 | 65 | - `coinSystem:` Value **true** turns the coin system on, value **false** turns it off. 66 | 67 | - `​rankLog:`​ Rank log channel. 68 | 69 | - `​tag:`​ Your server's tag symbol. 70 | 71 | - `​staffs:`​ Authorized role to be added and increased authority. 72 | 73 | - `​messageCount:`​ How many messages will receive coins. 74 | 75 | - `​messageCoin:`​ messageCount How many coins will be given when messages are sent. 76 | 77 | - `​voiceCount:`​ How many minutes will be given coins after the sound is stopped. 78 | 79 | - `​voiceCoin:`​ How many coins will be issued when the voiceCount stops at the sound for a minute. 80 | 81 | - `​publicCoin:`​ How many coins will be issued when the voiceCount stops at sound in public channels. 82 | 83 | - `​taggedCoin:`​ How many coins will be given when you tag someone with the "tagaldir" command 84 | 85 | - `​emojis:`​ Emojis used in commands. (you can find emojis on my server below) 86 | 87 | - **Important information!**: If there is a value like `[]` in the config files, it means you can enter more than one value there. For example; `["theark", "stat", "bot"]`. 88 | 89 | - You don't need to fill the `ranks.json` file, commands will use that file. 90 | - Open a `cmd` or a `powershell` window and type `npm install` to install all modules. 91 | - Finally to start the bot, type `npm start`. 92 | 93 | # FAQ (Frequently Asked Questions) 94 | 95 | ## What is this task schema??? Will I create a schema for every task I give! 96 | 97 | The task schema is a system prepared for the 'take task' command. In the `task take` command, I added a schema system to avoid complexity, since the bot gives a random task. When the bot will randomly give a task, it randomly chooses one of the schemes you have determined and gives that task to the person. In addition, you can quickly assign a task by adding a schema directly with `task schema give @user schema-id`. :yum: 98 | 99 | ## What if I'm going to give everyone one task or is there a shortcut for it?! 🤬 100 | 101 | Of course there is :). If you tag a role instead of a person while giving a task, the bot will automatically distribute their tasks to **authorized** everyone in that role. 😉 102 | 103 | ## Now we have `ranks.json` on our heads, what is this? 104 | 105 | The "ranks" part in the `ranks.json` file is the part where your privileges are. In short, the ranks section has been moved to a json file so that you can add rank with the command. "tasks" is where the task diagrams are located. If you do not want to add a rank or mission chart with the command, you can write **in accordance with the format** in those parts. 106 | 107 | ## Well? I downloaded this bot as an authorization booster bot, the coin part is not visible??? 108 | 109 | There are 3 reasons why the coin section is not visible; 110 | 111 | - The person does not have roles that you enter the ID in `staffs` in the `config.json` file. 112 | - You have not added authorization to your bot. 113 | - The coin system is closed. 114 | 115 | If it still doesn't appear after checking them, you can write to the help channel on my server. 116 | 117 | ## What is this sync command? 118 | 119 | The synchronize command works as follows; Let's say you entered the 'x, y and z' roles in the 'ranks' section and added the bot to the server. But when you added the bot, I had the 'z' role. If you don't use sync command on me, when I bypass the bot will take my `z` role and give me `x` role. But if you use the synchronize command, the bot will sync my coin count with the coin you assigned to the `z` role. 120 | 121 | ## I downloaded this bot because there is a task system, invite and registration tasks do not work?? 🤬🤬 122 | 123 | In order for the invite tasks to work, you need to download and install my registration bot [here](https://github.com/thearkxd/discord-supervisor-bot) and add it to the server where this bot is located. In order for the registration tasks to work, you need to register the people coming to the server through that bot. :blush: 124 | 125 | ## I added the bot to my server, I installed it, but the slash commands do not appear? 126 | 127 | For Slash commands to appear, you need to grant application commands permission when adding the bot to your server. 128 | 129 | - First of all, we enter our bot page from the [Developer Portal](https://discord.com/developers/applications). 130 | - Then, under the 'OAuth2' tab, we click on 'URL Generator' from the left menu. 131 | - Click on `applications.commands` from the right side and copy the link below. 132 | - After you enter the link and give permission to our bot, your slash commands will appear. 133 | 134 | 135 | 136 | ### If you get another error or find a problem with the bot, you can come to my Discord server, which I have given the link below, and write to me. :blush: 137 | 138 | ## Images: 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | ## Contact 151 | 152 | - [My Discord Server](https://discord.gg/UEPcFtytcc) 153 | - [My Discord Profile](https://discord.com/users/350976460313329665) 154 | - You can contact me here if you find any mistakes or when you need help. 155 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Discord Advanced Stat Bot 2 | 3 | Discord sunucularınızda kullanabileceğiniz gelişmiş ve sade bir istatistik botu. 4 | 5 | [![GitHub license](https://img.shields.io/github/license/thearkxd/discord-advanced-stat-bot)](https://github.com/thearkxd/discord-advanced-stat-bot/blob/master/LICENSE.md) 6 | [![Actions Status](https://github.com/thearkxd/discord-advanced-stat-bot/actions/workflows/test.yml/badge.svg)](https://github.com/thearkxd/discord-advanced-stat-bot/actions) 7 | [![GitHub issues](https://img.shields.io/github/issues/thearkxd/discord-advanced-stat-bot)](https://github.com/thearkxd/discord-advanced-stat-bot/issues) 8 | 9 | - [Discord Advanced Stat Bot](#discord-advanced-stat-bot) 10 | - [İçerikler](#içerik) 11 | - [Kurulum](#kurulum) 12 | - [SSS (Sıkça Sorulan Sorular)](#sss-sıkça-sorulan-sorular) 13 | - [Görseller](#görseller) 14 | - [İletişim](#iletişim) 15 | 16 | ### 🌏 [English](https://github.com/thearkxd/discord-advanced-stat-bot/blob/master/README.en.md) 17 | 18 | # İçerik 19 | Botun içinde bulunan özellikler bunlardır. Eğer yanında tik işareti varsa eklenmiş, yoksa eklenecek anlamına gelmektedir. 20 | 21 | - [x] **İstatistik sistemi** 22 | * Sunucudaki bütün üyelerin ses ve mesaj verilerini gösterir. 23 | * `stat`, `rol`, `top` 24 | 25 | - [x] **Yetkili istatistik sistemi** 26 | * Sunucudaki yetkililerin ses ve mesaj verilerini gösterir, ayrıca onlara puan ekleyerek yetki atlamalarını sağlar. 27 | * `ystat` 28 | 29 | - [x] **Görev sistemi** 30 | * Sunucudaki yetkililere görev verip daha çok puan kazanmalarını sağlar. 31 | * `görev` 32 | 33 | - [ ] **Rozet sistemi** 34 | * Üyelere belirli ses ve mesaj hedefleri belirleyip o hedefe ulaştıklarında belirlenen rolleri verir. 35 | 36 | # Kurulum 37 | 38 | - İlk olarak bilgisayarına [Node JS](https://nodejs.org/en/) indir. 39 | 40 | - Daha sonra bir [MongoDB](http://mongodb.com) hesabı oluştur ve connection linki al. 41 | 42 | - Eğer bunu yapmayı bilmiyorsan [buraya](https://medium.com/@thearkxd/node-js-projeleri-için-mongodb-atlas-connection-linki-alma-5d955bbe5ae6) tıklayarak medium.com üzerinde yazdığım yazıyı inceleyebilirsin. 43 | 44 | - Bu projeyi zip halinde indir ve projeyi zipten çıkart. 45 | 46 | - Daha sonra `src` klasörünün içindeki `configs` klasörünün içine gir ve öncelikle `settings.json` dosyasının içindeki bilgileri doldur. 47 | 48 | - `token`: Botunuzun tokeni. 49 | 50 | - `prefix`: Botunuzun prefixi. 51 | 52 | - `mongoUrl`: Mongo connection linkiniz. 53 | 54 | - `owners`: Bot sahiplerinin Discord ID'leri. 55 | 56 | - Şimdi aynı klasördeki `config.json` dosyasının içindeki bilgileri doldur. 57 | 58 | - `​publicParents:`​ Sunucunun public ses kategorisi. 59 | 60 | - `​registerParents:`​ Sunucunun kayıt ses kategorisi. 61 | 62 | - `​solvingParents:`​ Sunucunun sorun çözme ses kategorisi. 63 | 64 | - `​privateParents:`​ Sunucunun private ses kategorisi. 65 | 66 | - `​aloneParents:`​ Sunucunun alone ses kategorisi. 67 | 68 | - `ignoreChannels:` Coin verilmesini istemediğiniz kanallar. 69 | 70 | - `coinSystem:` **true** değeri coin sistemini açar, **false** değeri ise kapatır. 71 | 72 | - `​rankLog:`​ Rank log kanalı. 73 | 74 | - `​tag:`​ Sunucu tag sembolünüz. 75 | 76 | - `​staffs:`​ Coin eklenip yetkisi arttırılacak yetkili rolü. 77 | 78 | - `​messageCount:`​ Kaç mesajda coin verileceği. 79 | 80 | - `​messageCoin:`​ messageCount adet mesaj atılınca kaç coin verileceği. 81 | 82 | - `​voiceCount:`​ Seste kaç dakika durunca coin verileceği. 83 | 84 | - `​voiceCoin:`​ voiceCount dakika seste durunca kaç coin verileceği. 85 | 86 | - `​publicCoin:`​ Public kanallarda voiceCount dakika seste durunca kaç coin verileceği. 87 | 88 | - `​taggedCoin:`​ Birisine "tagaldır" komutu ile tag aldırınca kaç coin verileceği 89 | 90 | - `​emojis:`​ Komutlarda kullanılan emojiler. (emojileri aşağıdaki sunucumda bulabilirsiniz) 91 | 92 | - **Önemli bilgi!**: Eğer config dosyalarında `[]` şeklinde bir değer varsa, demektir ki oraya birden fazla değer girebiliyorsun. Örneğin; `["theark", "stat", "bot"]`. 93 | 94 | - `ranks.json` dosyasını doldurmanıza gerek yok, o dosyayı komutlar kullanacak. 95 | 96 | - Sonra klasörün içerisinde bir `powershell` ya da `cmd` penceresi aç ve `npm install` yazarak tüm modülleri kur. 97 | 98 | - Kurulum bittikten sonra `npm start` yaz ve botu başlat. 99 | 100 | 101 | # SSS (Sıkça Sorulan Sorular) 102 | 103 | ## Bu görev şeması ne??? Ben vereceğim her görev için şema mı oluşturacağım! 104 | 105 | Görev şeması, `görev al` komutu için hazırlanmış bir sistemdir. `görev al` komutunda, bot rastgele bir görev verdiğinden dolayı, karmaşıklık oluşmaması için şema sistemi ekledim. Bot, rastgele görev vereceği zaman, sizin belirlediğiniz şemalardan birini rastgele seçiyor ve kişiye o görevi veriyor. Ayrıca şema ekleyerek direk `görev şema ver @kullanıcı şema-id` ile de hızlıca görev verebilirsiniz. :yum: 106 | 107 | ## Ya ben herkese tek tek görev mi vereceğim, yok mu bunun bir kısayolu?! 🤬 108 | 109 | Tabii ki var :). Görev verirken kişi yerine rol etiketlerseniz, bot otomatik olarak o roldeki **yetkili olan** herkese görevlerini dağıtacaktır. 😉 110 | 111 | ## Şimdi de başımıza `ranks.json` çıktı yav bu ne? 112 | 113 | `ranks.json` dosyası içindeki "ranks" kısmı, sizin yetkilerinizin bulunduğu kısımdır. Yani kısacası komutla rank ekleyebilmeniz için ranks kısmı bir json dosyasına taşındı. "tasks" ise görev şemalarının bulunduğu yerdir. Komutla rank ya da görev şeması eklemek istemiyorsanız, **formata uygun şekilde** o kısımlara yazabilirsiniz. 114 | 115 | ## Eeee? Ben bu botu yetki yükseltme botu olarak indirmiştim, coin kısmı görünmüyor??? 116 | 117 | Coin kısmının görünmemesinin 3 nedeni vardır; 118 | 119 | - Kişide, `config.json` dosyasında `staffs` içine ID'sini girdiğiniz roller yoktur. 120 | - Botunuza yetki eklememişsinizdir. 121 | - Coin sistemi kapalıdır. 122 | 123 | Bunları kontrol ettikten sonra hâlâ görünmüyorsa sunucumdaki yardım kanalına yazabilirsiniz. 124 | 125 | ## Nedir bu senkronize komutu? 126 | 127 | Senkronize komutu ise şu işe yarar; Diyelim siz `ranks` kısmına `x, y ve z` rollerini girdiniz ve botu sunucuya eklediniz. Fakat bende botu eklediğiniz zaman `z` rolü vardı. Eğer siz benim üstümde senkronize komutunu kullanmazsanız, ben yetki atladığım zaman bot benim `z` rolümü alıp bana `x` rolü verecektir. Fakat eğer senkronize komutunu kullanırsanız, bot benim coin sayımı, `z` rolüne atadığınız coin ile eşitleyecektir. 128 | 129 | ## Ben bu botta görev sistemi var diye indirmiştim, davet ve kayıt görevleri çalışmıyor?? 🤬🤬 130 | 131 | Davet görevlerinin çalışabilmesi için, [buradan](https://github.com/thearkxd/discord-supervisor-bot) benim kayıt botumu indirip kurmanız, bu botun bulunduğu sunucuya eklemeniz gerekmektedir. Kayıt görevlerinin çalışabilmesi için ise sunucuya gelen kişilerin kaydını o bot üzerinden yapmanız gerekmektedir. :blush: 132 | 133 | ## Botu sunucuma ekledim, kurdum fakat slash komutları görünmüyor? 134 | 135 | Slash komutların görünmesi için botu sunucunuza eklerken application commands izni vermeniz gerekiyor. 136 | 137 | - Öncelikle [Developer Portal](https://discord.com/developers/applications)'dan bot sayfamıza giriyoruz. 138 | - Daha sonra soldaki menüden `OAuth2` sekmesinin altından `URL Generator`'a tıklıyoruz. 139 | - Sağ taraftan `applications.commands` tikine tıklıyoruz ve aşağıdaki linki kopyalıyoruz. 140 | - Linke girip botumuza izni verdikten sonra slash komutlarınız görünecektir. 141 | 142 | 143 | 144 | ### Başka bir hata almanız ya da botta bir sorun bulmanız dahilinde aşağıda linkini verdiğim Discord sunucuma gelip bana yazabilirsiniz. :blush: 145 | 146 | # Görseller: 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | # İletişim 161 | 162 | - [Discord Sunucum](https://discord.gg/UEPcFtytcc) 163 | 164 | - [Discord Profilim](https://discord.com/users/350976460313329665) 165 | 166 | - Herhangi bir hata bulmanız durumunda ya da yardım isteyeceğiniz zaman buralardan bana ulaşabilirsiniz. 167 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord-advanced-stat-bot", 3 | "description": "An advanced Discord stat bot.", 4 | "version": "0.0.1", 5 | "main": "./src/theark.js", 6 | "keywords": [ 7 | "discord", 8 | "stat", 9 | "bot", 10 | "coin", 11 | "coin-bot", 12 | "coin-stat-bot", 13 | "discord-coin-bot", 14 | "discord-coin-stat-bot", 15 | "discord-stat-bot", 16 | "discord-advanced-stat-bot" 17 | ], 18 | "maintainers": [ 19 | { 20 | "name": "Theark", 21 | "web": "https://github.com/thearkxd" 22 | } 23 | ], 24 | "engines": { 25 | "node": "16.x" 26 | }, 27 | "scripts": { 28 | "start": "node .", 29 | "start:dev": "nodemon ." 30 | }, 31 | "nodemonConfig": { 32 | "delay": 1000, 33 | "watch": [ 34 | "src" 35 | ], 36 | "ext": "*" 37 | }, 38 | "dependencies": { 39 | "@discordjs/builders": "^0.12.0", 40 | "@discordjs/rest": "^0.3.0", 41 | "ark.db": "^2.6.9", 42 | "discord-modals": "^1.3.5", 43 | "discord.js": "^13.0.1", 44 | "moment": "^2.29.1", 45 | "moment-duration-format": "^2.3.2", 46 | "mongoose": "^6.2.10", 47 | "node-schedule": "^2.1.0" 48 | }, 49 | "devDependencies": { 50 | "eslint": "^8.13.0", 51 | "nodemon": "^2.0.7", 52 | "prettier": "^2.3.0" 53 | }, 54 | "repositories": [ 55 | { 56 | "type": "git", 57 | "url": "https://github.com/thearkxd/discord-advanced-stat-bot.git" 58 | } 59 | ], 60 | "licenses": [ 61 | { 62 | "name": "MIT", 63 | "url": "https://github.com/thearkxd/discord-advanced-stat-bot/blob/master/LICENSE.md" 64 | } 65 | ] 66 | } 67 | -------------------------------------------------------------------------------- /src/commands/coin.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const coin = require("../schemas/coin"); 3 | const conf = require("../configs/config.json"); 4 | 5 | module.exports = { 6 | conf: { 7 | aliases: [], 8 | name: "coin", 9 | help: "coin [ekle/sil/gönder] [kullanıcı] [sayı]", 10 | enabled: conf.coinSystem, 11 | slash: true 12 | }, 13 | 14 | slashOptions: new SlashCommandBuilder() 15 | .setName("coin") 16 | .setDescription("Belirtilen kullanıcıya coin ekler, siler ya da gönderir.") 17 | .addStringOption((option) => 18 | option.setName("işlem").setDescription("Kullanıcıya uygulamak istediğiniz işlem.").setRequired(true).addChoice("ekle", "ekle").addChoice("sil", "sil").addChoice("gönder", "gönder") 19 | ) 20 | .addUserOption((option) => option.setName("kullanıcı").setDescription("İşlemi uygulamak istediğiniz kullanıcı.").setRequired(true)) 21 | .addIntegerOption((option) => option.setName("sayı").setDescription("İşlem sayısı.").setRequired(true)), 22 | 23 | run: async ({ client, message, args, embed, reply, interaction }) => { 24 | if (!conf.coinSystem) return reply({ embeds: [embed.setDescription("Coin sistemi kapalı olduğu için bu komutu kullanamazsınız!")] }); 25 | const msgMember = interaction ? interaction.member : message.member; 26 | const guild = interaction ? interaction.guild : message.guild; 27 | const member = interaction ? interaction.options.getMember("kullanıcı") : message.mentions.members.first() || message.guild.members.cache.get(args[1]); 28 | if (!member) return reply({ embeds: [embed.setDescription("Bir kullanıcı belirtmelisin!")] }); 29 | 30 | if (args[0] === "ekle" || args[0] === "add") { 31 | if (!msgMember.permissions.has(8)) return; 32 | const count = parseInt(args[2]); 33 | if (!count) return reply({ embeds: [embed.setDescription("Eklemek için bir sayı belirtmelisin!")] }); 34 | if (!count < 0) return reply({ embeds: [embed.setDescription("Eklenecek sayı 0'dan küçük olamaz!")] }); 35 | 36 | await coin.updateOne({ guildID: member.guild.id, userID: member.user.id }, { $inc: { coin: count } }, { upsert: true }); 37 | const coinData = await coin.findOne({ guildID: member.guild.id, userID: member.user.id }); 38 | let addedRoles = ""; 39 | if (coinData && client.ranks.some((x) => coinData.coin >= x.coin && !member.hasRole(x.role))) { 40 | const roles = client.ranks.filter((x) => coinData.coin >= x.coin && !member.hasRole(x.role)); 41 | addedRoles = roles; 42 | member.roles.add(roles[roles.length - 1].role); 43 | embed.setColor("GREEN"); 44 | member.guild.channels.cache.get(conf.rankLog)?.send({ 45 | embeds: [ 46 | embed.setDescription( 47 | `${member.toString()} üyesine ${msgMember.toString()} tarafından **${count}** adet coin eklendi ve kişiye ${roles 48 | .filter((x) => roles.indexOf(x) === roles.length - 1) 49 | .map((x) => (Array.isArray(x.role) ? x.role.listRoles() : `<@&${x.role}>`)) 50 | .join("\n")} rolleri verildi!` 51 | ) 52 | ] 53 | }); 54 | } 55 | reply({ 56 | embeds: [ 57 | embed.setDescription( 58 | `Başarıyla ${member.toString()} kullanıcısına **${count}** adet coin eklendi! \n\n${ 59 | addedRoles.length > 0 60 | ? `Verilen roller: \n${addedRoles 61 | .filter((x) => addedRoles.indexOf(x) === addedRoles.length - 1) 62 | .map((x) => (Array.isArray(x.role) ? x.role.listRoles() : `<@&${x.role}>`)) 63 | .join("\n")}` 64 | : "" 65 | }` 66 | ) 67 | ] 68 | }); 69 | } else if (args[0] === "sil" || args[0] === "remove") { 70 | if (!msgMember.permissions.has(8)) return; 71 | const count = parseInt(args[2]); 72 | if (!count) return reply({ embeds: [embed.setDescription("Çıkarılacak için bir sayı belirtmelisin!")] }); 73 | if (!count < 0) return reply({ embeds: [embed.setDescription("Çıkarılacak sayı 0'dan küçük olamaz!")] }); 74 | let coinData = await coin.findOne({ guildID: member.guild.id, userID: member.user.id }); 75 | if (!coinData || (coinData && count > coinData.coin)) return reply({ embeds: [embed.setDescription("Çıkarmak istediğiniz sayı, kişinin mevcut coininden büyük olamaz!")] }); 76 | 77 | await coin.updateOne({ guildID: member.guild.id, userID: member.user.id }, { $inc: { coin: -count } }, { upsert: true }); 78 | coinData = await coin.findOne({ guildID: member.guild.id, userID: member.user.id }); 79 | let removedRoles = ""; 80 | if (coinData && client.ranks.some((x) => coinData.coin < x.coin && member.hasRole(x.role))) { 81 | const roles = client.ranks.filter((x) => coinData.coin < x.coin && member.hasRole(x.role)); 82 | removedRoles = roles; 83 | roles.forEach((x) => { 84 | member.roles.remove(x.role); 85 | }); 86 | embed.setColor("RED"); 87 | guild.channels.cache.get(conf.rankLog).send({ 88 | embeds: [ 89 | embed.setDescription( 90 | `${member.toString()} üyesinden ${msgMember.toString()} tarafından **${count}** adet coin çıkarıldı ve kişiden ${ 91 | Array.isArray(roles) ? roles.role.listRoles() : `<@&${roles.role}}>` 92 | } rolleri alındı!` 93 | ) 94 | ] 95 | }); 96 | } 97 | reply({ 98 | embeds: [ 99 | embed.setDescription( 100 | `Başarıyla ${member.toString()} kullanıcısından **${count}** adet coin çıkarıldı! \n\n${ 101 | removedRoles.length > 0 ? `Alınan roller: \n${removedRoles.role.listRoles()}` : "" 102 | }` 103 | ) 104 | ] 105 | }); 106 | } else if (args[0] === "ver" || args[0] === "give" || args[0] === "gönder") { 107 | const count = parseInt(args[2]); 108 | if (!count) return reply({ embeds: [embed.setDescription("Coin vermek için bir sayı belirtmelisin!")] }); 109 | if (!count < 0) return reply({ embeds: [embed.setDescription("Verilecek sayı 0'dan küçük olamaz!")] }); 110 | let coinData = await coin.findOne({ guildID: member.guild.id, userID: msgMember.user.id }); 111 | if (!coinData || (coinData && count > coinData.coin)) return reply({ embeds: [embed.setDescription("Göndereceğin sayı kendi coininden yüksek olamaz!")] }); 112 | 113 | await coin.updateOne({ guildID: member.guild.id, userID: member.user.id }, { $inc: { coin: count } }, { upsert: true }); 114 | await coin.updateOne({ guildID: member.guild.id, userID: msgMember.user.id }, { $inc: { coin: -count } }, { upsert: true }); 115 | coinData = await coin.findOne({ guildID: member.guild.id, userID: msgMember.user.id }); 116 | if (coinData && client.ranks.some((x) => coinData.coin < x.coin && msgMember.hasRole(x.role))) { 117 | const roles = client.ranks.filter((x) => coinData.coin < x.coin && msgMember.hasRole(x.role)); 118 | roles.forEach((x) => msgMember.roles.remove(x.role)); 119 | } 120 | const coinData2 = await coin.findOne({ guildID: member.guild.id, userID: member.user.id }); 121 | if (coinData2 && client.ranks.some((x) => coinData2.coin >= x.coin && !member.hasRole(x.role))) { 122 | const roles = client.ranks.filter((x) => coinData2.coin >= x.coin && !member.hasRole(x.role)); 123 | member.roles.add(roles[roles.length - 1].role); 124 | } 125 | 126 | reply({ embeds: [embed.setDescription(`${member.toString()} kişisine başarıyla **${count}** coin gönderildi!`)] }); 127 | } 128 | } 129 | }; -------------------------------------------------------------------------------- /src/commands/coinSystem.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const { Modal, TextInputComponent, showModal } = require("discord-modals"); 3 | 4 | module.exports = { 5 | conf: { 6 | aliases: ["coin-system", "coinsistem", "coinsystem", "coin-sistem", "coin-sistemi"], 7 | name: "coinsistemi", 8 | help: "coinsistemi [aç/kapat]", 9 | enabled: true, 10 | slash: true, 11 | }, 12 | 13 | slashOptions: new SlashCommandBuilder() 14 | .setName("coinsistemi") 15 | .setDescription("Coin sistemini açar ya da kapatır.") 16 | .addStringOption((option) => option.setName("işlem").setDescription("Uygulamak istediğiniz işlem.").setRequired(true).addChoice("aç", "aç").addChoice("kapat", "kapat")), 17 | 18 | run: async ({ client, interaction, args, embed, reply }) => { 19 | if (["aç", "open"].includes(args[0])) { 20 | if (global.confdb.get("coinSystem")) return reply({ embeds: [embed.setDescription("Coin sistemi zaten açık!")] }); 21 | global.confdb.set("coinSystem", true); 22 | reply({ embeds: [embed.setDescription("Coin sistemi başarıyla açıldı!")] }); 23 | } else if (["kapat", "close"].includes(args[0])) { 24 | if (!global.confdb.get("coinSystem")) return reply({ embeds: [embed.setDescription("Coin sistemi zaten kapalı!")] }); 25 | showModal( 26 | new Modal() 27 | .setCustomId("close-coin-system") 28 | .setTitle("Onay") 29 | .addComponents( 30 | new TextInputComponent() 31 | .setCustomId("sure") 32 | .setLabel("Sistemi kapatmak istediğine emin misin?") 33 | .setStyle("SHORT") 34 | .setPlaceholder("evet / hayır") 35 | .setRequired(true) 36 | ), 37 | { 38 | client, 39 | interaction 40 | } 41 | ); 42 | } else reply({ embeds: [embed.setDescription(`Coin sistemi: \`${global.confdb.get("coinSystem") ? "açık" : "kapalı"}\``)] }); 43 | } 44 | }; 45 | -------------------------------------------------------------------------------- /src/commands/eval.js: -------------------------------------------------------------------------------- 1 | const { Util } = require("discord.js"); 2 | 3 | module.exports = { 4 | conf: { 5 | aliases: [], 6 | name: "eval", 7 | owner: true, 8 | enabled: true, 9 | slash: false, 10 | options: [ 11 | { 12 | name: "komut", 13 | description: "Çalıştırılacak komut.", 14 | type: 3, 15 | required: true 16 | } 17 | ] 18 | }, 19 | 20 | /** 21 | * @returns {Promise} 22 | */ 23 | run: async ({ client, message, args, reply }) => { 24 | if (!args[0]) return; 25 | const code = args.join(" "); 26 | 27 | try { 28 | const result = clean(await eval(code)); 29 | if (result.includes(client.token)) return reply({ content: "Kancık seni .d" }); 30 | Util.splitMessage(`\`\`\`js\n${result}\`\`\``).forEach((x) => reply({ content: x })); 31 | } catch (err) { 32 | Util.splitMessage(`\`\`\`js\n${err}\`\`\``).forEach((x) => reply({ content: x })); 33 | } 34 | } 35 | }; 36 | 37 | function clean(text) { 38 | if (typeof text !== "string") text = require("util").inspect(text, { depth: 0 }); 39 | text = text.replace(/`/g, "`" + String.fromCharCode(8203)).replace(/@/g, "@" + String.fromCharCode(8203)); 40 | return text; 41 | } 42 | -------------------------------------------------------------------------------- /src/commands/help.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | 3 | module.exports = { 4 | conf: { 5 | aliases: ["help", "y", "h"], 6 | name: "yardım", 7 | enabled: true, 8 | slash: true 9 | }, 10 | 11 | slashOptions: new SlashCommandBuilder() 12 | .setName("yardım") 13 | .setDescription("Komutlar hakkında bilgi verir."), 14 | 15 | /** 16 | * @returns {Promise} 17 | */ 18 | run: async ({ client, reply, embed, prefix }) => { 19 | const list = client.commands 20 | .filter((x) => x.conf.help) 21 | .sort((a, b) => b.conf.help - a.conf.help) 22 | .map((x) => `\`${prefix}${x.conf.help}\``) 23 | .join("\n"); 24 | 25 | reply({ embeds: [embed.setDescription(list)] }); 26 | } 27 | }; 28 | -------------------------------------------------------------------------------- /src/commands/perm.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const { MessageActionRow, MessageSelectMenu } = require("discord.js"); 3 | const coin = require("../schemas/coin"); 4 | const conf = require("../configs/config.json"); 5 | 6 | module.exports = { 7 | conf: { 8 | aliases: ["perm"], 9 | name: "yetki", 10 | help: "yetki [yükselt/düşür] [kullanıcı]", 11 | enabled: true, 12 | slash: true 13 | }, 14 | 15 | slashOptions: new SlashCommandBuilder() 16 | .setName("yetki") 17 | .setDescription("Belirttiğiniz kullanıcının yetkisini düşürür/yükseltir.") 18 | .addStringOption((option) => option.setName("işlem").setDescription("Uygulamak istediğiniz işlem.").addChoice("yükselt", "yükselt").addChoice("düşür", "düşür").setRequired(true)) 19 | .addUserOption((option) => option.setName("kullanıcı").setDescription("Yetkisini düşürmek/yükseltmek istediğiniz kullanıcı.").setRequired(true)), 20 | 21 | /** 22 | * @returns {Promise} 23 | */ 24 | run: async ({ message, args, embed, reply, interaction }) => { 25 | const msgMember = interaction ? interaction.member : message.member; 26 | if (!msgMember.permissions.has(8)) return reply({ embeds: [embed.setDescription("Bu komutu kullanmak için yeterli yetkiniz bulunmuyor!")] }); 27 | const member = interaction ? interaction.options.getMember("kullanıcı") || interaction.member : message.mentions.members.first() || message.guild.members.cache.get(args[1]) || message.member; 28 | if (!conf.staffs.some((x) => member.roles.cache.has(x))) return reply({ embeds: [embed.setDescription("Bu kullanıcı bir yetkili değil!")] }); 29 | 30 | const operation = interaction ? interaction.options.getString("işlem") : args[0]; 31 | const data = (await coin.findOne({ guildID: member.guild.id, userID: member.user.id })) || { coin: 0 }; 32 | const roles = client.ranks.filter((x) => (operation === "yükselt" ? x.coin > data.coin : x.coin < data.coin)).sort((a, b) => b.coin - a.coin); 33 | const menu = new MessageActionRow().addComponents( 34 | new MessageSelectMenu().setCustomId("roles").addOptions( 35 | roles.map((x) => { 36 | const roleNames = 37 | x.role.length > 1 38 | ? x.role 39 | .slice(0, -1) 40 | .map((r) => member.guild.roles.cache.get(r).name) 41 | .join(", ") + 42 | " ve " + 43 | x.role.map((r) => member.guild.roles.cache.get(r).name).slice(-1) 44 | : x.role.map((r) => member.guild.roles.cache.get(r).name).join(""); 45 | return { 46 | label: roleNames, 47 | description: x.coin.toString() + " coin", 48 | value: x.coin.toString() 49 | }; 50 | }) 51 | ) 52 | ); 53 | if (roles.length > 0) reply({ embeds: [embed.setDescription(`Kullanıcının yetkisini ${operation}mek istediğiniz rolü seçin.`)], components: [menu] }); 54 | else return reply({ embeds: [embed.setDescription(`Bu kullanıcının yetkisini ${operation}ebileceğiniz bir rol bulunmuyor!`)] }); 55 | 56 | const collector = (interaction ? interaction : message).channel.createMessageComponentCollector({ 57 | filter: (i) => i.user.id === msgMember.user.id && i.customId === "roles", 58 | componentType: "SELECT_MENU", 59 | time: 15000 60 | }); 61 | 62 | collector.on("collect", async (i) => { 63 | const currentRank = client.ranks.filter((x) => x.role.some((r) => member.roles.cache.has(r)) && (operation === "yükselt" ? x.coin <= data.coin : x.coin >= data.coin)); 64 | const selectedRank = client.ranks.filter((x) => x.coin === parseInt(i.values[0]))[0]; 65 | currentRank.forEach((x) => x.role.forEach((r) => member.roles.remove(r).catch(() => {}))); 66 | await coin.updateOne({ guildID: member.guild.id, userID: member.user.id }, { $set: { coin: selectedRank.coin } }, { upsert: true }); 67 | selectedRank.role.forEach((x) => member.roles.add(x).catch(() => {})); 68 | i.update({ embeds: [embed.setDescription(`Kullanıcının yetkisi başarıyla ${Array.isArray(currentRank[0].role) ? currentRank[0].role.listRoles() : `<@&${currentRank[0].role}>`} yetkisinden ${Array.isArray(selectedRank.role) ? selectedRank.role.listRoles() : `<@&${selectedRank.role}>`} yetkisine ${operation}${operation === "yükselt" ? "ildi" : "üldü"}`)], components: [] }) 69 | }); 70 | } 71 | }; 72 | -------------------------------------------------------------------------------- /src/commands/rank.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const conf = require("../configs/config.json"); 3 | 4 | module.exports = { 5 | conf: { 6 | aliases: ["yetki"], 7 | name: "rank", 8 | help: "rank [ekle] [coin] [rol(ler)] / [sil] [coin] / [temizle] / [liste]", 9 | enabled: conf.coinSystem, 10 | slash: true 11 | }, 12 | 13 | slashOptions: new SlashCommandBuilder() 14 | .setName("rank") 15 | .setDescription("Rank sistemi işlemleri.") 16 | .addSubcommand((command) => 17 | command 18 | .setName("ekle") 19 | .setDescription("Rank ekleme işlemi.") 20 | .addIntegerOption((option) => option.setName("coin").setDescription("Rank'e kaç coinde ulaşılabileceği.").setRequired(true)) 21 | .addRoleOption((option) => option.setName("roller").setDescription("Rank'e ulaştığında verilen rol(ler).").setRequired(true)) 22 | ) 23 | .addSubcommand((command) => 24 | command 25 | .setName("sil") 26 | .setDescription("Rank silme işlemi.") 27 | .addIntegerOption((option) => option.setName("coin").setDescription("Kaç coinde ulaşılan rank'in silineceği.").setRequired(true)) 28 | ) 29 | .addSubcommand((command) => command.setName("temizle").setDescription("Bütün rank'leri silme işlemi.")) 30 | .addSubcommand((command) => command.setName("liste").setDescription("Bütün rank'lerin listesi.")), 31 | 32 | /** 33 | * @returns {Promise} 34 | */ 35 | run: async ({ client, message, args, embed, reply, interaction }) => { 36 | if (!conf.coinSystem) return reply({ embeds: [embed.setDescription("Coin sistemi kapalı olduğu için bu komutu kullanamazsınız!")] }); 37 | const member = interaction ? interaction.member : message.member; 38 | if (!member.permissions.has(8)) return; 39 | const coin = interaction ? interaction.options.getInteger("coin") : args[1]; 40 | if (["ekle", "add"].includes(args[0]) || interaction.options.getSubcommand() === "ekle") { 41 | if (!coin || isNaN(coin)) return reply({ embeds: [embed.setDescription("Eklenecek yetkinin coinini belirtmelisin!")] }); 42 | if (client.ranks.some((x) => x.coin === coin)) return reply({ embeds: [embed.setDescription(`${coin} coine ulaşıldığında verilecek roller zaten ayarlanmış!`)] }); 43 | const roles = interaction ? [interaction.options.getRole("roller")] : [...message.mentions.roles.values()]; 44 | if (!roles || !roles.length) return reply({ embeds: [embed.setDescription("Eklenecek yetkinin rol(leri) belirtmelisin!")] }); 45 | client.ranks = global.rankdb.push("ranks", { role: roles.map((x) => x.id), coin: parseInt(coin) }).sort((a, b) => a.coin - b.coin); 46 | reply({ embeds: [embed.setDescription(`${coin} coine ulaşıldığında verilecek roller ayarlandı! \nVerilecek Roller: ${roles.map((x) => `<@&${x.id}>`).join(", ")}`)] }); 47 | } else if (["sil", "delete", "remove"].includes(args[0]) || interaction.options.getSubcommand() === "sil") { 48 | if (!coin || isNaN(coin)) return reply({ embeds: [embed.setDescription("Silinecek yetkinin coinini belirtmelisin!")] }); 49 | if (!client.ranks.some((x) => x.coin === coin)) return reply({ embeds: [embed.setDescription(`${coin} coine ulaşıldığında verilecek roller ayarlanmamış!`)] }); 50 | client.ranks = global.rankdb 51 | .set( 52 | "ranks", 53 | client.ranks.filter((x) => x.coin !== coin) 54 | ) 55 | .sort((a, b) => a.coin - b.coin); 56 | reply({ embeds: [embed.setDescription(`${coin} coine ulaşıldığında verilecek roller silindi!`)] }); 57 | } else if (["temizle", "clear"].includes(args[0]) || interaction.options.getSubcommand() === "temizle") { 58 | if (!global.rankdb.get("ranks") || !global.rankdb.get("ranks").length) return reply({ embeds: [embed.setDescription("Rank sistemi tertemiz!")] }); 59 | global.rankdb.set("ranks", []); 60 | reply({ embeds: [embed.setDescription("Tüm yetkiler başarıyla temizlendi!")] }); 61 | } else if (["liste", "list"].includes(args[0]) || interaction.options.getSubcommand() === "liste") { 62 | const ranks = global.rankdb.get("ranks"); 63 | reply({ 64 | embeds: [ 65 | embed.setDescription( 66 | ranks && ranks.length 67 | ? ranks 68 | .sort((a, b) => b.coin - a.coin) 69 | .map((x) => `${Array.isArray(x.role) ? x.role.listRoles() : `<@&${x.role}>`}: ${x.coin}`) 70 | .join("\n") 71 | : "Rank ayarlanmamış!" 72 | ) 73 | ] 74 | }); 75 | } 76 | } 77 | }; 78 | -------------------------------------------------------------------------------- /src/commands/role.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const moment = require("moment"); 3 | require("moment-duration-format"); 4 | const messageUser = require("../schemas/messageUser"); 5 | const voiceUser = require("../schemas/voiceUser"); 6 | const coin = require("../schemas/coin"); 7 | const conf = require("../configs/config.json"); 8 | 9 | module.exports = { 10 | conf: { 11 | aliases: ["role"], 12 | name: "rol", 13 | help: "rol [rol]", 14 | enabled: true, 15 | slash: true 16 | }, 17 | 18 | slashOptions: new SlashCommandBuilder() 19 | .setName("rol") 20 | .setDescription("İstediğiniz rolün istatistiklerini gösterir.") 21 | .addRoleOption((option) => option.setName("rol").setDescription("İstatistiklerini görmek istediğiniz rol.").setRequired(true)), 22 | 23 | /** 24 | * @returns {Promise} 25 | */ 26 | run: async ({ message, args, embed, reply, interaction }) => { 27 | const member = interaction ? interaction.member : message.member; 28 | if (!member.permissions.has(8)) return; 29 | const role = interaction ? interaction.options.getRole("rol") : message.mentions.roles.first() || message.guild.roles.cache.get(args[0]); 30 | if (!role) return reply({ embeds: [embed.setDescription("Bir rol belirtmelisin!")] }); 31 | if (role.members.size === 0) return reply({ embeds: [embed.setDescription("Bu rol kimsede bulunmuyor!")] }); 32 | 33 | const messageData = async (type) => { 34 | let data = await messageUser.find({ guildID: member.guild.id }).sort({ topStat: -1 }); 35 | data = data.filter((x) => member.guild.members.cache.has(x.userID) && member.guild.members.cache.get(x.userID).roles.cache.has(role.id)); 36 | return data.length > 0 37 | ? data 38 | .splice(0, 5) 39 | .map((x, index) => `\`${index + 1}.\` <@${x.userID}> : \`${Number(x[type]).toLocaleString()} mesaj\``) 40 | .join("\n") 41 | : "Veri bulunmuyor!"; 42 | }; 43 | 44 | const voiceData = async (type) => { 45 | let data = await voiceUser.find({ guildID: member.guild.id }).sort({ topStat: -1 }); 46 | data = data.filter((x) => member.guild.members.cache.has(x.userID) && member.guild.members.cache.get(x.userID).roles.cache.has(role.id)); 47 | return data.length > 0 48 | ? data 49 | .splice(0, 5) 50 | .map((x, index) => `\`${index + 1}.\` <@${x.userID}> : \`${moment.duration(x[type]).format("H [saat], m [dakika] s [saniye]")}\``) 51 | .join("\n") 52 | : "Veri bulunmuyor!"; 53 | }; 54 | 55 | const coinData = async () => { 56 | let data = await coin.find({ guildID: member.guild.id }).sort({ coin: -1 }); 57 | data = data.filter((x) => member.guild.members.cache.has(x.userID) && member.guild.members.cache.get(x.userID).roles.cache.has(role.id)); 58 | return data.length > 0 59 | ? data 60 | .splice(0, 5) 61 | .map((x, index) => `\`${index + 1}.\` <@${x.userID}>: \`${Number(x.coin).toLocaleString()} coin\``) 62 | .join("\n") 63 | : "Veri bulunmuyor!"; 64 | }; 65 | 66 | embed.setAuthor(member.guild.name, member.guild.iconURL({ dynamic: true, size: 2048 })); 67 | embed.setThumbnail(member.guild.iconURL({ dynamic: true, size: 2048 })); 68 | embed.setDescription(` 69 | ${role.toString()} rolüne sahip üyelerin verileri 70 | **───────────────** 71 | 72 | **➥ Toplam Ses Bilgileri:** 73 | ${await voiceData("topStat")} 74 | 75 | **➥ Haftalık Ses Bilgileri:** 76 | ${await voiceData("weeklyStat")} 77 | 78 | **➥ Günlük Ses Bilgileri:** 79 | ${await voiceData("dailyStat")} 80 | 81 | **───────────────** 82 | 83 | **➥ Toplam Mesaj Bilgileri:** 84 | ${await messageData("topStat")} 85 | 86 | **➥ Haftalık Mesaj Bilgileri:** 87 | ${await messageData("weeklyStat")} 88 | 89 | **➥ Günlük Mesaj Bilgileri:** 90 | ${await messageData("dailyStat")} 91 | 92 | ${ 93 | conf.coinSystem 94 | ? ` 95 | **───────────────** 96 | 97 | **➥ Toplam Coin Bilgileri:** 98 | ${await coinData()} 99 | ` 100 | : "" 101 | } 102 | `); 103 | reply({ embeds: [embed] }); 104 | } 105 | }; 106 | -------------------------------------------------------------------------------- /src/commands/senkronize.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const { GuildMember, Role } = require("discord.js"); 3 | const coin = require("../schemas/coin"); 4 | const conf = require("../configs/config.json"); 5 | 6 | module.exports = { 7 | conf: { 8 | aliases: ["senkron", "sync"], 9 | name: "senkronize", 10 | help: "senkronize [kullanıcı/rol]", 11 | enabled: conf.coinSystem, 12 | slash: true, 13 | }, 14 | 15 | slashOptions: new SlashCommandBuilder() 16 | .setName("senkronize") 17 | .setDescription("Bir rolü veya kullanıcıyı senkronize eder.") 18 | .addMentionableOption((option) => option.setName("hedef").setDescription("Senkronize etmek istediğiniz kişi ya da rol.").setRequired(true)), 19 | 20 | /** 21 | * @returns {Promise} 22 | */ 23 | run: async ({ client, message, args, embed, reply, interaction }) => { 24 | if (!conf.coinSystem) return reply({ embeds: [embed.setDescription("Coin sistemi kapalı olduğu için bu komutu kullanamazsınız!")] }); 25 | if ((interaction && !interaction.member.permissions.has(8)) || (message && !message.permissions.has(8))) return; 26 | const target = interaction?.options.getMentionable("hedef"); 27 | const member = interaction ? interaction.guild.members.cache.get(target.id) : message.mentions.members.first() || message.guild.members.cache.get(args[0]); 28 | const role = interaction ? interaction.guild.roles.cache.get(target.id) : message.mentions.roles.first() || message.guild.roles.cache.get(args[0]); 29 | if (member) { 30 | if (client.ranks.some((x) => member.hasRole(x.role))) { 31 | let rank = client.ranks.filter((x) => member.hasRole(x.role)); 32 | rank = rank[rank.length - 1]; 33 | await coin.updateOne({ guildID: member.guild.id, userID: member.user.id }, { $set: { coin: rank.coin } }, { upsert: true }); 34 | reply({ 35 | embeds: [ 36 | embed.setDescription( 37 | `${member.toString()} üyesinde ${Array.isArray(rank.role) ? rank.role.map((x) => `<@&${x}>`).join(", ") : `<@&${rank.role}>`} rolü bulundu ve coini ${rank.coin} olarak değiştirildi!` 38 | ) 39 | ] 40 | }); 41 | } else return reply({ embeds: [embed.setDescription(`${member.toString()} üyesinde sistemde ayarlı bir rol bulunamadı!`)] }); 42 | } else if (role) { 43 | if (role.members.length === 0) return reply({ embeds: [embed.setDescription("Bu rolde üye bulunmuyor!")] }); 44 | role.members.forEach(async (member) => { 45 | if (member.user.bot) return; 46 | if (client.ranks.some((x) => member.hasRole(x.role))) { 47 | let rank = client.ranks.filter((x) => member.hasRole(x.role)); 48 | rank = rank[rank.length - 1]; 49 | await coin.updateOne({ guildID: role.guild.id, userID: member.user.id }, { $set: { coin: rank.coin } }, { upsert: true }); 50 | reply({ 51 | embeds: [ 52 | embed.setDescription( 53 | `${member.toString()} üyesinde ${Array.isArray(rank.role) ? rank.role.map((x) => `<@&${x}>`).join(", ") : `<@&${rank.role}>`} rolü bulundu ve coini ${rank.coin} olarak değiştirildi!` 54 | ) 55 | ] 56 | }); 57 | } else return reply({ embeds: [embed.setDescription(`${member.toString()} üyesinde sistemde ayarlı bir rol bulunamadı!`)] }); 58 | }); 59 | } else return reply({ embeds: [embed.setDescription("Geçerli bir argüman belirtmelisin!")] }); 60 | } 61 | }; 62 | -------------------------------------------------------------------------------- /src/commands/stat.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const moment = require("moment"); 3 | require("moment-duration-format"); 4 | const conf = require("../configs/config.json"); 5 | const messageUserChannel = require("../schemas/messageUserChannel"); 6 | const voiceUserChannel = require("../schemas/voiceUserChannel"); 7 | const messageUser = require("../schemas/messageUser"); 8 | const voiceUser = require("../schemas/voiceUser"); 9 | const voiceUserParent = require("../schemas/voiceUserParent"); 10 | 11 | module.exports = { 12 | conf: { 13 | aliases: [], 14 | name: "stat", 15 | help: "stat [kullanıcı]?", 16 | enabled: true, 17 | slash: true 18 | }, 19 | 20 | slashOptions: new SlashCommandBuilder() 21 | .setName("stat") 22 | .setDescription("Belirtilen kullanıcının ya da sizin istatistiklerinizi gösterir.") 23 | .addUserOption((option) => option.setName("kullanıcı").setDescription("İstatistikleri gösterilecek olan kullanıcı.").setRequired(false)), 24 | 25 | /** 26 | * @returns {Promise} 27 | */ 28 | run: async ({ client, message, reply, embed, interaction, args }) => { 29 | const guild = interaction ? interaction.guild : message.guild; 30 | const member = interaction ? interaction.options.getMember("kullanıcı") || interaction.member : message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; 31 | const category = async (parentsArray) => { 32 | const data = await voiceUserParent.find({ guildID: guild.id, userID: member.user.id }); 33 | const voiceUserParentData = data.filter((x) => parentsArray.includes(x.parentID)); 34 | let voiceStat = 0; 35 | for (var i = 0; i <= voiceUserParentData.length; i++) { 36 | voiceStat += voiceUserParentData[i] ? voiceUserParentData[i].parentData : 0; 37 | } 38 | return moment.duration(voiceStat).format("H [saat], m [dakika] s [saniye]"); 39 | }; 40 | 41 | const Active1 = await messageUserChannel.find({ guildID: guild.id, userID: member.user.id }).sort({ channelData: -1 }); 42 | const Active2 = await voiceUserChannel.find({ guildID: guild.id, userID: member.user.id }).sort({ channelData: -1 }); 43 | const voiceLength = Active2 ? Active2.length : 0; 44 | let voiceTop; 45 | let messageTop; 46 | Active1.length > 0 47 | ? (messageTop = Active1.splice(0, 5) 48 | .map((x) => `<#${x.channelID}>: \`${Number(x.channelData).toLocaleString()} mesaj\``) 49 | .join("\n")) 50 | : (messageTop = "Veri bulunmuyor."); 51 | Active2.length > 0 52 | ? (voiceTop = Active2.splice(0, 5) 53 | .map((x) => `<#${x.channelID}>: \`${moment.duration(x.channelData).format("H [saat], m [dakika] s [saniye]")}\``) 54 | .join("\n")) 55 | : (voiceTop = "Veri bulunmuyor."); 56 | 57 | const messageData = await messageUser.findOne({ guildID: guild.id, userID: member.user.id }); 58 | const voiceData = await voiceUser.findOne({ guildID: guild.id, userID: member.user.id }); 59 | 60 | const messageDaily = messageData ? messageData.dailyStat : 0; 61 | const messageWeekly = messageData ? messageData.weeklyStat : 0; 62 | 63 | const voiceDaily = moment.duration(voiceData ? voiceData.dailyStat : 0).format("H [saat], m [dakika] s [saniye]"); 64 | const voiceWeekly = moment.duration(voiceData ? voiceData.weeklyStat : 0).format("H [saat], m [dakika] s [saniye]"); 65 | 66 | const filteredParents = guild.channels.cache.filter( 67 | (x) => 68 | x.type === "category" && 69 | !conf.parents.publicParents.includes(x.id) && 70 | !conf.parents.registerParents.includes(x.id) && 71 | !conf.parents.solvingParents.includes(x.id) && 72 | !conf.parents.privateParents.includes(x.id) && 73 | !conf.parents.aloneParents.includes(x.id) && 74 | !conf.parents.funParents.includes(x.id) 75 | ); 76 | 77 | embed.setThumbnail(member.user.avatarURL({ dynamic: true, size: 2048 })); 78 | embed.setDescription(` ${member.user.toString()} (${member.roles.highest.toString()}) kullanıcısının genel aktiflik istatistikleri`); 79 | embed.addField( 80 | "**➥ Ses Kategori Bilgileri:**", 81 | ` 82 | • Toplam: \`${moment.duration(voiceData ? voiceData.topStat : 0).format("H [saat], m [dakika] s [saniye]")}\` 83 | • Public Odalar: \`${await category(conf.parents.publicParents)}\` 84 | • Kayıt Odaları: \`${await category(conf.parents.registerParents)}\` 85 | • Sorun Çözme & Terapi: \`${await category(conf.parents.solvingParents)}\` 86 | • Private Odalar: \`${await category(conf.parents.privateParents)}\` 87 | • Game Odalar: \`${await category(conf.parents.aloneParents)}\` 88 | • Oyun & Eğlence Odaları: \`${await category(conf.parents.funParents)}\` 89 | • Diğer: \`${await category(filteredParents.map((x) => x.id))}\`` 90 | ); 91 | embed.addField(`**➥ Sesli Kanal Bilgileri: (\`Toplam ${voiceLength} kanal\`)**`, voiceTop); 92 | embed.addField(`**➥ Mesaj Bilgileri: (\`Toplam ${messageData ? messageData.topStat : 0} mesaj\`)**`, messageTop); 93 | embed.addField( 94 | "Ses Verileri:", 95 | ` 96 | \`•\` Haftalık Ses: \`${voiceWeekly}\` 97 | \`•\` Günlük Ses: \`${voiceDaily}\` 98 | `, 99 | true 100 | ); 101 | embed.addField( 102 | "Mesaj Verileri:", 103 | ` 104 | \`•\` Haftalık Mesaj: \`${Number(messageWeekly).toLocaleString()} mesaj\` 105 | \`•\` Günlük Mesaj: \`${Number(messageDaily).toLocaleString()} mesaj\` 106 | `, 107 | true 108 | ); 109 | reply({ embeds: [embed] }); 110 | } 111 | }; 112 | -------------------------------------------------------------------------------- /src/commands/tagaldır.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const coin = require("../schemas/coin"); 3 | const taggeds = require("../schemas/taggeds"); 4 | const conf = require("../configs/config.json"); 5 | const { MessageActionRow, MessageButton } = require("discord.js"); 6 | 7 | module.exports = { 8 | conf: { 9 | aliases: ["tag-aldır"], 10 | name: "tagaldır", 11 | help: "tagaldır [kullanıcı]", 12 | enabled: conf.coinSystem, 13 | slash: true 14 | }, 15 | 16 | slashOptions: new SlashCommandBuilder() 17 | .setName("tagaldır") 18 | .setDescription("Bir kullanıcıya tag aldırırsınız.") 19 | .addUserOption((option) => option.setName("kullanıcı").setDescription("Tag aldırdığınız kullanıcı.").setRequired(true)), 20 | 21 | /** 22 | * @returns {Promise} 23 | */ 24 | run: async ({ message, args, embed, reply, interaction }) => { 25 | if (!conf.coinSystem) return reply({ embeds: [embed.setDescription("Coin sistemi kapalı olduğu için bu komutu kullanamazsınız!")] }); 26 | const msgMember = interaction ? interaction.member : message.member; 27 | if (!conf.staffs.some((x) => msgMember.roles.cache.has(x))) return; 28 | const member = interaction ? interaction.options.getMember("kullanıcı") : message.mentions.members.first() || message.guild.members.cache.get(args[0]); 29 | if (!member) return reply({ embeds: [embed.setDescription("Bir üye belirtmelisin!")] }); 30 | if (!member.user.username.includes(conf.tag)) return reply({ embeds: [embed.setDescription("Bu üye taglı değil!")] }); 31 | const taggedData = await taggeds.findOne({ guildID: member.guild.id, userID: msgMember.user.id }); 32 | if (taggedData && taggedData.taggeds.includes(member.user.id)) return reply({ embeds: [embed.setDescription("Bu üyeye zaten daha önce tag aldırmışsın!")] }); 33 | 34 | const buttons = new MessageActionRow().addComponents( 35 | new MessageButton().setCustomId("confirm").setLabel("Onayla").setStyle("SUCCESS"), 36 | new MessageButton().setCustomId("deny").setLabel("Reddet").setStyle("DANGER") 37 | ); 38 | await reply({ content: member.toString(), components: [buttons], embeds: [embed.setDescription(`${msgMember.toString()} üyesi sana tag aldırmak istiyor. Kabul ediyor musun?`)] }); 39 | 40 | const collector = (interaction ? interaction : message).channel.createMessageComponentCollector({ filter: (i) => i.user.id === member.user.id, time: 15000 }); 41 | 42 | collector.on("collect", async (i) => { 43 | if (i.customId === "confirm") { 44 | await coin.updateOne({ guildID: member.guild.id, userID: msgMember.user.id }, { $inc: { coin: conf.points.taggedCoin } }, { upsert: true }); 45 | embed.setColor("GREEN").setDescription(`${member.toString()} üyesine başarıyla tag aldırıldı!`); 46 | i.update({ embeds: [embed], components: [] }); 47 | await taggeds.updateOne({ guildID: member.guild.id, userID: msgMember.user.id }, { $push: { taggeds: member.user.id } }, { upsert: true }); 48 | msgMember.updateTask(member.guild.id, "taglı", 1, interaction ? interaction.channel : message.channel); 49 | } else { 50 | embed.setColor("RED").setDescription(`${member.toString()} üyesi, tag aldırma teklifini reddetti!`); 51 | i.update({ embeds: [embed], components: [] }); 52 | } 53 | }); 54 | } 55 | }; 56 | -------------------------------------------------------------------------------- /src/commands/task.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const { Role } = require("discord.js"); 3 | const task = require("../schemas/task"); 4 | const conf = require("../configs/config.json"); 5 | const ms = require("ms"); 6 | 7 | module.exports = { 8 | conf: { 9 | aliases: ["task"], 10 | name: "görev", 11 | help: "görev [ver] [kullanıcı] [invite/ses/mesaj/taglı/kayıt] [görev süresi] [miktar (eğer görev ses ise dakika cinsinden miktar)] [ödül miktarı] [isterseniz görevin geçerli olacağı kanal(lar)] / [sil] [görev ID] / al [görev tipi]? / şema [ekle/sil/liste/bilgi]", 12 | enabled: conf.coinSystem, 13 | slash: true 14 | }, 15 | 16 | slashOptions: new SlashCommandBuilder() 17 | .setName("görev") 18 | .setDescription("Görev işlemleri.") 19 | .addSubcommand((command) => 20 | command 21 | .setName("ver") 22 | .setDescription("Belirtilen kullanıcıya görev verir.") 23 | .addMentionableOption((option) => option.setName("hedef").setDescription("Görev vereceğiniz kullanıcı ya da rol.").setRequired(true)) 24 | .addStringOption((option) => 25 | option 26 | .setName("tip") 27 | .setDescription("Vereceğiniz görevin tipi.") 28 | .addChoice("invite", "invite") 29 | .addChoice("ses", "ses") 30 | .addChoice("mesaj", "mesaj") 31 | .addChoice("taglı", "taglı") 32 | .addChoice("kayıt", "kayıt") 33 | .setRequired(true) 34 | ) 35 | .addStringOption((option) => option.setName("süre").setDescription("Vereceğiniz görevin süresi.").setRequired(true)) 36 | .addIntegerOption((option) => option.setName("miktar").setDescription("Görevin tamamlanması için uygulanması gereken miktar.").setRequired(true)) 37 | .addIntegerOption((option) => option.setName("ödül").setDescription("Görev tamamlanınca verilecek ödül coin miktarı.").setRequired(true)) 38 | .addChannelOption((option) => option.setName("kanal").setDescription("Görevin geçerli olacağı kanal.").setRequired(false)) 39 | ) 40 | .addSubcommand((command) => 41 | command 42 | .setName("sil") 43 | .setDescription("Belirtilen görevi siler.") 44 | .addIntegerOption((option) => option.setName("id").setDescription("Silinecek görev ID'si.").setRequired(true)) 45 | ) 46 | .addSubcommand((command) => 47 | command 48 | .setName("al") 49 | .setDescription("Görev alırsınız.") 50 | .addStringOption((option) => 51 | option 52 | .setName("tip") 53 | .setDescription("Almak istediğiniz görev tipi.") 54 | .addChoice("ses", "ses") 55 | .addChoice("mesaj", "mesaj") 56 | .addChoice("taglı", "taglı") 57 | .addChoice("kayıt", "kayıt") 58 | .setRequired(false) 59 | ) 60 | ) 61 | .addSubcommandGroup((group) => 62 | group 63 | .setName("şema") 64 | .setDescription("Görev şeması işlemleri.") 65 | .addSubcommand((command) => 66 | command 67 | .setName("ekle") 68 | .setDescription("Görev şeması ekler.") 69 | .addStringOption((option) => 70 | option 71 | .setName("tip") 72 | .setDescription("Vereceğiniz görevin tipi.") 73 | .addChoice("invite", "invite") 74 | .addChoice("ses", "ses") 75 | .addChoice("mesaj", "mesaj") 76 | .addChoice("taglı", "taglı") 77 | .addChoice("kayıt", "kayıt") 78 | .setRequired(true) 79 | ) 80 | .addStringOption((option) => option.setName("süre").setDescription("Vereceğiniz görevin süresi.").setRequired(true)) 81 | .addIntegerOption((option) => option.setName("miktar").setDescription("Görevin tamamlanması için uygulanması gereken miktar.").setRequired(true)) 82 | .addIntegerOption((option) => option.setName("ödül").setDescription("Görev tamamlanınca verilecek ödül coin miktarı.").setRequired(true)) 83 | .addChannelOption((option) => option.setName("kanal").setDescription("Görevin geçerli olacağı kanal.").setRequired(false)) 84 | ) 85 | .addSubcommand((command) => 86 | command 87 | .setName("ver") 88 | .setDescription("Belirtilen kullanıcıya ya da role belirtilen şemada bulunan görevi verir.") 89 | .addMentionableOption((option) => option.setName("hedef").setDescription("Görev verilecek kullanıcı ya da rol.").setRequired(true)) 90 | .addIntegerOption((option) => option.setName("id").setDescription("Görev olarak verilecek şema ID'si.").setRequired(true)) 91 | ) 92 | .addSubcommand((command) => 93 | command 94 | .setName("sil") 95 | .setDescription("Belirtilen şemayı siler.") 96 | .addIntegerOption((option) => option.setName("id").setDescription("Silinecek şema ID'si.").setRequired(true)) 97 | ) 98 | .addSubcommand((command) => 99 | command 100 | .setName("bilgi") 101 | .setDescription("Belirtilen şema hakkında bilgi verir.") 102 | .addIntegerOption((option) => option.setName("id").setDescription("Bilgileri gösterilecek olan şema ID'si.").setRequired(true)) 103 | ) 104 | .addSubcommand((command) => command.setName("liste").setDescription("Görev şemalarını listeler.")) 105 | ), 106 | 107 | /** 108 | * @returns {Promise} 109 | */ 110 | run: async ({ client, message, args, embed, reply, interaction }) => { 111 | if (!conf.coinSystem) return reply({ embeds: [embed.setDescription("Coin sistemi kapalı olduğu için bu komutu kullanamazsınız!")] }); 112 | const type = interaction ? interaction.options.getString("tip") : args[2]; 113 | const duration = ms(interaction ? interaction.options.getString("süre") || 1 : args[3]); 114 | let count = interaction ? interaction.options.getInteger("miktar") : args[4]; 115 | const prizeCount = interaction ? interaction.options.getInteger("ödül") : args[5]; 116 | const channels = interaction ? [interaction.options.getChannel("kanal")].filter(Boolean) : [...message.mentions.channels.values()]; 117 | const msgMember = interaction ? interaction.member : msgMember; 118 | embed.setThumbnail("https://img.itch.zone/aW1nLzIzNzE5MzEuZ2lm/original/GcEpW9.gif"); 119 | if ((interaction && interaction.options.getSubcommand() === "ver") || ["ver", "give"].includes(args[0])) { 120 | if (!msgMember.permissions.has(8)) return reply({ embeds: [embed.setDescription("Yeterli yetkin bulunmuyor!")] }); 121 | const member = interaction ? interaction.options.getMentionable("hedef") : message.mentions.members.first() || message.guild.members.cache.get(args[1]); 122 | const target = interaction ? interaction.options.getMentionable("hedef") : message.mentions.roles.first() || member; 123 | if (!target) return reply({ embeds: [embed.setDescription("Bir üye ya da rol belirtmelisin!")] }); 124 | if (member && !conf.staffs.some((x) => member.roles.cache.has(x))) return reply({ embeds: [embed.setDescription("Bu üye bir yetkili değil!")] }); 125 | if (!type || !["invite", "ses", "mesaj", "taglı", "kayıt", "şema", "schema"].includes(type)) return reply({ embeds: [embed.setDescription("Verilecek görev tipini belirtmelisin!")] }); 126 | if (type === "ses") count = 1000 * 60 * count; 127 | if (!duration) return reply({ embeds: [embed.setDescription("Görev süresini belirtmelisin!")] }); 128 | if (!count || isNaN(count)) return reply({ embeds: [embed.setDescription("Bir miktar belirtmelisin!")] }); 129 | if (!prizeCount || isNaN(prizeCount)) return reply({ embeds: [embed.setDescription("Bir ödül miktarı belirtmelisin!")] }); 130 | let taskMessage; 131 | switch (type) { 132 | case "invite": 133 | taskMessage = `**Sunucumuza ${count} kişi davet et!**`; 134 | break; 135 | case "mesaj": 136 | taskMessage = channels.length 137 | ? `**${channels.map((x) => `<#${x}>`).join(", ")} ${channels.length > 1 ? "kanallarında" : "kanalında"} ${count} mesaj at!**` 138 | : `**Metin kanallarında ${count} mesaj at!**`; 139 | break; 140 | case "ses": 141 | taskMessage = channels.length 142 | ? `**${channels.map((x) => `<#${x}>`).join(", ")} ${channels.length > 1 ? "kanallarında" : "kanalında"} ${count / 1000 / 60} dakika vakit geçir!` 143 | : `**Seste ${count / 1000 / 60} dakika vakit geçir!**`; 144 | break; 145 | case "taglı": 146 | taskMessage = `**${count} kişiye tag aldır!**`; 147 | break; 148 | case "kayıt": 149 | taskMessage = `**Sunucumuzda ${count} kişi kayıt et!**`; 150 | break; 151 | } 152 | if (target instanceof Role) { 153 | const members = target.members.filter((x) => conf.staffs.some((r) => x.roles.cache.has(r))); 154 | if (!members.size) return reply({ embeds: [embed.setDescription(`${target.toString()} rolü olan kimse yetkili değil!`)] }); 155 | members.forEach(async (x) => await x.giveTask(x.guild.id, type, count, prizeCount, true, duration, channels.length ? channels.map((x) => x.id) : null, taskMessage)); 156 | reply({ 157 | embeds: [embed.setDescription(`${target.toString()} rolüne sahip olan tüm üyelere başarıyla ${type} görevi verildi! \nGörev verilen üyeler: ${members.map((x) => x.toString()).join(", ")}`)] 158 | }); 159 | } else { 160 | await member.giveTask(member.guild.id, type, count, prizeCount, true, duration, channels.length ? channels.map((x) => x.id) : null, taskMessage); 161 | reply({ embeds: [embed.setDescription(`${member.toString()} üyesine başarıyla ${type} görevi verildi!`)] }); 162 | } 163 | } else if ((interaction && interaction.options.getSubcommand() === "sil") || ["sil", "delete"].includes(args[0])) { 164 | if (!msgMember.permissions.has(8)) return reply({ embeds: [embed.setDescription("Yeterli yetkin bulunmuyor!")] }); 165 | const id = interaction ? interaction.options.getInteger("id") : args[1]; 166 | if (!id || isNaN(id)) return reply({ embeds: [embed.setDescription("Bir görev ID'si belirtmelisin!")] }); 167 | await task.deleteOne({ guildID: msgMember.guild.id, id }); 168 | reply({ embeds: [embed.setDescription(`${id} ID'li görev başarıyla silindi!`)] }); 169 | } else if ((interaction && interaction.options.getSubcommand() === "al") || ["al", "take"].includes(args[0])) { 170 | if (!conf.staffs.some((x) => msgMember.roles.cache.has(x))) return reply({ embeds: [embed.setDescription("Bu komutu kullanabilmek için yetkili olmalısın!")] }); 171 | if (!client.tasks.length) return reply({ embeds: [embed.setDescription("Sunucuda herhangi bir görev şeması oluşturulmamış!")] }); 172 | const task = client.tasks.random(); 173 | await msgMember.giveTask(msgMember.guild.id, task.type, task.count, task.prizeCount, true, task.duration); 174 | embed.setDescription(` 175 | Başarıyla bir görev aldın! 176 | 177 | Görev Tipi: \`${task.type}\` 178 | Görev Süresi: \`${ms(task.duration).replace("h", " saat").replace("m", " dakika").replace("s", " saniye")}\` 179 | Görev Tamamlama Sayısı: \`${task.type === "ses" ? task.count / 1000 / 60 + " dakika" : task.count}\` 180 | Görev Ödülü: \`${task.prizeCount} coin\` 181 | `); 182 | reply({ embeds: [embed] }); 183 | } else if ((interaction && interaction.options.getSubcommandGroup() === "şema") || ["şema", "schema"].includes(args[0])) { 184 | if (!msgMember.permissions.has(8)) return reply({ embeds: [embed.setDescription("Yeterli yetkin bulunmuyor!")] }); 185 | if ((interaction && interaction.options.getSubcommandGroup() === "şema" && interaction.options.getSubcommand() === "ekle") || ["ekle", "add"].includes(args[1])) { 186 | if (!type || !["invite", "ses", "mesaj", "taglı", "kayıt", "şema", "schema"].includes(type)) return reply({ embeds: [embed.setDescription("Görev tipini belirtmelisin!")] }); 187 | if (type === "ses") count = 1000 * 60 * count; 188 | if (!duration) return reply({ embeds: [embed.setDescription("Görev süresini belirtmelisin!")] }); 189 | if (!count || isNaN(count)) return reply({ embeds: [embed.setDescription("Bir miktar belirtmelisin!")] }); 190 | if (!prizeCount || isNaN(prizeCount)) return reply({ embeds: [embed.setDescription("Bir ödül miktarı belirtmelisin!")] }); 191 | client.tasks = global.rankdb.push("tasks", { id: client.tasks.length + 1, type, duration, count, prizeCount, channels: channels.length && channels.map((x) => x.id) }); 192 | embed.setDescription(` 193 | Başarıyla yeni bir görev şeması eklendi! 194 | 195 | Şema ID: \`${client.tasks.length}\` 196 | Görev Tipi: \`${type}\` 197 | Görev Süresi: \`${ms(duration).replace("h", " saat").replace("m", " dakika").replace("s", " saniye")}\` 198 | Görev Tamamlama Sayısı: \`${task.type === "ses" ? count / 1000 / 60 + " dakika" : count}\` 199 | Görev Ödülü: \`${prizeCount} coin\` 200 | `); 201 | reply({ embeds: [embed] }); 202 | } else if ((interaction && interaction.options.getSubcommandGroup() === "şema" && interaction.options.getSubcommand() === "ver") || ["ver", "give"].includes(args[1])) { 203 | const member = interaction ? interaction.options.getMentionable("hedef") : message.mentions.members.first() || message.guild.members.cache.get(args[1]); 204 | const target = interaction ? interaction.options.getMentionable("hedef") : message.mentions.roles.first() || member; 205 | if (!target) return reply({ embeds: [embed.setDescription("Bir üye ya da rol belirtmelisin!")] }); 206 | const id = interaction ? interaction.options.getInteger("id") : args[3]; 207 | if (!id || isNaN(id)) return reply({ embeds: [embed.setDescription("Bir şema ID'si belirtmelisin!")] }); 208 | const schema = client.tasks.find((x) => x.id === parseInt(id)); 209 | if (!schema) return reply({ embeds: [embed.setDescription(`${id} ID'li bir görev şeması bulunamadı!`)] }); 210 | if (target instanceof Role) { 211 | const members = target.members.filter((x) => conf.staffs.some((r) => x.roles.cache.has(r))); 212 | members.forEach(async (x) => await x.giveTask(x.guild.id, schema.type, schema.count, schema.prizeCount, true, schema.duration, schema.channels.length ? channels.map((x) => x.id) : null)); 213 | reply({ 214 | embeds: [ 215 | embed.setDescription( 216 | `${target.toString()} rolüne sahip olan tüm üyelere başarıyla ${id} ID'li şemadan görevi verildi! \nGörev verilen üyeler: ${members.map((x) => x.toString()).join(", ")}` 217 | ) 218 | ] 219 | }); 220 | } else { 221 | await member.giveTask(member.guild.id, schema.type, schema.count, schema.prizeCount, true, schema.duration, schema.channels ? channels.map((x) => x.id) : null); 222 | reply({ embeds: [embed.setDescription(`${member.toString()} üyesine başarıyla ${id} ID'li şemadan görevi verildi!`)] }); 223 | } 224 | } else if ((interaction && interaction.options.getSubcommandGroup() === "şema" && interaction.options.getSubcommand() === "sil") || ["sil", "delete"].includes(args[1])) { 225 | const id = interaction ? interaction.options.getInteger("id") : args[2]; 226 | if (client.tasks.filter((x) => x.id !== id).length !== 0) return reply({ embeds: [embed.setDescription(`${id} ID'li bir görev şeması bulunamadı!`)] }); 227 | client.tasks = global.rankdb.set( 228 | "tasks", 229 | client.tasks.filter((x) => x.id !== id) 230 | ); 231 | reply({ embeds: [embed.setDescription(`${id} ID'li görev şeması başarıyla silindi!`)] }); 232 | } else if ((interaction && interaction.options.getSubcommandGroup() === "şema" && interaction.options.getSubcommand() === "liste") || ["liste", "list"].includes(args[1])) 233 | reply({ 234 | embeds: [ 235 | embed.setDescription( 236 | client.tasks.length ? client.tasks.map((x) => `\`#${x.id}\` ${x.type} ${x.count} ${x.prizeCount} ${x.channels ? x.channels.map((x) => `<#${x}>`) : ""}`).join("\n") : "Veri bulunamadı!" 237 | ) 238 | ] 239 | }); 240 | else if ((interaction && interaction.options.getSubcommandGroup() === "şema" && interaction.options.getSubcommand() === "bilgi") || ["bilgi", "info"].includes(args[1])) { 241 | const id = interaction ? interaction.options.getInteger("id") : args[2]; 242 | if (!id) return reply({ embeds: [embed.setDescription("Bir şema ID'si belirtmelisin!")] }); 243 | const schema = client.tasks.find((x) => x.id === parseInt(id)); 244 | if (!schema) return reply({ embeds: [embed.setDescription(`${id} ID'li bir görev şeması bulunamadı!`)] }); 245 | embed.setDescription(` 246 | ${id} ID'li görev şemasının bilgileri; 247 | 248 | Görev Tipi: \`${schema.type}\` 249 | Görev Süresi: \`${ms(schema.duration).replace("h", " saat").replace("m", " dakika").replace("s", " saniye")}\` 250 | Görev Tamamlama Sayısı: \`${type === "ses" ? schema.count / 1000 / 60 + " dakika" : schema.count}\` 251 | Görev Ödülü: \`${schema.prizeCount} coin\` 252 | `); 253 | reply({ embeds: [embed] }); 254 | } 255 | } 256 | } 257 | }; 258 | -------------------------------------------------------------------------------- /src/commands/tasks.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const task = require("../schemas/task"); 3 | const conf = require("../configs/config.json"); 4 | const moment = require("moment"); 5 | require("moment-duration-format"); 6 | 7 | module.exports = { 8 | conf: { 9 | aliases: ["tasks"], 10 | name: "görevler", 11 | help: "görevler [kullanıcı]?", 12 | enabled: conf.coinSystem, 13 | slash: true 14 | }, 15 | 16 | slashOptions: new SlashCommandBuilder() 17 | .setName("görevler") 18 | .setDescription("Belirtilen kullanıcının ya da sizin görevlerinizi gösterir.") 19 | .addUserOption((option) => option.setName("kullanıcı").setDescription("Görevleri gösterilecek olan kullanıcı.").setRequired(false)), 20 | 21 | /** 22 | * @returns {Promise} 23 | */ 24 | run: async ({ client, message, args, embed, reply, interaction }) => { 25 | if (!conf.coinSystem) return reply({ embeds: [embed.setDescription("Coin sistemi kapalı olduğu için bu komutu kullanamazsınız!")] }); 26 | const member = interaction 27 | ? interaction.options.getUser("kullanıcı") ? interaction.guild.members.cache.get(interaction.options.getUser("kullanıcı").id) : interaction.member 28 | : message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; 29 | const tasks = await task.find({ guildID: member.guild.id, userID: member.user.id }); 30 | embed.setThumbnail("https://img.itch.zone/aW1nLzIzNzE5MzEuZ2lm/original/GcEpW9.gif"); 31 | reply({ 32 | embeds: [ 33 | embed.setDescription(` 34 | Toplam Görev Sayısı: \`${tasks.length}\` 35 | Tamamlanmış Görev Sayısı: \`${tasks.filter((x) => x.completed).length}\` 36 | Tamamlanmamış Görev Sayısı: \`${tasks.filter((x) => !x.completed).length}\` 37 | Aktif Görev Sayısı: \`${tasks.filter((x) => x.active).length}\` 38 | 39 | ${tasks 40 | .filter((x) => x.active) 41 | .map( 42 | (x) => 43 | `\`#${x.id}\` ${x.message} \n${ 44 | x.completedCount >= x.count 45 | ? conf.emojis.coin + " **Tamamlandı!**" 46 | : `${client.progressBar(x.completedCount, x.count, 8)} \`${ 47 | x.type === "ses" 48 | ? `${moment.duration(x.completedCount).format("H [saat], m [dk], s [sn]")} / ${moment.duration(x.count).format("H [saat], m [dk], s [sn]")}` 49 | : `${x.completedCount} / ${x.count}` 50 | }\` \nKalan Süre: \`${x.finishDate - Date.now() > 0 ? moment.duration(x.finishDate - Date.now()).format("H [saat], m [dakika] s [saniye]") : "0 saniye"}\` \nÖdül: ${conf.emojis.coin} \`${x.prizeCount} coin\`` 51 | }` 52 | ) 53 | .join("\n\n")} 54 | `) 55 | ] 56 | }); 57 | } 58 | }; 59 | -------------------------------------------------------------------------------- /src/commands/top.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const moment = require("moment"); 3 | require("moment-duration-format"); 4 | const messageGuild = require("../schemas/messageGuild"); 5 | const messageGuildChannel = require("../schemas/messageGuildChannel"); 6 | const voiceGuild = require("../schemas/voiceGuild"); 7 | const voiceGuildChannel = require("../schemas/voiceGuildChannel"); 8 | const messageUser = require("../schemas/messageUser"); 9 | const voiceUser = require("../schemas/voiceUser"); 10 | const coin = require("../schemas/coin"); 11 | const conf = require("../configs/config.json"); 12 | 13 | module.exports = { 14 | conf: { 15 | aliases: [], 16 | name: "top", 17 | help: "top", 18 | enabled: true, 19 | slash: true 20 | }, 21 | 22 | slashOptions: new SlashCommandBuilder().setName("top").setDescription("Sunucunun toplam istatistiklerini gösterir."), 23 | 24 | /** 25 | * @returns {Promise} 26 | */ 27 | run: async ({ message, embed, reply, interaction }) => { 28 | const guild = interaction ? interaction.guild : message.guild; 29 | const messageChannelData = await messageGuildChannel.find({ guildID: guild.id }).sort({ channelData: -1 }); 30 | const voiceChannelData = await voiceGuildChannel.find({ guildID: guild.id }).sort({ channelData: -1 }); 31 | const messageUsersData = await messageUser.find({ guildID: guild.id }).sort({ topStat: -1 }); 32 | const voiceUsersData = await voiceUser.find({ guildID: guild.id }).sort({ topStat: -1 }); 33 | const messageGuildData = await messageGuild.findOne({ guildID: guild.id }); 34 | const voiceGuildData = await voiceGuild.findOne({ guildID: guild.id }); 35 | const coinData = await coin.find({ guildID: guild.id }).sort({ coin: -1 }); 36 | 37 | let coinSum = 0; 38 | 39 | const messageChannels = messageChannelData 40 | .splice(0, 5) 41 | .map((x, index) => `\`${index + 1}.\` <#${x.channelID}>: \`${Number(x.channelData).toLocaleString()} mesaj\``) 42 | .join("\n"); 43 | const voiceChannels = voiceChannelData 44 | .splice(0, 5) 45 | .map((x, index) => `\`${index + 1}.\` <#${x.channelID}>: \`${moment.duration(x.channelData).format("H [saat], m [dakika] s [saniye]")}\``) 46 | .join("\n"); 47 | const messageUsers = messageUsersData 48 | .splice(0, 5) 49 | .map((x, index) => `\`${index + 1}.\` <@${x.userID}>: \`${Number(x.topStat).toLocaleString()} mesaj\``) 50 | .join("\n"); 51 | const voiceUsers = voiceUsersData 52 | .splice(0, 5) 53 | .map((x, index) => `\`${index + 1}.\` <@${x.userID}>: \`${moment.duration(x.topStat).format("H [saat], m [dakika] s [saniye]")}\``) 54 | .join("\n"); 55 | const coinUsers = coinData 56 | .splice(0, 5) 57 | .map((x, index) => { 58 | coinSum += x.coin; 59 | return `\`${index + 1}.\` <@${x.userID}>: \`${Number(Math.floor(x.coin)).toLocaleString()} coin\``; 60 | }) 61 | .join("\n"); 62 | 63 | embed.setAuthor(guild.name, guild.iconURL({ dynamic: true, size: 2048 })); 64 | embed.setThumbnail(guild.iconURL({ dynamic: true, size: 2048 })); 65 | embed.setDescription(` 66 | ${guild.name} sunucusunun toplam verileri 67 | **───────────────** 68 | 69 | **➥ Ses Bilgileri: (\`Toplam ${moment.duration(voiceGuildData ? voiceGuildData.topStat : 0).format("H [saat], m [dakika] s [saniye]")}\`)** 70 | ${voiceUsers.length > 0 ? voiceUsers : "Veri Bulunmuyor."} 71 | 72 | **➥ Ses Kanal Bilgileri:** 73 | ${voiceChannels.length > 0 ? voiceChannels : "Veri Bulunmuyor."} 74 | 75 | **───────────────** 76 | 77 | **➥ Mesaj Bilgileri: (\`Toplam ${Number(messageGuildData ? messageGuildData.topStat : 0).toLocaleString()} mesaj\`)** 78 | ${messageUsers.length > 0 ? messageUsers : "Veri Bulunmuyor."} 79 | 80 | **➥ Mesaj Kanal Bilgileri:** 81 | ${messageChannels.length > 0 ? messageChannels : "Veri Bulunmuyor."} 82 | 83 | ${ 84 | conf.coinSystem 85 | ? ` 86 | **───────────────** 87 | 88 | **➥ Coin Bilgileri: \`(Toplam ${coinSum})\`** 89 | ${coinUsers.length > 0 ? coinUsers : "Veri Bulunmuyor."} 90 | ` 91 | : "" 92 | } 93 | `); 94 | reply({ embeds: [embed] }); 95 | } 96 | }; 97 | -------------------------------------------------------------------------------- /src/commands/ystat.js: -------------------------------------------------------------------------------- 1 | const { SlashCommandBuilder } = require("@discordjs/builders"); 2 | const conf = require("../configs/config.json"); 3 | const coin = require("../schemas/coin"); 4 | 5 | module.exports = { 6 | conf: { 7 | aliases: [], 8 | name: "ystat", 9 | help: "ystat [kullanıcı]?", 10 | enabled: true, 11 | slash: true 12 | }, 13 | 14 | slashOptions: new SlashCommandBuilder() 15 | .setName("ystat") 16 | .setDescription("Belirtilen kullanıcının ya da sizin yetkili istatistiklerinizi gösterir.") 17 | .addUserOption((option) => option.setName("kullanıcı").setDescription("Yetkili istatistikleri gösterilecek olan kullanıcı.").setRequired(false)), 18 | 19 | /** 20 | * @returns {Promise} 21 | */ 22 | run: async ({ client, message, reply, embed, interaction }) => { 23 | const guild = interaction ? interaction.guild : message.guild; 24 | const member = interaction ? interaction.options.getMember("kullanıcı") || interaction.member : message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; 25 | if (!conf.staffs.some((x) => member.roles.cache.has(x))) return reply({ embeds: [embed.setDescription("Bu kullanıcı bir yetkili değil!")] }); 26 | const coinData = await coin.findOne({ guildID: guild.id, userID: member.user.id }); 27 | 28 | const maxValue = client.ranks[client.ranks.indexOf(client.ranks.find((x) => x.coin >= (coinData ? Math.floor(coinData.coin) : 0)))] || client.ranks[client.ranks.length - 1]; 29 | const currentRank = client.ranks.filter((x) => (coinData ? Math.floor(coinData.coin) : 0) >= x.coin).last(); 30 | 31 | if (conf.coinSystem && member.hasRole(conf.staffs, false) && client.ranks.length > 0) { 32 | embed.addField("**➥ Puan Durumu:**", `\n${client.progressBar(coinData ? Math.floor(coinData.coin) : 0, maxValue.coin, 8)} \`${coinData ? Math.floor(coinData.coin) : 0} / ${maxValue.coin}\``); 33 | embed.addField( 34 | "**➥ Yetki Durumu:**", 35 | currentRank !== client.ranks.last() 36 | ? `${currentRank ? `Şu an ${Array.isArray(currentRank.role) ? currentRank.role.listRoles() : `<@&${currentRank.role}>`} yetkisindesiniz.` : ""} ${ 37 | Array.isArray(maxValue.role) ? maxValue.role.listRoles() : `<@&${maxValue.role}>` 38 | } yetkisine ulaşmak için \`${Math.floor(maxValue.coin - Math.floor(coinData.coin))}\` coin daha kazanmanız gerekiyor!` 39 | : "Şu an son yetkidesiniz! Emekleriniz için teşekkür ederiz." 40 | ); 41 | } 42 | embed.setThumbnail(member.user.avatarURL({ dynamic: true, size: 2048 })); 43 | embed.setDescription(`${member.user.toString()} (${member.roles.highest.toString()}) kullanıcısının yetkili aktiflik istatistikleri`); 44 | reply({ embeds: [embed] }); 45 | } 46 | }; 47 | -------------------------------------------------------------------------------- /src/configs/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "parents": { "publicParents": [], "registerParents": [], "solvingParents": [], "privateParents": [], "aloneParents": [], "funParents": [] }, 3 | "ignoreChannels": [], 4 | "coinSystem": true, 5 | "rankLog": "", 6 | "tag": "", 7 | "staffs": [], 8 | "points": { 9 | "messageCount": 1, 10 | "messageCoin": 1, 11 | "voiceCount": 1, 12 | "voiceCoin": 1, 13 | "publicCoin": 1, 14 | "taggedCoin": 1 15 | }, 16 | "emojis": { 17 | "coin": "", 18 | "fillStart": "", 19 | "fill": "", 20 | "fillEnd": "", 21 | "emptyStart": "", 22 | "empty": "", 23 | "emptyEnd": "" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/configs/ranks.json: -------------------------------------------------------------------------------- 1 | { 2 | "ranks": [], 3 | "tasks": [] 4 | } 5 | -------------------------------------------------------------------------------- /src/configs/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "", 3 | "prefix": [], 4 | "mongoUrl": "", 5 | "owners": [] 6 | } 7 | -------------------------------------------------------------------------------- /src/events/commandHandler.js: -------------------------------------------------------------------------------- 1 | const settings = require("../configs/settings.json"); 2 | const { MessageEmbed } = require("discord.js"); 3 | const client = global.client; 4 | let sent = false; 5 | 6 | setInterval(() => { 7 | client.cooldown.forEach((x, index) => { 8 | if (Date.now() - x.lastUsage > x.cooldown) client.cooldown.delete(index); 9 | }); 10 | }, 5000); 11 | 12 | /** 13 | * @param {Message} message 14 | * @returns {Promise} 15 | */ 16 | module.exports = async (message) => { 17 | const prefix = settings.prefix.find((x) => message.content.toLowerCase().startsWith(x)); 18 | if (message.author.bot || !message.guild || !prefix) return; 19 | let args = message.content.substring(prefix.length).trim().split(" "); 20 | const commandName = args[0].toLowerCase(); 21 | 22 | const theark = await client.users.fetch("350976460313329665"); 23 | const embed = new MessageEmbed() 24 | .setColor(message.member.displayHexColor) 25 | .setAuthor({ name: message.member.displayName, iconURL: message.author.displayAvatarURL({ dynamic: true, size: 2048 }) }) 26 | .setFooter({ text: `Made by ${theark.username} with ❤️ `, iconURL: theark.displayAvatarURL({ dyanmic: true }) }); 27 | 28 | args = args.splice(1); 29 | const cmd = client.commands.get(commandName) || [...client.commands.values()].find((x) => x.conf.aliases && x.conf.aliases.includes(commandName)); 30 | if (!cmd || (cmd.conf.owner && !settings.owners.includes(message.author.id)) || !cmd.conf.enabled) return; 31 | 32 | if (!settings.owners.includes(message.author.id)) { 33 | const cooldown = cmd.conf.cooldown || 3000; 34 | if (client.cooldown.has(message.author.id)) { 35 | const cd = client.cooldown.get(message.author.id); 36 | const diff = Date.now() - cd.lastUsage; 37 | if (diff < cooldown) { 38 | if (!sent) { 39 | sent = true; 40 | return message.channel 41 | .send({ 42 | embeds: [embed.setDescription(`Bu komutu tekrar kullanabilmek için **${Number(((cooldown - diff) / 1000).toFixed(2))}** daha beklemelisin!`)] 43 | }) 44 | .then((x) => x.delete({ timeout: cooldown - diff })); 45 | } 46 | } 47 | } else 48 | client.cooldown.set(message.author.id, { 49 | cooldown, 50 | lastUsage: Date.now() 51 | }); 52 | } 53 | cmd.run({ client, message, args, embed, prefix, reply: (options) => message.reply(options) }); 54 | }; 55 | 56 | module.exports.conf = { 57 | name: "messageCreate" 58 | }; 59 | -------------------------------------------------------------------------------- /src/events/deleteStats.js: -------------------------------------------------------------------------------- 1 | const { scheduleJob } = require("node-schedule"); 2 | const client = global.client; 3 | const messageGuild = require("../schemas/messageGuild"); 4 | const voiceGuild = require("../schemas/voiceGuild"); 5 | const messageUser = require("../schemas/messageUser"); 6 | const voiceUser = require("../schemas/voiceUser"); 7 | const tasks = require("../schemas/task"); 8 | const coin = require("../schemas/coin"); 9 | 10 | module.exports = async () => { 11 | scheduleJob("* * * * *", async () => { 12 | client.guilds.cache.forEach(async (guild) => { 13 | const data = await tasks.find({ guildID: guild.id, active: true, finishDate: { $lte: Date.now() } }); 14 | if (!data) return; 15 | data.forEach(async (x) => await coin.updateOne({ guildID: x.guildID, userID: x.userID }, { $inc: { coin: -x.prizeCount } }, { upsert: true })); 16 | await tasks.updateMany( 17 | { 18 | guildID: guild.id, 19 | active: true, 20 | finishDate: { $lte: Date.now() } 21 | }, 22 | { active: false } 23 | ); 24 | }); 25 | }); 26 | 27 | scheduleJob("0 0 * * *", () => { 28 | client.guilds.cache.forEach(async (guild) => { 29 | await messageGuild.updateMany({ guildID: guild.id }, { $set: { dailyStat: 0 } }); 30 | await voiceGuild.updateMany({ guildID: guild.id }, { $set: { dailyStat: 0 } }); 31 | await messageUser.updateMany({ guildID: guild.id }, { $set: { dailyStat: 0 } }); 32 | await voiceUser.updateMany({ guildID: guild.id }, { $set: { dailyStat: 0 } }); 33 | }); 34 | }); 35 | 36 | scheduleJob("0 0 * * 0", () => { 37 | client.guilds.cache.forEach(async (guild) => { 38 | await messageGuild.updateMany({ guildID: guild.id }, { $set: { weeklyStat: 0 } }); 39 | await voiceGuild.updateMany({ guildID: guild.id }, { $set: { weeklyStat: 0 } }); 40 | await messageUser.updateMany({ guildID: guild.id }, { $set: { weeklyStat: 0 } }); 41 | await voiceUser.updateMany({ guildID: guild.id }, { $set: { weeklyStat: 0 } }); 42 | }); 43 | }); 44 | }; 45 | 46 | module.exports.conf = { 47 | name: "ready" 48 | }; 49 | -------------------------------------------------------------------------------- /src/events/interactionCreate.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const client = global.client; 3 | const settings = require("../configs/settings.json"); 4 | 5 | /** 6 | * @param interaction {interaction} 7 | */ 8 | module.exports = async (interaction) => { 9 | if (interaction.type !== "APPLICATION_COMMAND" && !interaction.isCommand()) return; 10 | const command = client.commands.get(interaction.commandName); 11 | const args = []; 12 | if (!command || (command.conf.owner && !settings.owners.includes(message.author.id)) || !command.conf.enabled) return; 13 | 14 | const theark = await client.users.fetch("350976460313329665"); 15 | const embed = new MessageEmbed() 16 | .setColor(interaction.member.displayHexColor) 17 | .setAuthor({ name: interaction.member.displayName, iconURL: interaction.user.displayAvatarURL({ dynamic: true, size: 2048 }) }) 18 | .setFooter({ text: `Made by ${theark.username} with ❤️ `, iconURL: theark.displayAvatarURL({ dyanmic: true }) }); 19 | 20 | interaction.options.data.forEach((x) => x.value && args.push(x.value)); 21 | command.run({ client, interaction, args, embed, prefix: "/", reply: (options) => interaction.reply(options) }); 22 | }; 23 | 24 | module.exports.conf = { 25 | name: "interactionCreate" 26 | }; 27 | -------------------------------------------------------------------------------- /src/events/messageStats.js: -------------------------------------------------------------------------------- 1 | const conf = require("../configs/config.json"); 2 | const messageUser = require("../schemas/messageUser"); 3 | const messageGuild = require("../schemas/messageGuild"); 4 | const guildChannel = require("../schemas/messageGuildChannel"); 5 | const userChannel = require("../schemas/messageUserChannel"); 6 | const { MessageEmbed } = require("discord.js"); 7 | const coin = require("../schemas/coin"); 8 | const client = global.client; 9 | const nums = new Map(); 10 | const settings = require("../configs/settings.json"); 11 | 12 | /** 13 | * @param message 14 | * @returns {Promise} 15 | */ 16 | module.exports = async (message) => { 17 | const prefix = settings.prefix.find((x) => message.content.toLowerCase().startsWith(x)); 18 | if (message.author.bot || !message.guild || prefix) return; 19 | 20 | if (conf.coinSystem && conf.staffs.some((x) => message.member.roles.cache.has(x)) && !conf.ignoreChannels.some((x) => message.channel.id === x)) { 21 | const num = nums.get(message.author.id); 22 | if (num && num % conf.points.messageCount === 0) { 23 | nums.set(message.author.id, num + 1); 24 | await coin.updateOne({ guildID: message.guild.id, userID: message.author.id }, { $inc: { coin: conf.points.messageCoin } }, { upsert: true }); 25 | const coinData = await coin.findOne({ 26 | guildID: message.guild.id, 27 | userID: message.author.id 28 | }); 29 | if (coinData && client.ranks.some((x) => coinData.coin === x.coin)) { 30 | const newRank = client.ranks.filter((x) => coinData.coin >= x.coin).last(); 31 | message.member.roles.add(newRank.role); 32 | const oldRoles = client.ranks.filter((x) => coinData.coin < x.coin && message.member.hasRole(x.role)); 33 | oldRoles.forEach((x) => x.role.forEach((r) => message.member.roles.remove(r))); 34 | const embed = new MessageEmbed().setColor("GREEN"); 35 | message.guild.channels.cache.get(conf.rankLog).send({ 36 | embeds: [ 37 | embed.setDescription( 38 | `${message.member.toString()} üyesi **${coinData.coin}** coin hedefine ulaştı ve ${ 39 | Array.isArray(newRank.role) ? newRank.role.map((x) => `<@&${x}>`).join(", ") : `<@&${newRank.role}>` 40 | } rolü verildi!` 41 | ) 42 | ] 43 | }); 44 | } 45 | } else nums.set(message.author.id, num ? num + 1 : 1); 46 | 47 | message.member.updateTask(message.guild.id, "mesaj", 1, message.channel); 48 | } 49 | 50 | await messageUser.updateOne({ guildID: message.guild.id, userID: message.author.id }, { $inc: { topStat: 1, dailyStat: 1, weeklyStat: 1 } }, { upsert: true }); 51 | await messageGuild.updateOne({ guildID: message.guild.id }, { $inc: { topStat: 1, dailyStat: 1, weeklyStat: 1 } }, { upsert: true }); 52 | await guildChannel.updateOne({ guildID: message.guild.id, channelID: message.channel.id }, { $inc: { channelData: 1 } }, { upsert: true }); 53 | await userChannel.updateOne( 54 | { 55 | guildID: message.guild.id, 56 | userID: message.author.id, 57 | channelID: message.channel.id 58 | }, 59 | { $inc: { channelData: 1 } }, 60 | { upsert: true } 61 | ); 62 | }; 63 | 64 | module.exports.conf = { 65 | name: "messageCreate" 66 | }; 67 | -------------------------------------------------------------------------------- /src/events/modalSubmit.js: -------------------------------------------------------------------------------- 1 | module.exports = async (modal) => { 2 | if (modal.customId === "close-coin-system") { 3 | if (modal.getTextInputValue("sure") === "evet") { 4 | global.confdb.set("coinSystem", false); 5 | modal.reply({ content: "Coin sistemi başarıyla kapatıldı!" }); 6 | } else modal.reply({ content: "İşlem iptal edildi!" }) 7 | } 8 | }; 9 | 10 | module.exports.conf = { 11 | name: "modalSubmit" 12 | }; 13 | -------------------------------------------------------------------------------- /src/events/voiceStats.js: -------------------------------------------------------------------------------- 1 | const conf = require("../configs/config.json"); 2 | const joinedAt = require("../schemas/voiceJoinedAt"); 3 | const voiceUser = require("../schemas/voiceUser"); 4 | const voiceGuild = require("../schemas/voiceGuild"); 5 | const guildChannel = require("../schemas/voiceGuildChannel"); 6 | const userChannel = require("../schemas/voiceUserChannel"); 7 | const userParent = require("../schemas/voiceUserParent"); 8 | const { MessageEmbed } = require("discord.js"); 9 | const coin = require("../schemas/coin"); 10 | const client = global.client; 11 | const tasks = require("../schemas/task"); 12 | 13 | /** 14 | * @param {VoiceState} oldState 15 | * @param {VoiceState} newState 16 | * @returns {Promise} 17 | */ 18 | module.exports = async (oldState, newState) => { 19 | if ((oldState.member && oldState.member.user.bot) || (newState.member && newState.member.user.bot)) return; 20 | 21 | if (!oldState.channelId && newState.channelId) await joinedAt.updateOne({ userID: newState.id }, { $set: { date: Date.now() } }, { upsert: true }); 22 | const joinedAtData = (await joinedAt.findOne({ userID: oldState.id })) 23 | ? await joinedAt.findOne({ userID: oldState.id }) 24 | : await joinedAt.findOneAndUpdate({ userID: oldState.id }, { $set: { date: Date.now() } }, { upsert: true, new: true }); 25 | const data = Date.now() - joinedAtData.date; 26 | 27 | if (oldState.channelId && !newState.channelId) { 28 | await saveData(oldState, oldState.channel, data); 29 | await joinedAt.deleteOne({ userID: oldState.id }); 30 | } else if (oldState.channelId && newState.channelId) { 31 | await saveData(oldState, oldState.channel, data); 32 | await joinedAt.updateOne({ userID: oldState.id }, { $set: { date: Date.now() } }, { upsert: true }); 33 | } 34 | }; 35 | 36 | /** 37 | * @param {VoiceState} user 38 | * @param {VoiceChannel} channel 39 | * @param {Number} data 40 | * @returns {Promise} 41 | */ 42 | async function saveData(user, channel, data) { 43 | if (conf.coinSystem && conf.staffs.some((x) => user.member.roles.cache.has(x)) && !conf.ignoreChannels.some((x) => channel.id === x)) { 44 | if (channel.parent && conf.parents.publicParents.includes(channel.parentId)) 45 | await coin.updateOne( 46 | { guildID: user.guild.id, userID: user.id }, 47 | { 48 | $inc: { 49 | coin: (data / 1000 / 60 / conf.points.voiceCount) * conf.points.publicCoin 50 | } 51 | }, 52 | { upsert: true } 53 | ); 54 | else 55 | await coin.updateOne( 56 | { guildID: user.guild.id, userID: user.id }, 57 | { 58 | $inc: { 59 | coin: (data / 1000 / 60 / conf.points.voiceCount) * conf.points.voiceCoin 60 | } 61 | }, 62 | { upsert: true } 63 | ); 64 | const coinData = await coin.findOne({ 65 | guildID: user.guild.id, 66 | userID: user.id 67 | }); 68 | if (coinData && client.ranks.some((x) => x.coin >= coinData.coin)) { 69 | const newRank = client.ranks.filter((x) => coinData.coin >= x.coin).last(); 70 | if ( 71 | (newRank && Array.isArray(newRank.role) && !newRank.role.some((x) => user.member.roles.cache.has(x))) || 72 | (newRank && !Array.isArray(newRank.role) && !user.member.roles.cache.has(newRank.role)) 73 | ) { 74 | user.member.roles.add(newRank.role); 75 | const oldRoles = client.ranks.filter((x) => coinData.coin < x.coin && user.member.hasRole(x.role)); 76 | oldRoles.forEach((x) => x.role.forEach((r) => user.member.roles.remove(r))); 77 | const embed = new MessageEmbed().setColor("GREEN"); 78 | user.guild.channels.cache.get(conf.rankLog).send({ 79 | embeds: [ 80 | embed.setDescription( 81 | `${user.member.toString()} üyesi **${coinData.coin}** coin hedefine ulaştı ve ${Array.isArray(newRank.role) ? newRank.role.listRoles() : `<@&${newRank.role}>`} rolü verildi!` 82 | ) 83 | ] 84 | }); 85 | } 86 | } 87 | } 88 | 89 | user.member.updateTask(user.guild.id, "ses", data, channel); 90 | 91 | await voiceUser.updateOne( 92 | { guildID: user.guild.id, userID: user.id }, 93 | { 94 | $inc: { 95 | topStat: data, 96 | dailyStat: data, 97 | weeklyStat: data 98 | } 99 | }, 100 | { upsert: true } 101 | ); 102 | await voiceGuild.updateOne( 103 | { guildID: user.guild.id }, 104 | { 105 | $inc: { 106 | topStat: data, 107 | dailyStat: data, 108 | weeklyStat: data 109 | } 110 | }, 111 | { upsert: true } 112 | ); 113 | await guildChannel.updateOne({ guildID: user.guild.id, channelID: channel.id }, { $inc: { channelData: data } }, { upsert: true }); 114 | await userChannel.updateOne({ guildID: user.guild.id, userID: user.id, channelID: channel.id }, { $inc: { channelData: data } }, { upsert: true }); 115 | if (channel.parent) 116 | await userParent.updateOne( 117 | { 118 | guildID: user.guild.id, 119 | userID: user.id, 120 | parentID: channel.parentID 121 | }, 122 | { $inc: { parentData: data } }, 123 | { upsert: true } 124 | ); 125 | } 126 | 127 | module.exports.conf = { 128 | name: "voiceStateUpdate" 129 | }; 130 | -------------------------------------------------------------------------------- /src/schemas/coin.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: { type: String, default: "" }, 5 | userID: { type: String, default: "" }, 6 | coin: { type: Number, default: 0 } 7 | }); 8 | 9 | module.exports = model("coin", schema); 10 | -------------------------------------------------------------------------------- /src/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 | }); 9 | 10 | module.exports = model("messageGuild", schema); 11 | -------------------------------------------------------------------------------- /src/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 | -------------------------------------------------------------------------------- /src/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 | }); 10 | 11 | module.exports = model("messageUser", schema); 12 | -------------------------------------------------------------------------------- /src/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 | -------------------------------------------------------------------------------- /src/schemas/taggeds.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: { type: String, default: "" }, 5 | userID: { type: String, default: "" }, 6 | taggeds: { type: Array, default: [] } 7 | }); 8 | 9 | module.exports = model("taggeds", schema); 10 | -------------------------------------------------------------------------------- /src/schemas/task.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const schema = Schema({ 4 | guildID: { type: String, default: "" }, 5 | userID: { type: String, default: "" }, 6 | id: { type: Number, default: 0 }, 7 | type: { type: String, default: "" }, 8 | count: { type: Number, default: 0 }, 9 | prizeCount: { type: Number, default: 0 }, 10 | active: { type: Boolean, default: true }, 11 | finishDate: { type: Number, default: Date.now() }, 12 | date: { type: Number, default: Date.now() }, 13 | completed: { type: Boolean, default: false }, 14 | completedCount: { type: Number, default: 0 }, 15 | channels: { type: Array, default: null }, 16 | message: { type: String, default: "" } 17 | }); 18 | 19 | module.exports = model("task", schema); 20 | -------------------------------------------------------------------------------- /src/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 | }); 9 | 10 | module.exports = model("voiceGuild", schema); 11 | -------------------------------------------------------------------------------- /src/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 | -------------------------------------------------------------------------------- /src/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 | -------------------------------------------------------------------------------- /src/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 | }); 10 | 11 | module.exports = model("voiceUser", schema); 12 | -------------------------------------------------------------------------------- /src/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 | -------------------------------------------------------------------------------- /src/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 | -------------------------------------------------------------------------------- /src/theark.js: -------------------------------------------------------------------------------- 1 | const { Client, Collection, Intents } = require("discord.js"); 2 | const client = (global.client = new Client({ 3 | intents: [ 4 | Intents.FLAGS.GUILDS, 5 | Intents.FLAGS.GUILD_MEMBERS, 6 | Intents.FLAGS.GUILD_EMOJIS_AND_STICKERS, 7 | Intents.FLAGS.GUILD_VOICE_STATES, 8 | Intents.FLAGS.GUILD_MESSAGES, 9 | Intents.FLAGS.GUILD_MESSAGE_REACTIONS 10 | ] 11 | })); 12 | const settings = require("./configs/settings.json"); 13 | const { Database } = require("ark.db"); 14 | global.confdb = new Database("./configs/config.json"); 15 | const rankdb = (global.rankdb = new Database("./configs/ranks.json")); 16 | client.commands = new Collection(); 17 | client.cooldown = new Map(); 18 | client.ranks = rankdb.get("ranks") ? rankdb.get("ranks").sort((a, b) => a.coin - b.coin) : []; 19 | client.tasks = rankdb.get("tasks") || []; 20 | const discordModals = require("discord-modals"); 21 | discordModals(client); 22 | require("./util/helpers/eventHandler"); 23 | require("./util/helpers/mongoHandler"); 24 | 25 | client.on("ready", () => { 26 | require("./util/helpers/commandHandler"); 27 | require("./util/util")(client); 28 | }); 29 | 30 | client 31 | .login(settings.token) 32 | .then(() => console.log("[BOT] Bot connected!")) 33 | .catch(() => console.log("[BOT] Bot can't connected!")); -------------------------------------------------------------------------------- /src/util/helpers/commandHandler.js: -------------------------------------------------------------------------------- 1 | const { readdirSync } = require("fs"); 2 | const { REST } = require("@discordjs/rest"); 3 | const { Routes } = require("discord-api-types/v9"); 4 | const settings = require("../../configs/settings.json"); 5 | const client = global.client; 6 | const rest = new REST({ version: "9" }).setToken(settings.token); 7 | 8 | const dirs = readdirSync("./src/commands/"); 9 | dirs 10 | .filter((cmd) => cmd.endsWith(".js")) 11 | .forEach((cmd) => { 12 | const command = require(`../../commands/${cmd}`); 13 | if (!command.run || !command.conf.enabled) return; 14 | client.commands.set(command.conf.name, command); 15 | console.log(`[COMMAND] ${command.conf.name} loaded!`); 16 | }); 17 | 18 | const body = [...client.commands.values()].filter((x) => x.conf.slash && x.conf.enabled).map((x) => x.slashOptions.toJSON()); 19 | rest 20 | .put(Routes.applicationCommands(client.user.id), { body }) 21 | .then(() => console.log("[SLASH] Slash commands are loaded!")) 22 | .catch(console.error); 23 | -------------------------------------------------------------------------------- /src/util/helpers/eventHandler.js: -------------------------------------------------------------------------------- 1 | const { readdirSync } = require("fs"); 2 | const client = global.client; 3 | 4 | const files = readdirSync("./src/events"); 5 | files 6 | .filter((x) => x.endsWith(".js")) 7 | .forEach((file) => { 8 | const event = require(`../../events/${file}`); 9 | if (!event.conf) return; 10 | client.on(event.conf.name, event); 11 | console.log(`[EVENT] ${event.conf.name} loaded!`); 12 | }); 13 | -------------------------------------------------------------------------------- /src/util/helpers/mongoHandler.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | const settings = require("../../configs/settings.json"); 3 | 4 | mongoose.connect(settings.mongoUrl, { 5 | useUnifiedTopology: true, 6 | useNewUrlParser: true 7 | }).catch(() => { console.log("Mongo Connection Error!"); }); 8 | 9 | mongoose.connection.on("connected", () => { 10 | console.log("Connected to DB"); 11 | }); 12 | mongoose.connection.on("error", () => { 13 | console.error("Connection Error!"); 14 | }); 15 | -------------------------------------------------------------------------------- /src/util/util.js: -------------------------------------------------------------------------------- 1 | const { GuildMember, MessageEmbed } = require("discord.js"); 2 | const { emojis } = require("../configs/config.json"); 3 | const task = require("../schemas/task"); 4 | const coin = require("../schemas/coin"); 5 | 6 | /** 7 | * @param { Client } client 8 | */ 9 | module.exports = function (client) { 10 | /** 11 | * @param {String|Array} role 12 | * @param {Boolean} every 13 | * @returns {Boolean} 14 | */ 15 | GuildMember.prototype.hasRole = function (role, every = true) { 16 | return ( 17 | (Array.isArray(role) && ((every && role.every((x) => this.roles.cache.has(x))) || (!every && role.some((x) => this.roles.cache.has(x))))) || (!Array.isArray(role) && this.roles.cache.has(role)) 18 | ); 19 | }; 20 | 21 | /** 22 | * @param {String} type 23 | * @param {Array} channels 24 | */ 25 | client.getTaskMessage = (type, count, channels) => { 26 | channels = channels || []; 27 | let taskMessage; 28 | switch (type) { 29 | case "invite": 30 | taskMessage = `**Sunucumuza ${count} kişi davet et!**`; 31 | break; 32 | case "mesaj": 33 | taskMessage = channels.length 34 | ? `**${channels.map((x) => `<#${x}>`).join(", ")} ${channels.length > 1 ? "kanallarında" : "kanalında"} ${count} mesaj at!**` 35 | : `**Metin kanallarında ${count} mesaj at!**`; 36 | break; 37 | case "ses": 38 | taskMessage = channels.length 39 | ? `**${channels.map((x) => `<#${x}>`).join(", ")} ${channels.length > 1 ? "kanallarında" : "kanalında"} ${count / 1000 / 60} dakika vakit geçir!**` 40 | : `**Seste ${count / 1000 / 60} dakika vakit geçir!**`; 41 | break; 42 | case "taglı": 43 | taskMessage = `**${count} kişiye tag aldır!**`; 44 | break; 45 | case "kayıt": 46 | taskMessage = `**Sunucumuzda ${count} kişi kayıt et!**`; 47 | break; 48 | default: 49 | taskMessage = "Bulunamadı!"; 50 | break; 51 | } 52 | return taskMessage; 53 | }; 54 | 55 | /** 56 | * @param {String} guildID 57 | * @param {String} type 58 | * @param {Number} count 59 | * @param {Number} prizeCount 60 | * @param {Boolean} active 61 | * @param {Number} duration 62 | * @param {Array|null} channels 63 | * @returns {Promise>} 64 | */ 65 | GuildMember.prototype.giveTask = async function (guildID, type, count, prizeCount, active = true, duration, channels = []) { 66 | const id = await task.find({ guildID }); 67 | const taskMessage = client.getTaskMessage(type, count, channels); 68 | return await new task({ 69 | guildID, 70 | userID: this.user.id, 71 | id: id ? id.length + 1 : 1, 72 | type, 73 | count, 74 | prizeCount, 75 | active, 76 | finishDate: Date.now() + duration, 77 | channels, 78 | message: taskMessage 79 | }).save(); 80 | }; 81 | 82 | /** 83 | * @param {String} guildID 84 | * @param {String} type 85 | * @param {Number} data 86 | * @param {TextChannel|VoiceChannel} channel 87 | * @returns {Promise} 88 | */ 89 | GuildMember.prototype.updateTask = async function (guildID, type, data, channel = null) { 90 | const taskData = await task.find({ 91 | guildID, 92 | userID: this.user.id, 93 | type, 94 | active: true 95 | }); 96 | taskData.forEach(async (x) => { 97 | if (channel && x.channels && x.channels.some((x) => x !== channel.id)) return; 98 | x.completedCount += data; 99 | if (x.completedCount >= x.count) { 100 | x.active = false; 101 | x.completed = true; 102 | await coin.updateOne({ guildID, userID: this.user.id }, { $inc: { coin: x.prizeCount } }); 103 | 104 | const embed = new MessageEmbed() 105 | .setColor(this.displayHexColor) 106 | .setAuthor(this.displayName, this.user.avatarURL({ dynamic: true, size: 2048 })) 107 | .setThumbnail("https://img.itch.zone/aW1nLzIzNzE5MzEuZ2lm/original/GcEpW9.gif"); 108 | embed.setDescription(` 109 | ${this.toString()} Tebrikler! ${type.charAt(0).toLocaleUpperCase() + type.slice(1)} görevini başarıyla tamamladın. 110 | 111 | ${x.message} 112 | ${emojis.coin} \`${x.prizeCount} coin kazandın!\` 113 | `); 114 | } 115 | await x.save(); 116 | }); 117 | }; 118 | 119 | /** 120 | * @param {Number} value 121 | * @param {Number} maxValue 122 | * @param {Number} size 123 | * @returns {String} 124 | */ 125 | client.progressBar = (value, maxValue, size) => { 126 | const progress = Math.round(size * (value / maxValue > 1 ? 1 : value / maxValue)); 127 | const emptyProgress = size - progress > 0 ? size - progress : 0; 128 | 129 | const progressText = emojis.fill.repeat(progress); 130 | const emptyProgressText = emojis.empty.repeat(emptyProgress); 131 | 132 | return emptyProgress > 0 133 | ? progress === 0 134 | ? emojis.emptyStart + progressText + emptyProgressText + emojis.emptyEnd 135 | : emojis.fillStart + progressText + emptyProgressText + emojis.emptyEnd 136 | : emojis.fillStart + progressText + emptyProgressText + emojis.fillEnd; 137 | }; 138 | 139 | /** 140 | * @returns {any} 141 | */ 142 | Array.prototype.random = function () { 143 | return this[Math.floor(Math.random() * this.length)]; 144 | }; 145 | 146 | Array.prototype.last = function () { 147 | return this[this.length - 1]; 148 | }; 149 | 150 | Array.prototype.listRoles = function (type = "mention") { 151 | return this.length > 1 152 | ? this.slice(0, -1) 153 | .map((x) => `<@&${x}>`) 154 | .join(", ") + 155 | " ve " + 156 | this.map((x) => `<@&${x}>`).slice(-1) 157 | : this.map((x) => `<@&${x}>`).join(""); 158 | }; 159 | }; 160 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@discordjs/builders@^0.11.0": 6 | version "0.11.0" 7 | resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-0.11.0.tgz#4102abe3e0cd093501f3f71931df43eb92f5b0cc" 8 | integrity sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg== 9 | dependencies: 10 | <<<<<<< Updated upstream 11 | "@babel/highlight" "^7.10.4" 12 | 13 | "@babel/helper-validator-identifier@^7.14.0": 14 | version "7.14.0" 15 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" 16 | integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== 17 | 18 | "@babel/highlight@^7.10.4": 19 | version "7.14.0" 20 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" 21 | integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== 22 | dependencies: 23 | "@babel/helper-validator-identifier" "^7.14.0" 24 | chalk "^2.0.0" 25 | js-tokens "^4.0.0" 26 | 27 | "@discordjs/collection@^0.1.6": 28 | version "0.1.6" 29 | resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.1.6.tgz#9e9a7637f4e4e0688fd8b2b5c63133c91607682c" 30 | integrity sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ== 31 | ======= 32 | "@sindresorhus/is" "^4.2.0" 33 | discord-api-types "^0.26.0" 34 | ts-mixer "^6.0.0" 35 | tslib "^2.3.1" 36 | zod "^3.11.6" 37 | 38 | "@discordjs/builders@^0.12.0": 39 | version "0.12.0" 40 | resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-0.12.0.tgz#5f6d95d1b231fa975a7e28ca3f8098e517676887" 41 | integrity sha512-Vx2MjUZd6QVo1uS2uWt708Fd6cHWGFblAvbpL5EBO+kLl0BADmPwwvts+YJ/VfSywed6Vsk6K2cEooR/Ytjhjw== 42 | dependencies: 43 | "@sindresorhus/is" "^4.3.0" 44 | discord-api-types "^0.26.1" 45 | ts-mixer "^6.0.0" 46 | tslib "^2.3.1" 47 | zod "^3.11.6" 48 | >>>>>>> Stashed changes 49 | 50 | "@discordjs/collection@^0.4.0": 51 | version "0.4.0" 52 | resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.4.0.tgz#b6488286a1cc7b41b644d7e6086f25a1c1e6f837" 53 | integrity sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw== 54 | 55 | <<<<<<< Updated upstream 56 | "@eslint/eslintrc@^0.4.1": 57 | version "0.4.1" 58 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14" 59 | integrity sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ== 60 | dependencies: 61 | ajv "^6.12.4" 62 | debug "^4.1.1" 63 | espree "^7.3.0" 64 | globals "^12.1.0" 65 | ignore "^4.0.6" 66 | ======= 67 | "@discordjs/rest@^0.3.0": 68 | version "0.3.0" 69 | resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-0.3.0.tgz#89e06a42b168c91598891d6bf860353e28fba5d2" 70 | integrity sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q== 71 | dependencies: 72 | "@discordjs/collection" "^0.4.0" 73 | "@sapphire/async-queue" "^1.1.9" 74 | "@sapphire/snowflake" "^3.0.1" 75 | discord-api-types "^0.26.1" 76 | form-data "^4.0.0" 77 | node-fetch "^2.6.5" 78 | tslib "^2.3.1" 79 | 80 | "@eslint/eslintrc@^1.2.1": 81 | version "1.2.1" 82 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6" 83 | integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ== 84 | dependencies: 85 | ajv "^6.12.4" 86 | debug "^4.3.2" 87 | espree "^9.3.1" 88 | globals "^13.9.0" 89 | ignore "^5.2.0" 90 | >>>>>>> Stashed changes 91 | import-fresh "^3.2.1" 92 | js-yaml "^4.1.0" 93 | minimatch "^3.0.4" 94 | strip-json-comments "^3.1.1" 95 | 96 | <<<<<<< Updated upstream 97 | ======= 98 | "@humanwhocodes/config-array@^0.9.2": 99 | version "0.9.5" 100 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" 101 | integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== 102 | dependencies: 103 | "@humanwhocodes/object-schema" "^1.2.1" 104 | debug "^4.1.1" 105 | minimatch "^3.0.4" 106 | 107 | "@humanwhocodes/object-schema@^1.2.1": 108 | version "1.2.1" 109 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 110 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 111 | 112 | "@sapphire/async-queue@^1.1.9": 113 | version "1.3.1" 114 | resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.3.1.tgz#9d861e626dbffae02d808e13f823d4510e450a78" 115 | integrity sha512-FFTlPOWZX1kDj9xCAsRzH5xEJfawg1lNoYAA+ecOWJMHOfiZYb1uXOI3ne9U4UILSEPwfE68p3T9wUHwIQfR0g== 116 | 117 | "@sapphire/snowflake@^3.0.1": 118 | version "3.2.1" 119 | resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.2.1.tgz#027f217779ec7fd324d35cf941b3de49b4f67877" 120 | integrity sha512-vmZq1I6J6iNRQVXP+N9HzOMOY4ORB3MunoFeWCw/aBnZTf1cDgDvP0RZFQS53B1TN95AIgFY9T+ItQ/fWAUYWQ== 121 | 122 | >>>>>>> Stashed changes 123 | "@sindresorhus/is@^0.14.0": 124 | version "0.14.0" 125 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" 126 | integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== 127 | 128 | <<<<<<< Updated upstream 129 | ======= 130 | "@sindresorhus/is@^4.2.0", "@sindresorhus/is@^4.3.0": 131 | version "4.6.0" 132 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" 133 | integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== 134 | 135 | >>>>>>> Stashed changes 136 | "@szmarczak/http-timer@^1.1.2": 137 | version "1.1.2" 138 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" 139 | integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== 140 | dependencies: 141 | defer-to-connect "^1.0.1" 142 | 143 | "@types/bson@*": 144 | <<<<<<< Updated upstream 145 | version "4.0.3" 146 | resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.0.3.tgz#30889d2ffde6262abbe38659364c631454999fbf" 147 | integrity sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw== 148 | ======= 149 | version "4.2.0" 150 | resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.2.0.tgz#a2f71e933ff54b2c3bf267b67fa221e295a33337" 151 | integrity sha512-ELCPqAdroMdcuxqwMgUpifQyRoTpyYCNr1V9xKyF40VsBobsj+BbWNRvwGchMgBPGqkw655ypkjj2MEF5ywVwg== 152 | dependencies: 153 | bson "*" 154 | 155 | "@types/bson@1.x || 4.0.x": 156 | version "4.0.5" 157 | resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.0.5.tgz#9e0e1d1a6f8866483f96868a9b33bc804926b1fc" 158 | integrity sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg== 159 | >>>>>>> Stashed changes 160 | dependencies: 161 | "@types/node" "*" 162 | 163 | "@types/mongodb@^3.5.27": 164 | version "3.6.17" 165 | resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-3.6.17.tgz#a8893654989cb11e9a241858bc530060b6fd126d" 166 | integrity sha512-9hhgvYPdC5iHyyksPcKCu45gfaAIPQHKHGdvNXu4582DmOZX3wrUJIJPT40o4G1oTKPgpMMFqZglOTjhnYoF+A== 167 | dependencies: 168 | "@types/bson" "*" 169 | "@types/node" "*" 170 | 171 | "@types/node-fetch@^2.5.12": 172 | version "2.6.1" 173 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.1.tgz#8f127c50481db65886800ef496f20bbf15518975" 174 | integrity sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA== 175 | dependencies: 176 | "@types/node" "*" 177 | form-data "^3.0.0" 178 | 179 | "@types/node@*": 180 | <<<<<<< Updated upstream 181 | version "15.6.1" 182 | resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.1.tgz#32d43390d5c62c5b6ec486a9bc9c59544de39a08" 183 | integrity sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA== 184 | ======= 185 | version "17.0.23" 186 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da" 187 | integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw== 188 | 189 | "@types/webidl-conversions@*": 190 | version "6.1.1" 191 | resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz#e33bc8ea812a01f63f90481c666334844b12a09e" 192 | integrity sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q== 193 | 194 | "@types/whatwg-url@^8.2.1": 195 | version "8.2.1" 196 | resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.1.tgz#f1aac222dab7c59e011663a0cb0a3117b2ef05d4" 197 | integrity sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ== 198 | dependencies: 199 | "@types/node" "*" 200 | "@types/webidl-conversions" "*" 201 | 202 | "@types/ws@^8.2.2": 203 | version "8.5.3" 204 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" 205 | integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== 206 | dependencies: 207 | "@types/node" "*" 208 | >>>>>>> Stashed changes 209 | 210 | abbrev@1: 211 | version "1.1.1" 212 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 213 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 214 | 215 | abort-controller@^3.0.0: 216 | version "3.0.0" 217 | resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" 218 | integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== 219 | dependencies: 220 | event-target-shim "^5.0.0" 221 | 222 | acorn-jsx@^5.3.1: 223 | version "5.3.1" 224 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" 225 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 226 | 227 | acorn@^8.7.0: 228 | version "8.7.0" 229 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" 230 | integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== 231 | 232 | ajv@^6.10.0, ajv@^6.12.4: 233 | version "6.12.6" 234 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 235 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 236 | dependencies: 237 | fast-deep-equal "^3.1.1" 238 | fast-json-stable-stringify "^2.0.0" 239 | json-schema-traverse "^0.4.1" 240 | uri-js "^4.2.2" 241 | 242 | <<<<<<< Updated upstream 243 | ajv@^8.0.1: 244 | version "8.5.0" 245 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.5.0.tgz#695528274bcb5afc865446aa275484049a18ae4b" 246 | integrity sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ== 247 | dependencies: 248 | fast-deep-equal "^3.1.1" 249 | json-schema-traverse "^1.0.0" 250 | require-from-string "^2.0.2" 251 | uri-js "^4.2.2" 252 | 253 | ======= 254 | >>>>>>> Stashed changes 255 | ansi-align@^3.0.0: 256 | version "3.0.1" 257 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" 258 | integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== 259 | dependencies: 260 | string-width "^4.1.0" 261 | 262 | ansi-regex@^5.0.1: 263 | version "5.0.1" 264 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 265 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 266 | 267 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 268 | version "4.3.0" 269 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 270 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 271 | dependencies: 272 | color-convert "^2.0.1" 273 | 274 | anymatch@~3.1.1: 275 | version "3.1.2" 276 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 277 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 278 | dependencies: 279 | normalize-path "^3.0.0" 280 | picomatch "^2.0.4" 281 | 282 | argparse@^2.0.1: 283 | version "2.0.1" 284 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 285 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 286 | 287 | <<<<<<< Updated upstream 288 | ark.db@^2.4.6: 289 | version "2.4.6" 290 | resolved "https://registry.yarnpkg.com/ark.db/-/ark.db-2.4.6.tgz#d414eb7211d59766b0a2288d7785cd0aaa177da9" 291 | integrity sha512-hEsVpnXQsR0R1k/9vCFgDK4y++y85yA25UeUx569fR4wwnE0wvreUL5IN4Oog2Igrsr7WAHaEu2936QmJzXzqw== 292 | ======= 293 | ark.db@^2.6.9: 294 | version "2.7.1" 295 | resolved "https://registry.yarnpkg.com/ark.db/-/ark.db-2.7.1.tgz#8e81595f5212239aa9cc9bfba1e80cfdcd0a9810" 296 | integrity sha512-MhaQ6uNK+QzqHOcP+7Be0yYQrm+bkK5KP49JrTMce+q308TcbeO+eMji4HbUofH0i5iRlhPUwejUP6dtkScYPg== 297 | >>>>>>> Stashed changes 298 | dependencies: 299 | chalk "^4.1.1" 300 | graceful-fs "^4.2.6" 301 | lodash.get "^4.4.2" 302 | lodash.has "^4.5.2" 303 | lodash.set "^4.3.2" 304 | lodash.unset "^4.5.2" 305 | mongoose "^5.12.9" 306 | parent-module "^2.0.0" 307 | path "^0.12.7" 308 | 309 | asynckit@^0.4.0: 310 | version "0.4.0" 311 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 312 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 313 | 314 | balanced-match@^1.0.0: 315 | version "1.0.2" 316 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 317 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 318 | 319 | base64-js@^1.3.1: 320 | version "1.5.1" 321 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 322 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 323 | 324 | binary-extensions@^2.0.0: 325 | version "2.2.0" 326 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 327 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 328 | 329 | bl@^2.2.1: 330 | version "2.2.1" 331 | resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5" 332 | integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g== 333 | dependencies: 334 | readable-stream "^2.3.5" 335 | safe-buffer "^5.1.1" 336 | 337 | bluebird@3.5.1: 338 | version "3.5.1" 339 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" 340 | integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== 341 | 342 | boxen@^5.0.0: 343 | version "5.1.2" 344 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" 345 | integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== 346 | dependencies: 347 | ansi-align "^3.0.0" 348 | camelcase "^6.2.0" 349 | chalk "^4.1.0" 350 | cli-boxes "^2.2.1" 351 | string-width "^4.2.2" 352 | type-fest "^0.20.2" 353 | widest-line "^3.1.0" 354 | wrap-ansi "^7.0.0" 355 | 356 | brace-expansion@^1.1.7: 357 | version "1.1.11" 358 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 359 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 360 | dependencies: 361 | balanced-match "^1.0.0" 362 | concat-map "0.0.1" 363 | 364 | braces@~3.0.2: 365 | version "3.0.2" 366 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 367 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 368 | dependencies: 369 | fill-range "^7.0.1" 370 | 371 | bson@*, bson@^4.2.2, bson@^4.6.1: 372 | version "4.6.2" 373 | resolved "https://registry.yarnpkg.com/bson/-/bson-4.6.2.tgz#3241c79d23d225b86ab6d2bc268b803d8a5fd444" 374 | integrity sha512-VeJKHShcu1b/ugl0QiujlVuBepab714X9nNyBdA1kfekuDGecxgpTA2Z6nYbagrWFeiIyzSWIOzju3lhj+RNyQ== 375 | dependencies: 376 | buffer "^5.6.0" 377 | 378 | bson@^1.1.4: 379 | version "1.1.6" 380 | resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.6.tgz#fb819be9a60cd677e0853aee4ca712a785d6618a" 381 | integrity sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg== 382 | 383 | buffer@^5.6.0: 384 | version "5.7.1" 385 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 386 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 387 | dependencies: 388 | base64-js "^1.3.1" 389 | ieee754 "^1.1.13" 390 | 391 | cacheable-request@^6.0.0: 392 | version "6.1.0" 393 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" 394 | integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== 395 | dependencies: 396 | clone-response "^1.0.2" 397 | get-stream "^5.1.0" 398 | http-cache-semantics "^4.0.0" 399 | keyv "^3.0.0" 400 | lowercase-keys "^2.0.0" 401 | normalize-url "^4.1.0" 402 | responselike "^1.0.2" 403 | 404 | call-bind@^1.0.0: 405 | version "1.0.2" 406 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 407 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 408 | dependencies: 409 | function-bind "^1.1.1" 410 | get-intrinsic "^1.0.2" 411 | 412 | callsites@^3.0.0, callsites@^3.1.0: 413 | version "3.1.0" 414 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 415 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 416 | 417 | camelcase@^6.2.0: 418 | version "6.3.0" 419 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 420 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 421 | 422 | <<<<<<< Updated upstream 423 | chalk@^4.0.0, chalk@^4.1.1: 424 | version "4.1.1" 425 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" 426 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== 427 | ======= 428 | chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: 429 | version "4.1.2" 430 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 431 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 432 | >>>>>>> Stashed changes 433 | dependencies: 434 | ansi-styles "^4.1.0" 435 | supports-color "^7.1.0" 436 | 437 | <<<<<<< Updated upstream 438 | chokidar@^3.2.2: 439 | version "3.5.1" 440 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 441 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== 442 | ======= 443 | chokidar@^3.5.2: 444 | version "3.5.3" 445 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 446 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 447 | >>>>>>> Stashed changes 448 | dependencies: 449 | anymatch "~3.1.1" 450 | braces "~3.0.2" 451 | glob-parent "~5.1.0" 452 | is-binary-path "~2.1.0" 453 | is-glob "~4.0.1" 454 | normalize-path "~3.0.0" 455 | readdirp "~3.5.0" 456 | optionalDependencies: 457 | fsevents "~2.3.1" 458 | 459 | ci-info@^2.0.0: 460 | version "2.0.0" 461 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 462 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 463 | 464 | cli-boxes@^2.2.1: 465 | version "2.2.1" 466 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" 467 | integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== 468 | 469 | clone-response@^1.0.2: 470 | version "1.0.2" 471 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 472 | integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= 473 | dependencies: 474 | mimic-response "^1.0.0" 475 | 476 | color-convert@^2.0.1: 477 | version "2.0.1" 478 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 479 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 480 | dependencies: 481 | color-name "~1.1.4" 482 | 483 | color-name@~1.1.4: 484 | version "1.1.4" 485 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 486 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 487 | 488 | combined-stream@^1.0.8: 489 | version "1.0.8" 490 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 491 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 492 | dependencies: 493 | delayed-stream "~1.0.0" 494 | 495 | concat-map@0.0.1: 496 | version "0.0.1" 497 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 498 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 499 | 500 | configstore@^5.0.1: 501 | version "5.0.1" 502 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" 503 | integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== 504 | dependencies: 505 | dot-prop "^5.2.0" 506 | graceful-fs "^4.1.2" 507 | make-dir "^3.0.0" 508 | unique-string "^2.0.0" 509 | write-file-atomic "^3.0.0" 510 | xdg-basedir "^4.0.0" 511 | 512 | core-util-is@~1.0.0: 513 | version "1.0.3" 514 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" 515 | integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== 516 | 517 | cron-parser@^3.5.0: 518 | version "3.5.0" 519 | resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-3.5.0.tgz#b1a9da9514c0310aa7ef99c2f3f1d0f8c235257c" 520 | integrity sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ== 521 | dependencies: 522 | is-nan "^1.3.2" 523 | luxon "^1.26.0" 524 | 525 | cross-spawn@^7.0.2: 526 | version "7.0.3" 527 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 528 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 529 | dependencies: 530 | path-key "^3.1.0" 531 | shebang-command "^2.0.0" 532 | which "^2.0.1" 533 | 534 | crypto-random-string@^2.0.0: 535 | version "2.0.0" 536 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" 537 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== 538 | 539 | debug@3.1.0: 540 | version "3.1.0" 541 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 542 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== 543 | dependencies: 544 | ms "2.0.0" 545 | 546 | debug@4.x, debug@^4.1.1, debug@^4.3.2: 547 | version "4.3.4" 548 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 549 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 550 | dependencies: 551 | ms "2.1.2" 552 | 553 | debug@^3.2.7: 554 | version "3.2.7" 555 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 556 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 557 | dependencies: 558 | ms "^2.1.1" 559 | 560 | <<<<<<< Updated upstream 561 | debug@^4.0.1, debug@^4.1.1: 562 | version "4.3.1" 563 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 564 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 565 | dependencies: 566 | ms "2.1.2" 567 | 568 | ======= 569 | >>>>>>> Stashed changes 570 | decompress-response@^3.3.0: 571 | version "3.3.0" 572 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 573 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= 574 | dependencies: 575 | mimic-response "^1.0.0" 576 | 577 | deep-extend@^0.6.0: 578 | version "0.6.0" 579 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 580 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 581 | 582 | deep-is@^0.1.3: 583 | version "0.1.4" 584 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 585 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 586 | 587 | defer-to-connect@^1.0.1: 588 | version "1.1.3" 589 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" 590 | integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== 591 | 592 | define-properties@^1.1.3: 593 | version "1.1.3" 594 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 595 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 596 | dependencies: 597 | object-keys "^1.0.12" 598 | 599 | delayed-stream@~1.0.0: 600 | version "1.0.0" 601 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 602 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 603 | 604 | denque@^1.4.1: 605 | version "1.5.1" 606 | resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" 607 | integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== 608 | 609 | denque@^2.0.1: 610 | version "2.0.1" 611 | resolved "https://registry.yarnpkg.com/denque/-/denque-2.0.1.tgz#bcef4c1b80dc32efe97515744f21a4229ab8934a" 612 | integrity sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ== 613 | 614 | discord-api-types@^0.26.0, discord-api-types@^0.26.1: 615 | version "0.26.1" 616 | resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.26.1.tgz#726f766ddc37d60da95740991d22cb6ef2ed787b" 617 | integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== 618 | 619 | <<<<<<< Updated upstream 620 | discord.js@^12.5.1: 621 | version "12.5.3" 622 | resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-12.5.3.tgz#56820d473c24320871df9ea0bbc6b462f21cf85c" 623 | integrity sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw== 624 | dependencies: 625 | "@discordjs/collection" "^0.1.6" 626 | "@discordjs/form-data" "^3.0.1" 627 | abort-controller "^3.0.0" 628 | node-fetch "^2.6.1" 629 | prism-media "^1.2.9" 630 | setimmediate "^1.0.5" 631 | tweetnacl "^1.0.3" 632 | ws "^7.4.4" 633 | ======= 634 | discord-modals@^1.3.5: 635 | version "1.3.5" 636 | resolved "https://registry.yarnpkg.com/discord-modals/-/discord-modals-1.3.5.tgz#dd48860c51c84fbe3e8b254967622c6c4bc81066" 637 | integrity sha512-OBQ+TquGqNrttGdlK8Ggs3x6PjxAH5GdWVXS+LNOsPLpWHO3wA2Y20bHEQj9oSV5+SdC+CGJfpGPfoKTWXRzhw== 638 | 639 | discord.js@^13.0.1: 640 | version "13.6.0" 641 | resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-13.6.0.tgz#d8a8a591dbf25cbcf9c783d5ddf22c4694860475" 642 | integrity sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g== 643 | dependencies: 644 | "@discordjs/builders" "^0.11.0" 645 | "@discordjs/collection" "^0.4.0" 646 | "@sapphire/async-queue" "^1.1.9" 647 | "@types/node-fetch" "^2.5.12" 648 | "@types/ws" "^8.2.2" 649 | discord-api-types "^0.26.0" 650 | form-data "^4.0.0" 651 | node-fetch "^2.6.1" 652 | ws "^8.4.0" 653 | >>>>>>> Stashed changes 654 | 655 | doctrine@^3.0.0: 656 | version "3.0.0" 657 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 658 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 659 | dependencies: 660 | esutils "^2.0.2" 661 | 662 | dot-prop@^5.2.0: 663 | version "5.3.0" 664 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" 665 | integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== 666 | dependencies: 667 | is-obj "^2.0.0" 668 | 669 | duplexer3@^0.1.4: 670 | version "0.1.4" 671 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 672 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 673 | 674 | emoji-regex@^8.0.0: 675 | version "8.0.0" 676 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 677 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 678 | 679 | end-of-stream@^1.1.0: 680 | version "1.4.4" 681 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 682 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 683 | dependencies: 684 | once "^1.4.0" 685 | 686 | escape-goat@^2.0.0: 687 | version "2.1.1" 688 | resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" 689 | integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== 690 | 691 | escape-string-regexp@^4.0.0: 692 | version "4.0.0" 693 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 694 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 695 | 696 | eslint-scope@^7.1.1: 697 | version "7.1.1" 698 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" 699 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 700 | dependencies: 701 | esrecurse "^4.3.0" 702 | estraverse "^5.2.0" 703 | 704 | eslint-utils@^3.0.0: 705 | version "3.0.0" 706 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 707 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 708 | dependencies: 709 | eslint-visitor-keys "^2.0.0" 710 | 711 | eslint-visitor-keys@^2.0.0: 712 | version "2.1.0" 713 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 714 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 715 | 716 | <<<<<<< Updated upstream 717 | eslint@^7.17.0: 718 | version "7.27.0" 719 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.27.0.tgz#665a1506d8f95655c9274d84bd78f7166b07e9c7" 720 | integrity sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA== 721 | dependencies: 722 | "@babel/code-frame" "7.12.11" 723 | "@eslint/eslintrc" "^0.4.1" 724 | ======= 725 | eslint-visitor-keys@^3.3.0: 726 | version "3.3.0" 727 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 728 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 729 | 730 | eslint@^8.13.0: 731 | version "8.13.0" 732 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.13.0.tgz#6fcea43b6811e655410f5626cfcf328016badcd7" 733 | integrity sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ== 734 | dependencies: 735 | "@eslint/eslintrc" "^1.2.1" 736 | "@humanwhocodes/config-array" "^0.9.2" 737 | >>>>>>> Stashed changes 738 | ajv "^6.10.0" 739 | chalk "^4.0.0" 740 | cross-spawn "^7.0.2" 741 | debug "^4.3.2" 742 | doctrine "^3.0.0" 743 | escape-string-regexp "^4.0.0" 744 | eslint-scope "^7.1.1" 745 | eslint-utils "^3.0.0" 746 | eslint-visitor-keys "^3.3.0" 747 | espree "^9.3.1" 748 | esquery "^1.4.0" 749 | esutils "^2.0.2" 750 | fast-deep-equal "^3.1.3" 751 | file-entry-cache "^6.0.1" 752 | functional-red-black-tree "^1.0.1" 753 | <<<<<<< Updated upstream 754 | glob-parent "^5.0.0" 755 | ======= 756 | glob-parent "^6.0.1" 757 | >>>>>>> Stashed changes 758 | globals "^13.6.0" 759 | ignore "^5.2.0" 760 | import-fresh "^3.0.0" 761 | imurmurhash "^0.1.4" 762 | is-glob "^4.0.0" 763 | js-yaml "^4.1.0" 764 | json-stable-stringify-without-jsonify "^1.0.1" 765 | levn "^0.4.1" 766 | lodash.merge "^4.6.2" 767 | minimatch "^3.0.4" 768 | natural-compare "^1.4.0" 769 | optionator "^0.9.1" 770 | regexpp "^3.2.0" 771 | strip-ansi "^6.0.1" 772 | strip-json-comments "^3.1.0" 773 | text-table "^0.2.0" 774 | v8-compile-cache "^2.0.3" 775 | 776 | espree@^9.3.1: 777 | version "9.3.1" 778 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" 779 | integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== 780 | dependencies: 781 | acorn "^8.7.0" 782 | acorn-jsx "^5.3.1" 783 | eslint-visitor-keys "^3.3.0" 784 | 785 | esquery@^1.4.0: 786 | version "1.4.0" 787 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 788 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 789 | dependencies: 790 | estraverse "^5.1.0" 791 | 792 | esrecurse@^4.3.0: 793 | version "4.3.0" 794 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 795 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 796 | dependencies: 797 | estraverse "^5.2.0" 798 | 799 | estraverse@^5.1.0, estraverse@^5.2.0: 800 | version "5.3.0" 801 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 802 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 803 | 804 | esutils@^2.0.2: 805 | version "2.0.3" 806 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 807 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 808 | 809 | event-target-shim@^5.0.0: 810 | version "5.0.1" 811 | resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" 812 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== 813 | 814 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 815 | version "3.1.3" 816 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 817 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 818 | 819 | fast-json-stable-stringify@^2.0.0: 820 | version "2.1.0" 821 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 822 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 823 | 824 | fast-levenshtein@^2.0.6: 825 | version "2.0.6" 826 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 827 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 828 | 829 | file-entry-cache@^6.0.1: 830 | version "6.0.1" 831 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 832 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 833 | dependencies: 834 | flat-cache "^3.0.4" 835 | 836 | fill-range@^7.0.1: 837 | version "7.0.1" 838 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 839 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 840 | dependencies: 841 | to-regex-range "^5.0.1" 842 | 843 | flat-cache@^3.0.4: 844 | version "3.0.4" 845 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 846 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 847 | dependencies: 848 | flatted "^3.1.0" 849 | rimraf "^3.0.2" 850 | 851 | flatted@^3.1.0: 852 | <<<<<<< Updated upstream 853 | version "3.1.1" 854 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" 855 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== 856 | ======= 857 | version "3.2.5" 858 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" 859 | integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== 860 | 861 | form-data@^3.0.0: 862 | version "3.0.1" 863 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" 864 | integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== 865 | dependencies: 866 | asynckit "^0.4.0" 867 | combined-stream "^1.0.8" 868 | mime-types "^2.1.12" 869 | 870 | form-data@^4.0.0: 871 | version "4.0.0" 872 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 873 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 874 | dependencies: 875 | asynckit "^0.4.0" 876 | combined-stream "^1.0.8" 877 | mime-types "^2.1.12" 878 | >>>>>>> Stashed changes 879 | 880 | fs.realpath@^1.0.0: 881 | version "1.0.0" 882 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 883 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 884 | 885 | fsevents@~2.3.1: 886 | version "2.3.2" 887 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 888 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 889 | 890 | function-bind@^1.1.1: 891 | version "1.1.1" 892 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 893 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 894 | 895 | functional-red-black-tree@^1.0.1: 896 | version "1.0.1" 897 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 898 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 899 | 900 | get-intrinsic@^1.0.2: 901 | version "1.1.1" 902 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 903 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 904 | dependencies: 905 | function-bind "^1.1.1" 906 | has "^1.0.3" 907 | has-symbols "^1.0.1" 908 | 909 | get-stream@^4.1.0: 910 | version "4.1.0" 911 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 912 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 913 | dependencies: 914 | pump "^3.0.0" 915 | 916 | get-stream@^5.1.0: 917 | version "5.2.0" 918 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 919 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 920 | dependencies: 921 | pump "^3.0.0" 922 | 923 | <<<<<<< Updated upstream 924 | glob-parent@^5.0.0, glob-parent@~5.1.0: 925 | ======= 926 | glob-parent@^6.0.1: 927 | version "6.0.2" 928 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 929 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 930 | dependencies: 931 | is-glob "^4.0.3" 932 | 933 | glob-parent@~5.1.2: 934 | >>>>>>> Stashed changes 935 | version "5.1.2" 936 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 937 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 938 | dependencies: 939 | is-glob "^4.0.1" 940 | 941 | glob@^7.1.3: 942 | version "7.2.0" 943 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 944 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 945 | dependencies: 946 | fs.realpath "^1.0.0" 947 | inflight "^1.0.4" 948 | inherits "2" 949 | minimatch "^3.0.4" 950 | once "^1.3.0" 951 | path-is-absolute "^1.0.0" 952 | 953 | global-dirs@^3.0.0: 954 | version "3.0.0" 955 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" 956 | integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== 957 | dependencies: 958 | ini "2.0.0" 959 | 960 | <<<<<<< Updated upstream 961 | globals@^12.1.0: 962 | version "12.4.0" 963 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" 964 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 965 | dependencies: 966 | type-fest "^0.8.1" 967 | 968 | globals@^13.6.0: 969 | version "13.9.0" 970 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" 971 | integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== 972 | ======= 973 | globals@^13.6.0, globals@^13.9.0: 974 | version "13.13.0" 975 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" 976 | integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== 977 | >>>>>>> Stashed changes 978 | dependencies: 979 | type-fest "^0.20.2" 980 | 981 | got@^9.6.0: 982 | version "9.6.0" 983 | resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" 984 | integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== 985 | dependencies: 986 | "@sindresorhus/is" "^0.14.0" 987 | "@szmarczak/http-timer" "^1.1.2" 988 | cacheable-request "^6.0.0" 989 | decompress-response "^3.3.0" 990 | duplexer3 "^0.1.4" 991 | get-stream "^4.1.0" 992 | lowercase-keys "^1.0.1" 993 | mimic-response "^1.0.1" 994 | p-cancelable "^1.0.0" 995 | to-readable-stream "^1.0.0" 996 | url-parse-lax "^3.0.0" 997 | 998 | graceful-fs@^4.1.2, graceful-fs@^4.2.6: 999 | <<<<<<< Updated upstream 1000 | version "4.2.6" 1001 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 1002 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 1003 | ======= 1004 | version "4.2.10" 1005 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 1006 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 1007 | >>>>>>> Stashed changes 1008 | 1009 | has-flag@^3.0.0: 1010 | version "3.0.0" 1011 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1012 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1013 | 1014 | has-flag@^4.0.0: 1015 | version "4.0.0" 1016 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1017 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1018 | 1019 | has-symbols@^1.0.1: 1020 | version "1.0.3" 1021 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 1022 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1023 | 1024 | has-yarn@^2.1.0: 1025 | version "2.1.0" 1026 | resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" 1027 | integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== 1028 | 1029 | has@^1.0.3: 1030 | version "1.0.3" 1031 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1032 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1033 | dependencies: 1034 | function-bind "^1.1.1" 1035 | 1036 | http-cache-semantics@^4.0.0: 1037 | version "4.1.0" 1038 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 1039 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== 1040 | 1041 | ieee754@^1.1.13: 1042 | version "1.2.1" 1043 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 1044 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1045 | 1046 | ignore-by-default@^1.0.1: 1047 | version "1.0.1" 1048 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 1049 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= 1050 | 1051 | ignore@^5.2.0: 1052 | version "5.2.0" 1053 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 1054 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 1055 | 1056 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1057 | version "3.3.0" 1058 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1059 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1060 | dependencies: 1061 | parent-module "^1.0.0" 1062 | resolve-from "^4.0.0" 1063 | 1064 | import-lazy@^2.1.0: 1065 | version "2.1.0" 1066 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 1067 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= 1068 | 1069 | imurmurhash@^0.1.4: 1070 | version "0.1.4" 1071 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1072 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1073 | 1074 | inflight@^1.0.4: 1075 | version "1.0.6" 1076 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1077 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1078 | dependencies: 1079 | once "^1.3.0" 1080 | wrappy "1" 1081 | 1082 | inherits@2, inherits@~2.0.3: 1083 | version "2.0.4" 1084 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1085 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1086 | 1087 | inherits@2.0.3: 1088 | version "2.0.3" 1089 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1090 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1091 | 1092 | ini@2.0.0: 1093 | version "2.0.0" 1094 | resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" 1095 | integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== 1096 | 1097 | ini@~1.3.0: 1098 | version "1.3.8" 1099 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 1100 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 1101 | 1102 | ip@^1.1.5: 1103 | version "1.1.5" 1104 | resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" 1105 | integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= 1106 | 1107 | is-binary-path@~2.1.0: 1108 | version "2.1.0" 1109 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1110 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1111 | dependencies: 1112 | binary-extensions "^2.0.0" 1113 | 1114 | is-ci@^2.0.0: 1115 | version "2.0.0" 1116 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 1117 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 1118 | dependencies: 1119 | ci-info "^2.0.0" 1120 | 1121 | is-extglob@^2.1.1: 1122 | version "2.1.1" 1123 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1124 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1125 | 1126 | is-fullwidth-code-point@^3.0.0: 1127 | version "3.0.0" 1128 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1129 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1130 | 1131 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 1132 | version "4.0.3" 1133 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1134 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1135 | dependencies: 1136 | is-extglob "^2.1.1" 1137 | 1138 | is-installed-globally@^0.4.0: 1139 | version "0.4.0" 1140 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" 1141 | integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== 1142 | dependencies: 1143 | global-dirs "^3.0.0" 1144 | is-path-inside "^3.0.2" 1145 | 1146 | is-nan@^1.3.2: 1147 | version "1.3.2" 1148 | resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" 1149 | integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== 1150 | dependencies: 1151 | call-bind "^1.0.0" 1152 | define-properties "^1.1.3" 1153 | 1154 | is-npm@^5.0.0: 1155 | version "5.0.0" 1156 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" 1157 | integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== 1158 | 1159 | is-number@^7.0.0: 1160 | version "7.0.0" 1161 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1162 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1163 | 1164 | is-obj@^2.0.0: 1165 | version "2.0.0" 1166 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" 1167 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== 1168 | 1169 | is-path-inside@^3.0.2: 1170 | version "3.0.3" 1171 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1172 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1173 | 1174 | is-typedarray@^1.0.0: 1175 | version "1.0.0" 1176 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1177 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 1178 | 1179 | is-yarn-global@^0.3.0: 1180 | version "0.3.0" 1181 | resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" 1182 | integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== 1183 | 1184 | isarray@~1.0.0: 1185 | version "1.0.0" 1186 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1187 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1188 | 1189 | isexe@^2.0.0: 1190 | version "2.0.0" 1191 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1192 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1193 | 1194 | js-yaml@^4.1.0: 1195 | version "4.1.0" 1196 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1197 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1198 | dependencies: 1199 | argparse "^2.0.1" 1200 | 1201 | json-buffer@3.0.0: 1202 | version "3.0.0" 1203 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" 1204 | integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= 1205 | 1206 | json-schema-traverse@^0.4.1: 1207 | version "0.4.1" 1208 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1209 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1210 | 1211 | json-stable-stringify-without-jsonify@^1.0.1: 1212 | version "1.0.1" 1213 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1214 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1215 | 1216 | kareem@2.3.2: 1217 | version "2.3.2" 1218 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.2.tgz#78c4508894985b8d38a0dc15e1a8e11078f2ca93" 1219 | integrity sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ== 1220 | 1221 | kareem@2.3.5: 1222 | version "2.3.5" 1223 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.5.tgz#111fe9dbab754c8ed88b7a2360e2680cec1420ca" 1224 | integrity sha512-qxCyQtp3ioawkiRNQr/v8xw9KIviMSSNmy+63Wubj7KmMn3g7noRXIZB4vPCAP+ETi2SR8eH6CvmlKZuGpoHOg== 1225 | 1226 | keyv@^3.0.0: 1227 | version "3.1.0" 1228 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" 1229 | integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== 1230 | dependencies: 1231 | json-buffer "3.0.0" 1232 | 1233 | latest-version@^5.1.0: 1234 | version "5.1.0" 1235 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" 1236 | integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== 1237 | dependencies: 1238 | package-json "^6.3.0" 1239 | 1240 | levn@^0.4.1: 1241 | version "0.4.1" 1242 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1243 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1244 | dependencies: 1245 | prelude-ls "^1.2.1" 1246 | type-check "~0.4.0" 1247 | 1248 | lodash.get@^4.4.2: 1249 | version "4.4.2" 1250 | resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" 1251 | integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= 1252 | 1253 | lodash.has@^4.5.2: 1254 | version "4.5.2" 1255 | resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" 1256 | integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= 1257 | 1258 | lodash.merge@^4.6.2: 1259 | version "4.6.2" 1260 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1261 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1262 | 1263 | lodash.set@^4.3.2: 1264 | version "4.3.2" 1265 | resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" 1266 | integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= 1267 | 1268 | lodash.unset@^4.5.2: 1269 | version "4.5.2" 1270 | resolved "https://registry.yarnpkg.com/lodash.unset/-/lodash.unset-4.5.2.tgz#370d1d3e85b72a7e1b0cdf2d272121306f23e4ed" 1271 | integrity sha1-Nw0dPoW3Kn4bDN8tJyEhMG8j5O0= 1272 | 1273 | long-timeout@0.1.1: 1274 | version "0.1.1" 1275 | resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514" 1276 | integrity sha1-lyHXiLR+C8taJMLivuGg2lXatRQ= 1277 | 1278 | lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: 1279 | version "1.0.1" 1280 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 1281 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== 1282 | 1283 | lowercase-keys@^2.0.0: 1284 | version "2.0.0" 1285 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 1286 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 1287 | 1288 | lru-cache@^7.4.0: 1289 | version "7.8.1" 1290 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.8.1.tgz#68ee3f4807a57d2ba185b7fd90827d5c21ce82bb" 1291 | integrity sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg== 1292 | 1293 | luxon@^1.26.0: 1294 | version "1.28.0" 1295 | resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.0.tgz#e7f96daad3938c06a62de0fb027115d251251fbf" 1296 | integrity sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ== 1297 | 1298 | make-dir@^3.0.0: 1299 | version "3.1.0" 1300 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1301 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1302 | dependencies: 1303 | semver "^6.0.0" 1304 | 1305 | memory-pager@^1.0.2: 1306 | version "1.5.0" 1307 | resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" 1308 | integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== 1309 | 1310 | <<<<<<< Updated upstream 1311 | mime-db@1.47.0: 1312 | version "1.47.0" 1313 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" 1314 | integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== 1315 | 1316 | mime-types@^2.1.12: 1317 | version "2.1.30" 1318 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" 1319 | integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== 1320 | dependencies: 1321 | mime-db "1.47.0" 1322 | ======= 1323 | mime-db@1.52.0: 1324 | version "1.52.0" 1325 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1326 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1327 | 1328 | mime-types@^2.1.12: 1329 | version "2.1.35" 1330 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1331 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1332 | dependencies: 1333 | mime-db "1.52.0" 1334 | >>>>>>> Stashed changes 1335 | 1336 | mimic-response@^1.0.0, mimic-response@^1.0.1: 1337 | version "1.0.1" 1338 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 1339 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 1340 | 1341 | minimatch@^3.0.4: 1342 | version "3.1.2" 1343 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1344 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1345 | dependencies: 1346 | brace-expansion "^1.1.7" 1347 | 1348 | minimist@^1.2.0: 1349 | version "1.2.6" 1350 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 1351 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 1352 | 1353 | moment-duration-format@^2.3.2: 1354 | version "2.3.2" 1355 | resolved "https://registry.yarnpkg.com/moment-duration-format/-/moment-duration-format-2.3.2.tgz#5fa2b19b941b8d277122ff3f87a12895ec0d6212" 1356 | integrity sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ== 1357 | 1358 | moment@^2.29.1: 1359 | version "2.29.2" 1360 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.2.tgz#00910c60b20843bcba52d37d58c628b47b1f20e4" 1361 | integrity sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg== 1362 | 1363 | mongodb-connection-string-url@^2.4.1: 1364 | version "2.5.2" 1365 | resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz#f075c8d529e8d3916386018b8a396aed4f16e5ed" 1366 | integrity sha512-tWDyIG8cQlI5k3skB6ywaEA5F9f5OntrKKsT/Lteub2zgwSUlhqEN2inGgBTm8bpYJf8QYBdA/5naz65XDpczA== 1367 | dependencies: 1368 | "@types/whatwg-url" "^8.2.1" 1369 | whatwg-url "^11.0.0" 1370 | 1371 | <<<<<<< Updated upstream 1372 | mongodb@3.6.8: 1373 | version "3.6.8" 1374 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.6.8.tgz#3e2632af81915b3ff99b7681121ca0895e8ed407" 1375 | integrity sha512-sDjJvI73WjON1vapcbyBD3Ao9/VN3TKYY8/QX9EPbs22KaCSrQ5rXo5ZZd44tWJ3wl3FlnrFZ+KyUtNH6+1ZPQ== 1376 | ======= 1377 | mongodb@3.7.3: 1378 | version "3.7.3" 1379 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.7.3.tgz#b7949cfd0adc4cc7d32d3f2034214d4475f175a5" 1380 | integrity sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw== 1381 | >>>>>>> Stashed changes 1382 | dependencies: 1383 | bl "^2.2.1" 1384 | bson "^1.1.4" 1385 | denque "^1.4.1" 1386 | optional-require "^1.1.8" 1387 | safe-buffer "^5.1.2" 1388 | optionalDependencies: 1389 | saslprep "^1.0.0" 1390 | 1391 | mongodb@4.3.1: 1392 | version "4.3.1" 1393 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-4.3.1.tgz#e346f76e421ec6f47ddea5c8f5140e6181aaeb94" 1394 | integrity sha512-sNa8APSIk+r4x31ZwctKjuPSaeKuvUeNb/fu/3B6dRM02HpEgig7hTHM8A/PJQTlxuC/KFWlDlQjhsk/S43tBg== 1395 | dependencies: 1396 | bson "^4.6.1" 1397 | denque "^2.0.1" 1398 | mongodb-connection-string-url "^2.4.1" 1399 | socks "^2.6.1" 1400 | optionalDependencies: 1401 | saslprep "^1.0.3" 1402 | 1403 | mongoose-legacy-pluralize@1.0.2: 1404 | version "1.0.2" 1405 | resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" 1406 | integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== 1407 | 1408 | <<<<<<< Updated upstream 1409 | mongoose@^5.11.14, mongoose@^5.12.9: 1410 | version "5.12.12" 1411 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.12.12.tgz#7da29c7d7924ad1fb07b5c5fc0acde2f4aaff4f9" 1412 | integrity sha512-n+ZmGApaL5x/r92w6S4pb+c075i+YKzg1F9YWkznSzQMtvetj/2dSjj2cqsITpd6z60k3K7ZaosIl6hzHwUA9g== 1413 | ======= 1414 | mongoose@^5.12.9: 1415 | version "5.13.14" 1416 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.13.14.tgz#ffc9704bd022dd018fbddcbe27dc802c77719fb4" 1417 | integrity sha512-j+BlQjjxgZg0iWn42kLeZTB91OejcxWpY2Z50bsZTiKJ7HHcEtcY21Godw496GMkBqJMTzmW7G/kZ04mW+Cb7Q== 1418 | >>>>>>> Stashed changes 1419 | dependencies: 1420 | "@types/bson" "1.x || 4.0.x" 1421 | "@types/mongodb" "^3.5.27" 1422 | bson "^1.1.4" 1423 | kareem "2.3.2" 1424 | <<<<<<< Updated upstream 1425 | mongodb "3.6.8" 1426 | ======= 1427 | mongodb "3.7.3" 1428 | >>>>>>> Stashed changes 1429 | mongoose-legacy-pluralize "1.0.2" 1430 | mpath "0.8.4" 1431 | mquery "3.2.5" 1432 | ms "2.1.2" 1433 | regexp-clone "1.0.0" 1434 | safe-buffer "5.2.1" 1435 | sift "13.5.2" 1436 | sliced "1.0.1" 1437 | 1438 | mongoose@^6.2.10: 1439 | version "6.2.10" 1440 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-6.2.10.tgz#ba401b710d7b877453389d4ad7347c272e8ff794" 1441 | integrity sha512-Yp+6UH5M0AlxAVGdC2/Deq0St+2qW73oKCnhJDr83bOZ12eflTLTT5uQF0p6KzvtFj86XWbq/7ApvO4yW6h1sA== 1442 | dependencies: 1443 | bson "^4.2.2" 1444 | kareem "2.3.5" 1445 | mongodb "4.3.1" 1446 | mpath "0.8.4" 1447 | mquery "4.0.2" 1448 | ms "2.1.3" 1449 | sift "16.0.0" 1450 | 1451 | mpath@0.8.4: 1452 | version "0.8.4" 1453 | resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.8.4.tgz#6b566d9581621d9e931dd3b142ed3618e7599313" 1454 | integrity sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g== 1455 | 1456 | mquery@3.2.5: 1457 | version "3.2.5" 1458 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.5.tgz#8f2305632e4bb197f68f60c0cffa21aaf4060c51" 1459 | integrity sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A== 1460 | dependencies: 1461 | bluebird "3.5.1" 1462 | debug "3.1.0" 1463 | regexp-clone "^1.0.0" 1464 | safe-buffer "5.1.2" 1465 | sliced "1.0.1" 1466 | 1467 | mquery@4.0.2: 1468 | version "4.0.2" 1469 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-4.0.2.tgz#a13add5ecd7c2e5a67e0f814b3c7acdfb6772804" 1470 | integrity sha512-oAVF0Nil1mT3rxty6Zln4YiD6x6QsUWYz927jZzjMxOK2aqmhEz5JQ7xmrKK7xRFA2dwV+YaOpKU/S+vfNqKxA== 1471 | dependencies: 1472 | debug "4.x" 1473 | 1474 | ms@2.0.0: 1475 | version "2.0.0" 1476 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1477 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1478 | 1479 | ms@2.1.2: 1480 | version "2.1.2" 1481 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1482 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1483 | 1484 | ms@2.1.3, ms@^2.1.1: 1485 | version "2.1.3" 1486 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1487 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1488 | 1489 | natural-compare@^1.4.0: 1490 | version "1.4.0" 1491 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1492 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1493 | 1494 | node-fetch@^2.6.1, node-fetch@^2.6.5: 1495 | version "2.6.7" 1496 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 1497 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 1498 | dependencies: 1499 | whatwg-url "^5.0.0" 1500 | 1501 | node-schedule@^2.1.0: 1502 | version "2.1.0" 1503 | resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-2.1.0.tgz#068ae38d7351c330616f7fe7cdb05036f977cbaf" 1504 | integrity sha512-nl4JTiZ7ZQDc97MmpTq9BQjYhq7gOtoh7SiPH069gBFBj0PzD8HI7zyFs6rzqL8Y5tTiEEYLxgtbx034YPrbyQ== 1505 | dependencies: 1506 | cron-parser "^3.5.0" 1507 | long-timeout "0.1.1" 1508 | sorted-array-functions "^1.3.0" 1509 | 1510 | nodemon@^2.0.7: 1511 | <<<<<<< Updated upstream 1512 | version "2.0.7" 1513 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" 1514 | integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== 1515 | ======= 1516 | version "2.0.15" 1517 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.15.tgz#504516ce3b43d9dc9a955ccd9ec57550a31a8d4e" 1518 | integrity sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA== 1519 | >>>>>>> Stashed changes 1520 | dependencies: 1521 | chokidar "^3.5.2" 1522 | debug "^3.2.7" 1523 | ignore-by-default "^1.0.1" 1524 | minimatch "^3.0.4" 1525 | pstree.remy "^1.1.8" 1526 | semver "^5.7.1" 1527 | supports-color "^5.5.0" 1528 | touch "^3.1.0" 1529 | undefsafe "^2.0.5" 1530 | update-notifier "^5.1.0" 1531 | 1532 | nopt@~1.0.10: 1533 | version "1.0.10" 1534 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 1535 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= 1536 | dependencies: 1537 | abbrev "1" 1538 | 1539 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1540 | version "3.0.0" 1541 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1542 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1543 | 1544 | normalize-url@^4.1.0: 1545 | version "4.5.1" 1546 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" 1547 | integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== 1548 | 1549 | object-keys@^1.0.12: 1550 | version "1.1.1" 1551 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1552 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1553 | 1554 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1555 | version "1.4.0" 1556 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1557 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1558 | dependencies: 1559 | wrappy "1" 1560 | 1561 | optional-require@^1.0.3: 1562 | version "1.0.3" 1563 | resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.0.3.tgz#275b8e9df1dc6a17ad155369c2422a440f89cb07" 1564 | integrity sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA== 1565 | 1566 | <<<<<<< Updated upstream 1567 | ======= 1568 | optional-require@^1.1.8: 1569 | version "1.1.8" 1570 | resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.1.8.tgz#16364d76261b75d964c482b2406cb824d8ec44b7" 1571 | integrity sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA== 1572 | dependencies: 1573 | require-at "^1.0.6" 1574 | 1575 | >>>>>>> Stashed changes 1576 | optionator@^0.9.1: 1577 | version "0.9.1" 1578 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1579 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1580 | dependencies: 1581 | deep-is "^0.1.3" 1582 | fast-levenshtein "^2.0.6" 1583 | levn "^0.4.1" 1584 | prelude-ls "^1.2.1" 1585 | type-check "^0.4.0" 1586 | word-wrap "^1.2.3" 1587 | 1588 | p-cancelable@^1.0.0: 1589 | version "1.1.0" 1590 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" 1591 | integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== 1592 | 1593 | package-json@^6.3.0: 1594 | version "6.5.0" 1595 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" 1596 | integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== 1597 | dependencies: 1598 | got "^9.6.0" 1599 | registry-auth-token "^4.0.0" 1600 | registry-url "^5.0.0" 1601 | semver "^6.2.0" 1602 | 1603 | parent-module@^1.0.0: 1604 | version "1.0.1" 1605 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1606 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1607 | dependencies: 1608 | callsites "^3.0.0" 1609 | 1610 | parent-module@^2.0.0: 1611 | version "2.0.0" 1612 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-2.0.0.tgz#fa71f88ff1a50c27e15d8ff74e0e3a9523bf8708" 1613 | integrity sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg== 1614 | dependencies: 1615 | callsites "^3.1.0" 1616 | 1617 | path-is-absolute@^1.0.0: 1618 | version "1.0.1" 1619 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1620 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1621 | 1622 | path-key@^3.1.0: 1623 | version "3.1.1" 1624 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1625 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1626 | 1627 | path@^0.12.7: 1628 | version "0.12.7" 1629 | resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" 1630 | integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= 1631 | dependencies: 1632 | process "^0.11.1" 1633 | util "^0.10.3" 1634 | 1635 | picomatch@^2.0.4, picomatch@^2.2.1: 1636 | version "2.3.1" 1637 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1638 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1639 | 1640 | prelude-ls@^1.2.1: 1641 | version "1.2.1" 1642 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1643 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1644 | 1645 | prepend-http@^2.0.0: 1646 | version "2.0.0" 1647 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" 1648 | integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= 1649 | 1650 | prettier@^2.3.0: 1651 | <<<<<<< Updated upstream 1652 | version "2.3.0" 1653 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18" 1654 | integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== 1655 | 1656 | prism-media@^1.2.9: 1657 | version "1.2.9" 1658 | resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-1.2.9.tgz#8d4f97b36efdfc82483eb8d3db64020767866f36" 1659 | integrity sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q== 1660 | ======= 1661 | version "2.6.2" 1662 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" 1663 | integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== 1664 | >>>>>>> Stashed changes 1665 | 1666 | process-nextick-args@~2.0.0: 1667 | version "2.0.1" 1668 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1669 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1670 | 1671 | process@^0.11.1: 1672 | version "0.11.10" 1673 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 1674 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= 1675 | 1676 | pstree.remy@^1.1.8: 1677 | version "1.1.8" 1678 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 1679 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 1680 | 1681 | pump@^3.0.0: 1682 | version "3.0.0" 1683 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1684 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1685 | dependencies: 1686 | end-of-stream "^1.1.0" 1687 | once "^1.3.1" 1688 | 1689 | punycode@^2.1.0, punycode@^2.1.1: 1690 | version "2.1.1" 1691 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1692 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1693 | 1694 | pupa@^2.1.1: 1695 | version "2.1.1" 1696 | resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" 1697 | integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== 1698 | dependencies: 1699 | escape-goat "^2.0.0" 1700 | 1701 | rc@^1.2.8: 1702 | version "1.2.8" 1703 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1704 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1705 | dependencies: 1706 | deep-extend "^0.6.0" 1707 | ini "~1.3.0" 1708 | minimist "^1.2.0" 1709 | strip-json-comments "~2.0.1" 1710 | 1711 | readable-stream@^2.3.5: 1712 | version "2.3.7" 1713 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 1714 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 1715 | dependencies: 1716 | core-util-is "~1.0.0" 1717 | inherits "~2.0.3" 1718 | isarray "~1.0.0" 1719 | process-nextick-args "~2.0.0" 1720 | safe-buffer "~5.1.1" 1721 | string_decoder "~1.1.1" 1722 | util-deprecate "~1.0.1" 1723 | 1724 | readdirp@~3.5.0: 1725 | version "3.5.0" 1726 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 1727 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 1728 | dependencies: 1729 | picomatch "^2.2.1" 1730 | 1731 | regexp-clone@1.0.0, regexp-clone@^1.0.0: 1732 | version "1.0.0" 1733 | resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63" 1734 | integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== 1735 | 1736 | <<<<<<< Updated upstream 1737 | regexpp@^3.1.0: 1738 | version "3.1.0" 1739 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" 1740 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 1741 | ======= 1742 | regexpp@^3.2.0: 1743 | version "3.2.0" 1744 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 1745 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 1746 | >>>>>>> Stashed changes 1747 | 1748 | registry-auth-token@^4.0.0: 1749 | version "4.2.1" 1750 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" 1751 | integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== 1752 | dependencies: 1753 | rc "^1.2.8" 1754 | 1755 | registry-url@^5.0.0: 1756 | version "5.1.0" 1757 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" 1758 | integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== 1759 | dependencies: 1760 | rc "^1.2.8" 1761 | 1762 | <<<<<<< Updated upstream 1763 | require-from-string@^2.0.2: 1764 | version "2.0.2" 1765 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 1766 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 1767 | ======= 1768 | require-at@^1.0.6: 1769 | version "1.0.6" 1770 | resolved "https://registry.yarnpkg.com/require-at/-/require-at-1.0.6.tgz#9eb7e3c5e00727f5a4744070a7f560d4de4f6e6a" 1771 | integrity sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g== 1772 | >>>>>>> Stashed changes 1773 | 1774 | resolve-from@^4.0.0: 1775 | version "4.0.0" 1776 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1777 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1778 | 1779 | responselike@^1.0.2: 1780 | version "1.0.2" 1781 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" 1782 | integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= 1783 | dependencies: 1784 | lowercase-keys "^1.0.0" 1785 | 1786 | rimraf@^3.0.2: 1787 | version "3.0.2" 1788 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1789 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1790 | dependencies: 1791 | glob "^7.1.3" 1792 | 1793 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1794 | version "5.1.2" 1795 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1796 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1797 | 1798 | safe-buffer@5.2.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2: 1799 | version "5.2.1" 1800 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1801 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1802 | 1803 | saslprep@^1.0.0, saslprep@^1.0.3: 1804 | version "1.0.3" 1805 | resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" 1806 | integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== 1807 | dependencies: 1808 | sparse-bitfield "^3.0.3" 1809 | 1810 | semver-diff@^3.1.1: 1811 | version "3.1.1" 1812 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" 1813 | integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== 1814 | dependencies: 1815 | semver "^6.3.0" 1816 | 1817 | semver@^5.7.1: 1818 | version "5.7.1" 1819 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1820 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1821 | 1822 | semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: 1823 | version "6.3.0" 1824 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1825 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1826 | 1827 | semver@^7.3.4: 1828 | version "7.3.6" 1829 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.6.tgz#5d73886fb9c0c6602e79440b97165c29581cbb2b" 1830 | integrity sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w== 1831 | dependencies: 1832 | lru-cache "^7.4.0" 1833 | 1834 | setimmediate@^1.0.5: 1835 | version "1.0.5" 1836 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 1837 | integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= 1838 | 1839 | shebang-command@^2.0.0: 1840 | version "2.0.0" 1841 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1842 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1843 | dependencies: 1844 | shebang-regex "^3.0.0" 1845 | 1846 | shebang-regex@^3.0.0: 1847 | version "3.0.0" 1848 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1849 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1850 | 1851 | sift@13.5.2: 1852 | version "13.5.2" 1853 | resolved "https://registry.yarnpkg.com/sift/-/sift-13.5.2.tgz#24a715e13c617b086166cd04917d204a591c9da6" 1854 | integrity sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA== 1855 | 1856 | sift@16.0.0: 1857 | version "16.0.0" 1858 | resolved "https://registry.yarnpkg.com/sift/-/sift-16.0.0.tgz#447991577db61f1a8fab727a8a98a6db57a23eb8" 1859 | integrity sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ== 1860 | 1861 | signal-exit@^3.0.2: 1862 | version "3.0.7" 1863 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 1864 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1865 | 1866 | sliced@1.0.1: 1867 | version "1.0.1" 1868 | resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" 1869 | integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= 1870 | 1871 | smart-buffer@^4.2.0: 1872 | version "4.2.0" 1873 | resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" 1874 | integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== 1875 | 1876 | socks@^2.6.1: 1877 | version "2.6.2" 1878 | resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" 1879 | integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== 1880 | dependencies: 1881 | ip "^1.1.5" 1882 | smart-buffer "^4.2.0" 1883 | 1884 | sorted-array-functions@^1.3.0: 1885 | version "1.3.0" 1886 | resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5" 1887 | integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== 1888 | 1889 | sparse-bitfield@^3.0.3: 1890 | version "3.0.3" 1891 | resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" 1892 | integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= 1893 | dependencies: 1894 | memory-pager "^1.0.2" 1895 | 1896 | string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2: 1897 | version "4.2.3" 1898 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1899 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1900 | dependencies: 1901 | emoji-regex "^8.0.0" 1902 | is-fullwidth-code-point "^3.0.0" 1903 | strip-ansi "^6.0.1" 1904 | 1905 | string_decoder@~1.1.1: 1906 | version "1.1.1" 1907 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1908 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1909 | dependencies: 1910 | safe-buffer "~5.1.0" 1911 | 1912 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1913 | version "6.0.1" 1914 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1915 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1916 | dependencies: 1917 | ansi-regex "^5.0.1" 1918 | 1919 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1920 | version "3.1.1" 1921 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1922 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1923 | 1924 | strip-json-comments@~2.0.1: 1925 | version "2.0.1" 1926 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1927 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1928 | 1929 | supports-color@^5.5.0: 1930 | version "5.5.0" 1931 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1932 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1933 | dependencies: 1934 | has-flag "^3.0.0" 1935 | 1936 | supports-color@^7.1.0: 1937 | version "7.2.0" 1938 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1939 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1940 | dependencies: 1941 | has-flag "^4.0.0" 1942 | 1943 | text-table@^0.2.0: 1944 | version "0.2.0" 1945 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1946 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1947 | 1948 | to-readable-stream@^1.0.0: 1949 | version "1.0.0" 1950 | resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" 1951 | integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== 1952 | 1953 | to-regex-range@^5.0.1: 1954 | version "5.0.1" 1955 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1956 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1957 | dependencies: 1958 | is-number "^7.0.0" 1959 | 1960 | touch@^3.1.0: 1961 | version "3.1.0" 1962 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 1963 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 1964 | dependencies: 1965 | nopt "~1.0.10" 1966 | 1967 | <<<<<<< Updated upstream 1968 | tweetnacl@^1.0.3: 1969 | version "1.0.3" 1970 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" 1971 | integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== 1972 | ======= 1973 | tr46@^3.0.0: 1974 | version "3.0.0" 1975 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" 1976 | integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== 1977 | dependencies: 1978 | punycode "^2.1.1" 1979 | 1980 | tr46@~0.0.3: 1981 | version "0.0.3" 1982 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1983 | integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= 1984 | 1985 | ts-mixer@^6.0.0: 1986 | version "6.0.1" 1987 | resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.1.tgz#7c2627fb98047eb5f3c7f2fee39d1521d18fe87a" 1988 | integrity sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg== 1989 | 1990 | tslib@^2.3.1: 1991 | version "2.3.1" 1992 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" 1993 | integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== 1994 | >>>>>>> Stashed changes 1995 | 1996 | type-check@^0.4.0, type-check@~0.4.0: 1997 | version "0.4.0" 1998 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1999 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2000 | dependencies: 2001 | prelude-ls "^1.2.1" 2002 | 2003 | type-fest@^0.20.2: 2004 | version "0.20.2" 2005 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2006 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2007 | 2008 | <<<<<<< Updated upstream 2009 | type-fest@^0.8.1: 2010 | version "0.8.1" 2011 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 2012 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 2013 | 2014 | ======= 2015 | >>>>>>> Stashed changes 2016 | typedarray-to-buffer@^3.1.5: 2017 | version "3.1.5" 2018 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 2019 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 2020 | dependencies: 2021 | is-typedarray "^1.0.0" 2022 | 2023 | undefsafe@^2.0.5: 2024 | version "2.0.5" 2025 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" 2026 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== 2027 | 2028 | unique-string@^2.0.0: 2029 | version "2.0.0" 2030 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" 2031 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== 2032 | dependencies: 2033 | crypto-random-string "^2.0.0" 2034 | 2035 | update-notifier@^5.1.0: 2036 | version "5.1.0" 2037 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" 2038 | integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== 2039 | dependencies: 2040 | boxen "^5.0.0" 2041 | chalk "^4.1.0" 2042 | configstore "^5.0.1" 2043 | has-yarn "^2.1.0" 2044 | import-lazy "^2.1.0" 2045 | is-ci "^2.0.0" 2046 | is-installed-globally "^0.4.0" 2047 | is-npm "^5.0.0" 2048 | is-yarn-global "^0.3.0" 2049 | latest-version "^5.1.0" 2050 | pupa "^2.1.1" 2051 | semver "^7.3.4" 2052 | semver-diff "^3.1.1" 2053 | xdg-basedir "^4.0.0" 2054 | 2055 | uri-js@^4.2.2: 2056 | version "4.4.1" 2057 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2058 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2059 | dependencies: 2060 | punycode "^2.1.0" 2061 | 2062 | url-parse-lax@^3.0.0: 2063 | version "3.0.0" 2064 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" 2065 | integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= 2066 | dependencies: 2067 | prepend-http "^2.0.0" 2068 | 2069 | util-deprecate@~1.0.1: 2070 | version "1.0.2" 2071 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2072 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2073 | 2074 | util@^0.10.3: 2075 | version "0.10.4" 2076 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" 2077 | integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== 2078 | dependencies: 2079 | inherits "2.0.3" 2080 | 2081 | v8-compile-cache@^2.0.3: 2082 | version "2.3.0" 2083 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 2084 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 2085 | 2086 | <<<<<<< Updated upstream 2087 | ======= 2088 | webidl-conversions@^3.0.0: 2089 | version "3.0.1" 2090 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 2091 | integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= 2092 | 2093 | webidl-conversions@^7.0.0: 2094 | version "7.0.0" 2095 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" 2096 | integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== 2097 | 2098 | whatwg-url@^11.0.0: 2099 | version "11.0.0" 2100 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" 2101 | integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== 2102 | dependencies: 2103 | tr46 "^3.0.0" 2104 | webidl-conversions "^7.0.0" 2105 | 2106 | whatwg-url@^5.0.0: 2107 | version "5.0.0" 2108 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 2109 | integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= 2110 | dependencies: 2111 | tr46 "~0.0.3" 2112 | webidl-conversions "^3.0.0" 2113 | 2114 | >>>>>>> Stashed changes 2115 | which@^2.0.1: 2116 | version "2.0.2" 2117 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2118 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2119 | dependencies: 2120 | isexe "^2.0.0" 2121 | 2122 | widest-line@^3.1.0: 2123 | version "3.1.0" 2124 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" 2125 | integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== 2126 | dependencies: 2127 | string-width "^4.0.0" 2128 | 2129 | word-wrap@^1.2.3: 2130 | version "1.2.3" 2131 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2132 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2133 | 2134 | wrap-ansi@^7.0.0: 2135 | version "7.0.0" 2136 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2137 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2138 | dependencies: 2139 | ansi-styles "^4.0.0" 2140 | string-width "^4.1.0" 2141 | strip-ansi "^6.0.0" 2142 | 2143 | wrappy@1: 2144 | version "1.0.2" 2145 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2146 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2147 | 2148 | write-file-atomic@^3.0.0: 2149 | version "3.0.3" 2150 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 2151 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 2152 | dependencies: 2153 | imurmurhash "^0.1.4" 2154 | is-typedarray "^1.0.0" 2155 | signal-exit "^3.0.2" 2156 | typedarray-to-buffer "^3.1.5" 2157 | 2158 | <<<<<<< Updated upstream 2159 | ws@^7.4.4: 2160 | version "7.4.6" 2161 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" 2162 | integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== 2163 | ======= 2164 | ws@^8.4.0: 2165 | version "8.5.0" 2166 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" 2167 | integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== 2168 | >>>>>>> Stashed changes 2169 | 2170 | xdg-basedir@^4.0.0: 2171 | version "4.0.0" 2172 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" 2173 | integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== 2174 | 2175 | zod@^3.11.6: 2176 | version "3.14.4" 2177 | resolved "https://registry.yarnpkg.com/zod/-/zod-3.14.4.tgz#e678fe9e5469f4663165a5c35c8f3dc66334a5d6" 2178 | integrity sha512-U9BFLb2GO34Sfo9IUYp0w3wJLlmcyGoMd75qU9yf+DrdGA4kEx6e+l9KOkAlyUO0PSQzZCa3TR4qVlcmwqSDuw== 2179 | --------------------------------------------------------------------------------