diff --git a/src/main/kotlin/info/alinadace/miraibot/annotation/BotFunction.kt b/src/main/kotlin/info/alinadace/miraibot/annotation/BotFunction.kt index d06997e..d82dc6c 100644 --- a/src/main/kotlin/info/alinadace/miraibot/annotation/BotFunction.kt +++ b/src/main/kotlin/info/alinadace/miraibot/annotation/BotFunction.kt @@ -11,4 +11,7 @@ import kotlin.reflect.KClass * @since 2024/8/29 下午3:48 * @see Service */ -annotation class BotFunction( vararg val value: KClass) +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.RUNTIME) +@org.springframework.stereotype.Service +annotation class BotFunction(vararg val value: KClass) diff --git a/src/main/kotlin/info/alinadace/miraibot/bean/BotConfiguration.kt b/src/main/kotlin/info/alinadace/miraibot/bean/BotConfiguration.kt index 1ad974f..5fb481d 100644 --- a/src/main/kotlin/info/alinadace/miraibot/bean/BotConfiguration.kt +++ b/src/main/kotlin/info/alinadace/miraibot/bean/BotConfiguration.kt @@ -1,22 +1,34 @@ package info.alinadace.miraibot.bean +import info.alinadace.miraibot.annotation.BotFunction import info.alinadace.miraibot.config.BotConfig -import info.alinadace.miraibot.enum.LoginType +import info.alinadace.miraibot.enums.LoginType +import info.alinadace.miraibot.service.Service +import jakarta.annotation.Resource import net.mamoe.mirai.Bot import net.mamoe.mirai.BotFactory import net.mamoe.mirai.auth.BotAuthorization +import net.mamoe.mirai.event.Event import net.mamoe.mirai.utils.BotConfiguration import org.springframework.boot.autoconfigure.AutoConfiguration import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.annotation.Bean +import java.util.Collections +import java.util.HashMap +import kotlin.reflect.KClass /** + * 机器人配置 * @author Kane * @since 2024/8/29 下午2:47 */ @AutoConfiguration @EnableConfigurationProperties(BotConfig::class) class BotConfiguration { + + @Resource + private val services: List> = Collections.emptyList(); + @Bean(initMethod = "login") fun bot(config: BotConfig): Bot{ return when (config.type) { @@ -29,6 +41,30 @@ class BotConfiguration { } } + @Bean + fun botFunctionMap(): HashMap, MutableList>>{ + val eventMap = HashMap, MutableList>>(); + for (service in services) { + val clazz = service::class + val annotations = clazz.annotations + if (annotations.isEmpty()) continue + var function: BotFunction? = null + for (annotation in annotations) { + if (annotation is BotFunction){ + function = annotation + } + } + if (function == null){ + continue + } + for (kClass in function.value) { + val serviceList = eventMap.getOrPut(kClass) { mutableListOf() } + serviceList.add(service) + } + } + return eventMap + } + private fun BotConfiguration.extracted() { fileBasedDeviceInfo() protocol = BotConfiguration.MiraiProtocol.ANDROID_WATCH diff --git a/src/main/kotlin/info/alinadace/miraibot/config/BotConfig.kt b/src/main/kotlin/info/alinadace/miraibot/config/BotConfig.kt index d4a7c84..9bc608a 100644 --- a/src/main/kotlin/info/alinadace/miraibot/config/BotConfig.kt +++ b/src/main/kotlin/info/alinadace/miraibot/config/BotConfig.kt @@ -1,6 +1,7 @@ package info.alinadace.miraibot.config -import info.alinadace.miraibot.enum.LoginType +import info.alinadace.miraibot.enums.LoginType +import org.springframework.beans.factory.annotation.Value import org.springframework.boot.context.properties.ConfigurationProperties /** @@ -12,4 +13,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties */ @ConfigurationProperties("bot") class BotConfig(val id: Long, val password: String, val type: LoginType) { + companion object { + @JvmStatic + val NULL_INSTANCE = BotConfig(0, "", LoginType.PASSWORD) + @JvmStatic + @Value("\${bot.admin}") + val ADMIN_ID: Long = 0; + } + fun isNull(config: BotConfig): Boolean { + return config == NULL_INSTANCE + } } diff --git a/src/main/kotlin/info/alinadace/miraibot/enum/EventType.kt b/src/main/kotlin/info/alinadace/miraibot/enum/EventType.kt deleted file mode 100644 index 293e72a..0000000 --- a/src/main/kotlin/info/alinadace/miraibot/enum/EventType.kt +++ /dev/null @@ -1,11 +0,0 @@ -package info.alinadace.miraibot.enum - -import net.mamoe.mirai.event.Event - -/** - * @author Kane - * @since 2024/8/29 下午3:56 - */ -enum class EventType(val event: Event) { - -} diff --git a/src/main/kotlin/info/alinadace/miraibot/enum/LoginType.kt b/src/main/kotlin/info/alinadace/miraibot/enums/LoginType.kt similarity index 83% rename from src/main/kotlin/info/alinadace/miraibot/enum/LoginType.kt rename to src/main/kotlin/info/alinadace/miraibot/enums/LoginType.kt index fe1001e..a250ffc 100644 --- a/src/main/kotlin/info/alinadace/miraibot/enum/LoginType.kt +++ b/src/main/kotlin/info/alinadace/miraibot/enums/LoginType.kt @@ -1,4 +1,4 @@ -package info.alinadace.miraibot.enum +package info.alinadace.miraibot.enums /** * 登录方式 diff --git a/src/main/kotlin/info/alinadace/miraibot/service/Constellation.kt b/src/main/kotlin/info/alinadace/miraibot/service/Constellation.kt deleted file mode 100644 index 205ffee..0000000 --- a/src/main/kotlin/info/alinadace/miraibot/service/Constellation.kt +++ /dev/null @@ -1,28 +0,0 @@ -package info.alinadace.miraibot.service - -import info.alinadace.miraibot.annotation.BotFunction -import net.mamoe.mirai.event.Event -import net.mamoe.mirai.event.events.GroupMessageEvent -import net.mamoe.mirai.event.events.MessageEvent - -/** - * @author Kane - * @since 2024/8/29 下午3:47 - */ -@BotFunction(MessageEvent::class, GroupMessageEvent::class) -class Constellation: Service{ - - /** - * 服务入口 - */ - override fun entrance(event: MessageEvent): Boolean { - TODO("Not yet implemented") - } - - /** - * 服务行为 - */ - override fun active(event: MessageEvent) { - TODO("Not yet implemented") - } -} diff --git a/src/main/kotlin/info/alinadace/miraibot/service/ExampleService.kt b/src/main/kotlin/info/alinadace/miraibot/service/ExampleService.kt new file mode 100644 index 0000000..8ba7df0 --- /dev/null +++ b/src/main/kotlin/info/alinadace/miraibot/service/ExampleService.kt @@ -0,0 +1,36 @@ +package info.alinadace.miraibot.service + +import info.alinadace.miraibot.annotation.BotFunction +import info.alinadace.miraibot.config.BotConfig +import net.mamoe.mirai.event.events.GroupMessageEvent +import net.mamoe.mirai.event.events.MessageEvent +import net.mamoe.mirai.message.data.PlainText + +/** + * @author Kane + * @since 2024/8/29 下午3:47 + */ +@BotFunction(MessageEvent::class, GroupMessageEvent::class) +class ExampleService: Service{ + + + /** + * 服务入口 + */ + override fun entrance(event: MessageEvent): Boolean { + val chain = event.message + if (chain.size == 1 && chain[0] is PlainText){ + if (chain[0].contentToString() == "测试" && event.sender.id == BotConfig.ADMIN_ID) { + return true + } + } + return false + } + + /** + * 服务行为 + */ + override suspend fun active(event: MessageEvent) { + event.subject.sendMessage("测试成功") + } +} diff --git a/src/main/kotlin/info/alinadace/miraibot/service/Service.kt b/src/main/kotlin/info/alinadace/miraibot/service/Service.kt index 64acec5..ce93ca6 100644 --- a/src/main/kotlin/info/alinadace/miraibot/service/Service.kt +++ b/src/main/kotlin/info/alinadace/miraibot/service/Service.kt @@ -16,5 +16,5 @@ interface Service { /** * 服务行为 */ - fun active(event: E) + suspend fun active(event: E) } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index b1931ae..8e9b43a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -5,3 +5,4 @@ spring: active: @profiles.active@ bot: type: qrcode + admin: 1075576561