Commit 3e057beb authored by nanahira's avatar nanahira

single picsource base plugin

parent 4d9ec83b
...@@ -52,6 +52,8 @@ export class PicSource { ...@@ -52,6 +52,8 @@ export class PicSource {
#### 单图源 #### 单图源
对于单图源的插件,我们提供了 `PicSourcePlugin` 基类,只需要集成该类即可快速开发单图源插件。
```ts ```ts
import { Context } from "koishi"; import { Context } from "koishi";
import { DefinePlugin, RegisterSchema, SchemaProperty, LifecycleEvents } from "koishi-thirdeye"; import { DefinePlugin, RegisterSchema, SchemaProperty, LifecycleEvents } from "koishi-thirdeye";
...@@ -65,25 +67,10 @@ export class Config extends PicSourceConfig { ...@@ -65,25 +67,10 @@ export class Config extends PicSourceConfig {
@DefinePlugin({ name: 'my-picsource', schema: Config }) @DefinePlugin({ name: 'my-picsource', schema: Config })
export default class MyPicSource extends PicSource implements LifecycleEvents { export default class MyPicSource extends PicSourcePlugin<Config> {
constructor(ctx: Context, config: Partial<Config>) {
super(ctx);
}
@InjectConfig()
private config: Config;
@Inject(true)
private pics: PicsContainer;
async randomPic(tags: string[]) { async randomPic(tags: string[]) {
return { url: `https://cdn02.moecube.com:444/images/ygopro-images-zh-CN/${this.config.code}.jpg`, description: `${this.config.code}` }; return { url: `https://cdn02.moecube.com:444/images/ygopro-images-zh-CN/${this.config.code}.jpg`, description: `${this.config.code}` };
} }
onApply() {
this.config.applyTo(this);
this.pics.addSource(this);
}
} }
``` ```
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
"ws": "^8.3.0" "ws": "^8.3.0"
}, },
"peerDependencies": { "peerDependencies": {
"koishi": "^4.6.0" "koishi": "^4.6.1"
} }
}, },
"node_modules/@ampproject/remapping": { "node_modules/@ampproject/remapping": {
...@@ -1070,15 +1070,15 @@ ...@@ -1070,15 +1070,15 @@
} }
}, },
"node_modules/@koishijs/core": { "node_modules/@koishijs/core": {
"version": "4.6.0", "version": "4.6.1",
"resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.6.0.tgz", "resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.6.1.tgz",
"integrity": "sha512-m+K2h/Oqmpcw39dQhJ/D9MBmwnWNUf9uFqymJ94+nP4CR7rcM1DTWNiaMGshGUqNu+s4q0ildoEDlQrE4hVuWA==", "integrity": "sha512-2HzdUi76YSLFZYpPXcmEwwVyHQLPF8BL0GJR6PuCYdOYfHykzwA5NmqOGx29EyeuYzs8sS6yr25IQktxMYqsdg==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@koishijs/utils": "^5.4.0", "@koishijs/utils": "^5.4.1",
"cosmotype": "^1.0.3", "cosmotype": "^1.0.6",
"fastest-levenshtein": "^1.0.12", "fastest-levenshtein": "^1.0.12",
"ns-require": "^1.1.0" "ns-require": "^1.1.2"
}, },
"engines": { "engines": {
"node": ">=12.0.0" "node": ">=12.0.0"
...@@ -1139,15 +1139,15 @@ ...@@ -1139,15 +1139,15 @@
"peer": true "peer": true
}, },
"node_modules/@koishijs/utils": { "node_modules/@koishijs/utils": {
"version": "5.4.0", "version": "5.4.1",
"resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-5.4.0.tgz", "resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-5.4.1.tgz",
"integrity": "sha512-w5SHArw032cXVtxp5nXkc5jzP6Fn3LrF7FQTanPnOgmjGv/AIOAKfJ6bqaOUsSg+ttcK3iO8xs65W6XsNz3g7g==", "integrity": "sha512-M3L9KqtdTyCzQK1LxTtp7QCucc75IA2vRwnYJA1gXMAxPC3SoEjUVmsk/oNFBSknmfADdViI5mFJtUXMCpJW1g==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@koishijs/segment": "^1.1.1", "@koishijs/segment": "^1.1.1",
"cosmokit": "^1.1.1", "cosmokit": "^1.1.2",
"reggol": "^1.0.1", "reggol": "^1.0.2",
"schemastery": "^3.3.2", "schemastery": "^3.3.3",
"supports-color": "^8.1.1" "supports-color": "^8.1.1"
} }
}, },
...@@ -2608,18 +2608,18 @@ ...@@ -2608,18 +2608,18 @@
"peer": true "peer": true
}, },
"node_modules/cosmokit": { "node_modules/cosmokit": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.1.1.tgz", "resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.1.2.tgz",
"integrity": "sha512-+f8x9pFGIc7I6HTObS90dq2K5YsI4U3Me4l9OminU9woVtF9Sv3CAHb5vKbFZ93XpTFctAQ6qAVSGjkGvGI9iw==" "integrity": "sha512-cSNrcyxZ3GT+tjSlUzWIzMiK7Wndq1Nm/2tlRhT65RXltSIcH5zaHdmnz1TnIhLuOViaO9qfSdnRPzxNkxMv0g=="
}, },
"node_modules/cosmotype": { "node_modules/cosmotype": {
"version": "1.0.3", "version": "1.0.9",
"resolved": "https://registry.npmjs.org/cosmotype/-/cosmotype-1.0.3.tgz", "resolved": "https://registry.npmjs.org/cosmotype/-/cosmotype-1.0.9.tgz",
"integrity": "sha512-JykvyDjyjaDjycm8CcK8GD4Xt6/Glu4pJU9uJ5lsDuE5B5bdmAykiTPMHfs+Is8QUsNaDKpsHfxtxCUBDPYgdw==", "integrity": "sha512-ot2m5LYBj9UNFvYpQNQ28hWYDG4GWmym094us2HNn6qgYzvALmjs4FxEVBsjA+VBnIf3ykuMGRYcex5cqZTvJQ==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"cosmokit": "^1.1.1", "cosmokit": "^1.1.2",
"ns-require": "^1.1.0" "ns-require": "^1.1.2"
} }
}, },
"node_modules/cosmotype-decorators": { "node_modules/cosmotype-decorators": {
...@@ -5220,14 +5220,14 @@ ...@@ -5220,14 +5220,14 @@
} }
}, },
"node_modules/koishi": { "node_modules/koishi": {
"version": "4.6.0", "version": "4.6.1",
"resolved": "https://registry.npmjs.org/koishi/-/koishi-4.6.0.tgz", "resolved": "https://registry.npmjs.org/koishi/-/koishi-4.6.1.tgz",
"integrity": "sha512-QhjFWTGhrFnYfpVg4dNNxgHER38zSij3nyM/RB3YrLTM4VwImVk5unpgg0QryViwWxSYM4zJ0YUoys4A9jgG6A==", "integrity": "sha512-9NtcXrIKLN8AG9zEf3GzweSiHQubew0AWfjaci0grIxy760T77D8iLVsDbVhzmGSnc26WOR2q3CMFdRmE2igVA==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@koa/router": "^10.1.1", "@koa/router": "^10.1.1",
"@koishijs/core": "^4.6.0", "@koishijs/core": "^4.6.1",
"@koishijs/utils": "^5.4.0", "@koishijs/utils": "^5.4.1",
"@types/koa": "*", "@types/koa": "*",
"@types/koa__router": "*", "@types/koa__router": "*",
"@types/ws": "^8.5.3", "@types/ws": "^8.5.3",
...@@ -5582,9 +5582,9 @@ ...@@ -5582,9 +5582,9 @@
} }
}, },
"node_modules/ns-require": { "node_modules/ns-require": {
"version": "1.1.0", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/ns-require/-/ns-require-1.1.0.tgz", "resolved": "https://registry.npmjs.org/ns-require/-/ns-require-1.1.2.tgz",
"integrity": "sha512-Iw349zwWNgkGZjYJtruf+BXUe8YHOiMZE0iUNffvpt/A1yTSabTnpBMQ0zNl65G1LhpzwCo1KMCqjmJF0z8O6g==", "integrity": "sha512-GUF6I1hWDsGx1cA9FW27KIRAlkMel2UZagR39dVNPAPBgwWK1Ez0XB96WEz2OFcwHsCORI9h75dEZueHqZ/1pA==",
"peer": true "peer": true
}, },
"node_modules/nwsapi": { "node_modules/nwsapi": {
...@@ -6252,12 +6252,12 @@ ...@@ -6252,12 +6252,12 @@
} }
}, },
"node_modules/reggol": { "node_modules/reggol": {
"version": "1.0.1", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/reggol/-/reggol-1.0.1.tgz", "resolved": "https://registry.npmjs.org/reggol/-/reggol-1.0.2.tgz",
"integrity": "sha512-ZMOp3rZG6YQFVp/DC+BgFZaXSQcxHDayCmo7cL/kGujsSEoUzee0VJq1KCe9sgNt0qsM6JzkuSlj/+5SmmoO7Q==", "integrity": "sha512-BP7gx5nUBntWChG4x/yf7xLdpxy1R5PMtF/LJlOsz+XkWtip4YVNkQp2Flmio9hXSc2UxrwUyP0WrQ1M/FFWXw==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"cosmokit": "^1.1.0", "cosmokit": "^1.1.2",
"supports-color": "^8.1.1" "supports-color": "^8.1.1"
} }
}, },
...@@ -6435,12 +6435,12 @@ ...@@ -6435,12 +6435,12 @@
} }
}, },
"node_modules/schemastery": { "node_modules/schemastery": {
"version": "3.3.2", "version": "3.3.3",
"resolved": "https://registry.npmjs.org/schemastery/-/schemastery-3.3.2.tgz", "resolved": "https://registry.npmjs.org/schemastery/-/schemastery-3.3.3.tgz",
"integrity": "sha512-Z1C850OPtNEBs+D4QBPdC+Wu1t6Fn1BrOJILRHs2b+I/u61hUKP2vIPMAXFLvmmONnwqAW8ksPdCD6Zz9n8zhg==", "integrity": "sha512-DwRsse6C+Qao90P/Bz+4G3gmAjM3he/VgHk3TykmEWv3KFqvwmqEn61SF3BPaTPP0L77a5Kc6q4+KQvdN1bBqA==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"cosmokit": "^1.1.0" "cosmokit": "^1.1.2"
} }
}, },
"node_modules/schemastery-gen": { "node_modules/schemastery-gen": {
...@@ -8558,15 +8558,15 @@ ...@@ -8558,15 +8558,15 @@
} }
}, },
"@koishijs/core": { "@koishijs/core": {
"version": "4.6.0", "version": "4.6.1",
"resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.6.0.tgz", "resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.6.1.tgz",
"integrity": "sha512-m+K2h/Oqmpcw39dQhJ/D9MBmwnWNUf9uFqymJ94+nP4CR7rcM1DTWNiaMGshGUqNu+s4q0ildoEDlQrE4hVuWA==", "integrity": "sha512-2HzdUi76YSLFZYpPXcmEwwVyHQLPF8BL0GJR6PuCYdOYfHykzwA5NmqOGx29EyeuYzs8sS6yr25IQktxMYqsdg==",
"peer": true, "peer": true,
"requires": { "requires": {
"@koishijs/utils": "^5.4.0", "@koishijs/utils": "^5.4.1",
"cosmotype": "^1.0.3", "cosmotype": "^1.0.6",
"fastest-levenshtein": "^1.0.12", "fastest-levenshtein": "^1.0.12",
"ns-require": "^1.1.0" "ns-require": "^1.1.2"
} }
}, },
"@koishijs/plugin-cache-lru": { "@koishijs/plugin-cache-lru": {
...@@ -8612,15 +8612,15 @@ ...@@ -8612,15 +8612,15 @@
"peer": true "peer": true
}, },
"@koishijs/utils": { "@koishijs/utils": {
"version": "5.4.0", "version": "5.4.1",
"resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-5.4.0.tgz", "resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-5.4.1.tgz",
"integrity": "sha512-w5SHArw032cXVtxp5nXkc5jzP6Fn3LrF7FQTanPnOgmjGv/AIOAKfJ6bqaOUsSg+ttcK3iO8xs65W6XsNz3g7g==", "integrity": "sha512-M3L9KqtdTyCzQK1LxTtp7QCucc75IA2vRwnYJA1gXMAxPC3SoEjUVmsk/oNFBSknmfADdViI5mFJtUXMCpJW1g==",
"peer": true, "peer": true,
"requires": { "requires": {
"@koishijs/segment": "^1.1.1", "@koishijs/segment": "^1.1.1",
"cosmokit": "^1.1.1", "cosmokit": "^1.1.2",
"reggol": "^1.0.1", "reggol": "^1.0.2",
"schemastery": "^3.3.2", "schemastery": "^3.3.3",
"supports-color": "^8.1.1" "supports-color": "^8.1.1"
}, },
"dependencies": { "dependencies": {
...@@ -9820,18 +9820,18 @@ ...@@ -9820,18 +9820,18 @@
"peer": true "peer": true
}, },
"cosmokit": { "cosmokit": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.1.1.tgz", "resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.1.2.tgz",
"integrity": "sha512-+f8x9pFGIc7I6HTObS90dq2K5YsI4U3Me4l9OminU9woVtF9Sv3CAHb5vKbFZ93XpTFctAQ6qAVSGjkGvGI9iw==" "integrity": "sha512-cSNrcyxZ3GT+tjSlUzWIzMiK7Wndq1Nm/2tlRhT65RXltSIcH5zaHdmnz1TnIhLuOViaO9qfSdnRPzxNkxMv0g=="
}, },
"cosmotype": { "cosmotype": {
"version": "1.0.3", "version": "1.0.9",
"resolved": "https://registry.npmjs.org/cosmotype/-/cosmotype-1.0.3.tgz", "resolved": "https://registry.npmjs.org/cosmotype/-/cosmotype-1.0.9.tgz",
"integrity": "sha512-JykvyDjyjaDjycm8CcK8GD4Xt6/Glu4pJU9uJ5lsDuE5B5bdmAykiTPMHfs+Is8QUsNaDKpsHfxtxCUBDPYgdw==", "integrity": "sha512-ot2m5LYBj9UNFvYpQNQ28hWYDG4GWmym094us2HNn6qgYzvALmjs4FxEVBsjA+VBnIf3ykuMGRYcex5cqZTvJQ==",
"peer": true, "peer": true,
"requires": { "requires": {
"cosmokit": "^1.1.1", "cosmokit": "^1.1.2",
"ns-require": "^1.1.0" "ns-require": "^1.1.2"
} }
}, },
"cosmotype-decorators": { "cosmotype-decorators": {
...@@ -11783,14 +11783,14 @@ ...@@ -11783,14 +11783,14 @@
} }
}, },
"koishi": { "koishi": {
"version": "4.6.0", "version": "4.6.1",
"resolved": "https://registry.npmjs.org/koishi/-/koishi-4.6.0.tgz", "resolved": "https://registry.npmjs.org/koishi/-/koishi-4.6.1.tgz",
"integrity": "sha512-QhjFWTGhrFnYfpVg4dNNxgHER38zSij3nyM/RB3YrLTM4VwImVk5unpgg0QryViwWxSYM4zJ0YUoys4A9jgG6A==", "integrity": "sha512-9NtcXrIKLN8AG9zEf3GzweSiHQubew0AWfjaci0grIxy760T77D8iLVsDbVhzmGSnc26WOR2q3CMFdRmE2igVA==",
"peer": true, "peer": true,
"requires": { "requires": {
"@koa/router": "^10.1.1", "@koa/router": "^10.1.1",
"@koishijs/core": "^4.6.0", "@koishijs/core": "^4.6.1",
"@koishijs/utils": "^5.4.0", "@koishijs/utils": "^5.4.1",
"@types/koa": "*", "@types/koa": "*",
"@types/koa__router": "*", "@types/koa__router": "*",
"@types/ws": "^8.5.3", "@types/ws": "^8.5.3",
...@@ -12074,9 +12074,9 @@ ...@@ -12074,9 +12074,9 @@
} }
}, },
"ns-require": { "ns-require": {
"version": "1.1.0", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/ns-require/-/ns-require-1.1.0.tgz", "resolved": "https://registry.npmjs.org/ns-require/-/ns-require-1.1.2.tgz",
"integrity": "sha512-Iw349zwWNgkGZjYJtruf+BXUe8YHOiMZE0iUNffvpt/A1yTSabTnpBMQ0zNl65G1LhpzwCo1KMCqjmJF0z8O6g==", "integrity": "sha512-GUF6I1hWDsGx1cA9FW27KIRAlkMel2UZagR39dVNPAPBgwWK1Ez0XB96WEz2OFcwHsCORI9h75dEZueHqZ/1pA==",
"peer": true "peer": true
}, },
"nwsapi": { "nwsapi": {
...@@ -12564,12 +12564,12 @@ ...@@ -12564,12 +12564,12 @@
"dev": true "dev": true
}, },
"reggol": { "reggol": {
"version": "1.0.1", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/reggol/-/reggol-1.0.1.tgz", "resolved": "https://registry.npmjs.org/reggol/-/reggol-1.0.2.tgz",
"integrity": "sha512-ZMOp3rZG6YQFVp/DC+BgFZaXSQcxHDayCmo7cL/kGujsSEoUzee0VJq1KCe9sgNt0qsM6JzkuSlj/+5SmmoO7Q==", "integrity": "sha512-BP7gx5nUBntWChG4x/yf7xLdpxy1R5PMtF/LJlOsz+XkWtip4YVNkQp2Flmio9hXSc2UxrwUyP0WrQ1M/FFWXw==",
"peer": true, "peer": true,
"requires": { "requires": {
"cosmokit": "^1.1.0", "cosmokit": "^1.1.2",
"supports-color": "^8.1.1" "supports-color": "^8.1.1"
}, },
"dependencies": { "dependencies": {
...@@ -12690,12 +12690,12 @@ ...@@ -12690,12 +12690,12 @@
} }
}, },
"schemastery": { "schemastery": {
"version": "3.3.2", "version": "3.3.3",
"resolved": "https://registry.npmjs.org/schemastery/-/schemastery-3.3.2.tgz", "resolved": "https://registry.npmjs.org/schemastery/-/schemastery-3.3.3.tgz",
"integrity": "sha512-Z1C850OPtNEBs+D4QBPdC+Wu1t6Fn1BrOJILRHs2b+I/u61hUKP2vIPMAXFLvmmONnwqAW8ksPdCD6Zz9n8zhg==", "integrity": "sha512-DwRsse6C+Qao90P/Bz+4G3gmAjM3he/VgHk3TykmEWv3KFqvwmqEn61SF3BPaTPP0L77a5Kc6q4+KQvdN1bBqA==",
"peer": true, "peer": true,
"requires": { "requires": {
"cosmokit": "^1.1.0" "cosmokit": "^1.1.2"
} }
}, },
"schemastery-gen": { "schemastery-gen": {
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
"ws": "^8.3.0" "ws": "^8.3.0"
}, },
"peerDependencies": { "peerDependencies": {
"koishi": "^4.6.0" "koishi": "^4.6.1"
}, },
"jest": { "jest": {
"moduleFileExtensions": [ "moduleFileExtensions": [
......
// import 'source-map-support/register'; // import 'source-map-support/register';
import { import { Context, Awaitable, Random, Logger, Bot, remove } from 'koishi';
Context, import { PicSourceConfig, PicSourceInfo, PicsPluginConfig } from './config';
Assets,
Awaitable,
Random,
Logger,
Bot,
remove,
} from 'koishi';
import {
PicMiddlewareConfig,
PicMiddlewareInfo,
PicSourceInfo,
PicsPluginConfig,
} from './config';
import _ from 'lodash'; import _ from 'lodash';
import { segment, Quester } from 'koishi'; import { segment, Quester } from 'koishi';
import { import {
BasePlugin, BasePlugin,
Caller, Caller,
ClassType,
DefinePlugin, DefinePlugin,
Inject, Inject,
InjectConfig,
InjectLogger, InjectLogger,
LifecycleEvents, LifecycleEvents,
PartialDeep,
Provide, Provide,
} from 'koishi-thirdeye'; } from 'koishi-thirdeye';
import { AxiosRequestConfig } from 'axios'; import { AxiosRequestConfig } from 'axios';
...@@ -77,6 +65,28 @@ export class PicSource implements PicSourceInfo { ...@@ -77,6 +65,28 @@ export class PicSource implements PicSourceInfo {
} }
} }
export class PicSourcePlugin<
C extends PicSourceConfig = PicSourceConfig,
> extends PicSource {
constructor(ctx: Context, config: PartialDeep<C>) {
super(ctx);
}
@InjectConfig()
protected config: C;
@Inject(true)
protected pics: PicsContainer;
@InjectLogger()
protected logger: Logger;
onApply() {
this.config.applyTo(this);
this.pics.addSource(this);
}
}
@Provide('pics', { immediate: true }) @Provide('pics', { immediate: true })
@DefinePlugin({ name: 'pics', schema: PicsPluginConfig }) @DefinePlugin({ name: 'pics', schema: PicsPluginConfig })
export default class PicsContainer export default class PicsContainer
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment