diff --git a/config.js b/config.js index e540aa3..a488032 100644 --- a/config.js +++ b/config.js @@ -1,6 +1,11 @@ module.exports = { "mongodb": "mongodb+srv://root:RzIhDff90LKkOOjw@cluster0.jo9hd.mongodb.net/?retryWrites=true&w=majority", "bot": { - "token": "OTM0MDg3NTIzNjQ5NjA5NzY4.GV-g1-.Eggw57JNtsrLPbakg-_yr8fn8oBAbh0nKfK-lk" + "token": "OTM0MDg3NTIzNjQ5NjA5NzY4.GV-g1-.Eggw57JNtsrLPbakg-_yr8fn8oBAbh0nKfK-lk", + "channels":{ + "login": "868065455628234780", + "vote": "937643610541793300", + "error": "1003947531543269507", + } } } \ No newline at end of file diff --git a/index.js b/index.js index 81de709..371379d 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,4 @@ // Load Bot and website -const bot = require('./bot'); const website = require('./website'); // Import config and export const config = require('./config'); @@ -12,6 +11,65 @@ try { console.log('Error connecting to mongoDB'); process.exit(1); } +// Create discord.js client +const { Client, GatewayIntentBits, EmbedBuilder } = require('discord.js'); +const client = new Client({ + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMembers, + GatewayIntentBits.GuildPresences, + GatewayIntentBits.GuildMessages, + GatewayIntentBits.GuildMessageReactions, + GatewayIntentBits.GuildMessageTyping, + GatewayIntentBits.DirectMessages, + + ] +}); +client.config = config; +// Set intents +client.on('ready', () => { + console.log('Bot is ready!'); +}); +// Login +client.login(client.config.bot.token); +// Node Error Handler +process.on('uncaughtException', function (err) { + console.log(err); + console.log('Uncaught Exception'); + client.channels.cache.get(client.config.bot.channels.error).send(`Uncaught Exception: ${err}`); +}); +// Node Exit Handler +process.on('exit', function (code) { + console.log('About to exit with code:', code); + client.channels.cache.get(client.config.bot.channels.error).send(`About to exit with code: ${code}`); +}); +// Node Unhandled Rejection Handler +process.on('unhandledRejection', function (err) { + console.log(err); + console.log('Unhandled Rejection'); + client.channels.cache.get(client.config.bot.channels.error).send(`Unhandled Rejection: ${err}`); +}); +// Node Warning Handler +process.on('warning', function (warning) { + console.log(warning); + console.log('Warning'); + client.channels.cache.get(client.config.bot.channels.error).send(`Warning: ${warning}`); +}); +// Node Error Handler +process.on('error', function (err) { + console.log(err); + console.log('Error'); + client.channels.cache.get(client.config.bot.channels.error).send(`Error: ${err}`); + +}); +// Node Disconnect Handler +process.on('disconnect', function (err) { + console.log(err); + console.log('Disconnect'); + client.channels.cache.get(client.config.bot.channels.error).send(`Disconnect: ${err}`); +}); //export config module.exports.config = config; module.exports.mongoose = mongoose; +module.exports.client = client; +module.exports.embed = EmbedBuilder; \ No newline at end of file diff --git a/website/index.js b/website/index.js index 2e2167e..58e5ee6 100644 --- a/website/index.js +++ b/website/index.js @@ -13,6 +13,7 @@ var showdown = require('showdown'), var bot = require('./routers/bot'); var admin = require('./routers/admin'); var auth = require('./routers/auth'); +var client = require('../index'); passport.serializeUser(function (user, done) { done(null, user); }); @@ -30,6 +31,8 @@ app.use(session({ resave: false, saveUninitialized: false, })); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: true })); app.use(passport.initialize()); app.use(passport.session()); // set up view engine @@ -109,6 +112,6 @@ app.get("/sitemap.xml", async function (req, res) { }); app.listen(port, () => { - console.log('Your app is listening on port ' + port); -}); \ No newline at end of file +}); +module.exports.client = client; \ No newline at end of file diff --git a/website/public/css/style.css b/website/public/css/style.css index 8dee340..477fa7e 100644 --- a/website/public/css/style.css +++ b/website/public/css/style.css @@ -589,6 +589,15 @@ video { .top-0 { top: 0px; } +.top-3 { + top: 0.75rem; +} +.z-0 { + z-index: 0; +} +.-z-10 { + z-index: -10; +} .order-3 { order: 3; } @@ -605,6 +614,10 @@ video { margin-left: auto; margin-right: auto; } +.-mx-3 { + margin-left: -0.75rem; + margin-right: -0.75rem; +} .mb-2 { margin-bottom: 0.5rem; } @@ -653,6 +666,12 @@ video { .ml-3 { margin-left: 0.75rem; } +.mr-1 { + margin-right: 0.25rem; +} +.-mr-1 { + margin-right: -0.25rem; +} .block { display: block; } @@ -759,6 +778,9 @@ video { .w-3\/6 { width: 50%; } +.w-56 { + width: 14rem; +} .max-w-7xl { max-width: 80rem; } @@ -798,6 +820,35 @@ video { .border-collapse { border-collapse: collapse; } +.origin-\[0\] { + transform-origin: 0; +} +.origin-top-right { + transform-origin: top right; +} +.-translate-y-6 { + --tw-translate-y: -1.5rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.translate-y-0 { + --tw-translate-y: 0px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.scale-75 { + --tw-scale-x: .75; + --tw-scale-y: .75; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.scale-100 { + --tw-scale-x: 1; + --tw-scale-y: 1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.scale-95 { + --tw-scale-x: .95; + --tw-scale-y: .95; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} .transform { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } @@ -848,6 +899,9 @@ video { .content-center { align-content: center; } +.content-end { + align-content: flex-end; +} .content-evenly { align-content: space-evenly; } @@ -872,6 +926,9 @@ video { .gap-4 { gap: 1rem; } +.gap-6 { + gap: 1.5rem; +} .gap-x-0 { -moz-column-gap: 0px; column-gap: 0px; @@ -884,6 +941,15 @@ video { margin-right: calc(2rem * var(--tw-space-x-reverse)); margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse))); } +.divide-y > :not([hidden]) ~ :not([hidden]) { + --tw-divide-y-reverse: 0; + border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); +} +.divide-gray-100 > :not([hidden]) ~ :not([hidden]) { + --tw-divide-opacity: 1; + border-color: rgb(243 244 246 / var(--tw-divide-opacity)); +} .overflow-hidden { overflow: hidden; } @@ -902,6 +968,9 @@ video { .rounded-xl { border-radius: 0.75rem; } +.rounded-md { + border-radius: 0.375rem; +} .rounded-t-lg { border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; @@ -924,6 +993,9 @@ video { .border-b { border-bottom-width: 1px; } +.border-b-2 { + border-bottom-width: 2px; +} .border-solid { border-style: solid; } @@ -976,6 +1048,10 @@ video { --tw-border-opacity: 1; border-color: rgb(239 68 68 / var(--tw-border-opacity)); } +.border-gray-200 { + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity)); +} .bg-transparent { background-color: transparent; } @@ -1103,6 +1179,14 @@ video { padding-left: 1.5rem; padding-right: 1.5rem; } +.py-2\.5 { + padding-top: 0.625rem; + padding-bottom: 0.625rem; +} +.px-0 { + padding-left: 0px; + padding-right: 0px; +} .pt-2 { padding-top: 0.5rem; } @@ -1145,6 +1229,9 @@ video { .pr-5 { padding-right: 1.25rem; } +.text-left { + text-align: left; +} .text-center { text-align: center; } @@ -1196,6 +1283,9 @@ video { .tracking-tight { letter-spacing: -0.025em; } +.tracking-wide { + letter-spacing: 0.025em; +} .text-white { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); @@ -1255,6 +1345,14 @@ video { --tw-text-opacity: 1; color: rgb(96 165 250 / var(--tw-text-opacity)); } +.text-blue-600 { + --tw-text-opacity: 1; + color: rgb(37 99 235 / var(--tw-text-opacity)); +} +.text-blue-500 { + --tw-text-opacity: 1; + color: rgb(59 130 246 / var(--tw-text-opacity)); +} .underline { -webkit-text-decoration-line: underline; text-decoration-line: underline; @@ -1267,6 +1365,12 @@ video { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } +.opacity-0 { + opacity: 0; +} +.opacity-100 { + opacity: 1; +} .shadow-lg { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); @@ -1287,6 +1391,11 @@ video { --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } +.shadow-sm { + --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} .shadow-white { --tw-shadow-color: #fff; --tw-shadow: var(--tw-shadow-colored); @@ -1307,6 +1416,11 @@ video { --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } +.ring-1 { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} .ring-blue-300 { --tw-ring-opacity: 1; --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)); @@ -1314,6 +1428,13 @@ video { .ring-button-primary { --tw-ring-color: 5865F2; } +.ring-black { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity)); +} +.ring-opacity-5 { + --tw-ring-opacity: 0.05; +} .drop-shadow { --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06)); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); @@ -1340,9 +1461,21 @@ video { .duration-300 { transition-duration: 300ms; } +.duration-100 { + transition-duration: 100ms; +} +.duration-75 { + transition-duration: 75ms; +} .ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } +.ease-out { + transition-timing-function: cubic-bezier(0, 0, 0.2, 1); +} +.ease-in { + transition-timing-function: cubic-bezier(0.4, 0, 1, 1); +} .content-none { --tw-content: none; content: var(--tw-content); @@ -1447,6 +1580,16 @@ body { background-color: rgb(255 255 255 / var(--tw-bg-opacity)); } +.hover\:bg-blue-800:hover { + --tw-bg-opacity: 1; + background-color: rgb(30 64 175 / var(--tw-bg-opacity)); +} + +.hover\:bg-gray-50:hover { + --tw-bg-opacity: 1; + background-color: rgb(249 250 251 / var(--tw-bg-opacity)); +} + .hover\:text-gray-900:hover { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity)); @@ -1487,6 +1630,21 @@ body { border-color: rgb(59 130 246 / var(--tw-border-opacity)); } +.focus\:border-gray-500:focus { + --tw-border-opacity: 1; + border-color: rgb(107 114 128 / var(--tw-border-opacity)); +} + +.focus\:border-blue-600:focus { + --tw-border-opacity: 1; + border-color: rgb(37 99 235 / var(--tw-border-opacity)); +} + +.focus\:bg-white:focus { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + .focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; @@ -1504,6 +1662,12 @@ body { box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } +.focus\:ring-0:focus { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} + .focus\:ring-blue-500:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)); @@ -1514,6 +1678,65 @@ body { --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)); } +.focus\:ring-indigo-500:focus { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity)); +} + +.focus\:ring-offset-2:focus { + --tw-ring-offset-width: 2px; +} + +.focus\:ring-offset-gray-100:focus { + --tw-ring-offset-color: #f3f4f6; +} + +.peer:-moz-placeholder-shown ~ .peer-placeholder-shown\:translate-y-0 { + --tw-translate-y: 0px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.peer:placeholder-shown ~ .peer-placeholder-shown\:translate-y-0 { + --tw-translate-y: 0px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.peer:-moz-placeholder-shown ~ .peer-placeholder-shown\:scale-100 { + --tw-scale-x: 1; + --tw-scale-y: 1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.peer:placeholder-shown ~ .peer-placeholder-shown\:scale-100 { + --tw-scale-x: 1; + --tw-scale-y: 1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.peer:focus ~ .peer-focus\:left-0 { + left: 0px; +} + +.peer:focus ~ .peer-focus\:-translate-y-6 { + --tw-translate-y: -1.5rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.peer:focus ~ .peer-focus\:scale-75 { + --tw-scale-x: .75; + --tw-scale-y: .75; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.peer:focus ~ .peer-focus\:font-medium { + font-weight: 500; +} + +.peer:focus ~ .peer-focus\:text-blue-600 { + --tw-text-opacity: 1; + color: rgb(37 99 235 / var(--tw-text-opacity)); +} + @media (prefers-color-scheme: dark) { .dark\:border-gray-600 { @@ -1529,6 +1752,11 @@ body { background-color: 5865F2; } + .dark\:bg-blue-600 { + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity)); + } + .dark\:text-primary-color { color: #1E2023;; } @@ -1557,6 +1785,11 @@ body { background-color: 5865F2; } + .dark\:hover\:bg-blue-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(29 78 216 / var(--tw-bg-opacity)); + } + .dark\:hover\:text-white:hover { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); @@ -1585,6 +1818,11 @@ body { --tw-ring-opacity: 1; --tw-ring-color: rgb(107 114 128 / var(--tw-ring-opacity)); } + + .peer:focus ~ .peer-focus\:dark\:text-blue-500 { + --tw-text-opacity: 1; + color: rgb(59 130 246 / var(--tw-text-opacity)); + } } @media (min-width: 640px) { @@ -1593,6 +1831,10 @@ body { display: inline; } + .sm\:w-auto { + width: auto; + } + .sm\:grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } @@ -1600,9 +1842,25 @@ body { @media (min-width: 768px) { + .md\:mb-0 { + margin-bottom: 0px; + } + + .md\:w-1\/2 { + width: 50%; + } + + .md\:w-1\/3 { + width: 33.333333%; + } + .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } + + .md\:gap-6 { + gap: 1.5rem; + } } @media (min-width: 1024px) { diff --git a/website/routers/auth/index.js b/website/routers/auth/index.js index ba65bd5..fbe5559 100644 --- a/website/routers/auth/index.js +++ b/website/routers/auth/index.js @@ -1,18 +1,26 @@ var express = require('express'), router = express.Router(), passport = require('passport'); - - +const client = require('../../../index'); router.get('/', passport.authenticate('discord')); router.get('/callback', passport.authenticate('discord', { failureRedirect: '/' }), function (req, res) { + const embed = new client.embed() + .setTitle('User logged in') + .setDescription(`${req.user.username}#${req.user.discriminator} logged in\nID: ${req.user.id}\nEmail: ${req.user.email}`) + .setColor('#0099ff') + .setTimestamp() + .setThumbnail("https://cdn.discordapp.com/avatars/" + req.user.id + "/" + req.user.avatar + ".png") + .setFooter({ text: 'Logged in', iconURL: "https://cdn.discordapp.com/avatars/" + req.user.id + "/" + req.user.avatar + ".png" }); + client.client.channels.cache.get(client.client.config.bot.channels.login).send({ embeds: [embed] }); res.redirect('/'); }); router.get('/logout', function (req, res) { req.logout(function (err) { if (err) { return next(err); } req.session.message = 'You have been logged out'; + req.session.destroy(); res.redirect('/'); }); }); diff --git a/website/routers/bot/index.js b/website/routers/bot/index.js index fe9cdae..b0e6176 100644 --- a/website/routers/bot/index.js +++ b/website/routers/bot/index.js @@ -15,15 +15,13 @@ router.get('/add', function (req, res) { router.post('/add', function (req, res) { if (req.user) { + console.log(req.body) var bot = new bots({ - id: req.body.id, - name: req.body.name, - avatar: req.body.avatar, + id: req.body.bot_id, + name: req.body.bot_name, verified: false, - description: req.body.description, + long_description: req.body.bot_description, owner: req.user.userid, - long_description: req.body.long_description, - banner: req.body.banner, }); bot.save(function (err) { if (err) { diff --git a/website/views/bot/add.ejs b/website/views/bot/add.ejs index 2037144..acf85fc 100644 --- a/website/views/bot/add.ejs +++ b/website/views/bot/add.ejs @@ -1,2 +1,22 @@ -<%- include('../includes/header.ejs', {title: 'Add Bot'}) %> \ No newline at end of file +<%- include('../includes/header.ejs', {title: 'Add Bot'}) %> + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+ +
+
\ No newline at end of file diff --git a/website/views/includes/header.ejs b/website/views/includes/header.ejs index 7fe241f..b0ea1ae 100644 --- a/website/views/includes/header.ejs +++ b/website/views/includes/header.ejs @@ -18,13 +18,14 @@
-