Skip to content

Commit

Permalink
doc: 部分文档更新
Browse files Browse the repository at this point in the history
  • Loading branch information
ForteScarlet committed Mar 9, 2024
1 parent 034a4a1 commit a87c6fe
Show file tree
Hide file tree
Showing 4 changed files with 264 additions and 4 deletions.
7 changes: 7 additions & 0 deletions Writerside/topics/QGChannel.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ bot.subscribe(EventProcessors.block(ChannelCreate.class, (event, raw) -> {
</tab>
</tabs>

> 详细的事件列表请参考
> <a href="event.md" />
> [API文档](%api-doc%)
## 组件库中的子频道 {id="component-channels"}

Expand All @@ -72,6 +75,7 @@ bot.subscribe(EventProcessors.block(ChannelCreate.class, (event, raw) -> {

## 获取子频道 {id="get-channels"}

组件中 `QGChannel` 类型实现了simbot标准API中的 `Channel` 类型,并提供与子频道相关的功能。
如果你想要获取一个 `QGChannel`,你可以在 `QGBot``QGGuild` 或一个与子频道相关的事件中获取。

`QGBot` 中获取子频道你可以前往参考
Expand Down Expand Up @@ -191,6 +195,9 @@ channel.sendReserve(Messages.of(
</tab>
</tabs>

> 有关消息元素、消息发送的更多内容前往参考
> <a href="messages.md" />
### QGForumChannel

有关论坛子频道的内容可前往参考
Expand Down
175 changes: 174 additions & 1 deletion Writerside/topics/QGMember.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,177 @@ switcher-label: Java API 风格

# 频道成员 QGMember

Start typing here...
频道成员,即 `Member`,存在于频道服务器(`Guild`)中。


## API中的频道成员 {id="api-members"}

在API模块中存在一些用来获取 `Member` 的API。

比如你可以通过 `GetMemberApi` 获取 `SimpleMember` 类型结果的成员信息、
`DeleteMemberApi` 删除(踢出)一个成员等。

> 详细的API列表请参考
> <a href="api-list.md" />
> [API文档](%api-doc%)
## Stdlib模块中的频道成员 {id="stdlib-members"}

当你直接使用标准库模块时,你可以在一些与频道成员相关的事件中得到它的信息。

比如当你处理 `GuildMemberAdd` 类型事件时,可以通过 `data` 获取到 `EventMember`

<tabs group="code">
<tab title="Kotlin" group-key="Kotlin">

```Kotlin
bot.process<GuildMemberAdd> {
val member: EventMember = data
}
```

</tab>
<tab title="Java" group-key="Java">

```Java
bot.subscribe(EventProcessors.async(GuildMemberAdd.class, (event, raw) -> {
var member = event.getData();
// ...
return CompletableFuture.completedFuture(null);
}));
```
{switcher-key="%ja%"}

```Java
bot.subscribe(EventProcessors.block(GuildMemberAdd.class, (event, raw) -> {
var member = event.getData();
}));
```
{switcher-key="%jb%"}

</tab>
</tabs>

> 详细的事件列表请参考
> <a href="event.md" />
> [API文档](%api-doc%)
## 组件库中的频道成员 {id="component-members"}

组件中 `QGMember` 类型实现了simbot标准API中的 `Member` 类型,并提供与频道成员相关的功能。
如果你想要获取一个 `QGChannel`,你可以在 `QGBot``QGGuild` 或一个与子频道相关的事件中获取。

`QGBot` 中获取子频道你可以前往参考
<a href="QGBot.md#qgbot-guild" />。

`QGGuild` 中获取频道成员你可以前往参考
<a href="QGGuild.md#get-members" />。

在事件中获取,那么这个事件应当与**频道成员有所关联**
它们通常使用 `member` 属性获取。

> 详细的事件列表请参考
> <a href="event.md" />
> [API文档](%api-doc%)
`QGMemberAddEvent` 事件为例:

<tabs group="code">
<tab title="Kotlin" group-key="Kotlin">

```Kotlin
val event: QGMemberAddEvent = ...
val member = event.member()
```

</tab>
<tab title="Java" group-key="Java">

```Java
QGMemberAddEvent event = ...
event.getMemberAsync()
.thenAccept(member -> { ... })
```
{switcher-key='%ja%'}

```Java
QGMemberAddEvent event = ...
var member = event.getMemberBlocking()
```
{switcher-key='%jb%'}

```Java
QGChannelCreateEvent event = ...
event.getMemberReserve()
// 例如转为 Reactor 的 `Mono`
.transform(SuspendReserves.mono())
.subscribe(member -> { ... })
```
{switcher-key='%jr%'}

</tab>
</tabs>


## 私聊消息 {id='send-message'}

`QGMember` 实现simbot标准API中的 `Channel`,而它又支持 `SendSupport`
也就是说 `QGMember` 支持向某个频道成员发送私聊消息。

<tabs group="code">
<tab title="Kotlin" group-key="Kotlin">

```Kotlin
val member: QGMember = ...
member.send("消息内容")
member.send("消息内容".toText() + At("user id".ID))
```

</tab>
<tab title="Java" group-key="Java" switcher-key="%ja%">

```Java
QGMember member = ...

var sendTask1 = member.sendAsync("消息内容");
var sendTask2 = member.sendAsync(Messages.of(
Text.of("文本消息"),
At.of(Identifies.of("user id"))
));
```

</tab>
<tab title="Java" group-key="Java" switcher-key="%jb%">

```Java
QGMember member = ...

member.sendBlocking("消息内容");
member.sendBlocking(Messages.of(
Text.of("文本消息"),
At.of(Identifies.of("user id"))
));
```

</tab>
<tab title="Java" group-key="Java" switcher-key="%jr%">

```Java
QGTextChannel member = ...

member.sendReserve("消息内容")
.transform(SuspendReserves.mono())
.subscribe(receipt -> { ... });

member.sendReserve(Messages.of(
Text.of("文本消息"),
At.of(Identifies.of("user id"))
)).transform(SuspendReserves.mono())
.subscribe(receipt -> { ... });
```

</tab>
</tabs>

> 有关消息元素、消息发送的更多内容前往参考
> <a href="messages.md" />
79 changes: 76 additions & 3 deletions Writerside/topics/messages.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
---
switcher-label: Java API 风格
---
<var name="jr" value="Reactor"/>

# 消息

<tldr>
Expand Down Expand Up @@ -31,8 +36,76 @@
</def>
</deflist>

## 使用/发送消息元素 {id='message-usage'}
## 发送消息 {id='message-usage'}

在simbot中,使用组件的消息元素与使用其他消息元素别无二致,
通常使用 `SendSupport``ReplySupport` 的实现类中提供的 `send(...)``reply(..)` API 发送消息。

前者多由
<a href="actors.md">行为对象</a>
中的一些类型实现(例如`QGMember``QGTextChannel`),
而后者则通常由与消息相关的事件实现(例如 `QGAtMessageCreateEvent`)。

此处以 `QGTextChannel` 为例,`send` 可以使用拼接后的消息链、字符串或单独的消息元素作为参数。

<tabs group="code">
<tab title="Kotlin" group-key="Kotlin">

```Kotlin
val channel: QGTextChannel = ...
channel.send("消息内容")
channel.send("消息内容".toText() + At("user id".ID))
```

</tab>
<tab title="Java" group-key="Java" switcher-key="%ja%">

```Java
QGTextChannel channel = ...

var sendTask1 = channel.sendAsync("消息内容");
var sendTask2 = channel.sendAsync(Messages.of(
Text.of("文本消息"),
At.of(Identifies.of("user id"))
));
```

</tab>
<tab title="Java" group-key="Java" switcher-key="%jb%">

```Java
QGTextChannel channel = ...

channel.sendBlocking("消息内容");
channel.sendBlocking(Messages.of(
Text.of("文本消息"),
At.of(Identifies.of("user id"))
));
```

</tab>
<tab title="Java" group-key="Java" switcher-key="%jr%">

```Java
QGTextChannel channel = ...

channel.sendReserve("消息内容")
.transform(SuspendReserves.mono())
.subscribe(receipt -> { ... });

channel.sendReserve(Messages.of(
Text.of("文本消息"),
At.of(Identifies.of("user id"))
)).transform(SuspendReserves.mono())
.subscribe(receipt -> { ... });
```

</tab>
</tabs>


<note title="标准API">

在simbot中,使用组件的消息元素与使用其他消息元素别无二致
你可以前往 [Simple Robot 应用手册](https://simbot.forte.love/basic-messages.html) 了解更多

> 你可以前往 [Simple Robot 应用手册](https://simbot.forte.love/basic-messages.html) 了解更多。
</note>
7 changes: 7 additions & 0 deletions Writerside/topics/role/api_role.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,10 @@ switcher-label: Java API 风格

QQ频道中有一些针对 `角色` 的API。

## API中的角色 {id="api-roles"}

## Stdlib模块中的角色 {id="stdlib-roles"}

## 组件库中的角色 {id="component-roles"}

`QGRole`

0 comments on commit a87c6fe

Please sign in to comment.