feat: add ascii art upload to image bed

This commit is contained in:
2024-10-11 13:47:26 +08:00
parent 7fda4dc333
commit ccb72a7277
3 files changed
+22 -14

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
[versions] [versions]
kotlinVersion = "2.0.20" kotlinVersion = "2.0.20"
ronebotVersion = "1.13.0" ronebotVersion = "1.13.1"
shadowVersion = "8.3.0" shadowVersion = "8.3.0"
okhttpVersion = "5.0.0-alpha.14" okhttpVersion = "5.0.0-alpha.14"
exposedVersion = "0.53.0" exposedVersion = "0.53.0"
@@ -173,15 +173,13 @@ class FancyBot : OneBotListener {
this.sendGroupMessage(groupId, msg) this.sendGroupMessage(groupId, msg)
} }
override suspend fun onPoke(event: PokeEvent) { override suspend fun onGroupPoke(event: PokeEvent) {
event.groupId?.let {
if (event.targetId == configManager.selfId) { if (event.targetId == configManager.selfId) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(event.userId) .addAt(event.userId)
.addText("${event.action.first()}牛魔呢") .addText("${event.action.first()}牛魔呢")
.build() .build()
this.sendGroupMessage(it, msg) this.sendGroupMessage(event.groupId!!, msg)
}
} }
} }
} }
@@ -8,7 +8,10 @@
package cn.rtast.fancybot.commands.parse package cn.rtast.fancybot.commands.parse
import cn.rtast.fancybot.annotations.CommandDescription import cn.rtast.fancybot.annotations.CommandDescription
import cn.rtast.fancybot.commands.misc.ShortLinkCommand.Companion.makeShortLink
import cn.rtast.fancybot.util.Logger import cn.rtast.fancybot.util.Logger
import cn.rtast.fancybot.util.file.getFileType
import cn.rtast.fancybot.util.misc.ImageBed
import cn.rtast.fancybot.util.misc.makeGif import cn.rtast.fancybot.util.misc.makeGif
import cn.rtast.fancybot.util.str.encodeToBase64 import cn.rtast.fancybot.util.str.encodeToBase64
import cn.rtast.fancybot.util.misc.toByteArray import cn.rtast.fancybot.util.misc.toByteArray
@@ -102,10 +105,14 @@ class AsciiArtCommand : BaseCommand() {
decoder.read(gifStream) decoder.read(gifStream)
if (decoder.frameCount == 0) { if (decoder.frameCount == 0) {
val bufferedImage = withContext(Dispatchers.IO) { ImageIO.read(URI(url).toURL()) } val bufferedImage = withContext(Dispatchers.IO) { ImageIO.read(URI(url).toURL()) }
val imageBase64 = bufferedImage.convertToAscii() val imageBytes = bufferedImage.convertToAscii()
.saveAsciiArtToImage(bufferedImage.width, bufferedImage.height) .saveAsciiArtToImage(bufferedImage.width, bufferedImage.height)
.toByteArray().encodeToBase64() .toByteArray()
val msg = MessageChain.Builder().addImage(imageBase64, true).build() val imageBedUrl = ImageBed.upload(imageBytes, imageBytes.getFileType())
val msg = MessageChain.Builder()
.addImage(imageBytes.encodeToBase64(), true)
.addText(imageBedUrl)
.build()
message.reply(msg) message.reply(msg)
} else { } else {
logger.info("制作GIF Ascii art中, 总帧数: ${decoder.frameCount}") logger.info("制作GIF Ascii art中, 总帧数: ${decoder.frameCount}")
@@ -119,12 +126,15 @@ class AsciiArtCommand : BaseCommand() {
} }
logger.info("合成GIF中...") logger.info("合成GIF中...")
val gifBytes = decoder.makeGif(asciiFrames) val gifBytes = decoder.makeGif(asciiFrames)
val imageBedUrl = ImageBed.upload(gifBytes, gifBytes.getFileType()).makeShortLink()
logger.info("合并完成") logger.info("合并完成")
val gifBase64 = gifBytes.encodeToBase64() val gifBase64 = gifBytes.encodeToBase64()
logger.info("处理后的图片大小: ${(gifBytes.size / 1024 / 1024).toInt()}MB") logger.info("处理后的图片大小: ${(gifBytes.size / 1024 / 1024).toInt()}MB")
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addImage(gifBase64, true) .addImage(gifBase64, true)
message.reply(msg.build()) .addText(imageBedUrl)
.build()
message.reply(msg)
} }
} catch (_: OutOfMemoryError) { } catch (_: OutOfMemoryError) {
message.reply("GIF处理失败: 内存溢出") message.reply("GIF处理失败: 内存溢出")