refactor: music sign

This commit is contained in:
linyuchen 2024-04-29 00:11:32 +08:00
parent adcf4bfc53
commit df982afd51
2 changed files with 65 additions and 44 deletions

View File

@ -30,6 +30,7 @@ import { getFriend, getGroup, getGroupMember, getUidByUin, selfInfo } from '@/co
import { NTQQMsgApi } from '../../../core/src/apis'; import { NTQQMsgApi } from '../../../core/src/apis';
import { NTQQFileApi } from '../../../core/src/apis'; import { NTQQFileApi } from '../../../core/src/apis';
import { ob11Config } from '@/onebot11/config'; import { ob11Config } from '@/onebot11/config';
import { CustomMusicSignPostData, MusicSign } from '@/core/apis/sign';
const ALLOW_SEND_TEMP_MSG = false; const ALLOW_SEND_TEMP_MSG = false;
@ -90,36 +91,7 @@ export function convertMessage2List(message: OB11MessageMixType, autoEscape = fa
return message; return message;
} }
async function genMusicElement(url: string, audio: string, title: string, image: string | undefined, singer: string | undefined): Promise<SendArkElement | undefined> { async function genCustomMusicElement(url: string, audio: string, title: string, image: string | undefined, singer: string | undefined): Promise<SendArkElement | undefined> {
const getMusicJson = new Promise((resolve, reject) => {
const postData = {
url,
audio,
title,
image,
singer
};
fetch(ob11Config.musicSignUrl, {
method: 'POST', // 指定请求方法为 POST
headers: {
'Content-Type': 'application/json' // 设置请求头,指明发送的数据类型为 JSON
},
body: JSON.stringify(postData) // 将 JavaScript 对象转换为 JSON 字符串作为请求体
})
.then(response => {
if (!response.ok) {
reject(response.statusText); // 请求失败,返回错误信息
}
return response.json(); // 解析 JSON 格式的响应体
})
.then(data => {
logDebug('音乐消息生成成功', data);
resolve(data);
})
.catch(error => {
reject(error);
});
});
// const musicJson = { // const musicJson = {
// app: 'com.tencent.structmsg', // app: 'com.tencent.structmsg',
// config: { // config: {
@ -152,12 +124,34 @@ async function genMusicElement(url: string, audio: string, title: string, image:
// view: 'news' // view: 'news'
// }; // };
try{ try{
const musicJson = await getMusicJson; const postData: CustomMusicSignPostData = {
type: 'custom',
url,
audio,
title,
image,
singer
};
const musicJson = await new MusicSign(ob11Config.musicSignUrl).sign(postData);
return SendMsgElementConstructor.ark(musicJson); return SendMsgElementConstructor.ark(musicJson);
}catch (e) { }catch (e) {
logError('生成音乐消息失败', e); logError('生成音乐消息失败', e);
} }
} }
async function genIdMusicElement(type: 'qq' | '163', id: string | number): Promise<SendArkElement | undefined> {
try {
const postData = {
type,
id
};
const musicJson = await new MusicSign(ob11Config.musicSignUrl).sign(postData);
return SendMsgElementConstructor.ark(musicJson);
} catch (e) {
logError('生成音乐消息失败', e);
}
}
export async function createSendElements(messageData: OB11MessageData[], group: Group | undefined, ignoreTypes: OB11MessageDataType[] = []) { export async function createSendElements(messageData: OB11MessageData[], group: Group | undefined, ignoreTypes: OB11MessageDataType[] = []) {
const sendElements: SendMessageElement[] = []; const sendElements: SendMessageElement[] = [];
const deleteAfterSentFiles: string[] = []; const deleteAfterSentFiles: string[] = [];
@ -292,20 +286,40 @@ export async function createSendElements(messageData: OB11MessageData[], group:
}break; }break;
case OB11MessageDataType.music:{ case OB11MessageDataType.music:{
const musicData = sendMsg.data; const musicData = sendMsg.data;
if (musicData.type !== 'custom') { try {
logError('只支持custom类型的音乐卡片', musicData.type); let musicMsgElement: SendArkElement | undefined;
break; if (musicData.type === 'custom'){
} if (!musicData.url){
else{ logError('自定义音卡缺少参数url');
try { break;
const musicMsgElement = await genMusicElement(musicData.url, musicData.audio, musicData.title, musicData.image, musicData.singer);
logDebug('生成音乐消息', musicMsgElement);
if (musicMsgElement) {
sendElements.push(musicMsgElement);
} }
} catch (e) { if (!musicData.audio){
logError('生成音乐消息失败', e); logError('自定义音卡缺少参数audio');
break;
}
if (!musicData.title){
logError('自定义音卡缺少参数title');
break;
}
musicMsgElement = await genCustomMusicElement(musicData.url, musicData.audio, musicData.title, musicData.image, musicData.singer);
} }
else{
if (!['qq', '163'].includes(musicData.type)){
logError('音乐卡片type错误, 只支持qq和163当前type:', musicData.type);
break;
}
if (!musicData.id){
logError('音乐卡片缺少参数id');
break;
}
musicMsgElement = await genIdMusicElement(musicData.type, musicData.id);
}
logDebug('生成音乐消息', musicMsgElement);
if (musicMsgElement) {
sendElements.push(musicMsgElement);
}
} catch (e) {
logError('生成音乐消息失败', e);
} }
} }
} }

View File

@ -200,6 +200,13 @@ export interface OB11MessageNode {
} }
} }
export interface OB11MessageIdMusic {
type: OB11MessageDataType.music
data: {
type: 'qq' | '163',
id: string | number,
}
}
export interface OB11MessageCustomMusic { export interface OB11MessageCustomMusic {
type: OB11MessageDataType.music type: OB11MessageDataType.music
data: { data: {
@ -243,7 +250,7 @@ export type OB11MessageData =
OB11MessageFace | OB11MessageMFace | OB11MessageFace | OB11MessageMFace |
OB11MessageAt | OB11MessageReply | OB11MessageAt | OB11MessageReply |
OB11MessageImage | OB11MessageRecord | OB11MessageFile | OB11MessageVideo | OB11MessageImage | OB11MessageRecord | OB11MessageFile | OB11MessageVideo |
OB11MessageNode | OB11MessageCustomMusic | OB11MessageJson | OB11MessageNode | OB11MessageIdMusic | OB11MessageCustomMusic | OB11MessageJson |
OB11MessageDice | OB11MessageRPS | OB11MessageMarkdown OB11MessageDice | OB11MessageRPS | OB11MessageMarkdown
export interface OB11PostSendMsg { export interface OB11PostSendMsg {