我正在尝试使用带有Kotlin的Spring Boot为Discord Bot创建命令框架。我可以在Javacord上正常使用它,但是最近我决定改用JDA,但遇到了麻烦。我正在构建的命令框架还将所有Discord事件中继到Spring Event系统,而我目前正在做的是使用自动连接的{{1}来抓取通用事件侦听器(https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/core/hooks/EventListener.html)并将所有内容分发给Spring。 }。但是,spring应用程序似乎挂在该行上,并且在使用一些断点对其进行调试之后,似乎卡在了该特定行(https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java#L190)上。知道为什么会这样吗?我已经看到了这个(https://github.com/spring-projects/spring-framework/issues/20904),但是我不确定该怎么做...
ApplicationEventPublisher
SpringGenericEventPublisher.kt
@Component
class SpringGenericEventPublisher : EventListener {
@Autowired
private lateinit var context: ApplicationEventPublisher
override fun onEvent(event: Event) = context.publishEvent(event)
}
(我拥有构建JDA实例的bean)
BotConfiguration.kt
然后我有一个简单的监听器用于测试
@Bean
fun bot(config: BotProperties): Bot = JDABuilder() // [Bot] is a typealias for [JDA]
//.setCallbackPool(Executors.newSingleThreadExecutor()) // I've tried this because of the issue I linked above, but I got the same result
.setToken(config.token)
.addEventListener(springGenericEventPublisher)
.build()
有什么想法吗?
预先感谢
PS:我应该补充一点,我也在使用Spring Data Redis和Spring Data MongoDB,并且在此之前都成功启动,并且命令注册表应该在那之后启动,只是没有。 JDA实例可以完美登录,因为如果我只是在屏幕上打印一些内容而不是在@Component
class FooComponent {
@EventListener(Event::class)
fun onFoo(event: Event) {
println("Reached `onFoo`")
}
}
上发布事件,它将成功。