chore: chore: chore: chore: chore: chore: chore: chore: chore: chore: chore: chore

This commit is contained in:
2024-09-29 14:15:16 +08:00
parent e2b6ffff38
commit 44e3e093d1
7 files changed
+48 -141

No files matched your search

+1 -1
View File
@@ -104,5 +104,5 @@ val commands = listOf(
DMSearchCommand(), LlamaCommand(),
QQMusicCommand(), BullShitGenerateCommand(),
NiuziRankCommand(), NiuziBankRankCommand(),
ShotSelfCommand()
ShotSelfCommand(), TenSetuCommand()
)
@@ -12,32 +12,27 @@ 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.entity.music.qq.CoverImage
import cn.rtast.fancybot.entity.music.qq.QMSearchResult
import cn.rtast.fancybot.entity.music.qq.QQMSearch
import cn.rtast.fancybot.util.Http
import cn.rtast.fancybot.util.str.encodeToBase64
import cn.rtast.fancybot.util.str.formatToMinutes
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.enums.MusicShareType
import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.MessageChain
import cn.rtast.rob.util.ob.NodeMessageChain
import cn.rtast.rob.util.ob.OneBotListener
import java.io.FileNotFoundException
import java.net.URI
import java.time.Instant
@CommandDescription("网易云音乐点歌")
class MusicCommand : BaseCommand() {
override val commandNames = listOf("点歌")
override val commandNames = listOf("点歌", "music")
private val searchedResult = mutableMapOf<Long, List<SearchedResult>>()
companion object {
private val MUSIC_API_URL = configManager.ncmAPI
fun searchSong(keyword: String): Search {
return Http.get<Search>(
"${configManager.ncmAPI}/search",
"$MUSIC_API_URL/search",
mapOf("keywords" to keyword),
)
}
@@ -68,7 +63,7 @@ class MusicCommand : BaseCommand() {
val msg = MessageChain.Builder()
.addMusicShare(MusicShareType.Netease, finalResult.id.toString())
.build()
message.reply(msg)
listener.sendGroupMessage(message.groupId, msg)
} catch (_: Exception) {
message.reply("输入有误请重新搜索本次搜索结果已清除")
}
@@ -127,8 +122,10 @@ class MusicCommand : BaseCommand() {
class MusicPlayUrlCommand : BaseCommand() {
override val commandNames = listOf("lj")
private val musicApiUrl = configManager.ncmAPI
private fun getPlayUrl(id: String): String {
return Http.get<SongUrl>("${configManager.ncmAPI}/song/url", mapOf("id" to id)).data.first().url
return Http.get<SongUrl>("$musicApiUrl/song/url", mapOf("id" to id)).data.first().url
}
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
@@ -154,87 +151,17 @@ class QQMusicCommand : BaseCommand() {
private val qqMusicApiUrl = configManager.qqMusicApiUrl
private val recordMap = mutableMapOf<Long, List<QMSearchResult>>()
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
if (args.isEmpty()) {
message.reply("发送`/qm <关键词>`即可搜索qq音乐的音乐哦")
return
}
this.recordMap.forEach { (key, results) ->
val validResults = results.filter { result ->
Instant.now().epochSecond - result.timestamp <= 30
}
if (validResults.isEmpty()) {
recordMap.remove(key)
} else {
recordMap[key] = validResults
}
}
val method = args.first()
when (method) {
"p" -> {
try {
val index = args.last().toInt()
val result = recordMap[message.sender.userId]!![index]
val msg = MessageChain.Builder()
.addMusicShare(MusicShareType.QQ, result.id.toString())
.build()
listener.sendGroupMessage(message.groupId, msg)
} catch (_: Exception) {
message.reply("回复错误已清除本次搜索结果")
}
recordMap.remove(message.sender.userId)
}
else -> {
try {
val keyword = args.joinToString(" ")
val response = Http.get<QQMSearch>(
"$qqMusicApiUrl/getSearchByKey",
mapOf("key" to keyword)
).response.data.song.list
val tempResultList = mutableListOf<QMSearchResult>()
response.forEach {
val coverUrl = Http.get<CoverImage>(
"$qqMusicApiUrl/getImageUrl",
mapOf("id" to it.albumMid)
)
val tempSearchResult = QMSearchResult(
it.songId, it.songName, it.singer.joinToString(", ") { join -> join.name },
it.interval, it.songMid, Instant.now().epochSecond, coverUrl.response.data.imageUrl
)
tempResultList.add(tempSearchResult)
}
recordMap[message.sender.userId] = tempResultList
val nodeMsg = NodeMessageChain.Builder()
val headerMsg = MessageChain.Builder()
.addText("发送 `qm p <序号>`即可返回对应的歌曲")
.addNewLine()
.addText("你有30秒的时间进行操作")
.build()
nodeMsg.addMessageChain(headerMsg, message.sender.userId)
tempResultList.forEachIndexed { index, it ->
try {
val imageBase64 = URI(it.albumUrl).toURL().readBytes().encodeToBase64()
val msg = MessageChain.Builder()
.addImage(imageBase64, true)
.addText("序号: $index")
.addNewLine()
.addText("歌曲名: ${it.name}")
.addNewLine()
.addText("歌手: ${it.singers}")
.addNewLine()
.addText("时长: ${it.interval.formatToMinutes()}")
.build()
nodeMsg.addMessageChain(msg, configManager.selfId)
} catch (_: FileNotFoundException) {
}
}
message.reply(nodeMsg.build())
} catch (_: Exception) {
}
}
}
val keyword = args.joinToString(" ")
val response = Http.get<QQMSearch>(
"$qqMusicApiUrl/getSearchByKey",
mapOf("key" to keyword)
).response.data.song.list.first().songId
val msg = MessageChain.Builder().addMusicShare(MusicShareType.QQ, response.toString()).build()
listener.sendGroupMessage(message.groupId, msg)
}
}
}
@@ -0,0 +1,30 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/9/29
*/
package cn.rtast.fancybot.commands.misc
import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.MessageChain
import cn.rtast.rob.util.ob.OneBotListener
class TenSetuCommand : BaseCommand() {
override val commandNames = listOf("十张色图")
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
val msg = MessageChain.Builder()
.addText("指令已经迁移到兑换列表中")
.addNewLine()
.addText("使用`/rdm 十张色图`来兑换吧~")
.addNewLine()
.addText("(需要20cm的牛子长度来兑换)")
.addNewLine()
.addText("此指令已废弃")
.build()
message.reply(msg)
}
}
@@ -1,20 +0,0 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/9/25
*/
package cn.rtast.fancybot.entity.music.qq
data class CoverImage(
val response: Response
) {
data class Response(
val data: Data
)
data class Data(
val imageUrl: String
)
}
@@ -1,18 +0,0 @@
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/9/25
*/
package cn.rtast.fancybot.entity.music.qq
data class QMSearchResult(
val id: Long,
val name: String,
val singers: String,
val interval: Int,
val mid: String,
val timestamp: Long,
val albumUrl: String
)
@@ -25,19 +25,7 @@ data class QQMSearch(
)
data class Song(
@SerializedName("albummid")
val albumMid: String,
val interval: Int,
@SerializedName("songmid")
val songMid: String,
@SerializedName("songid")
val songId: Long,
@SerializedName("songname")
val songName: String,
val singer: List<Singer>,
)
data class Singer(
val name: String
)
}