新功能:实现定时喝水提醒服务
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5s
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5s
添加了一个定时任务,用于每两小时提醒用户喝水。同时,引入了开启和关闭该提醒服务的功能,用户可以通过消息与机器人互动来管理提醒服务。此更新涉及数据库映射、服务类和定时任务的创建。
This commit is contained in:
parent
90307e1ee9
commit
6b18dd55a7
14
pom.xml
14
pom.xml
@ -77,10 +77,6 @@
|
||||
<groupId>org.jetbrains.kotlinx</groupId>
|
||||
<artifactId>kotlinx-coroutines-reactor</artifactId>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId></groupId>-->
|
||||
<!-- <artifactId></artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
<dependency>
|
||||
<groupId>com.mysql</groupId>
|
||||
@ -110,6 +106,16 @@
|
||||
<artifactId>hutool-http</artifactId>
|
||||
<version>5.8.27</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
|
||||
<version>3.5.7</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@ -2,8 +2,10 @@ package info.alinadace.miraibot
|
||||
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication
|
||||
import org.springframework.boot.runApplication
|
||||
import org.springframework.scheduling.annotation.EnableScheduling
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableScheduling
|
||||
class MiraiBotApplication
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
|
@ -0,0 +1,68 @@
|
||||
package info.alinadace.miraibot.service.drink_water
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
|
||||
import info.alinadace.miraibot.annotation.BotFunction
|
||||
import info.alinadace.miraibot.service.Service
|
||||
import info.alinadace.miraibot.service.drink_water.domain.DrinkWaterUser
|
||||
import info.alinadace.miraibot.service.drink_water.mapper.DrinkWaterMapper
|
||||
import jakarta.annotation.Resource
|
||||
import net.mamoe.mirai.event.events.FriendMessageEvent
|
||||
import net.mamoe.mirai.message.data.MessageSource
|
||||
import net.mamoe.mirai.message.data.PlainText
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
/**
|
||||
* 定时喝水提醒关闭服务
|
||||
* @author Kane
|
||||
* @since 2024/9/18 13:27
|
||||
*/
|
||||
@BotFunction(FriendMessageEvent::class)
|
||||
class DisableService : Service<FriendMessageEvent> {
|
||||
|
||||
companion object {
|
||||
val log: Logger = LoggerFactory.getLogger(this::class.java)
|
||||
}
|
||||
|
||||
|
||||
@Resource
|
||||
lateinit var drinkWaterMapper: DrinkWaterMapper
|
||||
|
||||
/**
|
||||
* 服务入口
|
||||
*/
|
||||
override fun entrance(event: FriendMessageEvent): Boolean {
|
||||
val chain = event.message
|
||||
val filter = chain.filter { it !is MessageSource }
|
||||
if (filter.size == 1 && filter[0] is PlainText) {
|
||||
if (filter[0].contentToString() == "关闭喝水提醒") {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务行为
|
||||
*/
|
||||
override suspend fun active(event: FriendMessageEvent) {
|
||||
log.info("服务关闭请求 - DrinkWater - target:{}", event.sender.id)
|
||||
val one = drinkWaterMapper.selectOne(
|
||||
LambdaQueryWrapper<DrinkWaterUser>()
|
||||
.eq(DrinkWaterUser::botId, event.sender.id)
|
||||
)
|
||||
if (one == null) {
|
||||
event.subject.sendMessage("服务已关闭 - DrinkWater")
|
||||
log.info("服务已关闭 - DrinkWater - target:{} - 无记录", event.sender.id)
|
||||
return
|
||||
}
|
||||
if (one.enable == DrinkWaterUser.ENABLE) {
|
||||
one.enable = DrinkWaterUser.DISABLE
|
||||
val updateById = drinkWaterMapper.updateById(one)
|
||||
event.subject.sendMessage("服务已关闭 - DrinkWater")
|
||||
log.info("服务已关闭 - DrinkWater - target:{} - 记录更新 - {}", event.sender.id, updateById)
|
||||
return
|
||||
}
|
||||
event.subject.sendMessage("服务已关闭 - DrinkWater")
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
package info.alinadace.miraibot.service.drink_water
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
|
||||
import info.alinadace.miraibot.annotation.BotFunction
|
||||
import info.alinadace.miraibot.service.Service
|
||||
import info.alinadace.miraibot.service.drink_water.domain.DrinkWaterUser
|
||||
import info.alinadace.miraibot.service.drink_water.mapper.DrinkWaterMapper
|
||||
import jakarta.annotation.Resource
|
||||
import net.mamoe.mirai.event.events.FriendMessageEvent
|
||||
import net.mamoe.mirai.message.data.MessageSource
|
||||
import net.mamoe.mirai.message.data.PlainText
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
/**
|
||||
* 定时喝水提醒开启服务
|
||||
* @author Kane
|
||||
* @since 2024/9/18 13:27
|
||||
*/
|
||||
@BotFunction(FriendMessageEvent::class)
|
||||
class EnableService : Service<FriendMessageEvent> {
|
||||
|
||||
companion object {
|
||||
val log: Logger = LoggerFactory.getLogger(this::class.java)
|
||||
}
|
||||
|
||||
@Resource
|
||||
lateinit var drinkWaterMapper: DrinkWaterMapper
|
||||
|
||||
/**
|
||||
* 服务入口
|
||||
*/
|
||||
override fun entrance(event: FriendMessageEvent): Boolean {
|
||||
val chain = event.message
|
||||
val filter = chain.filter { it !is MessageSource }
|
||||
if (filter.size == 1 && filter[0] is PlainText) {
|
||||
if (filter[0].contentToString() == "开启喝水提醒") {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务行为
|
||||
*/
|
||||
override suspend fun active(event: FriendMessageEvent) {
|
||||
log.info("服务开启请求 - DrinkWater - target:{}", event.sender.id)
|
||||
val one = drinkWaterMapper.selectOne(
|
||||
LambdaQueryWrapper<DrinkWaterUser>()
|
||||
.eq(DrinkWaterUser::botId, event.sender.id)
|
||||
)
|
||||
if (one == null) {
|
||||
val let = DrinkWaterUser().apply {
|
||||
botId = event.sender.id
|
||||
enable = DrinkWaterUser.ENABLE
|
||||
}.let {
|
||||
drinkWaterMapper.insert(it)
|
||||
}
|
||||
event.subject.sendMessage("服务已开启 - DrinkWater")
|
||||
log.info("服务开启请求 - DrinkWater - target:{} - 记录创建 - {}", event.sender.id, let)
|
||||
return
|
||||
}
|
||||
if (one.enable == DrinkWaterUser.DISABLE) {
|
||||
one.enable = DrinkWaterUser.ENABLE
|
||||
val updateById = drinkWaterMapper.updateById(one)
|
||||
event.subject.sendMessage("服务已开启 - DrinkWater")
|
||||
log.info("服务开启请求 - DrinkWater - target:{} - 记录更新 - {}", event.sender.id, updateById)
|
||||
return
|
||||
}
|
||||
event.subject.sendMessage("服务已开启 - DrinkWater")
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package info.alinadace.miraibot.service.drink_water.domain
|
||||
|
||||
/**
|
||||
* 喝水提醒用户
|
||||
*/
|
||||
class DrinkWaterUser {
|
||||
var id: Long = 0
|
||||
var botId: Long = 0
|
||||
var enable: Byte? = null
|
||||
|
||||
companion object {
|
||||
const val ENABLE: Byte = 1
|
||||
const val DISABLE: Byte = 0
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package info.alinadace.miraibot.service.drink_water.mapper
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper
|
||||
import info.alinadace.miraibot.service.drink_water.domain.DrinkWaterUser
|
||||
|
||||
/**
|
||||
* 喝水提醒用户Mapper
|
||||
* @author Kane
|
||||
* @since 2024/9/18 13:39
|
||||
*/
|
||||
interface DrinkWaterMapper : BaseMapper<DrinkWaterUser> {
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package info.alinadace.miraibot.service.drink_water.task
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
|
||||
import info.alinadace.miraibot.service.drink_water.domain.DrinkWaterUser
|
||||
import info.alinadace.miraibot.service.drink_water.mapper.DrinkWaterMapper
|
||||
import net.mamoe.mirai.Bot
|
||||
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
|
||||
class ReminderService {
|
||||
|
||||
companion object {
|
||||
val log: Logger = LoggerFactory.getLogger(this::class.java)
|
||||
}
|
||||
|
||||
lateinit var bot: Bot
|
||||
|
||||
lateinit var drinkWaterMapper: DrinkWaterMapper
|
||||
|
||||
@Scheduled(cron = "0 0 0,8-23/2 * * *")
|
||||
suspend fun reminder() {
|
||||
log.info("定时喝水提醒服务 - 开始")
|
||||
val list = drinkWaterMapper.selectList(
|
||||
LambdaQueryWrapper<DrinkWaterUser>()
|
||||
.eq(DrinkWaterUser::enable, DrinkWaterUser.ENABLE)
|
||||
)
|
||||
list.forEach {
|
||||
if (it.botId == 0L) {
|
||||
return@forEach
|
||||
}
|
||||
bot.getFriend(it.botId)?.sendMessage("请喝水")
|
||||
log.info("定时喝水提醒服务 - 发送消息 - {}", it.botId)
|
||||
}
|
||||
log.info("定时喝水提醒服务 - 结束")
|
||||
}
|
||||
|
||||
}
|
@ -1,2 +1,12 @@
|
||||
bot:
|
||||
id: 3437522130
|
||||
spring:
|
||||
data:
|
||||
redis:
|
||||
host: 101.35.164.171
|
||||
password: wTE32JjsieQ2JTOwsg9X
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://localhost:3306/mirai?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
|
||||
username: root
|
||||
password: nobuts001
|
||||
|
@ -0,0 +1,12 @@
|
||||
bot:
|
||||
id: 3437522130
|
||||
spring:
|
||||
data:
|
||||
redis:
|
||||
host: 10.0.4.16
|
||||
password: wTE32JjsieQ2JTOwsg9X
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://10.0.4.16:3306/mirai?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
|
||||
username: root
|
||||
password: FydsaZsFm5w26We6
|
@ -8,3 +8,4 @@ bot:
|
||||
admin: 1075576561
|
||||
server:
|
||||
port: 25684 # 无用随机端口
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user