From 1d7100a0536b603917eafc8d4d8b482d39bb4233 Mon Sep 17 00:00:00 2001
From: student_2333 <lgc2333@126.com>
Date: Tue, 30 Apr 2024 13:05:08 +0800
Subject: [PATCH] fix

---
 src/common/utils/sign.ts           |  4 +++-
 src/onebot11/action/msg/SendMsg.ts | 16 ++++++++++++++--
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/common/utils/sign.ts b/src/common/utils/sign.ts
index 07de2f6..f289f08 100644
--- a/src/common/utils/sign.ts
+++ b/src/common/utils/sign.ts
@@ -14,6 +14,8 @@ export interface CustomMusicSignPostData {
   singer?: string
 }
 
+export type MusicSignPostData = IdMusicSignPostData | CustomMusicSignPostData
+
 export class MusicSign {
   private readonly url: string
 
@@ -21,7 +23,7 @@ export class MusicSign {
     this.url = url
   }
 
-  async sign(postData: CustomMusicSignPostData | IdMusicSignPostData): Promise<any> {
+  async sign(postData: MusicSignPostData): Promise<any> {
     const resp = await fetch(this.url, {
       method: 'POST',
       headers: { 'Content-Type': 'application/json' },
diff --git a/src/onebot11/action/msg/SendMsg.ts b/src/onebot11/action/msg/SendMsg.ts
index 7f07065..829f726 100644
--- a/src/onebot11/action/msg/SendMsg.ts
+++ b/src/onebot11/action/msg/SendMsg.ts
@@ -33,7 +33,7 @@ import { sleep } from '../../../common/utils/helper'
 import { uri2local } from '../../../common/utils'
 import { crychic } from '../../../ntqqapi/external/crychic'
 import { NTQQGroupApi } from '../../../ntqqapi/api'
-import { MusicSign } from '../../../common/utils/sign'
+import { CustomMusicSignPostData, MusicSign, MusicSignPostData } from '../../../common/utils/sign'
 
 function checkSendMessage(sendMsgList: OB11MessageData[]) {
   function checkUri(uri: string): boolean {
@@ -304,6 +304,13 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
         message: '转发消息不能和普通消息混在一起发送,转发需要保证message只有type为node的元素',
       }
     }
+    const musicNum = this.getSpecialMsgNum(payload, OB11MessageDataType.music)
+    if (musicNum > 1 || fmNum != messages.length) {
+      return {
+        valid: false,
+        message: '音乐消息不可以和其他消息混在一起发送',
+      }
+    }
     if (payload.message_type !== 'private' && payload.group_id && !(await getGroup(payload.group_id))) {
       return {
         valid: false,
@@ -388,9 +395,14 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
           if (!['qq', '163', 'custom'].includes(type)) {
             throw `不支持的音乐类型 ${type}`
           }
+          const postData: MusicSignPostData = { ...music.data }
+          if (type === 'custom' && music.data.content) {
+            ;(postData as CustomMusicSignPostData).singer = music.data.content
+            delete (postData as OB11MessageCustomMusic['data']).content
+          }
           let jsonContent: string
           try {
-            jsonContent = await new MusicSign(musicSignUrl).sign(music.data)
+            jsonContent = await new MusicSign(musicSignUrl).sign(postData)
           } catch (e) {
             throw `签名音乐消息失败:${e}`
           }