diff --git a/docs/Events.md b/docs/Events.md index bdbb2a6d8..8f1182b15 100644 --- a/docs/Events.md +++ b/docs/Events.md @@ -3,6 +3,7 @@ ## 目录 - [事件系统](#事件系统) +- [快速指导](#快速指导) - [事件通道](#事件通道) - [通道操作](#通道操作) - [过滤](#过滤) @@ -33,6 +34,52 @@ Mirai 以事件驱动。 > 回到 [目录](#目录) + +## 快速指导 + +如果你了解事件且不希望详细阅读,可以立即仿照下面示例创建事件监听并跳过本章节。 + +Kotlin +```kotlin +// 事件监听器是协程任务。如果你有 CoroutineScope,可从 scope 继承生命周期管理和 coroutineContext +GlobalEventChannel.parentScope(coroutineScope).subscribeAlways { event -> + // this: GroupMessageEvent + // event: GroupMessageEvent + subject.sendMessage("Hello!") +} + +// 如果不想限制生命周期,可获取 listener 处理 +val listener: CompletableJob = GlobalEventChannel.subscribeAlways { event -> } + +listener.complete() // 停止监听 +``` + +Java +```java +// 创建监听 +Listener listener = GlobalEventChannel.INSTANCE.subscribeAlways(GroupMessageEvent.class, event -> { + event.getSubject().sendMessage("Hello!"); +}) + +listener.complete(); // 停止监听 +``` + +异常默认会被相关 Bot 日志记录。可以在 `subscribeAlways` 添加如下内容来处理异常。 +``` +// Kotlin +.exceptionHandler { e -> e.printStackTrace() } + +// Java +.exceptionHandler(e -> e.printStackTrace()) +``` + +**`GlobalEventChannel` 会监听到来自所有 `Bot` 的事件,如果只希望监听某一个,请使用 `bot.eventChannel`。** + +> 现在你可以继续阅读,或跳到下一章 [Messages](Messages.md) +> +> 回到 [目录](#目录) +> [回到 Mirai 文档索引](README.md#mirai-core-api-文档) + ## 事件通道 [`EventChannel`]: ../mirai-core-api/src/commonMain/kotlin/event/EventChannel.kt diff --git a/docs/Messages.md b/docs/Messages.md index 01bb8cc73..52a8a743b 100644 --- a/docs/Messages.md +++ b/docs/Messages.md @@ -135,20 +135,22 @@ contact.sendMessage(new PlainText("你要的图片是:").plus(Image.fromId("/f 可以使用如上表格所示的方法构造,或使用 DSL builder。 ``` -class MessageChainBuilder : MutableList { +class MessageChainBuilder : MutableList, Appendable { operator fun Message.unaryPlus() operator fun String.unaryPlus() + fun add(vararg messages: Message) } ``` -每个 `Message.unaryPlus` 都会被加入到结果消息链中。 - ```kotlin val chain = buildMessageChain { +PlainText("a") +AtAll - +Image("/f8f1ab55-bf8e-4236-b55e-955848d7069f") + +Image("/f8f1ab55-bf8e-4236-b55e-955848d7069f") + add(At(123456)) } + +// chain 结果是包含 PlainText, AtAll, Image, At 的 MessageChain ``` #### 在 Java 构造消息链 @@ -164,7 +166,8 @@ val chain = buildMessageChain { 使用 `MessageChainBuilder`: ```java MessageChain chain = new MessageChainBuilder() - .append(new PlainText("a")) + .append(new PlainText("string")) + .append("string") // 会被构造成 PlainText 再添加, 相当于上一行 .append(AtAll.INSTANCE) .append(Image.fromId("/f8f1ab55-bf8e-4236-b55e-955848d7069f")) .build();