Commit 16185c34 authored by nanahira's avatar nanahira

rework with multi instance

parent 34428473
...@@ -10,7 +10,6 @@ const app = new App({ ...@@ -10,7 +10,6 @@ const app = new App({
port: 14514, port: 14514,
host: 'localhost', host: 'localhost',
prefix: '.', prefix: '.',
}); });
// Console and sandbox // Console and sandbox
......
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
"version": "2.0.2", "version": "2.0.2",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"koishi-target-def": "^1.0.4", "koishi-target-def": "^1.0.5",
"koishi-thirdeye": "^10.0.5", "koishi-thirdeye": "^10.0.8",
"node-schedule": "^2.1.0" "node-schedule": "^2.1.0"
}, },
"devDependencies": { "devDependencies": {
...@@ -1073,13 +1073,13 @@ ...@@ -1073,13 +1073,13 @@
} }
}, },
"node_modules/@koishijs/core": { "node_modules/@koishijs/core": {
"version": "4.6.1", "version": "4.6.2",
"resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.6.1.tgz", "resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.6.2.tgz",
"integrity": "sha512-2HzdUi76YSLFZYpPXcmEwwVyHQLPF8BL0GJR6PuCYdOYfHykzwA5NmqOGx29EyeuYzs8sS6yr25IQktxMYqsdg==", "integrity": "sha512-GM0497Bd5BDPXuzJMppJik+Zb55bbLTX14aJmkFgPW9maU9oz3ZZRW+EeMpFK449fPG83P2UsIulJHNbD5L/hQ==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@koishijs/utils": "^5.4.1", "@koishijs/utils": "^5.4.2",
"cosmotype": "^1.0.6", "cosmotype": "^1.0.9",
"fastest-levenshtein": "^1.0.12", "fastest-levenshtein": "^1.0.12",
"ns-require": "^1.1.2" "ns-require": "^1.1.2"
}, },
...@@ -1160,9 +1160,9 @@ ...@@ -1160,9 +1160,9 @@
"peer": true "peer": true
}, },
"node_modules/@koishijs/utils": { "node_modules/@koishijs/utils": {
"version": "5.4.1", "version": "5.4.2",
"resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-5.4.1.tgz", "resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-5.4.2.tgz",
"integrity": "sha512-M3L9KqtdTyCzQK1LxTtp7QCucc75IA2vRwnYJA1gXMAxPC3SoEjUVmsk/oNFBSknmfADdViI5mFJtUXMCpJW1g==", "integrity": "sha512-cUwrqVQqTM/F2DZO9APEDlfz2mrUe5L7b2pYmhaTi8Pggk9kT78hvBx4fnLWrHiFV3BPuikghqZSfkladFcugw==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@koishijs/segment": "^1.1.1", "@koishijs/segment": "^1.1.1",
...@@ -5272,14 +5272,14 @@ ...@@ -5272,14 +5272,14 @@
} }
}, },
"node_modules/koishi": { "node_modules/koishi": {
"version": "4.6.1", "version": "4.6.2",
"resolved": "https://registry.npmjs.org/koishi/-/koishi-4.6.1.tgz", "resolved": "https://registry.npmjs.org/koishi/-/koishi-4.6.2.tgz",
"integrity": "sha512-9NtcXrIKLN8AG9zEf3GzweSiHQubew0AWfjaci0grIxy760T77D8iLVsDbVhzmGSnc26WOR2q3CMFdRmE2igVA==", "integrity": "sha512-vgjKxSJxAOsFwBnO097d8Oo8AC0jTvdfrsAHgu8u1d3DDJkHzUr8vQEjcJjvAp411Ev5VIvswFeSpeTVWDv6VA==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@koa/router": "^10.1.1", "@koa/router": "^10.1.1",
"@koishijs/core": "^4.6.1", "@koishijs/core": "^4.6.2",
"@koishijs/utils": "^5.4.1", "@koishijs/utils": "^5.4.2",
"@types/koa": "*", "@types/koa": "*",
"@types/koa__router": "*", "@types/koa__router": "*",
"@types/ws": "^8.5.3", "@types/ws": "^8.5.3",
...@@ -5338,21 +5338,21 @@ ...@@ -5338,21 +5338,21 @@
} }
}, },
"node_modules/koishi-target-def": { "node_modules/koishi-target-def": {
"version": "1.0.4", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/koishi-target-def/-/koishi-target-def-1.0.4.tgz", "resolved": "https://registry.npmjs.org/koishi-target-def/-/koishi-target-def-1.0.5.tgz",
"integrity": "sha512-LV8vEEP5AKCiO1U45Vk8fyEMuo/AMVA3kTjmXPUvNZaEzmKe9wO/h8SzYSDoyjMu8Fap1L5bU8WB93zerLOg1Q==", "integrity": "sha512-4H6HnlnE2I0uyCFuX2yYNGORHENelTSE+ZHgiGkpjzIawIMiC7YsV1nuy9yIpFU+DaG6bIFgkAnkoDKtDRkJ5A==",
"dependencies": { "dependencies": {
"lodash": "^4.17.21" "lodash": "^4.17.21"
}, },
"peerDependencies": { "peerDependencies": {
"koishi": "^4.4.2", "koishi": "^4.6.2",
"schemastery-gen": "^3.1.3" "schemastery-gen": "^3.1.6"
} }
}, },
"node_modules/koishi-thirdeye": { "node_modules/koishi-thirdeye": {
"version": "10.0.5", "version": "10.0.8",
"resolved": "https://registry.npmjs.org/koishi-thirdeye/-/koishi-thirdeye-10.0.5.tgz", "resolved": "https://registry.npmjs.org/koishi-thirdeye/-/koishi-thirdeye-10.0.8.tgz",
"integrity": "sha512-GzPNyJCnUNklHefi0vc0nArV+dEh1QuTddom9MQ6Sawa6nbjbnZNWKFY08eQxNR6CR87tYK93WtO+URwcBbEew==", "integrity": "sha512-osmkYVNzcv2T2ItKFVLvCYOPEyuVbyZ6jdG7uybA2lLt4Y8zCxWHZFhq0ck1UaahZs5oFIrCfpTSdjxDv83UcQ==",
"dependencies": { "dependencies": {
"@types/koa": "^2.13.4", "@types/koa": "^2.13.4",
"@types/koa__router": "^8.0.11", "@types/koa__router": "^8.0.11",
...@@ -5360,11 +5360,11 @@ ...@@ -5360,11 +5360,11 @@
"koishi-decorators": "^2.0.0", "koishi-decorators": "^2.0.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"schemastery-gen": "^3.1.4", "schemastery-gen": "^3.1.6",
"typed-reflector": "^1.0.10" "typed-reflector": "^1.0.10"
}, },
"peerDependencies": { "peerDependencies": {
"koishi": "^4.6.0", "koishi": "^4.6.1",
"schemastery": "^3.1.0" "schemastery": "^3.1.0"
} }
}, },
...@@ -6518,16 +6518,16 @@ ...@@ -6518,16 +6518,16 @@
} }
}, },
"node_modules/schemastery-gen": { "node_modules/schemastery-gen": {
"version": "3.1.4", "version": "3.1.6",
"resolved": "https://registry.npmjs.org/schemastery-gen/-/schemastery-gen-3.1.4.tgz", "resolved": "https://registry.npmjs.org/schemastery-gen/-/schemastery-gen-3.1.6.tgz",
"integrity": "sha512-zhM5A2p/SdPKe8ouObCYSOA3k5I1CpbOfSvv8DWp7kCbVnSgfOMSBCB4Yue3/D81+MAE2re93nSt7k/Tolz3mQ==", "integrity": "sha512-UiYsiuvj830k2IzznWx/+Ed9+j1+XwMZ1zfctpy6+rHe6Se0IrulBsh2XDmI2uDslFtd6HfjIi5BJksbVvXQ/w==",
"dependencies": { "dependencies": {
"lodash": "^4.17.21", "lodash": "^4.17.21",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"typed-reflector": "^1.0.10" "typed-reflector": "^1.0.10"
}, },
"peerDependencies": { "peerDependencies": {
"schemastery": "^3.3.2" "schemastery": "^3.3.3"
} }
}, },
"node_modules/semver": { "node_modules/semver": {
...@@ -8630,13 +8630,13 @@ ...@@ -8630,13 +8630,13 @@
} }
}, },
"@koishijs/core": { "@koishijs/core": {
"version": "4.6.1", "version": "4.6.2",
"resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.6.1.tgz", "resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.6.2.tgz",
"integrity": "sha512-2HzdUi76YSLFZYpPXcmEwwVyHQLPF8BL0GJR6PuCYdOYfHykzwA5NmqOGx29EyeuYzs8sS6yr25IQktxMYqsdg==", "integrity": "sha512-GM0497Bd5BDPXuzJMppJik+Zb55bbLTX14aJmkFgPW9maU9oz3ZZRW+EeMpFK449fPG83P2UsIulJHNbD5L/hQ==",
"peer": true, "peer": true,
"requires": { "requires": {
"@koishijs/utils": "^5.4.1", "@koishijs/utils": "^5.4.2",
"cosmotype": "^1.0.6", "cosmotype": "^1.0.9",
"fastest-levenshtein": "^1.0.12", "fastest-levenshtein": "^1.0.12",
"ns-require": "^1.1.2" "ns-require": "^1.1.2"
} }
...@@ -8701,9 +8701,9 @@ ...@@ -8701,9 +8701,9 @@
"peer": true "peer": true
}, },
"@koishijs/utils": { "@koishijs/utils": {
"version": "5.4.1", "version": "5.4.2",
"resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-5.4.1.tgz", "resolved": "https://registry.npmjs.org/@koishijs/utils/-/utils-5.4.2.tgz",
"integrity": "sha512-M3L9KqtdTyCzQK1LxTtp7QCucc75IA2vRwnYJA1gXMAxPC3SoEjUVmsk/oNFBSknmfADdViI5mFJtUXMCpJW1g==", "integrity": "sha512-cUwrqVQqTM/F2DZO9APEDlfz2mrUe5L7b2pYmhaTi8Pggk9kT78hvBx4fnLWrHiFV3BPuikghqZSfkladFcugw==",
"peer": true, "peer": true,
"requires": { "requires": {
"@koishijs/segment": "^1.1.1", "@koishijs/segment": "^1.1.1",
...@@ -11879,14 +11879,14 @@ ...@@ -11879,14 +11879,14 @@
} }
}, },
"koishi": { "koishi": {
"version": "4.6.1", "version": "4.6.2",
"resolved": "https://registry.npmjs.org/koishi/-/koishi-4.6.1.tgz", "resolved": "https://registry.npmjs.org/koishi/-/koishi-4.6.2.tgz",
"integrity": "sha512-9NtcXrIKLN8AG9zEf3GzweSiHQubew0AWfjaci0grIxy760T77D8iLVsDbVhzmGSnc26WOR2q3CMFdRmE2igVA==", "integrity": "sha512-vgjKxSJxAOsFwBnO097d8Oo8AC0jTvdfrsAHgu8u1d3DDJkHzUr8vQEjcJjvAp411Ev5VIvswFeSpeTVWDv6VA==",
"peer": true, "peer": true,
"requires": { "requires": {
"@koa/router": "^10.1.1", "@koa/router": "^10.1.1",
"@koishijs/core": "^4.6.1", "@koishijs/core": "^4.6.2",
"@koishijs/utils": "^5.4.1", "@koishijs/utils": "^5.4.2",
"@types/koa": "*", "@types/koa": "*",
"@types/koa__router": "*", "@types/koa__router": "*",
"@types/ws": "^8.5.3", "@types/ws": "^8.5.3",
...@@ -11932,17 +11932,17 @@ ...@@ -11932,17 +11932,17 @@
} }
}, },
"koishi-target-def": { "koishi-target-def": {
"version": "1.0.4", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/koishi-target-def/-/koishi-target-def-1.0.4.tgz", "resolved": "https://registry.npmjs.org/koishi-target-def/-/koishi-target-def-1.0.5.tgz",
"integrity": "sha512-LV8vEEP5AKCiO1U45Vk8fyEMuo/AMVA3kTjmXPUvNZaEzmKe9wO/h8SzYSDoyjMu8Fap1L5bU8WB93zerLOg1Q==", "integrity": "sha512-4H6HnlnE2I0uyCFuX2yYNGORHENelTSE+ZHgiGkpjzIawIMiC7YsV1nuy9yIpFU+DaG6bIFgkAnkoDKtDRkJ5A==",
"requires": { "requires": {
"lodash": "^4.17.21" "lodash": "^4.17.21"
} }
}, },
"koishi-thirdeye": { "koishi-thirdeye": {
"version": "10.0.5", "version": "10.0.8",
"resolved": "https://registry.npmjs.org/koishi-thirdeye/-/koishi-thirdeye-10.0.5.tgz", "resolved": "https://registry.npmjs.org/koishi-thirdeye/-/koishi-thirdeye-10.0.8.tgz",
"integrity": "sha512-GzPNyJCnUNklHefi0vc0nArV+dEh1QuTddom9MQ6Sawa6nbjbnZNWKFY08eQxNR6CR87tYK93WtO+URwcBbEew==", "integrity": "sha512-osmkYVNzcv2T2ItKFVLvCYOPEyuVbyZ6jdG7uybA2lLt4Y8zCxWHZFhq0ck1UaahZs5oFIrCfpTSdjxDv83UcQ==",
"requires": { "requires": {
"@types/koa": "^2.13.4", "@types/koa": "^2.13.4",
"@types/koa__router": "^8.0.11", "@types/koa__router": "^8.0.11",
...@@ -11950,7 +11950,7 @@ ...@@ -11950,7 +11950,7 @@
"koishi-decorators": "^2.0.0", "koishi-decorators": "^2.0.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"schemastery-gen": "^3.1.4", "schemastery-gen": "^3.1.6",
"typed-reflector": "^1.0.10" "typed-reflector": "^1.0.10"
} }
}, },
...@@ -12794,9 +12794,9 @@ ...@@ -12794,9 +12794,9 @@
} }
}, },
"schemastery-gen": { "schemastery-gen": {
"version": "3.1.4", "version": "3.1.6",
"resolved": "https://registry.npmjs.org/schemastery-gen/-/schemastery-gen-3.1.4.tgz", "resolved": "https://registry.npmjs.org/schemastery-gen/-/schemastery-gen-3.1.6.tgz",
"integrity": "sha512-zhM5A2p/SdPKe8ouObCYSOA3k5I1CpbOfSvv8DWp7kCbVnSgfOMSBCB4Yue3/D81+MAE2re93nSt7k/Tolz3mQ==", "integrity": "sha512-UiYsiuvj830k2IzznWx/+Ed9+j1+XwMZ1zfctpy6+rHe6Se0IrulBsh2XDmI2uDslFtd6HfjIi5BJksbVvXQ/w==",
"requires": { "requires": {
"lodash": "^4.17.21", "lodash": "^4.17.21",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
......
...@@ -44,8 +44,8 @@ ...@@ -44,8 +44,8 @@
"testEnvironment": "node" "testEnvironment": "node"
}, },
"dependencies": { "dependencies": {
"koishi-target-def": "^1.0.4", "koishi-target-def": "^1.0.5",
"koishi-thirdeye": "^10.0.5", "koishi-thirdeye": "^10.0.8",
"node-schedule": "^2.1.0" "node-schedule": "^2.1.0"
}, },
"peerDependencies": { "peerDependencies": {
......
...@@ -3,7 +3,7 @@ import { SendTarget } from 'koishi-target-def'; ...@@ -3,7 +3,7 @@ import { SendTarget } from 'koishi-target-def';
import { SchemaProperty, RegisterSchema } from 'koishi-thirdeye'; import { SchemaProperty, RegisterSchema } from 'koishi-thirdeye';
@RegisterSchema() @RegisterSchema()
export class Instance { export class AutoPicPluginConfig {
@SchemaProperty({ required: true }) @SchemaProperty({ required: true })
cron: string; cron: string;
...@@ -31,13 +31,3 @@ export class Instance { ...@@ -31,13 +31,3 @@ export class Instance {
}) })
targets: SendTarget[]; targets: SendTarget[];
} }
@RegisterSchema()
export class AutoPicPluginConfig {
constructor(config: AutoPicPluginConfigLike) {}
@SchemaProperty({ type: Instance })
instances: Instance[];
}
export type AutoPicPluginConfigLike = Partial<AutoPicPluginConfig>;
// import 'source-map-support/register'; // import 'source-map-support/register';
import { AutoPicPluginConfig, Instance } from './config'; import { AutoPicPluginConfig } from './config';
import { import {
DefinePlugin, DefinePlugin,
BasePlugin, BasePlugin,
Inject, Inject,
InjectLogger, InjectLogger,
LifecycleEvents, LifecycleEvents,
MultiInstancePlugin,
} from 'koishi-thirdeye'; } from 'koishi-thirdeye';
import PicsContainer from 'koishi-plugin-pics'; import PicsContainer from 'koishi-plugin-pics';
import { Adapter, Logger, segment } from 'koishi'; import { Adapter, Logger } from 'koishi';
import { Job, scheduleJob } from 'node-schedule'; import { Job, scheduleJob } from 'node-schedule';
export * from './config'; export * from './config';
@DefinePlugin({ name: 'autopic', schema: AutoPicPluginConfig }) @DefinePlugin({ name: 'autopic', schema: AutoPicPluginConfig })
export default class AutoPicPlugin export class AutoPicInstancePlugin
extends BasePlugin<AutoPicPluginConfig> extends BasePlugin<AutoPicPluginConfig>
implements LifecycleEvents implements LifecycleEvents
{ {
...@@ -26,19 +27,22 @@ export default class AutoPicPlugin ...@@ -26,19 +27,22 @@ export default class AutoPicPlugin
@InjectLogger() @InjectLogger()
private logger: Logger; private logger: Logger;
async runInstance(instance: Instance) { async run() {
const pic = await this.pics.randomPic(instance.tags, instance.sourceTags); const pic = await this.pics.randomPic(
this.config.tags,
this.config.sourceTags,
);
if (!pic) { if (!pic) {
this.logger.warn( this.logger.warn(
`no pic found for ${instance.tags?.join(',') || '*'} from ${ `no pic found for ${this.config.tags?.join(',') || '*'} from ${
instance.sourceTags?.join(',') || '*' this.config.sourceTags?.join(',') || '*'
}`, }`,
); );
return; return;
} }
const message = await this.pics.getSegment(pic.url); const message = await this.pics.getSegment(pic.url);
await Promise.all( await Promise.all(
instance.targets.map(async (target) => { this.config.targets.map(async (target) => {
try { try {
this.logger.debug(`Sending image ${pic.url} from ${target.bot}.`); this.logger.debug(`Sending image ${pic.url} from ${target.bot}.`);
let targetMessage = message; let targetMessage = message;
...@@ -60,19 +64,21 @@ export default class AutoPicPlugin ...@@ -60,19 +64,21 @@ export default class AutoPicPlugin
); );
} }
jobs: Job[] = []; private job: Job;
onConnect() { onConnect() {
this.jobs = this.config.instances.map((instance) => { if (this.config.immediate) {
if (instance.immediate) { this.run().then();
this.runInstance(instance).then(); }
} this.job = scheduleJob(this.config.cron, () => this.run());
return scheduleJob(instance.cron, () => this.runInstance(instance));
});
} }
onDisconnect() { onDisconnect() {
this.jobs.forEach((job) => job.cancel()); this.job.cancel();
this.jobs = [];
} }
} }
@DefinePlugin()
export default class AutoPicPlugin extends MultiInstancePlugin(
AutoPicInstancePlugin,
) {}
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