diff --git a/config.js b/config.js index f59198d..cfffb67 100644 --- a/config.js +++ b/config.js @@ -7,6 +7,7 @@ module.exports = { "login": "868065455628234780", "vote": "937643610541793300", "error": "1003947531543269507", + "info": "1005178285124239510", }, "bsl" : { "id": "870001234583621713", @@ -18,6 +19,10 @@ module.exports = { "invite":"https://discord.com/api/oauth2/authorize?client_id=870001234583621713&permissions=314433&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fcallback&response_type=code&scope=applications.commands%20bot" } }, + "discord":{ + "id": "868065454940385291", + "invite":"", + }, "server": { "port": 3000, "host": "http://localhost:3000", diff --git a/index.js b/index.js index 9abe886..94fbfa2 100644 --- a/index.js +++ b/index.js @@ -34,6 +34,7 @@ bsl.config = config client.on('ready', () => { console.log('Website bot is ready!'); require('./website') + require('./website/bot') }); bsl.on('ready', () => { console.log('BSL Started!'); @@ -82,4 +83,7 @@ module.exports.config = config; module.exports.mongoose = mongoose; module.exports.client = client; module.exports.bsl = bsl; -module.exports.embed = EmbedBuilder; \ No newline at end of file +module.exports.embed = EmbedBuilder; +global.client = client; +global.bsl = bsl; +global.config = config; \ No newline at end of file diff --git a/models/bot.js b/models/bot.js index ca75201..c00f742 100644 --- a/models/bot.js +++ b/models/bot.js @@ -2,13 +2,12 @@ const mongoose = require("mongoose"); let hm = new mongoose.Schema({ id: String, name: String, - avatar: String, + icon: String, verified: Boolean, description: String, owner: String, long_description: String, banner: String, - style: String, tags: [String], premium: Boolean, }); diff --git a/models/server.js b/models/server.js index 0b42582..f59feab 100644 --- a/models/server.js +++ b/models/server.js @@ -2,13 +2,13 @@ const mongoose = require("mongoose"); let hm = new mongoose.Schema({ id: String, name: String, - verified: Boolean, description: String, owner: String, long_description: String, - style: String, tags: [String], premium: Boolean, + icon: String, + members: String, }); module.exports = mongoose.model("servers", hm); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 5b0048e..7e55c9f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,28 @@ "passport-discord": "^0.1.4", "request": "^2.88.2", "showdown": "^2.1.0", - "tailwindcss": "^3.1.7" + "tailwindcss": "^3.1.7", + "url": "^0.11.0" + }, + "devDependencies": { + "postcss-nesting": "^10.1.10" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2", + "postcss-selector-parser": "^6.0.10" } }, "node_modules/@discordjs/builders": { @@ -1978,6 +1999,26 @@ "postcss": "^8.2.14" } }, + "node_modules/postcss-nesting": { + "version": "10.1.10", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.10.tgz", + "integrity": "sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, "node_modules/postcss-selector-parser": { "version": "6.0.10", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", @@ -2039,6 +2080,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -2673,6 +2723,20 @@ "punycode": "^2.1.0" } }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -2779,6 +2843,13 @@ } }, "dependencies": { + "@csstools/selector-specificity": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "dev": true, + "requires": {} + }, "@discordjs/builders": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.1.0.tgz", @@ -4170,6 +4241,16 @@ "postcss-selector-parser": "^6.0.6" } }, + "postcss-nesting": { + "version": "10.1.10", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.10.tgz", + "integrity": "sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==", + "dev": true, + "requires": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, "postcss-selector-parser": { "version": "6.0.10", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", @@ -4216,6 +4297,11 @@ "side-channel": "^1.0.4" } }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4647,6 +4733,22 @@ "punycode": "^2.1.0" } }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + } + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index f00db00..468a4dc 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,10 @@ "passport-discord": "^0.1.4", "request": "^2.88.2", "showdown": "^2.1.0", - "tailwindcss": "^3.1.7" + "tailwindcss": "^3.1.7", + "url": "^0.11.0" + }, + "devDependencies": { + "postcss-nesting": "^10.1.10" } } diff --git a/website/bot/index.js b/website/bot/index.js new file mode 100644 index 0000000..590d18a --- /dev/null +++ b/website/bot/index.js @@ -0,0 +1,34 @@ +const client = require('../../index.js').client; +const servers = require('../../models/server'); +var config = client.config +const { SlashCommandBuilder, Routes } = 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!'), +] + .map(command => command.toJSON()); + +const rest = new REST({ version: '10' }).setToken(config.bot.token); + +rest.put(Routes.applicationGuildCommands(config.bot.id, config.discord.id), { body: commands }) + .then(() => console.log('Successfully registered application commands.')) + .catch(console.error); + +client.on('interactionCreate', async interaction => { + if (!interaction.isChatInputCommand()) return; + + const { commandName } = interaction; + + if (commandName === 'ping') { + await interaction.reply('Pong!'); + } else if (commandName === 'topserver') { + const topServer = await servers.find({}, { sort: { memberCount: -1 } }); + await interaction.reply(`The top server is ${topServer.name} with ${topServer.memberCount} members!`); + } 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!`); + + } +}); \ No newline at end of file diff --git a/website/public/css/style.css b/website/public/css/style.css index a748e9c..3469db5 100644 --- a/website/public/css/style.css +++ b/website/public/css/style.css @@ -595,6 +595,9 @@ video { .top-3 { top: 0.75rem; } +.right-1 { + right: 0.25rem; +} .z-0 { z-index: 0; } @@ -613,12 +616,24 @@ video { .col-auto { grid-column: auto; } +.float-right { + float: right; +} .m-8 { margin: 2rem; } .m-20 { margin: 5rem; } +.m-2 { + margin: 0.5rem; +} +.m-4 { + margin: 1rem; +} +.m-10 { + margin: 2.5rem; +} .mx-auto { margin-left: auto; margin-right: auto; @@ -627,6 +642,22 @@ video { margin-left: -0.75rem; margin-right: -0.75rem; } +.mx-10 { + margin-left: 2.5rem; + margin-right: 2.5rem; +} +.mx-96 { + margin-left: 24rem; + margin-right: 24rem; +} +.mx-20 { + margin-left: 5rem; + margin-right: 5rem; +} +.mx-14 { + margin-left: 3.5rem; + margin-right: 3.5rem; +} .mb-2 { margin-bottom: 0.5rem; } @@ -684,6 +715,18 @@ video { .-mt-1 { margin-top: -0.25rem; } +.mt-7 { + margin-top: 1.75rem; +} +.ml-4 { + margin-left: 1rem; +} +.mr-5 { + margin-right: 1.25rem; +} +.ml-5 { + margin-left: 1.25rem; +} .block { display: block; } @@ -752,6 +795,11 @@ video { .min-h-screen { min-height: 100vh; } +.min-h-min { + min-height: -webkit-min-content; + min-height: -moz-min-content; + min-height: min-content; +} .w-full { width: 100%; } @@ -805,6 +853,12 @@ video { .w-3\/6 { width: 50%; } +.w-2\/3 { + width: 66.666667%; +} +.w-1\/3 { + width: 33.333333%; +} .max-w-7xl { max-width: 80rem; } @@ -826,6 +880,9 @@ video { .flex-none { flex: none; } +.flex-1 { + flex: 1 1 0%; +} .flex-shrink-0 { flex-shrink: 0; } @@ -898,6 +955,9 @@ video { .resize { resize: both; } +.list-disc { + list-style-type: disc; +} .appearance-none { -webkit-appearance: none; -moz-appearance: none; @@ -984,6 +1044,11 @@ video { margin-right: calc(2rem * var(--tw-space-x-reverse)); margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse))); } +.space-x-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1rem * var(--tw-space-x-reverse)); + margin-left: calc(1rem * 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))); @@ -1178,6 +1243,9 @@ video { .bg-right-top { background-position: right top; } +.bg-right { + background-position: right; +} .fill-current { fill: currentColor; } @@ -1299,6 +1367,12 @@ video { .pr-5 { padding-right: 1.25rem; } +.pb-0 { + padding-bottom: 0px; +} +.pt-0 { + padding-top: 0px; +} .text-left { text-align: left; } @@ -1329,6 +1403,10 @@ video { font-size: 0.75rem; line-height: 1rem; } +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} .font-bold { font-weight: 700; } @@ -1601,7 +1679,10 @@ body { src: url(https://fonts.gstatic.com/s/quicksand/v30/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58a-wg.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } + + /* media query for logo to vanish on small screens */ + @media (max-width: 768px) { .logo { display: none; @@ -1885,6 +1966,12 @@ body { display: inline; } + .sm\:min-h-min { + min-height: -webkit-min-content; + min-height: -moz-min-content; + min-height: min-content; + } + .sm\:w-auto { width: auto; } @@ -1923,6 +2010,10 @@ body { display: none; } + .lg\:h-5\/6 { + height: 83.333333%; + } + .lg\:w-1\/2 { width: 50%; } @@ -1935,8 +2026,8 @@ body { flex-grow: 1; } - .lg\:grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); + .lg\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); } .lg\:items-center { @@ -1946,7 +2037,14 @@ body { @media (min-width: 1280px) { - .xl\:grid-cols-5 { + .xl\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } +} + +@media (min-width: 1536px) { + + .\32xl\:grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); } } \ No newline at end of file diff --git a/website/public/css/tailwind.css b/website/public/css/tailwind.css index 4949467..9317ec6 100644 --- a/website/public/css/tailwind.css +++ b/website/public/css/tailwind.css @@ -35,7 +35,10 @@ body { src: url(https://fonts.gstatic.com/s/quicksand/v30/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58a-wg.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } + + /* media query for logo to vanish on small screens */ + @media (max-width: 768px) { .logo { display: none; diff --git a/website/routers/auth/index.js b/website/routers/auth/index.js index 0503cb4..123df16 100644 --- a/website/routers/auth/index.js +++ b/website/routers/auth/index.js @@ -2,6 +2,7 @@ var express = require('express'), router = express.Router(), passport = require('passport'); const request = require('request'); +var url = require('url'); const client = require('../../../index'); router.get("/", (req, res, next) => { @@ -9,7 +10,7 @@ router.get("/", (req, res, next) => { req.session.backURL = req.session.backURL; } else if (req.headers.referer) { const parsed = url.parse(req.headers.referer); - if (parsed.hostname === app.locals.domain) { + if (parsed.hostname === global.config.server.host) { req.session.backURL = parsed.path; } } else { diff --git a/website/routers/bot/index.js b/website/routers/bot/index.js index 4554d57..0d6e09a 100644 --- a/website/routers/bot/index.js +++ b/website/routers/bot/index.js @@ -22,10 +22,8 @@ router.post('/add', function (req, res) { verified: false, long_description: req.body.bot_description, owner: req.user.userid, - style: req.body.style, description: req.body.bot_short, tags: req.body.tags, - }); bot.save(function (err) { diff --git a/website/routers/servers/index.js b/website/routers/servers/index.js index 7a54638..dc64b81 100644 --- a/website/routers/servers/index.js +++ b/website/routers/servers/index.js @@ -3,6 +3,8 @@ var express = require('express'), var servers = require('../../../models/server'); const client = require('../../../index'); const Discord = require('discord.js'); +var showdown = require('showdown'), + converter = new showdown.Converter(); router.get('/', function () { }) @@ -11,7 +13,7 @@ router.get('/add', function (req, res) { res.render('server/add', { user: req.user, botscord: client - }); + }); return } else { req.session.backURL = req.originalUrl; @@ -24,45 +26,66 @@ router.post('/add', async function (req, res) { var checkServer = await client.bsl.guilds.cache.get(req.body.serverid); if (!checkServer) { return res.redirect(client.config.bot.bsl.invite + "&guild_id=" + req.body.serverid); - }else{ - let checkGuild = await servers.findOne({ id: guildID }); + } else { + let checkGuild = await servers.findOne({ id: checkServer.id }); if (checkGuild) { req.session.error = "Server already exists"; return res.redirect('/'); } + var server = new servers({ id: req.body.serverid, + name: checkServer.name, + owner: req.user.userid, + long_description: req.body.server_description, + description: req.body.server_short, + icon: checkServer.iconURL({ format: 'png', dynamic: true }), + memberCount: checkServer.memberCount, + tags: req.body.tags }) - } - var bot = new servers({ - id: req.body.bot_id, - name: req.body.bot_name, - verified: false, - long_description: req.body.bot_description, - owner: req.user.userid, - style: req.body.style, - description: req.body.bot_short, - tags: req.body.tags, - }); + var tagss = Array.from(new Set(req.body.tags)); + var tags; + for (let i = 0; i < tagss.length; i++) { + if (i === 3) break; + if (tagss[i] === null) { + return + } else { + if (tags === undefined) { + tags = tagss[i] + } else { + tags = tags + ", " + tagss[i]; + } + } - bot.save(function (err) { - if (err) { - console.log(err); - req.session.error = "Something went wrong"; - res.redirect('/'); - } else { - req.session.message = "Server added"; - res.redirect('/'); } - }); + console.log(tags) + const embed = new client.embed() + .setTitle('New server') + .setDescription(`${req.user.username}#${req.user.discriminator} added **${checkServer.name}** with members: **${checkServer.memberCount}**\nDescription: **${req.body.server_short}**\nWith tags: **${tags}**`) + .setColor('#00ff00') + .setTimestamp() + .setThumbnail(checkServer.iconURL({ format: 'png', dynamic: true })) + .setFooter({ text: 'New Server', iconURL: "https://cdn.discordapp.com/avatars/" + req.user.id + "/" + req.user.avatar + ".png" }); + client.client.channels.cache.get(client.client.config.bot.channels.info).send({ embeds: [embed] }); + server.save(function (err) { + if (err) { + console.log(err); + req.session.error = "Something went wrong"; + res.redirect('/'); + } else { + req.session.message = "Server added"; + res.redirect('/'); + } + }); + } } else { req.session.backURL = req.originalUrl; res.redirect('/auth'); } }); -router.get('/:botID', function (req, res) { - servers.findOne({ id: req.params.botID }, function (err, bot) { +router.get('/:server', function (req, res) { + servers.findOne({ id: req.params.server }, function (err, bot) { if (err) { console.log(err); return res.redirect('/'); @@ -73,6 +96,8 @@ router.get('/:botID', function (req, res) { } res.render('server/index', { user: req.user, + server: bot, + serverr: global.client.guilds.cache.get(bot.id) }); }) }) diff --git a/website/views/bot/add.ejs b/website/views/bot/add.ejs index 9aa0445..b118e55 100644 --- a/website/views/bot/add.ejs +++ b/website/views/bot/add.ejs @@ -15,19 +15,13 @@
- +
- -
- -
+
diff --git a/website/views/includes/footer.ejs b/website/views/includes/footer.ejs index 273e583..90ec201 100644 --- a/website/views/includes/footer.ejs +++ b/website/views/includes/footer.ejs @@ -34,15 +34,20 @@

- - - - - + + \ No newline at end of file diff --git a/website/views/includes/header.ejs b/website/views/includes/header.ejs index e2aca8e..7c27e9c 100644 --- a/website/views/includes/header.ejs +++ b/website/views/includes/header.ejs @@ -13,6 +13,7 @@ + @@ -58,7 +59,8 @@ diff --git a/website/views/index.ejs b/website/views/index.ejs index 0de2192..7c98382 100644 --- a/website/views/index.ejs +++ b/website/views/index.ejs @@ -68,7 +68,7 @@

These bots are featured on BotsCord!

+ class="grid columns items-center content-center justify-center grid-cols-1 gap-4 col-auto sm:grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 m-8"> <% } %> <% for(let i=0; i < nbots.length; i++) { if (i===3) break; var bot=nbots[i]; if(bot) { %>

+
+ + View + + + Invite + +
<% if(bot.tags) {%>
<% bot.tags.forEach(tag=>{ %> - # - <%= tag %> - + #<%= tag %> + <% }) %>
<% } %> @@ -114,7 +123,7 @@

We rolled the dice and got this nice bots!

+ class="grid columns items-center content-center justify-center grid-cols-1 gap-4 col-auto sm:grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 m-8"> <% } %> <% for(let i=0; i < nbots.length; i++) { if (i===3) break; var bot=nbots[i]; if(bot) { %>

+
+ + View + + + Invite + +
<% if(bot.tags) {%>
<% bot.tags.forEach(tag=>{ %> - # - <%= tag %> - + #<%= tag %> + <% }) %>
<% } %> @@ -160,7 +177,7 @@

These servers are featured on BotsCord!

+ class="grid columns items-center content-center justify-center grid-cols-1 gap-4 col-auto sm:grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 m-8"> <% } %> <% for(let i=0; i < nbots.length; i++) { if (i===3) break; var bot=nbots[i]; if(bot) { %>

+
+ + View + + + Invite + +
<% if(bot.tags) {%>
<% bot.tags.forEach(tag=>{ %> - # - <%= tag %> - + #<%= tag %> + <% }) %>
<% } %> @@ -201,18 +227,18 @@ if(nbots.length > 0) { %>

-

Random Bots +

Random Servers

-

We rolled the dice and got this nice bots!

+

We rolled the dice and got this nice Servers!

+ class="grid columns items-center content-center justify-center grid-cols-1 gap-4 col-auto sm:grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 m-8"> <% } %> <% for(let i=0; i < nbots.length; i++) { if (i===3) break; var bot=nbots[i]; if(bot) { %>
<%= bot.name %>
@@ -222,13 +248,21 @@ <%= bot.description %>

+ <% if(bot.tags) {%>
<% bot.tags.forEach(tag=>{ %> - # - <%= tag %> - + #<%= tag %> + <% }) %>
<% } %> diff --git a/website/views/server/add.ejs b/website/views/server/add.ejs index dd5c3b1..ee385de 100644 --- a/website/views/server/add.ejs +++ b/website/views/server/add.ejs @@ -20,8 +20,9 @@ class="block py-2.5 px-0 w-full text-sm text-gray-900 bg-transparent border-0 border-b-2 border-gray-300 appearance-none dark:text-white dark:border-gray-600 dark:focus:border-blue-500 focus:outline-none focus:ring-0 focus:border-blue-600 peer" placeholder=" " required /> - + class="peer-focus:font-medium absolute text-sm text-white dark:text-white duration-300 transform -translate-y-6 scale-75 top-3 -z-10 origin-[0] peer-focus:left-0 peer-focus:text-blue-600 peer-focus:dark:text-blue-500 peer-placeholder-shown:scale-100 peer-placeholder-shown:translate-y-0 peer-focus:scale-75 peer-focus:-translate-y-6">Server + ID +
@@ -30,7 +31,7 @@ placeholder=" " required rows="5"> + description (MarkDown supported!)
Short Description (Will be show on home page)
-
-