From efa45e7db9309fad0571059aa8ddf1605cb88272 Mon Sep 17 00:00:00 2001 From: Taken Date: Sat, 30 Dec 2023 00:03:32 +0100 Subject: [PATCH 1/2] Added dev script for ts-node --- nodemon-ts.json | 14 +++++ package.json | 1 + src/typings/{Profile.ts => Types.ts} | 2 + src/typings/index.ts | 4 +- src/utils/Autodeploy.ts | 73 +++++++++++++------------ src/utils/Client.ts | 14 +++-- src/utils/Events.ts | 13 +++-- src/utils/eventHandlers/autocomplete.ts | 5 +- src/utils/eventHandlers/button.ts | 5 +- src/utils/eventHandlers/command.ts | 7 +-- src/utils/eventHandlers/contextmenu.ts | 5 +- src/utils/eventHandlers/modal.ts | 5 +- 12 files changed, 89 insertions(+), 59 deletions(-) create mode 100644 nodemon-ts.json rename src/typings/{Profile.ts => Types.ts} (87%) diff --git a/nodemon-ts.json b/nodemon-ts.json new file mode 100644 index 0000000..24cdcf8 --- /dev/null +++ b/nodemon-ts.json @@ -0,0 +1,14 @@ +{ + "restartable": "rs", + "ignore": [ + ".git", + "node_modules/**/node_modules", + "dist/config" + ], + "verbose": true, + "env": { + "NODE_ENV": "dev", + "TYPESCRIPT": "true" + }, + "ext": "ts, json" +} \ No newline at end of file diff --git a/package.json b/package.json index 990462c..18a856b 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build": "tsc", "watch": "tsc -w", "dev": "nodemon dist/src/index.js", + "dev:ts": "nodemon --config nodemon-ts.json", "dev:build": "ts-node scripts/dev-deploy.ts", "dev:delete": "ts-node scripts/delete-commands.ts", "format": "prettier --write src/", diff --git a/src/typings/Profile.ts b/src/typings/Types.ts similarity index 87% rename from src/typings/Profile.ts rename to src/typings/Types.ts index e1070c4..d6709bc 100644 --- a/src/typings/Profile.ts +++ b/src/typings/Types.ts @@ -13,3 +13,5 @@ export type Profile2 = { profileActions: [] } } + +export type FileType = "js" | "ts" \ No newline at end of file diff --git a/src/typings/index.ts b/src/typings/index.ts index ae36f85..38c8e08 100644 --- a/src/typings/index.ts +++ b/src/typings/index.ts @@ -1,3 +1,3 @@ -import { Profile, Profile2 } from "./Profile" +import { Profile, Profile2, FileType } from "./Types" -export { Profile, Profile2 } +export { Profile, Profile2, FileType } \ No newline at end of file diff --git a/src/utils/Autodeploy.ts b/src/utils/Autodeploy.ts index 4de5179..df14873 100644 --- a/src/utils/Autodeploy.ts +++ b/src/utils/Autodeploy.ts @@ -8,15 +8,20 @@ import { Routes, } from "discord.js" import fs = require("fs") +import { FileType } from "../typings" -async function autoDeployCommands() { +async function autoDeployCommands(fileType: FileType) { const commands = [] - const commandFiles = fs - .readdirSync("./dist/src/commands/") - .filter(file => file.endsWith(".js")) - const contentMenuCommands = fs - .readdirSync("./dist/src/commands-contextmenu/") - .filter(file => file.endsWith(".js")) + let commandFiles: string[] = [] + let contentMenuCommands: string[] = [] + + if (fileType === "js") { + commandFiles = fs.readdirSync("./dist/src/commands/").filter(file => file.endsWith(fileType)) + contentMenuCommands = fs.readdirSync("./dist/src/commands-contextmenu/").filter(file => file.endsWith(fileType)) + } else if (fileType === "ts") { + commandFiles = fs.readdirSync("./src/commands/").filter(file => file.endsWith(fileType)) + contentMenuCommands = fs.readdirSync("./src/commands-contextmenu/").filter(file => file.endsWith(fileType)) + } for (const file of commandFiles) { const command = require(`../commands/${file}`) @@ -79,36 +84,34 @@ async function autoDeployCommands() { return } - ;(async () => { - try { - console.log( - color.colorize( - "Commands are different, starting deploy.", - "red", - ), - ) - console.log(color.colorize(currentCmds, "red")) - console.log( - `Started refreshing ${commands.length} application (/) commands.`, - ) + try { + console.log( + color.colorize( + "Commands are different, starting deploy.", + "red", + ), + ) + console.log(color.colorize(currentCmds, "red")) + console.log( + `Started refreshing ${commands.length} application (/) commands.`, + ) - const data = (await rest.put( - Routes.applicationGuildCommands( - config.dev.devid!, - config.dev.guildid!, - ), - { body: commands }, - )) as RESTPutAPIApplicationGuildCommandsJSONBody[] + const data = (await rest.put( + Routes.applicationGuildCommands( + config.dev.devid!, + config.dev.guildid!, + ), + { body: commands }, + )) as RESTPutAPIApplicationGuildCommandsJSONBody[] - console.log(color.colorize("New commands deployed.", "green")) - console.log(color.colorize(newCmds, "green")) - console.log( - `Successfully reloaded ${data.length} application (/) commands.`, - ) - } catch (error) { - console.error(error) - } - })() + console.log(color.colorize("New commands deployed.", "green")) + console.log(color.colorize(newCmds, "green")) + console.log( + `Successfully reloaded ${data.length} application (/) commands.`, + ) + } catch (error) { + console.error(error) + } } export { autoDeployCommands } diff --git a/src/utils/Client.ts b/src/utils/Client.ts index 9de589f..db008e3 100644 --- a/src/utils/Client.ts +++ b/src/utils/Client.ts @@ -35,15 +35,21 @@ export class ExtendedClient extends Client { } async start() { - loadAllEvents(this) let token: string - if (process.env.NODE_ENV === "dev") { - console.log("Running in development mode.") + if (process.env.NODE_ENV === "dev" && process.env.TYPESCRIPT) { + console.log("Running in development mode. [ts-node]") + loadAllEvents(this, "ts") token = config.dev.devtoken! - autoDeployCommands() + autoDeployCommands("ts") + } else if (process.env.NODE_ENV === "dev" && !process.env.TYPESCRIPT) { + console.log("Running in development mode.") + loadAllEvents(this, "js") + token = config.dev.devtoken! + autoDeployCommands("js") } else { console.log("Running in production mode.") + loadAllEvents(this, "js") token = config.prod.token! } diff --git a/src/utils/Events.ts b/src/utils/Events.ts index 99d2bf8..51383b6 100644 --- a/src/utils/Events.ts +++ b/src/utils/Events.ts @@ -5,12 +5,13 @@ import { loadContextMenuEvents } from "./eventHandlers/contextmenu" import { loadModalEvents } from "./eventHandlers/modal" import { loadEvents } from "./eventHandlers/events" import { loadAutocompleteEvents } from "./eventHandlers/autocomplete" +import { FileType } from "../typings" -export function loadAllEvents(client: Client) { +export function loadAllEvents(client: Client, ft: FileType) { loadEvents(client) - loadButtonEvents(client) - loadSlashCommandsEvents(client) - loadContextMenuEvents(client) - loadModalEvents(client) - loadAutocompleteEvents(client) + loadButtonEvents(client, ft) + loadSlashCommandsEvents(client, ft) + loadContextMenuEvents(client, ft) + loadModalEvents(client, ft) + loadAutocompleteEvents(client, ft) } diff --git a/src/utils/eventHandlers/autocomplete.ts b/src/utils/eventHandlers/autocomplete.ts index 145b7b5..59622b5 100644 --- a/src/utils/eventHandlers/autocomplete.ts +++ b/src/utils/eventHandlers/autocomplete.ts @@ -3,8 +3,9 @@ import { Autocomplete } from "../../interfaces" import { Events } from "discord.js" import path = require("path") import fs = require("fs") +import { FileType } from "../../typings" -function loadAutocompleteEvents(client: Client) { +function loadAutocompleteEvents(client: Client, ft: FileType) { const autocompletePath = path.join( __dirname, "..", @@ -14,7 +15,7 @@ function loadAutocompleteEvents(client: Client) { ) const autocompleteFiles = fs .readdirSync(autocompletePath) - .filter(file => file.endsWith(".js")) + .filter(file => file.endsWith(ft)) for (const file of autocompleteFiles) { const filePath = path.join(autocompletePath, file) diff --git a/src/utils/eventHandlers/button.ts b/src/utils/eventHandlers/button.ts index af0a379..41f554e 100644 --- a/src/utils/eventHandlers/button.ts +++ b/src/utils/eventHandlers/button.ts @@ -3,12 +3,13 @@ import { Button } from "../../interfaces" import { Events } from "discord.js" import path = require("path") import fs = require("fs") +import { FileType } from "../../typings" -function loadButtonEvents(client: Client) { +function loadButtonEvents(client: Client, ft: FileType) { const btnPath = path.join(__dirname, "..", "..", "events", "buttons") const btnFiles = fs .readdirSync(btnPath) - .filter(file => file.endsWith(".js")) + .filter(file => file.endsWith(ft)) for (const file of btnFiles) { const filePath = path.join(btnPath, file) diff --git a/src/utils/eventHandlers/command.ts b/src/utils/eventHandlers/command.ts index a4c4122..52d6a15 100644 --- a/src/utils/eventHandlers/command.ts +++ b/src/utils/eventHandlers/command.ts @@ -3,12 +3,11 @@ import { Command } from "../../interfaces" import { Events } from "discord.js" import path = require("path") import fs = require("fs") +import { FileType } from "../../typings" -function loadSlashCommandsEvents(client: Client) { +function loadSlashCommandsEvents(client: Client, ft: FileType) { const cmdPath = path.join(__dirname, "..", "..", "commands") - const cmdFiles = fs - .readdirSync(cmdPath) - .filter(file => file.endsWith(".js")) + const cmdFiles = fs .readdirSync(cmdPath) .filter(file => file.endsWith(ft)) for (const file of cmdFiles) { const filePath = path.join(cmdPath, file) diff --git a/src/utils/eventHandlers/contextmenu.ts b/src/utils/eventHandlers/contextmenu.ts index 67b486f..2b0b501 100644 --- a/src/utils/eventHandlers/contextmenu.ts +++ b/src/utils/eventHandlers/contextmenu.ts @@ -3,8 +3,9 @@ import { ContextMenu } from "../../interfaces" import { Events } from "discord.js" import path = require("path") import fs = require("fs") +import { FileType } from "../../typings" -function loadContextMenuEvents(client: Client) { +function loadContextMenuEvents(client: Client, ft: FileType) { const contextMenuPath = path.join( __dirname, "..", @@ -13,7 +14,7 @@ function loadContextMenuEvents(client: Client) { ) const contextMenuFiles = fs .readdirSync(contextMenuPath) - .filter(file => file.endsWith(".js")) + .filter(file => file.endsWith(ft)) for (const file of contextMenuFiles) { const filePath = path.join(contextMenuPath, file) diff --git a/src/utils/eventHandlers/modal.ts b/src/utils/eventHandlers/modal.ts index 76166b8..0d110de 100644 --- a/src/utils/eventHandlers/modal.ts +++ b/src/utils/eventHandlers/modal.ts @@ -3,12 +3,13 @@ import { Modal } from "../../interfaces" import { Events } from "discord.js" import path = require("path") import fs = require("fs") +import { FileType } from "../../typings" -function loadModalEvents(client: Client) { +function loadModalEvents(client: Client, ft: FileType) { const modalPath = path.join(__dirname, "..", "..", "events", "modals") const modalFiles = fs .readdirSync(modalPath) - .filter(file => file.endsWith(".js")) + .filter(file => file.endsWith(ft)) for (const file of modalFiles) { const filePath = path.join(modalPath, file) From a4d96dd63d621ada9338513ae59fe99efceacee0 Mon Sep 17 00:00:00 2001 From: Taken Date: Sat, 30 Dec 2023 00:05:24 +0100 Subject: [PATCH 2/2] Added nodemon-ts to docker ignore --- .dockerignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.dockerignore b/.dockerignore index b973839..01f1499 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,5 +11,6 @@ scripts docker-compose.yml Dockerfile Dockerfile.cache +nodemon-ts.json nodemon.json README.old \ No newline at end of file