{"id":50990473,"url":"https://github.com/jmeltz/mootbot","last_synced_at":"2026-06-20T02:01:35.077Z","repository":{"id":346645679,"uuid":"1190949849","full_name":"jmeltz/mootbot","owner":"jmeltz","description":"mootbot!!! music bot for discord ","archived":false,"fork":false,"pushed_at":"2026-03-24T20:17:29.000Z","size":26,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-26T00:46:27.498Z","etag":null,"topics":["bot","discord","music-bot","soundcloud"],"latest_commit_sha":null,"homepage":"https://bot.moots.my","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jmeltz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-24T19:23:19.000Z","updated_at":"2026-03-24T20:25:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jmeltz/mootbot","commit_stats":null,"previous_names":["jmeltz/mootbot"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/jmeltz/mootbot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmeltz%2Fmootbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmeltz%2Fmootbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmeltz%2Fmootbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmeltz%2Fmootbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jmeltz","download_url":"https://codeload.github.com/jmeltz/mootbot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmeltz%2Fmootbot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34554510,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-20T02:00:06.407Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bot","discord","music-bot","soundcloud"],"created_at":"2026-06-20T02:01:34.267Z","updated_at":"2026-06-20T02:01:35.070Z","avatar_url":"https://github.com/jmeltz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MootBot\n\nA Discord bot for playing SoundCloud songs in voice channels. Unlike other SC bots, MootBot supports newer SoundCloud tracks that use HLS streaming instead of direct MP3 URLs.\n\n## How it works\n\nSoundCloud recently changed how uploaded tracks are stored — newer tracks no longer expose MP3 URLs in metadata and are streamed exclusively via HLS. MootBot handles this by:\n\n1. Dynamically extracting a SoundCloud client ID from their JS bundles\n2. Resolving track URLs via the SoundCloud API\n3. Fetching HLS playlists (M3U8) and downloading audio segments with retry logic\n4. Streaming segments through ffmpeg to transcode fMP4/AAC to Opus in real-time for Discord voice\n\nPlayback starts almost immediately — no need to buffer the entire track first.\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `/play \u003curl\u003e` | Play a SoundCloud track in your voice channel |\n| `/skip` | Skip the current track |\n| `/pause` | Pause playback |\n| `/resume` | Resume playback |\n| `/stop` | Stop playback, clear queue, leave channel |\n| `/queue` | Show the current queue |\n| `/np` | Show the currently playing track |\n\n## Setup\n\n### Prerequisites\n\n- Node.js 18+\n- A [Discord bot application](https://discord.com/developers/applications) with the **bot** scope and these permissions:\n  - Connect\n  - Speak\n  - Use Slash Commands\n\n### Install\n\n```bash\ngit clone https://github.com/jmeltz/mootbot.git\ncd mootbot\nnpm install\n```\n\n### Configure\n\n```bash\ncp .env.example .env\n```\n\nEdit `.env`:\n\n```\nDISCORD_TOKEN=your-bot-token\nDISCORD_CLIENT_ID=your-bot-client-id\nGUILD_ID=your-dev-server-id  # optional, for faster command registration during dev\n```\n\n### Run\n\n```bash\nnpm start\n```\n\n### Invite the bot\n\nReplace `YOUR_CLIENT_ID` with your bot's client ID:\n\n```\nhttps://discord.com/oauth2/authorize?client_id=YOUR_CLIENT_ID\u0026permissions=3145728\u0026scope=bot%20applications.commands\n```\n\n## Hosting\n\nAny VPS or always-on machine works. The bot needs a persistent connection so serverless platforms won't work. Use systemd or screen/tmux to keep it running:\n\n```bash\n# systemd\nsudo systemctl enable --now mootbot\n\n# or screen\nscreen -S mootbot\nnpm start\n# Ctrl+A, D to detach\n```\n\nffmpeg is bundled via `ffmpeg-static`, so no system install is needed.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmeltz%2Fmootbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjmeltz%2Fmootbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmeltz%2Fmootbot/lists"}