Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
daa1d3b
Rough migration to JDA:v5.0.0-beta.6
jocull Aug 17, 2023
9a60cd6
Bump to JDA 5 beta 13
jocull Aug 17, 2023
270c83e
Remove comment that doesn't apply anymore
jocull Aug 25, 2023
92efd93
Bump to dev.arbjerg:lavaplayer:2.0.1
jocull Mar 7, 2024
a704fe6
Bump to JDA 5.0.0-beta.20
jocull Mar 7, 2024
1ab4b13
Bump to lavaplayer:2.1.0
jocull Mar 7, 2024
0000fb5
Use a commit version right after 2.1.0 (727959e9f6)
jocull Mar 7, 2024
f8b4813
Bump lavaplayer to 2.1.1 and stop using a commit hash
jocull Mar 19, 2024
3deece0
Use snapshot for com.github.Nansess.lavaplayer-test:lavaplayer:19e815…
jocull Apr 4, 2024
3116bc0
Changes to use new YoutubeAudioSourceManager
jocull Apr 25, 2024
b4a9d2b
Bump JDA to latest, beta 5.23
jocull Apr 25, 2024
cdcb2a2
Fix remaining quirks with YoutubeAudioSourceManager to exclude old ve…
jocull Apr 30, 2024
1e3669a
Clean up imports
jocull Apr 30, 2024
0f29f51
Update versions and clean up audio source managers
jocull May 14, 2024
06a638a
Use a version of JDK 11 that isn't deprecated
jocull May 14, 2024
c6f6992
Use the version expected in the docker-compose for ease of use
jocull May 14, 2024
82cfebc
Use the current Dockerfile as the image
jocull May 14, 2024
0205d15
Make the container name predictable
jocull May 14, 2024
7fa371c
Manually add jars for youtube-plugin and upgrade version
jocull Jul 11, 2024
c3aa77f
Bump youtube-plugin to 1.5.2
jocull Aug 14, 2024
8e6b4c0
Swap to youtube-v2 1.8.3 source, drop manual jars
jocull Oct 17, 2024
ffe3531
Set the docker-compose to use the image by default
jocull Oct 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM openjdk:11
FROM eclipse-temurin:11-jre-jammy
RUN groupadd -r -g 999 ukulele && useradd -rd /opt/ukulele -g ukulele -u 999 -ms /bin/bash ukulele
COPY --chown=ukulele:ukulele build/libs/ukulele.jar /opt/ukulele/ukulele.jar
USER ukulele
Expand Down
13 changes: 7 additions & 6 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,18 @@ java.sourceCompatibility = JavaVersion.VERSION_11

repositories {
mavenCentral()
flatDir {
dirs("lib")
}
maven { url = uri("https://m2.dv8tion.net/releases") }
maven { url = uri("https://jitpack.io") }
maven { url = uri("https://maven.lavalink.dev/releases") }
}

dependencies {
// The 4.x version of JDA specifically needs a UDP fix from this commit:
// https://github.com/DV8FromTheWorld/JDA/commit/39ba0c2682ad99dbec88240cb8ea9d1ff7162ae9
// The snapshot version published in jitpack has this, so it is utilized for now.
// Eventually, a full upgrade to JDA 5.x will be necessary.
implementation("com.github.DV8FromTheWorld:JDA:legacy~v4-SNAPSHOT")
implementation("dev.arbjerg:lavaplayer:1.5.0")
implementation("com.github.DV8FromTheWorld:JDA:v5.0.0-beta.23")
implementation("dev.arbjerg:lavaplayer:2.2.2")
implementation("dev.lavalink.youtube:v2:1.8.3")
implementation("org.springframework.boot:spring-boot-starter-data-r2dbc")

runtimeOnly("com.h2database:h2")
Expand Down
5 changes: 3 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ version: "3.7"

services:
ukulele:
image: ghcr.io/freyacodes/ukulele:master
restart: always
container_name: ukulele
image: ghcr.io/jocull/ukulele:jda-5
restart: unless-stopped
environment:
CONFIG_DATABASE: ./db/database # Database location overwrite so mounting works
volumes:
Expand Down
14 changes: 10 additions & 4 deletions src/main/kotlin/dev/arbjerg/ukulele/audio/LavaplayerConfig.kt
Original file line number Diff line number Diff line change
@@ -1,19 +1,25 @@
package dev.arbjerg.ukulele.audio

import com.sedmelluq.discord.lavaplayer.container.MediaContainerRegistry
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager
import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers
import dev.lavalink.youtube.YoutubeAudioSourceManager
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class LavaplayerConfig {

@Bean
fun playerManager(): AudioPlayerManager {
val apm = DefaultAudioPlayerManager()
AudioSourceManagers.registerRemoteSources(apm)

// Add the new YoutubeAudioSourceManager
apm.registerSourceManager(YoutubeAudioSourceManager(true))

// Then add the rest, while excluding the legacy `YoutubeAudioSourceManager`
AudioSourceManagers.registerRemoteSources(apm, MediaContainerRegistry.DEFAULT_REGISTRY, com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager::class.java)

return apm
}

}
}
4 changes: 2 additions & 2 deletions src/main/kotlin/dev/arbjerg/ukulele/audio/Player.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import dev.arbjerg.ukulele.config.BotProps
import dev.arbjerg.ukulele.data.GuildProperties
import dev.arbjerg.ukulele.data.GuildPropertiesService
import net.dv8tion.jda.api.audio.AudioSendHandler
import net.dv8tion.jda.api.entities.TextChannel
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component
Expand Down Expand Up @@ -125,7 +125,7 @@ class Player(val beans: Beans, guildProperties: GuildProperties) : AudioEventAda

override fun onTrackStart(player: AudioPlayer, track: AudioTrack) {
if (beans.botProps.announceTracks) {
lastChannel?.sendMessage(beans.nowPlayingCommand.buildEmbed(track))?.queue()
lastChannel?.sendMessageEmbeds(beans.nowPlayingCommand.buildEmbed(track))?.queue()
}
}

Expand Down
15 changes: 9 additions & 6 deletions src/main/kotlin/dev/arbjerg/ukulele/command/HelpCommand.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package dev.arbjerg.ukulele.command
import dev.arbjerg.ukulele.features.HelpContext
import dev.arbjerg.ukulele.jda.Command
import dev.arbjerg.ukulele.jda.CommandContext
import net.dv8tion.jda.api.MessageBuilder
import net.dv8tion.jda.api.entities.MessageEmbed
import net.dv8tion.jda.api.utils.MarkdownUtil
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder
import org.springframework.stereotype.Component

@Component
Expand All @@ -12,14 +14,15 @@ class HelpCommand : Command("help") {
if (argumentText.isNotBlank()) {
replyHelp(beans.commandManager[argumentText.trim()] ?: command)
} else {
val msg = MessageBuilder()
.append("Available commands:")
.appendCodeBlock(buildString {
val msg = MessageCreateBuilder()
.addContent("Available commands:")
.addContent(MarkdownUtil.codeblock(buildString {
beans.commandManager.getCommands().forEach {
appendLine((listOf(it.name) + it.aliases).joinToString())
}
}, "")
.append("\nUse \"${trigger} <command>\" to see more details.")
}))
.addContent("\nUse \"${trigger} <command>\" to see more details.")

replyMsg(msg.build())
}
}
Expand Down
9 changes: 5 additions & 4 deletions src/main/kotlin/dev/arbjerg/ukulele/features/HelpContext.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ package dev.arbjerg.ukulele.features

import dev.arbjerg.ukulele.jda.Command
import dev.arbjerg.ukulele.jda.CommandContext
import net.dv8tion.jda.api.MessageBuilder
import net.dv8tion.jda.api.utils.MarkdownUtil
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder

class HelpContext(private val commandContext: CommandContext, private val command: Command) {
private val lines = mutableListOf<String>()
Expand All @@ -20,7 +21,7 @@ class HelpContext(private val commandContext: CommandContext, private val comman
lines.add("# " + text.trim())
}

fun buildMessage() = MessageBuilder()
.appendCodeBlock(lines.joinToString(separator = "\n"), "md")
.build()
fun buildMessage() = MessageCreateBuilder()
.addContent(MarkdownUtil.codeblock("md", lines.joinToString(separator = "\n")))
.build()
}
25 changes: 13 additions & 12 deletions src/main/kotlin/dev/arbjerg/ukulele/jda/CommandContext.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,20 @@ import net.dv8tion.jda.api.entities.Guild
import net.dv8tion.jda.api.entities.Member
import net.dv8tion.jda.api.entities.Message
import net.dv8tion.jda.api.entities.MessageEmbed
import net.dv8tion.jda.api.entities.TextChannel
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel
import net.dv8tion.jda.api.utils.messages.MessageCreateData
import org.springframework.stereotype.Component

class CommandContext(
val beans: Beans,
val guildProperties: GuildProperties,
val guild: Guild,
val channel: TextChannel,
val invoker: Member,
val message: Message,
val command: Command,
val prefix: String,
/** Prefix + command name */
val beans: Beans,
val guildProperties: GuildProperties,
val guild: Guild,
val channel: TextChannel,
val invoker: Member,
val message: Message,
val command: Command,
val prefix: String,
/** Prefix + command name */
val trigger: String
) {
@Component
Expand All @@ -44,12 +45,12 @@ class CommandContext(
channel.sendMessage(msg).queue()
}

fun replyMsg(msg: Message) {
fun replyMsg(msg: MessageCreateData) {
channel.sendMessage(msg).queue()
}

fun replyEmbed(embed: MessageEmbed) {
channel.sendMessage(embed).queue()
channel.sendMessage(MessageCreateData.fromEmbeds(embed)).queue()
}

fun replyHelp(forCommand: Command = command) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/kotlin/dev/arbjerg/ukulele/jda/CommandManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import kotlinx.coroutines.launch
import net.dv8tion.jda.api.entities.Guild
import net.dv8tion.jda.api.entities.Member
import net.dv8tion.jda.api.entities.Message
import net.dv8tion.jda.api.entities.TextChannel
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service
Expand Down
10 changes: 6 additions & 4 deletions src/main/kotlin/dev/arbjerg/ukulele/jda/EventHandler.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package dev.arbjerg.ukulele.jda

import net.dv8tion.jda.api.events.ReadyEvent
import net.dv8tion.jda.api.entities.channel.ChannelType
import net.dv8tion.jda.api.events.StatusChangeEvent
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent
import net.dv8tion.jda.api.events.message.MessageReceivedEvent
import net.dv8tion.jda.api.hooks.ListenerAdapter
import org.slf4j.Logger
import org.slf4j.LoggerFactory
Expand All @@ -13,9 +13,11 @@ class EventHandler(private val commandManager: CommandManager) : ListenerAdapter

private val log: Logger = LoggerFactory.getLogger(EventHandler::class.java)

override fun onGuildMessageReceived(event: GuildMessageReceivedEvent) {
override fun onMessageReceived(event: MessageReceivedEvent) {
if (event.isWebhookMessage || event.author.isBot) return
commandManager.onMessage(event.guild, event.channel, event.member!!, event.message)
if (event.channelType != ChannelType.TEXT) return

commandManager.onMessage(event.guild, event.channel.asTextChannel(), event.member!!, event.message)
}

override fun onStatusChange(event: StatusChangeEvent) {
Expand Down
27 changes: 14 additions & 13 deletions src/main/kotlin/dev/arbjerg/ukulele/jda/JdaConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@ import net.dv8tion.jda.api.sharding.ShardManager
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import net.dv8tion.jda.api.requests.GatewayIntent.*
import net.dv8tion.jda.api.requests.restaction.MessageAction
import net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder
import net.dv8tion.jda.api.utils.cache.CacheFlag
import net.dv8tion.jda.api.utils.messages.MessageRequest
import javax.security.auth.login.LoginException
import kotlin.concurrent.thread

@Configuration
class JdaConfig {

init {
MessageAction.setDefaultMentions(emptyList())
MessageRequest.setDefaultMentions(emptyList())
}

@Bean
Expand All @@ -26,20 +26,21 @@ class JdaConfig {


val intents = listOf(
GUILD_VOICE_STATES,
GUILD_MESSAGES,
GUILD_BANS,
DIRECT_MESSAGES
GUILD_VOICE_STATES,
GUILD_MESSAGES,
GUILD_BANS,
DIRECT_MESSAGES,
MESSAGE_CONTENT
)

val builder = DefaultShardManagerBuilder.create(botProps.token, intents)
.disableCache(CacheFlag.ACTIVITY, CacheFlag.EMOTE, CacheFlag.CLIENT_STATUS)
.setBulkDeleteSplittingEnabled(false)
.setEnableShutdownHook(false)
.setAutoReconnect(true)
.setShardsTotal(botProps.shards)
.addEventListeners(eventHandler)
.setActivity(activity)
.disableCache(CacheFlag.ACTIVITY, CacheFlag.EMOJI, CacheFlag.CLIENT_STATUS)
.setBulkDeleteSplittingEnabled(false)
.setEnableShutdownHook(false)
.setAutoReconnect(true)
.setShardsTotal(botProps.shards)
.addEventListeners(eventHandler)
.setActivity(activity)

val shardManager: ShardManager
try {
Expand Down