
com.github.insanusmokrassar.AutoPostBotLikesPlugin.database.LikesPluginMessagesTable.kt Maven / Gradle / Ivy
package com.github.insanusmokrassar.AutoPostBotLikesPlugin.database
import com.github.insanusmokrassar.TelegramBotAPI.types.MediaGroupIdentifier
import com.github.insanusmokrassar.TelegramBotAPI.types.MessageIdentifier
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction
class LikesPluginMessagesTable(
private val likesPluginRegisteredLikesMessagesTable: LikesPluginRegisteredLikesMessagesTable = LikesPluginRegisteredLikesMessagesTable()
) : Table() {
private val id = long("id").primaryKey().autoIncrement()
private val likesId: Column = long("likesId")
private val messageId: Column = long("messageId").uniqueIndex()
private val groupId: Column = text("groupId").nullable()
init {
transaction {
SchemaUtils.createMissingTablesAndColumns(this@LikesPluginMessagesTable)
}
}
operator fun get(likesGroupId: LikesGroupId): List> = transaction {
select {
likesId.eq(likesGroupId)
}.asSequence().map {
it[messageId] to it[groupId]
}.sortedBy {
it.first
}.toList()
}
operator fun contains(groupIdToMessageId: Pair): Boolean = transaction {
select {
likesId.eq(groupIdToMessageId.first).and(messageId.eq(groupIdToMessageId.second))
}.firstOrNull() != null
}
operator fun contains(messageId: MessageIdentifier): Boolean = transaction {
select {
[email protected](messageId)
}.firstOrNull() != null
}
fun registerMessagesForLikeGroup(
likesGroupId: LikesGroupId,
messageIds: List,
mediaGroups: Map/* = emptyMap()*/
): Boolean = transaction {
val realMessagesIds = if (likesGroupId !in messageIds) {
(messageIds + likesGroupId).sorted()
} else {
messageIds
}
val filtered = realMessagesIds.filter {
it !in this@LikesPluginMessagesTable
}
if (filtered.isEmpty()) {
false
} else {
var atLeastOneRegistered = false
filtered.forEach { messageIdentifier ->
atLeastOneRegistered = insert {
it[likesId] = likesGroupId
it[messageId] = messageIdentifier
it[groupId] = mediaGroups[messageIdentifier]
}[id] != null || atLeastOneRegistered
}
return@transaction atLeastOneRegistered
}
}.also {
if (it) {
likesPluginRegisteredLikesMessagesTable.registerMessageId(likesGroupId)
}
}
fun getLikesGroupId(messageId: MessageIdentifier): LikesGroupId? = transaction {
select {
[email protected](messageId)
}.firstOrNull() ?.get(likesId)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy