feat: 实现消息编解码器和消息处理模型
- 添加编解码器,用于序列化和反序列化MessageEnvelope对象。 - 创建消息模型,包括分段(Seg)、群组信息(GroupInfo)、用户信息(UserInfo)、格式信息(FormatInfo)、模板信息(TemplateInfo)、基础消息信息(BaseMessageInfo)和消息基础(MessageBase)。 引入路由器以管理消息路由和连接。 - 实现运行时机制,通过钩子和路由来处理消息处理。 - 使用HTTP和WebSocket客户端和服务器开发传输层,以进行消息传输。 - 为消息内容和信封定义类型,以标准化消息结构。
This commit is contained in:
@@ -534,7 +534,7 @@ DEFAULT_MODULE_COLORS = {
|
||||
# 数据库和消息
|
||||
"database_model": "#875F00", # 橙褐色
|
||||
"database": "#00FF00", # 橙褐色
|
||||
"maim_message": "#AF87D7", # 紫褐色
|
||||
"mofox_bus": "#AF87D7", # 紫褐色
|
||||
# 日志系统
|
||||
"logger": "#808080", # 深灰色
|
||||
"confirm": "#FFFF00", # 黄色+粗体
|
||||
|
||||
@@ -1,70 +1,53 @@
|
||||
import importlib.metadata
|
||||
import os
|
||||
|
||||
from maim_message import MessageServer
|
||||
from mofox_bus import MessageServer
|
||||
|
||||
from src.common.logger import get_logger
|
||||
from src.common.server import get_global_server
|
||||
from src.config.config import global_config
|
||||
|
||||
global_api = None
|
||||
global_api: MessageServer | None = None
|
||||
|
||||
|
||||
def get_global_api() -> MessageServer: # sourcery skip: extract-method
|
||||
"""获取全局MessageServer实例"""
|
||||
def get_global_api() -> MessageServer:
|
||||
"""
|
||||
获取全局 MessageServer 单例。
|
||||
"""
|
||||
|
||||
global global_api
|
||||
if global_api is None:
|
||||
# 检查maim_message版本
|
||||
try:
|
||||
maim_message_version = importlib.metadata.version("maim_message")
|
||||
version_compatible = [int(x) for x in maim_message_version.split(".")] >= [0, 3, 3]
|
||||
except (importlib.metadata.PackageNotFoundError, ValueError):
|
||||
version_compatible = False
|
||||
if global_api is not None:
|
||||
return global_api
|
||||
|
||||
# 读取配置项
|
||||
maim_message_config = global_config.maim_message
|
||||
bus_config = global_config.message_bus
|
||||
host = os.getenv("HOST", "127.0.0.1")
|
||||
port_str = os.getenv("PORT", "8000")
|
||||
|
||||
# 设置基本参数
|
||||
try:
|
||||
port = int(port_str)
|
||||
except ValueError:
|
||||
port = 8000
|
||||
|
||||
host = os.getenv("HOST", "127.0.0.1")
|
||||
port_str = os.getenv("PORT", "8000")
|
||||
kwargs: dict[str, object] = {
|
||||
"host": host,
|
||||
"port": port,
|
||||
"app": get_global_server().get_app(),
|
||||
}
|
||||
|
||||
try:
|
||||
port = int(port_str)
|
||||
except ValueError:
|
||||
port = 8000
|
||||
if bus_config.use_custom:
|
||||
kwargs["host"] = bus_config.host
|
||||
kwargs["port"] = bus_config.port
|
||||
kwargs.pop("app", None)
|
||||
if bus_config.use_wss:
|
||||
if bus_config.cert_file:
|
||||
kwargs["ssl_certfile"] = bus_config.cert_file
|
||||
if bus_config.key_file:
|
||||
kwargs["ssl_keyfile"] = bus_config.key_file
|
||||
|
||||
kwargs = {
|
||||
"host": host,
|
||||
"port": port,
|
||||
"app": get_global_server().get_app(),
|
||||
}
|
||||
if bus_config.auth_token:
|
||||
kwargs["enable_token"] = True
|
||||
kwargs["custom_logger"] = get_logger("mofox_bus")
|
||||
|
||||
# 只有在版本 >= 0.3.0 时才使用高级特性
|
||||
if version_compatible:
|
||||
# 添加自定义logger
|
||||
maim_message_logger = get_logger("maim_message")
|
||||
kwargs["custom_logger"] = maim_message_logger
|
||||
|
||||
# 添加token认证
|
||||
if maim_message_config.auth_token and len(maim_message_config.auth_token) > 0:
|
||||
kwargs["enable_token"] = True
|
||||
|
||||
if maim_message_config.use_custom:
|
||||
# 添加WSS模式支持
|
||||
del kwargs["app"]
|
||||
kwargs["host"] = maim_message_config.host
|
||||
kwargs["port"] = maim_message_config.port
|
||||
kwargs["mode"] = maim_message_config.mode
|
||||
if maim_message_config.use_wss:
|
||||
if maim_message_config.cert_file:
|
||||
kwargs["ssl_certfile"] = maim_message_config.cert_file
|
||||
if maim_message_config.key_file:
|
||||
kwargs["ssl_keyfile"] = maim_message_config.key_file
|
||||
kwargs["enable_custom_uvicorn_logger"] = False
|
||||
|
||||
global_api = MessageServer(**kwargs)
|
||||
if version_compatible and maim_message_config.auth_token:
|
||||
for token in maim_message_config.auth_token:
|
||||
global_api.add_valid_token(token)
|
||||
global_api = MessageServer(**kwargs)
|
||||
for token in bus_config.auth_token:
|
||||
global_api.add_valid_token(token)
|
||||
return global_api
|
||||
|
||||
Reference in New Issue
Block a user