Table of Contents

Class CommandService

Namespace
Kook.Commands
Assembly
Kook.Net.Commands.dll

表示一个基于文本的命令服务。

public class CommandService : IDisposable
Inheritance
CommandService
Implements
Inherited Members
Extension Methods

Remarks

此类用于支持在运行时动态创建命令,或者在编译时静态创建命令。要在编译时创建命令模块,参见 ModuleBaseModuleBuilder
此服务还提供了几个事件,用于监视命令的使用情况;例如 Log 用于任何与命令相关的日志事件,

Constructors

CommandService()

初始化一个 CommandService 类的新实例。

public CommandService()

CommandService(CommandServiceConfig)

初始化一个 CommandService 类的新实例。

public CommandService(CommandServiceConfig config)

Parameters

config CommandServiceConfig

命令服务的配置。

Exceptions

InvalidOperationException

默认运行模式不能设置为 Default

Properties

Commands

获取所有加载的命令。

public IEnumerable<CommandInfo> Commands { get; }

Property Value

IEnumerable<CommandInfo>

Modules

获取所有加载的模块。

public IEnumerable<ModuleInfo> Modules { get; }

Property Value

IEnumerable<ModuleInfo>

TypeReaders

获取所有加载的类型读取器。

public ILookup<Type, TypeReader> TypeReaders { get; }

Property Value

ILookup<Type, TypeReader>

Methods

AddModuleAsync(Type, IServiceProvider?)

添加一个命令模块。

public Task<ModuleInfo> AddModuleAsync(Type type, IServiceProvider? services)

Parameters

type Type

要添加的模块的类型。

services IServiceProvider

用于依赖注入的服务提供程序;如果不使用依赖注入,则传递 null

Returns

Task<ModuleInfo>

一个表示异步添加操作的任务。任务结果包含添加的模块。

Exceptions

ArgumentException

此模块已经添加。

InvalidOperationException

无法构建 ModuleInfo;可能提供了无效的类型。

AddModuleAsync<T>(IServiceProvider?)

添加一个命令模块。

public Task<ModuleInfo> AddModuleAsync<T>(IServiceProvider? services)

Parameters

services IServiceProvider

用于依赖注入的服务提供程序;如果不使用依赖注入,则传递 null

Returns

Task<ModuleInfo>

一个表示异步添加操作的任务。任务结果包含添加的模块。

Type Parameters

T

要添加的模块的类型。

Examples

以下示例代码将模块 MyModule 注册到 commandService 中。

await commandService.AddModuleAsync<MyModule>(serviceProvider);

Exceptions

ArgumentException

此模块已经添加。

InvalidOperationException

无法构建 ModuleInfo;可能提供了无效的类型。

AddModulesAsync(Assembly, IServiceProvider?)

添加程序集内的所有命令模块。

public Task<IEnumerable<ModuleInfo>> AddModulesAsync(Assembly assembly, IServiceProvider? services)

Parameters

assembly Assembly

要添加其所有模块的程序集。

services IServiceProvider

用于依赖注入的服务提供程序;如果不使用依赖注入,则传递 null

Returns

Task<IEnumerable<ModuleInfo>>

一个表示异步添加操作的任务。任务结果包含所有添加的模块。

AddTypeReader(Type, TypeReader)

添加一个自定义的类型读取器。

public void AddTypeReader(Type type, TypeReader reader)

Parameters

type Type

要读取的对象类型。

reader TypeReader

要添加的类型读取器的实例。

Remarks

如果 type 是一个值类型,那么一个读取对应可空值类型的 TypeReader 也会被添加。
如果 type 的默认 TypeReader 已经存在,那么会记录一个警告,默认的 TypeReader 将会被替换。

AddTypeReader(Type, TypeReader, bool)

添加一个自定义的类型读取器。

public void AddTypeReader(Type type, TypeReader reader, bool replaceDefault)

Parameters

type Type

要读取的对象类型。

reader TypeReader

要添加的类型读取器的实例。

replaceDefault bool

是否替换默认的 TypeReader

Remarks

如果 type 是一个值类型,那么一个读取对应可空值类型的 TypeReader 也会被添加。

AddTypeReader<T>(TypeReader)

添加一个自定义的类型读取器。

public void AddTypeReader<T>(TypeReader reader)

Parameters

reader TypeReader

要添加的类型读取器的实例。

Type Parameters

T

要读取的对象类型。

Remarks

如果 T 是一个值类型,那么一个读取对应可空值类型的 TypeReader 也会被添加。
如果 T 的默认 TypeReader 已经存在,那么会记录一个警告,默认的 TypeReader 将会被替换。

AddTypeReader<T>(TypeReader, bool)

添加一个自定义的类型读取器。

public void AddTypeReader<T>(TypeReader reader, bool replaceDefault)

Parameters

reader TypeReader

要添加的类型读取器的实例。

replaceDefault bool

是否替换默认的 TypeReader

Type Parameters

T

要读取的对象类型。

Remarks

如果 T 是一个值类型,那么一个读取对应可空值类型的 TypeReader 也会被添加。

CreateModuleAsync(string, Action<ModuleBuilder>)

创建一个命令模块。

public Task<ModuleInfo> CreateModuleAsync(string primaryAlias, Action<ModuleBuilder> buildFunc)

Parameters

primaryAlias string

模块的首要别名。

buildFunc Action<ModuleBuilder>

一个构建模块的委托。

Returns

Task<ModuleInfo>

一个表示异步操作的任务。任务结果包含构建的模块。

Dispose(bool)

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.

protected virtual void Dispose(bool disposing)

Parameters

disposing bool

ExecuteAsync(ICommandContext, int, IServiceProvider, MultiMatchHandling)

执行命令。

public Task<IResult> ExecuteAsync(ICommandContext context, int argPos, IServiceProvider services, MultiMatchHandling multiMatchHandling = MultiMatchHandling.Exception)

Parameters

context ICommandContext

命令的上下文。

argPos int

命令的位置。

services IServiceProvider

要用于命令执行的依赖注入服务。

multiMatchHandling MultiMatchHandling

当匹配到多个命令时的处理模式。

Returns

Task<IResult>

一个表示异步执行操作的任务。任务的结果包含执行的结果。

ExecuteAsync(ICommandContext, string, IServiceProvider, MultiMatchHandling)

执行命令。

public Task<IResult> ExecuteAsync(ICommandContext context, string input, IServiceProvider services, MultiMatchHandling multiMatchHandling = MultiMatchHandling.Exception)

Parameters

context ICommandContext

命令的上下文。

input string

命令字符串。

services IServiceProvider

要用于命令执行的依赖注入服务。

multiMatchHandling MultiMatchHandling

当匹配到多个命令时的处理模式。

Returns

Task<IResult>

一个表示异步执行操作的任务。任务的结果包含执行的结果。

RemoveModuleAsync(ModuleInfo)

移除命令模块。

public Task<bool> RemoveModuleAsync(ModuleInfo module)

Parameters

module ModuleInfo

要移除的模块。

Returns

Task<bool>

一个表示异步删除操作的任务。如果任务结果为 true,则表示模块已成功删除,否则表示模块不存在。

RemoveModuleAsync(Type)

移除命令模块。

public Task<bool> RemoveModuleAsync(Type type)

Parameters

type Type

要移除的模块的类型。

Returns

Task<bool>

一个表示异步删除操作的任务。如果任务结果为 true,则表示模块已成功删除,否则表示模块不存在。

RemoveModuleAsync<T>()

移除命令模块。

public Task<bool> RemoveModuleAsync<T>()

Returns

Task<bool>

一个表示异步删除操作的任务。如果任务结果为 true,则表示模块已成功删除,否则表示模块不存在。

Type Parameters

T

要移除的模块的类型。

Search(ICommandContext, int)

搜索命令。

public SearchResult Search(ICommandContext context, int argPos)

Parameters

context ICommandContext

命令的上下文。

argPos int

命令的位置。

Returns

SearchResult

命令搜索的结果。

Search(ICommandContext, string)

搜索命令。

public SearchResult Search(ICommandContext context, string input)

Parameters

context ICommandContext

命令的上下文。

input string

命令字符串。

Returns

SearchResult

命令搜索的结果。

Search(string)

搜索命令。

public SearchResult Search(string input)

Parameters

input string

命令字符串。

Returns

SearchResult

命令搜索的结果。

TryRemoveTypeReader(Type, bool, out IDictionary<Type, TypeReader>)

移除一个类型读取器。

public bool TryRemoveTypeReader(Type type, bool isDefaultTypeReader, out IDictionary<Type, TypeReader> readers)

Parameters

type Type

要移除的类型读取器所读取的对象类型。

isDefaultTypeReader bool

是否要移除默认的 TypeReader

readers IDictionary<Type, TypeReader>

移除的类型读取器。

Returns

bool

如果成功移除,则为 true;否则为 false

Remarks

从命令服务中移除一个 TypeReader 不会从已加载的模块与命令的实例中取消引用 TypeReader。要使更改生效,您需要重新加载模块。

ValidateAndGetBestMatch(SearchResult, ICommandContext, IServiceProvider, MultiMatchHandling)

从指定的搜索结果中验证先决条件并获取最佳匹配。

public Task<IResult> ValidateAndGetBestMatch(SearchResult matches, ICommandContext context, IServiceProvider provider, MultiMatchHandling multiMatchHandling = MultiMatchHandling.Exception)

Parameters

matches SearchResult

要验证的搜索结果。

context ICommandContext

命令的上下文。

provider IServiceProvider

要用于命令验证与解析的依赖注入服务。

multiMatchHandling MultiMatchHandling

当匹配到多个命令时的处理模式。

Returns

Task<IResult>

一个表示异步操作的任务。任务的结果包含验证与最佳匹配的结果。

Events

CommandExecuted

当命令执行时引发。

public event Func<CommandInfo?, ICommandContext, IResult, Task> CommandExecuted

Event Type

Func<CommandInfo, ICommandContext, IResult, Task>

Remarks

此事件在命令执行后引发,既包含了执行成功的情况,也包含了执行失败的情况。
事件参数:

  1. CommandInfo? 参数是执行的命令,如果命令在解析或先决条件阶段失败,则可能为 null
  2. ICommandContext 参数是命令的上下文。
  3. IResult 参数是命令的结果。

Log

当产生与命令相关的日志信息时引发。

public event Func<LogMessage, Task> Log

Event Type

Func<LogMessage, Task>

Remarks

事件参数:

  1. LogMessage 参数是日志消息。