SnakeGame

This commit is contained in:
e2hang
2025-12-30 19:59:45 +08:00
parent fd77d3aca9
commit 3734ffcc35
1319 changed files with 888365 additions and 0 deletions

View File

@@ -0,0 +1,121 @@
# Plugin - 插件
plugin(扩展/插件)是v2.2.0新引入的机制,使用插件可以实现灵活无感知的功能增强。
目前jmcomic已经内置了一些插件源码位于 src/jmcomic/jm_plugin.py。
你可以在这里查看这些插件的配置→ [option_file_syntax](../option_file_syntax.md#3-option插件配置项)
## 1. 插件机制介绍
你可以在option配置文件中配置插件插件会特定的<u>`事件`</u>发生时自动执行。
jmcomic里的内置事件如下
- `after_init`: option对象创建后
- `before_image`: 下载图片前
- `before_album`: 下载本子前
- `before_photo`: 下载章节前
- `after_image`: 下载图片后
- `after_album`: 下载本子后
- `after_photo`: 下载章节后
举例你可以配置一个login插件在option对象创建后`after_init`)时,调用`login`插件,执行登录禁漫的功能。
这样你后续使用option下载本子时都会处于已登录状态。已登录状态可以让你访问所有禁漫本子。
## 2. 示例在after_init时调用login插件
`login`插件功能登录JM获取并保存cookies到option内。后续option创建的Client都会携带cookies即都是登录状态。
配置方式将以下配置写入option文件
```yaml
plugins: # 插件配置项
after_init: # 在after_init事件时自动执行插件
- plugin: login # 插件的key
kwargs: # 下面是给插件的参数 (kwargs),由插件类自定义
username: un # 禁漫帐号
password: pw # 密码
```
有了上述option配置当你调用下面的代码时login插件就会执行。
```python
import jmcomic
option = jmcomic.create_option_by_file('xxx.yml') # 创建option对象
# 程序走到这里login插件已经调用完毕了
# 后续下载本子就都是已登录状态里了
option.download_album(123)
```
## 3. 怎么手动调用插件
你可以使用下面的代码触发某个事件
```python
# 假设你已经创建了option对象
from jmcomic import JmOption
option: JmOption
# 手动调用after_init事件下的插件
option.call_all_plugin('after_init')
# 手动调用一个特定事件的插件(如果你没有配置这个事件的插件,那么无事发生。)
option.call_all_plugin('my_event')
```
## 4. 示例:自定义插件
* 如果你有好的plugin想法也欢迎向我提PR将你的plugin内置到jmcomic模块中
下面演示自定义插件分为3步:
1. 自定义plugin类
2. 让plugin类生效
3. 使用plugin的key
```python
# 1. 自定义plugin类
from jmcomic import JmOptionPlugin, JmModuleConfig
# 自定义一个类继承JmOptionPlugin
class MyPlugin(JmOptionPlugin):
# 指定你的插件的key
plugin_key = 'myplugin'
# 实现invoke方法
# 方法的参数可以自定义,这里假设方法只有一个参数 word
def invoke(self, word) -> None:
print(word)
# 2. 让plugin类生效
JmModuleConfig.register_plugin(MyPlugin)
```
接下来在option中配置如下内容来使用你的插件
```yaml
# 3. 在配置文件中使用plugin
plugins:
after_init: # 事件
- plugin: myplugin # 你自定义的插件key
kwargs:
word: hello jmcomic # 你自定义的插件的参数
```
完成上述步骤后每当你使用下面的代码你的plugin会被调用控制台就会打印出 `hello jmcomic`
```python
from jmcomic import create_option
option = create_option('xxx')
```