From df43b04bc00ad195aa14d5ac33a1b17a86385e4e Mon Sep 17 00:00:00 2001 From: Shigma <33423008+Shigma@users.noreply.github.com> Date: Sat, 21 Mar 2020 20:02:45 +0800 Subject: [PATCH 01/26] Create FUNDING.yml --- .github/FUNDING.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000..c840e49922 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,13 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: +- https://afdian.net/@shigma From 6abdef1def8529a893b2d7eb65f91310344a8441 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Thu, 26 Mar 2020 17:03:04 +0800 Subject: [PATCH 02/26] fix(core): fix shouldFetchUsage --- packages/koishi-core/src/command.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/koishi-core/src/command.ts b/packages/koishi-core/src/command.ts index d1942c1da6..055d7e8ff5 100644 --- a/packages/koishi-core/src/command.ts +++ b/packages/koishi-core/src/command.ts @@ -98,9 +98,7 @@ export class Command { const { maxUsage, minInterval, authority } = command.config let shouldFetchAuthority = !userFields.has('authority') && authority > 0 - let shouldFetchUsage = !userFields.has('usage') && ( - typeof maxUsage === 'number' && maxUsage < Infinity || - typeof minInterval === 'number' && minInterval > 0) + let shouldFetchUsage = !(userFields.has('usage') || !maxUsage && !minInterval) for (const option of command._options) { if (option.camels[0] in options) { if (option.authority > 0) shouldFetchAuthority = true From 08bf402025e518b5355f51262246a5b84823b096 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Thu, 26 Mar 2020 17:05:01 +0800 Subject: [PATCH 03/26] fix(core): fix ws server broken by cqhttp 4.14 --- packages/koishi-core/src/server.ts | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/packages/koishi-core/src/server.ts b/packages/koishi-core/src/server.ts index 00b7f311a1..ef9290340d 100644 --- a/packages/koishi-core/src/server.ts +++ b/packages/koishi-core/src/server.ts @@ -326,7 +326,6 @@ export class WsClient extends Server { if (error) reject(error) }) - let resolved = false this.socket.on('message', (data) => { data = data.toString() this.debug('receive', data) @@ -337,19 +336,13 @@ export class WsClient extends Server { return reject(new Error(data)) } - if (!resolved) { - resolved = true - this.debug('connect to ws server:', this.app.options.server) - resolve() - } - if ('post_type' in parsed) { const meta = this.prepareMeta(parsed) if (meta) this.dispatchMeta(meta) - } else { - if (parsed.echo === -1) { - this.version = camelCase(parsed.data) - } + } else if (parsed.echo === -1) { + this.version = camelCase(parsed.data) + this.debug('connect to ws server:', this.app.options.server) + resolve() this._listeners[parsed.echo]?.(parsed) } }) From 6e6ff0673c888b6e653bd77c7a95ed769f29475e Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Thu, 26 Mar 2020 17:24:30 +0800 Subject: [PATCH 04/26] chore: bump version --- packages/database-level/package.json | 6 +++--- packages/database-memory/package.json | 4 ++-- packages/database-mysql/package.json | 4 ++-- packages/database-sqlite/package.json | 6 +++--- packages/koishi-cli/package.json | 8 ++++---- packages/koishi-core/package.json | 6 +++--- packages/plugin-common/package.json | 8 ++++---- packages/plugin-nlp/package.json | 6 +++--- packages/plugin-recorder/package.json | 6 +++--- packages/plugin-schedule/package.json | 10 +++++----- packages/plugin-teach/package.json | 10 +++++----- packages/test-utils/package.json | 4 ++-- 12 files changed, 39 insertions(+), 39 deletions(-) diff --git a/packages/database-level/package.json b/packages/database-level/package.json index 6969bcb148..5d1d3d5d0b 100644 --- a/packages/database-level/package.json +++ b/packages/database-level/package.json @@ -1,7 +1,7 @@ { "name": "koishi-database-level", "description": "Leveldb support for Koishi", - "version": "1.1.6", + "version": "1.1.7", "main": "dist/index.js", "files": [ "dist" @@ -33,10 +33,10 @@ "leveldb" ], "devDependencies": { - "koishi-test-utils": "^3.2.1" + "koishi-test-utils": "^3.2.2" }, "peerDependencies": { - "koishi-core": "^1.11.1" + "koishi-core": "^1.11.2" }, "dependencies": { "@types/leveldown": "^4.0.2", diff --git a/packages/database-memory/package.json b/packages/database-memory/package.json index e01e099146..46a701858d 100644 --- a/packages/database-memory/package.json +++ b/packages/database-memory/package.json @@ -1,7 +1,7 @@ { "name": "koishi-database-memory", "description": "An in-memory database implementation for Koishi", - "version": "1.1.6", + "version": "1.1.7", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -22,7 +22,7 @@ }, "homepage": "https://github.com/koishijs/koishi/tree/master/packages/database-memory#readme", "peerDependencies": { - "koishi-core": "^1.11.1" + "koishi-core": "^1.11.2" }, "dependencies": { "koishi-utils": "^1.0.4" diff --git a/packages/database-mysql/package.json b/packages/database-mysql/package.json index 5fe40353d2..a35faf8fc0 100644 --- a/packages/database-mysql/package.json +++ b/packages/database-mysql/package.json @@ -1,7 +1,7 @@ { "name": "koishi-database-mysql", "description": "MySQL support for Koishi", - "version": "1.1.6", + "version": "1.1.7", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -35,7 +35,7 @@ "@types/mysql": "^2.15.9" }, "peerDependencies": { - "koishi-core": "^1.11.1" + "koishi-core": "^1.11.2" }, "dependencies": { "koishi-utils": "^1.0.4", diff --git a/packages/database-sqlite/package.json b/packages/database-sqlite/package.json index 54fe50304d..c2e656c4f6 100644 --- a/packages/database-sqlite/package.json +++ b/packages/database-sqlite/package.json @@ -1,6 +1,6 @@ { "name": "koishi-database-sqlite", - "version": "1.0.0-alpha.12", + "version": "1.0.0-alpha.13", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -22,10 +22,10 @@ "homepage": "https://github.com/koishijs/koishi/tree/master/packages/database-sqlite#readme", "devDependencies": { "@types/sqlite3": "^3.1.6", - "koishi-test-utils": "^3.2.1" + "koishi-test-utils": "^3.2.2" }, "peerDependencies": { - "koishi-core": "^1.11.1" + "koishi-core": "^1.11.2" }, "dependencies": { "koishi-utils": "^1.0.4", diff --git a/packages/koishi-cli/package.json b/packages/koishi-cli/package.json index f3caf0508e..8f34509da1 100644 --- a/packages/koishi-cli/package.json +++ b/packages/koishi-cli/package.json @@ -1,7 +1,7 @@ { "name": "koishi", "description": "A QQ bot framework based on CQHTTP", - "version": "1.11.1", + "version": "1.11.2", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -38,9 +38,9 @@ "cac": "^6.5.7", "js-yaml": "^3.13.1", "kleur": "^3.0.3", - "koishi-core": "^1.11.1", - "koishi-plugin-common": "^2.1.7", - "koishi-plugin-schedule": "^1.0.12", + "koishi-core": "^1.11.2", + "koishi-plugin-common": "^2.1.8", + "koishi-plugin-schedule": "^1.0.13", "koishi-utils": "^1.0.4", "prompts": "^2.3.1" } diff --git a/packages/koishi-core/package.json b/packages/koishi-core/package.json index afc4b092d5..76362a6426 100644 --- a/packages/koishi-core/package.json +++ b/packages/koishi-core/package.json @@ -1,7 +1,7 @@ { "name": "koishi-core", "description": "Core features for Koishi", - "version": "1.11.1", + "version": "1.11.2", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -35,8 +35,8 @@ "@types/debug": "^4.1.5", "@types/ws": "^7.2.2", "get-port": "^5.1.1", - "koishi-database-memory": "^1.1.6", - "koishi-test-utils": "^3.2.1" + "koishi-database-memory": "^1.1.7", + "koishi-test-utils": "^3.2.2" }, "dependencies": { "axios": "^0.19.2", diff --git a/packages/plugin-common/package.json b/packages/plugin-common/package.json index dd65969ce3..b73b3698a5 100644 --- a/packages/plugin-common/package.json +++ b/packages/plugin-common/package.json @@ -1,7 +1,7 @@ { "name": "koishi-plugin-common", "description": "Common plugins for Koishi", - "version": "2.1.7", + "version": "2.1.8", "main": "dist/index.js", "typings": "dist/index.d.ts", "author": "Shigma <1700011071@pku.edu.cn>", @@ -28,11 +28,11 @@ "plugin" ], "devDependencies": { - "koishi-database-memory": "^1.1.6", - "koishi-test-utils": "^3.2.1" + "koishi-database-memory": "^1.1.7", + "koishi-test-utils": "^3.2.2" }, "dependencies": { - "koishi-core": "^1.11.1", + "koishi-core": "^1.11.2", "koishi-utils": "^1.0.4" } } diff --git a/packages/plugin-nlp/package.json b/packages/plugin-nlp/package.json index df82f0d7d6..c4b3bdc676 100644 --- a/packages/plugin-nlp/package.json +++ b/packages/plugin-nlp/package.json @@ -1,7 +1,7 @@ { "name": "koishi-plugin-nlp", "description": "Natural Language Processor for Koishi", - "version": "1.0.7", + "version": "1.0.8", "main": "dist/index.js", "typings": "dist/index.d.ts", "author": "Shigma <1700011071@pku.edu.cn>", @@ -30,10 +30,10 @@ "jieba" ], "devDependencies": { - "koishi-test-utils": "^3.2.1" + "koishi-test-utils": "^3.2.2" }, "dependencies": { - "koishi-core": "^1.11.1", + "koishi-core": "^1.11.2", "koishi-utils": "^1.0.4", "nodejieba": "^2.4.1" } diff --git a/packages/plugin-recorder/package.json b/packages/plugin-recorder/package.json index 61e37cc802..a902f5a74d 100644 --- a/packages/plugin-recorder/package.json +++ b/packages/plugin-recorder/package.json @@ -1,7 +1,7 @@ { "name": "koishi-plugin-recorder", "description": "Save Chat Records for Koishi", - "version": "1.0.0-alpha.10", + "version": "1.0.0-alpha.11", "main": "dist/index.js", "typings": "dist/index.d.ts", "author": "Shigma <1700011071@pku.edu.cn>", @@ -31,10 +31,10 @@ ], "devDependencies": { "del": "^5.1.0", - "koishi-test-utils": "^3.2.1" + "koishi-test-utils": "^3.2.2" }, "dependencies": { - "koishi-core": "^1.11.1", + "koishi-core": "^1.11.2", "koishi-utils": "^1.0.4" } } diff --git a/packages/plugin-schedule/package.json b/packages/plugin-schedule/package.json index 65b6a2fd80..73df0039b8 100644 --- a/packages/plugin-schedule/package.json +++ b/packages/plugin-schedule/package.json @@ -1,7 +1,7 @@ { "name": "koishi-plugin-schedule", "description": "Schedule plugin for Koishi", - "version": "1.0.12", + "version": "1.0.13", "main": "dist/index.js", "typings": "dist/index.d.ts", "author": "Shigma <1700011071@pku.edu.cn>", @@ -31,12 +31,12 @@ ], "devDependencies": { "@types/ms": "^0.7.31", - "koishi-database-level": "^1.1.6", - "koishi-database-mysql": "^1.1.6", - "koishi-test-utils": "^3.2.1" + "koishi-database-level": "^1.1.7", + "koishi-database-mysql": "^1.1.7", + "koishi-test-utils": "^3.2.2" }, "dependencies": { - "koishi-core": "^1.11.1", + "koishi-core": "^1.11.2", "koishi-utils": "^1.0.4", "ms": "^2.1.2" } diff --git a/packages/plugin-teach/package.json b/packages/plugin-teach/package.json index 4ed7492b9d..dc02427f52 100644 --- a/packages/plugin-teach/package.json +++ b/packages/plugin-teach/package.json @@ -1,7 +1,7 @@ { "name": "koishi-plugin-teach", "description": "Teach plugin for Koishi", - "version": "0.1.21", + "version": "0.1.22", "main": "dist/index.js", "typings": "dist/index.d.ts", "author": "Shigma <1700011071@pku.edu.cn>", @@ -31,12 +31,12 @@ "conversation" ], "devDependencies": { - "koishi-database-level": "^1.1.6", - "koishi-database-mysql": "^1.1.6", - "koishi-test-utils": "^3.2.1" + "koishi-database-level": "^1.1.7", + "koishi-database-mysql": "^1.1.7", + "koishi-test-utils": "^3.2.2" }, "dependencies": { - "koishi-core": "^1.11.1", + "koishi-core": "^1.11.2", "koishi-utils": "^1.0.4" } } diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index d9191c61aa..2d46f4705e 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "koishi-test-utils", "description": "Test utilities for Koishi", - "version": "3.2.1", + "version": "3.2.2", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -43,7 +43,7 @@ "axios": "^0.19.2", "debug": "^4.1.1", "get-port": "^5.1.1", - "koishi-core": "^1.11.1", + "koishi-core": "^1.11.2", "koishi-utils": "^1.0.4" } } From fe43409ba4502f5d6f37285c8a53dcf461a4d157 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Thu, 26 Mar 2020 17:26:03 +0800 Subject: [PATCH 05/26] dep: cac: ^6.5.7 -> 6.5.8, prompts: ^2.3.1 -> 2.3.2 --- package.json | 18 +++++++++--------- packages/koishi-cli/package.json | 6 +++--- packages/koishi-core/package.json | 2 +- packages/test-utils/package.json | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 2026a9e44c..854351c6c1 100644 --- a/package.json +++ b/package.json @@ -23,37 +23,37 @@ "version": "1.0.0", "license": "MIT", "devDependencies": { - "@octokit/rest": "^17.1.0", + "@octokit/rest": "^17.1.3", "@types/cross-spawn": "^6.0.1", "@types/fs-extra": "^8.1.0", "@types/jest": "^25.1.4", "@types/node": "^13.9.1", "@types/semver": "^7.1.0", - "@typescript-eslint/eslint-plugin": "^2.23.0", - "@typescript-eslint/parser": "^2.23.0", - "cac": "^6.5.7", + "@typescript-eslint/eslint-plugin": "^2.25.0", + "@typescript-eslint/parser": "^2.25.0", + "cac": "^6.5.8", "cross-spawn": "^7.0.1", "del": "^5.1.0", "eslint": "^6.8.0", - "eslint-config-standard": "^14.1.0", + "eslint-config-standard": "^14.1.1", "eslint-plugin-import": "^2.20.1", "eslint-plugin-jest": "^23.8.2", "eslint-plugin-node": "^11.0.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.1", "express": "^4.17.1", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.0", "globby": "^11.0.0", - "jest": "^25.1.0", + "jest": "^25.2.1", "kleur": "^3.0.3", "latest-version": "^5.1.0", "open": "^7.0.3", "ora": "^4.0.3", "p-map": "^4.0.0", - "prompts": "^2.3.1", + "prompts": "^2.3.2", "semver": "^7.1.3", "ts-jest": "^25.2.1", - "ts-node": "^8.6.2", + "ts-node": "^8.8.1", "typescript": "^3.8.3" } } diff --git a/packages/koishi-cli/package.json b/packages/koishi-cli/package.json index 8f34509da1..611277b1b5 100644 --- a/packages/koishi-cli/package.json +++ b/packages/koishi-cli/package.json @@ -31,17 +31,17 @@ "koishi" ], "devDependencies": { - "@types/js-yaml": "^3.12.2", + "@types/js-yaml": "^3.12.3", "@types/prompts": "^2.0.5" }, "dependencies": { - "cac": "^6.5.7", + "cac": "^6.5.8", "js-yaml": "^3.13.1", "kleur": "^3.0.3", "koishi-core": "^1.11.2", "koishi-plugin-common": "^2.1.8", "koishi-plugin-schedule": "^1.0.13", "koishi-utils": "^1.0.4", - "prompts": "^2.3.1" + "prompts": "^2.3.2" } } diff --git a/packages/koishi-core/package.json b/packages/koishi-core/package.json index 76362a6426..93dc617791 100644 --- a/packages/koishi-core/package.json +++ b/packages/koishi-core/package.json @@ -33,7 +33,7 @@ ], "devDependencies": { "@types/debug": "^4.1.5", - "@types/ws": "^7.2.2", + "@types/ws": "^7.2.3", "get-port": "^5.1.1", "koishi-database-memory": "^1.1.7", "koishi-test-utils": "^3.2.2" diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 2d46f4705e..1b419c582d 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -33,7 +33,7 @@ "utilities" ], "peerDependencies": { - "jest": "^25.1.0" + "jest": "^25.2.1" }, "devDependencies": { "@types/debug": "^4.1.5", From 5177f5926b9d0a8aa8631f74369f025ef5d63915 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 18:29:35 +0800 Subject: [PATCH 06/26] fix(core): fix ws server send (close: #35) --- packages/koishi-core/src/server.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/koishi-core/src/server.ts b/packages/koishi-core/src/server.ts index ef9290340d..9e770d1f4e 100644 --- a/packages/koishi-core/src/server.ts +++ b/packages/koishi-core/src/server.ts @@ -343,6 +343,7 @@ export class WsClient extends Server { this.version = camelCase(parsed.data) this.debug('connect to ws server:', this.app.options.server) resolve() + } else { this._listeners[parsed.echo]?.(parsed) } }) From b0d49f46c7eeec039ae6b038e381360b492719d8 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 18:32:53 +0800 Subject: [PATCH 07/26] fix(core): handle anonymous message --- packages/koishi-core/src/app.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/koishi-core/src/app.ts b/packages/koishi-core/src/app.ts index 52facd7bc1..6128c80368 100644 --- a/packages/koishi-core/src/app.ts +++ b/packages/koishi-core/src/app.ts @@ -4,10 +4,10 @@ import { Sender } from './sender' import { Server, createServer, ServerType } from './server' import { Command, ShortcutConfig, ParsedCommandLine } from './command' import { Context, Middleware, NextFunction, ContextScope, Events, EventMap } from './context' -import { GroupFlag, UserFlag, UserField, createDatabase, DatabaseConfig, GroupField } from './database' +import { GroupFlag, UserFlag, UserField, createDatabase, DatabaseConfig, GroupField, createUser } from './database' import { showSuggestions } from './utils' import { Meta } from './meta' -import { simplify, noop } from 'koishi-utils' +import { simplify, noop, observe } from 'koishi-utils' import { errors, messages } from './messages' import { ParsedLine } from './parser' @@ -444,7 +444,9 @@ export class App extends Context { const defaultAuthority = typeof this.options.defaultAuthority === 'function' ? this.options.defaultAuthority(meta) : this.options.defaultAuthority || 0 - const user = await this.database.observeUser(meta.userId, defaultAuthority, Array.from(userFields)) + const user = meta.anonymous + ? observe(createUser(meta.userId, defaultAuthority)) + : await this.database.observeUser(meta.userId, defaultAuthority, Array.from(userFields)) Object.defineProperty(meta, '$user', { value: user, writable: true }) return user } From 73285399646e093e57e84e1ec07268e54f3874d1 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 18:34:28 +0800 Subject: [PATCH 08/26] feat(plugin-common): support echo -a/-A --- packages/plugin-common/src/echo.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/plugin-common/src/echo.ts b/packages/plugin-common/src/echo.ts index 2452eed1d2..f8b48454a3 100644 --- a/packages/plugin-common/src/echo.ts +++ b/packages/plugin-common/src/echo.ts @@ -1,7 +1,10 @@ import { MetaTypeMap, Context } from 'koishi-core' +import { CQCode } from 'koishi-utils' export default function (ctx: Context) { ctx.command('echo ', '向多个上下文发送广播', { authority: 2 }) + .option('-a, --anonymous', '匿名发送消息') + .option('-A, --force-anonymous', '匿名发送消息') .option('-u, --user ', '指定信息发送的目标 QQ 号', { isString: true, authority: 4 }) .option('-g, --group ', '指定信息发送的目标群号', { isString: true, authority: 4 }) .option('-d, --discuss ', '指定信息发送的目标讨论组号', { isString: true, authority: 4 }) @@ -19,6 +22,12 @@ export default function (ctx: Context) { channels[meta.messageType].push(meta.messageType === 'private' ? meta.userId : meta[meta.messageType + 'Id']) } + if (options.forceAnonymous) { + message = CQCode.stringify('anonymous') + message + } else if (options.anonymous) { + message = CQCode.stringify('anonymous', { ignore: true }) + message + } + // send messages return Promise.all([ ...channels.private.map(id => ctx.sender.sendPrivateMsgAsync(+id, message)), From 542eb5fdf45f61d2df9e3954c7ab40b455b5f513 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 18:35:39 +0800 Subject: [PATCH 09/26] feat(plugin-common): get group member info in contextify --- packages/plugin-common/src/contextify.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/plugin-common/src/contextify.ts b/packages/plugin-common/src/contextify.ts index c9e50f0b2f..2c81fc7998 100644 --- a/packages/plugin-common/src/contextify.ts +++ b/packages/plugin-common/src/contextify.ts @@ -72,6 +72,14 @@ export default function apply (ctx: Context) { newMeta.subType = options.type || 'other' } + if (options.group) { + const info = await ctx.sender.getGroupMemberInfo(ctxId, newMeta.userId).catch(() => ({})) + Object.assign(newMeta.sender, info) + } else if (options.user) { + const info = await ctx.sender.getStrangerInfo(newMeta.userId).catch(() => ({})) + Object.assign(newMeta.sender, info) + } + // generate path Object.defineProperty(newMeta, '$ctxId', { value: ctxId }) Object.defineProperty(newMeta, '$ctxType', { value: ctxType }) From 7d77728eb4625e43930e50827bfcc86c5d560294 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 18:36:55 +0800 Subject: [PATCH 10/26] fix(cli): check require stack when encountered with MODULE_NOT_FOUND --- packages/koishi-cli/src/worker.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/koishi-cli/src/worker.ts b/packages/koishi-cli/src/worker.ts index af2c13d960..962341447e 100644 --- a/packages/koishi-cli/src/worker.ts +++ b/packages/koishi-cli/src/worker.ts @@ -4,7 +4,7 @@ import { capitalize } from 'koishi-utils' import { performance } from 'perf_hooks' import { cyan, yellow } from 'kleur' import { logger } from './utils' -import { format, types } from 'util' +import { format } from 'util' import { readFileSync } from 'fs' import { safeLoad } from 'js-yaml' @@ -72,7 +72,7 @@ function loadEcosystem (type: string, name: string) { try { return require(name) } catch (error) { - if (error.code !== 'MODULE_NOT_FOUND') { + if (error.code !== 'MODULE_NOT_FOUND' || error.requireStack[0] !== __filename) { throw error } } From 04f73119b82db032bd55bc43b9c17cba101ad73d Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 18:40:00 +0800 Subject: [PATCH 11/26] feat(core): support meta.$app --- packages/koishi-core/src/meta.ts | 2 ++ packages/koishi-core/src/server.ts | 1 + packages/plugin-common/src/contextify.ts | 1 + 3 files changed, 4 insertions(+) diff --git a/packages/koishi-core/src/meta.ts b/packages/koishi-core/src/meta.ts index 8bdae80613..2f4d12f5d6 100644 --- a/packages/koishi-core/src/meta.ts +++ b/packages/koishi-core/src/meta.ts @@ -1,5 +1,6 @@ import { User, Group } from './database' import { ParsedCommandLine } from './command' +import { App } from './app' export type PostType = 'message' | 'notice' | 'request' | 'meta_event' | 'send' export type MessageType = 'private' | 'group' | 'discuss' @@ -61,6 +62,7 @@ export interface Meta { $ctxType?: ContextType // other properties + $app?: App $argv?: ParsedCommandLine $parsed?: ParsedMessage diff --git a/packages/koishi-core/src/server.ts b/packages/koishi-core/src/server.ts index 9e770d1f4e..0c19bdc483 100644 --- a/packages/koishi-core/src/server.ts +++ b/packages/koishi-core/src/server.ts @@ -103,6 +103,7 @@ export abstract class Server { Object.defineProperty(meta, '$ctxType', { value: ctxType }) const app = this.appMap[meta.selfId] + Object.defineProperty(meta, '$app', { value: app }) // add context properties if (meta.postType === 'message') { diff --git a/packages/plugin-common/src/contextify.ts b/packages/plugin-common/src/contextify.ts index 2c81fc7998..274ef1348d 100644 --- a/packages/plugin-common/src/contextify.ts +++ b/packages/plugin-common/src/contextify.ts @@ -47,6 +47,7 @@ export default function apply (ctx: Context) { } } + Object.defineProperty(newMeta, '$app', { value: ctx.app }) Object.defineProperty(newMeta, '$user', { value: user, writable: true }) delete newMeta.groupId From 10698d26f23a5dc148d973f981fbfc16f343a39b Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 18:41:22 +0800 Subject: [PATCH 12/26] fix(core): fix non-negated options --- packages/koishi-core/src/parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/koishi-core/src/parser.ts b/packages/koishi-core/src/parser.ts index 0d3b207c6e..cfd701627d 100644 --- a/packages/koishi-core/src/parser.ts +++ b/packages/koishi-core/src/parser.ts @@ -193,7 +193,7 @@ export function parseLine (source: string, argsDef: CommandArgument[], optsDef: for (; i < arg.length; ++i) { if (arg.charCodeAt(i) !== 45) break } - if (arg.slice(i, i + 3) === 'no-') { + if (arg.slice(i, i + 3) === 'no-' && !optsDef[arg.slice(i + 3)]) { name = arg.slice(i + 3) handleOption(name, true, false) continue From 735877fc6f027b3e88a5e7cccb0b8078104c4bbb Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 18:43:59 +0800 Subject: [PATCH 13/26] feat(core): strip quote on rest parameters and support single quotes --- packages/koishi-core/src/parser.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/koishi-core/src/parser.ts b/packages/koishi-core/src/parser.ts index cfd701627d..85691bae52 100644 --- a/packages/koishi-core/src/parser.ts +++ b/packages/koishi-core/src/parser.ts @@ -109,9 +109,15 @@ interface ParsedArg0 { quoted: boolean } +const quotes = `"'“”‘’` + +function parseRest (source: string) { + if (quotes.includes(source[0]) && quotes.includes(source[source.length - 1])) return source.slice(1, -1) + return source +} + function parseArg0 (source: string): ParsedArg0 { - const char0 = source[0] - if (char0 === '"' || char0 === "'" || char0 === '“' || char0 === '”') { + if (quotes.includes(source[0])) { const [content] = source.slice(1).split(/["'“”](?=\s|$)/, 1) return { quoted: true, @@ -170,7 +176,7 @@ export function parseLine (source: string, argsDef: CommandArgument[], optsDef: while (source) { // long argument if (source[0] !== '-' && argsDef[args.length] && argsDef[args.length].noSegment) { - args.push(source) + args.push(parseRest(source)) break } @@ -184,7 +190,7 @@ export function parseLine (source: string, argsDef: CommandArgument[], optsDef: continue } else if (arg === '--') { // rest part - rest = arg0.rest + rest = parseRest(arg0.rest) break } From 26ba4940a82c6ed1c1fe921d24092a518b6279e7 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 19:55:41 +0800 Subject: [PATCH 14/26] feat(utils): enhanced cqCode.stringify --- packages/koishi-utils/src/cqCode.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/koishi-utils/src/cqCode.ts b/packages/koishi-utils/src/cqCode.ts index 0910d5ed1a..6f9704448d 100644 --- a/packages/koishi-utils/src/cqCode.ts +++ b/packages/koishi-utils/src/cqCode.ts @@ -1,4 +1,4 @@ -type CQCodeData = Record +type CQCodeData = Record interface CQCode { type: string @@ -25,7 +25,7 @@ namespace CQCode { .replace(/&/g, '&') } - export function stringify (type: string, data: CQCodeData) { + export function stringify (type: string, data: CQCodeData = {}) { if (type === 'text') return '' + data.text let output = '[CQ:' + type for (const key in data) { From 7ed1e7d14b95949b0754e2b5cd9f1bbd27a5f3e2 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 20:05:36 +0800 Subject: [PATCH 15/26] chore: tweak --- packages/koishi-core/src/parser.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/koishi-core/src/parser.ts b/packages/koishi-core/src/parser.ts index 85691bae52..264b1a42fc 100644 --- a/packages/koishi-core/src/parser.ts +++ b/packages/koishi-core/src/parser.ts @@ -109,6 +109,7 @@ interface ParsedArg0 { quoted: boolean } +// eslint-disable-next-line quotes const quotes = `"'“”‘’` function parseRest (source: string) { From f70c9c9a2105a2f5d95d11791ad1643405a9c7b5 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 20:26:30 +0800 Subject: [PATCH 16/26] feat(test-utils): attach sender to meta --- packages/test-utils/src/session.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/test-utils/src/session.ts b/packages/test-utils/src/session.ts index 1c9f94658a..494e206919 100644 --- a/packages/test-utils/src/session.ts +++ b/packages/test-utils/src/session.ts @@ -7,6 +7,12 @@ export const createMessageMeta = (type: ContextType, message: string, userId: nu messageType: type === 'user' ? 'private' : type, message, userId, + sender: { + sex: 'unknown', + age: 0, + userId, + nickname: '' + userId, + }, }) export class Session { From 649d35ad91f0456f4adb1c5fe04eb7530f8948b5 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 20:44:28 +0800 Subject: [PATCH 17/26] fix(core): fix non-negated options --- packages/koishi-core/src/parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/koishi-core/src/parser.ts b/packages/koishi-core/src/parser.ts index 264b1a42fc..5e9c3154a8 100644 --- a/packages/koishi-core/src/parser.ts +++ b/packages/koishi-core/src/parser.ts @@ -200,7 +200,7 @@ export function parseLine (source: string, argsDef: CommandArgument[], optsDef: for (; i < arg.length; ++i) { if (arg.charCodeAt(i) !== 45) break } - if (arg.slice(i, i + 3) === 'no-' && !optsDef[arg.slice(i + 3)]) { + if (arg.slice(i, i + 3) === 'no-' && !optsDef[arg.slice(i)]) { name = arg.slice(i + 3) handleOption(name, true, false) continue From ad4c0fab2f60d0fbc4ecdbd639275d64c09ab21f Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Sat, 18 Apr 2020 20:52:13 +0800 Subject: [PATCH 18/26] bump version (escape-string-regexp 2->3) koishi-database-level > leveldown: ^5.5.1 -> 5.6.0 koishi-database-level > levelup: ^4.3.2 -> 4.4.0 koishi-database-level > subleveldown: ^4.1.4 -> 5.0.0 --- package.json | 24 ++++++++++++------------ packages/database-level/package.json | 12 ++++++------ packages/database-memory/package.json | 4 ++-- packages/database-mysql/package.json | 6 +++--- packages/database-sqlite/package.json | 6 +++--- packages/koishi-cli/package.json | 8 ++++---- packages/koishi-core/package.json | 10 +++++----- packages/plugin-common/package.json | 8 ++++---- packages/plugin-nlp/package.json | 6 +++--- packages/plugin-recorder/package.json | 6 +++--- packages/plugin-schedule/package.json | 10 +++++----- packages/plugin-teach/package.json | 10 +++++----- packages/test-utils/package.json | 8 ++++---- 13 files changed, 59 insertions(+), 59 deletions(-) diff --git a/package.json b/package.json index 854351c6c1..d35be29dc8 100644 --- a/package.json +++ b/package.json @@ -23,37 +23,37 @@ "version": "1.0.0", "license": "MIT", "devDependencies": { - "@octokit/rest": "^17.1.3", + "@octokit/rest": "^17.3.0", "@types/cross-spawn": "^6.0.1", "@types/fs-extra": "^8.1.0", - "@types/jest": "^25.1.4", - "@types/node": "^13.9.1", + "@types/jest": "^25.2.1", + "@types/node": "^13.13.0", "@types/semver": "^7.1.0", - "@typescript-eslint/eslint-plugin": "^2.25.0", - "@typescript-eslint/parser": "^2.25.0", + "@typescript-eslint/eslint-plugin": "^2.28.0", + "@typescript-eslint/parser": "^2.28.0", "cac": "^6.5.8", - "cross-spawn": "^7.0.1", + "cross-spawn": "^7.0.2", "del": "^5.1.0", "eslint": "^6.8.0", "eslint-config-standard": "^14.1.1", - "eslint-plugin-import": "^2.20.1", + "eslint-plugin-import": "^2.20.2", "eslint-plugin-jest": "^23.8.2", - "eslint-plugin-node": "^11.0.0", + "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.1", "express": "^4.17.1", "fs-extra": "^9.0.0", "globby": "^11.0.0", - "jest": "^25.2.1", + "jest": "^25.3.0", "kleur": "^3.0.3", "latest-version": "^5.1.0", "open": "^7.0.3", "ora": "^4.0.3", "p-map": "^4.0.0", "prompts": "^2.3.2", - "semver": "^7.1.3", - "ts-jest": "^25.2.1", - "ts-node": "^8.8.1", + "semver": "^7.3.2", + "ts-jest": "^25.4.0", + "ts-node": "^8.8.2", "typescript": "^3.8.3" } } diff --git a/packages/database-level/package.json b/packages/database-level/package.json index 5d1d3d5d0b..24e5f42daa 100644 --- a/packages/database-level/package.json +++ b/packages/database-level/package.json @@ -1,7 +1,7 @@ { "name": "koishi-database-level", "description": "Leveldb support for Koishi", - "version": "1.1.7", + "version": "1.2.0", "main": "dist/index.js", "files": [ "dist" @@ -33,17 +33,17 @@ "leveldb" ], "devDependencies": { - "koishi-test-utils": "^3.2.2" + "koishi-test-utils": "^3.3.0" }, "peerDependencies": { - "koishi-core": "^1.11.2" + "koishi-core": "^1.12.0" }, "dependencies": { "@types/leveldown": "^4.0.2", "@types/levelup": "^4.3.0", "koishi-utils": "^1.0.4", - "leveldown": "^5.5.1", - "levelup": "^4.3.2", - "subleveldown": "^4.1.4" + "leveldown": "^5.6.0", + "levelup": "^4.4.0", + "subleveldown": "^5.0.0" } } diff --git a/packages/database-memory/package.json b/packages/database-memory/package.json index 46a701858d..b288d92388 100644 --- a/packages/database-memory/package.json +++ b/packages/database-memory/package.json @@ -1,7 +1,7 @@ { "name": "koishi-database-memory", "description": "An in-memory database implementation for Koishi", - "version": "1.1.7", + "version": "1.2.0", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -22,7 +22,7 @@ }, "homepage": "https://github.com/koishijs/koishi/tree/master/packages/database-memory#readme", "peerDependencies": { - "koishi-core": "^1.11.2" + "koishi-core": "^1.12.0" }, "dependencies": { "koishi-utils": "^1.0.4" diff --git a/packages/database-mysql/package.json b/packages/database-mysql/package.json index a35faf8fc0..a3c12fbffe 100644 --- a/packages/database-mysql/package.json +++ b/packages/database-mysql/package.json @@ -1,7 +1,7 @@ { "name": "koishi-database-mysql", "description": "MySQL support for Koishi", - "version": "1.1.7", + "version": "1.2.0", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -32,10 +32,10 @@ "mysql" ], "devDependencies": { - "@types/mysql": "^2.15.9" + "@types/mysql": "^2.15.10" }, "peerDependencies": { - "koishi-core": "^1.11.2" + "koishi-core": "^1.12.0" }, "dependencies": { "koishi-utils": "^1.0.4", diff --git a/packages/database-sqlite/package.json b/packages/database-sqlite/package.json index c2e656c4f6..7e925875be 100644 --- a/packages/database-sqlite/package.json +++ b/packages/database-sqlite/package.json @@ -1,6 +1,6 @@ { "name": "koishi-database-sqlite", - "version": "1.0.0-alpha.13", + "version": "1.0.0", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -22,10 +22,10 @@ "homepage": "https://github.com/koishijs/koishi/tree/master/packages/database-sqlite#readme", "devDependencies": { "@types/sqlite3": "^3.1.6", - "koishi-test-utils": "^3.2.2" + "koishi-test-utils": "^3.3.0" }, "peerDependencies": { - "koishi-core": "^1.11.2" + "koishi-core": "^1.12.0" }, "dependencies": { "koishi-utils": "^1.0.4", diff --git a/packages/koishi-cli/package.json b/packages/koishi-cli/package.json index 611277b1b5..a55ab285d5 100644 --- a/packages/koishi-cli/package.json +++ b/packages/koishi-cli/package.json @@ -1,7 +1,7 @@ { "name": "koishi", "description": "A QQ bot framework based on CQHTTP", - "version": "1.11.2", + "version": "1.12.0", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -38,9 +38,9 @@ "cac": "^6.5.8", "js-yaml": "^3.13.1", "kleur": "^3.0.3", - "koishi-core": "^1.11.2", - "koishi-plugin-common": "^2.1.8", - "koishi-plugin-schedule": "^1.0.13", + "koishi-core": "^1.12.0", + "koishi-plugin-common": "^2.2.0", + "koishi-plugin-schedule": "^1.1.0", "koishi-utils": "^1.0.4", "prompts": "^2.3.2" } diff --git a/packages/koishi-core/package.json b/packages/koishi-core/package.json index 93dc617791..c930c6c386 100644 --- a/packages/koishi-core/package.json +++ b/packages/koishi-core/package.json @@ -1,7 +1,7 @@ { "name": "koishi-core", "description": "Core features for Koishi", - "version": "1.11.2", + "version": "1.12.0", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -33,15 +33,15 @@ ], "devDependencies": { "@types/debug": "^4.1.5", - "@types/ws": "^7.2.3", + "@types/ws": "^7.2.4", "get-port": "^5.1.1", - "koishi-database-memory": "^1.1.7", - "koishi-test-utils": "^3.2.2" + "koishi-database-memory": "^1.2.0", + "koishi-test-utils": "^3.3.0" }, "dependencies": { "axios": "^0.19.2", "debug": "^4.1.1", - "escape-string-regexp": "^2.0.0", + "escape-string-regexp": "^3.0.0", "koishi-utils": "^1.0.4", "leven": "^3.1.0", "ms": "^2.1.2", diff --git a/packages/plugin-common/package.json b/packages/plugin-common/package.json index b73b3698a5..ada749a620 100644 --- a/packages/plugin-common/package.json +++ b/packages/plugin-common/package.json @@ -1,7 +1,7 @@ { "name": "koishi-plugin-common", "description": "Common plugins for Koishi", - "version": "2.1.8", + "version": "2.2.0", "main": "dist/index.js", "typings": "dist/index.d.ts", "author": "Shigma <1700011071@pku.edu.cn>", @@ -28,11 +28,11 @@ "plugin" ], "devDependencies": { - "koishi-database-memory": "^1.1.7", - "koishi-test-utils": "^3.2.2" + "koishi-database-memory": "^1.2.0", + "koishi-test-utils": "^3.3.0" }, "dependencies": { - "koishi-core": "^1.11.2", + "koishi-core": "^1.12.0", "koishi-utils": "^1.0.4" } } diff --git a/packages/plugin-nlp/package.json b/packages/plugin-nlp/package.json index c4b3bdc676..414d1ecc62 100644 --- a/packages/plugin-nlp/package.json +++ b/packages/plugin-nlp/package.json @@ -1,7 +1,7 @@ { "name": "koishi-plugin-nlp", "description": "Natural Language Processor for Koishi", - "version": "1.0.8", + "version": "1.1.0", "main": "dist/index.js", "typings": "dist/index.d.ts", "author": "Shigma <1700011071@pku.edu.cn>", @@ -30,10 +30,10 @@ "jieba" ], "devDependencies": { - "koishi-test-utils": "^3.2.2" + "koishi-test-utils": "^3.3.0" }, "dependencies": { - "koishi-core": "^1.11.2", + "koishi-core": "^1.12.0", "koishi-utils": "^1.0.4", "nodejieba": "^2.4.1" } diff --git a/packages/plugin-recorder/package.json b/packages/plugin-recorder/package.json index a902f5a74d..f1d44d23b7 100644 --- a/packages/plugin-recorder/package.json +++ b/packages/plugin-recorder/package.json @@ -1,7 +1,7 @@ { "name": "koishi-plugin-recorder", "description": "Save Chat Records for Koishi", - "version": "1.0.0-alpha.11", + "version": "1.0.0", "main": "dist/index.js", "typings": "dist/index.d.ts", "author": "Shigma <1700011071@pku.edu.cn>", @@ -31,10 +31,10 @@ ], "devDependencies": { "del": "^5.1.0", - "koishi-test-utils": "^3.2.2" + "koishi-test-utils": "^3.3.0" }, "dependencies": { - "koishi-core": "^1.11.2", + "koishi-core": "^1.12.0", "koishi-utils": "^1.0.4" } } diff --git a/packages/plugin-schedule/package.json b/packages/plugin-schedule/package.json index 73df0039b8..0414a9b186 100644 --- a/packages/plugin-schedule/package.json +++ b/packages/plugin-schedule/package.json @@ -1,7 +1,7 @@ { "name": "koishi-plugin-schedule", "description": "Schedule plugin for Koishi", - "version": "1.0.13", + "version": "1.1.0", "main": "dist/index.js", "typings": "dist/index.d.ts", "author": "Shigma <1700011071@pku.edu.cn>", @@ -31,12 +31,12 @@ ], "devDependencies": { "@types/ms": "^0.7.31", - "koishi-database-level": "^1.1.7", - "koishi-database-mysql": "^1.1.7", - "koishi-test-utils": "^3.2.2" + "koishi-database-level": "^1.2.0", + "koishi-database-mysql": "^1.2.0", + "koishi-test-utils": "^3.3.0" }, "dependencies": { - "koishi-core": "^1.11.2", + "koishi-core": "^1.12.0", "koishi-utils": "^1.0.4", "ms": "^2.1.2" } diff --git a/packages/plugin-teach/package.json b/packages/plugin-teach/package.json index dc02427f52..a9b54c9e12 100644 --- a/packages/plugin-teach/package.json +++ b/packages/plugin-teach/package.json @@ -1,7 +1,7 @@ { "name": "koishi-plugin-teach", "description": "Teach plugin for Koishi", - "version": "0.1.22", + "version": "0.2.0", "main": "dist/index.js", "typings": "dist/index.d.ts", "author": "Shigma <1700011071@pku.edu.cn>", @@ -31,12 +31,12 @@ "conversation" ], "devDependencies": { - "koishi-database-level": "^1.1.7", - "koishi-database-mysql": "^1.1.7", - "koishi-test-utils": "^3.2.2" + "koishi-database-level": "^1.2.0", + "koishi-database-mysql": "^1.2.0", + "koishi-test-utils": "^3.3.0" }, "dependencies": { - "koishi-core": "^1.11.2", + "koishi-core": "^1.12.0", "koishi-utils": "^1.0.4" } } diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 1b419c582d..229a80f42f 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "koishi-test-utils", "description": "Test utilities for Koishi", - "version": "3.2.2", + "version": "3.3.0", "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ @@ -33,17 +33,17 @@ "utilities" ], "peerDependencies": { - "jest": "^25.2.1" + "jest": "^25.3.0" }, "devDependencies": { "@types/debug": "^4.1.5", - "@types/jest": "^25.1.4" + "@types/jest": "^25.2.1" }, "dependencies": { "axios": "^0.19.2", "debug": "^4.1.1", "get-port": "^5.1.1", - "koishi-core": "^1.11.2", + "koishi-core": "^1.12.0", "koishi-utils": "^1.0.4" } } From 2acbba708139c697edf056d02f5603665efb8783 Mon Sep 17 00:00:00 2001 From: NN708 Date: Sat, 27 Jun 2020 23:12:51 +0800 Subject: [PATCH 19/26] docker: create Dockerfile --- docker/Dockerfile | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 docker/Dockerfile diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000000..3039915bed --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,9 @@ +FROM node:lts-alpine + +WORKDIR /config +RUN npm i koishi -g + +EXPOSE 8080 +VOLUME [ "/config" ] + +CMD [ "koishi", "run" ] \ No newline at end of file From fa68cb9d35a84819768f7700fc91f06c51f92d6a Mon Sep 17 00:00:00 2001 From: NN708 Date: Sun, 28 Jun 2020 10:46:14 +0800 Subject: [PATCH 20/26] docker: use start.js to init config --- docker/Dockerfile | 9 +++++---- docker/start.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 docker/start.js diff --git a/docker/Dockerfile b/docker/Dockerfile index 3039915bed..f7c755de62 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,9 +1,10 @@ FROM node:lts-alpine -WORKDIR /config -RUN npm i koishi -g - EXPOSE 8080 VOLUME [ "/config" ] -CMD [ "koishi", "run" ] \ No newline at end of file +WORKDIR /config +RUN npm i koishi -g +COPY ./start.js /utilities/start.js + +CMD [ "node", "/utilities/start.js" ] \ No newline at end of file diff --git a/docker/start.js b/docker/start.js new file mode 100644 index 0000000000..aa9dd5395f --- /dev/null +++ b/docker/start.js @@ -0,0 +1,32 @@ +const fs = require('fs') +const child_process = require('child_process') + +const path = process.cwd() + '/koishi.config.js' +if (!fs.existsSync(path)) { + let config = { + type: 'http', + port: 8080, + server: 'http://localhost:5700', + plugins: [ + 'common', + 'schedule' + ] + } // default config + const envNames = ['PORT', 'TYPE', 'SERVER'] + envNames.map((name) => { + if (process.env[name]) config[name.toLowerCase()] = process.env[name] + }) + + output = JSON.stringify(config, null, 2) + output = 'module.exports = ' + output.replace(/^(\s+)"([\w$]+)":/mg, '$1$2:') + fs.writeFileSync(path, output) + console.log(`Successfully created config file: ${path}`) +} + +console.log('Starting Koishi server...') +const koishi = child_process.exec('koishi run', (err) => { + if (err) throw err +}) +process.stdin.pipe(koishi.stdin) +koishi.stdout.pipe(process.stdout) +console.log('Koishi server started.') \ No newline at end of file From f97f89f35d6de1a6cd5db0dcb4d3cf8e9b86f2a3 Mon Sep 17 00:00:00 2001 From: NN708 Date: Sun, 28 Jun 2020 12:02:22 +0800 Subject: [PATCH 21/26] docker: add docker-compose.yml --- docker/docker-compose.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docker/docker-compose.yml diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000000..ce26e125a4 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,25 @@ +version: '2' + +services: + cqhttp: + image: richardchien/cqhttp:latest + ports: + - 9000:9000 + - 5700:5700 + volumes: + - ./coolq:/home/user/coolq + environment: + VNC_PASSWD: MAX8char + COOLQ_URL: http://dlsec.cqp.me/cqa-tuling # 'cqa-tuling' for CoolQ Air and 'cqp-tuling' for CoolQ Pro + CQHTTP_POST_URL: http://koishi:8080 + CQHTTP_SERVE_DATA_FILES: "true" + + koishi: + image: koishi + ports: + - 8080:8080 + volumes: + - ./koishi:/config + environment: + TYPE: http + SERVER: http://cqhttp:5700 \ No newline at end of file From e27ce02085c4fbec6bb1135eee9bdbc5acd8c654 Mon Sep 17 00:00:00 2001 From: NN708 Date: Sun, 28 Jun 2020 15:48:14 +0800 Subject: [PATCH 22/26] docker: pull from docker hub --- docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index ce26e125a4..a7a62a665e 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -15,7 +15,7 @@ services: CQHTTP_SERVE_DATA_FILES: "true" koishi: - image: koishi + image: koishijs/koishi:latest ports: - 8080:8080 volumes: From a2ac7ebde3610089e54fec8f8ff7d626507e0ab4 Mon Sep 17 00:00:00 2001 From: NN708 Date: Sun, 28 Jun 2020 16:19:43 +0800 Subject: [PATCH 23/26] docker: delete some ports in docker-compose.yml --- docker/docker-compose.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index a7a62a665e..aebf4d92b8 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -4,20 +4,17 @@ services: cqhttp: image: richardchien/cqhttp:latest ports: - - 9000:9000 - - 5700:5700 + - 9000:9000 # VNC port volumes: - ./coolq:/home/user/coolq environment: - VNC_PASSWD: MAX8char + VNC_PASSWD: MAX8char # change it COOLQ_URL: http://dlsec.cqp.me/cqa-tuling # 'cqa-tuling' for CoolQ Air and 'cqp-tuling' for CoolQ Pro CQHTTP_POST_URL: http://koishi:8080 CQHTTP_SERVE_DATA_FILES: "true" koishi: image: koishijs/koishi:latest - ports: - - 8080:8080 volumes: - ./koishi:/config environment: From 0ca19c4f336a4309362810eb2670888f500cc6b9 Mon Sep 17 00:00:00 2001 From: NN708 Date: Sun, 28 Jun 2020 17:07:19 +0800 Subject: [PATCH 24/26] docker: add MySQL --- docker/docker-compose.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index aebf4d92b8..4e56690666 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -13,6 +13,15 @@ services: CQHTTP_POST_URL: http://koishi:8080 CQHTTP_SERVE_DATA_FILES: "true" + mysql: + image: mysql:latest + volumes: + - ./mysql:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: myPassword # change it + MYSQL_DATABASE: koishi + command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_general_ci'] + koishi: image: koishijs/koishi:latest volumes: From 2f7640113d6286a3d7f042cac44ee387b0b6da36 Mon Sep 17 00:00:00 2001 From: NN708 Date: Tue, 30 Jun 2020 12:27:33 +0800 Subject: [PATCH 25/26] docker: downgrade MySQL to 5.7 mysqljs library is not compatible with MySQL 8's default auth method --- docker/docker-compose.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 4e56690666..56a0316e96 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -14,7 +14,7 @@ services: CQHTTP_SERVE_DATA_FILES: "true" mysql: - image: mysql:latest + image: mysql:5.7 volumes: - ./mysql:/var/lib/mysql environment: @@ -28,4 +28,9 @@ services: - ./koishi:/config environment: TYPE: http - SERVER: http://cqhttp:5700 \ No newline at end of file + SERVER: http://cqhttp:5700 + MYSQL_HOST: mysql + MYSQL_PORT: 3306 + MYSQL_USER: root + MYSQL_PASSWORD: myPassword # change it + MYSQL_DATABASE: koishi \ No newline at end of file From 456995784fd84e467709938c9b04165703624ed0 Mon Sep 17 00:00:00 2001 From: NN708 Date: Tue, 30 Jun 2020 21:05:37 +0800 Subject: [PATCH 26/26] docker: name containers --- docker/docker-compose.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 56a0316e96..a8927b5bc8 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -3,6 +3,7 @@ version: '2' services: cqhttp: image: richardchien/cqhttp:latest + container_name: koishi_cqhttp ports: - 9000:9000 # VNC port volumes: @@ -15,6 +16,7 @@ services: mysql: image: mysql:5.7 + container_name: koishi_mysql volumes: - ./mysql:/var/lib/mysql environment: @@ -24,13 +26,9 @@ services: koishi: image: koishijs/koishi:latest + container_name: koishi volumes: - ./koishi:/config environment: TYPE: http - SERVER: http://cqhttp:5700 - MYSQL_HOST: mysql - MYSQL_PORT: 3306 - MYSQL_USER: root - MYSQL_PASSWORD: myPassword # change it - MYSQL_DATABASE: koishi \ No newline at end of file + SERVER: http://cqhttp:5700 \ No newline at end of file