Commit 4ebc5848 authored by nanahira's avatar nanahira

bump

parent 901fe03c
This diff is collapsed.
...@@ -45,10 +45,10 @@ ...@@ -45,10 +45,10 @@
}, },
"dependencies": { "dependencies": {
"aragami": "^1.1.1", "aragami": "^1.1.1",
"koishi-thirdeye": "^11.0.7" "koishi-thirdeye": "^11.0.9"
}, },
"peerDependencies": { "peerDependencies": {
"koishi": "^4.8.3" "koishi": "^4.8.4"
}, },
"devDependencies": { "devDependencies": {
"@koishijs/plugin-console": "^4.1.1", "@koishijs/plugin-console": "^4.1.1",
......
...@@ -2,12 +2,13 @@ ...@@ -2,12 +2,13 @@
import { AragamiConfig } from './config'; import { AragamiConfig } from './config';
import { import {
DefinePlugin, DefinePlugin,
koishiRegistrar,
LifecycleEvents, LifecycleEvents,
PartialDeep, PartialDeep,
PluginSchema, PluginSchema,
Provide, Provide,
} from 'koishi-thirdeye'; } from 'koishi-thirdeye';
import { Context } from 'koishi'; import { Channel, Command, Context, Session, User } from 'koishi';
import { Aragami, AragamiOptions, WrapDecoratorBuilder } from 'aragami'; import { Aragami, AragamiOptions, WrapDecoratorBuilder } from 'aragami';
export * from './config'; export * from './config';
export * from 'aragami'; export * from 'aragami';
...@@ -32,8 +33,76 @@ export default class AragamiPlugin extends Aragami implements LifecycleEvents { ...@@ -32,8 +33,76 @@ export default class AragamiPlugin extends Aragami implements LifecycleEvents {
onDisconnect() { onDisconnect() {
return this.destroy(); return this.destroy();
} }
private commandLock<C extends Command>(
cmd: C,
fields: string[],
info: { idFactory: (session: Session) => string; prefix: string },
) {
return cmd.action((argv) => {
if (!argv.session) return argv.next();
const id = info.idFactory(argv.session);
if (!id) return argv.next();
const lockFields = fields.map(
(field) => `koishi:${info.prefix}:${id}:${field}`,
);
return this.lock(lockFields, argv.next);
}, true);
}
commandUserLock<C extends Command>(cmd: C, fields: (keyof User)[]) {
return this.commandLock(cmd.userFields(fields) as C, fields, {
idFactory: (session: Session) => session.userId,
prefix: 'user',
});
}
commandChannelLock<C extends Command>(cmd: C, fields: (keyof Channel)[]) {
return this.commandLock(cmd.channelFields(fields) as C, fields, {
idFactory: (session: Session) => session.channelId,
prefix: 'channel',
});
}
commandGuildLock<C extends Command>(cmd: C, fields: (keyof Channel)[]) {
return this.commandLock(cmd.channelFields(fields) as C, fields, {
idFactory: (session: Session) => session.guildId || session.channelId,
prefix: 'guild',
});
}
} }
export const { UseCache, UseLock } = new WrapDecoratorBuilder( export const { UseCache, UseLock } = new WrapDecoratorBuilder(
(o) => ((o.ctx || o.__ctx) as Context).aragami, (o) => ((o.ctx || o.__ctx) as Context).aragami,
).build(); ).build();
export const CommandUserLock = koishiRegistrar.decorateCommandTransformer(
(ctx, cmd, ...fields: (keyof User)[]) =>
ctx.aragami.commandUserLock(cmd, fields),
);
export const CommandChannelLock = koishiRegistrar.decorateCommandTransformer(
(ctx, cmd, ...fields: (keyof Channel)[]) =>
ctx.aragami.commandChannelLock(cmd, fields),
);
export const CommandGuildLock = koishiRegistrar.decorateCommandTransformer(
(ctx, cmd, ...fields: (keyof Channel)[]) =>
ctx.aragami.commandGuildLock(cmd, fields),
);
export const PutLockingUser = koishiRegistrar.decorateCommandPut(
(info, ...fields: (keyof User)[]) => info.argv.session.user,
(info, ...fields) => info.ctx.aragami.commandUserLock(info.command, fields),
);
export const PutLockingChannel = koishiRegistrar.decorateCommandPut(
(info, ...fields: (keyof Channel)[]) => info.argv.session.channel,
(info, ...fields) =>
info.ctx.aragami.commandChannelLock(info.command, fields),
);
export const PutLockingGuild = koishiRegistrar.decorateCommandPut(
(info, ...fields: (keyof Channel)[]) => info.argv.session.guild,
(info, ...fields) => info.ctx.aragami.commandGuildLock(info.command, fields),
);
...@@ -42,6 +42,8 @@ module.exports = { ...@@ -42,6 +42,8 @@ module.exports = {
}, },
externals: { externals: {
koishi: 'koishi', koishi: 'koishi',
'@satorijs/satori': '@satorijs/satori',
cordis: 'cordis',
...(packAll ? {} : externalsFromDep()), ...(packAll ? {} : externalsFromDep()),
}, },
optimization: { optimization: {
......
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