From 644e0462c8fd1f63c36b6d870d1bd930e506a8ad Mon Sep 17 00:00:00 2001 From: SadlyNotSappho Date: Tue, 14 Feb 2023 14:49:12 -0800 Subject: [PATCH] try to set up sequelize, change a buncha shit, completely break fucking everything, that's just my life!!! --- README.md | 37 +-- docker-compose.yml | 12 +- package-lock.json | 547 ++++++++++++++++++++++++++++++++++++- package.json | 8 +- src/commands/ping.ts | 2 +- src/commands/roles.ts | 62 +++++ src/commands/test-slash.ts | 38 +++ src/commands/test.ts | 32 ++- src/index.ts | 28 +- src/lib/types.ts | 61 +++++ yarn.lock | 209 +++++++++++++- 11 files changed, 961 insertions(+), 75 deletions(-) create mode 100644 src/commands/roles.ts create mode 100644 src/commands/test-slash.ts create mode 100644 src/lib/types.ts diff --git a/README.md b/README.md index 410877b..5e46a69 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,9 @@ -# Docker Sapphire Bot example +# sapling -This is a basic setup of a Discord bot using the [sapphire framework][sapphire] written in TypeScript containerized with Docker +it's almost like i've tried making discord bots before and they've all fucking sucked, i wonder what could be different about this one!!!!!!!! -## How to use it? +anyways yeah i'm making a discord bot. idrk why. i just want button roles, and AutoModerator's implementation of them isn't great -### Prerequisite +## how to host yourself -1. Copy the `.env.example` and rename it to `.env`, make sure to fill the Token. -2. Open the Dockerfile and in the block marked with `Conditional steps for end-users` make sure you enable the lines that apply to your project. - -### Development - -Run `docker-compose up`. This will start the bot in watch mode and automatically run it after each save. -It will build the `Dockerfile` up until the `development` stage. - -### Production - -Just like in the development step, you have to fill in the `.env` file and then run the following command to create a production image; - -```sh -docker build . -t sapphire-sample-bot -``` - -To test if your image works, you can run: - -```sh -docker run --env-file .env sapphire-sample-bot -``` - -## License - -Dedicated to the public domain via the [Unlicense], courtesy of the Sapphire Community and its contributors. - -[sapphire]: https://github.com/sapphiredev/framework -[unlicense]: https://github.com/sapphiredev/examples/blob/main/LICENSE.md +rename `.env.example` to `.env` and fill it out, i think that's it idk \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index b19eead..367646d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,20 @@ version: '3.9' services: - sapphire-sample-bot: + bot: build: context: . target: development env_file: .env volumes: - ./:/opt/app + postgresql: + image: postgres:14 + restart: unless-stopped + container_name: bot-db + volumes: + - bot-db:/var/lib/postgresql/data/ + env_file: .env + +volumes: + bot-db: diff --git a/package-lock.json b/package-lock.json index 8753dcf..0054330 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "discord-button-roles", + "name": "sapling", "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "discord-button-roles", + "name": "sapling", "version": "1.0.0", "license": "LGPL-3.0", "dependencies": { @@ -22,12 +22,16 @@ "@sapphire/type": "^2.3.0", "@sapphire/utilities": "^3.11.0", "@skyra/env-utilities": "^1.1.0", - "discord.js": "^14.7.1" + "discord.js": "^14.7.1", + "pg": "^8.9.0", + "pg-hstore": "^2.3.4", + "sequelize": "^6.28.0" }, "devDependencies": { "@sapphire/prettier-config": "^1.4.5", "@sapphire/ts-config": "^3.3.4", "@types/node": "^18.11.18", + "@types/pg": "^8", "@types/ws": "^8.5.4", "npm-run-all": "^4.1.5", "prettier": "^2.8.3", @@ -436,14 +440,43 @@ "version": "0.3.0", "license": "MIT" }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, "node_modules/@types/node": { "version": "18.13.0", "license": "MIT" }, + "node_modules/@types/pg": { + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.6.tgz", + "integrity": "sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, "node_modules/@types/psl": { "version": "1.1.0", "license": "MIT" }, + "node_modules/@types/validator": { + "version": "13.7.12", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.12.tgz", + "integrity": "sha512-YVtyAPqpefU+Mm/qqnOANW6IkqKpCSrarcyV269C8MA8Ux0dbkEuQwM/4CjL47kVEM2LgBef/ETfkH+c6+moFA==" + }, "node_modules/@types/ws": { "version": "8.5.4", "license": "MIT", @@ -521,6 +554,14 @@ "concat-map": "0.0.1" } }, + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "engines": { + "node": ">=4" + } + }, "node_modules/busboy": { "version": "1.6.0", "dependencies": { @@ -723,6 +764,11 @@ "version": "5.1.0", "license": "BSD-2-Clause" }, + "node_modules/dottie": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.3.tgz", + "integrity": "sha512-4liA0PuRkZWQFQjwBypdxPfZaRWiv5tkhMXY2hzsa2pNf5s7U3m9cwUchfNKe8wZQxdGPQQzO6Rm2uGe0rvohQ==" + }, "node_modules/duplexer": { "version": "0.1.2", "dev": true, @@ -1140,6 +1186,14 @@ ], "license": "BSD-3-Clause" }, + "node_modules/inflection": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", + "engines": [ + "node >= 0.4.0" + ] + }, "node_modules/inflight": { "version": "1.0.6", "license": "ISC", @@ -1464,6 +1518,25 @@ "node": ">=10" } }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.40", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz", + "integrity": "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "license": "MIT" @@ -1613,6 +1686,11 @@ "wrappy": "1" } }, + "node_modules/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, "node_modules/parse-json": { "version": "4.0.0", "dev": true, @@ -1678,6 +1756,91 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/pg": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.9.0.tgz", + "integrity": "sha512-ZJM+qkEbtOHRuXjmvBtOgNOXOtLSbxiMiUVMgE4rV6Zwocy03RicCVvDXgx8l4Biwo8/qORUnEqn2fdQzV7KCg==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.5.0", + "pg-pool": "^3.5.2", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "node_modules/pg-hstore": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/pg-hstore/-/pg-hstore-2.3.4.tgz", + "integrity": "sha512-N3SGs/Rf+xA1M2/n0JBiXFDVMzdekwLZLAO0g7mpDY9ouX+fDI7jS6kTq3JujmYbtNSJ53TJ0q4G98KVZSM4EA==", + "dependencies": { + "underscore": "^1.13.1" + }, + "engines": { + "node": ">= 0.8.x" + } + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", + "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/pidtree": { "version": "0.3.1", "dev": true, @@ -1697,6 +1860,41 @@ "node": ">=4" } }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/prettier": { "version": "2.8.4", "dev": true, @@ -1800,6 +1998,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/retry-as-promised": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", + "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" + }, "node_modules/rimraf": { "version": "3.0.2", "license": "ISC", @@ -1873,6 +2076,75 @@ "node": ">=10" } }, + "node_modules/sequelize": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.28.0.tgz", + "integrity": "sha512-+WHqvUQgTp19GLkt+gyQ+F6qg+FIEO2O5F9C0TOYV/PjZ2a/XwWvVkL1NCkS4VSIjVVvAUutiW6Wv9ofveGaVw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/sequelize" + } + ], + "dependencies": { + "@types/debug": "^4.1.7", + "@types/validator": "^13.7.1", + "debug": "^4.3.3", + "dottie": "^2.0.2", + "inflection": "^1.13.2", + "lodash": "^4.17.21", + "moment": "^2.29.1", + "moment-timezone": "^0.5.34", + "pg-connection-string": "^2.5.0", + "retry-as-promised": "^7.0.3", + "semver": "^7.3.5", + "sequelize-pool": "^7.1.0", + "toposort-class": "^1.0.1", + "uuid": "^8.3.2", + "validator": "^13.7.0", + "wkx": "^0.5.0" + }, + "engines": { + "node": ">=10.0.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 + } + } + }, + "node_modules/sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "license": "ISC" @@ -1960,6 +2232,14 @@ "node": "*" } }, + "node_modules/split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/stream-combiner": { "version": "0.0.4", "dev": true, @@ -2140,6 +2420,11 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" + }, "node_modules/tr46": { "version": "0.0.3", "license": "MIT" @@ -2251,6 +2536,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, "node_modules/undici": { "version": "5.18.0", "license": "MIT", @@ -2265,6 +2555,14 @@ "version": "1.0.2", "license": "MIT" }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "dev": true, @@ -2274,6 +2572,14 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "license": "BSD-2-Clause" @@ -2341,6 +2647,14 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "node_modules/wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/wrappy": { "version": "1.0.2", "license": "ISC" @@ -2364,6 +2678,14 @@ } } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "4.0.0", "license": "ISC" @@ -2599,12 +2921,41 @@ "@tokenizer/token": { "version": "0.3.0" }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "requires": { + "@types/ms": "*" + } + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, "@types/node": { "version": "18.13.0" }, + "@types/pg": { + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.6.tgz", + "integrity": "sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==", + "dev": true, + "requires": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, "@types/psl": { "version": "1.1.0" }, + "@types/validator": { + "version": "13.7.12", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.12.tgz", + "integrity": "sha512-YVtyAPqpefU+Mm/qqnOANW6IkqKpCSrarcyV269C8MA8Ux0dbkEuQwM/4CjL47kVEM2LgBef/ETfkH+c6+moFA==" + }, "@types/ws": { "version": "8.5.4", "requires": { @@ -2654,6 +3005,11 @@ "concat-map": "0.0.1" } }, + "buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, "busboy": { "version": "1.6.0", "requires": { @@ -2786,6 +3142,11 @@ "dotenv-expand": { "version": "5.1.0" }, + "dottie": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.3.tgz", + "integrity": "sha512-4liA0PuRkZWQFQjwBypdxPfZaRWiv5tkhMXY2hzsa2pNf5s7U3m9cwUchfNKe8wZQxdGPQQzO6Rm2uGe0rvohQ==" + }, "duplexer": { "version": "0.1.2", "dev": true @@ -3053,6 +3414,11 @@ "ieee754": { "version": "1.2.1" }, + "inflection": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==" + }, "inflight": { "version": "1.0.6", "requires": { @@ -3244,6 +3610,19 @@ "mkdirp": { "version": "1.0.4" }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "moment-timezone": { + "version": "0.5.40", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz", + "integrity": "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==", + "requires": { + "moment": ">= 2.9.0" + } + }, "ms": { "version": "2.1.2" }, @@ -3337,6 +3716,11 @@ "wrappy": "1" } }, + "packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, "parse-json": { "version": "4.0.0", "dev": true, @@ -3373,6 +3757,69 @@ "peek-readable": { "version": "5.0.0" }, + "pg": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.9.0.tgz", + "integrity": "sha512-ZJM+qkEbtOHRuXjmvBtOgNOXOtLSbxiMiUVMgE4rV6Zwocy03RicCVvDXgx8l4Biwo8/qORUnEqn2fdQzV7KCg==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.5.0", + "pg-pool": "^3.5.2", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + } + }, + "pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "pg-hstore": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/pg-hstore/-/pg-hstore-2.3.4.tgz", + "integrity": "sha512-N3SGs/Rf+xA1M2/n0JBiXFDVMzdekwLZLAO0g7mpDY9ouX+fDI7jS6kTq3JujmYbtNSJ53TJ0q4G98KVZSM4EA==", + "requires": { + "underscore": "^1.13.1" + } + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", + "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", + "requires": {} + }, + "pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "requires": { + "split2": "^4.1.0" + } + }, "pidtree": { "version": "0.3.1", "dev": true @@ -3381,6 +3828,29 @@ "version": "3.0.0", "dev": true }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==" + }, + "postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, "prettier": { "version": "2.8.4", "dev": true @@ -3436,6 +3906,11 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "retry-as-promised": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", + "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" + }, "rimraf": { "version": "3.0.2", "requires": { @@ -3473,6 +3948,34 @@ } } }, + "sequelize": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.28.0.tgz", + "integrity": "sha512-+WHqvUQgTp19GLkt+gyQ+F6qg+FIEO2O5F9C0TOYV/PjZ2a/XwWvVkL1NCkS4VSIjVVvAUutiW6Wv9ofveGaVw==", + "requires": { + "@types/debug": "^4.1.7", + "@types/validator": "^13.7.1", + "debug": "^4.3.3", + "dottie": "^2.0.2", + "inflection": "^1.13.2", + "lodash": "^4.17.21", + "moment": "^2.29.1", + "moment-timezone": "^0.5.34", + "pg-connection-string": "^2.5.0", + "retry-as-promised": "^7.0.3", + "semver": "^7.3.5", + "sequelize-pool": "^7.1.0", + "toposort-class": "^1.0.1", + "uuid": "^8.3.2", + "validator": "^13.7.0", + "wkx": "^0.5.0" + } + }, + "sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==" + }, "set-blocking": { "version": "2.0.0" }, @@ -3534,6 +4037,11 @@ "through": "2" } }, + "split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + }, "stream-combiner": { "version": "0.0.4", "dev": true, @@ -3644,6 +4152,11 @@ "ieee754": "^1.2.1" } }, + "toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" + }, "tr46": { "version": "0.0.3" }, @@ -3712,6 +4225,11 @@ "which-boxed-primitive": "^1.0.2" } }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, "undici": { "version": "5.18.0", "requires": { @@ -3721,6 +4239,11 @@ "util-deprecate": { "version": "1.0.2" }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, "validate-npm-package-license": { "version": "3.0.4", "dev": true, @@ -3729,6 +4252,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==" + }, "webidl-conversions": { "version": "3.0.1" }, @@ -3775,6 +4303,14 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "requires": { + "@types/node": "*" + } + }, "wrappy": { "version": "1.0.2" }, @@ -3782,6 +4318,11 @@ "version": "8.12.0", "requires": {} }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, "yallist": { "version": "4.0.0" } diff --git a/package.json b/package.json index 0b73039..92653de 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "discord-button-roles", + "name": "sapling", "version": "1.0.0", "main": "dist/index.js", "author": "SadlyNotSappho", @@ -27,12 +27,16 @@ "@sapphire/type": "^2.3.0", "@sapphire/utilities": "^3.11.0", "@skyra/env-utilities": "^1.1.0", - "discord.js": "^14.7.1" + "discord.js": "^14.7.1", + "pg": "^8.9.0", + "pg-hstore": "^2.3.4", + "sequelize": "^6.28.0" }, "devDependencies": { "@sapphire/prettier-config": "^1.4.5", "@sapphire/ts-config": "^3.3.4", "@types/node": "^18.11.18", + "@types/pg": "^8", "@types/ws": "^8.5.4", "npm-run-all": "^4.1.5", "prettier": "^2.8.3", diff --git a/src/commands/ping.ts b/src/commands/ping.ts index bb05b83..7ee405e 100644 --- a/src/commands/ping.ts +++ b/src/commands/ping.ts @@ -15,7 +15,7 @@ export class UserCommand extends Command { }, { // guildIds: [] - // idHints: [] + idHints: ['1073817778257149972'] } ); } diff --git a/src/commands/roles.ts b/src/commands/roles.ts new file mode 100644 index 0000000..9ccb9c0 --- /dev/null +++ b/src/commands/roles.ts @@ -0,0 +1,62 @@ +import { ModalActionRowComponentBuilder, ModalBuilder } from '@discordjs/builders'; +import { ApplyOptions } from '@sapphire/decorators'; +import { Command } from '@sapphire/framework'; +import { ActionRowBuilder, TextInputBuilder, TextInputStyle } from 'discord.js'; + +@ApplyOptions({ + description: 'Lets you configure a role message' +}) +export class UserCommand extends Command { + public override registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand((builder) => + builder // + .setName(this.name) + .setDescription(this.description) + .addSubcommand(builder => builder.setName('new').setDescription('Creates a new role message')) + .addSubcommand(builder => builder.setName('edit').setDescription('Edit an existing role message')) + .addSubcommand(builder => builder.setName('show').setDescription('Re-send an existing role message')) + , + { + guildIds: ['1030563119132594187'], + idHints: ['1074474624672350279'] + } + ); + } + + public override async chatInputRun(interaction: Command.ChatInputCommandInteraction) { + let subcommand = interaction.options.getSubcommand(true); + + switch (subcommand) { + case 'new': await this.new(interaction); break; + case 'edit': await this.edit(interaction); break; + } + } + + private async new(interaction: Command.ChatInputCommandInteraction) { + const modal = new ModalBuilder() + .setCustomId('embedEditorModal') + .setTitle('Embed Editor'); + const embedTitle = new TextInputBuilder() + .setCustomId('embedTitle') + .setLabel('Title') + .setStyle(TextInputStyle.Short); + const embedDescription = new TextInputBuilder() + .setCustomId('embedDescription') + .setLabel('Description') + .setStyle(TextInputStyle.Paragraph) + + let firstRow = new ActionRowBuilder().addComponents(embedTitle); + let secondRow = new ActionRowBuilder().addComponents(embedDescription) + + modal.addComponents(firstRow, secondRow) + + await interaction.showModal(modal) + } + + private async edit(interaction: Command.ChatInputCommandInteraction) { + await interaction.reply({content: 'edit', ephemeral: true}) + } +} + + +// new TextInputBuilder().setCustomId('embedName').setLabel("The embed's name").setRequired(false).setStyle(TextInputStyle.Short) \ No newline at end of file diff --git a/src/commands/test-slash.ts b/src/commands/test-slash.ts new file mode 100644 index 0000000..2b68071 --- /dev/null +++ b/src/commands/test-slash.ts @@ -0,0 +1,38 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Command } from '@sapphire/framework'; +import { ComponentType } from 'discord.js'; + +@ApplyOptions({ + description: 'A basic slash command' +}) +export class UserCommand extends Command { + public override registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand((builder) => + builder // + .setName(this.name) + .setDescription(this.description) + .addRoleOption((builder) => { + return builder.setName('role').setDescription('pick a role! any role!').setRequired(true); + }), + { + guildIds: ['1030563119132594187'], + idHints: ['1073818897737855036'] + } + ); + } + + public override async chatInputRun(interaction: Command.ChatInputCommandInteraction) { + await interaction.reply({ + content: undefined, + allowedMentions: {parse: []}, + components: [{type: ComponentType.ActionRow, components: [ + { + type: ComponentType.RoleSelect, + minValues: 1, + maxValues: 1, + customId: 'roleSelectMenu' + } + ]}] + }); + } +} diff --git a/src/commands/test.ts b/src/commands/test.ts index f352e35..df7bbca 100644 --- a/src/commands/test.ts +++ b/src/commands/test.ts @@ -8,20 +8,32 @@ import { ButtonStyle, ComponentType, Message } from 'discord.js'; export class UserCommand extends Command { public async messageRun(message: Message) { await message.channel.send({ - content: "This button lets you select pronoun roles. You can select multiple.", - allowedMentions: {parse: []}, - components: [{type: ComponentType.ActionRow, components: [ + content: 'This button lets you select pronoun roles. You can select multiple.', + allowedMentions: { parse: [] }, + components: [ { - type: ComponentType.Button, - style: ButtonStyle.Primary, - label: 'Click me!', - customId: 'showRolesButton' + type: ComponentType.ActionRow, + components: [ + { + type: ComponentType.Button, + style: ButtonStyle.Primary, + label: 'Click me!', + customId: 'showRolesButton' + } + ] } - ]}] + ] }); - await message.guild?.commands.fetch() + // await message.guild?.commands.fetch() - console.log('message.guild.commands.cache, after fetching:', message.guild?.commands.cache) + // console.log('message.guild.commands.cache, after fetching:', message.guild?.commands.cache) + + // await this.container.client.application?.commands.fetch() + // console.log('global commands:', this.container.client.application?.commands.cache) + + // await this.container.client.application?.commands.delete('1073818778254717019').then(console.log).catch(console.error) + + console.log(this.container.db) } } diff --git a/src/index.ts b/src/index.ts index d58f056..2eec840 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,30 +1,7 @@ import './lib/setup'; -import { LogLevel, SapphireClient } from '@sapphire/framework'; -import { GatewayIntentBits, Partials } from 'discord.js'; +import { SaplingClient } from './lib/types'; -const client = new SapphireClient({ - defaultPrefix: process.env.DEFAULT_PREFIX, - regexPrefix: /^(hey +)?bot[,! ]/i, - caseInsensitiveCommands: true, - logger: { - level: LogLevel.Info - }, - shards: 'auto', - intents: [ - GatewayIntentBits.DirectMessageReactions, - GatewayIntentBits.DirectMessages, - GatewayIntentBits.GuildModeration, - GatewayIntentBits.GuildEmojisAndStickers, - GatewayIntentBits.GuildMessageReactions, - GatewayIntentBits.GuildMessages, - GatewayIntentBits.Guilds, - GatewayIntentBits.GuildVoiceStates, - - GatewayIntentBits.MessageContent - ], - partials: [Partials.Channel], - loadMessageCommandListeners: true -}); +const client = new SaplingClient(); const main = async () => { try { @@ -39,3 +16,4 @@ const main = async () => { }; main(); + diff --git a/src/lib/types.ts b/src/lib/types.ts new file mode 100644 index 0000000..1b46c19 --- /dev/null +++ b/src/lib/types.ts @@ -0,0 +1,61 @@ +import { container, LogLevel, SapphireClient } from "@sapphire/framework"; +import { GatewayIntentBits, Partials } from "discord.js"; +import { Sequelize } from "sequelize"; + +export class SaplingClient extends SapphireClient { + public constructor() { + super({ + defaultPrefix: process.env.DEFAULT_PREFIX, + regexPrefix: /^(hey +)?bot[,! ]/i, + caseInsensitiveCommands: true, + logger: { + level: LogLevel.Info + }, + shards: 'auto', + intents: [ + GatewayIntentBits.DirectMessageReactions, + GatewayIntentBits.DirectMessages, + GatewayIntentBits.GuildModeration, + GatewayIntentBits.GuildEmojisAndStickers, + GatewayIntentBits.GuildMessageReactions, + GatewayIntentBits.GuildMessages, + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildVoiceStates, + + GatewayIntentBits.MessageContent + ], + partials: [Partials.Channel], + loadMessageCommandListeners: true + }) + } + + public override async login(token?: string) { + const sequelize = new Sequelize(process.env.POSTGRES_DB as string, process.env.POSTGRES_USER as string, process.env.POSTGRES_PASSWORD, { + host: 'bot-db', + dialect: 'postgres', + logging: container.logger.debug + }); + + try { + await sequelize.authenticate(); + container.logger.info('Connected to database'); + } catch (error) { + container.logger.fatal('Unable to connect to the database:', error); + } + + container.db = sequelize; + + return super.login(token) + } + + public override async destroy() { + await container.db.close(); + return super.destroy(); + } +} + +declare module '@sapphire/pieces' { + interface Container { + db: Sequelize; + } + } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index ea3d37a..9bfaafb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -198,12 +198,38 @@ "@tokenizer/token@^0.3.0": "version" "0.3.0" +"@types/debug@^4.1.7": + "integrity" "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==" + "resolved" "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz" + "version" "4.1.7" + dependencies: + "@types/ms" "*" + +"@types/ms@*": + "integrity" "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + "resolved" "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz" + "version" "0.7.31" + "@types/node@*", "@types/node@^18.11.18": "version" "18.13.0" +"@types/pg@^8": + "integrity" "sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==" + "resolved" "https://registry.npmjs.org/@types/pg/-/pg-8.6.6.tgz" + "version" "8.6.6" + dependencies: + "@types/node" "*" + "pg-protocol" "*" + "pg-types" "^2.2.0" + "@types/psl@^1.1.0": "version" "1.1.0" +"@types/validator@^13.7.1": + "integrity" "sha512-YVtyAPqpefU+Mm/qqnOANW6IkqKpCSrarcyV269C8MA8Ux0dbkEuQwM/4CjL47kVEM2LgBef/ETfkH+c6+moFA==" + "resolved" "https://registry.npmjs.org/@types/validator/-/validator-13.7.12.tgz" + "version" "13.7.12" + "@types/ws@^8.5.3", "@types/ws@^8.5.4": "version" "8.5.4" dependencies: @@ -246,6 +272,11 @@ "balanced-match" "^1.0.0" "concat-map" "0.0.1" +"buffer-writer@2.0.0": + "integrity" "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + "resolved" "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz" + "version" "2.0.0" + "busboy@^1.6.0": "version" "1.6.0" dependencies: @@ -308,7 +339,7 @@ "shebang-command" "^2.0.0" "which" "^2.0.1" -"debug@4": +"debug@^4.3.3", "debug@4": "version" "4.3.4" dependencies: "ms" "2.1.2" @@ -356,6 +387,11 @@ "dotenv@^10.0.0": "version" "10.0.0" +"dottie@^2.0.2": + "integrity" "sha512-4liA0PuRkZWQFQjwBypdxPfZaRWiv5tkhMXY2hzsa2pNf5s7U3m9cwUchfNKe8wZQxdGPQQzO6Rm2uGe0rvohQ==" + "resolved" "https://registry.npmjs.org/dottie/-/dottie-2.0.3.tgz" + "version" "2.0.3" + "duplexer@~0.1.1": "version" "0.1.2" @@ -573,6 +609,11 @@ "ieee754@^1.2.1": "version" "1.2.1" +"inflection@^1.13.2": + "integrity" "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==" + "resolved" "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz" + "version" "1.13.4" + "inflight@^1.0.4": "version" "1.0.6" dependencies: @@ -727,6 +768,18 @@ "mkdirp@^1.0.3": "version" "1.0.4" +"moment-timezone@^0.5.34": + "integrity" "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==" + "resolved" "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz" + "version" "0.5.40" + dependencies: + "moment" ">= 2.9.0" + +"moment@^2.29.1", "moment@>= 2.9.0": + "integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + "version" "2.29.4" + "ms@2.1.2": "version" "2.1.2" @@ -805,6 +858,11 @@ dependencies: "wrappy" "1" +"packet-reader@1.0.0": + "integrity" "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + "resolved" "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz" + "version" "1.0.0" + "parse-json@^4.0.0": "version" "4.0.0" dependencies: @@ -836,12 +894,92 @@ "peek-readable@^5.0.0": "version" "5.0.0" +"pg-connection-string@^2.5.0": + "integrity" "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + "resolved" "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz" + "version" "2.5.0" + +"pg-hstore@^2.3.4": + "integrity" "sha512-N3SGs/Rf+xA1M2/n0JBiXFDVMzdekwLZLAO0g7mpDY9ouX+fDI7jS6kTq3JujmYbtNSJ53TJ0q4G98KVZSM4EA==" + "resolved" "https://registry.npmjs.org/pg-hstore/-/pg-hstore-2.3.4.tgz" + "version" "2.3.4" + dependencies: + "underscore" "^1.13.1" + +"pg-int8@1.0.1": + "integrity" "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + "resolved" "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz" + "version" "1.0.1" + +"pg-pool@^3.5.2": + "integrity" "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==" + "resolved" "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz" + "version" "3.5.2" + +"pg-protocol@*", "pg-protocol@^1.6.0": + "integrity" "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + "resolved" "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz" + "version" "1.6.0" + +"pg-types@^2.1.0", "pg-types@^2.2.0": + "integrity" "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==" + "resolved" "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "pg-int8" "1.0.1" + "postgres-array" "~2.0.0" + "postgres-bytea" "~1.0.0" + "postgres-date" "~1.0.4" + "postgres-interval" "^1.1.0" + +"pg@^8.9.0", "pg@>=8.0": + "integrity" "sha512-ZJM+qkEbtOHRuXjmvBtOgNOXOtLSbxiMiUVMgE4rV6Zwocy03RicCVvDXgx8l4Biwo8/qORUnEqn2fdQzV7KCg==" + "resolved" "https://registry.npmjs.org/pg/-/pg-8.9.0.tgz" + "version" "8.9.0" + dependencies: + "buffer-writer" "2.0.0" + "packet-reader" "1.0.0" + "pg-connection-string" "^2.5.0" + "pg-pool" "^3.5.2" + "pg-protocol" "^1.6.0" + "pg-types" "^2.1.0" + "pgpass" "1.x" + +"pgpass@1.x": + "integrity" "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==" + "resolved" "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "split2" "^4.1.0" + "pidtree@^0.3.0": "version" "0.3.1" "pify@^3.0.0": "version" "3.0.0" +"postgres-array@~2.0.0": + "integrity" "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + "resolved" "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz" + "version" "2.0.0" + +"postgres-bytea@~1.0.0": + "integrity" "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==" + "resolved" "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz" + "version" "1.0.0" + +"postgres-date@~1.0.4": + "integrity" "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + "resolved" "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz" + "version" "1.0.7" + +"postgres-interval@^1.1.0": + "integrity" "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==" + "resolved" "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "xtend" "^4.0.0" + "prettier@^2.8.2", "prettier@^2.8.3": "version" "2.8.4" @@ -886,6 +1024,11 @@ "path-parse" "^1.0.7" "supports-preserve-symlinks-flag" "^1.0.0" +"retry-as-promised@^7.0.3": + "integrity" "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" + "resolved" "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz" + "version" "7.0.4" + "rimraf@^3.0.2": "version" "3.0.2" dependencies: @@ -918,6 +1061,33 @@ "semver@2 || 3 || 4 || 5": "version" "5.7.1" +"sequelize-pool@^7.1.0": + "integrity" "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==" + "resolved" "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz" + "version" "7.1.0" + +"sequelize@^6.28.0": + "integrity" "sha512-+WHqvUQgTp19GLkt+gyQ+F6qg+FIEO2O5F9C0TOYV/PjZ2a/XwWvVkL1NCkS4VSIjVVvAUutiW6Wv9ofveGaVw==" + "resolved" "https://registry.npmjs.org/sequelize/-/sequelize-6.28.0.tgz" + "version" "6.28.0" + dependencies: + "@types/debug" "^4.1.7" + "@types/validator" "^13.7.1" + "debug" "^4.3.3" + "dottie" "^2.0.2" + "inflection" "^1.13.2" + "lodash" "^4.17.21" + "moment" "^2.29.1" + "moment-timezone" "^0.5.34" + "pg-connection-string" "^2.5.0" + "retry-as-promised" "^7.0.3" + "semver" "^7.3.5" + "sequelize-pool" "^7.1.0" + "toposort-class" "^1.0.1" + "uuid" "^8.3.2" + "validator" "^13.7.0" + "wkx" "^0.5.0" + "set-blocking@^2.0.0": "version" "2.0.0" @@ -973,6 +1143,11 @@ dependencies: "through" "2" +"split2@^4.1.0": + "integrity" "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + "resolved" "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" + "version" "4.1.0" + "stream-combiner@~0.0.4": "version" "0.0.4" dependencies: @@ -1058,6 +1233,11 @@ "@tokenizer/token" "^0.3.0" "ieee754" "^1.2.1" +"toposort-class@^1.0.1": + "integrity" "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" + "resolved" "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz" + "version" "1.0.1" + "tr46@~0.0.3": "version" "0.0.3" @@ -1093,6 +1273,11 @@ "has-symbols" "^1.0.3" "which-boxed-primitive" "^1.0.2" +"underscore@^1.13.1": + "integrity" "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + "resolved" "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz" + "version" "1.13.6" + "undici@^5.13.0", "undici@^5.14.0": "version" "5.18.0" dependencies: @@ -1101,12 +1286,22 @@ "util-deprecate@^1.0.1": "version" "1.0.2" +"uuid@^8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + "validate-npm-package-license@^3.0.1": "version" "3.0.4" dependencies: "spdx-correct" "^3.0.0" "spdx-expression-parse" "^3.0.0" +"validator@^13.7.0": + "integrity" "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==" + "resolved" "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz" + "version" "13.9.0" + "webidl-conversions@^3.0.0": "version" "3.0.1" @@ -1150,11 +1345,23 @@ dependencies: "string-width" "^1.0.2 || 2 || 3 || 4" +"wkx@^0.5.0": + "integrity" "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==" + "resolved" "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz" + "version" "0.5.0" + dependencies: + "@types/node" "*" + "wrappy@1": "version" "1.0.2" "ws@^8.11.0": "version" "8.12.0" +"xtend@^4.0.0": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + "yallist@^4.0.0": "version" "4.0.0"