feat: support get multi image get

This commit is contained in:
2024-10-09 14:55:03 +08:00
parent 44c622190d
commit cd69d9a18e
2 files changed
+62 -25

No files matched your search

+31 -13
View File
@@ -17,6 +17,7 @@ import cn.rtast.fancybot.util.misc.ImageBed
import cn.rtast.fancybot.util.misc.initCommandAndItem import cn.rtast.fancybot.util.misc.initCommandAndItem
import cn.rtast.fancybot.util.misc.initFilesDir import cn.rtast.fancybot.util.misc.initFilesDir
import cn.rtast.fancybot.util.misc.initSetuIndex import cn.rtast.fancybot.util.misc.initSetuIndex
import cn.rtast.fancybot.util.misc.toURI
import cn.rtast.fancybot.util.misc.toURL import cn.rtast.fancybot.util.misc.toURL
import cn.rtast.rob.ROneBotFactory import cn.rtast.rob.ROneBotFactory
import cn.rtast.rob.entity.* 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.enums.QQFace
import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.MessageChain
import cn.rtast.rob.util.ob.OneBotListener import cn.rtast.rob.util.ob.OneBotListener
import cn.rtast.rob.util.ob.asNode
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -82,22 +84,38 @@ class FancyBot : OneBotListener {
if (command.contains("图床")) { if (command.contains("图床")) {
val getMsg = this.getMessage(replyId.toString().toLong()) val getMsg = this.getMessage(replyId.toString().toLong())
val imageUrl = ImageURLCommand.getImageUrl(getMsg) val imagesUrl = ImageURLCommand.getImageUrl(getMsg)
if (imageUrl == null) { if (imagesUrl.isEmpty()) {
message.reply("这个消息里没有图片呢!") message.reply("这个消息里没有图片呢!")
} else { } else {
try { try {
val imageByteArray = imageUrl.toURL().readBytes() if (imagesUrl.size == 1) {
val imageFileType = imageByteArray.getFileType() val imageByteArray = imagesUrl[0].toURL().readBytes()
val imageBedUrl = ImageBed.upload(imageByteArray, imageFileType) val imageFileType = imageByteArray.getFileType()
val msg = MessageChain.Builder() val imageBedUrl = ImageBed.upload(imageByteArray, imageFileType)
.addText(imageBedUrl.makeShortLink()) val msg = MessageChain.Builder()
.addNewLine(2) .addText(imageBedUrl.makeShortLink())
.addText(imageBedUrl) .addNewLine(2)
.build() .addText(imageBedUrl)
message.reply(msg) .build()
} catch (_: Exception) { message.reply(msg)
message.reply("上传失败~") } else {
val messages = mutableListOf<MessageChain>()
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}")
} }
} }
} }
@@ -7,33 +7,52 @@
package cn.rtast.fancybot.commands.parse 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.GetMessage
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.enums.ArrayMessageType import cn.rtast.rob.enums.ArrayMessageType
import cn.rtast.rob.util.ob.MessageChain
import cn.rtast.rob.util.ob.asNode
object ImageURLCommand { object ImageURLCommand {
fun getImageUrl(message: GetMessage.Data): String? { fun getImageUrl(message: GetMessage.Data): List<String> {
try { try {
val image = message.message.find { it.type == ArrayMessageType.image } val images = mutableListOf<String>()
val url = if (image == null) { message.message.forEach {
val gif = message.message.find { it.type == ArrayMessageType.mface }!! if (it.type == ArrayMessageType.image) images.add(it.data.url!!)
gif.data.url!! if (it.type == ArrayMessageType.mface) images.add(it.data.file!!)
} else {
image.data.file!!
} }
return url return images
} catch (_: NullPointerException) { } catch (_: NullPointerException) {
return null return emptyList()
} }
} }
suspend fun callback(groupMessage: GroupMessage, message: GetMessage.Data) { suspend fun callback(groupMessage: GroupMessage, message: GetMessage.Data) {
val url = getImageUrl(message) val images = getImageUrl(message)
if (url == null) { if (images.isEmpty()) {
groupMessage.reply("这个消息里没有图片呢!") groupMessage.reply("这个消息里没有图片呢!")
} else { } 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<MessageChain>()
images.forEach {
val msg = MessageChain.Builder()
.addText(it)
.addNewLine(2)
.build()
messages.add(msg)
}
groupMessage.reply(messages.asNode(configManager.selfId))
}
} }
} }
} }