From b8bb129ac108fc8fa73a28a0a36e035ee46bd789 Mon Sep 17 00:00:00 2001 From: Him188 Date: Wed, 23 Sep 2020 09:49:49 +0800 Subject: [PATCH 1/4] Update CONTRIBUTING.md --- CONTRIBUTING.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b92b21c30..bab6164fc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,6 +16,12 @@ mirai 欢迎一切形式的代码贡献。你可以通过以下几种途径向 m ### 能做什么? +#### 分支 + +- `master`: 最新稳定版 +- `1.x`: 1.x 现有版本的开发 +- `dev`: 2.0 重构版本的开发 + **请基于 `master` 分支进行文档修改; 基于 `dev` 分支进行其他修改 (否则你的修改可能被关闭或不会立即合并)** - 代码优化: 优化任何功能设计或实现, 或是引入一个新的设计(请先通过 issue 与维护者达成共识) From 648777e1bd067df5f2f7bd3b545d8a2e7eb48df9 Mon Sep 17 00:00:00 2001 From: sandtechnology <20417547+sandtechnology@users.noreply.github.com> Date: Mon, 28 Sep 2020 12:45:26 +0800 Subject: [PATCH 2/4] Ignore auto reply message (#607) * try to fix #358 according to @Mar8s comment * Disable mirror * Cancel group coroutine when bot leave group and fire event separately * Re-add 0x82 and 0x83 * Revert else logic * Fix build * ignore auto reply message Co-authored-by: Him188 --- .../protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt index d2a0a9c59..719a09dde 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt @@ -328,9 +328,12 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory Date: Mon, 28 Sep 2020 13:29:45 +0800 Subject: [PATCH 3/4] Standard Captcha update (#543) * Standard Captcha update - Add icon - Typo - System tips * Remove unnecessary message. * Update WindowHelperJvm.kt --- .../net/mamoe/mirai/utils/LoginSolver.jvm.kt | 2 +- .../net/mamoe/mirai/utils/WindowHelperJvm.kt | 73 +++++++++++++++--- .../net/mamoe/mirai/utils/project-mirai.png | Bin 0 -> 38615 bytes 3 files changed, 62 insertions(+), 13 deletions(-) create mode 100644 mirai-core/src/jvmMain/resources/net/mamoe/mirai/utils/project-mirai.png diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt index 86e0a8b0b..45a50ad84 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt @@ -95,7 +95,7 @@ public class StandardCharImageLoginSolver( if (img == null) { logger.info("无法创建字符图片. 请查看文件") } else { - logger.info(img.createCharImg()) + logger.info("\n" + img.createCharImg()) } } catch (throwable: Throwable) { logger.info("创建字符图片时出错($throwable)。请查看文件") diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/WindowHelperJvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/WindowHelperJvm.kt index b0f5cc082..315a438fe 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/WindowHelperJvm.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/WindowHelperJvm.kt @@ -16,25 +16,66 @@ package net.mamoe.mirai.utils import kotlinx.coroutines.CompletableDeferred import java.awt.BorderLayout import java.awt.Desktop +import java.awt.Dimension +import java.awt.Toolkit import java.awt.event.KeyEvent import java.awt.event.KeyListener import java.awt.event.WindowAdapter import java.awt.event.WindowEvent +import java.awt.image.BufferedImage +import java.io.File +import javax.imageio.ImageIO import javax.swing.JFrame import javax.swing.JTextField import javax.swing.SwingUtilities // 隔离类代码 +@Suppress("DEPRECATION") internal object WindowHelperJvm { - internal val isDesktopSupported: Boolean = - kotlin.runCatching { - System.getProperty("mirai.no-desktop") === null && Desktop.isDesktopSupported() - }.getOrElse { + internal val isDesktopSupported: Boolean = kotlin.run { + if (System.getProperty("mirai.no-desktop") === null) { + kotlin.runCatching { + Class.forName("java.awt.Desktop") + Class.forName("java.awt.Toolkit") + }.onFailure { return@run false } // Android OS + kotlin.runCatching { + Toolkit.getDefaultToolkit() + }.onFailure { // AWT Error, #270 + return@run false + } + kotlin.runCatching { + Desktop.isDesktopSupported().also { stat -> + if (stat) { + MiraiLogger.info( + """ + Mirai 正在使用桌面环境, + 如果你正在使用SSH, 或无法访问桌面等, + 请将 `mirai.no-desktop` 添加到 JVM 系统属性中 (-Dmirai.no-desktop) + 然后重启 Mirai + """.trimIndent() + ) + MiraiLogger.info( + """ + Mirai using DesktopCaptcha System. + If you are running on SSH, cannot access desktop or more. + Please add `mirai.no-desktop` to JVM properties (-Dmirai.no-desktop) + Then restart mirai + """.trimIndent() + ) + } + } + }.getOrElse { + // Should not happen + MiraiLogger.warning("Exception in checking desktop support.", it) + false + } + } else { false } + } } -internal class WindowInitialzier(private val initializer: WindowInitialzier.(JFrame) -> Unit) { +internal class WindowInitializer(private val initializer: WindowInitializer.(JFrame) -> Unit) { private lateinit var frame0: JFrame val frame: JFrame get() = frame0 fun java.awt.Component.append() { @@ -51,12 +92,20 @@ internal class WindowInitialzier(private val initializer: WindowInitialzier.(JFr } } -internal suspend fun openWindow(title: String = "", initializer: WindowInitialzier.(JFrame) -> Unit = {}): String { - return openWindow(title, WindowInitialzier(initializer)) +internal val windowIcon: BufferedImage? by lazy { + WindowHelperJvm::class.java.getResourceAsStream("project-mirai.png")?.use { + ImageIO.read(it) + } } -internal suspend fun openWindow(title: String = "", initializer: WindowInitialzier = WindowInitialzier {}): String { +internal suspend fun openWindow(title: String = "", initializer: WindowInitializer.(JFrame) -> Unit = {}): String { + return openWindow(title, WindowInitializer(initializer)) +} + +internal suspend fun openWindow(title: String = "", initializer: WindowInitializer = WindowInitializer {}): String { val frame = JFrame() + frame.iconImage = windowIcon + frame.minimumSize = Dimension(228, 62) // From Windows 10 val value = JTextField() val def = CompletableDeferred() value.addKeyListener(object : KeyListener { @@ -89,9 +138,9 @@ internal suspend fun openWindow(title: String = "", initializer: WindowInitialzi frame.title = title frame.isVisible = true - val result = def.await().trim() - SwingUtilities.invokeLater { - frame.dispose() + return def.await().trim().also { + SwingUtilities.invokeLater { + frame.dispose() + } } - return result } diff --git a/mirai-core/src/jvmMain/resources/net/mamoe/mirai/utils/project-mirai.png b/mirai-core/src/jvmMain/resources/net/mamoe/mirai/utils/project-mirai.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb3a6abad588cf8cd2bab3f9d7a0e65510d8564 GIT binary patch literal 38615 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 literal 0 HcmV?d00001 From 8f7a9f21aa1cfb5d72b6ec75c7ea3bc842e08f89 Mon Sep 17 00:00:00 2001 From: Karlatemp Date: Fri, 2 Oct 2020 23:17:56 +0800 Subject: [PATCH 4/4] Remove md5 --- build.gradle.kts | 2 ++ buildSrc/src/main/kotlin/PublishingHelpers.kt | 4 ++++ gradle/publish.gradle | 2 ++ 3 files changed, 8 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index ec482f51e..abc80e711 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -118,6 +118,7 @@ subprojects { } } + /* val shadowJarMd5 = tasks.register("shadowJarMd5") { dependsOn("shadowJvmJar") @@ -140,6 +141,7 @@ subprojects { tasks.getByName("publish").dependsOn(this) tasks.getByName("bintrayUpload").dependsOn(this) }.get() + */ val githubUpload by tasks.creating { group = "mirai" diff --git a/buildSrc/src/main/kotlin/PublishingHelpers.kt b/buildSrc/src/main/kotlin/PublishingHelpers.kt index 884eab575..ed44db5c8 100644 --- a/buildSrc/src/main/kotlin/PublishingHelpers.kt +++ b/buildSrc/src/main/kotlin/PublishingHelpers.kt @@ -73,6 +73,7 @@ inline fun Project.setupPublishing( // afterEvaluate { + /* val shadowJar = tasks.filterIsInstance().firstOrNull() ?: return//@afterEvaluate tasks.register("shadowJarMd5") { @@ -97,6 +98,7 @@ inline fun Project.setupPublishing( tasks.getByName("publish").dependsOn(this) tasks.getByName("bintrayUpload").dependsOn(this) } + */ if (Bintray.isBintrayAvailable(project)) { bintray { @@ -136,11 +138,13 @@ inline fun Project.setupPublishing( publications { register("mavenJava", MavenPublication::class) { from(components["java"]) + /* afterEvaluate { for (file in tasks.getByName("shadowJarMd5").outputs.files) { artifact(provider { file }) } } + */ groupId = rootProject.group.toString() this.artifactId = artifactId diff --git a/gradle/publish.gradle b/gradle/publish.gradle index e062df133..9c9c7b62c 100644 --- a/gradle/publish.gradle +++ b/gradle/publish.gradle @@ -123,10 +123,12 @@ afterEvaluate { case 'jvm': it.artifactId = isKotlin137x ? "$variantName" : "$variantName-jvm" + /* def files = tasks.getByName("shadowJarMd5").outputs.files + tasks.getByName("shadowJvmJar").outputs.files for (f in files) { artifact f } + */ break case 'js':