mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
fix: 临时会话上报问题
This commit is contained in:
parent
7affa081ac
commit
964874bdad
@ -2,7 +2,7 @@ import { GetFileBase, GetFilePayload, GetFileResponse } from './GetFile';
|
|||||||
import { ActionName } from '../types';
|
import { ActionName } from '../types';
|
||||||
import { spawn } from 'node:child_process';
|
import { spawn } from 'node:child_process';
|
||||||
import { promises as fs } from 'fs';
|
import { promises as fs } from 'fs';
|
||||||
|
import { decode } from 'silk-wasm';
|
||||||
const FFMPEG_PATH = process.env.FFMPEG_PATH || 'ffmpeg';
|
const FFMPEG_PATH = process.env.FFMPEG_PATH || 'ffmpeg';
|
||||||
|
|
||||||
interface Payload extends GetFilePayload {
|
interface Payload extends GetFilePayload {
|
||||||
@ -16,25 +16,39 @@ export default class GetRecord extends GetFileBase {
|
|||||||
const res = await super._handle(payload);
|
const res = await super._handle(payload);
|
||||||
if (payload.out_format && typeof payload.out_format === 'string') {
|
if (payload.out_format && typeof payload.out_format === 'string') {
|
||||||
const inputFile = res.file;
|
const inputFile = res.file;
|
||||||
const outputFile = `${inputFile}.${payload.out_format}`;
|
|
||||||
if (!inputFile) throw new Error('file not found');
|
if (!inputFile) throw new Error('file not found');
|
||||||
|
const pcmFile = `${inputFile}.pcm`;
|
||||||
|
const outputFile = `${inputFile}.${payload.out_format}`;
|
||||||
try {
|
try {
|
||||||
await fs.access(inputFile);
|
await fs.access(inputFile);
|
||||||
await this.convertFile(inputFile, outputFile, payload.out_format);
|
await this.decodeFile(inputFile, pcmFile);
|
||||||
|
await this.convertFile(pcmFile, outputFile, payload.out_format);
|
||||||
const base64Data = await fs.readFile(outputFile, { encoding: 'base64' });
|
const base64Data = await fs.readFile(outputFile, { encoding: 'base64' });
|
||||||
res.file = outputFile;
|
res.file = outputFile;
|
||||||
res.url = outputFile;
|
res.url = outputFile;
|
||||||
res.base64 = base64Data;
|
res.base64 = base64Data;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error processing file:', error);
|
console.error('Error processing file:', error);
|
||||||
|
throw error; // 重新抛出错误以便调用者可以处理
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async decodeFile(inputFile: string, outputFile: string): Promise<void> {
|
||||||
|
try {
|
||||||
|
const inputData = await fs.readFile(inputFile);
|
||||||
|
const decodedData = await decode(inputData, 24000);
|
||||||
|
await fs.writeFile(outputFile, Buffer.from(decodedData.data));
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error decoding file:', error);
|
||||||
|
throw error; // 重新抛出错误以便调用者可以处理
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private convertFile(inputFile: string, outputFile: string, format: string): Promise<void> {
|
private convertFile(inputFile: string, outputFile: string, format: string): Promise<void> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const ffmpeg = spawn(FFMPEG_PATH, ['-i', inputFile, outputFile]);
|
const ffmpeg = spawn(FFMPEG_PATH, ['-f', 's16le', '-ar', '24000', '-ac', '1', '-i', inputFile, outputFile]);
|
||||||
|
|
||||||
ffmpeg.on('close', (code) => {
|
ffmpeg.on('close', (code) => {
|
||||||
if (code === 0) {
|
if (code === 0) {
|
||||||
|
@ -696,8 +696,9 @@ export class OneBotMsgApi {
|
|||||||
resMsg.sub_type = 'group';
|
resMsg.sub_type = 'group';
|
||||||
const ret = await this.core.apis.MsgApi.getTempChatInfo(ChatType.KCHATTYPETEMPC2CFROMGROUP, msg.senderUid);
|
const ret = await this.core.apis.MsgApi.getTempChatInfo(ChatType.KCHATTYPETEMPC2CFROMGROUP, msg.senderUid);
|
||||||
if (ret.result === 0) {
|
if (ret.result === 0) {
|
||||||
|
let member = await this.core.apis.GroupApi.getGroupMember(msg.peerUin, msg.senderUin);
|
||||||
resMsg.group_id = parseInt(ret.tmpChatInfo!.groupCode);
|
resMsg.group_id = parseInt(ret.tmpChatInfo!.groupCode);
|
||||||
resMsg.sender.nickname = ret.tmpChatInfo!.fromNick;
|
resMsg.sender.nickname = member?.nick ?? member?.cardName ?? '临时会话';
|
||||||
resMsg.temp_source = resMsg.group_id;
|
resMsg.temp_source = resMsg.group_id;
|
||||||
} else {
|
} else {
|
||||||
resMsg.group_id = 284840486; //兜底数据
|
resMsg.group_id = 284840486; //兜底数据
|
||||||
|
Loading…
x
Reference in New Issue
Block a user