# 使用核心库

> For the complete documentation index, see [llms.txt](https://simbot.forte.love/llms.txt).

> **TL;DR**
> 使用 `Application` 的基本实现模块 `simbot-core`。

## 准备

准备一个 Kotlin 或 Java 项目。

* 如果是 Java 或 Kotlin/JVM 项目, 请确保 JDK 版本是 JDK11 或以上。

* 如果是 Kotlin 多平台项目, 可参考 [概述](outline.html#multiplatform-targets) 了解支持的平台。

> **Tip:**
> 也可前往 [安装章节的准备部分](installation.html#prepare-simbot-core) 参考更多。

## 安装

Gradle(Kotlin DSL):

```KOTLIN
implementation("love.forte.simbot:simbot-core:5.0.0-Alpha2")
```

如果使用 Java 而不配合使用 Gradle 的 [Kotlin 插件](https://kotlinlang.org/docs/gradle-configure-project.html#apply-the-plugin), 那么你需要指定依赖的后缀为 `-jvm`。

```KOTLIN
implementation("love.forte.simbot:simbot-core-jvm:5.0.0-Alpha2")
```

Gradle(Groovy):

```GROOVY
implementation 'love.forte.simbot:simbot-core:5.0.0-Alpha2'
```

如果使用 Java 而不配合使用 Gradle 的 [Kotlin 插件](https://kotlinlang.org/docs/gradle-configure-project.html#apply-the-plugin), 那么你需要指定依赖的后缀为 `-jvm`。

```GROOVY
implementation 'love.forte.simbot:simbot-core-jvm:5.0.0-Alpha2'
```

Maven:

```XML
<dependency>
    <groupId>love.forte.simbot</groupId>
    <artifactId>simbot-core-jvm</artifactId>
    <version>5.0.0-Alpha2</version>
</dependency>
```

> **Tip:**
> 也可前往 [安装章节的安装部分](installation.html#安装核心库) 参考更多。

## 使用

### 创建 Application

Kotlin:

使用 `Simple` 工厂, 或使用扩展函数 `launchSimpleApplication`。

```KOTLIN
val app = launchApplication(Simple) {
    // 配置...
}

// 或

val app = launchSimpleApplication {
    // 配置...
}

app.join() // 挂起直到被关闭
```

Java:

```JAVA
var applicationAsync = Applications.launchApplicationAsync(Simple.INSTANCE, appConfigurer -> {
        // 配置 Application...
       
    });

// 异步结果可转化为 CompletableFuture
var future = applicationAsync.asFuture()
        .thenCompose(Application::asFuture);

// 阻塞当前线程直到应用被关闭
future.join();
```

```JAVA
var application = Applications.launchApplicationBlocking(Simple.INSTANCE, appConfigurer -> {
        // 配置 Application...

    });

// 注册事件处理器、注册bot等

// 阻塞当前线程直到被关闭
application.joinBlocking();
```

```JAVA
var applicationAsync = Applications.launchApplicationAsync(Simple.INSTANCE, appConfigurer -> {
        // 配置 Application...

    });

Mono.fromFuture(applicationAsync.asFuture())
        .flatMap(app -> app.joinReserve().transform(SuspendReserves.mono()))
        .block();
```

有关 `Application` 的配置与使用可直接前往参考 [基本内容-Application](basic-application.html) 章节, 它里面用于示例的内容就是 `simbot-core` 的实现 `Simple`。

## 安装组件

前往 [组件库](components-intro.html) 选择你想要使用的组件，或者选择某个/些你想要使用的第三方组件， 根据它们的手册安装、配置到你的 `Application` 中。

## 运行

执行你的程序入口 `main` 方法，体验一下吧~

> **Tip:**
> 在 native 平台下，你可能需要使用 `runBlocking { ... }` 包裹上述需要挂起的内容 (因为 native 尚不支持可挂起的 main 入口，参考 [KT-52753](https://youtrack.jetbrains.com/issue/KT-52753/Native-Support-suspending-entrypoints))， 此时建议为其分配调度器，比如：`runBlocking(Dispatchers.Default) { ... }`。

