From c141438048fc71feeff7b64accd9c51663ec3139 Mon Sep 17 00:00:00 2001 From: Grand-cocoa <1075576561@qq.com49111108+grand-cocoa@users.noreply.github.com> Date: Mon, 23 Sep 2024 18:36:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=85=8D=E7=BD=AE=E4=B8=8E=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=BC=80=E5=90=AF=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除未使用的登录类型枚举 `LoginType`。- 简化 `BotConfiguration` 中的 `starter` 方法,并移除注释代码。 - 在 `Initialization.kt` 中更新日志信息,并移除全局事件监听器的死代码。 -调整 `SakuramikiApplication.kt`,引入 `MapperScan` 注解以自动扫描Mapper。 - 修正 `application.yml` 中的配置格式问题。 - 在 `application-dev.yml` 和 `application-prod.yml` 中分别设置沙盒模式的配置。 此外,废弃饮用水提醒服务。 注意:部分代码调整涉及异步函数修改为同步,可能需要关注并测试相关功能的完整性。 --- pom.xml | 4 ++ .../sakuramiki/SakuramikiApplication.kt | 2 + .../sakuramiki/bean/BotConfiguration.kt | 29 +++++-------- .../sakuramiki/configuration/BotConfig.kt | 28 +++++-------- .../configuration/Initialization.kt | 41 ++++++++++++------- .../alinadace/sakuramiki/enums/LoginType.kt | 18 -------- .../sakuramiki/service/ExampleService.kt | 31 +++++++------- .../alinadace/sakuramiki/service/Service.kt | 2 +- .../service/drink_water/DisableService.kt | 6 +-- .../service/drink_water/EnableService.kt | 6 +-- .../drink_water/mapper/DrinkWaterMapper.kt | 3 +- .../drink_water/task/ReminderService.kt | 12 +++--- src/main/resources/application-dev.yml | 2 + src/main/resources/application-prod.yml | 2 + src/main/resources/application.yml | 1 + 15 files changed, 88 insertions(+), 99 deletions(-) delete mode 100644 src/main/kotlin/info/alinadace/sakuramiki/enums/LoginType.kt diff --git a/pom.xml b/pom.xml index e9705e3..4896fd3 100644 --- a/pom.xml +++ b/pom.xml @@ -123,6 +123,10 @@ mybatis-plus-spring-boot3-starter 3.5.7 + + org.springframework.boot + spring-boot-starter-actuator + diff --git a/src/main/kotlin/info/alinadace/sakuramiki/SakuramikiApplication.kt b/src/main/kotlin/info/alinadace/sakuramiki/SakuramikiApplication.kt index 5901f5c..a272447 100644 --- a/src/main/kotlin/info/alinadace/sakuramiki/SakuramikiApplication.kt +++ b/src/main/kotlin/info/alinadace/sakuramiki/SakuramikiApplication.kt @@ -1,9 +1,11 @@ package info.alinadace.sakuramiki +import org.mybatis.spring.annotation.MapperScan import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication @SpringBootApplication +@MapperScan("info.alinadace.sakuramiki.service.**.mapper") class SakuramikiApplication fun main(args: Array) { diff --git a/src/main/kotlin/info/alinadace/sakuramiki/bean/BotConfiguration.kt b/src/main/kotlin/info/alinadace/sakuramiki/bean/BotConfiguration.kt index cb90b16..caad4ee 100644 --- a/src/main/kotlin/info/alinadace/sakuramiki/bean/BotConfiguration.kt +++ b/src/main/kotlin/info/alinadace/sakuramiki/bean/BotConfiguration.kt @@ -1,7 +1,10 @@ package info.alinadace.sakuramiki.bean import info.alinadace.sakuramiki.annotation.BotFunction +import info.alinadace.sakuramiki.configuration.BotConfig import info.alinadace.sakuramiki.service.Service +import io.github.kloping.qqbot.Starter +import io.github.kloping.qqbot.api.Intents import io.github.kloping.qqbot.api.event.Event import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration @@ -15,18 +18,14 @@ import kotlin.reflect.KClass @Configuration class BotConfiguration { -// @Bean -// fun bot(config: BotConfig): Bot { -// return when (config.type) { -//// LoginType.PASSWORD -> BotFactory.newBot(config.id, config.password) { -//// extracted() -//// } -//// -//// LoginType.QRCODE -> BotFactory.newBot(config.id, BotAuthorization.byQRCode()) { -//// extracted() -//// } -// } -// } + @Bean + fun starter(config: BotConfig): Starter { + val starter = Starter(config.appId, config.token) + starter.config.code = Intents.PUBLIC_INTENTS.and(Intents.GROUP_INTENTS) + starter.config.isSandbox = config.isSandbox + starter.config.secret = config.appSecret + return starter + } @Bean("functionMap") fun botFunctionMap(services: List>): HashMap, MutableList>> { @@ -51,10 +50,4 @@ class BotConfiguration { } return eventMap } - -// private fun BotConfiguration.extracted() { -// fileBasedDeviceInfo() -// protocol = BotConfiguration.MiraiProtocol.ANDROID_PAD -// enableContactCache() -// } } diff --git a/src/main/kotlin/info/alinadace/sakuramiki/configuration/BotConfig.kt b/src/main/kotlin/info/alinadace/sakuramiki/configuration/BotConfig.kt index 799db35..b972c68 100644 --- a/src/main/kotlin/info/alinadace/sakuramiki/configuration/BotConfig.kt +++ b/src/main/kotlin/info/alinadace/sakuramiki/configuration/BotConfig.kt @@ -1,6 +1,5 @@ package info.alinadace.sakuramiki.configuration -import info.alinadace.sakuramiki.enums.LoginType import org.springframework.boot.context.properties.ConfigurationProperties import org.springframework.context.annotation.Configuration @@ -17,20 +16,10 @@ class BotConfig { */ final var id: Long = 0L - /** - * 机器人密码 - */ - final var password: String = "" - - /** - * 机器人登录方式 - */ - final var type: LoginType = LoginType.PASSWORD - /** * 管理员QQ */ - final var admin: Long = 0L + final var admin: String = "" /** * 登录凭证 @@ -47,25 +36,28 @@ class BotConfig { */ final var appSecret: String = "" + /** + * 是否沙盒模式 + */ + final var isSandbox: Boolean = false + constructor() constructor( id: Long, - password: String, - type: LoginType, - admin: Long, + admin: String, appId: String, token: String, - appSecret: String + appSecret: String, + isSandbox: Boolean ) { this.id = id - this.password = password - this.type = type this.admin = admin this.appId = appId this.token = token this.appSecret = appSecret + this.isSandbox = isSandbox } } diff --git a/src/main/kotlin/info/alinadace/sakuramiki/configuration/Initialization.kt b/src/main/kotlin/info/alinadace/sakuramiki/configuration/Initialization.kt index 059bd12..42d1de5 100644 --- a/src/main/kotlin/info/alinadace/sakuramiki/configuration/Initialization.kt +++ b/src/main/kotlin/info/alinadace/sakuramiki/configuration/Initialization.kt @@ -1,8 +1,9 @@ package info.alinadace.sakuramiki.configuration import info.alinadace.sakuramiki.service.Service +import io.github.kloping.qqbot.Starter import io.github.kloping.qqbot.api.event.Event -import io.github.kloping.qqbot.entities.Bot +import io.github.kloping.qqbot.impl.ListenerHost import jakarta.annotation.Resource import org.slf4j.Logger import org.slf4j.LoggerFactory @@ -22,26 +23,38 @@ class Initialization { lateinit var functionMap: HashMap, MutableList>> @Resource - lateinit var bot: Bot; + lateinit var starter: Starter; val log: Logger = LoggerFactory.getLogger(this::class.java) @EventListener(ApplicationReadyEvent::class) suspend fun initFunction() { - functionMap.forEach { v -> -// GlobalEventChannel.subscribeAlways(v.key) { -// log.info("Event: {}", this) -// val filter = v.value.filter { x -> x.entrance(this) } -// filter.forEach { x -> x.active(this) } -// } - } + val eventListener = object : ListenerHost() { + override fun handleException(e: Throwable?): Boolean { + log.error("Exception: {}", e?.message, e) + return super.handleException(e) + } -// GlobalEventChannel.subscribeAlways(Event::class) { -// log.info("GlobalEvent: {}", this) -// } + @EventReceiver + fun onEvent(event: Event) { + log.info("Event: {}", event) + val filter = functionMap.keys.filter { x -> x.isInstance(event) } + filter.forEach { x -> + if (x.isInstance(event)) { + functionMap[x]?.forEach { y -> + if (y.entrance(event)) { + y.active(event) + } + } + } + } + log.info("Event-End: {}", event) + } + } + starter.registerListenerHost(eventListener) log.info("Channel complete") - log.info("Login: id:{}", bot.id) -// bot.login() + log.info("Login: id:{}", starter.config.appid) + starter.run() } } diff --git a/src/main/kotlin/info/alinadace/sakuramiki/enums/LoginType.kt b/src/main/kotlin/info/alinadace/sakuramiki/enums/LoginType.kt deleted file mode 100644 index 6f0a813..0000000 --- a/src/main/kotlin/info/alinadace/sakuramiki/enums/LoginType.kt +++ /dev/null @@ -1,18 +0,0 @@ -package info.alinadace.sakuramiki.enums - -/** - * 登录方式 - * @author Kane - * @since 2024/8/29 下午3:19 - */ -enum class LoginType { - /** - * 密码登录 - */ - PASSWORD, - - /** - * 扫码登录 - */ - QRCODE -} diff --git a/src/main/kotlin/info/alinadace/sakuramiki/service/ExampleService.kt b/src/main/kotlin/info/alinadace/sakuramiki/service/ExampleService.kt index 54a329b..92d92d6 100644 --- a/src/main/kotlin/info/alinadace/sakuramiki/service/ExampleService.kt +++ b/src/main/kotlin/info/alinadace/sakuramiki/service/ExampleService.kt @@ -2,8 +2,10 @@ package info.alinadace.sakuramiki.service import info.alinadace.sakuramiki.annotation.BotFunction import info.alinadace.sakuramiki.configuration.BotConfig -import io.github.kloping.qqbot.api.message.MessageEvent -import io.github.kloping.qqbot.entities.qqpd.v2.Friend +import io.github.kloping.qqbot.api.v2.FriendMessageEvent +import io.github.kloping.qqbot.api.v2.GroupMessageEvent +import io.github.kloping.qqbot.api.v2.MessageV2Event +import io.github.kloping.qqbot.entities.ex.PlainText import jakarta.annotation.Resource import org.slf4j.Logger import org.slf4j.LoggerFactory @@ -12,8 +14,8 @@ import org.slf4j.LoggerFactory * @author Kane * @since 2024/8/29 下午3:47 */ -@BotFunction(MessageEvent::class) -class ExampleService : Service> { +@BotFunction(FriendMessageEvent::class, GroupMessageEvent::class) +class ExampleService : Service { val log: Logger = LoggerFactory.getLogger(this::class.java) @@ -23,21 +25,20 @@ class ExampleService : Service> { /** * 服务入口 */ - override fun entrance(event: MessageEvent): Boolean { -// val chain = event.message -// val filter = chain.filter { it !is MessageSource } -// if (filter.size == 1 && filter[0] is PlainText) { -// if (filter[0].contentToString() == "测试" && event.sender.id == botConfig.admin) { -// return true -// } -// } - return false + override fun entrance(event: MessageV2Event): Boolean { + val chain = event.message + if (chain.size == 1 && chain[0] is PlainText && event.sender.id == botConfig.admin) { + if (chain[0].toString() == "测试") { + return true + } + } + return true } /** * 服务行为 */ - override suspend fun active(event: MessageEvent) { -// event.subject.sendMessage("测试成功") + override fun active(event: MessageV2Event) { + event.send("测试成功") } } diff --git a/src/main/kotlin/info/alinadace/sakuramiki/service/Service.kt b/src/main/kotlin/info/alinadace/sakuramiki/service/Service.kt index 3e62813..d76cd7e 100644 --- a/src/main/kotlin/info/alinadace/sakuramiki/service/Service.kt +++ b/src/main/kotlin/info/alinadace/sakuramiki/service/Service.kt @@ -16,5 +16,5 @@ interface Service { /** * 服务行为 */ - suspend fun active(event: E) + fun active(event: E) } diff --git a/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/DisableService.kt b/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/DisableService.kt index 22c8499..92b8476 100644 --- a/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/DisableService.kt +++ b/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/DisableService.kt @@ -1,7 +1,6 @@ package info.alinadace.sakuramiki.service.drink_water import com.baomidou.mybatisplus.extension.kotlin.KtQueryWrapper -import info.alinadace.sakuramiki.annotation.BotFunction import info.alinadace.sakuramiki.service.Service import info.alinadace.sakuramiki.service.drink_water.domain.DrinkWaterUser import info.alinadace.sakuramiki.service.drink_water.mapper.DrinkWaterMapper @@ -15,7 +14,8 @@ import org.slf4j.LoggerFactory * @author Kane * @since 2024/9/18 13:27 */ -@BotFunction(FriendMessageEvent::class) +//@BotFunction(FriendMessageEvent::class) +@Deprecated("限制无法实现") class DisableService : Service { companion object { @@ -43,7 +43,7 @@ class DisableService : Service { /** * 服务行为 */ - override suspend fun active(event: FriendMessageEvent) { + override fun active(event: FriendMessageEvent) { log.info("服务关闭请求 - DrinkWater - target:{}", event.sender.id) val one = drinkWaterMapper.selectOne( KtQueryWrapper(DrinkWaterUser()) diff --git a/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/EnableService.kt b/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/EnableService.kt index 7017e20..21e5082 100644 --- a/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/EnableService.kt +++ b/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/EnableService.kt @@ -1,7 +1,6 @@ package info.alinadace.sakuramiki.service.drink_water import com.baomidou.mybatisplus.extension.kotlin.KtQueryWrapper -import info.alinadace.sakuramiki.annotation.BotFunction import info.alinadace.sakuramiki.service.Service import info.alinadace.sakuramiki.service.drink_water.domain.DrinkWaterUser import info.alinadace.sakuramiki.service.drink_water.mapper.DrinkWaterMapper @@ -15,7 +14,8 @@ import org.slf4j.LoggerFactory * @author Kane * @since 2024/9/18 13:27 */ -@BotFunction(FriendMessageEvent::class) +//@BotFunction(FriendMessageEvent::class) +@Deprecated("限制无法实现") class EnableService : Service { companion object { @@ -42,7 +42,7 @@ class EnableService : Service { /** * 服务行为 */ - override suspend fun active(event: FriendMessageEvent) { + override fun active(event: FriendMessageEvent) { log.info("服务开启请求 - DrinkWater - target:{}", event.sender.id) val one = drinkWaterMapper.selectOne( KtQueryWrapper(DrinkWaterUser()) diff --git a/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/mapper/DrinkWaterMapper.kt b/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/mapper/DrinkWaterMapper.kt index 6acd1eb..d3e55fc 100644 --- a/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/mapper/DrinkWaterMapper.kt +++ b/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/mapper/DrinkWaterMapper.kt @@ -8,5 +8,4 @@ import info.alinadace.sakuramiki.service.drink_water.domain.DrinkWaterUser * @author Kane * @since 2024/9/18 13:39 */ -interface DrinkWaterMapper : BaseMapper { -} +interface DrinkWaterMapper : BaseMapper diff --git a/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/task/ReminderService.kt b/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/task/ReminderService.kt index 91c40b0..2e00e74 100644 --- a/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/task/ReminderService.kt +++ b/src/main/kotlin/info/alinadace/sakuramiki/service/drink_water/task/ReminderService.kt @@ -3,32 +3,30 @@ package info.alinadace.sakuramiki.service.drink_water.task import com.baomidou.mybatisplus.extension.kotlin.KtQueryWrapper import info.alinadace.sakuramiki.service.drink_water.domain.DrinkWaterUser import info.alinadace.sakuramiki.service.drink_water.mapper.DrinkWaterMapper -import io.github.kloping.qqbot.entities.Bot import jakarta.annotation.Resource import org.slf4j.Logger import org.slf4j.LoggerFactory -import org.springframework.scheduling.annotation.Scheduled -import org.springframework.stereotype.Service /** * 定时喝水提醒服务 * @author Kane * @since 2024/9/18 13:59 */ -@Service +//@Service +@Deprecated("限制无法实现") class ReminderService { companion object { val log: Logger = LoggerFactory.getLogger(this::class.java) } - @Resource - lateinit var bot: Bot +// @Resource +// lateinit var bot: Bot @Resource lateinit var drinkWaterMapper: DrinkWaterMapper - @Scheduled(cron = "0 0 0,8-23/2 * * *") + // @Scheduled(cron = "0 0 0,8-23/2 * * *") suspend fun reminder() { log.info("定时喝水提醒服务 - 开始") val list = drinkWaterMapper.selectList( diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index aebd24f..e8295d2 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -11,3 +11,5 @@ spring: mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +bot: + is-sandbox: true diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index cc2b2fe..bd26353 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -8,3 +8,5 @@ spring: url: jdbc:mysql://10.0.4.16:3306/mirai?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: mirai password: FydsaZsFm5w26We6 +bot: + is-sandbox: false diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 85f39e8..219505a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -11,3 +11,4 @@ bot: app-id: 102372439 token: sq3CZjEpK7Z65s2xuyhwp8WVBqvx35XP app-secret: Wgq0BMXit5HTfr3GTgt6JXlzDRgvAPet + admin: 59EC2526FBCC1EC5F851187C0F4F8BA5