nonebot-plugin-jmdownloader 1.0.3__tar.gz → 1.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nonebot_plugin_jmdownloader-1.1.0/PKG-INFO +221 -0
- nonebot_plugin_jmdownloader-1.1.0/README.md +193 -0
- nonebot_plugin_jmdownloader-1.1.0/pyproject.toml +154 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/__init__.py +38 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/bot/__init__.py +18 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/bot/dependencies.py +176 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/bot/handlers/__init__.py +26 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/bot/handlers/ban_id_tag.py +62 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/bot/handlers/blacklist.py +113 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/bot/handlers/download.py +210 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/bot/handlers/group_control.py +172 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/bot/handlers/query.py +76 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/bot/handlers/scheduled.py +38 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/bot/handlers/search.py +224 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/bot/nonebot_utils.py +22 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/config.py +44 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/core/__init__.py +11 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/core/data_models.py +179 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/core/enums.py +10 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/core/search_session.py +74 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/infra/__init__.py +15 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/infra/data_manager.py +104 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/infra/image_utils.py +38 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/infra/jm_service.py +368 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/infra/pdf_utils.py +82 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/infra/search_session.py +43 -0
- nonebot_plugin_jmdownloader-1.1.0/src/nonebot_plugin_jmdownloader/migration.py +232 -0
- nonebot_plugin_jmdownloader-1.0.3/LICENSE +0 -21
- nonebot_plugin_jmdownloader-1.0.3/PKG-INFO +0 -219
- nonebot_plugin_jmdownloader-1.0.3/README.md +0 -197
- nonebot_plugin_jmdownloader-1.0.3/nonebot_plugin_jmdownloader/__init__.py +0 -615
- nonebot_plugin_jmdownloader-1.0.3/nonebot_plugin_jmdownloader/config.py +0 -72
- nonebot_plugin_jmdownloader-1.0.3/nonebot_plugin_jmdownloader/data_source.py +0 -247
- nonebot_plugin_jmdownloader-1.0.3/nonebot_plugin_jmdownloader/utils.py +0 -217
- nonebot_plugin_jmdownloader-1.0.3/nonebot_plugin_jmdownloader.egg-info/PKG-INFO +0 -219
- nonebot_plugin_jmdownloader-1.0.3/nonebot_plugin_jmdownloader.egg-info/SOURCES.txt +0 -12
- nonebot_plugin_jmdownloader-1.0.3/nonebot_plugin_jmdownloader.egg-info/dependency_links.txt +0 -1
- nonebot_plugin_jmdownloader-1.0.3/nonebot_plugin_jmdownloader.egg-info/requires.txt +0 -11
- nonebot_plugin_jmdownloader-1.0.3/nonebot_plugin_jmdownloader.egg-info/top_level.txt +0 -1
- nonebot_plugin_jmdownloader-1.0.3/pyproject.toml +0 -115
- nonebot_plugin_jmdownloader-1.0.3/setup.cfg +0 -4
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: nonebot-plugin-jmdownloader
|
|
3
|
+
Version: 1.1.0
|
|
4
|
+
Summary: 基于 Nonebot2 的 JMComic 插件
|
|
5
|
+
Author: Misty02600
|
|
6
|
+
Author-email: Misty02600 <xiao02600@gmail.com>
|
|
7
|
+
Requires-Dist: httpx>=0.27.0,<1.0.0
|
|
8
|
+
Requires-Dist: nonebot2>=2.4.4
|
|
9
|
+
Requires-Dist: nonebot-plugin-uninfo>=0.7.0,<1.0.0
|
|
10
|
+
Requires-Dist: nonebot-plugin-alconna>=0.56.2,<1.0.0
|
|
11
|
+
Requires-Dist: nonebot-plugin-waiter>=0.8.1,<1.0.0
|
|
12
|
+
Requires-Dist: nonebot-plugin-localstore>=0.7.4,<1.0.0
|
|
13
|
+
Requires-Dist: nonebot-plugin-apscheduler>=0.5.0,<1.0.0
|
|
14
|
+
Requires-Dist: nonebot-adapter-onebot>=2.4.6
|
|
15
|
+
Requires-Dist: jmcomic>=2.6.0
|
|
16
|
+
Requires-Dist: pillow>=11.1.0
|
|
17
|
+
Requires-Dist: img2pdf>=0.6.0
|
|
18
|
+
Requires-Dist: msgspec>=0.19.0
|
|
19
|
+
Requires-Dist: boltons>=24.0.0
|
|
20
|
+
Requires-Dist: cachetools>=5.5.0
|
|
21
|
+
Requires-Dist: pyzipper>=0.3.6
|
|
22
|
+
Requires-Dist: nonebot-plugin-jmdownloader>=1.0.4
|
|
23
|
+
Requires-Python: >=3.11, <4.0
|
|
24
|
+
Project-URL: Homepage, https://github.com/Misty02600/nonebot-plugin-jmdownloader
|
|
25
|
+
Project-URL: Issues, https://github.com/Misty02600/nonebot-plugin-jmdownloader/issues
|
|
26
|
+
Project-URL: Repository, https://github.com/Misty02600/nonebot-plugin-jmdownloader.git
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
|
|
29
|
+
<div align="center">
|
|
30
|
+
<a href="https://v2.nonebot.dev/store">
|
|
31
|
+
<img src="https://github.com/Misty02600/nonebot-plugin-template/releases/download/assets/NoneBotPlugin.png" width="310" alt="logo"></a>
|
|
32
|
+
|
|
33
|
+
## ✨ *基于 Nonebot2 的 JMComic 插件* ✨
|
|
34
|
+
|
|
35
|
+
[](./LICENSE)
|
|
36
|
+
[](https://pypi.python.org/pypi/nonebot-plugin-jmdownloader)
|
|
37
|
+
[](https://www.python.org)
|
|
38
|
+
[](#supported-adapters)
|
|
39
|
+
<br/>
|
|
40
|
+
|
|
41
|
+
[](https://github.com/astral-sh/uv)
|
|
42
|
+
[](https://github.com/astral-sh/ruff)
|
|
43
|
+
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
## 📖 介绍
|
|
47
|
+
|
|
48
|
+
JMComic搜索、下载插件,支持全局屏蔽jm号和tag,支持上传至群聊指定文件夹,仅支持OnebotV11协议。
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## 💿 安装
|
|
52
|
+
|
|
53
|
+
<details open>
|
|
54
|
+
<summary>使用 nb-cli 安装</summary>
|
|
55
|
+
在 NoneBot2 项目的根目录下打开命令行,输入以下指令即可安装
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
nb plugin install nonebot-plugin-jmdownloader --upgrade
|
|
59
|
+
```
|
|
60
|
+
使用 **pypi** 源安装
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
nb plugin install nonebot-plugin-jmdownloader --upgrade -i "https://pypi.org/simple"
|
|
64
|
+
```
|
|
65
|
+
使用**清华源**安装
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
nb plugin install nonebot-plugin-jmdownloader --upgrade -i "https://pypi.tuna.tsinghua.edu.cn/simple"
|
|
69
|
+
```
|
|
70
|
+
</details>
|
|
71
|
+
|
|
72
|
+
<details>
|
|
73
|
+
|
|
74
|
+
<summary>使用包管理器安装</summary>
|
|
75
|
+
在 NoneBot2 项目的插件目录下,打开命令行,根据你使用的包管理器,输入相应的安装命令
|
|
76
|
+
|
|
77
|
+
<details open>
|
|
78
|
+
<summary>uv</summary>
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
uv add nonebot-plugin-jmdownloader
|
|
82
|
+
```
|
|
83
|
+
安装仓库 master 分支
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
uv add git+https://github.com/Misty02600/nonebot-plugin-jmdownloader@master
|
|
87
|
+
```
|
|
88
|
+
</details>
|
|
89
|
+
|
|
90
|
+
<details>
|
|
91
|
+
<summary>pdm</summary>
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
pdm add nonebot-plugin-jmdownloader
|
|
95
|
+
```
|
|
96
|
+
安装仓库 master 分支
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
pdm add git+https://github.com/Misty02600/nonebot-plugin-jmdownloader@master
|
|
100
|
+
```
|
|
101
|
+
</details>
|
|
102
|
+
|
|
103
|
+
<details>
|
|
104
|
+
<summary>poetry</summary>
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
poetry add nonebot-plugin-jmdownloader
|
|
108
|
+
```
|
|
109
|
+
安装仓库 master 分支
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
poetry add git+https://github.com/Misty02600/nonebot-plugin-jmdownloader@master
|
|
113
|
+
```
|
|
114
|
+
</details>
|
|
115
|
+
|
|
116
|
+
打开 NoneBot2 项目根目录下的 `pyproject.toml` 文件,在 `[tool.nonebot]` 部分追加写入
|
|
117
|
+
|
|
118
|
+
```toml
|
|
119
|
+
plugins = ["nonebot_plugin_jmdownloader"]
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
</details>
|
|
123
|
+
|
|
124
|
+
## ⚙️ 配置
|
|
125
|
+
|
|
126
|
+
插件使用[nonebot_plugin_localstore](https://github.com/nonebot/plugin-localstore)储存数据和下载缓存。
|
|
127
|
+
|
|
128
|
+
在 NoneBot2 项目的`.env`文件中添加下表中的必填配置
|
|
129
|
+
|
|
130
|
+
| 配置项 | 必填 | 默认值 | 说明 |
|
|
131
|
+
| :----------------------: | :---: | :----: | :--------------------------------------: |
|
|
132
|
+
| jmcomic_username | 否 | 无 | JM登录用户名 |
|
|
133
|
+
| jmcomic_password | 否 | 无 | JM登录密码 |
|
|
134
|
+
| jmcomic_proxies | 否 | system | 网络代理地址 |
|
|
135
|
+
| jmcomic_log | 否 | False | 是否开启JMComic-Crawler-Python的日志输出 |
|
|
136
|
+
| jmcomic_thread_count | 否 | 10 | 下载线程数量 |
|
|
137
|
+
| jmcomic_allow_groups | 否 | False | 是否默认启用所有群 |
|
|
138
|
+
| jmcomic_user_limits | 否 | 5 | 每位用户的每周下载限制次数 |
|
|
139
|
+
| jmcomic_output_format | 否 | pdf | 输出格式:pdf 或 zip |
|
|
140
|
+
| jmcomic_zip_password | 否 | 无 | ZIP 压缩包密码(仅 zip 格式有效) |
|
|
141
|
+
| jmcomic_modify_real_md5 | 否 | False | 修改PDF的MD5以避免发送失败(仅PDF有效) |
|
|
142
|
+
| jmcomic_results_per_page | 否 | 20 | 每页显示的搜索结果数量 |
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
**示例:**
|
|
146
|
+
```yaml
|
|
147
|
+
# 是否启用 JMComic 日志 (True 表示启用, False 表示禁用)
|
|
148
|
+
JMCOMIC_LOG=True
|
|
149
|
+
# JMComic 代理配置,更多格式参考https://jmcomic.readthedocs.io/zh-cn/latest/option_file_syntax
|
|
150
|
+
JMCOMIC_PROXIES=127.0.0.1:10809
|
|
151
|
+
# 下载线程数量 (线程越多对性能要求越高,范围 1~50)
|
|
152
|
+
JMCOMIC_THREAD_COUNT=10
|
|
153
|
+
# JMComic 登录用户名,如果不填则不登录,不登录时部分本子可能会受限
|
|
154
|
+
JMCOMIC_USERNAME=******
|
|
155
|
+
# JMComic 登录密码
|
|
156
|
+
JMCOMIC_PASSWORD=******
|
|
157
|
+
# JMComic 是否默认启用所有群,建议关闭
|
|
158
|
+
JMCOMIC_ALLOW_GROUPS=False
|
|
159
|
+
# JMComic 每位用户的每周下载限制次数
|
|
160
|
+
JMCOMIC_USER_LIMITS=5
|
|
161
|
+
# JMComic 输出格式:pdf 或 zip
|
|
162
|
+
JMCOMIC_OUTPUT_FORMAT=pdf
|
|
163
|
+
# JMComic ZIP 压缩包密码(仅 zip 格式有效,留空则不加密)
|
|
164
|
+
# JMCOMIC_ZIP_PASSWORD=your_password
|
|
165
|
+
# JMComic 是否修改PDF文件的MD5值(增强防和谐但可能增加流量消耗,仅PDF格式有效)
|
|
166
|
+
JMCOMIC_MODIFY_REAL_MD5=False
|
|
167
|
+
# 每页显示的搜索结果数量,越多每次发送时间越长且越容易被吞,建议40以内
|
|
168
|
+
JMCOMIC_RESULTS_PER_PAGE=20
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
> [!IMPORTANT]
|
|
172
|
+
> `JMCOMIC_BLOCKED_MESSAGE` 配置项已在新版本中移除,现在会读取nickname发送屏蔽本子的代替消息
|
|
173
|
+
|
|
174
|
+
## 🎉 使用
|
|
175
|
+
### 指令表
|
|
176
|
+
| 指令 | 权限 | 需要@ | 范围 | 说明 |
|
|
177
|
+
| :---------------------: | :------: | :---: | :-------: | :--------------------------------------------------: |
|
|
178
|
+
| jm下载 [id] | 群员 | 否 | 群聊/私聊 | 下载指定的 JMComic 本子到群文件或私聊 |
|
|
179
|
+
| jm查询 [id] | 群员 | 否 | 群聊/私聊 | 查询指定的 JMComic 本子信息 |
|
|
180
|
+
| jm搜索 [关键词] | 群员 | 否 | 群聊/私聊 | 搜索 JMComic 网站的漫画并返回列表 |
|
|
181
|
+
| jm下一页 | 群员 | 否 | 群聊/私聊 | 显示搜索结果的下一页 |
|
|
182
|
+
| jm设置文件夹 [文件夹名] | 管理员 | 否 | 群聊 | 设置群聊内本子的上传文件夹 |
|
|
183
|
+
| jm拉黑 [@用户] | 管理员 | 否 | 群聊 | 将用户加入当前群的黑名单 |
|
|
184
|
+
| jm解除拉黑 [@用户] | 管理员 | 否 | 群聊 | 将用户移出当前群的黑名单 |
|
|
185
|
+
| jm黑名单 | 管理员 | 否 | 群聊 | 列出当前群的黑名单列表 |
|
|
186
|
+
| jm启用群 [群号] | 超级用户 | 否 | 群聊/私聊 | 启用指定群的插件功能,可用空格隔开多个群号,以下同理 |
|
|
187
|
+
| jm禁用群 [群号] | 超级用户 | 否 | 群聊/私聊 | 禁用指定群的插件功能 |
|
|
188
|
+
| 开启jm | 超级用户 | 否 | 群聊 | 启用本群的插件功能 |
|
|
189
|
+
| 关闭jm | 管理员 | 否 | 群聊 | 禁用本群的插件功能,管理员和群主**只能关不能开** |
|
|
190
|
+
| jm禁用id [id] | 超级用户 | 否 | 群聊/私聊 | 禁止指定jm号的本子下载,可用空格隔开多个id,以下同理 |
|
|
191
|
+
| jm禁用tag [tag] | 超级用户 | 否 | 群聊/私聊 | 禁止带有指定tag的本子下载 |
|
|
192
|
+
|
|
193
|
+
- 设置文件夹需要协议端API支持,bot会先读取群内是否有该文件夹,如果没有会尝试创建。
|
|
194
|
+
- Bot会在每天凌晨3点清理缓存文件夹。
|
|
195
|
+
- 默认已经屏蔽了一些常见的令人不适的本子,可以在数据储存文件里自行修改。
|
|
196
|
+
- 被屏蔽的本子会在搜索结果中隐藏,下载被屏蔽的本子会被bot尝试禁言并加入本群黑名单。
|
|
197
|
+
- **命令需要添加 COMMAND_START 前缀**
|
|
198
|
+
|
|
199
|
+
### 🎨 效果图
|
|
200
|
+

|
|
201
|
+

|
|
202
|
+

|
|
203
|
+
|
|
204
|
+
## ⚠️ 使用警告
|
|
205
|
+
|
|
206
|
+
**仅作为交流学习使用!请严格遵守法律法规与公序良俗!**
|
|
207
|
+
|
|
208
|
+
❌ 禁止将本插件用于任何非法用途
|
|
209
|
+
|
|
210
|
+
❌ 禁止分享/传播未成年人相关或违法内容
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
本插件仅限**个人合规使用**,用户行为责任自负,开发者不承担任何连带责任。
|
|
214
|
+
|
|
215
|
+
## 📃 许可证
|
|
216
|
+
|
|
217
|
+
本项目采用 [MIT](./LICENSE) 许可证。
|
|
218
|
+
|
|
219
|
+
## 🙏 致谢
|
|
220
|
+
|
|
221
|
+
[JMComic-Crawler-Python](https://github.com/hect0x7/JMComic-Crawler-Python)提供的API
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<a href="https://v2.nonebot.dev/store">
|
|
3
|
+
<img src="https://github.com/Misty02600/nonebot-plugin-template/releases/download/assets/NoneBotPlugin.png" width="310" alt="logo"></a>
|
|
4
|
+
|
|
5
|
+
## ✨ *基于 Nonebot2 的 JMComic 插件* ✨
|
|
6
|
+
|
|
7
|
+
[](./LICENSE)
|
|
8
|
+
[](https://pypi.python.org/pypi/nonebot-plugin-jmdownloader)
|
|
9
|
+
[](https://www.python.org)
|
|
10
|
+
[](#supported-adapters)
|
|
11
|
+
<br/>
|
|
12
|
+
|
|
13
|
+
[](https://github.com/astral-sh/uv)
|
|
14
|
+
[](https://github.com/astral-sh/ruff)
|
|
15
|
+
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
## 📖 介绍
|
|
19
|
+
|
|
20
|
+
JMComic搜索、下载插件,支持全局屏蔽jm号和tag,支持上传至群聊指定文件夹,仅支持OnebotV11协议。
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## 💿 安装
|
|
24
|
+
|
|
25
|
+
<details open>
|
|
26
|
+
<summary>使用 nb-cli 安装</summary>
|
|
27
|
+
在 NoneBot2 项目的根目录下打开命令行,输入以下指令即可安装
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
nb plugin install nonebot-plugin-jmdownloader --upgrade
|
|
31
|
+
```
|
|
32
|
+
使用 **pypi** 源安装
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
nb plugin install nonebot-plugin-jmdownloader --upgrade -i "https://pypi.org/simple"
|
|
36
|
+
```
|
|
37
|
+
使用**清华源**安装
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
nb plugin install nonebot-plugin-jmdownloader --upgrade -i "https://pypi.tuna.tsinghua.edu.cn/simple"
|
|
41
|
+
```
|
|
42
|
+
</details>
|
|
43
|
+
|
|
44
|
+
<details>
|
|
45
|
+
|
|
46
|
+
<summary>使用包管理器安装</summary>
|
|
47
|
+
在 NoneBot2 项目的插件目录下,打开命令行,根据你使用的包管理器,输入相应的安装命令
|
|
48
|
+
|
|
49
|
+
<details open>
|
|
50
|
+
<summary>uv</summary>
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
uv add nonebot-plugin-jmdownloader
|
|
54
|
+
```
|
|
55
|
+
安装仓库 master 分支
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
uv add git+https://github.com/Misty02600/nonebot-plugin-jmdownloader@master
|
|
59
|
+
```
|
|
60
|
+
</details>
|
|
61
|
+
|
|
62
|
+
<details>
|
|
63
|
+
<summary>pdm</summary>
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pdm add nonebot-plugin-jmdownloader
|
|
67
|
+
```
|
|
68
|
+
安装仓库 master 分支
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pdm add git+https://github.com/Misty02600/nonebot-plugin-jmdownloader@master
|
|
72
|
+
```
|
|
73
|
+
</details>
|
|
74
|
+
|
|
75
|
+
<details>
|
|
76
|
+
<summary>poetry</summary>
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
poetry add nonebot-plugin-jmdownloader
|
|
80
|
+
```
|
|
81
|
+
安装仓库 master 分支
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
poetry add git+https://github.com/Misty02600/nonebot-plugin-jmdownloader@master
|
|
85
|
+
```
|
|
86
|
+
</details>
|
|
87
|
+
|
|
88
|
+
打开 NoneBot2 项目根目录下的 `pyproject.toml` 文件,在 `[tool.nonebot]` 部分追加写入
|
|
89
|
+
|
|
90
|
+
```toml
|
|
91
|
+
plugins = ["nonebot_plugin_jmdownloader"]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
</details>
|
|
95
|
+
|
|
96
|
+
## ⚙️ 配置
|
|
97
|
+
|
|
98
|
+
插件使用[nonebot_plugin_localstore](https://github.com/nonebot/plugin-localstore)储存数据和下载缓存。
|
|
99
|
+
|
|
100
|
+
在 NoneBot2 项目的`.env`文件中添加下表中的必填配置
|
|
101
|
+
|
|
102
|
+
| 配置项 | 必填 | 默认值 | 说明 |
|
|
103
|
+
| :----------------------: | :---: | :----: | :--------------------------------------: |
|
|
104
|
+
| jmcomic_username | 否 | 无 | JM登录用户名 |
|
|
105
|
+
| jmcomic_password | 否 | 无 | JM登录密码 |
|
|
106
|
+
| jmcomic_proxies | 否 | system | 网络代理地址 |
|
|
107
|
+
| jmcomic_log | 否 | False | 是否开启JMComic-Crawler-Python的日志输出 |
|
|
108
|
+
| jmcomic_thread_count | 否 | 10 | 下载线程数量 |
|
|
109
|
+
| jmcomic_allow_groups | 否 | False | 是否默认启用所有群 |
|
|
110
|
+
| jmcomic_user_limits | 否 | 5 | 每位用户的每周下载限制次数 |
|
|
111
|
+
| jmcomic_output_format | 否 | pdf | 输出格式:pdf 或 zip |
|
|
112
|
+
| jmcomic_zip_password | 否 | 无 | ZIP 压缩包密码(仅 zip 格式有效) |
|
|
113
|
+
| jmcomic_modify_real_md5 | 否 | False | 修改PDF的MD5以避免发送失败(仅PDF有效) |
|
|
114
|
+
| jmcomic_results_per_page | 否 | 20 | 每页显示的搜索结果数量 |
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
**示例:**
|
|
118
|
+
```yaml
|
|
119
|
+
# 是否启用 JMComic 日志 (True 表示启用, False 表示禁用)
|
|
120
|
+
JMCOMIC_LOG=True
|
|
121
|
+
# JMComic 代理配置,更多格式参考https://jmcomic.readthedocs.io/zh-cn/latest/option_file_syntax
|
|
122
|
+
JMCOMIC_PROXIES=127.0.0.1:10809
|
|
123
|
+
# 下载线程数量 (线程越多对性能要求越高,范围 1~50)
|
|
124
|
+
JMCOMIC_THREAD_COUNT=10
|
|
125
|
+
# JMComic 登录用户名,如果不填则不登录,不登录时部分本子可能会受限
|
|
126
|
+
JMCOMIC_USERNAME=******
|
|
127
|
+
# JMComic 登录密码
|
|
128
|
+
JMCOMIC_PASSWORD=******
|
|
129
|
+
# JMComic 是否默认启用所有群,建议关闭
|
|
130
|
+
JMCOMIC_ALLOW_GROUPS=False
|
|
131
|
+
# JMComic 每位用户的每周下载限制次数
|
|
132
|
+
JMCOMIC_USER_LIMITS=5
|
|
133
|
+
# JMComic 输出格式:pdf 或 zip
|
|
134
|
+
JMCOMIC_OUTPUT_FORMAT=pdf
|
|
135
|
+
# JMComic ZIP 压缩包密码(仅 zip 格式有效,留空则不加密)
|
|
136
|
+
# JMCOMIC_ZIP_PASSWORD=your_password
|
|
137
|
+
# JMComic 是否修改PDF文件的MD5值(增强防和谐但可能增加流量消耗,仅PDF格式有效)
|
|
138
|
+
JMCOMIC_MODIFY_REAL_MD5=False
|
|
139
|
+
# 每页显示的搜索结果数量,越多每次发送时间越长且越容易被吞,建议40以内
|
|
140
|
+
JMCOMIC_RESULTS_PER_PAGE=20
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
> [!IMPORTANT]
|
|
144
|
+
> `JMCOMIC_BLOCKED_MESSAGE` 配置项已在新版本中移除,现在会读取nickname发送屏蔽本子的代替消息
|
|
145
|
+
|
|
146
|
+
## 🎉 使用
|
|
147
|
+
### 指令表
|
|
148
|
+
| 指令 | 权限 | 需要@ | 范围 | 说明 |
|
|
149
|
+
| :---------------------: | :------: | :---: | :-------: | :--------------------------------------------------: |
|
|
150
|
+
| jm下载 [id] | 群员 | 否 | 群聊/私聊 | 下载指定的 JMComic 本子到群文件或私聊 |
|
|
151
|
+
| jm查询 [id] | 群员 | 否 | 群聊/私聊 | 查询指定的 JMComic 本子信息 |
|
|
152
|
+
| jm搜索 [关键词] | 群员 | 否 | 群聊/私聊 | 搜索 JMComic 网站的漫画并返回列表 |
|
|
153
|
+
| jm下一页 | 群员 | 否 | 群聊/私聊 | 显示搜索结果的下一页 |
|
|
154
|
+
| jm设置文件夹 [文件夹名] | 管理员 | 否 | 群聊 | 设置群聊内本子的上传文件夹 |
|
|
155
|
+
| jm拉黑 [@用户] | 管理员 | 否 | 群聊 | 将用户加入当前群的黑名单 |
|
|
156
|
+
| jm解除拉黑 [@用户] | 管理员 | 否 | 群聊 | 将用户移出当前群的黑名单 |
|
|
157
|
+
| jm黑名单 | 管理员 | 否 | 群聊 | 列出当前群的黑名单列表 |
|
|
158
|
+
| jm启用群 [群号] | 超级用户 | 否 | 群聊/私聊 | 启用指定群的插件功能,可用空格隔开多个群号,以下同理 |
|
|
159
|
+
| jm禁用群 [群号] | 超级用户 | 否 | 群聊/私聊 | 禁用指定群的插件功能 |
|
|
160
|
+
| 开启jm | 超级用户 | 否 | 群聊 | 启用本群的插件功能 |
|
|
161
|
+
| 关闭jm | 管理员 | 否 | 群聊 | 禁用本群的插件功能,管理员和群主**只能关不能开** |
|
|
162
|
+
| jm禁用id [id] | 超级用户 | 否 | 群聊/私聊 | 禁止指定jm号的本子下载,可用空格隔开多个id,以下同理 |
|
|
163
|
+
| jm禁用tag [tag] | 超级用户 | 否 | 群聊/私聊 | 禁止带有指定tag的本子下载 |
|
|
164
|
+
|
|
165
|
+
- 设置文件夹需要协议端API支持,bot会先读取群内是否有该文件夹,如果没有会尝试创建。
|
|
166
|
+
- Bot会在每天凌晨3点清理缓存文件夹。
|
|
167
|
+
- 默认已经屏蔽了一些常见的令人不适的本子,可以在数据储存文件里自行修改。
|
|
168
|
+
- 被屏蔽的本子会在搜索结果中隐藏,下载被屏蔽的本子会被bot尝试禁言并加入本群黑名单。
|
|
169
|
+
- **命令需要添加 COMMAND_START 前缀**
|
|
170
|
+
|
|
171
|
+
### 🎨 效果图
|
|
172
|
+

|
|
173
|
+

|
|
174
|
+

|
|
175
|
+
|
|
176
|
+
## ⚠️ 使用警告
|
|
177
|
+
|
|
178
|
+
**仅作为交流学习使用!请严格遵守法律法规与公序良俗!**
|
|
179
|
+
|
|
180
|
+
❌ 禁止将本插件用于任何非法用途
|
|
181
|
+
|
|
182
|
+
❌ 禁止分享/传播未成年人相关或违法内容
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
本插件仅限**个人合规使用**,用户行为责任自负,开发者不承担任何连带责任。
|
|
186
|
+
|
|
187
|
+
## 📃 许可证
|
|
188
|
+
|
|
189
|
+
本项目采用 [MIT](./LICENSE) 许可证。
|
|
190
|
+
|
|
191
|
+
## 🙏 致谢
|
|
192
|
+
|
|
193
|
+
[JMComic-Crawler-Python](https://github.com/hect0x7/JMComic-Crawler-Python)提供的API
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "nonebot-plugin-jmdownloader"
|
|
3
|
+
version = "1.1.0"
|
|
4
|
+
description = "基于 Nonebot2 的 JMComic 插件"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = [{ name = "Misty02600", email = "xiao02600@gmail.com" }]
|
|
7
|
+
requires-python = ">=3.11, <4.0"
|
|
8
|
+
dependencies = [
|
|
9
|
+
"httpx>=0.27.0,<1.0.0",
|
|
10
|
+
"nonebot2>=2.4.4",
|
|
11
|
+
"nonebot-plugin-uninfo>=0.7.0,<1.0.0",
|
|
12
|
+
"nonebot-plugin-alconna>=0.56.2,<1.0.0",
|
|
13
|
+
"nonebot-plugin-waiter>=0.8.1,<1.0.0",
|
|
14
|
+
"nonebot-plugin-localstore>=0.7.4,<1.0.0",
|
|
15
|
+
"nonebot-plugin-apscheduler>=0.5.0,<1.0.0",
|
|
16
|
+
"nonebot-adapter-onebot>=2.4.6",
|
|
17
|
+
"jmcomic>=2.6.0",
|
|
18
|
+
"pillow>=11.1.0",
|
|
19
|
+
"img2pdf>=0.6.0",
|
|
20
|
+
"msgspec>=0.19.0",
|
|
21
|
+
"boltons>=24.0.0",
|
|
22
|
+
"cachetools>=5.5.0",
|
|
23
|
+
"pyzipper>=0.3.6",
|
|
24
|
+
"nonebot-plugin-jmdownloader>=1.0.4",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
[project.urls]
|
|
28
|
+
Homepage = "https://github.com/Misty02600/nonebot-plugin-jmdownloader"
|
|
29
|
+
Issues = "https://github.com/Misty02600/nonebot-plugin-jmdownloader/issues"
|
|
30
|
+
Repository = "https://github.com/Misty02600/nonebot-plugin-jmdownloader.git"
|
|
31
|
+
|
|
32
|
+
[dependency-groups]
|
|
33
|
+
dev = [
|
|
34
|
+
"basedpyright>=1.16.0",
|
|
35
|
+
"commitizen>=4.1.0",
|
|
36
|
+
"git-cliff>=2.11.0,<3.0.0",
|
|
37
|
+
"prek>=0.2.0",
|
|
38
|
+
"ruff>=0.14.13,<1.0.0",
|
|
39
|
+
{ include-group = "test" },
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
test = [
|
|
43
|
+
"nonebot-adapter-onebot>=2.4.6,<3.0.0",
|
|
44
|
+
"nonebot2[fastapi]>=2.4.3,<3.0.0",
|
|
45
|
+
"nonebug>=0.4.3,<1.0.0",
|
|
46
|
+
"pytest-asyncio>=1.3.0,<1.4.0",
|
|
47
|
+
"pytest-cov>=7.0.0",
|
|
48
|
+
"pytest-xdist>=3.8.0,<4.0.0",
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
[tool.nonebot]
|
|
52
|
+
plugin_dirs = []
|
|
53
|
+
builtin_plugins = []
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
[tool.nonebot.plugins]
|
|
57
|
+
"@local" = []
|
|
58
|
+
nonebot-plugin-jmdownloader = ["nonebot_plugin_jmdownloader"]
|
|
59
|
+
|
|
60
|
+
[tool.nonebot.adapters]
|
|
61
|
+
"@local" = []
|
|
62
|
+
nonebot-adapter-onebot = [
|
|
63
|
+
{ name = "OneBot V11", module_name = "nonebot.adapters.onebot.v11" },
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
[build-system]
|
|
67
|
+
requires = ["uv_build>=0.9.2,<0.10.0"]
|
|
68
|
+
build-backend = "uv_build"
|
|
69
|
+
|
|
70
|
+
[tool.commitizen]
|
|
71
|
+
name = "cz_conventional_commits"
|
|
72
|
+
version = "1.1.0"
|
|
73
|
+
tag_format = "v$version"
|
|
74
|
+
version_files = ["pyproject.toml:^version"]
|
|
75
|
+
major_version_zero = true # 允许 0.x.x 版本号
|
|
76
|
+
|
|
77
|
+
[tool.coverage.report]
|
|
78
|
+
exclude_lines = [
|
|
79
|
+
"raise NotImplementedError",
|
|
80
|
+
"if TYPE_CHECKING:",
|
|
81
|
+
"@overload",
|
|
82
|
+
"except ImportError:",
|
|
83
|
+
]
|
|
84
|
+
|
|
85
|
+
[tool.pyright]
|
|
86
|
+
include = ["src", "tests"] # 要检查的目录
|
|
87
|
+
pythonVersion = "3.11" # 目标 Python 版本(影响可用的类型特性)
|
|
88
|
+
pythonPlatform = "All" # 目标平台:All | Linux | Windows | Darwin
|
|
89
|
+
# typeCheckingMode 类型检查严格程度,可选值:
|
|
90
|
+
# - "off": 关闭类型检查
|
|
91
|
+
# - "basic": 基础检查(仅报告明确的类型错误)
|
|
92
|
+
# - "standard": 标准检查(推荐,平衡严格性与实用性)
|
|
93
|
+
# - "strict": 严格检查(要求完整的类型注解,适合新项目)
|
|
94
|
+
# - "all": 最严格(启用所有检查,可能产生大量警告)
|
|
95
|
+
typeCheckingMode = "standard"
|
|
96
|
+
|
|
97
|
+
# 测试目录的特殊配置(放宽部分规则以适应测试场景)
|
|
98
|
+
[[tool.pyright.executionEnvironments]]
|
|
99
|
+
root = "tests"
|
|
100
|
+
reportPrivateUsage = "none" # 允许测试访问私有属性 (_variable)
|
|
101
|
+
reportUnknownMemberType = "none" # 允许 Mock 对象等动态类型
|
|
102
|
+
|
|
103
|
+
[tool.pytest]
|
|
104
|
+
addopts = [
|
|
105
|
+
"--import-mode=importlib", # 使用 importlib 导入模式(推荐,避免 sys.path 污染)
|
|
106
|
+
"--strict-markers", # 严格标记模式(未注册的 marker 会报错)
|
|
107
|
+
"--tb=short", # 简短的错误回溯(减少输出噪音)
|
|
108
|
+
"-ra", # 显示所有非通过测试的摘要(a=all except passed)
|
|
109
|
+
]
|
|
110
|
+
pythonpath = ["src", "tests"] # 添加到 Python 路径,确保模块可导入
|
|
111
|
+
asyncio_mode = "auto" # 自动检测异步测试函数,无需手动标记 @pytest.mark.asyncio
|
|
112
|
+
asyncio_default_fixture_loop_scope = "function" # 每个测试函数使用独立的事件循环
|
|
113
|
+
|
|
114
|
+
[tool.ruff]
|
|
115
|
+
line-length = 88 # 每行最大字符数(与 Black 保持一致)
|
|
116
|
+
src = ["src", "tests"] # 源代码目录(用于判断导入是本地模块还是第三方模块)
|
|
117
|
+
|
|
118
|
+
[tool.ruff.format]
|
|
119
|
+
line-ending = "lf" # 行尾符:lf(Unix)| crlf(Windows)| auto | native
|
|
120
|
+
|
|
121
|
+
[tool.ruff.lint]
|
|
122
|
+
# 启用的规则集,每个字母代码对应一组规则
|
|
123
|
+
select = [
|
|
124
|
+
"F", # Pyflakes:基础语法和逻辑错误检查
|
|
125
|
+
"W", # pycodestyle warnings:PEP 8 风格警告
|
|
126
|
+
"E", # pycodestyle errors:PEP 8 风格错误
|
|
127
|
+
"I", # isort:导入语句排序
|
|
128
|
+
"B", # flake8-bugbear:发现潜在 bug 和设计问题
|
|
129
|
+
"UP", # pyupgrade:升级到新版 Python 语法
|
|
130
|
+
"ASYNC", # flake8-async:异步代码最佳实践
|
|
131
|
+
"C4", # flake8-comprehensions:推导式优化建议
|
|
132
|
+
"T10", # flake8-debugger:检测遗留的调试器语句(如 pdb)
|
|
133
|
+
"T20", # flake8-print:检测 print 语句(生产代码应使用 logging)
|
|
134
|
+
"PYI", # flake8-pyi:类型存根文件(.pyi)规范检查
|
|
135
|
+
"PT", # flake8-pytest-style:pytest 代码风格检查
|
|
136
|
+
"Q", # flake8-quotes:引号使用规范
|
|
137
|
+
"TID", # flake8-tidy-imports:导入语句整理
|
|
138
|
+
"RUF", # Ruff-specific:Ruff 特有的规则
|
|
139
|
+
]
|
|
140
|
+
# 忽略的规则(根据项目需求放宽)
|
|
141
|
+
ignore = [
|
|
142
|
+
"E501", # 行长度由 formatter 控制,lint 不重复检查
|
|
143
|
+
"E402", # 允许模块导入不在文件顶部(某些情况下需要先执行代码)
|
|
144
|
+
"UP037", # 允许使用引号包裹的类型注解(前向引用)
|
|
145
|
+
"RUF001", # 允许字符串中的中文等 Unicode 字符
|
|
146
|
+
"RUF002", # 允许文档字符串中的中文等 Unicode 字符
|
|
147
|
+
"RUF003", # 允许注释中的中文等 Unicode 字符
|
|
148
|
+
"W191", # 允许使用制表符缩进
|
|
149
|
+
"TID252", # 允许使用相对导入
|
|
150
|
+
"B008", # 允许在函数参数默认值中使用函数调用
|
|
151
|
+
]
|
|
152
|
+
|
|
153
|
+
[tool.ruff.lint.isort]
|
|
154
|
+
extra-standard-library = ["typing_extensions"] # 将 typing_extensions 视为标准库
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""NoneBot JMComic 插件
|
|
2
|
+
|
|
3
|
+
JMComic 搜索、下载插件,支持全局屏蔽 jm 号和 tag,仅支持 OnebotV11 协议。
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from nonebot.plugin import PluginMetadata
|
|
7
|
+
|
|
8
|
+
from .config import PluginConfig
|
|
9
|
+
|
|
10
|
+
__plugin_meta__ = PluginMetadata(
|
|
11
|
+
name="JMComic插件",
|
|
12
|
+
description="JMComic搜索、下载插件,支持全局屏蔽jm号和tag,仅支持OnebotV11协议。",
|
|
13
|
+
usage="jm下载 [jm号]:下载指定jm号的本子\n"
|
|
14
|
+
"jm查询 [jm号]:查询指定jm号的本子\n"
|
|
15
|
+
"jm搜索 [关键词]:搜索包含关键词的本子\n"
|
|
16
|
+
"jm设置文件夹 [文件夹名]:设置本群的本子储存文件夹\n",
|
|
17
|
+
type="application",
|
|
18
|
+
homepage="https://github.com/Misty02600/nonebot-plugin-jmdownloader",
|
|
19
|
+
config=PluginConfig,
|
|
20
|
+
supported_adapters={"~onebot.v11"},
|
|
21
|
+
extra={"author": "Misty02600 <xiao02600@gmail.com>"},
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
# 检测并迁移旧数据
|
|
25
|
+
from .migration import run_migration
|
|
26
|
+
|
|
27
|
+
run_migration()
|
|
28
|
+
|
|
29
|
+
# 导入命令模块以注册所有命令处理器
|
|
30
|
+
from .bot.handlers import ( # noqa: F401
|
|
31
|
+
ban_id_tag,
|
|
32
|
+
blacklist,
|
|
33
|
+
download,
|
|
34
|
+
group_control,
|
|
35
|
+
query,
|
|
36
|
+
scheduled,
|
|
37
|
+
search,
|
|
38
|
+
)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Bot 层
|
|
2
|
+
|
|
3
|
+
NoneBot 相关的依赖注入。
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from .dependencies import (
|
|
7
|
+
DataManagerDep,
|
|
8
|
+
JmServiceDep,
|
|
9
|
+
SessionsDep,
|
|
10
|
+
plugin_cache_dir,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"DataManagerDep",
|
|
15
|
+
"JmServiceDep",
|
|
16
|
+
"SessionsDep",
|
|
17
|
+
"plugin_cache_dir",
|
|
18
|
+
]
|