feat: added SeekExtension
Signed-off-by: limited_dev <loginakkisativ@gmail.com>
This commit is contained in:
parent
d8f8231028
commit
aabab047f7
1 changed files with 152 additions and 0 deletions
|
@ -0,0 +1,152 @@
|
||||||
|
/*
|
||||||
|
* Botendo
|
||||||
|
* Copyright (C) 2023 moonleay
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
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.create.actionRow
|
||||||
|
import dev.schlaubi.lavakord.audio.Link
|
||||||
|
import net.moonleay.botendo.extensions.music.components.MusicManager
|
||||||
|
import net.moonleay.botendo.extensions.music.components.SeekArguments
|
||||||
|
import net.moonleay.botendo.util.ButtonUtil
|
||||||
|
import net.moonleay.botendo.util.MessageUtil
|
||||||
|
import net.moonleay.botendo.util.TimeUtil
|
||||||
|
import net.moonleay.botendo.util.UrlUtil
|
||||||
|
|
||||||
|
class SeekExtension : Extension() {
|
||||||
|
override val name = "seek"
|
||||||
|
override suspend fun setup() {
|
||||||
|
publicSlashCommand(::SeekArguments) {
|
||||||
|
name = "seek"
|
||||||
|
description = "Skip to a certain point in a track"
|
||||||
|
this.action {
|
||||||
|
val guildId = this.guild!!.id
|
||||||
|
val link = net.moonleay.botendo.Bot.lava.getLink(guildId.toString())
|
||||||
|
val player = link.player
|
||||||
|
val u = this.user
|
||||||
|
val voiceState = u.asMember(guildId).getVoiceStateOrNull()
|
||||||
|
if (voiceState == null) {
|
||||||
|
this.respond {
|
||||||
|
this.embeds.add(
|
||||||
|
MessageUtil.getEmbed(
|
||||||
|
Color(0xE0311A),
|
||||||
|
"You are not connected to a VC",
|
||||||
|
"Please connect to a VC",
|
||||||
|
"${u.asUser().username}#${u.asUser().discriminator}"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return@action
|
||||||
|
}
|
||||||
|
|
||||||
|
val channelId = voiceState.channelId
|
||||||
|
if (link.state == Link.State.NOT_CONNECTED) {
|
||||||
|
this.respond {
|
||||||
|
this.embeds.add(
|
||||||
|
MessageUtil.getEmbed(
|
||||||
|
Color(0xE0311A),
|
||||||
|
"Not connected",
|
||||||
|
"I'm not in a VC and therefore, I am not playing anything.",
|
||||||
|
"${u.asUser().username}#${u.asUser().discriminator}"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return@action
|
||||||
|
} else if (link.state == Link.State.CONNECTED && link.lastChannelId != channelId!!.value) {
|
||||||
|
this.respond {
|
||||||
|
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",
|
||||||
|
"${u.asUser().username}#${u.asUser().discriminator}"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return@action
|
||||||
|
}
|
||||||
|
var track = player.playingTrack
|
||||||
|
if (track == null) {
|
||||||
|
this.respond {
|
||||||
|
this.embeds.add(
|
||||||
|
MessageUtil.getEmbed(
|
||||||
|
Color(0xE0311A),
|
||||||
|
"Not playing",
|
||||||
|
"I'm not playing anything currently",
|
||||||
|
"${u.asUser().username}#${u.asUser().discriminator}"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return@action
|
||||||
|
}
|
||||||
|
val gts = MusicManager.getGuildTrackScheduler(this.guild!!.asGuild(), player)
|
||||||
|
val targetPos = TimeUtil.getTimeUnformated(this.arguments.position)
|
||||||
|
if (player.playingTrack!!.length.inWholeMilliseconds > targetPos && targetPos >= 0) {
|
||||||
|
player.seekTo(targetPos)
|
||||||
|
} else {
|
||||||
|
this.respond {
|
||||||
|
this.embeds.add(
|
||||||
|
MessageUtil.getEmbed(
|
||||||
|
Color(0xE0311A),
|
||||||
|
"Invalid position",
|
||||||
|
"The position you specified is invalid",
|
||||||
|
"${u.asUser().username}#${u.asUser().discriminator}"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return@action
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
this.respond {
|
||||||
|
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}",
|
||||||
|
user.asUser().username + "#" + user.asUser().discriminator,
|
||||||
|
"https://img.youtube.com/vi/" + UrlUtil.getYtThumbnailUrl(track.uri!!) + "/maxresdefault.jpg"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
this.actionRow {
|
||||||
|
this.components.addAll(
|
||||||
|
ButtonUtil.getMusicControllerButtons(
|
||||||
|
player.paused,
|
||||||
|
gts.repeating
|
||||||
|
).components
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue