Files
Miles WardandClaude Fable 5.1 e772eb7c2b
Build and Test / Build and Test (push) Canceled after 1m24s
Gitea copy: $uicide Music Bot — image, Unraid template, CI, publishing
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]>
2026-09-17 19:19:59 -04:00

75 lines
3.7 KiB
XML

<?xml version="1.0"?>
<!--
Unraid Docker template for $uicide Music Bot.
Drop this into /boot/config/plugins/dockerMan/templates-user/ on the Unraid
box, or add the repo as a template repository under Docker → Add Container.
Bridge networking is correct: the bot only makes outbound connections (to
Discord and to the audio sources) and listens on nothing, so no ports are
published and there is no web UI.
-->
<Container version="2">
<Name>MusicBot</Name>
<Repository>gitea.milesward.dev/mward4/musicbot:latest</Repository>
<Registry>https://gitea.milesward.dev/mward4/-/packages/container/musicbot</Registry>
<Network>bridge</Network>
<MyIP/>
<Shell>sh</Shell>
<Privileged>false</Privileged>
<Support>https://gitea.milesward.dev/mward4/MusicBot/issues</Support>
<Project>https://gitea.milesward.dev/mward4/MusicBot</Project>
<Overview>
$uicide Music Bot - a self-hosted Discord music bot with a clean interface.
A fork of JMusicBot (jagrosh, maintained by arif-banai, YouTube playback
fixed by purnell569), built from source and served from this Gitea.
FIRST RUN: start the container once with an empty data folder. It writes
a default config.txt there and stops. Edit that file - in the discord { }
block set token (your Discord bot token) and owner (your Discord user ID)
- then start the container again. Playlists/ and serversettings.json live
in the same folder. If the log says "/musicbot is not writable by uid 99",
run chown -R 99:100 /mnt/user/appdata/musicbot from the Unraid terminal
and start again.
DISCORD SIDE: create an application at discord.com/developers, add a Bot,
and under Privileged Gateway Intents turn ON "Message Content Intent". The
bot will not see commands without it. Invite it to your server with the
bot scope.
PERMISSIONS: Extra Parameters runs the bot as Unraid's usual nobody:users
(99:100), so a freshly created appdata folder just works with no chown
step. Remove the --user flag to run as the image's own non-root user
(10001) instead; then chown -R 10001:10001 the data folder once.
VERSIONS: :latest is the newest release. Every release also has its own
image tag (e.g. 0.7.1) that can be pinned instead; the Releases page on
Gitea lists them with notes. Java 25 and glibc 2.38+ are inside the image,
nothing to install on the host.
</Overview>
<Category>MediaApp:Music Tools:</Category>
<WebUI/>
<TemplateURL>https://gitea.milesward.dev/mward4/MusicBot/raw/branch/main/deploy/unraid/musicbot.xml</TemplateURL>
<Icon>https://i.imgur.com/zrE80HY.png</Icon>
<ExtraParams>--user 99:100</ExtraParams>
<PostArgs/>
<CPUset/>
<DateInstalled/>
<DonateText/>
<DonateLink/>
<Requires>
A Discord bot token (discord.com/developers) with the Message Content
Intent enabled, and your Discord user ID for the owner setting. Both go
into config.txt in the data folder after the first run.
</Requires>
<Config Name="Data" Target="/musicbot"
Default="/mnt/user/appdata/musicbot"
Mode="rw"
Description="config.txt, serversettings.json and Playlists/. Generated on first run; edit config.txt here to add your bot token."
Type="Path" Display="always" Required="true" Mask="false">/mnt/user/appdata/musicbot</Config>
<Config Name="JAVA_OPTS" Target="JAVA_OPTS" Default="-XX:+UseZGC -XX:+AlwaysPreTouch"
Mode=""
Description="JVM flags. The default is ZGC with pre-touched memory for stutter-free audio. Add -Xms/-Xmx to cap the heap, e.g. -Xms256m -Xmx512m -XX:+UseZGC -XX:+AlwaysPreTouch"
Type="Variable" Display="advanced" Required="false" Mask="false">-XX:+UseZGC -XX:+AlwaysPreTouch</Config>
</Container>