diff --git a/.gitignore b/.gitignore index 0cba8fa..49298b8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,5 @@ ### CUSTOM ### /run/ -/data/ -data/ /.idea/ diff --git a/README.md b/README.md index e0f3524..487752e 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,10 @@ A Discord music bot, written in Kotlin using the kord library. +[![Latest Release](https://gitlab.com/moonleay/botendo/-/badges/release.svg)](https://gitlab.com/moonleay/botendo/-/releases) +[![pipeline status](https://gitlab.com/moonleay/botendo/badges/master/pipeline.svg)](https://gitlab.com/moonleay/botendo/-/commits/master) +[![License](https://img.shields.io/badge/license-GPL--3.0-brightgreen)](https://gitlab.com/moonleay/botendo/-/blob/master/LICENSE) + ## Contributors [![Developer](https://img.shields.io/badge/moonleay-Developer-red)](https://gitlab.com/moonleay) @@ -12,9 +16,9 @@ A Discord music bot, written in Kotlin using the kord library. - HopeBaron for helping me a lot -## Issues +## Known issues -- Report issues to issues@moonleay.net or message @moonleay on Discord +- None (currently). Open an issue, report issues to issues@moonleay.net or message moonleay#0001 on Discord ## Commands & Features @@ -59,3 +63,9 @@ A Discord music bot, written in Kotlin using the kord library. Install IntellJ and import the project from git. Done. + +## Docker commands 4 me + +- docker run -it -m 2g -v/home/limited_dev/Documents/Code/Botendo/run/data/:/data/:rw limiteddev/botendo:x.x.x +- docker build -t limiteddev/botendo:x.x.x . +- docker push limiteddev/botendo:x.x.x diff --git a/build.gradle.kts b/build.gradle.kts index b8be713..9401305 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -35,7 +35,7 @@ version = System.getenv("CI_COMMIT_TAG")?.let { "$it-${System.getenv("CI_COMMIT_ ?: System.getenv("CI_COMMIT_SHORT_SHA")?.let { "$it-dev" } ?: "6.5.1" -val kordver = "1.7.1-SNAPSHOT" +val kordver = "1.5.6" val lavaver = "4.0.0" val coroutinesver = "1.1.0" @@ -70,14 +70,6 @@ repositories { } } } - maven { - name = "sonatype" - url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots") - } - maven { - name = "sonatype 2" - url = uri("https://oss.sonatype.org/content/repositories/snapshots") - } } val shadow by configurations.getting diff --git a/src/main/kotlin/net/moonleay/botendo/Bot.kt b/src/main/kotlin/net/moonleay/botendo/Bot.kt index 73545fc..c2fade3 100644 --- a/src/main/kotlin/net/moonleay/botendo/Bot.kt +++ b/src/main/kotlin/net/moonleay/botendo/Bot.kt @@ -24,7 +24,6 @@ import dev.kord.common.Color import dev.kord.core.behavior.interaction.response.respond import dev.kord.core.event.interaction.ButtonInteractionCreateEvent import dev.kord.core.on -import dev.kord.rest.builder.message.embed import dev.schlaubi.lavakord.LavaKord import dev.schlaubi.lavakord.kord.lavakord import net.moonleay.botendo.data.CredentialManager @@ -92,14 +91,14 @@ object Bot { return@on } response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Error" - this.description = "Could not find button with id \"${inter.componentId}\".\nPlease report this." - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "Error", + "Could not find button with id \"${inter.componentId}\".\nPlease report this.", + UserUtil.getCommandSrc(u) + ) + ) } } diff --git a/src/main/kotlin/net/moonleay/botendo/buttons/music/PauseButton.kt b/src/main/kotlin/net/moonleay/botendo/buttons/music/PauseButton.kt index aa6f314..6c9a0b4 100644 --- a/src/main/kotlin/net/moonleay/botendo/buttons/music/PauseButton.kt +++ b/src/main/kotlin/net/moonleay/botendo/buttons/music/PauseButton.kt @@ -24,9 +24,6 @@ import dev.kord.core.behavior.interaction.response.DeferredPublicMessageInteract import dev.kord.core.behavior.interaction.response.respond import dev.kord.core.entity.Guild import dev.kord.core.entity.User -import dev.kord.rest.builder.component.ActionRowBuilder -import dev.kord.rest.builder.message.actionRow -import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.modify.actionRow import dev.schlaubi.lavakord.audio.Link import net.moonleay.botendo.extensions.music.components.MusicManager @@ -46,14 +43,14 @@ class PauseButton : net.moonleay.botendo.buttons.Button("btn.music.pause") { val voiceState = user.asMember(guildId).getVoiceStateOrNull() if (voiceState == null) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not connected to a VC" - this.description = "Please connect to a VC" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not connected to a VC", + "Please connect to a VC", + UserUtil.getCommandSrc(user) + ) + ) } return } @@ -61,26 +58,26 @@ class PauseButton : net.moonleay.botendo.buttons.Button("btn.music.pause") { val channelId = voiceState.channelId if (link.state == Link.State.NOT_CONNECTED) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not connected" - this.description = "I'm not in a VC and therefore, I am not playing anything." - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "Not connected", + "I'm not in a VC and therefore, I am not playing anything.", + UserUtil.getCommandSrc(user) + ) + ) } return } else if (link.state == Link.State.CONNECTED && link.lastChannelId != channelId!!.value) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not in my VC" - this.description = "We are not in the same VC and therefore, you cannot control the music" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not in my VC", + "We are not in the same VC and therefore, you cannot control the music", + UserUtil.getCommandSrc(user) + ) + ) } return } @@ -89,18 +86,19 @@ class PauseButton : net.moonleay.botendo.buttons.Button("btn.music.pause") { val gts = MusicManager.getGuildTrackScheduler(guild, player) response.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = if (player.paused) "I paused" else "I'm continuing" - this.description = if (player.paused) "I paused the song" else "I'm continuing to play the song." - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0x52E01A), + if (player.paused) "I paused" else "I'm continuing", + if (player.paused) "I paused the song" else "I'm continuing to play the song.", + UserUtil.getCommandSrc(user) + ) + ) - this.actionRow(fun ActionRowBuilder.() { - components.addAll(ButtonUtil.getMusicControllerButtons(player.paused, gts.repeating).components) - }) + + this.actionRow { + this.components.addAll(ButtonUtil.getMusicControllerButtons(player.paused, gts.repeating).components) + } } } } diff --git a/src/main/kotlin/net/moonleay/botendo/buttons/music/QueueButton.kt b/src/main/kotlin/net/moonleay/botendo/buttons/music/QueueButton.kt index bb77302..0c4fd52 100644 --- a/src/main/kotlin/net/moonleay/botendo/buttons/music/QueueButton.kt +++ b/src/main/kotlin/net/moonleay/botendo/buttons/music/QueueButton.kt @@ -24,9 +24,6 @@ import dev.kord.core.behavior.interaction.response.DeferredPublicMessageInteract import dev.kord.core.behavior.interaction.response.respond import dev.kord.core.entity.Guild import dev.kord.core.entity.User -import dev.kord.rest.builder.component.ActionRowBuilder -import dev.kord.rest.builder.message.actionRow -import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.modify.actionRow import dev.schlaubi.lavakord.audio.Link import net.moonleay.botendo.extensions.music.components.MusicManager @@ -46,14 +43,14 @@ class QueueButton : net.moonleay.botendo.buttons.Button("btn.music.queue") { val player = link.player if (link.state == Link.State.NOT_CONNECTED) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not connected" - this.description = "I'm not in a VC and therefore, I am not playing anything." - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "Not connected", + "I'm not in a VC and therefore, I am not playing anything.", + UserUtil.getCommandSrc(user) + ) + ) } return } @@ -61,14 +58,14 @@ class QueueButton : net.moonleay.botendo.buttons.Button("btn.music.queue") { val track = player.playingTrack if (track == null) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not playing" - this.description = "I'm not playing anything currently" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "Not playing", + "I'm not playing anything currently", + UserUtil.getCommandSrc(user) + ) + ) } return } @@ -82,18 +79,18 @@ class QueueButton : net.moonleay.botendo.buttons.Button("btn.music.queue") { desc += tr.info.title + " - " + TimeUtil.getTimeFormatedShortend(tr.info.length) + " (" + tr.info.author + ")\n" } response.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "Queue" - this.description = desc - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0x52E01A), + "Queue", + desc, + UserUtil.getCommandSrc(user) + ) + ) - this.actionRow(fun ActionRowBuilder.() { - components.addAll(ButtonUtil.getMusicControllerButtons(player.paused, gts.repeating).components) - }) + this.actionRow { + this.components.addAll(ButtonUtil.getMusicControllerButtons(player.paused, gts.repeating).components) + } } } } diff --git a/src/main/kotlin/net/moonleay/botendo/buttons/music/RepeatButton.kt b/src/main/kotlin/net/moonleay/botendo/buttons/music/RepeatButton.kt index 8de589f..3aa5270 100644 --- a/src/main/kotlin/net/moonleay/botendo/buttons/music/RepeatButton.kt +++ b/src/main/kotlin/net/moonleay/botendo/buttons/music/RepeatButton.kt @@ -24,9 +24,6 @@ import dev.kord.core.behavior.interaction.response.DeferredPublicMessageInteract import dev.kord.core.behavior.interaction.response.respond import dev.kord.core.entity.Guild import dev.kord.core.entity.User -import dev.kord.rest.builder.component.ActionRowBuilder -import dev.kord.rest.builder.message.actionRow -import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.modify.actionRow import dev.schlaubi.lavakord.audio.Link import net.moonleay.botendo.extensions.music.components.MusicManager @@ -46,14 +43,14 @@ class RepeatButton : net.moonleay.botendo.buttons.Button("btn.music.repeat") { val voiceState = user.asMember(guildId).getVoiceStateOrNull() if (voiceState == null) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not connected to a VC" - this.description = "Please connect to a VC" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not connected to a VC", + "Please connect to a VC", + UserUtil.getCommandSrc(user) + ) + ) } return } @@ -61,26 +58,26 @@ class RepeatButton : net.moonleay.botendo.buttons.Button("btn.music.repeat") { val channelId = voiceState.channelId if (link.state == Link.State.NOT_CONNECTED) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not connected" - this.description = "I'm not in a VC and therefore, I am not playing anything." - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "Not connected", + "I'm not in a VC and therefore, I am not playing anything.", + UserUtil.getCommandSrc(user) + ) + ) } return } else if (link.state == Link.State.CONNECTED && link.lastChannelId != channelId!!.value) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not in my VC" - this.description = "We are not in the same VC and therefore, you cannot control the music" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not in my VC", + "We are not in the same VC and therefore, you cannot control the music", + UserUtil.getCommandSrc(user) + ) + ) } return } @@ -88,19 +85,19 @@ class RepeatButton : net.moonleay.botendo.buttons.Button("btn.music.repeat") { val gts = MusicManager.getGuildTrackScheduler(guild, player) gts.repeating = !gts.repeating response.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = if (gts.repeating) "Now Repeating" else "Now Continuing" - this.description = - if (gts.repeating) "The current track will now loop" else "The next track will play when this song finishes" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0x52E01A), + if (gts.repeating) "Now Repeating" else "Now Continuing", + if (gts.repeating) "The current track will now loop" else "The next track will play when this song finishes", + UserUtil.getCommandSrc(user) + ) + ) - this.actionRow(fun ActionRowBuilder.() { - components.addAll(ButtonUtil.getMusicControllerButtons(player.paused, gts.repeating).components) - }) + + this.actionRow { + this.components.addAll(ButtonUtil.getMusicControllerButtons(player.paused, gts.repeating).components) + } } } } diff --git a/src/main/kotlin/net/moonleay/botendo/buttons/music/SkipButton.kt b/src/main/kotlin/net/moonleay/botendo/buttons/music/SkipButton.kt index bda70a9..b102995 100644 --- a/src/main/kotlin/net/moonleay/botendo/buttons/music/SkipButton.kt +++ b/src/main/kotlin/net/moonleay/botendo/buttons/music/SkipButton.kt @@ -25,9 +25,6 @@ import dev.kord.core.behavior.interaction.response.DeferredPublicMessageInteract import dev.kord.core.behavior.interaction.response.respond import dev.kord.core.entity.Guild import dev.kord.core.entity.User -import dev.kord.rest.builder.component.ActionRowBuilder -import dev.kord.rest.builder.message.actionRow -import dev.kord.rest.builder.message.embed import dev.kord.rest.builder.message.modify.actionRow import dev.schlaubi.lavakord.audio.Link import net.moonleay.botendo.extensions.music.components.MusicManager @@ -45,14 +42,14 @@ class SkipButton : net.moonleay.botendo.buttons.Button("btn.music.skip") { val voiceState = user.asMember(guildId).getVoiceStateOrNull() if (voiceState == null) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not connected to a VC" - this.description = "Please connect to a VC" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not connected to a VC", + "Please connect to a VC", + UserUtil.getCommandSrc(user) + ) + ) } return } @@ -60,40 +57,40 @@ class SkipButton : net.moonleay.botendo.buttons.Button("btn.music.skip") { val channelId = voiceState.channelId if (link.state == Link.State.NOT_CONNECTED) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not connected" - this.description = "I'm not in a VC and therefore, I am not playing anything." - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "Not connected", + "I'm not in a VC and therefore, I am not playing anything.", + UserUtil.getCommandSrc(user) + ) + ) } return } else if (link.state == Link.State.CONNECTED && link.lastChannelId != channelId!!.value) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not in my VC" - this.description = "We are not in the same VC and therefore, you cannot control the music" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not in my VC", + "We are not in the same VC and therefore, you cannot control the music", + UserUtil.getCommandSrc(user) + ) + ) } return } var track = player.playingTrack if (track == null) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not Playing" - this.description = "I'm not playing anything currently" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "Not playing", + "I'm not playing anything currently", + UserUtil.getCommandSrc(user) + ) + ) } return } @@ -102,22 +99,20 @@ class SkipButton : net.moonleay.botendo.buttons.Button("btn.music.skip") { track = gts.getHead().toTrack() gts.playNext(link) response.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "Skipped song; now playing" - this.description = "**${track.title}**\n*Now Playing*\nby ${track.author} :: ${ - TimeUtil.getTimeFormatedRaw( - track.length.inWholeMilliseconds - ) - }\n" + - ">>>${track.uri}" - this.footer { - this.text = MessageUtil.getFooter(user) - } - this.thumbnail { - this.url = "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(track.uri!!) + "/maxresdefault.jpg" - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbedWithImage( + Color(0x52E01A), + "Skipped song; now playing", + "**${track.title}**\n*Now Playing*\nby ${track.author} :: ${ + TimeUtil.getTimeFormatedRaw( + track.length.inWholeMilliseconds + ) + }\n" + + ">>>${track.uri}", + UserUtil.getCommandSrc(user), + "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(track.uri!!) + "/maxresdefault.jpg" + ) + ) this.actionRow { this.components.addAll( @@ -133,17 +128,17 @@ class SkipButton : net.moonleay.botendo.buttons.Button("btn.music.skip") { player.stopTrack() response.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "Skipped song" - this.description = "Nothing" - this.footer { - this.text = MessageUtil.getFooter(user) - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0x52E01A), + "Skipped song; now playing", + "Nothing", + UserUtil.getCommandSrc(user) + ) + ) + this.actionRow { + this.components.addAll(ButtonUtil.getMusicControllerButtons(player.paused, gts.repeating).components) } - this.actionRow(fun ActionRowBuilder.() { - components.addAll(ButtonUtil.getMusicControllerButtons(player.paused, gts.repeating).components) - }) } } } diff --git a/src/main/kotlin/net/moonleay/botendo/buttons/music/StopButton.kt b/src/main/kotlin/net/moonleay/botendo/buttons/music/StopButton.kt index d1cf8c0..9ad280d 100644 --- a/src/main/kotlin/net/moonleay/botendo/buttons/music/StopButton.kt +++ b/src/main/kotlin/net/moonleay/botendo/buttons/music/StopButton.kt @@ -24,7 +24,6 @@ import dev.kord.core.behavior.interaction.response.DeferredPublicMessageInteract import dev.kord.core.behavior.interaction.response.respond import dev.kord.core.entity.Guild import dev.kord.core.entity.User -import dev.kord.rest.builder.message.embed import dev.schlaubi.lavakord.audio.Link import net.moonleay.botendo.extensions.music.components.MusicManager import net.moonleay.botendo.util.MessageUtil @@ -42,14 +41,14 @@ class StopButton : net.moonleay.botendo.buttons.Button("btn.music.stop") { val voiceState = user.asMember(guildId).getVoiceStateOrNull() if (voiceState == null) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not connected to a VC" - this.description = "Please connect to a VC" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not connected to a VC", + "Please connect to a VC", + UserUtil.getCommandSrc(user) + ) + ) } return } @@ -57,26 +56,26 @@ class StopButton : net.moonleay.botendo.buttons.Button("btn.music.stop") { val channelId = voiceState.channelId if (link.state == Link.State.NOT_CONNECTED) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not connected" - this.description = "I'm not in a VC and therefore, I am not playing anything." - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "Not connected", + "I'm not in a VC and therefore, I am not playing anything.", + UserUtil.getCommandSrc(user) + ) + ) } return } else if (link.state == Link.State.CONNECTED && link.lastChannelId != channelId!!.value) { response.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not in my VC" - this.description = "We are not in the same VC and therefore, you cannot control the music" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not in my VC", + "We are not in the same VC and therefore, you cannot control the music", + UserUtil.getCommandSrc(user) + ) + ) } return } @@ -85,14 +84,14 @@ class StopButton : net.moonleay.botendo.buttons.Button("btn.music.stop") { link.destroy() MusicManager.getGuildTrackScheduler(guild.asGuild(), player).clear() response.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "I stopped and left" - this.description = "just like your girlfriend" - this.footer { - this.text = MessageUtil.getFooter(user) - } - } + this.embeds = mutableListOf( + MessageUtil.getEmbed( + Color(0x52E01A), + "I stopped and left", + "just like your girlfriend", + UserUtil.getCommandSrc(user) + ) + ) } } } diff --git a/src/main/kotlin/net/moonleay/botendo/extensions/music/NowPlayingExtension.kt b/src/main/kotlin/net/moonleay/botendo/extensions/music/NowPlayingExtension.kt index 6e1047a..5fdbc3c 100644 --- a/src/main/kotlin/net/moonleay/botendo/extensions/music/NowPlayingExtension.kt +++ b/src/main/kotlin/net/moonleay/botendo/extensions/music/NowPlayingExtension.kt @@ -21,11 +21,9 @@ package net.moonleay.botendo.extensions.music import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import com.kotlindiscord.kord.extensions.types.respond import dev.kord.common.Color -import dev.kord.rest.builder.component.ActionRowBuilder -import dev.kord.rest.builder.message.actionRow import dev.kord.rest.builder.message.create.actionRow -import dev.kord.rest.builder.message.embed import dev.schlaubi.lavakord.audio.Link import dev.schlaubi.lavakord.kord.getLink import net.moonleay.botendo.extensions.music.components.MusicManager @@ -41,66 +39,55 @@ class NowPlayingExtension : Extension() { val guildId = this.guild!!.id val link = net.moonleay.botendo.Bot.lava.getLink(guildId) val player = link.player - val u = this.user if (link.state == Link.State.NOT_CONNECTED) { - this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not connected" - this.description = "I'm not in a VC and therefore, I am not playing anything." - this.footer { - this.text = MessageUtil.getFooter(u) - } - } - } + MessageUtil.sendEmbedForPublicSlashCommand( + this, + Color(0xE0A81A), + "Not connected", + "I'm not in a VC and therefore, I am not playing anything." + ) return@action } val track = player.playingTrack if (track == null) { - this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not Playing" - this.description = "I'm not playing anything currently" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } - } + MessageUtil.sendEmbedForPublicSlashCommand( + this, + Color(0xE0A81A), + "Not Playing", + "I'm not playing anything currently" + ) return@action } val gts = MusicManager.getGuildTrackScheduler(this.guild!!.asGuild(), player) this.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "Currently playing" - this.description = "**${track.title}**\n*Now Playing*\nby ${track.author} ; ${ - TimeUtil.getTimeFormatedRaw( - player.position - ) - }: ${ - TimeUtil.getTimeFormatedRaw( - track.length.inWholeMilliseconds - ) - }\n" + - ">>>${track.uri}" - this.footer { - this.text = MessageUtil.getFooter(u) - } - this.thumbnail { - this.url = "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(track.uri.toString()) + "/maxresdefault.jpg" - } - } + this.embeds.add( + MessageUtil.getEmbedWithImage( + Color(0x52E01A), + "Currently playing", + "**${track.title}**\n*Now Playing*\nby ${track.author} ; ${ + TimeUtil.getTimeFormatedRaw( + player.position + ) + }: ${ + TimeUtil.getTimeFormatedRaw( + track.length.inWholeMilliseconds + ) + }\n" + + ">>>${track.uri}", + UserUtil.getCommandSrc(user), + "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(track.uri.toString()) + "/maxresdefault.jpg" + ) + ) - this.actionRow(fun ActionRowBuilder.() { - components.addAll( + this.actionRow { + this.components.addAll( ButtonUtil.getMusicControllerButtons( player.paused, gts.repeating ).components ) - }) + } } } } diff --git a/src/main/kotlin/net/moonleay/botendo/extensions/music/PlayExtension.kt b/src/main/kotlin/net/moonleay/botendo/extensions/music/PlayExtension.kt index b22eade..3e5b355 100644 --- a/src/main/kotlin/net/moonleay/botendo/extensions/music/PlayExtension.kt +++ b/src/main/kotlin/net/moonleay/botendo/extensions/music/PlayExtension.kt @@ -21,8 +21,8 @@ package net.moonleay.botendo.extensions.music import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import com.kotlindiscord.kord.extensions.types.respond import dev.kord.common.Color -import dev.kord.rest.builder.message.embed import dev.schlaubi.lavakord.audio.Link import dev.schlaubi.lavakord.kord.getLink import net.moonleay.botendo.extensions.music.components.LinkArguments @@ -46,14 +46,14 @@ class PlayExtension : Extension() { val vcsUser = u.asMember(guildId).getVoiceStateOrNull() if (vcsUser == null) { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not connected to a VC" - this.description = "Please connect to a VC" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not connected to a VC", + "Please connect to a VC", + UserUtil.getCommandSrc(u), + ) + ) } return@action } @@ -64,14 +64,14 @@ class PlayExtension : Extension() { link.connectAudio(channelId!!.value) } else if (link.state == Link.State.CONNECTED && link.lastChannelId != channelId!!.value) { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not in my VC" - this.description = "We are not in the same VC and therefore, you cannot play any music" - this.author { - this.name = UserUtil.getCommandSrc(u) - } - } + embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not in my VC", + "We are not in the same VC and therefore, you cannot play any music", + UserUtil.getCommandSrc(u), + ) + ) } return@action } @@ -83,14 +83,14 @@ class PlayExtension : Extension() { "ytsearch:$query" } this.respond { - this.embed { - this.color = Color(0xE0A81A) - this.title = "Searching..." - this.description = "We are looking for $query" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + embeds.add( + MessageUtil.getEmbed( + Color(0xE0A81A), + "Searching...", + "We are looking for $query", + UserUtil.getCommandSrc(u), + ) + ) } MusicManager.addToQueue(this, link, search) } diff --git a/src/main/kotlin/net/moonleay/botendo/extensions/music/QueueExtension.kt b/src/main/kotlin/net/moonleay/botendo/extensions/music/QueueExtension.kt index 8acb638..7d0e950 100644 --- a/src/main/kotlin/net/moonleay/botendo/extensions/music/QueueExtension.kt +++ b/src/main/kotlin/net/moonleay/botendo/extensions/music/QueueExtension.kt @@ -21,11 +21,9 @@ package net.moonleay.botendo.extensions.music import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import com.kotlindiscord.kord.extensions.types.respond import dev.kord.common.Color -import dev.kord.rest.builder.component.ActionRowBuilder -import dev.kord.rest.builder.message.actionRow import dev.kord.rest.builder.message.create.actionRow -import dev.kord.rest.builder.message.embed import dev.schlaubi.lavakord.audio.Link import net.moonleay.botendo.extensions.music.components.MusicManager import net.moonleay.botendo.util.ButtonUtil @@ -43,32 +41,23 @@ class QueueExtension : Extension() { val guildId = this.guild!!.id val link = net.moonleay.botendo.Bot.lava.getLink(guildId.toString()) val player = link.player - val u = this.user if (link.state == Link.State.NOT_CONNECTED) { - this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not connected" - this.description = "I'm not in a VC and therefore, I am not playing anything." - this.footer { - this.text = MessageUtil.getFooter(u) - } - } - } + MessageUtil.sendEmbedForPublicSlashCommand( + this, + Color(0xE0311A), + "Not connected", + "I'm not in a VC and therefore, I am not playing anything." + ) return@action } val track = player.playingTrack if (track == null) { - this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Queue empty" - this.description = "I'm not playing anything currently" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } - } + MessageUtil.sendEmbedForPublicSlashCommand( + this, + Color(0xE0A81A), + "Queue empty", + "I'm not playing anything currently" + ) return@action } val gts = MusicManager.getGuildTrackScheduler(this.guild!!.asGuild(), player) @@ -81,23 +70,23 @@ class QueueExtension : Extension() { desc += tr.info.title + " - " + TimeUtil.getTimeFormatedShortend(tr.info.length) + " (" + tr.info.author + ")\n" } this.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "Queue" - this.description = desc - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0x52E01A), + "Queue", + desc, + UserUtil.getCommandSrc(user), + ) + ) - this.actionRow(fun ActionRowBuilder.() { - components.addAll( + this.actionRow { + this.components.addAll( ButtonUtil.getMusicControllerButtons( player.paused, gts.repeating ).components ) - }) + } } } } diff --git a/src/main/kotlin/net/moonleay/botendo/extensions/music/SeekExtension.kt b/src/main/kotlin/net/moonleay/botendo/extensions/music/SeekExtension.kt index 1e4e187..33c57ed 100644 --- a/src/main/kotlin/net/moonleay/botendo/extensions/music/SeekExtension.kt +++ b/src/main/kotlin/net/moonleay/botendo/extensions/music/SeekExtension.kt @@ -21,10 +21,9 @@ package net.moonleay.botendo.extensions.music import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import com.kotlindiscord.kord.extensions.types.respond import dev.kord.common.Color -import dev.kord.rest.builder.component.ActionRowBuilder -import dev.kord.rest.builder.message.actionRow -import dev.kord.rest.builder.message.embed +import dev.kord.rest.builder.message.create.actionRow import dev.schlaubi.lavakord.audio.Link import net.moonleay.botendo.extensions.music.components.MusicManager import net.moonleay.botendo.extensions.music.components.SeekArguments @@ -44,14 +43,14 @@ class SeekExtension : Extension() { val voiceState = u.asMember(guildId).getVoiceStateOrNull() if (voiceState == null) { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not connected to a VC" - this.description = "Please connect to a VC" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not connected to a VC", + "Please connect to a VC", + UserUtil.getCommandSrc(u), + ) + ) } return@action } @@ -59,40 +58,40 @@ class SeekExtension : Extension() { val channelId = voiceState.channelId if (link.state == Link.State.NOT_CONNECTED) { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not connected" - this.description = "I'm not in a VC and therefore, I am not playing anything." - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "Not connected", + "I'm not in a VC and therefore, I am not playing anything.", + UserUtil.getCommandSrc(u), + ) + ) } return@action } else if (link.state == Link.State.CONNECTED && link.lastChannelId != channelId!!.value) { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not in my VC" - this.description = "We are not in the same VC and therefore, you cannot control the music" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not in my VC", + "We are not in the same VC and therefore, you cannot control the music", + UserUtil.getCommandSrc(u), + ) + ) } return@action } var track = player.playingTrack if (track == null) { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not playing" - this.description = "I'm not playing anything currently" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "Not playing", + "I'm not playing anything currently", + UserUtil.getCommandSrc(u) + ) + ) } return@action } @@ -102,50 +101,47 @@ class SeekExtension : Extension() { player.seekTo(targetPos) } else { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Invalid position" - this.description = "The position you specified is invalid" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "Invalid position", + "The position you specified is invalid", + UserUtil.getCommandSrc(u), + ) + ) } return@action } this.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "Jumped; now playing" - this.description = "**${track.title}**\n*Now Playing*\nby ${track.author} ; ${ - TimeUtil.getTimeFormatedRaw( - player.position - ) - }: ${ - TimeUtil.getTimeFormatedRaw( - track.length.inWholeMilliseconds - ) - }\n" + - ">>>${track.uri}" - this.footer { - this.text = MessageUtil.getFooter(u) - } - this.thumbnail { - this.url = "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(track.uri!!) + "/maxresdefault.jpg" + this.embeds.add( + MessageUtil.getEmbedWithImage( + Color(0x52E01A), + "Jumped; now playing", + "**${track.title}**\n*Now Playing*\nby ${track.author} ; ${ + TimeUtil.getTimeFormatedRaw( + player.position + ) + }: ${ + TimeUtil.getTimeFormatedRaw( + track.length.inWholeMilliseconds + ) + }\n" + + ">>>${track.uri}", + UserUtil.getCommandSrc(user), + "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(track.uri!!) + "/maxresdefault.jpg" + ) + ) - } - } - - this.actionRow(fun ActionRowBuilder.() { - components.addAll( + this.actionRow { + this.components.addAll( ButtonUtil.getMusicControllerButtons( player.paused, gts.repeating ).components ) - }) + } } } } diff --git a/src/main/kotlin/net/moonleay/botendo/extensions/music/SkipExtension.kt b/src/main/kotlin/net/moonleay/botendo/extensions/music/SkipExtension.kt index f01c3be..f7f8dd6 100644 --- a/src/main/kotlin/net/moonleay/botendo/extensions/music/SkipExtension.kt +++ b/src/main/kotlin/net/moonleay/botendo/extensions/music/SkipExtension.kt @@ -21,11 +21,9 @@ package net.moonleay.botendo.extensions.music import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import com.kotlindiscord.kord.extensions.types.respond import dev.kord.common.Color -import dev.kord.rest.builder.component.ActionRowBuilder -import dev.kord.rest.builder.message.actionRow import dev.kord.rest.builder.message.create.actionRow -import dev.kord.rest.builder.message.embed import dev.schlaubi.lavakord.audio.Link import net.moonleay.botendo.extensions.music.components.MusicManager import net.moonleay.botendo.util.* @@ -43,57 +41,41 @@ class SkipExtension : Extension() { val u = this.user val voiceState = u.asMember(guildId).getVoiceStateOrNull() if (voiceState == null) { - this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not connected to a VC" - this.description = "Please connect to a VC" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } - } + MessageUtil.sendEmbedForPublicSlashCommand( + this, + Color(0xE0311A), + "You are not connected to a VC", + "Please connect to a VC" + ) return@action } val channelId = voiceState.channelId if (link.state == Link.State.NOT_CONNECTED) { - this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not connected" - this.description = "I'm not in a VC and therefore, I am not playing anything." - this.footer { - this.text = MessageUtil.getFooter(u) - } - } - } + MessageUtil.sendEmbedForPublicSlashCommand( + this, + Color(0xE0311A), + "Not connected", + "I'm not in a VC and therefore, I am not playing anything." + ) return@action } else if (link.state == Link.State.CONNECTED && link.lastChannelId != channelId!!.value) { - this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not in my VC" - this.description = "We are not in the same VC and therefore, you cannot control the music" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } - } + MessageUtil.sendEmbedForPublicSlashCommand( + this, + Color(0xE0311A), + "You are not in my VC", + "We are not in the same VC and therefore, you cannot control the music" + ) return@action } var track = player.playingTrack if (track == null) { - this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not playing" - this.description = "I'm not playing anything currently" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } - } + MessageUtil.sendEmbedForPublicSlashCommand( + this, + Color(0xE0311A), + "Not playing", + "I'm not playing anything currently" + ) return@action } val gts = MusicManager.getGuildTrackScheduler(this.guild!!.asGuild(), player) @@ -106,31 +88,29 @@ class SkipExtension : Extension() { this.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "Skipped song; now playing" - this.description = "**${track.title}**\n*Now Playing*\nby ${track.author} ;: ${ - TimeUtil.getTimeFormatedRaw( - track.length.inWholeMilliseconds - ) - }\n" + - ">>>${track.uri}" - this.footer { - this.text = MessageUtil.getFooter(u) - } - this.thumbnail { - this.url = "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(track.uri!!) + "/maxresdefault.jpg" - } - } + this.embeds.add( + MessageUtil.getEmbedWithImage( + Color(0x52E01A), + "Skipped song; now playing", + "**${track.title}**\n*Now Playing*\nby ${track.author} ;: ${ + TimeUtil.getTimeFormatedRaw( + track.length.inWholeMilliseconds + ) + }\n" + + ">>>${track.uri}", + UserUtil.getCommandSrc(user), + "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(track.uri!!) + "/maxresdefault.jpg" + ) + ) - this.actionRow(fun ActionRowBuilder.() { - components.addAll( + this.actionRow { + this.components.addAll( ButtonUtil.getMusicControllerButtons( player.paused, gts.repeating ).components ) - }) + } } } } diff --git a/src/main/kotlin/net/moonleay/botendo/extensions/music/StopExtension.kt b/src/main/kotlin/net/moonleay/botendo/extensions/music/StopExtension.kt index 6a6b117..afdbf91 100644 --- a/src/main/kotlin/net/moonleay/botendo/extensions/music/StopExtension.kt +++ b/src/main/kotlin/net/moonleay/botendo/extensions/music/StopExtension.kt @@ -21,8 +21,8 @@ package net.moonleay.botendo.extensions.music import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import com.kotlindiscord.kord.extensions.types.respond import dev.kord.common.Color -import dev.kord.rest.builder.message.embed import dev.schlaubi.lavakord.audio.Link import dev.schlaubi.lavakord.kord.getLink import net.moonleay.botendo.extensions.music.components.MusicManager @@ -43,40 +43,40 @@ class StopExtension : Extension() { val vcsUser = u.asMember(guildId).getVoiceStateOrNull() if (vcsUser == null) { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not connected to a VC" - this.description = "Please connect to a VC" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not connected to a VC", + "Please connect to my VC", + UserUtil.getCommandSrc(u), + ) + ) } return@action } val channelId = vcsUser.channelId if (link.state == Link.State.NOT_CONNECTED) { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not connected" - this.description = "I'm not in a VC and therefore, I am not playing anything." - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "Not connected", + "I'm not in a VC and therefore, I am not playing anything.", + UserUtil.getCommandSrc(u), + ) + ) } return@action } else if (link.state == Link.State.CONNECTED && link.lastChannelId != channelId!!.value) { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not in my VC" - this.description = "We are not in the same VC" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not in my VC", + "We are not in the same VC", + UserUtil.getCommandSrc(u), + ) + ) } return@action } @@ -84,14 +84,14 @@ class StopExtension : Extension() { link.destroy() MusicManager.getGuildTrackScheduler(this.getGuild()!!.asGuild(), player).clear() this.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "I stopped and left" - this.description = "just like your girlfriend" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0x52E01A), + "I stopped and left", + "just like your girlfriend", + UserUtil.getCommandSrc(u), + ) + ) } } } diff --git a/src/main/kotlin/net/moonleay/botendo/extensions/music/UpsertExtension.kt b/src/main/kotlin/net/moonleay/botendo/extensions/music/UpsertExtension.kt index 56fc44d..889da77 100644 --- a/src/main/kotlin/net/moonleay/botendo/extensions/music/UpsertExtension.kt +++ b/src/main/kotlin/net/moonleay/botendo/extensions/music/UpsertExtension.kt @@ -21,8 +21,8 @@ package net.moonleay.botendo.extensions.music import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand +import com.kotlindiscord.kord.extensions.types.respond import dev.kord.common.Color -import dev.kord.rest.builder.message.embed import dev.schlaubi.lavakord.audio.Link import dev.schlaubi.lavakord.kord.getLink import net.moonleay.botendo.extensions.music.components.LinkArguments @@ -46,14 +46,14 @@ class UpsertExtension : Extension() { val vcsUser = u.asMember(guildId).getVoiceStateOrNull() if (vcsUser == null) { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not connected to a VC" - this.description = "Please connect to a VC" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not connected to a VC", + "Please connect to a VC", + UserUtil.getCommandSrc(u), + ) + ) } return@action } @@ -64,14 +64,14 @@ class UpsertExtension : Extension() { link.connectAudio(channelId!!.value) } else if (link.state == Link.State.CONNECTED && link.lastChannelId != channelId!!.value) { this.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "You are not in my VC" - this.description = "We are not in the same VC and therefore, you cannot play any music" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "You are not in my VC", + "We are not in the same VC and therefore, you cannot play any music", + UserUtil.getCommandSrc(u), + ) + ) } return@action } @@ -83,14 +83,14 @@ class UpsertExtension : Extension() { "ytsearch:$query" } this.respond { - this.embed { - this.color = Color(0xE0A81A) - this.title = "Searching..." - this.description = "We are looking for $query" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + embeds.add( + MessageUtil.getEmbed( + Color(0xE0A81A), + "Searching...", + "We are looking for $query", + UserUtil.getCommandSrc(u), + ) + ) } MusicManager.upsertIntoQueue(this, link, search) } diff --git a/src/main/kotlin/net/moonleay/botendo/extensions/music/components/MusicManager.kt b/src/main/kotlin/net/moonleay/botendo/extensions/music/components/MusicManager.kt index bd8552e..f081e0a 100644 --- a/src/main/kotlin/net/moonleay/botendo/extensions/music/components/MusicManager.kt +++ b/src/main/kotlin/net/moonleay/botendo/extensions/music/components/MusicManager.kt @@ -21,13 +21,11 @@ package net.moonleay.botendo.extensions.music.components import com.kotlindiscord.kord.extensions.commands.application.slash.PublicSlashCommandContext import com.kotlindiscord.kord.extensions.components.forms.ModalForm +import com.kotlindiscord.kord.extensions.types.respond import dev.kord.common.Color import dev.kord.common.entity.Snowflake import dev.kord.core.entity.Guild -import dev.kord.rest.builder.component.ActionRowBuilder -import dev.kord.rest.builder.message.actionRow import dev.kord.rest.builder.message.create.actionRow -import dev.kord.rest.builder.message.embed import dev.schlaubi.lavakord.audio.Link import dev.schlaubi.lavakord.audio.player.Player import dev.schlaubi.lavakord.rest.loadItem @@ -79,32 +77,29 @@ object MusicManager { gts.queue(item.track, type) if (!silent) ctx.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "${type.s} track from link" - this.description = "**${item.track.info.title}**\n*Queue*\nby ${item.track.info.author} ;: ${ - TimeUtil.getTimeFormatedRaw( - item.track.info.length - ) - }\n" + - ">>>${item.track.info.uri}" - this.footer { - this.text = MessageUtil.getFooter(u) - } - this.thumbnail { - this.url = - "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(item.track.info.uri) + "/maxresdefault.jpg" - } - } + this.embeds.add( + MessageUtil.getEmbedWithImage( + Color(0x52E01A), + "${type.s} track from link", + "**${item.track.info.title}**\n*Queue*\nby ${item.track.info.author} ;: ${ + TimeUtil.getTimeFormatedRaw( + item.track.info.length + ) + }\n" + + ">>>${item.track.info.uri}", + UserUtil.getCommandSrc(u), + "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(item.track.info.uri) + "/maxresdefault.jpg" + ) + ) - this.actionRow(fun ActionRowBuilder.() { - components.addAll( + this.actionRow { + this.components.addAll( ButtonUtil.getMusicControllerButtons( player.paused, gts.repeating ).components ) - }) + } } } @@ -115,23 +110,19 @@ object MusicManager { } if (!silent) ctx.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "${type.s} playlist from link" - this.description = "**${item.tracks.first().info.title}**\n*${item.playlistInfo.name}*\nby ${item.tracks.first().info.author} ;: ${ - TimeUtil.getTimeFormatedRaw( - item.tracks.first().info.length - ) - }\n" + - ">>>${item.tracks.first().info.uri}" - this.footer { - this.text = MessageUtil.getFooter(u) - } - this.thumbnail { - this.url = - "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(item.tracks.first().info.uri) + "/maxresdefault.jpg" - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0x52E01A), + "${type.s} playlist from link", + "**${item.tracks.first().info.title}**\n*${item.playlistInfo.name}*\nby ${item.tracks.first().info.author} ;: ${ + TimeUtil.getTimeFormatedRaw( + item.tracks.first().info.length + ) + }\n" + + ">>>${item.tracks.first().info.uri}", + UserUtil.getCommandSrc(u), + ) + ) this.actionRow { this.components.addAll( @@ -148,23 +139,20 @@ object MusicManager { gts.queue(item.tracks.first(), type) if (!silent) ctx.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "${type.s} track from query" - this.description = "**${item.tracks.first().info.title}**\n*Queue*\nby ${item.tracks.first().info.author} ;: ${ - TimeUtil.getTimeFormatedRaw( - item.tracks.first().info.length - ) - }\n" + - ">>>${item.tracks.first().info.uri}" - this.footer { - this.text = MessageUtil.getFooter(u) - } - this.thumbnail { - this.url = - "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(item.tracks.first().info.uri) + "/maxresdefault.jpg" - } - } + this.embeds.add( + MessageUtil.getEmbedWithImage( + Color(0x52E01A), + "${type.s} track from query", + "**${item.tracks.first().info.title}**\n*Queue*\nby ${item.tracks.first().info.author} ;: ${ + TimeUtil.getTimeFormatedRaw( + item.tracks.first().info.length + ) + }\n" + + ">>>${item.tracks.first().info.uri}", + UserUtil.getCommandSrc(u), + "https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(item.tracks.first().info.uri) + "/maxresdefault.jpg" + ) + ) this.actionRow { this.components.addAll( @@ -180,28 +168,28 @@ object MusicManager { TrackResponse.LoadType.NO_MATCHES -> { if (!silent) ctx.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Not found" - this.description = "There were no matches." - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "Not found", + "There were no matches.", + UserUtil.getCommandSrc(u), + ) + ) } } TrackResponse.LoadType.LOAD_FAILED -> { if (!silent) ctx.respond { - this.embed { - this.color = Color(0xE0311A) - this.title = "Load failed" - this.description = "There was an error while loading." - this.footer { - this.text = MessageUtil.getFooter(u) - } - } + this.embeds.add( + MessageUtil.getEmbed( + Color(0xE0311A), + "Load failed", + "There was an error while loading.", + UserUtil.getCommandSrc(u), + ) + ) } } } diff --git a/src/main/kotlin/net/moonleay/botendo/extensions/util/InfoExtension.kt b/src/main/kotlin/net/moonleay/botendo/extensions/util/InfoExtension.kt index 57e0b04..8d76061 100644 --- a/src/main/kotlin/net/moonleay/botendo/extensions/util/InfoExtension.kt +++ b/src/main/kotlin/net/moonleay/botendo/extensions/util/InfoExtension.kt @@ -22,7 +22,6 @@ package net.moonleay.botendo.extensions.util import com.kotlindiscord.kord.extensions.extensions.Extension import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand import dev.kord.common.Color -import dev.kord.rest.builder.message.embed import net.moonleay.botendo.util.MessageUtil class InfoExtension : Extension() { @@ -32,23 +31,17 @@ class InfoExtension : Extension() { name = "info" description = "Show infos about the bot" this.action { - val u = this.user - this.respond { - this.embed { - this.color = Color(0x52E01A) - this.title = "Botendo" - this.description = "Botendo ***v." + net.moonleay.botendo.build.BuildConstants.version + "***\n" + + MessageUtil.sendEmbedForPublicSlashCommand( + this, + Color(0x52E01A), "Botendo", + "Botendo ***v." + net.moonleay.botendo.build.BuildConstants.version + "***\n" + "Kord-Extensions ***v." + net.moonleay.botendo.build.BuildConstants.kordVersion + "***\n" + "lavalink.kt ***v." + net.moonleay.botendo.build.BuildConstants.lavaVersion + "***\n" + "Coroutines ***v." + net.moonleay.botendo.build.BuildConstants.coroutinesVersion + "***\n\n\n" + "***Bot made by moonleay***\n" + "(c) 2023, licensed under GPL-3.0\n" + "More infos: https://moonleay.net/projects/botendo\n" - this.footer { - this.text = MessageUtil.getFooter(u) - } - } - } + ) } } } diff --git a/src/main/kotlin/net/moonleay/botendo/util/MessageUtil.kt b/src/main/kotlin/net/moonleay/botendo/util/MessageUtil.kt index 839dc32..531f96d 100644 --- a/src/main/kotlin/net/moonleay/botendo/util/MessageUtil.kt +++ b/src/main/kotlin/net/moonleay/botendo/util/MessageUtil.kt @@ -22,8 +22,8 @@ package net.moonleay.botendo.util import com.kotlindiscord.kord.extensions.commands.Arguments import com.kotlindiscord.kord.extensions.commands.application.slash.PublicSlashCommandContext import com.kotlindiscord.kord.extensions.components.forms.ModalForm +import com.kotlindiscord.kord.extensions.types.respond import dev.kord.common.Color -import dev.kord.core.behavior.UserBehavior import dev.kord.rest.builder.message.EmbedBuilder import java.time.LocalDateTime import java.time.format.DateTimeFormatter @@ -31,8 +31,74 @@ import java.time.format.DateTimeFormatter object MessageUtil { private val dtf: DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy @ HH:mm:ss") - suspend fun getFooter(u: UserBehavior? = null): String{ + ///Send an embedded message as a reply + suspend fun sendEmbedForPublicSlashCommand( + ctx: PublicSlashCommandContext, + color: Color, + title: String, + description: String + ) { + ctx.respond { + embeds.add( + getEmbed( + color, + title, + description, + UserUtil.getCommandSrc(ctx.user) + ) + ) + } + } + + ///Send an embedded message with an image as a reply + suspend fun sendEmbedForPublicSlashCommandWithImage( + ctx: PublicSlashCommandContext, + color: Color, + title: String, + description: String, + thumbnailUrl: String + ) { + ctx.respond { + embeds.add( + getEmbedWithImage( + color, + title, + description, + UserUtil.getCommandSrc(ctx.user), + thumbnailUrl + ) + ) + } + } + + ///Get an embedded msg with title, description and a src + fun getEmbed( + color: Color, + title: String, + description: String, + source: String + ): EmbedBuilder { val now: LocalDateTime = LocalDateTime.now() - return ">" + dtf.format(now) + " - ${u?.asUser()?.username?:"Automatic Message"}" + val ebb = EmbedBuilder() + ebb.title = title + ebb.description = description + ebb.footer = EmbedBuilder.Footer() + ebb.footer!!.text = ">" + dtf.format(now) + " - $source" + ebb.color = color + return ebb + } + + ///Get an embedded msg with image, title, description and a src + fun getEmbedWithImage( + color: Color, + title: String, + description: String, + source: String, + thumbnailUrl: String + ): EmbedBuilder { + val ebb = getEmbed(color, title, description, source) + ebb.thumbnail = EmbedBuilder.Thumbnail() + ebb.thumbnail!!.url = thumbnailUrl + return ebb } } diff --git a/src/main/kotlin/net/moonleay/botendo/util/UserUtil.kt b/src/main/kotlin/net/moonleay/botendo/util/UserUtil.kt index 3925ad6..55826b2 100644 --- a/src/main/kotlin/net/moonleay/botendo/util/UserUtil.kt +++ b/src/main/kotlin/net/moonleay/botendo/util/UserUtil.kt @@ -23,6 +23,12 @@ import dev.kord.core.behavior.UserBehavior object UserUtil { suspend fun getCommandSrc(u: UserBehavior): String { - return "${u.asUser().username}}" + return "${u.asUser().username}${getUserDiscriminator(u)}" + } + + private suspend fun getUserDiscriminator(u: UserBehavior): String { + if (u.asUser().discriminator == "0") + return "" + return "#${u.asUser().discriminator}" } }