diff --git a/.env.example b/.env.example index 349bdfe..0179419 100644 --- a/.env.example +++ b/.env.example @@ -1,14 +1,21 @@ +@@ -1,23 +0,0 @@ BOT_TOKEN= -MONGO_CONNECTION=mongodb://0.0.0.0:27017 +MONGO_CONNECTION= +# Webhooks [Optional] ERROR_LOGS= JOIN_LEAVE_LOGS= -BOT_SECRET=HtLZgRhB3BCsAurCnaew262TylrJV5-Q -SESSION_PASSWORD=AmaneChanDesu12 +BOT_SECRET= +SESSION_PASSWORD= +# Required for Weather Command (https://weatherstack.com) WEATHERSTACK_KEY= +# Required for image commands (https://strangeapi.fun/docs) +STRANGE_API_KEY= + +# SPOTFIY [Required for Spotify Support] SPOTIFY_CLIENT_ID= -SPOTIFY_CLIENT_SECRET= +SPOTIFY_CLIENT_SECRET= \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..6e03748 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,17 @@ +{ + "env": { + "node": true, + "commonjs": true, + "es2021": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 12 + }, + "plugins": ["jsdoc"], + "rules": { + "no-unused-vars": ["error", { "args": "none" }], + "jsdoc/no-undefined-types": 1, + "no-cond-assign": 0 + } +} diff --git a/.gitbook.yaml b/.gitbook.yaml new file mode 100644 index 0000000..e66b6e8 --- /dev/null +++ b/.gitbook.yaml @@ -0,0 +1,4 @@ +root: ./docs/ +structure: + readme: ../README.md + summary: SUMMARY.md diff --git a/.gitignore b/.gitignore index 24756d5..e9cd46f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules docs +.env.asli # Logs logs diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..43763f0 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,11 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": false, + "printWidth": 120, + "bracketSpacing": true, + "arrowParens": "always", + "endOfLine": "crlf" +} diff --git a/bot.js b/bot.js index 068d126..799a785 100644 --- a/bot.js +++ b/bot.js @@ -1,11 +1,17 @@ require("dotenv").config(); require("module-alias/register"); -const path = require("path"); -const { startupCheck } = require("@utils/botUtils"); -const { BotClient } = require("@src/structures"); +// register extenders +require("@helpers/extenders/Message"); +require("@helpers/extenders/Guild"); +require("@helpers/extenders/GuildChannel"); -global.__appRoot = path.resolve(__dirname); +const { checkForUpdates } = require("@helpers/BotUtils"); +const { initializeMongoose } = require("@src/database/mongoose"); +const { BotClient } = require("@src/structures"); +const { validateConfiguration } = require("@helpers/Validator"); + +validateConfiguration(); // initialize client const client = new BotClient(); @@ -13,21 +19,29 @@ client.loadCommands("src/commands"); client.loadContexts("src/contexts"); client.loadEvents("src/events"); - // find unhandled promise rejections process.on("unhandledRejection", (err) => client.logger.error(`Unhandled exception`, err)); (async () => { - await startupCheck(); + // check for updates + await checkForUpdates(); + + // start the dashboard if (client.config.DASHBOARD.enabled) { client.logger.log("Launching dashboard"); try { const { launch } = require("@root/dashboard/app"); + + // let the dashboard initialize the database await launch(client); } catch (ex) { client.logger.error("Failed to launch dashboard", ex); } + } else { + // initialize the database + await initializeMongoose(); } - await client.initializeMongoose(); + + // start the client await client.login(process.env.BOT_TOKEN); })(); diff --git a/config.js b/config.js index 3c72f03..d60b6b9 100644 --- a/config.js +++ b/config.js @@ -1,110 +1,134 @@ module.exports = { - OWNER_IDS: ["334307216926703616","1010905208391487548"], // Bot owner ID's - PREFIX: "::", // Default prefix for the bot - SUPPORT_SERVER: "https://kiera-bot.serenetia.com", // Your bot support server - PRESENCE: { - ENABLED: true, // Whether or not the bot should update its status - STATUS: "online", // The bot's status [online, idle, dnd, invisible] - TYPE: "LISTENING", // Status type for the bot [PLAYING | LISTENING | WATCHING | COMPETING] - MESSAGE: "/play with {members} members in {servers} servers", // Your bot status message - }, - DASHBOARD: { - enabled: true, // enable or disable dashboard - baseURL: "https://dash-kiera.serenetia.com", // base url - failureURL: "https://dash-kiera.serenetia.com", // failure redirect url - port: "3559", // port to run the bot on - }, - INTERACTIONS: { - SLASH: true, // Should the interactions be enabled - CONTEXT: true, // Should contexts be enabled - GLOBAL: true, // Should the interactions be registered globally - TEST_GUILD_ID: "753500548656791573", // Guild ID where the interactions should be registered. [** Test you commands here first **] //NOT REQUIRED - }, - XP_SYSTEM: { - COOLDOWN: 5, // Cooldown in seconds between messages - DEFAULT_LVL_UP_MSG: "{m}, You just advanced to **Level {l}**", - }, - MISCELLANEOUS: { - DAILY_COINS: 100, // coins to be received by daily command - }, - ECONOMY: { - CURRENCY: "₪", - DAILY_COINS: 1000, // coins to be received by daily command - MIN_BEG_AMOUNT: 1000, // minimum coins to be received when beg command is used - MAX_BEG_AMOUNT: 25000, // maximum coins to be received when beg command is used - }, - SUGGESTIONS: { - ENABLED: true, // Should the suggestion system be enabled - EMOJI: { - UP_VOTE: "⬆️", - DOWN_VOTE: "⬇️", - }, - DEFAULT_EMBED: "#0099ff", - APPROVED_EMBED: "#00ff00", - DENIED_EMBED: "#ff0000", - }, - IMAGE: { - BASE_API: "https://image-api.strangebot.xyz", - }, - MUSIC: { - IDLE_TIME: 60, // Time in seconds before the bot disconnects from the voice channel - MAX_SEARCH_RESULTS: 20, - NODES: [ - { - host: "lavalink.serenetia.com", - port: 443, - password: "amanechan", - secure: true, - version: "v3", - }, - { - host: "lavalink-sg.serenetia.com", - port: 443, - password: "amanechan", - secure: true, - version: "v3", - }, - { - host: "lavalink-sg2.serenetia.com", - port: 443, - password: "amanechan", - secure: true, - version: "v4", - useVersionPath: true, - }, - ], - }, - /* Bot Embed Colors */ + OWNER_IDS: ["334307216926703616","1010905208391487548"], // Bot owner ID's + SUPPORT_SERVER: "https://kiera-bot.serenetia.com", // Your bot support server + PREFIX_COMMANDS: { + ENABLED: true, // Enable/Disable prefix commands + DEFAULT_PREFIX: "kt?", // Default prefix for the bot + }, + INTERACTIONS: { + SLASH: true, // Should the interactions be enabled + CONTEXT: true, // Should contexts be enabled + GLOBAL: true, // Should the interactions be registered globally + TEST_GUILD_ID: "753500548656791573", // Guild ID where the interactions should be registered. [** Test you commands here first **] + }, + EMBED_COLORS: { + BOT_EMBED: "#068ADD", + TRANSPARENT: "#36393F", + SUCCESS: "#00A56A", + ERROR: "#D61A3C", + WARNING: "#F7E919", + }, + CACHE_SIZE: { + GUILDS: 10000, + USERS: 1000000, + MEMBERS: 1000000, + }, + MESSAGES: { + API_ERROR: "Unexpected Backend Error! Try again later or contact support server", + }, + + // PLUGINS + + AUTOMOD: { + ENABLED: false, + LOG_EMBED: "#36393F", + DM_EMBED: "#36393F", + }, + + DASHBOARD: { + enabled: true, // enable or disable dashboard + baseURL: "http://localhost:8080", // base url + failureURL: "http://localhost:8080", // failure redirect url + port: "8080", // port to run the bot on + }, + + ECONOMY: { + ENABLED: false, + CURRENCY: "₪", + DAILY_COINS: 100, // coins to be received by daily command + MIN_BEG_AMOUNT: 100, // minimum coins to be received when beg command is used + MAX_BEG_AMOUNT: 2500, // maximum coins to be received when beg command is used + }, + + MUSIC: { + ENABLED: true, + IDLE_TIME: 60, // Time in seconds before the bot disconnects from an idle voice channel + MAX_SEARCH_RESULTS: 5, + DEFAULT_SOURCE: "YT", // YT = Youtube, YTM = Youtube Music, SC = SoundCloud + // Add any number of lavalink nodes here + // Refer to https://github.com/freyacodes/Lavalink to host your own lavalink server + LAVALINK_NODES: [ + { + host: "103.125.38.143", + port: 3556, + password: "amanechan", + id: "Indonesia Node", + secure: false, + }, + ], + }, + + GIVEAWAYS: { + ENABLED: false, + REACTION: "🎁", + START_EMBED: "#FF468A", + END_EMBED: "#FF468A", + }, + + IMAGE: { + ENABLED: false, + BASE_API: "https://strangeapi.hostz.me/api", + }, + + INVITE: { + ENABLED: false, + }, + + MODERATION: { + ENABLED: false, EMBED_COLORS: { - BOT_EMBED: "#068ADD", - TRANSPARENT: "#36393F", - SUCCESS: "#00A56A", - ERROR: "#D61A3C", - WARNING: "#F7E919", - AUTOMOD: "#36393F", - TICKET_CREATE: "#068ADD", - TICKET_CLOSE: "#068ADD", - TIMEOUT_LOG: "#102027", - UNTIMEOUT_LOG: "#4B636E", - KICK_LOG: "#FF7961", - SOFTBAN_LOG: "#AF4448", - BAN_LOG: "#D32F2F", - VMUTE_LOG: "#102027", - VUNMUTE_LOG: "#4B636E", - DEAFEN_LOG: "#102027", - UNDEAFEN_LOG: "#4B636E", - DISCONNECT_LOG: "RANDOM", - MOVE_LOG: "RANDOM", - GIVEAWAYS: "#FF468A", - UPDATE: "#000000", + TIMEOUT: "#102027", + UNTIMEOUT: "#4B636E", + KICK: "#FF7961", + SOFTBAN: "#AF4448", + BAN: "#D32F2F", + UNBAN: "#00C853", + VMUTE: "#102027", + VUNMUTE: "#4B636E", + DEAFEN: "#102027", + UNDEAFEN: "#4B636E", + DISCONNECT: "RANDOM", + MOVE: "RANDOM", }, - /* Maximum number of keys that can be stored */ - CACHE_SIZE: { - GUILDS: 10000, - USERS: 1000000, - MEMBERS: 1000000, + }, + + PRESENCE: { + ENABLED: true, // Whether or not the bot should update its status + STATUS: "online", // The bot's status [online, idle, dnd, invisible] + TYPE: "LISTENING", // Status type for the bot [PLAYING | LISTENING | WATCHING | COMPETING] + MESSAGE: "/play with {members} members in {servers} servers", // Your bot status message + }, + + STATS: { + ENABLED: false, + XP_COOLDOWN: 5, // Cooldown in seconds between messages + DEFAULT_LVL_UP_MSG: "{member:tag}, You just advanced to **Level {level}**", + }, + + SUGGESTIONS: { + ENABLED: false, // Should the suggestion system be enabled + EMOJI: { + UP_VOTE: "⬆️", + DOWN_VOTE: "⬇️", }, - MESSAGES: { - API_ERROR: "Unexpected Backend Error! Try again later or contact support server", - }, -}; \ No newline at end of file + DEFAULT_EMBED: "#4F545C", + APPROVED_EMBED: "#43B581", + DENIED_EMBED: "#F04747", + }, + + TICKET: { + ENABLED: false, + CREATE_EMBED: "#068ADD", + CLOSE_EMBED: "#068ADD", + }, +}; diff --git a/dashboard/app.js b/dashboard/app.js index 96995a5..c980e0f 100644 --- a/dashboard/app.js +++ b/dashboard/app.js @@ -7,6 +7,8 @@ module.exports.launch = async (client) => { const express = require("express"), session = require("express-session"), + MongoStore = require("connect-mongo"), + mongoose = require("@src/database/mongoose"), path = require("path"), app = express(); @@ -19,6 +21,8 @@ module.exports.launch = async (client) => { client.states = {}; client.config = config; + const db = await mongoose.initializeMongoose(); + /* App configuration */ app .use(express.json()) // For post methods @@ -28,7 +32,23 @@ module.exports.launch = async (client) => { .use(express.static(path.join(__dirname, "/public"))) // Set the css and js folder to ./public .set("views", path.join(__dirname, "/views")) // Set the ejs templates to ./views .set("port", config.DASHBOARD.port) // Set the dashboard port - .use(session({ secret: process.env.SESSION_PASSWORD, resave: false, saveUninitialized: false })) // Set the express session password and configuration + .use( + session({ + secret: process.env.SESSION_PASSWORD, + cookie: { maxAge: 336 * 60 * 60 * 1000 }, + name: "djs_connection_cookie", + resave: true, + saveUninitialized: false, + store: MongoStore.create({ + client: db.getClient(), + dbName: db.name, + collectionName: "sessions", + stringify: false, + autoRemove: "interval", + autoRemoveInterval: 1, + }), + }) + ) // Set the express session password and configuration .use(async function (req, res, next) { req.user = req.session.user; req.client = client; diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-alerts.less b/dashboard/public/build/bootstrap-less/alerts.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-alerts.less rename to dashboard/public/build/bootstrap-less/alerts.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-badges.less b/dashboard/public/build/bootstrap-less/badges.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-badges.less rename to dashboard/public/build/bootstrap-less/badges.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-bootstrap.less b/dashboard/public/build/bootstrap-less/bootstrap.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-bootstrap.less rename to dashboard/public/build/bootstrap-less/bootstrap.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-breadcrumbs.less b/dashboard/public/build/bootstrap-less/breadcrumbs.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-breadcrumbs.less rename to dashboard/public/build/bootstrap-less/breadcrumbs.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-button-groups.less b/dashboard/public/build/bootstrap-less/button-groups.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-button-groups.less rename to dashboard/public/build/bootstrap-less/button-groups.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-buttons.less b/dashboard/public/build/bootstrap-less/buttons.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-buttons.less rename to dashboard/public/build/bootstrap-less/buttons.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-carousel.less b/dashboard/public/build/bootstrap-less/carousel.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-carousel.less rename to dashboard/public/build/bootstrap-less/carousel.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-close.less b/dashboard/public/build/bootstrap-less/close.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-close.less rename to dashboard/public/build/bootstrap-less/close.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-code.less b/dashboard/public/build/bootstrap-less/code.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-code.less rename to dashboard/public/build/bootstrap-less/code.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-component-animations.less b/dashboard/public/build/bootstrap-less/component-animations.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-component-animations.less rename to dashboard/public/build/bootstrap-less/component-animations.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-dropdowns.less b/dashboard/public/build/bootstrap-less/dropdowns.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-dropdowns.less rename to dashboard/public/build/bootstrap-less/dropdowns.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-forms.less b/dashboard/public/build/bootstrap-less/forms.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-forms.less rename to dashboard/public/build/bootstrap-less/forms.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-glyphicons.less b/dashboard/public/build/bootstrap-less/glyphicons.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-glyphicons.less rename to dashboard/public/build/bootstrap-less/glyphicons.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-grid.less b/dashboard/public/build/bootstrap-less/grid.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-grid.less rename to dashboard/public/build/bootstrap-less/grid.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-input-groups.less b/dashboard/public/build/bootstrap-less/input-groups.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-input-groups.less rename to dashboard/public/build/bootstrap-less/input-groups.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-jumbotron.less b/dashboard/public/build/bootstrap-less/jumbotron.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-jumbotron.less rename to dashboard/public/build/bootstrap-less/jumbotron.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-labels.less b/dashboard/public/build/bootstrap-less/labels.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-labels.less rename to dashboard/public/build/bootstrap-less/labels.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-list-group.less b/dashboard/public/build/bootstrap-less/list-group.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-list-group.less rename to dashboard/public/build/bootstrap-less/list-group.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-media.less b/dashboard/public/build/bootstrap-less/media.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-media.less rename to dashboard/public/build/bootstrap-less/media.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-mixins.less b/dashboard/public/build/bootstrap-less/mixins.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-mixins.less rename to dashboard/public/build/bootstrap-less/mixins.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-modals.less b/dashboard/public/build/bootstrap-less/modals.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-modals.less rename to dashboard/public/build/bootstrap-less/modals.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-navbar.less b/dashboard/public/build/bootstrap-less/navbar.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-navbar.less rename to dashboard/public/build/bootstrap-less/navbar.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-navs.less b/dashboard/public/build/bootstrap-less/navs.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-navs.less rename to dashboard/public/build/bootstrap-less/navs.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-normalize.less b/dashboard/public/build/bootstrap-less/normalize.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-normalize.less rename to dashboard/public/build/bootstrap-less/normalize.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-pager.less b/dashboard/public/build/bootstrap-less/pager.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-pager.less rename to dashboard/public/build/bootstrap-less/pager.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-pagination.less b/dashboard/public/build/bootstrap-less/pagination.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-pagination.less rename to dashboard/public/build/bootstrap-less/pagination.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-panels.less b/dashboard/public/build/bootstrap-less/panels.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-panels.less rename to dashboard/public/build/bootstrap-less/panels.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-popovers.less b/dashboard/public/build/bootstrap-less/popovers.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-popovers.less rename to dashboard/public/build/bootstrap-less/popovers.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-print.less b/dashboard/public/build/bootstrap-less/print.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-print.less rename to dashboard/public/build/bootstrap-less/print.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-progress-bars.less b/dashboard/public/build/bootstrap-less/progress-bars.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-progress-bars.less rename to dashboard/public/build/bootstrap-less/progress-bars.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-responsive-embed.less b/dashboard/public/build/bootstrap-less/responsive-embed.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-responsive-embed.less rename to dashboard/public/build/bootstrap-less/responsive-embed.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-responsive-utilities.less b/dashboard/public/build/bootstrap-less/responsive-utilities.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-responsive-utilities.less rename to dashboard/public/build/bootstrap-less/responsive-utilities.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-scaffolding.less b/dashboard/public/build/bootstrap-less/scaffolding.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-scaffolding.less rename to dashboard/public/build/bootstrap-less/scaffolding.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-tables.less b/dashboard/public/build/bootstrap-less/tables.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-tables.less rename to dashboard/public/build/bootstrap-less/tables.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-theme.less b/dashboard/public/build/bootstrap-less/theme.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-theme.less rename to dashboard/public/build/bootstrap-less/theme.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-thumbnails.less b/dashboard/public/build/bootstrap-less/thumbnails.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-thumbnails.less rename to dashboard/public/build/bootstrap-less/thumbnails.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-tooltip.less b/dashboard/public/build/bootstrap-less/tooltip.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-tooltip.less rename to dashboard/public/build/bootstrap-less/tooltip.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-type.less b/dashboard/public/build/bootstrap-less/type.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-type.less rename to dashboard/public/build/bootstrap-less/type.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-utilities.less b/dashboard/public/build/bootstrap-less/utilities.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-utilities.less rename to dashboard/public/build/bootstrap-less/utilities.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722487-variables.less b/dashboard/public/build/bootstrap-less/variables.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722487-variables.less rename to dashboard/public/build/bootstrap-less/variables.less diff --git a/dashboard/public/build/bootstrap-less/.trashed-1657722488-wells.less b/dashboard/public/build/bootstrap-less/wells.less similarity index 100% rename from dashboard/public/build/bootstrap-less/.trashed-1657722488-wells.less rename to dashboard/public/build/bootstrap-less/wells.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717167-_all-skins.less b/dashboard/public/build/less/skins/_all-skins.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717167-_all-skins.less rename to dashboard/public/build/less/skins/_all-skins.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717167-skin-black-light.less b/dashboard/public/build/less/skins/skin-black-light.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717167-skin-black-light.less rename to dashboard/public/build/less/skins/skin-black-light.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717167-skin-black.less b/dashboard/public/build/less/skins/skin-black.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717167-skin-black.less rename to dashboard/public/build/less/skins/skin-black.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717167-skin-blue-light.less b/dashboard/public/build/less/skins/skin-blue-light.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717167-skin-blue-light.less rename to dashboard/public/build/less/skins/skin-blue-light.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717168-skin-blue.less b/dashboard/public/build/less/skins/skin-blue.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717168-skin-blue.less rename to dashboard/public/build/less/skins/skin-blue.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717168-skin-green-light.less b/dashboard/public/build/less/skins/skin-green-light.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717168-skin-green-light.less rename to dashboard/public/build/less/skins/skin-green-light.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717167-skin-green.less b/dashboard/public/build/less/skins/skin-green.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717167-skin-green.less rename to dashboard/public/build/less/skins/skin-green.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717168-skin-purple-light.less b/dashboard/public/build/less/skins/skin-purple-light.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717168-skin-purple-light.less rename to dashboard/public/build/less/skins/skin-purple-light.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717167-skin-purple.less b/dashboard/public/build/less/skins/skin-purple.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717167-skin-purple.less rename to dashboard/public/build/less/skins/skin-purple.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717167-skin-red-light.less b/dashboard/public/build/less/skins/skin-red-light.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717167-skin-red-light.less rename to dashboard/public/build/less/skins/skin-red-light.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717167-skin-red.less b/dashboard/public/build/less/skins/skin-red.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717167-skin-red.less rename to dashboard/public/build/less/skins/skin-red.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717168-skin-yellow-light.less b/dashboard/public/build/less/skins/skin-yellow-light.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717168-skin-yellow-light.less rename to dashboard/public/build/less/skins/skin-yellow-light.less diff --git a/dashboard/public/build/less/skins/.trashed-1657717167-skin-yellow.less b/dashboard/public/build/less/skins/skin-yellow.less similarity index 100% rename from dashboard/public/build/less/skins/.trashed-1657717167-skin-yellow.less rename to dashboard/public/build/less/skins/skin-yellow.less diff --git a/dashboard/public/plugins/bootstrap-slider/.trashed-1657722521-bootstrap-slider.js b/dashboard/public/plugins/bootstrap-slider/bootstrap-slider.js similarity index 100% rename from dashboard/public/plugins/bootstrap-slider/.trashed-1657722521-bootstrap-slider.js rename to dashboard/public/plugins/bootstrap-slider/bootstrap-slider.js diff --git a/dashboard/public/plugins/bootstrap-slider/.trashed-1657722521-slider.css b/dashboard/public/plugins/bootstrap-slider/slider.css similarity index 100% rename from dashboard/public/plugins/bootstrap-slider/.trashed-1657722521-slider.css rename to dashboard/public/plugins/bootstrap-slider/slider.css diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-aero.png b/dashboard/public/plugins/iCheck/flat/aero.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-aero.png rename to dashboard/public/plugins/iCheck/flat/aero.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722661-aero@2x.png b/dashboard/public/plugins/iCheck/flat/aero@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722661-aero@2x.png rename to dashboard/public/plugins/iCheck/flat/aero@2x.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-blue.png b/dashboard/public/plugins/iCheck/flat/blue.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-blue.png rename to dashboard/public/plugins/iCheck/flat/blue.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722661-blue@2x.png b/dashboard/public/plugins/iCheck/flat/blue@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722661-blue@2x.png rename to dashboard/public/plugins/iCheck/flat/blue@2x.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722661-flat.png b/dashboard/public/plugins/iCheck/flat/flat.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722661-flat.png rename to dashboard/public/plugins/iCheck/flat/flat.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722659-flat@2x.png b/dashboard/public/plugins/iCheck/flat/flat@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722659-flat@2x.png rename to dashboard/public/plugins/iCheck/flat/flat@2x.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-green.png b/dashboard/public/plugins/iCheck/flat/green.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-green.png rename to dashboard/public/plugins/iCheck/flat/green.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-green@2x.png b/dashboard/public/plugins/iCheck/flat/green@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-green@2x.png rename to dashboard/public/plugins/iCheck/flat/green@2x.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-grey.png b/dashboard/public/plugins/iCheck/flat/grey.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-grey.png rename to dashboard/public/plugins/iCheck/flat/grey.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-grey@2x.png b/dashboard/public/plugins/iCheck/flat/grey@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-grey@2x.png rename to dashboard/public/plugins/iCheck/flat/grey@2x.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722661-orange.png b/dashboard/public/plugins/iCheck/flat/orange.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722661-orange.png rename to dashboard/public/plugins/iCheck/flat/orange.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-orange@2x.png b/dashboard/public/plugins/iCheck/flat/orange@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-orange@2x.png rename to dashboard/public/plugins/iCheck/flat/orange@2x.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-pink.png b/dashboard/public/plugins/iCheck/flat/pink.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-pink.png rename to dashboard/public/plugins/iCheck/flat/pink.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722661-pink@2x.png b/dashboard/public/plugins/iCheck/flat/pink@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722661-pink@2x.png rename to dashboard/public/plugins/iCheck/flat/pink@2x.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-purple.png b/dashboard/public/plugins/iCheck/flat/purple.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-purple.png rename to dashboard/public/plugins/iCheck/flat/purple.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-purple@2x.png b/dashboard/public/plugins/iCheck/flat/purple@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-purple@2x.png rename to dashboard/public/plugins/iCheck/flat/purple@2x.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722659-red.png b/dashboard/public/plugins/iCheck/flat/red.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722659-red.png rename to dashboard/public/plugins/iCheck/flat/red.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722659-red@2x.png b/dashboard/public/plugins/iCheck/flat/red@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722659-red@2x.png rename to dashboard/public/plugins/iCheck/flat/red@2x.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-yellow.png b/dashboard/public/plugins/iCheck/flat/yellow.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-yellow.png rename to dashboard/public/plugins/iCheck/flat/yellow.png diff --git a/dashboard/public/plugins/iCheck/flat/.trashed-1657722660-yellow@2x.png b/dashboard/public/plugins/iCheck/flat/yellow@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/flat/.trashed-1657722660-yellow@2x.png rename to dashboard/public/plugins/iCheck/flat/yellow@2x.png diff --git a/dashboard/public/plugins/iCheck/futurico/.trashed-1657722661-futurico.png b/dashboard/public/plugins/iCheck/futurico/futurico.png similarity index 100% rename from dashboard/public/plugins/iCheck/futurico/.trashed-1657722661-futurico.png rename to dashboard/public/plugins/iCheck/futurico/futurico.png diff --git a/dashboard/public/plugins/iCheck/futurico/.trashed-1657722661-futurico@2x.png b/dashboard/public/plugins/iCheck/futurico/futurico@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/futurico/.trashed-1657722661-futurico@2x.png rename to dashboard/public/plugins/iCheck/futurico/futurico@2x.png diff --git a/dashboard/public/plugins/iCheck/line/.trashed-1657722661-line.png b/dashboard/public/plugins/iCheck/line/line.png similarity index 100% rename from dashboard/public/plugins/iCheck/line/.trashed-1657722661-line.png rename to dashboard/public/plugins/iCheck/line/line.png diff --git a/dashboard/public/plugins/iCheck/line/.trashed-1657722661-line@2x.png b/dashboard/public/plugins/iCheck/line/line@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/line/.trashed-1657722661-line@2x.png rename to dashboard/public/plugins/iCheck/line/line@2x.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-aero.png b/dashboard/public/plugins/iCheck/minimal/aero.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-aero.png rename to dashboard/public/plugins/iCheck/minimal/aero.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-aero@2x.png b/dashboard/public/plugins/iCheck/minimal/aero@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-aero@2x.png rename to dashboard/public/plugins/iCheck/minimal/aero@2x.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-blue.png b/dashboard/public/plugins/iCheck/minimal/blue.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-blue.png rename to dashboard/public/plugins/iCheck/minimal/blue.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-blue@2x.png b/dashboard/public/plugins/iCheck/minimal/blue@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-blue@2x.png rename to dashboard/public/plugins/iCheck/minimal/blue@2x.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-green.png b/dashboard/public/plugins/iCheck/minimal/green.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-green.png rename to dashboard/public/plugins/iCheck/minimal/green.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-green@2x.png b/dashboard/public/plugins/iCheck/minimal/green@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-green@2x.png rename to dashboard/public/plugins/iCheck/minimal/green@2x.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-grey.png b/dashboard/public/plugins/iCheck/minimal/grey.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-grey.png rename to dashboard/public/plugins/iCheck/minimal/grey.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-grey@2x.png b/dashboard/public/plugins/iCheck/minimal/grey@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-grey@2x.png rename to dashboard/public/plugins/iCheck/minimal/grey@2x.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-minimal.png b/dashboard/public/plugins/iCheck/minimal/minimal.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-minimal.png rename to dashboard/public/plugins/iCheck/minimal/minimal.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-minimal@2x.png b/dashboard/public/plugins/iCheck/minimal/minimal@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-minimal@2x.png rename to dashboard/public/plugins/iCheck/minimal/minimal@2x.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-orange.png b/dashboard/public/plugins/iCheck/minimal/orange.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-orange.png rename to dashboard/public/plugins/iCheck/minimal/orange.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-orange@2x.png b/dashboard/public/plugins/iCheck/minimal/orange@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-orange@2x.png rename to dashboard/public/plugins/iCheck/minimal/orange@2x.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-pink.png b/dashboard/public/plugins/iCheck/minimal/pink.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-pink.png rename to dashboard/public/plugins/iCheck/minimal/pink.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-pink@2x.png b/dashboard/public/plugins/iCheck/minimal/pink@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-pink@2x.png rename to dashboard/public/plugins/iCheck/minimal/pink@2x.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-purple.png b/dashboard/public/plugins/iCheck/minimal/purple.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-purple.png rename to dashboard/public/plugins/iCheck/minimal/purple.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-purple@2x.png b/dashboard/public/plugins/iCheck/minimal/purple@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-purple@2x.png rename to dashboard/public/plugins/iCheck/minimal/purple@2x.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722661-red.png b/dashboard/public/plugins/iCheck/minimal/red.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722661-red.png rename to dashboard/public/plugins/iCheck/minimal/red.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722661-red@2x.png b/dashboard/public/plugins/iCheck/minimal/red@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722661-red@2x.png rename to dashboard/public/plugins/iCheck/minimal/red@2x.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-yellow.png b/dashboard/public/plugins/iCheck/minimal/yellow.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-yellow.png rename to dashboard/public/plugins/iCheck/minimal/yellow.png diff --git a/dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-yellow@2x.png b/dashboard/public/plugins/iCheck/minimal/yellow@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/minimal/.trashed-1657722662-yellow@2x.png rename to dashboard/public/plugins/iCheck/minimal/yellow@2x.png diff --git a/dashboard/public/plugins/iCheck/polaris/.trashed-1657722661-polaris.png b/dashboard/public/plugins/iCheck/polaris/polaris.png similarity index 100% rename from dashboard/public/plugins/iCheck/polaris/.trashed-1657722661-polaris.png rename to dashboard/public/plugins/iCheck/polaris/polaris.png diff --git a/dashboard/public/plugins/iCheck/polaris/.trashed-1657722661-polaris@2x.png b/dashboard/public/plugins/iCheck/polaris/polaris@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/polaris/.trashed-1657722661-polaris@2x.png rename to dashboard/public/plugins/iCheck/polaris/polaris@2x.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-aero.png b/dashboard/public/plugins/iCheck/square/aero.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-aero.png rename to dashboard/public/plugins/iCheck/square/aero.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-aero@2x.png b/dashboard/public/plugins/iCheck/square/aero@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-aero@2x.png rename to dashboard/public/plugins/iCheck/square/aero@2x.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-blue.png b/dashboard/public/plugins/iCheck/square/blue.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-blue.png rename to dashboard/public/plugins/iCheck/square/blue.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-blue@2x.png b/dashboard/public/plugins/iCheck/square/blue@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-blue@2x.png rename to dashboard/public/plugins/iCheck/square/blue@2x.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-green.png b/dashboard/public/plugins/iCheck/square/green.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-green.png rename to dashboard/public/plugins/iCheck/square/green.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-green@2x.png b/dashboard/public/plugins/iCheck/square/green@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-green@2x.png rename to dashboard/public/plugins/iCheck/square/green@2x.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-grey.png b/dashboard/public/plugins/iCheck/square/grey.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-grey.png rename to dashboard/public/plugins/iCheck/square/grey.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-grey@2x.png b/dashboard/public/plugins/iCheck/square/grey@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-grey@2x.png rename to dashboard/public/plugins/iCheck/square/grey@2x.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-orange.png b/dashboard/public/plugins/iCheck/square/orange.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-orange.png rename to dashboard/public/plugins/iCheck/square/orange.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-orange@2x.png b/dashboard/public/plugins/iCheck/square/orange@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-orange@2x.png rename to dashboard/public/plugins/iCheck/square/orange@2x.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-pink.png b/dashboard/public/plugins/iCheck/square/pink.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-pink.png rename to dashboard/public/plugins/iCheck/square/pink.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-pink@2x.png b/dashboard/public/plugins/iCheck/square/pink@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-pink@2x.png rename to dashboard/public/plugins/iCheck/square/pink@2x.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-purple.png b/dashboard/public/plugins/iCheck/square/purple.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-purple.png rename to dashboard/public/plugins/iCheck/square/purple.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-purple@2x.png b/dashboard/public/plugins/iCheck/square/purple@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-purple@2x.png rename to dashboard/public/plugins/iCheck/square/purple@2x.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-red.png b/dashboard/public/plugins/iCheck/square/red.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-red.png rename to dashboard/public/plugins/iCheck/square/red.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-red@2x.png b/dashboard/public/plugins/iCheck/square/red@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-red@2x.png rename to dashboard/public/plugins/iCheck/square/red@2x.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-square.png b/dashboard/public/plugins/iCheck/square/square.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-square.png rename to dashboard/public/plugins/iCheck/square/square.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-square@2x.png b/dashboard/public/plugins/iCheck/square/square@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-square@2x.png rename to dashboard/public/plugins/iCheck/square/square@2x.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-yellow.png b/dashboard/public/plugins/iCheck/square/yellow.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-yellow.png rename to dashboard/public/plugins/iCheck/square/yellow.png diff --git a/dashboard/public/plugins/iCheck/square/.trashed-1657722661-yellow@2x.png b/dashboard/public/plugins/iCheck/square/yellow@2x.png similarity index 100% rename from dashboard/public/plugins/iCheck/square/.trashed-1657722661-yellow@2x.png rename to dashboard/public/plugins/iCheck/square/yellow@2x.png diff --git a/dashboard/routes/discord.js b/dashboard/routes/discord.js index ad0c0ae..90568a3 100644 --- a/dashboard/routes/discord.js +++ b/dashboard/routes/discord.js @@ -7,6 +7,12 @@ const fetch = require("node-fetch"), // Gets login page router.get("/login", async function (req, res) { if (!req.user || !req.user.id || !req.user.guilds) { + // check if client user is ready + if (!req.client.user?.id) { + req.client.logger.debug("Client is not ready! Redirecting to /login"); + return res.redirect("/login"); + } + return res.redirect( `https://discordapp.com/api/oauth2/authorize?client_id=${ req.client.user.id @@ -19,7 +25,11 @@ router.get("/login", async function (req, res) { }); router.get("/callback", async (req, res) => { - if (!req.query.code) return res.redirect(req.client.config.DASHBOARD.failureURL); + if (!req.query.code) { + req.client.logger.debug({ query: req.query, body: req.body }); + req.client.logger.error("Failed to login to dashboard! Check /logs folder for more details"); + return res.redirect(req.client.config.DASHBOARD.failureURL); + } if (req.query.state && req.query.state.startsWith("invite")) { if (req.query.code) { const guildID = req.query.state.substr("invite".length, req.query.state.length); @@ -43,7 +53,11 @@ router.get("/callback", async (req, res) => { // Fetch tokens (used to fetch user information's) const tokens = await response.json(); // If the code isn't valid - if (tokens.error || !tokens.access_token) return res.redirect(`/api/login&state=${req.query.state}`); + if (tokens.error || !tokens.access_token) { + req.client.logger.debug(tokens); + req.client.logger.error("Failed to login to dashboard! Check /logs folder for more details"); + return res.redirect(`/api/login&state=${req.query.state}`); + } const userData = { infos: null, guilds: null, @@ -51,7 +65,7 @@ router.get("/callback", async (req, res) => { while (!userData.infos || !userData.guilds) { /* User infos */ if (!userData.infos) { - response = await fetch("http://discordapp.com/api/users/@me", { + response = await fetch("https://discordapp.com/api/users/@me", { method: "GET", headers: { Authorization: `Bearer ${tokens.access_token}` }, }); diff --git a/dashboard/routes/guild-manager.js b/dashboard/routes/guild-manager.js index 84c3b6a..f4c1b36 100644 --- a/dashboard/routes/guild-manager.js +++ b/dashboard/routes/guild-manager.js @@ -76,27 +76,41 @@ router.post("/:serverID/basic", CheckAuth, async (req, res) => { const settings = await getSettings(guild); const data = req.body; + // BASIC CONFIGURATION if (Object.prototype.hasOwnProperty.call(data, "basicUpdate")) { if (data.prefix && data.prefix !== settings.prefix) { settings.prefix = data.prefix; } - data.ranking = data.ranking === "on" ? true : false; - if (data.ranking !== (settings.ranking.enabled || false)) { - settings.ranking.enabled = data.ranking; - } - data.flag_translation = data.flag_translation === "on" ? true : false; if (data.flag_translation !== (settings.flag_translation.enabled || false)) { settings.flag_translation.enabled = data.flag_translation; } - data.modlog_channel = guild.channels.cache.find((ch) => "#" + ch.name === data.modlog_channel)?.id || null; - if (data.modlog_channel !== settings.modlog_channel) { - settings.modlog_channel = data.modlog_channel; + data.invite_tracking = data.invite_tracking === "on" ? true : false; + if (data.invite_tracking !== (settings.invite.tracking || false)) { + settings.invite.tracking = data.invite_tracking; } } + // STATISTICS CONFIGURATION + if (Object.prototype.hasOwnProperty.call(data, "statsUpdate")) { + data.ranking = data.ranking === "on" ? true : false; + if (data.ranking !== (settings.stats.enabled || false)) { + settings.stats.enabled = data.ranking; + } + + if (data.levelup_message && data.levelup_message !== settings.stats.xp.message) { + settings.stats.xp.message = data.levelup_message; + } + + data.levelup_channel = guild.channels.cache.find((ch) => "#" + ch.name === data.levelup_channel)?.id || null; + if (data.levelup_channel !== settings.stats.xp.channel) { + settings.stats.xp.channel = data.levelup_channel; + } + } + + // TICKET CONFIGURATION if (Object.prototype.hasOwnProperty.call(data, "ticketUpdate")) { if (data.limit && data.limit != settings.ticket.limit) { settings.ticket.limit = data.limit; @@ -108,19 +122,29 @@ router.post("/:serverID/basic", CheckAuth, async (req, res) => { } } - if (Object.prototype.hasOwnProperty.call(data, "inviteUpdate")) { - data.tracking = data.tracking === "on" ? true : false; - if (data.tracking !== (settings.invite.tracking || false)) { - settings.invite.tracking = data.tracking; + // MODERATION CONFIGURATION + if (Object.prototype.hasOwnProperty.call(data, "modUpdate")) { + if (data.max_warnings && data.max_warnings != settings.max_warn.limit) { + settings.max_warn.limit = data.max_warnings; + } + + if (data.max_warn_action !== settings.max_warn.action) { + settings.max_warn.action = data.max_warn_action; + } + + data.modlog_channel = guild.channels.cache.find((ch) => "#" + ch.name === data.modlog_channel)?.id || null; + if (data.modlog_channel !== settings.modlog_channel) { + settings.modlog_channel = data.modlog_channel; } } + // AUTOMOD CONFIGURATION if (Object.prototype.hasOwnProperty.call(data, "automodUpdate")) { - if (data.max_strikes != settings.automod.strikes) { + if (data.max_strikes && data.max_strikes !== settings.automod.strikes) { settings.automod.strikes = data.max_strikes; } - if (data.automod_action !== settings.automod.action) { + if (data.automod_action && data.automod_action !== settings.automod.action) { settings.automod.action = data.automod_action; } @@ -128,21 +152,9 @@ router.post("/:serverID/basic", CheckAuth, async (req, res) => { settings.automod.max_lines = data.max_lines; } - if (data.max_mentions && data.max_mentions !== settings.automod.max_mentions) { - settings.automod.max_mentions = data.max_mentions; - } - if (data.max_role_mentions && data.max_role_mentions !== settings.automod.max_role_mentions) { - settings.automod.max_role_mentions = data.max_role_mentions; - } - - data.anti_links = data.anti_links === "on" ? true : false; - if (data.anti_links !== (settings.automod.anti_links || false)) { - settings.automod.anti_links = data.anti_links; - } - - data.anti_scam = data.anti_scam === "on" ? true : false; - if (data.anti_scam !== (settings.automod.anti_scam || false)) { - settings.automod.anti_scam = data.anti_scam; + data.anti_attachments = data.anti_attachments === "on" ? true : false; + if (data.anti_attachments !== (settings.automod.anti_attachments || false)) { + settings.automod.anti_attachments = data.anti_attachments; } data.anti_invites = data.anti_invites === "on" ? true : false; @@ -150,10 +162,32 @@ router.post("/:serverID/basic", CheckAuth, async (req, res) => { settings.automod.anti_invites = data.anti_invites; } + data.anti_links = data.anti_links === "on" ? true : false; + if (data.anti_links !== (settings.automod.anti_links || false)) { + settings.automod.anti_links = data.anti_links; + } + + data.anti_spam = data.anti_spam === "on" ? true : false; + if (data.anti_spam !== (settings.automod.anti_spam || false)) { + settings.automod.anti_spam = data.anti_spam; + } + data.anti_ghostping = data.anti_ghostping === "on" ? true : false; if (data.anti_ghostping !== (settings.automod.anti_ghostping || false)) { settings.automod.anti_ghostping = data.anti_ghostping; } + + data.anti_massmention = data.anti_massmention === "on" ? true : false; + if (data.anti_massmention !== (settings.automod.anti_massmention || false)) { + settings.automod.anti_massmention = data.anti_massmention; + } + + if (data.channels?.length) { + if (typeof data.channels === "string") data.channels = [data.channels]; + settings.automod.wh_channels = data.channels + .map((ch) => guild.channels.cache.find((c) => "#" + c.name === ch)?.id) + .filter((c) => c); + } } await settings.save(); @@ -185,32 +219,56 @@ router.post("/:serverID/greeting", CheckAuth, async (req, res) => { Object.prototype.hasOwnProperty.call(data, "welcomeEnable") || Object.prototype.hasOwnProperty.call(data, "welcomeUpdate") ) { + if (data.content !== settings.welcome.content) { + settings.welcome.content = data.content; + } + data.content = data.content.replace(/\r?\n/g, "\\n"); if (data.content && data.content !== settings.welcome.content) { settings.welcome.content = data.content; } + if (data.description !== settings.welcome.embed.description) { + settings.welcome.embed.description = data.description; + } + data.description = data.description?.replaceAll(/\r\n/g, "\\n"); if (data.description && data.description !== settings.welcome.embed?.description) { settings.welcome.embed.description = data.description; } + if (data.footer !== settings.welcome.embed.footer) { + settings.welcome.embed.footer = data.footer; + } + if (data.footer && data.footer !== settings.welcome.embed?.footer) { settings.welcome.embed.footer = data.footer; } + if (data.hexcolor !== settings.welcome.embed.hexcolor) { + settings.welcome.embed.hexcolor = data.hexcolor; + } + if (data.hexcolor && data.hexcolor !== settings.welcome.embed?.color) { settings.welcome.embed.color = data.hexcolor; } + if (data.image !== settings.welcome.embed.image) { + settings.welcome.embed.image = data.image; + } + + if (data.image && data.image !== settings.welcome.embed?.image) { + settings.welcome.embed.image = data.image; + } + data.thumbnail = data.thumbnail === "on" ? true : false; if (data.thumbnail !== (settings.welcome.embed?.thumbnail || false)) { settings.welcome.embed.thumbnail = data.thumbnail; } data.channel = guild.channels.cache.find((ch) => "#" + ch.name === data.channel)?.id; - if (data.channel !== settings.welcome.channel_id) { - settings.welcome.channel_id = data.channel; + if (data.channel !== settings.welcome.channel) { + settings.welcome.channel = data.channel; } if (!settings.welcome.enabled) settings.welcome.enabled = true; @@ -224,32 +282,56 @@ router.post("/:serverID/greeting", CheckAuth, async (req, res) => { Object.prototype.hasOwnProperty.call(data, "farewellEnable") || Object.prototype.hasOwnProperty.call(data, "farewellUpdate") ) { + if (data.content !== settings.farewell.content) { + settings.farewell.content = data.content; + } + data.content = data.content.replace(/\r?\n/g, "\\n"); if (data.content && data.content !== settings.farewell.content) { settings.farewell.content = data.content; } + if (data.description !== settings.farewell.description) { + settings.farewell.description = data.description; + } + data.description = data.description?.replaceAll(/\r\n/g, "\\n"); if (data.description && data.description !== settings.farewell.embed?.description) { settings.farewell.embed.description = data.description; } + if (data.footer !== settings.farewell.footer) { + settings.farewell.footer = data.footer; + } + if (data.footer && data.footer !== settings.farewell.embed?.footer) { settings.farewell.embed.footer = data.footer; } + if (data.hexcolor !== settings.farewell.hexcolor) { + settings.farewell.hexcolor = data.hexcolor; + } + if (data.hexcolor && data.hexcolor !== settings.farewell.embed?.color) { settings.farewell.embed.color = data.hexcolor; } + if (data.image !== settings.farewell.image) { + settings.farewell.image = data.image; + } + + if (data.image && data.image !== settings.farewell.embed?.image) { + settings.farewell.embed.image = data.image; + } + data.thumbnail = data.thumbnail === "on" ? true : false; if (data.thumbnail !== (settings.farewell.embed?.thumbnail || false)) { settings.farewell.embed.thumbnail = data.thumbnail; } data.channel = guild.channels.cache.find((ch) => "#" + ch.name === data.channel)?.id; - if (data.channel !== settings.farewell.channel_id) { - settings.farewell.channel_id = data.channel; + if (data.channel !== settings.farewell.channel) { + settings.farewell.channel = data.channel; } if (!settings.farewell.enabled) settings.farewell.enabled = true; diff --git a/dashboard/utils.js b/dashboard/utils.js index 926b72c..36260ac 100644 --- a/dashboard/utils.js +++ b/dashboard/utils.js @@ -12,8 +12,8 @@ async function fetchUser(userData, client, query) { if (userData.guilds) { userData.guilds.forEach((guild) => { if (guild.permissions) { - const perms = new Discord.Permissions(BigInt(guild.permissions)); - if (perms.has("MANAGE_GUILD")) guild.admin = true; + const perms = new Discord.PermissionsBitField(BigInt(guild.permissions)); + if (perms.has("ManageGuild")) guild.admin = true; } guild.settingsUrl = client.guilds.cache.get(guild.id) ? `/manage/${guild.id}/` @@ -33,7 +33,7 @@ async function fetchUser(userData, client, query) { } const user = await client.users.fetch(userData.id); user.displayAvatar = user.displayAvatarURL(); - const userDb = await getUser(user.id); + const userDb = await getUser(user); const userInfos = { ...user, ...userDb, ...userData, ...user.presence }; return userInfos; } diff --git a/dashboard/views/includes/footer.ejs b/dashboard/views/includes/footer.ejs index a83c5bd..951df46 100644 --- a/dashboard/views/includes/footer.ejs +++ b/dashboard/views/includes/footer.ejs @@ -1,9 +1,9 @@ diff --git a/dashboard/views/includes/head.ejs b/dashboard/views/includes/head.ejs index 8a7a488..13e6146 100644 --- a/dashboard/views/includes/head.ejs +++ b/dashboard/views/includes/head.ejs @@ -2,7 +2,7 @@ -