kt使用初体验
用kotlin给别人写了个每日执行定时任务的demo
kt好好用呜呜呜呜kt你带我走吧。
嘿嘿嘿kt小小的软软的香香的又甜(指语法糖)
object TestPlugin : KotlinPlugin(
JvmPluginDescription(
id = "org.example.TestPlugin",
version = "1.0-SNAPSHOT",
)
) {
val taskManager = TaskManager(this)
override fun onEnable() {
logger.info { "Plugin loaded" }
taskManager.init()
// 使用插件主类的携程
taskManager.add(object:AbstractTask(this, Time(6)){
override suspend fun run() {
val bot = Bot.getInstance(3191684705L)
bot.getFriend(2431208142L)?.sendMessage("早上好")
}})
}
}
class TaskManager(val main : TestPlugin) {
val tasks = ArrayList<AbstractTask>()
val timer = Timer()
var lastDate : LocalDate? = null
fun init() {
timer.schedule(object: TimerTask(){
override fun run() {
val date : LocalDate? = LocalDate.now()
// 重置任务完成标记
if (lastDate == null || date != lastDate){
tasks.forEach {
it.done = false
}
}
tasks.forEach {
// 使用携程
it.coroutineScope.launch {
it.check()
}
}
}
}, 1000L, 1000L)
}
fun add(task : AbstractTask) {
tasks.add(task)
}
}
abstract class AbstractTask(val coroutineScope: CoroutineScope, val time : Time) {
var done = false
suspend fun check() {
if (done) return
if (!time.isNowAfterTime()) return
done = true
run()
}
abstract suspend fun run()
}
class Time(var hour : Int, var minute : Int = 0, var second : Int = 0) {
fun isNowAfterTime() : Boolean {
val now = LocalDateTime.now()
val target = LocalDateTime.of(now.year, now.month, now.dayOfMonth, hour, minute, second)
return now.isAfter(target)
}
}