diff --git a/bot/config.js b/bot/config.js deleted file mode 100644 index e99c710..0000000 --- a/bot/config.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - "mongodb": "mongodb+srv://root:@cluster0.jo9hd.mongodb.net/?retryWrites=true&w=majority", - "bot": { - token: "ODcwMDAxMjM0NTgzNjIxNzEz.GHwzsE.tvU0FJG9c7HFkLaqDMqp6wTaSBZbFdH6wuaLO0", - channels: { - login: "868065455628234780", - vote: "937643610541793300", - error: "1003947531543269507", - } - }, -} \ No newline at end of file diff --git a/bot/index.js b/bot/index.js deleted file mode 100644 index 93723cb..0000000 --- a/bot/index.js +++ /dev/null @@ -1,23 +0,0 @@ -// Create discord.js client -const { Client, GatewayIntentBits } = require('discord.js'); -const client = new Client({ - intents: [ - GatewayIntentBits.Guilds, - GatewayIntentBits.GuildMessages, - GatewayIntentBits.GuildMessageReactions, - GatewayIntentBits.GuildMessageTyping, - GatewayIntentBits.DirectMessages, - - ] -}); -client.config = require('./config'); -// Set intents -client.on('ready', () => { - console.log('Bot is ready!'); - // Log server count - setTimeout(() => { - console.log(`${client.guilds.cache.size} servers`); - }, 1000); -}); -// Login -client.login(client.config.bot.token); \ No newline at end of file diff --git a/bot/package.json b/bot/package.json deleted file mode 100644 index 40d3add..0000000 --- a/bot/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "bot", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC" -} diff --git a/bsl/index.js b/bsl/index.js new file mode 100644 index 0000000..170ac7d --- /dev/null +++ b/bsl/index.js @@ -0,0 +1,50 @@ +const client = require('../index.js').bsl; +const servers = require('../models/server'); +const bots = require('../models/bot'); +var config = client.config +const colors = require('colors'); +const bsl = colors.blue("BSL: "); +// 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" }); + console.log(bsl, 'Bot is ready!'); + // Log server count + setTimeout(() => { + console.log(bsl, + `${client.guilds.cache.size} servers`); + }, 1000); +}); +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.applicationCommands(config.bot.id), { body: commands }) + .then(() => console.log(bsl, '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(`🏓Latency is ${Date.now() - interaction.createdTimestamp}ms. API Latency is ${Math.round(client.ws.ping)}ms`); + } 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 { + await interaction.reply('Command not found!'); + } +}); diff --git a/config.js b/config.js index cfffb67..2ffd050 100644 --- a/config.js +++ b/config.js @@ -1,34 +1,40 @@ module.exports = { - "mongodb": "mongodb+srv://root:RzIhDff90LKkOOjw@cluster0.jo9hd.mongodb.net/?retryWrites=true&w=majority", - "bot": { - "id": "934087523649609768", - "token": "OTM0MDg3NTIzNjQ5NjA5NzY4.GV-g1-.Eggw57JNtsrLPbakg-_yr8fn8oBAbh0nKfK-lk", - "channels":{ - "login": "868065455628234780", - "vote": "937643610541793300", - "error": "1003947531543269507", - "info": "1005178285124239510", + mongodb: "mongodb+srv://root:RzIhDff90LKkOOjw@cluster0.jo9hd.mongodb.net/?retryWrites=true&w=majority", + bot: { + id: "934087523649609768", + token: "OTM0MDg3NTIzNjQ5NjA5NzY4.GV-g1-.Eggw57JNtsrLPbakg-_yr8fn8oBAbh0nKfK-lk", + channels:{ + login: "868065455628234780", + vote: "937643610541793300", + error: "1003947531543269507", + info: "1005178285124239510", }, - "bsl" : { - "id": "870001234583621713", - "token": "ODcwMDAxMjM0NTgzNjIxNzEz.GfMe5Y.USVO8IBvKkPIX0PFbYFRgfpctT-wW8sBVmFLQc", - "channels":{ - "vote":"937643610541793300", - "error":"1003947531543269507", + bsl : { + id: "870001234583621713", + token: "ODcwMDAxMjM0NTgzNjIxNzEz.GfMe5Y.USVO8IBvKkPIX0PFbYFRgfpctT-wW8sBVmFLQc", + channels:{ + vote:"937643610541793300", + error:"1003947531543269507", }, - "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" + 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":"", + discord:{ + id: "868065454940385291", + invite:"", + roles: { + admin: "868065454940385291", + mod: "868065454940385291", + user: "868065454940385293", + bot: "1006120950045098034" + } }, - "server": { - "port": 3000, - "host": "http://localhost:3000", + server: { + port: 3000, + host: "http://localhost:3000", }, - "users": { - "owner": [""], - "verificator": [""], + users: { + owner: [""], + verificator: [""], } } \ No newline at end of file diff --git a/index.js b/index.js index 94fbfa2..f8a32a7 100644 --- a/index.js +++ b/index.js @@ -1,12 +1,13 @@ // Import config and export const config = require('./config'); const mongoose = require('mongoose'); +const colors = require('colors'); // Connect to mongoDB try { mongoose.connect(config.mongodb); } catch (err) { console.log(err); - console.log('Error connecting to mongoDB'); + console.log(colors.red("MongoDB: "), 'Error connecting to mongoDB'); process.exit(1); } // Create discord.js client @@ -32,12 +33,13 @@ client.config = config; bsl.config = config // Set intents client.on('ready', () => { - console.log('Website bot is ready!'); + console.log(colors.green("Website: "), 'Website bot is ready!'); require('./website') require('./website/bot') + require('./bsl') }); bsl.on('ready', () => { - console.log('BSL Started!'); + console.log(colors.blue("BSL: "), 'BSL ready'); }); // Login client.login(client.config.bot.token); diff --git a/models/server.js b/models/server.js index f59feab..731560d 100644 --- a/models/server.js +++ b/models/server.js @@ -8,7 +8,8 @@ let hm = new mongoose.Schema({ tags: [String], premium: Boolean, icon: String, - members: String, + members: Number, + votes: Number, }); module.exports = mongoose.model("servers", hm); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 7e55c9f..d15842c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "autoprefixer": "^10.4.8", "body-parser": "^1.20.0", + "colors": "^1.4.0", "cookie-session": "^2.0.0", "discord.js": "^14.1.1", "ejs": "^3.1.8", @@ -612,6 +613,14 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3236,6 +3245,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", diff --git a/package.json b/package.json index 468a4dc..65d60d7 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "dependencies": { "autoprefixer": "^10.4.8", "body-parser": "^1.20.0", + "colors": "^1.4.0", "cookie-session": "^2.0.0", "discord.js": "^14.1.1", "ejs": "^3.1.8", diff --git a/website/bot/index.js b/website/bot/index.js index 590d18a..89667e8 100644 --- a/website/bot/index.js +++ b/website/bot/index.js @@ -3,6 +3,7 @@ const servers = require('../../models/server'); var config = client.config const { SlashCommandBuilder, Routes } = require('discord.js'); const { REST } = require('@discordjs/rest'); +const colors = require('colors'); const commands = [ new SlashCommandBuilder().setName('ping').setDescription('Replies with pong!'), new SlashCommandBuilder().setName('topserver').setDescription('Replies with highest server!'), @@ -13,7 +14,7 @@ const commands = [ 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.')) + .then(() => console.log(colors.green("Website: "),'Successfully registered application commands.')) .catch(console.error); client.on('interactionCreate', async interaction => { @@ -31,4 +32,20 @@ client.on('interactionCreate', async interaction => { await interaction.reply(`${user.username}#${user.discriminator} has ${user.bot ? 'a bot' : 'no bot'} and is connected to ${user.guilds.size} servers!`); } +}); +client.on("guildMemberAdd", async (member) => { + let guild = client.guilds.cache.get(config.discord.id); + if (member.user.bot) { + try { + guild.member(member.id).roles.add(config.server.roles.botlist.bot); + } catch (error) { + + } + }else{ + try { + guild.member(member.id).roles.add(config.server.roles.botlist.user); + } catch (error) { + + } + } }); \ No newline at end of file diff --git a/website/index.js b/website/index.js index 4be7eac..41726c7 100644 --- a/website/index.js +++ b/website/index.js @@ -8,6 +8,7 @@ const passport = require('passport'); var DiscordStrategy = require('passport-discord').Strategy; var MemoryStore = require('memorystore')(session); const bodyParser = require('body-parser'); +const colors = require('colors'); var showdown = require('showdown'), converter = new showdown.Converter(); var bot = require('./routers/bot'); @@ -25,7 +26,7 @@ passport.deserializeUser(function (obj, done) { const Banned = require('../models/site-ban'); const bots = require('../models/bot'); const server = require('../models/server'); -var scopes = ['identify', 'email', 'guilds', 'guilds.join']; +var scopes = ['identify', 'guilds', 'guilds.join']; var prompt = 'consent' passport.use(new DiscordStrategy({ clientID: '934087523649609768', @@ -138,6 +139,6 @@ app.use((req, res, next) => { } }) app.listen(port, () => { - console.log('Your app is listening on port ' + 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 3469db5..49b9cab 100644 --- a/website/public/css/style.css +++ b/website/public/css/style.css @@ -856,8 +856,8 @@ video { .w-2\/3 { width: 66.666667%; } -.w-1\/3 { - width: 33.333333%; +.w-1\/4 { + width: 25%; } .max-w-7xl { max-width: 80rem; @@ -1966,6 +1966,14 @@ 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/public/img/android-chrome-192x192.png b/website/public/img/android-chrome-192x192.png new file mode 100644 index 0000000..adf8d62 Binary files /dev/null and b/website/public/img/android-chrome-192x192.png differ diff --git a/website/public/img/android-chrome-512x512.png b/website/public/img/android-chrome-512x512.png new file mode 100644 index 0000000..4e120fc Binary files /dev/null and b/website/public/img/android-chrome-512x512.png differ diff --git a/website/public/img/apple-touch-icon.png b/website/public/img/apple-touch-icon.png new file mode 100644 index 0000000..4a226c4 Binary files /dev/null and b/website/public/img/apple-touch-icon.png differ diff --git a/website/public/img/favicon-16x16.png b/website/public/img/favicon-16x16.png new file mode 100644 index 0000000..7b9d53c Binary files /dev/null and b/website/public/img/favicon-16x16.png differ diff --git a/website/public/img/favicon-32x32.png b/website/public/img/favicon-32x32.png new file mode 100644 index 0000000..ec76998 Binary files /dev/null and b/website/public/img/favicon-32x32.png differ diff --git a/website/public/img/favicon.ico b/website/public/img/favicon.ico new file mode 100644 index 0000000..4ad22f5 Binary files /dev/null and b/website/public/img/favicon.ico differ diff --git a/website/public/img/site.webmanifest b/website/public/img/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/website/public/img/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/website/routers/servers/index.js b/website/routers/servers/index.js index dc64b81..d3f2755 100644 --- a/website/routers/servers/index.js +++ b/website/routers/servers/index.js @@ -12,7 +12,7 @@ router.get('/add', function (req, res) { if (req.user) { res.render('server/add', { user: req.user, - botscord: client + serverscord: client }); return } else { @@ -25,7 +25,7 @@ router.post('/add', async function (req, res) { if (req.user) { 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); + return res.redirect(client.config.server.bsl.invite + "&guild_id=" + req.body.serverid); } else { let checkGuild = await servers.findOne({ id: checkServer.id }); if (checkGuild) { @@ -66,7 +66,7 @@ router.post('/add', async function (req, res) { .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] }); + client.client.channels.cache.get(client.client.config.server.channels.info).send({ embeds: [embed] }); server.save(function (err) { if (err) { console.log(err); @@ -85,20 +85,94 @@ router.post('/add', async function (req, res) { }); router.get('/:server', function (req, res) { - servers.findOne({ id: req.params.server }, function (err, bot) { + servers.findOne({ id: req.params.server }, function (err, server) { if (err) { console.log(err); return res.redirect('/'); } - if (!bot) { - req.session.error = "No bot found"; + if (!server) { + req.session.error = "No server found"; return res.redirect('/'); } res.render('server/index', { user: req.user, - server: bot, - serverr: global.client.guilds.cache.get(bot.id) + server: server, + serverr: global.client.guilds.cache.get(server.id) }); }) }) + +router.get('/:server/edit', function (req, res) { + if(!req.user){ + req.session.backURL = req.originalUrl; + res.redirect('/auth'); + } + servers.findOne({ id: req.params.server }, function (err, server) { + if (err) { + console.log(err); + return res.redirect('/'); + } + if (!server) { + req.session.error = "No server found"; + return res.redirect('/'); + } + var serverr = global.client.guilds.cache.get(server.id) + if (serverr.members.cache.get(req.user.id)) { + if (serverr.members.cache.get(req.user.id).permissions.has('ADMINISTRATOR')) { + res.render('server/edit', { + user: req.user, + server: server, + serverr: serverr + }); + } else { + req.session.error = "You don't have permission to edit this server"; + return res.redirect('/'); + } + } else { + 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){ + req.session.backURL = req.originalUrl; + res.redirect('/auth'); + } + servers.findOne({ id: req.params.server }, function (err, server) { + if (err) { + console.log(err); + return res.redirect('/'); + } + if (!server) { + req.session.error = "No server found"; + return res.redirect('/'); + } + var serverr = global.client.guilds.cache.get(server.id) + if (serverr.members.cache.get(req.user.id)) { + if (serverr.members.cache.get(req.user.id).permissions.has('ADMINISTRATOR')) { + server.description = req.body.server_short; + server.long_description = req.body.server_description; + server.tags = req.body.tags; + server.save(function (err) { + if (err) { + console.log(err); + req.session.error = "Something went wrong"; + res.redirect('/'); + } else { + req.session.message = "Server edited"; + res.redirect('/'); + } + }); + } else { + req.session.error = "You don't have permission to edit this server"; + return res.redirect('/'); + } + } else { + req.session.error = "You don't have permission to edit this server"; + return res.redirect('/'); + } + }) +}) module.exports = router; \ No newline at end of file diff --git a/website/views/includes/footer.ejs b/website/views/includes/footer.ejs index 90ec201..7b2f17b 100644 --- a/website/views/includes/footer.ejs +++ b/website/views/includes/footer.ejs @@ -33,21 +33,4 @@ class="text-blue-400 hover:text-white">Corwin.
- - - - \ No newline at end of file + \ No newline at end of file diff --git a/website/views/includes/header.ejs b/website/views/includes/header.ejs index 7c27e9c..8c41a8e 100644 --- a/website/views/includes/header.ejs +++ b/website/views/includes/header.ejs @@ -14,6 +14,9 @@ + + + diff --git a/website/views/server/edit.ejs b/website/views/server/edit.ejs new file mode 100644 index 0000000..3dad2d8 --- /dev/null +++ b/website/views/server/edit.ejs @@ -0,0 +1,44 @@ +<%- include("../includes/header.ejs", {title: "Edit " + server.name}) %> + +