mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-02-06 13:05:09 +00:00
refactor: type
This commit is contained in:
@@ -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: {
|
||||
|
||||
@@ -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; // 文件总数
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user