1410
This commit is contained in:
1 parent
4b8018bcc3
commit
4ab47a3e47
4 files changed
+171
No files matched your search
@@ -73,6 +73,8 @@ export async function startPolling(): Promise<void> {
|
||||
document?: { file_id: string; file_name?: string; mime_type?: string };
|
||||
animation?: { file_id: string; file_name?: string; mime_type?: string };
|
||||
video?: { file_id: string; file_name?: string };
|
||||
voice?: { file_id: string; duration?: number };
|
||||
audio?: { file_id: string; file_name?: string; duration?: number };
|
||||
text?: string;
|
||||
caption?: string;
|
||||
reply_to_message?: { text?: string };
|
||||
@@ -81,6 +83,15 @@ export async function startPolling(): Promise<void> {
|
||||
const chatId = msg.chat.id;
|
||||
if (!allowed(chatId)) continue;
|
||||
|
||||
// 处理语音消息(转文字写入文章)
|
||||
if ((msg.voice || msg.audio) && hasSession(chatId)) {
|
||||
const voiceFile = msg.voice || msg.audio;
|
||||
if (voiceFile) {
|
||||
await handleVoice(chatId, voiceFile.file_id);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// 处理图片
|
||||
if (msg.photo && hasSession(chatId)) {
|
||||
await handlePhoto(chatId, msg.photo, msg.caption);
|
||||
@@ -261,6 +272,40 @@ async function handleDocument(chatId: number, fileId: string, fileName?: string,
|
||||
}
|
||||
}
|
||||
|
||||
async function handleVoice(chatId: number, fileId: string) {
|
||||
try {
|
||||
const { transcribeAudio } = await import("@/lib/voice");
|
||||
|
||||
await sendMessage(chatId, "🎤 正在识别语音...");
|
||||
|
||||
// 获取文件路径
|
||||
const fileRes = await tg<{ file_path?: string }>("getFile", { file_id: fileId });
|
||||
if (!fileRes.ok || !fileRes.result?.file_path) {
|
||||
await sendMessage(chatId, "❌ 语音文件获取失败");
|
||||
return;
|
||||
}
|
||||
|
||||
// 下载语音文件
|
||||
const fileUrl = "https://api.telegram.org/file/bot" + TG_TOKEN + "/" + fileRes.result.file_path;
|
||||
const audioBuffer = await fetch(fileUrl).then(r => r.arrayBuffer());
|
||||
|
||||
// 转文字
|
||||
const text = await transcribeAudio(audioBuffer, fileRes.result.file_path);
|
||||
if (!text.trim()) {
|
||||
await sendMessage(chatId, "❌ 语音识别结果为空");
|
||||
return;
|
||||
}
|
||||
|
||||
// 追加到文章内容
|
||||
appendContent(chatId, text.trim());
|
||||
const preview = text.trim().length > 80 ? text.trim().slice(0, 80) + "..." : text.trim();
|
||||
await sendMessage(chatId, `✅ 语音已转文字:\n\n${preview}`);
|
||||
} catch (e) {
|
||||
console.error("[bot:voice]", e instanceof Error ? e.message : String(e));
|
||||
await sendMessage(chatId, "❌ 语音转文字失败:" + (e instanceof Error ? e.message : "未知错误"));
|
||||
}
|
||||
}
|
||||
|
||||
async function handleCommand(chatId: number, cmd: string, arg?: string) {
|
||||
try {
|
||||
if (cmd === "noop") return;
|
||||
|
||||
Reference in new issue
Block a user