added full api and more
This commit is contained in:
1 parent
47dfdbd344
commit
c83c27a8ac
23 files changed
+570
-73
No files matched your search
@@ -1 +1,3 @@
|
||||
node_modules
|
||||
.VSCodeCounter
|
||||
.vscode
|
||||
+38
-6
@@ -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!');
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -13,6 +13,7 @@ let hm = new mongoose.Schema({
|
||||
servers: String,
|
||||
users: String,
|
||||
votes: Number,
|
||||
token: String,
|
||||
});
|
||||
|
||||
module.exports = mongoose.model("bots", hm);
|
||||
@@ -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);
|
||||
@@ -3,6 +3,7 @@ let model = new mongoose.Schema({
|
||||
user: String,
|
||||
date: Date,
|
||||
bot: String,
|
||||
server: String
|
||||
});
|
||||
|
||||
module.exports = mongoose.model("votes", model);
|
||||
Generated
+11
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
+1
-1
@@ -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"],
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 706 KiB |
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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('/');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
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) {
|
||||
@@ -135,7 +137,7 @@ router.get('/:server/edit', function (req, res) {
|
||||
})
|
||||
})
|
||||
|
||||
router.post('/:server/edit', async function (req, res) {
|
||||
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);
|
||||
@@ -175,4 +178,111 @@ router.post('/:server/edit', async function (req, res) {
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
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;
|
||||
@@ -0,0 +1,33 @@
|
||||
<%- include("../includes/header.ejs", {title: "Edit " + bot.name}) %>
|
||||
<!-- create form -->
|
||||
<div class="container-sm p-10">
|
||||
<form method="post" action="">
|
||||
<div class="relative z-0 mb-6 w-full group">
|
||||
<textarea type="text" name="bot_description" id="bot_name" 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 rows="5"><%= bot.long_description %></textarea>
|
||||
<label for="bot_name" 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">Bot description </label>
|
||||
</div>
|
||||
<div class="relative z-0 mb-6 w-full group">
|
||||
<input type="text" name="bot_short" id="floating_last_name" 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 value="<%= bot.description %>" />
|
||||
<label for="bot_name" 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">Short
|
||||
Description (Will be show on home page)</label>
|
||||
</div><br>
|
||||
<h1 class="text-xl text-white">This token can be used to access your bot via our api</h1>
|
||||
<a href="/docs/api" class="text-sm text-white hover:text-blue-600 underline ">
|
||||
<h1 class="text-sm text-white hover:text-blue-600">Access api docs</h1>
|
||||
|
||||
</a>
|
||||
<div class="relative z-0 mb-6 w-full group">
|
||||
<input type="text" id="token" 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 value="<%= bot.token %>" onclick="copy()"/>
|
||||
</div>
|
||||
<script>
|
||||
function copy() {
|
||||
var copyText = document.getElementById("token");
|
||||
copyText.select();
|
||||
copyText.setSelectionRange(0, 99999);
|
||||
navigator.clipboard.writeText(copyText.value);
|
||||
alert("Copied your token");
|
||||
}
|
||||
</script>
|
||||
<button type="submit" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">Update</button>
|
||||
</form>
|
||||
</div>
|
||||
@@ -14,12 +14,12 @@
|
||||
Invite</a>
|
||||
<% if(user) {
|
||||
bot.owners.forEach(a=>{
|
||||
if(a.id == user.id) {
|
||||
if(a == user.id) {
|
||||
%>
|
||||
<div class="h6 mt-4">
|
||||
<i class="fa fa-user-crown"></i>Owner Options
|
||||
</div>
|
||||
<a href="/bot/<%= bot.id %>/edit" class="button float-right"><i class="fa fa-edit"></i>
|
||||
<a href="/bot/<%= bot.id %>/settings" class="button float-right"><i class="fa fa-edit"></i>
|
||||
Edit</a>
|
||||
<%
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
@@ -17,6 +17,7 @@
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/img/favicon-16x16.png">
|
||||
<link rel="manifest" href="/img/site.webmanifest">
|
||||
<!-- meta -->
|
||||
<meta name="description"
|
||||
content="BotsCord is a Discord bot that allows you to create your own Discord bot and have it run on your server.">
|
||||
@@ -31,14 +32,19 @@
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="http://botscord.xyz" />
|
||||
<meta property="og:image" content="http://botscord.xyz/img/logo.png" />
|
||||
<meta property="og:description"
|
||||
content="Botscord is a place where you can promote and vote for your favorite bot/server!" />
|
||||
<meta property="og:description" content="Botscord is a place where you can promote and vote for your favorite bot/server!" />
|
||||
<meta name="theme-color" content="#FF0000">
|
||||
<meta name="author" content="BotsCord">
|
||||
<meta name="robots" content="index, follow">
|
||||
|
||||
</head>
|
||||
|
||||
<body class="bg-primary-color">
|
||||
<script>
|
||||
console.log("%cBotsCord", "color: #FF0000; font-size: 50px; font-weight: bold;");
|
||||
console.log("%cBotsCord is a Website that allows you to advertise your own Discord bot and have your users vote for it!.", "color: #FFFFF; font-size: 20px; font-weight: bold;");
|
||||
console.log("%cDont paste anything in here..", "color: #FF0000; font-size: 10px; font-weight: bold;");
|
||||
</script>
|
||||
<div class="p-2 pl-5 pr-5 bg-blue-color">
|
||||
<!-- navbar in tailwind with login buttons -->
|
||||
<nav class="flex flex-wrap p-6 bg-blue-color">
|
||||
|
||||
+54
-39
@@ -3,7 +3,7 @@
|
||||
<div class="container-sm mx-auto px-3 mb-5 mt-1 h-fit p-1">
|
||||
<div class="mb-3 mx-auto h-fit">
|
||||
<span style="float: right; margin-right: 10%;" class="logo">
|
||||
<img draggable="false" title="botscord.site" src="/img/logo.png" width="320" alt="Discord Bots | Discord Bot List">
|
||||
<img draggable="false" title="botscord.site" src="/img/logo.webp" width="320" alt="Discord Bots | Discord Bot List">
|
||||
</span>
|
||||
<br><br>
|
||||
<h1 class="text-xl" style="font-weight:800;color:#fff">BotsCord</h1>
|
||||
@@ -52,10 +52,11 @@
|
||||
<div 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) { %>
|
||||
<div class="transition-shadow ease-in-out duration-300 hover:shadow-blue-900 shadow-2xl rounded-lg max-w-sm bg-blue-color ">
|
||||
<img class="w-full rounded-full" src="https://cdn.discordapp.com/avatars/860390761307439114/2845a42b0c7868c3db29ea1996e84320.webp" alt="<%= bot.name %>">
|
||||
<div class="transition-shadow ease-in-out duration-300 hover:shadow-blue-900 shadow-2xl rounded-lg max-w-sm bg-blue-color " onclick="location.href='/bot/<%=bot.id%> ';" style="cursor: pointer;">
|
||||
<img class="w-full rounded-full" src="<%= bot.icon %>" onerror="this.src='/img/logo.webp'" alt="<%= bot.name %>">
|
||||
<div class="px-6 text-white text-base">
|
||||
<p><i class="fa-solid fa-check-to-slot"></i>: <%= bot.votes || 0 %> <%if(bot.servers) { %><i class="fa fa-server"></i>: <%= bot.servers %><% } %></p>
|
||||
<p><i class="fa-solid fa-check-to-slot"></i>: <%= bot.votes || 0 %> <%if(bot.servers) { %><i class="fa fa-server"></i>: <%= bot.servers %><% } %>
|
||||
</p>
|
||||
</div>
|
||||
<div class="px-6 py-4">
|
||||
<div class="font-bold text-xl mb-2 text-white">
|
||||
@@ -65,14 +66,6 @@
|
||||
<%= bot.description %>
|
||||
</p>
|
||||
</div>
|
||||
<div class="px-6 pt-4 pb-2">
|
||||
<a href="/bot/<%= bot.id %>" class="inline-block bg-blue-700 rounded-full px-3 py-1 text-sm font-semibold text-white mr-2 mb-2">
|
||||
<i class="fa fa-eye" aria-hidden="true"></i> View
|
||||
</a>
|
||||
<a href="/bot/<%= bot.id %>/invite" class="inline-block bg-blue-700 rounded-full px-3 py-1 text-sm font-semibold text-white mr-2 mb-2">
|
||||
<i class="fa fa-link" aria-hidden="true"></i> Invite
|
||||
</a>
|
||||
</div>
|
||||
<% if(bot.tags) {%>
|
||||
<div class="px-6 pt-4 pb-2">
|
||||
<% bot.tags.forEach(tag=>{ %>
|
||||
@@ -103,10 +96,11 @@
|
||||
<div 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) { %>
|
||||
<div class="transition-shadow ease-in-out duration-300 hover:shadow-blue-900 shadow-2xl rounded-lg max-w-sm bg-blue-color ">
|
||||
<img class="w-full rounded-full" src="https://cdn.discordapp.com/avatars/860390761307439114/2845a42b0c7868c3db29ea1996e84320.webp" alt="<%= bot.name %>">
|
||||
<div class="transition-shadow ease-in-out duration-300 hover:shadow-blue-900 shadow-2xl rounded-lg max-w-sm bg-blue-color " onclick="location.href='/bot/<%=bot.id%> ';" style="cursor: pointer;">
|
||||
<img class="w-full rounded-full" src="<%= bot.icon %>" onerror="this.src='/img/logo.webp'" alt="<%= bot.name %>">
|
||||
<div class="px-6 text-white text-base">
|
||||
<p><i class="fa-solid fa-check-to-slot"></i>: <%= bot.votes || 0 %> <%if(bot.servers) { %><i class="fa fa-server"></i>: <%= bot.servers %><% } %></p>
|
||||
<p><i class="fa-solid fa-check-to-slot"></i>: <%= bot.votes || 0 %> <%if(bot.servers) { %><i class="fa fa-server"></i>: <%= bot.servers %><% } %>
|
||||
</p>
|
||||
</div>
|
||||
<div class="px-6 py-4">
|
||||
<div class="font-bold text-xl mb-2 text-white">
|
||||
@@ -116,14 +110,6 @@
|
||||
<%= bot.description %>
|
||||
</p>
|
||||
</div>
|
||||
<div class="px-6 pt-4 pb-2">
|
||||
<a href="/bot/<%= bot.id %>" class="inline-block bg-blue-700 rounded-full px-3 py-1 text-sm font-semibold text-white mr-2 mb-2">
|
||||
<i class="fa fa-eye" aria-hidden="true"></i> View
|
||||
</a>
|
||||
<a href="/bot/<%= bot.id %>/invite" class="inline-block bg-blue-700 rounded-full px-3 py-1 text-sm font-semibold text-white mr-2 mb-2">
|
||||
<i class="fa fa-link" aria-hidden="true"></i> Invite
|
||||
</a>
|
||||
</div>
|
||||
<% if(bot.tags) {%>
|
||||
<div class="px-6 pt-4 pb-2">
|
||||
<% bot.tags.forEach(tag=>{ %>
|
||||
@@ -153,10 +139,10 @@
|
||||
<div 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) { %>
|
||||
<div class="transition-shadow ease-in-out duration-300 hover:shadow-blue-900 shadow-2xl rounded-lg max-w-sm bg-blue-color ">
|
||||
<img class="w-full rounded-full" src="https://cdn.discordapp.com/avatars/860390761307439114/2845a42b0c7868c3db29ea1996e84320.webp" alt="<%= bot.name %>">
|
||||
<div class="transition-shadow ease-in-out duration-300 hover:shadow-blue-900 shadow-2xl rounded-lg max-w-sm bg-blue-color " onclick="location.href='/server/<%=bot.id%> ';" style="cursor: pointer;">
|
||||
<img class="w-full rounded-full" src="<%= bot.icon %>" onerror="this.src='/img/logo.webp'" alt="<%= bot.name %>">
|
||||
<div class="px-6 text-white text-base">
|
||||
<p><i class="fa-solid fa-check-to-slot"></i>: <%= bot.votes || 0 %> <%if(bot.members) { %><i class="fa fa-user"></i>: <%= bot.members %><% } %></p>
|
||||
<p><i class="fa-solid fa-check-to-slot"></i>: <%= bot.votes || 0 %> <i class="fa fa-user"></i>: <%= global.bsl.guilds.cache.get(bot.id).memberCount.toLocaleString().replace(',', '.' ) %>
|
||||
</p>
|
||||
</div>
|
||||
<div class="px-6 py-4">
|
||||
@@ -188,6 +174,44 @@
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bumpservers">
|
||||
<div class="mx-auto text-center">
|
||||
<br>
|
||||
<h2 class="text-xl text-white text-center"><i class="fa fa-bomb" aria-hidden="true"></i> Bumped servers
|
||||
</h2>
|
||||
<p class="content text-white text-center" style="opacity:.6">Last bumped servers!</p>
|
||||
</div>
|
||||
<div 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">
|
||||
<% servers.sort((a, b) => b.bump - a.bump).slice(0, 5).map(bot => {
|
||||
if(!bot) return; %>
|
||||
<div class="transition-shadow ease-in-out duration-300 hover:shadow-blue-900 shadow-2xl rounded-lg max-w-sm bg-blue-color " onclick="location.href='/server/<%=bot.id%> ';" style="cursor: pointer;">
|
||||
<img class="w-full rounded-full" src="<%= bot.icon %> " onerror="this.src='/img/logo.webp'" alt="<%= bot.name %>">
|
||||
<% if (bot.votes){ %>
|
||||
<div class="px-6 text-white text-base">
|
||||
<p><i class="fa-solid fa-check-to-slot"></i>: <%= bot.votes || 0 %> <i class="fa fa-user"></i>: <%= global.bsl.guilds.cache.get(bot.id).memberCount.toLocaleString().replace(',', '.' ) %><span class="float-right"><i class=" fa fa-bomb"></i> <%=bot.bump %></span>
|
||||
</p>
|
||||
</div>
|
||||
<% } %>
|
||||
<div class="px-6 py-4">
|
||||
<div class="font-bold text-xl mb-2 text-white">
|
||||
<%= bot.name %>
|
||||
</div>
|
||||
<p class="text-white text-base">
|
||||
<%= bot.description %>
|
||||
</p>
|
||||
</div>
|
||||
<% if(bot.tags) {%>
|
||||
<div class="px-6 pt-4 pb-2">
|
||||
<% bot.tags.forEach(tag=>{ %>
|
||||
<a href="/tag/<%= tag %>" class="inline-block bg-button-primary rounded-full px-3 py-1 text-sm font-semibold text-white mr-2 mb-2">#<%= tag %>
|
||||
</a>
|
||||
<% }) %>
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
<% }) %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="randomservers">
|
||||
<% var nbots=servers
|
||||
nbots.forEach((val, key) => {
|
||||
@@ -205,12 +229,11 @@
|
||||
<div 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) { %>
|
||||
<div class="transition-shadow ease-in-out duration-300 hover:shadow-blue-900 shadow-2xl rounded-lg max-w-sm bg-blue-color ">
|
||||
<img class="w-full rounded-full" src="<% bot.icon %> " onerror="this.src='/img/logo.png'" alt="<%= bot.name %>">
|
||||
<% if (bot.votes || bot.members){ %>
|
||||
<div class="transition-shadow ease-in-out duration-300 hover:shadow-blue-900 shadow-2xl rounded-lg max-w-sm bg-blue-color " onclick="location.href='/server/<%=bot.id%> ';" style="cursor: pointer;">
|
||||
<img class="w-full rounded-full" src="<%= bot.icon %> " onerror="this.src='/img/logo.webp'" alt="<%= bot.name %>">
|
||||
<% if (bot.votes){ %>
|
||||
<div class="px-6 text-white text-base">
|
||||
<p><i class="fa-solid fa-check-to-slot"></i>: <%= bot.votes %> <i class="fa fa-user"></i>: <%= bot.members %>
|
||||
</p>
|
||||
<p><i class="fa-solid fa-check-to-slot"></i>: <%= bot.votes || 0 %> <i class="fa fa-user"></i>: <%= global.bsl.guilds.cache.get(bot.id).memberCount.toLocaleString().replace(',', '.' ) %></p>
|
||||
</div>
|
||||
<% } %>
|
||||
<div class="px-6 py-4">
|
||||
@@ -221,14 +244,6 @@
|
||||
<%= bot.description %>
|
||||
</p>
|
||||
</div>
|
||||
<div class="px-6 pt-4 pb-2">
|
||||
<a href="/server/<%= bot.id %>" class="inline-block bg-blue-700 rounded-full px-3 py-1 text-sm font-semibold text-white mr-2 mb-2">
|
||||
<i class="fa fa-eye" aria-hidden="true"></i> View
|
||||
</a>
|
||||
<a href="/server<%= bot.id %>/invite" class="inline-block bg-blue-700 rounded-full px-3 py-1 text-sm font-semibold text-white mr-2 mb-2" data-toggle="tooltip" title="Join the server" data-placement="top">
|
||||
<i class="fa fa-link" aria-hidden="true"></i> Join
|
||||
</a>
|
||||
</div>
|
||||
<% if(bot.tags) {%>
|
||||
<div class="px-6 pt-4 pb-2">
|
||||
<% bot.tags.forEach(tag=>{ %>
|
||||
|
||||
@@ -12,6 +12,10 @@
|
||||
<label for="server_name" 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">Short
|
||||
Description (Will be show on home page)</label>
|
||||
</div>
|
||||
<div class="relative z-0 mb-6 w-full group">
|
||||
<input type="text" name="server_webhook" id="floating_last_name" 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=" " value="<%= server.webhook %>" />
|
||||
<label for="server_webhook" 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">Discord WebHook to recieve votes.</label>
|
||||
</div>
|
||||
<div class="relative z-0 mb-6 w-full group">
|
||||
<select multiple name="tags" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" required>
|
||||
<option value="development">Development</option>
|
||||
@@ -29,7 +33,20 @@
|
||||
<option value="nsfw">NSFW</option>
|
||||
<option value="challange">Challange</option>
|
||||
</select>
|
||||
</div><br>
|
||||
<!--<h1 class="text-xl text-white">This token can be used to access your server via our api</h1>
|
||||
<div class="relative z-0 mb-6 w-full group">
|
||||
<input type="text" name="token" id="token" 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 value="<%= server.token %>" onclick="copy()" />
|
||||
<label for="token" 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">Token</label>
|
||||
</div>
|
||||
<script>
|
||||
function copy() {
|
||||
var copyText = document.getElementById("token");
|
||||
copyText.select();
|
||||
copyText.setSelectionRange(0, 99999);
|
||||
navigator.clipboard.writeText(copyText.value);
|
||||
}
|
||||
</script>-->
|
||||
<button type="submit" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">Update</button>
|
||||
</form>
|
||||
</div>
|
||||
@@ -5,21 +5,22 @@
|
||||
<pre><br><%= server.long_description %></pre>
|
||||
</div>
|
||||
<div class="bg-blue-color w-1/4 p-10 text-white h-full m-4 ">
|
||||
<% console.log(serverr) %>
|
||||
<img class="w-full rounded-full" src="<%= serverr.icon %>" alt="<%= server.name %>" onerror="this.src='/img/logo.png'">
|
||||
<h1 class="text-3xl">
|
||||
<%= server.name %>
|
||||
</h1>
|
||||
<a href="/server/<%= server.id %>/join" class="button float-right"><i class="fa fa-link"></i>
|
||||
<a href="/server/<%= server.id %>/vote" class="button float-left inline-block bg-button-primary rounded-full px-3 py-1 text-sm font-semibold text-white mr-2 mb-2"><i class="fa fa-link"></i>
|
||||
Vote</a>
|
||||
<a href="/server/<%= server.id %>/join" class="button float-right inline-block bg-button-primary rounded-full px-3 py-1 text-sm font-semibold text-white mr-2 mb-2"><i class="fa fa-link"></i>
|
||||
Join</a>
|
||||
<br>
|
||||
<% if(user) { if(serverr.members.cache.get(user.id)) {
|
||||
if(serverr.members.cache.get(user.id).permissions.has('ADMINISTRATOR')) { %>
|
||||
<div class="h6 mt-4">
|
||||
<i class="fa user-crown"></i>Owner Options
|
||||
</div>
|
||||
<a href="/server/<%= server.id %>/edit" class="mt-1">
|
||||
<div class="box-2-p"><i class="mt-1 fa fa-pencil"></i></div>
|
||||
<p class="box-2">Edit Server</p>
|
||||
<a href="/server/<%= server.id %>/settings" class="mt-1">
|
||||
<div class="box-2-p"><i class="mt-1 fa fa-pencil"></i><p class="box-2">Edit Server</p></div>
|
||||
</a>
|
||||
<% } } } %>
|
||||
<h6 class="text-xl mt-4">
|
||||
@@ -27,7 +28,7 @@
|
||||
</h6>
|
||||
<div class="mt-1">
|
||||
<div class="box-2-p"><i class="mt-1 fa fa-users"></i></div>
|
||||
<p class="box-2">Votes: <%= bot.votes || 0 %>
|
||||
<p class="box-2">Votes: <%= server.votes || 0 %>
|
||||
</p>
|
||||
</div>
|
||||
<div class="mt-1">
|
||||
|
||||
Reference in new issue
Block a user