Simple Robot v4.15.0 Help

消息发送

在 KOOK 组件中,主要有两种发送消息的方式。

  1. 直接构建并使用 API 发送消息。这是最原始的消息发送方式。

  2. 在使用 simbot 核心库时,配合使用 消息元素 Message.Element 发送消息。

本章将主要介绍第 1 种方式: 使用 API 发送消息。而与 消息元素 相关的内容可前往参考 消息元素

使用 API

KOOK API 中用于发送消息的 API 主要就是 向子频道发送消息向用户发送私聊消息。 它们的 API 封装分别为:

这两个 API 的用法非常接近,但仍有两个区别需要先记住:

SendChannelMessageApi

面向频道消息。 支持 quotenoncetempTargetId ,并在 4.2.0 起支持 templateId

SendDirectMessageApi

面向私聊消息。 可通过 targetIdchatCode 两条路径构建请求。

下面以 SendChannelMessageApi 为主说明。

仅在API模块使用

当你不依赖其他模块,仅依赖 API 模块 simbot-component-kook-api 时, 你可以使用比较贴合原始的方式直接使用 API。

val client = HttpClient() val authorization = "Bot xxxxx" val api = SendChannelMessageApi.create( targetId = "1234567890", content = "Hello KOOK" ) val result = api.requestData(client, authorization)
var client = ApiRequests.createHttpClient(); var authorization = "Bot xxxxx"; var api = SendChannelMessageApi.create( null, "1234567890", "Hello KOOK" ); ApiRequests.requestDataAsync(api, client, authorization) .thenAccept(result -> { // 发送成功 });
var client = ApiRequests.createHttpClient(); var authorization = "Bot xxxxx"; var api = SendChannelMessageApi.create( null, "1234567890", "Hello KOOK" ); var result = ApiRequests.requestDataBlocking( api, client, authorization );
var client = ApiRequests.createHttpClient(); var authorization = "Bot xxxxx"; var api = SendChannelMessageApi.create( null, "1234567890", "Hello KOOK" ); ApiRequests.requestDataReserve(api, client, authorization) .transform(SuspendReserves.mono()) .block();

在标准库中使用

当你依赖使用 标准库模块 simbot-component-kook-stdlib 时, 标准库提供的 Bot 中基本已经包含了请求 API 所需要的基本信息, 因此其会提供一些扩展/辅助方法来简化你的请求逻辑。

val bot: Bot = ... val api = SendChannelMessageApi.create( targetId = "1234567890", content = "Hello KOOK" ) val result = api.requestDataBy(bot)
Bot bot = ...; var api = SendChannelMessageApi.create( null, "1234567890", "Hello KOOK" ); BotRequests.requestDataByAsync(api, bot) .thenAccept(result -> { // 发送成功 });
Bot bot = ...; var api = SendChannelMessageApi.create( null, "1234567890", "Hello KOOK" ); var result = BotRequests.requestDataByBlocking(api, bot);
Bot bot = ...; var api = SendChannelMessageApi.create( null, "1234567890", "Hello KOOK" ); BotRequests.requestDataByReserve(api, bot) .transform(SuspendReserves.mono()) .block();

在组件库配合simbot4核心库时使用

simbot-component-kook-core 中有两种常见做法:

  • 继续使用原始 API: KookBot.requestData(api)api.requestDataBy(bot)

  • 直接使用对象上的发送能力: KookChatCapableChannel.send(...)KookUserChat.send(...)

后者通常更贴近 simbot 的使用方式。

suspend fun send(channel: KookChatCapableChannel) { channel.send("hello from kook core") channel.send("reply message", quote = null, tempTargetId = null) }
KookChatCapableChannel channel = ...; channel.sendAsync("hello from kook core") .thenAccept(receipt -> { });
KookChatCapableChannel channel = ...; var receipt = channel.sendBlocking("hello from kook core");
KookChatCapableChannel channel = ...; channel.sendReserve("hello from kook core") .transform(SuspendReserves.mono()) .subscribe(receipt -> { });

如果你只是需要把 KookBot 当作 stdlib 的 Bot 使用,也可以直接拿到 sourceBot

val kookBot: KookBot = ... val bot = kookBot.sourceBot // 得到标准库的 Bot
KookBot kookBot = ...; Bot bot = kookBot.getSourceBot(); // 得到标准库的 Bot
14 July 2026