JaBa/dashboard/dashboard.js

222 lines
6 KiB
JavaScript
Raw Permalink Normal View History

2023-06-26 17:25:17 +05:00
const SoftUI = require("./dashboard-core/theme/dbd-soft-ui"),
2023-06-27 00:56:18 +05:00
DBD = require("./dashboard-core/index"),
settings = require("./settings");
2023-06-26 17:25:17 +05:00
const { PermissionsBitField } = require("discord.js");
2023-06-26 17:25:17 +05:00
2023-10-20 22:47:00 +05:00
const locales = {
"en-US": require("../languages/en-US/dashboard.json"),
"ru-RU": require("../languages/ru-RU/dashboard.json"),
"uk-UA": require("../languages/uk-UA/dashboard.json"),
};
2023-06-26 17:25:17 +05:00
/**
*
2023-11-05 16:03:23 +05:00
* @param {import("../base/Client")} client
2023-06-26 17:25:17 +05:00
*/
module.exports.load = async client => {
const commands = client.commands.map(v => {
return {
commandName: v.command.name,
commandDescription: client.translate(`${v.category.toLowerCase()}/${v.command.name}:DESCRIPTION`),
commandUsage: client.translate(`${v.category.toLowerCase()}/${v.command.name}:USAGE`),
commandAlias: "",
_category: v.category,
2023-06-26 17:25:17 +05:00
};
});
let categories = [];
commands.forEach(c => {
if (!categories.includes(c._category)) categories.push(c._category);
2023-06-26 17:25:17 +05:00
});
categories = categories.map(c => {
return {
category: c,
categoryId: c.toLowerCase(),
subTitle: "",
hideAlias: true,
hideDescription: false,
2023-10-20 22:47:00 +05:00
hideSidebarItem: c === "Owner" || c === "IAT" ? true : false,
2023-06-26 17:25:17 +05:00
list: commands.filter(v => v._category === c),
};
});
const Dashboard = new DBD.Dashboard({
port: client.config.dashboard.port,
client: {
2024-02-14 21:16:13 +05:00
id: client.user.id,
2023-06-26 17:25:17 +05:00
secret: client.config.dashboard.secret,
},
cookiesSecret: client.config.dashboard.secret,
domain: client.config.dashboard.domain,
2023-10-30 22:07:56 +05:00
redirectUri: `${client.config.dashboard.domain}/discord/callback`,
2023-06-26 17:25:17 +05:00
bot: client,
ownerIDs: [client.config.owner.id],
2023-06-26 17:25:17 +05:00
requiredPermissions: PermissionsBitField.Flags.ViewChannel,
invite: {
2024-02-14 21:16:13 +05:00
clientId: client.user.id,
2023-06-26 17:25:17 +05:00
scopes: ["bot", "applications.commands"],
permissions: "8",
2023-10-30 22:07:56 +05:00
redirectUri: `${client.config.dashboard.domain}`,
2023-06-26 17:25:17 +05:00
},
supportServer: {
slash: "/support",
inviteUrl: client.config.support.invite,
},
rateLimits: {
manage: {
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100, // Limit each IP to 100 requests per `window` (here, per 15 minutes)
message: "You are ratelimited!", // Message returned if user should be rate limited, could be also JSON/HTML
store: null, // <Rate Limiter Store> - if null, new MemoryStore()
// supported stores: https://www.npmjs.com/package/express-rate-limit#store
},
guildPage: {
windowMs: 15 * 60 * 1000,
max: 100,
message: "You are ratelimited!",
store: null,
},
settingsUpdatePostAPI: {
windowMs: 15 * 60 * 1000,
max: 100,
message: "You are ratelimited!",
store: null,
},
},
useTheme404: true,
useThemeMaintenance: true,
useUnderMaintenance: false,
underMaintenanceAccessKey: client.config.dashboard.maintanceKey,
underMaintenanceAccessPage: "/get-access",
underMaintenance: {
title: "Under Maintenance",
contentTitle: "This page is under maintenance",
texts: [
"<br>",
"We still want to change for the better for you.",
"Therefore, we are introducing technical updates so that we can allow you to enjoy the quality of our services.",
"<br>",
`Come back to us later or join our <a href="${client.config.support.invite}">Discord Support Server</a>`,
],
},
theme: SoftUI({
customThemeOptions: {
// eslint-disable-next-line no-unused-vars
index: async ({ req, res, config }) => {
const user = req.session?.user;
const username = (user?.discriminator === "0" ? user?.username : user?.tag) || "Guest";
2023-06-26 17:25:17 +05:00
let users = 0;
client.guilds.cache.forEach(g => {
users += g.memberCount;
});
const cards = [
{
title: "Current User",
icon: "single-02",
getValue: username,
},
{
2023-06-27 00:28:41 +05:00
title: "Playing music in this much servers",
2023-06-26 17:25:17 +05:00
icon: "settings-gear-65",
2023-06-27 00:28:41 +05:00
getValue: client.player.nodes.cache.size,
2023-06-26 17:25:17 +05:00
},
{
title: "Users Count",
icon: "favourite-28",
getValue: users,
},
{
title: "Servers Count",
icon: "notification-70",
2023-06-27 00:28:41 +05:00
getValue: `${client.guilds.cache.size - 1} out of 2000`,
2023-06-26 17:25:17 +05:00
progressBar: {
enabled: true,
2023-06-27 00:28:41 +05:00
getProgress: Math.round(((client.guilds.cache.size - 1) / 2000) * 100),
2023-06-26 17:25:17 +05:00
},
},
];
return {
values: [],
graph: {},
cards,
};
},
},
2023-07-10 20:39:00 +05:00
websiteName: `${client.user.username} Dashboard`,
2023-06-26 17:25:17 +05:00
colorScheme: "blue",
supporteMail: "",
icons: {
favicon: client.user.avatarURL(),
noGuildIcon: "https://pnggrid.com/wp-content/uploads/2021/05/Discord-Logo-Circle-1024x1024.png",
sidebar: {
darkUrl: client.user.avatarURL(),
lightUrl: client.user.avatarURL(),
hideName: false,
borderRadius: "1rem",
alignCenter: true,
},
},
index: {
card: {
category: "JaBa Bot",
title: "Simple bot made by <a href=\"https://github.com/JonnyBro\">Jonny_Bro</a>",
description: "JaBa's dashboard",
image: "",
link: {
enabled: false,
2023-10-20 22:47:00 +05:00
url: "https://github.com/JonnyBro",
2023-06-26 17:25:17 +05:00
},
},
graph: {
enabled: false,
lineGraph: true,
title: "Memory Usage",
tag: "Memory (MB)",
max: 100,
},
},
2023-10-30 22:33:43 +05:00
notify: {
2023-06-26 17:25:17 +05:00
errors: {
settingsSave: "Failed to save setttings",
},
success: {
settingsSave: "Successfully saved setttings.",
login: "Successfully logged in.",
logout: "Successfully logged out.",
},
},
preloader: {
image: "",
spinner: true,
text: "Page is loading",
},
commands: categories,
locales: {
2023-10-20 22:47:00 +05:00
enUS: locales["en-US"],
ruRU: locales["ru-RU"],
ukUA: locales["uk-UA"],
2023-06-26 17:25:17 +05:00
},
}),
customPages: [
DBD.customPagesTypes.redirectToUrl("/github", () => {
return "https://github.com/JonnyBro/JaBa";
}),
2023-07-03 20:01:52 +05:00
DBD.customPagesTypes.redirectToUrl("/updates", () => {
return "https://github.com/JonnyBro/JaBa/blob/main/dashboard/docs/updates.md";
}),
2023-06-26 17:25:17 +05:00
],
settings: settings(client),
2023-06-26 17:25:17 +05:00
});
await Dashboard.init().then(() => {
client.logger.ready(`Dashboard launched on port ${client.config.dashboard.port}`);
2023-06-26 17:25:17 +05:00
}).catch(err => {
client.logger.error(`Dashboard failed to initialize:\n${err}`);
2023-06-26 17:25:17 +05:00
});
};