mirror of
https://github.com/SrIzan10/vinci.git
synced 2026-06-06 01:07:00 +00:00
feat: mongodb migrations
This commit is contained in:
4
TODO.md
4
TODO.md
@@ -9,7 +9,6 @@
|
||||
- [x] /megamind - Megamind meme generator with canvas
|
||||
- [x] /makesweet - Heart locket image generator
|
||||
- [x] /a - Custom command with user autocomplete
|
||||
- [ ] /cursivify - Context menu command to italicize text
|
||||
|
||||
## Miscellaneous Commands
|
||||
- [ ] /rolemenu - Role selection menu (owner only)
|
||||
@@ -68,3 +67,6 @@
|
||||
- [ ] API integrations (TheCatAPI, TheDogAPI, Genius, etc.)
|
||||
- [ ] Canvas-based image generation
|
||||
- [ ] Modal forms and user input handling
|
||||
|
||||
# Other
|
||||
- [ ] Figure out fonts
|
||||
28
bun.lock
28
bun.lock
@@ -10,10 +10,12 @@
|
||||
"@sern/publisher": "^1.1.1",
|
||||
"discord.js": "latest",
|
||||
"dotenv": "^16.3.1",
|
||||
"mongodb": "^6.17.0",
|
||||
"sharp": "^0.34.2",
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sern/cli": "^1.4.0",
|
||||
"@types/mongodb": "^4.0.7",
|
||||
"@types/node": "^17.0.25",
|
||||
"prisma": "^6.10.1",
|
||||
"typescript": "^5.0",
|
||||
@@ -131,6 +133,8 @@
|
||||
|
||||
"@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="],
|
||||
|
||||
"@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.3.0", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-zlayKCsIjYb7/IdfqxorK5+xUMyi4vOKcFy10wKJYc63NSdKI8mNME+uJqfatkPmOSMMUiojrL58IePKBm3gvQ=="],
|
||||
|
||||
"@napi-rs/canvas": ["@napi-rs/canvas@0.1.72", "", { "optionalDependencies": { "@napi-rs/canvas-android-arm64": "0.1.72", "@napi-rs/canvas-darwin-arm64": "0.1.72", "@napi-rs/canvas-darwin-x64": "0.1.72", "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.72", "@napi-rs/canvas-linux-arm64-gnu": "0.1.72", "@napi-rs/canvas-linux-arm64-musl": "0.1.72", "@napi-rs/canvas-linux-riscv64-gnu": "0.1.72", "@napi-rs/canvas-linux-x64-gnu": "0.1.72", "@napi-rs/canvas-linux-x64-musl": "0.1.72", "@napi-rs/canvas-win32-x64-msvc": "0.1.72" } }, "sha512-ypTJ/DXzsJbTU3o7qXFlWmZGgEbh42JWQl7v5/i+DJz/HURELcSnq9ler9e1ukqma70JzmCQcIseiE/Xs6sczw=="],
|
||||
|
||||
"@napi-rs/canvas-android-arm64": ["@napi-rs/canvas-android-arm64@0.1.72", "", { "os": "android", "cpu": "arm64" }, "sha512-OW99TDJEdfOhpJWQ7SXFsQi1BXd6UFuWM8AoQvJ0SQMHWY/iwuopmb1UqGV6Df9aM/SWxvCWBN/onjeCM8KVKQ=="],
|
||||
@@ -185,8 +189,14 @@
|
||||
|
||||
"@types/luxon": ["@types/luxon@3.4.2", "", {}, "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA=="],
|
||||
|
||||
"@types/mongodb": ["@types/mongodb@4.0.7", "", { "dependencies": { "mongodb": "*" } }, "sha512-lPUYPpzA43baXqnd36cZ9xxorprybxXDzteVKCPAdp14ppHtFJHnXYvNpmBvtMUTb5fKXVv6sVbzo1LHkWhJlw=="],
|
||||
|
||||
"@types/node": ["@types/node@17.0.45", "", {}, "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="],
|
||||
|
||||
"@types/webidl-conversions": ["@types/webidl-conversions@7.0.3", "", {}, "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="],
|
||||
|
||||
"@types/whatwg-url": ["@types/whatwg-url@11.0.5", "", { "dependencies": { "@types/webidl-conversions": "*" } }, "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ=="],
|
||||
|
||||
"@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="],
|
||||
|
||||
"@vladfrangu/async_event_emitter": ["@vladfrangu/async_event_emitter@2.4.6", "", {}, "sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA=="],
|
||||
@@ -203,6 +213,8 @@
|
||||
|
||||
"brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="],
|
||||
|
||||
"bson": ["bson@6.10.4", "", {}, "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng=="],
|
||||
|
||||
"buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="],
|
||||
|
||||
"buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="],
|
||||
@@ -305,6 +317,8 @@
|
||||
|
||||
"magic-bytes.js": ["magic-bytes.js@1.12.1", "", {}, "sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA=="],
|
||||
|
||||
"memory-pager": ["memory-pager@1.5.0", "", {}, "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="],
|
||||
|
||||
"merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="],
|
||||
|
||||
"mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="],
|
||||
@@ -313,6 +327,10 @@
|
||||
|
||||
"minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="],
|
||||
|
||||
"mongodb": ["mongodb@6.17.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.1.9", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.0" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.2.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-neerUzg/8U26cgruLysKEjJvoNSXhyID3RvzvdcpsIi2COYM3FS3o9nlH7fxFtefTb942dX3W9i37oPfCVj4wA=="],
|
||||
|
||||
"mongodb-connection-string-url": ["mongodb-connection-string-url@3.0.2", "", { "dependencies": { "@types/whatwg-url": "^11.0.2", "whatwg-url": "^14.1.0 || ^13.0.0" } }, "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA=="],
|
||||
|
||||
"npm-run-path": ["npm-run-path@5.3.0", "", { "dependencies": { "path-key": "^4.0.0" } }, "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ=="],
|
||||
|
||||
"onetime": ["onetime@6.0.0", "", { "dependencies": { "mimic-fn": "^4.0.0" } }, "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ=="],
|
||||
@@ -335,6 +353,8 @@
|
||||
|
||||
"prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="],
|
||||
|
||||
"punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
|
||||
|
||||
"readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="],
|
||||
|
||||
"resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="],
|
||||
@@ -361,6 +381,8 @@
|
||||
|
||||
"source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="],
|
||||
|
||||
"sparse-bitfield": ["sparse-bitfield@3.0.3", "", { "dependencies": { "memory-pager": "^1.0.2" } }, "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ=="],
|
||||
|
||||
"stdin-discarder": ["stdin-discarder@0.1.0", "", { "dependencies": { "bl": "^5.0.0" } }, "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ=="],
|
||||
|
||||
"streamsearch": ["streamsearch@1.1.0", "", {}, "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg=="],
|
||||
@@ -377,6 +399,8 @@
|
||||
|
||||
"strip-final-newline": ["strip-final-newline@3.0.0", "", {}, "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="],
|
||||
|
||||
"tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="],
|
||||
|
||||
"ts-mixer": ["ts-mixer@6.0.4", "", {}, "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA=="],
|
||||
|
||||
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
||||
@@ -389,6 +413,10 @@
|
||||
|
||||
"wcwidth": ["wcwidth@1.0.1", "", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="],
|
||||
|
||||
"webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="],
|
||||
|
||||
"whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="],
|
||||
|
||||
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
|
||||
|
||||
"wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="],
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
"@sern/publisher": "^1.1.1",
|
||||
"discord.js": "latest",
|
||||
"dotenv": "^16.3.1",
|
||||
"mongodb": "^6.17.0",
|
||||
"sharp": "^0.34.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sern/cli": "^1.4.0",
|
||||
"@types/mongodb": "^4.0.7",
|
||||
"@types/node": "^17.0.25",
|
||||
"prisma": "^6.10.1",
|
||||
"typescript": "^5.0"
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "ai_chats" (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
"messageid" TEXT NOT NULL,
|
||||
"threadid" TEXT NOT NULL
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "AIMessage" (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
"role" TEXT NOT NULL,
|
||||
"content" TEXT NOT NULL,
|
||||
"aiChatId" INTEGER NOT NULL,
|
||||
CONSTRAINT "AIMessage_aiChatId_fkey" FOREIGN KEY ("aiChatId") REFERENCES "ai_chats" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
);
|
||||
19
prisma/migrations/20250628135845_fix_caps/migration.sql
Normal file
19
prisma/migrations/20250628135845_fix_caps/migration.sql
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- You are about to drop the `AIMessage` table. If the table is not empty, all the data it contains will be lost.
|
||||
|
||||
*/
|
||||
-- DropTable
|
||||
PRAGMA foreign_keys=off;
|
||||
DROP TABLE "AIMessage";
|
||||
PRAGMA foreign_keys=on;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "AiMessage" (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
"role" TEXT NOT NULL,
|
||||
"content" TEXT NOT NULL,
|
||||
"aiChatId" INTEGER NOT NULL,
|
||||
CONSTRAINT "AiMessage_aiChatId_fkey" FOREIGN KEY ("aiChatId") REFERENCES "ai_chats" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
);
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- You are about to drop the `ai_chats` table. If the table is not empty, all the data it contains will be lost.
|
||||
|
||||
*/
|
||||
-- DropTable
|
||||
PRAGMA foreign_keys=off;
|
||||
DROP TABLE "ai_chats";
|
||||
PRAGMA foreign_keys=on;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "AiChat" (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
"messageid" TEXT NOT NULL,
|
||||
"threadid" TEXT NOT NULL
|
||||
);
|
||||
|
||||
-- RedefineTables
|
||||
PRAGMA defer_foreign_keys=ON;
|
||||
PRAGMA foreign_keys=OFF;
|
||||
CREATE TABLE "new_AiMessage" (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
"role" TEXT NOT NULL,
|
||||
"content" TEXT NOT NULL,
|
||||
"aiChatId" INTEGER NOT NULL,
|
||||
CONSTRAINT "AiMessage_aiChatId_fkey" FOREIGN KEY ("aiChatId") REFERENCES "AiChat" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
);
|
||||
INSERT INTO "new_AiMessage" ("aiChatId", "content", "id", "role") SELECT "aiChatId", "content", "id", "role" FROM "AiMessage";
|
||||
DROP TABLE "AiMessage";
|
||||
ALTER TABLE "new_AiMessage" RENAME TO "AiMessage";
|
||||
PRAGMA foreign_keys=ON;
|
||||
PRAGMA defer_foreign_keys=OFF;
|
||||
10
prisma/migrations/20250628140420_afk/migration.sql
Normal file
10
prisma/migrations/20250628140420_afk/migration.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "Afk" (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
"userId" TEXT NOT NULL,
|
||||
"reason" TEXT NOT NULL,
|
||||
"expiresAt" DATETIME NOT NULL
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Afk_userId_key" ON "Afk"("userId");
|
||||
12
prisma/migrations/20250628140820_unique_chat/migration.sql
Normal file
12
prisma/migrations/20250628140820_unique_chat/migration.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- A unique constraint covering the columns `[messageid]` on the table `AiChat` will be added. If there are existing duplicate values, this will fail.
|
||||
- A unique constraint covering the columns `[threadid]` on the table `AiChat` will be added. If there are existing duplicate values, this will fail.
|
||||
|
||||
*/
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "AiChat_messageid_key" ON "AiChat"("messageid");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "AiChat_threadid_key" ON "AiChat"("threadid");
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- You are about to drop the column `expiresAt` on the `Afk` table. All the data in the column will be lost.
|
||||
|
||||
*/
|
||||
-- RedefineTables
|
||||
PRAGMA defer_foreign_keys=ON;
|
||||
PRAGMA foreign_keys=OFF;
|
||||
CREATE TABLE "new_Afk" (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
"userId" TEXT NOT NULL,
|
||||
"reason" TEXT NOT NULL
|
||||
);
|
||||
INSERT INTO "new_Afk" ("id", "reason", "userId") SELECT "id", "reason", "userId" FROM "Afk";
|
||||
DROP TABLE "Afk";
|
||||
ALTER TABLE "new_Afk" RENAME TO "Afk";
|
||||
CREATE UNIQUE INDEX "Afk_userId_key" ON "Afk"("userId");
|
||||
PRAGMA foreign_keys=ON;
|
||||
PRAGMA defer_foreign_keys=OFF;
|
||||
10
prisma/migrations/20250628153216_birthday/migration.sql
Normal file
10
prisma/migrations/20250628153216_birthday/migration.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "Birthday" (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
"userId" TEXT NOT NULL,
|
||||
"date" TEXT NOT NULL,
|
||||
"sent" BOOLEAN NOT NULL DEFAULT false
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Birthday_userId_key" ON "Birthday"("userId");
|
||||
12
prisma/migrations/20250628162223_suggestions/migration.sql
Normal file
12
prisma/migrations/20250628162223_suggestions/migration.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "Suggestion" (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
"userId" TEXT NOT NULL,
|
||||
"msgId" TEXT NOT NULL
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Suggestion_userId_key" ON "Suggestion"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Suggestion_msgId_key" ON "Suggestion"("msgId");
|
||||
22
prisma/migrations/20250628162355_up_or_down/migration.sql
Normal file
22
prisma/migrations/20250628162355_up_or_down/migration.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- Added the required column `upDown` to the `Suggestion` table without a default value. This is not possible if the table is not empty.
|
||||
|
||||
*/
|
||||
-- RedefineTables
|
||||
PRAGMA defer_foreign_keys=ON;
|
||||
PRAGMA foreign_keys=OFF;
|
||||
CREATE TABLE "new_Suggestion" (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
"userId" TEXT NOT NULL,
|
||||
"msgId" TEXT NOT NULL,
|
||||
"upDown" INTEGER NOT NULL
|
||||
);
|
||||
INSERT INTO "new_Suggestion" ("id", "msgId", "userId") SELECT "id", "msgId", "userId" FROM "Suggestion";
|
||||
DROP TABLE "Suggestion";
|
||||
ALTER TABLE "new_Suggestion" RENAME TO "Suggestion";
|
||||
CREATE UNIQUE INDEX "Suggestion_userId_key" ON "Suggestion"("userId");
|
||||
CREATE UNIQUE INDEX "Suggestion_msgId_key" ON "Suggestion"("msgId");
|
||||
PRAGMA foreign_keys=ON;
|
||||
PRAGMA defer_foreign_keys=OFF;
|
||||
@@ -0,0 +1,2 @@
|
||||
-- DropIndex
|
||||
DROP INDEX "Suggestion_userId_key";
|
||||
2
prisma/migrations/20250628163113_aaaa/migration.sql
Normal file
2
prisma/migrations/20250628163113_aaaa/migration.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
-- DropIndex
|
||||
DROP INDEX "Suggestion_msgId_key";
|
||||
3
prisma/migrations/migration_lock.toml
Normal file
3
prisma/migrations/migration_lock.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
# Please do not edit this file manually
|
||||
# It should be added in your version-control system (e.g., Git)
|
||||
provider = "sqlite"
|
||||
@@ -13,3 +13,40 @@ datasource db {
|
||||
provider = "sqlite"
|
||||
url = "file:./vinci.db"
|
||||
}
|
||||
|
||||
model AiChat {
|
||||
id Int @id @default(autoincrement())
|
||||
messageid String @unique
|
||||
threadid String @unique
|
||||
messages AiMessage[]
|
||||
}
|
||||
|
||||
model AiMessage {
|
||||
id Int @id @default(autoincrement())
|
||||
role String
|
||||
content String
|
||||
|
||||
aiChatId Int
|
||||
aiChat AiChat @relation(fields: [aiChatId], references: [id])
|
||||
}
|
||||
|
||||
model Afk {
|
||||
id Int @id @default(autoincrement())
|
||||
userId String @unique
|
||||
reason String
|
||||
}
|
||||
|
||||
model Birthday {
|
||||
id Int @id @default(autoincrement())
|
||||
userId String @unique
|
||||
date String
|
||||
sent Boolean @default(false)
|
||||
}
|
||||
|
||||
model Suggestion {
|
||||
id Int @id @default(autoincrement())
|
||||
userId String
|
||||
msgId String
|
||||
upDown Int
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ export default commandModule({
|
||||
'A lo mejor',
|
||||
'No cuentes con ello',
|
||||
'Buena suerte',
|
||||
'No lo creo',
|
||||
];
|
||||
await ctx.reply({
|
||||
content: `La bola tiene respuesta: ${
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// command of the year
|
||||
|
||||
import { commandModule, CommandType } from '@sern/handler';
|
||||
import { ApplicationCommandOptionType } from 'discord.js';
|
||||
import { ActionRowBuilder, ApplicationCommandOptionType, ButtonBuilder, ButtonStyle } from 'discord.js';
|
||||
|
||||
export default commandModule({
|
||||
type: CommandType.Slash,
|
||||
@@ -16,8 +16,16 @@ export default commandModule({
|
||||
execute: async (ctx) => {
|
||||
const query = ctx.options.getString('query', true);
|
||||
const url = `https://google.com/search?q=${encodeURIComponent(query)}`;
|
||||
|
||||
const button = new ActionRowBuilder<ButtonBuilder>().addComponents(
|
||||
new ButtonBuilder()
|
||||
.setLabel('abrir enlace')
|
||||
.setStyle(ButtonStyle.Link)
|
||||
.setURL(url),
|
||||
)
|
||||
await ctx.reply({
|
||||
content: `<${url}>`,
|
||||
components: [button],
|
||||
});
|
||||
},
|
||||
});
|
||||
143
src/utils/db/migrateMongo.ts
Normal file
143
src/utils/db/migrateMongo.ts
Normal file
@@ -0,0 +1,143 @@
|
||||
import { Db, MongoClient } from 'mongodb';
|
||||
import 'dotenv/config';
|
||||
import prisma from './index';
|
||||
|
||||
export async function migrateMongo(
|
||||
uri: string,
|
||||
dbName: string,
|
||||
migrationScript: (db: Db) => Promise<void>
|
||||
): Promise<void> {
|
||||
const client = new MongoClient(uri);
|
||||
|
||||
try {
|
||||
await client.connect();
|
||||
const db = client.db(dbName);
|
||||
await migrationScript(db);
|
||||
} catch (error) {
|
||||
console.error('Migration failed:', error);
|
||||
} finally {
|
||||
await client.close();
|
||||
}
|
||||
}
|
||||
|
||||
if ((await prisma.aiChat.count()) === 0) {
|
||||
console.log('aichat');
|
||||
migrateMongo(process.env.MONGODB!, 'vinci', async (db) => {
|
||||
// chatgpt logic
|
||||
const aiChat = (await db.collection('chatgpt').find().toArray()) as unknown as ChatGPT[];
|
||||
for (const chat of aiChat) {
|
||||
await prisma.aiChat.create({
|
||||
data: {
|
||||
messageid: chat.messageid,
|
||||
threadid: chat.threadid,
|
||||
messages: {
|
||||
create: chat.messages.map((message) => ({
|
||||
role: message.role,
|
||||
content: message.content,
|
||||
})),
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if ((await prisma.afk.count()) === 0) {
|
||||
console.log('afk');
|
||||
migrateMongo(process.env.MONGODB!, 'vinci', async (db) => {
|
||||
// afk logic
|
||||
const afk = (await db.collection('afk').find().toArray()) as unknown as AFK[];
|
||||
await prisma.afk.createMany({
|
||||
data: afk.map((afk) => ({
|
||||
userId: afk.id,
|
||||
reason: afk.reason,
|
||||
})),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if ((await prisma.birthday.count()) === 0) {
|
||||
console.log('birthday');
|
||||
migrateMongo(process.env.MONGODB!, 'vinci', async (db) => {
|
||||
// birthday logic
|
||||
const birthdays = (await db.collection('birthdays').find().toArray()) as unknown as Birthday[];
|
||||
|
||||
const today = new Date();
|
||||
const todayFormatted = `${today.getDate()}-${today.getMonth() + 1}`;
|
||||
|
||||
await prisma.birthday.createMany({
|
||||
data: birthdays
|
||||
.map((birthday) => {
|
||||
if (todayFormatted !== birthday.date) {
|
||||
birthday.alreadysent = false;
|
||||
}
|
||||
if (birthday.id === undefined) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
userId: birthday.id,
|
||||
date: birthday.date,
|
||||
sent: birthday.alreadysent,
|
||||
};
|
||||
})
|
||||
.filter((data) => data !== null),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if ((await prisma.suggestion.count()) === 0) {
|
||||
console.log('suggestion');
|
||||
migrateMongo(process.env.MONGODB!, 'vinci', async (db) => {
|
||||
// suggestion logic
|
||||
const suggestions = (await db
|
||||
.collection('suggestions')
|
||||
.find()
|
||||
.toArray()) as unknown as Suggestion[];
|
||||
await prisma.suggestion.createMany({
|
||||
data: suggestions.map((suggestion) => {
|
||||
if (suggestion.upordown === undefined) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
userId: suggestion.userid,
|
||||
msgId: suggestion.msgid,
|
||||
upDown: suggestion.upordown,
|
||||
};
|
||||
}).filter((data) => data !== null),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
type ChatGPT = {
|
||||
_id: string;
|
||||
messageid: string;
|
||||
threadid: string;
|
||||
messages: AIMessage[];
|
||||
};
|
||||
|
||||
type AIMessage = {
|
||||
_id: string;
|
||||
role: string;
|
||||
content: string;
|
||||
};
|
||||
|
||||
type AFK = {
|
||||
_id: string;
|
||||
id: string;
|
||||
reason: string;
|
||||
};
|
||||
|
||||
type Birthday = {
|
||||
_id: string;
|
||||
id: string;
|
||||
date: string;
|
||||
alreadysent: boolean;
|
||||
};
|
||||
|
||||
type Suggestion = {
|
||||
_id: string;
|
||||
userid: string;
|
||||
msgid: string;
|
||||
upordown: number;
|
||||
};
|
||||
Reference in New Issue
Block a user