From dda1ec2028868fbb86b04fafa185dee716c76300 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Mon, 16 Sep 2024 23:52:40 +0800 Subject: [PATCH] feat: upgrade music command and add get song play url command --- src/main/kotlin/cn/rtast/fancybot/FancyBot.kt | 4 +- .../fancybot/commands/lookup/MusicCommand.kt | 65 +++++++++++++++++-- .../cn/rtast/fancybot/entity/music/SongUrl.kt | 16 +++++ 3 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 src/main/kotlin/cn/rtast/fancybot/entity/music/SongUrl.kt diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index d05a636..c837fa5 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -14,6 +14,7 @@ import cn.rtast.fancybot.commands.lookup.GPTCommand import cn.rtast.fancybot.commands.lookup.GithubUserCommand import cn.rtast.fancybot.commands.lookup.MCPingCommand import cn.rtast.fancybot.commands.lookup.MusicCommand +import cn.rtast.fancybot.commands.lookup.MusicPlayUrlCommand import cn.rtast.fancybot.commands.lookup.NslookupCommand import cn.rtast.fancybot.commands.lookup.PixivCommand import cn.rtast.fancybot.commands.lookup.QRCodeCommand @@ -149,7 +150,8 @@ val commands = listOf( NiuziSignCommand(), MyNiuziCommand(), JiJianCommand(), LikeMeCommand(), CompilerCommand(), GPTCommand(), - GithubUserCommand(), AboutCommand() + GithubUserCommand(), AboutCommand(), + MusicPlayUrlCommand() ) suspend fun main() { diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MusicCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MusicCommand.kt index ff420bc..4c78e8d 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MusicCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MusicCommand.kt @@ -10,6 +10,7 @@ package cn.rtast.fancybot.commands.lookup import cn.rtast.fancybot.configManager import cn.rtast.fancybot.entity.music.Search import cn.rtast.fancybot.entity.music.SearchedResult +import cn.rtast.fancybot.entity.music.SongUrl import cn.rtast.fancybot.util.Http import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.enums.MusicShareType @@ -23,7 +24,16 @@ class MusicCommand : BaseCommand() { private val searchedResult = mutableMapOf>() - override suspend fun executeGroup(listener: OBMessage, message: GroupMessage, args: List) { + companion object { + fun searchSong(keyword: String): Search { + return Http.get( + "${configManager.ncmAPI}/search", + mapOf("keywords" to keyword), + ) + } + } + + private suspend fun legacyMusicCommand(listener: OBMessage, message: GroupMessage, args: List) { if (args.isEmpty()) { val msg = MessageChain.Builder() .addAt(message.sender.userId) @@ -73,10 +83,7 @@ class MusicCommand : BaseCommand() { listener.sendGroupMessage(message.groupId, msg) } val keyword = args.joinToString(" ") - val result = Http.get( - "${configManager.ncmAPI}/search", - mapOf("keywords" to keyword), - ) + val result = searchSong(keyword) val tempResults = mutableListOf() result.result.songs.asSequence().take(5).forEach { val artists = it.artists.joinToString(", ") { it.name } @@ -96,4 +103,52 @@ class MusicCommand : BaseCommand() { } } } + + override suspend fun executeGroup(listener: OBMessage, message: GroupMessage, args: List) { + if (args.last() == "legacy" || args.last() == "l" || args.last() in "0".."4") { + this.legacyMusicCommand(listener, message, args) + return + } + if (args.isEmpty()) { + val msg = MessageChain.Builder() + .addAt(message.sender.userId) + .addText("发送`点歌 <歌名>`即可点第一首搜索到的歌曲~") + .addNewLine() + .addText("发送`点歌 <歌名> [l|legacy]`即可使用旧版点歌系统") + .build() + listener.sendGroupMessage(message.groupId, msg) + return + } + + val keyword = args.joinToString(" ") + val result = searchSong(keyword).result.songs.asSequence().first().id + val msg = MessageChain.Builder() + .addMusicShare(MusicShareType.Netease, result.toString()) + .build() + listener.sendGroupMessage(message.groupId, msg) + } +} + +class MusicPlayUrlCommand : BaseCommand() { + override val commandNames = listOf("/lj", "lj", "song", "/song") + + private fun getPlayUrl(id: String): String { + return Http.get("${configManager.ncmAPI}/song/url", mapOf("id" to id)).data.first().url + } + + override suspend fun executeGroup(listener: OBMessage, message: GroupMessage, args: List) { + val url = if (args.last() == "id" || args.last() == "i") { + val id = args.first() + this.getPlayUrl(id) + } else { + val keyword = args.joinToString(" ") + val id = MusicCommand.searchSong(keyword).result.songs.first().id.toString() + this.getPlayUrl(id) + } + val msg = MessageChain.Builder() + .addReply(message.messageId) + .addText(url) + .build() + listener.sendGroupMessage(message.groupId, msg) + } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/music/SongUrl.kt b/src/main/kotlin/cn/rtast/fancybot/entity/music/SongUrl.kt new file mode 100644 index 0000000..e7eb8f6 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/entity/music/SongUrl.kt @@ -0,0 +1,16 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/16 + */ + + +package cn.rtast.fancybot.entity.music + +data class SongUrl( + val data: List +) { + data class Data( + val url: String + ) +} \ No newline at end of file