refactor: type

This commit is contained in:
手瓜一十雪
2024-11-21 10:36:08 +08:00
parent 8a5e5bce4e
commit ef5ea29d5d
8 changed files with 591 additions and 656 deletions

View File

@@ -2,7 +2,7 @@ import { FileNapCatOneBotUUID } from '@/common/helper';
import { MessageUnique } from '@/common/message-unique';
import { pathToFileURL } from 'node:url';
import {
AtType,
NTMsgAtType,
ChatType,
CustomMusicSignPostData,
ElementType,
@@ -61,7 +61,7 @@ export class OneBotMsgApi {
rawToOb11Converters: RawToOb11Converters = {
textElement: async element => {
if (element.atType === AtType.notAt) {
if (element.atType === NTMsgAtType.ATTYPEUNKNOWN) {
let text = element.content;
if (!text.trim()) {
return null;
@@ -76,7 +76,7 @@ export class OneBotMsgApi {
};
} else {
let qq: string = 'all';
if (element.atType !== AtType.atAll) {
if (element.atType !== NTMsgAtType.ATTYPEALL) {
const { atNtUid /* content */ } = element;
let atQQ = element.atUid;
if (!atQQ || atQQ === '0') {
@@ -151,9 +151,9 @@ export class OneBotMsgApi {
result: element.resultId!,
},
};
} else if (faceIndex === FaceIndex.RPS) {
} else if (faceIndex === FaceIndex.rps) {
return {
type: OB11MessageDataType.RPS,
type: OB11MessageDataType.rps,
data: {
result: element.resultId!,
},
@@ -400,7 +400,7 @@ export class OneBotMsgApi {
elementId: '',
textElement: {
content: text,
atType: AtType.notAt,
atType: NTMsgAtType.ATTYPEUNKNOWN,
atUid: '',
atTinyId: '',
atNtUid: '',
@@ -408,7 +408,7 @@ export class OneBotMsgApi {
}),
[OB11MessageDataType.at]: async ({ data: { qq: atQQ } }, context) => {
function at(atUid: string, atNtUid: string, atType: AtType, atName: string): SendTextElement {
function at(atUid: string, atNtUid: string, atType: NTMsgAtType, atName: string): SendTextElement {
return {
elementType: ElementType.TEXT,
elementId: '',
@@ -423,15 +423,15 @@ export class OneBotMsgApi {
}
if (!context.peer || context.peer.chatType == ChatType.KCHATTYPEC2C) return undefined;
if (atQQ === 'all') return at(atQQ, atQQ, AtType.atAll, '全体成员');
if (atQQ === 'all') return at(atQQ, atQQ, NTMsgAtType.ATTYPEALL, '全体成员');
const atMember = await this.core.apis.GroupApi.getGroupMember(context.peer.peerUid, atQQ);
if (atMember) {
return at(atQQ, atMember.uid, AtType.atUser, atMember.nick || atMember.cardName);
return at(atQQ, atMember.uid, NTMsgAtType.ATTYPEONE, atMember.nick || atMember.cardName);
}
const uid = await this.core.apis.UserApi.getUidByUinV2(`${atQQ}`);
if (!uid) throw new Error('Get Uid Error');
const info = await this.core.apis.UserApi.getUserDetailInfo(uid);
return at(atQQ, uid, AtType.atUser, info.nick || '');
return at(atQQ, uid, NTMsgAtType.ATTYPEONE, info.nick || '');
},
[OB11MessageDataType.reply]: async ({ data: { id } }) => {
@@ -558,11 +558,11 @@ export class OneBotMsgApi {
},
}),
[OB11MessageDataType.RPS]: async () => ({
[OB11MessageDataType.rps]: async () => ({
elementType: ElementType.FACE,
elementId: '',
faceElement: {
faceIndex: FaceIndex.RPS,
faceIndex: FaceIndex.rps,
faceText: '[包剪锤]',
faceType: 3,
packId: '1',
@@ -640,7 +640,7 @@ export class OneBotMsgApi {
[OB11MessageDataType.poke]: async () => undefined,
[OB11MessageDataType.Location]: async () => ({
[OB11MessageDataType.location]: async () => ({
elementType: ElementType.SHARELOCATION,
elementId: '',
shareLocationElement: {

View File

@@ -1,91 +1,89 @@
export interface OB11User {
[key: string]: any;
user_id: number;
nickname: string;
remark?: string;
sex?: OB11UserSex;
level?: number;
age?: number;
qid?: string;
login_days?: number;
categoryName?: string;
categoryId?: number;
user_id: number; // 用户ID
nickname: string; // 昵称
remark?: string; // 备注
sex?: OB11UserSex; // 性别
level?: number; // 等级
age?: number; // 年龄
qid?: string; // QID
login_days?: number; // 登录天数
categoryName?: string; // 分组名称
categoryId?: number; // 分组ID 999为特别关心
}
export enum OB11UserSex {
male = 'male',
female = 'female',
unknown = 'unknown'
male = 'male', // 男性
female = 'female', // 女性
unknown = 'unknown' // 未知
}
export enum OB11GroupMemberRole {
owner = 'owner',
admin = 'admin',
member = 'member',
owner = 'owner', // 群主
admin = 'admin', // 管理员
member = 'member', // 成员
}
export interface OB11GroupMember {
group_id: number;
user_id: number;
nickname: string;
card?: string;
sex?: OB11UserSex;
age?: number;
join_time?: number;
last_sent_time?: number;
level?: string;
qq_level?: number;
role?: OB11GroupMemberRole;
title?: string;
area?: string;
unfriendly?: boolean;
title_expire_time?: number;
card_changeable?: boolean;
// 以下为gocq字段
shut_up_timestamp?: number;
// 以下为扩展字段
is_robot?: boolean;
qage?: number;
group_id: number; // 群ID
user_id: number; // 用户ID
nickname: string; // 昵称
card?: string; // 群名片
sex?: OB11UserSex; // 性别
age?: number; // 年龄
join_time?: number; // 加入时间
last_sent_time?: number; // 最后发言时间
level?: string; // 群等级
qq_level?: number; // QQ等级
role?: OB11GroupMemberRole; // 群角色
title?: string; // 头衔
area?: string; // 地区
unfriendly?: boolean; // 是否不友好
title_expire_time?: number; // 头衔过期时间
card_changeable?: boolean; // 名片是否可修改
shut_up_timestamp?: number; // 禁言时间戳
is_robot?: boolean; // 是否机器人
qage?: number; // QQ年龄
}
export interface OB11Group {
group_id: number;
group_name: string;
member_count?: number;
max_member_count?: number;
group_id: number; // 群ID
group_name: string; // 群名称
member_count?: number; // 成员数量
max_member_count?: number; // 最大成员数量
}
export interface OB11Sender {
user_id: number,
nickname: string,
sex?: OB11UserSex,
age?: number,
card?: string, // 群名片
level?: string, // 群等级
role?: OB11GroupMemberRole
user_id: number; // 用户ID
nickname: string; // 昵称
sex?: OB11UserSex; // 性别
age?: number; // 年龄
card?: string; // 群名片
level?: string; // 群等级
role?: OB11GroupMemberRole; // 群角色
}
export interface OB11GroupFile {
group_id: number,
file_id: string,
file_name: string,
busid: number,
size: number,
upload_time: number,
dead_time: number,
modify_time: number,
download_times: number,
uploader: number,
uploader_name: string
group_id: number; // 群ID
file_id: string; // 文件ID
file_name: string; // 文件名称
busid: number; // 业务ID
size: number; // 文件大小
upload_time: number; // 上传时间
dead_time: number; // 过期时间
modify_time: number; // 修改时间
download_times: number; // 下载次数
uploader: number; // 上传者ID
uploader_name: string; // 上传者名称
}
export interface OB11GroupFileFolder {
group_id: number,
folder_id: string,
folder: string,
folder_name: string,
create_time: number,
creator: number,
creator_name: string,
total_file_count: number,
}
group_id: number; // 群ID
folder_id: string; // 文件夹ID
folder: string; // 文件夹路径
folder_name: string; // 文件夹名称
create_time: number; // 创建时间
creator: number; // 创建者ID
creator_name: string; // 创建者名称
total_file_count: number; // 文件总数
}

View File

@@ -2,46 +2,51 @@ import { OB11Sender } from './entity';
import { EventType } from '@/onebot/event/OneBotEvent';
import { CustomMusicSignPostData, IdMusicSignPostData, PicSubType, RawMessage } from '@/core';
// 消息类型枚举
export enum OB11MessageType {
private = 'private',
group = 'group'
}
// 消息接口定义
export interface OB11Message {
temp_source?: number;
message_sent_type?: string;
target_id?: number; // 自己发送的消息才有此字段
self_id?: number,
time: number,
message_id: number,
message_seq: number, // 和message_id一样
real_id: number,
user_id: number | string, // number
group_id?: number | string, // number
message_type: 'private' | 'group',
sub_type?: 'friend' | 'group' | 'normal',
sender: OB11Sender,
message: OB11MessageData[] | string,
message_format: 'array' | 'string',
raw_message: string,
font: number,
post_type?: EventType,
raw?: RawMessage
self_id?: number;
time: number;
message_id: number;
message_seq: number; // 和message_id一样
real_id: number;
user_id: number | string; // number
group_id?: number | string; // number
message_type: 'private' | 'group';
sub_type?: 'friend' | 'group' | 'normal';
sender: OB11Sender;
message: OB11MessageData[] | string;
message_format: 'array' | 'string';
raw_message: string;
font: number;
post_type?: EventType;
raw?: RawMessage;
}
// 合并转发消息接口定义
export interface OB11ForwardMessage extends OB11Message {
content: OB11MessageData[] | string;
}
// 返回数据接口定义
export interface OB11Return<DataType> {
status: string
retcode: number
data: DataType
message: string,
echo?: any, // ws调用api才有此字段
wording?: string, // go-cqhttp字段错误信息
status: string;
retcode: number;
data: DataType;
message: string;
echo?: any; // ws调用api才有此字段
wording?: string; // go-cqhttp字段错误信息
}
// 消息数据类型枚举
export enum OB11MessageDataType {
text = 'text',
image = 'image',
@@ -60,108 +65,123 @@ export enum OB11MessageDataType {
xml = 'xml',
poke = 'poke',
dice = 'dice',
RPS = 'rps',
miniapp = 'miniapp',//json类
rps = 'rps',
miniapp = 'miniapp', // json类
contact = 'contact',
Location = 'location'
location = 'location'
}
// 商城表情消息接口定义
export interface OB11MessageMFace {
type: OB11MessageDataType.mface;
data: {
emoji_package_id: number
emoji_id: string
key: string
summary: string
emoji_package_id: number;
emoji_id: string;
key: string;
summary: string;
};
}
// 纯文本消息接口定义
export interface OB11MessageText {
type: OB11MessageDataType.text,
type: OB11MessageDataType.text;
data: {
text: string, // 纯文本
}
text: string; // 纯文本
};
}
// 联系人消息接口定义
export interface OB11MessageContext {
type: OB11MessageDataType.contact,
type: OB11MessageDataType.contact;
data: {
type:"qq"|"group",
id: string,
}
type: "qq" | "group";
id: string;
};
}
// 文件消息基础接口定义
export interface OB11MessageFileBase {
data: {
file_unique?: string,
file_unique?: string;
path?: string;
thumb?: string;
name?: string;
file: string,
file: string;
url?: string;
};
}
// 图片消息接口定义
export interface OB11MessageImage extends OB11MessageFileBase {
type: OB11MessageDataType.image
type: OB11MessageDataType.image;
data: OB11MessageFileBase['data'] & {
summary?: string; // 图片摘要
sub_type?: PicSubType
},
sub_type?: PicSubType;
};
}
// 语音消息接口定义
export interface OB11MessageRecord extends OB11MessageFileBase {
type: OB11MessageDataType.voice;
}
// 文件消息接口定义
export interface OB11MessageFile extends OB11MessageFileBase {
type: OB11MessageDataType.file;
}
// 视频消息接口定义
export interface OB11MessageVideo extends OB11MessageFileBase {
type: OB11MessageDataType.video;
}
// @消息接口定义
export interface OB11MessageAt {
type: OB11MessageDataType.at;
data: {
qq: string, // `${number}` | 'all'
name?: string
qq: string; // `${number}` | 'all'
name?: string;
};
}
// 回复消息接口定义
export interface OB11MessageReply {
type: OB11MessageDataType.reply;
data: {
id: string
id: string;
};
}
// 表情消息接口定义
export interface OB11MessageFace {
type: OB11MessageDataType.face;
data: {
id: string
id: string;
};
}
// 混合消息类型定义
export type OB11MessageMixType = OB11MessageData[] | string | OB11MessageData;
// 合并转发消息节点接口定义
export interface OB11MessageNode {
type: OB11MessageDataType.node;
data: {
id?: string
user_id?: number | string // number
uin?: number | string // number, compatible with go-cqhttp
nickname: string
name?: string // compatible with go-cqhttp
content: OB11MessageMixType
source?: string,
news?: { text: string }[],
summary?: string,
prompt?: string
time?: string
id?: string;
user_id?: number | string; // number
uin?: number | string; // number, compatible with go-cqhttp
nickname: string;
name?: string; // compatible with go-cqhttp
content: OB11MessageMixType;
source?: string;
news?: { text: string }[];
summary?: string;
prompt?: string;
time?: string;
};
}
// 合并转发消息节点纯文本接口定义
export type OB11MessageNodePlain = OB11MessageNode & {
data: {
content?: Array<OB11MessageData>;
@@ -169,73 +189,84 @@ export type OB11MessageNodePlain = OB11MessageNode & {
};
};
// 音乐消息接口定义
export interface OB11MessageIdMusic {
type: OB11MessageDataType.music;
data: IdMusicSignPostData;
}
// 自定义音乐消息接口定义
export interface OB11MessageCustomMusic {
type: OB11MessageDataType.music;
data: Omit<CustomMusicSignPostData, 'singer'> & { content?: string };
}
// JSON消息接口定义
export interface OB11MessageJson {
type: OB11MessageDataType.json;
data: { config?: { token: string }, data: string | object };
}
// 骰子消息接口定义
export interface OB11MessageDice {
type: OB11MessageDataType.dice,
type: OB11MessageDataType.dice;
data: {
result: number /* intended */ | string /* in fact */
}
result: number /* intended */ | string /* in fact */;
};
}
// 猜拳消息接口定义
export interface OB11MessageRPS {
type: OB11MessageDataType.RPS,
type: OB11MessageDataType.rps;
data: {
result: number | string
}
result: number | string;
};
}
// Markdown消息接口定义
export interface OB11MessageMarkdown {
type: OB11MessageDataType.markdown;
data: {
content: string
content: string;
};
}
// 合并转发消息接口定义
export interface OB11MessageForward {
type: OB11MessageDataType.forward;
data: {
id: string,
content: OB11Message[]
id: string;
content: OB11Message[];
};
}
// 消息数据类型定义
export type OB11MessageData =
OB11MessageText |
OB11MessageFace | OB11MessageMFace |
OB11MessageAt | OB11MessageReply |
OB11MessageImage | OB11MessageRecord | OB11MessageFile | OB11MessageVideo |
OB11MessageNode | OB11MessageIdMusic | OB11MessageCustomMusic | OB11MessageJson |
OB11MessageDice | OB11MessageRPS | OB11MessageMarkdown | OB11MessageForward | OB11MessageContext
OB11MessageDice | OB11MessageRPS | OB11MessageMarkdown | OB11MessageForward | OB11MessageContext;
// 发送消息接口定义
export interface OB11PostSendMsg {
message_type?: 'private' | 'group'
user_id?: string,
group_id?: string,
message_type?: 'private' | 'group';
user_id?: string;
group_id?: string;
message: OB11MessageMixType;
messages?: OB11MessageMixType; // 兼容 go-cqhttp
auto_escape?: boolean | string
source?: string,
news?: { text: string }[],
summary?: string,
prompt?: string
time?: string
auto_escape?: boolean | string;
source?: string;
news?: { text: string }[];
summary?: string;
prompt?: string;
time?: string;
}
// 上下文接口定义
export interface OB11PostContext {
message_type?: 'private' | 'group'
user_id?: string,
group_id?: string,
}
message_type?: 'private' | 'group';
user_id?: string;
group_id?: string;
}