fix: let extra bots see peer music state for !similar/!tags
_current_meta now checks registry._bots for peer bot music state when the current bot has nothing playing. Fixes merlin reporting "Nothing playing" while derp is actively streaming. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -109,15 +109,23 @@ def _current_meta(bot) -> tuple[str, str]:
|
||||
"""Extract artist and title from the currently playing track.
|
||||
|
||||
Returns (artist, title). Either or both may be empty.
|
||||
Tries the music plugin's current track metadata, falling back to
|
||||
splitting the title on common separators.
|
||||
Tries the music plugin's current track metadata on this bot first,
|
||||
then checks peer bots (shared registry) so extra bots can see what
|
||||
the music bot is playing.
|
||||
"""
|
||||
music_ps = bot._pstate.get("music", {})
|
||||
current = music_ps.get("current")
|
||||
if current is None:
|
||||
return ("", "")
|
||||
raw_title = current.title or ""
|
||||
return _parse_title(raw_title)
|
||||
# Check this bot first, then peers
|
||||
candidates = [bot]
|
||||
for peer in getattr(getattr(bot, "registry", None), "_bots", {}).values():
|
||||
if peer is not bot:
|
||||
candidates.append(peer)
|
||||
for b in candidates:
|
||||
music_ps = getattr(b, "_pstate", {}).get("music", {})
|
||||
current = music_ps.get("current")
|
||||
if current is not None:
|
||||
raw_title = current.title or ""
|
||||
if raw_title:
|
||||
return _parse_title(raw_title)
|
||||
return ("", "")
|
||||
|
||||
|
||||
# -- Discovery orchestrator --------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user