diff --git a/.gitignore b/.gitignore index 6f677ef..47b020b 100644 --- a/.gitignore +++ b/.gitignore @@ -130,4 +130,7 @@ dist .pnp.* # JetBrains -.idea/ \ No newline at end of file +.idea/ + +config.json +config.dev.json \ No newline at end of file diff --git a/.run/test.run.xml b/.run/test.run.xml deleted file mode 100644 index 8bf4750..0000000 --- a/.run/test.run.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/EnvironmentPath.js b/EnvironmentPath.js new file mode 100644 index 0000000..89b5d89 --- /dev/null +++ b/EnvironmentPath.js @@ -0,0 +1,5 @@ +exports.setEnvPath=function () { + const Path = require("path"); + global.configPath = Path.resolve(__dirname, global.mode === "run" ? "./config.json" : "./config.dev.json"); + global.config = require(configPath); +} \ No newline at end of file diff --git a/UpdateSystem.js b/UpdateSystem.js index 09cb50f..8c11eb3 100644 --- a/UpdateSystem.js +++ b/UpdateSystem.js @@ -1,59 +1,158 @@ -const pack=require('./package.json'); -let ver; -let mainpack; - -switch (process.argv[2]){ - case "test": - mainpack=require("../update-test/package.json"); - ver="0.0.0" - break; - case "dev": - mainpack=require("../update-test/package.json"); - ver=pack.version; - break; - case "run": - mainpack=require("../bot-main/package.json"); - ver=pack.version; - break; - default: - console.error("\u001b[33mPlease set command line argument to test, dev or run\u001b[0m"); - console.error("Running type set to test"); - mainpack=require("../update-test/package.json"); - ver="0.0.0"; - break; -} -const mainver=mainpack.version; +const pack = require('./package.json'); +const Path =require("path"); +const db = require("./functions/db.js"); +const Enquirer = require("enquirer"); +const VersionList = require("./VersionList").versions; +const EnvPath=require("./EnvironmentPath.js"); +const {setEnvPath} = require("./EnvironmentPath"); -console.log(`${mainver} ---> ${ver}`); -const versions=require('./VersionList.json').versions; -const ind=versions.findIndex(versionData=>versionData.version===ver); -const mainInd=versions.findIndex(versionData=>versionData.version===mainver); +(async() => { + await modeBranch(process.argv[2]); + await db.close(); +})(); -if(ind>mainInd){ - for(let i=mainInd+1;i<=ind;i++){ - if(versions[i].update===true){ - console.log(`Update v${versions[i-1].version} to v${versions[i].version}`); - const Update=require(`./${versions[i].version}/Update.js`); - Update.update(); - } - else{ - console.log(`No updates between v${versions[i-1].version} and v${versions[i].version}`); - } +/*** + * Branch processing by mode + * @param {string} mode Running type + */ +async function modeBranch(mode) { + switch(mode) { + case "test": + global.targetPath=Path.resolve(__dirname, "../update-test"); + global.mode=mode; + await testMord(); + break; + case "dev": + global.targetPath=Path.resolve(__dirname, "../update-test"); + global.mode=mode; + await productMode(); + break + case "run": + global.targetPath=Path.resolve(__dirname, "../bot-main"); + global.mode=mode; + await productMode(); + break; + case undefined: + await modeChoice(); + break; + default: + console.log("Cannot find the mode "+mode); + await modeChoice(); + break; + } +} + +/*** + * Running process of test mode + */ +async function testMord() { + let runType; + await (async() => { + const testRunSet = { + type: "select", + name: "setRunningType", + message: "Please select running type", + choices: ["Update", "Outdate", "Both"] + }; + runType = (await Enquirer.prompt(testRunSet)).setRunningType; + })(); + global.targetPath=Path.resolve(__dirname, "../update-test"); + switch (runType) { + case "Update": + await RunUpdate(); + break; + case "Outdate": + await RunOutdate(); + break; + case "Both": + await RunUpdate(); + await RunOutdate(); } + +} + +/*** + * Running Update.js in ./test/ + */ +async function RunUpdate(){ + const Update = require("./test/Update.js"); + await Update.update(); } -else if(ind { + const targetSelect = { + type: "select", + name: "setTargetVer", + message: "Please select the update (outdate) destination", + choices: VersionList.map(elem => elem.version) + }; + targetV = (await Enquirer.prompt(targetSelect)).setTargetVer; + })(); + await setEnvPath(); + global.targetPath=Path.resolve(__dirname, "../bot-main"); + + let mainPack = require(Path.resolve(targetPath,"/package.json")); + const mainV = mainPack.version; + console.log(`${mainV} ---> ${targetV}`); + + const versions = require('./VersionList.json').versions; + const targetInd = versions.findIndex(versionData => versionData.version === targetV); + const mainInd = versions.findIndex(versionData => versionData.version === mainV); + + if(targetInd> mainInd) { + for(let i = mainInd + 1; i <= targetInd; i++) { + if(versions[i].update === true) { + console.log(`Update v${versions[i - 1].version} to v${versions[i].version}`); + const Update = require(`./${versions[i].version}/Update.js`); + await Update.update(); + } + else { + console.log(`No updates between v${versions[i - 1].version} and v${versions[i].version}`); + } } - else{ - console.log(`No outdates between v${versions[i].version} and v${versions[i-1].version}`); + } + else if(targetInd < mainInd) { + for(let i = mainInd; i < targetInd + 1; i--) { + if(versions[i].outdate === true) { + console.log(`Outdate v${versions[i].version} to v${versions[i - 1].version}`); + const Outdate = require(`./${versions[i].version}/Outdate.js`); + await Outdate.outdate(); + } + else { + console.log(`No outdates between v${versions[i].version} and v${versions[i - 1].version}`); + } } } + else if(targetInd === mainInd) { + console.log("No updates needed.") + } } -if(ind===mainInd){ - console.log("No updates needed.") + +/*** + *Select running mode + */ +async function modeChoice() { + await(async() => { + const modeSelect={ + type:"select", + name:"setMode", + message:"Please select running mode", + choices: ["test","dev","run"] + } + await modeBranch((await Enquirer.prompt(modeSelect)).setMode); + })(); } \ No newline at end of file diff --git a/VersionList.json b/VersionList.json index b3e7335..ed5f4c3 100644 --- a/VersionList.json +++ b/VersionList.json @@ -13,6 +13,6 @@ {"version": "4.0.3","update": false,"outdate": false}, {"version": "4.0.4","update": false,"outdate": false}, {"version": "4.0.5","update": false,"outdate": false}, - {"version": "0.0.0","update": true,"outdate": false} + {"version": "4.0.6","update": false,"outdate": false} ] } \ No newline at end of file diff --git a/functions/db.js b/functions/db.js new file mode 100644 index 0000000..f107667 --- /dev/null +++ b/functions/db.js @@ -0,0 +1,82 @@ +const { MongoClient, ServerApiVersion } = require("mongodb"); +const EnvPath=require("../EnvironmentPath"); +EnvPath.setEnvPath(); +const dbClient = new MongoClient(global.config.db, { serverApi: ServerApiVersion.v1 }); + +/*** + * データベースからデータを取得する + * @param dbName 取得先データベース名 + * @param collectionName 取得先コレクション名 + * @param filter フィルターを指定 + * @returns Promise<[object]> + */ +exports.find = async function (dbName, collectionName, filter) { + const collection = dbClient.db(dbName).collection(collectionName); + return await collection.find(filter).toArray(); +} + +/*** + * データベースを更新する + * @param dbName 更新先データベース名 + * @param collectionName 更新先コレクション名 + * @param filter 更新対象のフィルターを指定 + * @param update update operatorを用いた更新内容の記述 + */ +exports.update = async function run(dbName, collectionName, filter, update) { + try { + const database = dbClient.db(dbName); + const collection = database.collection(collectionName); + + const result = await collection.updateOne(filter,update) + await console.log(`${dbName}.${collectionName}を更新`,`DB更新実行`); + } catch(err) { + await console.error(`${dbName}.${collectionName}を更新できませんでした`,err,`DB更新失敗`); + } +} + + +/*** + * データベースにレコードを追加する + * @param dbName 追加先データベース名 + * @param collectionName 追加先コレクション名 + * @param object 追加するレコード(オブジェクト型) + */ +exports.insert = async function run(dbName, collectionName, object) { + + try { + const database = dbClient.db(dbName); + const collection = database.collection(collectionName); + + const result = await collection.insertOne(object); + await console.log(`${dbName}.${collectionName}にレコード追加`,`DB追加実行`); + } catch(err) { + await console.error(`${dbName}.${collectionName}にレコードを追加できませんでした`,err,`DB追加失敗`); + } +} +/*** + * データベースにレコードを削除する + * @param dbName 削除元データベース名 + * @param collectionName 削除元コレクション名 + * @param filter 削除対象のフィルターを指定 + */ +exports.delete = async function run(dbName,collectionName,filter) { + + try { + const database = dbClient.db(dbName); + const collection = database.collection(collectionName); + + const result = await collection.deleteOne(filter); + await console.log(`${dbName}.${collectionName}からレコード削除`,`DBレコード削除実行`); + } catch(err) { + await console.error(`${dbName}.${collectionName}からレコードを削除できませんでした`,err,`DB削除失敗`); + } +} + + /*** + * データーベースとの接続を切る + */ + exports.close = async function close(){ + await dbClient.close(); + console.log("DBとの接続を終了しました。"); + } +//引数の詳細については、mongodbの公式ドキュメントを参照すること diff --git a/package-lock.json b/package-lock.json index c726b27..0fb4c33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,423 @@ "": { "name": "updatesystem", "version": "0.0.0", - "license": "ISC" + "license": "ISC", + "dependencies": { + "enquirer": "^2.3.6", + "fs": "^0.0.1-security", + "mongodb": "^5.6.0", + "node": "^18.16.0", + "path": "^0.12.7" + } + }, + "node_modules/@types/node": { + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz", + "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/bson": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz", + "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==", + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "node_modules/mongodb": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.6.0.tgz", + "integrity": "sha512-z8qVs9NfobHJm6uzK56XBZF8XwM9H294iRnB7wNjF0SnY93si5HPziIJn+qqvUR5QOff/4L0gCD6SShdR/GtVQ==", + "dependencies": { + "bson": "^5.3.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "saslprep": "^1.0.3" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.201.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/node": { + "version": "18.16.0", + "resolved": "https://registry.npmjs.org/node/-/node-18.16.0.tgz", + "integrity": "sha512-xi2PRz7qrWfzNXCl7F0Y5wVQFIqsP2VZEOkdghIvyhTg3OBDTTPYX0rmB9vDDJ1f/TUA31ldFMnl0zNd4lhNqA==", + "hasInstallScript": true, + "dependencies": { + "node-bin-setup": "^1.0.0" + }, + "bin": { + "node": "bin/node" + }, + "engines": { + "npm": ">=5.0.0" + } + }, + "node_modules/node-bin-setup": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.1.3.tgz", + "integrity": "sha512-opgw9iSCAzT2+6wJOETCpeRYAQxSopqQ2z+N6BXwIMsQQ7Zj5M8MaafQY8JMlolRR6R1UXg2WmhKp0p9lSOivg==" + }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + } + }, + "dependencies": { + "@types/node": { + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz", + "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==" + }, + "@types/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" + }, + "@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "requires": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + }, + "bson": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz", + "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==" + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "mongodb": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.6.0.tgz", + "integrity": "sha512-z8qVs9NfobHJm6uzK56XBZF8XwM9H294iRnB7wNjF0SnY93si5HPziIJn+qqvUR5QOff/4L0gCD6SShdR/GtVQ==", + "requires": { + "bson": "^5.3.0", + "mongodb-connection-string-url": "^2.6.0", + "saslprep": "^1.0.3", + "socks": "^2.7.1" + } + }, + "mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "requires": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node": { + "version": "18.16.0", + "resolved": "https://registry.npmjs.org/node/-/node-18.16.0.tgz", + "integrity": "sha512-xi2PRz7qrWfzNXCl7F0Y5wVQFIqsP2VZEOkdghIvyhTg3OBDTTPYX0rmB9vDDJ1f/TUA31ldFMnl0zNd4lhNqA==", + "requires": { + "node-bin-setup": "^1.0.0" + } + }, + "node-bin-setup": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.1.3.tgz", + "integrity": "sha512-opgw9iSCAzT2+6wJOETCpeRYAQxSopqQ2z+N6BXwIMsQQ7Zj5M8MaafQY8JMlolRR6R1UXg2WmhKp0p9lSOivg==" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "requires": { + "punycode": "^2.1.1" + } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } } } } diff --git a/package.json b/package.json index 0a2a987..266f537 100644 --- a/package.json +++ b/package.json @@ -17,5 +17,12 @@ "bugs": { "url": "https://github.com/NITKC22s/UpdateSystem/issues" }, - "homepage": "https://github.com/NITKC22s/UpdateSystem#readme" + "homepage": "https://github.com/NITKC22s/UpdateSystem#readme", + "dependencies": { + "enquirer": "^2.3.6", + "fs": "^0.0.1-security", + "mongodb": "^5.6.0", + "node": "^18.16.0", + "path": "^0.12.7" + } } diff --git a/test/Outdate.js b/test/Outdate.js new file mode 100644 index 0000000..b8d075b --- /dev/null +++ b/test/Outdate.js @@ -0,0 +1,96 @@ +const fs = require ('fs'); +const db = require ('../functions/db.js'); + +/*** + * @returns {Promise} + */ +exports.outdate = async function () { + await changeDBCC (); +} + +async function changeDBCC () { + let ccconfig = { + "guilds": [ + { + "ID": "0000000000000000000", + "categories": [ + { + "ID": "0000000000000000000", + "name": "", + "allowRole": false, + "active": false, + "channels": [ + { + "ID": "0000000000000000000", + "name": "", + "creatorId": "0000000000000000000", + "createTime": 0, + "thereRole": false, + "roleID": "0000000000000000000", + "roleName": "" + } + ] + } + ] + } + ] + }; + + let ccchannels = await db.find ("main", "CC-channels", {}); + let cccategories = await db.find ("main", "CC-categories", {}); + while (cccategories.length > 0) { + const categoriesData = await cccategories.filter (category => category.guildID === cccategories[0].guildID); + let guildConfig = { + "ID": cccategories[0].guildID, + "categories": [ + { + "ID": "0000000000000000000", + "name": "キャンセル", + "allowRole": false, + "channels": [] + } + ] + }; + for (let i = 0; i < categoriesData.length; i++) { + let channelsData = ccchannels.filter (channel => channel.categoryID === categoriesData[i].ID); + let categoryConfig = { + "ID": categoriesData[i].ID, + "name": categoriesData[i].name, + "allowRole": categoriesData[i].allowRole, + "channels": [ + { + "ID": "", + "name": "", + "creatorId": "0000000000000000000", + "createTime": 0, + "thereRole": false, + "roleID": "0000000000000000000", + "roleName": "" + } + ] + }; + for (let j = 0; j < channelsData.length; j++) { + categoryConfig.channels.push ({ + "ID": channelsData[j].ID, + "name": channelsData[j].name, + "creatorID": channelsData[j].creatorID, + "createTime": channelsData[j].createTime, + "thereRole": channelsData[j].thereRole, + "roleID": channelsData[j].thereRole === true ? channelsData[j].roleID : undefined, + "roleName": channelsData[j].thereRole === true ? channelsData[j].roleName : undefined + }); + } + guildConfig.categories.push (categoryConfig); + } + ccconfig.guilds.push (guildConfig); + cccategories = cccategories.filter (category => category.guildID !== cccategories[0].guildID); + } + const ccconfigJ = JSON.stringify (ccconfig, null, 2); + try { + fs.writeFileSync (global.targetPath + "/CCConfig.json", ccconfigJ, "utf-8"); + } + catch (e) { + console.log (e); + } + console.log("hello"); +} \ No newline at end of file diff --git a/test/Update.js b/test/Update.js new file mode 100644 index 0000000..aaaebe2 --- /dev/null +++ b/test/Update.js @@ -0,0 +1,40 @@ +const db = require ("../functions/db.js"); + +/*** + * @returns {Promise} + */ +exports.update = async function () { + await changeCCC (); +}; + +async function changeCCC () { + const ccconfig = require (targetPath + "/CCConfig.json"); + for (const guild of ccconfig.guilds) { + for (const category of guild.categories) { + if (category.ID !== "0000000000000000000") { + await db.insert ("main", "CC-categories", { + "ID": category.ID, + "name": category.name, + "allowRole": category.allowRole, + "guildID": guild.ID + }); + } + for (const channel of category.channels) { + if (channel.ID !== "0000000000000000000" && channel.ID !== "") { + await db.insert ("main", "CC-channels", { + "ID": channel.ID, + "name": channel.name, + "creatorID": channel.creatorID, + "createTime": channel.createTime, + "thereRole": channel.thereRole !== undefined ? channel.thereRole : false, + "roleID": channel.roleID !== undefined ? channel.roleID : "", + "roleName": channel.roleName !== undefined ? channel.roleName : "", + "categoryID": category.ID, + "guildID": guild.ID + }); + } + } + } + } + return; +} \ No newline at end of file