Add 'Post to Discord' checkbox for Generate Only mode
This commit is contained in:
+4
-2
@@ -2972,8 +2972,9 @@ class TtsToy(Cog):
|
|||||||
mode_override = payload.get("mode_override") # per-request mode from web UI
|
mode_override = payload.get("mode_override") # per-request mode from web UI
|
||||||
voice_override = payload.get("voice_override") # per-request voice from web UI
|
voice_override = payload.get("voice_override") # per-request voice from web UI
|
||||||
skip_vc = payload.get("skip_vc", False)
|
skip_vc = payload.get("skip_vc", False)
|
||||||
|
skip_post = payload.get("skip_post", False)
|
||||||
guild_id_str = payload.get("guild_id", "")
|
guild_id_str = payload.get("guild_id", "")
|
||||||
log.info(f"[WebUI] speak_in_vc: user={user} job={job_id} guild={guild_id_str} mode_override={mode_override} voice_override={voice_override} skip_vc={skip_vc} text={text[:60]!r}")
|
log.info(f"[WebUI] speak_in_vc: user={user} job={job_id} guild={guild_id_str} mode_override={mode_override} voice_override={voice_override} skip_vc={skip_vc} skip_post={skip_post} text={text[:60]!r}")
|
||||||
|
|
||||||
webui_url = self._get_webui_url()
|
webui_url = self._get_webui_url()
|
||||||
secret = self._get_internal_secret()
|
secret = self._get_internal_secret()
|
||||||
@@ -3085,8 +3086,9 @@ class TtsToy(Cog):
|
|||||||
log.exception(f"[WebUI] VC playback failed for job {job_id}: {e}")
|
log.exception(f"[WebUI] VC playback failed for job {job_id}: {e}")
|
||||||
|
|
||||||
# Post transcript to Discord channel and mark job done
|
# Post transcript to Discord channel and mark job done
|
||||||
# Resolve the best guild ID for posting: login guild > VC guild > empty
|
# Post transcript to Discord channel (unless skip_post)
|
||||||
post_guild_id = guild_id_str or (str(member_guild.id) if member_guild else "")
|
post_guild_id = guild_id_str or (str(member_guild.id) if member_guild else "")
|
||||||
|
if not skip_post:
|
||||||
await self._handle_webui_post({
|
await self._handle_webui_post({
|
||||||
"job_id": job_id, "path": audio_path,
|
"job_id": job_id, "path": audio_path,
|
||||||
"text": text, "user": discord_name, "engine": mode,
|
"text": text, "user": discord_name, "engine": mode,
|
||||||
|
|||||||
@@ -401,6 +401,7 @@ def api_tts_generate():
|
|||||||
mode = data.get("mode") or user_mode_overrides.get(str(user_id), global_mode)
|
mode = data.get("mode") or user_mode_overrides.get(str(user_id), global_mode)
|
||||||
|
|
||||||
voice = data.get("voice") or None
|
voice = data.get("voice") or None
|
||||||
|
post_to_discord = data.get("post_to_discord", True)
|
||||||
job_id = str(uuid.uuid4())
|
job_id = str(uuid.uuid4())
|
||||||
_tts_jobs[job_id] = {"status": "pending", "text": text, "user": discord_name, "engine": mode}
|
_tts_jobs[job_id] = {"status": "pending", "text": text, "user": discord_name, "engine": mode}
|
||||||
|
|
||||||
@@ -411,6 +412,7 @@ def api_tts_generate():
|
|||||||
"mode_override": mode,
|
"mode_override": mode,
|
||||||
"voice_override": voice,
|
"voice_override": voice,
|
||||||
"skip_vc": True,
|
"skip_vc": True,
|
||||||
|
"skip_post": not post_to_discord,
|
||||||
"guild_id": _resolve_guild_id(),
|
"guild_id": _resolve_guild_id(),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -117,6 +117,9 @@
|
|||||||
<button class="btn btn-secondary" id="gen-only-btn" onclick="generateOnly()" style="display:none;">
|
<button class="btn btn-secondary" id="gen-only-btn" onclick="generateOnly()" style="display:none;">
|
||||||
<span id="gen-spinner" class="spin" style="display:none;"></span> Generate Only
|
<span id="gen-spinner" class="spin" style="display:none;"></span> Generate Only
|
||||||
</button>
|
</button>
|
||||||
|
<label style="display:inline-flex;align-items:center;gap:0.3rem;margin-left:0.75rem;cursor:pointer;">
|
||||||
|
<input type="checkbox" id="post-to-discord" checked> <span class="muted" style="font-size:0.85rem;">Post to Discord</span>
|
||||||
|
</label>
|
||||||
<span id="tts-status" class="muted"></span>
|
<span id="tts-status" class="muted"></span>
|
||||||
</div>
|
</div>
|
||||||
<div id="tts-result" style="margin-top:0.75rem;display:none;">
|
<div id="tts-result" style="margin-top:0.75rem;display:none;">
|
||||||
@@ -315,13 +318,14 @@ async function generateOnly() {
|
|||||||
if (!text) return;
|
if (!text) return;
|
||||||
const mode = document.getElementById('tts-mode-select').value;
|
const mode = document.getElementById('tts-mode-select').value;
|
||||||
const voice = document.getElementById('tts-voice-select').value || null;
|
const voice = document.getElementById('tts-voice-select').value || null;
|
||||||
|
const post_to_discord = document.getElementById('post-to-discord').checked;
|
||||||
const spinner = document.getElementById('gen-spinner');
|
const spinner = document.getElementById('gen-spinner');
|
||||||
const status = document.getElementById('tts-status');
|
const status = document.getElementById('tts-status');
|
||||||
const result = document.getElementById('tts-result');
|
const result = document.getElementById('tts-result');
|
||||||
spinner.style.display = 'inline-block';
|
spinner.style.display = 'inline-block';
|
||||||
status.textContent = 'Generating audio...';
|
status.textContent = 'Generating audio...';
|
||||||
result.style.display = 'none';
|
result.style.display = 'none';
|
||||||
const r = await apiFetch('/api/tts/generate', {method:'POST', body: JSON.stringify({text, mode, voice})});
|
const r = await apiFetch('/api/tts/generate', {method:'POST', body: JSON.stringify({text, mode, voice, post_to_discord})});
|
||||||
const {job_id, error} = await r.json();
|
const {job_id, error} = await r.json();
|
||||||
if (error) { spinner.style.display='none'; status.textContent = 'Error: ' + error; return; }
|
if (error) { spinner.style.display='none'; status.textContent = 'Error: ' + error; return; }
|
||||||
const poll = setInterval(async () => {
|
const poll = setInterval(async () => {
|
||||||
@@ -330,7 +334,7 @@ async function generateOnly() {
|
|||||||
if (job.status === 'done') {
|
if (job.status === 'done') {
|
||||||
clearInterval(poll);
|
clearInterval(poll);
|
||||||
spinner.style.display = 'none';
|
spinner.style.display = 'none';
|
||||||
status.textContent = 'Audio ready — posted to Discord channel.';
|
status.textContent = post_to_discord ? 'Audio ready — posted to Discord channel.' : 'Audio ready.';
|
||||||
document.getElementById('tts-audio').src = `/api/tts/${job_id}/audio`;
|
document.getElementById('tts-audio').src = `/api/tts/${job_id}/audio`;
|
||||||
result.style.display = 'block';
|
result.style.display = 'block';
|
||||||
} else if (job.status === 'error') {
|
} else if (job.status === 'error') {
|
||||||
|
|||||||
Reference in New Issue
Block a user