chore: improve some command

This commit is contained in:
2024-09-27 23:31:01 +08:00
parent e040819e61
commit bc04c53517
18 files changed
+138 -134

No files matched your search

+6 -6
View File
@@ -24,6 +24,7 @@ import cn.rtast.fancybot.entity.enums.ImageType
import cn.rtast.fancybot.entity.enums.WSType import cn.rtast.fancybot.entity.enums.WSType
import cn.rtast.fancybot.items.BaisiItem import cn.rtast.fancybot.items.BaisiItem
import cn.rtast.fancybot.items.HeisiItem import cn.rtast.fancybot.items.HeisiItem
import cn.rtast.fancybot.items.NiuziItem
import cn.rtast.fancybot.items.SetuItem import cn.rtast.fancybot.items.SetuItem
import cn.rtast.fancybot.util.file.ConfigManager import cn.rtast.fancybot.util.file.ConfigManager
import cn.rtast.fancybot.util.file.NiuziBankManager import cn.rtast.fancybot.util.file.NiuziBankManager
@@ -71,14 +72,13 @@ val itemManager = ItemManager()
val niuziManager = NiuziManager() val niuziManager = NiuziManager()
val niuziBankManager = NiuziBankManager() val niuziBankManager = NiuziBankManager()
val items = listOf(
HeisiItem(),
BaisiItem(),
SetuItem()
)
val START_UP_TIME = Instant.now().epochSecond val START_UP_TIME = Instant.now().epochSecond
val items = listOf(
HeisiItem(), BaisiItem(), SetuItem(),
NiuziItem()
)
val commands = listOf( val commands = listOf(
EchoCommand(), JrrpCommand(), EchoCommand(), JrrpCommand(),
NiuziRedeemCommand(), HitokotoCommand(), NiuziRedeemCommand(), HitokotoCommand(),
+15 -39
View File
@@ -8,10 +8,8 @@
package cn.rtast.fancybot package cn.rtast.fancybot
import cn.rtast.fancybot.commands.parse.* import cn.rtast.fancybot.commands.parse.*
import cn.rtast.fancybot.entity.bili.CardShare
import cn.rtast.fancybot.entity.enums.WSType import cn.rtast.fancybot.entity.enums.WSType
import cn.rtast.fancybot.util.initDatabase import cn.rtast.fancybot.util.initDatabase
import cn.rtast.fancybot.util.str.fromJson
import cn.rtast.rob.ROneBotFactory import cn.rtast.rob.ROneBotFactory
import cn.rtast.rob.entity.* import cn.rtast.rob.entity.*
import cn.rtast.rob.entity.lagrange.FileEvent import cn.rtast.rob.entity.lagrange.FileEvent
@@ -40,6 +38,9 @@ class FancyBot : OneBotListener {
val messageId = message.messageId val messageId = message.messageId
println("$sender($senderId: $groupId >>> $messageId): $msg") println("$sender($senderId: $groupId >>> $messageId): $msg")
ReverseGIFCommand.callback(message)
AsciiArtCommand.callback(message)
if (message.rawMessage.contains("原神")) { if (message.rawMessage.contains("原神")) {
message.reply("你原神牛魔呢") message.reply("你原神牛魔呢")
} }
@@ -49,9 +50,6 @@ class FancyBot : OneBotListener {
calculateResult?.let { message.reply(calculateResult) } calculateResult?.let { message.reply(calculateResult) }
} }
ReverseGIFCommand.callback(message)
AsciiArtCommand.callback(message)
if (message.message.any { it.type == ArrayMessageType.reply }) { // Image url parse if (message.message.any { it.type == ArrayMessageType.reply }) { // Image url parse
val command = message.message.reversed().find { it.type == ArrayMessageType.text }!!.data.text!! val command = message.message.reversed().find { it.type == ArrayMessageType.text }!!.data.text!!
val replyId = message.message.find { it.type == ArrayMessageType.reply }!!.data.id!! 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 { coroutineScope.launch {
message.message.forEach { message.message.forEach {
if (it.type == ArrayMessageType.image) { 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<CardShare>()
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) { override suspend fun onGroupMessageRevoke(message: GroupRevokeMessage) {
@@ -19,8 +19,6 @@ class AboutCommand : BaseCommand() {
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId)
.addNewLine()
.addText("Bot名称: FancyBot") .addText("Bot名称: FancyBot")
.addNewLine() .addNewLine()
.addText("作者: RTAkland") .addText("作者: RTAkland")
@@ -29,6 +27,6 @@ class AboutCommand : BaseCommand() {
.addNewLine() .addNewLine()
.addText("项目地址: https://repo.rtast.cn/RTAkland/FancyBot") .addText("项目地址: https://repo.rtast.cn/RTAkland/FancyBot")
.build() .build()
listener.sendGroupMessage(message.groupId, msg) message.reply(msg)
} }
} }
@@ -30,14 +30,13 @@ class AICommand : BaseCommand() {
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
if (args.isEmpty()) { if (args.isEmpty()) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId)
.addText("发送`/ai [模型] <问题>`即可询问AI哦~") .addText("发送`/ai [模型] <问题>`即可询问AI哦~")
.addNewLine() .addNewLine()
.addText("不指定模型默认为从配置文件中读取 >>>${openAIModel}") .addText("不指定模型默认为从配置文件中读取 >>>${openAIModel}")
.addNewLine() .addNewLine()
.addText("发送`/ai list`可以获取可用的模型列表~") .addText("发送`/ai list`可以获取可用的模型列表~")
.build() .build()
listener.sendGroupMessage(message.groupId, msg) message.reply(msg)
return return
} }
@@ -48,12 +47,11 @@ class AICommand : BaseCommand() {
) )
val modelsString = models.data.joinToString(", ") { it.id } val modelsString = models.data.joinToString(", ") { it.id }
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addReply(message.messageId)
.addText("可用的模型列表如下: ") .addText("可用的模型列表如下: ")
.addNewLine() .addNewLine()
.addText(modelsString) .addText(modelsString)
.build() .build()
listener.sendGroupMessage(message.groupId, msg) message.reply(msg)
return return
} }
@@ -27,13 +27,11 @@ class CigaretteCommand : BaseCommand() {
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
if (args.isEmpty()) { if (args.isEmpty()) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId)
.addNewLine()
.addText("发送/tobacco <名称> [数量] 来搜索结果哦~") .addText("发送/tobacco <名称> [数量] 来搜索结果哦~")
.addNewLine() .addNewLine()
.addText("最多只能显示出10条结果哦, 不指定数量的话默认是3条~") .addText("最多只能显示出10条结果哦, 不指定数量的话默认是3条~")
.build() .build()
listener.sendGroupMessage(message.groupId, msg) message.reply(msg)
return return
} }
val limit = if (args.size == 1) 3 else if (args.last().toInt() > 10) 3 else args.last().toInt() val limit = if (args.size == 1) 3 else if (args.last().toInt() > 10) 3 else args.last().toInt()
@@ -24,7 +24,7 @@ import java.awt.image.BufferedImage
@CommandDescription("查询域名价格") @CommandDescription("查询域名价格")
class DomainPriceCommand : BaseCommand() { class DomainPriceCommand : BaseCommand() {
override val commandNames = listOf("/domain") override val commandNames = listOf("/domain", "/dp")
private val canvasWidth = 400 private val canvasWidth = 400
private val canvasHeight = 300 private val canvasHeight = 300
@@ -80,10 +80,9 @@ class DomainPriceCommand : BaseCommand() {
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
if (args.isEmpty()) { if (args.isEmpty()) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId)
.addText("发送`/domain <域名>`即可查询对应的注册和续费价格~") .addText("发送`/domain <域名>`即可查询对应的注册和续费价格~")
.build() .build()
listener.sendGroupMessage(message.groupId, msg) message.reply(msg)
return return
} }
val suffix = args.first() val suffix = args.first()
@@ -103,10 +102,7 @@ class DomainPriceCommand : BaseCommand() {
} else { } else {
this.createDomainPriceCard(suffix, response.realPrice to response.price) this.createDomainPriceCard(suffix, response.realPrice to response.price)
} }
val msg = MessageChain.Builder() val msg = MessageChain.Builder().addImage(cardImage, true).build()
.addAt(message.sender.userId) message.reply(msg)
.addImage(cardImage, true)
.build()
listener.sendGroupMessage(message.groupId, msg)
} }
} }
@@ -69,11 +69,8 @@ class GithubUserCommand : BaseCommand() {
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
if (args.isEmpty()) { if (args.isEmpty()) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder().addText("发送`gh <用户名>`即可查询用户的信息~").build()
.addAt(message.sender.userId) message.reply(msg)
.addText("发送`gh <用户名>`即可查询用户的信息~")
.build()
listener.sendGroupMessage(message.groupId, msg)
return return
} }
val username = args.first() val username = args.first()
@@ -82,10 +79,7 @@ class GithubUserCommand : BaseCommand() {
headers = mapOf("Authorization" to configManager.githubKey) headers = mapOf("Authorization" to configManager.githubKey)
) )
val image = this.createUserInfoCard(userInfo) val image = this.createUserInfoCard(userInfo)
val msg = MessageChain.Builder() val msg = MessageChain.Builder().addImage(image, true).build()
.addReply(message.messageId) message.reply(msg)
.addImage(image, true)
.build()
listener.sendGroupMessage(message.groupId, msg)
} }
} }
@@ -24,13 +24,11 @@ class MCPingCommand : BaseCommand() {
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
if (args.isEmpty()) { if (args.isEmpty()) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId)
.addNewLine()
.addText("使用方法: /mcping <host>:[port] [java|be]") .addText("使用方法: /mcping <host>:[port] [java|be]")
.addNewLine() .addNewLine()
.addText("不添加平台默认Java版~") .addText("不添加平台默认Java版~")
.build() .build()
listener.sendGroupMessage(message.groupId, msg) message.reply(msg)
return return
} }
val platform = if (args.size == 2) args.last() else "java" val platform = if (args.size == 2) args.last() else "java"
@@ -25,11 +25,10 @@ class NslookupCommand : BaseCommand() {
val host = args.joinToString(" ") val host = args.joinToString(" ")
try { try {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addReply(message.messageId)
.addText("域名: ${host}解析后的IP地址为: ") .addText("域名: ${host}解析后的IP地址为: ")
.addText(withContext(Dispatchers.IO) { InetAddress.getByName(host) }.hostAddress) .addText(withContext(Dispatchers.IO) { InetAddress.getByName(host) }.hostAddress)
.build() .build()
listener.sendGroupMessage(message.groupId, msg) message.reply(msg)
} catch (_: UnknownHostException) { } catch (_: UnknownHostException) {
message.reply("未知的主机名: $host") message.reply("未知的主机名: $host")
} catch (e: Exception) { } catch (e: Exception) {
@@ -14,6 +14,7 @@ import cn.rtast.fancybot.util.str.encodeToBase64
import cn.rtast.rob.entity.GroupMessage import cn.rtast.rob.entity.GroupMessage
import cn.rtast.rob.util.BaseCommand import cn.rtast.rob.util.BaseCommand
import cn.rtast.rob.util.ob.MessageChain import cn.rtast.rob.util.ob.MessageChain
import cn.rtast.rob.util.ob.NodeMessageChain
import cn.rtast.rob.util.ob.OneBotListener import cn.rtast.rob.util.ob.OneBotListener
import java.net.URI import java.net.URI
@@ -27,30 +28,35 @@ class PixivCommand : BaseCommand() {
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
if (args.isEmpty()) { if (args.isEmpty()) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId) .addText("发送`/pixiv <id> | rank` 来进行操作哦~")
.addText("发送/pixiv <id> | rank 来进行操作哦~")
.build() .build()
listener.sendGroupMessage(message.groupId, msg) message.reply(msg)
return return
} }
when (val keyword = args.first()) { when (val keyword = args.first()) {
"rank", "排名", "r" -> { "rank", "排名", "r" -> {
val msg = MessageChain.Builder() val node = NodeMessageChain.Builder()
.addAt(message.sender.userId) .addMessageChain(
.addText("今日Pixiv Ranking~") MessageChain.Builder().addText("今日Pixiv Ranking~").build(),
.addNewLine() message.sender.userId
)
val result = Http.get<Ranking>(pixivRankingURL) val result = Http.get<Ranking>(pixivRankingURL)
result.contents.asSequence().take(5).forEach { result.contents.asSequence().take(5).forEach {
try { try {
val msg = MessageChain.Builder()
val imageBase64 = URI(it.getOriginUrl()).toURL().readBytes().encodeToBase64() val imageBase64 = URI(it.getOriginUrl()).toURL().readBytes().encodeToBase64()
msg.addText(it.title) msg.addImage(imageBase64, true)
.addImage(imageBase64, true) .addText("标题: ${it.title}")
.addNewLine() .addNewLine()
.addText("用户: ${it.userName}(${it.userId}) | 作品ID: ${it.illustId}")
.addNewLine()
.addText("日期: ${it.date}")
node.addMessageChain(msg.build(), message.sender.userId)
} catch (_: Exception) { } catch (_: Exception) {
} }
} }
listener.sendGroupMessage(message.groupId, msg.build()) node.addMessageChain(MessageChain.Builder().addText("图片来源: Pixiv").build(), message.sender.userId)
message.reply(node.build())
return return
} }
@@ -58,19 +64,14 @@ class PixivCommand : BaseCommand() {
try { try {
val id = keyword.toLong() val id = keyword.toLong()
val imageBase64 = URI("$imageProxyURL/$id.png").toURL().readBytes().encodeToBase64() val imageBase64 = URI("$imageProxyURL/$id.png").toURL().readBytes().encodeToBase64()
println(imageBase64)
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId)
.addText("来咯~ 你要的图片~~~")
.addImage(imageBase64, true) .addImage(imageBase64, true)
.addText("图片来源: Pixiv")
.build() .build()
listener.sendGroupMessage(message.groupId, msg) message.reply(msg)
} catch (_: Exception) { } catch (_: Exception) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder().addText("输入错误~检查一下有没有输错吧~").build()
.addAt(message.sender.userId) message.reply(msg)
.addText("输入错误~检查一下有没有输错吧~")
.build()
listener.sendGroupMessage(message.groupId, msg)
} }
} }
} }
@@ -20,9 +20,8 @@ class QRCodeCommand : BaseCommand() {
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
val content = args.joinToString(" ") val content = args.joinToString(" ")
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId)
.addImage("https://api.rtast.cn/api/generate_qr?data=$content") .addImage("https://api.rtast.cn/api/generate_qr?data=$content")
.build() .build()
listener.sendGroupMessage(message.groupId, msg) message.reply(msg)
} }
} }
@@ -22,7 +22,7 @@ class NiuziRedeemCommand : BaseCommand() {
override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) { override suspend fun executeGroup(listener: OneBotListener, message: GroupMessage, args: List<String>) {
if (args.isEmpty()) { if (args.isEmpty()) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId) .addReply(message.messageId)
.addText("发送 /rdm <物品名称> 即可兑换哦!") .addText("发送 /rdm <物品名称> 即可兑换哦!")
.addNewLine() .addNewLine()
.addText("发送 /rdm list 即可查看所有可兑换的物品~") .addText("发送 /rdm list 即可查看所有可兑换的物品~")
@@ -35,7 +35,7 @@ class NiuziRedeemCommand : BaseCommand() {
val status = niuziManager.getUser(message.sender.userId) val status = niuziManager.getUser(message.sender.userId)
if (status == null) { if (status == null) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId) .addReply(message.messageId)
.addText("你还没有签到过呢要签到一次才能兑换哦~") .addText("你还没有签到过呢要签到一次才能兑换哦~")
.build() .build()
listener.sendGroupMessage(message.groupId, msg) listener.sendGroupMessage(message.groupId, msg)
@@ -44,19 +44,15 @@ class NiuziRedeemCommand : BaseCommand() {
val item = args.first() val item = args.first()
if (item == "list" || item == "列表") { if (item == "list" || item == "列表") {
val priceTable = val priceTable =
itemManager.items.joinToString("\n") { "[${it.itemNames.joinToString("|")}]:${it.itemPrice}积分" } itemManager.items.joinToString("\n")
val msg = MessageChain.Builder() { "[${it.itemNames.joinToString("|")}]:${it.itemPrice}cm" }
.addAt(message.sender.userId) message.reply(priceTable)
.addNewLine()
.addText(priceTable)
.build()
listener.sendGroupMessage(message.groupId, msg)
return return
} }
val selectedItem = itemManager.items.find { it.itemNames.any { any -> any == item } } val selectedItem = itemManager.items.find { it.itemNames.any { any -> any == item } }
if (selectedItem == null) { if (selectedItem == null) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId) .addReply(message.messageId)
.addText("没有找到你想兑换的东西呢") .addText("没有找到你想兑换的东西呢")
.addNewLine() .addNewLine()
.addText("你可以发送 /rdm list来查看所有可兑换的物品") .addText("你可以发送 /rdm list来查看所有可兑换的物品")
@@ -67,7 +63,7 @@ class NiuziRedeemCommand : BaseCommand() {
val selectedItemPrice = selectedItem.itemPrice val selectedItemPrice = selectedItem.itemPrice
if (selectedItemPrice > status.length) { if (selectedItemPrice > status.length) {
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId) .addReply(message.messageId)
.addText("你的牛子长度不够兑换这个物品呢~") .addText("你的牛子长度不够兑换这个物品呢~")
.addNewLine() .addNewLine()
.addText("你有: ${status.length}cm, 兑换需要: $selectedItemPrice cm~\"") .addText("你有: ${status.length}cm, 兑换需要: $selectedItemPrice cm~\"")
@@ -77,7 +73,7 @@ class NiuziRedeemCommand : BaseCommand() {
} }
val afterStatus = niuziManager.redeemItem(message.sender.userId, selectedItemPrice)?.length!! val afterStatus = niuziManager.redeemItem(message.sender.userId, selectedItemPrice)?.length!!
val msg = MessageChain.Builder() val msg = MessageChain.Builder()
.addAt(message.sender.userId) .addReply(message.messageId)
.addText("兑换成功正在发送奖品中~") .addText("兑换成功正在发送奖品中~")
.addNewLine() .addNewLine()
.addText("你花费了${selectedItemPrice}cm来兑换奖品, 还剩${afterStatus}cm") .addText("你花费了${selectedItemPrice}cm来兑换奖品, 还剩${afterStatus}cm")
@@ -7,18 +7,17 @@
package cn.rtast.fancybot.commands.parse package cn.rtast.fancybot.commands.parse
import cn.rtast.fancybot.entity.bili.ShortUrl import cn.rtast.fancybot.entity.bili.*
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.util.Http import cn.rtast.fancybot.util.Http
import cn.rtast.fancybot.util.Resources import cn.rtast.fancybot.util.Resources
import cn.rtast.fancybot.util.drawCustomImage import cn.rtast.fancybot.util.drawCustomImage
import cn.rtast.fancybot.util.str.encodeToBase64 import cn.rtast.fancybot.util.str.encodeToBase64
import cn.rtast.fancybot.util.str.formatNumber 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.str.setTruncate
import cn.rtast.fancybot.util.toByteArray import cn.rtast.fancybot.util.toByteArray
import cn.rtast.rob.entity.GroupMessage 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.MessageChain
import cn.rtast.rob.util.ob.OneBotListener import cn.rtast.rob.util.ob.OneBotListener
import okhttp3.OkHttpClient 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<CardShare>()
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 videoInfo = this.getVideoStat(bvid)
val viewCount = this.getViewCount(bvid, videoInfo.data.cid) val viewCount = this.getViewCount(bvid, videoInfo.data.cid)
val shortUrl = this.generateShortUrl(bvid, videoInfo.data.aid) val shortUrl = this.generateShortUrl(bvid, videoInfo.data.aid)
@@ -7,16 +7,25 @@
package cn.rtast.fancybot.entity.pixiv package cn.rtast.fancybot.entity.pixiv
import com.google.gson.annotations.SerializedName
data class Ranking( data class Ranking(
val contents: List<Content> val contents: List<Content>
) { ) {
data class Content( data class Content(
val title: String, val title: String,
val tags: List<String>, val tags: List<String>,
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 { 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("/c/240x480/img-master/", "/img-original/")
.replace("_master1200", "") .replace("_master1200", "")
} }
@@ -20,10 +20,7 @@ class BaisiItem : Item() {
override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Double) { override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Double) {
val url = Http.get<Baisi>("https://v2.api-m.com/api/baisi").data val url = Http.get<Baisi>("https://v2.api-m.com/api/baisi").data
val msg = MessageChain.Builder() val msg = MessageChain.Builder().addImage(url).build()
.addAt(message.sender.userId) message.reply(msg)
.addImage(url)
.build()
listener.sendGroupMessage(message.groupId, msg)
} }
} }
@@ -20,10 +20,7 @@ class HeisiItem : Item() {
override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Double) { override suspend fun redeemInGroup(listener: OneBotListener, message: GroupMessage, after: Double) {
val url = Http.get<Baisi>("https://v2.api-m.com/api/heisi").data val url = Http.get<Baisi>("https://v2.api-m.com/api/heisi").data
val msg = MessageChain.Builder() val msg = MessageChain.Builder().addImage(url).build()
.addAt(message.sender.userId) message.reply(msg)
.addImage(url)
.build()
listener.sendGroupMessage(message.groupId, msg)
} }
} }
@@ -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)
}
}
@@ -31,10 +31,7 @@ class SetuItem : Item() {
return return
} }
val imageBase64 = URI(response.urls.large).toURL().readBytes().encodeToBase64() val imageBase64 = URI(response.urls.large).toURL().readBytes().encodeToBase64()
val msg = MessageChain.Builder() val msg = MessageChain.Builder().addImage(imageBase64, true).build()
.addAt(message.sender.userId) message.reply(msg)
.addImage(imageBase64, true)
.build()
listener.sendGroupMessage(message.groupId, msg)
} }
} }