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