diff --git a/bsl/index.js b/bsl/index.js
index f4a23ee..133ed76 100644
--- a/bsl/index.js
+++ b/bsl/index.js
@@ -1,3 +1,5 @@
+const { SlashCommandBuilder, Routes, EmbedBuilder, ActivityType } = require('discord.js');
+
const client = require('../index.js').bsl;
const servers = require('../models/server');
const bots = require('../models/bot');
@@ -8,7 +10,9 @@ const ms = require("parse-ms-2");
// Set intents
client.on('ready', async () => {
const bot = await bots.find({ verified: true });
- client.user.setPresence({ activities: [{ name: 'botscord.xyz | ' + bot.length + ' bots' }] });
+ client.user.setPresence({ activities: [{ name: 'botscord.xyz | ' + bot.length + ' bots' }] });
+ client.user.setActivity('botscord.xyz | ' + bot.length + ' bots', { type: ActivityType.Watching });
+
console.log(bsl, 'Bot is ready!');
// Log server count
setTimeout(() => {
@@ -16,7 +20,6 @@ client.on('ready', async () => {
`${client.guilds.cache.size} servers`);
}, 1000);
});
-const { SlashCommandBuilder, Routes, EmbedBuilder } = require('discord.js');
const { REST } = require('@discordjs/rest');
const commands = [
new SlashCommandBuilder().setName('ping').setDescription('Replies with pong!'),
diff --git a/index.js b/index.js
index e7e80d1..5d0f5c7 100644
--- a/index.js
+++ b/index.js
@@ -20,7 +20,7 @@ const client = new Client({
GatewayIntentBits.GuildMessages,
GatewayIntentBits.GuildMessageReactions,
GatewayIntentBits.GuildMessageTyping,
- GatewayIntentBits.DirectMessages,
+ GatewayIntentBits.DirectMessages
]
});
diff --git a/models/bot.js b/models/bot.js
index 5e6de12..ea124b4 100644
--- a/models/bot.js
+++ b/models/bot.js
@@ -14,6 +14,10 @@ let hm = new mongoose.Schema({
users: String,
votes: { type: Number, default: 0 },
token: String,
+ country: Object,
+ analytics: Object,
+ analytics_visitors: Number,
+ analytics_invites: Number,
});
module.exports = mongoose.model("bots", hm);
\ No newline at end of file
diff --git a/package.json b/package.json
index abcb100..e77636c 100644
--- a/package.json
+++ b/package.json
@@ -36,6 +36,8 @@
"express": "^4.18.1",
"express-rate-limit": "^6.5.1",
"express-session": "^1.17.3",
+ "geoip-lite": "^1.4.6",
+ "ipware": "^2.0.0",
"memorystore": "^1.6.7",
"mongoose": "^6.5.0",
"parse-ms-2": "^1.0.0",
diff --git a/website/bot/index.js b/website/bot/index.js
index 91e5c2e..a59455d 100644
--- a/website/bot/index.js
+++ b/website/bot/index.js
@@ -79,28 +79,27 @@ client.on('interactionCreate', async interaction => {
}
});
client.on("guildMemberAdd", async (member) => {
- let guild = client.guilds.cache.get(config.discord.id);
+ console.log(colors.green("Website: "), `${member.user.tag} has joined ${member.guild.name}`);
+ let guild = client.guilds.cache.get(global.config.discord.id);
if (member.user.bot) {
try {
- guild.member(member.id).roles.add(config.server.roles.botlist.bot);
- client.channels.cache.get(config.server.channels.new).send(`${member.user.tag} has joined the server!`);
+ guild.members.cache.get(member.id).roles.add(global.config.discord.roles.bot);
+ client.channels.cache.get(global.config.bot.channels.welcome).send(`${member.user.tag} has joined the server!`);
} catch (error) {
}
} else {
try {
- guild.member(member.id).roles.add(config.server.roles.botlist.user);
- client.channels.cache.get(config.server.channels.new).send(`${member.user.tag} has joined the server!`);
+ guild.members.cache.get(member.id).roles.add(global.config.discord.roles.user);
+ client.channels.cache.get(global.config.bot.channels.welcome).send(`${member.user.tag} has joined the server!`);
} catch (error) {
-
+ console.log(error)
}
}
});
var cooldown = [];
client.on("messageCreate", async (message) => {
- console.log(cooldown
- )
if (message.author.bot) return;
if (message.channel.type === "dm") return;
if (cooldown.some(code => code.id === message.author.id)){
diff --git a/website/public/css/style.css b/website/public/css/style.css
index c767a31..df03d43 100644
--- a/website/public/css/style.css
+++ b/website/public/css/style.css
@@ -616,6 +616,9 @@ video {
.col-auto {
grid-column: auto;
}
+.col-span-4 {
+ grid-column: span 4 / span 4;
+}
.float-right {
float: right;
}
@@ -751,6 +754,9 @@ video {
.ml-36 {
margin-left: 9rem;
}
+.mb-1 {
+ margin-bottom: 0.25rem;
+}
.block {
display: block;
}
@@ -819,6 +825,11 @@ video {
.h-3 {
height: 0.75rem;
}
+.max-h-fit {
+ max-height: -webkit-fit-content;
+ max-height: -moz-fit-content;
+ max-height: fit-content;
+}
.min-h-screen {
min-height: 100vh;
}
@@ -1015,6 +1026,10 @@ video {
-moz-appearance: none;
appearance: none;
}
+.columns-4 {
+ -moz-columns: 4;
+ columns: 4;
+}
.grid-flow-col {
grid-auto-flow: column;
}
@@ -1039,6 +1054,9 @@ video {
.grid-cols-4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
+.grid-rows-4 {
+ grid-template-rows: repeat(4, minmax(0, 1fr));
+}
.flex-row {
flex-direction: row;
}
@@ -1093,6 +1111,9 @@ video {
.gap-11 {
gap: 2.75rem;
}
+.gap-10 {
+ gap: 2.5rem;
+}
.gap-x-0 {
-moz-column-gap: 0px;
column-gap: 0px;
@@ -2161,6 +2182,15 @@ body {
@media (min-width: 1024px) {
+ .lg\:m-4 {
+ margin: 1rem;
+ }
+
+ .lg\:mx-14 {
+ margin-left: 3.5rem;
+ margin-right: 3.5rem;
+ }
+
.lg\:mt-0 {
margin-top: 0px;
}
@@ -2193,6 +2223,14 @@ body {
width: auto;
}
+ .lg\:w-1\/4 {
+ width: 25%;
+ }
+
+ .lg\:w-2\/3 {
+ width: 66.666667%;
+ }
+
.lg\:flex-grow {
flex-grow: 1;
}
@@ -2204,6 +2242,10 @@ body {
.lg\:items-center {
align-items: center;
}
+
+ .lg\:p-10 {
+ padding: 2.5rem;
+ }
}
@media (min-width: 1280px) {
diff --git a/website/routers/auth/index.js b/website/routers/auth/index.js
index e81baec..02c62db 100644
--- a/website/routers/auth/index.js
+++ b/website/routers/auth/index.js
@@ -23,17 +23,23 @@ router.get('/callback', passport.authenticate('discord', {
keepSessionInfo: true
}), function (req, res) {
try {
- request({
- url: `https://discordapp.com/api/v8/guilds/${config.server.id}/members/${req.user.id}`,
+ var lol = request({
+ url: `https://discord.com/api/v10/guilds/${global.config.discord.id}/members/${req.user.id}`,
method: "PUT",
json: {
access_token: req.user.accessToken
},
headers: {
- "Authorization": `Bot ${client.token}`
+ "Authorization": `Bot ${global.bsl.token}`,
+ 'Content-Type': 'application/json',
}
+ }, function (error, response, body){
+ console.log(error)
+ console.log(body)
});
- } catch { };
+ } catch(e) {
+ console.log(e);
+ };
const embed = new client.embed()
.setTitle('User logged in')
.setDescription(`${req.user.username}#${req.user.discriminator} logged in\nID: ${req.user.id}`)
diff --git a/website/routers/bot/index.js b/website/routers/bot/index.js
index 5287144..5c0c545 100644
--- a/website/routers/bot/index.js
+++ b/website/routers/bot/index.js
@@ -3,6 +3,9 @@ var express = require('express'),
var bots = require('../../../models/bot');
var votes = require('../../../models/votes');
const client = require('../../index');
+var getIP = require('ipware')().get_ip;
+var geoip = require('geoip-lite');
+
function makeid(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
@@ -78,6 +81,36 @@ router.get('/:botID', async function (req, res) {
req.session.error = "No bot found";
return res.redirect('/');
}
+ let referresURL = String(req.headers.referer).replace("undefined", "Unkown").split('.').join(',');
+ await bots.updateOne({
+ botID: req.params.botID
+ }, {
+ $inc: {
+ analytics_visitors: 1
+ }
+ })
+
+ var ipInfo = getIP(req);
+ var ip = ipInfo.clientIp;
+ var geo = geoip.lookup(ip);
+
+ if (geo) {
+ let CountryCode = geo.country || "TR"
+ await bots.updateOne({
+ botID: req.params.botID
+ }, {
+ $inc: {
+ [`country.${CountryCode}`]: 1
+ }
+ })
+ }
+ await bots.updateOne({
+ botID: req.params.botID
+ }, {
+ $inc: {
+ [`analytics.${referresURL}`]: 1
+ }
+ })
let coowner = new Array()
await bot.owners.forEach(async function (a) {
try {
@@ -131,6 +164,30 @@ router.get('/:botID/settings', async function (req, res) {
}
});
+router.get('/:botID/analytics', 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/analytics', {
+ bot: bot,
+ user: req.user,
+ bota: await global.bsl.users.fetch(bot.id)
+ });
+
+ });
+ }
+});
+
router.post('/:botID/settings', 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 bcf2fdb..b6a7dff 100644
--- a/website/routers/servers/index.js
+++ b/website/routers/servers/index.js
@@ -131,7 +131,7 @@ router.get('/:server', function (req, res) {
res.render('server/index', {
user: req.user,
server: server,
- serverr: global.client.guilds.cache.get(server.id)
+ serverr: global.bsl.guilds.cache.get(server.id)
});
})
})
diff --git a/website/views/bot/analytics.ejs b/website/views/bot/analytics.ejs
new file mode 100644
index 0000000..c7e1def
--- /dev/null
+++ b/website/views/bot/analytics.ejs
@@ -0,0 +1,104 @@
+<%- include('../includes/header.ejs', {title: 'Analytics' + bot.name}) %>
+
+
The domain names of the sites that most redirect to your bot's page.
+| Referring Url | +Total referrers | +
|---|---|
| <%= b.split(",").join(".") %> | +<%= bot.analytics[b] %> | +
These are the countries that enter your bot's page.
+| Country | +Total viewers | +
|---|---|
<%= b %> |
+ <%= bot.country[b] %> | +