# 文档主页

欢迎来到RainyBot官方文档！

### 欢迎使用RainyBot！

这是一个新手友好，功能强大，简单易上手的跨平台聊天机器人开发框架

### 概览

{% hint style="info" %}
提示

此处的概览不包含与使用RainyBot相关的内容，因此您可以简单浏览此页后直接跳转到[安装与运行](/readme/install)部分来了解如何开始使用
{% endhint %}

RainyBot是一个跨平台的机器人开发框架，基于 [Godot Engine 4.0](https://godotengine.org/) 进行开发。 本项目成立的目的，是为了建立一个低门槛，简单易用的机器人开发框架。 通过提供大量精心设计，智能且极简的交互API与预置功能，结合[GDScript脚本语言](https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_basics.html)的简便语法， 来尽可能地提升开发效率且降低开发难度，且让更多开发经验不足，乃至无经验的用户也能够轻松开发属于自己的各类社交平台机器人应用。

例如，RainyBot为开发过程中常见的，诸如上下文的连续交互，命令/事件/关键词的注册，消息的构建等操作均提供了大量高度封装且人性化的API接口，可以通过极少的代码来实现复杂的功能。

并且，得益于[Godot Engine](https://godotengine.org/)强大的图形渲染能力，RainyBot拥有显著优于其他Bot的静态/动态图像生成功能；通过Godot引擎简单易用的编辑器，与RainyBot精心设计的极简图像生成相关API，您可以在几分钟内以极低的难度完成图像生成相关功能的开发。

RainyBot精心设计了一系列的便于使用的抽象API，并在底层将各类API调用关联到各个适配器并与对应的社交平台进行交互。目前，RainyBot通过WebSocket协议实现了基于[Mirai Api Http](https://github.com/project-mirai/mirai-api-http)的适配器，后者是[Mirai QQ](https://github.com/mamoe/mirai)的一个插件，允许开发者通过Http/Websocket等协议与[Mirai QQ](https://github.com/mamoe/mirai)进行交互，从而实现QQ平台机器人的相关功能。

对于各类性能关键的任务，RainyBot在内部均使用 [await异步](https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_basics.html#awaiting-for-signals)及多线程来保障高负载状态下的并发及消息吞吐量。并且， RainyBot的所有需要异步执行的API均灵活使用了[await](https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_basics.html#awaiting-for-signals)相关特性进行封装，从而实现单行代码即可进行异步任务的请求及结果获取

### 功能特色

* 模块化设计，大部分API可独立于协议后端存在，通过不同适配器实现即可对接不同协议，实现一次编写多处运行 (当前支持[Mirai-Api-Http](https://github.com/project-mirai/mirai-api-http)协议后端)
* 简单易懂的配置与管理，一次配置完成后自动管理各个协议后端的配置/运行/连接，无需每次手动启动或进行设置
* 简单，完善，易用且智能的API，可通过极少代码实现复杂功能，且可自动根据传入内容的类型决定与机器人的交互行为；同时内置大量诸如上下文交互，关键词触发，事件阻塞一类的便捷功能
* 极易上手且极其强大的图像生成功能，可以通过内置场景编辑器可视化创建从简单的2D到复杂的3D的图像场景，并使用简单易用的API将插件与场景进行交互并生成静态/动态图像
* 灵活的插件管理机制，支持插件间交互/热重载/热编辑/依赖设定等功能，同时内置功能较为全面的插件编辑器，可便捷地即时开发与修改插件
* 人性化GUI控制台界面，全中文调试信息输出，并且可以轻松实现插件与GUI的交互（如自定义GUI界面，自定义控制台命令等)
* 开箱即用的各类辅助功能接口，无需操作文件读写，即可便捷初始化并管理插件配置，插件数据，事件/命令注册等
* 活跃的功能开发与问题修复，且将以社区为驱动，广泛采纳各类建议与需求，共同打造属于所有人的RainyBot

### 工作原理

在RainyBot的幕后，还有"适配器"与"协议后端"这两个重要的模块。

协议后端将负责与目标平台的直接通信，通常为一个第三方库(在当前版本中为[Mirai QQ](https://github.com/mamoe/mirai))。协议后端接收到消息或事件后，将会将其直接或间接发送到RainyBot中与之连接的对应适配器，例如当前版本中，[Mirai QQ](https://github.com/mamoe/mirai)将通过[Mirai API HTTP](https://github.com/project-mirai/mirai-api-http)插件与RainyBot Mirai适配器进行Websocket通信。

收到数据后，适配器将会把协议后端传入的数据转换及包装为符合RainyBot API规范的事件及消息等实例，并根据注册事件时提供的条件来对各个插件进行处理(关键词匹配，上下文匹配，优先级传递，事件通知及阻塞等)。

而对于API的各类调用，原理也大致相同。适配器将会把每次API调用解析处理后，根据需要来转换为协议后端可以理解的数据格式，并发送至协议后端来与对应平台进行交互。

除通信以外，适配器还承担了协议后端的配置处理与启动相关的任务。例如，在当前版本中，RainyBot Mirai适配器将会在每次启动时检测是否存在已启动的Mirai实例，并尝试进行连接。若无法建立连接，适配器将基于对应的简易配置文件自动生成并设置[Mirai QQ](https://github.com/mamoe/mirai)与[Mirai API Http](https://github.com/project-mirai/mirai-api-http)的相关配置，生成对应系统平台的启动脚本，检测启动依赖(Mirai QQ需要[Java 11+](https://www.oracle.com/java/technologies/downloads/))，并在所有条件成功时尝试自动启动Mirai协议后端并进行连接。

首次连接成功后，适配器的工作将暂时告一段落。接下来，RainyBot核心将开始扫描并加载各类插件。各类事件/命令/关键词的注册通常也将在此时进行。所有插件加载完毕后，RainyBot将开始监听来自协议后端的各项数据，并按如上所述的方式进行处理。

在RainyBot正常关闭时，RainyBot核心将卸载所有插件，取消注册插件对应的各类事件/命令/关键词，保存插件的数据/配置文件，并在清理所有运行过程中产生的缓存后结束进程

### 基于的项目

以下列表列出了本项目所基于的项目，使用本项目时请同时参考它们的许可信息。

* [Godot Engine](https://github.com/godotengine/godot)
* [Mirai-Api-HTTP](https://github.com/project-mirai/mirai-api-http)
* [Mirai](https://github.com/mamoe/mirai)

### 相关链接

此处提供了一些可能与本项目有关，或对您有帮助的链接

* [Godot使用文档](https://docs.godotengine.org/en/latest/)
* [GDScript语言教程](https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/)
* [Godot类参考API](https://docs.godotengine.org/en/latest/classes/index.html)
* [Mirai-Api-Http文档](https://github.com/project-mirai/mirai-api-http/blob/master/docs/api/API.md)

### 项目许可

项目基于AGPL-3.0许可进行开源，具体内容请参见[LICENSE文件](https://github.com/Xwdit/RainyBot-Core/blob/main/LICENSE)

### 联系信息

交流QQ群: 881409193

Xwdit - <xwditfr@gmail.com>

项目社区: <https://godoter.cn/t/rainybot>

项目开源地址: <https://github.com/Xwdit/RainyBot-Core>


# 安装与运行

此页面将介绍如何配置与使用RainyBot

### 运行需求

***注意：请不要将RainyBot放置在中文路径中，否则可能会出现各类问题！***

支持的操作系统：64位 Windows 7 或以上版本 (Mac OS/Linux支持将在后续版本中添加)

[Java 版本 >= 11](https://www.oracle.com/java/technologies/downloads/) (此需求来源于RainyBot默认集成的Mirai协议后端，核心无需任何运行环境)

可选：支持Vulkan渲染器的图形卡 (可通过硬件加速提升性能)

* RainyBot默认使用SwiftShader软件渲染器以提升兼容性，***若您的图形卡支持Vulkan渲染器，请删除软件根目录下的vulkan-1.dll以使用硬件来加速软件窗口渲染。***

### 配置与使用

1. 从GitHub发布页下载最新的发布版本: [**立即下载**](https://github.com/Xwdit/RainyBot-Core/releases)
2. 运行RainyBot，随后按照控制台显示的说明，打开指定的配置文件进行配置
3. 配置完毕后请重新启动RainyBot。此时若配置正确，将自动开始加载内置的协议后端（当前版本内置了Mirai协议库)
4. 请留意 *协议后端* 的控制台信息，可能会要求您进行登陆验证等操作，您可以从以下链接获取相关帮助: [**需要滑动验证的解决方案**](https://github.com/Xwdit/RainyBot-Core/issues/45)
5. 若一切顺利，协议后端的控制台中将出现中文或英文的登录成功/加载成功字样，且RainyBot控制台中将出现加载成功字样

![Mirai控制台登录成功](/files/ktlAXHRjdyaYkuzy38p3)

* 此时起可最小化协议后端的控制台窗口，后续操作均只需在RainyBot控制台中进行即可。从此处开始，将直接使用“控制台”来表示RainyBot的控制台界面
* 在控制台中输入指令`help`(或`/help`)可查看所有可用的控制台指令，例如输入`/help plugins`可查看插件管理相关指令
* 恭喜！您成功完成了RainyBot的基本配置，开始尽情使用吧\~

### 版本更新

在更新到新版本的RainyBot时，若更新日志中无特殊说明，则只需删除`RainyBot根目录/adapters/mirai/`下除`bots`文件夹以外的所有内容，删除RainyBot根目录下的`.pck(如果有)`及`.exe`文件，删除Rainybot根目录下的`project.godot(如果有)`/`project.binary(如果有)`文件以及`libs(如果有)`和`.godot(如果有)`文件夹，随后下载完整发行包并用其中所有内容直接覆盖旧版本文件即可。

### 故障排除

启动时提示当前图形卡不支持Vulkan/OpenGL，因而无法启动：

* 若您未删除软件目录下的vulkan-1.dll，则此问题通常因为您的系统中缺失SwiftShader软件渲染器所必需的Visual C++ 2015运行时，您可以[点此下载](https://docs.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170)安装即可解决此问题。
* 若您删除了vulkan-1.dll并弹出此提示，说明您的电脑显示卡不支持Vulkan渲染器，请还原软件目录下的vulkan-1.dll以便使用软件渲染器来显示软件窗口。

### 从源码运行

如果您希望从项目源码顺利运行/编译RainyBot，请确保遵循以下条目：

* 请使用 [RainyBot的自定义Godot Engine 4.0分支](https://github.com/Xwdit/godot/tree/rainybot) 来打开本项目。
* 请将 [Mirai](https://github.com/mamoe/mirai) 与 [Mirai-Console](https://github.com/mamoe/mirai-console) 的`v2.14.0`版Jar文件及相关依赖文件置于\_与Godot编辑器可执行文件同目录下\_的`adapters/mirai/libs`路径中
* 请将 [Mirai-Api-HTTP](https://github.com/project-mirai/mirai-api-http) 的`v2.9.1`版Jar文件置于\_与Godot编辑器可执行文件同目录下\_的`adapters/mirai/plugins`路径中

RainyBot的[发布版本](https://github.com/Xwdit/RainyBot-Core/releases)中已包含以上所需文件，因此无需额外进行配置。若您在配置以上文件时遇到问题，可以直接从最新的发布版本文件包中复制`adapters`文件夹以及其中的内容，并置于`Godot编辑器可执行文件同目录下`即可。


# 开始使用

先来认识一下RainyBot的一些常用功能吧\~

如果您已按照前面的说明完成配置并成功运行RainyBot，那么您现在应该已经准备好使用RainyBot的各种功能了\~

下面，将为您简单介绍一些RainyBot使用层面的常用功能，[插件开发](/readme/plugin-dev)相关内容请参见后续章节。

### 目录结构

在开始之前，让我们先简单了解一下RainyBot的目录结构

```
📂 RainyBot根目录
├── 📂 .godot - 储存各类资源的优化版本，请不要手动删除或修改
├── 📂 adapters - 储存各个协议后端的相关文件，请不要随意删除或修改
|   └── 📂 mirai - Mirai协议后端相关文件
├── 📂 cache - 储存RainyBot与插件运行过程中的各类缓存，将在关闭时自动清空
|   └── 📜 <插件ID>.rca - 某个插件的缓存数据
├── 📂 config - 储存RainyBot与插件的各类配置文件
|   └── 📜 <插件ID>.json - 某个插件的配置文件
├── 📂 data - 储存RainyBot与插件的各类数据
|   └── 📜 <插件ID>.rdb - 某个插件的数据库文件
├── 📂 libs - RainyBot运行所需的各类核心文件，请不要随意修改
├── 📂 logs - 储存RainyBot运行时的控制台日志
├── 📂 plugins - 储存各个插件及其所需的文件
├── 📜 project.godot - 储存了RainyBot运行所需的各类核心参数，请不要随意修改
├── 📜 RainyBot(.exe) - RainyBot的主程序可执行文件
```

### 管理插件

得插件者得天下，RainyBot本身不具备诸如聊天，签到一类的具体功能，但其提供了丰富易用的API以供插件实现各类所需功能；通过各个插件的组合使用，您可以轻松打造出自己梦想中的专属Bot\~

在RainyBot中，您可以通过插件管理器GUI，或控制台指令来管理各个插件。若要启动插件管理器，请在主菜单选择`插件->插件管理器`即可。若要通过指令管理插件，请在控制台中输入`/help plugins`来查看插件管理相关指令

![插件管理器GUI](/files/5FTj8G6axB78HhFbWX5u)

#### 安装/加载插件

插件的安装非常简单，您可以在`插件菜单`或`插件管理器`中选择`打开插件文件夹`，将插件各类文件(至少为一个.gd文件) 放入插件文件夹后，通过插件管理器刷新插件列表，选中新出现的对应文件，点击`重新加载`即可。您也可以通过`/plugins load <文件名>`指令，或`重载所有插件`选项来加载新的插件

![未加载的插件](/files/ewTt5pduTWYMIEH9d2gi)

有些插件可能依赖于其他插件，对于此类情况，请确保要加载的插件所依赖的插件存在于插件文件夹中，且可被正常加载，否则该插件将会加载失败

需要注意的是，对于包含了各类资源及场景的插件(如图像资源，字体资源等)，请在将其各个文件放入插件目录后，在`插件菜单`中选择`重新导入所有资源`来让RainyBot初始化插件包含的各个资源，否则插件或其场景可能会无法正常加载或工作。

![重新导入所有资源](/files/LyXWEvbF4SQLEonDG4mP)

#### 重载/卸载/删除插件

与安装插件类似，您可以通过`plugins`指令或插件管理器界面来重载/卸载/删除各个插件。但是，如果某个正在操作的插件是其他插件的依赖，则操作将会失败；您需要先卸载依赖此插件的其他插件，才能对此插件进行操作。

除对单个插件进行操作外，您还可以批量重载/卸载所有插件。在批量操作时，RainyBot将自动处理依赖关系，因此您无需按顺序手动卸载某些插件。

![已加载的插件](/files/h3FIlTCvf3g46QYzCk5H)

#### 新建/编辑插件

RainyBot内置了一个功能完善的插件编辑器，拥有基本的`语法高亮/自动补全/错误检查`等功能，您可以通过插件管理器或`plugins`指令来新建/编辑一个插件。编辑时将会自动启动内置的插件编辑器并加载要编辑的插件。编辑完成后，您可以在插件编辑器中选择`保存`或`保存并重载`插件。

关于插件开发的具体介绍及教程，请参见后续的[插件开发](/readme/plugin-dev)章节。

![插件编辑器](/files/TpqFbYotllGs01hTbqAF)

#### 查看插件信息

您可以通过插件管理器或`plugins`指令来查看某个插件的各种信息，如名称，ID，作者，版本，依赖，描述等。对于已加载的插件，您还可以通过插件管理器来查看它的事件/关键词/控制台命令注册列表(暂不支持指令)。

![插件注册列表](/files/UKpoJalpAZI9KzjQIzh0)

#### 管理插件数据

除查看信息外，您还可以通过插件管理器或`plugins`指令来查看或管理某个插件的各类数据，如数据库/缓存/配置文件等。目前暂时仅支持通过指令来查看或管理插件数据库的各类数据，因此建议使用插件管理器来进行更直观全面的管理。

![插件数据列表](/files/PhK62EOVCpo6sZctAp0W)

### 尝试示例插件

一时半会找不到想要用的插件，或者想要测试RainyBot是否正常运行？您可以[在此处下载](https://github.com/Xwdit/RainyBot-Docs/tree/main/examples)示例插件，按照上述方法进行安装即可。

### 使用控制台指令

RainyBot预置了大量便捷的控制台指令，以便您直接进行各种操作。同时，部分插件可能也会注册一些控制台指令用于实现各类功能。若要查看所有已注册的控制台指令，请在控制台输入`/help`即可打印所有指令列表。

![RainyBot控制台](/files/Vgu3KhvuZuQkGgJyT0zH)

### 探索菜单功能

除上方所述内容外，您还可以在RainyBot控制台页面的各个菜单中找到其余各项便捷功能。请大胆的去尝试它们，以便在需要时知道如何操作。

![主菜单](/files/G1myNz9tvVclehxZzVyQ)


# 插件开发

插件开发，从入门到创世

找不到符合自己需求的插件？脑海中有一些好点子想要实现？别担心，RainyBot正是为了人人都能开发属于自己的Bot为目标而设计的；请抽出几分钟的时间，试着跟随下方的渐进式教程制作你的第一个插件，我相信你会爱上RainyBot的易用性的\~

### 你好，世界

让我们实现一个简单却有里程碑般意义的功能-让机器人回应你的问候语 "你好"

* 在主菜单中选择 `插件->插件管理器`来打开插件管理器，在新建插件输入框中输入`hello_world`并点击`新建插件`按钮来创建新插件

![创建新插件](/files/kvBxeLLw4s4lsuDHvYXR)

* 此时，插件列表中应该出现了新的hello\_world.gd选项，但目前仍无法被加载，这是因为缺少了一些必要的插件信息，让我们将它补齐吧\~

![无法加载的hello\_world插件](/files/CGyf5BoMgd6FvGiJLHDW)

* 选中`hello_world.gd`，点击底部的编辑按钮，内置插件编辑器将会启动并加载插件的脚本文件。聪明的你应该会注意到，插件文件中已经存在一些文本；这些是RainyBot为您默认填写的插件模板，以便于您快速开始插件开发。
* 让我们找到`func _on_init()->void:`这一行，这是一个虚函数，位于其中的代码行将会在插件脚本文件被读取信息时执行。您应该能看到其中已经有一个被注释的`#set_plugin_info("","","","","")`函数，这个函数将会在插件文件被读取时告诉RainyBot插件的相关信息。

![](/files/Ux2lUDNLQx0Nz9LyATwt)

* 让我们移除这行函数前方的`#`注释符号来允许它被执行，并在其中的五个双引号中分别填写:插件的唯一ID(建议全小写英文字母+下划线，不可与已加载的其他插件重名)，插件显示名称，插件作者，插件版本，插件描述。例如，在这里可以填写为`set_plugin_info("hello_world","Hello World","我是作者名","1.0","这是一个让机器人说你好的插件")`。

![声明插件的各种信息](/files/3oZcNF9f6PdQ9REUgyaU)

* 编辑完毕后，让我们点击插件编辑器顶部的保存并重载按钮，此时插件应该能够被正常加载，但它还没有任何功能。现在，请找到`_on_load()`虚函数，位于其中的代码将在插件被成功加载后执行一次。
* 在这个函数中，删除`#register_event(Event,"")`函数前方的`#`注释符号来允许它被执行。这行函数可以将插件注册为响应指定的事件。让我们把这个函数中的第一个参数的`Event`修改为`FriendMessageEvent`，这样一来，插件将会响应好友消息事件。随后，让我们在第二个参数的双引号中填入`trigger_keyword`，这是一个RainyBot内置的函数，被执行时将会尝试进行关键词匹配。如此填写意味着插件在接收到好友消息事件时，将试图用好友消息事件中的消息来匹配并触发关键词。
* 随后，在`_on_load()`虚函数中删除`#register_keyword("","")`函数前方的`#`注释符号来允许它被执行。这行函数可以注册指定的关键词并绑定到指定的自定义函数。让我们将第一个参数设置为`"你好"`，第二个参数设置为`"hello"`。这样一来，在匹配到关键词"你好"时，将会执行插件中定义的"hello"函数。

![在插件加载完毕时，注册好友消息事件用于匹配关键词，注册"你好"关键词绑定到"hello"函数](/files/7EcfjWVZjncJzi1BYKhh)

* 我们目前还没有定义"hello"函数，因此请翻到插件底部的空白区域，添加新的一行内容: `func hello(keyword,parsed,arg,event):`
* 这样一来，我们便成功定义了一个新的函数hello，这个函数将接受来自被触发的关键词的四个参数，从左到右分别为 触发这个函数的关键词文本，被解析后的关键词文本，关键词被触发时附带的参数，触发关键词的事件。我们目前不需要知道前三个参数的作用，只需要关注第四个"event"参数即可。
* 在hello函数被关键词调用时，我们应该能通过event参数接收到触发了关键词的那次事件。对于所有消息事件，其中都有一个reply(<消息>)函数可以用于回应消息到事件的来源位置。因此，我们只需要在`func hello(keyword,parsed,arg,event):`中写下新的一行 `event.reply("你好世界")`。这样一来，只要你通过好友消息触发了关键词"你好"，那么将会执行你定义的hello函数中的代码，即回复"你好世界"到收到好友消息的原位置，也就是与你的聊天会话中。

![定义hello函数，并在其中进行回复](/files/ekEaQXz4E4jXYfw1LtEP)

* 点击插件编辑器的`保存并重载`按钮，试着给Bot私聊发送一条"你好"，然后见证这历史性的的瞬间吧\~
* 恭喜，你完成了你的第一个人机应答插件！您可以随时删除插件模板中没有使用的注释或虚函数，这样可以让整个插件脚本简洁许多

![最终成品](/files/5UKjRvd9D3AVQdG0A7Ys)

* 出于谨慎起见，本篇教程稍微有些冗长；但实际上，我们只通过8行简短的代码就实现了一个关键词应答插件，且与实际功能相关的代码仅有5行(除去插件类型声明和插件信息声明)。相信本教程过后，您一定认识到了RainyBot插件开发流程的简单易懂。
* 并且，简单不意味着简陋；随意举例来说，在关键词注册函数中，您甚至还可以指定匹配模式，事件传递阻塞，动态关键词等内容。RainyBot为您设置了一些常用的默认值，因此在本教程的插件中您才无需手动设置这些参数。也就是说，RainyBot API被设计为可以根据您的需求自适应，并且不仅局限于函数的参数数量上，还有诸如类型自适应，条件自适应等特性。无论是需要高级用例还是简单的调用，RainyBot都可以让您尽可能简易地来完成。

### 从现有插件中学习

我们为RainyBot准备了一些[常见领域的示例插件](https://github.com/Xwdit/RainyBot-Docs/tree/main/examples)，并且为每行代码都进行了详细的注释。您可以尝试结合[RainyBot API](/api)阅读并理解它们，还可以尝试自己动手来修改/增加它们的功能。正所谓实践是最好的老师，相信您一定可以从示例插件中学习到更多RainyBot的开发与使用技巧\~

如果您遇到任何问题，请大胆的到[社区群聊](https://qm.qq.com/cgi-bin/qm/qr?k=1nKmcY2qdc-q2Q8BYkn1MyhHrfc3oZ58\&jump_from=webapi)，[交流论坛](https://godoter.cn/t/rainybot)等地进行提问，RainyBot社区的许多热心的小伙伴会帮助您解答您的疑问\~ 并且在这些地方，您还可以找到其他用户发布的插件，虽然注释通常不如示例插件那样完善，但也可以让您学习到一些示例插件中暂未涵盖的知识点


# 事件注册与处理

事件，可以说是插件开发的核心与基础。大多数用例中，插件的主要工作都是在接收到某些特定事件后对其做出响应。我们常见的诸如关键词匹配，上下文处理等功能，也是建立在接收并响应事件的这个基础上的。

在RainyBot中，事件分为以下几大类型：Bot自身事件，好友事件，群组事件，消息事件，请求事件，其它客户端事件，动作事件。其中的每种事件类型，还细分了许多不同的具体事件，诸如群组事件->群组更名事件，消息事件->好友消息事件等，这些您都可以在[RainyBot API](/api)中看到具体的划分与相关文档。

### 事件注册 <a href="#event_reg" id="event_reg"></a>

要通过插件对这些事件进行响应和处理，我们需要在插件中将所需事件\_**注册并绑定**\_到插件中的内置或自定义函数中。要这么做十分简单，就像在前面的渐进式教程中尝试过的那样——大部分情况下，我们将会在插件加载完毕时将执行的`_on_load()`虚函数中，通过调用`register_event()`函数来注册并绑定一个事件。当然，在特殊情况下您也可以在`_on_load()`虚函数以外的地方进行事件注册。

`register_event()`函数的用法十分简单，先让我们简单的看一下API中是如何介绍的：

> * void **register\_event (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) event, [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) function, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) priority=0, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) block\_mode=3 **)**
>
> 用于注册一个或多个事件并将其绑定到一个或多个函数，事件发生时将触发绑定的函数并传入事件实例
>
> 需要的参数从左到右分别为:
>
> 事件的类型:
>
> * 此处可传入单个事件类型名，或一个包含了任意数量事件类型名的数组以批量注册事件
> * 传入的事件需要直接或间接继承[Event](/api/event)类，如[GroupMessageEvent](/api/groupmessageevent)
>
> 事件绑定的函数名:
>
> * 此处可传入单个函数名，或一个包含了任意数量函数名的数组以批量绑定函数
> * 当对应事件发生时将依次传递并触发绑定的函数，绑定的函数需要定义一个参数用于接收事件实例
>
> 事件的全局优先级(可选,默认为0):
>
> * 在多个插件同时注册了同一事件后，事件发生时将按照优先级由高到低的顺序传递事件到对应的插件
> * 优先级相同时，将根据注册事件的时间顺序来依次传递事件
>
> 事件的阻断模式(可选,默认为BlockMode.ALL):
>
> * 事件绑定的函数若返回true，将阻断事件被传递到后续函数或插件中 (异步函数无效)
> * 阻断的具体行为将由阻断模式决定, 每种阻断模式的具体效果请参见上方的BlockMode枚举

如果您觉得看上去有些混乱，没关系，让我们来一步步了解一下每个参数的作用及用法。

* 首先，在第一个参数中，我们需要指定要注册哪个/哪些事件。如果您只需注册单个事件，则只需直接填入事件的名称即可，如`FriendMessageEvent`。如果您要同时注册多个事件，则需填入一个包含了不同事件名称的数组，如`[FriendMessageEvent, GroupMessageEvent]`将会同时注册好友消息与群消息事件。
* 在第二个参数中，我们需要指定事件要绑定到哪个/哪些函数。在插件接收到第一个参数指定的任一事件时，将会调用/依次调用此处指定的函数。与前面一样，如果您只需绑定到单个函数，只需直接填入函数名即可。若您要同时绑定到多个函数，则需填入一个包含了不同函数名的数组，数组内的顺序将决定插件接收到事件时函数被执行的顺序
* \[可选，默认为`0`] 第三个参数是一个整数，将决定此插件注册的此事件在全局的优先级。在多个插件同时注册了同一个事件的情况下，事件发生时，优先级数值越高的插件将会越早接收到这个事件。对于优先级相同的插件，将按照注册事件时的时间先后顺序来依次接收事件。
* \[可选，默认为`BlockMode.ALL`] 第四个参数，决定了当接收到事件后，事件所绑定到的函数返回`true`时将执行的操作。事件所绑定到的函数如果返回`true`，则RainyBot将尝试按照该参数指定的模式来阻止这个事件的向后传递。当前可用的阻止模式如下：

> enum **BlockMode**
>
> 事件在处理时被标记为停止传递后的阻断模式枚举，决定了该事件将如何被阻断传递
>
> * **DISABLE** = 0\
>   即使标记为停止传递也不会进行阻断
> * **EVENT** = 1\
>   在当前插件中的所有该事件函数处理完毕后，将阻断传递，即不会传递给后续插件
> * **FUNCTION** = 2\
>   当前函数处理完毕后，阻断事件在当前插件内的传递，但后续插件仍会接收到事件
> * **ALL** = 3\
>   当前函数处理完毕后，将完全阻断事件传递，事件后续函数及其他插件均不会收到事件

* 如果将此参数设置为`BlockMode.DISABLE`，那么即使事件所绑定到的函数返回`true`也不会执行任何操作。
* 如果将此参数设置为`BlockMode.EVENT`，在事件所绑定到的函数返回`true`时，也将继续向后调用当前插件中绑定到此事件的其它函数；在此事件绑定的所有其它函数执行完毕后，将阻断事件的传递，注册了同事件但优先级较低或注册较晚的插件将不会接收到该事件。
* 如果将此参数设置为`BlockMode.FUNCTION`，在事件所绑定到的函数返回`true`时，将不会继续向后执行当前插件中此事件绑定的其他函数，但是下一个优先级较低或注册较晚的插件依然会继续接收到该事件。
* 如果将此参数设置为`BlockMode.ALL`(默认为此模式)，在事件所绑定到的函数返回`true`时，将不会继续向后执行当前插件中此事件绑定的其他函数，且注册了同事件但优先级较低或注册较晚的插件也不会接收到该事件。

### 事件处理 <a href="#event_trigger" id="event_trigger"></a>

在注册了事件并绑定到函数后，当插件接收到该事件后，其绑定的函数将会被调用，且将被传入当次事件的实例作为参数。有了事件的实例，我们就能调用对应的事件的API中的各种函数，来获取各种的信息或进行各类的操作。例如，在各类[消息事件](/api/messageevent)中都拥有一个`reply()`函数用于回应消息，因此对于绑定到消息事件的函数，我们可以在其中用`事件实例.reply(消息)`来回应事件对应的消息。

```gdscript
func _on_load():
    register_event(FriendMessageEvent, "_event")
 
# 定义_event函数用于处理消息事件  
func _event(e): # 此函数被事件调用时，参数变量e中将储存该事件的实例
    e.reply("收到了你的消息哟~")
```

除了可以用自定义的函数来处理事件以外，RainyBot当前还针对`消息事件`提供了两个内置的事件处理函数，分别为用于匹配及触发注册的关键词的`trigger_keyword`函数，以及与用于响应上下文的`respond_context`函数；这两项功能的相关用法，我们将在稍后进行介绍。

### 取消注册事件 <a href="#event_unreg" id="event_unreg"></a>

RainyBot会在插件被卸载时自动取消注册该插件的所有事件，但您也可以根据需要，在任何时候执行`unregister_event`函数来取消注册某个/某些事件并解绑所有函数。

如果您只需取消注册单个事件，则只需直接填入事件的名称即可，如`FriendMessageEvent`。如果您要同时取消注册多个事件，则需填入一个包含了不同事件名称的数组，如`[FriendMessageEvent, GroupMessageEvent]`将会同时取消注册好友消息与群消息事件。


# 关键词注册与处理

比起从消息事件中自行实现关键词匹配等较为复杂的操作，RainyBot为您提供了一套开箱即用，简单易用且完善的关键词匹配系统。


# 更新日志

了解一下各个版本的变化吧\~

### [v2.2.2-Stable](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.2.2-stable)

* 修复了插件编辑器在某些条件下可能报错的问题
* 在Mirai后端实施协议版本补丁，改善了无法登录QQ账号的问题
* 通过Mirai后端的登陆验证拓展插件适配了更多登录验证方式
* 更新Mirai后端版本至2.14.0，更新Mirai-API-HTTP版本至2.9.1
* 更新了发行包中默认的swiftshader cpu渲染器版本，提升使用cpu渲染时的启动速度
* 更新所基于的自定义分支Godot版本到4.0.3-RC，并对其进行各项适配

### [v2.2.1-Stable](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.2.1-stable)

### **文档查看器:**

* 我们实现了全新的离线文档查看器，包含了RainyBot API中的所有内容，并支持文档间的快速跳转。您现在可以在主界面顶部的选项卡中访问文档查看器，并在其拓展坞中选择您需要查看的文档以及具体部分。
* 文档查看器现在与插件编辑器紧密结合，您可以随时在编写插件时通过快捷键，快速跳转到与您正在编写的代码部分相匹配的文档；详情请查看插件编辑器部分的更新日志。

### **插件编辑器:**

* 新增了编辑器拓展坞，提供了快速文件切换，与快速函数跳转功能。现在您无需离开编辑器窗口，即可在同一个窗口中快速在不同文件间进行编辑；您也可以通过点击拓展坞中的函数名，来快速跳转到当前文件中该函数对应的行。
* 我们对Godot引擎源码进行了定制，重新实现了自动补全与错误检查功能。现在，插件编辑器将会通过GDScript语法分析器来完全理解您的代码；它将根据您的代码，结合RainyBot/Godot API中的项目来充分检查您代码中的各类错误，并为您提供最合适的补全建议/弹出提示，以大幅提升您的插件开发体验。
* 我们还基于语法分析器重新实现了文档跳转功能。现在，您可以在插件编辑器中按住左侧Ctrl键，并将鼠标悬停在代码的任意部分；插件编辑器将判断该部分是否有匹配的文档，并在找到匹配文档后允许您点击快速跳转到该文档的对应部分。
* 我们改善了插件编辑器对于撤销/重做的处理机制，对于未保存文件的处理机制，对于编辑过程中被删除的文件的处理机制等。现在在此类事件发生时，编辑器应该能够正确的进行处理。
* 为自动补全的各个项目类型添加了图标，以便于进行快速区分
* 改进了错误提示过长时，底部栏显示出界的问题；现在出界部分将被自动省略，您可以通过将光标悬停在底部栏来查看完整内容。

### **插件管理器:**

* 改进了插件管理器GUI中，插件列表的更新方式。插件列表将仅在插件状态发生变化时进行更新，而不是每次打开GUI时主动进行获取；此更改可大幅提高插件管理器GUI的整体性能。
* 我们改进了插件的加载/卸载/删除等机制，提升了相关组件的性能与稳定性。
* 现在新建插件输入文件名后，可通过回车键确认操作，而无需点击新建按钮 (感谢`@cloudwindy`对此改进的贡献)

### **控制台:**

* 新增了代理服务器配置选项，您现在可以在控制台配置文件中指定一个代理服务器地址与端口，即可让RainyBot的所有HTTP请求通过此代理进行 (包括内部请求与来自RainyBot API的请求)
* 新增控制台自动清理功能，将在控制台当前内容行数超过指定范围时 (默认为1000行)，自动保存为新日志文件并清空显示内容；此功能可大幅降低控制台的内存占用，可在控制台配置文件中对此进行调整。
* 新增了单次输出打印的字符上限 (默认为2000字)，超过限制部分将被省略，以防止巨大字符串打印造成性能问题；此选项可在控制台配置文件中进行调整。
* 大幅提高了重新导入资源功能的速度与稳定性，现在应该拥有与通过场景编辑器重新导入相同的性能。
* 改进了各类GUI的输入敏捷度，现在所有界面应该对各种操作拥有更快的响应速度
* 修复控制台标题栏的运行时间显示错误的问题

### **Mirai适配器:**

* 实现了多控制台功能，合并了Mirai后端与RainyBot控制台界面，现在您可以在一个窗口快速切换两个控制台的显示与命令输入。
* 实现了对Mirai进程的状态跟踪及管理，优化了Mirai后端启动/初始化/连接的性能与稳定性。现在可以通过控制台实现Mirai进程的启动/停止，并且在运行状态发生变化时提供通知与提示。
* 改进了Mirai的加载与启动流程，与Mirai的连接流程降低了对计时器的依赖；现在将在检测到Mirai的Bot账号登陆成功后进行连接，而不是在启动进程后通过计时进行判断。
* 对Websocket连接的稳定性进行改进，避免在发送和接收大型数据包时断开连接，修复了诸如无法正常获取人数较多的群成员列表等问题
* 修复了对Websocket的配置修改不生效的问题，改进了正确的配置格式
* 更新Mirai版本至`v2.13.3`，Mirai-API-Http版本至`v2.7.1`

### **RainyBot API:**

* ***(可能破坏兼容性)*** 基于C++模块重新实现了此前版本中损坏的Gif图像生成功能；Gif图像生成速度相较此前平均提高了100倍，生成一张20帧的小型动图只需大约0.02秒。移除了`GifImage`类的`get_data()`函数
* ***(可能破坏兼容性)*** 为各项API内部实现了规范性检查，并统一了内部构造函数的返回结果。现在，对于某些返回结果为对象实例的函数，若请求失败/执行失败，将统一返回`null`而不是难以确定有效性的实例。
* 改进场景图像的获取，现在会自动多等待一个渲染帧，以确保能够正确获取到场景更新后的图像

### **杂项:**

* 此版本起，我们将开始使用 [为RainyBot自定义的Godot Engine 4.0源码分支](https://github.com/Xwdit/godot/tree/rainybot) 进行开发，这允许我们与Godot引擎的核心进行更深层的交互，且允许我们以高性能的方式实现更多功能。(此版本截止至Commit [Xwdit/godot@f07ad71](https://github.com/Xwdit/godot/commit/f07ad71316d7a08992b6a4425b6a3ee9d9a01cbe))
* 此版本对各个界面的外观细节，便捷性与可访问性等做出了大量优化与调整
* 此版本对各类组件进行了大量的性能优化与错误修复

**完整更新细节请参见**: [v2.1.6-stable...v2.2.1-stable](https://github.com/Xwdit/RainyBot-Core/compare/v2.1.6-stable...v2.2.1-stable)

### [v2.1.6-Stable](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.1.6-stable)

* 新增了将任意格式音频文件自动转码为语音消息的功能；您可以在控制台配置文件中指定`ffmpeg`与`silk-encoder(可选,可提升语音音质,但会降低转码速度)`的可执行文件路径，随后即可通过`Utils.convert_to_voice(音频文件绝对路径)`函数来将指定音频自动转换为可直接发送的VoiceMessage实例
* 新增通过Http post/put请求发送字节数组(即二进制数据)的支持，现可进行文件上传等复杂请求
* 默认为Http请求使用多线程处理来提升性能，但因为当前Godot4.0-beta3版本中存在的一个错误，可能会导致部分使用gzip压缩的请求结果出现异常，若更新后出现任何Http请求问题，可以将请求函数的最后一个参数设置为false来禁用gzip解压缩，若依然存在问题请到Issue处反馈
* 优化了图像文件缓存的可靠性与稳定性，在缓存的随机文件名中加入当前时间以避免重复，并且降低每次随机的重复性
* 修复了此前版本中运行时错误检测无效的问题，改善了插件编辑器错误检测的效率
* 修复了自定义合并转发消息节点无效的问题
* 修复了发送Http Post/Put请求时自动转换数组/字典为json无效的问题
* 替换了发行包中默认的swiftshader cpu渲染器版本，提升使用cpu渲染时的启动速度
* 更新所基于的Godot版本到4.0-beta3，并对其进行各项适配

### [v2.1.5-Stable](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.1.5)

* Http Get请求现支持自定义请求的Header，新增支持Http Put请求，并增加了相关API
* 默认关闭Http请求的允许gzip压缩以避免在4.0-Beta2中出错，若更新后出现任何Http请求问题请到Issue处反馈
* 通过物理帧来处理各类计时与网络轮询，以避免低显示帧率下的处理速度降低
* 禁用低处理器模式以保证最大处理速度
* 支持在控制台配置文件中禁用自动更新检查
* 控制台新增右键菜单，可快速选择与复制控制台文本内容
* 完善Mirai适配器的配置说明，新增支持MacOS/Ipad协议
* 更新所基于的Godot版本到4.0-beta2，并对其进行各项适配

### [v2.1.4-Stable](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.1.4-stable-fix)

* 重新设计了界面主题与布局，带来了更加现代化与简约的观感
* 修复了插件编辑器的保存/注释快捷键
* 修复了导致自动更新文件移除失败的问题
* 改进了主菜单及部分界面模块中的外部链接布局
* 提升了RainyBot中多个组件的稳定性，修复了各类细节问题

### [v2.1.3-Stable](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.1.3-stable)

* 适配最新的Mirai相关组件，修复闪图发送问题
* 所基于的Godot版本更新至v4.0-beta1
* 所基于的Mirai版本更新至2.12.3, 所基于的Mirai-API-HTTP版本更新至2.6.2
* 提升了RainyBot中多个组件的稳定性，修复了各类细节问题

### [v2.1.2-Stable](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.1.2-Stable) (仅热更新，无发行包)

* 支持异步执行热更新请求，大幅提升热更新下载速度

### [v2.1.1-Stable](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.1.1-Stable) (仅热更新，无发行包)

* 紧急修复图像消息无效，无法发送图像的问题

### [v2.1-Stable](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.1-stable)&#x20;

#### (此版本引入了兼容性变更，请点击链接来检查GitHub中的详细更新日志)

* 新增热更新与热修复的下载源切换功能，GitHub为默认下载源，但可切换至Gitee国内源
* 机器人自身退群事件`BotLeaveGroupEvent`中新增因群解散而退群的事件类型
* `ImageMessage`类及`FlashImageMessage`类中新增获取接收的图像的文件大小，图像宽高，图像类型，以及图像是否为Emoji的方法
* `Member`类中新增获取指定时间段的漫游消息的方法
* 新增RainyBot控制台配置文件
* 修复插件列表更新时插件管理器GUI不更新的问题
* 修复插件管理器还原插件配置相关的问题
* 提升热更新与热修复功能的稳定性，修正因文件行尾不同导致判断失败的问题，修复更新与修复的进度显示
* 更新过时的API链接以及内置编辑器所需的类文档
* 所基于的Godot版本更新至v4.0-alpha14
* 所基于的Mirai版本更新至2.13.0-M1, 所基于的Mirai-API-HTTP版本更新至2.6.1
* 提升了RainyBot中多个组件的稳定性，修复了各类细节问题

### [v2.0-Stable](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-stable)

* 新增自动增量热更新功能，可自动对比新版本与当前版本的文件差异，并自动下载及热更新差异部分
* 新增组件自修复功能，可在RainyBot程序组件出错或受损时自动查错并还原回初始状态
* Console类中新增了临时关闭系统消息输出的API，可用于避免短时间的大量消息占据过多的控制台空间(不影响由插件调用Console类输出的消息)
* 提升了RainyBot中多个组件的稳定性，修复了各类问题

### [v2.0-RC-9](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-rc-9)

* 插件管理器中新增注册列表查询与数据功能，现在您可以快速查看插件注册的所有事件/关键词/控制台命令，还可以方便的管理插件的各项数据库项目/缓存项目/配置项目
* Plugin类中新增了将指定插件配置项与全部配置项还原回默认的API
* Console类新增可弹出提示/确认窗口并跟踪确认状态的API
* 为RainyBot中的多处操作实现了弹窗提示/弹窗确认功能
* 控制台新增通过命令来快捷管理插件数据库项目的指令，可以通过`/help plugins`指令来查看详情
* 插件编辑器新增按住Ctrl键并点击一个类名可快速打开其文档的功能
* 修复了插件编辑器可以撤销刚加载的文本的问题
* 改善Java未安装时的启动检查流程
* 忽略await相关的运行时错误检查以减少打扰
* 修正部分错误的消息发送时间戳获取函数的命名
* 将各种原RainyBot API链接更新为最新的在线文档链接
* 更新所依赖的Godot版本为4.0.alpha11
* 更新发行包的Mirai协议后端版本为2.12.0
* 其余各项细节的改进与修复，若要查看更详细的更新内容，请参阅Commits更改日志

### [v2.0-RC-8-Patch-1](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-rc-8-patch-1)

* 紧急修复了v2.0-RC-8中因启用了多线程渲染导致窗口大小调节崩溃的问题

### [v2.0-RC-8](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-rc-8)

* 新增了Gif动图生成与发送相关的API，可前往`RainyBot-API`中的`CoreAPI/GifImage.gd`以及`MessageAPI/Types/ImageMessage.gd`文件来查看相关文档
* 新增了从Http请求结果自动判断图像格式并获取为图像实例的API，可前往`RainyBot-API`中的`CoreAPI/HttpRequestResult.gd`文件来查看相关文档
* 将Plugin插件类中的部分函数更改为静态函数以支持在插件外进行调用 (如场景脚本中)
* 简化并类型化了大部分的内部代码以提升运行速度及可维护性，预计可带来25%左右的脚本性能提升
* 将BotEvent中的`get_qq()`函数更名为`get_id()`以统一命名规范
* 修复了Mirai启动时的系统平台判断问题，解决了RainyBot试图在Windows平台启动.sh脚本的问题
* 修复了场景图像生成后拉伸缩放异常的问题，并调整了所使用的缩放算法以取得最佳效果
* 其余各项细节的改进与修复，若要查看更详细的更新内容，请参阅Commits更改日志

### [v2.0-RC-7](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-rc-7)

* 新增了了对MacOS/Linux(待测试)平台的支持，对应平台的发行包将在稍后于此页面中更新
* 新增了与群公告相关的各类API，可前往GroupAPI的Group类与GroupAnnounce相关类中查看详情
* 新增对商城表情消息类型的支持，目前仅支持读取与转发，暂不支持手动构造发送，可前往MessageAPI/Types/MarketFaceMessage.gd下查看相关API
* 大幅简化了场景加载与图像生成相关的API，详情请查看上方“重要兼容性变更”处所述的内容
* 支持异步并发的场景加载与图像生成，可以在每次不同的请求中异步创建独立的场景并进行独立的图像生成，即多个场景加载与图像生成可以同时进行且互不干扰
* 优化了资源重新导入的稳定性与速度，提升了对不同平台下的兼容性
* 其余各项细节的改进与修复，若要查看更详细的更新内容，请参阅Commits更改日志

### [v2.0-RC-6](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-rc-6)

* 新增了获取`好友/单向好友/群成员/群组/机器人自身`的头像图片链接的API
* 群成员类中新增直接获取此成员的相关资料卡的API
* 成员资料类新增直接获取任意指定ID用户的资料并构造为成员资料实例的API
* 软件本体与插件新增配置文件更新功能，可以自动添加缺失的配置项与移除多余的配置项
* 协议后端配置文件中新增用于配置`单次请求获取结果的最大超时秒数`的配置项
* 需要向协议后端发送请求的每个API函数中均在最后增加了可选的`最大超时秒数`参数项，可为每次的不同的请求分别配置超时时间
* 内部代码进行了大量调整以提升稳定性并尽可能地避免出现运行时错误
* 新增了对通过Godot编辑器运行RainyBot时的判定检查，以避免执行部分可能导致编辑器提示错误并冻结RainyBot的代码逻辑
* 进行了对各项内容的细节改进与问题修复
* 若要查看更详细的更新内容，请参阅Commits更改日志。

### [v2.0-RC-5](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-rc-5)

* 新增了异步加载资源与场景的API，现可通过Utils类中的`load_threaded()`函数来异步加载各类资源，还可通过设置插件API中的`load_scene()`函数的第三个参数来进行异步场景加载
* 新增了将Http请求结果按照指定图像格式`(png,bmp,jpg,tga,webp)`解析并获取为图像实例的API
* 新增了将Http请求结果保存至指定路径的文件的API
* 将渲染后端默认更改为桌面平台版本以支持更高级的图像渲染效果（如高斯模糊）
* 若要查看更详细的更新内容，请参阅Commits更改日志。

### [v2.0-RC-4](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-rc-4)

* 软件结构大幅改进，将Godot的编辑器版本作为运行时，直接在RainyBot工程目录中运行。这意味着您无需另行下载或启动Godot编辑器，即可随时编辑与实时调试RainyBot插件乃至软件本身的场景及脚本 (在主菜单中点击`场景编辑器`选项即可)；并且，此项改进还为后续如自动化增量更新，代码自修改等功能打下了良好的基础\~
* 新增了一键重新导入所有资源的功能，这意味着您现在不需要以特殊方法加载或处理插件场景中所使用的资源，而是直接按照常规Godot场景的编辑方式进行编辑即可。将制作好的插件及其场景放置在RainyBot对应目录后，只需点击插件菜单中的`重新导入所有资源`选项，即可自动对RainyBot目录下的所有场景及资源进行处理以保证其正常运行
* 为各项SubViewport相关的API新增了错误检测与提示
* 新增了资源重新导入的控制台命令，补全了缺失的重新启动命令
* 改进了版本更新的检测流程，提高了版本检测的稳定性
* 改进了Mirai协议后端的启动流程，提高了启动过程中的稳定性
* 其余各项细节改进与问题修复
* 若要查看更详细的更新内容，请参阅Commits更改日志。

### [v2.0-RC-3](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-rc-3)

* 新增了全新的运行时脚本错误检测功能及相关的插件API，若插件脚本或RainyBot内部脚本在运行时出现错误，您将可以第一时间通过控制台获得反馈，并可以通过插件进行错误处理（如发送通知到指定好友等）
* 主菜单新增快捷重新启动RainyBot的选项，对于部分无法热重载的内容（如场景附加的脚本），您可以通过此功能来便捷的对RainyBot进行快速重启
* 代码内容清理，各类细节改进与修复

### [v2.0-RC-2](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-rc-2)

* 修复设置SubViewport背景透明导致渲染异常的问题
* 修复设置SubViewport拉伸大小无效的问题
* 修复插件管理器启动时不刷新插件列表的问题
* 主字体更换为等宽字体，大幅提升内置编辑器的使用体验
* 改进插件模板的格式
* 从完整发行包中移除了示例插件，您可以根据需要在这里找到它们: <https://github.com/Xwdit/RainyBot-API/tree/main/examples>
* 其余各类细节改进与修复

### [v2.0-RC-1](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-rc-1)

* 支持在通过插件创建SubViewport时设置其背景透明的状态
* 新增在运行时设置指定SubViewport的背景透明状态的API
* 默认禁用通过插件创建的SubViewport的背景透明状态

### [v2.0-beta-9](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-beta-9)

* Bot类中新增获取连接状态，以及获取私聊消息/群聊消息/已发送消息数量统计的API
* 插件类中新增缓存数据库API，可储存需要在插件卸载或重载时保留，但同时将在RainyBot关闭时自动清理的数据
* 插件类中新增获取全局运行时间的API
* 窗口标题栏新增各项状态信息显示
* 主菜单栏新增打开内部日志目录的快捷选项
* 新增在创建SubViewport时调整拉伸大小的支持
* 现支持通过创建的SubViewport来生成透明背景的图像(且默认情况下为透明背景)
* 初步支持对插件关联场景的热重载，但关联场景中的脚本目前仍需通过重启RainyBot来进行重载
* 各类细节改善与错误修复

### [v2.0-beta-8](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-beta-8)

* 插件类中新增了快捷加载场景，创建SubViewport，更改SubViewport大小，更新SubViewport内容，基于SubViewport获取图像等函数
* 修复了插件编辑器错误行不能正确清除的问题

### [v2.0-beta-7](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-beta-7)

* 底层架构大幅调整，现在可以通过Godot编辑器配合RainyBot-API来可视化制作场景，并由插件调用来生成图片/自定义GUI等
* 新增基于图像实例进行缓存，并构建为图片/闪图消息类实例用于发送的功能

### [v2.0-beta-6](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-beta-6)

* 此版本开始将插件设置的ID强制转换为小写，以避免因大小写差异导致的各类问题
* 基于的 Godot版本更新至Godot-4.0.alpha10

### [v2.0-beta-5](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-beta-5)

* 完善了主界面的各类菜单，增加了在线社区，在线教程，插件中心，在线问答等网页的快捷入口
* 新增版本检查功能，现在会在每次启动软件时检查当前是否为最新版本
* 新增了对增量更新的支持

### [v2.0-beta-4](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-beta-4)

* 新增全新的图形化插件管理器，可通过 插件菜单->插件管理器 进行使用，也可通过命令 plugins manager 进行使用
* 修复部分已知问题，改善使用体验

### [v2.0-beta-3](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-beta-3)

* 完善部分细节，修复一些影响使用体验的问题
* Release包中的Mirai后端版本更新至2.11.1
* Release包中的Mirai-Api-Http插件版本更新至2.5.2
* 基于的Godot版本更新至 4.0 Commit \[[706dc74e01](https://github.com/godotengine/godot/commit/706dc74e01e1900af947d7a5fe854603a3df18b1)]

### [v2.0-beta-2](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-beta-2)

* 新增检查是否存在配置项/数据库项的函数
* 实现基本的菜单框架，并且实现了部分菜单功能
* 修复文本输入光标问题，调整为常规样式
* 补全与更新内置的类文档，使自动补全更为全面
* 插件编辑器现支持多窗口，可同时编辑多个插件文件
* 插件编辑器部分细节功能完善，支持批量切换选择内容的注释
* 内置简体中文语言文件，文本编辑框右键菜单中现以中文语言显示
* 完善部分细节，修复一些影响使用体验的问题
* Release包中的Mirai后端版本更新至2.9.2
* 基于的Godot版本更新至 4.0 Commit \[2f4d76f068]

### [v2.0-beta-1](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-beta-1)

* 内置插件编辑器实现了基于简易语法解析的自动补全与错误检查，现在插件开发更加便捷与高效了\~
* 改进上下文相关功能，现在可指定消息事件上下文仅匹配群号/仅匹配发送者了
* 控制台日志新增日期显示，解决了时间日期混淆的问题
* 插件数据库新增支持删除数据库条目/清空数据库，优化数据库与插件配置部分功能的行为
* 对界面布局进行部分优化，观感更自然更美观
* 优化插件编辑器加载机制，减少内存占用，解决光标消失的问题
* 代码结构优化，解耦GUI与核心部分，同时对字体依赖进行了清理
* Release包中的Mirai后端版本更新至2.9.0-RC
* 基于的Godot版本更新至 4.0 Commit \[8485d0c53a]

### [v2.0-alpha-6](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-alpha-6)

* 紧急修复了一处因多线程渲染导致软件窗口崩溃的关键问题

### [v2.0-alpha-5](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-alpha-5)

* 关键词注册移除了无用的过滤器函数及过滤失败文本参数，同时关键词所绑定函数现需要额外接收一个包含解析后关键词的参数
* 关键词新增支持设置多种匹配模式，支持根据变量字典或特殊占位符进行动态匹配，支持设定是否在匹配成功后返回true用于阻塞
* 事件注册支持同时注册多个函数，并且可自定义事件阻塞的行为模式
* 上下文系统新增支持按照特定消息事件/发送者/群来进行上下文相关处理，新增设定是否在检测到相关上下文后返回true用于阻塞
* 重写Http请求相关功能，新增HttpRequestResult类用于获取不同类型的请求结果及请求状态
* 新增可获取配置目录/文件路径，数据目录/文件路径，插件目录/文件路径的函数
* 新增可判断插件是否成功加载配置/数据的函数
* 插件编辑器新增仅保存按钮，且默认行为更改为仅保存，可通过Ctrl+Alt+S进行重载保存
* 临时消息事件支持直接获取群号码
* 对API进行改进与清理，对默认插件模板内容进行改进
* 修复消息链的获取消息文本/数组函数
* 临时修复AtMessage获取显示文本
* 修复At时匹配关键词可能有多余的空格的问题
* 修复一处可能导致运行崩溃的消息解析问题
* 优化关键词匹配机制，提升运行速度
* 基于的Godot版本更新至 4.0 Commit \[092a286127]

### [v2.0-alpha-4](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-alpha-4)

* 插件类新增将在与机器人后端断开连接/恢复连接时触发的虚函数
* 新增注册控制台命令时，可设定执行此命令是否需要已与协议后端建立连接
* 现在每次启动RainyBot时会自动重命名之前未重命名的日志文件，以防止对其进行覆盖
* 现在内置的插件管理相关命令无需与协议后端建立连接即可使用
* 修复HTTP请求/后端命令请求超时判定无效的问题；改进超时判定的行为，时间为0则不进行超时计算

### [v2.0-alpha-3](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-alpha-3)

* 修复因插件编辑器没有被重置导致内存被持续占用的问题
* 修复对SessionId的错误用法，解决了可能导致无法重连的问题
* Release包中的Mirai-Api-Http版本更新至2.4.0

### [v2.0-alpha-2](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-alpha-2)

* 修复日志文件储存异常的问题，日志文件现在将随控制台显示同步更新
* 修复可能导致性能降低与内存泄露的问题
* 改进命令输入框的行为与体验
* 改进部分控制台文本显示

### [v2.0-alpha-1](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-alpha-1)

* 大量简化了角色消息发送/消息事件回复/消息链构造/消息链添加等API函数，且简化了部分消息类型的构造函数；现在这些函数可智能判断向函数中传入的类型来决定其行为，例如传入字符串可自动构造为文本消息类实例等。且所有消息事件的回复函数均得到统一，从此无需区分消息事件的类型即可直接回复
* 新增关键词相关功能，可注册一个关键词并指定关键词将触发的函数，且可指定每个关键词的权限检查函数；随后即可在任意消息事件中通过传入事件实例来自动判断关键词触发
* 新增上下文关联功能，可让插件在某函数执行过程中阻塞来等待一个上下文的回应，随后可由其它函数传入其所需的内容来继续进行处理，且可指定上下文超时的时间
* 重写插件事件机制，支持设定同事件中的不同插件的传递优先级，并且可通过在事件触发的函数中返回一个true来阻断事件向下传递。
* 重写插件加载机制，支持插件间依赖设定，开发插件时可指定插件所需的依赖插件，以确保依赖项能够在其之前被RainyBot加载
* 简化了从消息链中获取消息数组/消息文本的流程，现在直接传入消息的类名(无需双引号)，或包含多个消息类名的数组即可
* 简化了插件事件注册的流程，现在通过直接传入事件的类名即可进行注册(无需双引号)，无需再传入事件的分类与具体类型
* 事件，关键词与命令注册所需的函数名的双引号现在可选，可与事件注册的类名一样无需双引号；但若要绑定到插件基类的内置函数，则仍需双引号(如"trigger\_keyword")
* API中新增大量用于简化操作的新函数，例如可直接通过event.get\_sender\_id()来获取消息发送者的ID，而无需先获取消息链再获取ID
* 插件中新增所有插件加载完毕时触发的虚函数，可用于保证在所有插件均被加载后执行某操作
* 优化界面布局，让控制台文本布局对阅读更友好。同时命令输入框现已通过临时方案来支持显示输入光标
* Mirai-Adapter配置文件中新增对设备协议修改的支持（需要重置配置文件)
* 新增控制台日志功能，现在在RainyBot正常关闭时将会储存控制台日志到/logs目录下
* 改善与Mirai后端的通信机制，现在连接时将会自动携带SessionKey，且现在断线重连后不会再重载插件了
* Release包中的Mirai后端版本更新至2.9.0-M1，Mirai-Api-Http版本更新至2.3.3
* 基于的Godot版本更新至 4.0 Commit \[97034939f]

### [v2.0-pre-alpha-5](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-pre-alpha-5)

* 修复无法使用Ctrl+S保存的问题
* 优化代码编辑器缩进效果

### [v2.0-pre-alpha-4](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-pre-alpha-4)

* 对列表类API新增自定义迭代器，完善部分API
* 补全转发消息列表的返回类型
* 修正代码编辑器滚动位置
* 修复插件管理器大小写比对问题，修复插件编辑器确认退出弹窗的显示

### [v2.0-pre-alpha-3](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-pre-alpha-3)

* 完成了用户界面的重新设计，整体观感更加舒适与美观。
* 完善了各类控制台显示内容的细节，修复了一些影响稳定性的因素
* 新增了回复时快捷AT/快捷检测机器人是否被AT的API
* 修复了部分界面显示错位的问题
* 版本号更新为v2.0-pre-alpha-3

### [v2.0-pre-alpha-2](https://github.com/Xwdit/RainyBot-Core/releases/tag/v2.0-pre-alpha-2)

* 这是RainyBot开源后公开发布的第一个版本


# RainyBot API

此页面记录了可供插件使用的各类RainyBot API

* [**Plugin**](/api/plugin) - RainyBot的插件类，代表一个实例，用于在插件中实现各类相关功能
* [**RainyBotAPI**](/api/rainybotapi) - RainyBot所有API的父类，所有可供插件使用的API都将直接或间接继承此类
  * [**BotAPI**](/api/botapi) - 协议后端API类，直接或间接继承此类的类通常包含各类与协议后端直接相关的功能
    * [**Bot**](/api/bot) - RainyBot的Bot类，负责处理与当前使用的机器人后端账号相关的各类功能
    * [**BotRequestResult**](/api/botrequestresult) - RainyBot的协议后端请求结果类，记录了向协议后端发送的某次请求/命令的结果数据
  * [**CoreAPI**](/api/coreapi) - 这是RainyBotAPI的核心类，此类及其子类通常负责各类与协议后端无关，但与RainyBot核心功能直接相关的内容
    * [**Console**](/api/console) - RainyBot控制台类，包含了各类与控制台输出直接相关的功能
    * [**GifImage**](/api/gifimage) - RainyBot动态图像类，可用于构造并生成一个Gif图像及相关数据，并将其用于储存或发送
    * [**HttpRequestResult**](/api/httprequestresult) - RainyBot的Http请求结果类，可从其中快速获取某次Http请求的结果数据
    * [**Utils**](/api/utils) - RainyBot的实用工具类，其中提供了各种类型的便捷功能
  * [**EventAPI**](/api/eventapi) - RainyBot的事件API类，所有的事件相关API将直接或间接继承此类
    * [**Event**](/api/event) - RainyBot的事件类，各种事件类型将直接或间接继承此类
      * [**ActionEvent**](/api/actionevent) - RainyBot动作事件类，与聊天动作有关的各类事件通常直接或间接继承此类
        * [**NudgeEvent**](/api/nudgeevent) - RainyBot的戳一戳事件类，记录了聊天中的一个戳一戳事件的相关数据
      * [**BotEvent**](/api/botevent) - RainyBot的Bot自身事件类，协议后端机器人账号自身发生的各类事件通常直接或间接继承此类
        * [**BotOfflineEvent**](/api/botofflineevent) - RainyBot的机器人账号离线事件类，其实例记录了一次机器人账号离线事件的相关数据
        * [**BotOnlineEvent**](/api/botonlineevent) - RainyBot的机器人账号登录成功事件类，其实例记录了一次机器人账号登录成功事件的相关数据
        * [**BotReloginEvent**](/api/botreloginevent) - RainyBot的机器人账号主动重新登录事件类，其实例记录了一次机器人账号主动重新登录事件的相关数据
      * [**FriendEvent**](/api/friendevent) - RainyBot好友事件类，与好友相关的事件通常直接或间接继承此类
        * [**FriendInputStatusChangeEvent**](/api/friendinputstatuschangeevent) - RainyBot的好友输入状态变更事件类，记录了某次好友输入状态变更事件的相关数据
        * [**FriendNickChangeEvent**](/api/friendnickchangeevent) - RainyBot的好友昵称变更事件类，记录了某次好友昵称变更事件的相关数据
        * [**FriendRecallEvent**](/api/friendrecallevent) - RainyBot的好友消息撤回事件类，记录了某次好友消息撤回事件的相关数据
      * [**GroupEvent**](/api/groupevent) - RainyBot的群组事件类，与群组直接相关的各类事件通常直接或间接继承此类
        * [**GroupAllowAnonyChatEvent**](/api/groupallowanonychatevent) - RainyBot的群组匿名聊天允许状态变更类，其实例记录了与一次群组匿名聊天允许状态变更事件相关的数据
        * [**GroupAllowConfessTalkEvent**](/api/groupallowconfesstalkevent) - RainyBot的群组坦白说允许状态变更类，其实例记录了与一次群组坦白说允许状态变更事件相关的数据
        * [**GroupAllowInviteEvent**](/api/groupallowinviteevent) - RainyBot的群组邀请入群允许状态变更类，其实例记录了与一次群组邀请入群允许状态变更事件相关的数据
        * [**GroupAnnounceChangeEvent**](/api/groupannouncechangeevent) - RainyBot的群组公告变更类，其实例记录了与一次群组公告变更事件相关的数据
        * [**GroupBotEvent**](/api/groupbotevent) - RainyBot的Bot自身群组事件类，与Bot自身相关的群组事件通常直接或间接继承此类
          * [**BotJoinGroupEvent**](/api/botjoingroupevent) - RainyBot的Bot自身加入群组事件，记录了Bot加入某个群组的事件的相关数据
          * [**BotLeaveGroupEvent**](/api/botleavegroupevent) - RainyBot的Bot自身退出群组事件类，记录了Bot退出某个群组相关事件的数据
          * [**BotMuteEvent**](/api/botmuteevent) - RainyBot的Bot自身在群组中被禁言事件类，其实例记录了与一次Bot自身在群组中被禁言事件相关的数据
          * [**BotPermChangeEvent**](/api/botpermchangeevent) - RainyBot的Bot自身在群组中被更改权限事件类，其实例记录了与一次Bot自身在群组中被更改权限事件相关的数据
          * [**BotUnmuteEvent**](/api/botunmuteevent) - RainyBot的Bot自身在群组中被解除禁言事件类，其实例记录了与一次Bot自身在群组中被解除禁言事件相关的数据
        * [**GroupMemberEvent**](/api/groupmemberevent) - RainyBot的群组成员事件类，与群成员相关的群组事件通常直接或间接继承此类
          * [**MemberHonorChangeEvent**](/api/memberhonorchangeevent) - RainyBot的群成员荣誉变更类，其实例记录了与一次群成员荣誉变更事件相关的数据
          * [**MemberJoinEvent**](/api/memberjoinevent) - RainyBot的新成员入群类，其实例记录了与一次新成员入群事件相关的数据
          * [**MemberLeaveEvent**](/api/memberleaveevent) - RainyBot的群成员退群类，其实例记录了与一次群成员退群事件相关的数据
          * [**MemberMuteEvent**](/api/membermuteevent) - RainyBot的群成员被禁言类，其实例记录了与一次群成员被禁言事件相关的数据
          * [**MemberNameChangeEvent**](/api/membernamechangeevent) - RainyBot的群成员昵称变更类，其实例记录了与一次群成员昵称变更事件相关的数据
          * [**MemberPermChangeEvent**](/api/memberpermchangeevent) - RainyBot的群成员权限变更类，其实例记录了与一次群成员权限变更事件相关的数据
          * [**MemberTitleChangeEvent**](/api/membertitlechangeevent) - RainyBot的群成员头衔变更类，其实例记录了与一次群成员头衔变更事件相关的数据
          * [**MemberUnmuteEvent**](/api/memberunmuteevent) - RainyBot的群成员被解除禁言类，其实例记录了与一次群成员被解除禁言事件相关的数据
        * [**GroupMuteAllEvent**](/api/groupmuteallevent) - RainyBot的群组全员禁言状态变更类，其实例记录了与一次群组全员禁言状态变更事件相关的数据
        * [**GroupNameChangeEvent**](/api/groupnamechangeevent) - RainyBot的群组名称变更类，其实例记录了与一次群组名称变更事件相关的数据
        * [**GroupRecallEvent**](/api/grouprecallevent) - RainyBot的群组消息撤回类，其实例记录了与一次群组消息撤回事件相关的数据
      * [**MessageEvent**](/api/messageevent) - RainyBot的消息事件类，与消息直接相关的各类事件通常直接或间接继承此类
        * [**FriendMessageEvent**](/api/friendmessageevent) - RainyBot的好友消息事件类，其实例记录了与一次好友消息事件相关的数据
        * [**GroupMessageEvent**](/api/groupmessageevent) - RainyBot的群组消息事件类，其实例记录了与一次群组消息事件相关的数据
        * [**OtherClientMessageEvent**](/api/otherclientmessageevent) - RainyBot的其它客户端消息事件类，其实例记录了与一次其它客户端消息事件相关的数据
        * [**StrangerMessageEvent**](/api/strangermessageevent) - RainyBot的单向好友消息事件类，其实例记录了与一次单向好友消息事件相关的数据
        * [**TempMessageEvent**](/api/tempmessageevent) - RainyBot的群临时消息事件类，其实例记录了与一次群临时消息事件相关的数据
      * [**OtherClientEvent**](/api/otherclientevent) - RainyBot的其它客户端事件类，与其它客户端直接相关的各类事件通常直接或间接继承此类
        * [**OtherClientOfflineEvent**](/api/otherclientofflineevent) - RainyBot的其它客户端离线事件类，其实例记录了与一次其它客户端离线事件相关的数据
        * [**OtherClientOnlineEvent**](/api/otherclientonlineevent) - RainyBot的其它客户端上线事件类，其实例记录了与一次其它客户端上线事件相关的数据
      * [**RequestEvent**](/api/requestevent) - RainyBot的请求事件类，与各类请求直接相关的各类事件通常直接或间接继承此类
        * [**GroupInviteRequestEvent**](/api/groupinviterequestevent) - RainyBot的邀请入群请求事件类，其实例记录了与一次邀请入群请求事件相关的数据
        * [**MemberJoinRequestEvent**](/api/memberjoinrequestevent) - RainyBot的新成员入群请求事件类，其实例记录了与一次新成员入群请求事件相关的数据
        * [**NewFriendRequestEvent**](/api/newfriendrequestevent) - RainyBot的添加好友请求事件类，其实例记录了与一次添加好友请求事件相关的数据
  * [**MessageAPI**](/api/messageapi) - RainyBot的消息API类，所有的消息相关API将直接或间接继承此类
    * [**CacheMessage**](/api/cachemessage) - RainyBot的缓存消息类，通常代表一个对应实例，用于储存从机器人后端缓存中读取的消息的相关信息
    * [**Message**](/api/message) - RainyBot的消息类，不具备任何功能，仅作为所有消息类型的直接或间接父类
      * [**AppMessage**](/api/appmessage) - RainyBot的App消息类，通常代表一个对应实例，此类消息常见于某些特殊App调用聊天软件进行分享的场景
      * [**AtAllMessage**](/api/atallmessage) - RainyBot的At全体成员消息类，通常代表一个对应实例，此类消息仅适用于群聊
      * [**AtMessage**](/api/atmessage) - RainyBot的At消息类，通常代表一个对应实例，此类消息仅适用于群聊
      * [**BotCodeMessage**](/api/botcodemessage) - RainyBot的BotCode消息类，通常代表一个对应实例，可用于快捷发送一段包含多种类型的消息
      * [**DiceMessage**](/api/dicemessage) - RainyBot的骰子消息类，其实例记录了与一个骰子消息相关的各类数据
      * [**FaceMessage**](/api/facemessage) - RainyBot的表情消息类，其实例记录了与一个表情消息相关的各类数据
      * [**FileMessage**](/api/filemessage) - RainyBot的文件消息类，其实例记录了与一个文件消息相关的各类数据
      * [**FlashImageMessage**](/api/flashimagemessage) - RainyBot的闪图消息类，其实例记录了与一个闪图消息相关的各类数据
      * [**ForwardMessage**](/api/forwardmessage) - RainyBot的转发消息类，其实例记录了与一个转发消息相关的各类数据
      * [**ImageMessage**](/api/imagemessage) - RainyBot的图像消息类，其实例记录了与一个图像消息相关的各类数据
      * [**JsonMessage**](/api/jsonmessage) - RainyBot的Json消息类，其实例记录了与一个Json消息相关的各类数据
      * [**MarketFaceMessage**](/api/marketfacemessage) - RainyBot的商城表情消息类，其实例记录了与一个商城表情消息相关的各类数据
      * [**MusicShareMessage**](/api/musicsharemessage) - RainyBot的音乐分享消息类，其实例记录了与一个音乐分享消息相关的各类数据
      * [**PokeMessage**](/api/pokemessage) - RainyBot的戳一戳消息类，其实例记录了与一个戳一戳消息相关的各类数据
      * [**QuoteMessage**](/api/quotemessage) - RainyBot的引用回复消息类，其实例记录了与一个引用回复消息相关的各类数据
      * [**SourceMessage**](/api/sourcemessage) - RainyBot的消息链源消息类，其实例记录了某个接收到的消息链的消息ID，发送时间等数据
      * [**TextMessage**](/api/textmessage) - RainyBot的文本消息类，其实例记录了与一个文本消息相关的各类数据
      * [**VoiceMessage**](/api/voicemessage) - RainyBot的语音消息类，其实例记录了与一个语音消息相关的各类数据
      * [**XmlMessage**](/api/xmlmessage) - RainyBot的Xml消息类，其实例记录了与一个Xml消息相关的各类数据
    * [**MessageChain**](/api/messagechain) - RainyBot的消息链类，通常代表一个对应实例，为多个不同类型的消息类实例依序拼接而成的单条消息
    * [**ForwardMessageNode**](/api/forwardmessagenode) - 这是RainyBot的单条转发消息类，其实例储存了一系列合并转发消息中的单条消息的相关数据
    * [**ForwardMessageNodeList**](/api/forwardmessagenodelist) - RainyBot的转发消息列表类，通常代表一个对应实例，储存了某条合并转发消息中的所有单条转发消息
  * [**RoleAPI**](/api/roleapi) - RainyBot的角色API类，所有的角色相关API将直接或间接继承此类
    * [**GroupAPI**](/api/groupapi) - RainyBot的群组API类，所有的群组相关API将直接或间接继承此类
      * [**Group**](/api/group) - RainyBot的群组类，通常代表一个对应实例，实现了用于与群组进行交互的各类功能
      * [**GroupAnnounce**](/api/groupannounce) - RainyBot的群公告类，其实例记录了一个将被用于发送的群公告的相关信息
      * [**GroupAnnounceInfo**](/api/groupannounceinfo) - RainyBot的群公告信息类，其实例记录了一个已发送的群公告的相关信息
      * [**GroupAnnounceInfoList**](/api/groupannounceinfolist) - RainyBot的群公告信息列表类，储存了从某个群组中获取的群公告的列表
      * [**GroupConfig**](/api/groupconfig) - RainyBot的群组配置类，通常代表一个对应实例，储存了与群组各类配置有关的信息
      * [**GroupList**](/api/grouplist) - RainyBot的群组列表类，通常代表一个对应实例，储存了机器人所在的群组的列表
      * [**GroupMember**](/api/groupmember) - RainyBot的群成员类，通常代表一个对应实例，实现了用于与群组成员进行交互的各类功能
      * [**GroupMemberList**](/api/groupmemberlist) - RainyBot的群成员列表类，通常代表一个对应实例，储存了某个群组中所有群成员的列表
    * [**MemberAPI**](/api/memberapi) - RainyBot的个体成员API类，所有的个体成员相关API将直接或间接继承此类
      * [**Member**](/api/member) - RainyBot的个体成员类，通常代表一个对应实例，实现了用于与好友或单向好友(陌生人)进行交互的各类功能
      * [**MemberList**](/api/memberlist) - RainyBot的个体成员列表类，通常代表一个对应实例，储存了机器人所有个体成员(通常为好友)的列表
      * [**MemberProfile**](/api/memberprofile) - RainyBot的个体成员资料类，通常代表一个对应实例，储存了某个个体成员的相关资料
    * [**OtherClient**](/api/otherclient) - RainyBot的其它客户端类，通常代表一个对应实例，实现了用于与其他客户端进行交互的各类功能


# 类: ActionEvent

[(返回目录)](/api)

**继承自:** [Event](/api/event)

**子类:** [NudgeEvent](/api/nudgeevent)

RainyBot动作事件类，与聊天动作有关的各类事件通常直接或间接继承此类


# 类: AppMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的App消息类，通常代表一个对应实例，此类消息常见于某些特殊App调用聊天软件进行分享的场景

## 描述

这是RainyBot的App消息类，通常代表一个对应实例，此类消息常见于某些特殊App调用聊天软件进行分享的场景\
此类实例中储存了App消息的代码原文本，你也可以基于指定APP消息代码文本来构建一个此类实例

## 方法

* static [AppMessage](/api/appmessage) **init (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

基于指定的App消息代码文本来手动构造一个AppMessage类的实例

***

* static [AppMessage](/api/appmessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个AppMessage类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_app\_text ( )**

获取实例中储存的App消息代码文本

***

* void **set\_app\_text (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

更改实例中储存的App消息代码文本

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: AtAllMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的At全体成员消息类，通常代表一个对应实例，此类消息仅适用于群聊

## 描述

这是RainyBot的At全体成员消息类，通常代表一个对应实例，此类消息仅适用于群聊\
此类实例代表在消息中At了全体成员，你也可以主动构建此类实例以便进行此操作

## 方法

* static [AtAllMessage](/api/atallmessage) **init ( )**

手动构造一个AtAllMessage类的实例，以便在消息中At全体成员

***

* static [AtAllMessage](/api/atallmessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个AtAllMessage类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: AtMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的At消息类，通常代表一个对应实例，此类消息仅适用于群聊

## 描述

这是RainyBot的At消息类，通常代表一个对应实例，此类消息仅适用于群聊\
此类实例代表在消息中At了某群组成员，你也可以主动构建此类实例以便进行此操作

## 方法

* static [AtMessage](/api/atmessage) **init (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) target\_id **)**

手动构造一个AtMessage类的实例，以便在消息中At某群组成员

需要传入想要At的群组成员的ID作为参数

***

* static [AtMessage](/api/atmessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个AtMessage类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_target\_id ( )**

获取实例中储存的被At的群组成员的ID

***

* void **set\_target\_id (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) target\_id **)**

更改实例中储存的想要At的群组成员的ID

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_display\_text ( )**

获取实例中储存的被At的群组成员的显示信息(如@啦啦啦)

若为手动构造的实例，将始终返回空字符串

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: Bot

[(返回目录)](/api)

**继承自:** [BotAPI](/api/botapi)

RainyBot的Bot类，负责处理与当前使用的机器人后端账号相关的各类功能

## 方法

* static [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_id ( )**

获取当前正在使用的机器人后端账号

***

* static [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_bot\_connected ( )**

判断与机器人后端是否已建立连接

***

* static [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_sent\_message\_count ( )**

获取已通过机器人后端发送的消息的数量

***

* static [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_group\_message\_count ( )**

获取已通过机器人后端接收到的群聊消息的数量

***

* static [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_private\_message\_count ( )**

获取已通过机器人后端接收到的私聊消息的数量

***

* static [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_avatar\_url ( )**

获取机器人后端账号的头像的图像链接，通常为jpg格式

***

* static [MemberList](/api/memberlist) **get\_friend\_list (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

获取当前机器人账号的好友列表，需要与await关键词配合使用

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* static [GroupList](/api/grouplist) **get\_group\_list (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

获取当前机器人账号的群组列表，需要与await关键词配合使用

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* static [MemberProfile](/api/memberprofile) **get\_profile (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

获取当前机器人账号的资料卡，需要与await关键词配合使用

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***


# 类: BotAPI

[(返回目录)](/api)

**继承自:** [RainyBotAPI](/api/rainybotapi)

**子类:** [Bot](/api/bot), [BotRequestResult](/api/botrequestresult)

协议后端API类，直接或间接继承此类的类通常包含各类与协议后端直接相关的功能


# 类: BotCodeMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的BotCode消息类，通常代表一个对应实例，可用于快捷发送一段包含多种类型的消息

## 描述

这是RainyBot的BotCode消息类，通常代表一个对应实例，可用于快捷发送一段包含多种类型的消息\
此类实例通常不会出现在消息链中，而是用于主动构建此类实例以便快捷发送消息

## 方法

* static [BotCodeMessage](/api/botcodemessage) **init (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

基于包含BotCode的文本来构造BotCodeMessage的实例，以便快捷发送复杂消息

***

* static [BotCodeMessage](/api/botcodemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个BotCodeMessage类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_code\_text ( )**

获取实例中储存的BotCode文本

***

* void **set\_code\_text (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

更改实例中储存的BotCode文本

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: BotEvent

[(返回目录)](/api)

**继承自:** [Event](/api/event)

**子类:** [BotOfflineEvent](/api/botofflineevent), [BotOnlineEvent](/api/botonlineevent), [BotReloginEvent](/api/botreloginevent)

RainyBot的Bot自身事件类，协议后端机器人账号自身发生的各类事件通常直接或间接继承此类

## 方法

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_id ( )**

获取发生事件的机器人ID,通常为当前使用的机器人ID

***


# 类: BotJoinGroupEvent

[(返回目录)](/api)

**继承自:** [GroupBotEvent](/api/groupbotevent)

RainyBot的Bot自身加入群组事件，记录了Bot加入某个群组的事件的相关数据

## 方法

* static [BotJoinGroupEvent](/api/botjoingroupevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [Member](/api/member) **get\_invitor ( )**

获取邀请机器人加入群聊的邀请者的成员实例

***

* [Group](/api/group) **get\_group ( )**

获取此事件对应的 机器人所加入的群聊的实例

***


# 类: BotLeaveGroupEvent

[(返回目录)](/api)

**继承自:** [GroupBotEvent](/api/groupbotevent)

RainyBot的Bot自身退出群组事件类，记录了Bot退出某个群组相关事件的数据

## 枚举

enum **ReasonType**

Bot退出群组的原因类型枚举

* **ACTIVE** = 0\
  Bot主动退出群组
* **KICK** = 1\
  Bot被踢出群组
* **DISBAND** = 2\
  Bot因群解散退出群组

***

## 方法

* static [BotLeaveGroupEvent](/api/botleavegroupevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) reason\_type **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [Member](/api/member) **get\_operator ( )**

获取造成此事件的成员实例，可能是Bot自身，对应群的管理员，或对应群的群主

***

* [Group](/api/group) **get\_group ( )**

获取此事件对应的群组的实例

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_reason\_type ( )**

获取Bot退出群组的原因的类型，可用类型请参见此类的ReasonType枚举

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_reason\_type (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) reason **)**

用于判断Bot退出群组的原因是否为指定的类型，可用类型请参见此类的ReasonType枚举

***


# 类: BotMuteEvent

[(返回目录)](/api)

**继承自:** [GroupBotEvent](/api/groupbotevent)

RainyBot的Bot自身在群组中被禁言事件类，其实例记录了与一次Bot自身在群组中被禁言事件相关的数据

## 方法

* static [BotMuteEvent](/api/botmuteevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_duration ( )**

获取Bot在此事件的群组中被禁言的时长

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主

***

* [Group](/api/group) **get\_group ( )**

获取此事件实例所对应的群组实例

***


# 类: BotOfflineEvent

[(返回目录)](/api)

**继承自:** [BotEvent](/api/botevent)

RainyBot的机器人账号离线事件类，其实例记录了一次机器人账号离线事件的相关数据

## 枚举

enum **ReasonType**

机器人账号的离线原因类型的枚举

* **ACTIVE** = 0\
  机器人账号主动离线
* **FORCE** = 1\
  机器人账号被挤下线(如其他客户端登录等情况)
* **DROPPED** = 2\
  机器人账号意外掉线(网络原因或服务器原因等)

***

## 方法

* static [BotOfflineEvent](/api/botofflineevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) reason\_type **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_reason\_type ( )**

获取机器人离线事件的原因类型，可用类型请参见此类的ReasonType枚举

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_reason\_type (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) reason **)**

判定机器人离线事件是否是指定类型的原因，可用类型请参见此类的ReasonType枚举

***


# 类: BotOnlineEvent

[(返回目录)](/api)

**继承自:** [BotEvent](/api/botevent)

RainyBot的机器人账号登录成功事件类，其实例记录了一次机器人账号登录成功事件的相关数据

## 方法

* static [BotOnlineEvent](/api/botonlineevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***


# 类: BotPermChangeEvent

[(返回目录)](/api)

**继承自:** [GroupBotEvent](/api/groupbotevent)

RainyBot的Bot自身在群组中被更改权限事件类，其实例记录了与一次Bot自身在群组中被更改权限事件相关的数据

## 方法

* static [BotPermChangeEvent](/api/botpermchangeevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_origin\_permission ( )**

获取变更前的群权限，可用权限请参考GroupMember中的Permission枚举

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_current\_permission ( )**

获取变更后的当前群权限，可用权限请参考GroupMember中的Permission枚举

***

* [Group](/api/group) **get\_group ( )**

获取此事件所发生的群组实例

***


# 类: BotReloginEvent

[(返回目录)](/api)

**继承自:** [BotEvent](/api/botevent)

RainyBot的机器人账号主动重新登录事件类，其实例记录了一次机器人账号主动重新登录事件的相关数据

## 方法

* static [BotReloginEvent](/api/botreloginevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***


# 类: BotRequestResult

[(返回目录)](/api)

**继承自:** [BotAPI](/api/botapi)

RainyBot的协议后端请求结果类，记录了向协议后端发送的某次请求/命令的结果数据

## 枚举

enum **StatusCode**

请求结果的状态码，可用于对比判断请求结果的当前状态

* **SUCCESS** = 0\
  请求成功
* **WRONG\_VERIFY\_KEY** = 1\
  验证密钥错误
* **BOT\_NOT\_EXIST** = 2\
  请求的Bot不存在
* **SESSION\_INVALID** = 3\
  会话无效
* **SESSION\_NOT\_ACTIVE** = 4\
  会话未活跃
* **TARGET\_NOT\_EXIST** = 5\
  目标不存在
* **FILE\_NOT\_EXIST** = 6\
  文件不存在
* **NO\_PERMISSION** = 10\
  没有权限
* **BOT\_MUTED** = 20\
  机器人被禁言
* **MESSAGE\_TOO\_LONG** = 30\
  消息长度超限
* **WRONG\_USAGE** = 400\
  命令用法有误

***

## 方法

* static [BotRequestResult](/api/botrequestresult) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据数组构造一个BotRequestResult类的实例，仅当你知道自己在做什么时才使用

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_status\_code ( )**

返回请求结果的状态码

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_status\_msg ( )**

返回请求结果的状态信息文本

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_id ( )**

返回请求结果对应的消息ID

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_success ( )**

返回请求结果是否为成功

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_status (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) code **)**

判断请求结果是否为指定的结果

***


# 类: BotUnmuteEvent

[(返回目录)](/api)

**继承自:** [GroupBotEvent](/api/groupbotevent)

RainyBot的Bot自身在群组中被解除禁言事件类，其实例记录了与一次Bot自身在群组中被解除禁言事件相关的数据

## 方法

* static [BotUnmuteEvent](/api/botunmuteevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主

***

* [Group](/api/group) **get\_group ( )**

获取此事件实例所对应的群组实例

***


# 类: CacheMessage

[(返回目录)](/api)

**继承自:** [MessageAPI](/api/messageapi)

RainyBot的缓存消息类，通常代表一个对应实例，用于储存从机器人后端缓存中读取的消息的相关信息

## 描述

这是RainyBot的缓存消息类，通常代表一个对应实例，用于储存从机器人后端缓存中读取的消息的相关信息\
此类实例中通常储存了消息对应的消息链，以及消息对应的发送者实例等信息

## 方法

* static [CacheMessage](/api/cachemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个CacheMessage类的实例，仅当你知道自己在做什么时才使用

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* [MessageChain](/api/messagechain) **get\_message\_chain ( )**

获取缓存消息实例中储存的消息对应的消息链

***

* [RoleAPI](/api/roleapi) **get\_sender ( )**

获取缓存消息实例中储存的消息对应的发送者实例

返回的类型不定，可能返回Member,GroupMember或OtherClient类的实例

***


# 类: Console

[(返回目录)](/api)

**继承自:** [CoreAPI](/api/coreapi)

RainyBot控制台类，包含了各类与控制台输出直接相关的功能

## 方法

* static void **print\_text (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) text **)**

在控制台中打印一个普通文本，可以传入任意类型值，将自动尝试转换为字符串

***

* static void **print\_error (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) text **)**

在控制台中打印一个错误文本，可以传入任意类型值，将自动尝试转换为字符串

***

* static void **print\_warning (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) text **)**

在控制台中打印一个警告文本，可以传入任意类型值，将自动尝试转换为字符串

***

* static void **print\_success (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) text **)**

在控制台中打印一个成功文本，可以传入任意类型值，将自动尝试转换为字符串

***

* static void **save\_log ( )**

将控制台的内容立刻保存为以当前日期与时间命名的日志文件

***

* static [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **popup\_notification (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) title="提示" **)**

在控制台弹出一个具有指定文本的提示框，并且可以指定一个可选的自定义窗口标题

配合await关键词使用可以在提示框的确认按钮被点击时返回true，直接关闭时返回false

***

* static [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **popup\_confirm (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) title="请确认" **)**

在控制台弹出一个具有指定文本的确认框，并且可以指定一个可选的自定义窗口标题

配合await关键词使用可以在确认框的确认按钮被点击时返回true，点击取消或直接关闭时返回false

***

* static void **disable\_sysout (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) disabled **)**

临时禁用控制台中的系统消息输出，不影响插件通过`Console.print_`系列函数进行的输出

***


# 类: CoreAPI

[(返回目录)](/api)

**继承自:** [RainyBotAPI](/api/rainybotapi)

**子类:** [Console](/api/console), [GifImage](/api/gifimage), [HttpRequestResult](/api/httprequestresult), [Utils](/api/utils)

这是RainyBotAPI的核心类，此类及其子类通常负责各类与协议后端无关，但与RainyBot核心功能直接相关的内容


# 类: DiceMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的骰子消息类，其实例记录了与一个骰子消息相关的各类数据

## 方法

* static [DiceMessage](/api/dicemessage) **init (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) value **)**

通过指定一个骰子点数来手动构造一个骰子消息类实例

***

* static [DiceMessage](/api/dicemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_dice\_value ( )**

获取此消息实例对应的骰子的点数

***

* void **set\_dice\_value (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) value **)**

设置此消息实例对应的骰子的点数

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: Event

[(返回目录)](/api)

**继承自:** [EventAPI](/api/eventapi)

**子类:** [ActionEvent](/api/actionevent), [BotEvent](/api/botevent), [FriendEvent](/api/friendevent), [GroupEvent](/api/groupevent), [MessageEvent](/api/messageevent), [OtherClientEvent](/api/otherclientevent), [RequestEvent](/api/requestevent)

RainyBot的事件类，各种事件类型将直接或间接继承此类

## 方法

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***


# 类: EventAPI

[(返回目录)](/api)

**继承自:** [RainyBotAPI](/api/rainybotapi)

**子类:** [Event](/api/event)

RainyBot的事件API类，所有的事件相关API将直接或间接继承此类


# 类: FaceMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的表情消息类，其实例记录了与一个表情消息相关的各类数据

## 方法

* static [FaceMessage](/api/facemessage) **init (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) face **)**

用于手动构造一个表情消息实例；若传入的参数为整数，则基于表情ID进行构造；若为字符串，则基于表情名称进行构造

***

* static [FaceMessage](/api/facemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_face\_id ( )**

获取此实例对应的表情的ID

***

* void **set\_face\_id (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) face\_id **)**

设置此实例对应的表情的ID

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_face\_name ( )**

获取此实例对应的表情的名称

***

* void **set\_face\_name (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) face\_name **)**

设置此实例对应的表情的名称

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: FileMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的文件消息类，其实例记录了与一个文件消息相关的各类数据

## 方法

* static [FileMessage](/api/filemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_file\_id ( )**

获取此消息实例对应的文件的ID

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_file\_name ( )**

获取此消息实例对应的文件的名称

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_file\_size ( )**

获取此消息实例对应的文件的大小

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: FlashImageMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的闪图消息类，其实例记录了与一个闪图消息相关的各类数据

## 方法

* static [FlashImageMessage](/api/flashimagemessage) **init (** [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) image **)**

基于图像实例缓存并手动构造一个FlashImageMessage类的实例

***

* static [FlashImageMessage](/api/flashimagemessage) **init\_gif (** [GifImage](/api/gifimage) gif\_image **)**

基于Gif动图实例缓存并手动构造一个FlashImageMessage类的实例

***

* static [FlashImageMessage](/api/flashimagemessage) **init\_id (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_id **)**

基于指定的图像ID来手动构造一个FlashImageMessage类的实例

***

* static [FlashImageMessage](/api/flashimagemessage) **init\_url (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_url **)**

基于指定的URL地址来手动构造一个FlashImageMessage类的实例

***

* static [FlashImageMessage](/api/flashimagemessage) **init\_path (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_path **)**

基于指定的本地文件路径来手动构造一个FlashImageMessage类的实例

***

* static [FlashImageMessage](/api/flashimagemessage) **init\_base64 (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_base64 **)**

基于指定的BASE64编码来手动构造一个FlashImageMessage类的实例

***

* static [FlashImageMessage](/api/flashimagemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_id ( )**

获取此实例对应的图像的ID

***

* void **set\_image\_id (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_id **)**

设置此实例对应的图像的ID

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_url ( )**

获取此实例对应的图像的URL链接

***

* void **set\_image\_url (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_url **)**

设置此实例对应的图像的URL链接

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_path ( )**

获取此实例对应的图像的本地路径

***

* void **set\_image\_path (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_path **)**

设置此实例对应的图像的本地路径

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_base64 ( )**

获取此实例对应的图像的Base64编码

***

* void **set\_image\_base64 (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_base64 **)**

设置此实例对应的图像的Base64编码

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_image\_height ( )**

获取此实例对应的图像的高度

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_image\_width ( )**

获取此实例对应的图像的宽度

***

* [float](https://docs.godotengine.org/en/latest/classes/class_float.html) **get\_image\_size ( )**

获取此实例对应的图像的文件大小

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_type ( )**

获取此实例对应的图像的类型文本

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_emoji ( )**

判断此实例对应的图像是否为表情

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: ForwardMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的转发消息类，其实例记录了与一个转发消息相关的各类数据

## 方法

* static [ForwardMessage](/api/forwardmessage) **init (** [ForwardMessageNodeList](/api/forwardmessagenodelist) node\_list **)**

基于指定的转发消息列表实例来手动构造一个ForwardMessage实例

***

* static [ForwardMessage](/api/forwardmessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [ForwardMessageNodeList](/api/forwardmessagenodelist) **get\_node\_list ( )**

获取此实例对应的转发消息列表实例

***

* void **set\_node\_list (** [ForwardMessageNodeList](/api/forwardmessagenodelist) node\_list **)**

设置此实例对应的转发消息列表实例

***


# 类: ForwardMessageNode

[(返回目录)](/api)

**继承自:** [MessageAPI](/api/messageapi)

这是RainyBot的单条转发消息类，其实例储存了一系列合并转发消息中的单条消息的相关数据

## 方法

* static [ForwardMessageNode](/api/forwardmessagenode) **init (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) sender\_id=-1, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) time=0, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) sender\_name="", [MessageChain](/api/messagechain) message\_chain=null **)**

基于指定的参数来手动构造一个自定义的ForwardMessageNode类的实例

需要的参数从左到右分别为: 被转发的消息的发送者ID,被转发的消息的发送时间戳，被转发的消息的发送者名称，被转发的消息的内容消息链

***

* static [ForwardMessageNode](/api/forwardmessagenode) **init\_id (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) message\_id **)**

基于指定的已存在的消息ID来手动构造一个ForwardMessageNode类的实例

***

* static [ForwardMessageNode](/api/forwardmessagenode) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_sender\_id ( )**

获取此实例对应的消息的发送者的ID

***

* void **set\_sender\_id (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) id **)**

设置此实例对应的消息的发送者的ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_timestamp ( )**

获取此实例对应的消息的发送时间戳

***

* void **set\_timestamp (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) time **)**

设置此实例对应的消息的发送时间戳

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_sender\_name ( )**

获取此实例对应的消息的发送者的名称

***

* void **set\_sender\_name (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) name **)**

设置此实例对应的消息的发送者的名称

***

* [MessageChain](/api/messagechain) **get\_message\_chain ( )**

获取此实例对应的消息的消息链实例

***

* void **set\_message\_chain (** [MessageChain](/api/messagechain) msg\_chain **)**

设置此实例对应的消息的消息链实例

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_id ( )**

获取此实例对应的消息的ID

***

* void **set\_message\_id (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) id **)**

设置此实例对应的消息的ID

***


# 类: ForwardMessageNodeList

[(返回目录)](/api)

**继承自:** [MessageAPI](/api/messageapi)

RainyBot的转发消息列表类，通常代表一个对应实例，储存了某条合并转发消息中的所有单条转发消息

## 描述

这是RainyBot的转发消息列表类，通常代表一个对应实例，储存了某条合并转发消息中的所有单条转发消息\
你可以像数组/字典一样直接使用for x in x的语法来循环列表中的所有单条转发消息(将返回ForwardMessageNode类实例)

## 方法

* static [ForwardMessageNodeList](/api/forwardmessagenodelist) **init (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) msg\_node **)**

手动构造一个ForwardMessageNodeList类的实例，以便将多个单条转发消息进行合并转发

传入的参数可以是以下类型:

* 单条转发消息实例(将其作为列表中的第一个单条转发消息实例)
* 包含单条转发消息实例的数组(将按照上方规则将数组中的实例依次添加至此转发列表)

***

* static [ForwardMessageNodeList](/api/forwardmessagenodelist) **init\_meta (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

通过机器人协议后端的元数据数组构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) **get\_metadata ( )**

获取实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

使用指定数组覆盖实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* [ForwardMessageNode](/api/forwardmessagenode) **get\_from\_index (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) index **)**

根据指定的序号来从此实例中获取对应的ForwardMessageNode实例

若序号不存在则返回null

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_size ( )**

获取转发消息列表中单条转发消息的总数

***

* [ForwardMessageNodeList](/api/forwardmessagenodelist) **append (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) msg\_node **)**

将参数中的内容添加到此消息链实例中，并返回此消息链实例自身，以便于进行连续操作

传入的参数可以是以下类型:

* 单条转发消息实例(将其作为列表中的第一个单条转发消息实例)
* 包含单条转发消息实例的数组(将按照上方规则将数组中的实例依次添加至此转发列表)

***

* [ForwardMessageNode](/api/forwardmessagenode) **get\_from\_message\_id (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) message\_id **)**

基于指定的消息ID来查找并返回第一个找到的单条转发消息实例

***

* [ForwardMessageNode](/api/forwardmessagenode) **get\_from\_sender\_id (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) sender\_id **)**

基于指定的发送者ID来查找并返回第一个找到的单条转发消息实例

***


# 类: FriendEvent

[(返回目录)](/api)

**继承自:** [Event](/api/event)

**子类:** [FriendInputStatusChangeEvent](/api/friendinputstatuschangeevent), [FriendNickChangeEvent](/api/friendnickchangeevent), [FriendRecallEvent](/api/friendrecallevent)

RainyBot好友事件类，与好友相关的事件通常直接或间接继承此类


# 类: FriendInputStatusChangeEvent

[(返回目录)](/api)

**继承自:** [FriendEvent](/api/friendevent)

RainyBot的好友输入状态变更事件类，记录了某次好友输入状态变更事件的相关数据

## 方法

* static [FriendInputStatusChangeEvent](/api/friendinputstatuschangeevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_input\_state ( )**

用于判断此事件对应的输入状态是开始输入还是停止输入

***

* [Member](/api/member) **get\_member ( )**

获取此事件对应的好友成员实例

***


# 类: FriendMessageEvent

[(返回目录)](/api)

**继承自:** [MessageEvent](/api/messageevent)

RainyBot的好友消息事件类，其实例记录了与一次好友消息事件相关的数据

## 方法

* static [FriendMessageEvent](/api/friendmessageevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [Member](/api/member) **get\_sender ( )**

获取消息事件对应的发送者的好友成员实例

***


# 类: FriendNickChangeEvent

[(返回目录)](/api)

**继承自:** [FriendEvent](/api/friendevent)

RainyBot的好友昵称变更事件类，记录了某次好友昵称变更事件的相关数据

## 方法

* static [FriendNickChangeEvent](/api/friendnickchangeevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_origin\_nickname ( )**

获取此事件对应的好友的原昵称

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_current\_nickname ( )**

获取此事件对应的好友更改后的昵称

***

* [Member](/api/member) **get\_member ( )**

获取此事件对应的好友的成员实例

***


# 类: FriendRecallEvent

[(返回目录)](/api)

**继承自:** [FriendEvent](/api/friendevent)

RainyBot的好友消息撤回事件类，记录了某次好友消息撤回事件的相关数据

## 方法

* static [FriendRecallEvent](/api/friendrecallevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_sender\_id ( )**

获取事件原消息发送者的ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_id ( )**

获取事件对应的原消息的ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_time ( )**

获取事件对应的原消息的发送时间

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_operator\_id ( )**

获取造成此事件的成员的ID(通常为此事件对应的好友的ID或Bot自身的ID)

***


# 类: GifImage

[(返回目录)](/api)

**继承自:** [CoreAPI](/api/coreapi)

RainyBot动态图像类，可用于构造并生成一个Gif图像及相关数据，并将其用于储存或发送

## 信号

* **changed ( )**

在此Gif图像类实例的属性或数据发生变更时，将会触发此信号

***

## 方法

* static [GifImage](/api/gifimage) **init (** [Vector2](https://docs.godotengine.org/en/latest/classes/class_vector2.html) img\_size **)**

基于指定的图像大小来构造一个GifImage类图像的实例

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **add\_frame (** [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) image, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) delay\_time **)**

向此Gif图像实例中添加一个新的图像帧，并设定这一帧的延迟时间 (持续时间)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **insert\_frame (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) idx, [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) image, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) delay\_time **)**

在指定的位置向此Gif图像实例中插入一个新的图像帧，并设定这一帧的延迟时间 (持续时间)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **remove\_frame (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) idx **)**

删除此Gif图像实例中位于指定位置的某一帧

***

* [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) **get\_frame\_image (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) idx **)**

获取此Gif图像实例中位于指定位置的某一帧的图像

***

* [float](https://docs.godotengine.org/en/latest/classes/class_float.html) **get\_frame\_delay\_time (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) idx **)**

获取此Gif图像实例中位于指定位置的某一帧的延迟时间 (持续时间)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **set\_frame\_image (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) idx, [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) image **)**

设置此Gif图像实例中位于指定位置的某一帧的图像

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **set\_frame\_delay\_time (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) idx, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) delay\_time **)**

设置此Gif图像实例中位于指定位置的某一帧的延迟时间 (持续时间)

***

* void **clear\_frames ( )**

清除此Gif图像实例中的所有帧

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_frames\_count ( )**

获取此Gif图像实例中的所有帧的数量

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **set\_size (** [Vector2](https://docs.godotengine.org/en/latest/classes/class_vector2.html) new\_size **)**

设置此Gif图像实例的图像大小

***

* [Vector2](https://docs.godotengine.org/en/latest/classes/class_vector2.html) **get\_size ( )**

获取此Gif图像实例的图像大小

***

* [float](https://docs.godotengine.org/en/latest/classes/class_float.html) **get\_playback\_time ( )**

获取此Gif图像实例中的所有帧的总播放时间

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **save (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) path **)**

将此Gif图像实例生成图像数据并保存至指定的gif文件，需要配合await关键字使用

***

* [float](https://docs.godotengine.org/en/latest/classes/class_float.html) **get\_generate\_time ( )**

获取此Gif图像实例中的所有帧的预计生成时间，需要配合await关键字使用

***


# 类: Group

[(返回目录)](/api)

**继承自:** [GroupAPI](/api/groupapi)

RainyBot的群组类，通常代表一个对应实例，实现了用于与群组进行交互的各类功能

## 描述

这是RainyBot的群组类，通常代表一个对应实例，实现了用于与群组进行交互的各类功能\
绝大部分与群聊直接相关的操作都可以通过此类来进行

## 方法

* static [Group](/api/group) **init (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) group\_id **)**

手动构造一个Group类的实例，用于主动进行与群组的交互时使用

需要传入群聊的ID(群号)作为参数，以便进行各类操作

***

* static [Group](/api/group) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个Group类的实例，仅当你知道自己在做什么时才使用

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_name ( )**

获取群聊实例的名称(群名称)，若为手动构造的实例，将始终返回空字符串

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_id ( )**

获取群聊实例的ID(群号)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_bot\_permission ( )**

获取机器人在群聊实例中的权限，若为手动构造的实例，将始终返回0

权限列表请参见GroupMember类中的Permission枚举

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_avatar\_url ( )**

获取群聊实例对应的群头像的图像链接，通常为jpg格式

***

* [GroupMember](/api/groupmember) **get\_member (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) member\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

获取群聊实例中指定成员ID的GroupMember实例，需要配合await关键字使用

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [GroupMemberList](/api/groupmemberlist) **get\_member\_list (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

获取群聊实例中所有成员列表的GroupMemberList实例，需要配合await关键字使用

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [MemberProfile](/api/memberprofile) **get\_member\_profile (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) member\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

获取群聊实例中指定成员ID相关资料的MemberProfile实例，需要配合await关键字使用

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **toggle\_mute\_all (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) enabled, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于切换群聊实例的全员禁言状态，所需的参数为是否启用全员禁言

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [GroupConfig](/api/groupconfig) **get\_group\_config (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于获取与群聊实例的各类配置相关的GroupConfig实例，需要配合await关键字使用

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **set\_group\_config (** [GroupConfig](/api/groupconfig) config, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于将群聊实例的各类配置替换为指定的GroupConfig实例中的配置

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **send\_message (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) msg, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) quote\_msgid=-1, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于向群聊实例发送消息，同时可指定一个需要引用回复的消息ID

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

传入的第一个参数可以是以下类型:

* 字符串(将自动构造为文本消息实例，解析其中的BotCode，并将其作为消息链中的唯一消息实例发送)
* 单个消息实例(将其作为消息链中的唯一消息实例发送)
* 消息链实例(将其内容复制并发送)
* 包含以上三种类型实例的数组(将按照上方规则将数组中的实例依次合并添加至一个消息链并发送)

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **send\_nudge (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) member\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在群聊实例中向指定的成员ID发送一个戳一戳消息

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [GroupAnnounceInfoList](/api/groupannounceinfolist) **publish\_announce (** [GroupAnnounce](/api/groupannounce) announce, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在群聊实例中发布一个指定的群公告实例，群公告实例的相关用法请参见\[GroupAnnounce]类文档

配合await关键字可返回一个包含了已发布的群公告的\[GroupAnnounceInfoList]类实例，以便于进行后续操作

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **delete\_announce (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) announce\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在群聊实例中删除一个指定ID的群公告

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [GroupAnnounceInfoList](/api/groupannounceinfolist) **get\_announce\_list (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) page\_num=0, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) per\_page\_size=10, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于获取在群聊实例中的群公告的列表，可指定页码，以及每页将包含的群公告的数量，将返回一个\[GroupAnnounceInfoList]类的实例

此函数必须配合await关键字进行使用，否则将会发生错误，且无法获取相关的信息

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **quit (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于让机器人主动退出群聊实例所对应的群聊

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **set\_essence\_message (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) msg\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在群聊实例中将指定ID的消息设置为精华消息

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **recall\_message (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) msg\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在群聊实例中将指定ID的消息撤回，机器人需要为管理员或群主才可撤回他人消息

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [CacheMessage](/api/cachemessage) **get\_cache\_message (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) msg\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在群聊实例中获取指定ID的本地缓存消息，将返回一个\[CacheMessage]类的实例

此函数必须配合await关键字进行使用，否则将会发生错误，且无法获取相关的信息

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***


# 类: GroupAPI

[(返回目录)](/api)

**继承自:** [RoleAPI](/api/roleapi)

**子类:** [Group](/api/group), [GroupAnnounce](/api/groupannounce), [GroupAnnounceInfo](/api/groupannounceinfo), [GroupAnnounceInfoList](/api/groupannounceinfolist), [GroupConfig](/api/groupconfig), [GroupList](/api/grouplist), [GroupMember](/api/groupmember), [GroupMemberList](/api/groupmemberlist)

RainyBot的群组API类，所有的群组相关API将直接或间接继承此类

## 描述

这是RainyBot的群组API类，所有的群组相关API将直接或间接继承此类\
继承此类的API包括但不限于群组/群组配置/群列表/群成员/群成员列表等类


# 类: GroupAllowAnonyChatEvent

[(返回目录)](/api)

**继承自:** [GroupEvent](/api/groupevent)

RainyBot的群组匿名聊天允许状态变更类，其实例记录了与一次群组匿名聊天允许状态变更事件相关的数据

## 方法

* static [GroupAllowAnonyChatEvent](/api/groupallowanonychatevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_origin\_state ( )**

获取变更前的匿名聊天允许状态

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_current\_state ( )**

获取变更后当前的匿名聊天允许状态

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主

***

* [Group](/api/group) **get\_group ( )**

获取此事件实例所对应的群组实例

***


# 类: GroupAllowConfessTalkEvent

[(返回目录)](/api)

**继承自:** [GroupEvent](/api/groupevent)

RainyBot的群组坦白说允许状态变更类，其实例记录了与一次群组坦白说允许状态变更事件相关的数据

## 方法

* static [GroupAllowConfessTalkEvent](/api/groupallowconfesstalkevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_origin\_state ( )**

获取变更前的坦白说允许状态

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_current\_state ( )**

获取变更后当前的坦白说允许状态

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主

***

* [Group](/api/group) **get\_group ( )**

获取此事件实例所对应的群组实例

***


# 类: GroupAllowInviteEvent

[(返回目录)](/api)

**继承自:** [GroupEvent](/api/groupevent)

RainyBot的群组邀请入群允许状态变更类，其实例记录了与一次群组邀请入群允许状态变更事件相关的数据

## 方法

* static [GroupAllowInviteEvent](/api/groupallowinviteevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_origin\_state ( )**

获取变更前的邀请入群允许状态

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_current\_state ( )**

获取变更后当前的邀请入群允许状态

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主

***

* [Group](/api/group) **get\_group ( )**

获取此事件实例所对应的群组实例

***


# 类: GroupAnnounce

[(返回目录)](/api)

**继承自:** [GroupAPI](/api/groupapi)

RainyBot的群公告类，其实例记录了一个将被用于发送的群公告的相关信息

## 描述

这是RainyBot的群公告类，其实例记录了一个将被用于发送的群公告的相关信息\
此类实例通常需要被手动构造，以用于向某个特定群组中发送一条群公告

## 方法

* static [GroupAnnounce](/api/groupannounce) **init (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) content **)**

基于指定的内容文本构造一个群公告实例，您可以稍后通过实例中的其它函数来设置此公告的更多属性

***

* static [GroupAnnounce](/api/groupannounce) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_content (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

设置公告实例中的公告内容文本，此项为此实例可被正常发送的必要条件，因此不可为空

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_content ( )**

获取公告实例中的公告内容文本

***

* void **set\_send\_to\_new\_member (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) enabled **)**

设置此公告实例是否向新成员展示

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_send\_to\_new\_member ( )**

获取此公告实例是否向新成员展示

***

* void **set\_pinned (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) enabled **)**

设置此公告实例是否在公告列表中置顶

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_pinned ( )**

获取此公告实例是否在公告列表中置顶

***

* void **set\_show\_edit\_card (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) enabled **)**

设置此公告实例是否显示引导群员修改名片的选项

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_show\_edit\_card ( )**

获取此公告实例是否显示引导群员修改名片的选项

***

* void **set\_show\_popup (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) enabled **)**

设置此公告实例是否使用弹窗来展示

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_show\_popup ( )**

获取此公告实例是否使用弹窗来展示

***

* void **set\_require\_confirm (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) enabled **)**

设置此公告实例是否需要群成员进行确认

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_require\_confirm ( )**

获取此公告实例是否需要群成员进行确认

***

* void **set\_image\_url (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) img\_url **)**

设置此公告实例将包含的图像的url链接

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_url ( )**

获取此公告实例将包含的图像的url链接

***

* void **set\_image\_path (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) img\_path **)**

设置此公告实例将包含的图像的本地绝对路径

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_path ( )**

获取此公告实例将包含的图像的本地绝对路径

***

* void **set\_image\_base64 (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) img\_base64 **)**

设置此公告实例将包含的图像的Base64编码

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_base64 ( )**

获取此公告实例将包含的图像的Base64编码

***


# 类: GroupAnnounceChangeEvent

[(返回目录)](/api)

**继承自:** [GroupEvent](/api/groupevent)

RainyBot的群组公告变更类，其实例记录了与一次群组公告变更事件相关的数据

## 方法

* static [GroupAnnounceChangeEvent](/api/groupannouncechangeevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_origin\_announce ( )**

获取变更前的群公告文本

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_current\_announce ( )**

获取变更后当前的群公告文本

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主

***

* [Group](/api/group) **get\_group ( )**

获取此事件实例所对应的群组实例

***


# 类: GroupAnnounceInfo

[(返回目录)](/api)

**继承自:** [GroupAPI](/api/groupapi)

RainyBot的群公告信息类，其实例记录了一个已发送的群公告的相关信息

## 描述

这是RainyBot的群公告信息类，其实例记录了一个已发送的群公告的相关信息\
此类实例通常不应被手动构造，而是由诸如获取群公告一类的方法返回

## 方法

* static [GroupAnnounceInfo](/api/groupannounceinfo) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_id ( )**

获取此群公告的唯一ID，可用于后续删除等操作

***

* [Group](/api/group) **get\_group ( )**

获取此群公告相关的群的实例

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_content ( )**

获取此群公告中包含的内容文本

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_sender\_id ( )**

获取此群公告的发送者的ID

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_all\_confirmed ( )**

获取此群公告是否已被全体群成员确认

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_confirmed\_count ( )**

获取已确认此群公告的群成员人数

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_public\_timestamp ( )**

获取此群公告发布时间的时间戳

***


# 类: GroupAnnounceInfoList

[(返回目录)](/api)

**继承自:** [GroupAPI](/api/groupapi)

RainyBot的群公告信息列表类，储存了从某个群组中获取的群公告的列表

## 描述

这是RainyBot的群公告信息列表类，储存了从某个群组中获取的群公告的列表\
你可以像数组/字典一样直接使用for x in x的语法来循环列表中的所有公告信息(将返回\[GroupAnnounceInfo]类实例)

## 方法

* static [GroupAnnounceInfoList](/api/groupannounceinfolist) **init\_meta (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

通过机器人协议后端的元数据数组构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) **get\_metadata ( )**

获取实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

使用指定字典覆盖实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* [GroupAnnounceInfo](/api/groupannounceinfo) **get\_from\_index (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) index **)**

根据指定的序号来从群公告信息列表实例中获取对应的\[GroupAnnounceInfo]实例

若序号不存在则返回null

***

* [GroupAnnounceInfo](/api/groupannounceinfo) **get\_from\_id (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) announce\_id **)**

根据指定的群公告ID来从群公告信息列表实例中获取对应的\[GroupAnnounceInfo]实例

若群公告ID不存在则返回null

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **has\_announce (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) announce\_id **)**

判断群公告信息列表实例中是否存在指定ID的群公告信息实例

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_size ( )**

获取群公告信息列表实例中的群公告信息实例的总数

***


# 类: GroupBotEvent

[(返回目录)](/api)

**继承自:** [GroupEvent](/api/groupevent)

**子类:** [BotJoinGroupEvent](/api/botjoingroupevent), [BotLeaveGroupEvent](/api/botleavegroupevent), [BotMuteEvent](/api/botmuteevent), [BotPermChangeEvent](/api/botpermchangeevent), [BotUnmuteEvent](/api/botunmuteevent)

RainyBot的Bot自身群组事件类，与Bot自身相关的群组事件通常直接或间接继承此类


# 类: GroupConfig

[(返回目录)](/api)

**继承自:** [GroupAPI](/api/groupapi)

RainyBot的群组配置类，通常代表一个对应实例，储存了与群组各类配置有关的信息

## 描述

这是RainyBot的群组配置类，通常代表一个对应实例，储存了与群组各类配置有关的信息\
对此类实例中内容的更改不会直接影响群组的配置，需要在更改完成后于群组实例中将此类实例设定为群组配置

## 方法

* static [GroupConfig](/api/groupconfig) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个GroupConfig类的实例，仅当你知道自己在做什么时才使用

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_name ( )**

获取群组配置实例中储存的群名称

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_announcement ( )**

获取群组配置实例中储存的入群公告

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_confess\_talk ( )**

获取群组配置实例中储存的坦白说启用状态

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_allow\_member\_invite ( )**

获取群组配置实例中储存的允许邀请入群启用状态

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_auto\_approve ( )**

获取群组配置实例中储存的自动入群审批启用状态

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_anonymous\_chat ( )**

获取群组配置实例中储存的匿名聊天启用状态

***

* void **set\_name (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) name **)**

更改群组配置实例中储存的群名称

***

* void **set\_announcement (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

更改群组配置实例中储存的入群公告

***

* void **set\_confess\_talk (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) enabled **)**

更改群组配置实例中储存的坦白说启用状态

***

* void **set\_allow\_member\_invite (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) enabled **)**

更改群组配置实例中储存的允许邀请入群启用状态

***

* void **set\_auto\_approve (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) enabled **)**

更改群组配置实例中储存的自动入群审批启用状态

***

* void **set\_anonymous\_chat (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) enabled **)**

更改群组配置实例中储存的匿名聊天启用状态

***


# 类: GroupEvent

[(返回目录)](/api)

**继承自:** [Event](/api/event)

**子类:** [GroupAllowAnonyChatEvent](/api/groupallowanonychatevent), [GroupAllowConfessTalkEvent](/api/groupallowconfesstalkevent), [GroupAllowInviteEvent](/api/groupallowinviteevent), [GroupAnnounceChangeEvent](/api/groupannouncechangeevent), [GroupBotEvent](/api/groupbotevent), [GroupMemberEvent](/api/groupmemberevent), [GroupMuteAllEvent](/api/groupmuteallevent), [GroupNameChangeEvent](/api/groupnamechangeevent), [GroupRecallEvent](/api/grouprecallevent)

RainyBot的群组事件类，与群组直接相关的各类事件通常直接或间接继承此类


# 类: GroupInviteRequestEvent

[(返回目录)](/api)

**继承自:** [RequestEvent](/api/requestevent)

RainyBot的邀请入群请求事件类，其实例记录了与一次邀请入群请求事件相关的数据

## 枚举

enum **RespondType**

可用于回应请求的回应类型

* **ACCEPT** = 0\
  接受入群邀请
* **REFUSE** = 1\
  拒绝入群邀请

***

## 方法

* static [GroupInviteRequestEvent](/api/groupinviterequestevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_group\_name ( )**

获取事件对应的被邀请加入的群的名称

***


# 类: GroupList

[(返回目录)](/api)

**继承自:** [GroupAPI](/api/groupapi)

RainyBot的群组列表类，通常代表一个对应实例，储存了机器人所在的群组的列表

## 描述

这是RainyBot的群组列表类，通常代表一个对应实例，储存了机器人所在的群组的列表\
你可以像数组/字典一样直接使用for x in x的语法来循环列表中的所有群组(将返回Group类实例)

## 方法

* static [GroupList](/api/grouplist) **init\_meta (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

通过机器人协议后端的元数据数组构造一个GroupList类的实例，仅当你知道自己在做什么时才使用

***

* [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) **get\_metadata ( )**

获取实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

使用指定数组覆盖实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* [Group](/api/group) **get\_from\_index (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) index **)**

根据指定的序号来从群列表实例中获取对应的Group实例

若序号不存在则返回null

***

* [Group](/api/group) **get\_from\_id (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) group\_id **)**

根据指定的群ID(群号)来从群列表实例中获取对应的Group实例

若群ID不存在则返回null

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_size ( )**

获取群列表实例中的群实例的总数

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **has\_group (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) group\_id **)**

判断群列表实例中是否存在指定群ID(群号)的群组实例

***


# 类: GroupMember

[(返回目录)](/api)

**继承自:** [GroupAPI](/api/groupapi)

RainyBot的群成员类，通常代表一个对应实例，实现了用于与群组成员进行交互的各类功能

## 描述

这是RainyBot的群成员类，通常代表一个对应实例，实现了用于与群组成员进行交互的各类功能\
绝大部分与群组中某位成员相关的操作都可以通过此类来进行

## 枚举

enum **Permission**

这是代表了群成员权限的枚举，在进行权限相关操作时可在转为整数后用于对比

如"get\_permission() == GroupMember.Permission.ADMINISTRATOR"可判断群成员是否为管理员

* **MEMBER** = 0\
  代表权限为群聊中的普通成员
* **ADMINISTRATOR** = 1\
  代表权限为群聊中的管理员
* **OWNER** = 2\
  代表权限为群聊中的群主

***

## 方法

* static [GroupMember](/api/groupmember) **init (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) group\_id, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) member\_id **)**

手动构造一个GroupMember类的实例，用于主动进行与群成员的交互时使用

需要传入的参数分别为群成员所属群聊的ID(群号)，群成员自身的ID

***

* static [GroupMember](/api/groupmember) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个GroupMember类的实例，仅当你知道自己在做什么时才使用

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_id ( )**

获取群成员实例的ID

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_name ( )**

获取群成员实例在群聊中的名称(群昵称)，若为手动构造的实例，将始终返回空字符串

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_special\_title ( )**

获取群成员实例在群聊中的特别称号(群荣誉)，若为手动构造的实例，将始终返回空字符串

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_permission ( )**

获取群成员实例在群聊中的权限，将返回一个对应Permission枚举的整数值

若为手动构造的实例，将始终返回0

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_avatar\_url ( )**

获取群成员实例对应账号的头像的图像链接，通常为jpg格式

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_permission (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) perm **)**

判断群成员实例的类型是否为指定的类型

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_join\_timestamp ( )**

获取群成员实例加入其所在群聊的时间戳，若为手动构造的实例，将始终返回0

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_last\_speak\_timestamp ( )**

获取群成员实例在对应群聊中上次发言的时间戳，若为手动构造的实例，将始终返回0

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_mute\_time\_remaining ( )**

获取群成员实例在对应群聊中剩余的禁言时间(秒)，若为手动构造的实例，将始终返回0

***

* [Group](/api/group) **get\_group ( )**

获取群成员实例所在群聊的Group实例，

若为群成员为手动构造的实例，则返回的Group实例也等同于使用Group.init()手动构造的实例

***

* [MemberProfile](/api/memberprofile) **get\_profile (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

获取记录了群成员实例相关资料的MemberProfile实例，需要配合await关键字使用

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **change\_name (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) new\_name, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

更改群成员实例在其对应群聊中的名称(群昵称)

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **change\_special\_title (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) new\_title, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

更改群成员实例在其对应群聊中的特别称号(群荣誉)

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **toggle\_admin (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) enabled, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

开关群成员实例在其对应群聊中的管理员权限，机器人需要为群主才可执行

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **kick (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) message="", [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

将群成员实例移出其所在的对应群聊，机器人需要为管理员或群主才可执行

可传入一个消息参数作为移出群聊的理由，但可能不会被显示

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **mute (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) time=1800, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

将群成员实例在其所在的群聊中禁言指定的秒数，机器人需要为管理员或群主才可执行

若不传入秒数则默认为禁言1800秒

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **unmute (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

将群成员实例在其所在的群聊中解除禁言，机器人需要为管理员或群主才可执行

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **send\_message (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) msg, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) quote\_msgid=-1, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

通过群临时会话，向群成员实例私聊发送消息，同时可指定一个需要引用回复的消息ID

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

传入的第一个参数可以是以下类型:

* 字符串(将自动构造为文本消息实例，解析其中的BotCode，并将其作为消息链中的唯一消息实例发送)
* 单个消息实例(将其作为消息链中的唯一消息实例发送)
* 消息链实例(将其内容复制并发送)
* 包含以上三种类型实例的数组(将按照上方规则将数组中的实例依次合并添加至一个消息链并发送)

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **send\_nudge (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

通过群临时会话，向群成员实例私聊发送一个戳一戳消息

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **recall\_message (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) msg\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在群成员实例中将指定ID的消息撤回，仅可撤回机器人发送的消息

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [CacheMessage](/api/cachemessage) **get\_cache\_message (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) msg\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在群成员实例中获取指定ID的本地缓存消息，将返回一个\[CacheMessage]类的实例

此函数必须配合await关键字进行使用，否则将会发生错误，且无法获取相关的信息

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***


# 类: GroupMemberEvent

[(返回目录)](/api)

**继承自:** [GroupEvent](/api/groupevent)

**子类:** [MemberHonorChangeEvent](/api/memberhonorchangeevent), [MemberJoinEvent](/api/memberjoinevent), [MemberLeaveEvent](/api/memberleaveevent), [MemberMuteEvent](/api/membermuteevent), [MemberNameChangeEvent](/api/membernamechangeevent), [MemberPermChangeEvent](/api/memberpermchangeevent), [MemberTitleChangeEvent](/api/membertitlechangeevent), [MemberUnmuteEvent](/api/memberunmuteevent)

RainyBot的群组成员事件类，与群成员相关的群组事件通常直接或间接继承此类


# 类: GroupMemberList

[(返回目录)](/api)

**继承自:** [GroupAPI](/api/groupapi)

RainyBot的群成员列表类，通常代表一个对应实例，储存了某个群组中所有群成员的列表

## 描述

这是RainyBot的群成员列表类，通常代表一个对应实例，储存了某个群组中所有群成员的列表\
你可以像数组/字典一样直接使用for x in x的语法来循环列表中的所有群成员(将返回GroupMember类实例)

## 方法

* static [GroupMemberList](/api/groupmemberlist) **init\_meta (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

通过机器人协议后端的元数据数组构造一个GroupMemberList类的实例，仅当你知道自己在做什么时才使用

***

* [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) **get\_metadata ( )**

获取实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

使用指定数组覆盖实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* [GroupMember](/api/groupmember) **get\_from\_index (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) index **)**

根据指定的序号来从群成员列表实例中获取对应的GroupMember实例

若序号不存在则返回null

***

* [GroupMember](/api/groupmember) **get\_from\_id (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) member\_id **)**

根据指定的群成员ID来从群成员列表实例中获取对应的GroupMember实例

若群成员ID不存在则返回null

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **has\_member (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) member\_id **)**

判断群成员列表实例中是否存在指定ID的群成员实例

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_size ( )**

获取群成员列表实例中的群成员实例的总数

***


# 类: GroupMessageEvent

[(返回目录)](/api)

**继承自:** [MessageEvent](/api/messageevent)

RainyBot的群组消息事件类，其实例记录了与一次群组消息事件相关的数据

## 方法

* static [GroupMessageEvent](/api/groupmessageevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [GroupMember](/api/groupmember) **get\_sender ( )**

获取消息事件对应的发送者的群组成员实例

***

* [Group](/api/group) **get\_group ( )**

获取消息事件所对应的群组的实例

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_group\_id ( )**

获取消息事件所对应的群组的ID

***

* [BotRequestResult](/api/botrequestresult) **recall (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

撤回事件所对应的群消息，机器人需要在对应群组中为管理员或群组权限才能执行成功

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **set\_essence (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

将事件所对应的群消息设置为精华消息，机器人需要在对应群组中为管理员或群组权限才能执行成功

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_at\_bot ( )**

判断事件所对应的群消息中是否AT了机器人

***


# 类: GroupMuteAllEvent

[(返回目录)](/api)

**继承自:** [GroupEvent](/api/groupevent)

RainyBot的群组全员禁言状态变更类，其实例记录了与一次群组全员禁言状态变更事件相关的数据

## 方法

* static [GroupMuteAllEvent](/api/groupmuteallevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_origin\_state ( )**

获取变更前的全员禁言状态

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **get\_current\_state ( )**

获取变更后当前的全员禁言状态

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主

***

* [Group](/api/group) **get\_group ( )**

获取此事件实例所对应的群组实例

***


# 类: GroupNameChangeEvent

[(返回目录)](/api)

**继承自:** [GroupEvent](/api/groupevent)

RainyBot的群组名称变更类，其实例记录了与一次群组名称变更事件相关的数据

## 方法

* static [GroupNameChangeEvent](/api/groupnamechangeevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_origin\_name ( )**

获取变更前的群名称文本

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_current\_name ( )**

获取变更后当前的群名称文本

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主

***

* [Group](/api/group) **get\_group ( )**

获取此事件实例所对应的群组实例

***


# 类: GroupRecallEvent

[(返回目录)](/api)

**继承自:** [GroupEvent](/api/groupevent)

RainyBot的群组消息撤回类，其实例记录了与一次群组消息撤回事件相关的数据

## 方法

* static [GroupRecallEvent](/api/grouprecallevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_sender\_id ( )**

获取被撤回的消息的发送者ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_id ( )**

获取被撤回的消息的ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_timestamp ( )**

获取被撤回的消息的发送时间戳

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主，也可能是发送者自己

***

* [Group](/api/group) **get\_group ( )**

获取此事件实例所对应的群组实例

***


# 类: HttpRequestResult

[(返回目录)](/api)

**继承自:** [CoreAPI](/api/coreapi)

RainyBot的Http请求结果类，可从其中快速获取某次Http请求的结果数据

## 方法

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_request\_url ( )**

获取此请求的URL字符串

***

* [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) **get\_request\_data ( )**

获取此请求的请求数据(字符串/字节数组)

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_request\_data\_dic ( )**

将此请求的请求数据解析为字典并返回

***

* [PackedStringArray](https://docs.godotengine.org/en/latest/classes/class_packedstringarray.html) **get\_request\_headers ( )**

获取此请求的headers数组

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_result\_status ( )**

获取此请求的结果状态

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_response\_code ( )**

获取此请求的结果响应码

***

* [PackedStringArray](https://docs.godotengine.org/en/latest/classes/class_packedstringarray.html) **get\_headers ( )**

获取此请求的结果的headers

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

尝试将此请求的结果解析为字符串并返回

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_as\_dic ( )**

尝试将此请求的结果解析为字典并返回

***

* [PackedByteArray](https://docs.godotengine.org/en/latest/classes/class_packedbytearray.html) **get\_as\_byte ( )**

直接返回此请求的结果的二进制数据数组

***

* [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) **get\_as\_image ( )**

尝试自动判断此请求的结果的图像格式，解析并返回其图像实例，支持的图像格式为: `png,jpg,bmp,tga,webp`

若图像的格式已知，建议使用`get_as_[格式]_image()`系列函数以获得更好的性能 (如\[get\_as\_png\_image]函数)

***

* [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) **get\_as\_png\_image ( )**

尝试将此请求的结果作为png格式解析并返回其图像实例

***

* [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) **get\_as\_jpg\_image ( )**

尝试将此请求的结果作为jpg格式解析并返回其图像实例

***

* [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) **get\_as\_bmp\_image ( )**

尝试将此请求的结果作为bmp格式解析并返回其图像实例

***

* [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) **get\_as\_tga\_image ( )**

尝试将此请求的结果作为tga格式解析并返回其图像实例

***

* [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) **get\_as\_webp\_image ( )**

尝试将此请求的结果作为webp格式解析并返回其图像实例

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **save\_to\_file (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) path **)**

尝试将此请求的结果的二进制数据保存到指定路径的文件

***


# 类: ImageMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的图像消息类，其实例记录了与一个图像消息相关的各类数据

## 方法

* static [ImageMessage](/api/imagemessage) **init (** [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) image **)**

基于图像实例缓存并手动构造一个ImageMessage类的实例

***

* static [ImageMessage](/api/imagemessage) **init\_gif (** [GifImage](/api/gifimage) gif\_image **)**

基于Gif动图实例缓存并手动构造一个ImageMessage类的实例

***

* static [ImageMessage](/api/imagemessage) **init\_id (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_id **)**

基于指定的图像ID来手动构造一个ImageMessage类的实例

***

* static [ImageMessage](/api/imagemessage) **init\_url (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_url **)**

基于指定的URL地址来手动构造一个ImageMessage类的实例

***

* static [ImageMessage](/api/imagemessage) **init\_path (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_path **)**

基于指定的本地文件路径来手动构造一个ImageMessage类的实例

***

* static [ImageMessage](/api/imagemessage) **init\_base64 (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_base64 **)**

基于指定的BASE64编码来手动构造一个ImageMessage类的实例

***

* static [ImageMessage](/api/imagemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_id ( )**

获取此实例对应的图像的ID

***

* void **set\_image\_id (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_id **)**

设置此实例对应的图像的ID

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_url ( )**

获取此实例对应的图像的URL链接

***

* void **set\_image\_url (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_url **)**

设置此实例对应的图像的URL链接

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_path ( )**

获取此实例对应的图像的本地路径

***

* void **set\_image\_path (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_path **)**

设置此实例对应的图像的本地路径

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_base64 ( )**

获取此实例对应的图像的Base64编码

***

* void **set\_image\_base64 (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) image\_base64 **)**

设置此实例对应的图像的Base64编码

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_image\_height ( )**

获取此实例对应的图像的高度

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_image\_width ( )**

获取此实例对应的图像的宽度

***

* [float](https://docs.godotengine.org/en/latest/classes/class_float.html) **get\_image\_size ( )**

获取此实例对应的图像的文件大小

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_image\_type ( )**

获取此实例对应的图像的类型文本

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_emoji ( )**

判断此实例对应的图像是否为表情

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: JsonMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的Json消息类，其实例记录了与一个Json消息相关的各类数据

## 方法

* static [JsonMessage](/api/jsonmessage) **init (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

基于指定的文本来手动构造一个JsonMessage类的实例

***

* static [JsonMessage](/api/jsonmessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_json\_text ( )**

获取此实例中对应的JSON文本

***

* void **set\_json\_text (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

设置此实例中对应的JSON文本

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: MarketFaceMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的商城表情消息类，其实例记录了与一个商城表情消息相关的各类数据

## 方法

* static [MarketFaceMessage](/api/marketfacemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_face\_id ( )**

获取实例对应的商城表情的ID

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_face\_name ( )**

获取实例对应的商城表情的名称

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: Member

[(返回目录)](/api)

**继承自:** [MemberAPI](/api/memberapi)

RainyBot的个体成员类，通常代表一个对应实例，实现了用于与好友或单向好友(陌生人)进行交互的各类功能

## 描述

这是RainyBot的个体成员类，通常代表一个对应实例，实现了用于与好友或单向好友(陌生人)进行交互的各类功能\
绝大部分与好友/单向好友(陌生人)直接相关的操作都可以通过此类来进行

## 枚举

enum **Role**

这是代表了个体成员类型的枚举，在进行类型判断相关操作时可在转为整数后用于对比

如"get\_role() == Member.Role.FRIEND"可判断个体成员是否为好友

* **FRIEND** = 0\
  代表个体成员的类型为好友
* **STRANGER** = 1\
  代表个体成员的类型为单向好友(陌生人)

***

## 方法

* static [Member](/api/member) **init (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) member\_id, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) role=0 **)**

手动构造一个Member类的实例，用于主动进行与个体成员的交互时使用

需要传入的参数分别为个体成员的ID，个体成员的类型(可选，默认为Member.Role.FRIEND)

***

* static [Member](/api/member) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) role=0 **)**

通过机器人协议后端的元数据字典构造一个Member类的实例，仅当你知道自己在做什么时才使用

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_role ( )**

获取个体成员实例的类型，将返回一个对应Role枚举的整数值

若为手动构造的实例，将始终返回0

***

* void **set\_role (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) role **)**

设置个体成员实例的类型

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_role (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) role **)**

判断个体成员实例是否为某类型

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_id ( )**

获取个体成员实例的ID

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_name ( )**

获取个体成员实例的名称(昵称)，若为手动构造的实例，将始终返回空字符串

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_remark ( )**

获取Bot对个体成员实例的备注，若为手动构造的实例，将始终返回空字符串

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_avatar\_url ( )**

获取个体成员实例对应账号的头像的图像链接，通常为jpg格式

***

* [MemberProfile](/api/memberprofile) **get\_profile (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

获取个体成员实例相关资料的MemberProfile实例，需要配合await关键字使用

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **send\_message (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) msg, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) quote\_msgid=-1, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

向个体成员实例发送消息，同时可指定一个需要引用回复的消息ID

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

传入的第一个参数可以是以下类型:

* 字符串(将自动构造为文本消息实例，解析其中的BotCode，并将其作为消息链中的唯一消息实例发送)
* 单个消息实例(将其作为消息链中的唯一消息实例发送)
* 消息链实例(将其内容复制并发送)
* 包含以上三种类型实例的数组(将按照上方规则将数组中的实例依次合并添加至一个消息链并发送)

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **send\_nudge (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

向个体成员实例发送一个戳一戳消息

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **delete\_friend (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

解除与个体成员实例的好友/单向好友关系

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [MessageChain](/api/messagechain) **get\_roaming\_messages (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) start\_time=0, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) end\_time=9223372036854775807, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在个体成员实例中获取指定时间段的漫游消息，将返回包含符合条件的漫游消息的\[MessageChain]实例

所需的参数由上到下分别为:

* 漫游消息的开始时间戳(可选，若为默认值则将尝试获取自最早的漫游消息)
* 漫游消息的截止时间戳(可选，若为默认值则将尝试获取至最近的漫游消息)

此函数必须配合await关键字进行使用，否则将会发生错误，且无法获取相关的信息

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **recall\_message (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) msg\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在个体成员实例中将指定ID的消息撤回，仅可撤回机器人发送的消息

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [CacheMessage](/api/cachemessage) **get\_cache\_message (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) msg\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在个体成员实例中获取指定ID的本地缓存消息，将返回一个\[CacheMessage]类的实例

此函数必须配合await关键字进行使用，否则将会发生错误，且无法获取相关的信息

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***


# 类: MemberAPI

[(返回目录)](/api)

**继承自:** [RoleAPI](/api/roleapi)

**子类:** [Member](/api/member), [MemberList](/api/memberlist), [MemberProfile](/api/memberprofile)

RainyBot的个体成员API类，所有的个体成员相关API将直接或间接继承此类

## 描述

这是RainyBot的个体成员API类，所有的个体成员相关API将直接或间接继承此类\
继承此类的API包括但不限于个体成员/个体成员资料/个体成员列表等类


# 类: MemberHonorChangeEvent

[(返回目录)](/api)

**继承自:** [GroupMemberEvent](/api/groupmemberevent)

RainyBot的群成员荣誉变更类，其实例记录了与一次群成员荣誉变更事件相关的数据

## 枚举

enum **ActionType**

群荣誉更改的操作类型

* **ACHIEVE** = 0\
  群成员获得了新的群荣誉
* **LOST** = 1\
  群成员失去了一个群荣誉

***

## 方法

* static [MemberHonorChangeEvent](/api/memberhonorchangeevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [GroupMember](/api/groupmember) **get\_member ( )**

获取此事件对应的群成员实例

***

* [Group](/api/group) **get\_group ( )**

获取此事件所发生的群组实例

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_honor\_name ( )**

获取被变更的群荣誉的名称

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_action\_type ( )**

获取本次事件的变更类型，详见上方的ActionType枚举

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_action\_type (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) action **)**

用于判断本次事件是否为指定的变更类型

***


# 类: MemberJoinEvent

[(返回目录)](/api)

**继承自:** [GroupMemberEvent](/api/groupmemberevent)

RainyBot的新成员入群类，其实例记录了与一次新成员入群事件相关的数据

## 方法

* static [MemberJoinEvent](/api/memberjoinevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [GroupMember](/api/groupmember) **get\_member ( )**

获取此事件对应的群成员实例

***

* [GroupMember](/api/groupmember) **get\_invitor ( )**

获取邀请新成员入群的群成员的实例

***

* [Group](/api/group) **get\_group ( )**

获取此事件所发生的群组实例

***


# 类: MemberJoinRequestEvent

[(返回目录)](/api)

**继承自:** [RequestEvent](/api/requestevent)

RainyBot的新成员入群请求事件类，其实例记录了与一次新成员入群请求事件相关的数据

## 枚举

enum **RespondType**

可用于回应请求的回应类型

* **ACCEPT** = 0\
  允许新成员入群
* **REFUSE** = 1\
  拒绝新成员入群
* **IGNORE** = 2\
  忽略新成员的入群请求
* **REFUSE\_BLACKLIST** = 3\
  拒绝新成员入群并加入黑名单
* **IGNORE\_BLACKLIST** = 4\
  忽略新成员的入群请求并加入黑名单

***

## 方法

* static [MemberJoinRequestEvent](/api/memberjoinrequestevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_group\_name ( )**

获取事件对应的新成员希望加入的群的名称

***


# 类: MemberLeaveEvent

[(返回目录)](/api)

**继承自:** [GroupMemberEvent](/api/groupmemberevent)

RainyBot的群成员退群类，其实例记录了与一次群成员退群事件相关的数据

## 枚举

enum **ReasonType**

群成员退群的原因

* **QUIT** = 0\
  群成员自行主动退群
* **KICK** = 1\
  群成员被管理员/群主踢出群聊

***

## 方法

* static [MemberLeaveEvent](/api/memberleaveevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) reason\_type **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [GroupMember](/api/groupmember) **get\_member ( )**

获取此事件对应的群成员实例

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主，也可能是群成员自身

***

* [Group](/api/group) **get\_group ( )**

获取此事件所发生的群组实例

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_reason\_type ( )**

获取此事件发生的原因类型，详见上方的ReasonType枚举

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_reason\_type (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) reason **)**

判断此事件的发生是否为指定的原因类型

***


# 类: MemberList

[(返回目录)](/api)

**继承自:** [MemberAPI](/api/memberapi)

RainyBot的个体成员列表类，通常代表一个对应实例，储存了机器人所有个体成员(通常为好友)的列表

## 描述

这是RainyBot的个体成员列表类，通常代表一个对应实例，储存了机器人所有个体成员(通常为好友)的列表\
你可以像数组/字典一样直接使用for x in x的语法来循环列表中的所有个体成员(将返回Member类实例)

## 方法

* static [MemberList](/api/memberlist) **init\_meta (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

通过机器人协议后端的元数据数组构造一个MemberList类的实例，仅当你知道自己在做什么时才使用

***

* [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) **get\_metadata ( )**

获取实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

使用指定数组覆盖实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* [Member](/api/member) **get\_from\_index (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) index **)**

根据指定的序号来从个体成员列表实例中获取对应的Member实例

若序号不存在则返回null

***

* [Member](/api/member) **get\_from\_id (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) member\_id **)**

根据指定的个体成员ID来从个体成员列表实例中获取对应的Member实例

若个体成员ID不存在则返回null

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_size ( )**

获取个体成员列表实例中的个体成员实例的总数

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **has\_member (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) member\_id **)**

判断个体成员列表实例中是否存在指定ID的个体成员实例

***


# 类: MemberMuteEvent

[(返回目录)](/api)

**继承自:** [GroupMemberEvent](/api/groupmemberevent)

RainyBot的群成员被禁言类，其实例记录了与一次群成员被禁言事件相关的数据

## 方法

* static [MemberMuteEvent](/api/membermuteevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [GroupMember](/api/groupmember) **get\_member ( )**

获取此事件对应的群成员实例

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主

***

* [Group](/api/group) **get\_group ( )**

获取此事件所发生的群组实例

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_duration ( )**

获取被禁言的时长，以秒为单位

***


# 类: MemberNameChangeEvent

[(返回目录)](/api)

**继承自:** [GroupMemberEvent](/api/groupmemberevent)

RainyBot的群成员昵称变更类，其实例记录了与一次群成员昵称变更事件相关的数据

## 方法

* static [MemberNameChangeEvent](/api/membernamechangeevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [GroupMember](/api/groupmember) **get\_member ( )**

获取此事件对应的群成员实例

***

* [Group](/api/group) **get\_group ( )**

获取此事件所发生的群组实例

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_origin\_name ( )**

获取变更前的群昵称

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_current\_name ( )**

获取变更后的当前群昵称

***


# 类: MemberPermChangeEvent

[(返回目录)](/api)

**继承自:** [GroupMemberEvent](/api/groupmemberevent)

RainyBot的群成员权限变更类，其实例记录了与一次群成员权限变更事件相关的数据

## 方法

* static [MemberPermChangeEvent](/api/memberpermchangeevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [GroupMember](/api/groupmember) **get\_member ( )**

获取此事件对应的群成员实例

***

* [Group](/api/group) **get\_group ( )**

获取此事件所发生的群组实例

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_origin\_perm ( )**

获取变更前的群权限，可用权限请参考GroupMember中的Permission枚举

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_current\_perm ( )**

获取变更后的当前群权限，可用权限请参考GroupMember中的Permission枚举

***


# 类: MemberProfile

[(返回目录)](/api)

**继承自:** [MemberAPI](/api/memberapi)

RainyBot的个体成员资料类，通常代表一个对应实例，储存了某个个体成员的相关资料

## 描述

这是RainyBot的个体成员资料类，通常代表一个对应实例，储存了某个个体成员的相关资料\
当查询某群聊成员的相关资料时，不论其是否为机器人的个体成员，也将通过此类实例储存并返回其资料\
此类实例储存的资料包括但不限于昵称，邮箱，年龄，等级，签名，性别等

## 枚举

enum **Sex**

这是代表了资料中性别的枚举，在进行性别判断相关操作时可在转为整数后用于对比

如"get\_sex() == MemberProfile.Sex.MALE"可判断资料性别是否为男性

* **UNKNOWN** = 0\
  未知
* **MALE** = 1\
  男性
* **FEMALE** = 2\
  女性

***

## 方法

* static [MemberProfile](/api/memberprofile) **init\_user (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) user\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

获取指定ID用户的资料数据并将其构造为一个MemberProfile类的实例，需要配合await关键字使用

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* static [MemberProfile](/api/memberprofile) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个MemberProfile类的实例，仅当你知道自己在做什么时才使用

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_nickname ( )**

获取实例中储存的昵称信息

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_email ( )**

获取实例中储存的邮箱信息

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_age ( )**

获取实例中储存的年龄信息

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_level ( )**

获取实例中储存的等级信息

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_sign ( )**

获取实例中储存的个性签名信息

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_sex ( )**

获取实例中储存的性别信息，将返回一个对应Sex枚举的整数值

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_sex (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) sex **)**

判断资料中的性别是不是指定类型的性别

***


# 类: MemberTitleChangeEvent

[(返回目录)](/api)

**继承自:** [GroupMemberEvent](/api/groupmemberevent)

RainyBot的群成员头衔变更类，其实例记录了与一次群成员头衔变更事件相关的数据

## 方法

* static [MemberTitleChangeEvent](/api/membertitlechangeevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [GroupMember](/api/groupmember) **get\_member ( )**

获取此事件对应的群成员实例

***

* [Group](/api/group) **get\_group ( )**

获取此事件所发生的群组实例

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_origin\_title ( )**

获取变更前的群头衔

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_current\_title ( )**

获取变更后的当前群头衔

***


# 类: MemberUnmuteEvent

[(返回目录)](/api)

**继承自:** [GroupMemberEvent](/api/groupmemberevent)

RainyBot的群成员被解除禁言类，其实例记录了与一次群成员被解除禁言事件相关的数据

## 方法

* static [MemberUnmuteEvent](/api/memberunmuteevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [GroupMember](/api/groupmember) **get\_member ( )**

获取此事件对应的群成员实例

***

* [GroupMember](/api/groupmember) **get\_operator ( )**

获取导致此事件的操作者的成员实例，可能是事件对应群组的管理员或群主

***

* [Group](/api/group) **get\_group ( )**

获取此事件所发生的群组实例

***


# 类: Message

[(返回目录)](/api)

**继承自:** [MessageAPI](/api/messageapi)

**子类:** [AppMessage](/api/appmessage), [AtAllMessage](/api/atallmessage), [AtMessage](/api/atmessage), [BotCodeMessage](/api/botcodemessage), [DiceMessage](/api/dicemessage), [FaceMessage](/api/facemessage), [FileMessage](/api/filemessage), [FlashImageMessage](/api/flashimagemessage), [ForwardMessage](/api/forwardmessage), [ImageMessage](/api/imagemessage), [JsonMessage](/api/jsonmessage), [MarketFaceMessage](/api/marketfacemessage), [MusicShareMessage](/api/musicsharemessage), [PokeMessage](/api/pokemessage), [QuoteMessage](/api/quotemessage), [SourceMessage](/api/sourcemessage), [TextMessage](/api/textmessage), [VoiceMessage](/api/voicemessage), [XmlMessage](/api/xmlmessage)

RainyBot的消息类，不具备任何功能，仅作为所有消息类型的直接或间接父类

## 描述

这是RainyBot的消息类，不具备任何功能，仅作为所有消息类型的直接或间接父类\
多数消息相关操作都密切依赖于此类及其子类(构造/发送/获取消息或消息链等)

## 方法

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此消息类实例获取为字符串，具体行为请参见继承此类的每个子类

***


# 类: MessageAPI

[(返回目录)](/api)

**继承自:** [RainyBotAPI](/api/rainybotapi)

**子类:** [CacheMessage](/api/cachemessage), [Message](/api/message), [MessageChain](/api/messagechain), [ForwardMessageNode](/api/forwardmessagenode), [ForwardMessageNodeList](/api/forwardmessagenodelist)

RainyBot的消息API类，所有的消息相关API将直接或间接继承此类

## 描述

这是RainyBot的消息API类，所有的消息相关API将直接或间接继承此类\
继承此类的API包括但不限于缓存消息/消息(及其子类)/消息链等类


# 类: MessageChain

[(返回目录)](/api)

**继承自:** [MessageAPI](/api/messageapi)

RainyBot的消息链类，通常代表一个对应实例，为多个不同类型的消息类实例依序拼接而成的单条消息

## 描述

这是RainyBot的消息链类，通常代表一个对应实例，为多个不同类型的消息类实例依序拼接而成的单条消息\
例如当需要在一条消息中同时AT多个对象并附上一段文字，就需要构造并发送一个由多个AT类和一个文本类消息实例所组成的消息链\
你可以像数组/字典一样直接使用for x in x的语法来循环列表中的所有消息实例(将返回Message子类的实例)

## 方法

* static [MessageChain](/api/messagechain) **init (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) msg **)**

手动构造一个MessageChain类的实例，以便将多种消息合并为单条消息发送

传入的参数可以是以下类型:

* 字符串(将自动构造为文本消息实例，解析其中的BotCode，并将其作为消息链中的第一个消息实例)
* 单个消息实例(将其作为消息链中的第一个消息实例)
* 消息链实例(将其内容复制并添加到此消息链)
* 包含以上三种类型实例的数组(将按照上方规则将数组中的实例依次添加至此消息链)
* 已知的消息ID(以便对此ID关联的消息进行如撤回一类的操作)

***

* static [MessageChain](/api/messagechain) **init\_meta (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

通过机器人协议后端的元数据数组构造一个MessageChain类的实例，仅当你知道自己在做什么时才使用

***

* [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) **get\_metadata ( )**

获取实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) arr **)**

使用指定数组覆盖实例中的元数据数组，仅当你知道自己在做什么时才使用

***

* [MessageChain](/api/messagechain) **append (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) msg **)**

将参数中的内容添加到此消息链实例中，并返回此消息链实例自身，以便于进行连续操作

可以进行如"MessageChain.init(TextMessage.init("你好")).append(AtMessage.init(12345)).append("啦啦啦")"一类的操作

传入的参数可以是以下类型:

* 字符串(将自动构造为文本消息实例，解析其中的BotCode，并将其作为消息链中的第一个消息实例)
* 单个消息实例(将其作为消息链中的第一个消息实例)
* 消息链实例(将其内容复制并添加到此消息链)
* 包含以上三种类型实例的数组(将按照上方规则将数组中的实例依次添加至此消息链)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_size ( )**

获取消息链实例中的消息实例的总数

***

* [Message](/api/message) **get\_message (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) index **)**

根据指定的序号来从消息链实例中获取对应的Message子类实例

若序号不存在则返回null

***

* [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) **get\_message\_array (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) types=null, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) exclude=false, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) max\_size=-1 **)**

根据指定的条件，来从消息链实例中获取由符合条件的消息类实例组成的数组

可以传入的参数从左到右分别为:

所需的单个Message子类或包含多种Message子类的数组(例如需要从消息链中获取所有的At类消息与Text类消息，则为\[AtMessage,TextMessage]，为空将获取所有消息)

是否为排除模式(若为true，则将获取除上个参数的列表以外的所有消息类实例)

获取的消息数量的上限(若不为-1，则获取到的消息实例总数到达上限后将直接返回对应数组)

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_message\_text (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) types=null, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) exclude=false **)**

根据指定的条件，来从消息链实例中获取由符合条件的消息类实例转换并拼接而成的单个字符串

转换为字符串的具体行为请参见不同Message子类中的get\_as\_text()方法

可以传入的参数从左到右分别为:

所需的单个Message子类或包含多种Message子类的数组(例如需要从消息链中获取所有的At类消息与Text类消息，则为\[AtMessage,TextMessage]，为空将获取所有消息)

是否为排除模式(若为true，则将获取除上个参数的列表以外的所有消息类实例)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_id ( )**

获取消息链实例的消息ID，若为手动且不基于ID构造的消息链实例，则始终返回0

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_timestamp ( )**

获取消息链实例的发送时间戳，若为手动构造的消息链实例，则始终返回0

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **has\_message\_type (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) type **)**

判断消息链实例中是否存在指定类型的消息类实例

传入的参数可以是单个消息类型，也可以是包含了多种消息类型的数组，如\[AtMessage,TextMessage]

若传入参数为数组，则仅当消息链中拥有数组中所有类型时才返回true

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_at\_bot ( )**

用于快捷判断消息链实例中是否包含目标为机器人的AT类消息实例

***


# 类: MessageEvent

[(返回目录)](/api)

**继承自:** [Event](/api/event)

**子类:** [FriendMessageEvent](/api/friendmessageevent), [GroupMessageEvent](/api/groupmessageevent), [OtherClientMessageEvent](/api/otherclientmessageevent), [StrangerMessageEvent](/api/strangermessageevent), [TempMessageEvent](/api/tempmessageevent)

RainyBot的消息事件类，与消息直接相关的各类事件通常直接或间接继承此类

## 方法

* [MessageChain](/api/messagechain) **get\_message\_chain ( )**

获取消息事件所对应的消息内容的消息链实例

***

* [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) **get\_message\_array (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) types=null, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) exclude=false, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) max\_size=-1 **)**

根据指定的条件，来从消息事件包含的消息链实例中获取由符合条件的消息类实例组成的数组

可以传入的参数从左到右分别为:

所需的单个Message子类，或包含多种Message子类的数组(例如需要从消息链中获取所有的At类消息与Text类消息，则为\[AtMessage,TextMessage]，为空将获取所有消息)

是否为排除模式(若为true，则将获取除上个参数的列表以外的所有消息类实例)

获取的消息数量的上限(若不为-1，则获取到的消息实例总数到达上限后将直接返回对应数组

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_message\_text (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) types=null, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) exclude=false **)**

根据指定的条件，来从消息事件包含的消息链实例中获取由符合条件的消息类实例转换并拼接而成的单个字符串

转换为字符串的具体行为请参见不同Message子类中的get\_as\_text()方法

可以传入的参数从左到右分别为:

所需的单个Message子类，或包含多种Message子类的数组(例如需要从消息链中获取所有的At类消息与Text类消息，则为\[AtMessage,TextMessage]，为空将获取所有消息)

是否为排除模式(若为true，则将获取除上个参数的列表以外的所有消息类实例)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_id ( )**

获取消息事件所对应的消息的ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_timestamp ( )**

获取消息事件所对应的消息的发送时间戳

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_sender\_id ( )**

获取消息事件所对应的消息的发送者ID

***

* [BotRequestResult](/api/botrequestresult) **reply (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) msg, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) quote=false, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) at=false, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于回应某个消息事件，同时可指定是否需要引用回复原消息，以及是否需要AT原发送者(仅在群消息事件有效)

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

传入的第一个参数可以是以下类型:

* 字符串(将自动构造为文本消息实例，解析其中的BotCode，并将其作为消息链中的唯一消息实例发送)
* 单个消息实例(将其作为消息链中的唯一消息实例发送)
* 消息链实例(将其内容复制并发送)
* 包含以上三种类型实例的数组(将按照上方规则将数组中的实例依次合并添加至一个消息链并发送)

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***


# 类: MusicShareMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的音乐分享消息类，其实例记录了与一个音乐分享消息相关的各类数据

## 方法

* static [MusicShareMessage](/api/musicsharemessage) **init (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) kind, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) title, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) summary, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) jump\_url, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) picture\_url, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) music\_url, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) brief **)**

基于指定的参数来手动构造一个MusicShareMessage类的实例

需要的参数从左到右分别为: 类型，标题，概括，跳转链接，封面图像链接，音乐文件链接，简介

***

* static [MusicShareMessage](/api/musicsharemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_share\_kind ( )**

获取此实例对应的分享类型

***

* void **set\_share\_kind (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

设置此实例对应的分享类型

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_share\_title ( )**

获取此实例对应的分享标题

***

* void **set\_share\_title (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

设置此实例对应的分享标题

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_share\_summary ( )**

获取此实例对应的分享概括

***

* void **set\_share\_summary (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

设置此实例对应的分享概括

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_share\_jump\_url ( )**

获取此实例对应的分享跳转链接

***

* void **set\_share\_jump\_url (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

设置此实例对应的分享跳转链接

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_share\_picture\_url ( )**

获取此实例对应的分享封面图像链接

***

* void **set\_share\_picture\_url (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

设置此实例对应的分享封面图像链接

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_share\_music\_url ( )**

获取此实例对应的分享音乐文件链接

***

* void **set\_share\_music\_url (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

设置此实例对应的分享音乐文件链接

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_share\_brief ( )**

获取此实例对应的分享简介

***

* void **set\_share\_brief (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) text **)**

设置此实例对应的分享简介

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: NewFriendRequestEvent

[(返回目录)](/api)

**继承自:** [RequestEvent](/api/requestevent)

RainyBot的添加好友请求事件类，其实例记录了与一次添加好友请求事件相关的数据

## 枚举

enum **RespondType**

可用于回应请求的回应类型

* **ACCEPT** = 0\
  接受好友添加请求
* **REFUSE** = 1\
  拒绝好友添加请求
* **REFUSE\_BLACKLIST** = 2\
  拒绝好友添加请求并加入黑名单

***

## 方法

* static [NewFriendRequestEvent](/api/newfriendrequestevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***


# 类: NudgeEvent

[(返回目录)](/api)

**继承自:** [ActionEvent](/api/actionevent)

RainyBot的戳一戳事件类，记录了聊天中的一个戳一戳事件的相关数据

## 枚举

enum **SubjectType**

戳一戳事件发生的上下文位置类型，可以是好友聊天或群聊

* **FRIEND** = 0\
  事件发生在好友聊天中
* **GROUP** = 1\
  事件发生在群组聊天中

***

## 方法

* static [NudgeEvent](/api/nudgeevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_sender\_id ( )**

获取戳一戳事件的发送者ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_subject\_id ( )**

获取戳一戳事件发生的上下文ID，例如在群聊中时应为群号

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_target\_id ( )**

获取戳一戳事件的接收者(目标)的ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_subject\_type ( )**

获取戳一戳事件发生的上下文位置类型，可用类型请参见上方的SubjectType枚举

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_subject\_type (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) type **)**

用于判断戳一戳事件是否发生在指定的上下文位置类型

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_action\_text ( )**

获取戳一戳事件的动作文本

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_suffix\_text ( )**

获取戳一戳事件的后缀文本

***


# 类: OtherClient

[(返回目录)](/api)

**继承自:** [RoleAPI](/api/roleapi)

RainyBot的其它客户端类，通常代表一个对应实例，实现了用于与其他客户端进行交互的各类功能

## 描述

这是RainyBot的其它客户端类，通常代表一个对应实例，实现了用于与其他客户端进行交互的各类功能\
其他客户端的概念，指如当机器人后端使用手机协议登陆时，平板/PC/智能手表端此时即为其他客户端

## 方法

* static [OtherClient](/api/otherclient) **init ( )**

手动构造一个OtherClient类的实例，用于主动进行与其他客户端的交互时使用

***

* static [OtherClient](/api/otherclient) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个OtherClient类的实例，仅当你知道自己在做什么时才使用

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_metadata ( )**

获取实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* void **set\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

使用指定字典覆盖实例中的元数据字典，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_id ( )**

获取实例中其他客户端的客户端id

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_platform ( )**

获取实例中其他客户端的平台名(如"Windows")

***

* [BotRequestResult](/api/botrequestresult) **send\_message (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) msg, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) quote\_msgid=-1, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

向其它客户端发送消息,第二个参数为需要引用回复的消息id(可选)

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

传入的第一个参数可以是以下类型:

* 字符串(将自动构造为文本消息实例，解析其中的BotCode，并将其作为消息链中的唯一消息实例发送)
* 单个消息实例(将其作为消息链中的唯一消息实例发送)
* 消息链实例(将其内容复制并发送)
* 包含以上三种类型实例的数组(将按照上方规则将数组中的实例依次合并添加至一个消息链并发送)

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **send\_nudge (** [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

向其它客户端发送一个戳一戳消息，

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [BotRequestResult](/api/botrequestresult) **recall\_message (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) msg\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在其它客户端实例中将指定ID的消息撤回，仅可撤回机器人发送的消息

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***

* [CacheMessage](/api/cachemessage) **get\_cache\_message (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) msg\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于在其它客户端实例中获取指定ID的本地缓存消息，将返回一个\[CacheMessage]类的实例

此函数必须配合await关键字进行使用，否则将会发生错误，且无法获取相关的信息

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***


# 类: OtherClientEvent

[(返回目录)](/api)

**继承自:** [Event](/api/event)

**子类:** [OtherClientOfflineEvent](/api/otherclientofflineevent), [OtherClientOnlineEvent](/api/otherclientonlineevent)

RainyBot的其它客户端事件类，与其它客户端直接相关的各类事件通常直接或间接继承此类

## 方法

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_client\_id ( )**

获取事件对应的其它客户端的ID

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_client\_platform ( )**

获取事件对应的其它客户端的平台名称

***


# 类: OtherClientMessageEvent

[(返回目录)](/api)

**继承自:** [MessageEvent](/api/messageevent)

RainyBot的其它客户端消息事件类，其实例记录了与一次其它客户端消息事件相关的数据

## 方法

* static [OtherClientMessageEvent](/api/otherclientmessageevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [OtherClient](/api/otherclient) **get\_sender ( )**

获取消息事件对应的其它客户端的实例

***


# 类: OtherClientOfflineEvent

[(返回目录)](/api)

**继承自:** [OtherClientEvent](/api/otherclientevent)

RainyBot的其它客户端离线事件类，其实例记录了与一次其它客户端离线事件相关的数据

## 方法

* static [OtherClientOfflineEvent](/api/otherclientofflineevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***


# 类: OtherClientOnlineEvent

[(返回目录)](/api)

**继承自:** [OtherClientEvent](/api/otherclientevent)

RainyBot的其它客户端上线事件类，其实例记录了与一次其它客户端上线事件相关的数据

## 方法

* static [OtherClientOnlineEvent](/api/otherclientonlineevent) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_kind\_id ( )**

获取事件对应的其它客户端的详细设备类型ID

***


# 类: Plugin

[(返回目录)](/api)

**继承自:** [Node](https://docs.godotengine.org/en/latest/classes/class_node.html)

RainyBot的插件类，代表一个实例，用于在插件中实现各类相关功能

## 描述

这是RainyBot的插件类，代表一个插件实例，用于在插件中实现各类相关功能。所有插件应当继承此类，以便在RainyBot中正确加载与运行。

## 枚举

enum **MatchMode**

关键词的匹配模式枚举，决定了触发某关键词判定的条件

* **BEGIN** = 0\
  仅当关键词位于消息开头时触发判定
* **BETWEEN** = 1\
  仅当关键词位于消息中间时触发判定
* **END** = 2\
  仅当关键词位于消息末尾时触发判定
* **INCLUDE** = 3\
  消息中只要包含关键词就触发判定
* **EXCLUDE** = 4\
  消息中只要不包含关键词就触发判定
* **EQUAL** = 5\
  消息与关键词完全匹配时触发判定
* **REGEX** = 6\
  消息满足正则表达式时触发判定（此时关键词内容应为一个正则表达式）

***

enum **BlockMode**

事件在处理时被标记为停止传递后的阻断模式枚举，决定了该事件将如何被阻断传递

* **DISABLE** = 0\
  即使标记为停止传递也不会进行阻断
* **EVENT** = 1\
  在当前插件中的所有该事件函数处理完毕后，将阻断传递，即不会传递给后续插件
* **FUNCTION** = 2\
  当前函数处理完毕后，阻断事件在当前插件内的传递，但后续插件仍会接收到事件
* **ALL** = 3\
  当前函数处理完毕后，将完全阻断事件传递，事件后续函数及其他插件均不会收到事件

***

## 方法

* void **\_on\_init ( )**

在插件中覆盖此虚函数，以便定义将在此插件的文件每次被读取时执行的操作

必须在此处使用\[set\_plugin\_info]函数来设置插件信息，插件才能被正常识别与读取

例如：`set_plugin_info("example","示例插件","author","1.0","这是插件的介绍")`

可以在此处初始化和使用一些基本变量，但不建议执行其它代码，可能会导致出现未知问题

***

* void **\_on\_connect ( )**

在插件中覆盖此虚函数，以便定义RainyBot在与协议后端建立连接后插件将执行的操作

可以在此处进行一些与连接状态相关的操作，例如恢复连接后发送通知等

***

* void **\_on\_load ( )**

在插件中覆盖此虚函数，以便定义插件在被加载完毕后执行的操作

可以在此处进行各类事件/关键词/命令的注册，以及配置/数据文件的初始化等

***

* void **\_on\_ready ( )**

在插件中覆盖此虚函数，以便定义插件在所有其他插件加载完毕后执行的操作

可以在此处进行一些与其他插件交互相关的操作，例如获取某插件的实例等

注意：如果此插件硬性依赖某插件，推荐在插件信息中注册所依赖的插件，以确保其在此插件之前被正确加载

***

* void **\_on\_process ( )**

在插件中覆盖此虚函数，以便定义插件运行中的每一秒将执行的操作

可在此处进行一些计时，或时间判定相关的操作，例如整点报时等

***

* void **\_on\_error ( )**

在插件中覆盖此虚函数，以便定义在RainyBot检测到运行时错误后将执行的操作

可在此处进行一些与错误处理相关的操作，例如向指定QQ发送通知等

您可以使用\[get\_last\_errors]函数来获取错误的详细内容

***

* void **\_on\_disconnect ( )**

在插件中覆盖此虚函数，以便定义RainyBot在与协议后端断开建立连接后插件将执行的操作

可以在此处进行一些与连接状态相关的操作，例如断开连接后暂停某些任务的运行等

***

* void **\_on\_unload ( )**

在插件中覆盖此虚函数，以便定义插件在即将被卸载时执行的操作

可在此处执行一些自定义保存或清理相关的操作，例如储存自定义的文件或清除缓存等

无需在此处取消注册事件/关键词/命令，或者对内置的配置/数据功能进行保存，插件卸载时将会自动进行处理

***

* void **set\_plugin\_info (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) p\_id, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) p\_name, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) p\_author, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) p\_version, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) p\_description, [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) p\_dependency=null **)**

用于设定插件的相关信息，需要在\[\_on\_init]虚函数中执行以便RainyBot正确加载您的插件

需要的参数从左到右分别为插件ID(将强制转为小写，不可与其它已加载插件重复),插件名,插件作者,插件版本,插件描述,插件依赖(可选)

最后一项可选参数为此插件的依赖插件列表(数组)，需要以所依赖的插件的ID作为列表中的元素，如:`["example","example_1"]`

设置了插件依赖后，可以保证所依赖的插件一定在此插件之前被加载

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_plugin\_info ( )**

用于获取插件的相关信息，将返回一个包含插件信息的字典

使用`id, name, author, version, description, dependency`作为key即可从字典中获取对应信息

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_plugin\_filename ( )**

用于获取插件对应的文件名，将返回插件文件的名称 (如`ChatBot.gd`)

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_plugin\_filepath ( )**

用于获取插件对应的文件路径，将返回插件文件的绝对路径 (如 `D://RainyBot/plugins/ChatBot.gd`)

***

* static [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_plugin\_path ( )**

用于获取RainyBot的插件文件夹的路径，将返回插件文件夹的绝对路径 (如 `D://RainyBot/plugins/`)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_plugin\_runtime ( )**

用于获取插件的已运行时间，默认情况下为插件成功加载以来经过的秒数

***

* static [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_global\_runtime ( )**

用于获取RainyBot全局的已运行时间，默认情况下为RainyBot成功启动以来经过的秒数

***

* static [Plugin](/api/plugin) **get\_plugin\_instance (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) plugin\_id **)**

用于获取其他插件的实例引用，可用于插件之间的联动与数据互通等

需要传入其他插件的ID作为参数来获取其实例，若未找到插件则返回null

***

* static [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_data\_path ( )**

用于获取RainyBot的数据文件夹的路径，将返回数据文件夹的绝对路径 (如 `D://RainyBot/data/`)

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_data\_filepath ( )**

用于获取该插件对应的数据库文件的路径，即插件对应的.rdb格式文件的绝对路径

***

* static [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_config\_path ( )**

用于获取RainyBot的配置文件夹的路径，将返回配置文件夹的绝对路径 (如 `D://RainyBot/config/`)

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_config\_filepath ( )**

用于获取该插件对应的配置文件的路径，即插件对应的.json格式文件的绝对路径

***

* static [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_cache\_path ( )**

用于获取RainyBot的缓存文件夹的路径，将返回缓存文件夹的绝对路径 (如 D://RainyBot/cache)

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_cache\_filepath ( )**

用于获取该插件对应的缓存数据库文件的路径，即插件对应的.rca格式文件的绝对路径

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_config\_loaded ( )**

用于检查插件对应的配置文件内容是否已被加载

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_data\_loaded ( )**

用于检查插件对应的数据库文件内容是否已被加载

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_cache\_loaded ( )**

用于检查插件对应的缓存数据库文件内容是否已被加载

***

* static [PackedStringArray](https://docs.godotengine.org/en/latest/classes/class_packedstringarray.html) **get\_last\_errors ( )**

用于获取最近一次检测到的所有RainyBot运行时错误，将返回一个包含了这些错误的字符串数组

如果自RainyBot启动至今还没有检测到任何运行时错误，将返回一个空数组

当前版本中仅支持自动检测脚本运行时错误，若要获取其他类型的错误，请通过主菜单来访问内部日志进行查看

***

* void **register\_event (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) event, [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) function, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) priority=0, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) block\_mode=3 **)**

用于注册一个或多个事件并将其绑定到一个或多个函数，事件发生时将触发绑定的函数并传入事件实例

需要的参数从左到右分别为:

事件的类型:

* 此处可传入单个事件类型名，或一个包含了任意数量事件类型名的数组以批量注册事件
* 传入的事件需要直接或间接继承\[Event]类，如[GroupMessageEvent](https://github.com/Xwdit/RainyBot-API/blob/main/docs/api/群消息事件/README.md)

事件绑定的函数名:

* 此处可传入单个函数名，或一个包含了任意数量函数名的数组以批量绑定函数
* 当对应事件发生时将依次传递并触发绑定的函数，绑定的函数需要定义一个参数用于接收事件实例

事件的全局优先级(可选,默认为0):

* 在多个插件同时注册了同一事件后，事件发生时将按照优先级由高到低的顺序传递事件到对应的插件
* 优先级相同时，将根据注册事件的时间顺序来依次传递事件

事件的阻断模式(可选,默认为BlockMode.ALL):

* 事件绑定的函数若返回true，将阻断事件被传递到后续函数或插件中 (异步函数无效)
* 阻断的具体行为将由阻断模式决定, 每种阻断模式的具体效果请参见上方的BlockMode枚举

***

* void **unregister\_event (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) event **)**

用于取消注册一个或多个事件，取消注册后插件将不再对此事件做出响应

此处可传入单个事件类型名，或一个包含了任意数量事件类型名的数组以批量取消注册事件

***

* void **register\_console\_command (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) command, [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) function, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) need\_arguments=false, [Array](https://docs.godotengine.org/en/latest/classes/class_array.html) usages=\[], [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) need\_connect=false **)**

用于注册一个控制台命令并将其绑定到指定函数，命令被执行时将触发此函数，并传入对应的命令名与参数数组

命令被注册后将会在帮助菜单中自动显示，无法注册已经存在的命令

绑定函数接收的参数数组中包含了以空格分隔的命令参数的列表，如命令 `plugins load xxx.gd` ，传入的数组中将包含`["load","xxx.gd"]`

注册命令需要的参数从左到右分别为:

命令的名称:

* 即为在控制台触发此命令需要输入的内容，请勿包含空格，不可与已存在的命令重复；此处可传入单个命令名，或一个包含了任意数量命令名的数组以批量注册某个命令及其别称

命令触发的函数名:

* 当命令被执行时将触发的函数，此函数需要定义两个参数，分别用于接收命令名与传入的参数数组

命令是否强制要求传入参数(可选,默认为false):

* 若为true则在执行命令时必须传入参数，否则判定为用法错误)

命令的用法介绍(可选,默认为空数组):

* 将在使用help指令或命令用法错误时显示。数组中的每项需为字符串，代表着一个子命令的用法

命令是否需要在连接到协议后端后才能使用:

* 若为true则在未连接协议后端时无法在控制台调用此命令

***

* void **unregister\_console\_command (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) command **)**

用于取消注册一个控制台命令，命令被取消注册后将无法在控制台被执行，且不会在帮助菜单中显示

需要传入对应的命令名来将其取消注册，无法取消注册不属于此插件的命令

***

* void **register\_keyword (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) keyword, [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) function, [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) var\_dic={}, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) match\_mode=0, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) block=true **)**

用于注册一个或多个关键词并将其绑定到某个函数，关键词匹配时将触发绑定的函数并传入相关数据

注册的关键词不会自动进行匹配，而是需要手动调用或者在注册事件时将需要检测关键词的消息事件手动绑定到"\[trigger\_keyword]"函数即可

注册需要的参数从左到右分别为:

关键词的内容:

* 此处可传入单个关键词字符串，或一个包含了任意数量关键词字符串的数组以批量注册关键词
* 若关键词包含`{@}`，则满足匹配条件的同时还需要At机器人才视为匹配成功
* 若匹配模式为正则表达式模式，则关键词需要为一个正则表达式

关键词绑定的函数名:

* 当对应关键词匹配成功后将调用此函数，并传入四个参数
* 传入的四个参数分别为：关键词文本，解析后的关键词文本，关键词参数(通常为原消息去掉关键词后的文本)，触发关键词的事件实例引用

动态解析字典:

* 此处可以传入一个字典的引用，字典中的键与值均需要为字符串类型
* 若关键词中包含如"{xxx}"格式的文本，并且字典中拥有"xxx"这个键，那么实际用于匹配的关键词中的"{xxx}"文本将会被替换成字典中"xxx"键对应的值
* 例如，若您希望在运行时更改某插件中机器人的唤醒词，则只需将"{name}"注册为关键词，并指定一个包含"name"键的字典作为动态解析字典
* 后续您只需更改该字典中的"name"键对应的值，即可实时变更唤醒机器人的关键词

关键词的匹配模式

* 在某个消息事件触发"\[trigger\_keyword]"函数后，将提取消息事件的文本并根据匹配模式进行匹配
* 只有满足匹配模式对应的条件的关键词才会触发绑定的函数，匹配模式的具体行为请参见上方的\[MatchMode]枚举

关键词匹配成功后阻断对应事件的传递 (可选,默认为true):

* 若此项为true,则在成功匹配关键词后，被对应事件调用的"\[trigger\_keyword]"函数将返回true以尝试阻断事件的传递
* 若此项为false,但是关键词所触发的函数返回了true,那么被对应事件调用的"\[trigger\_keyword]"函数也将返回true以尝试阻断事件的传递
* 阻断的具体行为将由相关事件注册时设置的阻断模式决定

***

* void **unregister\_keyword (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) keyword **)**

用于取消注册一个关键词，关键词被取消注册后将不会被用于匹配

需要传入对应的关键词字符串来将其取消注册，无法取消注册不属于此插件的关键词

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **trigger\_keyword (** [Event](/api/event) event **)**

根据传入的消息事件来提取文本并从中匹配关键词

通常只需在注册消息事件时将其与事件直接绑定即可

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **init\_plugin\_config (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) default\_config, [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) config\_description={} **)**

用于初始化插件的配置文件，并将其加载到内存中，以便在后续对其内容进行操作

对于数据的储存，建议使用插件数据库功能，可以提供更快的读写速度及更好的类型安全性，且可储存几乎任何类型的数据

执行此函数时，将会检测是否已存在此插件对应的配置文件，否则将会基于给定的默认配置字典来新建一个配置文件

需要的参数从左到右分别为:

默认配置的字典(即为新建配置文件时其中将包含的内容，RainyBot将以Json格式将其保存为配置文件)

\[可选,默认为空字典]每个配置项的介绍(字典的key为配置项的名称,对应的值为此配置项的相关介绍,两者均为字符串)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **save\_plugin\_config ( )**

用于将内存中的配置保存到配置文件中，需要先初始化配置文件才能使用此函数

***

* [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) **get\_plugin\_config (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key **)**

用于从已加载的配置中获取指定key对应的内容，需要先初始化配置文件才能使用此函数

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **has\_plugin\_config (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key **)**

用于从已加载的配置中检查指定key是否存在，需要先初始化配置文件才能使用此函数

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **set\_plugin\_config (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key, [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) value, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于在已加载的配置中设定指定key的对应内容，需要先初始化配置文件才能使用此函数

最后一项可选的参数用于指定是否在设定的同时将更改立刻保存到配置文件中

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **reset\_plugin\_config (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于在已加载的配置中将指定key还原回默认值，需要先初始化配置文件才能使用此函数

最后一项可选的参数用于指定是否在还原的同时将更改立刻保存到配置文件中

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **reset\_all\_plugin\_config (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于在已加载的配置中将所有内容还原回默认值，需要先初始化配置文件才能使用此函数

最后一项可选参数用于指定是否在还原的同时将更改立即保存到配置文件中

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_plugin\_config\_metadata ( )**

用于直接获取已加载的配置的字典，便于以字典的形式对其进行操作，需要先初始化配置文件才能使用此函数

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **set\_plugin\_config\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于直接替换已加载的配置的字典为指定的字典，便于以字典的形式对其进行操作，需要先初始化配置文件才能使用此函数

最后一项参数用于指定是否在设定的同时将更改立刻保存到配置文件中

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_plugin\_data\_metadata ( )**

用于直接获取已加载的数据库的字典，便于以字典的形式对其进行操作，需要先初始化数据库文件才能使用此函数

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **set\_plugin\_data\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于直接替换已加载的数据库的字典为指定的字典，便于以字典的形式对其进行操作，需要先初始化数据库文件才能使用此函数

最后一项可选参数用于指定是否在设定的同时立即将更改保存到数据库文件中

***

* [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) **get\_plugin\_cache\_metadata ( )**

用于直接获取已加载的缓存数据库的字典，便于以字典的形式对其进行操作，需要先初始化缓存数据库文件才能使用此函数

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **set\_plugin\_cache\_metadata (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于直接替换已加载的缓存数据库的字典为指定的字典，便于以字典的形式对其进行操作，需要先初始化缓存数据库文件才能使用此函数

最后一项可选参数用于指定是否在设定的同时立即将更改保存到缓存数据库文件中

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **init\_plugin\_data ( )**

用于初始化插件的数据库文件，并将其加载到内存中，以便在后续对其内容进行操作

对于配置的储存，建议使用插件配置功能，以便指定默认配置与配置说明，且能使用常规编辑器对其进行编辑与更改

执行此函数时，将会检测是否已存在此插件对应的数据库文件，否则将会新建一个空白的数据库文件(.rdb格式)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **save\_plugin\_data ( )**

用于将内存中的数据保存到数据库文件中，需要先初始化数据库文件才能使用此函数

***

* [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) **get\_plugin\_data (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key **)**

用于从已加载的数据库中获取指定key对应的内容，需要先初始化数据库文件才能使用此函数

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **has\_plugin\_data (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key **)**

用于从已加载的数据库中检查指定key是否存在，需要先初始化数据库文件才能使用此函数

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **set\_plugin\_data (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key, [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) value, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于在已加载的数据库中设定指定key的对应内容，需要先初始化数据库文件才能使用此函数

最后一项可选参数用于指定是否在设定的同时将更改立即保存到数据库文件中

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **remove\_plugin\_data (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于在已加载的数据库中删除指定key及其对应内容，需要先初始化数据库文件才能使用此函数

最后一项可选参数用于指定是否在删除的同时将更改立即保存到数据库文件中

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **clear\_plugin\_data (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于在已加载的数据库中清空所有内容，需要先初始化数据库文件才能使用此函数

最后一项可选参数用于指定是否在清空的同时将更改立即保存到数据库文件中

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **init\_plugin\_cache ( )**

用于初始化插件的缓存数据库文件，并将其加载到内存中，以便在后续对其内容进行操作

缓存数据库中的所有内容及文件本身会在插件卸载/重载时保留，但是会在RainyBot关闭时永久删除

执行此函数时，将会检测是否已存在此插件对应的缓存数据库文件，否则将会新建一个空白的缓存数据库文件(.rca格式)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **save\_plugin\_cache ( )**

用于将内存中的数据保存到缓存数据库文件中，需要先初始化缓存数据库文件才能使用此函数

***

* [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) **get\_plugin\_cache (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key **)**

用于从已加载的缓存数据库中获取指定key对应的内容，需要先初始化缓存数据库文件才能使用此函数

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **has\_plugin\_cache (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key **)**

用于从已加载的缓存数据库中检查指定key是否存在，需要先初始化缓存数据库文件才能使用此函数

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **set\_plugin\_cache (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key, [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) value, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于在已加载的缓存数据库中设定指定key的对应内容，需要先初始化缓存数据库文件才能使用此函数

最后一项可选参数用于指定是否在设定的同时将更改立即保存到缓存数据库文件中

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **remove\_plugin\_cache (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) key, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于在已加载的缓存数据库中删除指定key及其对应内容，需要先初始化缓存数据库文件才能使用此函数

最后一项可选参数用于指定是否在删除的同时将更改立即保存到缓存数据库文件中

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **clear\_plugin\_cache (** [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) save\_file=true **)**

用于在已加载的缓存数据库中清空所有内容，需要先初始化缓存数据库文件才能使用此函数

最后一项可选参数用于指定是否在清空的同时将更改立即保存到缓存数据库文件中

***

* void **unload\_plugin ( )**

调用此函数后，插件将会尝试卸载自身

若此插件被其他插件依赖，则可能会卸载失败

***

* [Node](https://docs.godotengine.org/en/latest/classes/class_node.html) **load\_scene (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) path, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) for\_capture=false **)**

加载一个场景文件，并根据第二个参数将其准备为用于图像捕捉或用于其他用途(如自定义GUI)，需要配合await关键字来使用此函数

注意：加载场景与根目录的相对路径必须与场景在原项目时所在的相对路径相同，且加载前请确保已重新导入所有资源(位于插件菜单中)，否则可能会加载失败或出现未知问题\
例如，原项目中位于"`res://plugins`"的场景在加载时必须位于"`RainyBot根目录/plugins`"路径下

需要的参数从左到右分别为:

* 场景文件的路径，可以是相对路径(以`res://`开头)，也可以是绝对路径(如D:/RaintBot/plugins，可通过\[get\_plugin\_path]函数来获取插件目录的绝对路径)
* 是否将加载的场景准备为用于图像捕捉 (可选，默认为false，必须启用才可使用\[get\_scene\_image]函数来获取其中内容的图像，否则会直接将其添加为插件的子项以便用于其他用途(如自定义GUI))

小贴士：出于性能原因，对已加载的场景或其附加脚本所做的的任何修改均无法通过重载插件来实时更新，因此在修改场景或其脚本后，请通过主菜单中的重新启动选项来快速重启RainyBot以便应用您所做的任何更改

***

* [Image](https://docs.godotengine.org/en/latest/classes/class_image.html) **get\_scene\_image (** [Node](https://docs.godotengine.org/en/latest/classes/class_node.html) scene, [Vector2i](https://docs.godotengine.org/en/latest/classes/class_vector2i.html) size, [Vector2i](https://docs.godotengine.org/en/latest/classes/class_vector2i.html) stretch\_size=Vector2i(0, 0), [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) transparent=false **)**

将指定场景实例中的当前内容获取为\[Image]类图像的实例，需要配合await关键字来使用此函数

请确保指定的场景是通过load\_scene()函数加载的，且加载时在函数中启用了for\_capture参数，否则将无法正确获取其中的内容

需要的参数从左到右分别为:

* 需要从其中获取图像的场景实例，场景实例需要满足上述条件才能被正确获取为图像
* 要生成的图像的原始大小，这决定了场景的内容将会以何种分辨率渲染为图像
* 图像生成后要拉伸到的大小(可选，默认为`Vector2i(0,0)`)，若设置为大于0的值，则将基于第二个参数的大小渲染图像，并将渲染后的图像拉伸为此参数指定的大小
* 设置生成的图像是否启用透明背景(可选，默认为`false`)。若启用透明背景，则场景中任何拥有透明度的位置在获取的图像中将拥有同样的透明度，空白的位置在获取的图像中将完全透明

***

* [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) **wait\_context\_custom (** [GDScript](https://docs.godotengine.org/en/latest/classes/class_gdscript.html) event\_type, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) sender\_id=-1, [int](https://docs.godotengine.org/en/latest/classes/class_int.html) group\_id=-1, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=20.0, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) block=true **)**

通过await调用后，将等待一个满足指定发送者id，指定群组id的指定类型的消息事件

消息事件不会自动进行上下文匹配，而是需要手动调用或者在注册消息事件时将需要匹配上下文的消息事件手动绑定到"\[respond\_context]"函数即可

接收到满足条件的事件后，该函数将返回该事件的引用，否则在达到指定的超时秒数后，将返回null

需要的参数从左到右分别为：

* 要等待的消息事件的类型
* 要匹配的发送者ID(可选，若为-1则不匹配此项)
* 要匹配的群组ID(可选，若为-1则不匹配此项)
* 等待的超时时间(可选，默认为20秒; 若数值小于等于0, 或已存在相同的等待, 则不启用超时)
* 消息事件匹配成功后阻断对应事件的传递 (可选,默认为true)

***

* [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) **wait\_context (** [MessageEvent](/api/messageevent) event, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) match\_sender=true, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) match\_group=true, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=20.0, [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) block=true **)**

通过await调用后，将等待另外一个与指定消息事件相匹配的消息事件

消息事件不会自动进行上下文匹配，而是需要手动调用或者在注册消息事件时将需要进行匹配的消息事件手动绑定到"\[respond\_context]"函数即可

接收到满足条件的事件后，该函数将返回该事件的引用，否则在达到指定的超时秒数后，将返回null

需要的参数从左到右分别为：

* 要匹配的消息事件的实例引用
* 是否要匹配消息事件中的发送者ID(可选，默认为true)
* 是否要匹配消息事件中的群组ID(可选，默认为true)
* 等待的超时时间(可选，默认为20秒; 若数值小于等于0, 或已存在相同的等待, 则不启用超时)
* 消息事件匹配成功后阻断对应事件的传递 (可选,默认为true)

***

* [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) **wait\_context\_id (** [String](https://docs.godotengine.org/en/latest/classes/class_string.html) context\_id, [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=20.0 **)**

通过await调用后，将等待指定id的响应，并在收到响应后返回响应的内容

要进行响应，需要在某处手动调用"\[respond\_context]"函数并传入相同的ID

若未进行响应且在达到指定的超时秒数后，将返回null

需要的参数从左到右分别为：

* 要等待响应的自定义ID
* 等待的超时时间(可选，默认为20秒; 若数值小于等于0, 或已存在相同的等待, 则不启用超时)

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **respond\_context (** [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) context, [Variant](https://docs.godotengine.org/en/latest/classes/class_variant.html) response=true **)**

用于响应正在进行中的上下文等待

若第一个参数传入内容为一个消息事件，则将用于响应与消息事件相关的上下文等待，并且第二个参数将被忽略\
通常只需在注册消息事件时将其与事件直接绑定后即可自动进行此类上下文响应

若第一个参数传入内容为一个字符串，则将用于响应指定ID的上下文等待，此时可通过第二个参数指定响应的内容\
第二个参数为可选参数，可以是任何类型的值；若不填则默认响应内容为布尔值true

***


# 类: PokeMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的戳一戳消息类，其实例记录了与一个戳一戳消息相关的各类数据

## 枚举

enum **PokeType**

戳一戳消息的类型

* **POKE** = 0\
  戳一戳
* **SHOW\_LOVE** = 1\
  比心
* **LIKE** = 2\
  点赞
* **HEART\_BROKEN** = 3\
  心碎
* **SIX\_SIX\_SIX** = 4\
  六六六
* **FANG\_DA\_ZHAO** = 5\
  放大招

***

## 方法

* static [PokeMessage](/api/pokemessage) **init (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) type **)**

基于指定的戳一戳类型来手动构造一个PokeMessage类的实例

***

* static [PokeMessage](/api/pokemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_poke\_type ( )**

获取此实例对应的戳一戳类型

***

* void **set\_poke\_type (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) type **)**

设置此实例对应的戳一戳类型

***

* [bool](https://docs.godotengine.org/en/latest/classes/class_bool.html) **is\_poke\_type (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) type **)**

判断此实例是否为指定的戳一戳类型

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: QuoteMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的引用回复消息类，其实例记录了与一个引用回复消息相关的各类数据

## 方法

* static [QuoteMessage](/api/quotemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_id ( )**

获取被引用回复的原消息ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_group\_id ( )**

获取被引用回复的原消息所在的群组的ID(若不位于群组中则返回0)

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_sender\_id ( )**

获取被引用回复的原消息的发送者的ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_target\_id ( )**

获取被引用回复的原消息的接收者(或接收群组)的ID

***

* [MessageChain](/api/messagechain) **get\_message\_chain ( )**

获取被引用回复的原消息的消息链实例

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***


# 类: RainyBotAPI

[(返回目录)](/api)

**继承自:** [RefCounted](https://docs.godotengine.org/en/latest/classes/class_refcounted.html)

**子类:** [BotAPI](/api/botapi), [CoreAPI](/api/coreapi), [EventAPI](/api/eventapi), [MessageAPI](/api/messageapi), [RoleAPI](/api/roleapi)

RainyBot所有API的父类，所有可供插件使用的API都将直接或间接继承此类


# 类: RequestEvent

[(返回目录)](/api)

**继承自:** [Event](/api/event)

**子类:** [GroupInviteRequestEvent](/api/groupinviterequestevent), [MemberJoinRequestEvent](/api/memberjoinrequestevent), [NewFriendRequestEvent](/api/newfriendrequestevent)

RainyBot的请求事件类，与各类请求直接相关的各类事件通常直接或间接继承此类

## 方法

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_event\_id ( )**

获取请求事件的对应ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_sender\_id ( )**

获取请求事件对应的发送者的ID

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_sender\_name ( )**

获取请求事件对应的发送者的名称

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_group\_id ( )**

获取请求事件相关的群组的ID(对于非群组请求，并且请求发送者不来自某群组时将返回0)

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_request\_message ( )**

获取请求事件相关的申请消息的文本

***

* [BotRequestResult](/api/botrequestresult) **respond (** [int](https://docs.godotengine.org/en/latest/classes/class_int.html) respond\_type, [String](https://docs.godotengine.org/en/latest/classes/class_string.html) msg="", [float](https://docs.godotengine.org/en/latest/classes/class_float.html) timeout=-INF **)**

用于响应当前的请求事件，可用的响应类型请参照每个具体的请求事件类型中的RespondType枚举

第二个参数为可选参数，可用于在响应请求的同时附加一段响应消息文本，例如拒绝理由等

配合await关键字可返回一个BotRequestResult类的实例，便于判断执行状态

可以通过指定timeout参数来自定义获取请求结果的超时时间，若不指定则默认将使用配置文件中设置的超时时间

***


# 类: RoleAPI

[(返回目录)](/api)

**继承自:** [RainyBotAPI](/api/rainybotapi)

**子类:** [GroupAPI](/api/groupapi), [MemberAPI](/api/memberapi), [OtherClient](/api/otherclient)

RainyBot的角色API类，所有的角色相关API将直接或间接继承此类

## 描述

这是RainyBot的角色API类，所有的角色相关API将直接或间接继承此类\
角色在RainyBot中定义为可与机器人交互的个体，如群组/群成员/好友/陌生人/其他客户端等


# 类: SourceMessage

[(返回目录)](/api)

**继承自:** [Message](/api/message)

RainyBot的消息链源消息类，其实例记录了某个接收到的消息链的消息ID，发送时间等数据

## 方法

* static [SourceMessage](/api/sourcemessage) **init\_meta (** [Dictionary](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) dic **)**

通过机器人协议后端的元数据字典构造一个此类的实例，仅当你知道自己在做什么时才使用

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_message\_id ( )**

获取此实例对应的消息链的ID

***

* [int](https://docs.godotengine.org/en/latest/classes/class_int.html) **get\_timestamp ( )**

获取此实例对应的消息链的发送时间戳

***

* [String](https://docs.godotengine.org/en/latest/classes/class_string.html) **get\_as\_text ( )**

将此实例获取为字符串的形式

***




---

[Next Page](/llms-full.txt/1)

