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:
2026-05-27 06:00:54 +00:00
parent 0d2d5b860d
commit 574f9be5ea

View File

@@ -909,6 +909,51 @@ def create_bot(config: Config) -> discord.Client:
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) ---
async def _autocomplete_by_status(