Commit 8d4477a
Changed files (3)
src
src/others/extract_audio.py
@@ -17,41 +17,48 @@ from utils import to_int
# ruff: noqa: RUF001
HELP = f"""
-🎧**视频转音频**
+🎧**消息转音频或语音**
使用方式:
-1. 以 `{PREFIX.AUDIO}` 回复视频消息提取出音频
-2. 发送视频时, 添加`{PREFIX.AUDIO}`文本描述会同时提取视频音频
+1. `{PREFIX.AUDIO}` 回复消息转换为音频文件
+2. `{PREFIX.VOICE}` 回复消息转换为语音消息
"""
async def extract_audio_file(client: Client, message: Message, **kwargs) -> None:
"""Extract audio from video message."""
# send docs if message == "/audio", without reply
- if equal_prefix(message.text, prefix=[PREFIX.AUDIO]) and not message.reply_to_message:
+ if equal_prefix(message.text, prefix=[PREFIX.AUDIO, PREFIX.VOICE]) and not message.reply_to_message:
await send2tg(client, message, texts=HELP, **kwargs)
return
info = parse_msg(message)
- if not startswith_prefix(info["text"], prefix=[PREFIX.AUDIO]):
+ command = info["text"]
+ if not startswith_prefix(info["text"], prefix=[PREFIX.AUDIO, PREFIX.VOICE]):
return
- # reply a message with /audio
+ # reply a message with /audio or /voice
if message.reply_to_message:
message = message.reply_to_message
info = parse_msg(message, silent=True) # parse again
+ if info["mtype"] == "audio" and startswith_prefix(command, prefix=[PREFIX.AUDIO]):
+ await message.reply("🎧该消息已经为音频, 无需提取")
+ return
+ if info["mtype"] == "voice" and startswith_prefix(command, prefix=[PREFIX.VOICE]):
+ await message.reply("🎧该消息已经为语音, 无需提取")
+ return
- if info["mtype"] != "video":
+ if info["mtype"] not in ["video", "audio", "voice"]:
return
- msg = "🎬收到视频消息, 开始提取🎧音频..."
+ msg = f"[{info['mtype']}]收到消息, 开始提取🎧音频..."
if kwargs.get("show_progress"):
res = await send2tg(client, message, texts=msg, **kwargs)
kwargs["progress"] = res[0]
video: str = await message.download() # type: ignore
if Path(video).expanduser().resolve().is_file():
- await modify_progress(text="🎬视频下载完成, 提取🎧音频中...", force_update=True, **kwargs)
+ await modify_progress(text=f"[{info['mtype']}]下载完成, 提取🎧音频中...", force_update=True, **kwargs)
else:
- await modify_progress(text="🎬视频下载失败, 请稍后重试...", force_update=True, **kwargs)
+ await modify_progress(text=f"[{info['mtype']}]下载失败, 请稍后重试...", force_update=True, **kwargs)
return
path = convert_to_audio(video, ext="m4a")
if not Path(path).expanduser().resolve().is_file():
@@ -67,7 +74,10 @@ async def extract_audio_file(client: Client, message: Message, **kwargs) -> None
target_chat = kwargs["target_chat"] if kwargs.get("target_chat") else message.chat.id
reply_msg_id = kwargs.get("reply_msg_id", 0)
reply_parameters = get_reply_to(message.id, reply_msg_id)
- await client.send_audio(to_int(target_chat), Path(path).as_posix(), duration=duration, reply_parameters=reply_parameters)
+ if startswith_prefix(command, prefix=[PREFIX.AUDIO]):
+ await client.send_audio(to_int(target_chat), Path(path).as_posix(), duration=duration, reply_parameters=reply_parameters)
+ elif startswith_prefix(command, prefix=[PREFIX.VOICE]):
+ await client.send_voice(to_int(target_chat), Path(path).as_posix(), duration=duration, reply_parameters=reply_parameters)
Path(video).unlink(missing_ok=True)
path.unlink(missing_ok=True)
await modify_progress(del_status=True, **kwargs)
src/config.py
@@ -71,6 +71,7 @@ class PREFIX:
CRYPTO = os.getenv("PREFIX_CRYPTO", "/crypto").lower() # crypto only
STOCK = os.getenv("PREFIX_STOCK", "/stock").lower() # stock only
COMBINATION = os.getenv("PREFIX_COMBINATION", "/combine").lower()
+ VOICE = os.getenv("PREFIX_VOICE", "/voice").lower()
class API:
src/handler.py
@@ -278,7 +278,7 @@ def get_social_media_help(chat_id: int | str, ctype: str, prefixes: list[str] |
if permission["asr"]:
msg += f"\n🗣**语音转文字**: `{PREFIX.ASR}` 回复语音消息"
if permission["audio"]:
- msg += f"\n🎧**视频转音频**: `{PREFIX.AUDIO}` 回复视频消息"
+ msg += f"\n🎧**提取音频或语音**: `{PREFIX.AUDIO}` `{PREFIX.VOICE}` 回复消息"
if permission["combine"]:
msg += f"\n💬**合并历史**: `{PREFIX.COMBINATION} #N` 合并最近N条对话历史"
if permission["ocr"]: