├── README.md ├── Settings.js ├── package.json └── src ├── App.js ├── base ├── Core.js └── Utils.js ├── commands ├── Members.js └── Referans.js ├── events ├── InteractionCreate.js ├── MemberAdd.js ├── MemberRemove.js └── MessageCreate.js └── models └── User.js /README.md: -------------------------------------------------------------------------------- 1 | # Referans Sistemi 2 | 3 | # Kurulum 4 | * İlk olarak bilgisayarına [Node JS](https://nodejs.org/en/) indir. 5 | * Daha sonra bir [MongoDB](http://mongodb.com) hesabı oluştur ve connection linki al. 6 | * Bu projeyi zip halinde indir. 7 | * Herhangi bir klasöre zipi çıkart. 8 | * Setting.js dosyasını kendine göre düzenle. 9 | * Sonra klasörün içerisinde bir `powershell` ya da `cmd` penceresi aç. 10 | * ```npm install``` yazarak tüm modülleri kur. 11 | * Kurulum bittikten sonra ```npm start``` yaz ve botu başlat. 12 | 13 | Tada 🎉. Artık referans sistemi hazır. Dilediğin gibi kullanabilirsin. 14 | 15 | # Görseller: 16 | ## En kısa sürede eklenecektir. 17 | 18 | # İletişim 19 | * [Discord Sunucum](https://discord.gg/t7D9hq6fMh) 20 | * [Discord Profilim](https://discord.com/users/337975602525241344) 21 | * Herhangi bir hata bulmanız durumunda ya da yardım isteyeceğiniz zaman buralardan bana ulaşabilirsiniz. 22 | 23 | ### NOT: Botta MIT lisansı bulunmaktadır. Bu botun dosyalarının benden habersiz paylaşılması/satılması durumunda gerekli işlemler yapılacaktır! 24 | -------------------------------------------------------------------------------- /Settings.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | TOKEN: "", 3 | URI: "", 4 | GUILD: "", 5 | TICK: "EMOJI", 6 | CROSS: "EMOJI", 7 | WELCOME: "", 8 | LOG: "", 9 | UNVERIFIED: "", 10 | VERIFIED: "", 11 | STAFFS: [] 12 | } 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "awoken", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "src/App.js", 6 | "scripts": { 7 | "start": "node src/App.js" 8 | }, 9 | "keywords": [], 10 | "author": "awoken", 11 | "license": "ISC", 12 | "dependencies": { 13 | "common-tags": "^1.8.2", 14 | "discord.js": "^13.6.0", 15 | "moment": "^2.29.1", 16 | "moment-duration-format": "^2.3.2", 17 | "moment-timezone": "^0.5.34", 18 | "mongoose": "^6.2.1" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | const Client = new (require("./base/Core")); 2 | 3 | Client.Build(); -------------------------------------------------------------------------------- /src/base/Core.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const Mongoose = require("mongoose"); 3 | const Utils = require("./Utils"); 4 | 5 | class Client extends Discord.Client { 6 | constructor(structures) { 7 | super({ 8 | presence: { activities: [{ name: "Created by awoken", type: "WATCHING" }] }, 9 | partials: [ 10 | Discord.Constants.PartialTypes.GUILD_MEMBER, 11 | Discord.Constants.PartialTypes.MESSAGE, 12 | Discord.Constants.PartialTypes.CHANNEL, 13 | Discord.Constants.PartialTypes.USER, 14 | Discord.Constants.PartialTypes.REACTION 15 | ], 16 | intents: [ 17 | Discord.Intents.FLAGS.GUILDS, 18 | Discord.Intents.FLAGS.GUILD_MEMBERS, 19 | Discord.Intents.FLAGS.GUILD_MESSAGES, 20 | Discord.Intents.FLAGS.GUILD_PRESENCES, 21 | Discord.Intents.FLAGS.GUILD_VOICE_STATES, 22 | Discord.Intents.FLAGS.GUILD_BANS, 23 | Discord.Intents.FLAGS.GUILD_INVITES, 24 | Discord.Intents.FLAGS.GUILD_MESSAGE_REACTIONS, 25 | Discord.Intents.FLAGS.GUILD_EMOJIS_AND_STICKERS, 26 | Discord.Intents.FLAGS.GUILD_INTEGRATIONS, 27 | Discord.Intents.FLAGS.GUILD_WEBHOOKS 28 | ], 29 | ...structures 30 | }) 31 | 32 | this.Utils = new Utils(this); 33 | this.commands = new Discord.Collection() 34 | this.events = new Discord.Collection() 35 | this.config = require("../../Settings.js"); 36 | } 37 | 38 | async Build() { 39 | this.login(this.config.TOKEN) 40 | .then(() => console.log("Discord ile bağlantı kuruldu.")) 41 | .catch(() => console.log("Discord ile bağlantı kurulamadı.")); 42 | 43 | await this.Utils.loadEvents(); 44 | await this.Utils.loadCommands(); 45 | 46 | await Mongoose.connect(this.config.URI, { 47 | useNewUrlParser: true, 48 | useUnifiedTopology: true 49 | }); 50 | 51 | return this; 52 | } 53 | } 54 | 55 | module.exports = Client; 56 | -------------------------------------------------------------------------------- /src/base/Utils.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const { readdirSync } = require("fs"); 3 | const { resolve } = require("path"); 4 | 5 | class Utils { 6 | constructor(CLI) { 7 | this.client = CLI 8 | } 9 | 10 | async loadEvents() { 11 | const files = readdirSync(resolve(__dirname, '..', 'events')); 12 | for (const file of files) { 13 | const event = await (require(resolve(__dirname, '..', 'events', file))); 14 | this.client.on(event.name, (...args) => event.execute(this.client, ...args)); 15 | } 16 | } 17 | 18 | async loadCommands() { 19 | const commandFiles = readdirSync(resolve(__dirname, '..', 'commands')); 20 | for (const name of commandFiles) { 21 | const command = await (require(resolve(__dirname, '..', 'commands', name))); 22 | this.client.commands.set(command.usages?.[0], command); 23 | } 24 | } 25 | } 26 | 27 | module.exports = Utils; -------------------------------------------------------------------------------- /src/commands/Members.js: -------------------------------------------------------------------------------- 1 | const { MessageActionRow, MessageButton, MessageEmbed, Interaction } = require("discord.js"); 2 | const { stripIndents } = require("common-tags"); 3 | const Model = require("../models/User"); 4 | 5 | const Command = { 6 | usages: ["referanslarım", "referanslar", "members"], 7 | executive: async ({ client, message, args }) => { 8 | const Member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; 9 | const Yanki = await Model.find({ Admin: Member.id }).sort({ Joined: -1 }); 10 | const Schema = await Model.findOne({ Id: Member.id }); 11 | if (Yanki.length == 0) return message.reply({content: `Hata: Belirtilen üyeyi referans olarak gösteren herhangi bir kullanıcı bulunmuyor.`}) 12 | 13 | const EmbedHeader = stripIndents` 14 | Selam <@${Member.id}> 👋 15 | 16 | Sunucumuza kayıt olabilmek için sizleri referans gösteren tüm kullanıcılar aşağıda sistematik bir şekilde sıralandırılmıştır. 17 | Bu kişiler sizin referansınız iptal edilene kadar sunucumuza tam erişim sağlayabilecekler. Referans/Üyelik iptali için yönetim üyelerine başvurunuz! 18 | `; 19 | 20 | const Embed = new MessageEmbed() 21 | .setColor("RANDOM") 22 | .setAuthor({ name: message?.guild?.name, iconURL: message?.guild?.iconURL({dynamic: true}) }) 23 | .setDescription(EmbedHeader) 24 | 25 | const UwU = Yanki.map((Awoken) => { 26 | return { 27 | User: Awoken.Id, 28 | Joined: Awoken.Joined 29 | } 30 | }); 31 | 32 | const chunk = (array, count) => { 33 | let myArray = Array.from(array); 34 | let tempArray = []; 35 | for (let index = 0; index < myArray.length; index += count) { 36 | let chunk = myArray.slice(index, index + count); 37 | tempArray.push(chunk); 38 | } 39 | return tempArray; 40 | } 41 | 42 | const Date = (InDate) => { 43 | const moment = require('moment-timezone'); 44 | require('moment-duration-format'); 45 | moment.locale('tr'); 46 | 47 | const Month = {"01": "Ocak", "02": "Şubat", "03": "Mart", "04": "Nisan", "05": "Mayıs", "06": "Haziran", "07": "Temmuz", "08": "Ağustos", "09": "Eylül", "10": "Ekim", "11": "Kasım", "12": "Aralık"} 48 | return moment(InDate).tz("Europe/Istanbul").format("DD") + " " + Month[moment(InDate).tz("Europe/Istanbul").format("MM")] + " " + moment(InDate).tz("Europe/Istanbul").format("YYYY HH:mm") 49 | } 50 | 51 | let Index = 0, Haha = 0; 52 | const Chunked = chunk(UwU, 10); 53 | const row = new MessageActionRow().addComponents([ 54 | new MessageButton().setStyle('PRIMARY').setLabel('👈').setCustomId("back"), 55 | new MessageButton().setStyle('PRIMARY').setLabel('📛').setCustomId("stop"), 56 | new MessageButton().setStyle('PRIMARY').setLabel('👉').setCustomId("go") 57 | ]); 58 | 59 | Embed.setFooter({ text: `Sayfa ${Index+1}/${Chunked.length}` }) 60 | Embed.description += `\n\n${Chunked?.[Index]?.map((of, pf) => `\`\u200b ${pf+1} \u200b\` <@${of.User}>: **${Date(of.Joined)}**`).join("\n")}` 61 | 62 | message.channel.send({ embeds: [Embed], components: [row] }).then(async (msg) => { 63 | const collector = await msg.createMessageComponentCollector({ 64 | componentType: 'BUTTON', 65 | filter: (component) => component.user.id === message.author.id, 66 | time: 120000 67 | }); 68 | 69 | collector.on("collect", async (interaction) => { 70 | interaction.deferUpdate(); 71 | switch(interaction.customId) { 72 | case "back": 73 | Index = Index > 0 ? --Index : Chunked.length-1; 74 | Embed.setFooter({ text: `Sayfa ${Index+1}/${Chunked.length}` }) 75 | Embed.description = `${EmbedHeader}\n\n${Chunked?.[Index]?.map((of, pf) => `\`\u200b ${pf+1} \u200b\` <@${of.User}>: **${Date(of.Joined)}**`).join("\n")}` 76 | if (msg) msg.edit({ embeds: [Embed], components: [row] }); 77 | break 78 | 79 | case "go": 80 | Index = (Index +1) < Chunked.length ? ++Index : 0; 81 | Embed.setFooter({ text: `Sayfa ${Index+1}/${Chunked.length}` }) 82 | Embed.description = `${EmbedHeader}\n\n${Chunked?.[Index]?.map((of, pf) => `\`\u200b ${pf+1} \u200b\` <@${of.User}>: **${Date(of.Joined)}**`).join("\n")}` 83 | if (msg) msg.edit({ embeds: [Embed], components: [row] }); 84 | break 85 | 86 | case "stop": 87 | collector.stop() 88 | break 89 | 90 | default: 91 | collector.stop() 92 | break 93 | } 94 | }) 95 | 96 | collector.on("end", async (interaction) => { 97 | row.components[0].setDisabled(true) 98 | row.components[1].setDisabled(true) 99 | row.components[2].setDisabled(true) 100 | if (msg) msg.edit({ components: [row] }); 101 | }) 102 | }); 103 | } 104 | } 105 | 106 | module.exports = Command; 107 | -------------------------------------------------------------------------------- /src/commands/Referans.js: -------------------------------------------------------------------------------- 1 | const { MessageActionRow, MessageButton, MessageEmbed } = require("discord.js"); 2 | const { stripIndents } = require("common-tags"); 3 | const Model = require("../models/User"); 4 | 5 | const Command = { 6 | usages: ["referans", "ref"], 7 | executive: async ({ client, message, args }) => { 8 | if (!message.member._roles.includes(client?.config?.UNVERIFIED)) return; 9 | const Member = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 10 | if (!Member) return message.reply({content: `Hata: Geçerli bir kullanıcı etiketleyin veya ID'sini girin!`}); 11 | if (!client?.config?.STAFFS.some((x) => Member._roles.includes(x))) return message.reply({content: `Hata: Belirttiğiniz kullanıcıyı referans olarak gösteremezsiniz!`}); 12 | if (Member.id == message.author.id) return message.reply({content: `Hata: Kendinizi referans olarak gösteremezsiniz!`}); 13 | 14 | const Schema = await Model.findOne({ Id: message.author.id }); 15 | if (Schema && Schema?.Verified !== false) return message.reply({content: `Hata: Sistemde kayıtlı olarak gözükmektesiniz, bir üst yetkiliye ulaşınız!`}) 16 | 17 | message.react(client?.config?.TICK); 18 | 19 | const row = new MessageActionRow().addComponents([ 20 | new MessageButton().setStyle('SUCCESS').setLabel('Accept').setCustomId(`accept-${message.member.id}-${Member.id}`), 21 | new MessageButton().setStyle('DANGER').setLabel('Refuse').setCustomId(`refuse-${message.member.id}-${Member.id}`) 22 | ]); 23 | 24 | if (client.channels.cache.get(client?.config?.LOG)) { 25 | const Embed = new MessageEmbed().setColor("RANDOM").setAuthor({name: message?.guild?.name, iconURL: message?.guild?.iconURL({dynamic: true})}) 26 | .setDescription(stripIndents` 27 | ${client?.config?.TICK} <@${message.author.id}> isimli kişi, <@${Member.id}> üyesini referans olarak gösterdi. 28 | 29 | Referansı kabul ediyor iseniz **Accept** butonuna tıklayınız. 30 | Referansı red ediyor iseniz **Refuse** butonuna tıklayınız. 31 | 32 | **__NOT:__** İşlemi sadece referans olarak gösterilen üye (<@${Member.id}>) tamamlayabilir. 33 | `) 34 | client.channels.cache.get(client?.config?.LOG)?.send({ embeds: [Embed], components: [row] }); 35 | } 36 | } 37 | } 38 | 39 | module.exports = Command; 40 | -------------------------------------------------------------------------------- /src/events/InteractionCreate.js: -------------------------------------------------------------------------------- 1 | const Model = require("../models/User"); 2 | const { MessageActionRow, MessageButton } = require("discord.js"); 3 | const { stripIndents } = require("common-tags"); 4 | 5 | const Event = { 6 | name: "interactionCreate", 7 | execute: async (client, interaction) => { 8 | if (!interaction.isButton()) return; 9 | const Guild = client.guilds.cache.get(client?.config?.GUILD) || client.guilds.cache.first(); 10 | 11 | if (interaction?.customId.startsWith("accept")) { 12 | const Member = Guild.members.cache.get(interaction?.customId.split("-")[1]); 13 | const Referans = Guild.members.cache.get(interaction?.customId.split("-")[2]); 14 | if (!Member || !Referans) return interaction.reply({content: `Hata: Üye veya referans sahibi sunucuda bulunamadı.`, ephemeral: true});; 15 | const Schema = await Model.findOne({Id: Member.id}); 16 | if (interaction.member.id !== Referans.id) return interaction.reply({content: `Hata: Sadece referans sahibi kullanıcı, kişiyi sunucuya kabul edebilir.`, ephemeral: true}); 17 | if (Schema && Schema?.Verified !== false) return interaction.reply({content: `Hata: Bu kişinin referansı halihazırda kabul edilmiş.`, ephemeral: true}); 18 | 19 | Member.roles.set(Member.roles.cache.clone().filter((role) => role.managed).map((role) => role.id).concat(client?.config?.VERIFIED)); 20 | await Model.findOneAndUpdate( 21 | { Id: Member.id }, 22 | { $set: { Verified: true, Admin: interaction.member.id, Joined: Date.now() } }, 23 | { upsert: true } 24 | ); 25 | 26 | Member.send(stripIndents` 27 | Selam <@${Member?.id}> 👋 28 | 29 | Sunucumuzda kayıt işlemin referansın olan <@${Referans.id}> tarafından gerçekleştirildi! 30 | Sunucu içerisinde ki tüm aktiviten kayıt altına alınmaktadır bu sebepten ötürü alacağın herhangi bir cezadan referansın olan kişi de sorumlu tutulacaktır! 31 | Sorun teşkil eden kişiler sunucumuzda barınamaz, sistemlerimizden kalıcı olarak yasaklanırlar. 32 | 33 | Eğlenceli vakit geçirmen dileğiyle, esenlikle kal... 34 | `).catch(() => {}); 35 | 36 | const row = new MessageActionRow().addComponents([ 37 | new MessageButton().setStyle('SUCCESS').setLabel('Accept').setCustomId(`accept-${Member.id}-${Referans.id}`).setDisabled(true), 38 | new MessageButton().setStyle('DANGER').setLabel('Refuse').setCustomId(`refuse-${Member.id}-${Referans.id}`).setDisabled(true) 39 | ]); 40 | 41 | interaction.reply({ content: `<@${Member.id}> üyesi başarılı bir şekilde sunucuya kayıt edildi.`, ephemeral: true }) 42 | if (interaction.message) interaction.message?.edit({ components: [row] }); 43 | return interaction; 44 | } else if (interaction?.customId.startsWith("refuse")) { 45 | const Member = Guild.members.cache.get(interaction?.customId.split("-")[1]); 46 | const Referans = Guild.members.cache.get(interaction?.customId.split("-")[2]); 47 | if (!Member || !Referans) return interaction.reply({content: `Hata: Üye veya referans sahibi sunucuda bulunamadı.`, ephemeral: true});; 48 | const Schema = await Model.findOne({Id: Member.id}); 49 | if (interaction.member.id !== Referans.id) return interaction.reply({content: `Hata: Sadece referans sahibi kullanıcı, kişiyi sunucuya kabul edebilir.`, ephemeral: true}); 50 | if (Schema && Schema?.Verified == true) return interaction.reply({content: `Hata: Bu kişinin referansı kabul edilmiş bu sebepten ötürü işleminiz iptal edildi.`, ephemeral: true}); 51 | 52 | await Model.deleteMany({ Id: Member.id }); 53 | const row = new MessageActionRow().addComponents([ 54 | new MessageButton().setStyle('SUCCESS').setLabel('Accept').setCustomId(`accept-${Member.id}-${Referans.id}`).setDisabled(true), 55 | new MessageButton().setStyle('DANGER').setLabel('Refuse').setCustomId(`refuse-${Member.id}-${Referans.id}`).setDisabled(true) 56 | ]); 57 | 58 | Member.send(stripIndents` 59 | Selam <@${Member?.id}> 👋 60 | 61 | Sunucuya kayıt talebin <@${Referans.id}> tarafından reddedildi! 62 | 63 | Sebebi şunlardan herhangi birisi olabilir; 64 | \`1\` Kişi, sizi tanımıyor veyahut referans olmak istemiyor. 65 | \`2\` Sicil kayıtınız çok kabarık bu nedenle sunucu düzenini bozacağınızdan korkuyor. 66 | \`3\` Sorun teşkil edebilecek özelliklere sahip olduğunuzu tespit etmiş olabilir. 67 | `).catch(() => {}); 68 | 69 | interaction.reply({ content: `<@${Member.id}> üyesinin talebi başarılı bir şekilde reddedildi.`, ephemeral: true }) 70 | if (interaction.message) interaction.message?.edit({ components: [row] }); 71 | return interaction; 72 | } 73 | } 74 | } 75 | 76 | module.exports = Event; 77 | -------------------------------------------------------------------------------- /src/events/MemberAdd.js: -------------------------------------------------------------------------------- 1 | const { stripIndents } = require("common-tags"); 2 | 3 | const Event = { 4 | name: "guildMemberAdd", 5 | execute: async (client, member) => { 6 | if (member?.user?.bot) return; 7 | 8 | const Date = (InDate) => { 9 | const moment = require('moment-timezone'); 10 | require('moment-duration-format'); 11 | moment.locale('tr'); 12 | 13 | const Month = {"01": "Ocak", "02": "Şubat", "03": "Mart", "04": "Nisan", "05": "Mayıs", "06": "Haziran", "07": "Temmuz", "08": "Ağustos", "09": "Eylül", "10": "Ekim", "11": "Kasım", "12": "Aralık"} 14 | return moment(InDate).tz("Europe/Istanbul").format("DD") + " " + Month[moment(InDate).tz("Europe/Istanbul").format("MM")] + " " + moment(InDate).tz("Europe/Istanbul").format("YYYY HH:mm") 15 | } 16 | 17 | if (client?.channels?.cache.get(client?.config?.WELCOME)) { 18 | client?.channels?.cache.get(client?.config?.WELCOME)?.send(stripIndents` 19 | Sınır kapısına hoş geldin <@${member.id}> 👋 20 | 21 | Hesabın **${Date(member?.user?.createdTimestamp)}** tarihinde oluşturulmuş. 22 | Sunucuya kayıt olabilmen için sağ taraftaki herhangi birine referans talebinde bulunman gerekmektedir. Talebin onaylandığı taktirde sunucumuza tam erişim yetkisi kazanacaksın! 23 | 24 | 🎉🎉 Seninle birlikte sunucumuz **${member?.guild?.members?.cache.size ?? 0}** kişi oldu. 25 | `); 26 | } 27 | 28 | member?.roles.set(member?.roles.cache.clone().filter((role) => role.managed).map((role) => role.id).concat(client?.config?.UNVERIFIED)); 29 | } 30 | } 31 | 32 | module.exports = Event; 33 | -------------------------------------------------------------------------------- /src/events/MemberRemove.js: -------------------------------------------------------------------------------- 1 | const { stripIndents } = require("common-tags"); 2 | const Model = require("../models/User"); 3 | 4 | const Event = { 5 | name: "guildMemberRemove", 6 | execute: async (client, member) => { 7 | if (member?.user?.bot) return; 8 | const Members = await Model.find({ Admin: member?.id }); 9 | if (Members.length == 0) return; 10 | 11 | const Date = (InDate) => { 12 | const moment = require('moment-timezone'); 13 | require('moment-duration-format'); 14 | moment.locale('tr'); 15 | 16 | const Month = {"01": "Ocak", "02": "Şubat", "03": "Mart", "04": "Nisan", "05": "Mayıs", "06": "Haziran", "07": "Temmuz", "08": "Ağustos", "09": "Eylül", "10": "Ekim", "11": "Kasım", "12": "Aralık"} 17 | return moment(InDate).tz("Europe/Istanbul").format("DD") + " " + Month[moment(InDate).tz("Europe/Istanbul").format("MM")] + " " + moment(InDate).tz("Europe/Istanbul").format("YYYY HH:mm") 18 | } 19 | 20 | for (let doc of Members) { 21 | const Member = member?.guild?.members?.cache.get(doc.Id); 22 | Member?.send(stripIndents` 23 | Selam <@${Member?.id}> 👋 24 | 25 | Referansınız olan <@${doc.Admin}>, sunucumuzdan ayrıldı. Bu sebepten ötürü sunucu içi referansınız sistem tarafından askıya alınmıştır. 26 | Kişinin sunucudan ayrılma sebebi henüz bilinmiyor. Sunucu içi üyelik işlemi için tekrardan referans komutunu uygulamanız gerekmektedir... 27 | 28 | Size hayatınızda başarılar diliyoruz, esenlikle kalın... 29 | `).catch(() => {}); 30 | Member?.roles.set(Member?.roles.cache.clone().filter((role) => role.managed).map((role) => role.id).concat(client?.config?.UNVERIFIED)); 31 | await Model.deleteMany({ Id: Member?.id }) 32 | } 33 | } 34 | } 35 | 36 | module.exports = Event; -------------------------------------------------------------------------------- /src/events/MessageCreate.js: -------------------------------------------------------------------------------- 1 | const Event = { 2 | name: "messageCreate", 3 | execute: async (client, message) => { 4 | if (!message.content.startsWith("!")) return; 5 | 6 | const args = message.content.slice(1).trim().split(' '); 7 | const cmdName = args.shift()?.toLowerCase(); 8 | const command = client.commands.find((cmd) => cmd.usages.includes(cmdName)); 9 | 10 | if (command) { 11 | command.executive({ client, message, args }); 12 | } 13 | } 14 | } 15 | 16 | module.exports = Event; -------------------------------------------------------------------------------- /src/models/User.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const Returned = new Schema({ 4 | Id: String, 5 | Admin: String, 6 | Joined: Number, 7 | Verified: Boolean 8 | }) 9 | 10 | module.exports = model("User", Returned); --------------------------------------------------------------------------------