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

我想要自定义配置文件 #482

Closed NiceCatCoder closed 2 years ago

NiceCatCoder commented 2 years ago

版本号

love.forte.simple-robot:component-mirai:2.4.0

疑问描述

我不知道如何编写Kotlin 我想在main函数里使用代码进行Simbot配置,但是我看不懂kotlin,就找不到方法(捂脸 defaultConfiguration这是一个疑似默认配置的变量,但我不如何反射拿到此Kotlin对象,每次都报错...

ForteScarlet commented 2 years ago

如果希望通过代码配置,可以参考 Core#快速开始 - 特定Bot注册 但是这时是使用Core模块,其与SpringBoot无任何关系也没有整合。

ForteScarlet commented 2 years ago

在spring boot中如果想要自定义注册一个bot(比如mirai组件的bot),可以参考:

@Component
public class Test implements ApplicationRunner {
    // 任何启动完成后执行的方式

    // love.forte.simbot.application.Application
    @Autowired
    private Application application;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        for (BotManager<?> manager : application.getBotManagers()) {
            // 找到Mirai组件的botManager
            if (manager instanceof MiraiBotManager) {
                MiraiBotManager miraiBm = (MiraiBotManager) manager;

                // 配置类
                final MiraiBotConfiguration miraiBotConfiguration = new MiraiBotConfiguration();

                // 配置撤回策略
                miraiBotConfiguration.setRecallCacheStrategy(...);

                // 配置其他mirai自身使用的原生配置类对象
                miraiBotConfiguration.setInitialBotConfiguration(BotConfiguration.getDefault());

                final Bot bot = miraiBm.register(123L, "password", miraiBotConfiguration);

                // 启用bot

                bot.startBlocking();
                // bot.startAsync()

                break;
            }
        }
    }
}

需要注意,在注入使用 Application 的地方,不能存在监听函数

NiceCatCoder commented 2 years ago

eh...抱歉,我还是习惯用v2版本

ForteScarlet commented 2 years ago

v2 参考这里 ,但是我已经忘记v2有没有完全自定义配置的方案了。

NiceCatCoder commented 2 years ago

我现在有2点疑惑

ForteScarlet commented 2 years ago

你说的这个 defaultConfiguration 是在哪儿看到的

NiceCatCoder commented 2 years ago

image

ForteScarlet commented 2 years ago

你看看 SimbotAppConfiguration.java 也许存在参考价值,虽然我忘了,但是貌似v2的spring boot starter部分是用Java写的

ForteScarlet commented 2 years ago

image

这里的 defaultConfiguration 并不是一个实际存在的默认值,他是一个可以为 null 的参数,如果没有指定则值为null,可以通过 SimbotApp.run(...) 指定

NiceCatCoder commented 2 years ago

Solved!BotManager可以热注册Bot,至于自定义的配置,就只能另起炉灶了。

@SimbotApplication(@SimbotResource("bncat-robot-config.yml"))
public class BNCRobot {

    private static final Logger LOGGER = LoggerFactory.getLogger(BNCRobot.class);

    public static void main(String[] args) throws IOException, NoSuchFieldException, IllegalAccessException {
        AnsiConsole.systemInstall();
        SimbotContext context = SimbotApp.run(BNCRobot.class, args);
        Bot bot = context.getBotManager().registerBot(BotVerifyInfo.withCodeVerification("794384470", "*"));
    }
}