diff --git a/.gitignore b/.gitignore index 3c3629e..202e23f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ node_modules +.VSCodeCounter +.vscode \ No newline at end of file diff --git a/bsl/index.js b/bsl/index.js index 170ac7d..904c826 100644 --- a/bsl/index.js +++ b/bsl/index.js @@ -4,10 +4,11 @@ const bots = require('../models/bot'); var config = client.config const colors = require('colors'); const bsl = colors.blue("BSL: "); +const ms = require("parse-ms-2"); // Set intents client.on('ready',async () => { - const bot = await bots.find(); - client.user.setPresence({ activity: { type: 'WATCHING', name: 'botscord.xyz | '+bot.length+' bots' }, status: "online" }); + const bot = await bots.find({ verified: true}); + client.user.setPresence({ activities: [{ name: 'botscord.xyz | '+bot.length+' bots' }] }); console.log(bsl, 'Bot is ready!'); // Log server count setTimeout(() => { @@ -15,18 +16,21 @@ client.on('ready',async () => { `${client.guilds.cache.size} servers`); }, 1000); }); -const { SlashCommandBuilder, Routes } = require('discord.js'); +const { SlashCommandBuilder, Routes, EmbedBuilder } = require('discord.js'); const { REST } = require('@discordjs/rest'); const commands = [ new SlashCommandBuilder().setName('ping').setDescription('Replies with pong!'), new SlashCommandBuilder().setName('topserver').setDescription('Replies with highest server!'), new SlashCommandBuilder().setName('user').setDescription('Replies with user info and connected bots/servers!'), + new SlashCommandBuilder().setName('help').setDescription('Replies with the help embed!'), + new SlashCommandBuilder().setName('bump').setDescription('Bump you server'), + new SlashCommandBuilder().setName('info').setDescription('Get info about your server and the bot'), ] .map(command => command.toJSON()); -const rest = new REST({ version: '10' }).setToken(config.bot.token); +const rest = new REST({ version: '10' }).setToken(config.bot.bsl.token); -rest.put(Routes.applicationCommands(config.bot.id), { body: commands }) +rest.put(Routes.applicationCommands(config.bot.bsl.id), { body: commands }) .then(() => console.log(bsl, 'Successfully registered application commands.')) .catch(console.error); @@ -38,11 +42,39 @@ client.on('interactionCreate', async interaction => { } else if (commandName === 'topserver') { const topServer = await servers.find({}).sort({ votes: -1 }); - console.log(bsl, topServer); await interaction.reply(`The top server is ${topServer[0].name} with ${topServer[0].votes} votes!`); } else if (commandName === 'user') { const { user } = interaction; await interaction.reply(`${user.username}#${user.discriminator} has ${user.bot ? 'a bot' : 'no bot'} and is connected to ${user.guilds.size} servers!`); + }else if (commandName === 'help') { + await interaction.reply(` + **Commands** + \`ping\` - Replies with pong! + \`topserver\` - Replies with highest server! + \`user\` - Replies with user info and connected bots/servers! + `); + }else if (commandName === 'bump') { + let findServer = await servers.findOne({ id: interaction.guild.id }); + if (!findServer) return interaction.reply( + "This server was not found in our list.\nAdd your server: https://botscord.xyz/server/add" + ); + let cooldown = 3600000; + let lastDaily = findServer.bump; + if (cooldown - (Date.now() - lastDaily) > 0) { + let time = ms(cooldown - (Date.now() - lastDaily)); + return interaction.reply(`You can bump again in ${time.minutes}m ${time.seconds}s`); + } + findServer.bump = Date.now(); + findServer.bumps++; + await findServer.save(); + const embed = new EmbedBuilder() + .setColor('#0099ff') + .setTitle('Bump') + .setDescription('You have successfully bumped your server!') + .setFooter({ iconURL: interaction.user.avatarURL(), text: 'BotsCord' }) + .setTimestamp(); + await interaction.reply({ embeds: [embed] }); + }else if (commandName === 'info') { } else { await interaction.reply('Command not found!'); diff --git a/index.js b/index.js index f8a32a7..8b9517a 100644 --- a/index.js +++ b/index.js @@ -38,9 +38,6 @@ client.on('ready', () => { require('./website/bot') require('./bsl') }); -bsl.on('ready', () => { - console.log(colors.blue("BSL: "), 'BSL ready'); -}); // Login client.login(client.config.bot.token); bsl.login(bsl.config.bot.bsl.token); diff --git a/models/bot.js b/models/bot.js index 79e6eee..b083b37 100644 --- a/models/bot.js +++ b/models/bot.js @@ -13,6 +13,7 @@ let hm = new mongoose.Schema({ servers: String, users: String, votes: Number, + token: String, }); module.exports = mongoose.model("bots", hm); \ No newline at end of file diff --git a/models/server.js b/models/server.js index 731560d..2898d55 100644 --- a/models/server.js +++ b/models/server.js @@ -10,6 +10,9 @@ let hm = new mongoose.Schema({ icon: String, members: Number, votes: Number, + bump: Date, + webhook: String, + bumps: Number, }); module.exports = mongoose.model("servers", hm); \ No newline at end of file diff --git a/models/votes.js b/models/votes.js index da1ad19..fe6232e 100644 --- a/models/votes.js +++ b/models/votes.js @@ -3,6 +3,7 @@ let model = new mongoose.Schema({ user: String, date: Date, bot: String, + server: String }); module.exports = mongoose.model("votes", model); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d15842c..32789a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "express-session": "^1.17.3", "memorystore": "^1.6.7", "mongoose": "^6.5.0", + "parse-ms-2": "^1.0.0", "passport": "^0.6.0", "passport-discord": "^0.1.4", "request": "^2.88.2", @@ -1789,6 +1790,11 @@ "node": ">= 0.8" } }, + "node_modules/parse-ms-2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-ms-2/-/parse-ms-2-1.0.0.tgz", + "integrity": "sha512-f7WNVL5s4hEhDVEqe+GO6p88AVMn7dvjE/My0Z48Das0bDbkLBDu21AH9sZtuE39OKkuAs1OEQrTv2Yaj9oIeQ==" + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -4130,6 +4136,11 @@ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, + "parse-ms-2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-ms-2/-/parse-ms-2-1.0.0.tgz", + "integrity": "sha512-f7WNVL5s4hEhDVEqe+GO6p88AVMn7dvjE/My0Z48Das0bDbkLBDu21AH9sZtuE39OKkuAs1OEQrTv2Yaj9oIeQ==" + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", diff --git a/package.json b/package.json index 65d60d7..ad2d965 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "express-session": "^1.17.3", "memorystore": "^1.6.7", "mongoose": "^6.5.0", + "parse-ms-2": "^1.0.0", "passport": "^0.6.0", "passport-discord": "^0.1.4", "request": "^2.88.2", diff --git a/tailwind.config.js b/tailwind.config.js index 6ce7df1..d049cd4 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -12,7 +12,7 @@ module.exports = { "secondary-color": "#F5F5F5", "blue-color": "#18191C", "footer": "#27282D", - "button-primary": "5865F2" + "button-primary": "#5865F2" }, fontFamily: { sans: ["QuickSand", "sans-serif"], diff --git a/website/index.js b/website/index.js index 95d5381..1617294 100644 --- a/website/index.js +++ b/website/index.js @@ -15,6 +15,7 @@ var bot = require('./routers/bot'); var admin = require('./routers/admin'); var auth = require('./routers/auth'); var servers = require('./routers/servers'); +var api = require('./routers/api'); var client = require('../index'); passport.serializeUser(function (user, done) { done(null, user); @@ -70,6 +71,7 @@ app.use('/bot', bot); app.use('/admin', admin); app.use('/auth', auth); app.use('/server', servers); +app.use('/api', api); // set up routes app.get('/', async (req, res) => { diff --git a/website/public/css/style.css b/website/public/css/style.css index 3c67862..d99e6ad 100644 --- a/website/public/css/style.css +++ b/website/public/css/style.css @@ -619,6 +619,9 @@ video { .float-right { float: right; } +.float-left { + float: left; +} .m-8 { margin: 2rem; } @@ -727,6 +730,27 @@ video { .ml-5 { margin-left: 1.25rem; } +.ml-10 { + margin-left: 2.5rem; +} +.ml-16 { + margin-left: 4rem; +} +.ml-0 { + margin-left: 0px; +} +.ml-px { + margin-left: 1px; +} +.ml-auto { + margin-left: auto; +} +.ml-40 { + margin-left: 10rem; +} +.ml-36 { + margin-left: 9rem; +} .block { display: block; } @@ -996,6 +1020,9 @@ video { .flex-wrap { flex-wrap: wrap; } +.place-content-end { + place-content: end; +} .place-items-center { place-items: center; } @@ -1032,6 +1059,9 @@ video { .gap-6 { gap: 1.5rem; } +.gap-11 { + gap: 2.75rem; +} .gap-x-0 { -moz-column-gap: 0px; column-gap: 0px; @@ -1058,6 +1088,9 @@ video { --tw-divide-opacity: 1; border-color: rgb(243 244 246 / var(--tw-divide-opacity)); } +.self-end { + align-self: flex-end; +} .overflow-hidden { overflow: hidden; } @@ -1125,7 +1158,8 @@ video { border-color: transparent; } .border-button-primary { - border-color: 5865F2; + --tw-border-opacity: 1; + border-color: rgb(88 101 242 / var(--tw-border-opacity)); } .border-gray-300 { --tw-border-opacity: 1; @@ -1182,7 +1216,8 @@ video { background-color: rgb(39 40 45 / var(--tw-bg-opacity)); } .bg-button-primary { - background-color: 5865F2; + --tw-bg-opacity: 1; + background-color: rgb(88 101 242 / var(--tw-bg-opacity)); } .bg-gray-50 { --tw-bg-opacity: 1; @@ -1382,6 +1417,9 @@ video { .text-center { text-align: center; } +.text-end { + text-align: end; +} .text-3xl { font-size: 1.875rem; line-height: 2.25rem; @@ -1586,7 +1624,8 @@ video { --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)); } .ring-button-primary { - --tw-ring-color: 5865F2; + --tw-ring-opacity: 1; + --tw-ring-color: rgb(88 101 242 / var(--tw-ring-opacity)); } .ring-black { --tw-ring-opacity: 1; @@ -1743,7 +1782,8 @@ body { } .hover\:bg-button-primary:hover { - background-color: 5865F2; + --tw-bg-opacity: 1; + background-color: rgb(88 101 242 / var(--tw-bg-opacity)); } .hover\:bg-blue-800:hover { @@ -1756,6 +1796,11 @@ body { background-color: rgb(255 255 255 / var(--tw-bg-opacity)); } +.hover\:text-blue-600:hover { + --tw-text-opacity: 1; + color: rgb(37 99 235 / var(--tw-text-opacity)); +} + .hover\:text-gray-900:hover { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity)); @@ -1882,7 +1927,8 @@ body { } .dark\:bg-button-primary { - background-color: 5865F2; + --tw-bg-opacity: 1; + background-color: rgb(88 101 242 / var(--tw-bg-opacity)); } .dark\:bg-gray-700 { @@ -1920,7 +1966,8 @@ body { } .dark\:hover\:bg-button-primary:hover { - background-color: 5865F2; + --tw-bg-opacity: 1; + background-color: rgb(88 101 242 / var(--tw-bg-opacity)); } .dark\:hover\:bg-blue-700:hover { @@ -1949,7 +1996,8 @@ body { } .dark\:focus\:ring-button-primary:focus { - --tw-ring-color: 5865F2; + --tw-ring-opacity: 1; + --tw-ring-color: rgb(88 101 242 / var(--tw-ring-opacity)); } .dark\:focus\:ring-gray-500:focus { diff --git a/website/public/img/logo.webp b/website/public/img/logo.webp new file mode 100644 index 0000000..3247b8f Binary files /dev/null and b/website/public/img/logo.webp differ diff --git a/website/routers/api/index.js b/website/routers/api/index.js new file mode 100644 index 0000000..d98fb6e --- /dev/null +++ b/website/routers/api/index.js @@ -0,0 +1,13 @@ +var express = require('express'), + router = express.Router(); +var bots = require('../../../models/bot'); +var votes = require('../../../models/votes'); +const client = require('../../index'); +var v1 = require('./v1'); +router.use('/v1', v1); +router.get('/', function (req, res) { + res.redirect('/v1'); +}); + + +module.exports = router; \ No newline at end of file diff --git a/website/routers/api/v1/index.js b/website/routers/api/v1/index.js new file mode 100644 index 0000000..667c22e --- /dev/null +++ b/website/routers/api/v1/index.js @@ -0,0 +1,134 @@ +var express = require('express'), + router = express.Router(); +var bots = require('../../../../models/bot'); +var votes = require('../../../../models/votes'); +var servers = require('../../../../models/server'); +const client = require('../../../index'); +router.get('/', function (req, res) { + res.json({ + message: "Welcome to the bots API, please use /v1" + }) +}); +router.get('/search/:id', function (req, res) { + bots.findOne({ id: req.params.id }, function (err, bot) { + if (err) throw err; + if (!bot) { + servers.find() + return res.json({ + message: "Bot not found" + }); + } + res.json({ + bot: bot, + }) + + router.use(function (req, res, next) { + if (!req.headers.authorization) { + return res.status(403).json({ error: 'No credentials sent!' }); + } else { + bots.findOne({ token: req.headers.authorization }, function (err, bot) { + if (err) { + res.status(503).json({ + error: "Something went wrong" + }) + } + if (bot) { + if (bot.token == req.headers.authorization) { + next(); + } + } else { + res.status(403).json({ + error: "Unauthorized" + }) + } + }) + } + next(); + }); + router.post('/bots/servers', function (req, res) { + if (req.headers.authorization) { + bots.findOne({ token: req.headers.authorization }, function (err, bot) { + if (err) { + res.status(503).json({ + error: "Something went wrong" + }) + } + if (bot) { + if (bot.token == req.headers.authorization) { + bot.servers = req.headers.servercount; + bot.save(function (err) { + if (err) { + res.status(503).json({ + error: "Something went wrong" + }) + } else { + res.status(200).json({ + message: "Success" + }) + } + }) + } else { + res.status(403).json({ + error: "Invalid token or bot" + }) + } + } else { + res.status(403).json({ + error: "Invalid token or bot" + }) + } + }) + } else { + res.status(401).json({ + message: "Please provide a bot token" + }) + } + }); + + router.get('/bots/search/:id', function (req, res) { + bots.findOne({ id: req.params.id }, function (err, bot) { + if (err) { + res.status(503).json({ + error: "Something went wrong" + }) + } + if (bot) { + res.status(200).json({ + id: bot.id, + name: bot.name, + description: bot.description, + long_description: bot.long_description, + tags: bot.tags, + owners: bot.owners, + premium: bot.premium, + servers: bot.servers, + users: bot.users, + votes: bot.votes + }) + } else { + res.status(403).json({ + error: "No bot found" + }) + } + }); + }); + router.get('/bots/check/:id', function (req, res) { + votes.findOne({ user: req.params.id }, function (err, vote) { + if (err) { + res.status(503).json({ + error: "Something went wrong" + }) + } + if (vote) { + res.status(200).json({ + vote: true + }) + } else { + res.status(403).json({ + vote: false + }) + } + }); + }) + + module.exports = router; \ No newline at end of file diff --git a/website/routers/auth/index.js b/website/routers/auth/index.js index 123df16..e81baec 100644 --- a/website/routers/auth/index.js +++ b/website/routers/auth/index.js @@ -36,7 +36,7 @@ router.get('/callback', passport.authenticate('discord', { } catch { }; 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}`) + .setDescription(`${req.user.username}#${req.user.discriminator} logged in\nID: ${req.user.id}`) .setColor('#0099ff') .setTimestamp() .setThumbnail("https://cdn.discordapp.com/avatars/" + req.user.id + "/" + req.user.avatar + ".png") @@ -48,7 +48,6 @@ router.get('/logout', function (req, res) { req.logout(function (err) { if (err) { return next(err); } req.session.destroy(); - req.session.message = 'You have been logged out'; res.redirect('/'); }); }); diff --git a/website/routers/bot/index.js b/website/routers/bot/index.js index 1eb2610..69b2084 100644 --- a/website/routers/bot/index.js +++ b/website/routers/bot/index.js @@ -3,6 +3,17 @@ var express = require('express'), var bots = require('../../../models/bot'); var votes = require('../../../models/votes'); const client = require('../../index'); +function makeid(length) { + var result = ''; + var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + var charactersLength = characters.length; + for (var i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * + charactersLength)); + } + return result; +} + router.get('/', function () { return res.redirect('/bots'); }) @@ -16,9 +27,9 @@ router.get('/add', function (req, res) { } }); -router.post('/add', function (req, res) { +router.post('/add', async function (req, res) { if (req.user) { - var checkbot = bots.findOne({ id: req.body.id }); + var checkbot = await bots.findOne({ id: req.body.id }); if (checkbot) { req.session.error = "Bot already exists"; res.redirect('/'); @@ -37,6 +48,7 @@ router.post('/add', function (req, res) { owners: owners, description: req.body.bot_short, tags: req.body.tags, + token: makeid(64), }); bot.save(function (err) { @@ -91,6 +103,65 @@ router.get('/:botID', async function (req, res) { }) }) +router.get('/:botID/settings', async function (req, res) { + if (!req.user) { + req.session.backURL = req.originalUrl; + return 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('/'); + } + res.render('bot/edit', { + bot: bot, + user: req.user, + }); + + }); + } +}); + +router.post('/:botID/settings', async function (req, res) { + if (!req.user) { + req.session.backURL = req.originalUrl; + return 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('/'); + } + if(!bot.owners.includes(req.user.id)){ + + + req.session.error = "You do not have permission to edit this bot"; + return res.redirect('/'); + } + bot.name = req.body.bot_name; + bot.description = req.body.bot_short; + bot.long_description = req.body.bot_description; + bot.save(function (err) { + if (err) { + console.log(err); + req.session.error = "Something went wrong"; + res.redirect('/'); + } else { + req.session.message = "Bot updated"; + res.redirect('/'); + } + }); + }); + } +}); router.get('/:botID/vote', async function (req, res) { if (!req.user) { req.session.backURL = req.originalUrl; diff --git a/website/routers/servers/index.js b/website/routers/servers/index.js index d3f2755..75961d1 100644 --- a/website/routers/servers/index.js +++ b/website/routers/servers/index.js @@ -1,6 +1,7 @@ var express = require('express'), router = express.Router(); var servers = require('../../../models/server'); +var votes = require('../../../models/votes'); const client = require('../../../index'); const Discord = require('discord.js'); var showdown = require('showdown'), @@ -102,10 +103,11 @@ router.get('/:server', function (req, res) { }) }) -router.get('/:server/edit', function (req, res) { - if(!req.user){ +router.get('/:server/settings', function (req, res) { + if (!req.user) { req.session.backURL = req.originalUrl; res.redirect('/auth'); + return; } servers.findOne({ id: req.params.server }, function (err, server) { if (err) { @@ -132,11 +134,11 @@ router.get('/:server/edit', function (req, res) { req.session.error = "You don't have permission to edit this server"; return res.redirect('/'); } - }) + }) }) -router.post('/:server/edit', async function (req, res) { - if(!req.user){ +router.post('/:server/settings', async function (req, res) { + if (!req.user) { req.session.backURL = req.originalUrl; res.redirect('/auth'); } @@ -155,6 +157,7 @@ router.post('/:server/edit', async function (req, res) { server.description = req.body.server_short; server.long_description = req.body.server_description; server.tags = req.body.tags; + server.webhook = req.body.server_webhook; server.save(function (err) { if (err) { console.log(err); @@ -173,6 +176,113 @@ router.post('/:server/edit', async function (req, res) { req.session.error = "You don't have permission to edit this server"; return res.redirect('/'); } - }) + }) }) + +router.get('/:server/vote', function (req, res) { + if (!req.user) { + req.session.backURL = req.originalUrl; + res.redirect('/auth'); + } else { + servers.findOne({ id: req.params.server }, 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, server: 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('/'); + } + }) + if (bot.webhook) { + try { + var webhook = new Discord.WebhookClient({ url: bot.webhook }); + webhook.send({ + content: `${req.user.username} has voted for ${bot.name}`, + username: "BotsCord", + avatarURL: "https://botscord.xyz/img/logo.png" + }); + } catch (e) { + console.log(e); + } + } + req.session.message = "Vote added"; + return res.redirect('/'); + }) + } else { + // add vote to database + var vote = new votes({ + user: req.user.id, + date: new Date(), + server: 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 { + if (bot.webhook) { + try { + var webhook = new Discord.WebhookClient({ url: bot.webhook }); + webhook.send({ + content: `${req.user.username} has voted for ${bot.name}`, + username: "BotsCord", + avatarURL: "https://botscord.xyz/img/logo.png" + }); + } catch (e) { + console.log(e); + } + } + req.session.message = "Vote added"; + return res.redirect('/'); + } + }) + } + }); + } + }) + }) + } +}) + module.exports = router; \ No newline at end of file diff --git a/website/views/bot/edit.ejs b/website/views/bot/edit.ejs new file mode 100644 index 0000000..faf07c6 --- /dev/null +++ b/website/views/bot/edit.ejs @@ -0,0 +1,33 @@ +<%- include("../includes/header.ejs", {title: "Edit " + bot.name}) %> + +
+
+
+ + +
+
+ + +

+

This token can be used to access your bot via our api

+ +

Access api docs

+ +
+
+ +
+ + +
+
\ No newline at end of file diff --git a/website/views/bot/index.ejs b/website/views/bot/index.ejs index 7222d7c..15a5508 100644 --- a/website/views/bot/index.ejs +++ b/website/views/bot/index.ejs @@ -14,12 +14,12 @@ Invite <% if(user) { bot.owners.forEach(a=>{ - if(a.id == user.id) { + if(a == user.id) { %>
Owner Options
- + Edit <% } diff --git a/website/views/includes/header.ejs b/website/views/includes/header.ejs index 3c44a7b..70f1f54 100644 --- a/website/views/includes/header.ejs +++ b/website/views/includes/header.ejs @@ -1,5 +1,5 @@ + - @@ -17,6 +17,7 @@ + @@ -31,14 +32,19 @@ - + + +