diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..e31c306 --- /dev/null +++ b/.envrc @@ -0,0 +1,4 @@ +if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then + source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" +fi +use flake diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 15a8d7a..d0c3d2b 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -15,8 +15,12 @@ on: jobs: lint: runs-on: ubuntu-latest + steps: - uses: actions/checkout@v3 + - uses: actions/setup-node@v3.6.0 + with: + node-version: 19.x - run: yarn install --immutable - name: Compile run: yarn build diff --git a/.gitignore b/.gitignore index b8b8506..6deb598 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ src/config/* !src/config/*.d.ts !src/config/format.ts -!src/config/default.json +!src/config/default.ts !src/config/emojis.json src/config/main.ts .vscode/ @@ -19,3 +19,5 @@ src/utils/temp/*.jpg ClicksMigratingProblems/oldData/ ClicksMigratingProblems/oldData copy/ + +.direnv/ diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..f30c0f6 --- /dev/null +++ b/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1676283394, + "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1677852945, + "narHash": "sha256-liiVJjkBTuBTAkRW3hrI8MbPD2ImYzwUpa7kvteiKhM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f5ffd5787786dde3a8bf648c7a1b5f78c4e01abb", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..c11ea5f --- /dev/null +++ b/flake.nix @@ -0,0 +1,14 @@ +{ + description = "A basic flake with a shell"; + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: let + pkgs = nixpkgs.legacyPackages.${system}; + in { + devShells.default = pkgs.mkShell { + packages = [ pkgs.yarn pkgs.nodejs-19_x pkgs.typescript pkgs.act ]; + }; + }); +} diff --git a/package.json b/package.json index f28878f..a319086 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,9 @@ "dependencies": { "@discordjs/rest": "^0.2.0-canary.0", "@hokify/agenda": "^6.2.12", + "@total-typescript/ts-reset": "^0.3.7", "@tsconfig/node18-strictest-esm": "^1.0.0", + "@types/node": "^18.14.6", "@ungap/structured-clone": "^1.0.1", "agenda": "^4.3.0", "body-parser": "^1.20.0", @@ -18,7 +20,7 @@ "node-tesseract-ocr": "^2.2.1", "structured-clone": "^0.2.2", "systeminformation": "^5.17.3" - }, + }, "resolutions": { "discord-api-types": "0.37.23" }, diff --git a/src/commands/settings/automod.ts b/src/commands/settings/automod.ts index 09b8914..ff9e0b2 100644 --- a/src/commands/settings/automod.ts +++ b/src/commands/settings/automod.ts @@ -874,6 +874,7 @@ const callback = async (interaction: CommandInteraction): Promise => { await i.deferUpdate(); if(i.isButton()) { await client.database.guilds.write(interaction.guild.id, {filters: config}); + await client.memory.forceUpdate(interaction.guild.id); } else { switch(i.values[0]) { case "invites": { diff --git a/src/commands/settings/autopublish.ts b/src/commands/settings/autopublish.ts index 2c01fe2..27d01bd 100644 --- a/src/commands/settings/autopublish.ts +++ b/src/commands/settings/autopublish.ts @@ -79,6 +79,7 @@ export const callback = async (interaction: CommandInteraction): Promise = await client.database.guilds.write(interaction.guild!.id, { "autoPublish": data }); config = await client.database.guilds.read(interaction.guild!.id); data = _.cloneDeep(config.autoPublish); + await client.memory.forceUpdate(interaction.guild!.id); break; } } diff --git a/src/commands/settings/logs/attachment.ts b/src/commands/settings/logs/attachment.ts index 238b8b9..8f0b257 100644 --- a/src/commands/settings/logs/attachment.ts +++ b/src/commands/settings/logs/attachment.ts @@ -93,6 +93,7 @@ const callback = async (interaction: CommandInteraction): Promise => { "logging.attachments.channel": channel }); data = await client.database.guilds.read(interaction.guild!.id); + await client.memory.forceUpdate(interaction.guild!.id); break; } } diff --git a/src/commands/settings/logs/events.ts b/src/commands/settings/logs/events.ts index eeef8fb..05d6928 100644 --- a/src/commands/settings/logs/events.ts +++ b/src/commands/settings/logs/events.ts @@ -139,6 +139,7 @@ const callback = async (interaction: CommandInteraction): Promise => { await client.database.guilds.write(interaction.guild!.id, {"logging.logs": data}); config = await client.database.guilds.read(interaction.guild!.id); data = Object.assign({}, config.logging.logs); + await client.memory.forceUpdate(interaction.guild!.id) break; } case "remove": { diff --git a/src/commands/settings/logs/warnings.ts b/src/commands/settings/logs/warnings.ts index 84772e6..4d9a3fa 100644 --- a/src/commands/settings/logs/warnings.ts +++ b/src/commands/settings/logs/warnings.ts @@ -81,6 +81,7 @@ const callback = async (interaction: CommandInteraction): Promise => { "logging.warnings.channel": channel }); data = await client.database.guilds.read(interaction.guild!.id); + await client.memory.forceUpdate(interaction.guild!.id); break; } } diff --git a/src/commands/settings/rolemenu.ts b/src/commands/settings/rolemenu.ts index cccb6f6..ae174b3 100644 --- a/src/commands/settings/rolemenu.ts +++ b/src/commands/settings/rolemenu.ts @@ -436,8 +436,9 @@ const callback = async (interaction: CommandInteraction): Promise => { break; } case "save": { - client.database.guilds.write(interaction.guild.id, {"roleMenu.options": currentObject}); + await client.database.guilds.write(interaction.guild.id, {"roleMenu.options": currentObject}); modified = false; + await client.memory.forceUpdate(interaction.guild.id); break; } } diff --git a/src/commands/settings/stats.ts b/src/commands/settings/stats.ts index d46b57e..ecab612 100644 --- a/src/commands/settings/stats.ts +++ b/src/commands/settings/stats.ts @@ -378,9 +378,10 @@ const callback = async (interaction: CommandInteraction) => { break; } case "save": { - client.database.guilds.write(interaction.guild.id, {stats: currentObject}); + await client.database.guilds.write(interaction.guild.id, {stats: currentObject}); singleNotify("statsChannelDeleted", interaction.guild.id, true); modified = false; + await client.memory.forceUpdate(interaction.guild.id); break; } } @@ -400,4 +401,4 @@ const check = (interaction: CommandInteraction, _partial: boolean = false) => { export { command }; export { callback }; -export { check }; \ No newline at end of file +export { check }; diff --git a/src/commands/settings/tickets.ts b/src/commands/settings/tickets.ts index 2e046bf..838defb 100644 --- a/src/commands/settings/tickets.ts +++ b/src/commands/settings/tickets.ts @@ -135,6 +135,7 @@ const callback = async (interaction: CommandInteraction): Promise => { await i.deferUpdate(); await client.database.guilds.write(interaction.guild.id, { tickets: ticketData }); changesMade = false; + await client.memory.forceUpdate(interaction.guild.id); break; } case "enabled": { diff --git a/src/commands/settings/tracks.ts b/src/commands/settings/tracks.ts index d9d485d..39efede 100644 --- a/src/commands/settings/tracks.ts +++ b/src/commands/settings/tracks.ts @@ -413,6 +413,7 @@ const callback = async (interaction: CommandInteraction) => { case "save": { client.database.guilds.write(interaction.guild!.id, {tracks: tracks}); modified = false; + await client.memory.forceUpdate(interaction.guild!.id); break; } } diff --git a/src/commands/settings/verify.ts b/src/commands/settings/verify.ts index c440b75..9c091a1 100644 --- a/src/commands/settings/verify.ts +++ b/src/commands/settings/verify.ts @@ -88,6 +88,7 @@ const callback = async (interaction: CommandInteraction): Promise => { client.database.guilds.write(interaction.guild.id, {"verify": data} ) config = await client.database.guilds.read(interaction.guild.id); data = Object.assign({}, config.verify); + await client.memory.forceUpdate(interaction.guild.id); break } case "switch": { diff --git a/src/commands/settings/welcome.ts b/src/commands/settings/welcome.ts index 7584624..b2d484c 100644 --- a/src/commands/settings/welcome.ts +++ b/src/commands/settings/welcome.ts @@ -223,6 +223,7 @@ const callback = async (interaction: CommandInteraction): Promise => { await client.database.guilds.write(interaction.guild!.id, {"welcome": data}); config = await client.database.guilds.read(interaction.guild!.id); data = Object.assign({}, config.welcome); + await client.memory.forceUpdate(interaction.guild!.id) break; } case "channelDM": { @@ -297,4 +298,4 @@ const autocomplete = async (interaction: AutocompleteInteraction): Promise