From 6ced509304276b04ad8a2fd83d39ee4a469edf30 Mon Sep 17 00:00:00 2001 From: cssxsh Date: Sat, 21 Jan 2023 14:53:33 +0800 Subject: [PATCH 1/3] add: console event impl --- .../src/events/AutoLoginEvent.kt | 32 +++++++++++++++++++ .../mirai-console/src/events/StartupEvent.kt | 22 +++++++++++++ .../MiraiConsoleImplementationBridge.kt | 19 ++++++++++- 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt create mode 100644 mirai-console/backend/mirai-console/src/events/StartupEvent.kt diff --git a/mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt b/mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt new file mode 100644 index 00000000000..16e60f41e29 --- /dev/null +++ b/mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2019-2023 Mamoe Technologies and contributors. + * + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. + * + * https://github.com/mamoe/mirai/blob/dev/LICENSE + */ + +package net.mamoe.mirai.console.events + +import net.mamoe.mirai.Bot +import net.mamoe.mirai.event.AbstractEvent +import net.mamoe.mirai.console.internal.* +import net.mamoe.mirai.event.events.BotEvent + +/** + * 自动登陆执行后广播的指令 + * @property bot 登录的BOT + * @see MiraiConsoleImplementationBridge.doStart + */ +public sealed class AutoLoginEvent : BotEvent, ConsoleEvent, AbstractEvent() { + /** + * 登录成功 + */ + public class Success(override val bot: Bot): AutoLoginEvent() + + /** + * 登录失败 + */ + public class Failure(override val bot: Bot, public val cause: Throwable): AutoLoginEvent() +} \ No newline at end of file diff --git a/mirai-console/backend/mirai-console/src/events/StartupEvent.kt b/mirai-console/backend/mirai-console/src/events/StartupEvent.kt new file mode 100644 index 00000000000..23a843fec6d --- /dev/null +++ b/mirai-console/backend/mirai-console/src/events/StartupEvent.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2019-2023 Mamoe Technologies and contributors. + * + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. + * + * https://github.com/mamoe/mirai/blob/dev/LICENSE + */ + +package net.mamoe.mirai.console.events + +import net.mamoe.mirai.console.extensions.PostStartupExtension +import net.mamoe.mirai.event.AbstractEvent +import net.mamoe.mirai.console.internal.* + +/** + * 在 Console 启动完成后广播的事件 + * @property timestamp 启动完成的时间戳 + * @see MiraiConsoleImplementationBridge.doStart + * @see PostStartupExtension + */ +public class StartupEvent(public val timestamp: Long) : ConsoleEvent, AbstractEvent() \ No newline at end of file diff --git a/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt b/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt index 2f14a0b2712..15052c8f131 100644 --- a/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt +++ b/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt @@ -13,6 +13,7 @@ package net.mamoe.mirai.console.internal import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.Job +import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import me.him188.kotlin.dynamic.delegation.dynamicDelegation import net.mamoe.mirai.Bot @@ -26,6 +27,8 @@ import net.mamoe.mirai.console.command.ConsoleCommandSender import net.mamoe.mirai.console.command.descriptor.ExperimentalCommandDescriptors import net.mamoe.mirai.console.command.parse.SpaceSeparatedCommandCallParser import net.mamoe.mirai.console.command.resolve.BuiltInCommandCallResolver +import net.mamoe.mirai.console.events.AutoLoginEvent +import net.mamoe.mirai.console.events.StartupEvent import net.mamoe.mirai.console.extensions.CommandCallParserProvider import net.mamoe.mirai.console.extensions.CommandCallResolverProvider import net.mamoe.mirai.console.extensions.PermissionServiceProvider @@ -58,6 +61,7 @@ import net.mamoe.mirai.console.util.ConsoleExperimentalApi import net.mamoe.mirai.console.util.ConsoleInput import net.mamoe.mirai.console.util.SemVersion import net.mamoe.mirai.console.util.cast +import net.mamoe.mirai.event.broadcast import net.mamoe.mirai.utils.* import java.time.Instant import java.time.ZoneId @@ -410,16 +414,29 @@ ___ ____ _ _____ _ } } - runCatching { bot.login() }.getOrElse { + runCatching { + bot.login() + }.onSuccess { + launch { + AutoLoginEvent.Success(bot = bot).broadcast() + } + }.onFailure { mainLogger.error(it) bot.close() + launch { + AutoLoginEvent.Failure(bot = bot, cause = it).broadcast() + } } } } } + val startuped = currentTimeSeconds() phase("finally post") { + launch { + StartupEvent(timestamp = startuped).broadcast() + } globalComponentStorage.useEachExtensions(PostStartupExtension) { it.invoke() } } From f3de5440bb78dfc02ab79ebc102bfb681ad83bb9 Mon Sep 17 00:00:00 2001 From: cssxsh Date: Sun, 22 Jan 2023 01:43:47 +0800 Subject: [PATCH 2/3] add: internal annotation --- .../compatibility-validation/jvm/api/jvm.api | 16 ++++++++++++++++ .../mirai-console/src/events/AutoLoginEvent.kt | 12 +++++++++--- .../mirai-console/src/events/StartupEvent.kt | 5 ++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/mirai-console/backend/mirai-console/compatibility-validation/jvm/api/jvm.api b/mirai-console/backend/mirai-console/compatibility-validation/jvm/api/jvm.api index 236ca0e16b6..0bf9c5f3661 100644 --- a/mirai-console/backend/mirai-console/compatibility-validation/jvm/api/jvm.api +++ b/mirai-console/backend/mirai-console/compatibility-validation/jvm/api/jvm.api @@ -1283,9 +1283,25 @@ public final class net/mamoe/mirai/console/data/java/JavaAutoSavePluginData$Comp public final fun createKType (Ljava/lang/Class;[Lkotlin/reflect/KType;)Lkotlin/reflect/KType; } +public abstract class net/mamoe/mirai/console/events/AutoLoginEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/console/events/ConsoleEvent, net/mamoe/mirai/event/events/BotEvent { +} + +public final class net/mamoe/mirai/console/events/AutoLoginEvent$Failure : net/mamoe/mirai/console/events/AutoLoginEvent { + public fun getBot ()Lnet/mamoe/mirai/Bot; + public final fun getCause ()Ljava/lang/Throwable; +} + +public final class net/mamoe/mirai/console/events/AutoLoginEvent$Success : net/mamoe/mirai/console/events/AutoLoginEvent { + public fun getBot ()Lnet/mamoe/mirai/Bot; +} + public abstract interface class net/mamoe/mirai/console/events/ConsoleEvent : net/mamoe/mirai/event/Event { } +public final class net/mamoe/mirai/console/events/StartupEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/console/events/ConsoleEvent { + public final fun getTimestamp ()J +} + public abstract class net/mamoe/mirai/console/extension/AbstractExtensionPoint : net/mamoe/mirai/console/extension/ExtensionPoint { public fun (Lkotlin/reflect/KClass;)V public fun getExtensionType ()Lkotlin/reflect/KClass; diff --git a/mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt b/mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt index 16e60f41e29..8dfe8f36443 100644 --- a/mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt +++ b/mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt @@ -13,9 +13,10 @@ import net.mamoe.mirai.Bot import net.mamoe.mirai.event.AbstractEvent import net.mamoe.mirai.console.internal.* import net.mamoe.mirai.event.events.BotEvent +import net.mamoe.mirai.utils.MiraiInternalApi /** - * 自动登陆执行后广播的指令 + * 自动登陆执行后广播的事件 * @property bot 登录的BOT * @see MiraiConsoleImplementationBridge.doStart */ @@ -23,10 +24,15 @@ public sealed class AutoLoginEvent : BotEvent, ConsoleEvent, AbstractEvent() { /** * 登录成功 */ - public class Success(override val bot: Bot): AutoLoginEvent() + public class Success @MiraiInternalApi constructor( + override val bot: Bot + ) : AutoLoginEvent() /** * 登录失败 */ - public class Failure(override val bot: Bot, public val cause: Throwable): AutoLoginEvent() + public class Failure @MiraiInternalApi constructor( + override val bot: Bot, + public val cause: Throwable + ) : AutoLoginEvent() } \ No newline at end of file diff --git a/mirai-console/backend/mirai-console/src/events/StartupEvent.kt b/mirai-console/backend/mirai-console/src/events/StartupEvent.kt index 23a843fec6d..9c23267e378 100644 --- a/mirai-console/backend/mirai-console/src/events/StartupEvent.kt +++ b/mirai-console/backend/mirai-console/src/events/StartupEvent.kt @@ -12,6 +12,7 @@ package net.mamoe.mirai.console.events import net.mamoe.mirai.console.extensions.PostStartupExtension import net.mamoe.mirai.event.AbstractEvent import net.mamoe.mirai.console.internal.* +import net.mamoe.mirai.utils.MiraiInternalApi /** * 在 Console 启动完成后广播的事件 @@ -19,4 +20,6 @@ import net.mamoe.mirai.console.internal.* * @see MiraiConsoleImplementationBridge.doStart * @see PostStartupExtension */ -public class StartupEvent(public val timestamp: Long) : ConsoleEvent, AbstractEvent() \ No newline at end of file +public class StartupEvent @MiraiInternalApi constructor( + public val timestamp: Long +) : ConsoleEvent, AbstractEvent() \ No newline at end of file From 0d185356a6829aca60c5d607ff85b3295f2cbfc0 Mon Sep 17 00:00:00 2001 From: cssxsh Date: Sun, 5 Feb 2023 19:01:23 +0800 Subject: [PATCH 3/3] add: since 2.15 --- .../backend/mirai-console/src/events/AutoLoginEvent.kt | 3 ++- mirai-console/backend/mirai-console/src/events/StartupEvent.kt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt b/mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt index 8dfe8f36443..138eaf8a2bf 100644 --- a/mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt +++ b/mirai-console/backend/mirai-console/src/events/AutoLoginEvent.kt @@ -16,9 +16,10 @@ import net.mamoe.mirai.event.events.BotEvent import net.mamoe.mirai.utils.MiraiInternalApi /** - * 自动登陆执行后广播的事件 + * 自动登录执行后广播的事件 * @property bot 登录的BOT * @see MiraiConsoleImplementationBridge.doStart + * @since 2.15 */ public sealed class AutoLoginEvent : BotEvent, ConsoleEvent, AbstractEvent() { /** diff --git a/mirai-console/backend/mirai-console/src/events/StartupEvent.kt b/mirai-console/backend/mirai-console/src/events/StartupEvent.kt index 9c23267e378..b5484dc2404 100644 --- a/mirai-console/backend/mirai-console/src/events/StartupEvent.kt +++ b/mirai-console/backend/mirai-console/src/events/StartupEvent.kt @@ -19,6 +19,7 @@ import net.mamoe.mirai.utils.MiraiInternalApi * @property timestamp 启动完成的时间戳 * @see MiraiConsoleImplementationBridge.doStart * @see PostStartupExtension + * @since 2.15 */ public class StartupEvent @MiraiInternalApi constructor( public val timestamp: Long