Fork of purnell569/MusicBot 0.7.1 (JMusicBot), kept here as a reliable
copy with a container image built and served from this Gitea.
- README retitled "$uicide Music Bot"; lineage table, Gitea image, Unraid
and release instructions. Nothing under src/ changes.
- Dockerfile: Maven stage on $BUILDPLATFORM (JAR is arch-neutral, so no
QEMU for the build), OCI labels point at this repo and record commit and
version via GIT_SHA/VERSION build args.
- docker/entrypoint.sh: check the data dir is writable up front (the bot's
own error for that is a misleading "another instance is running"), and
on a missing config.txt run the bot's generate-config and stop with
instructions instead of prompting on a console that does not exist.
- deploy/unraid/musicbot.xml: Unraid template, --user 99:100 default.
- .gitea/workflows/build-and-test.yml: mvn verify + docker build on push;
its presence makes Gitea ignore the GitHub-only workflows in .github/.
- scripts/build-and-publish-unraid.sh + docs/PUBLISHING.md: release
runbook (keychain-safe registry push, release with zipped JAR).
- docker-compose.example.yml points at the Gitea image.
Upstream's v0.7.1 tag is preserved as upstream/v0.7.1; this repository's
own release tag v0.7.1 is on this commit.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Based on JMusicBot by jagrosh (https://github.com/jagrosh/MusicBot),
via the maintained fork by arif-banai (https://github.com/arif-banai/MusicBot).
See NOTICE for attribution. Licensed under Apache 2.0.
YouTube-side changes had broken playback entirely. Fixes:
- Apply the remote signature cipher independently of OAuth. Deciphering and
authentication are unrelated, but the cipher was only configured when OAuth
was enabled, so the default install fell back to the bundled extractor and
failed with "Must find sig function from script: /s/player/<id>/...".
Now always applied, and configurable via playback.youtube.remoteCipher.url.
- Add the ANDROID client and order the client list by reliability. ANDROID is
currently the only client YouTube reliably streams to anonymously. WEB moves
last, as YouTube answers it with SABR-only responses carrying no playable
format ("No supported audio streams available, available types:").
- Detect sign-in failures across the whole exception graph. The existing hint
could never fire: it matched the aggregate AllClientsFailedException message
rather than the per-client reasons, and compared against an ASCII apostrophe
while YouTube sends U+2019.
- Track youtube-source past 1.18.2, which predates the TV client User-Agent fix
and the contentLength recovery fix.
Measured on previously failing tracks: 5/5 playing, stable across repeat runs
(was 1/5). No OAuth required. Adds 17 tests; 676 unit + 48 integration pass.