From e375f20e9ca106b4335f4155d3270e20aa36a605 Mon Sep 17 00:00:00 2001 From: RTAkland Date: Mon, 14 Oct 2024 22:41:01 +0800 Subject: [PATCH] feat: support gen short link and create pastebin using reply --- src/main/kotlin/cn/rtast/fancybot/FancyBot.kt | 16 +++++++++++++ .../fancybot/commands/misc/PastebinCommand.kt | 23 ++++++++++++++----- .../kotlin/cn/rtast/fancybot/util/misc/URI.kt | 14 +++++++++++ 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index a31ccb3..7e4d6aa 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -7,8 +7,10 @@ package cn.rtast.fancybot +import cn.rtast.fancybot.commands.misc.PastebinCommand import cn.rtast.fancybot.commands.misc.ReactionCommand import cn.rtast.fancybot.commands.misc.ScanQRCodeCommand +import cn.rtast.fancybot.commands.misc.ShortLinkCommand.Companion.makeShortLink import cn.rtast.fancybot.commands.parse.* import cn.rtast.fancybot.commands.reply.ImageBedCommand import cn.rtast.fancybot.enums.WSType @@ -17,6 +19,7 @@ import cn.rtast.fancybot.util.misc.convertToDate 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.isValidUrl import cn.rtast.rob.ROneBotFactory import cn.rtast.rob.entity.* import cn.rtast.rob.entity.lagrange.FileEvent @@ -28,6 +31,7 @@ import cn.rtast.rob.util.ob.OneBotListener import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import sun.net.www.content.text.plain import java.io.File import java.net.URI @@ -77,6 +81,18 @@ class FancyBot : OneBotListener { val command = message.message.reversed().find { it.type == ArrayMessageType.text }!!.data.text!! val replyId = message.message.find { it.type == ArrayMessageType.reply }!!.data.id!! val getMsg = this.getMessage(replyId.toString().toLong()) + val plainTextContent = getMsg.message + .filter { it.type == ArrayMessageType.text } + .joinToString { it.data.text!! } + if (command.contains("/sl") || command.contains("/short")) { + // 使用回复消息的方式快速对一个url消息创建一个短链接 + message.reply(plainTextContent.trim().makeShortLink()) + } + if (command.contains("/pb") || command.contains("/pastebin")) { + // 使用回复消息的方式快速将创建一个pastebin + val shortUrl = PastebinCommand.createPastebin(plainTextContent).second + message.reply(shortUrl) + } if (command.contains("/ascii") || command.contains("/asc")) { // 使用回复消息的方式直接对一个图片进行生成Ascii art的操作 val url = AsciiArtCommand.getImageUrl(getMsg) diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/misc/PastebinCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/misc/PastebinCommand.kt index 2d1d864..6e24931 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/misc/PastebinCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/misc/PastebinCommand.kt @@ -25,14 +25,25 @@ import cn.rtast.rob.util.ob.OneBotListener class PastebinCommand : BaseCommand() { override val commandNames = listOf("/pastebin", "/pb") + companion object { + /** + * 创建一个pastebin返回一个pair 第一个是原始链接, 第二个是缩短url后的链接 + */ + fun createPastebin(content: String): Pair { + val pastebinPayload = PastebinPayload(content) + val response = Http.post( + "$API_RTAST_URL/api/pastebin", pastebinPayload.toJson(), + params = mapOf("key" to configManager.apiRtastKey) + ) + val url = "$API_RTAST_URL/api/pp/${response.id}?raw=true" + return url to url.makeShortLink() + } + } + override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { val content = args.joinToString(" ") - val pastebinPayload = PastebinPayload(content) - val response = Http.post( - "$API_RTAST_URL/api/pastebin", pastebinPayload.toJson(), - params = mapOf("key" to configManager.apiRtastKey) - ) - message.reply("$API_RTAST_URL/api/pp/${response.id}?raw=true".makeShortLink()) + val shortUrl = createPastebin(content).second + message.reply(shortUrl) insertActionRecord(CommandAction.Pastebin, message.sender.userId, content) } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/util/misc/URI.kt b/src/main/kotlin/cn/rtast/fancybot/util/misc/URI.kt index 2a2515e..8d60e42 100644 --- a/src/main/kotlin/cn/rtast/fancybot/util/misc/URI.kt +++ b/src/main/kotlin/cn/rtast/fancybot/util/misc/URI.kt @@ -10,10 +10,24 @@ package cn.rtast.fancybot.util.misc import java.net.URI import java.net.URL +private val urlRegex = Regex( + "^(https?://)?" + + "([\\w\\-]+\\.)+[a-zA-Z]{2,6}" + + "|(https?://)?" + + "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}" + + "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" + + "(:\\d{1,5})?" + + "(/.*)?$" +) + fun String.toURL(): URL { return URI(this).toURL() } fun String.toURI(): URI { return URI(this) +} + +fun String.isValidUrl(): Boolean { + return urlRegex.matches(this) } \ No newline at end of file