From bcfc156bd01f8da08e8b30258e5dcc05270686f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=AD=B1=E5=82=91?= <840465812@qq.com>
Date: Wed, 15 Dec 2021 22:11:53 +0800
Subject: [PATCH] V0.1.0
---
build.gradle.kts | 4 +-
settings.gradle.kts | 2 +-
.../example/mirai/plugin/JavaPluginMain.java | 51 ----------
src/main/kotlin/JPACommand.kt | 24 +++++
src/main/kotlin/JPAPluginConfig.kt | 10 ++
src/main/kotlin/JPictureArchiving.kt | 57 ++++++++++++
src/main/kotlin/PluginMain.kt | 93 -------------------
...t.mamoe.mirai.console.plugin.jvm.JvmPlugin | 2 +-
src/test/kotlin/RunMirai.kt | 5 +-
9 files changed, 98 insertions(+), 150 deletions(-)
delete mode 100644 src/main/java/org/example/mirai/plugin/JavaPluginMain.java
create mode 100644 src/main/kotlin/JPACommand.kt
create mode 100644 src/main/kotlin/JPAPluginConfig.kt
create mode 100644 src/main/kotlin/JPictureArchiving.kt
delete mode 100644 src/main/kotlin/PluginMain.kt
diff --git a/build.gradle.kts b/build.gradle.kts
index 04a890b..ddae64a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -3,10 +3,10 @@ plugins {
kotlin("jvm") version kotlinVersion
kotlin("plugin.serialization") version kotlinVersion
- id("net.mamoe.mirai-console") version "2.6.6"
+ id("net.mamoe.mirai-console") version "2.9.0-RC"
}
-group = "org.example"
+group = "top.jie65535"
version = "0.1.0"
repositories {
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 064e7f6..15e299a 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -6,4 +6,4 @@ pluginManagement {
maven("https://dl.bintray.com/kotlin/kotlin-eap")
}
}
-rootProject.name = "mirai-console-plugin-template"
\ No newline at end of file
+rootProject.name = "mirai-console-jpa-plugin"
\ No newline at end of file
diff --git a/src/main/java/org/example/mirai/plugin/JavaPluginMain.java b/src/main/java/org/example/mirai/plugin/JavaPluginMain.java
deleted file mode 100644
index 6bba1d2..0000000
--- a/src/main/java/org/example/mirai/plugin/JavaPluginMain.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.example.mirai.plugin;
-
-import net.mamoe.mirai.console.plugin.jvm.JavaPlugin;
-import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription;
-import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescriptionBuilder;
-import net.mamoe.mirai.event.Event;
-import net.mamoe.mirai.event.EventChannel;
-import net.mamoe.mirai.event.GlobalEventChannel;
-import net.mamoe.mirai.event.events.FriendMessageEvent;
-import net.mamoe.mirai.event.events.GroupMessageEvent;
-
-
-/**
- * 使用 Java 请把
- * {@code /src/main/resources/META-INF.services/net.mamoe.mirai.console.plugin.jvm.JvmPlugin}
- * 文件内容改成 {@code org.example.mirai.plugin.JavaPluginMain}
- * 也就是当前主类全类名
- *
- * 使用 Java 可以把 kotlin 源集删除且不会对项目有影响
- *
- * 在 {@code settings.gradle.kts} 里改构建的插件名称、依赖库和插件版本
- *
- * 在该示例下的 {@link JvmPluginDescription} 修改插件名称,id 和版本等
- *
- * 可以使用 {@code src/test/kotlin/RunMirai.kt} 在 IDE 里直接调试,
- * 不用复制到 mirai-console-loader 或其他启动器中调试
- */
-
-public final class JavaPluginMain extends JavaPlugin {
- public static final JavaPluginMain INSTANCE = new JavaPluginMain();
- private JavaPluginMain() {
- super(new JvmPluginDescriptionBuilder("org.example.mirai-example", "0.1.0")
- .info("EG")
- .build());
- }
-
- @Override
- public void onEnable() {
- getLogger().info("日志");
- EventChannel eventChannel = GlobalEventChannel.INSTANCE.parentScope(this);
- eventChannel.subscribeAlways(GroupMessageEvent.class, g -> {
- //监听群消息
- getLogger().info(g.getMessage().contentToString());
-
- });
- eventChannel.subscribeAlways(FriendMessageEvent.class, f -> {
- //监听好友消息
- getLogger().info(f.getMessage().contentToString());
- });
- }
-}
diff --git a/src/main/kotlin/JPACommand.kt b/src/main/kotlin/JPACommand.kt
new file mode 100644
index 0000000..ecc89d9
--- /dev/null
+++ b/src/main/kotlin/JPACommand.kt
@@ -0,0 +1,24 @@
+package top.jie65535.jpa
+
+import net.mamoe.mirai.console.command.CommandSender
+import net.mamoe.mirai.console.command.CompositeCommand
+
+object JPACommand : CompositeCommand(
+ JPictureArchiving,"jpa",
+ description = "图片存档插件命令"
+) {
+
+ @SubCommand("setDir")
+ @Description("设置图片存档目录")
+ suspend fun CommandSender.setDir(dir: String) {
+ JPAPluginConfig.archiveDirectory = dir
+ sendMessage("OK")
+ }
+
+ @SubCommand("reset")
+ @Description("重置存档目录到插件数据目录")
+ suspend fun CommandSender.resetDir() {
+ JPAPluginConfig.archiveDirectory = ""
+ sendMessage("OK")
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/JPAPluginConfig.kt b/src/main/kotlin/JPAPluginConfig.kt
new file mode 100644
index 0000000..601374f
--- /dev/null
+++ b/src/main/kotlin/JPAPluginConfig.kt
@@ -0,0 +1,10 @@
+package top.jie65535.jpa
+
+import net.mamoe.mirai.console.data.AutoSavePluginConfig
+import net.mamoe.mirai.console.data.ValueDescription
+import net.mamoe.mirai.console.data.value
+
+object JPAPluginConfig : AutoSavePluginConfig("jpa") {
+ @ValueDescription("指定存档根目录 为空则保存到插件数据目录")
+ var archiveDirectory: String by value()
+}
\ No newline at end of file
diff --git a/src/main/kotlin/JPictureArchiving.kt b/src/main/kotlin/JPictureArchiving.kt
new file mode 100644
index 0000000..4d91e5f
--- /dev/null
+++ b/src/main/kotlin/JPictureArchiving.kt
@@ -0,0 +1,57 @@
+package top.jie65535.jpa
+
+import net.mamoe.mirai.console.command.CommandManager.INSTANCE.register
+import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
+import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
+import net.mamoe.mirai.event.events.MessageEvent
+import net.mamoe.mirai.event.globalEventChannel
+import net.mamoe.mirai.message.data.Image
+import net.mamoe.mirai.message.data.Image.Key.queryUrl
+import net.mamoe.mirai.utils.info
+import okhttp3.OkHttpClient
+import okhttp3.Request
+import java.io.File
+import java.util.concurrent.TimeUnit
+
+
+object JPictureArchiving : KotlinPlugin(
+ JvmPluginDescription(
+ id = "top.jie65535.mirai-console-jpa-plugin",
+ name = "J Picture Archiving",
+ version = "0.1.0"
+ ) {
+ author("jie65535")
+ info("这个插件只做一件事,将机器人收到的所有图片存档")
+ }
+) {
+ private val okHttpClient: OkHttpClient by lazy {
+ OkHttpClient.Builder()
+ .readTimeout(30, TimeUnit.SECONDS)
+ .build()
+ }
+ override fun onEnable() {
+ logger.info { "Plugin loaded" }
+ JPAPluginConfig.reload()
+ JPACommand.register()
+
+ globalEventChannel().subscribeAlways {
+ message.filterIsInstance().forEach {
+ val url = it.queryUrl()
+ val filePath = "${this.subject.id}/${it.imageId}"
+ val file = if (JPAPluginConfig.archiveDirectory.isBlank()) {
+ resolveDataFile(filePath)
+ } else {
+ File(JPAPluginConfig.archiveDirectory, filePath)
+ }
+ if (!file.exists()) {
+ val request = Request.Builder().url(url).build()
+ val imageByte = okHttpClient.newCall(request).execute().body!!.bytes()
+ val fileParent = file.parentFile
+ if (!fileParent.exists()) fileParent.mkdirs()
+ file.writeBytes(imageByte)
+ logger.info("Saved ${file.path}.")
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/kotlin/PluginMain.kt b/src/main/kotlin/PluginMain.kt
deleted file mode 100644
index f7d51b4..0000000
--- a/src/main/kotlin/PluginMain.kt
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.example.mirai.plugin
-
-import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
-import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
-import net.mamoe.mirai.event.EventChannel
-import net.mamoe.mirai.event.GlobalEventChannel
-import net.mamoe.mirai.event.events.BotInvitedJoinGroupRequestEvent
-import net.mamoe.mirai.event.events.FriendMessageEvent
-import net.mamoe.mirai.event.events.GroupMessageEvent
-import net.mamoe.mirai.event.events.NewFriendRequestEvent
-import net.mamoe.mirai.event.globalEventChannel
-import net.mamoe.mirai.message.data.Image
-import net.mamoe.mirai.message.data.Image.Key.queryUrl
-import net.mamoe.mirai.message.data.PlainText
-import net.mamoe.mirai.utils.info
-
-/**
- * 使用 kotlin 版请把
- * `src/main/resources/META-INF.services/net.mamoe.mirai.console.plugin.jvm.JvmPlugin`
- * 文件内容改成 `org.example.mirai.plugin.PluginMain` 也就是当前主类全类名
- *
- * 使用 kotlin 可以把 java 源集删除不会对项目有影响
- *
- * 在 `settings.gradle.kts` 里改构建的插件名称、依赖库和插件版本
- *
- * 在该示例下的 [JvmPluginDescription] 修改插件名称,id和版本,etc
- *
- * 可以使用 `src/test/kotlin/RunMirai.kt` 在 ide 里直接调试,
- * 不用复制到 mirai-console-loader 或其他启动器中调试
- */
-
-object PluginMain : KotlinPlugin(
- JvmPluginDescription(
- id = "org.example.mirai-example",
- name = "插件示例",
- version = "0.1.0"
- ) {
- author("作者名称或联系方式")
- info(
- """
- 这是一个测试插件,
- 在这里描述插件的功能和用法等.
- """.trimIndent()
- )
- // author 和 info 可以删除.
- }
-) {
- override fun onEnable() {
- logger.info { "Plugin loaded" }
- //配置文件目录 "${dataFolder.absolutePath}/"
- val eventChannel = GlobalEventChannel.parentScope(this)
- eventChannel.subscribeAlways{
- //群消息
- //复读示例
- if (message.contentToString().startsWith("复读")) {
- group.sendMessage(message.contentToString().replace("复读", ""))
- }
- if (message.contentToString() == "hi") {
- //群内发送
- group.sendMessage("hi")
- //向发送者私聊发送消息
- sender.sendMessage("hi")
- //不继续处理
- return@subscribeAlways
- }
- //分类示例
- message.forEach {
- //循环每个元素在消息里
- if (it is Image) {
- //如果消息这一部分是图片
- val url = it.queryUrl()
- group.sendMessage("图片,下载地址$url")
- }
- if (it is PlainText) {
- //如果消息这一部分是纯文本
- group.sendMessage("纯文本,内容:${it.content}")
- }
- }
- }
- eventChannel.subscribeAlways{
- //好友信息
- sender.sendMessage("hi")
- }
- eventChannel.subscribeAlways{
- //自动同意好友申请
- accept()
- }
- eventChannel.subscribeAlways{
- //自动同意加群申请
- accept()
- }
- }
-}
diff --git a/src/main/resources/META-INF/services/net.mamoe.mirai.console.plugin.jvm.JvmPlugin b/src/main/resources/META-INF/services/net.mamoe.mirai.console.plugin.jvm.JvmPlugin
index 0bed70b..0e0f902 100644
--- a/src/main/resources/META-INF/services/net.mamoe.mirai.console.plugin.jvm.JvmPlugin
+++ b/src/main/resources/META-INF/services/net.mamoe.mirai.console.plugin.jvm.JvmPlugin
@@ -1 +1 @@
-org.example.mirai.plugin.PluginMain
\ No newline at end of file
+top.jie65535.jpa.JPictureArchiving
\ No newline at end of file
diff --git a/src/test/kotlin/RunMirai.kt b/src/test/kotlin/RunMirai.kt
index 9fdb837..3d85a63 100644
--- a/src/test/kotlin/RunMirai.kt
+++ b/src/test/kotlin/RunMirai.kt
@@ -5,13 +5,14 @@ import net.mamoe.mirai.console.MiraiConsole
import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.enable
import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.load
import net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader
+import top.jie65535.jpa.JPictureArchiving
suspend fun main() {
MiraiConsoleTerminalLoader.startAsDaemon()
//如果是Kotlin
- PluginMain.load()
- PluginMain.enable()
+ JPictureArchiving.load()
+ JPictureArchiving.enable()
//如果是Java
// JavaPluginMain.INSTANCE.load()
// JavaPluginMain.INSTANCE.enable()