@anyul/koishi-plugin-rss 4.8.16 → 5.0.1
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.
- package/README.md +711 -0
- package/lib/commands/error-handler.d.ts +53 -0
- package/lib/commands/error-handler.js +111 -0
- package/lib/commands/index.d.ts +1 -0
- package/lib/commands/index.js +4 -0
- package/lib/commands/rss-subscribe.d.ts +11 -0
- package/lib/commands/rss-subscribe.js +323 -0
- package/lib/commands/utils.d.ts +50 -0
- package/lib/commands/utils.js +70 -0
- package/lib/config.d.ts +5 -0
- package/lib/config.js +111 -0
- package/lib/constants.d.ts +8 -0
- package/lib/constants.js +100 -0
- package/lib/core/ai.d.ts +77 -0
- package/lib/core/ai.js +407 -0
- package/lib/core/feeder.d.ts +15 -0
- package/lib/core/feeder.js +362 -0
- package/lib/core/item-processor.d.ts +18 -0
- package/lib/core/item-processor.js +457 -0
- package/lib/core/parser.d.ts +3 -0
- package/lib/core/parser.js +240 -0
- package/lib/core/renderer.d.ts +4 -0
- package/lib/core/renderer.js +231 -0
- package/lib/database.d.ts +2 -0
- package/lib/database.js +36 -0
- package/lib/index.d.ts +5 -322
- package/lib/index.js +584 -2311
- package/lib/services/message-cache-service.d.ts +108 -0
- package/lib/services/message-cache-service.js +330 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/types.d.ts +155 -0
- package/lib/types.js +4 -0
- package/lib/utils/common.d.ts +8 -0
- package/lib/utils/common.js +130 -0
- package/lib/utils/error-handler.d.ts +82 -0
- package/lib/utils/error-handler.js +251 -0
- package/lib/utils/error-tracker.d.ts +127 -0
- package/lib/utils/error-tracker.js +336 -0
- package/lib/utils/fetcher.d.ts +16 -0
- package/lib/utils/fetcher.js +151 -0
- package/lib/utils/logger.d.ts +35 -0
- package/lib/utils/logger.js +140 -0
- package/lib/utils/media.d.ts +8 -0
- package/lib/utils/media.js +242 -0
- package/lib/utils/message-cache.d.ts +116 -0
- package/lib/utils/message-cache.js +240 -0
- package/lib/utils/metrics.d.ts +184 -0
- package/lib/utils/metrics.js +401 -0
- package/lib/utils/structured-logger.d.ts +131 -0
- package/lib/utils/structured-logger.js +258 -0
- package/lib/utils/template.d.ts +3 -0
- package/lib/utils/template.js +180 -0
- package/package.json +13 -2
- package/readme.md +0 -256
package/README.md
ADDED
|
@@ -0,0 +1,711 @@
|
|
|
1
|
+
# koishi-plugin-rss-owl
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@anyul/koishi-plugin-rss)
|
|
4
|
+

|
|
5
|
+
|
|
6
|
+
> 功能强大的 Koishi RSS 订阅插件,支持多种订阅源、图片渲染、AI 摘要等高级功能
|
|
7
|
+
|
|
8
|
+
## ✨ 功能特性
|
|
9
|
+
|
|
10
|
+
### 🚀 核心功能
|
|
11
|
+
- **多源订阅** - 支持 RSS/Atom 订阅、RSSHub 快速链接、网页监控
|
|
12
|
+
- **多种模板** - 提供多种消息模板,支持自定义 HTML 样式
|
|
13
|
+
- **图片渲染** - 使用 Puppeteer 将订阅内容渲染为精美图片
|
|
14
|
+
- **视频支持** - 支持视频下载和转发,多种处理模式
|
|
15
|
+
- **智能过滤** - 关键词过滤和屏蔽,内容自定义处理
|
|
16
|
+
|
|
17
|
+
### 🎨 高级功能
|
|
18
|
+
- **AI 摘要** - 集成 OpenAI API,自动生成内容摘要并渲染到图片中
|
|
19
|
+
- **Markdown 渲染** - AI 摘要支持完整的 Markdown 语法
|
|
20
|
+
- **代理支持** - 全局/订阅级代理配置,支持 HTTP/HTTPS/SOCKS5
|
|
21
|
+
- **多群管理** - 支持多群订阅、关注机制、权限管理
|
|
22
|
+
- **定时更新** - 灵活的刷新策略,支持定时推送
|
|
23
|
+
|
|
24
|
+
### 🔧 技术特性
|
|
25
|
+
- **队列管理** - 智能请求队列,避免被封禁
|
|
26
|
+
- **重试机制** - 自动重试失败请求
|
|
27
|
+
- **内容缓存** - 文件缓存管理,支持多种存储模式
|
|
28
|
+
- **调试模式** - 详细的调试日志,方便问题排查
|
|
29
|
+
|
|
30
|
+
## 📁 项目结构
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
koishi-plugin-rss-owl/
|
|
34
|
+
├── src/
|
|
35
|
+
│ ├── commands/ # 命令定义
|
|
36
|
+
│ │ └── index.ts # RSS 订阅命令
|
|
37
|
+
│ ├── core/ # 核心功能模块
|
|
38
|
+
│ │ ├── ai.ts # AI 摘要功能
|
|
39
|
+
│ │ ├── feeder.ts # RSS 订阅调度
|
|
40
|
+
│ │ ├── item-processor.ts # RSS 条目处理
|
|
41
|
+
│ │ ├── parser.ts # RSS/HTML 解析
|
|
42
|
+
│ │ └── renderer.ts # 图片渲染
|
|
43
|
+
│ ├── utils/ # 工具函数
|
|
44
|
+
│ │ ├── common.ts # 通用工具
|
|
45
|
+
│ │ ├── fetcher.ts # HTTP 请求
|
|
46
|
+
│ │ ├── logger.ts # 日志系统
|
|
47
|
+
│ │ ├── media.ts # 媒体处理
|
|
48
|
+
│ │ └── template.ts # 模板定义
|
|
49
|
+
│ ├── config.ts # 配置定义
|
|
50
|
+
│ ├── constants.ts # 常量定义
|
|
51
|
+
│ ├── database.ts # 数据库模型
|
|
52
|
+
│ ├── types.ts # TypeScript 类型
|
|
53
|
+
│ └── index.ts # 插件入口
|
|
54
|
+
├── lib/ # 编译输出
|
|
55
|
+
├── package.json
|
|
56
|
+
└── README.md
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 配置插件
|
|
60
|
+
|
|
61
|
+
在 Koishi 配置文件中添加:
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
plugins:
|
|
65
|
+
rss-owl:
|
|
66
|
+
# 基础配置
|
|
67
|
+
$type: config
|
|
68
|
+
authority: 1 # 使用权限
|
|
69
|
+
advancedAuthority: 4 # 高级功能权限
|
|
70
|
+
|
|
71
|
+
# 网络配置
|
|
72
|
+
net:
|
|
73
|
+
userAgent: "Mozilla/5.0 ..."
|
|
74
|
+
rssHubUrl: "https://hub.slarker.me"
|
|
75
|
+
proxyAgent:
|
|
76
|
+
enabled: true
|
|
77
|
+
protocol: "socks5"
|
|
78
|
+
host: "127.0.0.1"
|
|
79
|
+
port: 17890
|
|
80
|
+
auth:
|
|
81
|
+
enabled: false
|
|
82
|
+
username: ""
|
|
83
|
+
password: ""
|
|
84
|
+
|
|
85
|
+
# 消息处理
|
|
86
|
+
msg:
|
|
87
|
+
censor: false
|
|
88
|
+
keywordFilter: []
|
|
89
|
+
keywordBlock: []
|
|
90
|
+
blockString: "*"
|
|
91
|
+
rssHubUrl: "https://hub.slarker.me"
|
|
92
|
+
|
|
93
|
+
# 模板配置
|
|
94
|
+
template:
|
|
95
|
+
custom: ""
|
|
96
|
+
customRemark: ""
|
|
97
|
+
bodyWidth: 600
|
|
98
|
+
bodyPadding: 20
|
|
99
|
+
bodyFontSize: 16
|
|
100
|
+
deviceScaleFactor: 2
|
|
101
|
+
content: ""
|
|
102
|
+
|
|
103
|
+
# AI 配置
|
|
104
|
+
ai:
|
|
105
|
+
enabled: false
|
|
106
|
+
baseUrl: "https://api.openai.com/v1"
|
|
107
|
+
apiKey: ""
|
|
108
|
+
model: "gpt-3.5-turbo"
|
|
109
|
+
placement: "top"
|
|
110
|
+
separator: "────────"
|
|
111
|
+
prompt: "请为以下内容生成简短摘要:\n\n标题:{{title}}\n\n内容:{{content}}\n\n摘要:"
|
|
112
|
+
maxInputLength: 2000
|
|
113
|
+
timeout: 30000
|
|
114
|
+
|
|
115
|
+
# 调试配置
|
|
116
|
+
debug: "info" # disable | error | info | details
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 🚀 快速开始
|
|
120
|
+
|
|
121
|
+
### 基础订阅
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# 订阅每日60秒早报(使用 default 模板)
|
|
125
|
+
rsso -i default rss:qqorw
|
|
126
|
+
|
|
127
|
+
# 订阅 Telegram 频道(使用 content 模板)
|
|
128
|
+
rsso -i content tg:woshadiao
|
|
129
|
+
|
|
130
|
+
# 订阅 GitHub 仓库
|
|
131
|
+
rsso -i content gh:issue/koishijs/koishi
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 使用 AI 摘要
|
|
135
|
+
|
|
136
|
+
1. 首先在配置中启用 AI 功能并配置 API:
|
|
137
|
+
```yaml
|
|
138
|
+
ai:
|
|
139
|
+
enabled: true
|
|
140
|
+
baseUrl: "https://api.openai.com/v1"
|
|
141
|
+
apiKey: "your-api-key"
|
|
142
|
+
model: "gpt-3.5-turbo"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
2. 订阅时会自动生成 AI 摘要并渲染到图片中
|
|
146
|
+
|
|
147
|
+
### 关注订阅
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# 关注订阅,更新时 @你
|
|
151
|
+
rsso -f 早报网
|
|
152
|
+
|
|
153
|
+
# 取消关注
|
|
154
|
+
rsso -f 早报网
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 立即拉取
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
# 立即拉取订阅最新内容
|
|
161
|
+
rsso -p 早报网
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## 📋 命令说明
|
|
165
|
+
|
|
166
|
+
### 基础命令
|
|
167
|
+
|
|
168
|
+
| 命令 | 说明 | 示例 |
|
|
169
|
+
|------|------|------|
|
|
170
|
+
| `rsso <url>` | 订阅 RSS | `rsso rss:qqorw` |
|
|
171
|
+
| `rsso -l [keyword]` | 查看订阅列表 | `rsso -l`, `rsso -l 早报` |
|
|
172
|
+
| `rsso -r <id\|keyword>` | 取消订阅 | `rsso -r 早报网` |
|
|
173
|
+
| `rsso -p <id\|keyword>` | 立即拉取 | `rsso -p 早报网` |
|
|
174
|
+
| `rsso -f <id\|keyword>` | 关注/取消关注 | `rsso -f 早报网` |
|
|
175
|
+
| `rsso -T <url>` | 测试链接 | `rsso -T rss:qqorw` |
|
|
176
|
+
|
|
177
|
+
### 高级选项
|
|
178
|
+
|
|
179
|
+
| 选项 | 说明 | 示例 |
|
|
180
|
+
|------|------|------|
|
|
181
|
+
| `-i <template>` | 指定模板 | `rsso -i default <url>` |
|
|
182
|
+
| `-t <title>` | 订阅名称 | `rsso -t 早报 <url>` |
|
|
183
|
+
| `-a <params>` | 局部参数 | `rsso -a merge:true <url>` |
|
|
184
|
+
| `-d <time/count>` | 定时推送 | `rsso -d 8:00/10 <url>` |
|
|
185
|
+
| `-q` | 查看快速链接 | `rsso -q` |
|
|
186
|
+
|
|
187
|
+
### 局部参数(arg)
|
|
188
|
+
|
|
189
|
+
支持在订阅时覆盖全局配置:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# 强制合并消息
|
|
193
|
+
rsso -a merge:true <url>
|
|
194
|
+
|
|
195
|
+
# 使用代理
|
|
196
|
+
rsso -a proxyAgent:socks5//127.0.0.1/7890 <url>
|
|
197
|
+
|
|
198
|
+
# 定时刷新(每1440分钟推送10条)
|
|
199
|
+
rsso -a forceLength:10,refresh:1440 <url>
|
|
200
|
+
|
|
201
|
+
# 禁用代理
|
|
202
|
+
rsso -a proxyAgent:false <url>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
支持的参数:
|
|
206
|
+
- `merge` - 消息合并模式
|
|
207
|
+
- `forceLength` - 强制返回条目数
|
|
208
|
+
- `reverse` - 反向排序
|
|
209
|
+
- `timeout` - 超时时间
|
|
210
|
+
- `refresh` - 刷新间隔(分钟)
|
|
211
|
+
- `maxRssItem` - 最大条目数
|
|
212
|
+
- `firstLoad` - 首次加载行为
|
|
213
|
+
- `bodyWidth` - 渲染宽度
|
|
214
|
+
- `bodyPadding` - 渲染内边距
|
|
215
|
+
- `proxyAgent` - 代理配置
|
|
216
|
+
|
|
217
|
+
## 🎨 模板说明
|
|
218
|
+
|
|
219
|
+
### 基础模板(直接发送)
|
|
220
|
+
|
|
221
|
+
| 模板 | 说明 | 内容 |
|
|
222
|
+
|------|------|------|
|
|
223
|
+
| `content` | 自定义基础模板 | 文字+图片+视频 |
|
|
224
|
+
| `text` | 纯文本 | 仅文字 |
|
|
225
|
+
| `media` | 媒体内容 | 图片+视频 |
|
|
226
|
+
| `image` | 仅图片 | 仅图片 |
|
|
227
|
+
| `video` | 仅视频 | 仅视频 |
|
|
228
|
+
| `proto` | 原始内容 | 未处理的 description |
|
|
229
|
+
|
|
230
|
+
### Puppeteer 模板(图片渲染)
|
|
231
|
+
|
|
232
|
+
| 模板 | 说明 | 特点 |
|
|
233
|
+
|------|------|------|
|
|
234
|
+
| `default` | 基础渲染模板 | 完整样式,包含标题、时间等 |
|
|
235
|
+
| `description` | 纯内容渲染 | 仅包含 description 内容 |
|
|
236
|
+
| `custom` | 自定义模板 | 高度可定制,支持自定义 HTML |
|
|
237
|
+
| `link` | 链接访问渲染 | 访问 description 中的第一个链接并渲染 |
|
|
238
|
+
|
|
239
|
+
### 模板切换
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
# 使用 default 模板订阅
|
|
243
|
+
rsso -i default rss:qqorw
|
|
244
|
+
|
|
245
|
+
# 使用 content 模板订阅
|
|
246
|
+
rsso -i content tg:woshadiao
|
|
247
|
+
|
|
248
|
+
# 使用 custom 模板订阅
|
|
249
|
+
rsso -i custom <url>
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### 自定义模板
|
|
253
|
+
|
|
254
|
+
在配置文件的 `template.custom` 中编写 HTML:
|
|
255
|
+
|
|
256
|
+
```html
|
|
257
|
+
<div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 20px;">
|
|
258
|
+
<h1>{{title}}</h1>
|
|
259
|
+
<p>{{description}}</p>
|
|
260
|
+
<p>发布时间:{{pubDate}}</p>
|
|
261
|
+
</div>
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
支持的插值变量见下文「插值说明」。
|
|
265
|
+
|
|
266
|
+
## 📝 插值说明
|
|
267
|
+
|
|
268
|
+
### 基本语法
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
{{变量1|变量2|变量3|'默认值'}}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
如果变量1未找到,则尝试变量2,以此类推。可用单引号设置默认值。
|
|
275
|
+
|
|
276
|
+
### 可用变量
|
|
277
|
+
|
|
278
|
+
#### Item 元素(直接使用)
|
|
279
|
+
|
|
280
|
+
| 变量 | 说明 | 示例 |
|
|
281
|
+
|------|------|------|
|
|
282
|
+
| `title` | 标题 | `10月29日,星期二,在这里每天60秒读懂世界!` |
|
|
283
|
+
| `description` | 内容 | RSS 条目内容 |
|
|
284
|
+
| `link` | 链接 | `https://www.qqorw.cn/mrzb/657.html` |
|
|
285
|
+
| `guid` | 唯一标识 | `https://www.qqorw.cn/mrzb/657.html` |
|
|
286
|
+
| `pubDate` | 更新时间 | `Tue, 29 Oct 2024 00:50:29 GMT` |
|
|
287
|
+
| `author` | 作者 | `早报网` |
|
|
288
|
+
| `category` | 类别 | `每日早报` |
|
|
289
|
+
|
|
290
|
+
#### Channel 元素(加前缀 `rss.channel.`)
|
|
291
|
+
|
|
292
|
+
| 变量 | 说明 | 示例 |
|
|
293
|
+
|------|------|------|
|
|
294
|
+
| `rss.channel.title` | 频道标题 | `早报网` |
|
|
295
|
+
| `rss.channel.link` | 频道链接 | `https://qqorw.cn/` |
|
|
296
|
+
| `rss.channel.description` | 频道描述 | `每天更新15条简语早报...` |
|
|
297
|
+
| `rss.channel.image.url` | 频道图像 | `https://qqorw.cn/static/...` |
|
|
298
|
+
|
|
299
|
+
#### Arg 元素(插件配置)
|
|
300
|
+
|
|
301
|
+
| 变量 | 说明 |
|
|
302
|
+
|------|------|
|
|
303
|
+
| `arg.title` | 订阅标题 |
|
|
304
|
+
| `arg.url` | 订阅链接 |
|
|
305
|
+
| `arg.author` | 订阅用户 ID |
|
|
306
|
+
| `arg.rssId` | 订阅 ID |
|
|
307
|
+
| `arg.template` | 订阅模板 |
|
|
308
|
+
| `arg.proxyAgent.host` | 代理地址 |
|
|
309
|
+
|
|
310
|
+
#### AI 元素
|
|
311
|
+
|
|
312
|
+
| 变量 | 说明 |
|
|
313
|
+
|------|------|
|
|
314
|
+
| `aiSummary` | AI 生成的内容摘要(Markdown 格式) |
|
|
315
|
+
|
|
316
|
+
### 使用示例
|
|
317
|
+
|
|
318
|
+
```html
|
|
319
|
+
<!-- 带默认值的插值 -->
|
|
320
|
+
<h1>{{title|'无标题'}}</h1>
|
|
321
|
+
|
|
322
|
+
<!-- AI 摘要(如果在模板中使用会自动渲染) -->
|
|
323
|
+
<div class="ai-summary">{{aiSummary}}</div>
|
|
324
|
+
|
|
325
|
+
<!-- 多层级联 -->
|
|
326
|
+
<p>{{rss.channel.description|arg.title|'未知来源'}}</p>
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
## 🔗 快速链接说明
|
|
330
|
+
|
|
331
|
+
对于 RSSHub 订阅,可使用快速链接简化输入:
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
# 完整链接
|
|
335
|
+
https://hub.slarker.me/telegram/channel/woshadiao
|
|
336
|
+
|
|
337
|
+
# 快速链接
|
|
338
|
+
tg:woshadiao
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### 常用快速链接
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
# Telegram 频道
|
|
345
|
+
tg:<频道名>
|
|
346
|
+
|
|
347
|
+
# GitHub
|
|
348
|
+
gh:issue/<用户>/<仓库>
|
|
349
|
+
gh:release/<用户>/<仓库>
|
|
350
|
+
|
|
351
|
+
# 豆瓣
|
|
352
|
+
douban/group/<ID>
|
|
353
|
+
|
|
354
|
+
# 微信公众号
|
|
355
|
+
mp-tag:<AppID>/<TagID>
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
查看所有快速链接:
|
|
359
|
+
```bash
|
|
360
|
+
rsso -q
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
切换 RSSHub 实例(在配置中):
|
|
364
|
+
```yaml
|
|
365
|
+
msg:
|
|
366
|
+
rssHubUrl: "https://hub.slarker.me"
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## 🌐 代理配置
|
|
370
|
+
|
|
371
|
+
### 全局代理
|
|
372
|
+
|
|
373
|
+
在配置文件中设置:
|
|
374
|
+
|
|
375
|
+
```yaml
|
|
376
|
+
net:
|
|
377
|
+
proxyAgent:
|
|
378
|
+
enabled: true
|
|
379
|
+
protocol: "socks5" # http, https, socks5
|
|
380
|
+
host: "127.0.0.1"
|
|
381
|
+
port: 17890
|
|
382
|
+
auth:
|
|
383
|
+
enabled: true
|
|
384
|
+
username: "user"
|
|
385
|
+
password: "pass"
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### 订阅级代理
|
|
389
|
+
|
|
390
|
+
```bash
|
|
391
|
+
# 使用代理订阅
|
|
392
|
+
rsso -a proxyAgent:socks5//127.0.0.1/7890 <url>
|
|
393
|
+
|
|
394
|
+
# 禁用代理(即使全局已启用)
|
|
395
|
+
rsso -a proxyAgent:false <url>
|
|
396
|
+
|
|
397
|
+
# 使用带认证的代理
|
|
398
|
+
rsso -a proxyAgent:http//user:pass@127.0.0.1/8080 <url>
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### 代理优先级
|
|
402
|
+
|
|
403
|
+
1. 订阅级代理(arg.proxyAgent)
|
|
404
|
+
2. 全局代理(config.net.proxyAgent)
|
|
405
|
+
3. 直连
|
|
406
|
+
|
|
407
|
+
## 🤖 AI 摘要功能
|
|
408
|
+
|
|
409
|
+
### 配置 AI
|
|
410
|
+
|
|
411
|
+
```yaml
|
|
412
|
+
ai:
|
|
413
|
+
enabled: true
|
|
414
|
+
baseUrl: "https://api.openai.com/v1" # 或兼容的 API
|
|
415
|
+
apiKey: "sk-..."
|
|
416
|
+
model: "gpt-3.5-turbo"
|
|
417
|
+
placement: "top" # top | bottom
|
|
418
|
+
separator: "────────" # 分隔符
|
|
419
|
+
maxInputLength: 2000 # 最大输入长度
|
|
420
|
+
timeout: 30000 # 超时时间(毫秒)
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### 自定义 Prompt
|
|
424
|
+
|
|
425
|
+
```yaml
|
|
426
|
+
ai:
|
|
427
|
+
prompt: "请为以下内容生成简洁的要点摘要:\n\n标题:{{title}}\n\n内容:{{content}}\n\n摘要:"
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### 效果
|
|
431
|
+
|
|
432
|
+
AI 摘要会:
|
|
433
|
+
- 自动渲染到图片中(使用图片渲染模板时)
|
|
434
|
+
- 支持 Markdown 格式(列表、粗体、链接等)
|
|
435
|
+
- 使用与模板一致的样式
|
|
436
|
+
- 可以通过 `{{aiSummary}}` 在自定义模板中使用
|
|
437
|
+
|
|
438
|
+
## 📊 图片渲染配置
|
|
439
|
+
|
|
440
|
+
### 渲染模式
|
|
441
|
+
|
|
442
|
+
| 模式 | 说明 | 配置 |
|
|
443
|
+
|------|------|------|
|
|
444
|
+
| `base64` | Base64 编码 | `imageMode: base64` |
|
|
445
|
+
| `File` | 本地文件 | `imageMode: File` |
|
|
446
|
+
| `assets` | Assets 服务 | `imageMode: assets` |
|
|
447
|
+
|
|
448
|
+
### 渲染参数
|
|
449
|
+
|
|
450
|
+
```yaml
|
|
451
|
+
template:
|
|
452
|
+
bodyWidth: 600 # 宽度(像素)
|
|
453
|
+
bodyPadding: 20 # 内边距(像素)
|
|
454
|
+
bodyFontSize: 16 # 字体大小(像素)
|
|
455
|
+
deviceScaleFactor: 2 # 清晰度倍数(0.5-3)
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
### 视频处理
|
|
459
|
+
|
|
460
|
+
```yaml
|
|
461
|
+
basic:
|
|
462
|
+
videoMode: "filter" # filter | href | base64 | File | assets
|
|
463
|
+
usePoster: true # 使用视频封面
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
## 🔐 权限说明
|
|
467
|
+
|
|
468
|
+
### 权限等级
|
|
469
|
+
|
|
470
|
+
| 权限 | 说明 | 默认配置 |
|
|
471
|
+
|------|------|----------|
|
|
472
|
+
| `authority` | 基础使用权限 | 1 |
|
|
473
|
+
| `advancedAuthority` | 高级功能权限 | 4 |
|
|
474
|
+
|
|
475
|
+
### 提升权限
|
|
476
|
+
|
|
477
|
+
#### 方式一:使用 change-auth-callme 插件
|
|
478
|
+
|
|
479
|
+
```bash
|
|
480
|
+
# 安装插件
|
|
481
|
+
plugin install change-auth-callme
|
|
482
|
+
|
|
483
|
+
# 提升权限到 5
|
|
484
|
+
changeauth 5
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
#### 方式二:使用 auth 插件
|
|
488
|
+
|
|
489
|
+
```bash
|
|
490
|
+
# 绑定账号
|
|
491
|
+
auth:bind
|
|
492
|
+
|
|
493
|
+
# 提升权限
|
|
494
|
+
auth:assign @user 5
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
### 功能权限要求
|
|
498
|
+
|
|
499
|
+
- **基础订阅**:需要 `authority` 权限
|
|
500
|
+
- **关注全体**:需要 `advancedAuthority` 权限
|
|
501
|
+
- **Bot 主人**:拥有所有权限
|
|
502
|
+
|
|
503
|
+
## 🛠️ 配置项说明
|
|
504
|
+
|
|
505
|
+
### 完整配置示例
|
|
506
|
+
|
|
507
|
+
```yaml
|
|
508
|
+
plugins:
|
|
509
|
+
rss-owl:
|
|
510
|
+
# === 基础配置 ===
|
|
511
|
+
$type: config
|
|
512
|
+
authority: 1 # 基础权限等级
|
|
513
|
+
advancedAuthority: 4 # 高级功能权限等级
|
|
514
|
+
|
|
515
|
+
# === 网络配置 ===
|
|
516
|
+
net:
|
|
517
|
+
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
|
|
518
|
+
rssHubUrl: "https://hub.slarker.me"
|
|
519
|
+
proxyAgent:
|
|
520
|
+
enabled: false
|
|
521
|
+
protocol: "socks5"
|
|
522
|
+
host: "127.0.0.1"
|
|
523
|
+
port: 17890
|
|
524
|
+
auth:
|
|
525
|
+
enabled: false
|
|
526
|
+
username: ""
|
|
527
|
+
password: ""
|
|
528
|
+
|
|
529
|
+
# === 消息处理 ===
|
|
530
|
+
msg:
|
|
531
|
+
censor: false # 内容审查
|
|
532
|
+
keywordFilter: [] # 关键词过滤
|
|
533
|
+
keywordBlock: [] # 关键词屏蔽
|
|
534
|
+
blockString: "*" # 屏蔽替换字符
|
|
535
|
+
rssHubUrl: "https://hub.slarker.me"
|
|
536
|
+
|
|
537
|
+
# === 模板配置 ===
|
|
538
|
+
template:
|
|
539
|
+
custom: "" # 自定义模板 HTML
|
|
540
|
+
customRemark: "" # 自定义备注
|
|
541
|
+
bodyWidth: 600 # 渲染宽度
|
|
542
|
+
bodyPadding: 20 # 渲染内边距
|
|
543
|
+
bodyFontSize: 16 # 字体大小
|
|
544
|
+
deviceScaleFactor: 2 # 清晰度倍数
|
|
545
|
+
content: "" # content 模板内容
|
|
546
|
+
|
|
547
|
+
# === 基础配置 ===
|
|
548
|
+
basic:
|
|
549
|
+
usePoster: false # 使用视频封面
|
|
550
|
+
margeVideo: false # 合并视频
|
|
551
|
+
defaultTemplate: "auto" # 默认模板
|
|
552
|
+
timeout: 60 # 请求超时(秒)
|
|
553
|
+
refresh: 5 # 刷新间隔(分钟)
|
|
554
|
+
merge: "不合并" # 消息合并策略
|
|
555
|
+
maxRssItem: 10 # 最大条目数
|
|
556
|
+
firstLoad: true # 首次加载行为
|
|
557
|
+
urlDeduplication: false # URL 去重
|
|
558
|
+
resendUpdataContent: "disable" # 重发内容策略
|
|
559
|
+
imageMode: "base64" # 图片模式
|
|
560
|
+
videoMode: "filter" # 视频模式
|
|
561
|
+
autoSplitImage: false # 自动分割图片
|
|
562
|
+
cacheDir: "./data/cache" # 缓存目录
|
|
563
|
+
replaceDir: "./data/replace" # 替换目录
|
|
564
|
+
|
|
565
|
+
# === AI 配置 ===
|
|
566
|
+
ai:
|
|
567
|
+
enabled: false # 启用 AI
|
|
568
|
+
baseUrl: "https://api.openai.com/v1"
|
|
569
|
+
apiKey: ""
|
|
570
|
+
model: "gpt-3.5-turbo"
|
|
571
|
+
placement: "top" # top | bottom
|
|
572
|
+
separator: "────────"
|
|
573
|
+
prompt: "请为以下内容生成简短摘要:\n\n标题:{{title}}\n\n内容:{{content}}\n\n摘要:"
|
|
574
|
+
maxInputLength: 2000
|
|
575
|
+
timeout: 30000
|
|
576
|
+
|
|
577
|
+
# === 调试配置 ===
|
|
578
|
+
debug: "info" # disable | error | info | details
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
## 🐛 调试指南
|
|
582
|
+
|
|
583
|
+
### 启用详细日志
|
|
584
|
+
|
|
585
|
+
```yaml
|
|
586
|
+
debug: "details" # 显示所有调试信息
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
### 常见问题
|
|
590
|
+
|
|
591
|
+
**1. 订阅不更新**
|
|
592
|
+
- 检查刷新间隔设置
|
|
593
|
+
- 使用 `rsso -p <id>` 手动拉取测试
|
|
594
|
+
- 查看日志确认是否有错误
|
|
595
|
+
|
|
596
|
+
**2. 图片不显示**
|
|
597
|
+
- 检查是否安装了 `puppeteer` 插件
|
|
598
|
+
- 确认 `imageMode` 配置正确
|
|
599
|
+
- 查看日志中的渲染错误
|
|
600
|
+
|
|
601
|
+
**3. AI 摘要不生成**
|
|
602
|
+
- 确认 AI 功能已启用
|
|
603
|
+
- 检查 API 配置是否正确
|
|
604
|
+
- 查看日志中的 API 请求错误
|
|
605
|
+
|
|
606
|
+
**4. 代理不生效**
|
|
607
|
+
- 确认代理配置正确
|
|
608
|
+
- 检查代理服务器是否可用
|
|
609
|
+
- 使用 `debug: details` 查看代理日志
|
|
610
|
+
|
|
611
|
+
## 📜 更新日志
|
|
612
|
+
|
|
613
|
+
### 5.0.0-beta (2025-01-15)
|
|
614
|
+
|
|
615
|
+
#### 新增功能
|
|
616
|
+
- ✨ **AI 摘要功能** - 集成 OpenAI API,自动生成内容摘要
|
|
617
|
+
- 🎨 **AI 摘要渲染** - AI 摘要完美集成到图片渲染中
|
|
618
|
+
- 📝 **Markdown 支持** - AI 摘要支持完整的 Markdown 语法
|
|
619
|
+
- 🎯 **统一样式** - AI 摘要使用与模板一致的设计风格
|
|
620
|
+
|
|
621
|
+
#### 功能改进
|
|
622
|
+
- 🔧 **优化日志系统** - 调试信息分级管理,默认不显示技术细节
|
|
623
|
+
- 📊 **改进代理配置** - 更灵活的代理配置和优先级处理
|
|
624
|
+
- 🎨 **优化模板样式** - 使用 Tailwind CSS,提升视觉效果
|
|
625
|
+
- ⚡ **性能优化** - 图片预处理、并行下载等性能提升
|
|
626
|
+
|
|
627
|
+
#### 技术更新
|
|
628
|
+
- 📦 **添加依赖** - 引入 `marked` 库用于 Markdown 解析
|
|
629
|
+
- 🏗️ **代码重构** - 优化模块结构,提升可维护性
|
|
630
|
+
- 📚 **完善文档** - 更新 README,添加详细的功能说明
|
|
631
|
+
|
|
632
|
+
### 4.8.16 及更早版本
|
|
633
|
+
|
|
634
|
+
详见 [GitHub Releases](https://github.com/Anyuluo996/koishi-plugin-rss-owl/releases)
|
|
635
|
+
|
|
636
|
+
## 🔜 TODO
|
|
637
|
+
|
|
638
|
+
- [ ] 网页监控功能增强
|
|
639
|
+
- [ ] 更多 AI 功能集成
|
|
640
|
+
- [ ] 自定义 AI 模型支持
|
|
641
|
+
- [ ] 内容过滤规则增强
|
|
642
|
+
- [ ] 订阅分组管理
|
|
643
|
+
- [ ] 数据统计面板
|
|
644
|
+
|
|
645
|
+
## 🤝 贡献
|
|
646
|
+
|
|
647
|
+
欢迎提交 Issue 和 Pull Request!
|
|
648
|
+
|
|
649
|
+
### 开发
|
|
650
|
+
|
|
651
|
+
```bash
|
|
652
|
+
# 克隆项目
|
|
653
|
+
git clone https://github.com/Anyuluo996/koishi-plugin-rss-owl.git
|
|
654
|
+
|
|
655
|
+
# 安装依赖
|
|
656
|
+
cd koishi-plugin-rss-owl
|
|
657
|
+
npm install --legacy-peer-deps
|
|
658
|
+
|
|
659
|
+
# 开发模式
|
|
660
|
+
npm run dev
|
|
661
|
+
|
|
662
|
+
# 构建
|
|
663
|
+
npm run build
|
|
664
|
+
|
|
665
|
+
# 运行测试
|
|
666
|
+
npm test
|
|
667
|
+
|
|
668
|
+
# 生成覆盖率报告
|
|
669
|
+
npm run test:coverage
|
|
670
|
+
|
|
671
|
+
# 监听模式(开发时使用)
|
|
672
|
+
npm run test:watch
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
### 测试
|
|
676
|
+
|
|
677
|
+
本项目拥有完善的测试套件,包含 165+ 个测试用例,覆盖核心功能模块。
|
|
678
|
+
|
|
679
|
+
**测试覆盖率**:
|
|
680
|
+
- 语句覆盖率: 90.83%
|
|
681
|
+
- 分支覆盖率: 74.86%
|
|
682
|
+
- 函数覆盖率: 97.43%
|
|
683
|
+
- 行覆盖率: 90.21%
|
|
684
|
+
|
|
685
|
+
**测试范围**:
|
|
686
|
+
- ✅ 工具函数测试(日期解析、URL处理、内容清理)
|
|
687
|
+
- ✅ HTTP 请求测试(RequestManager、createHttpFunction)
|
|
688
|
+
- ✅ 错误处理测试(友好错误消息、错误类型识别)
|
|
689
|
+
- ✅ 日志系统测试(debug输出、级别过滤)
|
|
690
|
+
- ✅ 集成测试(真实HTTP请求、代理配置)
|
|
691
|
+
|
|
692
|
+
详见 [TESTING.md](./TESTING.md) 了解更多测试信息。
|
|
693
|
+
|
|
694
|
+
## 💬 致谢
|
|
695
|
+
|
|
696
|
+
本项目基于以下优秀的开源项目:
|
|
697
|
+
|
|
698
|
+
- [koishi-plugin-rss](https://github.com/koishijs/koishi-plugin-rss) - Koishi 官方 RSS 插件
|
|
699
|
+
- [koishi-plugin-rss-discourse](https://github.com/MirrorCY/koishi-plugin-rss) - 功能完善的 RSS 插件
|
|
700
|
+
- [koishi-plugin-rss-cat](https://github.com/jexjws/koishi-plugin-rss-cat) - RSS 订阅管理插件
|
|
701
|
+
- [koishi-plugin-rss](https://github.com/borraken/koishi-plugin-rss-owl) - 原库
|
|
702
|
+
|
|
703
|
+
感谢 Koishi 社区的支持和贡献!
|
|
704
|
+
|
|
705
|
+
## 📄 许可证
|
|
706
|
+
|
|
707
|
+
[MIT License](LICENSE)
|
|
708
|
+
|
|
709
|
+
---
|
|
710
|
+
|
|
711
|
+
**Made with ❤️ by Anyuluo**
|