From bc04c5351748722bd56d1ad84e0ec21b35b61b7d Mon Sep 17 00:00:00 2001 From: RTAkland Date: Fri, 27 Sep 2024 23:31:01 +0800 Subject: [PATCH] chore: improve some command --- src/main/kotlin/cn/rtast/fancybot/Const.kt | 12 ++--- src/main/kotlin/cn/rtast/fancybot/FancyBot.kt | 54 ++++++------------- .../rtast/fancybot/commands/AboutCommand.kt | 4 +- .../fancybot/commands/lookup/AICommand.kt | 6 +-- .../commands/lookup/CigaretteCommand.kt | 4 +- .../commands/lookup/DomainPriceCommand.kt | 12 ++--- .../commands/lookup/GithubUserCommand.kt | 14 ++--- .../fancybot/commands/lookup/MCPingCommand.kt | 4 +- .../commands/lookup/NslookupCommand.kt | 3 +- .../fancybot/commands/lookup/PixivCommand.kt | 41 +++++++------- .../fancybot/commands/lookup/QRCodeCommand.kt | 3 +- .../commands/niuzi/NiuziRedeemCommand.kt | 20 +++---- .../fancybot/commands/parse/BVParseCommand.kt | 31 +++++++++-- .../cn/rtast/fancybot/entity/pixiv/Ranking.kt | 13 ++++- .../cn/rtast/fancybot/items/BaisiItem.kt | 7 +-- .../cn/rtast/fancybot/items/HeisiItem.kt | 7 +-- .../cn/rtast/fancybot/items/NiuziItem.kt | 30 +++++++++++ .../cn/rtast/fancybot/items/SetuItem.kt | 7 +-- 18 files changed, 138 insertions(+), 134 deletions(-) create mode 100644 src/main/kotlin/cn/rtast/fancybot/items/NiuziItem.kt diff --git a/src/main/kotlin/cn/rtast/fancybot/Const.kt b/src/main/kotlin/cn/rtast/fancybot/Const.kt index d15f531..b1f8c74 100644 --- a/src/main/kotlin/cn/rtast/fancybot/Const.kt +++ b/src/main/kotlin/cn/rtast/fancybot/Const.kt @@ -24,6 +24,7 @@ import cn.rtast.fancybot.entity.enums.ImageType import cn.rtast.fancybot.entity.enums.WSType import cn.rtast.fancybot.items.BaisiItem import cn.rtast.fancybot.items.HeisiItem +import cn.rtast.fancybot.items.NiuziItem import cn.rtast.fancybot.items.SetuItem import cn.rtast.fancybot.util.file.ConfigManager import cn.rtast.fancybot.util.file.NiuziBankManager @@ -71,14 +72,13 @@ val itemManager = ItemManager() val niuziManager = NiuziManager() val niuziBankManager = NiuziBankManager() -val items = listOf( - HeisiItem(), - BaisiItem(), - SetuItem() -) - val START_UP_TIME = Instant.now().epochSecond +val items = listOf( + HeisiItem(), BaisiItem(), SetuItem(), + NiuziItem() +) + val commands = listOf( EchoCommand(), JrrpCommand(), NiuziRedeemCommand(), HitokotoCommand(), diff --git a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt index 7d947f7..f12e330 100644 --- a/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt +++ b/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt @@ -8,10 +8,8 @@ package cn.rtast.fancybot import cn.rtast.fancybot.commands.parse.* -import cn.rtast.fancybot.entity.bili.CardShare import cn.rtast.fancybot.entity.enums.WSType import cn.rtast.fancybot.util.initDatabase -import cn.rtast.fancybot.util.str.fromJson import cn.rtast.rob.ROneBotFactory import cn.rtast.rob.entity.* import cn.rtast.rob.entity.lagrange.FileEvent @@ -40,6 +38,9 @@ class FancyBot : OneBotListener { val messageId = message.messageId println("$sender($senderId: $groupId >>> $messageId): $msg") + ReverseGIFCommand.callback(message) + AsciiArtCommand.callback(message) + if (message.rawMessage.contains("原神")) { message.reply("你原神牛魔呢") } @@ -49,9 +50,6 @@ class FancyBot : OneBotListener { calculateResult?.let { message.reply(calculateResult) } } - ReverseGIFCommand.callback(message) - AsciiArtCommand.callback(message) - if (message.message.any { it.type == ArrayMessageType.reply }) { // Image url parse val command = message.message.reversed().find { it.type == ArrayMessageType.text }!!.data.text!! val replyId = message.message.find { it.type == ArrayMessageType.reply }!!.data.id!! @@ -61,6 +59,18 @@ class FancyBot : OneBotListener { } } + if (message.rawMessage.startsWith("https://github.com/") || message.rawMessage.startsWith("git@github.com:")) { + GitHubParseCommand.parse(this, message) + } + + if (message.rawMessage.startsWith("BV") || + message.rawMessage.startsWith("https://www.bilibili.com") || + message.rawMessage.contains("https://b23.tv/") || + message.message.find { it.type == ArrayMessageType.json } != null + ) { + BVParseCommand.parse(this, message) + } + coroutineScope.launch { message.message.forEach { if (it.type == ArrayMessageType.image) { @@ -73,40 +83,6 @@ class FancyBot : OneBotListener { } } } - - if (message.rawMessage.startsWith("https://github.com/") || message.rawMessage.startsWith("git@github.com:")) { - GitHubParseCommand.parse(this, message) - } - - if (message.rawMessage.startsWith("BV") || - message.rawMessage.startsWith("https://www.bilibili.com") || - message.rawMessage.contains("https://b23.tv/") || - message.message.find { it.type == ArrayMessageType.json } != null - ) { - // parse bilibili video with a link, bvid or b23.tv link - val bvid = if (message.rawMessage.startsWith("BV")) { - message.rawMessage - } else if (message.rawMessage.split(" ").last().startsWith("https://b23.tv/")) { - val shortUrl = message.rawMessage.split(" ").last() - BVParseCommand.getShortUrlBVID(shortUrl) - } else if (message.message.find { it.type == ArrayMessageType.json } != null) { - val card = message.message.find { it.type == ArrayMessageType.json }!! - .data.data!!.toString().fromJson() - val shortUrl = if (card.meta.detail == null) { - if (!card.meta.news?.tag!!.contains("哔哩哔哩")) return - card.meta.news.jumpUrl - } else { - if (!card.meta.detail.title.contains("哔哩哔哩")) return - card.meta.detail.qqDocUrl - } - BVParseCommand.getShortUrlBVID(shortUrl) - } else { - message.rawMessage.split("?").first() - .split("/") - .last { it.isNotEmpty() && it.isNotBlank() } - } - BVParseCommand.parse(this, bvid, message) - } } override suspend fun onGroupMessageRevoke(message: GroupRevokeMessage) { diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/AboutCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/AboutCommand.kt index 68ee8fc..791caeb 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/AboutCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/AboutCommand.kt @@ -19,8 +19,6 @@ class AboutCommand : BaseCommand() { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addNewLine() .addText("Bot名称: FancyBot") .addNewLine() .addText("作者: RTAkland") @@ -29,6 +27,6 @@ class AboutCommand : BaseCommand() { .addNewLine() .addText("项目地址: https://repo.rtast.cn/RTAkland/FancyBot") .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply(msg) } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/AICommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/AICommand.kt index 81d9fbb..af3e374 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/AICommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/AICommand.kt @@ -30,14 +30,13 @@ class AICommand : BaseCommand() { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { val msg = MessageChain.Builder() - .addAt(message.sender.userId) .addText("发送`/ai [模型] <问题>`即可询问AI哦~") .addNewLine() .addText("不指定模型默认为从配置文件中读取 >>>${openAIModel}") .addNewLine() .addText("发送`/ai list`可以获取可用的模型列表~") .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply(msg) return } @@ -48,12 +47,11 @@ class AICommand : BaseCommand() { ) val modelsString = models.data.joinToString(", ") { it.id } val msg = MessageChain.Builder() - .addReply(message.messageId) .addText("可用的模型列表如下: ") .addNewLine() .addText(modelsString) .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply(msg) return } diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/CigaretteCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/CigaretteCommand.kt index 50fd226..7154c51 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/CigaretteCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/CigaretteCommand.kt @@ -27,13 +27,11 @@ class CigaretteCommand : BaseCommand() { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addNewLine() .addText("发送/tobacco <名称> [数量] 来搜索结果哦~") .addNewLine() .addText("最多只能显示出10条结果哦, 不指定数量的话默认是3条~") .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply(msg) return } val limit = if (args.size == 1) 3 else if (args.last().toInt() > 10) 3 else args.last().toInt() diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/DomainPriceCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/DomainPriceCommand.kt index 26ab415..0a4c831 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/DomainPriceCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/DomainPriceCommand.kt @@ -24,7 +24,7 @@ import java.awt.image.BufferedImage @CommandDescription("查询域名价格") class DomainPriceCommand : BaseCommand() { - override val commandNames = listOf("/domain") + override val commandNames = listOf("/domain", "/dp") private val canvasWidth = 400 private val canvasHeight = 300 @@ -80,10 +80,9 @@ class DomainPriceCommand : BaseCommand() { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { val msg = MessageChain.Builder() - .addAt(message.sender.userId) .addText("发送`/domain <域名>`即可查询对应的注册和续费价格~") .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply(msg) return } val suffix = args.first() @@ -103,10 +102,7 @@ class DomainPriceCommand : BaseCommand() { } else { this.createDomainPriceCard(suffix, response.realPrice to response.price) } - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addImage(cardImage, true) - .build() - listener.sendGroupMessage(message.groupId, msg) + val msg = MessageChain.Builder().addImage(cardImage, true).build() + message.reply(msg) } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/GithubUserCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/GithubUserCommand.kt index b509b27..a42280b 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/GithubUserCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/GithubUserCommand.kt @@ -69,11 +69,8 @@ class GithubUserCommand : BaseCommand() { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("发送`gh <用户名>`即可查询用户的信息~") - .build() - listener.sendGroupMessage(message.groupId, msg) + val msg = MessageChain.Builder().addText("发送`gh <用户名>`即可查询用户的信息~").build() + message.reply(msg) return } val username = args.first() @@ -82,10 +79,7 @@ class GithubUserCommand : BaseCommand() { headers = mapOf("Authorization" to configManager.githubKey) ) val image = this.createUserInfoCard(userInfo) - val msg = MessageChain.Builder() - .addReply(message.messageId) - .addImage(image, true) - .build() - listener.sendGroupMessage(message.groupId, msg) + val msg = MessageChain.Builder().addImage(image, true).build() + message.reply(msg) } } diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MCPingCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MCPingCommand.kt index a52f141..9e1196c 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MCPingCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/MCPingCommand.kt @@ -24,13 +24,11 @@ class MCPingCommand : BaseCommand() { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addNewLine() .addText("使用方法: /mcping :[port] [java|be]") .addNewLine() .addText("不添加平台默认Java版~") .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply(msg) return } val platform = if (args.size == 2) args.last() else "java" diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/NslookupCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/NslookupCommand.kt index be5c2ac..fec3499 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/NslookupCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/NslookupCommand.kt @@ -25,11 +25,10 @@ class NslookupCommand : BaseCommand() { val host = args.joinToString(" ") try { val msg = MessageChain.Builder() - .addReply(message.messageId) .addText("域名: ${host}解析后的IP地址为: ") .addText(withContext(Dispatchers.IO) { InetAddress.getByName(host) }.hostAddress) .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply(msg) } catch (_: UnknownHostException) { message.reply("未知的主机名: $host") } catch (e: Exception) { diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/PixivCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/PixivCommand.kt index be21cfb..99c42dd 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/PixivCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/PixivCommand.kt @@ -14,6 +14,7 @@ import cn.rtast.fancybot.util.str.encodeToBase64 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.NodeMessageChain import cn.rtast.rob.util.ob.OneBotListener import java.net.URI @@ -27,30 +28,35 @@ class PixivCommand : BaseCommand() { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("发送/pixiv | rank 来进行操作哦~") + .addText("发送`/pixiv | rank` 来进行操作哦~") .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply(msg) return } when (val keyword = args.first()) { "rank", "排名", "r" -> { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("今日Pixiv Ranking~") - .addNewLine() - + val node = NodeMessageChain.Builder() + .addMessageChain( + MessageChain.Builder().addText("今日Pixiv Ranking~").build(), + message.sender.userId + ) val result = Http.get(pixivRankingURL) result.contents.asSequence().take(5).forEach { try { + val msg = MessageChain.Builder() val imageBase64 = URI(it.getOriginUrl()).toURL().readBytes().encodeToBase64() - msg.addText(it.title) - .addImage(imageBase64, true) + msg.addImage(imageBase64, true) + .addText("标题: ${it.title}") .addNewLine() + .addText("用户: ${it.userName}(${it.userId}) | 作品ID: ${it.illustId}") + .addNewLine() + .addText("日期: ${it.date}") + node.addMessageChain(msg.build(), message.sender.userId) } catch (_: Exception) { } } - listener.sendGroupMessage(message.groupId, msg.build()) + node.addMessageChain(MessageChain.Builder().addText("图片来源: Pixiv").build(), message.sender.userId) + message.reply(node.build()) return } @@ -58,19 +64,14 @@ class PixivCommand : BaseCommand() { try { val id = keyword.toLong() val imageBase64 = URI("$imageProxyURL/$id.png").toURL().readBytes().encodeToBase64() - println(imageBase64) val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("来咯~ 你要的图片~~~") .addImage(imageBase64, true) + .addText("图片来源: Pixiv") .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply(msg) } catch (_: Exception) { - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addText("输入错误~检查一下有没有输错吧~") - .build() - listener.sendGroupMessage(message.groupId, msg) + val msg = MessageChain.Builder().addText("输入错误~检查一下有没有输错吧~").build() + message.reply(msg) } } } diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/QRCodeCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/QRCodeCommand.kt index be26a13..33e1458 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/lookup/QRCodeCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/lookup/QRCodeCommand.kt @@ -20,9 +20,8 @@ class QRCodeCommand : BaseCommand() { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { val content = args.joinToString(" ") val msg = MessageChain.Builder() - .addAt(message.sender.userId) .addImage("https://api.rtast.cn/api/generate_qr?data=$content") .build() - listener.sendGroupMessage(message.groupId, msg) + message.reply(msg) } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziRedeemCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziRedeemCommand.kt index a9ffad9..de45ea4 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziRedeemCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/niuzi/NiuziRedeemCommand.kt @@ -22,7 +22,7 @@ class NiuziRedeemCommand : BaseCommand() { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List) { if (args.isEmpty()) { val msg = MessageChain.Builder() - .addAt(message.sender.userId) + .addReply(message.messageId) .addText("发送 /rdm <物品名称> 即可兑换哦!") .addNewLine() .addText("发送 /rdm list 即可查看所有可兑换的物品~") @@ -35,7 +35,7 @@ class NiuziRedeemCommand : BaseCommand() { val status = niuziManager.getUser(message.sender.userId) if (status == null) { val msg = MessageChain.Builder() - .addAt(message.sender.userId) + .addReply(message.messageId) .addText("你还没有签到过呢要签到一次才能兑换哦~") .build() listener.sendGroupMessage(message.groupId, msg) @@ -44,19 +44,15 @@ class NiuziRedeemCommand : BaseCommand() { val item = args.first() if (item == "list" || item == "列表") { val priceTable = - itemManager.items.joinToString("\n") { "[${it.itemNames.joinToString("|")}]:${it.itemPrice}积分" } - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addNewLine() - .addText(priceTable) - .build() - listener.sendGroupMessage(message.groupId, msg) + itemManager.items.joinToString("\n") + { "[${it.itemNames.joinToString("|")}]:${it.itemPrice}cm" } + message.reply(priceTable) return } val selectedItem = itemManager.items.find { it.itemNames.any { any -> any == item } } if (selectedItem == null) { val msg = MessageChain.Builder() - .addAt(message.sender.userId) + .addReply(message.messageId) .addText("没有找到你想兑换的东西呢") .addNewLine() .addText("你可以发送 /rdm list来查看所有可兑换的物品") @@ -67,7 +63,7 @@ class NiuziRedeemCommand : BaseCommand() { val selectedItemPrice = selectedItem.itemPrice if (selectedItemPrice > status.length) { val msg = MessageChain.Builder() - .addAt(message.sender.userId) + .addReply(message.messageId) .addText("你的牛子长度不够兑换这个物品呢~") .addNewLine() .addText("你有: ${status.length}cm, 兑换需要: $selectedItemPrice cm~\"") @@ -77,7 +73,7 @@ class NiuziRedeemCommand : BaseCommand() { } val afterStatus = niuziManager.redeemItem(message.sender.userId, selectedItemPrice)?.length!! val msg = MessageChain.Builder() - .addAt(message.sender.userId) + .addReply(message.messageId) .addText("兑换成功正在发送奖品中~") .addNewLine() .addText("你花费了${selectedItemPrice}cm来兑换奖品, 还剩${afterStatus}cm") diff --git a/src/main/kotlin/cn/rtast/fancybot/commands/parse/BVParseCommand.kt b/src/main/kotlin/cn/rtast/fancybot/commands/parse/BVParseCommand.kt index 001ef10..27aef1a 100644 --- a/src/main/kotlin/cn/rtast/fancybot/commands/parse/BVParseCommand.kt +++ b/src/main/kotlin/cn/rtast/fancybot/commands/parse/BVParseCommand.kt @@ -7,18 +7,17 @@ package cn.rtast.fancybot.commands.parse -import cn.rtast.fancybot.entity.bili.ShortUrl -import cn.rtast.fancybot.entity.bili.UserStat -import cn.rtast.fancybot.entity.bili.VideoStat -import cn.rtast.fancybot.entity.bili.ViewCount +import cn.rtast.fancybot.entity.bili.* import cn.rtast.fancybot.util.Http import cn.rtast.fancybot.util.Resources import cn.rtast.fancybot.util.drawCustomImage import cn.rtast.fancybot.util.str.encodeToBase64 import cn.rtast.fancybot.util.str.formatNumber +import cn.rtast.fancybot.util.str.fromJson import cn.rtast.fancybot.util.str.setTruncate import cn.rtast.fancybot.util.toByteArray 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.OneBotListener import okhttp3.OkHttpClient @@ -150,7 +149,29 @@ object BVParseCommand { } } - suspend fun parse(listener: OneBotListener, bvid: String, message: GroupMessage) { + suspend fun parse(listener: OneBotListener, message: GroupMessage) { + // parse bilibili video with a link, bvid or b23.tv link + val bvid = if (message.rawMessage.startsWith("BV")) { + message.rawMessage + } else if (message.rawMessage.split(" ").last().startsWith("https://b23.tv/")) { + val shortUrl = message.rawMessage.split(" ").last() + BVParseCommand.getShortUrlBVID(shortUrl) + } else if (message.message.find { it.type == ArrayMessageType.json } != null) { + val card = message.message.find { it.type == ArrayMessageType.json }!! + .data.data!!.toString().fromJson() + val shortUrl = if (card.meta.detail == null) { + if (!card.meta.news?.tag!!.contains("哔哩哔哩")) return + card.meta.news.jumpUrl + } else { + if (!card.meta.detail.title.contains("哔哩哔哩")) return + card.meta.detail.qqDocUrl + } + BVParseCommand.getShortUrlBVID(shortUrl) + } else { + message.rawMessage.split("?").first() + .split("/") + .last { it.isNotEmpty() && it.isNotBlank() } + } val videoInfo = this.getVideoStat(bvid) val viewCount = this.getViewCount(bvid, videoInfo.data.cid) val shortUrl = this.generateShortUrl(bvid, videoInfo.data.aid) diff --git a/src/main/kotlin/cn/rtast/fancybot/entity/pixiv/Ranking.kt b/src/main/kotlin/cn/rtast/fancybot/entity/pixiv/Ranking.kt index bec75fe..bb81565 100644 --- a/src/main/kotlin/cn/rtast/fancybot/entity/pixiv/Ranking.kt +++ b/src/main/kotlin/cn/rtast/fancybot/entity/pixiv/Ranking.kt @@ -7,16 +7,25 @@ package cn.rtast.fancybot.entity.pixiv +import com.google.gson.annotations.SerializedName + data class Ranking( val contents: List ) { data class Content( val title: String, val tags: List, - val url: String + val url: String, + @SerializedName("user_name") + val userName: String, + @SerializedName("user_id") + val userId: Long, + @SerializedName("illust_id") + val illustId: Long, + val date: String, ) { fun getOriginUrl(): String { - return url.replace("https://i.pximg.net", "https://proxy.rtast.cn/https/pixiv.microyu.workers.dev") + return url.replace("https://i.pximg.net", "https://i.pixiv.re") .replace("/c/240x480/img-master/", "/img-original/") .replace("_master1200", "") } diff --git a/src/main/kotlin/cn/rtast/fancybot/items/BaisiItem.kt b/src/main/kotlin/cn/rtast/fancybot/items/BaisiItem.kt index 5d350a3..314cd71 100644 --- a/src/main/kotlin/cn/rtast/fancybot/items/BaisiItem.kt +++ b/src/main/kotlin/cn/rtast/fancybot/items/BaisiItem.kt @@ -20,10 +20,7 @@ class BaisiItem : Item() { override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Double) { val url = Http.get("https://v2.api-m.com/api/baisi").data - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addImage(url) - .build() - listener.sendGroupMessage(message.groupId, msg) + val msg = MessageChain.Builder().addImage(url).build() + message.reply(msg) } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/items/HeisiItem.kt b/src/main/kotlin/cn/rtast/fancybot/items/HeisiItem.kt index 37acf15..9ed46d4 100644 --- a/src/main/kotlin/cn/rtast/fancybot/items/HeisiItem.kt +++ b/src/main/kotlin/cn/rtast/fancybot/items/HeisiItem.kt @@ -20,10 +20,7 @@ class HeisiItem : Item() { override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Double) { val url = Http.get("https://v2.api-m.com/api/heisi").data - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addImage(url) - .build() - listener.sendGroupMessage(message.groupId, msg) + val msg = MessageChain.Builder().addImage(url).build() + message.reply(msg) } } \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/items/NiuziItem.kt b/src/main/kotlin/cn/rtast/fancybot/items/NiuziItem.kt new file mode 100644 index 0000000..62c7330 --- /dev/null +++ b/src/main/kotlin/cn/rtast/fancybot/items/NiuziItem.kt @@ -0,0 +1,30 @@ +/* + * Copyright © 2024 RTAkland + * Author: RTAkland + * Date: 2024/9/27 + */ + + +package cn.rtast.fancybot.items + +import cn.rtast.fancybot.niuziManager +import cn.rtast.fancybot.util.item.Item +import cn.rtast.rob.entity.GroupMessage +import cn.rtast.rob.util.ob.MessageChain +import cn.rtast.rob.util.ob.OneBotListener + +class NiuziItem : Item() { + override val itemNames = listOf("牛子", "nz", "niuzi") + override val itemPrice = 10.0 + + override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Double) { + val before = niuziManager.getUser(message.sender.userId)!! + val afterNiuzi = niuziManager.updateLength(message.sender.userId, -2.0)!! + val msg = MessageChain.Builder() + .addText("你的牛子到账啦, 你的牛子现在有${afterNiuzi.length}cm长呢!") + .addNewLine() + .addText("(之前的长度是${before.length}cm!)") + .build() + message.reply(msg) + } +} \ No newline at end of file diff --git a/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt b/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt index 141ead2..b224dd1 100644 --- a/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt +++ b/src/main/kotlin/cn/rtast/fancybot/items/SetuItem.kt @@ -31,10 +31,7 @@ class SetuItem : Item() { return } val imageBase64 = URI(response.urls.large).toURL().readBytes().encodeToBase64() - val msg = MessageChain.Builder() - .addAt(message.sender.userId) - .addImage(imageBase64, true) - .build() - listener.sendGroupMessage(message.groupId, msg) + val msg = MessageChain.Builder().addImage(imageBase64, true).build() + message.reply(msg) } } \ No newline at end of file