MessageSendApi

发送消息

用于向 channel_id 指定的子频道发送消息。

  • 要求操作人在该子频道具有 发送消息 的权限。

  • 主动消息在频道主或管理设置了情况下,按设置的数量进行限频。在未设置的情况遵循如下限制:

    • 主动推送消息,默认每天往每个子频道可推送的消息数是 20 条,超过会被限制。

    • 主动推送消息在每个频道中,每天可以往 2 个子频道推送消息。超过后会被限制。

  • 不论主动消息还是被动消息,在一个子频道中,每 1s 只能发送 5 条消息。

  • 被动回复消息有效期为 5 分钟。超时会报错。

  • 发送消息接口要求机器人接口需要连接到 websocket 上保持在线状态

  • 有关主动消息审核,可以通过 Intents 中审核事件 MESSAGE_AUDIT 返回 MessageAudited 对象获取结果。


主动消息与被动消息

  • 主动消息:发送消息时,未填充 msg_id/event_id 字段的消息。

  • 被动消息:发送消息时,填充了 msg_id/event_id 字段的消息。msg_idevent_id 两个字段任意填一个即为被动消息。 接口使用此 msg_id/event_id 拉取用户的消息或事件,同时判断用户消息或事件的发送时间,如果超过被动消息回复时效,将会不允许发送该消息。

更多参考 文档

发送 ARK 模板消息

通过指定 ark 字段发送模板消息。

  • 要求操作人在该子频道具有发送消息和 对应 ARK 模板 的权限。

  • 调用前需要先申请消息模板,这一步会得到一个模板 id,在请求时填在 ark.template_id 上。

  • 发送成功之后,会触发一个创建消息的事件。

  • 可用模板参考可用模板

更多参考 文档

发送引用消息

  • 只支持引用机器人自己发送到的消息以及用户@机器人产生的消息。

  • 发送成功之后,会触发一个创建消息的事件。

不能单独发送引用消息,引用消息需要和其他消息类型组合发送,参数请见发送消息

更多参考 文档

发送含有消息按钮组件的消息

通过指定 keyboard 字段发送带按钮的消息,支持 keyboard 模版自定义 keyboard 两种请求格式。

  • 要求操作人在该子频道具有 发送消息对应消息按钮组件 的权限。

  • 请求参数 keyboard 模版自定义 keyboard 只能单一传值。

  • keyboard 模版

    • 调用前需要先申请消息按钮组件模板,这一步会得到一个模板 id,在请求时填在 keyboard 字段上。

    • 申请消息按钮组件模板需要提供响应的 json,具体格式参考 InlineKeyboard

  • markdown 消息支持消息按钮。

更多参考 文档

内嵌格式

利用 content 字段发送内嵌格式的消息。

  • 内嵌格式仅在 content 中会生效,在 ArkEmbed 中不生效。

  • 为了区分是文本还是内嵌格式,消息抄送和发送会对消息内容进行相关的转义。

转义内容

源字符转义后
&&
<&lt;
>&gt;

可参考使用 ContentTextDecoderContentTextEncoder

消息审核

其中推送、回复消息的 code 错误码 304023304024 会在 响应数据包 data 中返回 MessageAudit 审核消息的信息

当响应结果为上述错误码时,请求实体对象结果的API时会抛出 MessageAuditedException 异常并携带相关的对象信息。

详见文档 发送消息 中的相关描述以及 MessageAuditedException 的文档描述。


更多参考 文档

Author

ForteScarlet

Throws

Types

Link copied to clipboard
data class Body

MessageSendApi 所需参数。详情参考 文档

Link copied to clipboard

Properties

Link copied to clipboard
open override val headers: Headers
Link copied to clipboard
protected open override val path: Array<String>

Inherited properties

Link copied to clipboard
open override val body: Any?
Link copied to clipboard
open override val method: HttpMethod
Link copied to clipboard
open override val url: Url

最终用于请求的目标地址。 默认会使用 QQGuild.URL 作为其域名地址。

Functions

Link copied to clipboard
protected open override fun createBody(): Any

Inherited functions

Link copied to clipboard
protected open fun URLBuilder.buildUrl()

已经完成 path 拼接后、追加其他额外内容(例如parameter)时使用

Link copied to clipboard
suspend fun <R : Any> QQGuildApi<R>.request(client: HttpClient, token: String? = null, server: Url? = null, appId: String? = null): HttpResponse

使用 client 向当前目标 API QQGuildApi 发起请求。

Link copied to clipboard
fun QQGuildApi<*>.requestAsync(client: HttpClient, token: String, server: Url = QQGuild.URL, scope: CoroutineScope? = null, appId: String? = null): CompletableFuture<HttpResponse>
Link copied to clipboard
fun QQGuildApi<*>.requestBlocking(client: HttpClient, token: String?, server: Url = QQGuild.URL, appId: String? = null): HttpResponse
Link copied to clipboard
suspend fun <R : Any> QQGuildApi<R>.requestData(client: HttpClient, token: String?, server: Url? = QQGuild.URL, decoder: Json = QQGuild.DefaultJson, appId: String? = null): R

使用此api发起一次请求,并得到预期中的结果。

Link copied to clipboard
fun <R : Any> QQGuildApi<R>.requestDataAsync(client: HttpClient, token: String, server: Url = QQGuild.URL, scope: CoroutineScope? = null, appId: String? = null): CompletableFuture<R>
Link copied to clipboard
fun <R : Any> QQGuildApi<R>.requestDataBlocking(client: HttpClient, token: String?, server: Url = QQGuild.URL, appId: String? = null): R
Link copied to clipboard
fun <R : Any> QQGuildApi<R>.requestDataReserve(client: HttpClient, token: String, server: Url = QQGuild.URL, scope: CoroutineScope? = null, appId: String? = null): SuspendReserve<R>
Link copied to clipboard
fun QQGuildApi<*>.requestReserve(client: HttpClient, token: String, server: Url = QQGuild.URL, scope: CoroutineScope? = null, appId: String? = null): SuspendReserve<HttpResponse>
Link copied to clipboard
inline suspend fun <R : Any> QQGuildApi<R>.requestText(client: HttpClient, token: String?, server: Url? = QQGuild.URL, appId: String? = null, useResp: (HttpResponse) -> Unit = {}): String

通过 request 得到响应,读取为文本并输出debug日志后返回。 不会进行校验。

Link copied to clipboard
fun QQGuildApi<*>.requestTextAsync(client: HttpClient, token: String, server: Url = QQGuild.URL, scope: CoroutineScope? = null, appId: String? = null): CompletableFuture<String>
Link copied to clipboard
fun QQGuildApi<*>.requestTextBlocking(client: HttpClient, token: String?, server: Url = QQGuild.URL, appId: String? = null): String
Link copied to clipboard
fun QQGuildApi<*>.requestTextReserve(client: HttpClient, token: String, server: Url = QQGuild.URL, scope: CoroutineScope? = null, appId: String? = null): SuspendReserve<String>