Files
FancyBot/src/main/kotlin/cn/rtast/fancybot/FancyBot.kt
T

120 lines
4.3 KiB
Kotlin
Raw Normal View History

2024-08-27 18:44:32 +08:00
/*
* Copyright © 2024 RTAkland
* Author: RTAkland
* Date: 2024/8/26
*/
package cn.rtast.fancybot
2024-09-08 15:07:43 +08:00
import cn.rtast.fancybot.commands.*
2024-09-06 10:58:55 +08:00
import cn.rtast.fancybot.commands.misc.BVParseCommand
import cn.rtast.fancybot.commands.misc.ImageURLCommand
import cn.rtast.fancybot.commands.misc.ReverseGIFCommand
2024-08-30 15:05:51 +08:00
import cn.rtast.fancybot.entity.enums.WSType
2024-09-03 14:37:00 +08:00
import cn.rtast.fancybot.items.BaisiItem
import cn.rtast.fancybot.items.HeisiItem
import cn.rtast.fancybot.items.SetuItem
2024-08-30 14:24:46 +08:00
import cn.rtast.fancybot.util.file.ConfigManager
2024-09-08 15:07:43 +08:00
import cn.rtast.fancybot.util.file.NiuziManager
2024-09-04 11:36:41 +08:00
import cn.rtast.fancybot.util.file.SignManager
import cn.rtast.fancybot.util.initDatabase
2024-09-03 16:15:26 +08:00
import cn.rtast.fancybot.util.item.ItemManager
2024-08-27 18:44:32 +08:00
import cn.rtast.rob.ROneBotFactory
2024-09-02 11:30:58 +08:00
import cn.rtast.rob.entity.GetMessage
2024-08-27 18:44:32 +08:00
import cn.rtast.rob.entity.GroupMessage
2024-09-02 11:30:58 +08:00
import cn.rtast.rob.entity.GroupRevokeMessage
2024-09-06 10:58:55 +08:00
import cn.rtast.rob.enums.ArrayMessageType
2024-09-02 11:30:58 +08:00
import cn.rtast.rob.util.ob.MessageChain
2024-08-27 18:44:32 +08:00
import cn.rtast.rob.util.ob.OBMessage
class FancyBot : OBMessage {
2024-09-02 11:30:58 +08:00
2024-09-07 18:07:56 +08:00
override suspend fun onGroupMessage(message: GroupMessage, json: String) {
2024-09-03 12:32:52 +08:00
val sender = message.sender.nickname
val senderId = message.sender.userId
val msg = message.rawMessage
val groupId = message.groupId
println("$sender($senderId: $groupId): $msg")
2024-09-06 10:58:55 +08:00
if (message.rawMessage.startsWith("BV") || message.rawMessage.startsWith("https://www.bilibili.com")) {
BVParseCommand.parse(this, 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!!
2024-09-06 11:18:14 +08:00
if (command.contains("图来") || command.contains("图链")) {
// get image url
2024-09-06 10:58:55 +08:00
this.getMessage(replyId.toString().toLong(), "imageUrl", message.groupId)
}
if (command.contains("倒放") || command.contains("df")) {
// reverse gif
this.getMessage(replyId.toString().toLong(), "reverseGif", message.groupId)
}
2024-09-06 10:58:55 +08:00
}
2024-08-27 18:44:32 +08:00
}
2024-09-07 18:07:56 +08:00
override suspend fun onGroupMessageRevoke(message: GroupRevokeMessage) {
2024-09-02 11:30:58 +08:00
val msg = MessageChain.Builder()
.addText("用户: ${message.userId} 被: ${message.operatorId} 撤回了一条消息")
.addNewLine()
.addText("使用/revoke ${message.messageId} 来获取被撤回的消息")
.build()
this.sendGroupMessage(message.groupId, msg)
}
2024-09-07 18:07:56 +08:00
override suspend fun onGetGroupMessageResponse(message: GetMessage) {
2024-09-06 10:58:55 +08:00
when (message.data.id) {
"revoke" -> AntiRevokeCommand.getMessageCallback(this, message)
"imageUrl" -> ImageURLCommand.callback(this, message)
"reverseGif" -> ReverseGIFCommand.callback(this, message)
2024-09-02 11:30:58 +08:00
}
}
2024-09-07 18:07:56 +08:00
override suspend fun onWebsocketErrorEvent(ex: Exception) {
2024-09-02 11:30:58 +08:00
ex.printStackTrace()
}
2024-08-29 14:36:06 +08:00
}
2024-09-04 20:01:09 +08:00
val configManager = ConfigManager()
val itemManager = ItemManager()
val signManager = SignManager()
2024-09-08 15:07:43 +08:00
val niuziManager = NiuziManager()
2024-08-30 14:24:46 +08:00
2024-09-03 14:37:00 +08:00
val items = listOf(
HeisiItem(),
BaisiItem(),
SetuItem()
)
2024-09-04 20:01:09 +08:00
val commands = listOf(
EchoCommand(), JrrpCommand(),
MusicCommand(), SignCommand(),
RedeemCommand(), MyPointCommand(),
HitokotoCommand(), FKXQSCommand(),
QRCodeCommand(), AntiRevokeCommand(),
MCPingCommand(), HelpCommand(),
2024-09-05 13:40:41 +08:00
WeatherCommand(), CigaretteCommand(),
2024-09-06 10:58:55 +08:00
RemakeCommand(), PixivCommand(),
2024-09-08 15:07:43 +08:00
RUACommand(), NslookupCommand(),
2024-09-09 17:52:41 +08:00
NiuziSignCommand(), MyNiuziCommand(),
2024-09-08 19:29:21 +08:00
JiJianCommand(), LikeMeCommand()
2024-09-04 20:01:09 +08:00
)
2024-08-29 14:36:06 +08:00
suspend fun main() {
2024-08-27 18:44:32 +08:00
val fancyBot = FancyBot()
2024-08-30 15:05:51 +08:00
val workType = configManager.wsType
val accessToken = configManager.accessToken
val rob = if (workType == WSType.Client) {
val address = configManager.wsAddress
ROneBotFactory.createClient(address, accessToken, fancyBot)
} else {
val port = configManager.wsPort
ROneBotFactory.createServer(port, accessToken, fancyBot)
}
initDatabase()
2024-09-03 21:38:50 +08:00
val commandManager = rob.commandManager
2024-09-03 14:37:00 +08:00
commands.forEach { commandManager.register(it) }
items.forEach { itemManager.register(it) }
2024-09-03 21:38:50 +08:00
rob.addListeningGroups(*configManager.listeningGroups.toLongArray())
2024-08-27 18:44:32 +08:00
}