Compare commits
7 Commits
226ef5df24
...
7483988faa
Author | SHA1 | Date |
---|---|---|
InsanusMokrassar | 7483988faa | |
InsanusMokrassar | 2ba35e7b9b | |
InsanusMokrassar | 8634007e06 | |
InsanusMokrassar | 0f77475434 | |
InsanusMokrassar | 6cefafbd09 | |
InsanusMokrassar | 05ddfadb03 | |
InsanusMokrassar | c951f074ae |
|
@ -1,9 +1,10 @@
|
|||
[versions]
|
||||
|
||||
kotlin = "1.7.10"
|
||||
plagubot = "2.2.0"
|
||||
kslog = "0.5.1"
|
||||
plagubot-commands = "0.3.2"
|
||||
plagubot = "2.3.3"
|
||||
kslog = "0.5.2"
|
||||
plagubot-commands = "0.3.4"
|
||||
tgbotapi-libraries = "0.5.4"
|
||||
|
||||
[libraries]
|
||||
|
||||
|
@ -11,6 +12,7 @@ kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin"
|
|||
plagubot = { module = "dev.inmo:plagubot.bot", version.ref = "plagubot" }
|
||||
plagubot-plugin = { module = "dev.inmo:plagubot.plugin", version.ref = "plagubot" }
|
||||
plagubot-commands = { module = "dev.inmo:plagubot.plugins.commands", version.ref = "plagubot-commands" }
|
||||
tgbotapi-libraries-admins = { module = "dev.inmo:tgbotapi.libraries.cache.admins.plagubot", version.ref = "tgbotapi-libraries" }
|
||||
kslog = { module = "dev.inmo:kslog", version.ref = "kslog" }
|
||||
|
||||
# Libs for classpath
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
|
|
@ -24,4 +24,5 @@ dependencies {
|
|||
api libs.plagubot.plugin
|
||||
api libs.kslog
|
||||
api libs.plagubot.commands
|
||||
api libs.tgbotapi.libraries.admins
|
||||
}
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
import dev.inmo.tgbotapi.bot.TelegramBot
|
||||
import dev.inmo.tgbotapi.extensions.api.chat.get.getChatAdministrators
|
||||
import dev.inmo.tgbotapi.types.chat.GroupChat
|
||||
import dev.inmo.tgbotapi.types.chat.User
|
||||
|
||||
suspend fun TelegramBot.userIsAdmin(user: User, chat: GroupChat): Boolean {
|
||||
val chatAdmins = getChatAdministrators(chat)
|
||||
val chatAdminsIds = chatAdmins.map { adminMember -> adminMember.user.id }
|
||||
|
||||
return user.id in chatAdminsIds
|
||||
}
|
|
@ -1,36 +1,37 @@
|
|||
import db.WelcomeTable
|
||||
import dev.inmo.kslog.common.e
|
||||
import dev.inmo.kslog.common.logger
|
||||
import dev.inmo.kslog.common.w
|
||||
import dev.inmo.micro_utils.coroutines.runCatchingSafely
|
||||
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
|
||||
import dev.inmo.plagubot.Plugin
|
||||
import dev.inmo.plagubot.plugins.commands.full
|
||||
import dev.inmo.tgbotapi.bot.exceptions.RequestException
|
||||
import dev.inmo.tgbotapi.extensions.api.answers.answer
|
||||
import dev.inmo.tgbotapi.extensions.api.chat.get.getChatAdministrators
|
||||
import dev.inmo.tgbotapi.extensions.api.edit.edit
|
||||
import dev.inmo.tgbotapi.extensions.api.send.*
|
||||
import dev.inmo.tgbotapi.extensions.api.send.reply
|
||||
import dev.inmo.tgbotapi.extensions.api.send.send
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.*
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitContentMessage
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitMessageDataCallbackQuery
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.*
|
||||
import dev.inmo.tgbotapi.extensions.utils.*
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onNewChatMembers
|
||||
import dev.inmo.tgbotapi.extensions.utils.extensions.sameChat
|
||||
import dev.inmo.tgbotapi.extensions.utils.extensions.sameMessage
|
||||
import dev.inmo.tgbotapi.extensions.utils.formatting.*
|
||||
import dev.inmo.tgbotapi.extensions.utils.types.buttons.*
|
||||
import dev.inmo.tgbotapi.extensions.utils.ifCommonGroupContentMessage
|
||||
import dev.inmo.tgbotapi.extensions.utils.types.buttons.dataButton
|
||||
import dev.inmo.tgbotapi.extensions.utils.types.buttons.flatInlineKeyboard
|
||||
import dev.inmo.tgbotapi.libraries.cache.admins.AdminsCacheAPI
|
||||
import dev.inmo.tgbotapi.types.BotCommand
|
||||
import dev.inmo.tgbotapi.types.MilliSeconds
|
||||
import dev.inmo.tgbotapi.types.chat.GroupChat
|
||||
import dev.inmo.tgbotapi.types.commands.BotCommandScope
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.CommonGroupContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
import dev.inmo.tgbotapi.types.message.content.TextContent
|
||||
import dev.inmo.tgbotapi.utils.*
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.flow.filter
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.json.*
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
import model.ChatSettings
|
||||
import org.jetbrains.exposed.sql.Database
|
||||
import org.koin.core.Koin
|
||||
|
@ -72,24 +73,24 @@ class WelcomePlugin : Plugin {
|
|||
}
|
||||
|
||||
private suspend fun BehaviourContext.handleWelcomeCommand(
|
||||
adminsCacheAPI: AdminsCacheAPI,
|
||||
welcomeTable: WelcomeTable,
|
||||
config: Config,
|
||||
groupMessage: CommonGroupContentMessage<MessageContent>
|
||||
) {
|
||||
val user = groupMessage.user
|
||||
|
||||
if (userIsAdmin(user, groupMessage.chat)) {
|
||||
val sentMessage = sendMessage(
|
||||
if (adminsCacheAPI.isAdmin(groupMessage.chat.id, user.id)) {
|
||||
val sentMessage = send(
|
||||
user,
|
||||
buildEntities {
|
||||
regular("Ok, send me the message which should be used as welcome message for chat ")
|
||||
underline(groupMessage.chat.title)
|
||||
},
|
||||
replyMarkup = flatInlineKeyboard {
|
||||
dataButton("Unset", unsetData)
|
||||
dataButton("Cancel", cancelData)
|
||||
}
|
||||
)
|
||||
) {
|
||||
regular("Ok, send me the message which should be used as welcome message for chat ")
|
||||
underline(groupMessage.chat.title)
|
||||
}
|
||||
|
||||
oneOf(
|
||||
parallel {
|
||||
|
@ -97,7 +98,7 @@ class WelcomePlugin : Plugin {
|
|||
it.data == unsetData && it.message.sameMessage(sentMessage)
|
||||
}.first()
|
||||
|
||||
val answerEntities = buildEntities {
|
||||
edit(sentMessage) {
|
||||
if (welcomeTable.unset(groupMessage.chat.id)) {
|
||||
regular("Welcome message has been removed for chat ")
|
||||
underline(groupMessage.chat.title)
|
||||
|
@ -107,11 +108,6 @@ class WelcomePlugin : Plugin {
|
|||
}
|
||||
}
|
||||
|
||||
edit(
|
||||
sentMessage,
|
||||
answerEntities
|
||||
)
|
||||
|
||||
answer(query)
|
||||
},
|
||||
parallel {
|
||||
|
@ -120,12 +116,11 @@ class WelcomePlugin : Plugin {
|
|||
}.first()
|
||||
|
||||
edit(
|
||||
sentMessage,
|
||||
buildEntities {
|
||||
regular("You have cancelled change of welcome message for chat ")
|
||||
underline(groupMessage.chat.title)
|
||||
}
|
||||
)
|
||||
sentMessage
|
||||
) {
|
||||
regular("You have cancelled change of welcome message for chat ")
|
||||
underline(groupMessage.chat.title)
|
||||
}
|
||||
|
||||
answer(query)
|
||||
},
|
||||
|
@ -142,7 +137,7 @@ class WelcomePlugin : Plugin {
|
|||
)
|
||||
)
|
||||
|
||||
val entities = buildEntities {
|
||||
reply(message) {
|
||||
if (success) {
|
||||
regular("Welcome message has been changed for chat ")
|
||||
underline(groupMessage.chat.title)
|
||||
|
@ -153,17 +148,13 @@ class WelcomePlugin : Plugin {
|
|||
underline(groupMessage.chat.title)
|
||||
}
|
||||
}
|
||||
reply(
|
||||
message,
|
||||
entities
|
||||
)
|
||||
},
|
||||
parallel {
|
||||
while (isActive) {
|
||||
delay(config.recheckOfAdmin)
|
||||
|
||||
if (!userIsAdmin(user, groupMessage.chat)) {
|
||||
edit(sentMessage, "Sorry, but you are not admin in chat ${groupMessage.chat.title} more")
|
||||
if (adminsCacheAPI.isAdmin(groupMessage.chat.id, user.id)) {
|
||||
edit(sentMessage, "Sorry, but you are not admin in chat ${groupMessage.chat.title} anymore")
|
||||
break
|
||||
}
|
||||
}
|
||||
|
@ -179,14 +170,15 @@ class WelcomePlugin : Plugin {
|
|||
val config = koin.get<Config>()
|
||||
|
||||
val welcomeTable = koin.get<WelcomeTable>()
|
||||
val adminsCacheAPI = koin.get<AdminsCacheAPI>()
|
||||
|
||||
onCommand(
|
||||
"welcome",
|
||||
initialFilter = { it.chat is GroupChat }
|
||||
) {
|
||||
it.whenCommonGroupContentMessage { groupMessage ->
|
||||
it.ifCommonGroupContentMessage { groupMessage ->
|
||||
launch {
|
||||
handleWelcomeCommand(welcomeTable, config, groupMessage)
|
||||
handleWelcomeCommand(adminsCacheAPI, welcomeTable, config, groupMessage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -198,15 +190,11 @@ class WelcomePlugin : Plugin {
|
|||
return@onNewChatMembers
|
||||
}
|
||||
|
||||
try {
|
||||
reply(
|
||||
it,
|
||||
chatSettings.sourceChatId,
|
||||
chatSettings.sourceMessageId
|
||||
)
|
||||
} catch (e: RequestException) {
|
||||
welcomeTable.unset(it.chat.id)
|
||||
}
|
||||
reply(
|
||||
it,
|
||||
chatSettings.sourceChatId,
|
||||
chatSettings.sourceMessageId
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue