Start making a bot with a few example commands
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d73a446
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+dist/
+.history/
+node_modules/
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..31dfec9
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,528 @@
+{
+ "name": "nucleus",
+ "version": "0.0.1",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "nucleus",
+ "version": "0.0.1",
+ "license": "SEE LICENSE IN LICENSE",
+ "dependencies": {
+ "@discordjs/builders": "^0.12.0",
+ "discord.js": "^13.6.0",
+ "jshaiku": "file:../../WebstormProjects/haiku",
+ "typescript": "^4.5.5"
+ }
+ },
+ "../../WebstormProjects/haiku": {
+ "version": "1.0.0",
+ "license": "AGPL-3.0",
+ "dependencies": {
+ "@discordjs/builders": "^0.11.0",
+ "@discordjs/rest": "^0.2.0-canary.0",
+ "@types/node-cron": "^3.0.1",
+ "ansi-styles": "^6.1.0",
+ "chalk": "^5.0.0",
+ "discord-api-types": "^0.26.1",
+ "discord.js": "^13.5.1",
+ "node-cron": "^3.0.0"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.16.7",
+ "@babel/preset-env": "^7.16.8",
+ "@babel/preset-typescript": "^7.16.7",
+ "@types/jest": "^27.4.0",
+ "babel-jest": "^27.4.6",
+ "jest": "^27.4.7",
+ "ts-node": "^10.4.0",
+ "typescript": "4.5.4"
+ }
+ },
+ "node_modules/@discordjs/builders": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.12.0.tgz",
+ "integrity": "sha512-Vx2MjUZd6QVo1uS2uWt708Fd6cHWGFblAvbpL5EBO+kLl0BADmPwwvts+YJ/VfSywed6Vsk6K2cEooR/Ytjhjw==",
+ "dependencies": {
+ "@sindresorhus/is": "^4.3.0",
+ "discord-api-types": "^0.26.1",
+ "ts-mixer": "^6.0.0",
+ "tslib": "^2.3.1",
+ "zod": "^3.11.6"
+ },
+ "engines": {
+ "node": ">=16.9.0"
+ }
+ },
+ "node_modules/@discordjs/collection": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz",
+ "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==",
+ "engines": {
+ "node": ">=16.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/@sapphire/async-queue": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.2.0.tgz",
+ "integrity": "sha512-O5ND5Ljpef86X5oy8zXorQ754TMjWALcPSAgPBu4+76HLtDTrNoDyzU2uGE2G4A8Wv51u0MXHzGQ0WZ4GMtpIw==",
+ "engines": {
+ "node": ">=v14.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/@sindresorhus/is": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.4.0.tgz",
+ "integrity": "sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/is?sponsor=1"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "17.0.21",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
+ "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ=="
+ },
+ "node_modules/@types/node-fetch": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz",
+ "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==",
+ "dependencies": {
+ "@types/node": "*",
+ "form-data": "^3.0.0"
+ }
+ },
+ "node_modules/@types/node-fetch/node_modules/form-data": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@types/ws": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.0.tgz",
+ "integrity": "sha512-mTClfhq5cuGyW4jthaFuig6Q8OVfB3IRyZfN/9SCyJtiM5H0SubwM89cHoT9UngO6HyUFic88HvT1zSNLNyxWA==",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/discord-api-types": {
+ "version": "0.26.1",
+ "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz",
+ "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==",
+ "deprecated": "No longer supported. Install the latest release!",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/discord.js": {
+ "version": "13.6.0",
+ "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.6.0.tgz",
+ "integrity": "sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g==",
+ "dependencies": {
+ "@discordjs/builders": "^0.11.0",
+ "@discordjs/collection": "^0.4.0",
+ "@sapphire/async-queue": "^1.1.9",
+ "@types/node-fetch": "^2.5.12",
+ "@types/ws": "^8.2.2",
+ "discord-api-types": "^0.26.0",
+ "form-data": "^4.0.0",
+ "node-fetch": "^2.6.1",
+ "ws": "^8.4.0"
+ },
+ "engines": {
+ "node": ">=16.6.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/discord.js/node_modules/@discordjs/builders": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz",
+ "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==",
+ "dependencies": {
+ "@sindresorhus/is": "^4.2.0",
+ "discord-api-types": "^0.26.0",
+ "ts-mixer": "^6.0.0",
+ "tslib": "^2.3.1",
+ "zod": "^3.11.6"
+ },
+ "engines": {
+ "node": ">=16.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/jshaiku": {
+ "resolved": "../../WebstormProjects/haiku",
+ "link": true
+ },
+ "node_modules/mime-db": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.34",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
+ "dependencies": {
+ "mime-db": "1.51.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+ },
+ "node_modules/ts-mixer": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz",
+ "integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ=="
+ },
+ "node_modules/tslib": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
+ },
+ "node_modules/typescript": {
+ "version": "4.5.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
+ "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/ws": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
+ "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.12.0.tgz",
+ "integrity": "sha512-w+mmntgEL4hDDL5NLFdN6Fq2DSzxfmlSoJqiYE1/CApO8EkOCxvJvRYEVf8Vr/lRs3i6gqoiyFM6KRcWqqdBzQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ }
+ },
+ "dependencies": {
+ "@discordjs/builders": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.12.0.tgz",
+ "integrity": "sha512-Vx2MjUZd6QVo1uS2uWt708Fd6cHWGFblAvbpL5EBO+kLl0BADmPwwvts+YJ/VfSywed6Vsk6K2cEooR/Ytjhjw==",
+ "requires": {
+ "@sindresorhus/is": "^4.3.0",
+ "discord-api-types": "^0.26.1",
+ "ts-mixer": "^6.0.0",
+ "tslib": "^2.3.1",
+ "zod": "^3.11.6"
+ }
+ },
+ "@discordjs/collection": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz",
+ "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw=="
+ },
+ "@sapphire/async-queue": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.2.0.tgz",
+ "integrity": "sha512-O5ND5Ljpef86X5oy8zXorQ754TMjWALcPSAgPBu4+76HLtDTrNoDyzU2uGE2G4A8Wv51u0MXHzGQ0WZ4GMtpIw=="
+ },
+ "@sindresorhus/is": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.4.0.tgz",
+ "integrity": "sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ=="
+ },
+ "@types/node": {
+ "version": "17.0.21",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
+ "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ=="
+ },
+ "@types/node-fetch": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz",
+ "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==",
+ "requires": {
+ "@types/node": "*",
+ "form-data": "^3.0.0"
+ },
+ "dependencies": {
+ "form-data": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ }
+ }
+ },
+ "@types/ws": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.0.tgz",
+ "integrity": "sha512-mTClfhq5cuGyW4jthaFuig6Q8OVfB3IRyZfN/9SCyJtiM5H0SubwM89cHoT9UngO6HyUFic88HvT1zSNLNyxWA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "discord-api-types": {
+ "version": "0.26.1",
+ "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz",
+ "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ=="
+ },
+ "discord.js": {
+ "version": "13.6.0",
+ "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.6.0.tgz",
+ "integrity": "sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g==",
+ "requires": {
+ "@discordjs/builders": "^0.11.0",
+ "@discordjs/collection": "^0.4.0",
+ "@sapphire/async-queue": "^1.1.9",
+ "@types/node-fetch": "^2.5.12",
+ "@types/ws": "^8.2.2",
+ "discord-api-types": "^0.26.0",
+ "form-data": "^4.0.0",
+ "node-fetch": "^2.6.1",
+ "ws": "^8.4.0"
+ },
+ "dependencies": {
+ "@discordjs/builders": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz",
+ "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==",
+ "requires": {
+ "@sindresorhus/is": "^4.2.0",
+ "discord-api-types": "^0.26.0",
+ "ts-mixer": "^6.0.0",
+ "tslib": "^2.3.1",
+ "zod": "^3.11.6"
+ }
+ }
+ }
+ },
+ "form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "jshaiku": {
+ "version": "file:../../WebstormProjects/haiku",
+ "requires": {
+ "@babel/core": "^7.16.7",
+ "@babel/preset-env": "^7.16.8",
+ "@babel/preset-typescript": "^7.16.7",
+ "@discordjs/builders": "^0.11.0",
+ "@discordjs/rest": "^0.2.0-canary.0",
+ "@types/jest": "^27.4.0",
+ "@types/node-cron": "^3.0.1",
+ "ansi-styles": "^6.1.0",
+ "babel-jest": "^27.4.6",
+ "chalk": "^5.0.0",
+ "discord-api-types": "^0.26.1",
+ "discord.js": "^13.5.1",
+ "jest": "^27.4.7",
+ "node-cron": "^3.0.0",
+ "ts-node": "^10.4.0",
+ "typescript": "4.5.4"
+ }
+ },
+ "mime-db": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
+ },
+ "mime-types": {
+ "version": "2.1.34",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
+ "requires": {
+ "mime-db": "1.51.0"
+ }
+ },
+ "node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+ },
+ "ts-mixer": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz",
+ "integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ=="
+ },
+ "tslib": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
+ },
+ "typescript": {
+ "version": "4.5.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
+ "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA=="
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "ws": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
+ "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
+ "requires": {}
+ },
+ "zod": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.12.0.tgz",
+ "integrity": "sha512-w+mmntgEL4hDDL5NLFdN6Fq2DSzxfmlSoJqiYE1/CApO8EkOCxvJvRYEVf8Vr/lRs3i6gqoiyFM6KRcWqqdBzQ=="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..45019ad
--- /dev/null
+++ b/package.json
@@ -0,0 +1,33 @@
+{
+ "dependencies": {
+ "@discordjs/builders": "^0.12.0",
+ "discord.js": "^13.6.0",
+ "jshaiku": "file:../../WebstormProjects/haiku",
+ "typescript": "^4.5.5"
+ },
+ "name": "nucleus",
+ "version": "0.0.1",
+ "description": "Nucleus: The core Clicks Minute Per bot",
+ "main": "dist/index.js",
+ "scripts": {
+ "build": "tsc",
+ "start": "node --experimental-json-modules dist/index.js",
+ "dev": "tsc && node --experimental-json-modules dist/index.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/ClicksMinutePer/Nucleus.git"
+ },
+ "author": "Clicks Minute Per",
+ "contributors": [
+ "Minion3665",
+ "PineappleFan"
+ ],
+ "license": "SEE LICENSE IN LICENSE",
+ "bugs": {
+ "url": "https://github.com/ClicksMinutePer/Nucleus/issues"
+ },
+ "homepage": "https://github.com/ClicksMinutePer/Nucleus#readme",
+ "private": true,
+ "type": "module"
+}
diff --git a/src/commands/example.ts b/src/commands/example.ts
new file mode 100644
index 0000000..73e967e
--- /dev/null
+++ b/src/commands/example.ts
@@ -0,0 +1,19 @@
+import { CommandInteraction } from "discord.js";
+import { SlashCommandBuilder } from "@discordjs/builders";
+import { WrappedCheck } from "jshaiku";
+
+const command = new SlashCommandBuilder()
+ .setName("examplecommand")
+ .setDescription("An example command")
+
+const callback = (interaction: CommandInteraction) => {
+ interaction.reply("Hello, world!");
+}
+
+const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => {
+ return interaction.user.id !== "123456789";
+}
+
+export { command };
+export { callback };
+export { check };
\ No newline at end of file
diff --git a/src/commands/examplegroup/example.ts b/src/commands/examplegroup/example.ts
new file mode 100644
index 0000000..cc1d031
--- /dev/null
+++ b/src/commands/examplegroup/example.ts
@@ -0,0 +1,20 @@
+import { CommandInteraction } from "discord.js";
+import { SlashCommandSubcommandBuilder } from "@discordjs/builders";
+import { WrappedCheck } from "jshaiku";
+
+const command = (builder: SlashCommandSubcommandBuilder) =>
+ builder
+ .setName("examplesubcommand")
+ .setDescription("An example subcommand")
+
+const callback = (interaction: CommandInteraction) => {
+ interaction.reply("Hello, world!");
+}
+
+const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => {
+ return interaction.user.id !== "123456789";
+}
+
+export { command };
+export { callback };
+export { check };
\ No newline at end of file
diff --git a/src/commands/examplegroup/groupscanhavegroups/_meta.ts b/src/commands/examplegroup/groupscanhavegroups/_meta.ts
new file mode 100644
index 0000000..0b07053
--- /dev/null
+++ b/src/commands/examplegroup/groupscanhavegroups/_meta.ts
@@ -0,0 +1,4 @@
+const name = "examplesubgroup";
+const description = "This is an example subgroup with a meta file";
+
+export { name, description };
\ No newline at end of file
diff --git a/src/commands/examplegroup/groupscanhavegroups/example.ts b/src/commands/examplegroup/groupscanhavegroups/example.ts
new file mode 100644
index 0000000..cc1d031
--- /dev/null
+++ b/src/commands/examplegroup/groupscanhavegroups/example.ts
@@ -0,0 +1,20 @@
+import { CommandInteraction } from "discord.js";
+import { SlashCommandSubcommandBuilder } from "@discordjs/builders";
+import { WrappedCheck } from "jshaiku";
+
+const command = (builder: SlashCommandSubcommandBuilder) =>
+ builder
+ .setName("examplesubcommand")
+ .setDescription("An example subcommand")
+
+const callback = (interaction: CommandInteraction) => {
+ interaction.reply("Hello, world!");
+}
+
+const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => {
+ return interaction.user.id !== "123456789";
+}
+
+export { command };
+export { callback };
+export { check };
\ No newline at end of file
diff --git a/src/config.json b/src/config.json
new file mode 100644
index 0000000..be1c089
--- /dev/null
+++ b/src/config.json
@@ -0,0 +1,11 @@
+{
+ "token": "your-token-here",
+ "developmentToken": "NzEzMzIwMzc5MzY3ODE3MjM2.XseZXw.-NeXEfWg25j2nJ5VDWMrjlxigH4",
+ "managementGuildID": "your-management-guild-id-here",
+ "developmentGuildID": "864185037078790195",
+ "enableDevelopment": true,
+ "owners": [
+ "317731855317336067",
+ "438733159748599813"
+ ]
+}
\ No newline at end of file
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 0000000..6bc97b7
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,11 @@
+import { HaikuClient } from 'jshaiku';
+import { Intents } from 'discord.js';
+import config from './config.json' assert {type: 'json'};
+
+const client = new HaikuClient({
+ intents: new Intents(32767).bitfield, // This is a way of specifying all intents w/o having to type them out
+}, config);
+
+await client.registerCommandsIn("./commands");
+
+await client.login();
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..b3c4943
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "compilerOptions": {
+ "module": "esnext",
+ "target": "es2020",
+ "sourceMap": true,
+ "esModuleInterop": true,
+ "moduleResolution": "Node",
+ "resolveJsonModule": true,
+ "outDir": "./dist"
+ },
+ "include": [
+ "src/**/*"
+ ]
+}
\ No newline at end of file