Commit 1b5f9c98 authored by nanahira's avatar nanahira

more put params

parent 7b3f9b79
...@@ -22,7 +22,7 @@ import { ...@@ -22,7 +22,7 @@ import {
OnContextFunction, OnContextFunction,
Selection, Selection,
} from './koishi.interfaces'; } from './koishi.interfaces';
import { Argv, Command, Context } from 'koishi'; import { Argv, Command, Context, FieldCollector, Session } from 'koishi';
import { import {
ContextScopeTypes, ContextScopeTypes,
getContextProvideToken, getContextProvideToken,
...@@ -180,6 +180,12 @@ export const CommandOption = ( ...@@ -180,6 +180,12 @@ export const CommandOption = (
config: Argv.OptionConfig = {}, config: Argv.OptionConfig = {},
) => CommandDef((cmd) => cmd.option(name, desc, config)); ) => CommandDef((cmd) => cmd.option(name, desc, config));
export const CommandUserFields = (fields: FieldCollector<'user'>) =>
CommandDef((cmd) => cmd.userFields(fields));
export const CommandChannelFields = (fields: FieldCollector<'channel'>) =>
CommandDef((cmd) => cmd.channelFields(fields));
// Command put config // Command put config
function PutCommandParam<T extends keyof CommandPutConfigMap>( function PutCommandParam<T extends keyof CommandPutConfigMap>(
...@@ -196,7 +202,8 @@ function PutCommandParam<T extends keyof CommandPutConfigMap>( ...@@ -196,7 +202,8 @@ function PutCommandParam<T extends keyof CommandPutConfigMap>(
} }
export const PutArgv = () => PutCommandParam('argv'); export const PutArgv = () => PutCommandParam('argv');
export const PutSession = () => PutCommandParam('session'); export const PutSession = (field?: keyof Session) =>
field ? PutCommandParam('sessionField', field) : PutCommandParam('session');
export const PutArg = (i: number) => PutCommandParam('arg', i); export const PutArg = (i: number) => PutCommandParam('arg', i);
export const PutOption = ( export const PutOption = (
name: string, name: string,
...@@ -204,6 +211,23 @@ export const PutOption = ( ...@@ -204,6 +211,23 @@ export const PutOption = (
config: Argv.OptionConfig = {}, config: Argv.OptionConfig = {},
) => PutCommandParam('option', { name, desc, config }); ) => PutCommandParam('option', { name, desc, config });
export const PutUser = (field: FieldCollector<'user'>) =>
PutCommandParam('user', field);
export const PutChannel = (field: FieldCollector<'channel'>) =>
PutCommandParam('channel', field);
export const PutUserName = (useDatabase = true) =>
PutCommandParam('username', useDatabase);
export const PutUserId = () => PutSession('userId');
export const PutGuildId = () => PutSession('guildId');
export const PutGuildName = () => PutSession('guildName');
export const PutChannelId = () => PutSession('channelId');
export const PutChannelName = () => PutSession('channelName');
export const PutSelfId = () => PutSession('selfId');
export const PutBot = () => PutSession('bot');
// Service // Service
export function WireContextService(name?: string): PropertyDecorator { export function WireContextService(name?: string): PropertyDecorator {
......
...@@ -5,8 +5,10 @@ import { ...@@ -5,8 +5,10 @@ import {
Command, Command,
Context, Context,
EventMap, EventMap,
FieldCollector,
MaybeArray, MaybeArray,
Plugin, Plugin,
Session,
} from 'koishi'; } from 'koishi';
const selectors = [ const selectors = [
...@@ -134,6 +136,10 @@ export interface CommandPutConfigMap { ...@@ -134,6 +136,10 @@ export interface CommandPutConfigMap {
argv: never; argv: never;
session: never; session: never;
option: CommandOptionConfig; option: CommandOptionConfig;
user: FieldCollector<'user'>;
channel: FieldCollector<'channel'>;
username: boolean;
sessionField: keyof Session;
} }
export type CommandPutConfig< export type CommandPutConfig<
......
...@@ -7,7 +7,7 @@ import { ...@@ -7,7 +7,7 @@ import {
ModulesContainer, ModulesContainer,
Reflector, Reflector,
} from '@nestjs/core'; } from '@nestjs/core';
import { Argv, Command, Context } from 'koishi'; import { Argv, Command, Context, User } from 'koishi';
import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
import { import {
KoishiCommandDefinition, KoishiCommandDefinition,
...@@ -20,6 +20,7 @@ import { ...@@ -20,6 +20,7 @@ import {
import { import {
CommandDefinitionFun, CommandDefinitionFun,
CommandPutConfig, CommandPutConfig,
CommandPutConfigMap,
ContextFunction, ContextFunction,
DoRegisterConfig, DoRegisterConfig,
EventName, EventName,
...@@ -51,6 +52,39 @@ export class KoishiMetascanService { ...@@ -51,6 +52,39 @@ export class KoishiMetascanService {
} }
} }
private preRegisterCommandActionArg(config: CommandPutConfig, cmd: Command) {
if (!config) {
return;
}
switch (config.type) {
case 'option':
const { data: optionData } = config as CommandPutConfig<'option'>;
cmd.option(optionData.name, optionData.desc, optionData.config);
break;
case 'user':
const { data: userFields } = config as CommandPutConfig<'user'>;
if (userFields) {
cmd.userFields(userFields);
}
break;
case 'channel':
const { data: channelFields } = config as CommandPutConfig<'channel'>;
if (channelFields) {
cmd.channelFields(channelFields);
}
break;
case 'username':
const { data: useDatabase } = config as CommandPutConfig<'username'>;
if (useDatabase) {
cmd.userFields(['name']);
}
break;
default:
break;
}
return;
}
private getCommandActionArg( private getCommandActionArg(
config: CommandPutConfig, config: CommandPutConfig,
argv: Argv, argv: Argv,
...@@ -70,6 +104,22 @@ export class KoishiMetascanService { ...@@ -70,6 +104,22 @@ export class KoishiMetascanService {
case 'option': case 'option':
const { data: optionData } = config as CommandPutConfig<'option'>; const { data: optionData } = config as CommandPutConfig<'option'>;
return argv.options[optionData.name]; return argv.options[optionData.name];
case 'user':
return argv.session.user;
case 'channel':
return argv.session.channel;
case 'username':
const { data: useDatabase } = config as CommandPutConfig<'username'>;
if (useDatabase) {
const user = argv.session.user as User.Observed<'name'>;
if (user?.name) {
return user?.name;
}
}
return argv.session.author?.nickname || argv.session.author?.username;
case 'sessionField':
const { data: field } = config as CommandPutConfig<'sessionField'>;
return argv.session[field];
default: default:
return; return;
} }
...@@ -161,15 +211,7 @@ export class KoishiMetascanService { ...@@ -161,15 +211,7 @@ export class KoishiMetascanService {
); );
} else { } else {
for (const _optionToRegister of commandData.putOptions) { for (const _optionToRegister of commandData.putOptions) {
if (_optionToRegister?.type !== 'option') { this.preRegisterCommandActionArg(_optionToRegister, command);
continue;
}
const optionToRegister = _optionToRegister as CommandPutConfig<'option'>;
command.option(
optionToRegister.data.name,
optionToRegister.data.desc,
optionToRegister.data.config,
);
} }
command.action((argv: Argv, ...args: any[]) => { command.action((argv: Argv, ...args: any[]) => {
const params = commandData.putOptions.map((o) => const params = commandData.putOptions.map((o) =>
......
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