diff --git a/src/main/kotlin/cn/rtast/fancybot/Const.kt b/src/main/kotlin/cn/rtast/fancybot/Const.kt index 69b95db..cdf9820 100644 --- a/src/main/kotlin/cn/rtast/fancybot/Const.kt +++ b/src/main/kotlin/cn/rtast/fancybot/Const.kt @@ -118,5 +118,6 @@ val commands = listOf( ShotSelfCommand(), TenSetuCommand(), ReactionCommand(), MCSkinCommand(), GithubLatestCommitCommand(), RandomMusicCommand(), - ZDJDCommand(), ScanQRCodeCommand() + ZDJDCommand(), ScanQRCodeCommand(), + TTSCommand() ) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/misc/TTSCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/misc/TTSCommand.kt new file mode 100644 index 0000000..8fb3f98 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/commands/misc/TTSCommand.kt @@ -0,0 +1,42 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/10/7 + */ + + +package cn.rtast.fancybot.commands.misc + +import cn.rtast.fancybot.annotations.CommandDescription +import cn.rtast.fancybot.entity.tts.TTSResponse +import cn.rtast.fancybot.util.Http +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 +import okhttp3.FormBody + +@CommandDescription("将文字转换成语音(TTS)!") +class TTSCommand : BaseCommand() { + override val commandNames = listOf("/tts") + + private val ttsApiUrl = "https://ttsmp3.com/makemp3_new.php" + + override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { + if (args.isEmpty()) { + message.reply("发送`/tts <文字>`就可以生成语音啦~") + return + } + val content = args.joinToString(" ").trim() + val form = FormBody.Builder() + .add("msg", content) + .add("lang", "Zhiyu") + .add("source", "ttsmp3") + .build() + val response = Http.post(ttsApiUrl, form) + val msg = MessageChain.Builder() + .addRecord(response.url.replace("https://", "https://proxy.rtast.cn/https/")) + .build() + listener.sendGroupMessage(message.groupId, msg) + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/tts/TTSResponse.kt b/src/main/kotlin/cn/rtast/fancybot/entity/tts/TTSResponse.kt new file mode 100644 index 0000000..e21be19 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/entity/tts/TTSResponse.kt @@ -0,0 +1,15 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/10/7 + */ + + +package cn.rtast.fancybot.entity.tts + +import com.google.gson.annotations.SerializedName + +data class TTSResponse( + @SerializedName("URL") + val url: String +) \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/Http.kt b/src/main/kotlin/cn/rtast/fancybot/util/Http.kt index 5455875..cd5a959 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/Http.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/Http.kt @@ -48,7 +48,7 @@ object Http { return result.fromJson() } - private fun executeRequest(request: Request): String { + fun executeRequest(request: Request): String { return okHttpClient.newCall(request).execute().body.string() } @@ -123,4 +123,17 @@ object Http { val headerRequest = addHeaders(request, headers) return this.executeRequest(headerRequest.build()) } + + @JvmOverloads + inline fun post( + url: String, + form: FormBody, + headers: Map? = null + ): T { + val request = Request.Builder() + .post(form) + .url(buildParams(url, headers)) + val headerRequest = addHeaders(request, headers) + return this.executeRequest(headerRequest.build()).fromJson() + } }