simple-robot / simpler-robot

Simple Robot,一个bot风格的Kotlin多平台事件调度框架,异步高效、Java友好!/ A Bot-style Kotlin Multiplatform event scheduling framework, asynchronous and high-performance, java-friendly! 🐱😼😻😸
https://simbot.forte.love
GNU Lesser General Public License v3.0
520 stars 43 forks source link

关于Telegram组件启动时初始化Bot的问题 #886

Closed Flock-YT closed 3 months ago

Flock-YT commented 3 months ago

版本号

simbot-component-telegram:v0.0.8

涉及的编程语言

Java

涉及的组件库

Telegram

疑问描述

由于TelegramBot的特性,几乎在每次启动的时候都要执行一些类来初始化机器人例如:

// 获取命令更新器并添加命令 阻塞线程
            bot.commandsBlocking()
                    .getUpdater()
                    .addCommand("start", "开始使用Bot")
                    .addCommand("help", "获取帮助信息")
                    .addCommand("info", "查看Bot信息")
                    .addCommand("111", "111")
                    .updateBlocking();

但是由于Simbot是异步启动在Springboot中使用@PostConstruct注解在启动后自动运行初始化类的时候Bot还没启动完毕,导致拿不到Bot,请问是否考虑提供一个接口,在所有Bot都启动完毕后就会自动执行依赖了这个接口的类

(还是说其实已经有这种东西了,但是我看了一下文档似乎没找到.)

ForteScarlet commented 3 months ago

一般来说应该会有一个XxxBotStartedEvent在bot被启动后推送,不过TG组件似乎尚未实现这个事件

可以考虑在异步中轮询判断,直到有bot了,并且bot.isStarted为true后执行逻辑,然后终止循环

在异步中主要是为了防止长时间阻塞导致其他的副作用

Flock-YT commented 3 months ago

OK了解