message_single_message.js
import { At, AtAll, PlainText, Image, Audio, Raw } from '../index.js';
/**
* `SingleMessage` 类型代表一个消息元素。
*/
class SingleMessage {
/**
* 从原生消息元素构造出一个 `SingleMessage` 对象。
*
* @param { Native } element 原生消息元素。
* @returns { SingleMessage } 原生消息元素所对应的 `SingleMessage` 对象。
*/
static fromNative(element) {
switch (element?.elementType) {
case PlainText.getElementType():
case At.getElementType():
case AtAll.getElementType():
const textElement = element?.textElement;
switch (textElement?.atType) {
case 0:
return new PlainText(textElement?.content);
case 1:
return new AtAll(textElement?.content);
case 2:
return new At(textElement?.atUid, textElement?.atNtUid);
}
break;
case Image.getElementType():
return new Image(element?.picElement?.sourcePath);
case Audio.getElementType():
const pttElement = element?.pttElement;
return new Audio(pttElement?.filePath, pttElement?.duration);
}
return new Raw(element);
}
/**
* (抽象函数,由子类实现)
*
* 返回该消息元素所对应的 **elementType**。
*
* 特别地, `Raw` 类型并不含有该静态函数。
*
* @returns { Number } 该消息元素所对应的 **elementType**。
*/
static getElementType() {
throw new Error('Abstract method not implemented.');
}
/**
* (抽象函数,由子类实现)
*
* 构造并返回该消息元素所对应的 **element** 对象。
*
* @returns { Native } 该消息元素所对应的 **element** 对象。
*/
async toElement() {
throw new Error('Abstract method not implemented.');
}
}
export default SingleMessage