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()