feat(discord): add /audio slash command with voce + text_sau_url params
Adds missing /audio slash command on Discord with: - voce: optional choices M1-M5 / F1-F5 with descriptions - text_sau_url: optional text or URL input - handles __AUDIO__: response by sending WAV as file attachment Telegram already had /audio fully implemented. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -909,6 +909,51 @@ def create_bot(config: Config) -> discord.Client:
|
|||||||
f"Error reading logs: {e}", ephemeral=True
|
f"Error reading logs: {e}", ephemeral=True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@tree.command(name="audio", description="TTS: convertește text sau URL în voice note")
|
||||||
|
@app_commands.describe(
|
||||||
|
voce="Voce (M1-M5 masculin, F1-F5 feminin; default M2)",
|
||||||
|
text_sau_url="Text direct, URL articol, sau gol pentru ultimul răspuns Echo",
|
||||||
|
)
|
||||||
|
@app_commands.choices(
|
||||||
|
voce=[
|
||||||
|
app_commands.Choice(name="M1 — Masculin 1", value="M1"),
|
||||||
|
app_commands.Choice(name="M2 — Masculin 2 (default)", value="M2"),
|
||||||
|
app_commands.Choice(name="M3 — Masculin 3", value="M3"),
|
||||||
|
app_commands.Choice(name="M4 — Masculin 4", value="M4"),
|
||||||
|
app_commands.Choice(name="M5 — Masculin 5", value="M5"),
|
||||||
|
app_commands.Choice(name="F1 — Feminin 1", value="F1"),
|
||||||
|
app_commands.Choice(name="F2 — Feminin 2", value="F2"),
|
||||||
|
app_commands.Choice(name="F3 — Feminin 3", value="F3"),
|
||||||
|
app_commands.Choice(name="F4 — Feminin 4", value="F4"),
|
||||||
|
app_commands.Choice(name="F5 — Feminin 5", value="F5"),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
async def audio_cmd(
|
||||||
|
interaction: discord.Interaction,
|
||||||
|
voce: str | None = None,
|
||||||
|
text_sau_url: str | None = None,
|
||||||
|
) -> None:
|
||||||
|
await interaction.response.defer()
|
||||||
|
args: list[str] = []
|
||||||
|
if voce:
|
||||||
|
args.append(voce)
|
||||||
|
if text_sau_url:
|
||||||
|
args.extend(text_sau_url.split())
|
||||||
|
result = await asyncio.to_thread(fast_dispatch, "audio", args)
|
||||||
|
if result and result.startswith("__AUDIO__:"):
|
||||||
|
wav_path = result[len("__AUDIO__:"):]
|
||||||
|
try:
|
||||||
|
await interaction.followup.send(
|
||||||
|
file=discord.File(wav_path, filename="echo-audio.wav")
|
||||||
|
)
|
||||||
|
finally:
|
||||||
|
try:
|
||||||
|
os.unlink(wav_path)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
await interaction.followup.send(result or "Eroare TTS.")
|
||||||
|
|
||||||
# --- Ralph commands (autonomous project execution) ---
|
# --- Ralph commands (autonomous project execution) ---
|
||||||
|
|
||||||
async def _autocomplete_by_status(
|
async def _autocomplete_by_status(
|
||||||
|
|||||||
Reference in New Issue
Block a user