ReplySupport

interface ReplySupport

通常标记在事件上,代表这是一个 可回复消息 的事件。

ReplySupport 期望中是由一些 事件 进行实现,尤其是 消息事件,代表此事件可以 回复消息 。 默认情况下 ReplySupport 不会实现于任何默认定义的事件类型(因为无法保证有哪些消息事件存在可回复消息这一行为), 但是这不代表你所监听到的实际事件没有实现此类型(例如tencent-guild组件中的消息事件或mirai组件中的消息事件,便实际上的实现了 ReplySupport )。

相比较于 SendSupport, ReplySupport 更倾向于针对一次事件或者这次事件的发送者为目标的回复行为,而不是单纯的发送消息,例如 tencent-guild 组件中, 公域机器人如果想要根据一个@消息回复一段消息,则必须引用这个消息的ID,因此在 tencent-guild 组件中,如果使用的是公域BOT,那么想要回复消息的最好的办法是使用 ReplySupport.reply 而不是 SendSupport.send, 如果要使用 send,你必须在消息中拼接一个 ReplyTo 来指定目标消息的ID。

当你需要尝试使用回复时,假如你面对的是一个不知道是否真的实现了 ReplySupport 接口的消息事件, 那么你可以通过下面的方式来尝试发送:

示例中以 love.forte.simbot.event.GroupMessageEvent 为例, 以 boot 中的注解监听的形式

Kotlin:

suspend fun GroupMessageEvent.listener() {
replyIfSupport { "Hello Simbot" }
}

Kotlin中提供了扩展函数 replyIfSupport, 当当前事件 event is SendSupport 的时候进行回复,否则得到结果 null.

Java:

public void listener(GroupMessageEvent event) {
if (event instanceof ReplySupport) {
((ReplySupport) event).replyBlocking("Hello Simbot")
}
}

Java中可能会略显繁琐,你需要通过 instanceof 判断实现情况,在允许的情况下进行类型转化并进行回复。

See also

Functions

Link copied to clipboard
open suspend fun reply(text: String): MessageReceipt
abstract suspend fun reply(message: Message): MessageReceipt
open suspend fun reply(message: MessageContent): MessageReceipt

回复当前目标,并得到一个 回复回执

Inheritors

Link copied to clipboard