diff --git a/README.md b/README.md
index 4c493e3..37407ef 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,7 @@
## 特性
**无论多少订阅均可在最低 10s 内检测所有动态**
使用 [skiko](https://github.com/JetBrains/skiko) 绘图
+番剧订阅
动态过滤
扫码登录
可配置性高
@@ -50,13 +51,15 @@ Vtuber 字幕组及粉丝群如需要使用可通过群联系我, 使用我搭
如果你对这张图有什么建议也可以反馈
-| 订阅相关 | 描述 |
-|-------------------------------------|---------------------|
-| `/bili ` | 获取上面的帮助图片 |
-| `/bili ` | 扫码登录 (需在配置文件中配置管理员) |
-| `/bili [目标]` | 为目标 [目标] 添加一个订阅 |
-| `/bili [目标]` | 为目标 [目标] 删除一个订阅 |
-| `/bili [目标]` | 将目标 [目标] 的全部订阅删除 |
+### 基础指令
+
+| 订阅相关 | 描述 |
+|------------------------------------|--------------------------------------------------------------------------------|
+| `/bili ` | 获取上面的帮助图片 |
+| `/bili ` | 扫码登录 (需在配置文件中配置管理员) |
+| `/bili [目标]` | 为目标 [目标] 添加一个订阅 (id 可以为 用户ID 也可以为 番剧ID ) 番剧ID格式: `ss11111` `md22222` `ep33333` |
+| `/bili [目标]` | 为目标 [目标] 删除一个订阅 (id 可以为 用户ID 也可以为 番剧ID ) 删除用户同时支持用户名删除 |
+| `/bili [目标]` | 将目标 [目标] 的全部订阅删除 |
| 订阅列表 | 描述 |
|--------------------------------------------|-------------------------|
@@ -79,13 +82,13 @@ Vtuber 字幕组及粉丝群如需要使用可通过群联系我, 使用我搭
| `/bili <动态ID>` | 通过ID搜索一个动态 |
| `/bili [数量]` | 获取用户最新动态 (支持用户名本地模糊搜索) |
-| [分组指令](#分组指令) (v3.0.3) |
-|------------------------|
+| [分组指令](#分组指令) |
+|-----------------|
| [动态过滤指令](#动态过滤指令) |
|--------------------|
-**指令中的 `目标` 可以是 好友/群/分组 (v3.0.3)**
+**指令中的 `目标` 可以是 好友 / 群 / 分组**
推荐使用 `config` 指令配置 模板 过滤器
@@ -104,18 +107,6 @@ Vtuber 字幕组及粉丝群如需要使用可通过群联系我, 使用我搭
/bili t d ForwardMsg #为当前群/好友动态推送模板设置为ForwardMsg
```
-### 分组指令 (v3.0.3)
-| 分组指令 | 描述 |
-|-------------------------------------------------------|----------------------------------------|
-| `/bili <分组名>` | 创建一个分组 (分组名不能全为数字) |
-| `/bili [分组名]` | 查询分组列表 |
-| `/bili <分组名>` | 删除分组 (删除分组会同时删除分组所有数据) |
-| `/bili <分组名> <群/Q号列表>` | 向分组内添加用户 (支持批量添加,中间用逗号隔开) |
-| `/bili <分组名> <群/Q号列表>` | 删除分组内用户 (支持批量删除,中间用逗号隔开) |
-| `/bili <分组名> ` | 设置分组管理员 (管理员只能是好友,不能是群。支持批量删除,中间用逗号隔开) |
-| `/bili <分组名> ` | 删除分组管理员 (支持批量删除,中间用逗号隔开) |
-
-
### 动态过滤指令
推荐使用 `/bili config` 交互式配置
@@ -130,13 +121,13 @@ Vtuber 字幕组及粉丝群如需要使用可通过群联系我, 使用我搭
过滤器模式黑名单模式
-| 指令 | 描述 |
-|-----------------------------------------------------------|-----------------------------------------------------------------------------|
-| `/bili <类型> [uid] [目标]` | 为目标 [目标] 添加 uid 的动态类型过滤器 |
-| `/bili <正则表达式> [uid] [目标]` | 为目标 [目标] 添加 uid 的动态正则过滤器 |
+| 指令 | 描述 |
+|-------------------------------------------------------------|-----------------------------------------------------------------------------|
+| `/bili <类型> [uid] [目标]` | 为目标 [目标] 添加 uid 的动态类型过滤器 |
+| `/bili <正则表达式> [uid] [目标]` | 为目标 [目标] 添加 uid 的动态正则过滤器 |
| `/bili <过滤器类型> <过滤器模式> [uid] [目标]` | 切换过滤器模式
过滤器类型: `t`(类型过滤器) `r`(正则过滤器)
过滤器模式: `w`(白名单模式) `b`(黑名单模式) |
-| `/bili [uid] [目标]` | 列出 uid 的过滤器列表 |
-| `/bili [uid] [目标]` | 删除 uid 中 index 的过滤器 |
+| `/bili [uid] [目标]` | 列出 uid 的过滤器列表 |
+| `/bili [uid] [目标]` | 删除 uid 中 index 的过滤器 |
```
# 栗子
@@ -166,6 +157,19 @@ Vtuber 字幕组及粉丝群如需要使用可通过群联系我, 使用我搭
# 不填默认也为 0
```
+### 分组指令
+| 分组指令 | 描述 |
+|-------------------------------------------------------|----------------------------------------|
+| `/bili <分组名>` | 创建一个分组 (分组名不能全为数字) |
+| `/bili [分组名]` | 查询分组列表 |
+| `/bili <分组名>` | 删除分组 (删除分组会同时删除分组所有数据) |
+| `/bili <分组名> <群/Q号列表>` | 向分组内添加用户 (支持批量添加,中间用逗号隔开) |
+| `/bili <分组名> <群/Q号列表>` | 删除分组内用户 (支持批量删除,中间用逗号隔开) |
+| `/bili <分组名> ` | 设置分组管理员 (管理员只能是好友,不能是群。支持批量删除,中间用逗号隔开) |
+| `/bili <分组名> ` | 删除分组管理员 (支持批量删除,中间用逗号隔开) |
+
+前面的 [基础指令](#基础指令) 与 [动态过滤指令](#动态过滤指令) 中的 `目标` 可以是 好友 / 群 / 分组
+
## 权限
插件命令依赖 [chat-command](https://github.com/project-mirai/chat-command) 来正确处理聊天环境下的命令,请确保有此插件,否则插件可能无法正常工作
diff --git a/build.gradle.kts b/build.gradle.kts
index 4d68107..0d2ab80 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -8,7 +8,7 @@ plugins {
}
group = "top.colter"
-version = "3.0.4"
+version = "3.1.0"
repositories {
mavenLocal()
@@ -43,7 +43,7 @@ dependencies {
}
implementation("com.google.zxing:javase:3.5.0")
- compileOnly("xyz.cssxsh.mirai:mirai-skia-plugin:1.1.7")
+ compileOnly("xyz.cssxsh.mirai:mirai-skia-plugin:1.1.8")
testImplementation(kotlin("test", "1.7.0"))
testImplementation("org.jetbrains.skiko:skiko-awt-runtime-windows-x64:0.7.27")
diff --git a/docs/img/help.png b/docs/img/help.png
index 48f025a..a71d684 100644
Binary files a/docs/img/help.png and b/docs/img/help.png differ
diff --git a/src/main/kotlin/top/colter/mirai/plugin/bilibili/BiliBiliDynamic.kt b/src/main/kotlin/top/colter/mirai/plugin/bilibili/BiliBiliDynamic.kt
index 61b5373..700ad5a 100644
--- a/src/main/kotlin/top/colter/mirai/plugin/bilibili/BiliBiliDynamic.kt
+++ b/src/main/kotlin/top/colter/mirai/plugin/bilibili/BiliBiliDynamic.kt
@@ -24,7 +24,7 @@ object BiliBiliDynamic : KotlinPlugin(
JvmPluginDescription(
id = "top.colter.bilibili-dynamic-mirai-plugin",
name = "BiliBili Dynamic",
- version = "3.0.4",
+ version = "3.1.0",
) {
author("Colter")
dependsOn("xyz.cssxsh.mirai.plugin.mirai-skia-plugin", ">= 1.1.0")
diff --git a/src/main/kotlin/top/colter/mirai/plugin/bilibili/command/DynamicCommand.kt b/src/main/kotlin/top/colter/mirai/plugin/bilibili/command/DynamicCommand.kt
index 9ea6346..9299204 100644
--- a/src/main/kotlin/top/colter/mirai/plugin/bilibili/command/DynamicCommand.kt
+++ b/src/main/kotlin/top/colter/mirai/plugin/bilibili/command/DynamicCommand.kt
@@ -53,23 +53,23 @@ object DynamicCommand : CompositeCommand(
if (checkPerm(target)) {
if (pgcRegex.matches(id)) {
sendMessage(PgcService.followPgc(id, target.subject))
- }else {
- try {
- DynamicService.addSubscribe(id.toLong(), target.subject).let {
- sendMessage(it)
- actionNotify(this.subject?.id, name, target.name, "订阅", it)
- }
- } catch (e: NumberFormatException) {
- sendMessage("ID错误 [$id]")
+ }else try {
+ DynamicService.addSubscribe(id.toLong(), target.subject).let {
+ sendMessage(it)
+ actionNotify(this.subject?.id, name, target.name, "订阅", it)
}
+ } catch (e: NumberFormatException) {
+ sendMessage("ID错误 [$id]")
}
}
}
@SubCommand("del", "删除")
- suspend fun CommandSender.del(user: String, target: GroupOrContact = GroupOrContact(Contact())) {
+ suspend fun CommandSender.del(id: String, target: GroupOrContact = GroupOrContact(Contact())) {
if (checkPerm(target)) {
- matchUser(user) {
+ if (pgcRegex.matches(id)) {
+ sendMessage(PgcService.delPgc(id, target.subject))
+ }else matchUser(id) {
DynamicService.removeSubscribe(it, target.subject)
}?.let {
sendMessage(it)
diff --git a/src/main/kotlin/top/colter/mirai/plugin/bilibili/service/DynamicService.kt b/src/main/kotlin/top/colter/mirai/plugin/bilibili/service/DynamicService.kt
index 1432688..4dd80d9 100644
--- a/src/main/kotlin/top/colter/mirai/plugin/bilibili/service/DynamicService.kt
+++ b/src/main/kotlin/top/colter/mirai/plugin/bilibili/service/DynamicService.kt
@@ -123,7 +123,7 @@ object DynamicService {
appendLine("番剧: ")
val cc = bangumi.count { (ssid, sub) ->
if (subject in sub.contacts) {
- appendLine("${sub.title}@$ssid")
+ appendLine("${sub.title}@ss$ssid")
true
}else false
}
diff --git a/src/main/kotlin/top/colter/mirai/plugin/bilibili/service/PgcService.kt b/src/main/kotlin/top/colter/mirai/plugin/bilibili/service/PgcService.kt
index 2675553..c9cf642 100644
--- a/src/main/kotlin/top/colter/mirai/plugin/bilibili/service/PgcService.kt
+++ b/src/main/kotlin/top/colter/mirai/plugin/bilibili/service/PgcService.kt
@@ -25,7 +25,6 @@ object PgcService {
}
suspend fun followPgcBySsid(ssid: Long, subject: String): String {
- //return client.followPgc(ssid)?.toast!!
client.followPgc(ssid) ?: return "追番失败"
bangumi.getOrPut(ssid) {
val season = client.pgcSeasonInfo(ssid) ?: return "获取番剧信息失败, 如果是港澳台番剧请用 media id (md11111) 订阅"
@@ -59,6 +58,34 @@ object PgcService {
}
}
+ fun delPgc(id: String, subject: String): String {
+ val regex = pgcRegex.find(id) ?: return "ID 格式错误 例(ss11111, md22222)"
+
+ val type = regex.destructured.component1()
+ val id = regex.destructured.component2().toLong()
+
+ return when (type) {
+ "ss" -> {
+ val pgc = bangumi[id] ?: return "没有这个番剧哦"
+ if (pgc.contacts.remove(subject)) {
+ if (pgc.contacts.isEmpty()) bangumi.remove(id)
+ "删除成功"
+ } else "没有订阅这个番剧哦"
+ }
+ "md" -> {
+ val pgc = bangumi.filter { it.value.mediaId == id }.values
+ if (pgc.isEmpty()) return "没有这个番剧哦"
+ val contacts = pgc.first().contacts
+ if (contacts.remove(subject)) {
+ if (contacts.isEmpty()) bangumi.remove(pgc.first().seasonId)
+ "删除成功"
+ } else "没有订阅这个番剧哦"
+ }
+ "ep" -> "无法通过ep进行删除,请使用 ss 或 md"
+ else -> "额(⊙﹏⊙)"
+ }
+ }
+
fun type(type: Int) = when (type) {
1 -> "番剧"
2 -> "电影"
diff --git a/src/main/kotlin/top/colter/mirai/plugin/bilibili/utils/translate/TransApi.kt b/src/main/kotlin/top/colter/mirai/plugin/bilibili/utils/translate/TransApi.kt
index 60d6bbe..5fa718c 100644
--- a/src/main/kotlin/top/colter/mirai/plugin/bilibili/utils/translate/TransApi.kt
+++ b/src/main/kotlin/top/colter/mirai/plugin/bilibili/utils/translate/TransApi.kt
@@ -62,7 +62,7 @@ fun trans(text: String): String? {
}
}
} catch (e: Exception) {
- BiliBiliDynamic.logger.error("Baidu translation failure! 百度翻译失败!")
+ BiliBiliDynamic.logger.error("Baidu translation failure! 百度翻译失败! $e")
}
} else {
return null
diff --git a/src/main/resources/image/HELP.png b/src/main/resources/image/HELP.png
index 48f025a..a71d684 100644
Binary files a/src/main/resources/image/HELP.png and b/src/main/resources/image/HELP.png differ