diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index 5788b62..3501de3 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -17,6 +17,7 @@ import cn.rtast.fancybot.util.misc.ImageBed import cn.rtast.fancybot.util.misc.initCommandAndItem import cn.rtast.fancybot.util.misc.initFilesDir import cn.rtast.fancybot.util.misc.initSetuIndex +import cn.rtast.fancybot.util.misc.toURI import cn.rtast.fancybot.util.misc.toURL import cn.rtast.rob.ROneBotFactory import cn.rtast.rob.entity.* @@ -26,6 +27,7 @@ import cn.rtast.rob.enums.ArrayMessageType import cn.rtast.rob.enums.QQFace import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.OneBotListener +import cn.rtast.rob.util.ob.asNode import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -82,22 +84,38 @@ class FancyBot : OneBotListener { if (command.contains("图床")) { val getMsg = this.getMessage(replyId.toString().toLong()) - val imageUrl = ImageURLCommand.getImageUrl(getMsg) - if (imageUrl == null) { + val imagesUrl = ImageURLCommand.getImageUrl(getMsg) + if (imagesUrl.isEmpty()) { message.reply("这个消息里没有图片呢!") } else { try { - val imageByteArray = imageUrl.toURL().readBytes() - val imageFileType = imageByteArray.getFileType() - val imageBedUrl = ImageBed.upload(imageByteArray, imageFileType) - val msg = MessageChain.Builder() - .addText(imageBedUrl.makeShortLink()) - .addNewLine(2) - .addText(imageBedUrl) - .build() - message.reply(msg) - } catch (_: Exception) { - message.reply("上传失败~") + if (imagesUrl.size == 1) { + val imageByteArray = imagesUrl[0].toURL().readBytes() + val imageFileType = imageByteArray.getFileType() + val imageBedUrl = ImageBed.upload(imageByteArray, imageFileType) + val msg = MessageChain.Builder() + .addText(imageBedUrl.makeShortLink()) + .addNewLine(2) + .addText(imageBedUrl) + .build() + message.reply(msg) + } else { + val messages = mutableListOf() + imagesUrl.forEach { + val imageByteArray = it.toURL().readBytes() + val imageFileType = imageByteArray.getFileType() + val imageBedUrl = ImageBed.upload(imageByteArray, imageFileType) + val msg = MessageChain.Builder() + .addText(imageBedUrl.makeShortLink()) + .addNewLine(2) + .addText(imageBedUrl) + .build() + messages.add(msg) + } + message.reply(messages.asNode(configManager.selfId)) + } + } catch (e: Exception) { + message.reply("上传失败: ${e.message}") } } } diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/parse/ImageURLCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/parse/ImageURLCommand.kt index 99ce348..5ec6a92 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/parse/ImageURLCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/parse/ImageURLCommand.kt @@ -7,33 +7,52 @@ package cn.rtast.fancybot.commands.parse +import cn.rtast.fancybot.commands.misc.ShortLinkCommand.Companion.makeShortLink +import cn.rtast.fancybot.configManager import cn.rtast.rob.entity.GetMessage import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.enums.ArrayMessageType +import cn.rtast.rob.util.ob.MessageChain +import cn.rtast.rob.util.ob.asNode object ImageURLCommand { - fun getImageUrl(message: GetMessage.Data): String? { + fun getImageUrl(message: GetMessage.Data): List { try { - val image = message.message.find { it.type == ArrayMessageType.image } - val url = if (image == null) { - val gif = message.message.find { it.type == ArrayMessageType.mface }!! - gif.data.url!! - } else { - image.data.file!! + val images = mutableListOf() + message.message.forEach { + if (it.type == ArrayMessageType.image) images.add(it.data.url!!) + if (it.type == ArrayMessageType.mface) images.add(it.data.file!!) } - return url + return images } catch (_: NullPointerException) { - return null + return emptyList() } } suspend fun callback(groupMessage: GroupMessage, message: GetMessage.Data) { - val url = getImageUrl(message) - if (url == null) { + val images = getImageUrl(message) + if (images.isEmpty()) { groupMessage.reply("这个消息里没有图片呢!") } else { - groupMessage.reply(url) + if (images.size == 1) { + val msg = MessageChain.Builder() + .addText(images.first().makeShortLink()) + .addNewLine(2) + .addText(images.first()) + .build() + groupMessage.reply(msg) + } else { + val messages = mutableListOf() + images.forEach { + val msg = MessageChain.Builder() + .addText(it) + .addNewLine(2) + .build() + messages.add(msg) + } + groupMessage.reply(messages.asNode(configManager.selfId)) + } } } } \ No newline at end of file