# 行为对象 Actor

> For the complete documentation index, see [llms.txt](https://simbot.forte.love/llms.txt).

行为对象 代表一个跟 Bot 或其他行为对象之间具有关联、且存在一些行为交互能力的类型。

换句话说, `Actor` 和 `Bot` 都是一些具有交互功能（例如发送消息、查询/修改信息等）的充血模型对象。

> **Tip:**
> 下述其他类型均继承 `Actor`, 后续不再赘述。

id
: `ID` 类型, 获取这个行为对象的 ID。

## User

一个“用户”, 例如某个频道服务器中的成员。 不一定代表真人, 也可能是对应平台下的其他 bot 或者某种默认的系统用户。

name
: 这个用户的名称。是与组织范围无关的名称。 当然, 除非平台限制你只能获取到组织范围内的名称（例如频道成员）。

avatar
: 用户的头像链接。获取不到会是 `null`。

## Contact

联系人 是一种可以与 Bot 建立独立会话、进行通讯的行为对象。 联系人可能代表一个其他用户, 也可能代表一个与某用户关联的“会话”。

比如：QQ频道的一个“私聊会话”, 和QQ中的“好友”, 都可以视为 `Contact`。

继承 `User`。

## Organization

组织, 是一个拥有多个 组织成员 的行为主体。

name
: 此组织的名称。

ownerId
: 此组织的拥有者的ID。如果获取不到则为 `null`。

member(...)
: 根据ID寻找或查询指定的成员信息。

members
: 获取此组织内的所有成员集。也包括 Bot 在其中的表现, 除非平台特性无法混淆 Bot 与 Member。

botAsMember
: Bot 在当前组织内作为成员的表现。

roles
: `Collectable<Role>` 类型, 此组织中的所有可用角色集。 有可能得到一个空的集合 —— 这说明当前组织没有角色这一概念。

## ChatRoom

一个 聊天室 是一个可以向其中发送消息的行为主体。 向聊天室发送的消息可能会被多个 组织成员 收到。

name
: 此聊天室的名称。

send(...)
: `ChatRoom` 实现接口 `SendSupport`, 运行通过文本、消息链或事件消息体来发送消息。
:
:
:
: > **Tip:**
: > 如果平台下由于某些条件出现一些不支持 `send` 的实现, 它们会抛出 `UnsupportedOperationException`。

## ChatGroup

一个用于聊天的 聊天群。

群聊本身承载了聚集组织成员的职责和作为聊天室向其他成员发送消息的职责。

> **Tip:**
> 实现 `ChatRoom` 和 `Organization`。

## Guild

一个 频道服务器 是对一组 组织成员 和一组 频道 的统一。

> **Tip:**
> 实现 `Organization`。

channel(...)
: 根据ID寻找一个指定的频道。如果找不到则会得到 `null`。

channels
: 获取此频道服务器内的所有频道集。

chatChannel(...)
: 根据ID寻找一个指定的 聊天频道。 如果找不到则会得到 `null`。

chatChannels
: 获取此频道服务器内的所有聊天频道集。 结果通常是 `channels` 的子集。

> **Note:**
> 根据平台的不同特性, `Guild` 的具体实现还有可能提供更多类似的 API, 例如QQ频道中还有“分类子频道”、“帖子子频道”等。

## Channel

频道 是 频道服务器 中所有频道中的某个频道。 频道的类型可能有很多, 其中就包含了允许发送消息的 聊天频道。

name
: 频道的名称。

category
: `Category?` 类型, 此频道的分类。如果没有分类、或平台中没有分类这个概念, 则可以得到 `null`。

## ChatChannel

聊天频道 继承了 `ChatRoom` 的 `Channel`, 代表这个频道可以用来向其他人发送消息。

## Member

一个组织内的 组织成员。

> **Tip:**
> 继承 `User`。

name
: 此成员的名称。通常是代表它作为一个用户的名称, 而不是在某个组织内的“昵称”。

nick
: 此成员在组织内的昵称。如果未设置或无法获取则会得到 `null`。

## 完整类关系图

> **Tip:**
> 自动生成的。

```PLANTUML
@startuml

interface Actor
interface ChatRoom extends Actor
interface ChatGroup extends ChatRoom, Organization
interface Guild extends Organization
interface Channel extends Actor
interface ChatChannel extends Channel, ChatRoom
interface Contact extends User
interface Organization extends Actor
interface Member extends User
interface User extends Actor

@enduml
```

