Skip to content

Commit

Permalink
feat(plugins): 支持多数据源
Browse files Browse the repository at this point in the history
  • Loading branch information
bingliran committed Jan 10, 2025
1 parent 76dc5e4 commit 71c16b0
Show file tree
Hide file tree
Showing 25 changed files with 148 additions and 115 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@ import com.blr19c.falowp.bot.system.adapterConfigProperty
import com.blr19c.falowp.bot.system.api.ReceiveMessage
import com.blr19c.falowp.bot.system.json.Json
import com.blr19c.falowp.bot.system.web.webclient
import io.ktor.client.call.body
import io.ktor.client.request.header
import io.ktor.client.request.post
import io.ktor.client.request.setBody
import io.ktor.http.HttpHeaders
import io.ktor.client.call.*
import io.ktor.client.request.*
import io.ktor.http.*
import kotlin.reflect.KClass

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@ package com.blr19c.falowp.bot.adapter.qq.api
import com.blr19c.falowp.bot.adapter.qq.QQApplication.Companion.token
import com.blr19c.falowp.bot.adapter.qq.api.QQBotApiSupport.groupIdList
import com.blr19c.falowp.bot.adapter.qq.op.OpBotApi
import com.blr19c.falowp.bot.adapter.qq.op.qq.OpQQMessageTypeEnum.*
import com.blr19c.falowp.bot.adapter.qq.op.qq.OpQQMessageTypeEnum.MEDIA
import com.blr19c.falowp.bot.adapter.qq.op.qq.OpQQMessageTypeEnum.TEXT
import com.blr19c.falowp.bot.adapter.qq.op.qq.OpQQSendMessage
import com.blr19c.falowp.bot.system.adapterConfigProperty
import com.blr19c.falowp.bot.system.api.*
import com.blr19c.falowp.bot.system.api.ReceiveMessage
import com.blr19c.falowp.bot.system.api.SourceTypeEnum
import com.blr19c.falowp.bot.system.json.Json
import com.blr19c.falowp.bot.system.web.bodyAsJsonNode
import com.blr19c.falowp.bot.system.web.webclient
import com.fasterxml.jackson.databind.JsonNode
import io.ktor.client.call.body
import io.ktor.client.request.header
import io.ktor.client.request.post
import io.ktor.client.request.setBody
import io.ktor.http.HttpHeaders
import io.ktor.client.call.*
import io.ktor.client.request.*
import io.ktor.http.*
import java.util.concurrent.atomic.AtomicInteger
import kotlin.reflect.KClass

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
package com.blr19c.falowp.bot.adapter.qq.op

import com.blr19c.falowp.bot.system.api.AtSendMessage
import com.blr19c.falowp.bot.system.api.BotApi
import com.blr19c.falowp.bot.system.api.ImageSendMessage
import com.blr19c.falowp.bot.system.api.ReceiveMessage
import com.blr19c.falowp.bot.system.api.SendMessageChain
import com.blr19c.falowp.bot.system.api.TextSendMessage
import com.blr19c.falowp.bot.system.api.*
import kotlin.reflect.KClass

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package com.blr19c.falowp.bot.adapter.tg.database

import com.blr19c.falowp.bot.adapter.tg.api.TGBotApiSupport
import com.blr19c.falowp.bot.adapter.tg.vo.TGUserInfoVo
import com.blr19c.falowp.bot.plugins.db.multiTransaction
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction
import org.telegram.telegrambots.meta.api.objects.Message

/**
Expand Down Expand Up @@ -36,38 +36,38 @@ object TGUserInfo : Table("tg_user_info") {
override val primaryKey = PrimaryKey(id, name = "pk_tg_user_info_id")

init {
transaction {
multiTransaction {
SchemaUtils.create(TGUserInfo)
}
}

fun queryAllGroup(): List<Long> = transaction {
return@transaction TGUserInfo.select(sourceId)
fun queryAllGroup(): List<Long> = multiTransaction {
TGUserInfo.select(sourceId)
.where { sourceType inList TGBotApiSupport.groupTypeList }
.map { it[sourceId] }
.toList()
}

fun queryByUserName(userName: String, message: Message? = null): TGUserInfoVo? = transaction {
fun queryByUserName(userName: String, message: Message? = null): TGUserInfoVo? = multiTransaction {
val select = TGUserInfo.selectAll().where { TGUserInfo.userName eq userName }
message?.let { select.andWhere { sourceId eq it.chatId } }
return@transaction select.map { toVo(it) }.firstOrNull()
select.map { toVo(it) }.firstOrNull()
}

fun queryByUserId(userId: Long, message: Message? = null): TGUserInfoVo? = transaction {
fun queryByUserId(userId: Long, message: Message? = null): TGUserInfoVo? = multiTransaction {
val select = TGUserInfo.selectAll().where { TGUserInfo.userId eq userId }
message?.let { select.andWhere { sourceId eq it.chatId } }
return@transaction select.map { toVo(it) }.firstOrNull()
select.map { toVo(it) }.firstOrNull()
}

fun queryBySourceId(sourceId: Long): List<TGUserInfoVo> = transaction {
return@transaction TGUserInfo.selectAll()
fun queryBySourceId(sourceId: Long): List<TGUserInfoVo> = multiTransaction {
TGUserInfo.selectAll()
.where { TGUserInfo.sourceId eq sourceId }
.map { toVo(it) }
.toList()
}

fun saveOrUpdate(message: Message) = transaction {
fun saveOrUpdate(message: Message) = multiTransaction {
val current = queryByUserId(message.from.id, message)
if (current == null) {
TGUserInfo.insert {
Expand All @@ -76,7 +76,7 @@ object TGUserInfo : Table("tg_user_info") {
it[sourceId] = message.chatId
it[sourceType] = message.chat.type
}
return@transaction
return@multiTransaction
}
TGUserInfo.update({ TGUserInfo.id eq current.id }) {
it[userName] = message.from.userName
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.blr19c.falowp.bot.plugins.auth
import com.blr19c.falowp.bot.plugins.auth.database.BanInfo
import com.blr19c.falowp.bot.plugins.auth.database.BanInfo.sourceId
import com.blr19c.falowp.bot.plugins.auth.database.BanInfo.userId
import com.blr19c.falowp.bot.plugins.db.multiTransaction
import com.blr19c.falowp.bot.system.api.ApiAuth
import com.blr19c.falowp.bot.system.listener.hooks.ReceiveMessageHook
import com.blr19c.falowp.bot.system.plugin.Plugin
Expand All @@ -14,7 +15,6 @@ import org.jetbrains.exposed.sql.and
import org.jetbrains.exposed.sql.deleteWhere
import org.jetbrains.exposed.sql.insertIgnore
import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.transactions.transaction

/**
* 禁用用户
Expand All @@ -25,15 +25,15 @@ class Ban {
private val banSet by lazy {
val concurrentSet = ConcurrentSet<String>()
concurrentSet.addAll(
transaction {
multiTransaction {
BanInfo.selectAll().map { it[userId] + it[sourceId] }.toSet()
}
)
concurrentSet
}

private val ban = message(Regex("ban"), auth = ApiAuth.ADMINISTRATOR) {
val banList = transaction {
val banList = multiTransaction {
val banList = mutableListOf<String>()
for (user in this@message.receiveMessage.content.at) {
if (user.auth == ApiAuth.ADMINISTRATOR) continue
Expand All @@ -52,7 +52,7 @@ class Ban {
}

private val unban = message(Regex("unban"), auth = ApiAuth.ADMINISTRATOR) {
val unbanList = transaction {
val unbanList = multiTransaction {
val unbanList = mutableListOf<String>()
for (user in this@message.receiveMessage.content.at) {
BanInfo.deleteWhere {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.blr19c.falowp.bot.plugins.auth.database

import com.blr19c.falowp.bot.plugins.db.multiTransaction
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.Table
import org.jetbrains.exposed.sql.transactions.transaction

/**
* 禁用用户
Expand All @@ -23,7 +23,7 @@ object BanInfo : Table("ban_info") {
override val primaryKey = PrimaryKey(id, name = "pk_ban_info_id")

init {
transaction {
multiTransaction {
uniqueIndex(userId, sourceId)
SchemaUtils.create(BanInfo)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.blr19c.falowp.bot.plugins.bili.database.BiliSubscription
import com.blr19c.falowp.bot.plugins.bili.database.BiliUpInfo
import com.blr19c.falowp.bot.plugins.bili.message.biliMessage
import com.blr19c.falowp.bot.plugins.bili.vo.BiliSubscriptionVo
import com.blr19c.falowp.bot.plugins.db.multiTransaction
import com.blr19c.falowp.bot.system.Log
import com.blr19c.falowp.bot.system.api.*
import com.blr19c.falowp.bot.system.expand.encodeToBase64String
Expand All @@ -23,7 +24,6 @@ import com.google.zxing.client.j2se.MatrixToImageWriter
import com.google.zxing.qrcode.QRCodeWriter
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.deleteWhere
import org.jetbrains.exposed.sql.transactions.transaction
import org.jetbrains.exposed.sql.update
import java.io.ByteArrayOutputStream
import javax.imageio.ImageIO
Expand Down Expand Up @@ -93,7 +93,7 @@ class Subscription : Log {
.build()
log().info("定时查询动态/直播-${biliUpInfoVo.name}猪开播啦!")
send(subscriptionList, message)
transaction {
multiTransaction {
BiliUpInfo.updateLiveStatus(biliUpInfoVo.mid, true)
BiliDynamic.insert(biliUpInfoVo.mid, prePushDynamic.id)
}
Expand Down Expand Up @@ -139,7 +139,7 @@ class Subscription : Log {
log().info("更新up信息")
for (biliUpInfo in BiliUpInfo.queryAll()) {
val userInfo = client.getUserInfo(biliUpInfo.mid.toLong())
if (biliUpInfo.name != userInfo.name) transaction {
if (biliUpInfo.name != userInfo.name) multiTransaction {
BiliUpInfo.update({ BiliUpInfo.mid eq biliUpInfo.mid }) {
it[name] = userInfo.name
}
Expand All @@ -162,7 +162,7 @@ class Subscription : Log {
.map { it.id }
val roomId = userInfo.liveRoom?.roomId ?: ""
val midString = userInfo.mid
transaction {
multiTransaction {
dynamicList.forEach { BiliDynamic.insert(midString, it) }
BiliSubscription.insert(
midString,
Expand All @@ -189,7 +189,7 @@ class Subscription : Log {
return@message this.sendReply("此订阅不存在")
}
val upInfo = BiliUpInfo.queryByMid(subscription.mid)
transaction {
multiTransaction {
BiliSubscription.deleteWhere { id eq subscription.id }
BiliUpInfo.queryByMid(subscription.mid)
if (subscriptionList.size == 1) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.blr19c.falowp.bot.plugins.bili.api

import com.blr19c.falowp.bot.plugins.bili.database.BiliCookie
import com.blr19c.falowp.bot.plugins.db.multiTransaction
import com.blr19c.falowp.bot.system.Log
import com.blr19c.falowp.bot.system.json.Json
import io.ktor.client.plugins.cookies.*
Expand All @@ -12,14 +13,13 @@ import kotlinx.coroutines.sync.withLock
import org.jetbrains.exposed.sql.deleteAll
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.transactions.transaction
import java.util.concurrent.atomic.AtomicLong
import kotlin.math.min

object DatabaseCookiesStorage : CookiesStorage, Log {

private val container by lazy {
transaction {
multiTransaction {
BiliCookie.selectAll()
.map { Json.readObj<Cookie>(it[BiliCookie.cookie]) }
.toMutableList()
Expand All @@ -37,7 +37,7 @@ object DatabaseCookiesStorage : CookiesStorage, Log {
oldestCookie.set(expires)
}
}
transaction {
multiTransaction {
BiliCookie.deleteAll()
container.map { Json.toJsonString(it) }
.forEach { cookieJson -> BiliCookie.insert { it[BiliCookie.cookie] = cookieJson } }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.blr19c.falowp.bot.plugins.bili.database

import com.blr19c.falowp.bot.plugins.db.multiTransaction
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.Table
import org.jetbrains.exposed.sql.transactions.transaction

/**
* b站登录的cookie
Expand All @@ -17,7 +17,7 @@ object BiliCookie : Table("bili_cookie") {
override val primaryKey = PrimaryKey(id, name = "pk_bili_cookie_id")

init {
transaction {
multiTransaction {
SchemaUtils.create(BiliCookie)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.blr19c.falowp.bot.plugins.bili.database

import com.blr19c.falowp.bot.plugins.db.multiTransaction
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.Table
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.transactions.transaction

/**
* b站动态
Expand All @@ -26,20 +26,20 @@ object BiliDynamic : Table("bili_dynamic") {
override val primaryKey = PrimaryKey(id, name = "pk_bili_dynamic_id")

init {
transaction {
multiTransaction {
SchemaUtils.create(BiliDynamic)
}
}


fun queryByMid(mid: String): List<String> {
return transaction {
return multiTransaction {
BiliDynamic.selectAll().where(BiliDynamic.mid eq mid).map { it[dynamic] }.toList()
}
}

fun insert(mid: String, dynamic: String) {
transaction {
multiTransaction {
BiliDynamic.insert {
it[BiliDynamic.mid] = mid
it[BiliDynamic.dynamic] = dynamic
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.blr19c.falowp.bot.plugins.bili.database

import com.blr19c.falowp.bot.plugins.bili.vo.BiliSubscriptionVo
import com.blr19c.falowp.bot.plugins.db.multiTransaction
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.Table
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.transactions.transaction

/**
* b站订阅
Expand Down Expand Up @@ -35,14 +35,14 @@ object BiliSubscription : Table("bili_subscription") {
override val primaryKey = PrimaryKey(id, name = "pk_bili_subscription_id")

init {
transaction {
multiTransaction {
uniqueIndex(mid, sourceId)
SchemaUtils.create(BiliSubscription)
}
}

fun insert(mid: String, sourceId: String, sourceType: String) {
transaction {
multiTransaction {
BiliSubscription.insert {
it[BiliSubscription.mid] = mid
it[BiliSubscription.sourceId] = sourceId
Expand All @@ -52,7 +52,7 @@ object BiliSubscription : Table("bili_subscription") {
}

fun queryByMid(mid: String): List<BiliSubscriptionVo> {
return transaction {
return multiTransaction {
BiliSubscription.selectAll().where(BiliSubscription.mid eq mid).map {
BiliSubscriptionVo(
it[BiliSubscription.id],
Expand All @@ -65,7 +65,7 @@ object BiliSubscription : Table("bili_subscription") {
}

fun queryBySourceId(sourceId: String): List<BiliSubscriptionVo> {
return transaction {
return multiTransaction {
BiliSubscription.selectAll().where(BiliSubscription.sourceId eq sourceId).map {
BiliSubscriptionVo(
it[BiliSubscription.id],
Expand Down
Loading

0 comments on commit 71c16b0

Please sign in to comment.