关于Koishi插件的开发疑问

官方提供的文档可以说已经足够详细了,但是在看的过程中遇到了一些疑问,让开发者(比如说我)有些难以理解(这块内容可以说是完全没有提到,也不知道是不是我没看到):

  1. 对于中间件这个东西,一开始我的理解是一个过滤链,每个插件都有独立的过滤链,相互之间不受影响,询问了群友发现好像不是
  2. 就是插件开发时如何与已有的官方插件进行相互配合,这块可以说是完全没有提到,初学者很难想到如何配合(需要一些模板知识入门,才能举一反三)

以上问题如有哪位大佬可以讲解,请不吝赐教~非常感谢~ :kissing_closed_eyes:

1 个赞

对「洋葱模型」和「过滤链」的误解是对现代中间件模型最大的误解之一,有此误解是很正常的。

如果你此前使用过 Java EE,那么 Java EE 中提供的 Filter 组件是典型的过滤链模型。你可以通过自动注入 Filter 类来在请求被调度之前实现对请求对象的修改,并决定是否调度请求。但是,你不能进行更多操作。

洋葱模型是现代后端基于过滤链模式进行改进而得到的一种新的中间件模型,Koa 使用此模型。洋葱模型使在单个函数内对整个请求过程进行控制成为可能。遗憾地是 Koa 官网上并没有对洋葱模型的理论介绍,你可以通过搜索引擎自行搜索「洋葱模型」来学习。理解洋葱模型是理解现代中间件模型的基础。

Koishi 中间件模型是在聊天机器人的场景下对洋葱模型进行了诸多改进的中间件模型,在提供了并行注册能力的同时仍然允许开发者进行中间件顺序的调控,同时添加了其他一些方便使用的功能。大多数情况下,你不需要关心 Koishi 的中间件模型;学习完洋葱模型后你应该能够掌握使用中间件进行会话管道管理的能力。

在处理 Http 请求方面,Koishi 通过 http 服务直接内置了 Koa,因此你可以在处理机器人会话和 Http 请求时同时使用洋葱模型。这有助于你对洋葱模型进行更深入的理解。

此外,Koishi 中对部分上下文注册逻辑是通过「过滤器」实现的。过滤器与中间件的区别是过滤器并不面向过程,而是通过简单的表达式筛选上下文。过滤器是一个用户功能,可以在官网的用户文档部分了解。


插件间通过「服务」实现相互配合。Koishi 已经内置了一些服务,你可以快速开始使用。

如果你有其他想要「配合」的插件,可以列举出来。如果这些插件提供了对应的服务,那么你将可以快速使用它们。

此外,Koishi 的大多数基础功能不需要插件开发者进行配合;例如,如果你使用 ctx.command() 注册了一个指令,那么该指令将会立即拥有权限控制、上下文控制、速率控制、本地化等诸多功能,无需你进行任何操作。因此,绝大多数情况下我们均推荐机器人通过注册指令来实现功能。

感谢你的回复,我说的插件配合主要的目的是因为,比如官方插件中已经有设置管理员的配置功能admin,若我是一个三方插件开发者,那我完全可以延用这个插件的功能,使其可以以admin这个配置为基准来控制我自己插件的管理员信息…诸如此类的“配合”,若您有时间可否继续解答我的困惑

1 个赞

admin 插件用于控制机器人管理员,而非某个插件的管理员。Koishi 文档上有关于用户权限的介绍。

如果你希望对你自己的插件进行独立的管理员配置,你可以自己实现此功能,或者在「求插件」版块中请求其他开发者制作一个具有此功能的插件。

非常感谢 :blush:

1 个赞