diff --git a/.dockerignore b/.dockerignore index 9cddb1c..e00420a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -5,5 +5,3 @@ !package-lock.json !LICENSE !tsconfig.json - -src/tests/ diff --git a/.eslintignore b/.eslintignore index 1521c8b..45c4419 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1,2 @@ dist +tests diff --git a/.forgejo/workflows/pr-check.yml b/.forgejo/workflows/pr-check.yml index f25c930..bacf8c7 100644 --- a/.forgejo/workflows/pr-check.yml +++ b/.forgejo/workflows/pr-check.yml @@ -14,7 +14,7 @@ jobs: uses: actions/checkout@v4 - name: Install dependencies - run: npm install + run: npm ci - name: Run lint run: npm run lint diff --git a/Dockerfile b/Dockerfile index 07d99b9..2bd7ad2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ COPY --chown=node:node . . ENV NODE_ENV=production RUN npm ci --omit=dev && \ - npx tsc && \ + npm run compile && \ rm -r src/ tsconfig.json && \ npm uninstall typescript @types/sqlite3 && \ npm cache clean --force diff --git a/package-lock.json b/package-lock.json index dfe19ce..cff92cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1454,9 +1454,9 @@ } }, "node_modules/@sapphire/async-queue": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.3.tgz", - "integrity": "sha512-x7zadcfJGxFka1Q3f8gCts1F0xMwCKbZweM85xECGI0hBTeIZJGGCrHgLggihBoprlQ/hBmDR5LKfIPqnmHM3w==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.4.tgz", + "integrity": "sha512-id65RxAx34DCk8KAVTPWwcephJSkStiS9M15F87+zvK2gK47wf7yeRIo8WiuKeXQS6bsyo/uQ/t0QW1cLmSb+A==", "license": "MIT", "engines": { "node": ">=v14.0.0", diff --git a/package.json b/package.json index 229b936..3907e61 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,13 @@ "description": "Bot discord", "main": "src/index.js", "scripts": { - "compile": "rm -r dist 2> /dev/null; npx tsc", + "compile": "rm -r dist 2> /dev/null; npx tsc && cp -r ./src/sql ./dist/sql", "main": "npm run compile && node ./dist/index.js", "debug": "npx tsnd --respawn ./src/index.ts", "lint": "npx eslint src", "format-check": "npx prettier --check src", "format-write": "npx prettier --write src", - "test": "npm run compile && npx jest" + "test": "npx jest" }, "repository": { "type": "git", diff --git a/src/events/loader.ts b/src/events/loader.ts index 5557ccf..a6c8bcf 100644 --- a/src/events/loader.ts +++ b/src/events/loader.ts @@ -1,10 +1,10 @@ import { PlayerEvents, useMainPlayer } from "discord-player"; import { Client } from "discord.js"; import { readdir } from "fs/promises"; -import { splitFilenameExtensions } from "../utils/misc"; +import { isDev, splitFilenameExtensions } from "../utils/misc"; /** Load all the events */ -export default async (client: Client, isDev: boolean) => { +export default async (client: Client) => { const events_categories = (await readdir(__dirname, { withFileTypes: true })) .filter((element) => element.isDirectory()) .map((element) => element.name); diff --git a/src/index.ts b/src/index.ts index 835ce0b..6f55a29 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,8 @@ -const isDev = process.env.NODE_ENV !== "production"; +import { isDev } from "./utils/misc"; /** Load the app */ const start_app = () => { - import("./load").then((l) => l.run(isDev).catch((error) => console.error(error))); + import("./load").then((l) => l.run().catch((error) => console.error(error))); }; // Load .env if not in prod diff --git a/src/load.ts b/src/load.ts index ff68b03..fbfbedf 100644 --- a/src/load.ts +++ b/src/load.ts @@ -4,15 +4,15 @@ import loadEvents from "./events/loader"; import loadModals from "./modals/loader"; import loadClient, { quit } from "./utils/client"; -import { logStart } from "./utils/misc"; +import { isDev, logStart } from "./utils/misc"; /** Run the bot */ -export const run = async (isDev: boolean) => { +export const run = async () => { console.log("Starting Botanique..."); // Client Discord.JS const client_name = "Client"; - await loadClient(isDev) + await loadClient() .then(async (client) => { if (isDev) { // Attach debugging listeners @@ -21,7 +21,7 @@ export const run = async (isDev: boolean) => { // Events Discord.JS and Player const events_name = "Events"; - await loadEvents(client, isDev) + await loadEvents(client) .then(() => console.log(logStart(events_name, true))) .catch((err) => { console.error(err); diff --git a/src/utils/client.ts b/src/utils/client.ts index 2ab5276..92f25ae 100644 --- a/src/utils/client.ts +++ b/src/utils/client.ts @@ -6,9 +6,10 @@ import "../modules/client"; import { loadLocales } from "./locales"; import { YoutubeiExtractor } from "discord-player-youtubei"; import { readSQL } from "./db"; +import { isDev } from "./misc"; /** Creation of the client and definition of its properties */ -export default async (isDev: boolean) => { +export default async () => { const activities = isDev ? [] : [{ name: "/help", type: ActivityType.Watching }]; const client: Client = new Client({ diff --git a/src/utils/db.ts b/src/utils/db.ts index 5d3aa4b..9566da6 100644 --- a/src/utils/db.ts +++ b/src/utils/db.ts @@ -1,7 +1,9 @@ import fs from "node:fs"; +import { isDev } from "./misc"; export const readSQL = (path: string) => { - const dir = "./src/sql/"; + const root = isDev ? "./src" : "./dist"; + const dir = root + "/sql/"; if (!path.startsWith(dir)) { path = dir + path; } diff --git a/src/utils/misc.ts b/src/utils/misc.ts index 79195e9..72342f6 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -1,5 +1,8 @@ import { GuildMember } from "discord.js"; +/** Check if we are in the dev environnement */ +export const isDev = process.env.NODE_ENV !== "production"; + /** * Log module status * @param {string} name Module name diff --git a/tsconfig.json b/tsconfig.json index 333de2e..3d15a10 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -102,5 +102,6 @@ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, - "include": ["./**/*.ts", "./src/locales/*.json"] + "include": ["./**/*.ts", "./src/locales/*.json"], + "exclude": ["./src/tests"] }