My private music bot

Related tags

Video/Audio mikmusic
Overview

Mik Music

Mik's cool self-hosted music-bot.

Disclaimer

For legal reasons: There is no official public instance of this bot, so don't bother asking

Platform Support

  • All native Lavaplayer platforms
  • Spotify

Features

  • slash-commands for everything
  • Queue songs from context actions (Also supports Discord file uploads) (DEMO)
  • Music channel ( Like Hydra) (DEMO)
  • Bot internal playlist system (Supports import from other sources, just do /playlist add name: <name> query: <existing yt/spotify playlist>)
  • i18n (although most strings are only English as of rn)
  • Song guizes (Inpired by the AirConsole game MusicGuess)
  • UNO as a minigame - Just don't even ask why

Deployment

Requirements

Required permissions: 328576854080

Example Environment file

.env
ENVIRONMENT=PRODUCTION
SENTRY_TOKEN=<>
DISCORD_TOKEN=<>
GAMES=p: some funny games,w: unfunny funny compilations on YouTube,l: to silence,p: lästert über aktuelle Musik,p: lästert über aktuelle Musik,p: Würde lieber Justin Bieber hören,p: Würde lieber Justin Bieber hören
MONGO_URL=mongodb://bot:bot@mongo
MONGO_DATABASE=bot_prod
LOG_LEVEL=DEBUG
YOUTUBE_API_KEY=<>
SPOTIFY_CLIENT_SECRET=<>
SPOTIFY_CLIENT_ID=<>
REDEPLOY_HOST=<>
REDEPLOY_TOKEN=<>
BOT_OWNERS=416902379598774273
OWNER_GUILD=<>
HAPPI_KEY=<token from happi.dev for lyrics>

Starting the bot

Docker image from: https://github.com/DRSchlaubi/mikmusic/pkgs/container/mikmusic%2Fbot

  • Clone this repo
  • Run docker-compose up -d mongo
  • Run docker-compose exec mongo mongo -u bot -p bot
  • Run this mongo shell commands
use bot_prod
db.createCollection("lavalink_servers")
db.lavalink_servers.insertOne({"url": "wss://...", "password": "<password>"})
  • Run docker-compose up -d

Redeployment

Section inspired by Devcordbot

This section describes how to properly setup /redeploy Service installation: https://github.com/adnanh/webhook#installation

Env vars REDEPLOY_HOST,REDEPLOY_TOKEN,OWNER_GUILD and BOT_OWNERS need to be set

hooks.json

{
  "id": "redeploy-mikmusic",
  "execute-command": "/usr/bin/sh",
  "pass-arguments-to-command": [
    {
      "source": "string",
      "name": "/path/to/mikmusic/redeploy.sh"
    }
  ],
  "command-working-directory": "/path/to/mikmusic",
  "trigger-rule": {
    "match": {
      "type": "value",
      "value": "YOUR_SECRET_TOKEN",
      "parameter": {
        "source": "header",
        "name": "Redeploy-Token"
      }
    }
  }
}

redeploy.sh

#!/usr/bin/env sh
docker-compose pull && docker-compose up -d
Guild verification

If you want to run a "public" instance of this bot, but limit the people who can use it you can turn on verification mode

.env changes

VERIFIED_MODE=true
VERIFY_SERVER_URL=<The webserver>
VERIFY_CLIENT_ID=<Discord client id>
VERIFY_CLIENT_SECRET=<Discord client secret (NOT BOT TOKEN)>
VERIFY_SERVER_HOST=0.0.0.0

OAuth2 Grant

Set require oauth 2 grant to true in the Discord bot settings

Note It's recommended to setup a reverse proxy for the verification server

For developers

JDK is required it can be obtained here (Recommended for Windows but works everywhere) and here (Recommended for Linux/Mac)

Please set the ENVIRONMENT env var to DEVELOPMENT whilst developing the bot

Comments
  • excited with code 1

    excited with code 1

    I'm having a bit of trouble getting this bot to run, I have docker and lavalink installed, I have created changed my .env and created the docker-compose.yml as well when I try to run the bot it just ends up exciting with code 1 would you be able to point and laughing at me before telling me what I'm doing wrong?

    Microsoft Windows [Version 10.0.19044.1889] (c) Microsoft Corporation. All rights reserved.

    C:\WINDOWS\system32>cd C:\Music-Bot-2

    C:\Music-Bot-2>docker-compose up -d [+] Running 16/16

    • bot Pulled 23.4s
      • 675920708c8b Pull complete 7.7s
      • 8d642f39b108 Pull complete 8.3s
      • 9f4772666698 Pull complete 15.4s
      • b3ad047f9def Pull complete 15.6s
      • 4844e895491a Pull complete 15.7s
      • bc78e3c069ed Pull complete 21.9s
    • mongo Pulled 42.1s
      • 6f9c8c301e0f Pull complete 5.0s
      • 73738965c4ce Pull complete 6.7s
      • 7fd6635b9ddf Pull complete 8.7s
      • 73a471eaa4ad Pull complete 9.6s
      • bcf274af89b0 Pull complete 10.7s
      • 04fc489f2a3b Pull complete 11.6s
      • 6eff8a505292 Pull complete 36.6s
      • a5ef4431fce7 Pull complete 36.7s [+] Running 4/4
    • Network music-bot-2_default Created 0.6s
    • Volume "music-bot-2_mongo-data" Created 0.0s
    • Container music-bot-2-mongo-1 Started 7.6s
    • Container music-bot-2-bot-1 Started 2.0s

    [+] Running 2/2docker-compose up

    • Container music-bot-2-mongo-1 Recreated 0.6s
    • Container music-bot-2-bot-1 Recreated 0.2s Attaching to music-bot-2-bot-1, music-bot-2-mongo-1 music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.389+00:00"},"s":"I", "c":"NETWORK", "id":4915701, "ctx":"-","msg":"Initialized wire specification","attr":{"spec":{"incomingExternalClient":{"minWireVersion":0,"maxWireVersion":17},"incomingInternalClient":{"minWireVersion":0,"maxWireVersion":17},"outgoing":{"minWireVersion":6,"maxWireVersion":17},"isInternalClient":true}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.389+00:00"},"s":"I", "c":"CONTROL", "id":23285, "ctx":"main","msg":"Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'"} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.390+00:00"},"s":"I", "c":"NETWORK", "id":4648601, "ctx":"main","msg":"Implicit TCP FastOpen unavailable. If TCP FastOpen is required, set tcpFastOpenServer, tcpFastOpenClient, and tcpFastOpenQueueSize."} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.390+00:00"},"s":"I", "c":"REPL", "id":5123008, "ctx":"main","msg":"Successfully registered PrimaryOnlyService","attr":{"service":"TenantMigrationDonorService","namespace":"config.tenantMigrationDonors"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.390+00:00"},"s":"I", "c":"REPL", "id":5123008, "ctx":"main","msg":"Successfully registered PrimaryOnlyService","attr":{"service":"TenantMigrationRecipientService","namespace":"config.tenantMigrationRecipients"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.390+00:00"},"s":"I", "c":"REPL", "id":5123008, "ctx":"main","msg":"Successfully registered PrimaryOnlyService","attr":{"service":"ShardSplitDonorService","namespace":"config.tenantSplitDonors"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.390+00:00"},"s":"I", "c":"CONTROL", "id":5945603, "ctx":"main","msg":"Multi threading initialized"} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"CONTROL", "id":4615611, "ctx":"initandlisten","msg":"MongoDB starting","attr":{"pid":1,"port":27017,"dbPath":"/data/db","architecture":"64-bit","host":"5a9af1a27d43"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"CONTROL", "id":23403, "ctx":"initandlisten","msg":"Build Info","attr":{"buildInfo":{"version":"6.0.1","gitVersion":"32f0f9c88dc44a2c8073a5bd47cf779d4bfdee6b","openSSLVersion":"OpenSSL 1.1.1f 31 Mar 2020","modules":[],"allocator":"tcmalloc","environment":{"distmod":"ubuntu2004","distarch":"x86_64","target_arch":"x86_64"}}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"CONTROL", "id":51765, "ctx":"initandlisten","msg":"Operating System","attr":{"os":{"name":"Ubuntu","version":"20.04"}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"CONTROL", "id":21951, "ctx":"initandlisten","msg":"Options set by command line","attr":{"options":{"net":{"bindIp":"*"},"security":{"authorization":"enabled"}}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"STORAGE", "id":22270, "ctx":"initandlisten","msg":"Storage engine to use detected by data files","attr":{"dbpath":"/data/db","storageEngine":"wiredTiger"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"STORAGE", "id":22297, "ctx":"initandlisten","msg":"Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem","tags":["startupWarnings"]} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"STORAGE", "id":22315, "ctx":"initandlisten","msg":"Opening WiredTiger","attr":{"config":"create,cache_size=25163M,session_max=33000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,remove=true,path=journal,compressor=snappy),builtin_extension_config=(zstd=(compression_level=6)),file_manager=(close_idle_time=600,close_scan_interval=10,close_handle_minimum=2000),statistics_log=(wait=0),json_output=(error,message),verbose=[recovery_progress:1,checkpoint_progress:1,compact_progress:1,backup:0,checkpoint:0,compact:0,evict:0,history_store:0,recovery:0,rts:0,salvage:0,tiered:0,timestamp:0,transaction:0,verify:0,log:0],"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.655+00:00"},"s":"I", "c":"STORAGE", "id":4795906, "ctx":"initandlisten","msg":"WiredTiger opened","attr":{"durationMillis":264}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.655+00:00"},"s":"I", "c":"RECOVERY", "id":23987, "ctx":"initandlisten","msg":"WiredTiger recoveryTimestamp","attr":{"recoveryTimestamp":{"$timestamp":{"t":0,"i":0}}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.655+00:00"},"s":"I", "c":"WT", "id":4366408, "ctx":"initandlisten","msg":"No table logging settings modifications are required for existing WiredTiger tables","attr":{"loggingEnabled":true}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.674+00:00"},"s":"W", "c":"CONTROL", "id":22178, "ctx":"initandlisten","msg":"/sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'","tags":["startupWarnings"]} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.674+00:00"},"s":"W", "c":"CONTROL", "id":5123300, "ctx":"initandlisten","msg":"vm.max_map_count is too low","attr":{"currentValue":65530,"recommendedMinimum":1677720,"maxConns":838860},"tags":["startupWarnings"]} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.675+00:00"},"s":"I", "c":"NETWORK", "id":4915702, "ctx":"initandlisten","msg":"Updated wire specification","attr":{"oldSpec":{"incomingExternalClient":{"minWireVersion":0,"maxWireVersion":17},"incomingInternalClient":{"minWireVersion":0,"maxWireVersion":17},"outgoing":{"minWireVersion":6,"maxWireVersion":17},"isInternalClient":true},"newSpec":{"incomingExternalClient":{"minWireVersion":0,"maxWireVersion":17},"incomingInternalClient":{"minWireVersion":17,"maxWireVersion":17},"outgoing":{"minWireVersion":17,"maxWireVersion":17},"isInternalClient":true}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.675+00:00"},"s":"I", "c":"REPL", "id":5853300, "ctx":"initandlisten","msg":"current featureCompatibilityVersion value","attr":{"featureCompatibilityVersion":"6.0","context":"startup"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.675+00:00"},"s":"I", "c":"STORAGE", "id":5071100, "ctx":"initandlisten","msg":"Clearing temp directory"} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.675+00:00"},"s":"I", "c":"CONTROL", "id":20536, "ctx":"initandlisten","msg":"Flow Control is enabled on this deployment"} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.675+00:00"},"s":"I", "c":"FTDC", "id":20625, "ctx":"initandlisten","msg":"Initializing full-time diagnostic data capture","attr":{"dataDirectory":"/data/db/diagnostic.data"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.677+00:00"},"s":"I", "c":"REPL", "id":6015317, "ctx":"initandlisten","msg":"Setting new configuration state","attr":{"newState":"ConfigReplicationDisabled","oldState":"ConfigPreStart"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.677+00:00"},"s":"I", "c":"STORAGE", "id":22262, "ctx":"initandlisten","msg":"Timestamp monitor starting"} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.678+00:00"},"s":"I", "c":"NETWORK", "id":23015, "ctx":"listener","msg":"Listening on","attr":{"address":"/tmp/mongodb-27017.sock"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.678+00:00"},"s":"I", "c":"NETWORK", "id":23015, "ctx":"listener","msg":"Listening on","attr":{"address":"0.0.0.0"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.678+00:00"},"s":"I", "c":"NETWORK", "id":23016, "ctx":"listener","msg":"Waiting for connections","attr":{"port":27017,"ssl":"off"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:12.788+00:00"},"s":"I", "c":"NETWORK", "id":22943, "ctx":"listener","msg":"Connection accepted","attr":{"remote":"172.22.0.3:46678","uuid":"04e2901a-f80a-4f53-8c58-65732906073d","connectionId":1,"connectionCount":1}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:12.788+00:00"},"s":"I", "c":"NETWORK", "id":22943, "ctx":"listener","msg":"Connection accepted","attr":{"remote":"172.22.0.3:46676","uuid":"3338b9a5-eb82-49a3-9e0d-5f6a0545e29e","connectionId":2,"connectionCount":2}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:12.793+00:00"},"s":"I", "c":"NETWORK", "id":51800, "ctx":"conn2","msg":"client metadata","attr":{"remote":"172.22.0.3:46676","client":"conn2","doc":{"driver":{"name":"mongo-java-driver|reactive-streams","version":"4.7.1"},"os":{"type":"Linux","name":"Linux","architecture":"amd64","version":"5.10.16.3-microsoft-standard-WSL2"},"platform":"Java/IBM Corporation/18.0.2+9"}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:12.793+00:00"},"s":"I", "c":"NETWORK", "id":51800, "ctx":"conn1","msg":"client metadata","attr":{"remote":"172.22.0.3:46678","client":"conn1","doc":{"driver":{"name":"mongo-java-driver|reactive-streams","version":"4.7.1"},"os":{"type":"Linux","name":"Linux","architecture":"amd64","version":"5.10.16.3-microsoft-standard-WSL2"},"platform":"Java/IBM Corporation/18.0.2+9"}}} music-bot-2-bot-1 | 2022-09-10 00:30:12.787 [main] INFO org.mongodb.driver.client - MongoClient with metadata {"driver": {"name": "mongo-java-driver|reactive-streams", "version": "4.7.1"}, "os": {"type": "Linux", "name": "Linux", "architecture": "amd64", "version": "5.10.16.3-microsoft-standard-WSL2"}, "platform": "Java/IBM Corporation/18.0.2+9"} created with settings MongoClientSettings{readPreference=primary, writeConcern=WriteConcern{w=null, wTimeout=null ms, journal=null}, retryWrites=true, retryReads=true, readConcern=ReadConcern{level=null}, credential=MongoCredential{mechanism=null, userName='bot', source='admin', password=, mechanismProperties=}, streamFactoryFactory=null, commandListeners=[], codecRegistry=ProvidersCodecRegistry{codecProviders=[ProvidersCodecRegistry{codecProviders=[ValueCodecProvider{}, BsonValueCodecProvider{}, DBRefCodecProvider{}, DBObjectCodecProvider{}, DocumentCodecProvider{}, IterableCodecProvider{}, MapCodecProvider{}, GeoJsonCodecProvider{}, GridFSFileCodecProvider{}, Jsr310CodecProvider{}, JsonObjectCodecProvider{}, BsonCodecProvider{}, EnumCodecProvider{}, com.mongodb.Jep395RecordCodecProvider@62b32d6c]}, org.litote.kmongo.service.CustomCodecProvider@c6960ffb, org.litote.kmongo.serialization.SerializationClassMappingTypeService$coreCodecRegistry$1@5a6a862c]}, clusterSettings={hosts=[mongo:27017], srvServiceName=mongodb, mode=SINGLE, requiredClusterType=UNKNOWN, requiredReplicaSetName='null', serverSelector='null', clusterListeners='[]', serverSelectionTimeout='30000 ms', localThreshold='30000 ms'}, socketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=0, receiveBufferSize=0, sendBufferSize=0}, heartbeatSocketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=10000, receiveBufferSize=0, sendBufferSize=0}, connectionPoolSettings=ConnectionPoolSettings{maxSize=100, minSize=0, maxWaitTimeMS=120000, maxConnectionLifeTimeMS=0, maxConnectionIdleTimeMS=0, maintenanceInitialDelayMS=0, maintenanceFrequencyMS=60000, connectionPoolListeners=[], maxConnecting=2}, serverSettings=ServerSettings{heartbeatFrequencyMS=10000, minHeartbeatFrequencyMS=500, serverListeners='[]', serverMonitorListeners='[]'}, sslSettings=SslSettings{enabled=false, invalidHostNameAllowed=false, context=null}, applicationName='null', compressorList=[], uuidRepresentation=UNSPECIFIED, serverApi=null, autoEncryptionSettings=null, contextProvider=null} music-bot-2-bot-1 | 2022-09-10 00:30:12.806 [cluster-ClusterId{value='631bda94ba7f74728e753c78', description='null'}-mongo:27017] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:1, serverValue:2}] to mongo:27017 music-bot-2-bot-1 | 2022-09-10 00:30:12.806 [cluster-rtt-ClusterId{value='631bda94ba7f74728e753c78', description='null'}-mongo:27017] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:2, serverValue:1}] to mongo:27017 music-bot-2-bot-1 | 2022-09-10 00:30:12.806 [cluster-ClusterId{value='631bda94ba7f74728e753c78', description='null'}-mongo:27017] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=mongo:27017, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=17, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=14144669} music-bot-2-bot-1 | 2022-09-10 00:30:12.822 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] music-bot-2-bot-1 | 2022-09-10 00:30:12.823 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] music-bot-2-bot-1 | 2022-09-10 00:30:12.825 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.7.0 in 'deployment' mode music-bot-2-bot-1 | 2022-09-10 00:30:12.856 [main] DEBUG org.pf4j.AbstractPluginManager - Lookup plugins in '[/usr/app/plugins]' music-bot-2-bot-1 | 2022-09-10 00:30:12.861 [main] INFO org.pf4j.AbstractPluginManager - No plugins music-bot-2-bot-1 | 2022-09-10 00:30:12.861 [main] DEBUG d.s.m.core.plugin.PluginUpdater - No updates found music-bot-2-bot-1 | 2022-09-10 00:30:12.861 [main] DEBUG o.p.update.DefaultUpdateRepository - Read plugins of 'c4ea153ee891e283' repository from 'https://storage.googleapis.com/mikbot-plugins/plugins.json' music-bot-2-bot-1 | 2022-09-10 00:30:13.678 [main] DEBUG o.p.update.DefaultUpdateRepository - Found 25 plugins in repository 'c4ea153ee891e283' music-bot-2-bot-1 | 2022-09-10 00:30:13.681 [main] DEBUG d.s.m.core.plugin.PluginLoader - Built translation provider graph: {} music-bot-2-bot-1 | 2022-09-10 00:30:13.703 [main] DEBUG org.pf4j.AbstractExtensionFinder - Finding extensions of extension point 'dev.schlaubi.musicbot.core.sentry.SentryExtensionPoint' music-bot-2-bot-1 | 2022-09-10 00:30:13.703 [main] DEBUG org.pf4j.LegacyExtensionFinder - Reading extensions storages from classpath music-bot-2-bot-1 | 2022-09-10 00:30:13.703 [main] DEBUG org.pf4j.LegacyExtensionFinder - Read 'file:/usr/app/lib/pf4j-update-2.3.0.jar!/META-INF/extensions.idx' music-bot-2-bot-1 | 2022-09-10 00:30:13.704 [main] DEBUG org.pf4j.AbstractExtensionFinder - No extensions found music-bot-2-bot-1 | 2022-09-10 00:30:13.704 [main] DEBUG org.pf4j.LegacyExtensionFinder - Reading extensions storages from plugins music-bot-2-bot-1 | 2022-09-10 00:30:13.704 [main] DEBUG d.s.m.c.p.DependencyCheckingExtensionFinder - Finding extensions of extension point 'dev.schlaubi.musicbot.core.sentry.SentryExtensionPoint' for plugin 'null' music-bot-2-bot-1 | 2022-09-10 00:30:13.705 [main] DEBUG org.pf4j.AbstractExtensionFinder - No extensions found for extension point 'dev.schlaubi.musicbot.core.sentry.SentryExtensionPoint' music-bot-2-bot-1 | Exception in thread "main" dev.kord.core.exception.KordInitializationException: Something went wrong while initializing Kord, make sure the bot token you entered is valid.{"message": "401: Unauthorized", "code": 0} music-bot-2-bot-1 | music-bot-2-bot-1 | at dev.kord.core.builder.kord.KordBuilder.getGatewayInfo(KordBuilder.kt:223) music-bot-2-bot-1 | at dev.kord.core.builder.kord.KordBuilder.access$getGatewayInfo(KordBuilder.kt:61) music-bot-2-bot-1 | at dev.kord.core.builder.kord.KordBuilder$getGatewayInfo$1.invokeSuspend(KordBuilder.kt) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:14) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:62) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:14) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:62) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:14) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:62) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:14.318+00:00"},"s":"I", "c":"-", "id":20883, "ctx":"conn2","msg":"Interrupted operation as its client disconnected","attr":{"opId":28}} music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112) music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:14.319+00:00"},"s":"I", "c":"NETWORK", "id":22944, "ctx":"conn1","msg":"Connection ended","attr":{"remote":"172.22.0.3:46678","uuid":"04e2901a-f80a-4f53-8c58-65732906073d","connectionId":1,"connectionCount":1}} music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:14) music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:14.319+00:00"},"s":"I", "c":"NETWORK", "id":22944, "ctx":"conn2","msg":"Connection ended","attr":{"remote":"172.22.0.3:46676","uuid":"3338b9a5-eb82-49a3-9e0d-5f6a0545e29e","connectionId":2,"connectionCount":0}} music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:62) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:14) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:62) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:178) music-bot-2-bot-1 | at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:166) music-bot-2-bot-1 | at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:397) music-bot-2-bot-1 | at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:431)music-bot-2-bot-1 | at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:420) music-bot-2-bot-1 | at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:328)music-bot-2-bot-1 | at kotlinx.coroutines.ResumeAwaitOnCompletion.invoke(JobSupport.kt:1413) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1520) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath(JobSupport.kt:906) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.tryMakeCompleting(JobSupport.kt:863) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.makeCompletingOnce$kotlinx_coroutines_core(JobSupport.kt:828) music-bot-2-bot-1 | at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:100) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at kotlinx.coroutines.UndispatchedCoroutine.afterResume(CoroutineContext.kt:233) music-bot-2-bot-1 | at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:102) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) music-bot-2-bot-1 | at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42) music-bot-2-bot-1 | at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95) music-bot-2-bot-1 | at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570) music-bot-2-bot-1 | at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) music-bot-2-bot-1 | at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677) music-bot-2-bot-1 | at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664) music-bot-2-bot-1 exited with code 1
    opened by QuantumRage100 10
  • Controlled games can't edit/resend controls

    Controlled games can't edit/resend controls

    Editing ephemerals follow-ups got removed yesterday (see https://github.com/discord/discord-api-docs/issues/4414). We're currently investigating new ways to achieve the same behavior. One way would be to not use followups for controls, which would require the auto-resend to use a button instead, since you can no longer follow up

    bug freezer 
    opened by DRSchlaubi 6
  • VoteBot: Cannot close a poll after message deletion

    VoteBot: Cannot close a poll after message deletion

    It seems that you cannot close a poll in the event that its containing message was deleted. Is there a fix for this? If not, maybe a fix could be implemented wherein attempting to close a poll with a message ID that doesn't exist will simply remove the poll from the list, or something similar?

    Votebot 
    opened by Z8MB1E 3
  • Voice channel leave behaviour

    Voice channel leave behaviour

    Currently the bot leaves immediately if there is no song remaining in the queue. In my opinion it would be nice if one could configure a timeout which has to exceed before he does so.

    He also does not stop playing music if no user is left in the voice channel which wastes some server resources. This would also be a nice thing to implement.

    enhancement good first issue 
    opened by lus 3
  • chore(deps): update dependency dev.schlaubi:gradle-plugin to v2

    chore(deps): update dependency dev.schlaubi:gradle-plugin to v2

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | dev.schlaubi:gradle-plugin | 1.0.0 -> 2.5.0 | age | adoption | passing | confidence |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 2
  • chore(deps): update dependency org.jetbrains.kotlinx:kotlinx-datetime to v0.3.3

    chore(deps): update dependency org.jetbrains.kotlinx:kotlinx-datetime to v0.3.3

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.jetbrains.kotlinx:kotlinx-datetime | 0.3.2 -> 0.3.3 | age | adoption | passing | confidence |


    Release Notes

    Kotlin/kotlinx-datetime

    v0.3.3

    • Just updated Kotlin dependency to 1.7.0-Beta and kotlinx.serialization to 1.3.2

    Configuration

    📅 Schedule: At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    freezer 
    opened by renovate[bot] 2
  • Queuing bug

    Queuing bug

    Sometimes when I try to queue a song the bot simply starts playing it while skipping the current playing one. I can't really say for sure why that happens as it does not seem like there are any error messages logged in that case.

    bug 
    opened by lus 2
  • chore(deps): update com.kotlindiscord.kord.extensions to v1.5.3-snapshot - autoclosed

    chore(deps): update com.kotlindiscord.kord.extensions to v1.5.3-snapshot - autoclosed

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | com.kotlindiscord.kord.extensions:annotation-processor | 1.5.3-MIKBOT-SNAPSHOT -> 1.5.3-SNAPSHOT | age | adoption | passing | confidence | | com.kotlindiscord.kord.extensions:unsafe | 1.5.3-MIKBOT-SNAPSHOT -> 1.5.3-SNAPSHOT | age | adoption | passing | confidence | | com.kotlindiscord.kord.extensions:kord-extensions | 1.5.3-MIKBOT-SNAPSHOT -> 1.5.3-SNAPSHOT | age | adoption | passing | confidence |


    Configuration

    📅 Schedule: At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    freezer 
    opened by renovate[bot] 1
  • add role only when new joining members accept the rules of membership screening

    add role only when new joining members accept the rules of membership screening

    Previously when a new Member joined, the bot gave the Role to the user and the Membership screening got skipped because discord skips it when the user receives a role

    opened by StckOverflw 1
  • ClassCastException: java.lang.String incompatible with dev.kord.core.entity.Message

    ClassCastException: java.lang.String incompatible with dev.kord.core.entity.Message

    Sentry Issue: BOT-V2-T

    ClassCastException: java.lang.String incompatible with dev.kord.core.entity.Message
        at space.votebot.command.PollArguments$pollMessage$2$1.invoke(PollArgument.kt)
        at com.kotlindiscord.kord.extensions.commands.application.slash.SlashCommand.autoComplete$autoComplete(SlashCommand.kt:162)
        at com.kotlindiscord.kord.extensions.commands.application.slash.SlashCommand.autoComplete$suspendImpl(SlashCommand.kt:165)
        at com.kotlindiscord.kord.extensions.commands.application.slash.SlashCommand.autoComplete(SlashCommand.kt)
        at com.kotlindiscord.kord.extensions.commands.application.DefaultApplicationCommandRegistry.handle$suspendImpl(DefaultApplicationCommandRegistry.kt:410)
    ...
    (11 additional frame(s) were not displayed)
    
    opened by sentry-io[bot] 1
  • Sponsorblock exception

    Sponsorblock exception

    2022-01-07T21:12:51.563397345Z Exception in thread "DefaultDispatcher-worker-12" java.lang.NullPointerException: Cannot invoke "java.lang.Object.hashCode()" because "<parameter1>" is null
    2022-01-07T21:12:51.563699070Z at java.base/java.util.concurrent.ConcurrentHashMap.replaceNode(Unknown Source)
    2022-01-07T21:12:51.563788930Z at java.base/java.util.concurrent.ConcurrentHashMap.remove(Unknown Source)
    2022-01-07T21:12:51.563863192Z at dev.schlaubi.mikmusic.sponsorblock.SponsorBlockKt.deleteSponsorBlockCache(SponsorBlock.kt:53)
    2022-01-07T21:12:51.564095364Z at dev.schlaubi.mikmusic.player.MusicPlayer.onTrackEnd(MusicPlayer.kt:232)
    2022-01-07T21:12:51.564331975Z at dev.schlaubi.mikmusic.player.MusicPlayer.access$onTrackEnd(MusicPlayer.kt:34)
    2022-01-07T21:12:51.564556161Z at dev.schlaubi.mikmusic.player.MusicPlayer$2.invoke(MusicPlayer.kt:59)
    2022-01-07T21:12:51.564786440Z at dev.schlaubi.mikmusic.player.MusicPlayer$2.invoke(MusicPlayer.kt:59)
    2022-01-07T21:12:51.564963307Z at dev.schlaubi.mikmusic.player.MusicPlayer$special$$inlined$on$default$2$1.invokeSuspend(EventSource.kt:43)
    2022-01-07T21:12:51.565288025Z at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    2022-01-07T21:12:51.565613665Z at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    2022-01-07T21:12:51.565696052Z at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39)
    2022-01-07T21:12:51.565701803Z at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
    2022-01-07T21:12:51.565704217Z at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    2022-01-07T21:12:51.565706553Z at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
    2022-01-07T21:12:51.565708937Z at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    2022-01-07T21:12:51.565711081Z at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
    
    bug 
    opened by DRSchlaubi 1
  • fix(deps): update dependency se.michaelthelin.spotify:spotify-web-api-java to v7.3.0

    fix(deps): update dependency se.michaelthelin.spotify:spotify-web-api-java to v7.3.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | se.michaelthelin.spotify:spotify-web-api-java | 7.2.2 -> 7.3.0 | age | adoption | passing | confidence |


    Release Notes

    spotify-web-api-java/spotify-web-api-java

    v7.3.0

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • chore(deps): update google-github-actions/setup-gcloud action to v1

    chore(deps): update google-github-actions/setup-gcloud action to v1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | google-github-actions/setup-gcloud | action | major | v0 -> v1 |


    Release Notes

    google-github-actions/setup-gcloud

    v1

    Compare Source

    This is the floating v1 release.


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • chore(deps): update google-github-actions/auth action to v1

    chore(deps): update google-github-actions/auth action to v1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | google-github-actions/auth | action | major | v0 -> v1 |


    Release Notes

    google-github-actions/auth

    v1

    Compare Source

    Floating v1 alias


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • fix(deps): update dependency org.pf4j:pf4j to v3.8.0

    fix(deps): update dependency org.pf4j:pf4j to v3.8.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.pf4j:pf4j (source) | 3.7.0 -> 3.8.0 | age | adoption | passing | confidence |


    Release Notes

    pf4j/pf4j

    v3.8.0

    Compare Source

    Fixed
    • [#​492]: Loading extensions crashes kotlin application
    • [#​508]: Not create extensions.idx if no extensions exist
    Changed
    • Make ServiceProviderExtensionFinder optional in demo (commented code)
    Added
    • Add support for reading plugin descriptor from zip
    • Use logger instead of System.out.println for demo
    Removed

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • fix(deps): update dependency org.ow2.asm:asm to v9.4

    fix(deps): update dependency org.ow2.asm:asm to v9.4

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.ow2.asm:asm (source) | 9.3 -> 9.4 | age | adoption | passing | confidence |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
Owner
Michael Rittmeister
I do Kotlin. Sometimes it even works
Michael Rittmeister
Odeon Music Player is a lightweight music player for Android.

Odeon ?? Odeon Music Player is a lightweight music player for Android. Get it on Google Play. We value your privacy, your battery life and your device

Thibault Seisel 63 Dec 20, 2022
Music Player - This is a basic music player built with Android Studio and Kotlin

Music Player Made by Jenny Cárdenas This is a basic music player built with Android Studio and Kotlin, it shows two views in the UI, the user can play

Jenny C 3 Oct 28, 2021
TunePlayer is a basic music player app aimed at showing how MusicServiceCompat and MusicBrowerCompat can be used to build a music playback service

TunePlayer TunePlayer is a basic music player app aimed at showing how MusicServiceCompat and MusicBrowerCompat can be used to build a music playback

Abdulmalik 6 Nov 18, 2022
This is a local music player, imitates the UI of Netease Music client.

Introduce This is a local music player, imitates the UI of Netease Music client. The UI was built on Jetbrains Compose. Screenshot Features Parse and

Konyaco 4 Dec 10, 2022
This is a local music player, imitates the UI of Netease Music client.

Introduce This is a local music player, imitates the UI of Netease Music client. The UI was built on Jetbrains Compose. Screenshots Features Parse and

Konyaco 4 Dec 10, 2022
SocyMusic is an open-source Android music player written in Java with the aim of creating an easy-to-use app for exchanging and listening to top-quality music. Help us create it!

SocyMusic SocyMusic is an open-source Android music player written entirely in Java. It's objectives are to provide top-quality music to everyone for

Benji 23 Dec 26, 2022
Auxio is a local music player with a fast, reliable UI/UX without the many useless features present in other music players

Auxio A simple, rational music player for android. FAQ | Licenses | Contributing | Architecture About Auxio is a local music player with a fast, relia

null 3 Mar 21, 2022
Blade is an open source music player for Android, allowing you to play music from multiple services : files on your phone, Spotify, and more.

Blade Player Blade is an open source music player for Android, allowing you to play music from multiple services : files on your phone, Spotify, and m

Valentin HAUDIQUET 72 Jan 5, 2023
A simple library for parsing and playing links from YouTube, YouTube Music, Vimeo and Rutube is WebView without the need to connect api data services. Request caching is available now

Android Oembed Video A simple library for parsing and playing links from YouTube, YouTube Music, Vimeo and Rutube and others in the WebView without th

Alexey Mostovoy 32 Oct 8, 2022
Android music player example.

Android music player example.

Chien 21 Jul 29, 2022
A elegant and light weight music player for android

A elegant and light weight music player for android

Atul Patare 45 Dec 21, 2022
Best material design music player for Android

Metro Material Design music player for Android music lovers Table of contents Downloads Differences between Metro and RetroMusicPlayer Screenshots App

Muntashir Al-Islam 684 Jan 1, 2023
Lightweight and Material designed Music Player

Music Player Lightweight and Material designed Music Player Based on Phonograph Features: Settings: Active tabs management Themes: Light, Dark, Black

Max 273 Dec 11, 2022
🎶🎼 Very slim music player 👨‍🎤 100% made in Italy 🍕🌳🌞🍝🌄

Source code for the Android music player Music Player GO

Enrico D'Ortenzio 1.2k Jan 2, 2023
Odyssey music player

Odyssey This whole project is licensed under the GPLv3 or later license (see LICENSE) Screenshots Please check out the Frequently Asked Questions This

Gateship-One 203 Jan 5, 2023
Shuttle is an open source, local music player for Android.

Shuttle Music Player Shuttle is an open source, local music player for Android. Shuttle comes in two flavours: Shuttle (free) Shuttle+ The free versio

Tim Malseed 2.2k Jan 4, 2023
A material designed music player for Android

Vinyl Music Player A material designed local music player for Android. Forked from Phonograph; makes all Pro features free, as they used to be. Additi

Adrien Poupa 581 Dec 30, 2022
A clean music player with a customizable widget, stylish interface and no ads.

Simple Music Player A clean music player with a customizable widget. A music player easily controllable from the status bar, home screen widget or by

Simple Mobile Tools 965 Jan 4, 2023
Music Player: From UI Proposal to Code

Some developers have difficult to code when the UI proposal is a bit “sophisticated” or “complex”. Many of them strip a lot of significant portion of the UI or even the Motion when they are coding, and the result ends up quite different of the original proposal.

André Mion 3.5k Dec 28, 2022