From 4fb097fa70c20d83f55351455264004101f1f800 Mon Sep 17 00:00:00 2001 From: toast-ts <96593068+toast-ts@users.noreply.github.com> Date: Mon, 12 Feb 2024 19:55:45 +1100 Subject: [PATCH 1/6] Sync Sequelize v7 changes from Canary repository --- .pnp.cjs | 420 +++++++++++++++++++++---------- package.json | 4 +- src/components/DatabaseServer.ts | 2 +- src/models/MPServer.ts | 67 ++--- src/models/dailyMsgs.ts | 15 +- src/models/prohibitedWords.ts | 2 +- src/models/punishments.ts | 153 ++++++----- src/models/suggestions.ts | 2 +- src/models/tagSystem.ts | 4 +- src/models/userLevels.ts | 30 +-- src/models/ytChannels.ts | 7 +- yarn.lock | 370 ++++++++++++++++++--------- 12 files changed, 681 insertions(+), 395 deletions(-) diff --git a/.pnp.cjs b/.pnp.cjs index 30f42f8..940425d 100644 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -28,12 +28,12 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@napi-rs/canvas", "npm:0.1.45"],\ ["@octokit/rest", "npm:20.0.2"],\ + ["@sequelize/core", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:7.0.0-alpha.37"],\ ["@toast/tokenservice-client", "npm:1.0.11::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.11%2Ftokenservice-client-1.0.11.tgz"],\ ["@types/ms", "npm:0.7.34"],\ ["@types/node", "npm:20.11.17"],\ ["@types/node-cron", "npm:3.0.11"],\ ["@types/pg", "npm:8.11.0"],\ - ["@types/sequelize", "npm:4.28.20"],\ ["ansi-colors", "npm:4.1.3"],\ ["dayjs", "npm:1.11.10"],\ ["discord.js", "npm:14.14.1"],\ @@ -42,8 +42,8 @@ const RAW_RUNTIME_STATE = ["node-cron", "npm:3.0.3"],\ ["pg", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:8.11.3"],\ ["pg-hstore", "npm:2.3.4"],\ + ["postgres-array", "npm:3.0.2"],\ ["redis", "npm:4.6.13"],\ - ["sequelize", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:6.37.0"],\ ["simple-git", "npm:3.22.0"],\ ["systeminformation", "npm:5.21.24"],\ ["typescript", "patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7"],\ @@ -266,6 +266,37 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@nodelib/fs.scandir", [\ + ["npm:2.1.5", {\ + "packageLocation": "./.yarn/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-6ab2a9b8a1.zip/node_modules/@nodelib/fs.scandir/",\ + "packageDependencies": [\ + ["@nodelib/fs.scandir", "npm:2.1.5"],\ + ["@nodelib/fs.stat", "npm:2.0.5"],\ + ["run-parallel", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@nodelib/fs.stat", [\ + ["npm:2.0.5", {\ + "packageLocation": "./.yarn/cache/@nodelib-fs.stat-npm-2.0.5-01f4dd3030-012480b5ca.zip/node_modules/@nodelib/fs.stat/",\ + "packageDependencies": [\ + ["@nodelib/fs.stat", "npm:2.0.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@nodelib/fs.walk", [\ + ["npm:1.2.8", {\ + "packageLocation": "./.yarn/cache/@nodelib-fs.walk-npm-1.2.8-b4a89da548-40033e33e9.zip/node_modules/@nodelib/fs.walk/",\ + "packageDependencies": [\ + ["@nodelib/fs.walk", "npm:1.2.8"],\ + ["@nodelib/fs.scandir", "npm:2.1.5"],\ + ["fastq", "npm:1.17.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@octokit/auth-token", [\ ["npm:4.0.0", {\ "packageLocation": "./.yarn/cache/@octokit-auth-token-npm-4.0.0-9ad78a752f-60e42701e3.zip/node_modules/@octokit/auth-token/",\ @@ -607,6 +638,75 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@sequelize/core", [\ + ["npm:7.0.0-alpha.37", {\ + "packageLocation": "./.yarn/cache/@sequelize-core-npm-7.0.0-alpha.37-1b326b1eb8-dcaadb079b.zip/node_modules/@sequelize/core/",\ + "packageDependencies": [\ + ["@sequelize/core", "npm:7.0.0-alpha.37"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:7.0.0-alpha.37", {\ + "packageLocation": "./.yarn/__virtual__/@sequelize-core-virtual-e750a028ee/0/cache/@sequelize-core-npm-7.0.0-alpha.37-1b326b1eb8-dcaadb079b.zip/node_modules/@sequelize/core/",\ + "packageDependencies": [\ + ["@sequelize/core", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:7.0.0-alpha.37"],\ + ["@types/debug", "npm:4.1.12"],\ + ["@types/ibm_db", null],\ + ["@types/mariadb", null],\ + ["@types/mysql2", null],\ + ["@types/odbc", null],\ + ["@types/pg", "npm:8.11.0"],\ + ["@types/snowflake-sdk", null],\ + ["@types/sqlite3", null],\ + ["@types/tedious", null],\ + ["@types/validator", "npm:13.11.9"],\ + ["bnf-parser", "npm:3.1.6"],\ + ["dayjs", "npm:1.11.10"],\ + ["debug", "virtual:8dde907e274d6cda4b3be6cd808e5a16421eab0e2ce2f6110b97323dbadda969b2dab36e690fd106d5bd3c87e0525cade2b2ba6fb4fb0c0e439212e4cf5c851b#npm:4.3.4"],\ + ["dottie", "npm:2.0.6"],\ + ["fast-glob", "npm:3.3.2"],\ + ["ibm_db", null],\ + ["inflection", "npm:3.0.0"],\ + ["lodash", "npm:4.17.21"],\ + ["mariadb", null],\ + ["mysql2", null],\ + ["odbc", null],\ + ["pg", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:8.11.3"],\ + ["pg-connection-string", "npm:2.6.2"],\ + ["pg-hstore", "npm:2.3.4"],\ + ["retry-as-promised", "npm:7.0.4"],\ + ["semver", "npm:7.6.0"],\ + ["sequelize-pool", "npm:8.0.0"],\ + ["snowflake-sdk", null],\ + ["sqlite3", null],\ + ["tedious", null],\ + ["toposort-class", "npm:1.0.1"],\ + ["type-fest", "npm:3.13.1"],\ + ["uuid", "npm:9.0.1"],\ + ["validator", "npm:13.11.0"],\ + ["wkx", "npm:0.5.0"]\ + ],\ + "packagePeers": [\ + "@types/ibm_db",\ + "@types/mariadb",\ + "@types/mysql2",\ + "@types/odbc",\ + "@types/pg",\ + "@types/snowflake-sdk",\ + "@types/sqlite3",\ + "@types/tedious",\ + "ibm_db",\ + "mariadb",\ + "mysql2",\ + "odbc",\ + "pg",\ + "snowflake-sdk",\ + "sqlite3",\ + "tedious"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@toast/tokenservice-client", [\ ["npm:1.0.11::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.11%2Ftokenservice-client-1.0.11.tgz", {\ "packageLocation": "./.yarn/cache/@toast-tokenservice-client-npm-1.0.11-c95d3498fc-c910af2b01.zip/node_modules/@toast/tokenservice-client/",\ @@ -617,25 +717,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["@types/bluebird", [\ - ["npm:3.5.42", {\ - "packageLocation": "./.yarn/cache/@types-bluebird-npm-3.5.42-15f353048c-09ad60b083.zip/node_modules/@types/bluebird/",\ - "packageDependencies": [\ - ["@types/bluebird", "npm:3.5.42"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["@types/continuation-local-storage", [\ - ["npm:3.2.7", {\ - "packageLocation": "./.yarn/cache/@types-continuation-local-storage-npm-3.2.7-763e4dc12b-1f272b53bc.zip/node_modules/@types/continuation-local-storage/",\ - "packageDependencies": [\ - ["@types/continuation-local-storage", "npm:3.2.7"],\ - ["@types/node", "npm:20.11.17"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["@types/debug", [\ ["npm:4.1.12", {\ "packageLocation": "./.yarn/cache/@types-debug-npm-4.1.12-82a3fc4905-47876a852d.zip/node_modules/@types/debug/",\ @@ -646,15 +727,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["@types/lodash", [\ - ["npm:4.14.201", {\ - "packageLocation": "./.yarn/cache/@types-lodash-npm-4.14.201-0c286bbc0c-9b56a2a650.zip/node_modules/@types/lodash/",\ - "packageDependencies": [\ - ["@types/lodash", "npm:4.14.201"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["@types/ms", [\ ["npm:0.7.34", {\ "packageLocation": "./.yarn/cache/@types-ms-npm-0.7.34-46f5141bfd-f38d36e7b6.zip/node_modules/@types/ms/",\ @@ -695,24 +767,11 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["@types/sequelize", [\ - ["npm:4.28.20", {\ - "packageLocation": "./.yarn/cache/@types-sequelize-npm-4.28.20-a712a5ea90-8b3faec2e6.zip/node_modules/@types/sequelize/",\ - "packageDependencies": [\ - ["@types/sequelize", "npm:4.28.20"],\ - ["@types/bluebird", "npm:3.5.42"],\ - ["@types/continuation-local-storage", "npm:3.2.7"],\ - ["@types/lodash", "npm:4.14.201"],\ - ["@types/validator", "npm:13.11.6"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["@types/validator", [\ - ["npm:13.11.6", {\ - "packageLocation": "./.yarn/cache/@types-validator-npm-13.11.6-83ab3545a6-65991ba600.zip/node_modules/@types/validator/",\ + ["npm:13.11.9", {\ + "packageLocation": "./.yarn/cache/@types-validator-npm-13.11.9-ac3f0e748e-2d397c6929.zip/node_modules/@types/validator/",\ "packageDependencies": [\ - ["@types/validator", "npm:13.11.6"]\ + ["@types/validator", "npm:13.11.9"]\ ],\ "linkType": "HARD"\ }]\ @@ -754,6 +813,25 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["bnf-parser", [\ + ["npm:3.1.6", {\ + "packageLocation": "./.yarn/cache/bnf-parser-npm-3.1.6-40bea7c0c7-caaf7078e2.zip/node_modules/bnf-parser/",\ + "packageDependencies": [\ + ["bnf-parser", "npm:3.1.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["braces", [\ + ["npm:3.0.2", {\ + "packageLocation": "./.yarn/cache/braces-npm-3.0.2-782240b28a-966b1fb48d.zip/node_modules/braces/",\ + "packageDependencies": [\ + ["braces", "npm:3.0.2"],\ + ["fill-range", "npm:7.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["buffer-writer", [\ ["npm:2.0.0", {\ "packageLocation": "./.yarn/cache/buffer-writer-npm-2.0.0-5cd2ef55bc-fdca8e28c5.zip/node_modules/buffer-writer/",\ @@ -779,12 +857,12 @@ const RAW_RUNTIME_STATE = ["daggerbot-ts", "workspace:."],\ ["@napi-rs/canvas", "npm:0.1.45"],\ ["@octokit/rest", "npm:20.0.2"],\ + ["@sequelize/core", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:7.0.0-alpha.37"],\ ["@toast/tokenservice-client", "npm:1.0.11::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.11%2Ftokenservice-client-1.0.11.tgz"],\ ["@types/ms", "npm:0.7.34"],\ ["@types/node", "npm:20.11.17"],\ ["@types/node-cron", "npm:3.0.11"],\ ["@types/pg", "npm:8.11.0"],\ - ["@types/sequelize", "npm:4.28.20"],\ ["ansi-colors", "npm:4.1.3"],\ ["dayjs", "npm:1.11.10"],\ ["discord.js", "npm:14.14.1"],\ @@ -793,8 +871,8 @@ const RAW_RUNTIME_STATE = ["node-cron", "npm:3.0.3"],\ ["pg", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:8.11.3"],\ ["pg-hstore", "npm:2.3.4"],\ + ["postgres-array", "npm:3.0.2"],\ ["redis", "npm:4.6.13"],\ - ["sequelize", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:6.37.0"],\ ["simple-git", "npm:3.22.0"],\ ["systeminformation", "npm:5.21.24"],\ ["typescript", "patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7"],\ @@ -894,6 +972,20 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["fast-glob", [\ + ["npm:3.3.2", {\ + "packageLocation": "./.yarn/cache/fast-glob-npm-3.3.2-0a8cb4f2ca-222512e931.zip/node_modules/fast-glob/",\ + "packageDependencies": [\ + ["fast-glob", "npm:3.3.2"],\ + ["@nodelib/fs.stat", "npm:2.0.5"],\ + ["@nodelib/fs.walk", "npm:1.2.8"],\ + ["glob-parent", "npm:5.1.2"],\ + ["merge2", "npm:1.4.1"],\ + ["micromatch", "npm:4.0.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["fast-xml-parser", [\ ["npm:4.3.4", {\ "packageLocation": "./.yarn/cache/fast-xml-parser-npm-4.3.4-471ce88e5f-ef85910198.zip/node_modules/fast-xml-parser/",\ @@ -904,6 +996,26 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["fastq", [\ + ["npm:1.17.1", {\ + "packageLocation": "./.yarn/cache/fastq-npm-1.17.1-56d4554993-a443180068.zip/node_modules/fastq/",\ + "packageDependencies": [\ + ["fastq", "npm:1.17.1"],\ + ["reusify", "npm:1.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fill-range", [\ + ["npm:7.0.1", {\ + "packageLocation": "./.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-e260f7592f.zip/node_modules/fill-range/",\ + "packageDependencies": [\ + ["fill-range", "npm:7.0.1"],\ + ["to-regex-range", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["generic-pool", [\ ["npm:3.9.0", {\ "packageLocation": "./.yarn/cache/generic-pool-npm-3.9.0-21fff1a77f-3c632d30a6.zip/node_modules/generic-pool/",\ @@ -913,11 +1025,49 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["inflection", [\ - ["npm:1.13.4", {\ - "packageLocation": "./.yarn/cache/inflection-npm-1.13.4-102169ecb5-a0cc1b105c.zip/node_modules/inflection/",\ + ["glob-parent", [\ + ["npm:5.1.2", {\ + "packageLocation": "./.yarn/cache/glob-parent-npm-5.1.2-021ab32634-32cd106ce8.zip/node_modules/glob-parent/",\ "packageDependencies": [\ - ["inflection", "npm:1.13.4"]\ + ["glob-parent", "npm:5.1.2"],\ + ["is-glob", "npm:4.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["inflection", [\ + ["npm:3.0.0", {\ + "packageLocation": "./.yarn/cache/inflection-npm-3.0.0-1581c4d576-e8aae6abb8.zip/node_modules/inflection/",\ + "packageDependencies": [\ + ["inflection", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-extglob", [\ + ["npm:2.1.1", {\ + "packageLocation": "./.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip/node_modules/is-extglob/",\ + "packageDependencies": [\ + ["is-extglob", "npm:2.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-glob", [\ + ["npm:4.0.3", {\ + "packageLocation": "./.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-3ed74f2b0c.zip/node_modules/is-glob/",\ + "packageDependencies": [\ + ["is-glob", "npm:4.0.3"],\ + ["is-extglob", "npm:2.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-number", [\ + ["npm:7.0.0", {\ + "packageLocation": "./.yarn/cache/is-number-npm-7.0.0-060086935c-6a6c3383f6.zip/node_modules/is-number/",\ + "packageDependencies": [\ + ["is-number", "npm:7.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -968,21 +1118,22 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["moment", [\ - ["npm:2.29.4", {\ - "packageLocation": "./.yarn/cache/moment-npm-2.29.4-902943305d-157c5af5a0.zip/node_modules/moment/",\ + ["merge2", [\ + ["npm:1.4.1", {\ + "packageLocation": "./.yarn/cache/merge2-npm-1.4.1-a2507bd06c-7268db63ed.zip/node_modules/merge2/",\ "packageDependencies": [\ - ["moment", "npm:2.29.4"]\ + ["merge2", "npm:1.4.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ - ["moment-timezone", [\ - ["npm:0.5.43", {\ - "packageLocation": "./.yarn/cache/moment-timezone-npm-0.5.43-1304d8602a-f8b66f8562.zip/node_modules/moment-timezone/",\ + ["micromatch", [\ + ["npm:4.0.5", {\ + "packageLocation": "./.yarn/cache/micromatch-npm-4.0.5-cfab5d7669-a749888789.zip/node_modules/micromatch/",\ "packageDependencies": [\ - ["moment-timezone", "npm:0.5.43"],\ - ["moment", "npm:2.29.4"]\ + ["micromatch", "npm:4.0.5"],\ + ["braces", "npm:3.0.2"],\ + ["picomatch", "npm:2.3.1"]\ ],\ "linkType": "HARD"\ }]\ @@ -1186,6 +1337,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["picomatch", [\ + ["npm:2.3.1", {\ + "packageLocation": "./.yarn/cache/picomatch-npm-2.3.1-c782cfd986-60c2595003.zip/node_modules/picomatch/",\ + "packageDependencies": [\ + ["picomatch", "npm:2.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["postgres-array", [\ ["npm:2.0.0", {\ "packageLocation": "./.yarn/cache/postgres-array-npm-2.0.0-4f49dc1389-aff99e7971.zip/node_modules/postgres-array/",\ @@ -1261,6 +1421,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["queue-microtask", [\ + ["npm:1.2.3", {\ + "packageLocation": "./.yarn/cache/queue-microtask-npm-1.2.3-fcc98e4e2d-72900df061.zip/node_modules/queue-microtask/",\ + "packageDependencies": [\ + ["queue-microtask", "npm:1.2.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["redis", [\ ["npm:4.6.13", {\ "packageLocation": "./.yarn/cache/redis-npm-4.6.13-68c7e2be72-cc66182b8f.zip/node_modules/redis/",\ @@ -1285,91 +1454,40 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["semver", [\ - ["npm:7.5.4", {\ - "packageLocation": "./.yarn/cache/semver-npm-7.5.4-c4ad957fcd-985dec0d37.zip/node_modules/semver/",\ + ["reusify", [\ + ["npm:1.0.4", {\ + "packageLocation": "./.yarn/cache/reusify-npm-1.0.4-95ac4aec11-14222c9e1d.zip/node_modules/reusify/",\ "packageDependencies": [\ - ["semver", "npm:7.5.4"],\ + ["reusify", "npm:1.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["run-parallel", [\ + ["npm:1.2.0", {\ + "packageLocation": "./.yarn/cache/run-parallel-npm-1.2.0-3f47ff2034-cb4f97ad25.zip/node_modules/run-parallel/",\ + "packageDependencies": [\ + ["run-parallel", "npm:1.2.0"],\ + ["queue-microtask", "npm:1.2.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["semver", [\ + ["npm:7.6.0", {\ + "packageLocation": "./.yarn/cache/semver-npm-7.6.0-f4630729f6-1b41018df2.zip/node_modules/semver/",\ + "packageDependencies": [\ + ["semver", "npm:7.6.0"],\ ["lru-cache", "npm:6.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ - ["sequelize", [\ - ["npm:6.37.0", {\ - "packageLocation": "./.yarn/cache/sequelize-npm-6.37.0-0544e51055-3eb3c53e48.zip/node_modules/sequelize/",\ - "packageDependencies": [\ - ["sequelize", "npm:6.37.0"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:6.37.0", {\ - "packageLocation": "./.yarn/__virtual__/sequelize-virtual-acbc91f444/0/cache/sequelize-npm-6.37.0-0544e51055-3eb3c53e48.zip/node_modules/sequelize/",\ - "packageDependencies": [\ - ["sequelize", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:6.37.0"],\ - ["@types/debug", "npm:4.1.12"],\ - ["@types/ibm_db", null],\ - ["@types/mariadb", null],\ - ["@types/mysql2", null],\ - ["@types/oracledb", null],\ - ["@types/pg", "npm:8.11.0"],\ - ["@types/pg-hstore", null],\ - ["@types/snowflake-sdk", null],\ - ["@types/sqlite3", null],\ - ["@types/tedious", null],\ - ["@types/validator", "npm:13.11.6"],\ - ["debug", "virtual:8dde907e274d6cda4b3be6cd808e5a16421eab0e2ce2f6110b97323dbadda969b2dab36e690fd106d5bd3c87e0525cade2b2ba6fb4fb0c0e439212e4cf5c851b#npm:4.3.4"],\ - ["dottie", "npm:2.0.6"],\ - ["ibm_db", null],\ - ["inflection", "npm:1.13.4"],\ - ["lodash", "npm:4.17.21"],\ - ["mariadb", null],\ - ["moment", "npm:2.29.4"],\ - ["moment-timezone", "npm:0.5.43"],\ - ["mysql2", null],\ - ["oracledb", null],\ - ["pg", "virtual:20c353e2d6536e37339997f03975c6a660f4d296e664d291bd43620c6162cca8eb5ef90b0998dc9db75ff6862e5da587d0530bae26805f5fadc8f17aaa4ff794#npm:8.11.3"],\ - ["pg-connection-string", "npm:2.6.2"],\ - ["pg-hstore", "npm:2.3.4"],\ - ["retry-as-promised", "npm:7.0.4"],\ - ["semver", "npm:7.5.4"],\ - ["sequelize-pool", "npm:7.1.0"],\ - ["snowflake-sdk", null],\ - ["sqlite3", null],\ - ["tedious", null],\ - ["toposort-class", "npm:1.0.1"],\ - ["uuid", "npm:8.3.2"],\ - ["validator", "npm:13.11.0"],\ - ["wkx", "npm:0.5.0"]\ - ],\ - "packagePeers": [\ - "@types/ibm_db",\ - "@types/mariadb",\ - "@types/mysql2",\ - "@types/oracledb",\ - "@types/pg-hstore",\ - "@types/pg",\ - "@types/snowflake-sdk",\ - "@types/sqlite3",\ - "@types/tedious",\ - "ibm_db",\ - "mariadb",\ - "mysql2",\ - "oracledb",\ - "pg-hstore",\ - "pg",\ - "snowflake-sdk",\ - "sqlite3",\ - "tedious"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["sequelize-pool", [\ - ["npm:7.1.0", {\ - "packageLocation": "./.yarn/cache/sequelize-pool-npm-7.1.0-670df81ecb-eeb0837451.zip/node_modules/sequelize-pool/",\ + ["npm:8.0.0", {\ + "packageLocation": "./.yarn/cache/sequelize-pool-npm-8.0.0-e96de3b702-c449ec2f34.zip/node_modules/sequelize-pool/",\ "packageDependencies": [\ - ["sequelize-pool", "npm:7.1.0"]\ + ["sequelize-pool", "npm:8.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -1413,6 +1531,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["to-regex-range", [\ + ["npm:5.0.1", {\ + "packageLocation": "./.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-10dda13571.zip/node_modules/to-regex-range/",\ + "packageDependencies": [\ + ["to-regex-range", "npm:5.0.1"],\ + ["is-number", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["toposort-class", [\ ["npm:1.0.1", {\ "packageLocation": "./.yarn/cache/toposort-class-npm-1.0.1-aefabde69e-166cb89ecb.zip/node_modules/toposort-class/",\ @@ -1440,6 +1568,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["type-fest", [\ + ["npm:3.13.1", {\ + "packageLocation": "./.yarn/cache/type-fest-npm-3.13.1-4bd562882d-9a8a2359ad.zip/node_modules/type-fest/",\ + "packageDependencies": [\ + ["type-fest", "npm:3.13.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["typescript", [\ ["patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7", {\ "packageLocation": "./.yarn/cache/typescript-patch-4778c7998b-c93786fcc9.zip/node_modules/typescript/",\ @@ -1509,6 +1646,13 @@ const RAW_RUNTIME_STATE = ["uuid", "npm:8.3.2"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:9.0.1", {\ + "packageLocation": "./.yarn/cache/uuid-npm-9.0.1-39a8442bc6-9d0b6adb72.zip/node_modules/uuid/",\ + "packageDependencies": [\ + ["uuid", "npm:9.0.1"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["validator", [\ diff --git a/package.json b/package.json index 135e03b..b61ad0c 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "dependencies": { "@napi-rs/canvas": "0.1.45", "@octokit/rest": "20.0.2", + "@sequelize/core": "7.0.0-alpha.37", "@toast/tokenservice-client": "1.0.11", "ansi-colors": "4.1.3", "dayjs": "1.11.10", @@ -43,8 +44,8 @@ "node-cron": "3.0.3", "pg": "8.11.3", "pg-hstore": "2.3.4", + "postgres-array": "3.0.2", "redis": "4.6.13", - "sequelize": "6.37.0", "simple-git": "3.22.0", "systeminformation": "5.21.24", "undici": "6.6.2" @@ -54,7 +55,6 @@ "@types/node": "20.11.17", "@types/node-cron": "3.0.11", "@types/pg": "8.11.0", - "@types/sequelize": "4.28.20", "typescript": "5.3.3" } } diff --git a/src/components/DatabaseServer.ts b/src/components/DatabaseServer.ts index 2528c66..538c94a 100644 --- a/src/components/DatabaseServer.ts +++ b/src/components/DatabaseServer.ts @@ -1,4 +1,4 @@ -import {Sequelize} from 'sequelize'; +import {Sequelize} from '@sequelize/core'; import Logger from '../helpers/Logger.js'; import TSClient from '../helpers/TSClient.js'; diff --git a/src/models/MPServer.ts b/src/models/MPServer.ts index 5dfec2e..1773c64 100644 --- a/src/models/MPServer.ts +++ b/src/models/MPServer.ts @@ -1,5 +1,5 @@ import DatabaseServer from '../components/DatabaseServer.js'; -import {Model, DataTypes} from 'sequelize'; +import {Model, DataTypes} from '@sequelize/core'; import CacheServer from '../components/CacheServer.js'; class MPServer extends Model { @@ -57,58 +57,45 @@ export class MPServerSvc { } query = async(pattern:string)=>await this.model.sequelize.query(pattern); async fetchPlayerData(serverName:string) { - const findServerByName = await this.model.findOne({where: {serverName: serverName}}); - if (findServerByName) return findServerByName.dataValues.playerData; - else return []; + const server = await this.model.findOne({where: {serverName: serverName}}); + return server ? server.dataValues.playerData : []; } async addServer(serverName:string, ip:string, code:string) { - const findServerByName = await this.model.findOne({where: {serverName: serverName}}); - if (findServerByName) { - (await findServerByName.update({serverName: serverName, ip: ip, code: code})).save(); - await CacheServer.delete(cacheKey).then(async()=>await this.findInCache()); - } else { - await this.model.create({ - serverName: serverName, - isActive: true, - ip: ip, - code: code, - playerData: [] - }); - await CacheServer.delete(cacheKey).then(async()=>await this.findInCache()); - } + await this.model.upsert({ + serverName, + isActive: true, + ip, + code, + playerData: [] + }); + await CacheServer.delete(cacheKey).then(async()=>await this.findInCache()); } async removeServer(serverName:string) { - const findServerByName = await this.model.findOne({where: {serverName: serverName}}); - if (findServerByName) { - await this.model.destroy({where: {serverName: serverName}}); - await CacheServer.delete(cacheKey).then(async()=>await this.findInCache()); - } + await this.model.destroy({where: {serverName}}); + await CacheServer.delete(cacheKey).then(async()=>await this.findInCache()); } async toggleServerUsability(serverName:string, isActive:boolean) { - const findServerByName = await this.model.findOne({where: {serverName: serverName}}); - if (findServerByName) { - this.model.update({isActive: isActive}, {where: {serverName: serverName}}).then(async flagUpdated=>{ - if (flagUpdated) { - await CacheServer.delete(cacheKey).then(async()=>await this.findInCache()); - return true; - } - }); - } else return false; + const [updated] = await this.model.update({isActive}, {where: {serverName}}); + if (updated) { + await CacheServer.delete(cacheKey).then(async()=>await this.findInCache()); + return true; + } + return false; } async incrementPlayerCount(serverName:string, playerCount:number) { - const findServerByName = await this.model.findOne({where: {serverName: serverName}}); - if (findServerByName) { - let PD = findServerByName.dataValues.playerData; + const server = await this.model.findOne({where: {serverName}}); + if (server) { + let PD = server.dataValues.playerData; if (PD.length > 1920) PD = []; //Selfnote: 86400/45 = 1920, where 86400 is seconds in a day and 45 is the MPModule's refresh interval. PD.push(playerCount); - const updatePD = await this.model.update({playerData: PD}, {where: {serverName: serverName}}); - if (updatePD) true; - else return false; - } else return false; + await this.model.update({playerData: PD}, {where: {serverName}}); + return true; + } + return false; } async findInCache(): Promise { const cachedResult = await CacheServer.get(cacheKey, true); - let result; + let result:IServer[]; if (cachedResult) result = cachedResult; else { result = await this.model.findAll(); diff --git a/src/models/dailyMsgs.ts b/src/models/dailyMsgs.ts index 8025a3a..361c88f 100644 --- a/src/models/dailyMsgs.ts +++ b/src/models/dailyMsgs.ts @@ -1,5 +1,6 @@ import DatabaseServer from '../components/DatabaseServer.js'; -import {Model, DataTypes} from 'sequelize'; +import {Model, DataTypes} from '@sequelize/core'; +import Logger from '../helpers/Logger.js'; class dailyMsgs extends Model { declare public day: number; @@ -26,18 +27,20 @@ export class DailyMsgsSvc { tableName: 'dailymsgs', createdAt: false, updatedAt: false, + indexes: [ + {name: 'day_index', fields: ['day'], unique: true} + ], sequelize: DatabaseServer.seq }) this.model.sync(); } query = async(pattern:string)=>await this.model.sequelize.query(pattern); - nukeDays = async()=>await this.model.destroy({truncate: true}); + nukeDays = async()=>await this.model.destroy(); fetchDays = async()=>await this.model.findAll(); async newDay(formattedDate:number, total:number) { - if (await this.model.findOne({where: {day: formattedDate}})) return console.log('This day already exists!') - return await this.model.create({day: formattedDate, total: total}); + const [instance, created] = await this.model.findOrCreate({where: {day: formattedDate}, defaults: {total}}); + if (!created) return Logger.console('log', 'DailyMsgs', 'This day already exists!'); + return instance // Save previous day's total messages into database when a new day starts. } - updateDay = async(formattedDate:number, total:number)=>await this.model.update({total: total}, {where: {day: formattedDate}}); - // THIS IS FOR DEVELOPMENT PURPOSES ONLY, NOT TO BE USED IN LIVE ENVIRONMENT! } diff --git a/src/models/prohibitedWords.ts b/src/models/prohibitedWords.ts index 371cee5..2b892a8 100644 --- a/src/models/prohibitedWords.ts +++ b/src/models/prohibitedWords.ts @@ -1,5 +1,5 @@ import DatabaseServer from '../components/DatabaseServer.js'; -import {Model, DataTypes} from 'sequelize'; +import {Model, DataTypes} from '@sequelize/core'; class prohibitedWords extends Model { declare public word: string; diff --git a/src/models/punishments.ts b/src/models/punishments.ts index 783a1f7..4b795c7 100644 --- a/src/models/punishments.ts +++ b/src/models/punishments.ts @@ -1,12 +1,24 @@ import Discord from 'discord.js'; import TClient from '../client.js'; import ms from 'ms'; +import Logger from '../helpers/Logger.js'; import {Punishment} from 'src/interfaces'; import DatabaseServer from '../components/DatabaseServer.js'; -import {Model, DataTypes} from 'sequelize'; +import {Model, DataTypes} from '@sequelize/core'; import CacheServer from '../components/CacheServer.js'; import Formatters from '../helpers/Formatters.js'; +const PAST_TENSE_MAPPING = { + ban: 'banned', + softban: 'softbanned', + kick: 'kicked', + mute: 'muted', + warn: 'warned', + remind: 'reminded' +}; + +const TRANSACTION_FAILED = 'An error occurred while updating the database. See console for more details.'; + class punishments extends Model { declare public case_id: number; declare public type: string; @@ -91,13 +103,13 @@ export class PunishmentsSvc { findByCancels =(caseId:number)=>this.model.findOne({where: {cancels: caseId}}) getAllCases =()=>this.model.findAll(); async generateCaseId() { - const result = await this.model.findAll(); - return Math.max(...result.map((x:Punishment)=>x.case_id), 0) + 1; + const result = await this.model.max('case_id'); + return (result as number ?? 0) + 1; } - async findInCache():Promise { + async findInCache():Promise { const cacheKey = 'punishments'; const cachedResult = await CacheServer.get(cacheKey, true); - let result:any; + let result:Punishment[]; if (cachedResult) result = cachedResult; else { result = await this.model.findAll(); @@ -132,16 +144,7 @@ export class PunishmentsSvc { } (this.client.channels.cache.get(channel) as Discord.TextChannel).send({embeds: [embed]}); } - getPastTense(type:string) { - return { - ban: 'banned', - softban: 'softbanned', - kick: 'kicked', - mute: 'muted', - warn: 'warned', - remind: 'reminded' - }[type]; - } + getPastTense =(type:string)=>PAST_TENSE_MAPPING[type]; async punishmentAdd(type:string, options:{time?:string, interaction?:Discord.ChatInputCommandInteraction}, moderator:string, reason: string, user:Discord.User, guildUser?:Discord.GuildMember) { const {time, interaction} = options; const now = Date.now(); @@ -165,14 +168,22 @@ export class PunishmentsSvc { if (guildUser) await guildUser.send(`You've been ${this.getPastTense(type)} ${inOrFromBoolean} **${guild.name}**${durText}\n\`${reason}\` (Case #${punishment.case_id})`).catch(()=>embed.setFooter({text: 'Unable to DM a member'})); - if (['ban', 'softban'].includes(type)) { - const alreadyBanned = await guild.bans.fetch(user.id).catch(()=>null); // 172800 seconds is 48 hours, just for future reference - if (!alreadyBanned) punishmentResult = await guild.bans.create(user.id, {reason: auditLogReason, deleteMessageSeconds: 172800}).catch((err:Error)=>err.message); - else punishmentResult = `This user already exists in the guild\'s ban list.\nReason: \`${alreadyBanned?.reason}\``; - } else if (type === 'kick') punishmentResult = await guildUser?.kick(auditLogReason).catch((err:Error)=>err.message); - else if (type === 'mute') punishmentResult = await guildUser?.timeout(millisecondTime, auditLogReason).catch((err:Error)=>err.message); - - if (type === 'softban' && typeof punishmentResult !== 'string') punishmentResult = await guild.bans.remove(user.id, auditLogReason).catch((err:Error)=>err.message); + switch (type) { + case 'ban': + case 'softban': { + const alreadyBanned = await guild.bans.fetch(user.id).catch(()=>null); // 172800 seconds is 48 hours, just for future reference + if (alreadyBanned) punishmentResult = `This user already exists in the guild\'s ban list.\nReason: \`${alreadyBanned?.reason}\``; + else punishmentResult = await guild.bans.create(user.id, {reason: auditLogReason, deleteMessageSeconds: 172800}).catch((err:Error)=>err.message); + if (type === 'softban' && typeof punishmentResult !== 'string') punishmentResult = await guild.bans.remove(user.id, auditLogReason).catch((err:Error)=>err.message); + break; + } + case 'kick': + punishmentResult = await guildUser?.kick(auditLogReason).catch((err:Error)=>err.message); + break; + case 'mute': + punishmentResult = await guildUser?.timeout(millisecondTime, auditLogReason).catch((err:Error)=>err.message); + break; + } if (millisecondTime && ['ban', 'mute'].includes(type)) { punishment.endTime = now + millisecondTime; @@ -183,22 +194,27 @@ export class PunishmentsSvc { if (interaction) return interaction.editReply(punishmentResult); else return punishmentResult; } else { - const checkIfExists = await this.model.findOne({where: {case_id: punishment.case_id}}); - if (checkIfExists) this.model.update({expired: punishment.expired, time: punishment.time, endTime: punishment.endTime}, {where: {case_id: punishment.case_id}}) - else await this.model.create({ - case_id: punishment.case_id, - type: punishment.type, - member_name: punishment.member_name, - member: punishment.member, - moderator: punishment.moderator, - expired: punishment.expired, - time: punishment.time, - reason: punishment.reason, - endTime: punishment.endTime, - cancels: punishment.cancels, - duration: punishment.duration - }); - await this.createModlog(punishment); + try { // https://sequelize.org/docs/v7/querying/transactions/ + await this.model.sequelize.transaction(async transaction=>{ + await this.model.upsert({ + case_id: punishment.case_id, + type: punishment.type, + member_name: punishment.member_name, + member: punishment.member, + moderator: punishment.moderator, + expired: punishment.expired, + time: punishment.time, + reason: punishment.reason, + endTime: punishment.endTime, + cancels: punishment.cancels, + duration: punishment.duration + }, {transaction}); + await this.createModlog(punishment); + }); + } catch (err) { + Logger.console('error', 'Punishment', err); + return TRANSACTION_FAILED; + } if (interaction) return interaction.editReply({embeds: [embed]}); else return punishmentResult; @@ -217,34 +233,47 @@ export class PunishmentsSvc { let removePunishmentData:Punishment = {type: `un${punishment.type}`, case_id: ID, cancels: punishment.case_id, member_name: punishment.member_name, member: punishment.member, reason, moderator, time: now}; let removePunishmentResult:any; - if (punishment.type === 'ban') removePunishmentResult = await guild.bans.remove(punishment.member, auditLogReason).catch((err:Error)=>err.message); - else if (punishment.type === 'mute') { - if (guildUser) { - removePunishmentResult = await guildUser.timeout(null, auditLogReason).catch((err:Error)=>err.message); - guildUser.send(`You've been unmuted in **${guild.name}**.`).catch(()=>null); - } else this.model.update({expired: true}, {where: {case_id: caseId}}); - } else removePunishmentData.type = 'punishmentOverride'; + switch (punishment.type) { + case 'ban': + removePunishmentResult = await guild.bans.remove(punishment.member, auditLogReason).catch((err:Error)=>err.message); + break; + case 'mute': + if (guildUser) { + removePunishmentResult = await guildUser.timeout(null, auditLogReason).catch((err:Error)=>err.message); + guildUser.send(`You've been unmuted in **${guild.name}**.`).catch(()=>null); + } else this.model.update({expired: true}, {where: {case_id: caseId}}); + break; + default: + removePunishmentData.type = 'punishmentOverride'; + break; + } if (typeof removePunishmentResult === 'string') {// Punishment was unsuccessful if (interaction) return interaction.editReply(removePunishmentResult); else return removePunishmentResult; } else { - this.model.update({expired: true}, {where: {case_id: caseId}}).then(()=> - this.model.create({ - case_id: removePunishmentData.case_id, - type: removePunishmentData.type, - member_name: removePunishmentData.member_name, - member: removePunishmentData.member, - moderator: removePunishmentData.moderator, - expired: removePunishmentData.expired, - time: removePunishmentData.time, - reason: removePunishmentData.reason, - endTime: removePunishmentData.endTime, - cancels: removePunishmentData.cancels, - duration: removePunishmentData.duration - }) - ); - await this.createModlog(removePunishmentData); + try { // https://sequelize.org/docs/v7/querying/transactions/ + await this.model.sequelize.transaction(async transaction=>{ + await this.model.update({expired: true}, {where: {case_id: caseId}, transaction}) + await this.model.upsert({ + case_id: removePunishmentData.case_id, + type: removePunishmentData.type, + member_name: removePunishmentData.member_name, + member: removePunishmentData.member, + moderator: removePunishmentData.moderator, + expired: removePunishmentData.expired, + time: removePunishmentData.time, + reason: removePunishmentData.reason, + endTime: removePunishmentData.endTime, + cancels: removePunishmentData.cancels, + duration: removePunishmentData.duration + }, {transaction}); + await this.createModlog(removePunishmentData); + }); + } catch (err) { + Logger.console('error', 'Punishment', err); + return TRANSACTION_FAILED; + } if (interaction) return interaction.reply({embeds: [new this.client.embed() .setColor(this.client.config.embedColor) diff --git a/src/models/suggestions.ts b/src/models/suggestions.ts index 5414d98..1b9b8a9 100644 --- a/src/models/suggestions.ts +++ b/src/models/suggestions.ts @@ -1,5 +1,5 @@ import DatabaseServer from '../components/DatabaseServer.js'; -import {Model, DataTypes} from 'sequelize'; +import {Model, DataTypes} from '@sequelize/core'; class suggestions extends Model { declare public id: number; diff --git a/src/models/tagSystem.ts b/src/models/tagSystem.ts index e727c4a..65656fc 100644 --- a/src/models/tagSystem.ts +++ b/src/models/tagSystem.ts @@ -2,7 +2,7 @@ import TClient from '../client.js'; import MessageTool from '../helpers/MessageTool.js'; import CacheServer from '../components/CacheServer.js'; import DatabaseServer from '../components/DatabaseServer.js'; -import {Model, DataTypes} from 'sequelize'; +import {Model, DataTypes} from '@sequelize/core'; import {ChatInputCommandInteraction, Snowflake} from 'discord.js'; class tagsystem extends Model { @@ -79,7 +79,7 @@ export class TagSystemSvc { async findInCache(): Promise { const cacheKey = 'tags'; const cachedResult = await CacheServer.get(cacheKey, true); - let result; + let result:Tags[]; if (cachedResult) result = cachedResult; else { result = await this.model.findAll(); diff --git a/src/models/userLevels.ts b/src/models/userLevels.ts index 87fb146..cb3f499 100644 --- a/src/models/userLevels.ts +++ b/src/models/userLevels.ts @@ -2,7 +2,7 @@ import Discord from 'discord.js'; import TClient from '../client.js'; import MessageTool from '../helpers/MessageTool.js'; import DatabaseServer from '../components/DatabaseServer.js'; -import {Model, DataTypes} from 'sequelize'; +import {Model, DataTypes} from '@sequelize/core'; import {writeFileSync} from 'node:fs'; import cron from 'node-cron'; import Logger from '../helpers/Logger.js'; @@ -61,9 +61,9 @@ export class UserLevelsSvc { fetchEveryone = async()=>await this.model.findAll(); fetchUser = async(userId:string)=>await this.model.findByPk(userId); deleteUser = async(userId:string)=>await this.model.destroy({where: {id: userId}}); - async modifyUser(userId:string, updatedMessages:number) { - await this.model.update({messages: updatedMessages}, {where: {id: userId}}); - return (await this.model.findByPk(userId)).dataValues; + async modifyUser(userId:string, messages:number) { + const [_, [updatedUser]] = await this.model.update({messages}, {where: {id: userId}, returning: true}); + return updatedUser.dataValues; } async blockUser(userId:string, duration:number):Promise { const data = await this.model.findByPk(userId); @@ -74,8 +74,8 @@ export class UserLevelsSvc { } } async getActiveUsers() { - const members = (await this.model.findAll()).sort((a,b)=>b.dataValues.messages-a.dataValues.messages); - return members.slice(0, 5); + const members = await this.model.findAll({order: [['messages', 'DESC']], limit: 5}); + return members; } async messageIncremental(userId:string) { const data = await this.model.findByPk(userId); @@ -119,7 +119,7 @@ export class UserLevelsSvc { Logger.console('log', 'Cron:resetAllData', `Counted ${performCountBeforeReset.toLocaleString()} members before reset`); await this.client.dailyMsgs.nukeDays(); - await this.model.drop().then(async()=>await this.model.sync()); + await this.model.truncate(); try { // Send notification to dcServer's logs channel after cronjob is complete. @@ -139,16 +139,12 @@ export class UserLevelsSvc { // Reset LRSstart to current Epoch and save it to config file const newEpoch = new Date().getTime(); - this.client.config.LRSstart = newEpoch; - const logText = `Resetting LRSstart to \`${newEpoch}\`, saved to config file`; - Logger.console('log', 'DailyMsgs', logText); - (this.client.channels.resolve(this.client.config.dcServer.channels.logs) as Discord.TextChannel).send({embeds: [new this.client.embed() - .setColor(this.client.config.embedColorXmas) - .setTitle('Happy New Years! Level System is clean!') - .setDescription(logText) - ]}).catch(err=>console.log(err)); - writeFileSync('src/config.json', JSON.stringify(this.client.config, null, 2)); - Logger.console('log', 'Cron:resetAllData', 'Job completed'); + if (this.client.config.LRSstart !== newEpoch) { + this.client.config.LRSstart = newEpoch; + Logger.console('log', 'Cron:resetAllData', `Resetting LRSstart to \`${newEpoch}\`, saved to config file`); + writeFileSync('src/config.json', JSON.stringify(this.client.config, null, 2)); + Logger.console('log', 'Cron:resetAllData', 'Job completed'); + } }) } algorithm = (level:number)=>level*level*15; diff --git a/src/models/ytChannels.ts b/src/models/ytChannels.ts index 5ba94e4..ca3f508 100644 --- a/src/models/ytChannels.ts +++ b/src/models/ytChannels.ts @@ -1,5 +1,5 @@ import DatabaseServer from '../components/DatabaseServer.js'; -import {Model, DataTypes} from 'sequelize'; +import {Model, DataTypes} from '@sequelize/core'; class youtubeChannels extends Model { declare public ytchannel: string; @@ -36,9 +36,8 @@ export class YouTubeChannelsSvc { } query = async(pattern:string)=>await this.model.sequelize.query(pattern); async addChannel(YTChannelID:string, DCChannelID:string, DCRole:string) { - if (await this.model.findOne({where: {ytchannel: YTChannelID}})) return false; - await this.model.create({ytchannel: YTChannelID, dcchannel: DCChannelID, dcrole: DCRole}); - return true; + const [_, created] = await this.model.findOrCreate({where: {ytchannel: YTChannelID}, defaults: {dcchannel: DCChannelID, dcrole: DCRole}}); + return created; } delChannel = async(YTChannelID:string)=>await this.model.destroy({where: {ytchannel: YTChannelID}}); getChannels = async()=>await this.model.findAll(); diff --git a/yarn.lock b/yarn.lock index 466e06f..e44de01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -206,6 +206,33 @@ __metadata: languageName: node linkType: hard +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10/6ab2a9b8a1d67b067922c36f259e3b3dfd6b97b219c540877a4944549a4d49ea5ceba5663905ab5289682f1f3c15ff441d02f0447f620a42e1cb5e1937174d4b + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10/012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10/40033e33e96e97d77fba5a238e4bba4487b8284678906a9f616b5579ddaf868a18874c0054a75402c9fbaaa033a25ceae093af58c9c30278e35c23c9479e79b0 + languageName: node + linkType: hard + "@octokit/auth-token@npm:^4.0.0": version: 4.0.0 resolution: "@octokit/auth-token@npm:4.0.0" @@ -429,6 +456,50 @@ __metadata: languageName: node linkType: hard +"@sequelize/core@npm:7.0.0-alpha.37": + version: 7.0.0-alpha.37 + resolution: "@sequelize/core@npm:7.0.0-alpha.37" + dependencies: + "@types/debug": "npm:^4.1.7" + "@types/validator": "npm:^13.7.5" + bnf-parser: "npm:3.1.6" + dayjs: "npm:^1.11.5" + debug: "npm:^4.3.4" + dottie: "npm:^2.0.2" + fast-glob: "npm:^3.2.12" + inflection: "npm:^3.0.0" + lodash: "npm:^4.17.21" + pg-connection-string: "npm:^2.5.0" + pg-hstore: "npm:^2.3.4" + retry-as-promised: "npm:^7.0.3" + semver: "npm:^7.3.7" + sequelize-pool: "npm:^8.0.0" + toposort-class: "npm:^1.0.1" + type-fest: "npm:^3.0.0" + uuid: "npm:^9.0.0" + validator: "npm:^13.7.0" + wkx: "npm:^0.5.0" + peerDependenciesMeta: + ibm_db: + optional: true + mariadb: + optional: true + mysql2: + optional: true + odbc: + optional: true + pg: + optional: true + snowflake-sdk: + optional: true + sqlite3: + optional: true + tedious: + optional: true + checksum: 10/dcaadb079bc5fcc505efbfff18ca8165dae4a24ad9c9f9f99e91474343e27986ceef702a69db0ab5406988b151dfa76f05e536425c08b29e80e10da70bb437fd + languageName: node + linkType: hard + "@toast/tokenservice-client@npm:1.0.11": version: 1.0.11 resolution: "@toast/tokenservice-client@npm:1.0.11::__archiveUrl=https%3A%2F%2Fgit.toast-server.net%2Fapi%2Fpackages%2Ftoast%2Fnpm%2F%2540toast%252Ftokenservice-client%2F-%2F1.0.11%2Ftokenservice-client-1.0.11.tgz" @@ -438,23 +509,7 @@ __metadata: languageName: node linkType: hard -"@types/bluebird@npm:*": - version: 3.5.42 - resolution: "@types/bluebird@npm:3.5.42" - checksum: 10/09ad60b083f916c7611936d3c70986df8f2eae11e46768ab7901d86bee5b1ca6b00cd9ef8cc0d3761256e2bc4ada3388e5529f71745a6b3d7602e868e3530310 - languageName: node - linkType: hard - -"@types/continuation-local-storage@npm:*": - version: 3.2.7 - resolution: "@types/continuation-local-storage@npm:3.2.7" - dependencies: - "@types/node": "npm:*" - checksum: 10/1f272b53bc56774773b7cbd6019ae26843599fb9073cb70c3dda13f8bfac5eabb6c8bf33f548a37be9c6d772eb9a4ab4399bc7d25bc82588655f51f572df79f3 - languageName: node - linkType: hard - -"@types/debug@npm:^4.1.8": +"@types/debug@npm:^4.1.7": version: 4.1.12 resolution: "@types/debug@npm:4.1.12" dependencies: @@ -463,13 +518,6 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:*": - version: 4.14.201 - resolution: "@types/lodash@npm:4.14.201" - checksum: 10/9b56a2a650880045343055e63c7ad73df97188453aa3de8375dc97670748d467f6f4a3b59d689f4ae45dd947d4c0b3ecd873763910336238736056dce20cfe56 - languageName: node - linkType: hard - "@types/ms@npm:*, @types/ms@npm:0.7.34": version: 0.7.34 resolution: "@types/ms@npm:0.7.34" @@ -504,22 +552,10 @@ __metadata: languageName: node linkType: hard -"@types/sequelize@npm:4.28.20": - version: 4.28.20 - resolution: "@types/sequelize@npm:4.28.20" - dependencies: - "@types/bluebird": "npm:*" - "@types/continuation-local-storage": "npm:*" - "@types/lodash": "npm:*" - "@types/validator": "npm:*" - checksum: 10/8b3faec2e650ee299ae8a8a06bab7bd928131938ba34c7faa1d5c099682d6649e7aa68b0540a3e4883db7e3bc10d043ae3f23624d11b42a60f6bcbd40800ffac - languageName: node - linkType: hard - -"@types/validator@npm:*, @types/validator@npm:^13.7.17": - version: 13.11.6 - resolution: "@types/validator@npm:13.11.6" - checksum: 10/65991ba60029361b279009efb16cf08a576002742c3a5b84e50e19f74083dafb51cdc697ad54e94befb298c46a468b554844552b9ce78663a4cf7e2030a907f6 +"@types/validator@npm:^13.7.5": + version: 13.11.9 + resolution: "@types/validator@npm:13.11.9" + checksum: 10/2d397c69293cc726e0cf1b4c74c563ca4e459b00f216f3ff0ac184c9648103be27169e8c67f85be9c6e7a3fcbb149c6add66a2547b185a1b25aa79e4b61261bd languageName: node linkType: hard @@ -553,6 +589,22 @@ __metadata: languageName: node linkType: hard +"bnf-parser@npm:3.1.6": + version: 3.1.6 + resolution: "bnf-parser@npm:3.1.6" + checksum: 10/caaf7078e2a5a9ab97f7f0b65eb1d034b5f5b9f80b189fee9ff3b9aa36dad79820b12f978eb079a7c8b3da37a7bd65b763313deee5058fc76c5d6900d2e3b981 + languageName: node + linkType: hard + +"braces@npm:^3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: "npm:^7.0.1" + checksum: 10/966b1fb48d193b9d155f810e5efd1790962f2c4e0829f8440b8ad236ba009222c501f70185ef732fef17a4c490bb33a03b90dab0631feafbdf447da91e8165b1 + languageName: node + linkType: hard + "buffer-writer@npm:2.0.0": version: 2.0.0 resolution: "buffer-writer@npm:2.0.0" @@ -573,12 +625,12 @@ __metadata: dependencies: "@napi-rs/canvas": "npm:0.1.45" "@octokit/rest": "npm:20.0.2" + "@sequelize/core": "npm:7.0.0-alpha.37" "@toast/tokenservice-client": "npm:1.0.11" "@types/ms": "npm:0.7.34" "@types/node": "npm:20.11.17" "@types/node-cron": "npm:3.0.11" "@types/pg": "npm:8.11.0" - "@types/sequelize": "npm:4.28.20" ansi-colors: "npm:4.1.3" dayjs: "npm:1.11.10" discord.js: "npm:14.14.1" @@ -587,8 +639,8 @@ __metadata: node-cron: "npm:3.0.3" pg: "npm:8.11.3" pg-hstore: "npm:2.3.4" + postgres-array: "npm:3.0.2" redis: "npm:4.6.13" - sequelize: "npm:6.37.0" simple-git: "npm:3.22.0" systeminformation: "npm:5.21.24" typescript: "npm:5.3.3" @@ -596,7 +648,7 @@ __metadata: languageName: unknown linkType: soft -"dayjs@npm:1.11.10": +"dayjs@npm:1.11.10, dayjs@npm:^1.11.5": version: 1.11.10 resolution: "dayjs@npm:1.11.10" checksum: 10/27e8f5bc01c0a76f36c656e62ab7f08c2e7b040b09e613cd4844abf03fb258e0350f0a83b02c887b84d771c1f11e092deda0beef8c6df2a1afbc3f6c1fade279 @@ -651,7 +703,7 @@ __metadata: languageName: node linkType: hard -"dottie@npm:^2.0.6": +"dottie@npm:^2.0.2": version: 2.0.6 resolution: "dottie@npm:2.0.6" checksum: 10/698731cfa2c1b530ba3491fa864dc572678a2a6de801f25912e2e4d7d4669ae013b696711786016bf41c7b6f98057c678503f14550bb171b3f70cdadffb9218f @@ -665,6 +717,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.2.12": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 10/222512e9315a0efca1276af9adb2127f02105d7288fa746145bf45e2716383fb79eb983c89601a72a399a56b7c18d38ce70457c5466218c5f13fad957cee16df + languageName: node + linkType: hard + "fast-xml-parser@npm:4.3.4": version: 4.3.4 resolution: "fast-xml-parser@npm:4.3.4" @@ -676,6 +741,24 @@ __metadata: languageName: node linkType: hard +"fastq@npm:^1.6.0": + version: 1.17.1 + resolution: "fastq@npm:1.17.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10/a443180068b527dd7b3a63dc7f2a47ceca2f3e97b9c00a1efe5538757e6cc4056a3526df94308075d7727561baf09ebaa5b67da8dcbddb913a021c5ae69d1f69 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10/e260f7592fd196b4421504d3597cc76f4a1ca7a9488260d533b611fc3cefd61e9a9be1417cb82d3b01ad9f9c0ff2dbf258e1026d2445e26b0cf5148ff4250429 + languageName: node + linkType: hard + "generic-pool@npm:3.9.0": version: 3.9.0 resolution: "generic-pool@npm:3.9.0" @@ -683,10 +766,42 @@ __metadata: languageName: node linkType: hard -"inflection@npm:^1.13.4": - version: 1.13.4 - resolution: "inflection@npm:1.13.4" - checksum: 10/a0cc1b105ccbda9607b5d1610b5c7aa35456ca06b7f3573a47c677e1f829052859cacc36601c3c07de89cb756616a440814ef2d190a6ae70398e6aa6efc2a547 +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10/32cd106ce8c0d83731966d31517adb766d02c3812de49c30cfe0675c7c0ae6630c11214c54a5ae67aca882cf738d27fd7768f21aa19118b9245950554be07247 + languageName: node + linkType: hard + +"inflection@npm:^3.0.0": + version: 3.0.0 + resolution: "inflection@npm:3.0.0" + checksum: 10/e8aae6abb872a8aa19184a1b84470fff7120806329c78011befcf50bce04a7b0d65012ac373f2cc5caeaaf241874c7ae20a26038ff7dbe0cdae0b863f25b5e02 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10/df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10/3ed74f2b0cdf4f401f38edb0442ddfde3092d79d7d35c9919c86641efdbcbb32e45aa3c0f70ce5eecc946896cd5a0f26e4188b9f2b881876f7cb6c505b82da11 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10/6a6c3383f68afa1e05b286af866017c78f1226d43ac8cb064e115ff9ed85eb33f5c4f7216c96a71e4dfea289ef52c5da3aef5bbfade8ffe47a0465d70c0c8e86 languageName: node linkType: hard @@ -727,19 +842,20 @@ __metadata: languageName: node linkType: hard -"moment-timezone@npm:^0.5.43": - version: 0.5.43 - resolution: "moment-timezone@npm:0.5.43" - dependencies: - moment: "npm:^2.29.4" - checksum: 10/f8b66f8562960d6c2ec90ea7e2ca8c10bd5f5cf5ced2eaaac83deb1011b145d0154e8d77018cf5e913d489898a343122a3d815768809653ab039306dce1db1eb +"merge2@npm:^1.3.0": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10/7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 languageName: node linkType: hard -"moment@npm:^2.29.4": - version: 2.29.4 - resolution: "moment@npm:2.29.4" - checksum: 10/157c5af5a0ba8196e577bc67feb583303191d21ba1f7f2af30b3b40d4c63a64d505ba402be2a1454832082fac6be69db1e0d186c3279dae191e6634b0c33705c +"micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: "npm:^3.0.2" + picomatch: "npm:^2.3.1" + checksum: 10/a749888789fc15cac0e03273844dbd749f9f8e8d64e70c564bcf06a033129554c789bb9e30d7566d7ff6596611a08e58ac12cf2a05f6e3c9c47c50c4c7e12fa2 languageName: node linkType: hard @@ -796,14 +912,14 @@ __metadata: languageName: node linkType: hard -"pg-connection-string@npm:^2.6.1, pg-connection-string@npm:^2.6.2": +"pg-connection-string@npm:^2.5.0, pg-connection-string@npm:^2.6.2": version: 2.6.2 resolution: "pg-connection-string@npm:2.6.2" checksum: 10/22265882c3b6f2320785378d0760b051294a684989163d5a1cde4009e64e84448d7bf67d9a7b9e7f69440c3ee9e2212f9aa10dd17ad6773f6143c6020cebbcb5 languageName: node linkType: hard -"pg-hstore@npm:2.3.4": +"pg-hstore@npm:2.3.4, pg-hstore@npm:^2.3.4": version: 2.3.4 resolution: "pg-hstore@npm:2.3.4" dependencies: @@ -903,6 +1019,20 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10/60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc + languageName: node + linkType: hard + +"postgres-array@npm:3.0.2, postgres-array@npm:~3.0.1": + version: 3.0.2 + resolution: "postgres-array@npm:3.0.2" + checksum: 10/0159517e4e5f263bf9e324f0c4d3c10244a294021f2b5980abc8c23afdb965370a7fc0c82012fce4d28e83186ad089b6476b05fcef6c88f8e43e37a3a2fa0ad5 + languageName: node + linkType: hard + "postgres-array@npm:~2.0.0": version: 2.0.0 resolution: "postgres-array@npm:2.0.0" @@ -910,13 +1040,6 @@ __metadata: languageName: node linkType: hard -"postgres-array@npm:~3.0.1": - version: 3.0.2 - resolution: "postgres-array@npm:3.0.2" - checksum: 10/0159517e4e5f263bf9e324f0c4d3c10244a294021f2b5980abc8c23afdb965370a7fc0c82012fce4d28e83186ad089b6476b05fcef6c88f8e43e37a3a2fa0ad5 - languageName: node - linkType: hard - "postgres-bytea@npm:~1.0.0": version: 1.0.0 resolution: "postgres-bytea@npm:1.0.0" @@ -970,6 +1093,13 @@ __metadata: languageName: node linkType: hard +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10/72900df0616e473e824202113c3df6abae59150dfb73ed13273503127235320e9c8ca4aaaaccfd58cf417c6ca92a6e68ee9a5c3182886ae949a768639b388a7b + languageName: node + linkType: hard + "redis@npm:4.6.13": version: 4.6.13 resolution: "redis@npm:4.6.13" @@ -984,71 +1114,44 @@ __metadata: languageName: node linkType: hard -"retry-as-promised@npm:^7.0.4": +"retry-as-promised@npm:^7.0.3": version: 7.0.4 resolution: "retry-as-promised@npm:7.0.4" checksum: 10/cd9fd20e990c6980a2979348fbc198aa4a065f03242c1cd7782372da7054253927e0803291c843db07255a38d255936cc0f9da55bf826c9f75443a9dedb8bf4b languageName: node linkType: hard -"semver@npm:^7.5.4": - version: 7.5.4 - resolution: "semver@npm:7.5.4" +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10/14222c9e1d3f9ae01480c50d96057228a8524706db79cdeb5a2ce5bb7070dd9f409a6f84a02cbef8cdc80d39aef86f2dd03d155188a1300c599b05437dcd2ffb + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10/cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"semver@npm:^7.3.7": + version: 7.6.0 + resolution: "semver@npm:7.6.0" dependencies: lru-cache: "npm:^6.0.0" bin: semver: bin/semver.js - checksum: 10/985dec0d372370229a262c737063860fabd4a1c730662c1ea3200a2f649117761a42184c96df62a0e885e76fbd5dace41087d6c1ac0351b13c0df5d6bcb1b5ac + checksum: 10/1b41018df2d8aca5a1db4729985e8e20428c650daea60fcd16e926e9383217d00f574fab92d79612771884a98d2ee2a1973f49d630829a8d54d6570defe62535 languageName: node linkType: hard -"sequelize-pool@npm:^7.1.0": - version: 7.1.0 - resolution: "sequelize-pool@npm:7.1.0" - checksum: 10/eeb0837451afb245cf3aece5d93c50ef051bd7f4397c4e578f8cbf41ebf485e0acd887c1aa3f4394b80dc874229a32ce5aafeaa2f00ec3ecc5dfcc518bd7bf7e - languageName: node - linkType: hard - -"sequelize@npm:6.37.0": - version: 6.37.0 - resolution: "sequelize@npm:6.37.0" - dependencies: - "@types/debug": "npm:^4.1.8" - "@types/validator": "npm:^13.7.17" - debug: "npm:^4.3.4" - dottie: "npm:^2.0.6" - inflection: "npm:^1.13.4" - lodash: "npm:^4.17.21" - moment: "npm:^2.29.4" - moment-timezone: "npm:^0.5.43" - pg-connection-string: "npm:^2.6.1" - retry-as-promised: "npm:^7.0.4" - semver: "npm:^7.5.4" - sequelize-pool: "npm:^7.1.0" - toposort-class: "npm:^1.0.1" - uuid: "npm:^8.3.2" - validator: "npm:^13.9.0" - wkx: "npm:^0.5.0" - peerDependenciesMeta: - ibm_db: - optional: true - mariadb: - optional: true - mysql2: - optional: true - oracledb: - optional: true - pg: - optional: true - pg-hstore: - optional: true - snowflake-sdk: - optional: true - sqlite3: - optional: true - tedious: - optional: true - checksum: 10/3eb3c53e487edb521f12ffdfffb2a5b22adf070378a94bbce4baa63998f36f07a13279fa26a37a6950b588a405addf5d6169814dd140315b337ae4ee88303e0c +"sequelize-pool@npm:^8.0.0": + version: 8.0.0 + resolution: "sequelize-pool@npm:8.0.0" + checksum: 10/c449ec2f3444f75372fde505bf26a22724ee7336192fd7937e546759bca19256fefd39970230b4eb11f1dcb106607dae7085e14e3dc8e3c1a90d30f7874de204 languageName: node linkType: hard @@ -1087,6 +1190,15 @@ __metadata: languageName: node linkType: hard +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10/10dda13571e1f5ad37546827e9b6d4252d2e0bc176c24a101252153ef435d83696e2557fe128c4678e4e78f5f01e83711c703eef9814eb12dab028580d45980a + languageName: node + linkType: hard + "toposort-class@npm:^1.0.1": version: 1.0.1 resolution: "toposort-class@npm:1.0.1" @@ -1108,6 +1220,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^3.0.0": + version: 3.13.1 + resolution: "type-fest@npm:3.13.1" + checksum: 10/9a8a2359ada34c9b3affcaf3a8f73ee14c52779e89950db337ce66fb74c3399776c697c99f2532e9b16e10e61cfdba3b1c19daffb93b338b742f0acd0117ce12 + languageName: node + linkType: hard + "typescript@npm:5.3.3": version: 5.3.3 resolution: "typescript@npm:5.3.3" @@ -1176,7 +1295,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:8.3.2, uuid@npm:^8.3.2": +"uuid@npm:8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" bin: @@ -1185,7 +1304,16 @@ __metadata: languageName: node linkType: hard -"validator@npm:^13.9.0": +"uuid@npm:^9.0.0": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 10/9d0b6adb72b736e36f2b1b53da0d559125ba3e39d913b6072f6f033e0c87835b414f0836b45bcfaf2bdf698f92297fea1c3cc19b0b258bc182c9c43cc0fab9f2 + languageName: node + linkType: hard + +"validator@npm:^13.7.0": version: 13.11.0 resolution: "validator@npm:13.11.0" checksum: 10/4bf094641eb71729c06a42d669840e7189597ba655a8264adabac9bf03f95cd6fde5fbc894b0a13ee861bd4a852f56d2afdc9391aeaeb3fc0f9633a974140e12 From 7ca33f1de8cd76d53593e1ee24ece5e213e58195 Mon Sep 17 00:00:00 2001 From: toast-ts <96593068+toast-ts@users.noreply.github.com> Date: Sun, 25 Feb 2024 20:01:04 +1100 Subject: [PATCH 2/6] Clean up some of the stuff --- package.json | 2 +- src/components/Automod.ts | 5 +++-- src/components/DatabaseServer.ts | 7 ++++--- src/events/messageCreate.ts | 9 +++++---- src/index.ts | 17 +++++++---------- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index da610b9..b3ed467 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "url": "git+https://github.com/toast-ts/Daggerbot-TS.git" }, "scripts": { - "dev": "yarn tsc && yarn node . src/DB-Beta.config.json daggerbotbeta", + "dev": "yarn tsc && yarn node . src/DB-Beta.config.json daggerbotbeta true", "sdk": "yarn dlx @yarnpkg/sdks vscode" }, "author": "Toast", diff --git a/src/components/Automod.ts b/src/components/Automod.ts index fd51dd7..35e7026 100644 --- a/src/components/Automod.ts +++ b/src/components/Automod.ts @@ -2,6 +2,7 @@ import Discord from 'discord.js'; import TClient from '../client.js'; import Logger from '../helpers/Logger.js'; export default class Automoderator { + private static logPrefix:string = 'Automod'; private static lockQuery:Set = new Set(); static scanMsg =(message:Discord.Message)=>message.content.toLowerCase().replaceAll(/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?\n?0-9]|[]|ing\b|ed\b/g, '').split(' ').join(''); static async repeatedMessages(client:TClient, message:Discord.Message, action:'mute'|'ban'|'softban', thresholdTime:number, thresholdAmount:number, type:string, duration:string, reason:string) { @@ -17,11 +18,11 @@ export default class Automoderator { // If the count has reached the threshold amount, punish the user like most daddy would do to their child. if (!this.lockQuery.has(message.author.id)) { this.lockQuery.add(message.author.id); - Logger.console('log', 'AUTOMOD', `Lock acquired for ${message.author.tag} with reason: ${reason}`); + Logger.console('log', this.logPrefix, `Lock acquired for ${message.author.tag} with reason: ${reason}`); await client.punishments.punishmentAdd(action, {time: duration}, client.user.id, `AUTOMOD:${reason}`, message.author, message.member as Discord.GuildMember); setTimeout(()=>{ this.lockQuery.delete(message.author.id); - Logger.console('log', 'AUTOMOD', `Lock released for ${message.author.tag}`); + Logger.console('log', this.logPrefix, `Lock released for ${message.author.tag}`); }, 3500); // Wait 3.5 seconds before releasing the lock. } delete client.repeatedMessages[message.author.id]; diff --git a/src/components/DatabaseServer.ts b/src/components/DatabaseServer.ts index 2528c66..1c4a890 100644 --- a/src/components/DatabaseServer.ts +++ b/src/components/DatabaseServer.ts @@ -4,22 +4,23 @@ import TSClient from '../helpers/TSClient.js'; const postgresUri = (await TSClient()).postgres_uri; export default class DatabaseServer { + private static logPrefix:string = 'Database'; public static seq:Sequelize = new Sequelize(postgresUri, {dialect: 'postgres', logging: false, ssl: false, pool: {max: 10, min: 0, acquire: 15000, idle: 8000}}) public static async init() { try { await this.seq.authenticate(); this.healthCheck(); } catch { - Logger.console('error', 'Database', 'Cannot initialize Sequelize -- is PostgreSQL running?'); + Logger.console('error', this.logPrefix, 'Cannot initialize Sequelize -- is PostgreSQL running?'); process.exit(1); } } private static async healthCheck() { try { await this.seq.query('SELECT 1'); - Logger.console('log', 'Database', 'Connection to PostgreSQL has been established'); + Logger.console('log', this.logPrefix, 'Connection to PostgreSQL has been established'); } catch { - Logger.console('error', 'Database', 'Connection to PostgreSQL has been lost'); + Logger.console('error', this.logPrefix, 'Connection to PostgreSQL has been lost'); } } } diff --git a/src/events/messageCreate.ts b/src/events/messageCreate.ts index a1f080b..b4c7eb8 100644 --- a/src/events/messageCreate.ts +++ b/src/events/messageCreate.ts @@ -15,21 +15,22 @@ export default class MessageCreate { if (client.config.botSwitches.automod && !message.member?.roles.cache.has(client.config.dcServer.roles.dcmod) && !message.member?.roles.cache.has(client.config.dcServer.roles.admin) && message.guildId === client.config.dcServer.id) { const automodFailReason = 'msg got possibly deleted by another bot.'; + const automodLog = 'Automod:'; const automodRules = { phishingDetection: { check: async()=>await __PRIVATE__.phishingDetection(message), action: async()=>{ automodded = true; - message.delete().catch(()=>Logger.console('log', 'AUTOMOD:PHISHING', automodFailReason)); + message.delete().catch(()=>Logger.console('log', `${automodLog}Phishing`, automodFailReason)); message.channel.send('Phishing links aren\'t allowed here. Nice try though!').then(msg=>setTimeout(()=>msg.delete(), 15000)); - await Automoderator.repeatedMessages(client, message, 'softban', 60000, 3, 'phish', '15m', 'Phishing/scam link'); + await Automoderator.repeatedMessages(client, message, 'softban', 60000, 3, 'phish', '15m', 'Phishing scam link'); } }, prohibitedWords: { check: async()=>await client.prohibitedWords.findWord(Automoderator.scanMsg(message)), action: async()=>{ automodded = true; - message.delete().catch(()=>Logger.console('log', 'AUTOMOD:PROHIBITEDWORDS', automodFailReason)); + message.delete().catch(()=>Logger.console('log', `${automodLog}ProhibitedWords`, automodFailReason)); message.channel.send('That word isn\'t allowed here.').then(x=>setTimeout(()=>x.delete(), 15000)); await Automoderator.repeatedMessages(client, message, 'mute', 30000, 3, 'bw', '30m', 'Prohibited word spam'); } @@ -40,7 +41,7 @@ export default class MessageCreate { const validInvite = await client.fetchInvite(message.content.split(' ').find(x=>x.includes('discord.gg/'))).catch(()=>null); if (validInvite && validInvite.guild?.id !== client.config.dcServer.id) { automodded = true; - message.delete().catch(()=>Logger.console('log', 'AUTOMOD:ADVERTISEMENT', automodFailReason)); + message.delete().catch(()=>Logger.console('log', `${automodLog}Advertisement`, automodFailReason)); message.channel.send('Please don\'t advertise other Discord servers.').then(x=>setTimeout(()=>x.delete(), 15000)); await Automoderator.repeatedMessages(client, message, 'ban', 60000, 4, 'adv', null, 'Discord advertisement'); } diff --git a/src/index.ts b/src/index.ts index 557f8e9..4774a08 100644 --- a/src/index.ts +++ b/src/index.ts @@ -21,7 +21,7 @@ process.on('unhandledRejection', (error: Error)=>_(error, 'unhandledRejection')) process.on('uncaughtException', (error: Error)=>_(error, 'uncaughtException')); process.on('error', (error: Error)=>_(error, 'processError')); client.on('error', (error: Error)=>_(error, 'clientError')); -if (process.argv[3] ?? null) client.on('debug', console.log); +if ((typeof process.argv[4] === 'string' && process.argv[4] === 'true') ?? null) client.on('debug', console.log); // Interval timers for modules setInterval(async()=>await MPModule(client), refreshTimerSecs); @@ -33,9 +33,8 @@ setInterval(async()=>{ for await (const thread of forum.threads.cache.values()) { await thread.messages.fetch(); if (!thread.archived && thread.lastMessage.createdTimestamp <= Date.now() - 1555200000) {// check if thread is inactive for over 18 days - await thread.setLocked(true).catch(()=>null); - await thread.setArchived(true, 'Inactive for over 18 days').catch(()=>null); - Logger.console('log', 'ThreadTimer', `${thread.name} has been archived and locked due to inactivity`); + await thread.delete('Thread has been inactive for 18 days'); + Logger.console('log', 'ThreadTimer', `"#${thread.name}" has been deleted due to inactivity for 18 days`); } } }, 1200000); // 20 minutes @@ -100,15 +99,13 @@ if (!client.config.botSwitches.logs) { rawSwitches.MESSAGE_UPDATE = true; }; client.on('raw', async (packet:RawGatewayPacket)=>{ - if (rawSwitches[packet.t]) return; - if (packet.t !== 'MESSAGE_UPDATE') return; - if (packet.d.guild_id != client.config.dcServer.id || disabledChannels.includes(packet.d.channel_id)) return; - if (typeof packet.d.content === 'undefined') return; + if (rawSwitches[packet.t] || packet.t !== 'MESSAGE_UPDATE') return; + if (packet.d.guild_id != client.config.dcServer.id || disabledChannels.includes(packet.d.channel_id) || typeof packet.d.content === 'undefined') return; const channel = client.channels.cache.get(packet.d.channel_id) as Discord.TextBasedChannel; - const message = await channel.messages.fetch(packet.d.id); - client.emit('messageUpdate', message, message); + // Switched to console.log to prevent useless embed creation that has same content as the original message. + Logger.console('log', 'RawEvent:Edit', `Message was edited in #${(channel as Discord.TextChannel).name}`); }); client.on('raw', async (packet:RawGatewayPacket)=>{ From afc04047eb9d2bf69bdc7edb2ee0a184286d6627 Mon Sep 17 00:00:00 2001 From: toast-ts <96593068+toast-ts@users.noreply.github.com> Date: Sun, 25 Feb 2024 20:17:14 +1100 Subject: [PATCH 3/6] Update @types/pg --- .pnp.cjs | 12 ++++++------ package.json | 2 +- yarn.lock | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.pnp.cjs b/.pnp.cjs index 0467413..f539e97 100644 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -33,7 +33,7 @@ const RAW_RUNTIME_STATE = ["@types/ms", "npm:0.7.34"],\ ["@types/node", "npm:20.11.20"],\ ["@types/node-cron", "npm:3.0.11"],\ - ["@types/pg", "npm:8.11.0"],\ + ["@types/pg", "npm:8.11.1"],\ ["ansi-colors", "npm:4.1.3"],\ ["dayjs", "npm:1.11.10"],\ ["discord.js", "npm:14.14.1"],\ @@ -645,7 +645,7 @@ const RAW_RUNTIME_STATE = ["@types/mariadb", null],\ ["@types/mysql2", null],\ ["@types/odbc", null],\ - ["@types/pg", "npm:8.11.0"],\ + ["@types/pg", "npm:8.11.1"],\ ["@types/snowflake-sdk", null],\ ["@types/sqlite3", null],\ ["@types/tedious", null],\ @@ -746,10 +746,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@types/pg", [\ - ["npm:8.11.0", {\ - "packageLocation": "./.yarn/cache/@types-pg-npm-8.11.0-bf104da0ba-91a7ccc5dc.zip/node_modules/@types/pg/",\ + ["npm:8.11.1", {\ + "packageLocation": "./.yarn/cache/@types-pg-npm-8.11.1-5d06a4b9df-2fdcb0dc33.zip/node_modules/@types/pg/",\ "packageDependencies": [\ - ["@types/pg", "npm:8.11.0"],\ + ["@types/pg", "npm:8.11.1"],\ ["@types/node", "npm:20.11.20"],\ ["pg-protocol", "npm:1.6.0"],\ ["pg-types", "npm:4.0.2"]\ @@ -860,7 +860,7 @@ const RAW_RUNTIME_STATE = ["@types/ms", "npm:0.7.34"],\ ["@types/node", "npm:20.11.20"],\ ["@types/node-cron", "npm:3.0.11"],\ - ["@types/pg", "npm:8.11.0"],\ + ["@types/pg", "npm:8.11.1"],\ ["ansi-colors", "npm:4.1.3"],\ ["dayjs", "npm:1.11.10"],\ ["discord.js", "npm:14.14.1"],\ diff --git a/package.json b/package.json index 511863d..486ba56 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "@types/ms": "0.7.34", "@types/node": "20.11.20", "@types/node-cron": "3.0.11", - "@types/pg": "8.11.0", + "@types/pg": "8.11.1", "typescript": "5.3.3" } } diff --git a/yarn.lock b/yarn.lock index d38629c..c8bfb38 100644 --- a/yarn.lock +++ b/yarn.lock @@ -530,14 +530,14 @@ __metadata: languageName: node linkType: hard -"@types/pg@npm:8.11.0": - version: 8.11.0 - resolution: "@types/pg@npm:8.11.0" +"@types/pg@npm:8.11.1": + version: 8.11.1 + resolution: "@types/pg@npm:8.11.1" dependencies: "@types/node": "npm:*" pg-protocol: "npm:*" pg-types: "npm:^4.0.1" - checksum: 10/91a7ccc5dc8e162d9d181f48f699eb4628632e75bd9db1c0ca774ec9b055b177875fb4b426279961061912f25fb3948c48c96e63ac9e85efcf7ce6f2567b6485 + checksum: 10/2fdcb0dc331c4f4e334061c30a14187a6d835a049be9e9a2d84d55935025c45be7f5f40fd6b854c19fcf72d17e854481b11a461d7679005d9813bf29c56ba380 languageName: node linkType: hard @@ -628,7 +628,7 @@ __metadata: "@types/ms": "npm:0.7.34" "@types/node": "npm:20.11.20" "@types/node-cron": "npm:3.0.11" - "@types/pg": "npm:8.11.0" + "@types/pg": "npm:8.11.1" ansi-colors: "npm:4.1.3" dayjs: "npm:1.11.10" discord.js: "npm:14.14.1" From cd40816e8f743647978acb086a3dc8b5c2fd66b4 Mon Sep 17 00:00:00 2001 From: toast-ts <96593068+toast-ts@users.noreply.github.com> Date: Sun, 25 Feb 2024 20:19:27 +1100 Subject: [PATCH 4/6] Log transaction failed const to console instead of nowhere --- src/models/punishments.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/models/punishments.ts b/src/models/punishments.ts index 4b795c7..17c54de 100644 --- a/src/models/punishments.ts +++ b/src/models/punishments.ts @@ -213,7 +213,8 @@ export class PunishmentsSvc { }); } catch (err) { Logger.console('error', 'Punishment', err); - return TRANSACTION_FAILED; + Logger.console('log', 'Punishment:Transaction', TRANSACTION_FAILED); + return; } if (interaction) return interaction.editReply({embeds: [embed]}); @@ -272,7 +273,8 @@ export class PunishmentsSvc { }); } catch (err) { Logger.console('error', 'Punishment', err); - return TRANSACTION_FAILED; + Logger.console('log', 'Punishment:Transaction', TRANSACTION_FAILED); + return; } if (interaction) return interaction.reply({embeds: [new this.client.embed() From 424de10a8c3008e26b92b319bbce382e16be73ad Mon Sep 17 00:00:00 2001 From: toast-ts <96593068+toast-ts@users.noreply.github.com> Date: Sun, 25 Feb 2024 20:39:32 +1100 Subject: [PATCH 5/6] Optimize functions in punishment model --- src/commands/case.ts | 8 ++++---- src/commands/unpunish.ts | 2 +- src/models/punishments.ts | 10 +++++----- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/commands/case.ts b/src/commands/case.ts index d3be107..0df2ff9 100644 --- a/src/commands/case.ts +++ b/src/commands/case.ts @@ -25,16 +25,16 @@ export default class Case { update: async()=>{ const reason = interaction.options.getString('reason'); await client.punishments.updateReason(caseId, reason); - if (client.punishments.findCase(caseId)) { + if (client.punishments.findCaseOrCancels('case_id', caseId)) { await this.updateEntry(client, caseId, reason); await interaction.reply({embeds: [new client.embed().setColor(client.config.embedColorGreen).setTitle('Case updated').setDescription(`Case #${caseId} has been successfully updated with new reason:\n\`${reason}\``)]}); } else interaction.reply({embeds: [new client.embed().setColor(client.config.embedColorRed).setTitle('Case not updated').setDescription(`Case #${caseId} is not found in database, not updating the reason.`)]}); }, view: async()=>{ - const punishment = await client.punishments.findCase(caseId); + const punishment = await client.punishments.findCaseOrCancels('case_id', caseId); if (!punishment) return interaction.reply('Case ID is not found in database.'); - const cancelledBy = punishment.dataValues.expired ? await client.punishments.findByCancels(punishment.dataValues.case_id) : null; - const cancels = punishment.dataValues.cancels ? await client.punishments.findCase(punishment.dataValues.cancels) : null; + const cancelledBy = punishment.dataValues.expired ? await client.punishments.findCaseOrCancels('cancels', punishment.dataValues.case_id) : null; + const cancels = punishment.dataValues.cancels ? await client.punishments.findCaseOrCancels('case_id', punishment.dataValues.cancels) : null; const embed = new client.embed().setColor(client.config.embedColor).setTimestamp(Number(punishment.dataValues.time)).setTitle(`${punishment.dataValues.type[0].toUpperCase()+punishment.dataValues.type.slice(1)} | Case #${punishment.dataValues.case_id}`).addFields( {name: 'User', value: `${punishment.member_name}\n${MessageTool.formatMention(punishment.dataValues.member, 'user')}\n\`${punishment.dataValues.member}\``, inline: true}, {name: 'Moderator', value: `${client.users.resolve(punishment.moderator).tag}\n${MessageTool.formatMention(punishment.dataValues.moderator, 'user')}\n\`${punishment.dataValues.moderator}\``, inline: true}, diff --git a/src/commands/unpunish.ts b/src/commands/unpunish.ts index 7c61bd7..9780227 100644 --- a/src/commands/unpunish.ts +++ b/src/commands/unpunish.ts @@ -5,7 +5,7 @@ import MessageTool from '../helpers/MessageTool.js'; export default class Unpunish { static async run(client: TClient, interaction: Discord.ChatInputCommandInteraction<'cached'>){ if (!MessageTool.isModerator(interaction.member as Discord.GuildMember)) return MessageTool.youNeedRole(interaction, 'dcmod'); - const punishment = await client.punishments.findCase(interaction.options.getInteger('case_id', true)); + const punishment = await client.punishments.findCaseOrCancels('case_id', interaction.options.getInteger('case_id', true)); if (!punishment) return interaction.reply({content: 'Case ID is not found in database.', ephemeral: true}); if (['unban', 'unmute', 'punishmentOverride'].includes(punishment.dataValues.type)) return interaction.reply({content: 'This case ID is immutable. (Informative case)', ephemeral: true}); if (punishment.dataValues.expired) return interaction.reply({content: 'This case ID is already expired.', ephemeral: true}); diff --git a/src/models/punishments.ts b/src/models/punishments.ts index 17c54de..2e212ec 100644 --- a/src/models/punishments.ts +++ b/src/models/punishments.ts @@ -96,15 +96,15 @@ export class PunishmentsSvc { } query = async(pattern:string)=>await this.model.sequelize.query(pattern); async updateReason(caseId:number, reason:string) { - const findCase = this.findCase(caseId); - if (findCase) return this.model.update({reason: reason}, {where: {case_id: caseId}}); + const findCase = this.findCaseOrCancels('case_id', caseId); + if (findCase) return this.model.update({reason}, {where: {case_id: caseId}}); } - findCase =(caseId:number)=>this.model.findOne({where: {case_id: caseId}}); - findByCancels =(caseId:number)=>this.model.findOne({where: {cancels: caseId}}) + findCaseOrCancels = (column:'case_id'|'cancels', id:number)=>this.model.findOne({where: {[column]: id}}); getAllCases =()=>this.model.findAll(); async generateCaseId() { const result = await this.model.max('case_id'); - return (result as number ?? 0) + 1; + if (typeof result === 'number') return result + 1; + else return 0; } async findInCache():Promise { const cacheKey = 'punishments'; From 29437ef5d7dc98202d10919fab60254eb5682ec0 Mon Sep 17 00:00:00 2001 From: toast-ts <96593068+toast-ts@users.noreply.github.com> Date: Mon, 4 Mar 2024 13:26:48 +1100 Subject: [PATCH 6/6] Remove autoresponses for Monster --- src/events/messageCreate.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/events/messageCreate.ts b/src/events/messageCreate.ts index b4c7eb8..832ec45 100644 --- a/src/events/messageCreate.ts +++ b/src/events/messageCreate.ts @@ -93,11 +93,6 @@ export default class MessageCreate { user: 'nawdic', img: 'https://c.tenor.com/JSj9ie_MD9kAAAAC/kopfsch%C3%BCtteln-an-kopf-fassen-oh-no.gif', title: '*Nawdic has done an oopsie*', - }, - { - user: 'monster', - img: 'https://media.tenor.com/ZIzIjb_wvEoAAAAC/face-palm.gif', - title: '*Monster has broken something*', } ]; let dontMention = [ @@ -105,11 +100,6 @@ export default class MessageCreate { user_id: '309373272594579456', message: 'Please don\'t tag Daggerwin, read rule 14 in <#468846117405196289>', type: undefined - }, - { - user_id: '215497515934416896', - message: 'Please don\'t tag Monster unless it\'s important!', - type: Discord.MessageType.Default } ]