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