Skip to content
This repository has been archived by the owner on Sep 17, 2024. It is now read-only.
墨染月 edited this page Mar 9, 2024 · 2 revisions

注意:该文档已经过时

原理介绍

Momoon Bot是一个使用TypeScript编写的聊天机器人后端,它包含以下主要部分(后跟随它在源代码中的类名):

  • 主线程(主要Node.js运行时实例。这指项目运行的线程,并不是类)
  • 启动器(Launcher
  • 配置(Config
  • 连接(Connection的子类)
  • 客户端(Client的子类)
  • 插件加载器(PluginLoader
  • 插件(Plugin的子类)

主线程负责运行所有基本架构,即启动器、连接、插件加载器、插件(未来可能将使用worker_threads库,实现插件多线程)。

启动过程

当在命令行使用诸如以下命令时:

node ./index.js

项目将通过根目录下的index.js文件,调用src/app.js中的start函数,来进行启动。

在启动函数中,将会创建启动器对象,同时调用Launcher.start函数。此时,启动器对象将读取配置文件(在config.js中直接导入JSON文件)。

在对配置文件经过检验后,若检验失败,则给出粗略的错误位置;

创建连接对象

若正确,将使用配置文件,尝试创建对应的连接对象,连接对象将被调用Comnection.createServer函数创建服务器(例如HTTP、被动WebSocket),或被调用Connection.connect函数连接服务器(例如主动WebSocket)。连接对象将准备好事件接收与事件解析。

加载插件

插件加载器的加载函数为异步函数,它将与创建连接的过程异步执行。启动器将创建插件加载器对象,并首先调用PluginLoader.loadFromFolder,加载默认插件文件夹(位于src/plugins/),然后再加载配置文件中所指定的插件文件和文件夹。

通过导入插件原型,将创建插件对象,其被附加到PluginLoader.plugins数组中。同时,向插件的事件发射器发射emit事件。

接下来,将开始等待客户端连接。

客户端连接

注意:以下所称的“客户端”,均指 以OpenShamrock无头客户端作为示例。

当客户端连接时,会为其创建客户端对象,并将其附加到连接对象的Connection.clients数组中。所有客户端对象将在连接关闭后被销毁。

经过令牌验证后,将获取群聊与好友信息。

例外:HTTP连接将只在收到连接时,为其创建客户端对象,且不会销毁任何客户端对象。群聊与好友信息,只会在最初连接时获取1次。

客户端上报时的事件处理``

Momoon Bot 维基

初步了解

Clone this wiki locally