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.impl.ListenerHost import jakarta.annotation.Resource import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.boot.context.event.ApplicationReadyEvent import org.springframework.context.event.EventListener import kotlin.reflect.KClass /** * 机器人功能初始化 * @author Kane * @since 2024/9/4 18:49 */ @org.springframework.stereotype.Service class Initialization { @Suppress("SpringJavaInjectionPointsAutowiringInspection") @Resource(name = "functionMap") lateinit var functionMap: HashMap, MutableList>> @Resource lateinit var starter: Starter val log: Logger = LoggerFactory.getLogger(this::class.java) @EventListener(ApplicationReadyEvent::class) suspend fun initFunction() { val eventListener = object : ListenerHost() { override fun handleException(e: Throwable?): Boolean { log.error("Exception: {}", e?.message, e) return super.handleException(e) } @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:{}", starter.config.appid) starter.run() } }