Connect to the caller's voice channel when the bot is not in voice, and
move to the caller's channel if the bot is currently in a different one
(via Player.move_to). Previously it only connected when the bot had no
voice state, so it would not follow the user between channels.
Use the shared Red-Lavalink client directly instead of depending on
redbot.cogs.audio: import lavalink; connect via lavalink.connect();
gate WebUI playback on lavalink.get_all_nodes() instead of
get_cog('Audio'). Playback (get_player pause/save/restore) unchanged.
The lavalink client is now owned by the YTAudio cog.
The dectalk, morshu, and vox servers are managed entirely by systemd now, so
the bot no longer needs to inspect or manage them. Removed the stop and status
commands for all three, the unused dectalk_auto_start config, and the dead
server directory and process attributes. The cog keeps only the fixed ports it
uses to reach the services over HTTP.
Drop the dectalkstart, dectalkinstall, dectalkautotoggle, morshustart, and
voxstart commands along with the orphaned _start/_stop/_install helper methods
and the dectalk mode-switch auto-start path. The three TTS servers run as
independent systemd services; the stop and status commands now point at
systemctl.
The dectalk, morshu, and vox TTS servers now run as independent systemd
services on their fixed ports (33001/33002/33003). The cog no longer spawns
or kills them: start/stop helpers became reachability checks and no-ops, the
cog_load auto-start and cog_unload teardown were removed, and the start/stop/
status commands now point at systemctl. The HTTP client calls are unchanged.
- drop bundled Flask webui (now lives in scrapyard-website TtsToy)
- _take_pending_state_updates: pop pending commands/posts + refresh user
info under cross-process lock, matching the webui-side producer
user_guild_map was only written when a login token was consumed on the
webui login page. Users on stale session cookies never re-login, so
their jobs carried empty guild_id and TTS was posted to whatever global
channel happened to match instead of the server they logged in from.
Persist the guild as soon as the bot registers the token so
_resolve_guild_id() falls back to the correct login guild.
The bot posts job-status updates and login-token registration to the
public webui URL (ttstoy.kingstons-scrapyard.net) with a 5s timeout.
Under load, that WAN hop times out and jobs stay stuck 'pending' even
though audio was generated. Since the webui runs as a child process of
the bot on the same host, use http://127.0.0.1:8098 for these
server-to-server callbacks instead.
- New vox-server/server.py (HTTP API matching morshu-server pattern)
- Added voxstart/voxstop/voxstatus commands to ttstoy cog
- WebUI /api/tts/generate and /api/mc/tts now support VOX mode
- Cog_unload stops VOX server automatically