Merge pull request #201 from idranme/main

feat: at segment add name
This commit is contained in:
手瓜一十雪 2024-08-03 07:08:25 +08:00 committed by GitHub
commit 3943782971
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 60 additions and 45 deletions

View File

@ -101,33 +101,40 @@ export class OB11Constructor {
} }
} }
for (const element of msg.elements) { for (const element of msg.elements) {
const message_data: OB11MessageData | any = { let message_data: OB11MessageData = {
data: {}, data: {} as any,
type: 'unknown' type: 'unknown' as any
}; };
if (element.textElement && element.textElement?.atType !== AtType.notAt) { if (element.textElement && element.textElement?.atType !== AtType.notAt) {
message_data['type'] = OB11MessageDataType.at; let qq: `${number}` | 'all';
let name: string | undefined;
if (element.textElement.atType == AtType.atAll) { if (element.textElement.atType == AtType.atAll) {
// message_data["data"]["mention"] = "all" qq = 'all';
message_data['data']['qq'] = 'all';
} }
else { else {
const atUid = element.textElement.atNtUid; const { atNtUid, content } = element.textElement;
let atQQ = element.textElement.atUid; let atQQ = element.textElement.atUid;
if (!atQQ || atQQ === '0') { if (!atQQ || atQQ === '0') {
const atMember = await getGroupMember(msg.peerUin, atUid); const atMember = await getGroupMember(msg.peerUin, atNtUid);
if (atMember) { if (atMember) {
atQQ = atMember.uin; atQQ = atMember.uin;
} }
} }
if (atQQ) { if (atQQ) {
// message_data["data"]["mention"] = atQQ qq = atQQ as `${number}`;
message_data['data']['qq'] = atQQ; name = content.replace('@', '');
} }
} }
message_data = {
type: OB11MessageDataType.at,
data: {
qq: qq!,
name
}
};
} }
else if (element.textElement) { else if (element.textElement) {
message_data['type'] = 'text'; message_data['type'] = OB11MessageDataType.text;
let text = element.textElement.content; let text = element.textElement.content;
if (!text.trim()) { if (!text.trim()) {
@ -140,7 +147,7 @@ export class OB11Constructor {
message_data['data']['text'] = text; message_data['data']['text'] = text;
} }
else if (element.replyElement) { else if (element.replyElement) {
message_data['type'] = 'reply'; message_data['type'] = OB11MessageDataType.reply;
//log("收到回复消息", element.replyElement); //log("收到回复消息", element.replyElement);
try { try {
//做这么多都是因为NC速度太快 可能nt还没有写入数据库 //做这么多都是因为NC速度太快 可能nt还没有写入数据库
@ -163,14 +170,14 @@ export class OB11Constructor {
message_data['data']['id'] = MessageUnique.createMsg({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, replyMsg.msgId)?.toString(); message_data['data']['id'] = MessageUnique.createMsg({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, replyMsg.msgId)?.toString();
//log("找到回复消息", message_data['data']['id'], replyMsg.msgList[0].msgId) //log("找到回复消息", message_data['data']['id'], replyMsg.msgList[0].msgId)
} catch (e: any) { } catch (e: any) {
message_data['type'] = "unknown"; message_data['type'] = 'unknown' as any;
message_data['data'] = undefined; message_data['data'] = undefined;
logError('获取不到引用的消息', e.stack, element.replyElement.replayMsgSeq); logError('获取不到引用的消息', e.stack, element.replyElement.replayMsgSeq);
} }
} }
else if (element.picElement) { else if (element.picElement) {
message_data['type'] = 'image'; message_data['type'] = OB11MessageDataType.image;
// message_data["data"]["file"] = element.picElement.sourcePath // message_data["data"]["file"] = element.picElement.sourcePath
message_data['data']['file'] = element.picElement.fileName; message_data['data']['file'] = element.picElement.fileName;
message_data['data']['subType'] = element.picElement.picSubType; message_data['data']['subType'] = element.picElement.picSubType;
@ -319,7 +326,7 @@ export class OB11Constructor {
message_data['type'] = OB11MessageDataType.forward; message_data['type'] = OB11MessageDataType.forward;
message_data['data']['id'] = msg.msgId; message_data['data']['id'] = msg.msgId;
} }
if (message_data.type !== 'unknown' && message_data.data) { if ((message_data.type as string) !== 'unknown' && message_data.data) {
const cqCode = encodeCQCode(message_data); const cqCode = encodeCQCode(message_data);
if (messagePostFormat === 'string') { if (messagePostFormat === 'string') {

View File

@ -66,16 +66,16 @@ export function encodeCQCode(data: OB11MessageData) {
let result = '[CQ:' + data.type; let result = '[CQ:' + data.type;
for (const name in data.data) { for (const name in data.data) {
let value = data.data[name]; const value = data.data[name];
try { if (value === undefined) {
// Check if the value can be converted to a string
value = value.toString();
} catch (error) {
// If it can't be converted, skip this name-value pair
// console.warn(`Skipping problematic name-value pair. Name: ${name}, Value: ${value}`);
continue; continue;
} }
result += `,${name}=${CQCodeEscape(value)}`; try {
const text = value.toString();
result += `,${name}=${CQCodeEscape(text)}`;
} catch (error) {
// If it can't be converted, skip this name-value pair
}
} }
result += ']'; result += ']';
return result; return result;

View File

@ -114,6 +114,7 @@ export interface OB11MessageAt {
type: OB11MessageDataType.at type: OB11MessageDataType.at
data: { data: {
qq: `${number}` | 'all' qq: `${number}` | 'all'
name?: string
} }
} }
@ -177,13 +178,20 @@ export interface OB11MessageMarkdown {
} }
} }
export interface OB11MessageForward {
type: OB11MessageDataType.forward
data: {
id: string
}
}
export type OB11MessageData = export type OB11MessageData =
OB11MessageText | OB11MessageText |
OB11MessageFace | OB11MessageMFace | OB11MessageFace | OB11MessageMFace |
OB11MessageAt | OB11MessageReply | OB11MessageAt | OB11MessageReply |
OB11MessageImage | OB11MessageRecord | OB11MessageFile | OB11MessageVideo | OB11MessageImage | OB11MessageRecord | OB11MessageFile | OB11MessageVideo |
OB11MessageNode | OB11MessageIdMusic | OB11MessageCustomMusic | OB11MessageJson | OB11MessageNode | OB11MessageIdMusic | OB11MessageCustomMusic | OB11MessageJson |
OB11MessageDice | OB11MessageRPS | OB11MessageMarkdown OB11MessageDice | OB11MessageRPS | OB11MessageMarkdown | OB11MessageForward
export interface OB11PostSendMsg { export interface OB11PostSendMsg {
message_type?: 'private' | 'group' message_type?: 'private' | 'group'