puniyu_element
消息元素处理库
概述
puniyu_element 是 puniyu 项目中用于处理各种消息元素的核心库。它提供了对文本、图片、文件、语音、视频、表情、@提醒、回复等消息元素的统一抽象和处理能力,支持序列化/反序列化以及原始格式转换。
核心组件
元素类型 (ElementType)
枚举定义了所有支持的消息元素类型:
At: @提醒元素Reply: 回复元素Text: 文本元素Image: 图片元素File: 文件元素Record: 语音元素Video: 视频元素Face: 表情元素Json: JSON 数据元素Xml: XML 数据元素
元素结构体
每种元素类型都有对应的结构体:
-
AtElement: @提醒元素target_id: 目标用户IDname: 目标用户名(可选)- 支持判断是否为@全体成员
-
FaceElement: 表情元素id: 表情ID
-
FileElement: 文件元素file: 文件路径/URL/base64file_id: 文件IDfile_size: 文件大小file_name: 文件名
-
ImageElement: 图片元素file: 图片路径/URL/base64is_flash: 是否为闪照summary: 图片外显文本(可选)
-
JsonElement: JSON元素data: JSON数据
-
VideoElement: 视频元素file: 视频路径/URL/base64file_name: 视频文件名
-
RecordElement: 语音元素file: 语音路径/URL/base64
-
ReplyElement: 回复元素message_id: 回复的消息ID
-
TextElement: 文本元素text: 文本内容
-
XmlElement: XML元素data: XML数据
Elements 枚举
统一包装所有元素类型的枚举,包含所有具体元素类型,提供:
as_text(): 提取文本内容(如果是文本元素)raw(): 转换为原始格式字符串
Message 结构体
表示完整消息,包含多个 Segment:
- 支持从
Vec<Segment>、单个Segment或字符串转换 - 实现
RawMessagetrait
Segment 结构体(适配器使用的)
消息段结构,包含:
r#type: 元素类型data: 元素数据(JSON格式)
Traits
RawMessage
提供 raw() 方法,将元素转换为原始格式字符串。
TextMessage
提供 text() 方法,提取文本内容。
便捷宏
element! 宏
用于快速创建各种元素:
// 文本元素
let text = element!;
// 图片元素
let image = element!;
// @元素
let at = element!;
// @全体成员
let at_all = element!;
// 表情元素
let face = element!;
// 回复元素
let reply = element!;
// 语音元素
let record = element!;
// 文件元素
let file = element!;
// 视频元素
let video = element!;
// JSON元素
let json = element!;
// XML元素
let xml = element!;
segment! 宏
用于快速创建消息段:
// 文本段
let text_segment = segment!;
// @段
let at_segment = segment!;
使用示例
use puniyu_element::{element, Elements, Message, Segment};
use puniyu_element::ElementType;
// 创建文本元素
let text_element = element!(text, "Hello World");
// 创建包含多个元素的消息
let elements = vec![
element!(text, "Hello "),
element!(at, "123456"),
element!(text, " Welcome!")
];
// 转换为消息
let message: Message = elements.into();
// 转换为原始格式
let raw_message = message.raw();
许可证
本项目采用 LGPL 许可证。