From 47dfdbd3448a5b6104ec231cb051cf9a896f3070 Mon Sep 17 00:00:00 2001 From: CorwinDev <88144943+CorwinDev@users.noreply.github.com> Date: Mon, 8 Aug 2022 21:32:55 +0200 Subject: [PATCH] Added bots & votes --- .vscode/settings.json | 10 +- models/bot.js | 5 +- models/votes.js | 8 + website/index.js | 18 +- website/public/css/style.css | 11 +- website/routers/admin/index.js | 22 +- website/routers/bot/index.js | 132 ++++++++- website/views/bot/add.ejs | 7 +- website/views/bot/index.ejs | 68 ++++- website/views/bot/vote.ejs | 0 website/views/bots.ejs | 162 +++++++++++ website/views/includes/header.ejs | 19 ++ website/views/index.ejs | 455 ++++++++++++++---------------- website/views/server/add.ejs | 110 ++++---- website/views/server/edit.ejs | 77 +++-- website/views/server/index.ejs | 151 +++++----- 16 files changed, 798 insertions(+), 457 deletions(-) create mode 100644 models/votes.js create mode 100644 website/views/bot/vote.ejs create mode 100644 website/views/bots.ejs diff --git a/.vscode/settings.json b/.vscode/settings.json index 920f170..000e40a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,8 +1,8 @@ { - "emmet.includeLanguages": { - "ejs": "html" + "emmet.includeLanguages": { + "ejs": "html", + }, + "[html]": { + "editor.defaultFormatter": "j69.ejs-beautify" }, - "[html]": { - "editor.defaultFormatter": "vscode.html-language-features" - } } diff --git a/models/bot.js b/models/bot.js index c00f742..79e6eee 100644 --- a/models/bot.js +++ b/models/bot.js @@ -5,11 +5,14 @@ let hm = new mongoose.Schema({ icon: String, verified: Boolean, description: String, - owner: String, + owners: [String], long_description: String, banner: String, tags: [String], premium: Boolean, + servers: String, + users: String, + votes: Number, }); module.exports = mongoose.model("bots", hm); \ No newline at end of file diff --git a/models/votes.js b/models/votes.js new file mode 100644 index 0000000..da1ad19 --- /dev/null +++ b/models/votes.js @@ -0,0 +1,8 @@ +const mongoose = require("mongoose"); +let model = new mongoose.Schema({ + user: String, + date: Date, + bot: String, +}); + +module.exports = mongoose.model("votes", model); \ No newline at end of file diff --git a/website/index.js b/website/index.js index 41726c7..95d5381 100644 --- a/website/index.js +++ b/website/index.js @@ -25,13 +25,13 @@ passport.deserializeUser(function (obj, done) { //import models const Banned = require('../models/site-ban'); const bots = require('../models/bot'); -const server = require('../models/server'); +const server = require('../models/server'); var scopes = ['identify', 'guilds', 'guilds.join']; var prompt = 'consent' passport.use(new DiscordStrategy({ clientID: '934087523649609768', clientSecret: 'nPKjKvOCOyyhDaQM64qcJYbd6CdhCxLh', - callbackURL: 'http://localhost:3000/auth/callback', + callbackURL: client.config.server.host + '/auth/callback', scope: scopes, prompt: prompt }, @@ -110,6 +110,14 @@ app.get('/', async (req, res) => { } }); +app.get('/bots', async (req, res) => { + var bot = await bots.find({}); + res.render('bots', { + bots: bot, + user: req.user, + botscord: client + }); +}); app.get("/robots.txt", function (req, res) { res.set('Content-Type', 'text/plain'); res.send(`Sitemap: https://botscord.xyz/sitemap.xml`); @@ -133,12 +141,12 @@ app.use((req, res, next) => { } else if (res.statusCode === 500) { req.session.error = "Internal server error"; res.redirect('/'); - }else{ + } else { req.session.error = "Page not found"; res.redirect('/'); } }) -app.listen(port, () => { - console.log(colors.green("Website: "),'Your app is listening on port ' + port); +app.listen(client.config.server.port, () => { + console.log(colors.green("Website: "), 'Your app is listening on port ' + port); }); 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 49b9cab..3c67862 100644 --- a/website/public/css/style.css +++ b/website/public/css/style.css @@ -1061,6 +1061,9 @@ video { .overflow-hidden { overflow: hidden; } +.text-ellipsis { + text-overflow: ellipsis; +} .break-words { overflow-wrap: break-word; } @@ -1966,14 +1969,6 @@ body { display: inline; } - .sm\:flex { - display: flex; - } - - .sm\:grid { - display: grid; - } - .sm\:min-h-min { min-height: -webkit-min-content; min-height: -moz-min-content; diff --git a/website/routers/admin/index.js b/website/routers/admin/index.js index 2adf7bc..8fb96af 100644 --- a/website/routers/admin/index.js +++ b/website/routers/admin/index.js @@ -1,19 +1,27 @@ var express = require('express'); -var index = require('./../../../index'); +var config = require('./../../../index').config; var router = express.Router(); - -router.get('/', function (req, res) { +var bots = require('../../../models/bot'); +var servers = require('../../../models/server'); +var bans = require('../../../models/site-ban'); +router.get('/', async function (req, res) { if (req.user) { - if (index.config.users.verificator.includes(req.user.userid) || index.config.users.owner.includes(req.user.userid)) { + if (config.users.verificator.includes(req.user.userid) || config.users.owner.includes(req.user.userid)) { + const bot = await bots.find({}); + const server = await servers.find({}); + const ban = await bans.find({}); res.render('admin/index', { - title: 'Admin', - user: req.user + user: req.user, + bots: bot, + servers: server, + bans: ban }); } else { res.redirect('/'); } } else { - res.redirect('/auth?r=' + req.originalUrl); + req.session.backURL = req.originalUrl; + res.redirect('/auth'); } }) diff --git a/website/routers/bot/index.js b/website/routers/bot/index.js index 0d6e09a..1eb2610 100644 --- a/website/routers/bot/index.js +++ b/website/routers/bot/index.js @@ -1,12 +1,14 @@ var express = require('express'), router = express.Router(); var bots = require('../../../models/bot'); +var votes = require('../../../models/votes'); const client = require('../../index'); router.get('/', function () { + return res.redirect('/bots'); }) router.get('/add', function (req, res) { if (req.user) { - res.render('bot/add', {user: req.user}); + res.render('bot/add', { user: req.user }); return } else { req.session.backURL = req.originalUrl; @@ -16,12 +18,23 @@ router.get('/add', function (req, res) { router.post('/add', function (req, res) { if (req.user) { + var checkbot = bots.findOne({ id: req.body.id }); + if (checkbot) { + req.session.error = "Bot already exists"; + res.redirect('/'); + return + } + var owners = new Array(); + req.body.bot_owners.split(',').forEach(function (owner) { + owners.push(owner.trim()); + }) + owners.push(req.user.id); var bot = new bots({ id: req.body.bot_id, name: req.body.bot_name, verified: false, long_description: req.body.bot_description, - owner: req.user.userid, + owners: owners, description: req.body.bot_short, tags: req.body.tags, }); @@ -36,14 +49,14 @@ router.post('/add', function (req, res) { res.redirect('/'); } }); - }else { + } else { req.session.backURL = req.originalUrl; res.redirect('/auth'); } }); -router.get('/:botID', function (req, res) { - bots.findOne({ id: req.params.botID }, function (err, bot) { +router.get('/:botID', async function (req, res) { + bots.findOne({ id: req.params.botID }, async function (err, bot) { if (err) { console.log(err); return res.redirect('/'); @@ -52,8 +65,113 @@ router.get('/:botID', function (req, res) { req.session.error = "No bot found"; return res.redirect('/'); } - res.render('bot/index', { - bot: bot }); + let coowner = new Array() + await bot.owners.forEach(async function (a) { + var b = await global.bsl.users.fetch(a) + coowner.push(b) + }) + try { + var bota = await global.bsl.users.fetch(bot.id) + } catch (e) { + if (!bota) { + req.session.error = "No bot found"; + return res.redirect('/'); + } + } + if (!bota) { + req.session.error = "No bot found"; + return res.redirect('/'); + } + res.render('bot/index', { + bot: bot, + user: req.user, + owners: coowner, + bota: bota + }); }) }) + +router.get('/:botID/vote', async function (req, res) { + if (!req.user) { + req.session.backURL = req.originalUrl; + res.redirect('/auth'); + } else { + bots.findOne({ id: req.params.botID }, async function (err, bot) { + if (err) { + console.log(err); + return res.redirect('/'); + } + if (!bot) { + req.session.error = "No bot found"; + return res.redirect('/'); + } + // check if users has already voted for this bot + votes.findOne({ user: req.user.id, bot: bot.id }, function (err, vote) { + if (err) { + console.log(err); + return res.redirect('/'); + } + if (vote) { + if (vote.date > Date.now() - (1000 * 60 * 60 * 24)) { + req.session.error = "You can only vote once per day"; + return res.redirect('/'); + } + vote.date = Date.now(); + vote.save(function (err) { + if (err) { + console.log(err); + return res.redirect('/'); + } + if (bot.votes) { + bot.votes = 1; + } else { + bot.votes++; + } + bot.save(function (err) { + if (err) { + console.log(err); + req.session.error = "Something went wrong"; + return res.redirect('/'); + } + }) + + req.session.message = "Vote added"; + return res.redirect('/'); + }) + } else { + // add vote to database + var vote = new votes({ + user: req.user.id, + date: new Date(), + bot: bot.id, + }); + vote.save(function (err) { + if (err) { + console.log(err); + req.session.error = "Something went wrong"; + return res.redirect('/'); + } else { + if (bot.votes) { + bot.votes = 1; + } else { + bot.votes++; + } + bot.save(function (err) { + if (err) { + console.log(err); + req.session.error = "Something went wrong"; + return res.redirect('/'); + } else { + req.session.message = "Vote added"; + return res.redirect('/'); + } + }) + } + }); + } + }) + }) + } +}) + module.exports = router; \ No newline at end of file diff --git a/website/views/bot/add.ejs b/website/views/bot/add.ejs index b118e55..1cf8178 100644 --- a/website/views/bot/add.ejs +++ b/website/views/bot/add.ejs @@ -21,10 +21,13 @@ - +