Code Monkey home page Code Monkey logo

ukulele's Introduction

Ukulele

...and his music was electric.

Ukulele is a bot made by the creator and collaborators of FredBoat. The concept is to replicate FredBoat while keeping it simple. The original stack is engineered for serving millions of servers, and is thus too complex to selfhost.

The bot is self-contained and only requires Java 11 to run.

This is currently work-in-progress.

Features

  • Basic player commands (::play, ::list, ::skip, ::shuffle)
  • Volume command
  • Zero-maintenance embedded database

Host it yourself

Manual

  • Install Java 11
  • Make a copy of ukulele.example.yml and rename it to ukulele.yml
  • Input the bot token (guide)
  • Run ./ukulele to build and run the application (Windows users use the .bat files via commandline)

Using Docker

Requirements

  • Docker (Engine: 18.06.0+)
  • Docker-Compose

Running

# Create DB directory and own it to 999
mkdir db && chown -R 999 db/

# Copy ukulele config file
cp ukulele.example.yml ukulele.yml
# Open ukulele.yml and make config changes

# Now simply run run docker-compose 
docker-compose up -d

To run the container in detached mode simply add -d to the arguments of the run command.

AUR Package AUR version

https://aur.archlinux.org/packages/ukulele-git/

This Arch package provides a systemd service for ukulele, and places the files for ukulele in the correct places according to the Arch Package Guidelines. This installation method is only relevant if you have an arch-based system.

  • Install the package either using an AUR helper (paru, yay, etc), or following the guide on the Arch Wiki.
  • Edit the config file (/etc/ukulele/ukulele.yml) as required.
    • As noted when installing the package, the discord bot token must be set in the config file (guide)
  • Start/enable the ukulele.service as required (wiki)

Contributing

Pull requests are welcome! Look through the issues and/or create one if you have an idea.

Please read CONTRIBUTING.md

Make your own changes (More info soon)

  • Change code
  • ./gradlew clean build

ukulele's People

Contributors

agsphoenix avatar ajahueym avatar caiusajiz avatar freyacodes avatar jocull avatar kouhaidev avatar mtnkodiak avatar n3rv avatar nanabell avatar otterboops avatar peterfab9845 avatar spindlesdev avatar themadprofessor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ukulele's Issues

add a search function

adding a search function to allow it to search for a song across youtube like this

::play shepard of fire

{gives list of top five songs matching title here}
then allows for number input and adds it to the queue

No Longer responding to commands

Did something on discord's side get updated that broke this bot? Hosting it the same way I always have but it's not responding anymore. Have tried re-adding on multiple servers.

Feature request - repeat single track

I would like to request the loop feature be able to repeat single tracks as well as the entire queue. I looked at the things linked in the other issue relating to this but I am not well versed in coding so could not get it to work myself.

Feature Request: Support Volume Control

In my opinion, Volume Control is probably the #1 most critical feature. If players are left to fend for themselves, they more often than not just mute it. Even if it is limited to specific values like 5%, 10%, 50%, 25%, or very-low, low, medium, high.

Youtube playback is broken

When I try to play anything from YouTube, the bot says "Started playing x" but I can't hear anything playing. SoundCloud works fine. I tried restarting the bot but it didn't fix it.

Error: Unable to access jarfile build\libs\ukulele.jar

To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/6.6.1/userguide/gradle_daemon.html.
Daemon will be stopped at the end of the build stopping after processing

FAILURE: Build failed with an exception.

  • What went wrong:
    org/jetbrains/kotlin/cli/common/PropertiesKt

org.jetbrains.kotlin.cli.common.PropertiesKt

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 3s
Error: Unable to access jarfile build\libs\ukulele.jar

Feature Request: seeking to a specific part in a song

Exactly as the title suggests, a command to seek to a specific part in a song would be great. Something along the lines of ::seek 30s or ::seekto 00:30.000 - this would skip to 00:30.000 in the currently playing song.

:compileKotlin Failed

Hi, i tried to run ukulele with .bat file, and it fails at :compileKotlin for some reason

It says that it can't find required JDK tools ( which i have no clue what does it mean )

So, if someone know how to fix it, please reply thanks <3
image

Information: Discord token not configured - running from a . (dot) hidden folder

Information, if you run Ukulele from within a . (dot) hidden folder, you will get "Discord token not configured!", even if you have your Discord Token specified in the ukulele.yml.

For example, if you were to run Ukulele from /home/user/.apps/ukulele/

This is because of design decision by Spring to not search hidden folders. You can work around this by either:

  1. moving your ukulele folder out of the hidden folder
  2. copy your ukulele.yml to the src/main/resources/ukulele.yml

Randomly skipping songs in queue

Occasionally ukulele will skip a song without playing a single second of it. This doesn't happen to particular songs, the same song entered later in the queue will play unskipped. Unfortunately I don't know how to deterministically reproduce this.

dont know whats wrong here

BUILD SUCCESSFUL in 10s
4 actionable tasks: 4 up-to-date
Exception in thread "main" java.lang.UnsupportedClassVersionError: dev/arbjerg/ukulele/UkuleleApplicationKt has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:107)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)

Using ukulele on arm64

Hi,

I attempted to create an ARM64 container to run this. I successfully create the container, however the music fails to play unless I have 100% volume set. Inspecting the docker logs, I can see the following in the logs that differs between your container and mine:

2022-01-01 20:44:18.314  INFO 1 --- [back-1-thread-1] c.s.l.c.natives.NativeLibraryLoader      : Native library libmpg123-0: loading with filter com.sedmelluq.discord.lavaplayer.natives.ConnectorNativeLibLoader$$Lambda$839/0x0000000840692040@1f72d75d
2022-01-01 20:44:18.316  INFO 1 --- [back-1-thread-1] c.s.l.c.natives.NativeLibraryLoader      : Native library connector: loading with filter null
2022-01-01 20:44:18.321 ERROR 1 --- [back-1-thread-1] c.s.l.c.natives.NativeLibraryLoader      : Native library connector: loading failed.

When the playback failure happens, I see these messages in the logs:
`

java.lang.UnsatisfiedLinkError: Required library was not found
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.extractLibraryFromResources(NativeLibraryLoader.java:125) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadInternal(NativeLibraryLoader.java:110) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadWithFailureCheck(NativeLibraryLoader.java:84) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.load(NativeLibraryLoader.java:69) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.natives.ConnectorNativeLibLoader.loadConnectorLibrary(ConnectorNativeLibLoader.java:21) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoderLibrary.getInstance(OpusDecoderLibrary.java:13) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoder.<init>(OpusDecoder.java:20) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.initialiseDecoder(OpusPacketRouter.java:193) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.checkDecoderNecessity(OpusPacketRouter.java:177) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.process(OpusPacketRouter.java:93) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaOpusTrackConsumer.consume(MatroskaOpusTrackConsumer.java:46) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.processFrameInBlock(MatroskaStreamingFile.java:371) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseClusterSimpleBlock(MatroskaStreamingFile.java:335) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseNextCluster(MatroskaStreamingFile.java:320) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.provideFrames(MatroskaStreamingFile.java:296) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaAudioTrack.lambda$process$0(MatroskaAudioTrack.java:39) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:275) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:249) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaAudioTrack.process(MatroskaAudioTrack.java:38) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.DelegatedAudioTrack.processDelegate(DelegatedAudioTrack.java:25) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.processStatic(YoutubeAudioTrack.java:57) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.process(YoutubeAudioTrack.java:49) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.execute(LocalAudioTrackExecutor.java:104) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager.lambda$executeTrack$1(DefaultAudioPlayerManager.java:348) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
        at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]

2022-01-01 20:44:18.325 ERROR 1 --- [back-1-thread-1] c.s.d.l.t.p.LocalAudioTrackExecutor      : Error in playback of RODJvQhHaWw

com.sedmelluq.discord.lavaplayer.tools.FriendlyException: Something went wrong when decoding the track.
        at com.sedmelluq.discord.lavaplayer.tools.ExceptionTools.wrapUnfriendlyExceptions(ExceptionTools.java:44) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:293) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:249) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaAudioTrack.process(MatroskaAudioTrack.java:38) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.DelegatedAudioTrack.processDelegate(DelegatedAudioTrack.java:25) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.processStatic(YoutubeAudioTrack.java:57) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.process(YoutubeAudioTrack.java:49) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.execute(LocalAudioTrackExecutor.java:104) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager.lambda$executeTrack$1(DefaultAudioPlayerManager.java:348) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
        at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
        Suppressed: com.sedmelluq.discord.lavaplayer.tools.exception.EnvironmentInformation:
  lavaplayer.version: 1.3.96-original
  os.arch: aarch64
  os.name: Linux
  os.version: 5.11.0-1022-oracle
  java.vendor: Oracle Corporation
  java.version: 11.0.13
  java.runtime.version: 11.0.13+8
  java.vm.version: 11.0.13+8
Caused by: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Required library was not found
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadWithFailureCheck(NativeLibraryLoader.java:88) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.load(NativeLibraryLoader.java:69) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.natives.ConnectorNativeLibLoader.loadConnectorLibrary(ConnectorNativeLibLoader.java:21) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoderLibrary.getInstance(OpusDecoderLibrary.java:13) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoder.<init>(OpusDecoder.java:20) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.initialiseDecoder(OpusPacketRouter.java:193) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.checkDecoderNecessity(OpusPacketRouter.java:177) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.process(OpusPacketRouter.java:93) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaOpusTrackConsumer.consume(MatroskaOpusTrackConsumer.java:46) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.processFrameInBlock(MatroskaStreamingFile.java:371) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseClusterSimpleBlock(MatroskaStreamingFile.java:335) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseNextCluster(MatroskaStreamingFile.java:320) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.provideFrames(MatroskaStreamingFile.java:296) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaAudioTrack.lambda$process$0(MatroskaAudioTrack.java:39) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:275) ~[lavaplayer-fork-1.3.96.jar!/:na]
        ... 10 common frames omitted
Caused by: java.lang.UnsatisfiedLinkError: Required library was not found
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.extractLibraryFromResources(NativeLibraryLoader.java:125) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadInternal(NativeLibraryLoader.java:110) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadWithFailureCheck(NativeLibraryLoader.java:84) ~[lava-common-1.1.2.jar!/:na]
        ... 24 common frames omitted

2022-01-01 20:44:18.326 ERROR 1 --- [back-1-thread-1] dev.arbjerg.ukulele.audio.Player         : Track exception

com.sedmelluq.discord.lavaplayer.tools.FriendlyException: Something went wrong when decoding the track.
        at com.sedmelluq.discord.lavaplayer.tools.ExceptionTools.wrapUnfriendlyExceptions(ExceptionTools.java:44) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:293) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:249) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaAudioTrack.process(MatroskaAudioTrack.java:38) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.DelegatedAudioTrack.processDelegate(DelegatedAudioTrack.java:25) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.processStatic(YoutubeAudioTrack.java:57) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.process(YoutubeAudioTrack.java:49) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.execute(LocalAudioTrackExecutor.java:104) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager.lambda$executeTrack$1(DefaultAudioPlayerManager.java:348) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
        at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
        Suppressed: com.sedmelluq.discord.lavaplayer.tools.exception.EnvironmentInformation:
  lavaplayer.version: 1.3.96-original
  os.arch: aarch64
  os.name: Linux
  os.version: 5.11.0-1022-oracle
  java.vendor: Oracle Corporation
  java.version: 11.0.13
  java.runtime.version: 11.0.13+8
  java.vm.version: 11.0.13+8
Caused by: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Required library was not found
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadWithFailureCheck(NativeLibraryLoader.java:88) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.load(NativeLibraryLoader.java:69) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.natives.ConnectorNativeLibLoader.loadConnectorLibrary(ConnectorNativeLibLoader.java:21) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoderLibrary.getInstance(OpusDecoderLibrary.java:13) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoder.<init>(OpusDecoder.java:20) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.initialiseDecoder(OpusPacketRouter.java:193) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.checkDecoderNecessity(OpusPacketRouter.java:177) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.process(OpusPacketRouter.java:93) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaOpusTrackConsumer.consume(MatroskaOpusTrackConsumer.java:46) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.processFrameInBlock(MatroskaStreamingFile.java:371) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseClusterSimpleBlock(MatroskaStreamingFile.java:335) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseNextCluster(MatroskaStreamingFile.java:320) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.provideFrames(MatroskaStreamingFile.java:296) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaAudioTrack.lambda$process$0(MatroskaAudioTrack.java:39) ~[lavaplayer-fork-1.3.96.jar!/:na]
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:275) ~[lavaplayer-fork-1.3.96.jar!/:na]
        ... 10 common frames omitted
Caused by: java.lang.UnsatisfiedLinkError: Required library was not found
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.extractLibraryFromResources(NativeLibraryLoader.java:125) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadInternal(NativeLibraryLoader.java:110) ~[lava-common-1.1.2.jar!/:na]
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadWithFailureCheck(NativeLibraryLoader.java:84) ~[lava-common-1.1.2.jar!/:na]
        ... 24 common frames omitted

`
I am guessing that this library is the cause of everything. Unfortunately I am not a programmer (more of a dabbler), could you tell me what library I need to look up to see if there is an ARM compatible version of it?

Better yet, is there any chance you could update your code or create an ARM version of the container?

Feature Request: Removing/jumping to a specific song from the queue

I think a nice thing to add would be the ability to remove/jump to a specific song in the queue if you have multiple songs, for example:

::q
(then you search to the song you want to find, for example number 32 in the queue)
::remove 32 or ::jump 32
something like that? otherwise the bot is really great to use so thank you!!

Soundcloud support not working

The bot seems to be working very well and reliably so far, the only current problem I have is that soundcloud support doesn't seem to be working as I get "An exception occurred!
This url does not appear to be a playable track." when I try to play anything from soundcloud.

EDIT: Changed from "please add soundcloud support" to soundcloud support not working.

Feature Request: Track announce.

Basically the same thing as the "track announce" feature from Fredboat.

Would be nice if it used the style of the current Ukulele "nowplaying" command with the link to the song instead of the way it displays from Fredboat.

Support for wastebin.party links

As the title says. Don't necessarily need to export to them as you can with fredboat. But would like to at least be able to add playlists using them.

Feature Request: blacklist/whiltelist command (for Textchannels)

Specify a list of textchannel where okulele should listen/take action when prefix is mentioned.
In case a user is trying to invoke okulele in a "disabled"/not approved channel, the bot could answer that this channel isn't supported. Aftert 5 sec the request and response could be deleted to keep the channels clean.

Only very vew discord music bots supports this feature.

I'm fairly new to discord bots and honestly don't know to implement that.

Youtube playback is broken again

Once again the seme issue. When I try to play anything from YouTube, the bot says "Started playing x" but I can't hear anything playing. SoundCloud works fine.

Feature Request: Loop Mode

Would like a basic loop mode feature that loops through all of the songs in the queue.

Thanks again for building this awesome app!

Limit song duration?

I am looking for a way to limit the song duration. Not a single music bot (as far as I am aware) has that functionality.

I want to prevent Discord users to queue a 1 hour song for example.

self hosting

I am unsure if I have missed something in the setup of the docker container and the bot, but I am trying to self host this bot on my personal ubuntu server, but it seems that I am in a pickle, and the bot never comes online, the only issue that I might be able to think of is my token is wrong, but I've copy/paste it, and even tried a different token, but no luck. Is there something that I could do differently, or something that I have possibly skipped?

Accessing the queue database

How do I access the queue database? I need them for another bot that handle another stuff (will be written in another language as I am not good at Java.)

That doesn't exist

Hi there

I've installed the docker version and I'm getting the error 'that doesn't exist' when trying to play anything, any ideas? Cheers

Feature request: Leave channel after some amount of time idle

It would be nice if the bot would leave a voice channel after some configurable amount of time spent idle (that is, no tracks in the queue and not paused). I took a look around the repo but couldn't find a good place to add this functionality myself (though, to be fair I am very unfamiliar with both Kotlin and Spring so I'm still piecing together how main even functions). Happy to implement this and create a PR with some guidance if that would be easier on your end. Thanks for putting this bot together!

Exception when trying to play age restricted content

I get an error when trying to play any video that is age restricted. An example below:

Nov 28 20:00:28 java[1923489]: 2022-11-28 20:00:28.170  INFO 1923489 --- [atcher-worker-1] dev.arbjerg.ukulele.jda.CommandManager   : Invocation: ;play https://youtu.be/j0lN0w5HVT8
Nov 28 20:00:28 java[1923489]: 2022-11-28 20:00:28.340  WARN 1923489 --- [back-1-thread-1] c.s.d.l.s.y.DefaultYoutubeTrackDetails   : Video j0lN0w5HVT8 with no detected format field, response {"responseContext":{"visitorD>
Nov 28 20:00:28 java[1923489]: 2022-11-28 20:00:28.348  WARN 1923489 --- [back-1-thread-1] c.s.d.l.t.p.LocalAudioTrackExecutor      : Suspicious exception for playback of j0lN0w5HVT8
Nov 28 20:00:28 java[1923489]: com.sedmelluq.discord.lavaplayer.tools.FriendlyException: Unable to play this YouTube track.
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.source.youtube.DefaultYoutubeTrackDetails.loadTrackFormats(DefaultYoutubeTrackDetails.java:79) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.source.youtube.DefaultYoutubeTrackDetails.getFormats(DefaultYoutubeTrackDetails.java:49) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.loadBestFormatWithUrl(YoutubeAudioTrack.java:83) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.process(YoutubeAudioTrack.java:42) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.execute(LocalAudioTrackExecutor.java:104) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager.lambda$executeTrack$1(DefaultAudioPlayerManager.java:348) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
Nov 28 20:00:28 java[1923489]:         at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
Nov 28 20:00:28 java[1923489]:         at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
Nov 28 20:00:28 java[1923489]:         Suppressed: com.sedmelluq.discord.lavaplayer.tools.exception.EnvironmentInformation:
Nov 28 20:00:28 java[1923489]:   lavaplayer.version: 1.3.96-original
Nov 28 20:00:28 java[1923489]:   os.arch: amd64
Nov 28 20:00:28 java[1923489]:   os.name: Linux
Nov 28 20:00:28 java[1923489]:   os.version: 5.4.0-131-generic
Nov 28 20:00:28 java[1923489]:   java.vendor: Ubuntu
Nov 28 20:00:28 java[1923489]:   java.version: 11.0.17
Nov 28 20:00:28 java[1923489]:   java.runtime.version: 11.0.17+8-post-Ubuntu-1ubuntu220.04
Nov 28 20:00:28 java[1923489]:   java.vm.version: 11.0.17+8-post-Ubuntu-1ubuntu220.04
Nov 28 20:00:28 java[1923489]: Caused by: java.lang.IllegalStateException: No track formats found.
Nov 28 20:00:28 java[1923489]:         ... 9 common frames omitted
Nov 28 20:00:28 java[1923489]: 2022-11-28 20:00:28.348 ERROR 1923489 --- [back-1-thread-1] dev.arbjerg.ukulele.audio.Player         : Track exception
Nov 28 20:00:28 java[1923489]: com.sedmelluq.discord.lavaplayer.tools.FriendlyException: Unable to play this YouTube track.
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.source.youtube.DefaultYoutubeTrackDetails.loadTrackFormats(DefaultYoutubeTrackDetails.java:79) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.source.youtube.DefaultYoutubeTrackDetails.getFormats(DefaultYoutubeTrackDetails.java:49) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.loadBestFormatWithUrl(YoutubeAudioTrack.java:83) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioTrack.process(YoutubeAudioTrack.java:42) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.execute(LocalAudioTrackExecutor.java:104) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager.lambda$executeTrack$1(DefaultAudioPlayerManager.java:348) ~[lavaplayer-fork-1.3.96.jar!/:na]
Nov 28 20:00:28 java[1923489]:         at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
Nov 28 20:00:28 java[1923489]:         at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
Nov 28 20:00:28 java[1923489]:         at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
Nov 28 20:00:28 java[1923489]:         Suppressed: com.sedmelluq.discord.lavaplayer.tools.exception.EnvironmentInformation:
Nov 28 20:00:28 java[1923489]:   lavaplayer.version: 1.3.96-original
Nov 28 20:00:28 java[1923489]:   os.arch: amd64
Nov 28 20:00:28 java[1923489]:   os.name: Linux
Nov 28 20:00:28 java[1923489]:   os.version: 5.4.0-131-generic
Nov 28 20:00:28 java[1923489]:   java.vendor: Ubuntu
Nov 28 20:00:28 java[1923489]:   java.version: 11.0.17
Nov 28 20:00:28 java[1923489]:   java.runtime.version: 11.0.17+8-post-Ubuntu-1ubuntu220.04
Nov 28 20:00:28 java[1923489]:   java.vm.version: 11.0.17+8-post-Ubuntu-1ubuntu220.04
Nov 28 20:00:28 java[1923489]: Caused by: java.lang.IllegalStateException: No track formats found.
Nov 28 20:00:28 java[1923489]:         ... 9 common frames omitted

After getting this exception, the bot has to be stopped and started again.

Please let me know if you require any additional information.

Feature request: play uploaded file

A few users on my server want to be able to just post MP3s and have the bot play them out. It seems like a blank ::play call with the file attached would be a pretty simple way to do so.

Security considerations:

  • This ability should default to off, and require configuration changes to enable. lavaplayer and ukulele are not bug free, and probably contain vulnerabilities that could be exploited with enough effort. Bot operators should have to opt in to that risk.
  • As an extra spicy config option, the ability to fetch MP3s from an arbitrary URL would be a moderately useful bonus, as long as you aren't worried about your users setting up a server to get the bot's IP address. Would be something like ::play https://example.com/muzak.mp3

For a first implementation, it might be best to have the bot fetch the full file before playing (Maybe cap it at 100 MB for non-Discord links?). Some servers will disconnect clients downloading slowly, or won't support resuming a transfer, which would cut the playback off several minutes in. Not sure if Discord's CDN does this. Might not even be necessary? Could use some testing.

Freya, any objections to this functionality? Kinda toying with the idea of writing this up into a PR.

music bot stopped working(Fixed)

bot connects but once you give it a command to play a song it disconnects seconds later then connects and disconnects again until you command it to stop and make it leave a discord channel. It was working perfectly but maybe discord is detecting it and is blocking from pulling requests.

Unable to access jarfile build\libs\ukulele.jar

Jarfile in build\libs\ukulele.jar does not exist, where could I acquire it?
I would just like to locally set this up as a music bot without any modifications or changes, just simple use. I'm using Windows 10.
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.