├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── package.json ├── src ├── configs │ ├── config.json │ └── settings.json ├── events │ ├── message.js │ └── messageReactionAdd.js └── handlers │ ├── eventHandler.js │ ├── functionHandler.js │ └── mongoHandler.js ├── theark.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 | rules: { 11 | semi: ["error", "always"], 12 | quotes: ["error", "double"], 13 | eqeqeq: ["error", "always"], 14 | camelcase: "error", 15 | "key-spacing": "error", 16 | "keyword-spacing": "error", 17 | "no-mixed-spaces-and-tabs": "error", 18 | "no-multiple-empty-lines": "error", 19 | "prefer-arrow-callback": "error", 20 | "no-use-before-define": ["error", { "functions": false, "classes": true }], 21 | "no-else-return": ["error", { allowElseIf: false }], 22 | "prefer-const": ["error", { "destructuring": "any", "ignoreReadBeforeAssign": false }], 23 | "no-unused-vars": ["error", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }] 24 | } 25 | }; 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | package-lock.json 3 | /node_modules 4 | .idea 5 | .vscode -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "tabWidth": 2, 4 | "useTabs": true, 5 | "semi": true, 6 | "singleQuote": false, 7 | "trailingComma": "none", 8 | "bracketSpacing": true 9 | } -------------------------------------------------------------------------------- /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.md: -------------------------------------------------------------------------------- 1 | # Discord Interview Bot 2 | 3 | # Kurulum 4 | * İlk olarak bilgisayarına [Node JS](https://nodejs.org/en/) indir. 5 | * Bu projeyi zip halinde indir. 6 | * Herhangi bir klasöre zipi çıkart. 7 | * Daha sonra src klasörünün içindeki configs klasörünün içine gir `settings.json` ve `config.json` dosyalarının içindeki bilgileri doldur. 8 | * Sonra klasörün içerisinde bir `powershell` ya da `cmd` penceresi aç. 9 | * ```npm install``` yazarak tüm modülleri kur. 10 | * Kurulum bittikten sonra ```npm start``` yaz ve botu başlat. 11 | 12 | # İletişim 13 | * [Discord Sunucum](https://discord.gg/UEPcFtytcc) 14 | * [Discord Profilim](https://discord.com/users/350976460313329665) 15 | * Herhangi bir hata bulmanız durumunda ya da yardım isteyeceğiniz zaman buralardan bana ulaşabilirsiniz. 16 | 17 | ### NOT: Botta MIT lisansı bulunmaktadır. Bu botun dosyalarının benden habersiz paylaşılması/satılması durumunda gerekli işlemler yapılacaktır! 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "interview", 3 | "version": "0.0.1", 4 | "description": "", 5 | "main": "theark.js", 6 | "scripts": { 7 | "start": "node theark.js" 8 | }, 9 | "dependencies": { 10 | "ark.db": "^2.6.9", 11 | "discord.js": "^12.5.3", 12 | "moment": "^2.29.1" 13 | }, 14 | "license": "MIT" 15 | } 16 | -------------------------------------------------------------------------------- /src/configs/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "command": "/başvuru", 3 | "channel": "795610790933299230", 4 | "parent": "795614296402821121", 5 | "log": "795647288168939532", 6 | "staff": "755826815272222752", 7 | 8 | "mark": "✅", 9 | "cross": "❌" 10 | } -------------------------------------------------------------------------------- /src/configs/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "" 3 | } 4 | -------------------------------------------------------------------------------- /src/events/message.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const { Database } = require("ark.db"); 3 | const db = new Database(); 4 | const conf = require("../configs/config.json"); 5 | 6 | module.exports = async (message) => { 7 | if (message.author.bot || message.channel.id !== conf.channel) return; 8 | if (message.content !== conf.command) return message.delete(); 9 | if (message.guild.channels.cache.filter((x) => x.parentID === conf.parent).size >= 7) { 10 | message.react(conf.cross); 11 | return message.channel.send(` ${message.author.toString()}, üzgünüm ama şu anki başvuru kapasitem dolu! Daha sonra tekrar dener misin?`).then((x) => x.delete({ timeout: 20000 })); 12 | } 13 | 14 | message.react(conf.mark); 15 | message.channel.send(` 16 | ${message.author.toString()}, başvurun için sol tarafta sana özel bir kanal açıldı! 17 | O kanaldan botun sorduğu soruları cevaplayarak yetkili başvurusunda bulunabilirsin! 18 | `).then((x) => x.delete({ timeout: 10000 })); 19 | 20 | const regex = /[a-zA-Z0-9]{1,20}/g; 21 | const username = message.author.username.match(regex)[0]; 22 | const newChannel = await message.guild.channels.create(username, { 23 | type: "text", 24 | parent: message.channel.parent, 25 | permissionOverwrites: [{ id: message.author.id, allow: ["VIEW_CHANNEL"], deny: ["SEND_MESSAGES"] }] 26 | }); 27 | const newMessage = await newChannel.send(` 28 | Hoş Geldin ${message.author.toString()} 29 | Eğer Başvuruya Devam Etmek İstiyorsan, ${conf.mark} Emojisine Tıkla! 30 | Tıkladıktan Sonra Botun Soracağı Soruları Cevaplamalısın! 31 | \`Not: Başvuru Yaparken Tek Mesaj Halinde Cevap Veriniz. Bütün Soruları Cevaplamak İçin 5 Dakikanız Var\` 32 | `); 33 | await newMessage.react(conf.mark); 34 | await newMessage.react(conf.cross); 35 | 36 | const approved = newMessage.createReactionCollector((reaction, user) => reaction.emoji.name === conf.mark && user.id === message.author.id, { time: 1000 * 60 * 5 }); 37 | const denied = newMessage.createReactionCollector((reaction, user) => reaction.emoji.name === conf.cross && user.id === message.author.id, { time: 1000 * 60 * 5 }); 38 | 39 | approved.on("collect", async () => { 40 | newChannel.overwritePermissions([{ id: message.author.id, allow: ["SEND_MESSAGES"] }]); 41 | newMessage.delete(); 42 | await newChannel.send("Öncelikle adını söyler misin?"); 43 | const name = await newChannel.awaitMessages((m) => m.author.id === message.author.id, { 44 | max: 1, 45 | time: 1000 * 60 * 5, 46 | errors: ["time"] 47 | }).catch(() => newChannel.delete()); 48 | await newChannel.send(`Memnun oldum ${name.first().content}, şimdi de yaşını öğrenebilir miyim?`); 49 | const age = await newChannel.awaitMessages((m) => m.author.id === message.author.id, { 50 | max: 1, 51 | time: 1000 * 60 * 5, 52 | errors: ["time"] 53 | }).catch(() => newChannel.delete()); 54 | await newChannel.send(`Teşekkür ederim ${name.first().content}, Peki şimdi de Discord'da yaklaşık kaç saat aktif olduğunu söyler misin?`); 55 | const activity = await newChannel.awaitMessages((m) => m.author.id === message.author.id, { 56 | max: 1, 57 | time: 1000 * 60 * 5, 58 | errors: ["time"] 59 | }).catch(() => newChannel.delete()); 60 | await newChannel.send(`Peki günlük kaç invite yapabilirsin? Ya da yapabilir misin?`); 61 | const invite = await newChannel.awaitMessages((m) => m.author.id === message.author.id, { 62 | max: 1, 63 | time: 1000 * 60 * 5, 64 | errors: ["time"] 65 | }).catch(() => newChannel.delete()); 66 | await newChannel.send(`Başvurun başarıyla alındı ${isim.first().content}, Yetkililer en kısa sürede başvurunu inceleyip geri döneceklerdir! İyi günler.`); 67 | const embed = new MessageEmbed() 68 | .setAuthor(message.author.username, message.author.avatarURL({ dynamic: true, size: 2048 })) 69 | .setThumbnail(message.author.avatarURL({ dynamic: true, size: 2048 })) 70 | .setTitle("Cevap Bekliyor...") 71 | .setColor("BLUE") 72 | .setDescription(` 73 | **Başvuruda bulunan:** ${message.member.toString()} \`(${message.author.username} - ${message.author.id})\` 74 | **Başvuru tarihi:** ${moment().format("LLL")} 75 | **İsim:** ${name.first().content} 76 | **Yaş:** ${age.first().content} 77 | **Aktiflik Süresi:** ${activity.first().content} 78 | **Günlük İnvite Durumu:** ${invite.first().content} 79 | `); 80 | await message.guild.channels.cache.get(conf.log).send(embed); 81 | await x.react(conf.mark); 82 | await x.react(conf.cross); 83 | db.set(`başvuran.${x.id}`, message.author.id); 84 | db.set(`date.${x.id}`, Date.now()); 85 | setTimeout(() => { 86 | newChannel.delete(); 87 | }, 10000); 88 | }); 89 | 90 | denied.on("collect", () => newChannel.delete()); 91 | 92 | approved.on("end", (collected) => { 93 | if (collected.size !== 0) return; 94 | newChannel.delete(); 95 | }); 96 | }; 97 | 98 | module.exports.conf = { 99 | name: "message" 100 | }; 101 | -------------------------------------------------------------------------------- /src/events/messageReactionAdd.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const { Database } = require("ark.db"); 3 | const db = new Database(); 4 | const conf = require("../../config.json"); 5 | const moment = require("moment"); 6 | moment.locale("tr"); 7 | 8 | module.exports = async (reaction, user) => { 9 | if (user.bot || reaction.message.channel.id !== conf.log) return; 10 | if (reaction.emoji.name === conf.mark) { 11 | const data = db.get(`başvuran.${reaction.message.id}`); 12 | const date = db.get(`date.${reaction.message.id}`); 13 | const member = reaction.message.guild.members.cache.get(data); 14 | member.roles.add(conf.staff); 15 | 16 | const embed = new MessageEmbed() 17 | .setTitle("Onaylandı!") 18 | .setColor("GREEN") 19 | .setAuthor(member.user.username, member.user.avatarURL({ dynamic: true, size: 2048 })) 20 | .setThumbnail(member.user.avatarURL({ dynamic: true, size: 2048 })) 21 | .setDescription(` 22 | Başvuru Sahibi: ${member.toString()} \`(${member.user.username} - ${member.user.id})\` 23 | Başvurduğu tarih: ${moment(date).format("LLL")} 24 | Onaylandığı Tarih: ${moment().format("LLL")} 25 | Onaylayan: ${user.toString()} \`(${user.username} - ${user.id})\` 26 | `); 27 | reaction.message.edit(embed); 28 | reaction.message.reactions.removeAll(); 29 | member.send(`${reaction.message.guild.name} sunucusundaki yetkili başvurun onaylandı!`).catch(() => {}); 30 | } else if (reaction.emoji.name === conf.cross) { 31 | const data = db.get(`başvuran.${reaction.message.id}`); 32 | const date = db.get(`date.${reaction.message.id}`); 33 | const member = reaction.message.guild.members.cache.get(data); 34 | const embed = new MessageEmbed() 35 | .setTitle("Reddedildi!") 36 | .setColor("RED") 37 | .setAuthor(member.user.username, member.user.avatarURL({ dynamic: true, size: 2048 })) 38 | .setThumbnail(member.user.avatarURL({ dynamic: true, size: 2048 })) 39 | .setDescription(` 40 | Başvuru Sahibi: ${member.toString()} \`(${member.user.username} - ${member.user.id})\` 41 | Başvurduğu tarih: ${moment(date).format("LLL")} 42 | Reddedildiği Tarih: ${moment().format("LLL")} 43 | Reddeden: ${user.toString()} \`(${user.username} - ${user.id})\` 44 | `); 45 | reaction.message.edit(embed); 46 | reaction.message.reactions.removeAll(); 47 | member.send(`${reaction.message.guild.name} sunucusundaki yetkili başvurun reddedildi!`).catch(() => {}); 48 | } 49 | } 50 | 51 | module.exports.conf = { 52 | name: "messageReactionAdd" 53 | }; -------------------------------------------------------------------------------- /src/handlers/eventHandler.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const client = global.client; 3 | 4 | fs.readdir("./src/events", (err, files) => { 5 | if (err) return console.error(err); 6 | files 7 | .filter((file) => file.endsWith(".js")) 8 | .forEach((file) => { 9 | let prop = require(`../events/${file}`); 10 | if (!prop.conf) return; 11 | client.on(prop.conf.name, prop); 12 | console.log(`[EVENT] ${prop.conf.name} loaded!`); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /src/handlers/functionHandler.js: -------------------------------------------------------------------------------- 1 | const penals = require("../schemas/penals"); 2 | const { GuildMember, TextChannel } = require("discord.js"); 3 | 4 | module.exports = async (client) => { 5 | TextChannel.prototype.wsend = async function (message) { 6 | const hooks = await this.fetchWebhooks(); 7 | let webhook = hooks.find(a => a.name === client.user.username && a.owner.id === client.user.id); 8 | if (webhook) return hook.send(message); 9 | else { 10 | webhook = await this.createWebhook(client.user.username, { avatar: client.user.avatarURL() }); 11 | return webhook.send(message); 12 | }; 13 | }; 14 | 15 | Array.prototype.random = function () { 16 | return this[Math.floor((Math.random() * this.length))]; 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /src/handlers/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 | useFindAndModify: false, 8 | }); 9 | 10 | mongoose.connection.on("connected", () => { 11 | console.log("Connected to DB"); 12 | }); 13 | 14 | mongoose.connection.on("error", () => { 15 | console.error("Connection Error!"); 16 | }); 17 | -------------------------------------------------------------------------------- /theark.js: -------------------------------------------------------------------------------- 1 | const { Client, Collection } = require("discord.js"); 2 | const client = (global.client = new Client({ fetchAllMembers: true })); 3 | const settings = require("./src/configs/settings.json"); 4 | require("./src/handlers/eventHandler"); 5 | require("./src/handlers/mongoHandler"); 6 | require("./src/handlers/functionHandler")(client); 7 | 8 | client 9 | .login(settings.token) 10 | .then(() => console.log("[BOT] Bot connected!")) 11 | .catch(() => console.log("[BOT] Bot can't connected!")); 12 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@discordjs/collection@^0.1.6": 6 | version "0.1.6" 7 | resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.1.6.tgz#9e9a7637f4e4e0688fd8b2b5c63133c91607682c" 8 | integrity sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ== 9 | 10 | "@discordjs/form-data@^3.0.1": 11 | version "3.0.1" 12 | resolved "https://registry.yarnpkg.com/@discordjs/form-data/-/form-data-3.0.1.tgz#5c9e6be992e2e57d0dfa0e39979a850225fb4697" 13 | integrity sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg== 14 | dependencies: 15 | asynckit "^0.4.0" 16 | combined-stream "^1.0.8" 17 | mime-types "^2.1.12" 18 | 19 | abort-controller@^3.0.0: 20 | version "3.0.0" 21 | resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" 22 | integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== 23 | dependencies: 24 | event-target-shim "^5.0.0" 25 | 26 | ansi-styles@^4.1.0: 27 | version "4.3.0" 28 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 29 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 30 | dependencies: 31 | color-convert "^2.0.1" 32 | 33 | ark.db@^2.1.0: 34 | version "2.1.0" 35 | resolved "https://registry.yarnpkg.com/ark.db/-/ark.db-2.1.0.tgz#6d8a964f90c3b94aaa242aa846e2c5a69ce7e8a7" 36 | integrity sha512-pPPFIfZgoJbymn0Gw4fWuQ2sZDRbIe/pMyUybPZ4e9YBeHhmBePH2I4PUVtx+Ti6sVm1JjnWoQwRpJdpeiVijQ== 37 | dependencies: 38 | chalk "^4.1.1" 39 | graceful-fs "^4.2.6" 40 | lodash "^4.17.21" 41 | 42 | asynckit@^0.4.0: 43 | version "0.4.0" 44 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 45 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 46 | 47 | chalk@^4.1.1: 48 | version "4.1.1" 49 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" 50 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== 51 | dependencies: 52 | ansi-styles "^4.1.0" 53 | supports-color "^7.1.0" 54 | 55 | color-convert@^2.0.1: 56 | version "2.0.1" 57 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 58 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 59 | dependencies: 60 | color-name "~1.1.4" 61 | 62 | color-name@~1.1.4: 63 | version "1.1.4" 64 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 65 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 66 | 67 | combined-stream@^1.0.8: 68 | version "1.0.8" 69 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 70 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 71 | dependencies: 72 | delayed-stream "~1.0.0" 73 | 74 | delayed-stream@~1.0.0: 75 | version "1.0.0" 76 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 77 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 78 | 79 | discord.js@^12.5.3: 80 | version "12.5.3" 81 | resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-12.5.3.tgz#56820d473c24320871df9ea0bbc6b462f21cf85c" 82 | integrity sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw== 83 | dependencies: 84 | "@discordjs/collection" "^0.1.6" 85 | "@discordjs/form-data" "^3.0.1" 86 | abort-controller "^3.0.0" 87 | node-fetch "^2.6.1" 88 | prism-media "^1.2.9" 89 | setimmediate "^1.0.5" 90 | tweetnacl "^1.0.3" 91 | ws "^7.4.4" 92 | 93 | event-target-shim@^5.0.0: 94 | version "5.0.1" 95 | resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" 96 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== 97 | 98 | graceful-fs@^4.2.6: 99 | version "4.2.6" 100 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 101 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 102 | 103 | has-flag@^4.0.0: 104 | version "4.0.0" 105 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 106 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 107 | 108 | lodash@^4.17.21: 109 | version "4.17.21" 110 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 111 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 112 | 113 | mime-db@1.47.0: 114 | version "1.47.0" 115 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" 116 | integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== 117 | 118 | mime-types@^2.1.12: 119 | version "2.1.30" 120 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" 121 | integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== 122 | dependencies: 123 | mime-db "1.47.0" 124 | 125 | moment@^2.29.1: 126 | version "2.29.1" 127 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" 128 | integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== 129 | 130 | node-fetch@^2.6.1: 131 | version "2.6.1" 132 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" 133 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 134 | 135 | prism-media@^1.2.9: 136 | version "1.2.9" 137 | resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-1.2.9.tgz#8d4f97b36efdfc82483eb8d3db64020767866f36" 138 | integrity sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q== 139 | 140 | setimmediate@^1.0.5: 141 | version "1.0.5" 142 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 143 | integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= 144 | 145 | supports-color@^7.1.0: 146 | version "7.2.0" 147 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 148 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 149 | dependencies: 150 | has-flag "^4.0.0" 151 | 152 | tweetnacl@^1.0.3: 153 | version "1.0.3" 154 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" 155 | integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== 156 | 157 | ws@^7.4.4: 158 | version "7.4.5" 159 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" 160 | integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== 161 | --------------------------------------------------------------------------------