Skip to content

cn plugin ex

ictye edited this page Dec 5, 2023 · 1 revision

上手开发一个后端插件

注意:初期的api可能随时更改,我会听取所有的合理的意见来保证我的软件功能完善

首先插件加载器会检查你是否定义了Plugin_Main类,这个是插件接入这个系统的入口,使用from depends import plugin_main来导入它,并且使用class Plugin_Main(plugin_main.Plugin_Main):定义入口,用self.plugin_name: str定義插件名稱

接下来呢,你需要初始化你的插件,请使用self.plugin_init来初始化,它的返回值将会作为判断插件类型的依据,具体来讲,返回"message"的话插件系统就会认为你的插件能够作为消息的提供器,那就称作为消息插件好了,如果返回analyzer,这个插件将会作为分析或者过滤上游消息的插件,叫它分析器好了

好的,这里反复提到的消息,其实是一个对象,具体看消息对象

另外,插件被成功本系统注册后,将会运行async def plugin_main(self):,可以看作是你的程序的主函数,你应确保实现了它并且不会发送意外退出,因为一旦它退出运行,这个插件将会被视为运行结束而被注销

消息插件

消息插件需要实现dm_iter方法(def dm_iter(self, params,connect_id):) ,params参数将会传入前端参数字典,connect_id是连接id,返回一个可以异步迭代的对象,所有消息将会从这个对象中迭代。

分析器

对于分析器来言,所有的消息通过async def message_filter(self, message):来转换,通过async def message_anaylazer(self,message):来获取消息进行分析,注意,这个方法只能获取过滤后的消息。其中的message参数都是消息对象

其他的一些功能

cgi

允许你通过这个向前端提供自定义界面或者资源。

首先你需要将self.sprit_cgi_support设置为True,然后设置字典self.sprit_cgi_lists: {},用它以鍵(鍵名)值(aiohttp的應用的函數)對的形式保存,然后访问/cgi/{你定義的插件名稱}/{鍵名},就能运行它了

这个函数唯一一个参数(self除外)——request其实就是一个aiohttp.web.Request对象,对于返回值来说你需要返回一个web.Response或者合理的aiohttp的处理函数的应有的返回其实就可以的

插件js

首先把self.plugin_js_sprit_support: bool设置位True然后self.plugin_js_sprit: str就会自动被当作前端js插件加载

配置的讀取和寫入

使用read_config(self)從磁碟讀取配置并且寫入self.config(字典),用update_config(self)將修改後的self.config寫入計算機磁碟,self.config是暫存配置的一個變量,如果不通過上面的方法讀寫將會一直保持為一個空字典。

Clone this wiki locally