Update docs

This commit is contained in:
Him188 2021-01-13 16:28:02 +08:00
parent 7b5cbfce5b
commit e409f5506a
2 changed files with 55 additions and 5 deletions

View File

@ -3,6 +3,7 @@
## 目录
- [事件系统](#事件系统)
- [快速指导](#快速指导)
- [事件通道](#事件通道)
- [通道操作](#通道操作)
- [过滤](#过滤)
@ -33,6 +34,52 @@ Mirai 以事件驱动。
> 回到 [目录](#目录)
## 快速指导
如果你了解事件且不希望详细阅读,可以立即仿照下面示例创建事件监听并跳过本章节。
Kotlin
```kotlin
// 事件监听器是协程任务。如果你有 CoroutineScope可从 scope 继承生命周期管理和 coroutineContext
GlobalEventChannel.parentScope(coroutineScope).subscribeAlways<GroupMessageEvent> { event ->
// this: GroupMessageEvent
// event: GroupMessageEvent
subject.sendMessage("Hello!")
}
// 如果不想限制生命周期,可获取 listener 处理
val listener: CompletableJob = GlobalEventChannel.subscribeAlways<GroupMessageEvent> { 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

View File

@ -135,20 +135,22 @@ contact.sendMessage(new PlainText("你要的图片是:").plus(Image.fromId("/f
可以使用如上表格所示的方法构造,或使用 DSL builder。
```
class MessageChainBuilder : MutableList<SingleMessage> {
class MessageChainBuilder : MutableList<SingleMessage>, 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();